我有一个基本的基于UVM的TB的几个问题,我正在尝试理解序列和它们的工作。

  1. 在响应项中更新时,bvalid在驱动程序中始终被选为0
  2. 最后2个事务的几个错误消息(#UVM_ERROR@18:uvm_test_top。axi_agent1。axi_base_seqr1@@axi_base_seq1[uvm_test_top。axi_agent1。axi_base_seqr1。axi_base_seq1]响应队列溢出,响应被丢弃)

这里是EDA操场上编译代码的链接 http://www.edaplayground.com/x/3x9

对我缺少什么有什么建议吗??

谢谢

文克斯特

有帮助吗?

解决方案

看看specification urandom_range的规范,它将签名显示为: function int unsigned $urandom_range( int unsigned maxval, int unsigned minval = 0 ).将您的呼叫更改为 $urandom_range(1, 0) 它应该工作。

第二个错误来自这样一个事实,即您正在从驱动程序发送响应,而不是在您的序列中拾取它们。这是做它的行: seq_item_port.item_done(axi_item_driv_src);.要么就这么做 seq_item_port.item_done(); (不要发送回复)或打电话给 get_response() 在你的序列之后 finish_item().我通常做的是更新原始请求的字段,只需调用 item_done().例如,如果我开始一个读事务,在我的驱动程序中,我将驱动控制信号并等待DUT响应,更新 data 请求的字段与我从DUT和调用得到的数据 item_done() 在我的驱动程序中将请求标记为已完成。这样,如果我需要这个数据在我的序列(以约束一些未来的项目,例如),我有它。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top