如何监控测试/序列的DUT输出?

时间:2014-03-28 21:05:05

标签: verilog system-verilog uvm

我是UVM的初学者。到目前为止,我能够为我的DUT创建以下环境。

具有来自我的DUT的所有输入输出接口的监视器,驱动程序和序列的代理。 顶级UVM环境 用于将有效数据发送到DUT的序列。我尚未实施记分牌。

我很难理解如何处理以下情况:

对于tb-dut接口,TB需要等待来自DUT的事件(或事务)。收到交易后,TB需要发送回复。实现这个的最佳方法是什么?如何从序列中监控DUT事务?我的代理商有监视器,它将监视来自DUT的任何新输出信号。那么,我是否需要以某种方式将代理监视器中的数据带到我的测试/序列类?我知道监视器有一个分析端口,它可以用来将收到的数据发送到记分板进行检查。那么,我是否需要使用相同的端口来读取DUT输出数据,创建有效响应并将其发送到DUT?

谢谢!

2 个答案:

答案 0 :(得分:5)

这被称为从属序列或响应者。协议如下

  1. 从属序列向驱动程序发送请求 - “告诉我该怎么做”
  2. 驱动程序检测到总线级别请求并将信息返回到序列 - “这是您应该做的”
  3. 从属序列执行准备响应所需的操作,然后向驱动程序发送响应项 - “此处你去”
  4. 驱动程序使用响应项的内容完成总线级响应,完成握手回到序列 - “谢谢 你“
  5. 验证学院UVM Cookbook更详细地解释了这一点。

答案 1 :(得分:0)

这可以使用uvm_object完成。

  1. 创建uvm_object基类。定义您的虚拟方法,例如wait_state,但保留为空。
  2. 扩展该类并实现虚方法。在测试平台中包含该类并实例化一个对象。说对象是" my_tb"
  3. 使用uvm_config_db#(uvm_object):: set ...将其传递给音序器
  4. 抓住音序器中的对象,使用uvm_config_db#(uvm_object):: get ...
  5. 从序列内部:任何可以访问它的地方:p_sequencer.my_tb.wait_state()。