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

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

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

一些個(gè)SystemVerilog高效仿真技巧

jf_78858299 ? 來(lái)源:jf_78858299 ? 作者:jf_78858299 ? 2023-01-21 17:36 ? 次閱讀

做動(dòng)態(tài)仿真驗(yàn)證通常會(huì)遇到要等待仿真結(jié)果的情況,特別是在調(diào)試某個(gè)測(cè)試用例的時(shí)候。很多時(shí)候,工程師們會(huì)自然地認(rèn)為仿真速度大部分依賴于跑仿真任務(wù)的服務(wù)器本身的性能,以及EDA仿真工具的能力。而實(shí)際上,高效的驗(yàn)證環(huán)境以及代碼質(zhì)量也是影響仿真速度的關(guān)鍵因素。

另一方面,提高仿真速度這回事,對(duì)于芯片工程師來(lái)說(shuō)本身就是“求人不如求己”。提高服務(wù)器機(jī)器性能意味著更大的資金投入,更高性能的仿真工具也不是一時(shí)半會(huì)能達(dá)成的。而探索更高效的驗(yàn)證方法學(xué),構(gòu)建更高執(zhí)行效率的代碼是當(dāng)下就能做的事情。

本文的主要內(nèi)容參考來(lái)自于Cliff Cummings在2019年DVCon會(huì)議上發(fā)表的文章:Yikes! Why is My SystemVerilog Still So Slooooow. 這篇文章主要探討了SystemVerilog仿真速度跟Coding風(fēng)格之間的關(guān)系,文章中有詳細(xì)的實(shí)驗(yàn)?zāi)繕?biāo)、方法和數(shù)據(jù)結(jié)果呈現(xiàn)。本文將摘錄和分析那些對(duì)仿真速度影響較大的編碼風(fēng)格。

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

仿真器在做完整向量計(jì)算的速度比單bit計(jì)算要高。根據(jù)參考文獻(xiàn)的數(shù)據(jù),在某款仿真工具下,最高提速可以達(dá)到3倍以上。

下面是一個(gè)例程,分別呈現(xiàn)不同的代碼實(shí)現(xiàn)風(fēng)格。

圖片

避免在循環(huán)中實(shí)例化對(duì)象

這個(gè)技巧關(guān)系到內(nèi)存的分配和回收。低效的內(nèi)存管理會(huì)導(dǎo)致嚴(yán)重的cache miss、堆棧管理開(kāi)銷和垃圾回收開(kāi)銷,盡管這些都是操作系統(tǒng)幫我們做的。

當(dāng)我們需要一種新的數(shù)據(jù)結(jié)構(gòu)時(shí),可以使用結(jié)構(gòu)體struct就不用class,類的例化和垃圾回收都是開(kāi)銷。創(chuàng)建一個(gè)對(duì)象的時(shí)候,不要上來(lái)就是一個(gè)new,可以考慮是否可以重用之前創(chuàng)建過(guò)的對(duì)象。

如下例程,應(yīng)用這個(gè)技巧在三款主流仿真工具上都能帶來(lái)仿真速度收益,最高有超過(guò)一半的速度提升。

條件判斷字符串處理

在仿真過(guò)程中不斷地打印信息或者讀寫(xiě)文件會(huì)導(dǎo)致仿真速度非常慢,畢竟調(diào)用計(jì)算機(jī)IO效率并不高。在UVM中有健全的report管理機(jī)制,可以根據(jù)設(shè)定的verbosity等級(jí)來(lái)判斷是否需要打印信息出來(lái)。

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

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

圖片

減少不必要的端口采樣或驅(qū)動(dòng)

這是另一種減少不必要操作的技巧。要知道在UVM中,操作TLM analysis port是開(kāi)銷比較大的,因?yàn)槎丝诘尿?qū)動(dòng)行為,都會(huì)通過(guò)回調(diào)機(jī)制來(lái)執(zhí)行關(guān)聯(lián)到該端口的所有consumer的端口動(dòng)作。理解這個(gè)實(shí)現(xiàn)機(jī)制,其實(shí)還得看看UVM的源碼,這里就不做展開(kāi)解析了。

此外,某些個(gè)analysis port是否連接到其他component是依賴于當(dāng)前的驗(yàn)證環(huán)境的,如果根據(jù)analysis port的狀態(tài)判斷是否進(jìn)行端口驅(qū)動(dòng),可以減少一些不必要的操作。

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

圖片

用回調(diào)函數(shù)代替低效的隨機(jī)約束

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

其實(shí),SV已經(jīng)提供了pre_randomize() / post_randomize()兩個(gè)分別在求解隨機(jī)值前后會(huì)執(zhí)行的回調(diào)函數(shù)。靈活使用這兩個(gè)函數(shù)可以避免一些非常低效的約束行為。

如下例程,使用post_randomize對(duì)隨機(jī)后的數(shù)列進(jìn)行排序,可以避免在約束中使用循環(huán)去限制每一個(gè)數(shù)列元素,從而獲得數(shù)十倍的仿真速度提升。

圖片

參考文獻(xiàn)

[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).

審核編輯 黃昊宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(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)注

    50

    文章

    4003

    瀏覽量

    133248
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    12

    文章

    8873

    瀏覽量

    84971
  • eda
    eda
    +關(guān)注

    關(guān)注

    71

    文章

    2673

    瀏覽量

    172600
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    SystemVerilog中的類構(gòu)造函數(shù)new

    systemverilog中,如果個(gè)類沒(méi)有顯式地聲明構(gòu)造函數(shù)(new()),那么編譯仿真工具會(huì)自動(dòng)提供個(gè)隱式的new()函數(shù)。這個(gè)new函數(shù)會(huì)默認(rèn)地將所有屬性變量。
    發(fā)表于 11-16 09:58 ?3503次閱讀

    [啟芯公開(kāi)課] SystemVerilog for Verification

    設(shè)計(jì)驗(yàn)證相關(guān)的公開(kāi)課!SystemVerilog作為IEEE-1800,將VLSI設(shè)計(jì)、驗(yàn)證和斷言屬性集中在起,是數(shù)字超大規(guī)模集成電路設(shè)計(jì)和驗(yàn)證領(lǐng)域最流行的語(yǔ)言。從2006年至今
    發(fā)表于 06-10 09:25

    systemverilog學(xué)習(xí)教程

    systemverilog一些基本語(yǔ)法以及和verilog語(yǔ)言之間的區(qū)別。
    發(fā)表于 04-01 14:24

    如何用questasim進(jìn)行systemverilog仿真

    剛接觸systemverilog,最近在采用questasim10.1版本進(jìn)行仿真時(shí),發(fā)現(xiàn)貌似questasim不支持?jǐn)U展類的操作?代碼如下:`timescale 1ns/1nsmodule
    發(fā)表于 04-11 09:44

    round robin 的 systemverilog 代碼

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

    SystemVerilog Assertion Handbo

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

    SystemVerilog的斷言手冊(cè)

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

    SystemVerilog的正式驗(yàn)證和混合驗(yàn)證

    手冊(cè)的這部分探討了使用SystemVerilog進(jìn)行驗(yàn)證,然后查看了使用SystemVerilog的優(yōu)點(diǎn)和缺點(diǎn)。
    發(fā)表于 03-29 10:32 ?24次下載

    如何利用SystemVerilog仿真生成隨機(jī)數(shù)

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

    SystemVerilog中枚舉類型的使用建議

    SystemVerilog中枚舉類型雖然屬于種“強(qiáng)類型”,但是枚舉類型還是提供了一些“不正經(jīng)”的用法可以實(shí)現(xiàn)一些很常見(jiàn)的功能,本文將示例一些
    的頭像 發(fā)表于 09-01 14:20 ?1575次閱讀

    一些有趣的數(shù)組相關(guān)的SystemVerilog約束

    我們?cè)诠ぷ髦谐3?huì)針對(duì)數(shù)組施加各式的約束,下面列舉下有趣的Systemverilog數(shù)組約束示例。
    的頭像 發(fā)表于 03-08 13:12 ?877次閱讀

    解碼國(guó)產(chǎn)EDA數(shù)字仿真器系列之二 | 如何實(shí)現(xiàn)全面的SystemVerilog語(yǔ)法覆蓋?

    SystemVeirlog的全面支持是開(kāi)發(fā)商用仿真器的第道門(mén)檻。市面上可以找到不少基于純Verilog的仿真器,但是真正能完整支持SystemVerilog 的仍然屈指可數(shù)。如何全面
    發(fā)表于 04-07 14:40 ?712次閱讀
    解碼國(guó)產(chǎn)EDA數(shù)字<b class='flag-5'>仿真</b>器系列之二 | 如何實(shí)現(xiàn)全面的<b class='flag-5'>SystemVerilog</b>語(yǔ)法覆蓋?

    一些有趣的數(shù)組相關(guān)的SystemVerilog約束

    我們?cè)诠ぷ髦谐3?huì)針對(duì)數(shù)組施加各式的約束,下面列舉下有趣的**Systemverilog數(shù)組約束**示例
    的頭像 發(fā)表于 05-30 11:13 ?688次閱讀

    如何實(shí)現(xiàn)全面的SystemVerilog語(yǔ)法覆蓋

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

    分享一些SystemVerilog的coding guideline

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