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

这篇具有很好参考价值的文章主要介绍了[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 <= 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)

systemverilog断言,SVA知识点,fpga开发,硬件工程,macos,python,perl,c++,开发语言

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)

未完待续......文章来源地址https://www.toymoban.com/news/detail-692310.html

到了这里,关于[SVA知识点一]: System verilog 断言(assert)的基本介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Verilog 高级知识点---状态机

    目录 状态机 1、Mealy 状态机 2、Moore 状态机 3、三段式状态机         Verilog 是硬件描述语言,硬件电路是并行执行的,当需要按照流程或者步骤来完成某个功能时, 代码中通常会使用很多个 if 嵌套语句来实现,这样就增加了代码的复杂度,以及降低了代码的可读性, 这个时

    2024年02月09日
    浏览(41)
  • FPGA学习笔记-知识点3-Verilog语法1

    按其功能可分为以下几类: 1) 算术运算符(+,-,×,/,%) 2) 赋值运算符(=,=) 3) 关系运算符(,,=,=) 4) 逻辑运算符(,||,!) 5) 条件运算符( ? :) 6) 位运算符(,|,^,,^) 7) 移位运算符(,) 8) 拼接运算符({ }) 9) 其它 按其所带操作数的个数运算符可分为三种: 1) 单目运算符(unary operator):可以带一个

    2024年02月06日
    浏览(57)
  • 接口测试基本知识点

    系统与系统之间、组件与组件之间、数据传递交换的通道 按协议:http、tcp、ip 按语言:C++、java、php 按范围:系统与系统、内部系统与内部系统、外部系统与外部系统之间 程序划分:多个内部程序、内部系统与外部系统、模块与模块 责任划分清晰、缩短研发周期、可拓性强

    2024年02月11日
    浏览(36)
  • 微机原理(8086基本知识点)

    一.8086介绍     8086是16位的处理器,数据总线为16位,地址总线为20位,分为BIU(Bus Interface Unit)与EU(Execution Unit),外部引脚总共40个,左边从上到下编号为1~20,右边从下到上编号为21~40。 二.8086编程结构 1.通用寄存器 AX(Accumulate Register),BX(Base Register),CX(Count Register)

    2024年02月11日
    浏览(34)
  • Vue3基本知识点

    为什么要学vue3 1、Vue是国内 最火的前端框架 2、Vue3是2020年09月18日正式发布的 目前以支持Vue3的UI组件库 库名称 简介 ant-design-vue PC 端组件库:Ant Design 的 Vue 实现,开发和服务于企业级后台产品 arco-design-vue PC 端组件库:字节跳动出品的企业级设计系统 element-plus PC 端组件库:

    2024年02月02日
    浏览(48)
  • Selenium WebDriver基本知识点

    2024软件测试面试刷题,这个小程序(永久刷题),靠它快速找到工作了!(刷题APP的天花板)_软件测试刷题小程序-CSDN博客 文章浏览阅读2.8k次,点赞85次,收藏12次。你知不知道有这么一个软件测试面试的刷题小程序。里面包含了面试常问的软件测试基础题,web自动化测试、

    2024年04月14日
    浏览(38)
  • SpringBoot + Vue基本知识点荟萃

    Maven是一个项目管理工具,可以对Java项目进行自动化的构建和依赖管理 项目构建:提供标准的,跨平台的自动化构建项目的方式 依赖管理:方便快捷的管理项目依赖的资源(jar包),避免资源间的版本冲突等问题 统一开发结构:提供标准的,统一的项目开发结构,如下图所

    2023年04月17日
    浏览(53)
  • 搜索引擎的基本原理、算法、用户画像及其他相关知识点

    作者:禅与计算机程序设计艺术 作为一个互联网公司,无疑需要做好搜索引擎的运营。每天都要搜索很多信息,如何做好搜索引擎的用户体验,提高用户的转化率是每家公司的核心竞争力。但实际上,做好搜索引擎运营也不是一件容易的事情,因为搜索引擎的特性、相关性算

    2024年02月04日
    浏览(64)
  • pinia的基本创建和统一创建和解构失去响应式解决办法等知识点

    https://stackblitz.com/github/superBiuBiuMan/pinia_registerWay 不能直接结构赋值 如果直接结构赋值,就像下面一样,就会失去响应式效果(数据变了,视图依旧不会更新) 如果确实需要解构赋值,可以使用 storeToRefs https://pinia.vuejs.org/zh/core-concepts/index.html#using-the-store 多次使用依旧是相同的对象 官

    2024年02月09日
    浏览(41)
  • Java面试题:解释Java的基本数据类型及其大小和默认值,列举数据类型常见的错误知识点

    Java的基本数据类型是Java编程语言中用于存储简单值的类型。这些数据类型包括整数类型、浮点类型、字符类型和布尔类型。下面是对这些基本数据类型的详细解释,包括它们的大小和默认值,以及一些常见的面试中容易出错的知识点。 基本数据类型及其大小和默认值 整型

    2024年04月16日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包