assertion 断言验证的一点介绍


 断言验证

    断言验证就是在模拟中引入形式特征检查的验证方法。用这种方法,设计师编码时插入对特征的描述—断言。代码完成后,进行模拟以检查断言,并修改模拟时断言发现的问题。最后,特征检查根据约束限定,穷举搜索设计的状态空间、证明或证伪断言、查找设计的错误。很多人感觉到,断言验证将是芯片设计业中下一个突破点,使工程师能继续设计和验证更大更复杂的电路。断言验证,给模拟验证的测试基准和监督技术带来许多非常需要的技术手段,也有助于普及和接受正在出现的形式验证技术。

  断言简介

    断言是设计应当如何执行行为的描述,是嵌入设计的检查。断言一般用在协议可能误用或者设计意图可能不正确实现的地方,通常是功能划分模糊、模块间接口或者复杂的RTL结构。RTL编码前,把设计划分为多个模块,用断言形式地规定模块级接口协议。如握手协议中,模块收到请求信号后必须适时做出响应,反之断言冲突发生。这些形式接口规范,在模块级特征检查时用作约束模型,模拟时作为监督器。显然,通过断言,在RTL编码前消除了设计师对接口的误解。RTL编码时,为任何功能划分模糊或边角逻辑添加断言(FIFO永远不会上溢);或者一个指定状况永远不会发生(几个独立状态机不会同时产生总线请求)。

    使用断言的核心想法是,让设计师把设计假设、意图传递给验证过程,改善了设计师和验证师的沟通。设计师能利用验证知识改善设计流程,而验证师有了精确的设计特征来验证。实际上,当设计师在设计过程中写断言时,进一步明确了假设和特征,因此写出更好的代码。另外,考虑到模块的可验证性,设计师更有可能选择减少系统验证成本的实现方式,从而得到了更易验证更高质量的设计。

    设计师通过断言形式地捕获规范、假设和设计的行为特征。以简洁的格式捕获设计意图,从设计流程开始就剔除错误,同时使验证过程自动化。断言捕获接口约束,精确定义符合接口协议的可能行为。模拟时不断检查这些断言,然后形式工具对断言和RTL设计一起进行分析,搜索设计特征的反例。

    验证方法的核心是一个集成工具组,包括模拟、覆盖率、约束驱动的测试生成和形式分析,该工具组为RTL设计实现提供详细验证。断言从使用角度把这些能力结合到一起。断言用来监督模拟行为、驱动形式验证、控制激励生成,为全面的功能覆盖率尺度打下基础。断言验证在可验证设计中关键作用如图1所示。

    很好的RTL编程习惯。注释好的代码易于维护、理解预期功能,但断言的价值远不止于此。断言更进一步,准确地记录代码预期行为。这种记录方式便于工具验证,而非人阅读注释并试图理解代码是否正确工作。

    断言比纸面测试计划好。断言帮助测试实例自动运行:检验测试实例覆盖了特征并把该实例加入测试集。不用断言就无法保证设计进展时测试实例还能检查预期特征。同时断言提供了一种机制,来测量功能覆盖率和量化测试结果。

    断言易化调试、减少模拟时间。减少调试时间是运用断言的主要动力之一。断言是一种白盒验证技术,提高了被验证芯片的可观性和可控性。一旦设计错误发生,断言能立即探测到,无需等待错误结果传递到设计边界,也就没必要查找和定位错误,这可以省掉好几个小时。致命错误发生后,断言可以终止错误、节省模拟时间。

    断言验证模块间的接口。系统集成阶段,断言作为模块边界的看门狗,确保每个模块服从定好的协议。测试实例根据设计边界观测到的数据判断结果,即使设计内部有协议冲突,也极有可能通过测试。但断言可以帮助消灭这种情况。

  断言的定义方式

    有四种定义断言的方式:开发验证库定义宣言性断言,Verilog断言构造定义过程性断言,还可用形式特征语言或伪注释指示定义。

宣称性断言
    最常用的断言定义方法是开放验证库OVL提供的宣称性断言。OVL是基于Verilog的开放源码的断言监督元件库,以相同方式在RTL中定义静态和动态断言;提供统一的消息报告机制;易于定制;提供一致安全级别,发生严重错误时可停止模拟。由于源码开放,能够根据应用进行定制,因此OVL很吸引人。OVL使用断言模块库,因此在设计中必须实例化断言。目前它还无法定义过程性断言。

过程性断言
    与实例化断言模块相比,用过程性语句定义断言有时更方便。过程性断言在Verilog的always模块中非常有用。RTL编码时,宣称性和过程性断言都是很好的捕获设计意图的方式。如果在这个阶段没有定义断言,有关设计意图的知识就有可能流失,因为不可能有人返回来插入这些断言。

形式特征语言
    形式特征语言目的在于:用最少的代价指定设计的特征。    它们擅长创建复杂的时变表达式,通过使用规则表达式,用很少的代码指定复杂行为。已经存在许多年,但仍未进入主流设计,如Sugar,OVA。在设计的所有层次及项目各个阶段,形式特征语言都很有用。系统工程师能用其指定设计的高级特征。这些高级特征断言可用于基于IP的SoC设计验证,无需验证工程师理解设计的细节;RTL设计师可根据它们定义设计的低级特征。与过程性断言相比,形式特征语言更通用,没有针对任何特定的语言。目前用形式特征语言描述断言的工具把定义好的断言放在单独文件,这样形式工具和模拟器能够单独处理。

伪注释命令
    伪注释把断言埋在注释中,不干扰Verilog语法,不用对模拟器进行任何修改。形式验证工具用专门的语法分析程序读取注释。并为每个断言产生等价 RTL描述, 便于用标准逻辑模拟器模拟。这非常有用,因为它在模拟时自动收集断言覆盖率、创建设计逻辑活动的数据库,并以简洁的方式展现这些活动。

    2.3 仍需完善的方面
    成功应用断言验证,仍需下列技术改善成熟:模拟引擎、分析引擎、断言能力、统一语言。

模拟引擎直接执行断言检查
    断言是关于设计要素如信号、寄存器、业务等的描述。模拟时检查断言需要存取这些要素,多数情况下每周期都要存取。为了保证足够的模拟吞吐量,就要最小化存取开销。但现在使用PLI监督成百上千的断言,大大降低模拟性能。为了最小化存取开销,要求模拟引擎能直接检查断言。

多个形式引擎且与模拟引擎紧密结合
    设计的断言类型各异、难易并存,不可能用单个形式引擎证明搜索。应当有多个形式引擎用于形式分析,提高特征检查效率。为了形式分析效率最大化,形式分析引擎和模拟引擎要紧密配合,有效探索设计的状态空间。尤其是,能够生成并证实能引起某个特征或假设冲突的激励,在调试设计错误时非常必要。另外,形式分析需要大容量来发现大规模设计的错误,大容量指设计规模和用状态深度表示的特征复杂度。集成多个形式引擎和模拟引擎,可以有效搜寻复杂设计的边角逻辑错误。

断言的综合能力
    以前,仿真的唯一价值是性能。不像模拟,仿真不能让测试基准和监督器监测报告仿真器中的逻辑活动。但现在断言改变了这种情况。利用软硬件有效实现的断言,能在保持仿真性能的同时,提供可观察性、改善仿真的调试能力。但在仿真中运用断言的前提是断言是可综合的。把断言写进设计并综合到FPGA,提高了设计的可观察性,使设计师能够监测结果,一旦有断言冲突就报告。因此当设计放置在快速运行的仿真环境中,就能大大帮助设计师找出设计中残留错误。

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值