精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

一些個SystemVerilog高效仿真技巧

jf_78858299 ? 來源:jf_78858299 ? 作者:jf_78858299 ? 2023-01-21 17:36 ? 次閱讀

做動態仿真驗證通常會遇到要等待仿真結果的情況,特別是在調試某個測試用例的時候。很多時候,工程師們會自然地認為仿真速度大部分依賴于跑仿真任務的服務器本身的性能,以及EDA仿真工具的能力。而實際上,高效的驗證環境以及代碼質量也是影響仿真速度的關鍵因素。

另一方面,提高仿真速度這回事,對于芯片工程師來說本身就是“求人不如求己”。提高服務器機器性能意味著更大的資金投入,更高性能的仿真工具也不是一時半會能達成的。而探索更高效的驗證方法學,構建更高執行效率的代碼是當下就能做的事情。

本文的主要內容參考來自于Cliff Cummings在2019年DVCon會議上發表的文章:Yikes! Why is My SystemVerilog Still So Slooooow. 這篇文章主要探討了SystemVerilog仿真速度跟Coding風格之間的關系,文章中有詳細的實驗目標、方法和數據結果呈現。本文將摘錄和分析那些對仿真速度影響較大的編碼風格。

使用向量操作代替單bit操作

仿真器在做完整向量計算的速度比單bit計算要高。根據參考文獻的數據,在某款仿真工具下,最高提速可以達到3倍以上。

下面是一個例程,分別呈現不同的代碼實現風格。

圖片

避免在循環中實例化對象

這個技巧關系到內存的分配和回收。低效的內存管理會導致嚴重的cache miss、堆棧管理開銷和垃圾回收開銷,盡管這些都是操作系統幫我們做的。

當我們需要一種新的數據結構時,可以使用結構體struct就不用class,類的例化和垃圾回收都是開銷。創建一個對象的時候,不要上來就是一個new,可以考慮是否可以重用之前創建過的對象。

如下例程,應用這個技巧在三款主流仿真工具上都能帶來仿真速度收益,最高有超過一半的速度提升。

條件判斷字符串處理

在仿真過程中不斷地打印信息或者讀寫文件會導致仿真速度非常慢,畢竟調用計算機IO效率并不高。在UVM中有健全的report管理機制,可以根據設定的verbosity等級來判斷是否需要打印信息出來。

除了信息打印,字符串的格式處理也是很大的開銷。如果借用report的管理機制來判斷是否有必要進行字符串格式處理,可以非常有效地提高仿真速度。

如下例程,帶有條件判斷的代碼在三款主流仿真工具上都能帶來仿真速度收益,而且這個收益非常大,達到了33倍~100倍。

圖片

減少不必要的端口采樣或驅動

這是另一種減少不必要操作的技巧。要知道在UVM中,操作TLM analysis port是開銷比較大的,因為端口的驅動行為,都會通過回調機制來執行關聯到該端口的所有consumer的端口動作。理解這個實現機制,其實還得看看UVM的源碼,這里就不做展開解析了。

此外,某些個analysis port是否連接到其他component是依賴于當前的驗證環境的,如果根據analysis port的狀態判斷是否進行端口驅動,可以減少一些不必要的操作。

如下例程,在monitor的run_phase中根據其analysis port狀態來進行端口采樣和廣播給其他組件,可以帶來一部分的仿真速度收益。

圖片

用回調函數代替低效的隨機約束

SystemVerilog提供了很多種隨機化變量和添加隨機約束的方法,具體可以參考公眾號的另外兩篇文章《暗藏玄機的SV隨機化》《五花八門的SystemVerilog隨機約束》。在設計隨機約束的時候,除了要確保約束不沖突(即約束有解)之外,還需要避免產生無效的約束解。

其實,SV已經提供了pre_randomize() / post_randomize()兩個分別在求解隨機值前后會執行的回調函數。靈活使用這兩個函數可以避免一些非常低效的約束行為。

如下例程,使用post_randomize對隨機后的數列進行排序,可以避免在約束中使用循環去限制每一個數列元素,從而獲得數十倍的仿真速度提升。

圖片

參考文獻

[1] Cliff Cummings, John Rose, Adam Sherer. "Yikes! Why is My SystemVerilog Still So Slooooow." (2019)

[2] IEEE Standard Association. "IEEE Standard for SystemVerilog-Unified Hardware Design, Specification, and Verification Language." (2013).

審核編輯 黃昊宇

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

    關注

    50

    文章

    4044

    瀏覽量

    133419
  • 服務器
    +關注

    關注

    12

    文章

    9021

    瀏覽量

    85185
  • eda
    eda
    +關注

    關注

    71

    文章

    2709

    瀏覽量

    172898
收藏 人收藏

    評論

    相關推薦

    SystemVerilog中的類構造函數new

    systemverilog中,如果個類沒有顯式地聲明構造函數(new()),那么編譯仿真工具會自動提供個隱式的new()函數。這個new函數會默認地將所有屬性變量。
    發表于 11-16 09:58 ?3583次閱讀

    [啟芯公開課] SystemVerilog for Verification

    設計驗證相關的公開課!SystemVerilog作為IEEE-1800,將VLSI設計、驗證和斷言屬性集中在起,是數字超大規模集成電路設計和驗證領域最流行的語言。從2006年至今
    發表于 06-10 09:25

    systemverilog學習教程

    systemverilog一些基本語法以及和verilog語言之間的區別。
    發表于 04-01 14:24

    如何用questasim進行systemverilog仿真

    剛接觸systemverilog,最近在采用questasim10.1版本進行仿真時,發現貌似questasim不支持擴展類的操作?代碼如下:`timescale 1ns/1nsmodule
    發表于 04-11 09:44

    round robin 的 systemverilog 代碼

    大家好,我對個 round robin 的 systemverilog 代碼有疑惑。https://www.edaplayground.com/x/2TzD代碼第49和54行是怎么解析呢 ?
    發表于 03-14 19:16

    SystemVerilog Assertion Handbo

    SystemVerilog Assertion Handbook1 ROLE OF SYSTEMVERILOG ASSERTIONSIN A VERIFICATION METHODOLOGY
    發表于 07-22 14:08 ?188次下載

    SystemVerilog的斷言手冊

    SystemVerilog Assertion Handbook1 ROLE OF SYSTEMVERILOG ASSERTIONSIN A VERIFICATION METHODOLOGY
    發表于 07-22 14:12 ?20次下載

    SystemVerilog的正式驗證和混合驗證

    手冊的這部分探討了使用SystemVerilog進行驗證,然后查看了使用SystemVerilog的優點和缺點。
    發表于 03-29 10:32 ?24次下載

    如何利用SystemVerilog仿真生成隨機數

    采用SystemVerilog進行仿真則更容易生成隨機數,而且對隨機數具有更強的可控性。對于隨機變量,在SystemVerilog中可通過rand或randc加數據類型的方式定義。rand表明該變量
    的頭像 發表于 10-30 10:33 ?1.1w次閱讀
    如何利用<b class='flag-5'>SystemVerilog</b><b class='flag-5'>仿真</b>生成隨機數

    SystemVerilog中枚舉類型的使用建議

    SystemVerilog中枚舉類型雖然屬于種“強類型”,但是枚舉類型還是提供了一些“不正經”的用法可以實現一些很常見的功能,本文將示例一些
    的頭像 發表于 09-01 14:20 ?1642次閱讀

    一些有趣的數組相關的SystemVerilog約束

    我們在工作中常常會針對數組施加各式的約束,下面列舉下有趣的Systemverilog數組約束示例。
    的頭像 發表于 03-08 13:12 ?920次閱讀

    解碼國產EDA數字仿真器系列之二 | 如何實現全面的SystemVerilog語法覆蓋?

    SystemVeirlog的全面支持是開發商用仿真器的第道門檻。市面上可以找到不少基于純Verilog的仿真器,但是真正能完整支持SystemVerilog 的仍然屈指可數。如何全面
    發表于 04-07 14:40 ?732次閱讀
    解碼國產EDA數字<b class='flag-5'>仿真</b>器系列之二 | 如何實現全面的<b class='flag-5'>SystemVerilog</b>語法覆蓋?

    一些有趣的數組相關的SystemVerilog約束

    我們在工作中常常會針對數組施加各式的約束,下面列舉下有趣的**Systemverilog數組約束**示例
    的頭像 發表于 05-30 11:13 ?751次閱讀

    如何實現全面的SystemVerilog語法覆蓋

    SystemVeirlog的全面支持是開發商用仿真器的第道門檻。市面上可以找到不少基于純Verilog的仿真器,但是真正能完整支持SystemVerilog 的仍然屈指可數。如何全面
    的頭像 發表于 07-14 15:15 ?566次閱讀
    如何實現全面的<b class='flag-5'>SystemVerilog</b>語法覆蓋

    分享一些SystemVerilog的coding guideline

    本文分享一些SystemVerilog的coding guideline。
    的頭像 發表于 11-22 09:17 ?684次閱讀
    分享<b class='flag-5'>一些</b><b class='flag-5'>SystemVerilog</b>的coding  guideline