SystemVerilog Assertions应用指南 Chapter 1.14蕴含操作符

 1.14蕴含操作符

        属性p7有下列特别之处
        (1)属性在每一个时钟上升沿寻找序列的有效开始。在这种情况下,它在每个时钟上升沿检查信号“a”是否为高。
        (2)如果信号“a”在给定的任何时钟上升沿不为高,检验器将产生一个错误信息。这并不是一个有效的错误信息,因为我们并不关心只检查信号“a”的电平。这个错误只表明我们在这个时钟周期没有得到检验器的有效起始点。虽然这些错误是良性的,它们会在一段时间内产生大量的错误信息,因为检查在每个时钟周期都被执行。为了避免这些错误,某种约束技术需要被定义来在检查的起始点不有效时忽略这次检查SVA提供了一项技术来实现这个目的。这项技术叫作“蕴含”(Implication)。
        蕴含等效于一个if-then结构。蕴含的左边叫作“先行算子”( antecedent),右边叫作“后续算子”( consequent)。先行算子是约束条件。当先行算子成功时,后续算子才会被计算。如果先行算子不成功,那么整个属性就默认地被认为成功。这叫作“空成功”( vacuous success)。蕴含结构只能被用在属性定义中,不能在序列中使用。蕴含可以分为两类:交叠蕴含( Overlapped implication)和非交叠蕴含(Non- overlapped implication)。

1.14.1交叠蕴含

        交叠蕴含用符号“|->”表示。如果先行算子匹配,在同一个时钟周期计算后续算子表达式。下面用一个简单的例子解释。属性p8检查信号“a”在给定的时钟上升沿是否为高电平,如果a为高,信号“b”在相同的时钟边沿也必须为高。

property p8;@(posedge clk)  a|->b;
endpropertya8 : assert property (p8);

        图1-11显示了断言a8在模拟中的响应。表1-5总结了信号“a”和信号“b”的采样值和断言的状态。表中一共显示了三种结果。当信号“a”检测为有效的高电平,而且信号“b”在同一个时钟沿也检测为高,这是一个真正的成功。若信号“a”不为高,断言默认地自动成功,则称为空成功。相应的,失败指的是信号“a”检测为高且在同一个时钟沿信号“b”未能检测为有效的高电平。

 

1.14.2非交叠蕴含

        非交叠蕴含用符号“|=>”表示。如果先行算子匹配,那么在下一个时钟周期计算后续算子表达式。后续算子表达式的计算总是有一个时钟周期的延迟。下面以属性p9举个简单的例子。该属性检查信号“a”在给定的时钟上升沿是否为高,如果为高,信号“b”必须在下一个时钟边沿为高。

property p9;@(posedge clk) a |=> b;
endpropertya9 : assert property (p9);

        图1-12显示了断言a9在模拟中的响应。表1-6总结了信号“a和信号“b”的采样值以及断言的状态。应注意的是,断言在当前时钟周期开始,在下一个时钟周期成功的情况才是真正的成功。相应的,如果属性有一个有效的开始(信号“a”为高),且信号“b”在下一个时钟周期不为高,属性失败。

1.14.3后续算子带固定延迟的蕴含

        属性p10检查如果信号“a”在给定时钟上升沿为高,在两个时钟周期后信号“b”应该为高。类似的检查在前面已经用不使用蕴含的方式介绍过了。使用蕴含使得所有误报的错误都被消除。只有属性有效开始(信号“a”为高)时,才进行后续算子的检查(信号“a”)。图1-13显示了属性p10的一个模拟的例子。表1-7总结了属性p10中信号的采样值。

property p10;@(posedge clk) a-> ## 2 b;
endpropertya10 : assert property (p10);



1.14.4使用序列作为先行算子的蕴含

        属性p10在先行算子的位置使用的是信号。先行算子同样可以使用序列的定义。在这种情况下,仅当先行算子中的序列成功时,才计算后续算子中的序列或者布尔表达式。在任何给定的时周期,序列slla检查如果信号“a”和信号“b”都为高,一个时钟周期之后信号“c”应该为高。序列s11b检查当前时钟上升沿的两个时钟周期后,信号“d”应为低。最终的属性检查如果序s11a成功,那么序列s11b被检查。如果没有监测到有效的序列slla,那么序列s11b将不被检查,属性检査得到一次空成功。

sequence s11a;@(posedge clk) (a && b )  ##1 c;
endsequencesequence s11b;@(posedge clk) ##2 !d;
endsequenceproperty p11;s11a |-> s11b;
endproperty

        图1-14显示了断言a11在模拟中的表现。标记1s和1e表明了一个成功的属性检查的起始和结束。标记2s和2e标出了一个失败的起始和结束。在时钟周期11,信号“a”和信号“b”都为高。这表明2个时钟周期以后,即时钟周期14,信号“d”应该为低。但是在例子中的波形上信号“d”为高电平,因此属性失败。

        图中所有的空成功都用简单的竖线表示标记3s和3e显示了个成功的属性检查的起始和结束。表达式“a&&b”在时钟周期17为真,在一个时钟周期后,信号“c”像预期的一样为高。因此在时钟周期18,序列s11a成功。正如被期望的那样,接着信号“d”在两个时钟周期后为低。因此,属性在时钟周期20成功。

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

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

相关文章

TCP通信-使用线程池优化

下面的通信架构存在问题: 客户端与服务端的线程模型是: N-N的关系,客户端并发越多,系统瘫痪的越快。 引入线程池处理多个客户端消息 代码实现 public class ClientDemo1 {public static void main(String[] args) {try {Syste…

JVM——JVM概述以及双亲委派机制

JVM探究 请你谈谈你对JVM的理解?Java8虚拟机和之前的有什么变化更新?什么是OOM,什么是栈溢出StackOverFlowError?怎么分析?JVM的常用调优参数有哪些?内存快照如何抓取?怎么分析Dump文件&#x…

VSCode使用记录

一、安装 从官网 https://code.visualstudio.com 下载相应安装包 二、扩展:商店 Chinese (Simplified) (简体中文) Language Pack for Visual Studio CodeLive Serveropen in browserGitLens — Git superchargedRemote - SSHPrettier - Code formatterESLintpxt…

Spring framework Day 23:容器事件

前言 容器事件是 Spring Framework 中的一个重要概念,它提供了一种机制,使我们能够更好地了解和响应 Spring 容器中发生的各种事件。通过容器事件,我们可以在特定的时间点监听和处理容器中的各种状态变化、操作和事件触发,以实现…

给定一个文件夹,不允许用递归,统计其下面的文件数量,包括子文件夹下面的文件

对于统计一个文件夹下面的文件的数量,大家第一反应肯定是递归调用来实现,现在有这么一个目录结构:root1和root2下面各有一个文件file1.txt和file2.txt,所以最终统计出来的文件数量应该是3 我们先看看递归实现: public …

Sourcetree突然打不开,双击打开,图片闪一下就没反应了

解决方案如下: 1.点击图标,右键点击“打开文件所在位置 2.返回上一级,找到Atlassian文件夹 3.进入此文件夹下,删除SourceTree.exe_Url文件夹 4.再双击桌面的Sourcetree图标,可以正常打开。 最近刚遇到此问题&#x…

Linux简单安装ffmpeg 实现用PHP压缩音频

一、下载安装 1、官方下载地址:Download FFmpeg 2、下载完上传到服务器然 然后解压就算安装完成了 tar -xf ffmpeg-git-amd64-static.tar.xz 3、然后配置一下全局变量(当然也可以不用配置 使用的时候带上文件路径就行) cd /usr/bin ln -s…

如何实现前端音频和视频播放?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

基于TCP的RPC服务

TCP服务器上的RPC,通过创建一个服务器进程监听传入的tcp连接,并允许用户 通过此TCP流执行RPC命令 -module(tr_server). -author("chen"). -behaviour(gen_server).%% API -export([start_link/1,start_link/0,get_count/0,stop/0 ]).-export(…

系统设计 - 我们如何通俗的理解那些技术的运行原理 - 第一部分:通信协议(2)

本心、输入输出、结果 文章目录 系统设计 - 我们如何通俗的理解那些技术的运行原理 - 第一部分:通信协议(2)前言SOAP vs REST vs GraphQL vs RPC代码优先与 API 优先HTTP 状态代码API 网关有什么作用步骤说明 我们如何设计有效和安全的 API弘…

2048天创作纪念日

2048天创作纪念日 初心收获日常成就憧憬 初心 大一的时候,老师上课说可以通过浏览他人博客或者自己写博客来学习编程。从那以后,写博客这件事情就埋在了我心里,但是我一直没有什么内容想写。直到入选了ACM校队后,需要经常做大量的…

JS数组方法合集(含应用场景)

1.Array.push() 向数组的末尾添加一个或多个元素,并返回新的数组长度。原数组改变 const arr ["apple", "orange", "grape"]; const arr_length arr.push("banana");console.log("arr", arr, "arr_leng…

SpringCloud: sentinel链路限流

一、配置文件要增加 spring.cloud.sentinel.webContextUnify: false二、在要限流的业务方法上使用SentinelResource注解 package cn.edu.tju.service;import com.alibaba.csp.sentinel.annotation.SentinelResource; import com.alibaba.csp.sentinel.slots.block.BlockExcept…

图像处理软件Photoshop 2023 mac新增功能 ps 2023中文版

​Photoshop 2023 mac是一款功能强大、易用且灵活的图像编辑软件,旨在满足专业设计师和摄影师的需求。无论您是处理照片、制作图形还是进行艺术创作,Photoshop 2023 都能为您提供丰富的工具和效果,帮助您实现创意想法。Photoshop还支持多种文…

nodejs+vue中学信息技术线上学习系统-计算机毕业设计

因此,将现代化的计算机技术、网络技术以及多媒体等技术相结合,开发基于互联网的自主学习平台,为学生提供良好的自主学习环境,方便学生能够网上学习,师生通过该平台可以进行课后交流。目 录 摘 要 I ABSTRACT II 目 录 …

Linux系统之passwd命令的基本使用

Linux系统之passwd命令的基本使用 一、passwd命令介绍1.1 passwd命令简介1.2 passwd命令起源 二、passwd命令的使用帮助2.1 passwd命令的help帮助信息2.2 passwd命令的语法解释 三、查看passwd相关文件3.1 查看用户相关文件3.2 查看组相关文件 四、passwd命令的基本使用4.1 设置…

零信任身份管理平台,构建下一代网络安全体系

随着数字化时代的到来,网络安全已成为企业和组织面临的一项重要挑战。传统的网络安全方法已经无法满足不断演变的威胁和技术环境。近期,中国信息通信研究院(简称“中国信通院”)发布了《零信任发展研究报告( 2023 年&a…

力扣每日一题48:旋转图像

题目描述: 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 1: 输入:matrix [[1,2,3],…

【前端】使用tesseract插件识别提取图片中的文字

前言 有时候项目需要识别证照信息,或者拍照搜索内容等。图片处理一般是后端处理比较好,不过前端也有相关插件处理,tesseract.js就是一种前端处理方案。 使用tesseract tesseract更多的语言模型:language配置 安装 Tesseract.…

Linux系统编程_进程间通信第2天: 共享内存(全双工)、信号(类似半双工)、信号量

1. 共享内存概述(433.10)(全双工) 2. 共享内存编程实现(434.11) 共享内存(Shared Memory),指两个或多个进程共享一个给定的存储区 特点 共享内存是最快的一种 IPC&…