數據項:
作為DUT的激勵對象。
表示驗證環境處理的transactions。
用于 transaction-level的覆蓋率收集和功能比對。
UVM類庫提供uvm_sequence_item基類。每個用戶定義的數據項都應該直接或間接地派生自這個基類。
要創建一個數據項,需要:
分析DUT的transaction規格,確定屬性、約束、task和function。
從uvm_sequence_item基類(或它的派生類)派生出一個數據項類。
為數據項定義一個new函數。
為步驟(a)中確定的項目增加控制字段("旋鈕"),以便于編寫測試。
使用UVM field macros來實現打印、復制、比較等,UVM允許單獨指定每個字段所需的自動化。
定義do_*函數,用于創建、比較、打印、packing和unpacking所需的transaction數據。
為了幫助debugging和tracking transaction,uvm_transaction基類通過get_transaction_id()成員函數獲取唯一的transaction number。因為uvm_sequence_item基類從uvm_transaction擴展而來,所以也包括get_transaction_id()成員函數。
下例中的simple_item類定義了幾個隨機變量和約束。UVM的宏實現了對這個類進行操作的各種方法,如復制、比較、打印等等。特別是,`uvm_object_utils宏將類的類型注冊到factory。
第1行 從uvm_sequence_item派生出數據項,以便它們可以在sequence中生成。
第5行和第6行向數據項添加約束條件,以便:
指定數據項規格。
指定生成數據項的默認分布。
第7行-第12行 使用UVM的宏來自動實現諸如copy(), compare(), print(), pack()等函數。
繼承和約束分層
在驗證過程中,驗證組件用戶可能需要通過在類定義中添加更多的約束來調整數據項的生成。在SystemVerilog中 ,這是用繼承(inheritance)來完成的。下面的例子顯示了一個派生的數據項word_aligned_item,它包括一個額外的約束條件,只選擇word對齊的地址。
為了實現這種數據項類型的可擴展性:
數據項的基類(本例中的simple_item)應該使用virtual methods,以允許派生類重寫功能。
確保約束塊的組織方式,使其能夠覆蓋或禁用隨機變量的約束,而不必重寫更多的代碼。
字段可以用protected或local關鍵字聲明,以限制對屬性的訪問。
定義控制字段("旋鈕")。
產生輸入空間的所有數值往往是不可能的,通常也沒有必要。能夠從范圍或類別的值中生成部分值是很重要的。在上述simple_item例子中,delay屬性可以隨機化為0和最大無符號整數之間的任何值。
覆蓋整個合法空間是沒有必要的(也不實際),但是嘗試背靠背、短、中、大延遲,以及所有這些delay模式的組合是很重要的。為了做到這一點,需要定義控制字段(通常稱為 "旋鈕"),使用例編寫者能夠控制這些變量。
這些控制旋鈕也可以用于覆蓋率的收集。為了提高可讀性,使用枚舉類型來表示各種生成的類別。
使用這種方法可以創建更加抽象的測試。例如,你可以指定分布為:
在創建數據項時,要牢記經常使用什么范圍的值,或者哪些類別是該數據項所需要關注的。然后給數據項添加旋鈕,以簡化對這些數據項類別的控制和覆蓋收集。
審核編輯:湯梓紅
-
函數
+關注
關注
3文章
4117瀏覽量
61467 -
UVM
+關注
關注
0文章
181瀏覽量
19013 -
驗證
+關注
關注
0文章
57瀏覽量
15086
原文標題:UVM驗證環境開發之建模激勵數據
文章出處:【微信號:芯片驗證工程師,微信公眾號:芯片驗證工程師】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論