验证断言(立即断言并行断言)

news2024/11/17 5:52:35

目录

1.何为断言

2.断言的作用:

3.断言的种类 

3.1立即断言

3.2并发断言 

4.断言层次结构

4.1 sequence 序列

4.2 property 序列 

5.sequence和property的异同

6.补充知识点(assert/cover/assume) 

7.写在后边


 

1.何为断言

        断言主要用来检查仿真过程中存在的时序问题,如果存在异常情况,断言会报警。一般在数字电路设计中都要加入断言,断言占整个设计的比例应不少于30%。

2.断言的作用:

  • 使用断言可以缩短研制周期;
  • 使用断言可以使设计中存在的各种问题更容易被动态监测观察;
  • 使用断言内嵌的覆盖率统计功能(cover)可以更加容易的获得对于功能的覆盖性;
  • 断言的可读性较一般描述语言更容易理解;
  • 通过全局控制实现设计中断言的开关;
  • 断言可以加速形式验证,提高形式验证的效率;

3.断言的种类 

        断言分为立即断言并行断言

3.1立即断言

        立即断言主要用来检查当前仿真时间的条件,可以理解为if...else,放在过程块中使用

语法:

        labels:assert(expression)action_block;

  • action_block 操作块在断言表达式的求值之后立即执行
  • 操作块指定在断言成功或失败时采取什么操作
  • action_block: pass_statement; else fail_statement;
例子:
        assert(expression) $display("expression evaluates to true");
        else $fatal("expression evaluates to false");
  断言失败默认严重程度为error,error达到一定数量仿真会退出;

立即断言构建思路:

3.2并发断言 

        并发断言检 查跨越多个时钟周期的事件序列
        可以认为并发断言是一个连续运行的模块,为整个仿真过程检查信号,所以需要在并发断言内指定一个采样时钟。
  • 并发断言仅在有时钟周期的情况下出现
  • 测试表达式是基于所涉及变量的采样值在时钟边缘进行计算的
  • 可以在过程块、module、interface和program块内定义并发断言
  • 区别并发断言和立即断言的关键字是property
格式:
         断言名: assert property (判断条件)
例子:
        check_a_and_b:assert property (@(posedge clk) (a&&b))
                $display("a&&b is true");
        else
                 $error ("a&&b is false");

4.断言层次结构

SVA中可以存在内建的单元,这些单元可以是以下的几种:
Boolean expressions 布尔表达式
        布尔表达式是组成断言的最小单元,断言可以由多个逻辑事件组成,这些逻辑事件可以是
简单的布尔表达式.在SVA中,信号或事件可以使用常用的操作符,如:&&, ||, !, ^,&
等;
Sequence序列
sequence是布尔表达式更高一层的单元,一个sequence中可以包含若干个布尔表达式,同
时在sequence中可以使用一些新的操作符,如 ## 、重复操作符、序列操作符
  Property 属性
property是比sequence更高一层的单元,也是构成断言最常用的模块,其中最重要的性质
是可以在property中使用蕴含操作符(|-> |=>);

4.1 sequence 序列

在任何设计中,功能总是由多个逻辑事件的组合来表示,这些事件可以是简单的同一个时钟沿
被求值的布尔表达式,也可以是经过几个时钟周期的求值事件,SVA用关键字sequence来表示
这些事件,sequence可以让断言易读,复用性高;
sequence具有如下特性:
        • 可带参数;
        • 可以在 property 中调用;
        • 可以使用局部变量;
        • 可以定义时钟周期;
sequence的定义格式如下:
        sequence name_of_sequence(参数);
        ……
        endsequence

 以下代码分别通过property,sequence+property实现对a&&b仿真时间的判断:

//1.使用property实现对a&&b时序的判断

check_a_and_b:assert property(@(posedge clk) (a&&b)) 
    $display("a&&b is true");
else     
    $error("a&&b is false");

//2.使用sequence+property实现对a&&b时序的判断

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

//在断言的property中调用sequence
check_a_and_b: assert property(seq_a_and_b) 
    $display("a&&b is true");
else 
    $error("a&&b is false");

sequence 序列可以带参数:

格式:
        sequence seq1(signal1,signal2);
                @(posedge clk) signal1&&signal2;
        endsequence

用法: 

sequence seq1(signal1,signal2);
    @(posedge clk) signal1&&signal2;
endsequence

//在断言的property中调用sequence
check_a_and_b: assert property(seq1(a,b)) 
    $display("a&&b is true");
else 
    $error("a&&b is false");

sequence 序列可以有时序

带时序关系的sequence :在SVA中时钟延时用符号"##"来表示,如"##2"表示延时两个时钟周期;
例如:
sequence seq2;
    @(posedge clk) a ##2 b ;
endsequence

//在断言的property中调用sequence
check_a_and_b: assert property(seq2);
sequence会 在时钟上升沿到来后首先检查 a 是否为 1,当a为1时,两个时钟周期后继续检查b是否为1,当b为1时,断言pass
sequence 序列可以内嵌
格式
        sequence seq1;
                @(posedge clk) a&&b;
        endsequence
        sequence seq2;
                seq1;
        endsequence

4.2 property 序列 

property是比sequence更高一层的单元,也是构成断言最常用的模块,其中最重要的性质是可以在
property中使用 蕴含(overlapped)操作符(|-> |=>);
property的定义格式如下:
        property name_of_property(参数列表);
                测试表达式或复杂的sequence;
        endproperty
property就是SVA中需要用来判定的部分,用来模拟过程中被验证的单元,它必须在模拟过程中被断言来 发挥作用,SVA提供了关键字 assert 来检查属性,assert的基本语法是:
assertion_name: assert property(property_name)
else
        $display("SVA error");

并行断言构建思路: 

5.sequence和property的异同

  • 任何在sequence中的表达式都可以放到property中;
  • 任何在property中的表达式也可以搬到sequence中,但是只有在property中才能使用蕴含操作符
  • property中可以例化其他propertysequencesequence中也可以调用其他的sequence,但是不能例化property
  • property需要用cover /assert/assume 等关键字进行实例化,而sequence直接调用即可;

6.补充知识点(assert/cover/assume) 

assert:

  • 动态仿真中,如果仿真工具运行测试用例时发现断言失败,就会打印出相应的信息
  • 形式化验证中,assertion就是Formal验证工具(例如cadencejasperGold)的证明目标。Formal验证工具会遍历所有的合法场景,在数学上证明这个断言永远不会失败。还是那句话,仿真只能“证伪” ,而Formal验证具有可以“证明”的能力。

cover: 

  • 动态仿真中,覆盖率是一个非常关键的数据,表明验证人员关注的场景是否真的在用例测试时被覆盖到。通常,需要确保每个测试点都至少被覆盖过一次,不然就说明我们的测试存在潜在的风险。
  • 形式化验证中,cover也起着重要的作用。尽管理论上Formal覆盖DUT所有的场景,但是如果我们对设计过约了,可能还是会遗漏关键的场景测试。这时候,我们仍然需要使用cover来证明,我们确实对这个场景进行了有效的验证和覆盖。

assume:

  • 动态仿真中,对于assumeassert的处理是完全相同的。EDA仿真器会在执行测试用例的时候检查assume是否失败,如果失败就会打印相应的信息。但是在概念上,assumeassert还是有些区别的:assume失败意味着验证环境或者周边设计可能出现了问题,即所测设计激励的行为不符合预期;而assert失败意味着DUT设计的行为不符合预期
  • 形式化验证中,assumeassert有着很明显的区别。就和字面意思一样,assume是作为设计的约束,会引导Formal工具产生的合法输入空间。如果没有assumeFormal工具会尽可能地遍历所有的空间,像空气一样到达他能够触及的空间。大多数情况,设计都会使用assume降低FPV的复杂度。

7.写在后边

关于property中的蕴含操作符部分,博主将在下一篇文章中进行总结;

博客地址:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/634540.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网络知识点之-FTP协议

FTP协议指文件传输协议(File Transfer Protocol,FTP),是用于在网络上进行文件传输的一套标准协议,它工作在 OSI 模型的第七层, TCP 模型的第四层, 即应用层, 使用 TCP 传输而不是 UD…

第一节 初识C语言

第一节 初识C语言 目录 一. 什么是C语言二. 第一个C语言程序三. 数据类型四. 变量与常量五. 未完待续 本章重点: 什么是C语言第一个C语言程序数据类型变量、常量字符串转义字符注释选择语句循环语句函数数组…

【LeetCode】每日一题 -- 1171. 从链表中删去总和值为零的连续节点 -- Java Version

题目链接:https://leetcode.cn/problems/remove-zero-sum-consecutive-nodes-from-linked-list/ 1. 题解(1171. 从链表中删去总和值为零的连续节点) 2021年字节二面真题 1.1 暴力解法:穷举 时间复杂度 O(n2),空间复杂…

Python系列之面向对象编程

目录 一、面向对象编程 1.1 面向对象三大特征 1.2 什么是对象 二、类(class)和实例(instance) 2.1 类的构成 2.2 创建类 2.3 创建实例对象和访问属性 2.4 Python内置类属性 2.5 类属性与方法 三、类的继承 3.1 方法重写 四、多态 一、面向对象编程 1.1 面向对象三大…

抖音短视频矩阵系统-源码-系统搭建

目录 1. 短视频AI智能创作 2. 托管式账号管理: 3. 数据分析 4. 智能营销获客 开发流程 抖音账号矩阵系统开发,抖音账号矩阵系统源码搭建,抖音账号技术系统源码部署 抖音矩阵系统专注于为短视频私域运营达人或企业提供一站式赋能服务平台。具体包括智…

小议CSDN周赛57期 - 凑数

本期周赛几乎忘记参加,在最后几分钟的时候上来看了看。那些选择判断一通乱选,填空题也已经被吐槽得差不多了,这里不多说,只说我对第一道编程题的看法(吐槽)。因为 C 站的机制是,即使它错了&…

彻底理解HTTPS加密原理

目录 1.为什么需要加密? 2.什么是对称加密? 3.什么是非对称加密? 4.非对称加密对称加密? 5.数字证书 6.数字签名 相信大家对于HTTP与HTTPS的区别都有了解,那么对于HTTPS的加密过程你是否知道呢? 对称…

单片机内存管理

单片机内存管理 1、随机存储器 RAM是随机存储器,读写速度快,但掉电以后数据会丢失。它分为SRAM(静态RAM)和DRAM(动态RAM)。SRAM无需刷新就可以保存数据;DRAM需要不断刷新才可以保存数据。在CPU内部的RAM,就叫内部RAM&#xff0c…

算法模板(3):搜索(4):高等图论

高等图论 有向图的强连通分量 相关概念 强连通分量:Strongly Connected Component (SCC).对于一个有向图顶点的子集 S S S,如果在 S S S 内任取两个顶点 u u u 和 v v v,都能找到一条 u u u 到 v v v 的路径,那么称 S S…

JVM零基础到高级实战之Java程序员不可不知的对象创建底层步骤细节

JVM零基础到高级实战之Java程序员不可不知的对象创建底层步骤细节 JVM零基础到高级实战之Java程序员不可不知的对象创建底层步骤细节 文章目录 JVM零基础到高级实战之Java程序员不可不知的对象创建底层步骤细节前言Java对象创建的流程步骤包括哪些?总结 前言 JVM零…

【云原生 | 53】Docker三剑客之Docker Compose应用案例一:Web负载均衡

🍁博主简介: 🏅云计算领域优质创作者 🏅2022年CSDN新星计划python赛道第一名 🏅2022年CSDN原力计划优质作者 🏅阿里云ACE认证高级工程师 🏅阿里云开发者社区专…

基于Echarts构建停车场数据可视化大屏(文末送书)

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

【部署LVS-DR 群集】

目录 一、DR模式 LVS负载均衡群集1、数据包流向分析2、DR 模式的特点 二、DR模式 LVS负载均衡群集部署1、1.配置负载调度器(192.168.80.30)(1)配置虚拟 IP 地址(VIP:192.168.102.188)&#xff0…

《设计模式》之装饰器模式

文章目录 1、定义2、动机3、类结构4、优缺点5、注意事项6、总结7、代码实现(C) 1、定义 动态(组合)地给一个对象增加一些额外的职责。就增加功能而言,Decorator模式比生成子类(继承)更为灵活(消除重复代码…

PPT中这8个隐藏技巧-掌握了马上让你幸福感满满

开篇 一个好的PPT需要精雕细琢。即使我们使用了AIGC特别是时下流行的用GPT书写大纲,然后把大纲内的内容放到一些自动GC PPT内容的生成器里生成后的PPT其实也不是马上可以拿来用的。工作上一份大领导、公司、集团级别的PPT不可能90%使用GPT GC生成就可以直接交付的。比如说我们…

Trie树模板与应用

文章和代码已经归档至【Github仓库:https://github.com/timerring/algorithms-notes 】或者公众号【AIShareLab】回复 算法笔记 也可获取。 文章目录 Trie树(字典树)基本思想例题 Trie字符串统计code关于idx的理解 模板总结应用 最大异或对分…

初探BERTPre-trainSelf-supervise

初探Bert 因为一次偶然的原因,自己有再次对Bert有了一个更深层地了解,特别是对预训练这个概念,首先说明,自己是看了李宏毅老师的讲解,这里只是尝试进行简单的总结复述并加一些自己的看法。 说Bert之前不得不说现在的…

ansible远程执行指令,/bin/sh: java: command not foundnon-zero return code

问题描述:ansible远程执行指令,初选指令加载不全, [rootVM-0-6-centos ~]# ansible all -m shell -a "java -version" 10.206.0.15 | FAILED | rc127 >> /bin/sh: java: command not foundnon-zero return code 解决方案&a…

C++(8):IO 库

IO 类 IO 库类型和头文件 iostream 定义了用于读写流的基本类型,fstream 定义了读写命名文件的类型,sstream 定义了读写内存 string 对象的类型。 其中带 w 前缀的类型用来操作宽字符语言 (wchar_t)。宽字符版本的类型和函数前都有一个 w,如…

SAP从入门到放弃系列之PP/DS-part1

翻译一篇大佬文章,了解一下PPDS前世今生和产品功能出现的业务背景。虽然是15年的,但经典永流传~~~,感谢大佬的文章。 原文地址: #S4HANA 1610 use case series: 9a – Production Planning and Detailed Scheduling – PP/DS (b…