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

發佈了233 篇原創文章 · 獲贊 195 · 訪問量 55萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章