0

我有一个 UVM 测试环境,其中黄金 C++ 模型和 RTL 都被实例化了。在某些情况下,我的 C++ 模型和 RTL 输出会出现故障,因为 C++ 模型的周期不准确。对于有序输出,我的记分牌中只有无限的队列。每当我在 RTL 接口中看到输出时,我都会尝试将其与 c++ 模型输出队列的头部匹配。这里的假设是 c++ 模型的输出总是在 RTL 输出之前,因为没有时间 c++ 模型的概念。

然而,在少数情况下,事情可能会变得疯狂和无序(例如,仲裁者)。在那种情况下,在 UVM 中编写记分牌和检查代码的标准方法是什么?

4

1 回答 1

1

这是一个解决方案,假设事务可以从被测设备 (DUT) 或行为 C++ 模型以任何顺序到达。

维护两个观察到的事务队列。

  • 预期——这将保存模型中的事务
  • 实际——这将保存来自 DUT 的事务

当记分板收到来自 DUT 或模型的事务时,首先检查它是否存在于另一个队列中。如果是这样,那么您找到了匹配项。否则将其添加到适当的队列中。

所以你将拥有:

  • 收到 DUT 交易
    • 检查预期队列中的匹配项
    • 如果找到,请将其从预期中删除
    • 否则,将其添加到实际
  • 收到模型交易
    • 检查匹配的实际队列
    • 如果找到,请将其从实际中删除
    • 否则,将其添加到预期

您还应该在测试结束时验证队列是否为空。您还可以根据您的要求添加其他检查。例如,如果您只期望 1 或 2 个项目乱序,则您只需在另一个队列中寻找深度为 1 或 2 的匹配项。

于 2014-04-25T19:29:23.527 回答