介绍
功能覆盖、激励生成和运行管理是当今功能验证的三大相互关联的任务。其中,功能覆盖率可以说是最重要的,主要是因为覆盖率收敛是tape的主要标准。覆盖率衡量标准提供了关键的反馈。如图1所示,覆盖率模型应包括端到端功能覆盖、主要接口的事务覆盖、关键RTL结构的结构覆盖和基本代码覆盖。
基于断言的方法有助于发现bug,反馈回归环境的质量。这种方法不仅可以由验证实现,设计可以通过以断言的形式描述他们对设计内部操作的深入行为来提供check。
断言和功能覆盖实际上是同一枚硬币的两面。两者都在寄存器传输水平(RTL)设计中提供详细的观察点。
指南
遵循指南可以使设计更容易。首先,将断言放在RTL代码中,以便它们可以与RTL代码一起管理、更新和重复使用。接下来,通过适当的注释将断言与RTL分开;一些公司建议将ifdef/endif放在断言周围,以便将它们排除在实现流程中的工具之外。
断言不必复杂。事实上,根据我的经验,简单的断言通常和复杂的断言一样有用,包括捕捉复杂的bug。在接下来的部分中,我将探索如何将SystemVerilog 断言属性和覆盖属性置于在设计上。
首先,用于表示特殊信息的寄存器应遵守预定义的合法值(gray_code、odd_parity、even_parity、one-hot)。例如,下面的寄存器声明要求bus_state是one_hot编码的,int_mask中的单个位是相互排斥的,hdl_cmd将只具有合法值。设计或者验证可以捕获它们,以确保它们被功能验证所涵盖。
接下来,当寄存器用作计数器时,它们应该相应地存在概念(最小、最大、范围、值、递减、递增、上溢出、下溢出等)。例如,在下面的寄存器声明中,我们希望确保hdr_adr在1到26的范围内。对于bus_cnt,它不应该下溢和溢出。对于计数器来说,了解他们是否达到了高水位可能很有趣。验证团队可以进行更多的覆盖分析