典型的SOC由多個接口組成,這些接口可以訪問設計中的存儲器。當我們驗證這樣的設計時,我們需要確保各種接口訪問的內存不重疊,從而導致數(shù)據(jù)完整性損失。
在使用涉及多個接口的基于 System Verilog 的驗證環(huán)境中進行驗證時,我們需要對激勵提供簡潔的約束,以確保這些訪問不會重疊并導致數(shù)據(jù)完整性丟失。
驗證工程師通常不得不花費大量時間來調試應用的約束,這種形式的約束導致激勵約束不足,這是一條非常危險的路徑。
隨著基于 UVM 的單例內存管理器的引入,隨著 UVM 提供的內存管理類的可用性,此任務變得更加易于實現(xiàn)。但是,這些新的驗證組件仍然不是專門為開發(fā)涉及多個主站的環(huán)境而設計的。我們在這里開發(fā)的“簡易內存管理器”最大限度地利用了現(xiàn)有的UVM方法,并且還提供了多個主服務器之間更輕松的內存訪問。
什么是 UVM 內存管理器?
關于uvm_mem_mam類的可用資源非常稀缺,因此如果讀者對其功能沒有太多了解,這是可以理解的。在繼續(xù)討論內存管理器提供的功能之前,我們想簡要介紹一下默認 UVM 內存管理器的功能。
在 UVM 中,有四個類與內存管理相關聯(lián)。它們在下面提到 -
uvm_mem_mam_cfg– 它允許我們選擇要由管理器管理的字節(jié)數(shù)以及開始和結束偏移量。
uvm_mem_mgr– 它由希望分配內存的靜態(tài)/動態(tài)實體啟動。
uvm_mem_alloc_policy– 它還可用于控制管理器的開始和結束偏移量,并根據(jù)我們的要求約束這些變量。
uvm_mem_region– 這些表示內存管理器要分配的區(qū)域。這些區(qū)域包含開始偏移量和管理器要分配的字節(jié)數(shù)。
現(xiàn)在我們已經(jīng)簡要了解了默認內存管理器的操作以及與 UVM 中的內存管理關聯(lián)的類,讓我們看看我們在內存管理器中的這個現(xiàn)有功能上添加了什么。
支持的功能
“簡易內存管理器”支持以下一組功能,可以在各種項目中重用:
整個內存分為內存、主內存和分配的區(qū)域,支持這三個維度上的區(qū)域分配和釋放。
將記憶劃分為虛擬區(qū)域。
區(qū)域的運行時分配和釋放。
多個主節(jié)點的非重疊分配。
通過提供要分配的區(qū)域的物理地址和字節(jié)數(shù)來分配區(qū)域。
可以保留內存塊,以便任何主節(jié)點都無法訪問它。
提供有關已分配區(qū)域的詳細信息的調試機制。
根據(jù).xls文件中的輸入創(chuàng)建記憶。
頂部寄存器塊和管理器可通過腳本進行配置。
即插即用,因此可以直接在任何現(xiàn)有的UVM環(huán)境中使用。
建筑
本節(jié)描述了內存管理器的結構以及將介紹“簡易內存管理器”的環(huán)境。管理器由頂部uvm_reg_block 組成,其中包含單個存儲器(例如 – Flash、JTAG、SRAM 等)。單個存儲器是根據(jù).xls文件中提供的數(shù)據(jù)創(chuàng)建的。各個內存類配置可根據(jù)項目要求完全定制。以類似的方式,我們可以通過腳本的命令行選項配置頂部內存。管理器是單例,因此不會有數(shù)據(jù)重復。
圖1使用簡易內存管理器的環(huán)境
圖2使用 Easy 內存管理器分配和釋放內存區(qū)域
表1管理器內的方法列表
在這里,我們展示了如何在多主場景中使用“簡易內存管理器”的場景。存儲器由兩個主站訪問,一個是SPI主機,另一個是以太網(wǎng)主機,它們正在執(zhí)行自己的測試序列。在該示例中,您可以觀察到主節(jié)點在訪問內存時提供的唯一編號如何使用戶更易于控制測試用例中的區(qū)域處理。此外,用戶不需要知道RAL模型中內存的結構。他可以簡單地提供實際地址,經(jīng)理足夠聰明,可以根據(jù)地址保留區(qū)域。
圖3預留/釋放區(qū)域時主節(jié)點與管理器的交互
最初,整個內存范圍都可用,SPI主站請求兩個區(qū)域,以便它可以在這些區(qū)域上啟動其序列。
同樣,以太網(wǎng)主站也請求了三個區(qū)域。以太網(wǎng)主站和SPI主站區(qū)域將通過主站編號進行區(qū)分,主站編號在分配時由主站作為參數(shù)傳遞。
SPI 主站已完成其序列,并通過在調用釋放函數(shù)時指定其唯一主站編號來釋放它分配的兩個區(qū)域。
以太網(wǎng)主站現(xiàn)在希望訪問先前分配給SPI主站的區(qū)域。因此,它將通過指定物理地址來請求這些區(qū)域。
以太網(wǎng)序列已完成,它將釋放它請求的區(qū)域。
整合步驟
圖4 集成步驟
向XLS提供輸入–以適當?shù)母袷綄?shù)據(jù)寫入.xls文件以創(chuàng)建單個內存。
通過腳本生成內存和reg_block – 使用適當?shù)拿钚羞x項運行腳本。如果未提供命令行選項,則使用默認選項。
在環(huán)境中獲取經(jīng)理的實例 –內存和管理器將根據(jù).xls文件和命令行選項中提供的數(shù)據(jù)創(chuàng)建。在要訪問管理器的組件中創(chuàng)建管理器的對象實例。
獲取管理器的句柄 – 管理器的實例需要獲取管理器的句柄,因為它是單例。管理器由返回單一實例句柄的方法組成。
通過句柄訪問方法可以使用管理器的句柄訪問管理器的方法。
“簡易內存管理器”本質上是通用的,可用于任何現(xiàn)有的基于UVM的驗證環(huán)境。管理器包易于配置,可以擴展到任何特定于項目的環(huán)境中,而無需對內部代碼進行任何更改。
在eInfochips,我們已經(jīng)在系統(tǒng),子系統(tǒng)和IP級環(huán)境中使用了這種內存管理器,并取得了預期的結果。我們已經(jīng)使用QuestaSim和NCSim模擬器驗證了此組件。
審核編輯:郭婷
-
以太網(wǎng)
+關注
關注
41文章
5635瀏覽量
176017 -
存儲器
+關注
關注
38文章
7653瀏覽量
167456 -
soc
+關注
關注
38文章
4392瀏覽量
222834
發(fā)布評論請先 登錄
HarmonyOS優(yōu)化應用內存占用問題性能優(yōu)化一
Linux系統(tǒng)中通過預留物理內存實現(xiàn)ARM與FPGA高效通信的方法

用ADS1298在進行內部信號測試(1HZ)時 為什么各個通道的零點都不一致呢?
使用 Memtester 對華為云 X 實例進行內存性能測試

ADS1299進行內部信號測試的時候出現(xiàn)方波不穩(wěn),為什么?
虛擬內存溢出該怎么處理 虛擬內存在服務器中的應用
Linux下如何管理虛擬內存 使用虛擬內存時的常見問題
ADS1299進行內部方波測試的時候,方波不對稱是什么原因導致的?
RFID手持終端在倉庫管理中的應用
如何使用 ChatGPT 進行內容創(chuàng)作
Linux內存管理中HVO的實現(xiàn)原理

Windows管理內存的三種主要方式
內存管理的硬件結構

評論