條件語句可以分為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