当前位置: 首页 > news >正文

SystemVerilog(2)——数据类型

一、概述

        和Verilog相比,SV提供了很多改进的数据结构。它们具有如下的优点:

  1. 双状态数据类型:更好的性能,更低的内存消耗
  2. 队列、动态和关联数组:减少内存消耗,自带搜索和分类功能
  3. 类和结构:支持抽象数据结构
  4. 联合和合并结构:允许对同一数据有多种视图(view)
  5. 字符串:支持内建的字符序列
  6. 枚举类型:方便代码编写,增加可读性

二、数据类型

        Verilog-1995有两种基本的数据类型:变量和线网(net)。它们各自都可以有四种取值:0、1、X、Z。

        RTL代码使用变量来存放组合和时序值。变量可以是单比特或多比特的无符号数(reg[7:0]m),32比特的有符号数(integer),64比特的无符号数(time)或浮点数(real)。若干变量可以被一起存放到定宽数组里。所有的存储都是静态的,意味着所有的变量在整个仿真过程当中都是存活的,子程序(routine)不能通过堆栈来保存形式参数和局部变量。线网可以用来连接设计当中的不同部分,例如门和模块实例。尽管线网有很多种用法,但是大多数设计者还是使用标量或矢量wire来连接各个设计模块的端口。

        SV增加了很多新的数据类型,以便同时帮助设计和验证工程师。我们直接进行一个简单的总结,当我们谈到SV中的数据类型的时候,我们一般进行3个维度的区分:

  • 变量(variable) 或者 线网(wire)
  • 逻辑类型(logic) 或者 双状态数据类型(bit等)
  • 有符号 或者 无符号

2.1 变量 or 线网

        我们知道在verilog中也有线网(wire)和变量(reg)的区分,并且在verilog中wire类型只能通过连续赋值(assign)进行驱动,reg类型只能通过过程赋值(always/inital)进行驱动。

        与verilog像类似,SV中也把线网类型描述成wire,并且也是只能够过连续赋值进行驱动,但是对于变量类型的描述有所不同,SV中对于经典的reg类型进行了改动,改成立variable,缩写为var。其最大的不同就在于它除了作为一个变量之外,还可以被连续赋值,门单元和模块所驱动(最简单的理解:reg不能用assign,但是var可以用assign赋值)。

        到这里可能就会产生一个疑问,既然var这么万能,那我们还保留wire干什么,反正都可以assign,wire似乎显得多此一举了。但是有要求是var类型不可以有多个结构性驱动,例如在对双向总线模型(inout)进行建模的时候。此时,需要使用wire类型,SV会对多个数据来源进行解析并确定最终值。

        默认为var类型(例如只写一个logic(下面马上说),含义就是var logic)。

2.2 逻辑 或者 双状态数据

        verilog中所有的数据有4种可能的取值类型:0,1,X,Z。其中0,1不用过多的解释,X表示未知,Z表示高阻,也可以理解为没有驱动。但是在实际的硬件上是不存在所谓的X的,对于硬件,其并不存在X,只是我们无法获知其到底是什么状态,所以引入了X来对硬件进行建模。

        在SV中,数据类型被分成了两种,逻辑logic类型和二状态数据类型。对于logic来说,其可能的取值与verilog一致,也是上述的4种,但是为了更有利提高仿真器的性能并减少内存的使用量,SV引入了双状态数据类型,最简单的双状态数据类型是bit,它是无符号的,另外四种带符号的双状态数据类型是byte,shortint,int和longint。

2.3 有符号 和 无符号

         没啥好说的:

三、补充说明 

  1. 四值逻辑变量例如reg、logic或者integer等,在仿真开始时的初值为X
  2. 二值逻辑变量例如bit等,在仿真开始时的初值为0
  3. 如果四值逻辑与二值逻辑的数据类型之间发生的默认转换,那么Z和X值将转换为0。
  4. 二值逻辑也可以用来实现可综合电路,只是二值逻辑由于没有X 和Z值,因此可能会出现仿真行为同综合电路结果不一致的情况。
  5. SV添加void类型来表示空类型,经常用在函数定义时表示不会返回数值,同C语言的void使用方法
  6. SV添加shortreal表示32位单精度浮点类型,同C语言的float;而Verilog的real类型表示双精度浮点类型,同C语言的double。

相关文章:

SystemVerilog(2)——数据类型

一、概述 和Verilog相比,SV提供了很多改进的数据结构。它们具有如下的优点: 双状态数据类型:更好的性能,更低的内存消耗队列、动态和关联数组:减少内存消耗,自带搜索和分类功能类和结构:支持抽…...

记一次Postgresql从堆叠注入到RCE

本次研究过程来自一次某cms的代码审计实战,整个环境部署的相对较好,postgresql、web权限都有单独的用户管理,web目录不可写、服务器不能出网等限制。不过比较幸运的是所有的数据操作都是用同一个superuser权限的postgresql用户来执行的。 限…...

通用FIFO设计深度8宽度64,verilog仿真,源码和视频

名称:通用FIFO设计深度8宽度64,verilog仿真 软件:Quartus 语言:verilog 本代码为FIFO通用代码,其他深度和位宽可简单修改以下参数得到 reg [63:0] ram [7:0];//RAM。深度8,宽度64 代码功能&#xff1a…...

尝试进行表格处理

꧂ input输入多行文本,3个回车结束꧁ 用input输入如果你想要使用 input 输入多行文本,可以在输入时按照以下方式来终止输入: text while True:line input("请输入文本(按回车继续,按3个回车结束)…...

VueRouter 源码解析

重要函数思维导图 路由注册 在开始之前,推荐大家 clone 一份源码对照着看。因为篇幅较长,函数间的跳转也很多。 使用路由之前,需要调用 Vue.use(VueRouter),这是因为让插件可以使用 Vue export function initUse(Vue: GlobalAP…...

云原生之Docker

docker 初识Docker什么是DockerDocker与虚拟机Docker相关术语及架构镜像和容器DockerHubDocker架构 Docker命令镜像操作命令容器操作命令数据卷命令 自定义镜像镜像结构Dockerfile DockerCompose安装常用命令 初识Docker 什么是Docker docker是一个快速交付应用,运…...

List简介

概念: 数据结构列表(List)是Java中的一种线性数据结构,用于存储有序的元素集合。它允许重复元素,并且每个元素都有一个对应的索引来访问和操作。列表可以动态增长或缩小,并且支持添加、删除和修改操作。 …...

【ArcGIS Pro二次开发】(71):PPT文件操作方法汇总

以下操作都要用到【Microsoft.Office.Interop.PowerPoint】,确保安装并引用。 1、打开PPT文件 // 打开PPT Microsoft.Office.Interop.PowerPoint.Application pptApp new Microsoft.Office.Interop.PowerPoint.Application();Presentation ppt pptApp.Presentati…...

CloudCompare 二次开发(18)——法线空间采样

目录 一、概述二、代码集成三、结果展示一、概述 使用CloudCompare与PCL的混合编程实现点云法线空间采样。法线空间采样的具体计算原理见:PCL 法线空间采样。 二、代码集成 1、mainwindow.h文件public中添加: void doActionNormalSpaceSample(); // 法线空间采样2、mainwi…...

RFCN目标检测算法

...

【学习草稿】bert文本分类

https://github.com/google-research/bert https://github.com/CyberZHG/keras-bert 在 BERT 中,每个单词的嵌入向量由三部分组成: Token 嵌入向量:该向量是 WordPiece 分词算法得到的子单词 ID 对应的嵌入向量。 Segment 嵌入向量&#x…...

华为OD 食堂供餐(100分)【java】A卷+B卷

华为OD统一考试A卷+B卷 新题库说明 你收到的链接上面会标注A卷还是B卷。目前大部分收到的都是B卷。 B卷对应20022部分考题以及新出的题目,A卷对应的是新出的题目。 我将持续更新最新题目 获取更多免费题目可前往夸克网盘下载,请点击以下链接进入: 我用夸克网盘分享了「华为O…...

Hadoop3教程(二十七):(生产调优篇)HDFS读写压测

文章目录 (146)HDFS压测环境准备(147)HDFS读写压测写压测读压测 参考文献 (146)HDFS压测环境准备 对开发人员来讲,压测这个技能很重要。 假设你刚搭建好一个集群,就可以直接投入生…...

【MyBatis进阶】mybatis-config.xml分析以及try-catch新用法

目录 尝试在mybatis项目中书写增删改查 遇见问题:使用mybaties向数据库中插入数据,idea显示插入成功,但是数据库中并没有数据变化? MyBatis核心配置文件剖析 细节剖析: try-catch新用法 截至目前我的项目存在的问题&#xf…...

机器学习终极指南:统计和统计建模03/3 — 第 -3 部分

系列上文:机器学习终极指南:特征工程(02/2) — 第 -2 部分 一、说明 在终极机器学习指南的第三部分中,我们将了解统计建模的基础知识以及如何在 Python 中实现它们,Python 是一种广泛用于数据分析和科学计…...

php获取农历日期节日

代码地址&#xff1a;php获取农历日期节日-遇见你与你分享 <?php $c new DayService(); $today$c->convertSolarToLunar(date(Y),date(m),date(d)); $time "农历".$today[1].$today[2]."日";class DayService {var $MIN_YEAR 1891;var $MAX_YEAR …...

主机重启后k8s kubelet无法自动启动问题解决梳理

1.问题描述 OS Version:CentOS Linux release 7.9.2009 (Core) K8S Version:Kubernetes v1.20.4 K8S安装配置完成后,重启服务器发现,kubelet没有正常启动(systemctl status kubelet) 命令: systemctl status kubelet [root@centos79-3 ~]# systemctl status kubelet ●…...

Hadoop面试题(2)

1.什么是数据倾斜&#xff1f;如何处理数据倾斜&#xff1f; 数据倾斜指的是在分布式计算中&#xff0c;数据在某些节点上不均匀地分布&#xff0c;导致某些节点的负载过重&#xff0c;影响整体计算性能。 处理数据倾斜的方法主要包括以下几种&#xff1a; 增加分区数量&…...

[ Windows-Nginx ]Windows服务器,Tomcat容器部署项目,整合Nginx

一、官网下载Nginx http://nginx.org/en/download.html 稳定版&#xff1a;windows的stable版本 注意&#xff1a;Nginx安装包不要放在中文目录下 二、conf目录下&#xff0c;修改nginx.conf文件 修改Nginx服务端口&#xff1a; 默认端口为80&#xff0c;即外界访问的入口…...

手搭手zabbix5.0监控redis7

Centos7安装配置Redis7 安装redis #安装gcc yum -y install gcc gcc-c #安装net-tools yum -y install net-tools #官网https://redis.io/ cd /opt/ wget http://download.redis.io/releases/redis-7.0.4.tar.gz 解压至/opt/目录下 tar -zxvf redis-7.0.4.tar.gz -C /opt/ #…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

JVM垃圾回收机制全解析

Java虚拟机&#xff08;JVM&#xff09;中的垃圾收集器&#xff08;Garbage Collector&#xff0c;简称GC&#xff09;是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象&#xff0c;从而释放内存空间&#xff0c;避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码

目录 一、&#x1f468;‍&#x1f393;网站题目 二、✍️网站描述 三、&#x1f4da;网站介绍 四、&#x1f310;网站效果 五、&#x1fa93; 代码实现 &#x1f9f1;HTML 六、&#x1f947; 如何让学习不再盲目 七、&#x1f381;更多干货 一、&#x1f468;‍&#x1f…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit&#xff08;传感器服务&#xff09;# 前言 在运动类应用中&#xff0c;运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据&#xff0c;如配速、距离、卡路里消耗等&#xff0c;用户可以更清晰…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中&#xff0c;附加包含目录、附加库目录和附加依赖项是三个至关重要的设置&#xff0c;它们相互配合&#xff0c;确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中&#xff0c;这些概念容易让人混淆&#xff0c;但深入理解它们的作用和联…...

Razor编程中@Html的方法使用大全

文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...