1、語(yǔ)法說明
在rtl仿真中,有四種狀態(tài),分別是0、1、x(unknown values)和z(high-impedance values)。
case 結(jié)構(gòu)體中:0,1,X與Z是四種不同的狀態(tài),case條件比較時(shí)會(huì)檢測(cè)比較雙方每個(gè)bit是否完全相等。
casez 結(jié)構(gòu)體中:把Z當(dāng)做don’t care conditions,case條件比較時(shí),比較雙方存在Z值的bit位不參與比較 ,其他比特位相等則視為條件命中
casex 結(jié)構(gòu)體中:把Z和X當(dāng)做don’t care conditions,case條件比較時(shí),比較雙方存在Z或者X的bit位不參與比較,其他比特位相等則視為條件命中
在SystemVerilog和Verilog中,
case、casex、casez都是可綜合的
在casex、casez中推薦使用 ?來替換Z和X
case、casex、casez語(yǔ)句中,如果命中多個(gè)case條件,則執(zhí)行命中的第一個(gè)case
2、案例解析
always@(*)
begin
case(sel[1:0])
2'b00: data1 = 3'd0 ;
2'b01: data1 = 3'd1 ;
2'b10: data1 = 3'd2 ;
2'b11: data1 = 3'd3 ;
2'b1z: data1 = 3'd4 ;
2'b1x: data1 = 3'd5 ;
default: data1 = 3'd7 ;
endcase
end
always@(*)
begin
casez(sel[1:0])
2'b00: data2 = 3'd0 ;
2'b01: data2 = 3'd1 ;
2'b10: data2 = 3'd2 ;
2'b11: data2 = 3'd3 ;
2'b1z: data2 = 3'd4 ;
2'b1x: data2 = 3'd5 ;
default: data2 = 3'd7 ;
endcase
end
always@(*)
begin
casex(sel[1:0])
2'b00: data3 = 3'd0 ;
2'b01: data3 = 3'd1 ;
2'b10: data3 = 3'd2 ;
2'b11: data3 = 3'd3 ;
2'b1z: data3 = 3'd4 ;
2'b1x: data3 = 3'd5 ;
default: data3 = 3'd7 ;
endcase
end
always@(*)
begin
casez(sel[1:0])
2'b00: data4 = 3'd0 ;
2'b01: data4 = 3'd1 ;
2'b10: data4 = 3'd2 ;
2'b11: data4 = 3'd3 ;
2'b1?: data4 = 3'd4 ;
2'b1x: data4 = 3'd5 ;
default: data4 = 3'd7 ;
endcase
end
always@(*)
begin
casex(sel[1:0])
2'b00: data5 = 3'd0 ;
2'b01: data5 = 3'd1 ;
2'b10: data5 = 3'd2 ;
2'b11: data5 = 3'd3 ;
2'b1?: data5 = 3'd4 ;
2'b1x: data5 = 3'd5 ;
default: data5 = 3'd7 ;
endcase
end
case語(yǔ)句中4種狀態(tài)都會(huì)比較匹配sel[1:0]為1’b1z時(shí),命中了[2'b1z: data2 = 3'd4 ;],data1被賦值3’d4
sel[1:0]為1’b1x時(shí),命中了[2'b1x: data2 = 3'd5 ;],data1被賦值3’d5
casez語(yǔ)句中Z狀態(tài)會(huì)被忽略,不做比較,X依舊進(jìn)行比較
sel[1:0]為1’b1z時(shí),實(shí)際僅比較sel[1],命中了[2'b10: data2 = 3'd2 ;]和[2'b1z: data2 = 3'd4; ],根據(jù)優(yōu)先級(jí)原則, data2被賦值3’d2
sel[1:0]為1’b1x時(shí),依舊比較sel[1:0],命中了[2'b1x: data2 = 3'd5 ;], data2被賦值3’d5
casex語(yǔ)句中Z和X狀態(tài)會(huì)被忽略,不做比較
sel[1:0]為1’b1z時(shí),實(shí)際僅比較sel[1],命中了[2'b10: data2 = 3'd2 ;], data3被賦值3’d2
sel[1:0]為1’b1x時(shí),實(shí)際僅比較sel[1],命中了[2'b10: data2 = 3'd2 ;], data3被賦值3’d2
casez語(yǔ)句中采用?替換Z狀態(tài)
sel[1:0]為1’b1z時(shí),實(shí)際僅比較sel[1],命中了[2'b10: data2 = 3'd2 ;], data4被賦值3’d2
sel[1:0]為1’b1x時(shí),同時(shí)命中了[2'b1?: data4 = 3'd4 ;]和[2'b1x: data4 = 3'd5 ;],根據(jù)優(yōu)先級(jí)原則,data4被賦值3’d4
casex語(yǔ)句中采用?替換Z狀態(tài)
sel[1:0]為1’b1z時(shí),實(shí)際僅比較sel[1],命中了[2'b10: data2 = 3'd2 ;]、[2'b1?: data5 = 3'd4 ;]、[2'b1x: data5 = 3'd5 ;],根據(jù)優(yōu)先級(jí)原則,data5被賦值3’d2
sel[1:0]為1’b1x時(shí),實(shí)際僅比較sel[1],命中了[2'b10: data2 = 3'd2 ;]、[2'b1?: data5 = 3'd4 ;]、[2'b1x: data5 = 3'd5 ;],根據(jù)優(yōu)先級(jí)原則,data5被賦值3’d2

3、Do-not-care values 參考說明
SystemVerilog(IEEE Std 1800-2017)和verilog(IEEE P1364-2005)標(biāo)準(zhǔn)關(guān)于casez、casex的描述是一致的:截圖如下:

審核編輯:湯梓紅
-
仿真
+關(guān)注
關(guān)注
52文章
4400瀏覽量
137628 -
Verilog
+關(guān)注
關(guān)注
30文章
1370瀏覽量
114082 -
RTL
+關(guān)注
關(guān)注
1文章
393瀏覽量
62371 -
語(yǔ)法
+關(guān)注
關(guān)注
0文章
44瀏覽量
10474 -
結(jié)構(gòu)體
+關(guān)注
關(guān)注
1文章
131瀏覽量
11296
原文標(biāo)題:verilog語(yǔ)法-淺談case casez casex
文章出處:【微信號(hào):處芯積律,微信公眾號(hào):處芯積律】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
零基礎(chǔ)學(xué)FPGA(四)Verilog語(yǔ)法基基礎(chǔ)基礎(chǔ)(中)
新人求教關(guān)于case的語(yǔ)法問題:case里2個(gè)端口是什么意思?
在SpinalHDL中關(guān)于casez的使用
verilog中if與case語(yǔ)句不完整產(chǎn)生鎖存器的原因分析
關(guān)于verilog的學(xué)習(xí)經(jīng)驗(yàn)簡(jiǎn)單分享
FPGA代碼經(jīng)驗(yàn) case,casez,casex語(yǔ)句
一文淺析case、casex、casez區(qū)別
Verilog語(yǔ)法之generate for、generate if、generate case
Verilog中的If語(yǔ)句和case語(yǔ)句介紹
CASE:創(chuàng)建多路分支

verilog語(yǔ)法說明之case casez case
評(píng)論