【问题标题】:Basic UVM sequence simulation query基本UVM序列模拟查询
【发布时间】:2014-04-14 04:00:19
【问题描述】:

我在尝试了解序列及其工作原理的基于 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 Playground 上编译代码的链接 http://www.edaplayground.com/x/3x9

关于我缺少什么的任何建议??

谢谢

venkstart

【问题讨论】:

    标签: system-verilog uvm


    【解决方案1】:

    查看 $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();(不要发送响应),要么在finish_item() 之后在你的序列中调用get_response()。我通常做的是更新原始请求的字段,然后调用item_done()。例如,如果我开始读取事务,在我的驱动程序中,我将驱动控制信号并等待 DUT 响应,使用从 DUT 获得的数据更新请求的 data 字段并调用 item_done() in我的司机将请求标记为已完成。这样,如果我在我的序列中需要这些数据(例如,为了限制一些未来的项目),我就有了。

    【讨论】:

    • 感谢帝舵的解释。关于为什么错误仅在大约 8 txns 之后才开始出现的另一个问题?如果序列没有得到响应,我应该从一开始就看到这个?
    • @venkstart 因为定序器不知道何时会调用get_response(),所以它将未完成的响应存储在队列中。当队列变得太大时,它开始触发错误。这意味着它只会在队列满时才开始给出错误(UVM 中可能会默认设置 8-ish,但我认为您也可以更改此数字)。
    • @TudorTimi 您是否在fork-join_none 中以非阻塞序列尝试过get_response()?我尝试过这样的场景,但get_response() 始终处于阻塞状态。这种方法有什么本质上的错误吗?我的问题here。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多