你選對儲存結構了嗎?你會玩UVM配置資料庫了嗎?

2021-10-09 18:39:07 字數 3193 閱讀 5273

摘要:來自chris spear五月份的部落格

20200528 使用systemverilog中的陣列進行組織化

systemverilog有許多儲存資料的方法。向量、陣列、結構、類以及我可能不記得的其他幾種方法。擠進前10個部落格文章的主題選擇太多了,因此我舉辦了乙個網路研討會,實際上是其中的兩個,以幫助你更好的組織起來。

第乙個網路研討會著重於向量、固定大小的陣列、動態陣列、佇列、關聯陣列和字串 (是的,我忘記了)。這裡先偷瞄一下這個圖示,它可以幫助你在這些不同型別之間進行選擇。

是否曾經偶然發現過類似下面**並想知道它的作用?

q = array.find(x) with (x>5);

看起來它試圖查詢大於5的東西,但是「 x」的含義是什麼?為什麼搜尋陣列會產生佇列?報名參加帶有完整說明的網路研討會,於太平洋夏令時間6月5日(星期五)上午8:15。我稍等片刻再開始,這樣你就可以在加入之前再喝杯咖啡,或者給你的在家學習的孩子做些早餐。如果這你都做不到,那就沒問題了,因為它們都被記錄下來了。

20200507 uvm配置資料庫準則

前言

我前幾篇博文在討論靜態和引數化類,是為了這場重頭戲–uvm配置資料庫或uvm_config_db–做好準備。如果使用得當,這是乙個元件與另乙個元件共享某個數值的好方法。如果測試或環境知道**的路徑,則資料庫是有效的。如果使用不當,將會使你的**陷入困境。

過多的選項

資料庫是基於帶有字串索引的關聯陣列。因此,每個條目都是乙個「名稱/值」對。如果儲存100,000個值,則資料庫必須搜尋這些值以找到特定值。如果將陣列索引值組織成樹形結構,則搜尋可能需要多達20次字串比較。這是具有100,000個條目的資料庫。

由於這是乙個引數化的類,因此每個具有不同型別的例項都會劃分資料庫的大小。可能你的配置值的一半是32bit整數,另一半是64bit數值。現在,每個資料庫訪問都在瀏覽一半的值。

更普遍的問題

資料庫通過向每個名稱新增範圍來進一步組織「名稱/值」對。與處理器相比,「速度」值對儲存器的含義可能非常不同。

元件如何在整個測試平台上共享數值呢?我看到了乙個儲存元件,無論在什麼位置,它都希望與每個元件共享「記憶體速度」這個數值。因此,它發出了以下通訊:

uvm_config_db#(int)::set(null, 「*」, 「mem_speed」, mem_speed);

問題是,當你呼叫get(),並且資料庫包含具有萬用字元範圍的條目時,資料庫必須執行正規表示式匹配,這比直接字串匹配的效率低得多。更糟糕的是,資料庫無法進行樹狀搜尋,而不得不比較每個條目。如果你的資料庫僅包含幾百個條目,那沒問題。但是如果有成千上萬個,且都帶有萬用字元,則執行非常緩慢。多麼糟糕?這些為「記憶體速度」而設定的萬用字元範圍將導致uvm build_phase()花費24小時,儘管其餘的模擬花費了不到乙個小時。如果你的測試平台規模越來越大,請留意這個問題!

本地化操作

如網路研討會所述,一種解決方案是將配置變數組合在一起成為「配置物件」。例如,某個**配置具有其本地引數,例如主動/被動列舉引數,各種位址和資料值以及虛擬介面。如果每個配置物件僅包含10個值,則資料庫大小將減少10倍。每個**的build_phase有乙個資料庫呼叫即可獲取其config物件的控制代碼。當**想要單個值時,它僅使用控制代碼在其本地物件中獲取值。在配置物件中快取數值比在另乙個資料庫中訪問要快得多。

放眼全域性

萬用字元問題的另一種解決方案是「全域性範圍」。請記住,資料庫中的範圍不必與你的測試平台層次結構匹配。記憶體元件可以將其值寫入資料庫頂部的唯一命名空間中,例如此處顯示的「 mem」。

uvm_config_db#(int)::set(null, 「mem」, 「speed」, memory_speed);

如果有多個記憶體元件怎麼辦?在「 mem」的全域性範圍內,您可以為每個例項儲存乙個單獨的配置物件控制代碼,假設「 speed」是mem_cfg類中的乙個屬性。

foreach (mem_cfg[i])

uvm_config_db#(mem_cfg)::set(null, 「mem」, $sformatf(「mem[%0d]」, i), mem_cfgs[i]);

更多小技巧

範圍字串末尾的萬用字元(例如「agt *」)比前面的萬用字元(例如「*」)具有更少的匹配項和更好的效能。

結論

帶有萬用字元作用域和許多條目的純uvm_config_db可能會降低效能。通過將值分組到配置物件中,將資料庫劃分為較小的域。你可以在範圍字串中使用萬用字元,但將它們限制在字串的末尾以提高效能。

可直達課程頁面,馬上試聽

往期精彩:

v2pro 2020秋m1 我對你的迷惑和選擇都深以為然

v2pro春季班普遍學撐了,秋季班7月報名你還敢來麼

30w+還送股送房?60+ic企業2019薪資全面攀公升!

uvm ral模型:用法和應用

我們準備做第二期線下培訓,依舊認真且嚴肅

如果你突然被裁員了,你的plan b是什麼?

[彩虹糖帶你入門uvm]

理解uvm-1.2到ieee1800.2的變化,掌握這3點就夠

你真的選對了主鍵了嗎

你是否建立過下面結構的表 userid 使用者id 主鍵列 username 張三用唯一的使用者id作為主鍵。而為了業務需要,你的userid可能是由乙個元件根據某種規則生成的,生成後再存入資料庫。看起來並沒有什麼問題,當乙個需求要維護所有的使用者資訊時百分之90的人都會這樣建表。假如在原來表結構的...

產品和技術,你選對了嗎?

網際網路的發展史,到今天可以簡短的劃分為三個時代 技術驅動時代 產品驅動時代 運營驅動時代。三個時代對應的三股不同的驅動力量。當一項技術剛剛問世的時候,我們是不能期望它是否方便使用的,因為此時關注的焦點是 有還是沒有 而不會 醜還是美 email沒有介面和互動可言,但它代表著兩台電腦的連線和資訊傳遞...

資料結構你學懂了嗎?

開篇就習慣開門見山。你可能會鍊錶 順序表 棧 佇列 串 壓縮矩陣 二叉樹 森林 有向圖 無向圖什麼的。但是除此之外呢?你還知道什麼?好吧,就算你說的這些,你知道這些概念,那你寫個二叉樹我看看?這很可能就是面試官的一句問話。在大學裡面,我們肯定都學過資料結構這門課程,還做了相關的實驗報告,程式設計實現...