Systemverilog中operators和expression的记录

news/2024/5/19 17:12:42 标签: Systemverilog, Operator, Expression, evaluation, assignment

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.niftyadmin.cn/n/200394.html

相关文章

点云学习(1): 获取点云的包络框

1. 记录一些容易忘记的点云操作----后续一定补充 1.获取点云的包络框 下面的get_axis_aligned_bounding_box(),get_min_bound(),get_max_bound()等函数非常好用 import open3d as o3d import numpy as np# 读取点云数据 pcd o3d.io.read_point_cloud("input.pcd"…

sqlite的下载安装和配置使用(非常详细)

sqlite下载链接&#xff1a; Sqlite下载官网 1、这个压缩包中有头文件sqlite3.h以及源码&#xff08;主要是用到头文件&#xff09; 2、看电脑配置的操作系统或者看所需项目是64位还是32位下载对应的压缩包 3、解压得到这两个文件&#xff0c;sqlite3.def文件用来生成lib文件…

从零开始实现一个C++高性能服务器框架----线程模块

此项目是根据sylar框架实现&#xff0c;是从零开始重写sylar&#xff0c;也是对sylar丰富与完善 项目地址&#xff1a;https://gitee.com/lzhiqiang1999/server-framework 简介 项目介绍&#xff1a;实现了一个基于协程的服务器框架&#xff0c;支持多线程、多协程协同调度&am…

22.SSM-JdbcTemplate总结

目录 一、JdbcTemplate对象。 &#xff08;1&#xff09;Spring产生JdbcTemplate对象。 &#xff08;2&#xff09;JdbcTemplate常用操作。 &#xff08;3&#xff09;知识要点。 一、JdbcTemplate对象。 &#xff08;1&#xff09;Spring产生JdbcTemplate对象。 这个是Sp…

如何使用LaTeX中的命令【博文生成:ChatGPT 3.5】

刚才翻译了一篇介绍LaTeX中命令的博文。突发奇想试一试ChatGPT能否自动帮我生成一篇博文。 这篇是使用ChatGPT 3.5生成的。 使用ChatGPT 4生成的博文请见此链接&#xff1a;https://blog.csdn.net/xovee/article/details/129924949 Prompt&#xff1a;写一篇3000字的介绍LaT…

【Node.js】项目开发实战(下)

开发用户的基本信息接口获取用户信息 最终文件列表展示首先db/index.js下连接数据库mysql2增删改查用户的信息代码展示&#xff08;文件之间内容穿插&#xff09;1&#xff0c;注册并登录&#xff0c;拿到用户的token进行增删改查2&#xff0c;配置定义joi表单规则&#xff0c;…

谈ChatGPT基本信息

ChatGPT是由人工智能研究实验室OpenAI在2022年11月30日发布的全新聊天机器人模型。 ChatGPT是人工智能技术驱动的自然语言处理工具&#xff0c;它能够通过学习和理解人类的语言来进行对话&#xff0c;还能根据聊天的上下文进行互动&#xff0c;真正像人类一样来聊天交流&#…

智能锁语音提示芯片?看这里!

智能门锁凭借着在用户识别、安全性、管理性方面的智能化优势&#xff0c;受到了现代人们的青睐&#xff0c;它的外观设计也是紧随现代潮流。 而目前市场上所有的智能锁基本都会做语音提示功能&#xff0c;方便用户在操作使用时能简单便捷。 安全防护主要体现在可以在智能锁里加…