断言(System Verilog Assertion 简称SVA)可以被放在RTL设计或验证平台中,方便在仿真时查看异常情况。一般在数字电路设计中都要加入断言,断言占整个设计的比例应不少于30%。断言通常被称为序列监视器或者序列检验器,是对设计应当如何执行特定行为的描述,是一种嵌入设计检查。如果检查的属性(property)不是我们期望的表现,那么在我们期望事件序列出现异常情况,发生故障时,会产生警告或者错误提示。
目录
一、断言的作用
二、断言的种类
三、 并发断言SVA组成
一、断言的作用
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组成
一条SVA并发断言可以看成是由四种不同层次的结构组成:
- 建立布尔表达式(booleans)
- 建立序列(sequence)
- 建立属性(property)
- 建立断言声明(assertion statements)
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)来检查这些属性。其基本语法是:文章来源:https://www.toymoban.com/news/detail-692310.html
assertion_name: assert property(property name)
未完待续......文章来源地址https://www.toymoban.com/news/detail-692310.html
到了这里,关于[SVA知识点一]: System verilog 断言(assert)的基本介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!