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

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

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

RTL仿真中X態(tài)行為的傳播—從xprop說(shuō)起

冬至子 ? 來(lái)源:芯時(shí)代青年 ? 作者:尼德蘭的喵 ? 2023-12-04 16:20 ? 次閱讀

在使用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è)省流版:

1.jpg

好了接下來(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:

1.jpg

通過(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é)果:

1.jpg

可以發(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ī)則如下:

1.jpg

對(duì)于數(shù)據(jù)有X態(tài)的場(chǎng)景,三種語(yǔ)法均會(huì)如實(shí)合理的傳播X態(tài)。本篇內(nèi)容至此,下次來(lái)討論下如何快速高效的反饋和定位X態(tài)傳播問(wèn)題。

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

    關(guān)注

    14

    文章

    1018

    瀏覽量

    83744
  • VHDL語(yǔ)言
    +關(guān)注

    關(guān)注

    1

    文章

    113

    瀏覽量

    18006
  • RTL
    RTL
    +關(guān)注

    關(guān)注

    1

    文章

    385

    瀏覽量

    59785
  • VCS
    VCS
    +關(guān)注

    關(guān)注

    0

    文章

    79

    瀏覽量

    9608
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于樹莓派5的RTL仿真體驗(yàn)

    《基于樹莓派5的RTL仿真體驗(yàn)》 對(duì)于FPGA或者RTL愛(ài)好者來(lái)講,樹莓派5開發(fā)板可以運(yùn)行RTL仿真,仿
    發(fā)表于 04-30 17:35

    LM2903B仿真中,為什么運(yùn)放Vcc電壓為0的時(shí)候,同相輸入端的電壓的電壓是負(fù)值?

    請(qǐng)問(wèn)一下,下面的仿真中,為什么運(yùn)放的Vcc電壓為0的時(shí)候,同相輸入端的電壓的電壓是負(fù)值? 并且在仿真中,LM2903B的供電電壓沒(méi)有時(shí),比較器的輸出是呈現(xiàn)高阻態(tài)還是低阻態(tài)?實(shí)際當(dāng)中,
    發(fā)表于 07-30 08:22

    時(shí)序仿真中怎么查看內(nèi)部信號(hào)的變化

    quartus中調(diào)用modelsim進(jìn)行g(shù)ate level仿真,但是在sim窗口中的信號(hào)變得很怪,不能像rtl仿真中一樣往wave窗口中加信號(hào)
    發(fā)表于 08-27 16:14

    RTL級(jí)仿真與門級(jí)仿真

    調(diào)用了modelsim進(jìn)行門級(jí)仿真,發(fā)現(xiàn)有毛刺,后來(lái)才知道有RTL仿真,運(yùn)行后波形很好。想問(wèn)下如何消除門級(jí)仿真中出現(xiàn)的毛刺?通過(guò)時(shí)序約束可以嗎?上圖為
    發(fā)表于 08-08 22:57

    新手求助UPF低功耗設(shè)計(jì)能否在RTL仿真中實(shí)現(xiàn)呢?

    RTL設(shè)計(jì)完畢之后,如何來(lái)驗(yàn)證設(shè)計(jì)的正確性?UPF低功耗設(shè)計(jì)能否在RTL仿真中實(shí)現(xiàn)呢?
    發(fā)表于 06-18 08:21

    關(guān)于modelsim后仿真鎖存器出現(xiàn)不定態(tài)的問(wèn)題

    未在延時(shí)鏈上傳遞時(shí),鎖存結(jié)果是確定的。但是信號(hào)在演示鏈上傳播時(shí),鎖存結(jié)果卻出現(xiàn)了不定態(tài)。有的時(shí)候?qū)懫渌某绦驎r(shí),用D觸發(fā)器鎖存組合邏輯的結(jié)果,在時(shí)序仿真中就會(huì)有不定態(tài),這該怎么解決?
    發(fā)表于 09-26 20:41

    FRED在背光板仿真中的應(yīng)用

    FRED在背光板仿真中的應(yīng)用
    發(fā)表于 12-22 16:02 ?34次下載
    FRED在背光板<b class='flag-5'>仿真中</b>的應(yīng)用

    PSpice教程:PSpice仿真中收斂問(wèn)題的研究

    PSpice教程:PSpice仿真中收斂問(wèn)題的研究
    發(fā)表于 04-07 15:33 ?0次下載

    三菱PLC模擬仿真中文軟件

    三菱PLC模擬仿真中文軟件。
    發(fā)表于 01-14 16:46 ?61次下載

    X態(tài)如何通過(guò)RTL級(jí)和門級(jí)仿真模型中的邏輯進(jìn)行傳播呢?

    在Verilog中,IC設(shè)計(jì)工程師使用RTL構(gòu)造和描述硬件行為。但是RTL代碼中的一些語(yǔ)義,并不能夠準(zhǔn)確地為硬件行為建模。
    的頭像 發(fā)表于 04-20 09:12 ?2070次閱讀

    IC設(shè)計(jì):接口X態(tài)隔離設(shè)計(jì)

    雖然真實(shí)芯片中,寄存器初始狀態(tài)值只會(huì)為1或者為0。但是在RTL級(jí)仿真過(guò)程中X態(tài)傳播經(jīng)常會(huì)給咱們?cè)斐珊芏嗦闊?,例如部分信?hào)期望為0,但是
    發(fā)表于 09-20 10:47 ?710次閱讀
    IC設(shè)計(jì):接口<b class='flag-5'>X</b><b class='flag-5'>態(tài)</b>隔離設(shè)計(jì)

    借助GPT4理解仿真中競(jìng)爭(zhēng)處理的方法

    上周微信群里的一個(gè)小伙伴提到的一個(gè)關(guān)于仿真中不達(dá)預(yù)期的一個(gè)問(wèn)題,其中牽涉到關(guān)于仿真中信號(hào)競(jìng)爭(zhēng)等問(wèn)題。這個(gè)問(wèn)題之前算是不求甚解。
    的頭像 發(fā)表于 11-25 14:23 ?595次閱讀
    借助GPT4理解<b class='flag-5'>仿真中</b>競(jìng)爭(zhēng)處理的方法

    X態(tài)傳播在低功耗驗(yàn)證中的作用

    隨著科技的發(fā)展和智能化設(shè)備的普及,我們對(duì)于高效能、低功耗的半導(dǎo)體設(shè)備需求愈加強(qiáng)烈,對(duì)低功耗仿真的需求成指數(shù)級(jí)增長(zhǎng)。X態(tài)傳播分析是低功耗仿真
    的頭像 發(fā)表于 01-24 09:34 ?744次閱讀
    <b class='flag-5'>X</b><b class='flag-5'>態(tài)</b><b class='flag-5'>傳播</b>在低功耗驗(yàn)證中的作用

    MATLAB電路仿真中能講電流匯總的元件

    在MATLAB電路仿真中,可以使用許多元件來(lái)匯總電流。以下是一些常見(jiàn)的元件和它們?cè)陔娐分械淖饔茫?電阻(Resistor):電阻是電路中最基本的元件之一,用于限制電流的流動(dòng)。在MATLAB電路仿真中
    的頭像 發(fā)表于 04-21 09:23 ?3307次閱讀

    為什么調(diào)試X值那么困難?

    能夠預(yù)示設(shè)計(jì)或驗(yàn)證環(huán)境邏輯仿真中邏輯信號(hào)的不確定性。讓事情變得更加復(fù)雜的是,在RTL和Gate仿真中X的不確定性是各有不同。默認(rèn)情況下,RTL
    的頭像 發(fā)表于 08-12 10:23 ?469次閱讀
    為什么調(diào)試<b class='flag-5'>X</b>值那么困難?