在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í)和門級(jí)仿真模型中的邏輯進(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í)會(huì)暴露出來,因?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;
在vmerge模式下,使用標(biāo)準(zhǔn)的HDL模擬語義。當(dāng)控制信號(hào)s未知時(shí),輸出信號(hào)r總是被賦給else語句的值。此時(shí)r的值與信號(hào)b相同。
在tmerge模式下,當(dāng)控制信號(hào)s未知時(shí),如果輸入信號(hào)a和b 同,則r的值與a(或b)相同。如果a和b不相同,則r的值為X。
在xmerge模式下,當(dāng)控制信號(hào)s未知時(shí),輸出信號(hào)r的值始終為X。
case語句
case (s) 1'b0:r=a; 1'b1:r=b; endcase
在vmerge模式中,使用標(biāo)準(zhǔn)的HDL模擬語義。當(dāng)控制信號(hào)s未知時(shí),輸出信號(hào)r的值與執(zhí)行case語句之前保持一致。
在tmerge模式中,當(dāng)控制信號(hào)s未知時(shí),如果a和b相同,r的合并和最終值與a和b 相同。如果a和b不相同,r的合并和最終值為X。
在xmerge模式下,當(dāng)控制信號(hào)s未知時(shí),輸出信號(hào)r的值始終為X。
邊沿敏感表達(dá)式
在標(biāo)準(zhǔn)的 Verilog 中,對于時(shí)鐘信號(hào)中以下值的變化會(huì)觸發(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í)鐘信號(hào)clk從0變成1,即一個(gè)上升沿觸發(fā),D觸發(fā)器的輸出信號(hào)q被賦值為輸入信號(hào)d。
對于其余四種時(shí)鐘信號(hào)的變化,vmerge模式中,輸出信號(hào)q被賦值為輸入信號(hào)d;xmerge模式中,輸出信號(hào)q被賦值為X;tmerge模式中,q端的結(jié)果是當(dāng)前拍d端和上一拍q端值得merge的結(jié)果,如果兩者不同,則當(dāng)前拍鎖存X。
latch
always@(*) if(g) q <= d;
在vmerge模式下,當(dāng)控制信號(hào)g未知時(shí),輸出信號(hào)q的值不變。
在tmerge模式下,當(dāng)控制信號(hào)g未知時(shí),分配給q的合并值取決于q和d的值。
在xmerge模式下,當(dāng)控制信號(hào)g未知時(shí),輸出信號(hào)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)注
37文章
1290瀏覽量
103694 -
Verilog
+關(guān)注
關(guān)注
28文章
1343瀏覽量
109925 -
RTL
+關(guān)注
關(guān)注
1文章
385瀏覽量
59665 -
VCS
+關(guān)注
關(guān)注
0文章
78瀏覽量
9581
原文標(biāo)題:什么是X態(tài)傳播?
文章出處:【微信號(hào):處芯積律,微信公眾號(hào):處芯積律】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論