在Verilog中,IC設(shè)計(jì)工程師使用RTL構(gòu)造和描述硬件行為。但是RTL代碼中的一些語義,并不能夠準(zhǔn)確地為硬件行為建模。Verilog中定義了4種不同的邏輯值:1、0、X和Z,1和0是真實(shí)存在的邏輯電平,Z表示高阻態(tài),X表示未知態(tài)。
X態(tài)的存在使得仿真結(jié)果要么太過于樂觀,要么太過于悲觀。因此X態(tài)如何通過RTL級和門級仿真模型中的邏輯進(jìn)行傳播的,是需要特別關(guān)注的。為此,還產(chǎn)生了兩種觀念,X-optimism和X-pessimism。前者將X值轉(zhuǎn)換為0或1,后者將X值一直傳播出去。
X態(tài)產(chǎn)生的原因主要分為以下幾種情況:
四值變量、寄存器和鎖存器未初始化
模塊輸入端口未連接
總線爭用
超出范圍的位選擇和數(shù)組索引
setup/holdtiming violation
testbench中注入X態(tài)
VCS對于RTL仿真提供了支持X-Propagation的選項(xiàng),因?yàn)镽TL仿真偏向于樂觀,導(dǎo)致一些X態(tài)傳播的bug,無法在正常的RTL仿真階段發(fā)現(xiàn)。但是在Gate-level仿真時(shí)會暴露出來,因?yàn)镚ate-level仿真也更接近實(shí)際硬件行為。
我們知道越早的發(fā)現(xiàn)bug,所消耗的成本也越低的,故VCS的X-Propagation功能可以更接近Gate-level的X態(tài)傳播行為,是一種在后仿之前debug的低成本仿真策略。
通常使用帶xprop的仿真選項(xiàng)為:
vcs -xprop[=tmerge|xmerge|xprop_config_file]
[-xprop=flowctrl]
[-xprop=nestLimit=
other_vcs_options
這里就不深入介紹各個(gè)選項(xiàng)了,而是介紹三種merge mode:
vmerge mode: 就是Verilog協(xié)議規(guī)定的X態(tài)處理行為;
tmerge mode: 更接近Gate-level仿真,也就是實(shí)際硬件行為;
xmerge mode: 相比tmerge mode,對于X態(tài)的處理更悲觀;
下面舉幾個(gè)實(shí)例來看看這三種mode的具體區(qū)別
if語句
always @* if(s) r=a; else r=b;
![600d79ce-df08-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/9A/96/wKgaomTnj9KAQAUUAABYNcUH_pY813.png)
在vmerge模式下,使用標(biāo)準(zhǔn)的HDL模擬語義。當(dāng)控制信號s未知時(shí),輸出信號r總是被賦給else語句的值。此時(shí)r的值與信號b相同。
在tmerge模式下,當(dāng)控制信號s未知時(shí),如果輸入信號a和b 同,則r的值與a(或b)相同。如果a和b不相同,則r的值為X。
在xmerge模式下,當(dāng)控制信號s未知時(shí),輸出信號r的值始終為X。
case語句
case (s) 1'b0:r=a; 1'b1:r=b; endcase
在vmerge模式中,使用標(biāo)準(zhǔn)的HDL模擬語義。當(dāng)控制信號s未知時(shí),輸出信號r的值與執(zhí)行case語句之前保持一致。
在tmerge模式中,當(dāng)控制信號s未知時(shí),如果a和b相同,r的合并和最終值與a和b 相同。如果a和b不相同,r的合并和最終值為X。
在xmerge模式下,當(dāng)控制信號s未知時(shí),輸出信號r的值始終為X。
邊沿敏感表達(dá)式
在標(biāo)準(zhǔn)的 Verilog 中,對于時(shí)鐘信號中以下值的變化會觸發(fā)上升沿轉(zhuǎn)換:
0->1 0->X 0->Z X->1 Z->1
如果X被認(rèn)為是0或1值,那么在 0 -> X 轉(zhuǎn)換中,X可能表示0值,這表示沒有轉(zhuǎn)換。X可以表示1值,此時(shí)表示上升沿。Xprop仿真考慮了這兩種行為并合并了結(jié)果。
以下為一個(gè)低有效復(fù)位的D觸發(fā)器示例:
在三種模式中,如果時(shí)鐘信號clk從0變成1,即一個(gè)上升沿觸發(fā),D觸發(fā)器的輸出信號q被賦值為輸入信號d。
對于其余四種時(shí)鐘信號的變化,vmerge模式中,輸出信號q被賦值為輸入信號d;xmerge模式中,輸出信號q被賦值為X;tmerge模式中,q端的結(jié)果是當(dāng)前拍d端和上一拍q端值得merge的結(jié)果,如果兩者不同,則當(dāng)前拍鎖存X。
latch
always@(*) if(g) q <= d;
在vmerge模式下,當(dāng)控制信號g未知時(shí),輸出信號q的值不變。
在tmerge模式下,當(dāng)控制信號g未知時(shí),分配給q的合并值取決于q和d的值。
在xmerge模式下,當(dāng)控制信號g未知時(shí),輸出信號q的值始終為X。
當(dāng)xprop仿真過程中出現(xiàn)X態(tài)報(bào)錯(cuò)時(shí),需要看波形以具體分析是寄存器沒有初始化值,存在X態(tài)導(dǎo)致的,還是代碼邏輯中存在問題導(dǎo)致的。
審核編輯:劉清
-
IC設(shè)計(jì)
+關(guān)注
關(guān)注
38文章
1302瀏覽量
104327 -
Verilog
+關(guān)注
關(guān)注
28文章
1352瀏覽量
110449 -
RTL
+關(guān)注
關(guān)注
1文章
385瀏覽量
59982 -
VCS
+關(guān)注
關(guān)注
0文章
80瀏覽量
9654
原文標(biāo)題:什么是X態(tài)傳播?
文章出處:【微信號:處芯積律,微信公眾號:處芯積律】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
RTL級設(shè)計(jì)的基本要素和步驟是什么
![<b class='flag-5'>RTL</b><b class='flag-5'>級</b>設(shè)計(jì)的基本要素和步驟是什么](https://file.elecfans.com/web2/M00/8B/85/pYYBAGPGYlOAZXeCAAcUVPsQ4mk163.png)
數(shù)字IC設(shè)計(jì)流程中為什么要做門級仿真?
![數(shù)字IC設(shè)計(jì)流程<b class='flag-5'>中</b>為什么要做<b class='flag-5'>門</b><b class='flag-5'>級</b><b class='flag-5'>仿真</b>?](https://file1.elecfans.com/web2/M00/89/45/wKgaomR_4_WAXPAlAAAawAhWkqA529.png)
RTL級仿真與門級仿真
RTL級的功能仿真結(jié)果和系統(tǒng)級建模仿真的結(jié)果比較
關(guān)于RTL仿真和門級仿真求助~
如何理解Xcelium的多核仿真呢?
三態(tài)門邏輯功能的Multisim仿真方案
![三<b class='flag-5'>態(tài)</b><b class='flag-5'>門</b><b class='flag-5'>邏輯</b>功能的Multisim<b class='flag-5'>仿真</b>方案](https://file.elecfans.com/web2/M00/48/EB/pYYBAGKhtC2AGhKyAAAQWv-VNhQ805.jpg)
芯片設(shè)計(jì)之門級仿真
IC設(shè)計(jì):接口X態(tài)隔離設(shè)計(jì)
![IC設(shè)計(jì):接口<b class='flag-5'>X</b><b class='flag-5'>態(tài)</b>隔離設(shè)計(jì)](https://file1.elecfans.com/web2/M00/A3/DF/wKgZomUKXT2Aei3fAAIld2SI4TY506.jpg)
能否利用器件的IBIS模型對器件的邏輯功能進(jìn)行仿真?
X態(tài)傳播在低功耗驗(yàn)證中的作用
![<b class='flag-5'>X</b><b class='flag-5'>態(tài)</b><b class='flag-5'>傳播</b>在低功耗驗(yàn)證<b class='flag-5'>中</b>的作用](https://file1.elecfans.com/web2/M00/BE/08/wKgZomWwaauAEaigAAAXygqsriw579.jpg)
評論