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

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

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

分析那些對(duì)仿真速度影響較大的編碼風(fēng)格

FPGA之家 ? 來源:FPGA之家 ? 作者:FPGA之家 ? 2022-08-11 09:26 ? 次閱讀

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

本文的主要內(nè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)格。

8fa84634-190e-11ed-ba43-dac502259ad0.png

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

這個(gè)技巧關(guān)系到內(nèi)存的分配和回收。低效的內(nèi)存管理會(huì)導(dǎo)致嚴(yán)重的cache miss、堆棧管理開銷和垃圾回收開銷,盡管這些都是操作系統(tǒng)幫我們做的。 當(dāng)我們需要一種新的數(shù)據(jù)結(jié)構(gòu)時(shí),可以使用結(jié)構(gòu)體struct就不用class,類的例化和垃圾回收都是開銷。創(chuàng)建一個(gè)對(duì)象的時(shí)候,不要上來就是一個(gè)new,可以考慮是否可以重用之前創(chuàng)建過的對(duì)象。 如下例程,應(yīng)用這個(gè)技巧在三款主流仿真工具上都能帶來仿真速度收益,最高有超過一半的速度提升。

8fcb1038-190e-11ed-ba43-dac502259ad0.png

條件判斷字符串處理

在仿真過程中不斷地打印信息或者讀寫文件會(huì)導(dǎo)致仿真速度非常慢,畢竟調(diào)用計(jì)算機(jī)IO效率并不高。在UVM中有健全的report管理機(jī)制,可以根據(jù)設(shè)定的verbosity等級(jí)來判斷是否需要打印信息出來。 除了信息打印,字符串的格式處理也是很大的開銷。如果借用report的管理機(jī)制來判斷是否有必要進(jìn)行字符串格式處理,可以非常有效地提高仿真速度。 如下例程,帶有條件判斷的代碼在三款主流仿真工具上都能帶來仿真速度收益,而且這個(gè)收益非常大,達(dá)到了33倍~100倍。

8ff502b2-190e-11ed-ba43-dac502259ad0.png

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

這是另一種減少不必要操作的技巧。要知道在UVM中,操作TLM analysis port是開銷比較大的,因?yàn)槎丝诘尿?qū)動(dòng)行為,都會(huì)通過回調(diào)機(jī)制來執(zhí)行關(guān)聯(lián)到該端口的所有consumer的端口動(dòng)作。理解這個(gè)實(shí)現(xiàn)機(jī)制,其實(shí)還得看看UVM的源碼,這里就不做展開解析了。 此外,某些個(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)來進(jìn)行端口采樣和廣播給其他組件,可以帶來一部分的仿真速度收益。

901ac16e-190e-11ed-ba43-dac502259ad0.png

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

SystemVerilog提供了很多種隨機(jī)化變量和添加隨機(jī)約束的方法,具體可以參考公眾號(hào)的另外兩篇文章《暗藏玄機(jī)的SV隨機(jī)化》《五花八門的SystemVerilog隨機(jī)約束》。在設(shè)計(jì)隨機(jī)約束的時(shí)候,除了要確保約束不沖突(即約束有解)之外,還需要避免產(chǎn)生無效的約束解。 其實(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ù)十倍的仿真速度提升。

903fb50a-190e-11ed-ba43-dac502259ad0.png

審核編輯 :李倩

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

    關(guān)注

    50

    文章

    3972

    瀏覽量

    132965
  • 仿真器
    +關(guān)注

    關(guān)注

    14

    文章

    1008

    瀏覽量

    83441
  • bit
    bit
    +關(guān)注

    關(guān)注

    0

    文章

    47

    瀏覽量

    31934

原文標(biāo)題:SystemVerilog高效仿真技巧

文章出處:【微信號(hào):zhuyandz,微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    OPA820同樣的建波電路mutisim仿真與TINA輸出結(jié)果差異較大,原因是什么?

    同樣的建波電路 mutisim 仿真與TINA 輸出結(jié)果差異較大,原因是什么?如何調(diào)整電路才能讓兩個(gè)軟件仿真結(jié)果一致,實(shí)現(xiàn)檢波?
    發(fā)表于 08-07 07:45

    旋轉(zhuǎn)編碼器控制電機(jī)速度

    旋轉(zhuǎn)編碼器控制電機(jī)速度
    發(fā)表于 06-24 09:16 ?4次下載

    怎么用編碼器控制變頻器速度?

    編碼器控制變頻器速度是一種常見的工業(yè)自動(dòng)化控制方式,它通過編碼器實(shí)時(shí)監(jiān)測(cè)電機(jī)的轉(zhuǎn)速、位置等信息,并將這些信息反饋給變頻器,從而實(shí)現(xiàn)對(duì)電機(jī)的精確控制。本文將詳細(xì)介紹編碼器控制變頻器
    的頭像 發(fā)表于 06-23 15:22 ?1420次閱讀
    怎么用<b class='flag-5'>編碼</b>器控制變頻器<b class='flag-5'>速度</b>?

    怎么用編碼器控制變頻器速度

    編碼器控制變頻器速度是一種常見的工業(yè)自動(dòng)化控制方式,它通過編碼器實(shí)時(shí)監(jiān)測(cè)電機(jī)的轉(zhuǎn)速、位置等信息,并將這些信息反饋給變頻器,從而實(shí)現(xiàn)對(duì)電機(jī)的精確控制。本文將詳細(xì)介紹編碼器控制變頻器
    的頭像 發(fā)表于 06-17 15:11 ?784次閱讀

    基于PSpice System Option接口的直流電機(jī)控制系統(tǒng)設(shè)計(jì)

    概述基于仿真速度和結(jié)果精度之間的權(quán)衡,在設(shè)計(jì)的第一階段使用高精度模型不是一種有效的方法。高精度模型會(huì)使仿真速度變的非常慢,建議在設(shè)計(jì)過程中的每個(gè)階段使用合適的模型。可能會(huì)發(fā)現(xiàn),合適的模型會(huì)更容易優(yōu)化
    的頭像 發(fā)表于 04-29 08:12 ?403次閱讀
    基于PSpice System Option接口的直流電機(jī)控制系統(tǒng)設(shè)計(jì)

    CAE熱仿真中的芯片物性等效建模方法分析

    的特性、精度和仿真速度有著不同要求。因此,根據(jù)需求提供滿足一定要求的仿真模型是建模工作的關(guān)鍵。 本文在于研究用 ANSYS icepak/Flotherm建模的時(shí)候,主要探討對(duì)芯片等材料屬性的選取與設(shè)置,以及本體模型如何構(gòu)建。文中給出相關(guān)
    的頭像 發(fā)表于 04-28 09:25 ?770次閱讀
    CAE熱<b class='flag-5'>仿真</b>中的芯片物性等效建模方法<b class='flag-5'>分析</b>

    MATLAB電路仿真時(shí)間要考慮那些因素

    MATLAB電路仿真是一種常用的工具,用于模擬和分析電子電路的性能。在進(jìn)行電路仿真時(shí),需要考慮各種因素,以確保仿真結(jié)果的準(zhǔn)確性和可靠性。下面是一些需要考慮的主要因素: 電路拓?fù)浣Y(jié)構(gòu):電
    的頭像 發(fā)表于 04-21 09:27 ?536次閱讀

    STM32F429做的PIL仿真速度非常慢的原因?

    ,但是速度非常慢。不知道是否STM32F429的參數(shù)設(shè)定有問題。有沒有哪位大神做過相關(guān)的仿真。補(bǔ)充下:仿真中控制器開關(guān)頻率是5000khz,采樣時(shí)間為5e^-5s。 先謝謝了!
    發(fā)表于 04-11 07:28

    ADXL345各軸加速度值有較大波動(dòng)的原因?

    ADXL345各軸加速度值有較大波動(dòng) 1、如靜止不動(dòng),其測(cè)得的各軸加速度值有近30%-50%的波動(dòng) 2、芯片轉(zhuǎn)換個(gè)位置,靜止不動(dòng),各軸測(cè)的加速度值有十分大的變化,為什么。 難道芯片
    發(fā)表于 01-02 08:22

    編碼器與PLC的接線方法

    編碼器分為旋轉(zhuǎn)編碼器和線性編碼器兩種。旋轉(zhuǎn)編碼器用于檢測(cè)旋轉(zhuǎn)位置和速度,而線性編碼器用于檢測(cè)直線
    發(fā)表于 12-22 09:20 ?888次閱讀
    <b class='flag-5'>編碼</b>器與PLC的接線方法

    影響SaberRD仿真速度的因素有哪些呢?

    目前,專業(yè)仿真軟件的功能不斷增加,仿真領(lǐng)域不斷擴(kuò)大,處理的對(duì)象越來越復(fù)雜,這一切都使得軟件自身顯得越來越龐大,而硬件的更新速度也往往慢于軟件更新的速度,這就造成了我們的
    的頭像 發(fā)表于 12-06 11:30 ?509次閱讀

    編碼器反饋轉(zhuǎn)電機(jī),發(fā)現(xiàn)電機(jī)速度反饋不穩(wěn)怎么解決?

    我優(yōu)化完電機(jī)的速度環(huán)和電流環(huán)。 用編碼器反饋轉(zhuǎn)電機(jī) 發(fā)現(xiàn)電機(jī)速度反饋不穩(wěn),偏差在2-3個(gè)左右。編碼器固定良好。 優(yōu)化出的P225=20 P226=0.159反復(fù)更改225大小,
    發(fā)表于 11-23 07:42

    AD835用LTspice仿真特別慢的原因?怎么解決?

    輸入為1V,50Hz的正弦相乘,仿真速度是65us/s,而且兩個(gè)AD835連在一起使用是仿真只能進(jìn)行20ns左右,就不能仿真
    發(fā)表于 11-20 07:54

    伺服電機(jī)更換編碼器后速度太快怎么解決?

    伺服電機(jī)更換編碼器后速度太快
    發(fā)表于 11-17 07:48

    閥門電動(dòng)裝置智能速度控制器研究與仿真

    電子發(fā)燒友網(wǎng)站提供《閥門電動(dòng)裝置智能速度控制器研究與仿真.pdf》資料免費(fèi)下載
    發(fā)表于 11-03 09:35 ?0次下載
    閥門電動(dòng)裝置智能<b class='flag-5'>速度</b>控制器研究與<b class='flag-5'>仿真</b>