精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

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

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

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


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

舉個例子:

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

官方說明:我們可以得到兩點信息

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



第一點:


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



第二點:



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


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

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



實際綜合如下,果不其然,有意思哇!后面幾個稍微復雜點的代碼更有趣!

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




再補充z的使用:

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

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



(二)然后我們再考慮在verilog中用x和z給其他reg/wire賦值的情況。




案例1:z賦值是沒問題的,會綜合出來三態門,參見如下代碼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賦值是沒問題的,會綜合出來三態門,參見如下代碼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綜合工具實測如下代碼綜合效果:

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工具省略,也沒有latch出現。

案例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工具省略,也沒有latch出現。

案例3:注釋掉default,非full_case,必然出現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工具省略,也沒有latch出現,但是仍然建議不要使用x賦值,除非full_case情況下,不會執行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

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 仿真器
    +關注

    關注

    14

    文章

    1016

    瀏覽量

    83632
  • Verilog
    +關注

    關注

    28

    文章

    1343

    瀏覽量

    109980
  • HDL
    HDL
    +關注

    關注

    8

    文章

    327

    瀏覽量

    47336
  • 代碼
    +關注

    關注

    30

    文章

    4744

    瀏覽量

    68345
  • 綜合器
    +關注

    關注

    0

    文章

    9

    瀏覽量

    6440

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

文章出處:【微信號:全棧芯片工程師,微信公眾號:全棧芯片工程師】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    CUBEIDE運行完可以看RAM的使用情況,運行中可以實時查看RAM的使用情況嗎?

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

    如何查看RAM使用情況

    嗨, 我正在使用STM32L053 Nucleo,我已經為它運行了一些代碼,我希望做一個RAM估計來查看當前固件的RAM使用情況。如何查看RAM使用情況? 問候#記憶
    發表于 08-05 10:08

    Android應用的內存使用情況檢查方法

    如何檢查 Android 應用的內存使用情況
    發表于 03-30 13:36

    電池使用情況統計信息

    電池使用情況信息根據電池使用情況統計信息和電源配置文件中的值計算得出。電池使用情況統計信息框架可通過跟蹤設備組件不同狀態下維持的時間來自動確定電池
    發表于 12-31 07:01

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

    板上運行 Qt6 應用程序,想觀察該 Qt6 應用程序對 GPU 的使用情況。 如何檢查應用程序的 GPU 使用情況或該應用程序是否真的使用 GPU?我們可以查看和確認該
    發表于 05-22 07:04

    SoC如何查看內存使用情況

    查看系統內存: free -h 查看ION內存 NPU內存使用情況: cat /sys/kernel/debug/ion/bm_npu_heap_dump/summary | head -2VPU
    發表于 09-19 07:23

    主流GPS芯片使用情況

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

    Linux系統下使用top命令查看CPU使用情況

    Linux系統下,使用top命令查看CPU使用情況
    發表于 07-10 11:46 ?4350次閱讀
    <b class='flag-5'>在</b>Linux系統下使用top命令查看CPU<b class='flag-5'>使用情況</b>

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

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

    SAS運算符in語句中的應用

    前面通過對SAS Base的學習,我想大家對in運算符并不陌生,它廣泛的應用于數據步或SQL條件語句中,進行條件判斷或數據篩選,進而訪問特定觀測值。
    的頭像 發表于 05-19 14:38 ?2193次閱讀
    SAS運算符in<b class='flag-5'>在</b>宏<b class='flag-5'>語句中</b>的應用

    LPC86x上的開關矩陣使用情況

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

    LPC86x ACMP使用情況

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

    LPC86x ADC使用情況

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

    python if語句多個條件怎么用

    Python中,可以使用多個條件來編寫if語句。這些條件可以使用邏輯運算符進行組合,包括and、or和not。 當if語句中有多個
    的頭像 發表于 11-21 16:45 ?2901次閱讀

    TMS320C64x高性能DSP應用中的高速緩存使用情況

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