UVM 试剂 - 单个/多个?

问题描述 投票:0回答:1

我想测试具有以下端口的接收器:

上图中箭头的详细信息:

控制/状态寄存器:

  • 16x32bit 输入信号(16 个控制寄存器)
  • 16x32bit 输出信号(控制回读和状态)
  • 每个寄存器16位写选通信号
  • 每个寄存器的16位读选通信号

数据:

  • 来自 PHY 层的 4x8 位数据
  • 1 个时钟
  • 1位有效信号

BRAM:我认为这在这里并不重要,因为无论如何我都必须为此创建一个代理

控制流程看起来像这样:

  1. 配置控制寄存器
  2. 为数据添加刺激
  3. 检查状态寄存器和BRAM

我应该如何实施代理? UVM 建议为控制/状态和数据设置一个代理,这让我有些头痛:

  • 我认为如果一个具有双向功能(这意味着一个接口上的输入在另一个接口上输出+相反),这是首选方式 - 在我的情况下,控制流是固定的,我不确定是否会有任何好处分开两个司机
  • 如果我将控制/状态和数据分开,我必须以某种方式同步定序器,以便在应用刺激之前为数据配置提供适当的控制设置。我不知道该怎么做,似乎有点矫枉过正。

来自UVM环境文档

是否可以将控制/状态和数据合并到一个代理中?会有什么缺点?一个代理可以(应该?)包含多个驱动程序吗?

architecture verification uvm
1个回答
0
投票

从提供的信息来看,您似乎有 3 个不同的接口(信号组)连接到 DUT:

  1. 布拉姆
  2. 数据
  3. 寄存器

这意味着您将拥有 3 个不同的 SystemVerilog

interface
,从而导致 3 个不同的
uvm_agent

对于控制/状态寄存器代理,请考虑使用 16 个代理的阵列(每个 32 位分组一个)。

创建测试时,您可能需要协调在不同代理上运行的序列。虚拟排序器是标准 UVM 实践,可能适合您的情况。很难说在这种情况下是否太过分了。请记住,设计验证并非微不足道。

一个代理可以(应该?)包含多个驱动程序吗?

不,一个

uvm_agent
最多应包含一个
uvm_driver

© www.soinside.com 2019 - 2024. All rights reserved.