我在使用郵箱進行UVM SV測試並在試圖在郵箱中寫入時遇到了一些問題。我的代碼看起來像波紋管:未能在systemverilog郵箱中寫入
class my_seqyuence extends uvm_sequence;
mailbox data;
some_user_defined_type mydata;
function new(string name = "my_sequence");
super.new(name);
data=new();
endfunction
task body();
forever begin
// blocking-get. program is blocked here... not why get is not returning...!
data.get(mydata);
decode_mydata_and_do_something_here;
end
endtask
function void writetrans(some_user_defined_type trans);
// I used print statements with mailbox size and i can see that valid trans is arriving here and successfully writing to mailbox.
data.try_put(trans)
endfunction
endclass
我不太清楚什麼地方出了錯......數據一路抵達writetrans(*)的功能,並最終它的失敗,即使有空間的郵箱寫。
我通過擴展uvm_component創建了一個分析端口。分析端口與監視器事務端口連接以接收DUT請求。在分析端口的寫入實現中,我調用上述代碼中提到的writetrans(*)函數來傳遞接收到的請求。郵箱正在寫入數據。我有點失落,因爲我不明白爲什麼get()不工作...... – newbie