我在使用邮箱进行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