Verilog語法--條件語句


條件語句可以分為if_else語句和case語句兩張部分。

 

A)if_else語句

三種表達形式

1) if(表達式)          2)if(表達式)               3)if(表達式1)

            語句1;                    語句1;                           語句1;

                                    else                              else   if(表達式2)    語句2;

                                          語句2;                   else   if(表達式3)    語句3;

                                                                              ........

                                                                       else   if(表達式n)     語句n;

說明:

1)3種形式的if語句后面都有表達式,一般為邏輯表達式或關系表達式。當表達式的值為1,按真處理,若為0、x、z,按假處理。

2)在每一個else前面,即上面的語句后都有分號(除非上面是begin_end塊)。else語句不能單獨使用,它是if語句的一部分。

3)if 和else后面都可以包含一個內嵌的操作語氣,也可以有多個語句,此時可以用begin_end將它們包含起來成為一個復合塊語句;(end后不需要再加分號)

4)允許一定形式的表達式的簡寫方式。如:if(expression)等同於 if(expression==1)

5)if語句可以嵌套,即 if 語句中可以再包含if語句,但是應該注意else總是與它上面的最近的 if 進行配對。

如果不希望else與最近的 if 配對,可以采用begin_end進行分割,如:

if ()

     begin

         if()  語句1;

     end

else

     語句2;

這里的else與第一個 if 配對,因為第二個 if 被限制在了begin_end內部。

 

注意:

條件語句必須在過程塊中使用。所謂過程塊是指由 initial 和always語句引導的執行語句集合。除了這兩種語句引導的begin_end塊中可以編寫條件語句外,模塊中的其他地方都不能編寫。

在always塊內,若果在給定的條件下變量沒有賦值,這個變量將保持原值,也就是說會生成一個鎖存器。

 

B)case語句

 case語句是一種多分支選擇語句,if只有兩個分支可以選擇,但是case可以直接處理多分支語句。

1)case(表達式)      <case分支項>  endcase

2)casex(表達式)    <case分支項>  endcase

3)casez(表達式)    <case分支項>  endcase

case分支項的一般格式如下:

分支表達式:             語句;

默認項(default)      語句;

1)case后括號內的表達式稱為控制表達式,分支項后的表達式稱作分支表達式,又稱作常量表達式。控制表達式通常表示為控制信號的某些位,分支表達式則用這些控制信號的具體狀態值來表示。

2)當控制表達式和分支表達式的值相等時,就執行分支表達式后的語句。

3)default項可有可無,一個case語句里只准有一個default項。(為了防止程序自動生成鎖存器,一般都要設置default項,P57)

4)每一個case的表達是必須各不相同,執行完case分支項的語句后,跳出case塊。

5)case語句的所有表達式的值的位寬必須相等。

                                               case casex 和 casez 的真值 

case 0   1   x   z   casez 0    1   x   z   casex 0   1   x   z
0 1   0   0   0   0 1   0   0   1   0 1   0   1   1
1 0   1   0   0   1 0   1   0   1   1 0   1   1   1
x 0   0   1   0   x 0   0   1   1   x  1   1   1   1 
z 0   0   0   1   z 1   1   1   1   z 1   1   1   1

 

 

 

 

 

casex和casez是case的特殊情況,用來處理過程中不必考慮的情況(don't care condition)。case用來處理不用考慮高阻值,casex表示不用考慮高阻值和不定值。

上述表格說明casez中,可以將z任意匹配,casex中可以將x任意匹配。在case的分支語句中,從上到下開始匹配,輸出第一個匹配成功的值。

有關casex 和casez的詳細對比請參照http://www.cnblogs.com/poiu-elab/archive/2012/11/02/2751323.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM