做動態(tài)仿真驗證通常會遇到要等待仿真結果的情況,特別是在調試某個測試用例的時候。很多時候,工程師們會自然地認為仿真速度大部分依賴于跑仿真任務的服務器本身的性能,以及EDA仿真工具的能力。而實際上,高效的驗證環(huán)境以及代碼質量也是影響仿真速度的關鍵因素。
另一方面,提高仿真速度這回事,對于芯片工程師來說本身就是“求人不如求己”。提高服務器機器性能意味著更大的資金投入,更高性能的仿真工具也不是一時半會能達成的。而探索更高效的驗證方法學,構建更高執(zhí)行效率的代碼是當下就能做的事情。
本文的主要內容參考來自于Cliff Cummings在2019年DVCon會議上發(fā)表的文章:Yikes! Why is My SystemVerilog Still So Slooooow. 這篇文章主要探討了SystemVerilog仿真速度跟Coding風格之間的關系,文章中有詳細的實驗目標、方法和數(shù)據(jù)結果呈現(xiàn)。本文將摘錄和分析那些對仿真速度影響較大的編碼風格。
使用向量操作代替單bit操作
仿真器在做完整向量計算的速度比單bit計算要高。根據(jù)參考文獻的數(shù)據(jù),在某款仿真工具下,最高提速可以達到3倍以上。 下面是一個例程,分別呈現(xiàn)不同的代碼實現(xiàn)風格。

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

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

減少不必要的端口采樣或驅動
這是另一種減少不必要操作的技巧。要知道在UVM中,操作TLM analysis port是開銷比較大的,因為端口的驅動行為,都會通過回調機制來執(zhí)行關聯(lián)到該端口的所有consumer的端口動作。理解這個實現(xiàn)機制,其實還得看看UVM的源碼,這里就不做展開解析了。 此外,某些個analysis port是否連接到其他component是依賴于當前的驗證環(huán)境的,如果根據(jù)analysis port的狀態(tài)判斷是否進行端口驅動,可以減少一些不必要的操作。 如下例程,在monitor的run_phase中根據(jù)其analysis port狀態(tài)來進行端口采樣和廣播給其他組件,可以帶來一部分的仿真速度收益。

用回調函數(shù)代替低效的隨機約束
SystemVerilog提供了很多種隨機化變量和添加隨機約束的方法,具體可以參考公眾號的另外兩篇文章《暗藏玄機的SV隨機化》《五花八門的SystemVerilog隨機約束》。在設計隨機約束的時候,除了要確保約束不沖突(即約束有解)之外,還需要避免產生無效的約束解。 其實,SV已經提供了pre_randomize() / post_randomize()兩個分別在求解隨機值前后會執(zhí)行的回調函數(shù)。靈活使用這兩個函數(shù)可以避免一些非常低效的約束行為。 如下例程,使用post_randomize對隨機后的數(shù)列進行排序,可以避免在約束中使用循環(huán)去限制每一個數(shù)列元素,從而獲得數(shù)十倍的仿真速度提升。

審核編輯 :李倩
-
仿真
+關注
關注
55文章
4539瀏覽量
138700 -
仿真器
+關注
關注
14文章
1053瀏覽量
88216 -
bit
+關注
關注
0文章
48瀏覽量
32878
原文標題:SystemVerilog高效仿真技巧
文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
帶編碼器主令如何給定變頻器速度
麥歌恩磁編碼器異常信號分析與定位方法
更快抵達終點線:Questa One如何加速整體仿真周轉時間
Linux內核編碼風格權威總結:從縮進到底層設計,讓你的代碼更“內核味”
HFSS仿真鈮酸鋰電光調制器T型電極損耗較大
【產品介紹】Modelsim:HDL語言仿真軟件
Vivado仿真e203_hbirdv2跑whetstone跑分(開源)
Linux使用coremark程序進行vcs仿真的注意事項
eVTOL艙內噪聲響應分析的仿真流程
【「開關電源控制環(huán)路設計:Christophe Basso 的實戰(zhàn)秘籍」閱讀體驗】+ 問題一:什么是SIMPLIS?
無刷直流電機控制系統(tǒng)的建模仿真分析
羅姆新SPICE模型助力優(yōu)化功率半導體性能
分析那些對仿真速度影響較大的編碼風格
評論