我的 System Verilog 学习记录(4)
引言
本文简单介绍 System Verilog 语言的 数据类型。
前文链接:
我的 System Verilog 学习记录(1)
我的 System Verilog 学习记录(2)
我的 System Verilog 学习记录(3)
数据类型简介
System Verilog 是 Verilog 的一个扩展,也可以用作HDL硬件描述语言。Verilog 具有reg 、wire等数据类型描述硬件行为。由于硬件验证越来越复杂,需求度越来越高,Verilog的数据类型已经不足以开发有效的testbench和testcase。因此 System Verilog 通过增加类似C语言的数据类型将Verilog扩展以实现更好的封装性和紧凑性。
下表给出了主要的数据类型:
System Verilog 的注释和Verilog相同。
System Verilog 同样支持4态:
怎么写定点数和指数 ?
示例:
仿真log:
System Verilog 的字符串是啥 ?
什么是结构体 ?
结构表示存储在一起并通过结构变量引用的数据类型的集合。
示例:
什么是固定大小的数组 ?
数组是在连续位置中存储不同值的变量。
示例:
仿真log:
viod 数据类型
Void 数据类型表示不存在的数据,可以指定为函数和任务的返回类型,以指示没有返回值。
示例:
real 转 int
实数将通过将实数舍入到最近的整数而不是截断来转换为整数。如果小数部分正好为0.5,则将从零舍入。可以使用强制转换或使用系统任务指定显式转换。直接将实数值分配给整数类型也是舍入而不是截断。
logic 和 bit
4状态数据类型
4状态指的:0、1、X、Z,这和 Verilog 一致。reg类型数据只能在程序块(如 always 、initial)中驱动,而wire数据类型只能在 assign 语句中驱动。System Verilog引入了一个新的4状态数据类型logic,其既可以在程序块内驱动也在一在连续赋值 assign 语句中驱动。但是当一个信号被多个器件驱动时,需要定义为线网类型,如wire,这样System Verilog 可以确定最终值。
logic
示例:
仿真log:
2状态数据类型
在典型的验证测试平台中,有许多情况下我们并不真正需要所有四个值(0,1,x,z),例如,当使用指定包长度的报头对网络包进行建模时。长度通常是一个数字,但不是X和Z。SystemVerilog添加了许多新的两状态数据类型,这些数据类型只能存储,值为0或1。这将有助于更快的仿真,占用更少的内存,并且在某些设计风格中是首选的。
当4状态值转换为2状态值时,任何未知或高阻抗位都应转换为零。
最重要的两态数据类型是bit,它是testbench中最常用的。bit类型的变量可以是0或1,表示单个比特。应该提供从MSB到LSB的范围,使其表示和存储多个比特。
bit
示例:
仿真log:
integer 和 byte
除了Verilog支持的所有数据类型外,SystemVerilog还具有许多其他2状态数据类型。现代测试平台中最常用的数据类型有 bit , int , logic , byte。
integer
System Verilog 有3种新的有符号数据类型存放整数,每种的 size 不一样,最小的是 shortint ,范围:-32768~32767;最大的是 longint ,可以用通过关键字 signed 或者 unsigned 定义数据的符号性。当然也可以通过强制类型转换改变数据的符号性。
有符号(signed)
默认情况下,integer 变量是有符号数。
示例:
系统任务:$bits 返回变量的位宽。
仿真log:
无符号(unsigned)
示例:
仿真log:
byte
字节是长度为8位的整数的更短版本。默认情况下,字节是带符号变量,并且具有与上一节中描述的整数相同的属性。
示例:
仿真log:
字符串
System Verilog 中的字符串是啥 ?
字符串数据类型是字符的有序集合。字符串变量的长度可以具有动态长度且在仿真过程中可变化。字符串变量表示字符串的方式与字符串文字不同。使用字符串变量时不会发生截断。
语法
string variable_name [= initial_value] ;
variable_name 是有效的标识符,可选的 initial_value 可以是字符串文字、空字符串的值 " " 或字符串数据类型表达式。如果在声明时未指定初始值,则变量默认为” “空字符串文字。
举个栗子
仿真 log :
Verilog 中如何表示字符串 ?
单个ASCll字符需要8位(1字节),要存储字符串,我们需要的字节数与字符串中的字符数一样多。
字符串操作符
示例:
仿真 log:
基本字符串方法
System Verilog 还包括许多使用内置方法表示法的特殊方法来处理字符串。
示例:
仿真 log:
字符串转换方法
枚举类型
枚举类型定义了一组命名值。在下面的示例中,light_*是一个枚举变量,可以存储三个可能的值(0,1,2)之一。默认情况下,枚举列表中的第一个名称获得值0,后面的名称获得像1和2这样的增量值。
用户可以为任何枚举的名称分配任何整数值。如果任何名称没有赋值,则它会自动采用先前名称的递增后的值。
请注意,枚举名不能以数字开头 !
错误示例:
如何定义一个新的枚举类型 ?
可以创建自定义数据类型,以便可以使用相同的数据类型声明其他变量。
示例:
仿真 log:
为啥需要枚举啊 ?
为了代码的低复杂度和易读性。
如下的代码没有枚举:
增加枚举更加易读:
枚举类型范围
示例:
仿真 log:
枚举类型方法
示例:
类型检查
枚举类型是强类型的,因此,除非使用显式强制转换,否则不能为枚举类型的变量赋值位于枚举集之外的整数值。
示例:
Questa Sim 运行结果:
主要是赋值的类型不匹配。应该用强制类型转换。
更改强转后,Questa Sim 运行结果:
数组
SV 通过如下的几种数组,给复杂数据结构的建立提供了很大的灵活性。
- 静态数组
- 动态数组
- 关联数组
- 队列
静态数组
静态数组是指其大小在编译前已知的数组。在下面的示例中,声明了一个8位宽的静态数组,为其赋值并迭代以打印其值。
静态数组进一步分为压缩数组和未压缩数组。
未压缩数组可以是固定尺寸数组、动态数组、关联数组或者队列。
动态数组
动态数组是指其大小在编译期间未知,但在运行时根据需要进行定义和扩展的数组。动态数组很容易通过其空方括号识别。
关联数组
关联数组是用某个 键 (Key)存储内容的数组。这很容易通过其方括号中存在的数据类型来识别。该键表示在方括号中。
队列
队列是一种数据类型,可以将数据推入队列或从数组中弹出。它很容易通过方括号内的符号 $ 识别。
未完待续~
相关文章:

我的 System Verilog 学习记录(4)
引言 本文简单介绍 System Verilog 语言的 数据类型。 前文链接: 我的 System Verilog 学习记录(1) 我的 System Verilog 学习记录(2) 我的 System Verilog 学习记录(3) 数据类型简介 Sys…...
Git : 本地分支与远程分支的映射关系
概述 本文介绍 git 环境中本地分支与远程分支的映射关系的查看和调整。 1、查看本地分支与远程分支的映射关系 执行如下命令: git branch -vv注意就是两个 v ,没有写错。 可以获得分支映射结果: dev fa***** [github/dev] update * main…...

运维必看|跨国公司几千员工稳定访问Office365,怎么实现?
【客户背景】本次分享的客户是全球传感器领域的领导者,其核心产品为电流和电压传感器,被广泛应用于驱动和焊接、可再利用能源以及电源、牵引、高精度、传统和新能源汽车等领域。 作为一家中等规模的全球化公司,该公司在北京、日本、西欧、东欧…...

Python GDAL读取栅格数据并基于质量评估波段QA对指定数据加以筛选掩膜
本文介绍基于Python语言中gdal模块,对遥感影像数据进行栅格读取与计算,同时基于QA波段对像元加以筛选、掩膜的操作。本文所要实现的需求具体为:现有自行计算的全球叶面积指数(LAI).tif格式栅格产品(下称“自…...

Vue3:有关v-model的用法
目录 前言: 回忆基本的原生用法: 原生input的封装: 自定义v-model参数: 对el-input的二次封装: 多个v-model进行绑定: v-model修饰符: v-model自定义参数与自定义修饰符的结合: 前言&am…...

CF1692C Where‘s the Bishop? 题解
CF1692C Wheres the Bishop? 题解题目链接字面描述题面翻译题目描述题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示代码实现题目 链接 https://www.luogu.com.cn/problem/CF1692C 字面描述 题面翻译 题目描述 有一个888\times888的棋盘,列编号从…...

Jenkins集成Allure报告
Jenkins集成Allure报告 紧接上文:Jenkins部署及持续集成——傻瓜式教程 使用Allure报告 1、在插件库下载Allure插件Allure Jenkins Plugin 2、在构建后操作中加入allure执行的报告目录(相对于项目的路径) 3、run.py代码改成如下 import p…...

【数据结构】AVL树
AVL树一、AVL树的概念二、AVL的接口2.1 插入2.2 旋转2.2.1 左单旋2.2.2 右单旋2.2.3 左右双旋2.2.4 右左双旋三、验证四、源码一、AVL树的概念 当我们用普通的搜索树插入数据的时候,如果插入的数据是有序的,那么就退化成了一个链表,搜索效率…...
这一次我不再低调,老板法拉利的车牌有我的汗水
起源: 5Why分析法最初是由丰田佐吉提出的,后来,丰田汽车公司在发展完善其制造方法学的过程中持续采用该方法。5Why分析法作为丰田生产系统的入门课程之一,是问题求解的关键培训课程。丰田生产系统的设计师大野耐一曾将5Why分析法描述为:“丰田科学方法的基础,重复五次,问…...

通过连接另一个数组的子数组得到一个数组
给你一个长度为 n 的二维整数数组 groups ,同时给你一个整数数组 nums 。 你是否可以从 nums 中选出 n 个 不相交 的子数组,使得第 i 个子数组与 groups[i] (下标从 0 开始)完全相同,且如果 i > 0 ,那么…...

公派访问学者的申请条件
知识人网海外访问学者申请老师为大家分享公派访问学者申请的基本条件以及哪些人员的申请是暂不受理的,供大家参考:一、 申请人基本条件:1.热爱社会主义祖国,具有良好的思想品德和政治素质,无违法违纪记录。2.具有良好专…...

多点电容触摸屏实验
目录 一、简介 二、硬件原理 编辑1、CT_INT 2、I2C2_SCL和I2C2_SDA 3、RESET复位引脚 三、FT54x6/FT52x6电容触摸芯片 四、代码编写 1、编写ft5426.h 2、编写ft5426.c 3、main函数 一、简介 电容屏只需要手指轻触即可,而电阻屏是需要手指给予一定的压力才…...

【算法与数据结构(C语言)】栈和队列
文章目录 目录 前言 一、栈 1.栈的概念及结构 2.栈的实现 入栈 出栈 获取栈顶元素 获取栈中有效元素个数 检测栈是否为空,如果为空返回非零结果,如果不为空返回0 销毁栈 二、队列 1.队列的概念及结构 2.队列的实现 初始化队列 队尾入队列 队头出队列 获…...

Uni-app使用vant和uview组件
目录 1.安装vant组件 1.1安装前需知 1.2.安装 1.3.创建uni-app项目 2.安装uview-ui组件 2.1官网 2.2安装 2.3安装成功 1.安装vant组件 1.1安装前需知 小程序能使用vant-weapp组件,且官网的安装是直接导入小程序中,不能直接导入uni-app框架中 V…...

2023年PMP考试应该注意些什么?
首先注意(报考条件) 2023年PMP考试报名流程: 一、PMP英文报名: 英文报名时间无限制,随时可以报名,但有一年的有效期,所以大家尽量提前报名,在英文报名有效期内进行中文报名。 英…...

selenium环境安装及使用
selenium简介官网https://www.selenium.dev简介用于web浏览器测试的工具支持的浏览器包括IE,Firefox,Chrome,edge等使用简单,可使用java,python等多种语言编写用例脚本主要由三个工具构成,webdriver,IDE,web自动化环境…...

高性能低功耗4口高速USB2.0 HUB 完美替代FE1.1S和FE8.1
该NS1.1s是一个高度集成的,高品质,高性能,低功耗,为USB 2.0高速4端口集线器又低成本的解决方案。 (点击即可咨询芯片详细信息) NS1.1s的特点 1.通用串行总线规范修订版2.0(USB 2.0)完…...

Go全栈学习(一)基础语法
Go语言基础语法 文章目录Go语言基础语法注释变量变量的定义变量的交换理解变量(内存地址)匿名变量变量的作用域常量2023.2.4日 总结// 关于Goland 中 执行的问题// 1、包下执行 (一个 main 函数来执行,如果有多个,无法…...

centos7搭建svn配置
基本概述 Apache Subversion(简称SVN,svn),一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上很多版本控制服务已从CVS转移到Subversion。…...
趣味三角——第12章——tanx
第12章节 tanx In his very numerous memoires, and especially in his great work, Introductio in analysin infinitorum (1748), Euler displayed the most wonderful skill in obtaining a rich harvest of results of great interest. . . . Hardly any other work …...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...

CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...

【从零学习JVM|第三篇】类的生命周期(高频面试题)
前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 …...

Windows安装Miniconda
一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...
Git常用命令完全指南:从入门到精通
Git常用命令完全指南:从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...
Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?
Pod IP 的本质与特性 Pod IP 的定位 纯端点地址:Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址(如 10.244.1.2)无特殊名称:在 Kubernetes 中,它通常被称为 “Pod IP” 或 “容器 IP”生命周期:与 Pod …...

Matlab实现任意伪彩色图像可视化显示
Matlab实现任意伪彩色图像可视化显示 1、灰度原始图像2、RGB彩色原始图像 在科研研究中,如何展示好看的实验结果图像非常重要!!! 1、灰度原始图像 灰度图像每个像素点只有一个数值,代表该点的亮度(或…...