Systemverilog中operators和expression的记录

news2025/1/16 5:30:10

1. Equality operators

Equality operators有三种:

  • Logical equality:==, !=,该运算符中如果运算数包含有x/z态,那么结果就是x态。只有在两边的bit都不包含x/z态,最终结果才会为0(False)或1(True)
  • Case equality:===, !==,该运算符中会把两边运算数的x/z态都考虑进去,最终结果肯定是0或1
  • Wildcard equality:==?, !=?,该运算符的右边是wildcard匹配,右边操作数的x或z bit对应于左边的bit可以为任何数字,但左边的x或z不能被认为是wildcard。因此该运算符的结果可能有x/0/1三种结果,如果左边的x/z态不能被右边的wildcard匹配,那么结果就是x态,如果左边的x/z态会被右边的wildcard匹配,那么结果就为0/1

2. short circuit evaluation

只有&&, ||, ->, ?: 可以用short circuit evaluation方法,该方法如下:

第一个operand表达式肯定会被evaluated,对于&&,如果第一个operand结果为false,那么后续的operands就不会evaluated,对于||,如果第一个operand结果是true,那么后续的operands不会被operands。

对于条件运算符(cond_predicate ? expr1 : expr2),如果cond_predicate为True,那么第一个expr1会被evaluated如果cond_predicate为False,那么第二个expr2会被evaludated。如果cond_predicate为x或z态,那么将具体情况具体分析,根据expr1和expr2的值来决定,如下表所示:

3. shift operators

Shift operators有两种类型:logical shift operators(<<, >>)和arithmetic shift operators(<<<, >>>>)。对于左移操作符<<和<<<,空出的bits位补0。对于右移操作符>>和>>>,logical right shift移出的空位bit补0;arithmetic right shift操作如果是对unsigned变量移位,那么也是补0,如果是对signed变量移位,那么需要根据signed变量的最高位来移位,如果operand中含有x/z态bit,那么结果是unknown的。

4. set membership operator

inside左边的expression是singular expression。inside的右边是用逗号分隔的expression或range列表,如果expression是unpacked array,那么它将自动会被展开直到为singular value。open_range_list的value可以重复,所以values和value ranges可以有overlap。

对于非整形expression,inside是采用logical equality(==)运算符来比较的。对于整形expression,inside是使用wildcard equality(==?)来比较的,所以range_list中expression含有的x/z bit不参与比较,但左边的x/z仍然是需要比较的。

inside没有匹配到相等的expression时,如果一些comparison里结果时x,那么将整体返回1'bx。

inside中range的指定时采用[low_bound : high_bound]的方式,$可以可以用于代表左边expression中最小或最大值。如果[:]中左边的值大于右边的值,那么该range会被认为时无效的,没有包含任何value。

5. vector bit-select and part-select addressing

bit-select是从vector、packed arrary、packed structure、parameter或concatenation中选出特定的bits。bit-select或part-select对scalar或real variable或real parameter进行操作是非法的。

有两种类型的part-select:

  • non-indexed part-select:使用vect[msb_expr:lsb_expr]格式,msb_expr和lsb_expr必须是整型恒量表达式,第一个expr应该比第二个expr寻址到更significant bit。
  • indexed part-select语法如下:前两个选择bit从base开始,并逐渐按bit range上升,后两个选择bit从base开始,并逐渐按bit range下降。

example如下:

6. Steps for evaluating an expression

expression的评估步骤:

  • 基于sv的规则确定expression的size;
  • 基于sv的规则确定expression的sign;
  • 将expression的size和type传递给context-determined oprands
  • 将type和size一直传递到simple operand级别。Simple operand也就是最简单的操作数了,不可以分隔为更下一层的operands。

7. Steps for evaluating an assignment

assignment的评估步骤:

  • 决定右手边的size
  • 如果需要,将右手边的size扩展

8. operator overloading

operator可以使用overloading的方式增加额外的功能,例如实现unpacked structure的加减法。

被bind的operator可以使用argument data types来匹配正确的bind function。可以被overload的operators有arithmetic operators、relational operators和assignment。

overload的scope的visibility与data declaration一样的。

例子如下,这个功能还挺有意思的。

 

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

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

相关文章

中云盾DDoS云防护系统

中云盾 DDoS 防护系统作为公司级网络安全产品&#xff0c;为各类业务提供专业可靠的 DDoS/CC 攻击防护。在黑客攻防对抗日益激烈的环境下&#xff0c; DDoS 对抗不仅需要 “降本” 还需要 “增效”。 为什么上云&#xff1f; 云原生作为近年来相当热门的概念&#xff0c;无论…

RHCE-NTP、SSH服务器

1.配置ntp时间服务器&#xff0c;确保客户端主机能和服务主机同步时间​ 服务器端&#xff1a; &#xff08;1&#xff09;首先安装chrony软件&#xff1a; dnf install -y chrony &#xff08;2&#xff09;配置时间同步源&#xff1a; 进入vim /etc/chrony.conf &#xf…

引用和指针

总结 引用&#xff1a; 因为引用是变量的别名&#xff0c;所以引用必须初始化 因为引用不存在自己的地址&#xff0c;所以指针不能指向引用&#xff0c;即不能定义引用的指针 因为引用不是对象&#xff0c;但是引用又要绑定一个对象&#xff0c;所以不能定义引用的引用 in…

一篇文章看懂C++三大特性——多态的定义和使用

目录 前文 一&#xff0c;什么是多态&#xff1f; 1.1 多态的概念 二&#xff0c; 多态的定义及实现 2.1 多态的构成条件 2.2 虚函数 2.3 虚函数的重写 2.3.1 虚函数重写的两个例外 2.4 C override 和 final 2.5 重载,重写(覆盖),隐藏(重定义)的区别 三&#xff0c;抽…

代码随想录刷题-双指针总结篇

文章目录双指针移除元素习题我的解法双指针优化反转字符串习题我的解法剑指 Offer 05. 替换空格习题我的解法正确解法反转字符串里的单词习题我的解法反转链表习题我的解法删除链表的倒数第 N 个节点习题我的解法相交链表习题我的解法环形链表 II习题我的解法三数之和习题我的解…

Unity VFX -- (3)创建环境粒子系统

粒子系统中最常用也最重要的一种使用场景是实现天气效果。只需要做很少修改&#xff0c;场景就能很快从蓝天白云变成雪花飘舞。 和之前看到的粒子系统从一个源头发出粒子的情况不同&#xff0c;天气效果完全围绕着场景。 新增和放置一个新的粒子系统 为了创建下雨或下雪的天气…

【从零开始学Skynet】基础篇(三):服务模块常用API

1、服务模块 Skynet提供了开启服务和发送消息的API&#xff0c;必须要先掌握它们。列出了Skynet中8个最重要的API&#xff0c;PingPong程序会用到它们。 Lua API说明newservice(name, ...) 启动一个名为 name 的新服务&#xff0c;并返回服务的地址。 start(func) …

【学习笔记】unity脚本学习(二)(Time时间体系、Random随机数、Mathf数学运算)

目录Time时间体系timeScalemaximumDeltaTimefixedDeltaTimecaptureDeltaTimedeltaTime整体展示Random随机数Mathf数学运算IMathf.Round()Mathf.Ceil() Mathf.CeilToInt()Mathf.SignMathf.ClampMathf数学运算II-曲线变换Lerp 线性插值LerpAngleSmoothDamp疑问&#xff1a;Smooth…

自己动手写编译器:DFA跳转表的压缩算法

在编译器开发体系中有两套框架&#xff0c;一个叫"lex && yacc", 另一个名气更大叫llvm&#xff0c;这两都是开发编译器的框架&#xff0c;我们只要设置好配置文件&#xff0c;那么他们就会生成相应的编译器代码&#xff0c;通常是c或者c代码&#xff0c;然后…

AI自动寻路AStar算法【图示讲解原理】

文章目录AI自动寻路AStar算法背景AStar算法原理AStar寻路步骤AStar具体寻路过程AStar代码实现运行结果AI自动寻路AStar算法 背景 AI自动寻路的算法可以分为以下几种&#xff1a; 1、A*算法&#xff1a;A*算法是一种启发式搜索算法&#xff0c;它利用启发函数&#xff08;heu…

Jmeter接口测试和性能测试

目前最新版本发展到5.0版本&#xff0c;需要Java7以上版本环境&#xff0c;下载解压目录后&#xff0c;进入\apache-jmeter-5.0\bin\&#xff0c;双击ApacheJMeter.jar文件启动JMemter。 1、创建测试任务 添加线程组&#xff0c;右击测试计划&#xff0c;在快捷菜单单击添加-…

STM32F103RCT6驱动SG90舵机-完成正反转角度控制

一、SG90舵机介绍 SG90是一种微型舵机&#xff0c;也被称为伺服电机。它是一种小型、低成本的直流电机&#xff0c;通常用于模型和机器人控制等应用中。SG90舵机可以通过电子信号来控制其精确的位置和速度。它具有体积小、重量轻、响应快等特点&#xff0c;因此在各种小型机械…

亚马逊测评只能下单上好评?卖家倾向养号测评还有这些骚操作

亚马逊测评这对于绝大部分亚马逊卖家来说都不陌生&#xff0c;如今的亚马逊市场也很多卖家都在用测评科技来打造爆款。不过很多对于亚马逊测评的认知只停留在简单的刷销量&#xff0c;上好评。殊不知亚马逊养号测评还有其它强大的骚操作。 亚马逊自养号测评哪些功能呢&#xf…

PyTorch 深度学习实战 |用 TensorFlow 训练神经网络

为了更好地理解神经网络如何解决现实世界中的问题&#xff0c;同时也为了熟悉 TensorFlow 的 API&#xff0c;本篇我们将会做一个有关如何训练神经网络的练习&#xff0c;并以此为例&#xff0c;训练一个类似的神经网络。我们即将看到的神经网络&#xff0c;是一个预训练好的用…

【深度学习】【分布式训练】Collective通信操作及Pytorch示例

相关博客 【深度学习】【分布式训练】Collective通信操作及Pytorch示例 【自然语言处理】【大模型】大语言模型BLOOM推理工具测试 【自然语言处理】【大模型】GLM-130B&#xff1a;一个开源双语预训练语言模型 【自然语言处理】【大模型】用于大型Transformer的8-bit矩阵乘法介…

第02章_变量与运算符

第02章_变量与运算符 讲师&#xff1a;尚硅谷-宋红康&#xff08;江湖人称&#xff1a;康师傅&#xff09; 官网&#xff1a;http://www.atguigu.com 本章专题与脉络 1. 关键字&#xff08;keyword&#xff09; 定义&#xff1a;被Java语言赋予了特殊含义&#xff0c;用做专门…

银河麒麟服务器ky10 sp3 x86 pgadmin使用

目录 打开网页并登录 连接数据库 备份数据库 还原数据库 打开网页并登录 打开浏览器&#xff0c;输入127.0.0.1:5050&#xff0c;输入用户名和密码登录&#xff0c; 我这边设置的用户名是123456qq.com&#xff0c;密码是 123456 连接数据库 右键选择register-Server 输…

Html5版飞机大战游戏中(Boss战)制作

内容在“60行代码&#xff0c;制作飞机大战游戏”的基础上&#xff0c;继续追加入了Boss战的功能。 boss的血量默认设置为100了&#xff0c;可以二次开发调整……(^_^) 玩起来有一定难度哈。 试玩地址&#xff1a;点击试玩 实现功能 添加玩家飞机&#xff0c;并进行控制Boss能…

vue+MapboxGL:从0 到1 搭建开发环境

本系列教程是在vue2.X的基础上加载mapbox 程序,来开发各种示例程序。 安装顺序 1,下载安装nodejs 下载地址:https://nodejs.org/en/download/ 根据用户自己的机器情况进行选择不同版本的软件下载。 本教程示例采用是是windows 64位系统软件。 安装过程很简单,一路下一步…

vue-router3.0处理页面滚动部分源码分析

在使用vue-router3.0时候&#xff0c;会发现不同的路由之间来回切换&#xff0c;会滚动到上次浏览的位置&#xff0c;今天就来看看这部分的vue-router中的源码实现。 无论是基于hash还是history的路由切换&#xff0c;都对滚动进行了处理&#xff0c;这里分析其中一种即可。 无…