1. 程式人生 > >verilog中if-else和case的比較

verilog中if-else和case的比較

比較if-else_if-else和case:

1、if(a==2'b00)

            語句1;

     else if(a==2'b01)

            語句2;

     else

            語句3;

     case(a)

        2'b00:    語句1;

        2'b01:    語句2;

        default:    語句3;

     endcase

    在這種情況下,判斷條件中只有一個能滿足,不管先判斷哪個條件,都不影響結果,即可視為不存在優先順序關係。兩者綜合後的RTL和Tech結果一樣。

2、if(a==1'b1)

            語句1;

      else if(b==1'b1)

            語句2;

      else

            語句3;

      case({a,b})

            2'b10:        語句1;

            2'b01:        語句2;

            default:      語句3;

     endcase

    這種情況下,將else-if中的條件視為b==1'b1&&a!=1'b1,兩者邏輯就不一樣,沒有比較的必要。case語句可改為如下形式。

3、case({a,b})

            2'b10:        語句1;

            2'b01:        語句2;

            2'b11:        語句1;

            2'b00:        語句3;

     endcase

    這種情況下,RTL結果可能會不一樣,但Tech結果一樣。

其他:

1、無復位置位端
2、同步置位或復位(if語句將0或1賦給輸出),將最外層if語句作為復位或置位端。 FDR(同步D觸發器)
3、非同步復位或置位,必須要有if(!rst_n) data_out <= 1'b0 來複位或置位(1置位0復位) FDC(非同步D觸發器)

4、非同步復位端接入了可變的數值。LPM_DFF

有點亂,以後有空再整理。