Verilog語(yǔ)言中case、casex、casez的用法和區(qū)別
casez與casex語(yǔ)句是case語(yǔ)句的兩種變體, 在寫(xiě)testbench時(shí)用到。
一、case、casex、casez的區(qū)別
下表給出case、casex、casez的真值表:
在case語(yǔ)句中,敏感表達(dá)式中與各項(xiàng)值之間的比較是一種全等比較,每一位都相同才認(rèn)為匹配。
在casez語(yǔ)句中,如果分支表達(dá)式某些位的值為高阻z,那么對(duì)這些位的比較就會(huì)忽略,不予考慮,而只關(guān)注其他位的比較結(jié)果。
在casex語(yǔ)句中,則把這種處理方式進(jìn)一步擴(kuò)展到對(duì)x的處理,即如果比較雙方有一方的某些位的值是z或x,那么這些位的比較就不予考慮。
二、case/casez/casex 在simulation/synthesis的區(qū)別
有的網(wǎng)上說(shuō)casex和casez屬于不可綜合語(yǔ)句,這是針對(duì)一般電路不會(huì)出現(xiàn)x狀態(tài)來(lái)說(shuō)的,但是綜合工具并不會(huì)對(duì)x,z認(rèn)識(shí)這個(gè)狀態(tài),所以綜合出來(lái)的電路是一樣的。
使用過(guò)程中許需要注意的問(wèn)題:
1)一般經(jīng)常使用到的是casez語(yǔ)句,最好少用casex
2)case/casez/casex其實(shí)都是可綜合的
3)在電路中,可以用?來(lái)表示無(wú)關(guān)值的z
4)case的描述,匹配都是從上到下進(jìn)行的
仿真的不同
1)對(duì)于case
case (sel)?
2'b00:? ? ? y = a;?
2'b01:? ? ? y = b;?
2'bx0:? ? ? y = c;?
2'b1x:? ? ? y = d;?
2'bz0:? ? ? y = e;?
2'b1?:? ? ? y = f;?
default :? ?y = g;?
endcase
對(duì)于case來(lái)說(shuō),每一種情況都會(huì)識(shí)別(1/0/z/x)
當(dāng)sel的狀態(tài)是一下情況時(shí),會(huì)出現(xiàn)以下結(jié)果
2)對(duì)于casez
casez (sel)?
2'b00:? ? ? y = a;?
2'b01:? ? ? y = b;?
2'bx0:? ? ? y = c;?
2'b1x:? ? ? y = d;?
2'bz0:? ? ? y = e;?
2'b1?:? ? ? y = f;?
default:? ? y = g;?
endcase
首先,case的描述,匹配都是從上到下進(jìn)行的,如果使用了casez,看上面的casez的列表,只要輸入有z/?的話,就能和任意匹配。
3)對(duì)于casex
casex (sel)?
2'b00? ?:? ?y = a;?
2'b01? ?:? ?y = b;?
2'bx0? ?:? ?y = c;?
2'b1x? ?:? ?y = d;?
2'bz0? ?:? ?y = e;?
2'b1?? ?:? ?y = f;?
default :? ?y = g;?
endcase
casex也是從上到下匹配,當(dāng)出現(xiàn)x/z/?的輸入的時(shí)候,都不會(huì)care,只管不是大大情況來(lái)匹配
綜合的不同
綜合的時(shí)候,因?yàn)榫C合工具其實(shí)都不會(huì)管你什么x/z/?,對(duì)于綜合工具來(lái)說(shuō)是一樣的,所以case/casez/casex不同寫(xiě)法的綜合結(jié)果,例子都是同樣的。
例一:
case (sel)?
2'b00? ?:? ?mux_out = mux_in[0];?
2'b01? ?:? ?mux_out = mux_in[1];?
2'b1?? ?:? ?mux_out = mux_in[2];?
default :? ?mux_out = mux_in[3];?
endcase?
例二:
case (sel)?
2'b00? ?:? ?mux_out = mux_in[0];?
2'b01? ?:? ?mux_out = mux_in[1];?
2'b1x? ?:? ?mux_out = mux_in[2];?
default :? ?mux_out = mux_in[3];?
endcase
這倆個(gè)例子的結(jié)果是一樣的。
case(不是casez/casex的時(shí)候)的列表里面的x和z,都被綜合工具認(rèn)為是不可達(dá)到的狀態(tài)就被去掉了。casez和casex里面的x/z都被認(rèn)為是don’t care。
對(duì)于綜合、仿真的結(jié)果
1)在實(shí)際寫(xiě)代碼的時(shí)候,如果使用case的時(shí)候,盡量不要用x/z/?,綜合工具也會(huì)不care
2)casez和casex綜合的結(jié)果是一致的。
3)casez稍好用一些,因?yàn)樗梢杂脕?lái)代表don’t care的值
4)最重要的一點(diǎn)就是,casez和casex其實(shí)沒(méi)有孰優(yōu)孰劣
5)casez語(yǔ)句用來(lái)處理不考慮高阻值z(mì)的比較過(guò)程,casex語(yǔ)句則將高阻值z(mì)和不定值都視為不必關(guān)心的情況。所謂不必關(guān)心的情況,即在表達(dá)式進(jìn)行比較時(shí),不將該位的狀態(tài)考慮在內(nèi)。這樣在case語(yǔ)句表達(dá)式進(jìn)行比較時(shí),就可以靈活地設(shè)置以對(duì)信號(hào)的某些位進(jìn)行比較。
編輯:黃飛
?
評(píng)論
查看更多