0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

考慮x和z在verilog條件語句中的使用情況

全棧芯片工程師 ? 來源:全棧芯片工程師 ? 2023-11-02 09:40 ? 次閱讀

首先,考慮x和z在verilog條件語句中的使用情況,然后我們?cè)倏紤]在verilog中用x和z給其他reg/wire賦值的情況。

(一)首先,考慮x和z在verilog條件語句中的使用情況。


Verilogcase語句中,2'b1x和2’b0x造成的仿真器、綜合器的mismatch,

舉個(gè)例子:

Simulators:

match2'b1xto11or10

match2’b0xto01or00

HDLCompilertool

both2'b1xand2’b0xareevaluatedtofalse. Becauseofthesimulationandsynthesismismatches,theHDLCompilertoolissuesanELAB-310warning.

case(A)
2'b1x:...//Youwant2'b1xtomatch11and10but
//HDLCompileralwaysevaluatesthiscomparisontofalse
2'b0x:...//youwant2'b0xtomatch00and01but
//HDLCompileralwaysevaluatesthiscomparisontofalse
default:...
endcase

官方說明:我們可以得到兩點(diǎn)信息

98dd139e-78c9-11ee-939d-92fbcf53809c.png



第一點(diǎn):


Asimulatorevaluatesanunknown(x)orhighimpedance(z)asadistinctvaluedifferentfrom0or1;however,anxorzvaluebecomesa0or1duringsynthesis.



第二點(diǎn):



DC工具會(huì)直接將verilog比較判斷語句中的xorz直接理解為false。所以禁止在verilog比較判斷語句中使用xorz。


參見如下代碼,DC工具會(huì)理解if(A==1'bx)為false,因此DC會(huì)直接assigns1toregB并且報(bào)ELAB-310warning.

moduletest(
inputA,
outputregB
);
always@(*)begin
if(A==1'bx)
B=0;
else
B=1;
end
endmodule



實(shí)際綜合如下,果不其然,有意思哇!后面幾個(gè)稍微復(fù)雜點(diǎn)的代碼更有趣!

99049b62-78c9-11ee-939d-92fbcf53809c.png




再補(bǔ)充z的使用:

990c9556-78c9-11ee-939d-92fbcf53809c.png

結(jié)論:仿真工具可以理解x、z、0、1狀態(tài),但是綜合工具遇到帶x、z的比較判斷條件時(shí),直接理解該條件為false。



(二)然后我們?cè)倏紤]在verilog中用x和z給其他reg/wire賦值的情況。




案例1:z賦值是沒問題的,會(huì)綜合出來三態(tài)門,參見如下代碼1:

modulethree_state(ENABLE,IN1,OUT1);
inputIN1,ENABLE;
outputregOUT1;


always@(ENABLEorIN1)begin
if(ENABLE)
OUT1=IN1;
else
OUT1=1'bz;//assignshigh-impedancestate
end
endmodule

99341a40-78c9-11ee-939d-92fbcf53809c.png

994c588a-78c9-11ee-939d-92fbcf53809c.png

Logicalbufferofasingleinputwithanactive-highoutputenable.Theoutputis3-statedwhentheenableislow.




真值表:

9959323a-78c9-11ee-939d-92fbcf53809c.png



案例2:z賦值是沒問題的,會(huì)綜合出來三態(tài)門,參見如下代碼2:

modulex_state(IN1,OUT1);
input[1:0]IN1;
outputreg[1:0]OUT1;


always@(*)begin
case(IN1)
2'b00:OUT1=2'b00;
2'b01:OUT1=2'b01;
2'b10:OUT1=2'b10;
default:OUT1=2'bzz;//assignshigh-impedancestate
endcase
end
endmodule

995e6890-78c9-11ee-939d-92fbcf53809c.png

9971e6c2-78c9-11ee-939d-92fbcf53809c.png




再看X賦值是什么情況。


案例1:利用DC綜合工具實(shí)測(cè)如下代碼綜合效果:

modulex_state(IN1,OUT1);
input[1:0]IN1;
outputreg[1:0]OUT1;


always@(*)begin
case(IN1)
2'b00:OUT1=2'b01;
2'b11:OUT1=2'b00;
default:OUT1=2'bxx;
endcase
end
endmodule

997c693a-78c9-11ee-939d-92fbcf53809c.png

可見,x賦值直接被DC工具省略,也沒有l(wèi)atch出現(xiàn)。

案例2:

modulex_state(IN1,OUT1);
input[1:0]IN1;
outputreg[1:0]OUT1;


always@(*)begin
case(IN1)
2'b00:OUT1=2'b00;
2'b01:OUT1=2'b01;
2'b10:OUT1=2'b10;
default:OUT1=2'bxx;//assignshigh-impedancestate
endcase
end
endmodule

999f6e08-78c9-11ee-939d-92fbcf53809c.png

可見,x賦值直接被DC工具省略,也沒有l(wèi)atch出現(xiàn)。

案例3:注釋掉default,非full_case,必然出現(xiàn)latch!

modulex_state(IN1,OUT1);
input[1:0]IN1;
outputreg[1:0]OUT1;


always@(*)begin
case(IN1)
2'b00:OUT1=2'b00;
2'b01:OUT1=2'b01;
2'b10:OUT1=2'b10;
endcase
end
endmodule

99a42da8-78c9-11ee-939d-92fbcf53809c.png

因此,盡管x賦值直接被DC工具省略,也沒有l(wèi)atch出現(xiàn),但是仍然建議不要使用x賦值,除非full_case情況下,不會(huì)執(zhí)行default條件下的x賦值分支,寫x賦值可以用于仿真查看波形,如下代碼所示:

always@(*)begin
case(pmu_state)
//Duringpowerdownsequence,shiftingpatterntoactive
//ISOLATE->RETAIN->PWRDOWN
//andstayunchangeduringpowereddownstate
`ARM_POWERING_DOWN,`ARM_POWERED_DOWN:begin
nxt_isolate_n=1'b0;
nxt_retain_n=ISOLATEn;
nxt_pwrdown=~RETAINn;
end


//Duringpowerupsequence,shiftingpatterntoactive
//PWRDOWN->RETAIN->ISOLATE
`ARM_POWERING_UP,`ARM_POWERED_UP:begin
nxt_pwrdown=1'b0;
nxt_retain_n=~PWRDOWN;
nxt_isolate_n=RETAINn;
end


//PropagateX
default:begin
nxt_isolate_n=1'bX;
nxt_retain_n=1'bX;
nxt_pwrdown=1'bX;
end
endcase
end

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 仿真器
    +關(guān)注

    關(guān)注

    14

    文章

    1014

    瀏覽量

    83591
  • Verilog
    +關(guān)注

    關(guān)注

    28

    文章

    1343

    瀏覽量

    109925
  • HDL
    HDL
    +關(guān)注

    關(guān)注

    8

    文章

    326

    瀏覽量

    47307
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4722

    瀏覽量

    68234
  • 綜合器
    +關(guān)注

    關(guān)注

    0

    文章

    9

    瀏覽量

    6436

原文標(biāo)題:Verilog中,2'b1x和2’b0x造成的仿真器、綜合器的mismatch?!

文章出處:【微信號(hào):全棧芯片工程師,微信公眾號(hào):全棧芯片工程師】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    CUBEIDE運(yùn)行完可以看RAM的使用情況,運(yùn)行中可以實(shí)時(shí)查看RAM的使用情況嗎?

    CUBEIDE運(yùn)行完可以看RAM的使用情況,運(yùn)行中可以實(shí)時(shí)查看RAM的使用情況嗎?以及負(fù)載情況? 圖片是運(yùn)行完可以看RAM使用情況,是否可以運(yùn)行中實(shí)時(shí)查看?是不是cubemonito
    發(fā)表于 03-12 07:56

    如何查看RAM使用情況?

    嗨, 我正在使用STM32L053 Nucleo,我已經(jīng)為它運(yùn)行了一些代碼,我希望做一個(gè)RAM估計(jì)來查看當(dāng)前固件的RAM使用情況。如何查看RAM使用情況? 問候#記憶
    發(fā)表于 08-05 10:08

    Android應(yīng)用的內(nèi)存使用情況檢查方法

    如何檢查 Android 應(yīng)用的內(nèi)存使用情況
    發(fā)表于 03-30 13:36

    電池使用情況統(tǒng)計(jì)信息

    電池使用情況信息根據(jù)電池使用情況統(tǒng)計(jì)信息和電源配置文件中的值計(jì)算得出。電池使用情況統(tǒng)計(jì)信息框架可通過跟蹤設(shè)備組件不同狀態(tài)下維持的時(shí)間來自動(dòng)確定電池
    發(fā)表于 12-31 07:01

    如何檢查imx6中的GPU使用情況

    板上運(yùn)行 Qt6 應(yīng)用程序,想觀察該 Qt6 應(yīng)用程序?qū)?GPU 的使用情況。 如何檢查應(yīng)用程序的 GPU 使用情況或該應(yīng)用程序是否真的使用 GPU?我們可以查看和確認(rèn)該
    發(fā)表于 05-22 07:04

    SoC如何查看內(nèi)存使用情況

    查看系統(tǒng)內(nèi)存: free -h 查看ION內(nèi)存 NPU內(nèi)存使用情況: cat /sys/kernel/debug/ion/bm_npu_heap_dump/summary | head -2VPU
    發(fā)表于 09-19 07:23

    主流GPS芯片使用情況

    主流GPS芯片使用情況
    發(fā)表于 11-27 14:34 ?13次下載

    Linux系統(tǒng)下使用top命令查看CPU使用情況

    Linux系統(tǒng)下,使用top命令查看CPU使用情況。
    發(fā)表于 07-10 11:46 ?4322次閱讀
    <b class='flag-5'>在</b>Linux系統(tǒng)下使用top命令查看CPU<b class='flag-5'>使用情況</b>

    STM32/KEIL/MDK 查看 FLASH 和 RAM 使用情況

    STM32/KEIL/MDK 查看 FLASH 和 RAM 使用情況
    發(fā)表于 12-02 09:06 ?13次下載
    STM32/KEIL/MDK 查看 FLASH 和 RAM <b class='flag-5'>使用情況</b>

    SAS運(yùn)算符in語句中的應(yīng)用

    前面通過對(duì)SAS Base的學(xué)習(xí),我想大家對(duì)in運(yùn)算符并不陌生,它廣泛的應(yīng)用于數(shù)據(jù)步或SQL條件語句中,進(jìn)行條件判斷或數(shù)據(jù)篩選,進(jìn)而訪問特定觀測(cè)值。
    的頭像 發(fā)表于 05-19 14:38 ?2153次閱讀
    SAS運(yùn)算符in<b class='flag-5'>在</b>宏<b class='flag-5'>語句中</b>的應(yīng)用

    LPC86x上的開關(guān)矩陣使用情況

    電子發(fā)燒友網(wǎng)站提供《LPC86x上的開關(guān)矩陣使用情況.pdf》資料免費(fèi)下載
    發(fā)表于 08-17 10:48 ?0次下載
    LPC86<b class='flag-5'>x</b>上的開關(guān)矩陣<b class='flag-5'>使用情況</b>

    LPC86x ACMP使用情況

    電子發(fā)燒友網(wǎng)站提供《LPC86x ACMP使用情況.pdf》資料免費(fèi)下載
    發(fā)表于 08-17 10:34 ?0次下載
    LPC86<b class='flag-5'>x</b> ACMP<b class='flag-5'>使用情況</b>

    LPC86x ADC使用情況

    電子發(fā)燒友網(wǎng)站提供《LPC86x ADC使用情況.pdf》資料免費(fèi)下載
    發(fā)表于 08-16 10:42 ?0次下載
    LPC86<b class='flag-5'>x</b> ADC<b class='flag-5'>使用情況</b>

    python if語句多個(gè)條件怎么用

    Python中,可以使用多個(gè)條件來編寫if語句。這些條件可以使用邏輯運(yùn)算符進(jìn)行組合,包括and、or和not。 當(dāng)if語句中有多個(gè)
    的頭像 發(fā)表于 11-21 16:45 ?2836次閱讀

    TMS320C64x高性能DSP應(yīng)用中的高速緩存使用情況

    電子發(fā)燒友網(wǎng)站提供《TMS320C64x高性能DSP應(yīng)用中的高速緩存使用情況.pdf》資料免費(fèi)下載
    發(fā)表于 10-21 09:43 ?0次下載
    TMS320C64<b class='flag-5'>x</b><b class='flag-5'>在</b>高性能DSP應(yīng)用中的高速緩存<b class='flag-5'>使用情況</b>