序列中使用的表达式基于其所含变量的采样值进行评估。

表达式评估的结果为布尔值,其解释方式与过程性if语句条件中的表达式完全相同:若表达式计算结果为X、Z 或 0,则被解释为假;否则即为真。

但是,对可出现在并发断言中的表达式存在若干限制。后续章节将具体说明对操作数类型、变量及运算符的限制。

表达式允许包含函数调用,但需遵循以下语义限制:
— 表达式中出现的函数不能包含输出(output)或引用(ref)参数(允许常量引用const ref);
— 函数应为自动类型(automatic)(或不保留状态信息)且无副作用。

一 操作数类型

1.1  被禁止的类型

  • — non-integer types (shortreal, real and realtime) 
  • — string 
  • — event 
  • — chandle
  • — class 
  • — associative arrays
  • — dynamic arrays

特别注意:

(1)定长数组,无论是压缩数组还是非压缩数组,都可以整体使用、部分选择使用或通过索引位/部分选择使用。其索引可以是常量、参数或变量。

(2)chandle 是一种特殊的数据类型,它允许 SystemVerilog 代码与用 C 或 C++ 编写的函数和数据结构进行交互。它是在 SystemVerilog 和外部语言(C/C++)之间搭建桥梁的关键数据类型

(3)压缩数组,但数据类型应为 bit 或 logictypedef logic [3:0] nibble_t;

         非压缩数组typedef int int_array_u [4];

下面举例:typedef int [4] array;
typedef struct { int a, b, c,d } record;
union { record r; array a; } p, q; 允许的比较1:
p.a == q.ap.r == q.r允许的比较2:logic [7:0] arrayA [0:15], arrayB[0:15];arrayA == arrayB; arrayA != arrayB;
arrayA[i] >= arrayB[j]; 
arrayB[i][j+:2] == arrayA[k][m-:2];
(arrayA[i] & (~arrayB[j])) == 0;

1.2  变量

在表达式中出现的变量必须是静态设计变量,或是能返回第17.4.1节所述类型值的函数调用。同时也可以访问在程序(programs)、接口(interfaces)或时钟块(clocking blocks)中声明的静态变量。若引用任务(task)中声明的静态变量,则该变量会像其他变量一样被采样,与任务的调用无关。

1.3  操作符说明

对于第17.4.1节所述类型有效的所有运算符均可使用,但赋值运算符及递增和递减运算符除外。SystemVerilog包含了C语言的赋值运算符(如 +=)以及C语言的递增和递减运算符(++ 和 --)。这些运算符不得在断言中出现的表达式中使用。此项限制可防止副作用产生。

二 序列sequence

请注意:

{} 表示“零次或多次重复”

[ boolean_abbrev ] 布尔缩写操作符(boolean_abbrev)包括:[->n] 或 [=n]

property 通常由时序行为构建而成。序列功能提供了构建和操作时序行为的能力。最简单的时序行为是线性的。线性序列是一个以时间线性递增顺序排列的有限SystemVerilog布尔表达式列表。

当满足以下条件时,该线性序列被称为在连续时钟周期的有限时间区间内匹配:第一个布尔表达式在第一个时钟周期评估为真,第二个布尔表达式在第二个时钟周期评估为真,依此类推,直至最后一个布尔表达式在最后一个时钟周期评估为真。

单个布尔表达式就是一个简单线性序列的示例:当该布尔表达式在某个时钟周期评估为真时,它就在该时钟周期实现匹配。

更复杂的时序行为由 SystemVerilog 序列描述。序列是建立在 SystemVerilog 布尔表达式之上的正则表达式,它简洁地指定了一组包含零个、有限多个或无限多个线性序列的集合。如果该集合中至少有一个线性序列在连续时钟周期的有限时间区间内匹配,则该序列被认为在该区间内匹配。

一个属性可能涉及对在不同时间点开始的一个或多个时序行为进行检查。对序列的尝试评估即是在特定时钟周期开始搜索该序列的匹配项。为确定此类匹配是否存在,需要从该特定时钟周期开始评估相应的布尔表达式,并在每个后续时钟周期持续评估,直至找到匹配项或推断出不可能存在匹配。

序列可以通过连接组合,类似于列表的拼接。这种连接使用 ## 符号指定从第一个序列结束到第二个序列开始之间的延迟。

以下是序列连接的语法:

在此语法中:
— constant_expression(常量表达式)在编译时计算,且计算结果必须为整数值。
— constant_expression 只能为 0 或正值。
— $ 符号用于指示仿真结束。在形式化验证工具中,$ 用于表示一个有限无界的范围。
— 当使用两个表达式指定范围时,第二个表达式的值必须大于或等于第一个表达式。

序列所处的上下文环境决定了其被评估的时机。序列中的第一个表达式会在触发该序列评估的表达式生效时(或之后)的第一个时钟周期进行检查。序列中的每个后续元素(如果存在)会在紧接着的下一个时钟周期进行检查。

## 后跟数字或范围用于指定从当前时钟周期到后续序列开始之间的延迟。延迟 ##1 表示后续序列的开始时间比当前时钟周期晚一个时钟周期。延迟 ##0 表示后续序列的开始时间与当前时钟周期处于同一时钟周期

当在两个序列之间作为连接符使用时,该延迟表示从第一个序列结束到第二个序列开始之间的时间间隔。延迟 ##1 表示第二个序列的开始时间比第一个序列的结束时间晚一个时钟周期。延迟 ##0 表示第二个序列的开始时间与第一个序列的结束时间处于同一时钟周期

以下是延迟表达式的示例。true 是一个布尔表达式,其值始终为真,用于提升视觉清晰度。可将其定义为:

‘define true 1 ##0 a // means a
##1 a // means ‘true ##1 a 
##2 a // means ‘true ##1 ‘true ##1 a
##[0:3]a // means (a) or (‘true ##1 a) or (‘true ##1 ‘true ##1 a) or (‘true ##1 ‘true ##1 ‘true ##1 a)
a ##2 b // means a ##1 ‘true ##1 b

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

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

相关文章

指针高级(2)

6.数组指针#include <stdio.h> int main() {/*练习&#xff1a;利用指针遍历数组*///1.定义数组int arr[] { 10,20,30,40,50 };int len sizeof(arr) / sizeof(int);//2.获取数组的指针//实际上获取的&#xff1a;数组的首地址int* p1 arr;int* p2 &arr[0];printf…

如何高效记单词之:抓住首字母——以find、fund、fond、font为例

find、fund、fond、font这几个单词&#xff0c;你都认识吗&#xff1f;这几个单词&#xff0c;意思大体如下&#xff1a; find v.找到&#xff1b;发现fund n.基金fond a.喜欢的&#xff1b;喜爱的&#xff1b;深情的font n.字体&#xff0c;字型&#xff0c;字形 这几个单词在…

Ubuntu下把 SD 卡格式化为 FAT32

在 Ubuntu 下把 SD 卡格式化为 FAT32&#xff0c;按下面做&#xff08;会抹掉整卡数据⚠️&#xff09;&#xff1a; 1) 找到你的 SD 卡设备名 lsblk -p记下整盘设备&#xff0c;比如 /dev/sdb&#xff08;USB 读卡器常见&#xff09;或 /dev/mmcblk0&#xff08;内置读卡器&am…

涉私数据安全与可控匿名化利用机制研究(上)

文章目录前言一、涉私数据的概述及分类&#xff08;一&#xff09;涉私数据的“知情同意原则”&#xff08;二&#xff09;涉私数据的分类二、涉私数据可控匿名化利用机制&#xff08;一&#xff09;数据产品与涉私数据的利用形式&#xff08;二&#xff09;通过可信数据空间受…

Redis 的跳跃表:像商场多层导航系统一样的有序结构

目录 一 、从 "超市货架" 的痛点看跳跃表的价值 1.1、跳跃表与商场导航系统的结构对应 1. 1.1、zskiplistNode&#xff1a;带导航标记的 "商品"&#xff08;跳跃表节点&#xff09; 1.1.1.1、level []&#xff1a;商品上的多层导航标记 1.1.1.2、back…

小程序点击之数据绑定

<return /><view class"all-wrap" style"padding-top:{{topHeight}}px;"><view class"my-title">我的收藏</view><scroll-viewclass"collect-list-container"scroll-yscroll-top"{{scrollTop}}"…

数据结构——顺序表和单向链表(2)

目录 前言 一、单向链表 1、基本概念 2、单向链表的设计 &#xff08;1&#xff09;节点设计 &#xff08;2&#xff09;初始化空单向链表 &#xff08;3&#xff09;、初始化数据节点 &#xff08;4&#xff09;数据节点 &#xff08;5&#xff09;判断链表是否为空 …

More Effective C++ 条款26:限制某个类所能产生的对象数量

More Effective C 条款26&#xff1a;限制某个类所能产生的对象数量核心思想&#xff1a;通过控制类的实例化过程&#xff0c;限制程序中该类的对象数量&#xff0c;可以防止资源过度使用&#xff0c;确保系统资源合理分配&#xff0c;并实现单例或有限实例模式。 &#x1f680…

CMS系统维护中常见的安全威胁及防护指南!

内容管理系统&#xff08;CMS&#xff09;已成为网站建设的核心工具&#xff0c;但随之而来的安全风险却常被低估。超过70%的网站使用CMS构建&#xff0c;而其中近半数曾遭遇安全漏洞威胁。作为运维人员和开发者&#xff0c;了解这些安全威胁并采取相应防护措施至关重要。 一、…

springboot knife4j 接口文档入门与实战

Spring Boot3 Knife4j 项目地址https://gitee.com/supervol/loong-springboot-study&#xff08;记得给个start&#xff0c;感谢&#xff09;Knife4j 介绍在国内 Java 开发领域&#xff0c;Knife4j 是一款广受欢迎的 API 文档工具&#xff0c;它基于 OpenAPI 规范&#xff0c;在…

Spring Boot 事务失效的八大原因及解决方案详解

在 Spring Boot 项目开发中&#xff0c;声明式事务管理通过 Transactional 注解提供了极大的便利。但许多开发者都曾遇到过事务不生效的困扰。本文将详细分析导致 Spring Boot 事务失效的八大常见情况&#xff0c;并提供相应的解决方案。1. 数据库引擎不支持事务问题分析&#…

数据结构:顺序栈与链栈的原理、实现及应用

数据结构详解&#xff1a;顺序栈与链栈的原理、实现及应用 1. 引言&#xff1a;栈的核心概念 栈&#xff08;Stack&#xff09;是一种重要的线性数据结构&#xff0c;它遵循后进先出&#xff08;Last In First Out, LIFO&#xff09;的原则。这意味着最后一个被添加到栈中的元素…

apipost 8.x 脚本循环调用接口

apipost 8.x 脚本循环调用接口背景实现先说整体逻辑&#xff1a;最后背景 上周为了找某OA 偶尔出现的诡异现象&#xff0c;需要用测试工具来压测&#xff0c;看看这个问题能否重现。以前用过Jmeter&#xff0c;但是没有装&#xff0c;正好有个国产的apipost看看如何&#xff1…

STM32 - Embedded IDE - GCC - 使用 GCC 链接脚本限制 Flash 区域

导言如上所示&#xff0c;Keil限制flash区域只需要在IROM1里将Start框框与Size框框填入具体信息即可。比如bootloader程序一般从0x8000000开始&#xff0c;大小0x10000&#xff08;64KB&#xff09;。此时&#xff0c;flash的范围被限制在0x8000000 ~ 0x800FFFF。 另外&#xf…

Jenkins和Fastlane的原理、优缺点、用法、如何选择

Jenkins 和 Fastlane 是软件开发中用于自动化流程的工具一、Jenkins实现自动化打包1.1具体实现步骤安装与配置&#xff1a;首先在服务器上安装 Jenkins&#xff0c;可以通过官方提供的安装包进行安装&#xff0c;支持多种操作系统。安装完成后&#xff0c;通过 Web 界面进行初始…

DOM常见的操作有哪些?

1.DOM文档对象模型&#xff08;DOM&#xff09;是HTML和XML文档的编程接口它提供了对文档结构化表述&#xff0c;并定义了一种方式可以使从程序中对该结构进行访问&#xff0c;从而改变文档的结构&#xff0c;样式和内容任何HTML或XML文档都可以用DOM表示一个由节点构成的层级结…

【Kubernetes】知识点3

25. 说明Job与CronJob的功能。答&#xff1a;Job&#xff1a;一次性作业&#xff0c;处理短暂的一次性任务&#xff0c;仅执行一次&#xff0c;并保证处理的一个或者多个 Pod 成功结束。CronJob&#xff1a;周期性作业&#xff0c;可以指定每过多少周期执行一次任务。26. Kuber…

LINUX-网络编程-TCP-UDP

1.目的&#xff1a;不同主机&#xff0c;进程间通信。2.解决的问题1&#xff09;主机与主机之间物理层面必须互相联通。2&#xff09;进程与进程在软件层面必须互通。IP地址&#xff1a;计算机的软件地址&#xff0c;用来标识计算机设备MAC地址&#xff1a;计算机的硬件地址&am…

目标检测定位损失函数:Smooth L1 loss 、IOU loss及其变体

Smooth L1 Loss 概述 Smooth L1 Loss&#xff08;平滑 L1 损失&#xff09;&#xff0c;是一个在回归任务&#xff0c;特别是计算机视觉中的目标检测领域&#xff08;如 Faster R-CNN, SSD&#xff09;非常核心的损失函数。 xxx 表示模型的预测值&#xff0c;yyy 表示真实值&am…

Android开发之fileprovider配置路径path详细说明

第一步在清单文件配置fileprovider属性<providerandroid:name"androidx.core.content.FileProvider"android:authorities"${applicationId}.fileprovider"android:exported"false"android:grantUriPermissions"true"><meta-d…