0

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

为我的 DUT 的所有输入输出接口提供监视器、驱动程序和序列的代理。顶级 UVM 环境。将有效数据发送到 DUT 的序列。我还没有实施记分牌。

我在理解如何处理以下情况时遇到了一些麻烦:

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

谢谢!

4

2 回答 2

6

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

  1. 从属序列向驱动程序发送请求 - “告诉我要做什么”
  2. 驱动程序检测到总线级请求并将信息返回给序列 - “这是你应该做的”
  3. 从序列做它需要做的事情来准备一个响应,然后向驱动程序发送一个响应项——“Here you go”
  4. Driver用响应项的内容完成总线级响应,完成握手回序列-“谢谢”

这在 Verification Academy UVM Cookbook中有更详细的解释。

于 2014-03-28T23:30:34.183 回答
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()。
于 2014-04-15T07:28:02.303 回答