我的 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 …...

Java - 数据结构,栈
一、栈 1.1、什么是栈 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈 顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 压…...

某餐厅系统网络故障分析案例
背景 针对食堂经营企业,某堂食软件为客户提供优化堂食就餐流程、提高食堂服务水平和管理效率。 某上海客户使用该堂食系统,在就餐高峰时段,总是出现支付、点餐等操作缓慢,动辄一个操作需要等待几十秒。该客户联系软件厂商&#…...

华为OD机试题,用 Java 解【密室逃生游戏】问题
最近更新的博客 华为OD机试 - 猴子爬山 | 机试题算法思路 【2023】华为OD机试 - 分糖果(Java) | 机试题算法思路 【2023】华为OD机试 - 非严格递增连续数字序列 | 机试题算法思路 【2023】华为OD机试 - 消消乐游戏(Java) | 机试题算法思路 【2023】华为OD机试 - 组成最大数…...

如何重命名SQL Server数据库
重命名SQL Server数据库 使用T-SQL重命名SQL Server数据库使用分离和附加重命名SQL Server数据库使用T-SQL查询分离和重新连接在SSMS中分离和重新连接通过SSMS重命名SQL Server数据库当使用SQL数据库很长一段时间时,你可能会遇到需要为数据库命名的情况。它可以用几种不同的方…...

联想昭阳E5-ITL电脑开机后绿屏怎么U盘重装系统?
联想昭阳E5-ITL电脑开机后绿屏怎么U盘重装系统?有用户电脑正常开机之后,出现了屏幕变成绿屏,无法进行操作的情况。这个问题是系统出现了问题,那么如何去进行问题的解决呢?接下来我们一起来分享看看如何使用U盘重装电脑…...

车载开发知识交流【学习路线】
前言 在2023国内百废待兴;经济复苏的号召一直在响应,这对于压抑了三年的人民来说无疑是福音。这篇我们主要说一下拉动经济的其中大板块——车企;我们知道我们最大的经济除了房地产,第二就是车企。而在造车领域中也不断的加入了许…...

【读书笔记】《深入浅出数据分析》第二章 检验你的理论
文章目录一,相关分析方法1,相关系数二,相关性不等于因果关系三,证明因果关系,“控制变量法”?本章主要说明了两个问题: 1,相关性不等于因果关系 2,如何判断两种数据之间是相关性&am…...

pyflink学习笔记(一):table_apisql
具体定义请参考官方文档:https://nightlies.apache.org/flink/flink-docs-release-1.16/zh/docs/dev/table/overview/本文主要针对实际使用中比较常用的api进行整理,大多数例子都是官网,如有歧义可与官方对照。一、 创建 TableEnvironmentTab…...

GCC 编译器套件说明
写在前面: 本文章旨在总结备份、方便以后查询,由于是个人总结,如有不对,欢迎指正;另外,内容大部分来自网络、书籍、和各类手册,如若侵权请告知,马上删帖致歉。 目录GCC 简述GCC 主要…...

IDEA集成Git
1:IDEA集合Git1.1:配置Git忽略文件-IDEA特定文件问题 1:为什么要忽略他们?答: 与项目的实际功能无关, 不参与服务器上部署运行。把它们忽略掉能够屏蔽 IDE 工具之间的差异。问题 2:怎么忽略?1&a…...