在使用VCS進(jìn)行仿真時(shí),工程師們常常會(huì)面對(duì)一個(gè)極為重要且充滿挑戰(zhàn)的問(wèn)題——X態(tài)傳播行為。X態(tài)信號(hào)代表了未知或不確定的邏輯值(或者高阻Z態(tài)),可能會(huì)在設(shè)計(jì)中引入意想不到的問(wèn)題,因此如何處理X態(tài)成為了芯片設(shè)計(jì)與仿真中的一個(gè)關(guān)鍵議題。
VCS提供了仿真選項(xiàng)-xprop=vmerge/tmerge/xmerge來(lái)處理和擴(kuò)散X態(tài)傳播問(wèn)題。本文將深入探討仿真中的X態(tài)傳播行為,著重于不同仿真選項(xiàng)對(duì)X態(tài)傳播的影響,以及應(yīng)對(duì)X態(tài)隱匿和擴(kuò)散的一些方法。
對(duì)于-xprop,官方給出的解釋是:
Verilog和VHDL常用于數(shù)字設(shè)計(jì)建模。設(shè)計(jì)人員使用RTL構(gòu)造描述硬件行為。然而,某些RTL仿真語(yǔ)義不足以準(zhǔn)確地為硬件行為建模。因此,相比實(shí)際硬件行為,仿真結(jié)果要么太過(guò)樂(lè)觀,要么太過(guò)悲觀。
因?yàn)檫@些語(yǔ)義限制,Verilog和VHDL仿真器會(huì)忽略掉控制信號(hào)上的X不定態(tài),在輸出上會(huì)分配一個(gè)固定的數(shù)值。這樣造成的結(jié)果就是,由于缺少X的傳播,RTL仿真器往往無(wú)法檢測(cè)到和X態(tài)相關(guān)的設(shè)計(jì)問(wèn)題。然而,同樣的設(shè)計(jì)問(wèn)題可以在門級(jí)仿真中檢測(cè)出來(lái),因此許多時(shí)候必須運(yùn)行大量的門級(jí)仿真,只是為了調(diào)試X相關(guān)問(wèn)題?,F(xiàn)在VCS在RTL階段提供了的全新X傳播(X-propagation)支持,使用該技術(shù),工程師可以節(jié)省大量用于調(diào)試RTL和門級(jí)仿真的X建模的差異上的時(shí)間和精力。
進(jìn)一步查詢可以明確,不加入-xprop選項(xiàng)時(shí)默認(rèn)的仿真行為是vmerge。從X態(tài)傳播的嚴(yán)重程度來(lái)看,xmerge>tmerge>vmerge,三個(gè)選項(xiàng)可以等價(jià)理解為悲觀預(yù)期>合理預(yù)期>樂(lè)觀預(yù)期。那么到底是需要X態(tài)傳播嚴(yán)重些呢還是樂(lè)觀些呢?單純從驗(yàn)證的角度,通常我們是希望X態(tài)盡可能的傳播以便發(fā)現(xiàn)更多的隱藏問(wèn)題;但是如果過(guò)于悲觀的行為預(yù)期又會(huì)和實(shí)際電路行為有所出入。因此根據(jù)個(gè)人的經(jīng)驗(yàn),數(shù)據(jù)和運(yùn)算通路的模塊應(yīng)該能夠通過(guò)xmege測(cè)試,而控制通路的模塊至少通過(guò)tmerge測(cè)試。
好了言歸正傳,我們來(lái)探究下不同-xprop選項(xiàng)對(duì)仿真結(jié)果的影響,主要對(duì)三種常用語(yǔ)句繼續(xù)探究:assign/case/if-else,那么先上個(gè)省流版:
好了接下來(lái)咱們來(lái)展開聊聊,就從assign說(shuō)起吧。
assign
assign是對(duì)xprop選項(xiàng)最不敏感的語(yǔ)法,無(wú)論是在哪種xprop配置反應(yīng)都是一樣的(如有遺漏請(qǐng)不吝賜教)。對(duì)于邏輯運(yùn)算,assign遵循合理X態(tài)規(guī)則: 如果能確定數(shù)值,則傳播確定值,否則傳播X態(tài) 。具體的規(guī)則如下:
x & 1 = x
x | 1 = 1
x & 0 = 0
x | 0 = x
x ^ 0 = x
x ^ 1 = x
參考如下代碼和波形:
//test0
logic t0_sel0, sel1;
initial begin
t0_sel0 = 1'b0;
`DELAY(20, clk);
t0_sel0 = 1'bx;
end
wire t0_xend0 = t0_sel0 & 1'b1;
wire t0_xend1 = t0_sel0 | 1'b1;
wire t0_xend2 = t0_sel0 & 1'b0;
wire t0_xend3 = t0_sel0 | 1'b0;
wire t0_xend4 = t0_sel0 ^ 1'b1;
wire t0_xend5 = t0_sel0 ^ 1'b0;
-xprop=vmerge/tmerge/xmerge波形均一致:
但是呢,有一個(gè)assign語(yǔ)法不太合理(僅僅從RTL角度而不是仿真角度),會(huì)呈現(xiàn)X態(tài):
wire t0_xend6 = (t0_sel0 == t0_sel0)
而對(duì)于===則會(huì)反饋為1,這個(gè)也算是很”著名“的==和===的區(qū)別,感興趣的可以自行查閱:
assign對(duì)于選擇邏輯,配置為vmerge和tmerge遵循的規(guī)則仍然是 如果能確定數(shù)值,則傳播確定值,否則傳播X態(tài) ,比如下面這個(gè)代碼:
wire t2_en2 = t0_sel0 ? t2_data0 : t2_data1;
vmerge和tmerge的波形如下:
而xmerge的波形如下:
不過(guò)需要注意的是在xmerge配置下,如果X態(tài)出現(xiàn)在數(shù)據(jù)內(nèi)那就不無(wú)腦X而是合理X了:
wire t2_en3 = t2_data0 ? t0_sel0 : t2_data1;
好的關(guān)于assign的X態(tài)傳播行為就說(shuō)這么多吧。
case
對(duì)于case語(yǔ)句當(dāng)判斷語(yǔ)句中出現(xiàn)X態(tài)時(shí),會(huì)是什么行為呢?來(lái)看下面這段代碼:
always @* begin
case(t0_sel0)
0 : t2_en1 = t2_data0;
1 : t2_en1 = t2_data1;
default: t2_en1 = t2_data0;
endcase
end
vmerge仿真結(jié)果:
tmerge仿真結(jié)果:
xmerge仿真結(jié)果:
區(qū)別很明顯了,那我們總結(jié)一下規(guī)律,case(sel)選擇a or b:
通過(guò)表來(lái)看,個(gè)人認(rèn)為tmerge是最為合理的策略。而對(duì)于X態(tài)在數(shù)據(jù)中的情況,無(wú)論什么配置case都是如實(shí)的將X態(tài)傳播出來(lái),比如這個(gè)代碼:
always @* begin
if(t2_data0)begin
t2_en4 = t0_sel0;
end
else begin
t2_en4 = t2_data1;
end
end
哪怕xmerge的仿真結(jié)果也是這樣的:
所以大家也看出來(lái)了,X態(tài)傳播中我們真正需要擔(dān)心的是條件中的X態(tài),數(shù)據(jù)里的X態(tài)一般都能如實(shí)的反饋出來(lái)。
if-else
直接上代碼:
always @* begin
if(t0_sel0)begin
t2_en0 = t2_data0;
end
else begin
t2_en0 = t2_data1;
end
end
vmerge仿真結(jié)果:
tmerge仿真結(jié)果:
xmerge仿真結(jié)果:
雖然vmerge下都沒(méi)有傳播X態(tài),但是顯然行為和case時(shí)候又不一樣了。那么總結(jié)一下if(sel) a else b的選擇語(yǔ)句結(jié)果:
可以發(fā)現(xiàn)sel有X態(tài)時(shí)if-else語(yǔ)句中vmerge選擇的是else分支,而case是選擇"不變"策略;tmerge和xmerge的結(jié)果則是和case語(yǔ)句相同的。
當(dāng)然了對(duì)于X態(tài)在數(shù)據(jù)內(nèi),無(wú)論什么配置if-else語(yǔ)句也是如實(shí)的將X態(tài)反饋出來(lái):
always @* begin
if(t2_data0)begin
t2_en5 = t0_sel0;
end
else begin
t2_en5 = t2_data1;
end
end
好的,做了這么多實(shí)驗(yàn),最后還是匯總剛剛的那張表,對(duì)于條件有X態(tài)的場(chǎng)景,三種語(yǔ)法的規(guī)則如下:
對(duì)于數(shù)據(jù)有X態(tài)的場(chǎng)景,三種語(yǔ)法均會(huì)如實(shí)合理的傳播X態(tài)。本篇內(nèi)容至此,下次來(lái)討論下如何快速高效的反饋和定位X態(tài)傳播問(wèn)題。
-
仿真器
+關(guān)注
關(guān)注
14文章
1018瀏覽量
83744 -
VHDL語(yǔ)言
+關(guān)注
關(guān)注
1文章
113瀏覽量
18006 -
RTL
+關(guān)注
關(guān)注
1文章
385瀏覽量
59785 -
VCS
+關(guān)注
關(guān)注
0文章
79瀏覽量
9608
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論