赞
踩
断言(System Verilog Assertion 简称SVA)可以被放在RTL设计或验证平台中,方便在仿真时查看异常情况。一般在数字电路设计中都要加入断言,断言占整个设计的比例应不少于30%。断言通常被称为序列监视器或者序列检验器,是对设计应当如何执行特定行为的描述,是一种嵌入设计检查。如果检查的属性(property)不是我们期望的表现,那么在我们期望事件序列出现异常情况,发生故障时,会产生警告或者错误提示。
目录
1.检查特定条件或事件序列的出现情况。
2.提供功能覆盖
1.立即断言(Immediate Assertions)
立即断言具有非时序性特性,作为检查当前仿真时间的条件,执行时如同过程语句相当于 if else,需要放在过程块中,如:initial、always、task、function。
语法:
labels: assert(expression) action_block;
其中:
(1)、action_block操作块在断言表达式expression之后立即执行;
(2)、action_block操作块指定在断言成功或失败时采取什么操作;
(3)、action_block类型:pass_statement;else fail_statement;
(4)、labels为断言名称;
由于断言表达式中所断言的条件必须为真,因此断言的失败将具有与之相关的“严重”程度。默认情况下,断言失败的严重程度是一个error。还可以结合$fatal/$error/$warning/$info给出不同严重级别的消息提示,严重等级依次递减。
- module alu(a,b,c,en)
- input a,b;
- input en;
-
- output c;
- reg a,b;
-
- always @(posedge clk or negedge rst_n)
- begin
- if(!rst_n)
- begin
- c <= 0;
- end
- else if(a == b)
- begin
- check_a_and_b assert((a>=5) || (b>=5)) $display("expression evaluates value is true");
- else
- $error("expression evaluates value is false");
- end
- end
-
- ... ...
-
- endmodule

在a和b发生变化时,断言语句被执行。
2.并发断言(Concurrent Assertions)
并发断言具有时序性,通常使用关键词property用来区分立即断言和并发断言。之所以称之为并发,是由于断言语句会与设计模块一同并行执行。我们可以认为并发断言是一个连续运行的模块,为整个仿真过程检查信号,因此会在并发断言内设定一个采样的时钟。
(1)、 并发断言仅在有时钟周期的情况下出现,基于时钟周期执行;
(2)、 测试表达式是基于所涉及变量的采样值在时钟边缘进行计算的;
(3)、 变量的采样在预备阶段完成,而表达式的计算在调度器的观察阶段完成;
(4)、 可以在过程块、module、interface、program块内定义并发断言;
(5)、 区分立即断言和并发断言的关键字是property。
语法:
labels: assert property (判断条件)
举例:
a_b: assert property(@(posedge clk) not(a && b));
其中:
(1)、labels为断言名称;
(2)、property(属性)在每个时钟的上升沿都被效验,不论a和b如何变化。
一条SVA并发断言可以看成是由四种不同层次的结构组成:
1、布尔表达式
布尔表达式是构成SVA的最基本单元。其一般形式为标准的SystemVerilog的布尔表达式,它由信号及其逻辑关系运算符构成,用以表示某个逻辑事件的发生。
2、序列
序列是布尔表达式在时间上的组合。在任何设计模型中,功能总是由多个逻辑事件的组合来表示。这些事件可以是简单的同一个时钟边缘被求值的布尔表达式,或者是经过几个时钟周期的求值的事件。
SVA中用序列(sequence)来表示这些事件,sequence可以让断言易读,复用性高。具有以下特性:可以带参数、可以在property中调用、可以使用局部变量、可以定义时钟周期。
其基本语法是:
- sequence Name_of_Sequence;
- (test expression);
- ......
- endsequence
许多序列可以逻辑或者有序地组合起来生成更复杂的序列。
3、属性
SVA中用属性(property)来表示这些复杂的有序行为。property是比seuence更高一层的单元,也是构成断言最常用的模块。其中最重要的性质是可以在property中使用蕴含操作符(|-> |=>)。
其基本语法是:
- property Name_of_Property;
- (test expression); or
- (complex sequence expressions)
- endproperty
property就是SVA中需要用来判定的部分,用来模拟过程中被验证的单元,它必须在模拟过程中被断言来发挥作用。
4、断言
SVA中用断言(assert)来检查这些属性。其基本语法是:
assertion_name: assert property(property name)
未完待续......
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。