verilog - 当 RTL 和 Goldenmodel 可能产生不同但正确的输出时,验证 HW 的标准方法是什么?

标签 verilog system-verilog uvm

我有一个适用于我的硬件模型的 UVM 测试平台(约束随机验证)。我的黄金模型是用 systemC 和 c++ 编写的。我的硬件结果与软件结果不匹配,但它们都可能是正确的。

举个例子,我的硬件执行一些内存管理(分配、释放资源),这会影响管道中的一些其他逻辑。根据硬件“何时”收到分配或释放请求以及一些时间敏感的仲裁策略,它会产生一些输出。在黄金模型中,没有时间的概念,在某些情况下,它的输出与硬件不匹配,但硬件和黄金模型都可能是正确的。

验证此类场景的标准方法是什么?当黄金模型和硬件输出都正确但它们的值不同时,我不太确定记分板是否有助于检查正确性。我是这个领域的新手。因此,任何建议/指示都将受到高度赞赏。

最佳答案

UVM 的目标之一是将测试抽象级别提高到硬件引脚摆动级别之外。如果您知道对于给定的随机刺激,输出是正确的,则需要将该知识放入记分板中。您的监视器的工作是生成一个事务,删除大部分时域信息,并将其发送到记分板进行处理。

以无序记分板为例,您将数据包发送到 DUT 进行路由,但它们以不同的顺序出现。您的引用模型可能会产生不同的顺序,但所有进入的数据包最终都必须在一段时间后出来。您的记分板必须在不检查顺序的情况下检查数据包是否已收到,或者它会检查设计要求所施加的顺序。

关于verilog - 当 RTL 和 Goldenmodel 可能产生不同但正确的输出时,验证 HW 的标准方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23771940/

相关文章:

c++ - SystemC如何获取交互式用户输入

verilog - 在 Verilog 中为 reg 分配整数

c++ - SystemVerilog DPI 将字符串从 C++ 返回到 verilog - 最后是 ASCII 字符?

class - 系统Verilog : registering UVM test with the factory

arrays - 使用线数组作为输入的语法

arrays - 覆盖 systemverilog 中结构数组参数的大小

system-verilog - UVM 测试台中的断言模块

Ruby 和 SystemVerilog DPI

verilog - 综合 Verilog 代码时如何消除敏感列表警告?

c - 硬件建模的正确语言