uvm_do宏及其變體提供了創(chuàng)建、隨機化和發(fā)送transaction items或者sequence的方法。
`uvm_do
`uvm_do宏將uvm_sequence或uvm_sequence_item類型的變量作為參數(shù)。使用factory創(chuàng)建一個對象并賦值給指定的變量。
當driver從sequencer中請求一個uvm_sequence_item時,該uvm_sequence_item被隨機化并提供給driver。
class simple_seq_do extends uvm_sequence #(simple_item); ...//ConstructorandUVMautomationmacros virtual task body(); `uvm_do(req) endtask : body endclass : simple_seq_do
上面的例子中,simple_seq_do的body使用uvm_do宏,發(fā)送了一個類型為simple_item的數(shù)據(jù)項。
類似地,下面的例子聲明了一個sequence(simple_seq_sub_seqs),使用`uvm_do來執(zhí)行前面定義的simple_seq_do類型的sequence。
class simple_seq_sub_seqs extends uvm_sequence #(simple_item); ... // Constructor and UVM automation macros simple_seq_do seq_do; virtual task body(); `uvm_do(seq_do) endtask : body endclass : simple_seq_sub_seqs
`uvm_do_with
`uvm_do_with宏與`uvm_do類似。
第一個參數(shù)是從uvm_sequence_item派生出來的變量,包括uvm_sequence_item或者uvm_sequence 。
第 二 個 參 數(shù) 可 以 是 任 何 有 效 的inline constraints。
在下面的例子中,sequence產生兩個數(shù)據(jù)項,對addr和data的值有特定的約束。
class simple_seq_do_with extends uvm_sequence #(simple_item); ...//ConstructorandUVMautomationmacros virtual task body(); `uvm_do_with(req, { req.addr == 16'h0120; req.data == 16'h0444; } ) `uvm_do_with(req, { req.addr == 16'h0124; req.data == 16'h0666; } ) endtask : body endclass : simple_seq_do_with
如果約束條件只是用來將發(fā)送數(shù)據(jù)設置為特定的值,可以用用戶定義的任務來代替宏。
class simple_seq_do_with extends uvm_sequence #(simple_item); task do_rw(int addr, int data); item= simple_item::create("item",,get_full_name()); item.addr.rand_mode(0); item.data.rand_mode(0); item.addr = addr; item.data = data; start_item(item); randomize(item); finish_item(item); endtask virtual task body(); repeat (num_trans) do_rw($urandom(),$urandom()); endtask ... endclass : simple_seq_do_with
審核編輯:劉清
-
UVM
+關注
關注
0文章
182瀏覽量
19171 -
sequence
+關注
關注
0文章
23瀏覽量
2848
原文標題:UVM中的uvm_do宏
文章出處:【微信號:芯片驗證工程師,微信公眾號:芯片驗證工程師】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論