【问题标题】:How to monitor DUT outputs from a test/sequence?如何监控测试/序列的 DUT 输出?
【发布时间】:2014-03-28 21:05:05
【问题描述】:

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

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

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

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

谢谢!

【问题讨论】:

    标签: verilog system-verilog uvm


    【解决方案1】:

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

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

    验证学院UVM Cookbook对此进行了更详细的解释。

    【讨论】:

    • 非常感谢戴夫。我正在研究响应序列。我认为我在将请求数据从 DUT 获取到响应代理方面取得了一些进展。你介意看看我关于这个的最新问题吗?我对 uvm 土地完全陌生。我将不胜感激任何输入/指针...stackoverflow.com/questions/23024817/…
    【解决方案2】:

    这可以使用 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()。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-30
      • 2015-03-17
      相关资源
      最近更新 更多