我需要監視寄存器的狀態。我創建了一個UVM序列來讀取寄存器並將它們存儲在本地。現在在我的測試代碼中,我需要訪問這些 寄存器。這裏是一個sudo代碼:參考UVM序列
typedef struct {
int a;
} my_regs;
class my_seq extends uvm_sequence;
// register to uvm db
reg_map map;
my_regs regs;
uvm_status_e status;
task build_phase(uvm_phase phase);
endtask
task run_phase(uvm_phase phase);
map.CORE.reg_a.read(status, regs.a, UVM_BACKDOOR)
endtask
endclass
class test_reg extends uvm_test;
// register to uvm db
my_seq seq;
my_regs regs;
task build_phase(uvm_phase phase);
seq = my_seq::type_id::create("reg_seq", this);
regs = seq.regs;
endtask
task run_phase(uvm_phase phase);
reg_seq.start(null);
// read reg values from seq??????
if(rqgs.a>1)
//do some thing
endtask
endclass
正如你所看到的,我不斷地開始序列,以便我不會錯過任何更新。我相信開始任務按順序不會創建一個新的對象 因此對象內的值應保持恆定的開始調用之間。
假設我每次都不讀取seq的regs值,測試類的regs將不會從seq獲取更新。意思是regs = seq.regs;不會創建對seq.regs的實際參考。我想知道爲什麼是這樣的,我怎樣才能創建一個絕對引用該對象? (這樣我就不用浪費模擬週期來閱讀和更新測試類中的regs值)。另外請告訴我是否有更好的方法來做到這一點。
哦,你是對的,正如我所說這是一個sudo代碼,並且在原始代碼中,我已按照您描述的方式實現了該主體。再次感謝! – maskarih
:)明白了。只要確保這一切。不用謝 。 –