[SVA知识点一]: System verilog 断言(assert)的基本介绍

您所在的位置:网站首页 immediate语法 [SVA知识点一]: System verilog 断言(assert)的基本介绍

[SVA知识点一]: System verilog 断言(assert)的基本介绍

2023-12-12 22:07| 来源: 网络整理| 查看: 265

断言(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 =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)来检查这些属性。其基本语法是:

assertion_name: assert property(property name)

未完待续......



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3