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

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

3天內不再提示

X態(tài)是什么?X態(tài)有什么危害?如何避免X態(tài)的產生?X態(tài)怎么處理?

sally100 ? 來源:CSDN ? 2023-11-15 14:47 ? 次閱讀

1. X 態(tài)是什么?

Verilog 和 SV 定義了四種邏輯狀態(tài):0,1,Z 及 X:

0 為低電平;

1 為高電平;

Z 為高阻態(tài),可以理解為電路上的引腳懸空;

X 為不定態(tài)、亞穩(wěn)態(tài),可能為 0 可能為 1 也可能為 Z,常見于未復位的寄存器、鎖存器或 Memory。

其中,X 只有在仿真時存在,真實電路中不存在。若仿真過程中出現(xiàn)了 X 態(tài),表明該處存在潛在的設計風險,其有可能會掩蓋 RTL Bug。

2. X 態(tài)是由什么引起的?

RTL 仿真、門仿真及低功耗仿真中均有可能出現(xiàn) X 態(tài)。X 態(tài)出現(xiàn)的原因大致總結如下:

未初始化。未初始化的四態(tài)變量,比如 logic、wire、reg、integer、time 變量;未初始化的寄存器、鎖存器,在被復位或有確定的值被鎖定之前,保持 X 態(tài)。

輸入信號未連接。外部輸入信號未設置初值(尤其 DFT 信號)時為 Z,Z 在模塊內部經過數字邏輯后變 X 態(tài)。

信號多驅或總線爭用。SV 中允許將多個輸入驅動到同一 net 類型上,多多個驅動存在沖突時,net 即表現(xiàn)為 X 態(tài)。

操作結果不定導致的 X 態(tài)。

位選擇或數組索引超范圍返回 X 態(tài)

邏輯門輸出的 X 態(tài)。SV 自帶原語或用戶自定義原語 (UDP) 支持四態(tài)操作,當這些邏輯門輸入為 X 或 Z 時,輸出 X。

后仿 setup 或 hold time 不滿足,存在 timing violation,使用 notifier 將輸出變?yōu)?X 態(tài)。若只看 timing violation 不輸出 X,則添加 vcs 編譯選項 +no_notifier。

主動引入的 X 態(tài)。設計人為引入的 X 態(tài),比如在 case 分支中,對于 don’t care 的默認狀態(tài)中賦值為 X 態(tài);驗證平臺引入的 X 態(tài),比如存在四態(tài)變量 wire a, assign a = ‘bx。

寄存器或鎖存器掉電后上電。在低功耗仿真中,若無特別設置,即便在 0 時刻對寄存器或鎖存器進行了初始化,當其所在的 Power Domain 掉電后重新上電,其仍然為 X 態(tài)未初始化狀態(tài),需要在 upf 中設置 reinit。

若 RTL 仿真沒問題,但門仿出現(xiàn) X 態(tài),可能為以下原因:

信號的輸入輸出方向聲明錯誤

控制信號出現(xiàn) X 態(tài)

3. X 態(tài)有什么危害?

所謂 X 態(tài)傳播,是指 X 態(tài)作為觸發(fā)/控制條件或邏輯輸入時,引起其他邏輯輸出為 X 態(tài)。不同情況下 X 態(tài)危害情況不同:

若 X 態(tài)僅僅是存在,完全不傳播,其沒什么危害;

若 X 態(tài)出現(xiàn)傳播,且電路中針對該 X 態(tài)傳播做了保護,這種有限的 X 態(tài)傳播也沒有危害;

若 X 態(tài)出現(xiàn)傳播但電路中針沒有針對該 X 態(tài)傳播進行保護,那么該 X 態(tài)傳播可能會影響到芯片的正常工作。

4. 如何避免 X 態(tài)的產生?

確保引起 X 態(tài)的條件不成立即可避免 X 態(tài)產生,簡單列幾條:

使用二態(tài)變量。

設計上進行復位操作,控制通路寄存器必選帶復位,數據通路寄存器可以不帶復位。

驗證 TB 中接口輸入信號賦初值。

仿真時利用 initreg 及 initmem 選項對 reg 和 Memory 進行初始化。

RTL model 中添加針對 X 的 assertion,以及時發(fā)現(xiàn) X 態(tài)并消除。

if-else 及 case 中使用確定寫法,或使用 assign+表達式代替if-else及 case。

4.1 if-else/case Vs. assign

RTL 仿真中,if-else/case 及 assign 對 X 態(tài)有不同的行為,如下:

if(x) 會默認 x=0,走 else 分支,不傳播 X 態(tài)。

case(x),若存在 default 分支,則走 default 分支,否則不會匹配到任何分支。

assign c = sel ? a : b; sel=x,輸出 X,從而將 X 態(tài)傳播出去。

也就是說,if-else 和 case 不能傳遞 X 態(tài),無法暴露 X 態(tài)傳播問題,這就導致無法在仿真時去發(fā)現(xiàn) X 態(tài)相關的 Bug。相比之下,assign + 條件表達式的方式能夠傳遞 X 態(tài)。此外,if-else/case 為帶有優(yōu)先級的選擇電路,不利于時序和面積,建議使用 assign 代替 if-else 和 case。

有人有疑問:if-else/case 不傳播 X 態(tài),assign 傳播 X 態(tài),為什么還要用 assign?——我們不希望出現(xiàn) X 態(tài),但我們更不希望由于 RTL 寫法原因而掩蓋 X 態(tài)。使用 assign,能夠及時暴露 X 態(tài)問題,從而避免 X 態(tài)被掩蓋所導致的問題。

5. 兩種 X 態(tài)模型:X-optimism 和 X-pessimism

在對待 X 態(tài)問題上有兩種模型:

X-optimism,樂觀派,其認為 X 態(tài)不會被傳播。若檢測到邏輯輸出為 X 態(tài),將 X 轉換為 0 或 1。

X-pessimism,悲觀派,其認為 X 態(tài)會一直被傳播下去。若檢測到邏輯輸入存在 X,即便輸出結果是確定的,也要輸出 X,從而將 X 態(tài)傳播出去。

在仿真階段,RTL 仿真對 X 態(tài)過于樂觀,RTL 仿真時往往忽略 X 態(tài)并賦一個確定的值,從而無法檢測到 X 態(tài)傳播所引發(fā)的問題;門仿更接近硬件行為,會暴露出 X 傳播問題。

6. 如何檢測 X 態(tài)傳播?

從設計角度,我們希望電路的邏輯輸出都是確定的,以避免非預期的功能缺陷。從驗證角度,我們不喜歡 X 態(tài),但我們希望能夠發(fā)現(xiàn)并評估電路中所有可能存在的 X 態(tài),尤其是能夠傳播的 X 態(tài)。

前文提到,RTL 仿真往往對 X 態(tài)過于樂觀,在門仿階段才會暴露出 X 態(tài)傳播問題。相較于 RTL 仿真,門仿的 netlist 易讀性差、仿真速度慢且難以 Debug。鑒于此,vcs 提供了一種 Shift-Left 方案,通過在編譯仿真選項中添加 -xprop 相關選項即可在 RTL 仿真階段對 X 傳播進行檢查。

6.1 Merge Mode 介紹

vcs xprop 檢查有 3 種模式,按照從樂觀到悲觀的順序,分別為:vmerge -> tmerge -> xmerge。其中:

vmerge mode,對待 X 態(tài)最為樂觀,遵守 Verilog 或 VHDL 規(guī)定的 X 態(tài)處理規(guī)則,不存在 X 態(tài)傳播問題。

tmerge mode,處于樂觀與悲觀之間,接近實際硬件行為或門仿,X 態(tài)傳播一段路徑后終結。

xmerge mode,對待 X 態(tài)最為悲觀,比門仿還悲觀,X 態(tài)會一直傳播下去。

不同 Merge Mode 時的 X 態(tài)傳播情況如下表所示:

d4651396-7edf-11ee-939d-92fbcf53809c.png

說到底,-xprop=tmerge/vmerge 是為了擴散 X 態(tài)傳播,把不傳播不定態(tài)的情形,強制傳播出去,從而盡早暴露 bug。

6.2 xprop 命令使用

一般來講,可以在編譯或仿真任一階段指定 -xprop 選項即可開啟 xprop 檢測。

-xprop 示例用法如下:

vcs?xprop[=tmerge|xmerge|xprop_config_file]

其中,xprop_config_file 用以針對特定 instance 進行特定模式的 xprop 監(jiān)測或開關特定 instance 的 xprop 檢測,其示例用法如下:

tree{top}
instance{top.A}{xpropOn};
instance{top.B}{xpropOff};
module{C}{xpropOff};
merge=tmerge;

使能 xprop 后發(fā)現(xiàn)的 X 態(tài)不一定都是 Bug,或者設計已經針對 xprop 做了保護。這種情況下,可以采用 -xprop=xprop_config_file 對不同模塊施以不同的 xprop mode。

注意事項

-xprop 一般不能跟 +vcs+initreg+0/1/random 同時使用,因為 +vcs+initreg+0/1/random 會把 Verilog 的變量、寄存器及 Memory 初始值設置為 0 或 1 等非 X 狀態(tài),這樣就測不到初始 X 態(tài)了。

若未指定 -xprop,默認為 vmerge,即默認不存在 X 態(tài)傳播問題,也不進行檢查。

若定義了 -xprop 但未指定具體模式,默認為 tmerge,即采用接近真實電路的 X 態(tài)傳播模式并進行檢查。

6.3 xprop 報告查看

vcs 在編譯、仿真兩個階段均提供了相關手段來檢查相關 instance 的 xprop 開關情況:

若在編譯階段使能了 xprop,編譯完成之后會生成一個 xprop.log 來報告 if/case 狀態(tài)、always 邊沿觸發(fā)等條件的 xprop 檢查開關情況。

simv 仿真階段添加仿真選項 -report=xprop[+exit] 能生成 xprop_config.report,便于在仿真后對 xprop 檢查情況進行確認。若采用 -report=xprop+exit,在檢測完 xprop 狀態(tài)情況后后立即終止仿真。

7. 什么階段進行 xprop 檢測?

X 態(tài)傳播不能不做,但也不宜早做。一方面,在驗證初期調 datapath 或 sanity 期間,我們并不想看到太多 X 態(tài)傳播,我們希望對待 X 態(tài)傳播更樂觀一點;另一方面,帶有 xprop 的仿真為 4 態(tài)仿真,毫無疑問,4 態(tài)仿真比不帶 xprop 的 2 態(tài)仿真更慢。

那么應該在什么階段開啟 xprop 檢測呢?以下是推薦的方案:

RTL 仿真前期不開啟 xprop,以盡快調通 sanity/smoke case 及主要 datapath。

RTL 仿真后期建議開啟 xprop,提前排除部分 X 態(tài)。

網表中沒有 always 塊,xprop 對門仿不起作用。門仿的一大作用就是排除 X 態(tài)傳播導致的芯片功能問題,尤其是控制通路上的 X 態(tài)傳播。

8. 如何用 Verdi Trace X?Trace 到什么地方停止?

我們說的 Trace X 是指追蹤 X 態(tài)產生的源頭。利用 Verdi 能夠自動追蹤組合邏輯、鎖存器、觸發(fā)器等的 X 態(tài)傳播的源頭。Verdi Trace X 有兩種途徑:一種是在 Verdi GUI 內 Trace,一種是直接利用 Verdi 的 traceX 工具直接 Trace。

8.1 Verdi GUI 內 Trace

若 X 態(tài)出現(xiàn)傳播,通常能在波形里找到很多 X 態(tài)信號。多個 X 態(tài)的源頭,此時我們可以選擇其中一個信號進行跟蹤。

假設在波形中已經發(fā)現(xiàn)了 X 態(tài),該如何 Trace X 呢?兩種常用方式:

8.1.1 手動 Trace X

把出現(xiàn) X 態(tài)的信號 A 拖到 nWave 窗口

nWave 窗口 Cursor 點在 X 態(tài)信號 0/1 -> X 跳變沿的地方

在源代碼窗口左鍵雙擊該信號 A,追蹤其 Driver

檢查 A 的 Driver (控制信號、觸發(fā)條件、邏輯輸入等) 是否存在 X 態(tài)

重復以上步驟,直到找到 X 態(tài)產生的源頭

8.1.2 自動 Trace X

把出現(xiàn) X 態(tài)信號 A 拖到 nWave 窗口

nWave 窗口Cursor 點在 X 態(tài)信號 0/1 -> X 跳變沿的地方

nWave 窗口右鍵單擊該信號的波形,或源代碼窗口右鍵單擊該信號

選擇 Trace X,彈出 Trace X Settings 窗口

窗口勾選所需的 Trace X 相關設置。默認 View Options 為 Flow View,此處我們也可以改為 nWave View

左鍵單擊 Trace,開始 Trace X,Trace 結果一方面顯示在 Flow/nWave 窗口內,一方面顯示在 tTraceXRst 窗口內(Note 提示 X 的大致出現(xiàn)原因)

d47ce6b0-7edf-11ee-939d-92fbcf53809c.png

8.2 Verdi 的 traceX 工具

除了在 GUI 內進行 X 態(tài)追蹤,Verdi 還提供了 traceX 工具來追蹤 X 態(tài)。traceX 用法如下:

設置變量打開 traceX 工具,setenv VERDI_TRACEX_ENABLE

采用以下命令追蹤 X 態(tài)

未提供 X 態(tài)信號列表:traceX -lca -ssf xxx.fsdb

提供了 X 態(tài)信號列表:traceX -lca -ssf xxx.fsdb -signal_file signal.list若需要手段加載 database,還需要添加選項 -dbdir simv.daidir

查看 trx_report.txt 查看 Trace 結果

9. X 態(tài)怎么處理?

如果 X 態(tài)沒有傳播,無需處理。

如果 X 態(tài)發(fā)生傳播,但后續(xù)有 X 態(tài)保護電路,無需處理。

如果 X 態(tài)發(fā)生傳播,且后續(xù)沒有 X 態(tài)保護電路,需要從根源上消除 X 態(tài)。

10. 其他注意事項

assertion 中應規(guī)避 X -> 0/1 形成的跳變沿






審核編輯:劉清

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

    關注

    14

    文章

    1020

    瀏覽量

    84182
  • vhdl
    +關注

    關注

    30

    文章

    819

    瀏覽量

    128785
  • 鎖存器
    +關注

    關注

    8

    文章

    918

    瀏覽量

    41782
  • RTL
    RTL
    +關注

    關注

    1

    文章

    386

    瀏覽量

    60183
  • DFT
    DFT
    +關注

    關注

    2

    文章

    232

    瀏覽量

    22963

原文標題:X態(tài)及基于VCS的X-Propagation檢測

文章出處:【微信號:數字ICer,微信公眾號:數字ICer】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    什么是三態(tài)電路 三態(tài)電路什么特點

    態(tài)電路什么特點,什么是上拉電阻、下拉電阻以及高阻態(tài)?
    的頭像 發(fā)表于 05-21 07:28 ?6991次閱讀
    什么是三<b class='flag-5'>態(tài)</b>電路 三<b class='flag-5'>態(tài)</b>電路<b class='flag-5'>有</b>什么特點

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

    在使用VCS進行仿真時,工程師們常常會面對一個極為重要且充滿挑戰(zhàn)的問題——X態(tài)傳播行為。
    的頭像 發(fā)表于 12-04 16:20 ?3367次閱讀
    RTL仿真中<b class='flag-5'>X</b><b class='flag-5'>態(tài)</b>行為的傳播—從xprop說起

    數字電路中的高阻態(tài)和不定態(tài)的區(qū)別

    請各位大俠么講解一下高阻態(tài)與不定態(tài)的區(qū)別?單片機的接口如何設置成高組態(tài)如何設置成不定態(tài)
    發(fā)表于 08-26 16:52

    高阻態(tài)與三態(tài)門的電路原理分析

    單片機I/O使用時都可以設置為高阻輸入,如凌陽,AVR等等。高阻輸入可以認為輸入電阻是無窮大的,認為I/O對前級影響極小,而且不產生電流(不衰減),而且在一定程度上也增加了芯片的抗電壓沖擊能力。高阻態(tài)
    發(fā)表于 01-08 11:03

    請問ucos中運行態(tài)和就緒態(tài)是在什么情況下轉化的?

    請問一下各位大神ucos 中運行態(tài) 和 就緒態(tài)是在什么情況下轉化的?????就是原子STM32開發(fā)指南中的狀態(tài) 轉換圖 中有運行態(tài)轉換到就緒態(tài)不知道是在什么情況下 發(fā)生的請指教???謝
    發(fā)表于 08-13 04:35

    請問CPU與寄存器,內核態(tài)與用戶態(tài)及如何切換?

    計算機硬件系統(tǒng)由哪幾部分構成?編程語言的作用及與操作系統(tǒng)和硬件的關系是什么?請問CPU與寄存器,內核態(tài)與用戶態(tài)及如何切換?
    發(fā)表于 10-25 06:31

    電機的冷態(tài)、熱態(tài)是怎樣定義的?

    電機的冷態(tài)、熱態(tài)是怎樣定義的?兩者如何判斷?滿負載時是熱態(tài)否則就是冷態(tài)是這樣嗎?
    發(fā)表于 12-13 08:16

    充電態(tài)內阻與放電態(tài)內阻何不同?

    充電態(tài)內阻與放電態(tài)內阻何不同? 充電態(tài)內阻指電池100%充滿電時的內阻,放 電態(tài)內阻指電池充分放電時后的內阻?! ∫话阏f來,放電
    發(fā)表于 11-14 11:42 ?1976次閱讀

    態(tài)哪三態(tài)_三態(tài)什么特點

    本文開始介紹了三態(tài)門的定義與三態(tài)門的應用,其次對三態(tài)門的三態(tài)及特點進行了介紹,最后闡述了三態(tài)輸出門電路與三
    發(fā)表于 03-01 14:47 ?13w次閱讀
    三<b class='flag-5'>態(tài)</b>門<b class='flag-5'>有</b>哪三<b class='flag-5'>態(tài)</b>_三<b class='flag-5'>態(tài)</b>門<b class='flag-5'>有</b>什么特點

    分享一個定位信號不定態(tài)的trace方法

    如果在波形中觀察到信號出現(xiàn)不定態(tài)X后,需要找到不定態(tài)的源頭。如下圖所示,雖然觀察到信號A為X,其實X的源頭在B。
    的頭像 發(fā)表于 06-18 09:44 ?3118次閱讀
    分享一個定位信號不定<b class='flag-5'>態(tài)</b>的trace方法

    什么是雙光子態(tài) 如何測量雙光子態(tài)

    測量雙光子態(tài)是一項重要的任務,因為它可以讓我們了解雙光子態(tài)的量子特性,以及如何利用它們進行量子信息處理。然而,測量雙光子態(tài)并不是一件容易的事情,因為它們是非經典的對象,不能用經典的方法
    發(fā)表于 08-31 10:54 ?1381次閱讀
    什么是雙光子<b class='flag-5'>態(tài)</b> 如何測量雙光子<b class='flag-5'>態(tài)</b>

    IC設計:接口X態(tài)隔離設計

    雖然真實芯片中,寄存器初始狀態(tài)值只會為1或者為0。但是在RTL級仿真過程中X態(tài)的傳播經常會給咱們造成很多麻煩,例如部分信號期望為0,但是仿真結果顯示為X態(tài)。
    發(fā)表于 09-20 10:47 ?771次閱讀
    IC設計:接口<b class='flag-5'>X</b><b class='flag-5'>態(tài)</b>隔離設計

    阻塞態(tài)可以直接到運行態(tài)

    阻塞態(tài)即是指進程或線程在等待某種事件或資源時暫時停止執(zhí)行的狀態(tài)。在計算機系統(tǒng)中,由于各種原因,進程或線程可能會進入阻塞態(tài),等待著能夠繼續(xù)執(zhí)行的條件成熟。 在絕大多數情況下,阻塞態(tài)到運行態(tài)
    的頭像 發(fā)表于 11-17 11:43 ?2766次閱讀

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

    隨著科技的發(fā)展和智能化設備的普及,我們對于高效能、低功耗的半導體設備需求愈加強烈,對低功耗仿真的需求成指數級增長。X態(tài)傳播分析是低功耗仿真的重要部分,但其作用往往會被低估。
    的頭像 發(fā)表于 01-24 09:34 ?941次閱讀
    <b class='flag-5'>X</b><b class='flag-5'>態(tài)</b>傳播在低功耗驗證中的作用

    英特爾將攜手AMD共同捍衛(wèi)x86生態(tài)

    10月16日,英特爾正式公布了一項重大合作計劃:與AMD攜手成立x86生態(tài)系統(tǒng)咨詢小組。該計劃由英特爾CEO帕特·基辛格親自宣布。   x86生態(tài)系統(tǒng)咨詢小組(
    的頭像 發(fā)表于 10-16 13:49 ?630次閱讀