典型的SOC由多個接口組成,這些接口可以訪問設計中的存儲器。我們在驗證這樣的設計時,需要保證各個接口的內存訪問不重疊,導致數(shù)據(jù)完整性丟失。
在使用涉及多個接口的基于 System Verilog 的驗證環(huán)境進行驗證時,我們需要對激勵提供簡潔的約束,以確保這些訪問不會重疊并導致數(shù)據(jù)完整性丟失。
驗證工程師通常不得不花費大量時間來調試應用的約束,而這種形式的約束會導致刺激的約束不足,這是一條非常冒險的道路。
隨著基于 UVM 的單例內存管理器的引入,由于 UVM 提供的內存管理類的可用性,這項任務變得更加易于實現(xiàn)。但是這些新的驗證組件仍然不是專門為開發(fā)涉及多個主機的環(huán)境而設計的。我們在這里開發(fā)的“ Easy memory manager ”最大限度地利用了現(xiàn)有的 UVM 方法,并且還提供了多個主控器之間更容易的內存訪問。
什么是 UVM 內存管理器?
關于uvm_mem_mam類的可用資源非常稀缺,因此如果讀者對其功能沒有太多了解,這將是可以理解的。在繼續(xù)討論內存管理器提供的功能之前,我們想簡要介紹一下默認 UVM 內存管理器的功能。
UVM 中有四個與內存管理相關的類。它們在下面提到 -
uvm_mem_mam_cfg – 它允許我們選擇要由管理器管理的字節(jié)數(shù)以及開始和結束偏移量。
uvm_mem_mgr – 由希望分配內存的靜態(tài)/動態(tài)實體發(fā)起。
uvm_mem_alloc_policy - 它也可以用來控制管理器的開始和結束偏移量,也可以根據(jù)我們的要求約束這些變量。
uvm_mem_region - 這些代表將由內存管理器分配的區(qū)域。這些區(qū)域包含開始偏移量和要由管理器分配的字節(jié)數(shù)。
現(xiàn)在我們對默認內存管理器的操作以及與 UVM 中的內存管理相關的類有了一個簡要的了解,讓我們看看我們在內存管理器中添加了哪些現(xiàn)有功能。
支持的功能
“ Easy memory manager ”支持以下一組功能,可以在各種項目中重用:
整個內存分為memory、master、region分配三個維度,支持這三個維度上region的分配和釋放。
將內存劃分為虛擬區(qū)域。
運行時分配和區(qū)域釋放。
多個主控的非重疊分配。
通過提供要分配的區(qū)域的物理地址和字節(jié)數(shù)來分配區(qū)域。
可以保留內存塊,以便任何主機都無法訪問它。
提供有關已分配區(qū)域的詳細信息的調試機制。
根據(jù) .xls 文件的輸入創(chuàng)建記憶。
頂部寄存器塊和管理器可通過腳本進行配置。
即插即用,因此可以直接在任何現(xiàn)有的 UVM 環(huán)境中使用。
建筑學
本節(jié)描述了內存管理器的結構和將要介紹“簡易內存管理器”的環(huán)境。管理器由頂部的uvm_reg_block組成,其中包含各個存儲器(例如,閃存、JTAG、SRAM 等)。各個內存是根據(jù).xls文件中提供的數(shù)據(jù)創(chuàng)建的。各個內存類配置可根據(jù)項目要求完全定制。以類似的方式,我們可以通過腳本的命令行選項配置頂部內存。經理是單身人士,因此不會有數(shù)據(jù)重復。

圖1使用 Easy 內存管理器的環(huán)境

圖2使用 Easy memory manager 分配和釋放內存區(qū)域

表1管理器內的方法列表
在這里,我們展示了如何在多主機場景中使用“簡易內存管理器”的場景。存儲器被兩個主機訪問,一個是 SPI,另一個是以太網,它們正在執(zhí)行自己的測試序列。在該示例中,您可以觀察到 master 在訪問內存時提供的唯一編號如何使用戶對測試用例中區(qū)域的處理更加可控。此外,用戶無需了解 RAL 模型中的內存結構。他可以簡單地提供物理地址,并且經理足夠聰明,可以根據(jù)地址保留區(qū)域。

圖3預留/釋放區(qū)域時 master 與 manager 的交互
最初,整個內存范圍都可用,SPI 主機請求兩個區(qū)域,以便它可以在這些區(qū)域上啟動其序列。
同樣,以太網主控也請求了三個區(qū)域。以太網主設備和 SPI 主設備的區(qū)域將通過主設備編號進行區(qū)分,主設備編號在分配時作為參數(shù)傳遞給主設備。
SPI 主控已完成其序列并通過在調用釋放函數(shù)時指定其唯一主控編號來釋放其分配的兩個區(qū)域。
以太網主機現(xiàn)在希望訪問之前分配給 SPI 主機的區(qū)域。因此它將通過指定物理地址來請求這些區(qū)域。
以太網的序列已經完成,它將釋放它所請求的區(qū)域。
整合步驟

圖 4 集成步驟
向 XLS 提供輸入——在 .xls 文件中以適當?shù)母袷綄懭霐?shù)據(jù)以創(chuàng)建單獨的內存。
通過腳本生成內存和 reg_block – 使用適當?shù)拿钚羞x項運行腳本。如果未提供命令行選項,則使用默認選項。
以管理器在環(huán)境中的實例——內存和管理器將根據(jù) .xls 文件中提供的數(shù)據(jù)和命令行選項創(chuàng)建。在要訪問管理器的組件中創(chuàng)建管理器的對象實例。
獲取管理器的句柄——管理器的實例需要獲取管理器的句柄,因為它是一個單例。管理器包含一個返回單例句柄的方法。
通過句柄訪問方法– 可以使用管理器的句柄訪問管理器的方法。
“ Easy memory manager”本質上是通用的,可用于任何現(xiàn)有的基于 UVM 的驗證環(huán)境。管理器包易于配置,并且可以擴展到任何項目特定的環(huán)境,而無需更改內部代碼。
在eInfochips,我們已經在系統(tǒng)、子系統(tǒng)和 IP 級環(huán)境中使用了這個內存管理器,并取得了預期的效果。我們已經使用 QuestaSim 和 NCSim 模擬器驗證了這個組件。
審核編輯:郭婷
-
以太網
+關注
關注
41文章
6221瀏覽量
181721 -
存儲器
+關注
關注
39文章
7761瀏覽量
172317 -
SPI
+關注
關注
17文章
1900瀏覽量
102274
發(fā)布評論請先 登錄
C++ 11 14 17 20內存管理-指針、智能指針和內存池基礎與提升
MAX1917:DDR內存電源管理的理想選擇
探秘DS2731:緩存內存電池備份管理IC的卓越性能與應用
KubePi:開源Kubernetes可視化管理面板,讓集群管理如此簡單
rk基于linux/android內存管理
為什么單片機中很少使用malloc,而PC程序頻繁使用呢?
WebGL/Canvas 內存泄露分析
NVMe高速傳輸之擺脫XDMA設計24: UVM 驗證包設計
NVMe高速傳輸之擺脫XDMA設計23:UVM驗證平臺
靈活高效ZBUFF — C內存數(shù)據(jù)操作庫:優(yōu)化內存管理的利器
NVMe高速傳輸之擺脫XDMA設計18:UVM驗證平臺
NVMe高速傳輸之擺脫XDMA設計九:隊列管理模塊設計(上)
HarmonyOS優(yōu)化應用內存占用問題性能優(yōu)化一
UVM中更簡單的內存管理
評論