4

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

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

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

4

2 回答 2

3

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

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

于 2014-05-21T03:13:25.340 回答
1

我喜欢 Dave 的答案,但是在正确性逻辑太复杂而无法放入测试平台的情况下,我也看到了一种不同的方法。

  • 将所有非确定性抽象到一个“决策”界面中。
  • 捕获硬件做出的决定,并将其作为输入提供给 systemC 模型。
  • 让 systemC 模型检查 HW 做出的决定是否合法,然后让模型也做出相同的决定。即systemC模型遵循HW。
  • 像往常一样交叉检查其余接口。

虽然这不是一个完美的检查器,但通过定义接口,您可以明确系统中允许的不确定性。

于 2014-05-29T18:38:23.503 回答