色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

聊聊形式驗證中的SVA

sanyue7758 ? 來源:驗證工程師的自我修養 ? 2023-06-14 09:31 ? 次閱讀

一、序言

SVA,即SystemVerilog Assertion,在simulation和Formal都有極為廣泛的應用,這里介紹一些基本的概念和常用的語法。

二、一個簡單的例子

以一個arbiter仲裁器 作為例子來闡述一些概念,這個仲裁器有4個request來自不同的agent,req的每個bit表示相應的仲裁請求發起。gnt信號每個bit表示相應的請求被允許。同時,這里還有一個opcode輸入,用來override正常的請求,例如強制某個agent獲得grant,或者讓所有的gnt都無效一段時間。error信號表示一些錯誤的輸入序列或者錯誤的opcode。模塊框圖如下所示:

f1a08290-0a01-11ee-962d-dac502259ad0.png

interface代碼如下:

wKgZomSJGIWAA2AHAACGStX_-jQ053.jpg

三、基本概念

在介紹SVA之前,我們先來澄清幾個容易混淆的概念,尤其是assertion和assumption,傻傻分不清。

3.1 Assertion

assertion一般用來表示一個表達式恒為True,比如agent0未發起request,則gnt[0]不應該被拉起來。這種情形我們可以用assertion來加以檢查。

check_grant: assert property (!(gnt[0] && !req[0])) else $error(“Grant
without request for agent 0!”);

3.2 Assumption

assertion一般用于檢查DUT內部的狀態,而Assumption則主要用于約束驗證環境,主要用于約束輸入。例如我們期望opcode應該是合法的一些參數,就可以用assumption語句來進行約束。

good_opcode: assume property (opcode inside {FORCE0,FORCE1,FORCE2,
FORCE3,ACCESS_OFF,ACCESS_ON}) else $error(“Illegal opcode.”);

在simulation中,assumption跟assertion運行效果一樣,都是用來檢查輸入。但在Formal里面,二者則有很多的區別。對于上面那個assumption,在simulation中,不斷的檢測opcode,不在這些數里面則報一個assertion failure。在Formal里面,這是表示opcode激勵只能在這些數里面取值,大家可以將其理解成一個輸入的constraint。

3.3 COVER POINTS

這個沒什么好說的,在simulation和formal里面都是一致,用來表征覆蓋率。

不過需要注意的是,FV通常可以全覆蓋。但是因為有assumption,我們有時候會overconstraint ,這樣有些東西就可能被漏掉。所以coverpoint在FV里面至關重要。

一般來說,FV上來就先寫coverpoint,先規劃好哪些點需要覆蓋。其次還是assertion和assumption。這樣就不會出現過overconstraint而不自知的情形。

四、SVA 語法介紹

SVA Asssertion 語言分為幾個等級,自下而上,可以分成四個等級,即boolean、sequence、property和assertion statement,如下圖所示:

f1c62a86-0a01-11ee-962d-dac502259ad0.png

Booleans

Booleans 即布爾表達式,一些與或非的邏輯,例如:

(req[0]&&req[1]&&req[2]&&req[3])

Sequences

Sequences 顧名思義,就是boolean 表達式的序列,也就是說一段時間(幾個cycle)的booleans的組合,以來與clock event來定義這個區間,例如req0有效兩個cycle后gnt0有效

req[0] ##2 gnt[0]

Properties

Properties 則是進一步將sequences和一些操作符組合起來,表示一個implication或者其他的。比如:

req[0] ##2 gnt[0] |-> ##1 !gnt[0]

Assertion Statements

Assertion Statements 則是用assert, assume, cover等關鍵詞將properties例化,把SVA property 轉換成真正意義的assertion, assumption, cover point. 例如:

gnt_falls: assert property(req[0] ##2 gnt[0] |-> ##1 !gnt[0]);

另外還有兩個概念需要明確:

immediate assertions

Immediate assertion 簡單的assertion語句,只能用于procedural 語句里面。只支持booleans,不能有clock, reset或者property語句。

imm1: assert (!(gnt[0] && !req[0]))

concurrent assertions

Concurrent assertion 語句則一般用于檢查多個cycle期間段的一些property,一般我們說SVA基本代指Concurrent assertion

conc1: assert property (!(gnt[0] && !req[0]))

五、CONCURRENT 語法

concurrent assertion的一般寫法如下例所示:

safe_opcode: assert property (
@(posedge clk)
disable iff (rst)
(opcode inside {FORCE0,FORCE1,FORCE2,FORCE3,ACCESS_OFF,ACCESS_ON}))
else $error(“Illegal opcode.”);

一般包含下面幾點:

帶關鍵詞assert property.

帶clock

可選的disable iff語句

5.1 常用函數

SVA自帶了一些系統函數,這里列出一些常用的供參考。

f1f5a40a-0a01-11ee-962d-dac502259ad0.png

f22b9010-0a01-11ee-962d-dac502259ad0.png

5.2 Disable iff

Disable iff (iff表示if and only if)語句,顧名思義就是在某個條件成立的時候將assertion語句disable掉。但這里有點需要特別注意的是,diasable iff里面的邏輯采樣不是基于clock的,或者說相對clock來說是異步的。建議里面只放reset邏輯,不要放其他的邏輯。我們舉個例子,如果有gnt,那么鐵定有個req,兩種寫法:

bad_assert: assert property (@(posedge clk)
disable iff
(real_rst || ($countones(gnt) == 0))
($countones(req) > 0));
good_assert: assert property (@(posedge clk)
disable iff (real_rst)
(($countones(req) > 0) ||
($countones(gnt) == 0)));

表面上看,二者似乎一樣。仔細分析下,在clock 8的phase,由于gnt=0,整個assertion直接被disable,我們也就沒法檢測出上一個cycle的failure。

這里其實是涉及到SVA的采樣時間問題,或者說systemverilog的region問題,建議翻閱<> 這本書,里面有非常詳細的解讀。

f2762058-0a01-11ee-962d-dac502259ad0.png

六、SEQUENCE 語法

6.1 delay

sequence 基本的操作符是#,即delay,##n (延時特定個cycle) or ##[a:b] (延時 a 到b 個cycle) 。

f2a7e746-0a01-11ee-962d-dac502259ad0.png

6.2 repetition

repetition 操作符 [*m:n] ,表示subsequence 重復多少次。

f2d2d3e8-0a01-11ee-962d-dac502259ad0.png

6.3 logical ops

Sequences 可以通過and 或者or組合起來。

and: 兩個sequence同時start,但它們的結束點未必相同。

or: 兩個sequence至少有一個match

throughout : Boolean expression remains true for the whole execution of a sequence

within: one sequence occurs within the execution of another

f312bada-0a01-11ee-962d-dac502259ad0.png

f3575b4a-0a01-11ee-962d-dac502259ad0.png

f38eb7c0-0a01-11ee-962d-dac502259ad0.png

6.4 go to repetetion

goto repetition 操作符,即 [- > n] 和 [ =n] ,表示有value重復了正好n次,未必是連續的cycle。

這兩個操作符如果后面不接其他的東西的話,是等價的。如果后面帶有其他的sequence的話,意義有點不一樣:

[->n]: goto repetition, 下一個sequence必須緊接著。

[=n]: nonconsecutive goto repetition, 下一個seuquece出現前允許插入若干個cycle的空閑

f3ca41a0-0a01-11ee-962d-dac502259ad0.png

6.5 Implication

sequence |-> property :sequence match后立即檢查property

sequence |=> property. :sequence match后delay一個cycle再檢查property

左邊稱為antecedent (先決條件),必須為sequence;右邊稱為consequence (結果) ,可以是squence或者property。

需要強調一點,如果antecedent 在整個過程都不滿足的話,這個assertion也不會fail,這種情形在formal中稱為vacuously,即空的pass。

f406a852-0a01-11ee-962d-dac502259ad0.png

f42ea244-0a01-11ee-962d-dac502259ad0.png

還有一些SVA語法,不是很常用,可以用到時候翻閱手冊查詢

六、MULTITHREADING

MULTITHREADING,即多線程。這里需要強調下,assertion的多線程屬性;每次antecedent為真,工具都將新啟動一個線程來check,我們以一個例子來進行說明。

req信號有效后,10個cycle之后gnt信號應該有效。代碼如下:

delayed_gnt: assert property (req[0] |->##10 gnt[0])

由于req和gnt之前隔了10個cycle,很有可能在這中間req信號再次被拉起,如果這樣的話,工具會啟多個線程,每個線程檢查相應的req和gnt對應的關系。

f46ed134-0a01-11ee-962d-dac502259ad0.png

七、總結

SVA語法較多,需要反復練習才能掌握和精通。尤其是它的debug,需要反復實踐,加以體會。不建議寫很復雜的SVA,不方便debug。





審核編輯:劉清

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

    關注

    1

    文章

    19

    瀏覽量

    10141
  • Verilog語言
    +關注

    關注

    0

    文章

    113

    瀏覽量

    8249
  • DUT
    DUT
    +關注

    關注

    0

    文章

    189

    瀏覽量

    12397

原文標題:干貨,聊聊形式驗證中的SVA

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

收藏 人收藏

    評論

    相關推薦

    芯片開發形式化驗證的是一個誤區

    今天的形式驗證工具具有更大的容量,并且許多工具能夠在服務器或云上以分布式模式運行。形式驗證的技術和方法也得到了擴展。
    的頭像 發表于 11-29 14:31 ?1944次閱讀

    關于功能驗證、時序驗證形式驗證、時序建模的論文

    半定制/全定制混合設計的特點,提出并實現了一套半定制/全定制混合設計流程功能和時序驗證的方法。論文從模擬驗證、等價性驗證和全定制設計的功能驗證
    發表于 12-07 17:40

    SVA斷言是基于邊沿還是電平呢?

    SVA斷言是一個強時序的技術,很多時候SVA的實際時序和驗證工程師的期望可能不同,這種不同很難調試定位。下面是一個SVA斷言的示例,驗證工程
    發表于 08-25 15:57

    聊聊芯片IC驗證的風險

    驗證的沒有驗證到。這類問題表現在驗證環境可能有bug,自己沒發現,或是 第三條提到的驗證架構的局限性,導致bug沒有驗證到。第六個,忽視了l
    發表于 10-21 14:25

    SVA上廣電D2972-73系列彩電電路圖

    SVA上廣電D2972-73彩色電視機電路圖,SVA上廣電D2972-73彩電圖紙,SVA上廣電D2972-73原理圖。
    發表于 05-23 10:55 ?175次下載
    <b class='flag-5'>SVA</b>上廣電D2972-73系列彩電電路圖

    SVA系列(通用)彩電電路圖(1)

    SVA系列彩色電視機電路圖,SVA系列彩電圖紙,SVA系列原理圖。
    發表于 05-25 09:25 ?185次下載
    <b class='flag-5'>SVA</b>系列(通用)彩電電路圖(1)

    SVA系列(通用)彩電電路圖(2)

    SVA系列彩色電視機電路圖,SVA系列彩電圖紙,SVA系列原理圖。 
    發表于 05-25 09:28 ?90次下載
    <b class='flag-5'>SVA</b>系列(通用)彩電電路圖(2)

    深層解析形式驗證

      形式驗證(Formal Verification)是一種IC設計的驗證方法,它的主要思想是通過使用形式證明的方式來驗證一個設計的功能是否
    發表于 08-06 10:05 ?3990次閱讀
    深層解析<b class='flag-5'>形式</b><b class='flag-5'>驗證</b>

    形式驗證成為SoC模塊驗證的主流

      以對以仿真為中心的工程師有意義的方式調試形式驗證代碼,在很大程度上已被許多形式驗證供應商解決。大多數工具可以在斷言失敗的情況下輸出“見證”。也就是說,導致斷言失敗的仿真波形
    的頭像 發表于 06-13 10:25 ?1300次閱讀
    <b class='flag-5'>形式</b><b class='flag-5'>驗證</b>成為SoC模塊<b class='flag-5'>驗證</b>的主流

    形式驗證簡介

    形式驗證是一種自動檢查方法,可以捕捉許多常見的設計錯誤,并可以發現設計的歧義。
    的頭像 發表于 07-28 14:04 ?2534次閱讀

    16nm技術的形式驗證流程、優勢和調試

    必須優化正式驗證流程的初始網表,因此測試設計需要額外的邏輯。在這里,我們提供16 nm節點的形式驗證流程和調試技術。
    的頭像 發表于 11-24 12:09 ?1344次閱讀
    16nm技術的<b class='flag-5'>形式</b><b class='flag-5'>驗證</b>流程、優勢和調試

    形式驗證入門之基本概念和流程

    和靜態時序分析工具一起來完成對電路完備的驗證。本文就以Synopsys公司的formality工具為例,來介紹形式驗證的流程和基本概念,后續會詳細介紹使用formality做RTL2Gate流程
    的頭像 發表于 12-27 15:18 ?2279次閱讀

    介紹使用SVA的幾個優勢

    SVA支持多時鐘域(clock domain crossing (CDC))邏輯,例如異步FIFO。
    的頭像 發表于 01-13 16:00 ?902次閱讀

    使用SVA的幾個好處

    SVA支持多時鐘域(clock domain crossing (CDC))邏輯,例如異步FIFO。 2. SVA是一種描述語言,可讀性比較強。
    的頭像 發表于 03-21 14:49 ?751次閱讀

    形式驗證及其在芯片工程的應用

    形式驗證不僅僅是芯片領域中的一個概念。正如文章開頭提到過,形式驗證強調使用嚴格的數學推理和形式化技術,以確保系統的行為是否符合預期的性質和規
    的頭像 發表于 10-20 10:46 ?1110次閱讀
    主站蜘蛛池模板: 欧美日韩一二区旡码高清在线| 久久99热这里只有精品66| 国产精品亚洲AV色欲在线观看| 美女露出乳胸扒开尿口| 亚洲人成无码久久久AAA片| 国产精品爽爽久久久久久竹菊 | 男女牲交大战免费播放| 真人美女精美小穴| 久久久精品久久| 一亲二脱三插| 久久久久久久网| 在线视频av大全色久久| 开心色99xxxx开心色| 最近免费中文MV在线字幕 | 九九热视频这里只有精| 亚洲永久精品ww47app| 久久re6热在线视频精品66| 一二三四在线观看高清电视剧 | 久久一级视频| 51vv视频社区| 女人18毛片| 久久精品亚洲AV高清网站性色| 亚洲色欲国产免费视频| 久久国产精品无码视欧美| 中国老太婆xxxxx| 蜜芽tv在线观看免费网站| 99RE6这里只有精品国产AV| 女仆乖H调教跪趴| 陈红下面又紧又小好爽| 特级黑人三人共一女| 国产又黄又粗又爽又色的视频软件| 亚洲色图另类小说| 免费麻豆国产黄网站在线观看| xiah俊秀| 亚洲 日韩经典 中文字幕| 精品国产自在现线拍400部| 18黄女脱内衣| 久久国产精品高清一区二区三区| 稚嫩挤奶h调教h| 热99re久久精品国产首页| 国产精品一区二区免费|