断言操作符介绍

news2024/12/29 14:18:06

目录

1.延时操作符(##)

1.1 ##m

1.2 ##[m:n]

2.蕴含操作符(|=>,|->)

2.1 |=>操作符

2.2 |->操作符 

3 重复操作符 ([*m][->m][=m])

3.1 连续重复操作符([*m][*m:n])

3.2 跟随重复操作符([->m][->m:n])

        3.3 非连续重复操作符([=m])

3.4 小结

1.延时操作符(##)

1.1 ##m

带时序关系的sequence :在SVA中时钟延时用符号"##"来表示,如"##2"表示延时两个时钟周期;
示例:
sequence seq2;
        @(posedge clk) a ##2 b ;
endsequence
//在断言的property中调用sequence
check_a_and_b: assert property(seq2);
提示:##0  表示 sig1 sig2 必须同时发生才算成功 ,可见,在具体使用过程中,可以使用 ##0 表示两个事件在同一采样时刻同时发生

波形展示:

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

1.2 ##[m:n]

##[m:n] 其中m和n都是非负数,m可以为0,n可以为$,n必须大于m,当n为$时,比 较耗费仿真资源,一般不建议使用.
示例:
sequence seq2;
        @(posedge clk) a ##[2:4] b ;
endsequence
//在断言的property中调用sequence
check_a_and_b: assert property(seq2);
波形展示:

 ##[m:n]”采取的是“就近匹配”原则,在第一个序列匹配后将不会在进行后续序列的匹配。

2.蕴含操作符(|=>,|->)

2.1 |=>操作符

示例:
property p1;
        @(posedge clk) sig1 |=> sig2;
endproperty // p1

波形展示:

 表示sig1在时钟上升沿时为高,在当前时钟上升沿的下一个时钟上升沿时sig2也必须为高

2.2 |->操作符 

示例:
property p1;
        @(posedge clk) sig1 |-> sig2;
endproperty // p1
波形展示:

sig1在时钟上升沿时为高,在当前时钟上升沿sig2也必须为高 

NOTE:在编写断言时尽量使用“|->”而不是“|=>”,因为你可以通过“|->”后增加时钟数实现“|=>”的功能, 但是不能通过“|=>”实现“|->”的功能。

 断言时序判断note:例如(cat ##1 dog)|=> mouse

1. 首先判断cat是否为真,只有在cat为真的情况下才会进行后续判断,才会开启以上断言;

2. 遇到如果第二个clk如果依旧为cat,则将其作为初始cat进行判断(上图条件3);

3 重复操作符 ([*m][->m][=m])

当需要检查某个信号保持一种状态多个采样周期时,虽然在SVA中可以使用连续 ##1逐个指定该信号,如下例,sig1要在sig0为上升沿之后保持4个时钟周期的高电平。
示例:
……
@(posedge clk) $rose(sig0) |-> ##1 sig1 ##1 sig1 ##1 sig1##1 sig1;
……
虽然实现了特定的要求,但是这种实现方式明显很繁琐,为此,在 SVA 中提供了重复运算符,从而可以缩减繁琐的表达式。

3.1 连续重复操作符([*m][*m:n])

[*m]使用时表达式或者序列每次匹配间隔为一个采样周期,表达式或者序列必须连续重复匹配m次,m不能为$。
[*m:n]使用时表达式或者序列每次匹配间隔为一个采样周期,表达式或者序列重复m到n次,
当m次匹配后,即认为[*m:n]匹配成功,不会再对表达式进行后续的匹配判断,即其本身匹配
采取的是“就近匹配”原则。当然n的存在也是有一定意义的,如果[*m:n]后还存在其他表达
式或者序列,那么其他表达式或者序列的匹配检查点将不能超过第n次匹配。

 

 示例:

property p;
        @(posedge clk) $rose(a) |-> ##1 b[*2];
endproperty // p
波形展示:

提示:

在仿真中$rose并不是单纯的判断信号的跳边沿,而是判断时钟采样信号前后是否存在0->1/x->1/z->1的变化。

在仿真中$fell并不是单纯的判断信号的跳边沿,而是判断时钟采样信号前后是否存在1->/x->0/z->0的变化。

3.2 跟随重复操作符([->m][->m:n])

[->m]使用时表示表达式重复或者连续出现m次,但是整个重复表达式的最后一次匹配必须发生在其后续表达式匹配前的一个采样周期.

 示例:

property p;
        @(posedge clk) a |-> ##1 b[->3] ##1 a;
endproperty // p

波形展示:

[->m]也有对应的[->m:n]方式,其差别与[*m][*m:n]差别类似,不再赘述 .

3.3 非连续重复操作符([=m])

[=m] [->m] 工作情况类似,唯一的区别是 [->m] 要求整个重复表达式的最后一次匹配必须发
生在其后续表达式匹配的前一个相邻采样周期,而 [=m] 并没有要求整个重复表达式的最后一
次匹配必须发生在一定的条件下.

跟随重复的最后一次重复必须和下一个信号紧挨,例如上边的第一种情况,非连续重复则不需要。

示例:
property p1;
@(posedge clk) a |-> ##1 b[=3] ##1 a;
endproperty // p1
波形展示:

 

3.4 小结

重复运算符
说明
格式
连续重复
表达式或者序列在指定数量的采样
周期内连续的匹配,表达式或者序
列的每次匹配之间都有一个采样周
期的延迟
expror
sequence_name[*n]expror
sequence_name[*m:n]
跟随重复
表达式匹配达到指定的次数,而且
每次匹配不一定在连续的采样周期
上,被检验的重复表达式的最后一
个匹配应该发生在整个序列匹配结
束之前
expr[->n]expr[->m:n]
非连续重复
与跟随重复类似,除了它并不要求
信号的最后一次匹配发生在整个序
列匹配前的那个采样周期
expr[=n]expr[=m:n]

 

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

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

相关文章

Java选择题刷题记录5

Java堆栈 图片来自https://www.cnblogs.com/cici-new/p/14963762.html 数组、String都在堆里 枚举类 1.枚举类可以实现一个或多个接口,使用enum定义的枚举类默认继承java.lang.Enum类,而不是默认继承Object类,其中 java.lang.Enum类实现了…

机器视觉硬件的选择-标定板

康耐视智能相机Insight-缺陷检测 一>棋盘格的作用 a>畸变校正 径向畸变,径向畸变就是沿着透镜半径方向分布的畸变,产生原因是光线在原理透镜中心的地方比靠近中心的地方更加弯曲,这种畸变在短焦镜头中表现更加明显,径 向畸变主要包括桶形畸变和枕形畸变两种。以下分别…

chatgpt赋能python:Python输入π的方法及其应用

Python输入π的方法及其应用 Python是一门强大的编程语言,其支持的数学函数功能能够帮助用户完成各种复杂的计算操作。当我们需要在Python代码中使用π值时,不同的场景需要不同的处理方法。本文将详细介绍如何在Python中输入π值,并且探讨它…

Ansible 的脚本 --- playbook 剧本

playbook的相关知识 playbook 的简介 playbook是 一个不同于使用Ansible命令行执行方式的模式,其功能更强大灵活。 简单来说,playbook是一个非常简单的配置管理和多主机部署系统, 不同于任何已经存在的模式,可作为一个适合部署…

【C++】STL之string类(2)

个人主页:平行线也会相交💪 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创 收录于专栏【C之路】💌 本专栏旨在记录C的学习路线,望对大家有所帮助🙇‍ 希望我们一起努力、成长&…

Vue中如何进行分布式任务调度与任务监控

Vue中如何进行分布式任务调度与任务监控 在复杂的系统中,如何有效地进行任务调度和监控是一个非常重要的问题。分布式系统中,任务调度和监控则更加复杂。Vue是一款流行的前端框架,本文将介绍如何在Vue中进行分布式任务调度和监控。 什么是分…

QML基础

从 Qt 4.7 开始,Qt 引入了一种声明式脚本语言,称为 QML(Qt Meta Language 或者 Qt Modeling Language),作为 C 语言的一种替代。而 Qt Quick 就是使用 QML 构建的一套类库。 QML 是一种基于 JavaScript 的声明式语言。…

Qt下存储读写应用程序设置的三种方法

一、简介 List item 用户对应用程序经常有这样的要求:要求它能记住它的settings,比如窗口大小、位置和密码等等。有三种方法可以实现: 使用注册表;使用配置文件(.ini);使用自定义文件(例如.txt)。 二、使用注册表 …

C盘空间不足清理方法 之 Google Chrome 浏览器用户数据迁移和Windows10 默认浏览器路径失效修复

原理分析 将原来C盘的目录拷贝到其他盘,然后用mklink建立一个联接,这里贴下ChatGPT对于三种链接的解释 # 在Windows 10中,mklink是一个命令行工具,用于创建符号链接(symbolic link)或者硬链接&#xff08…

chatgpt赋能python:Python异常过滤教程:如何正确处理和过滤Python中的异常

Python异常过滤教程:如何正确处理和过滤Python中的异常 介绍 Python是一种非常流行的编程语言,广泛应用于各种应用程序和领域中。在我们编写Python程序的过程中,通常要处理各种异常情况,比如用户输入错误,文件读取错…

CSS查缺补漏之《Web字体、2D/3D变换》

文章略长,慢慢享用~ Web字体 css3新增了字体,使得用户不必局限在本计算机中安装的字体,可以使用多种字体; 需要在style中定义font-face规则; font-face { font-family: xxx名字; /* 必选项,自…

ROS2 入门应用 创建启动文件(Python)

ROS2 入门应用 创建启动文件(Python) 1. 创建功能包2. 添加依赖关系3. 添加启动文件4. 创建启动文件4.1. Python4.2. XML4.3. YAML 5. 编译和运行 1. 创建功能包 用Python、XML或YAML编写的启动文件可以启动和停止不同的节点,以及触发和处理…

设计模式(二十三):行为型之解释器模式

设计模式系列文章 设计模式(一):创建型之单例模式 设计模式(二、三):创建型之工厂方法和抽象工厂模式 设计模式(四):创建型之原型模式 设计模式(五):创建型之建造者模式 设计模式(六):结构型之代理模式 设计模式…

chapter8:SpringBoot启动配置原理

尚硅谷SpringBoot顶尖教程 1. 启动流程简介 SpringBoot应用从主启动类启动后的运行流程主要包含下面几个要点: (1)准备环境 执行ApplicationContextInitializer#initialize()方法;监听器SpringApplicationRunListener回调cont…

ADC 读取电位器旋钮,用回差消除临界值档位跳动

就是比如,用电位器当旋钮做风扇调速,划分出10 个速度档位,对应10 个ADC 转换结果的阈值。如果直接比较阈值,当旋钮拧到临近阈值的地方时,ADC 结果的微小跳动会导致风扇档位在两个级别之间不停左右横跳,因此…

Linux MySQL 索引 事务 存储引擎 死锁

索引(面试问得多) 索引是一个排序的列表,包含索引字段的值和其相对应的行数据所在的物理地址 作用 加快表的查询速度,还可以对字段排序 如何实现的搜索加速? 没有索引的情况下,要查询某行数据,需…

代码审计——命令执行详解

为方便您的阅读,可点击下方蓝色字体,进行跳转↓↓↓ 01 漏洞描述02 审计要点03 漏洞特征04 漏洞案例05 修复方案 01 漏洞描述 命令注入是指因为系统使用了可以执行命令的危险函数,但是调用这些函数的参数可控,并没有做过滤或过滤不…

Flutter集成Umeng步骤及若干问题总结

由于Flutter项目中用到umeng统计及手机号一键登录功能,但实际集成使用中遇到各种坑,文档及demo却都没有提及,因此写下这篇文章,有遇到同样问题的同学可以参考下。 集成之前,最好先查看一下文档:https://de…

LangChain for LLM Application Development 基于LangChain开发大语言应用模型(上)

以下内容均整理来自deeplearning.ai的同名课程 Location 课程访问地址 DLAI - Learning Platform Beta (deeplearning.ai) 一、什么是LangChain 1、LangChain介绍 LangChain是一个框架,用于开发由大语言模型驱动的应用程序。开发者相信,最强大的、差异…

Ubuntu+Pycharm+QtDesigner,并配置Pyqt5

1. 安装PyQt5 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyqt5 2. 安装ubuntu环境下所需要的依赖包 sudo apt install pyqt5* 3. 安装QtDesigner sudo apt install qttools5-dev-tools 4. 设置Pycharm 步骤: File–>setting–>Tools–&…