断言(SystemVerilog Assertion,SVA)是一种在IC验证中广泛应用的技术手段,它用于描述预期的行为和状态,以及特定条件下待测目标应该满足的性质,从而对特定的时序进行检测与验证。通过将断言嵌入到验证平台中,可以帮助验证工程师更好地了解设计的行为。这种方式不仅能够提高验证的完备性,同时可以加快故障定位的速度,从而帮助验证收敛。 但是断言在实际落地中存在一些困难,其中最显著的难点之一是断言的复用性较差,由于每个设计都具有不同的特性和时序条件,很难将断言从一个设计复制到另一个设计中,这就需要针对每个设计重新编写和调试断言,耗费大量的时间和精力。此外,断言的编写也是一个挑战。编写高质量的断言需要丰富的验证经验和技能,并且对于设计的细节有深入了解。面对这些挑战,中兴微电子积极探索新的解决方案。针对复用性问题,开发了以模块与模块间交互的接口为颗粒度的可复用断言架构,通过将同一个接口的断言同时应用于上下游模块,完成了水平复用。这种方法可有效地提高断言的复用性,减少重复编写和调试的工作量,加快验证收敛的速度。接口断言水平的复用还有助于统一上下游接口理解一致性,避免因为不同的验证人员对同一接口理解不一致导致的故障泄露。除了模块层级的水平复用,接口断言还可以向上集成至更高的子系统层级以及系统层级,实现垂直复用,可大幅减少系统级断言的编写和调试时间。针对断言编写的挑战,中兴微电子在开源OVL库(Open Verification Library)的基础上,结合有线通信芯片的特点,开发了自研的ZVL库(ZTE Verification Library,ZVL)。ZVL库以参数宏的形式提供给验证人员,传入指定参数,即可生成对应的断言。为了实现可复用断言架构以及ZVL库的自动化,中兴微电子开发了sva_gen自动化平台。该平台可以基于设计代码输入输出信号名称中包含的源端和目的端信息,自动按照模块间交互的接口分组并生成module块,在module块内根据接口信号命名来区分信号类别,并自动调用ZVL库生成断言。对于同一个模块,sva_gen平台自动将其包含接口的断言module块例化至同一个module文件,并生成对应的bind文件。验证人员将其嵌入验证平台,即可完成接口断言的检测工作。可复用断言架构及ZVL库为验证工程师提供了一种高效、灵活、可扩展的接口断言自动生成方案。sva_gen平台在Cadence公司的Xcelium仿真器及Indago调试器的支撑下,在中兴微电子完成4个历史项目的断言编写工作,并且应用于多个在研项目中。平均每个项目可以完成总接口数目50%的水平复用以及100%的垂直复用。在同一组接口中,60%的基础公共断言可以通过sva_gen平台调用ZVL库自动生成。在实际项目中sva_gen平台可减少断言编写时间50%左右,并且实现断言工作的左移,对验证工作的快速收敛起到重大助力。