[SV]使用断言(Assertion)的优点

                           使用断言(Assertion)的优点

        朋友们,这次我决定写关于断言的文章。我个人认为断言是非常方便和非常有用的资产,当我们谈论功能验证时,即在给定的RTL设计中发现缺陷;确保验证完整性。它是一种令人惊叹的验证技术,用较少的代码提供了如此多的好处。如果你阅读了我之前关于断言的文章《关于断言的基础知识》,我们在这里讨论了一个断言示例,并与相应的Verilog代码进行了比较。在这里,让我们讨论将断言作为验证过程的一部分的其他许多优点。

一、断言有助于缩短调试时间

        在一个典型的设计中,我们有状态元素,如Flops, Combo logic, fifo(先进先出),FSM(有限状态机),计数器等。如果我们假设这个设计包含典型设计通常具有的RTL缺陷,那么我们对主要输入应用刺激,并观察主要输出的响应。假设测试失败,我们通常会怎么做?我们开始调试意味着从主要输出开始进行回溯跟踪。我们需要继续深入设计,直到找到失败的根本原因。最后,我们解决了问题,但要找到问题的根源需要很长时间。这种方法通常被称为黑盒测试,但重要的是,可观察性在这种方法中也是黑盒测试。

        现在让我们假设,我们在设计中围绕不同的逻辑元素插入断言,并且在模拟期间断言失败。通过断言,可以直接在源代码中观察到内部错误的根本原因。仿真时间。因此,插入断言之后,我们可以说我们现在正在使用白盒可观察性进行黑盒测试。这里的底线是断言可以帮助改进设计内部的可观察性,从而缩短调试时间。

二、断言有助于缩短覆盖的时间

        在我们的设计中,我们想要确保所有的空间和时间条件都被提供的刺激所覆盖或运用,并且事物都按照设计的规范运行。断言覆盖特性有助于提供关于各种设计元素(如fifo、FSMs、计数器)的报告或覆盖状态。此外,对于主要输入、主要输出和模块间通信的临时行为需求,cover也非常有用。

 2.1、让我们举一个例子来说明cover是如何有用的:

        让我们假设我们为FIFO full条件编写了一个断言,但是对于当前的一组刺激,这个断言永远不会触发。我们可以假设一切正常,因为在模拟日志文件中没有断言失败。但是,如果所提供的刺激从未触发FIFO full条件,情况又会如何呢?在这种情况下,分析断言覆盖特性生成的报告将向我们展示给定刺激所覆盖的内容和未覆盖的内容。它肯定会帮助我们缩短时间,以涵盖设计的所有预期场景。

三、对跨時鐘域(CDC)逻辑的断言支持

        现在,我们几乎找不到单时钟的设计,大多数今天的设计是基于多时钟域的。当跨越不同的时钟域时,使用多个时钟断言属性对于数据完整性检查非常有帮助。

四、断言可重用性

       如果在开发断言时考虑到意图,那么断言可以在多个项目中重用。众所周知,可重用性是节省时间和精力的一个重要因素。为未来项目而努力。可以通过以下两种方式编写断言,以提高断言的可重用性:

       第一种方法是尽可能地实现参数化断言。如果使用参数化,现在为16位总线编写的断言可以在将来的设计中为32位总线重用。

       第二种方法是在RTL设计之外实现断言模型,并将其作为单独的实体进行维护。可以很容易地将这些断言(使用bind特性)绑定到RTL,使设计和断言代码保持分离。它易于维护,最重要的是,如果使用适当的指导方针进行编码,它是可重用的。

五、断言总是打开的

       这意味着除非我们关闭断言,否则断言总是活动的。我们在测试套件中添加的测试用例或创建的新刺激配置越多,活动断言就总是能够监视针对新刺激的设计行为。

六、断言与仿真/加速度

       由于断言合成现在已经成熟,这意味着断言在模拟期间非常有用。由于我们知道DUT被放置在仿真盒内的硅上,因此相关的断言也可以随着设计一起放置在仿真盒内。有了这种支持,在模拟运行中,与模拟相比运行得非常快,通常需要大量时间的调试可以更快地完成。

七、断言支持全局严重性级别

        断言支持全局严重性级别,例如$error、$fatal、$warning等。因此,它有助于在模拟中维护统一的错误报告机制或结构。

八、断言支持全局打开/关闭

       断言支持全局打开/关闭机制,例如$dumpon/$dumpoff。它有助于以一种更简单的方式维护代码,而不是用开/关条件包装每个断言。

九、断言对于静态形式验证非常有用

       现在,天静态形式验证日益流行。断言是关键元素,它定义了作为正式验证技术一部分的设计的假设和预期行为。

       静态形式验证不需要像在仿真中那样在设计的主要输入端应用任何动态向量,但是EDA工具的内部算法生成内部流量来检查包含的断言。确保设计的正确性。由于形式验证是对从逻辑锥中导出的代数方程进行的,因此逻辑锥中可能有许多输入,这些输入可能具有已知值,例如1或0。这些已知的值是使用断言assume特性分配的,这样,正式的工具执行输入时的排列和组合就会更少,并通过有意义的努力产生建设性的结果。

十、一种语言和多种用法

       断言又称为SVA (SystemVerilog断言)是这样一种语言,它以多种方式为设计的验证方面做出贡献。断言断言功能通过设计检查和形式化验证(没有动态向量的技术)工作,断言覆盖功能支持功能性覆盖检查,并假设功能满足用于形式化验证的设计约束。

       它清楚地表明,SVA是一种语言,它在支持约束随机验证(CRV)、静态形式验证(SFV)和仿真/加速方面具有许多方面和优点。

猜你喜欢

转载自blog.csdn.net/gsjthxy/article/details/106261135