中文 英语
系统与设计
的意见

道德的报道

我们可以用更少的精力,更快地完成更好的验证工作,但这意味着我们必须抛弃今天不道德的覆盖指标。

受欢迎程度

您听过多少次这样的语句,“当设计大小翻倍时,验证任务将翻四倍?”这意味着所创建的每个寄存器位都将设计的状态空间扩大了一倍。它给人的印象是,完全验证是无望的,正因为如此,在提出真正的覆盖指标方面几乎没有进展。

当第一次构思约束随机时,它需要一种方法来衡量正在创建的测试的有效性。据我所知,第一个应用是带有交换机和路由器等电路的数据通信应用。这样的设计有大量的输入和输出,你想要确保流量可以从每个输入到每个输出。在这些端口上创建覆盖,然后在它们之间进行交叉,提供了一个合理的目标。

这是对设计功能的一种有用的抽象,但当它被应用到越来越广泛的设计集合时,这种抽象变得越来越脆弱。它还暗示了那些覆盖点直接与某个描述的检查器相关联,因为这暗示了如果覆盖点出现在输出中,它就有一个存在证明。添加了记分牌来识别丢失的数据包,检查人员执行基本的验证,以确保内容在此过程中没有损坏。

今天,基本上是计分板成为一个可以检查结果的部分抽象模型,覆盖点是识别设计的某些部分已被激活的方法的代理。它们和刺激产生函数之间没有联系。毫无疑问,验证已经变得如此低效,并且几乎不可能从回归套件中删除测试用例。谁知道测试用例实际上做了什么,或者是否有任何有用的东西被驱动到监视点?

机器学习可以帮助我们找到能够更快达到相同水平的“覆盖点”覆盖的测试子集,这是很好的。但是我们仍然不知道这些被移除的测试是否真的使设计进入了不同的状态,或者它们是否正常工作。这确实意味着这些测试在某些方面是不完整的,因为它们没有提供任何证据来证明它们是独一无二的。

虽然这听起来不太可能,但多年前我曾与一家初创公司合作,该公司研究测试套件的有效性。它将错误注入到设计中,然后查看测试是否失败。如果没有测试失败,则表明验证方法存在缺陷。在早期,许多IP开发人员或用户惊讶于测试套件是多么的无效,以及有多少检查器缺失或未启用。该工具(确定性)已被Synopsys收购,并且仍然可用。

回到最初的表述。这显然是错误的。它假设每个寄存器位都依赖于其他寄存器位,但这与事实相去甚远。让我们从一个非常简单的例子开始。考虑一个32位寄存器。假设没有制造缺陷,这样它就能按照应有的逻辑工作。把这个寄存器断章取义一下。寄存器的位元彼此之间没有依赖关系。它们都是独立的。有些人会称之为平凡的平行设计。 It can be verified with just a few test vectors showing that each bit can store the values 1 and 0.

只有当电路连接到比特之间时,才会形成依赖关系。考虑奇偶校验位。它依赖于寄存器的所有位,并且必须执行验证以显示在所有情况下它都是正确计算的。对于正式工具来说,这是一个相当简单的任务。完成这些工作后,该位现在是它所执行功能的忠实抽象。当这个奇偶校验位现在被用于后续电路时,它在寄存器的各个位上没有相互依赖关系。触发奇偶校验值的任何位的组合都可以。

设计中的许多组合依赖可以并且应该使用形式化方法进行验证,但重要的是,当它们被放置到层次结构的下一层时,应该使用它们的抽象。反复模拟实现的细节是没有意义的,因为我们知道它们能够正确地运行。抽象和封装应该允许外围定义它们所拥有的任何顺序依赖关系——然后这些依赖关系可以在下一层进行验证。

在许多情况下,还包含顺序依赖项并可以封装,而其他依赖项则暴露给下一级别的集成。考虑一个在接口上有未知延迟的函数。它的功能应该用一个导出的sequential属性来证明,该属性保证在2到4个时钟周期内提供正确的结果。现在使用它的地方需要表明它们可以支持该顺序属性。

因为我们未能创建合适的抽象,我们基本上强制验证将作为一个平面函数执行,它不能伸缩。没有这些抽象,我们就无法通过覆盖点理解设计的功能是什么。因此,我们无法进行封装,无法找到实际的依赖关系在哪里,以及它们在什么级别上可以被隔离和简化。

约束随机对当时的EDA行业来说是一个福音,因为这意味着用户需要更多的模拟座位。他们知道它无法扩展,而且效率会越来越低,但这并不重要,因为它确实提高了可以执行的验证量。这个行业欣然接受,他们愿意付出代价。今天,仿真已经变得如此无效,以至于许多人都放弃了它,这意味着EDA公司现在有动力创建更好的验证工具,使这些模拟器再次变得有用。

我希望他们不只是把ML视为唯一的答案,而是要解决真正的问题——覆盖度量和验证抽象。一旦它们被明确定义,就可以添加有效的自动化,以确保每个模拟周期都是有用的和合乎道德的。



1评论

西奥多·威尔逊 说:

谢谢你,布莱恩,我完全同意。这些文章对这个行业是至关重要的服务。

留下回复


(注:此名称将公开显示)

Baidu