UVM RAL模型和內置seq


轉載:UVM RAL模型:用法和應用_寄存器 (sohu.com)

在系統設計中通常會面臨兩大挑戰:縮小技術節點的規模和上市時間(TTM,Time to Market)。為了適應激烈的市場競爭,大多數系統都是以通用方式設計的,這意味着同一設計可以通過不同的配置實現不同的應用方式。配置數量越多,設計中的寄存器數量越多。最重要的是,由於當前市場對數據存儲的大量需求,存儲大小也越來越大。為了訪問和驗證大量寄存器和巨大的存儲,需要一些創新的方法。因此,UVM提供了用於寄存器管理及訪問的基類庫,稱為UVM RAL(Register Abstraction Layer,寄存器抽象層)。

顧名思義,UVM RAL是訪問設計寄存器的高級面向對象抽象層。RAL模型模仿了設計寄存器,並且整個模型是完全可配置的。由於其抽象行為,RAL模型可以 輕松地從模塊級別遷移到系統級別。

本文提供了有關UVM RAL的不同級別的相關內容,包括:如何將同一個RAL模型用於多個接口,RAL模型內部的存儲實現及其訪問方法,預測器模型的信息以及根據其操作預測寄存器值等。它還有一個現成的UVM寄存器序列列表。僅通過配置這些序列,用戶就可以訪問和驗證所有設計寄存器和存儲的功能。

介紹:

任何設計驗證的首要步驟是其寄存器驗證,即檢查寄存器的可訪問性及其功能。執行此寄存器驗證,並不一定需要使用UVM RAL模型,但是在不使用它進行驗證時,用戶必須注意每個寄存器的屬性和復位值。同樣,用戶必須確保使用所有可能的值來驗證每個寄存器域。在整個寄存器范圍內手動執行這些檢查是一項很耗時的任務,因此使用UVM RAL模型是一種非常有效的方法。

UVM RAL是面向設計內部寄存器的模型。要訪問這些設計寄存器,UVM RAL提供了現成的基類和API。RAL模型的一些特性包括:

  • 就像寄存器的設計一樣,它支持不同的寄存器屬性,例如R / W,RO,WO,W1C等。
  • 支持兩種不同的寄存器訪問路徑,前門訪問和后門訪問。
  • 同一模型可以通過多條總線訪問。
  • 它的抽象性質允許在模塊級別以及系統級別使用相同的模型。
  • 內置比較方法,可將寄存器值與其預測值進行比較。

每個RAL模型主要具有以下三個結構層次:

  • uvm_reg_block是最頂層的層次結構,通常,uvm_reg_block具有所有寄存器(uvm_reg)的一個實例,或者可能具有其他uvm_reg_block的實例。
  • uvm_reg模擬設計內部的寄存器。根據其定義,每個寄存器可以具有一個或多個uvm_reg_field。
  • uvm_reg_field代表寄存器的域。

圖1 RAL層次圖解

RAL模型模仿設計寄存器,更新設計寄存器的值,同時更新RAL模型寄存器的值。為此,UVM具有通用的API,可以同時更新設計和RAL模型寄存器。除寄存器外,RAL模型也可以用來對存儲建模,其優點之一是burst 操作。本文的后半部分中,給出了一個存儲burst操作的示例,同時提供了有關預測器模型,寄存器覆蓋率和UVM預定義寄存器序列的一些信息。

RAL寄存器映射和適配器

RAL模型集成的基本步驟之一是適配器(adapter)類的實現。此類具有兩個基本的函數:bus2reg用於將總線sequence items轉換為uvm_reg_bus_op(RAL模型中已知),和reg2bus實現相反的功能。用戶定義的適配器類應通過擴展uvm_reg_adapter基類來實現。這意味着所有前門寄存器的讀/寫操作都通過此適配器類進行。由於適配器類的實現取決於總線,因此,每個總線都必須具有自己的適配器類。

每個前門寄存器的寫/讀操作都通過reg2bus和bus2reg API進行。對於不同的總線,例如APB和AXI,如果它們訪問相同的RAL模型,則需要為每條總線創建適配器類。因此,對於每個寄存器映射,必須按如下所示設置RAL模型sequencer:

使用特定寄存器map訪問RAL模型寄存器的示例:

UVM存儲器

UVM RAL模型也可以用來對存儲建模,稱為uvm_mem。像uvm_reg一樣,uvm_mem的目的在於模仿設計內部的存儲器。下面的代碼顯示了如何在RAL模型中實現存儲建模:

該存儲器的優點之一是其burst讀/寫操作,如下所示:

像寄存器一樣,存儲器訪問也可以通過前門和后門進行。uvm_mem沒有空間來存儲期望的數據,這意味着該uvm_mem的缺點之一是它不支持內置數據比較。

UVM預測器

如前所述,寄存器模型具有內置的自檢機制。每當訪問寄存器時,uvm_reg都會更新為相同的值,並且該值會變為其預測值。這種預測可以通過三種不同的方式進行:

  • 隱式預測
  • 顯式預測
  • 被動預測

隱式預測

隱式預測是最簡單、最常見的預測方法。每當發生寄存器寫/讀操作時,UVMRAL模型基類都會調用該特定uvm_reg類的predict方法。要啟用此功能,用戶必須調用uvm_reg_map的set_auto_predict(1)方法,如下所示。默認情況下,該方法是禁用的。

圖2 隱式預測流程

如上圖所示,啟用自動預測后,寄存器模型會在每次寫/讀操作時預測該值。在這里,期望用戶必須通過調用uvm_reg的write或read方法來啟動寄存器操作。

顯式預測

使用顯式預測,用戶必須創建uvm_reg_predictor類的句柄,該類是RAL模型的基類。該預測器類需要與監視器類相連。監視器對發生在接口上的寄存器寫/讀操作進行采樣,並將捕捉到的事務傳遞給預測器。Predictor類借助適配器將總線事務轉換為寄存器事務,然后調用該寄存器的predict方法。

在編碼方面,利用三個基本步驟可以實現顯式預測:創建,配置和連接。

  • 創建

  • 配置

  • 連接

這種預測方法的優勢在於,因為預測是基於接口上驅動的數據進行的,所以寄存器模型總是與實際數據保持同步。

被動預測

當未通過寄存器模型進行寄存器讀/寫操作時,此方法很有用。被動預測根據在總線接口上觀察到的操作來預測寄存器值,與顯式預測非常相似。

寄存器覆蓋率

UVM RAL提供了一個API來采樣用戶定義的覆蓋組。為了對這些覆蓋組進行采樣,用戶必須覆蓋(override)uvm_reg/uvm_reg_block類的sample方法。對於RAL模型覆蓋,用戶必須使能寄存器預測。

以下代碼顯示了擴展uvm_reg_block內部的covergroup實現,其中涵蓋了寄存器及其操作。

下面的uvm_reg類內部的covergroup實現示例顯示,其意圖是覆蓋訪問寄存器所用的不同值。

選擇性覆蓋組采樣也是可能的,為此,用戶必須提供適當的功能覆蓋類型標識符。

UVM RAL預定義序列

UVM軟件包提供了一組現成的序列,以測試寄存器的功能,例如其訪問或復位值。所有這些序列在操作上都是唯一的,其中有幾個寄存器序列的描述如下表所示:

序列名稱

功能

uvm_reg_hw_reset_seq

檢查每個寄存器的復位值是否與硬件復位值匹配。

uvm_reg_bit_bash_seq

檢查所有支持讀寫訪問的域,依次寫入1和0,並讀出后做比較,用於檢查寄存器域屬性的有效性。

uvm_reg_access_seq

用前門訪問方式寫入每個寄存器,從后門讀回數值進行比較。然后執行反向操作,即通過后門進行寫操作,並通過前門進行檢查。

uvm_mem_walk_seq

在目標存儲的指定地址范圍的每個地址寫入數據,並將其與讀取值進行比較。

uvm_mem_access_seq

對於存儲器的每個位置,通過前門寫入,從后門讀回數值進行比較。然后,執行反向操作,即通過后門進行寫操作,並通過前門進行驗證。

uvm_reg_shared_access_seq

通過每個地址映射寫入所有寄存器,並通過讀取所有地址映射來確認其寫入值。

uvm_mem_shared_access_seq

通過每個地址映射寫入所有內存位置,並通過讀取所有地址映射確定其寫入值。

uvm_reg_mem_shared_access_seq

執行uvm_reg_shared_access_seq,然后執行uvm_mem_shared_access_seq

uvm_reg_mem_built_in_seq

執行所選/所有上述預定義序列。

uvm_reg_mem_hdl_paths_seq

檢查指定的HDL路徑是否可訪問。

上述每個測試都有一個禁用屬性,用戶可以通過該屬性跳過任何寄存器/存儲器的特定測試。通過設置屬性:“NO_REG_TEST”或“NO_MEM_TEST”,用戶可以從上述所有測試中排除特定的寄存器/存儲器。

總結

UVM RAL是訪問和驗證設計寄存器和存儲器的簡單方法。與實際設計一樣,uvm_mem支持burst寫入和讀取操作。除了訪問寄存器之外,UVM還有現成的API,可用於對寄存器覆蓋率進行采樣。此外,由於不同UVM寄存器預定義序列的多個場景,寄存器驗證的任務也變得簡單。由於其分層結構和大量可用的API,RAL模型具有足夠的靈活性。除了以標准方式訪問API外,用戶還可以使用這些API進行其他一系列操作,例如,通過其地址訪問寄存器或更新任何特定的寄存器域。總體而言,UVM RAL是功能強大的抽象層,它支持寄存器驗證所需的所有功能,並且由於其組織結構,強烈建議在基於UVM的測試平台中利用RAL模型進行寄存器驗證。

原文來自:

https://www.design-reuse.com/articles/46675/uvm-ral-model-usage-and-application.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM