- 17
- 0
- 约8.98千字
- 约 21页
- 2018-10-11 发布于福建
- 举报
SystemVerilog断言及其的应用
SystemVerilog断言及其的应用
编者按:今年5月北京航空航天大学出版社出版的,由著名设计专家夏宇闻老师等翻译的《SystemVerilog验证方法学》将为验证工程师们的工作带来新的手段与方法,甚至会引发革命性的变化。该书涵盖了几乎所有最新的验证技术,包括:受约束随机激励信号的产生,以覆盖率为主导(coverage-driven)的验证,基于断言(assertion-based)的验证,形式化分析(formal analysis),以及在一个开放而又定义完善的方法学中的系统级验证等内容。
本刊承夏宇闻老师应允,为本刊组织参与翻译的专家,撰写一组文章介绍该书的主要内容,以及应用的心得。本刊今年7月刊曾登载《针对功能覆盖育的验证过程》,本文是第二篇。
摘要:在介绍SystemVerilog断言的概念、使用断言的好处、断言的分类、断言的组成以及断言如何被插入到被测设计(DUT)的基础上,本文详细地介绍了如何使用不同的断言语句对信号之间的复杂时序关系进行严格的检查,并针对每个例子展示了在ModelSim 6.1b仿真环境中所显示的波形。本文旨在帮助读者理解如何使用断言对设计中信号间复杂时序关系进行验证的方法,并由此介绍一些基本的SystemVerilog断言、操作符、代码段和断言验证方法学。
关键字:SystemVerilog,断言, DUT, SVA,Assertion
1. 前言
当今,数字电路的规模和复杂度在不断增长,这使得对设计进行彻底的验证将成为一项巨大的挑战。在整个芯片设计过程中,验证工作所需的时间将占去设计周期的70%~80%,验证工程师的人数将是设计工程师的两倍。这就迫切需要提高验证工作的效率,以解决验证瓶颈问题。
传统上,对被测设计(DUT)的验证都是通过在DUT的输入端口加上具有特定时序激励,然后观察DUT的内部状态变化和最后的输出信号,以确定DUT工作是否正确。这种方法对简单的小规模的设计很有用。但当设计规模变大时,要想使用这种方法来验证DUT是不现实的。因为对于规模大的设计,要想遍历设计将遇到的各种情况,验证其正确性,需要成千上万的特定时序激励。并且如果设计稍有一点变动,这些时序激励就得重新编写。设计的复杂性迫使验证工程师使用随机测试平台来生成更多的验证激励。高级验证语言,如OVA,PSL等,便在创建复杂测试平台时得到了广泛的应用。但这些验证语言和RTL级的编码语言不一致,使得验证很容易出现错误,造成调试工作的不方便。
SystemVerilog的出现可以解决这些问题。 SystemVerilog是在Verilog语言的基础上发展而来的,用SystemVerilog语言可以很容易地生成复杂的随机测试激励,并能方便地编写断言和测试代码覆盖率的代码。断言在验证过程中的用途如图1所示。
图1 验证过程中的断言
由此可见,用SystemVerilog描述的断言可以应用于设计过程的各个阶段,它不仅能快而准确地定位设计中的错误,还能统计功能覆盖率。用SystemVerilog描述的断言能显著提高验证准确性和验证效率,加快设计进程,提高我们对设计的信心。
2. SVA概述
SystemVerilog语言是Verilog语言的增强,它增强了Verilog原有的编程能力,又引入了新的数据类型和验证方法。SystemVerilog断言(以下简称SVA)就属于这些新的验证方法中的一种。
那么什么是断言呢?断言就是对设计属性(行为)的描述,它是用描述性语言来描述设计的属性。在仿真过程中,如果一个被描述的属性不是我们期望的那样,那么断言就会失败;或者在仿真过程中,如果出现了一个不应该出现的属性,那么断言也会失败。
那么为什么要使用断言呢?原有的Verilog语言是一种过程性语言,设计它的目的是用于硬件描述,不是用于仿真验证,因此它不能很好地控制时序。要描述复杂的时序关系,Verilog语言需要编写冗长的代码,很容易出错,且不易维护。SVA是一种描述性语言,可以完美地描述和控制时序相关的问题,而且语言本身简洁易读,容易维护。SVA还提供了许多内嵌的函数用于测试特定的时序关系和自动收集功能覆盖率数据。并且当断言失败时,仿真系统会根据失败断言的严重程度来决定是打印一条错误提示信息还是退出仿真过程,便于定位出错的位置。
比如要验证这样一个属性:“当信号a在某一个时钟周期为高电平时,那么在接下来的2~4个时钟周期内,信号b应该为高电平”。用Verilog语言描述这样一个属性需要一大段代码,而用SVA描述就只需要几行代码。下面的代码为SVA。
例1:
property a2b_p;
原创力文档

文档评论(0)