[SVA知识点一]: System verilog 断言(assert)的基本介绍 |
您所在的位置:网站首页 › immediate语法 › [SVA知识点一]: System verilog 断言(assert)的基本介绍 |
断言(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) endpropertyproperty就是SVA中需要用来判定的部分,用来模拟过程中被验证的单元,它必须在模拟过程中被断言来发挥作用。 4、断言 SVA中用断言(assert)来检查这些属性。其基本语法是: assertion_name: assert property(property name)未完待续...... |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |