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

这篇具有很好参考价值的文章主要介绍了[SVA知识点二]: System verilog 断言(assert)的基本介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

举例介绍序列:

例1

sequence seq1
    @(posedge clk) b;
endsequence

序列seq1检查信号 “b” 在每个时钟上升沿都为高电平。如果信号 “b” 在任何一个时钟上升沿不为高电平,断言将失败。这相当于 “b == 1’b1”。

例2

sequence seq_a_and_b;
    @(posedge clk) a&&b;
endsequence

//在断言的property中调用sequence
check_a_and_b:assert property(seq_a_and_b);

//或如下
check_a_and_b: assert property(seq_a_and_b) $display("a&&b is true");
    else $error("a&&b is false");

例3:带参数的sequence

sequence seq1(signal_1, signal_2);
    @(posedge clk) signal_1&&signal_2;
endsequence

//在断言的property中调用sequence
check_a_and_b:assert property(seq1(a,b));

//或如下
check_a_and_b:assert property(seq1(a,b)) $display("a&&b is true");
    else $error("a&&b is false");

例4:带时序关系的sequence,在SVA 中时钟延时用符号 “##” 来表示,如 “##2” 表示延时两个时钟周期;

sequence seq2;
    @(posedge clk) a ##2 b;
endsequence

//在断言的property中调用sequence
check_a_and_b:assert property(seq2);

sequence只有在时钟上升沿到来后检查a是否为1才会继续检查后面的b;

sv中的assert(),SVA知识点,fpga开发,硬件工程,macos,python,perl

例5:sequence内可以调用其他sequence

sequence seq1;
    @(posedge clk) a&&b;
endsequence

sequence seq2;
    seq1;
endsequence

sequence与property的异同

  1. 任何sequence中的表达式都可以放到property中;
  2. 任何在property中的表达式也可以搬到sequence中,但是只有在property中才能使用蕴含操作符 |->(立即检查), |=>(打一拍再检查) 。
  3. property中可以例化其他property和sequence,sequence中也可以调用其他的sequence,但是不能例化property;
  4. property需要用 cover/assert/assume 等关键字进行实例化,而sequence直接调用即可;

蕴含操作符详解:

  1. 蕴含(implication)操作符用来表示,如果property中左边的先行算子(antecedent)成立,那么property右边的后续算子(consequent)才会被计算。
  2. 如果先行算子不成功,那么整个属性就默认地被认为成功,这叫做“空成功”(vacuous success)。
  3. 蕴含结构只能用在属性定义中,不能再序列中使用。
  4. 蕴含可以分为两类:交叠蕴含(overlapped implication)和非交叠蕴含(non-overlapped implication)。
  • |->交叠操作符

        如果条件满足,则评估其后续算子序列。

        如果条件不满足,则表现为空成功,不执行后续算子。

sv中的assert(),SVA知识点,fpga开发,硬件工程,macos,python,perl

sv中的assert(),SVA知识点,fpga开发,硬件工程,macos,python,perl

sv中的assert(),SVA知识点,fpga开发,硬件工程,macos,python,perl

  • |=>非交叠操作符

        如果条件满足,则在下一个周期评估其后续算子序列。

        如果条件不满足,则表现为空成功,不执行后续算子。

sv中的assert(),SVA知识点,fpga开发,硬件工程,macos,python,perl

sv中的assert(),SVA知识点,fpga开发,硬件工程,macos,python,perl

sv中的assert(),SVA知识点,fpga开发,硬件工程,macos,python,perl

SVA触发判断

  1. clock触发事件:@(posedge clk) A事件;
  2. 边沿触发事件

                $rose(a);           //-----------信号上升

                $fell(a);             //-----------信号下降

                $stable(a);        //-----------信号值不变

                $changed(a);    //----------return 1 if signal changed

断言循环延迟范围(##[])

sv中的assert(),SVA知识点,fpga开发,硬件工程,macos,python,perl

判断多个事件/信号的行为关系:

sv中的assert(),SVA知识点,fpga开发,硬件工程,macos,python,perl

简单SVA举例:

“disable iff”构造

在某些设计情况中,如果一些条件为真,则我们不想执行检验。换句话说,这就像是一个异步的复位,使得检验在当前时刻不工作。SVA提供了关键词“disable iff”来实现这种检验器的异步复位。

“disable iff”的基本语法如下:

disable iff(expression)<property definition0>

        FIFO的验证:

        1、检查FIFO满时不再写:

check_enqueue_no_wr: assert property (@posedge clk) disable iff(!rst_n)
    full |-> !wr;

        2、检查FIFO空时不再读:

check_denqueue_no_rd: assert property (@posedge clk) disable iff(!rst_n)
    empty |-> !rd;

断言覆盖率:文章来源地址https://www.toymoban.com/news/detail-788526.html

  1. 断言:用于一次性地或在一段时间内核对两个设计信号之间关系的声明性代码。
  2. 断言覆盖率可以测量某断言被触发的频繁程度。
  3. 断言可以跟随设计和测试平台一起仿真,也可以被形式验证工具所证实。
  4. 可以使用SV的程序性代码编写等效性检查,但使用SVA来表达会更容易。
  5. 断言最常用于查找错误,例如两个信号之间的相位关系,是否应该互斥或者请求与许可信号之间的时序等。
  6. 一旦检测到问题,仿真就可以立即停止。
  7. 断言可以用于查找感兴趣的信号的值或状态。
  8. 可以使用cover property来测量这些关心的信号的值或者状态是否发生。
  9. 在仿真结束时,仿真工具可以自动生成断言覆盖率数据。
  10. 断言覆盖率数据以及其他覆盖率数据都会被集成在同一个覆盖率数据库中,验证人员可以对其展开分析。

到了这里,关于[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日
    浏览(39)
  • 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

领红包