当前位置: 首页 > 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/ #…...

3步解锁CrossOver游戏兼容性:Mac游戏优化完整方案

3步解锁CrossOver游戏兼容性&#xff1a;Mac游戏优化完整方案 【免费下载链接】CXPatcher A patcher to upgrade Crossover dependencies and improve compatibility 项目地址: https://gitcode.com/gh_mirrors/cx/CXPatcher 还在为Mac上运行Windows游戏时的卡顿和兼容性…...

超越基础配置:用OOMMF脚本场(Script Fields)和第三方扩展玩转复杂磁结构建模

超越基础配置&#xff1a;用OOMMF脚本场与第三方扩展构建复杂磁结构模型 微磁模拟已成为自旋电子学研究中不可或缺的工具&#xff0c;而OOMMF作为开源微磁模拟平台&#xff0c;其真正的潜力往往被基础教程所掩盖。当研究者需要模拟斯格明子、磁畴壁器件或复杂异质结构时&#x…...

2025届学术党必备的十大AI论文助手实际效果

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 随着人工智能技术迅猛发展&#xff0c;“一键生成论文”成为了学术写作领域中重要工具&#…...

5个核心技巧:用Pixel-Composer节点式编辑打造专业像素艺术特效

5个核心技巧&#xff1a;用Pixel-Composer节点式编辑打造专业像素艺术特效 【免费下载链接】Pixel-Composer Node base VFX editor for pixel art. 项目地址: https://gitcode.com/gh_mirrors/pi/Pixel-Composer Pixel-Composer是一款革命性的节点式像素艺术视觉特效编辑…...

FPGA高速通信实战:手把手教你用Vivado搭建Aurora 8B/10B IP核(附完整源码)

FPGA高速通信实战&#xff1a;从零构建Aurora 8B/10B全功能链路 在当今数据爆炸的时代&#xff0c;高速串行通信已成为FPGA设计中的核心需求。Xilinx的Aurora 8B/10B协议凭借其轻量级、低延迟和高带宽特性&#xff0c;成为芯片间、板卡间通信的理想选择。本文将带您从零开始&am…...

如何利用 Provide 注入 API 实例?解决组件库依赖全局接口痛点

Provide/Inject 是 Vue 推荐的依赖注入方案&#xff0c;用于将封装好的 API 实例透传至深层子组件&#xff0c;避免硬编码和 props 层层传递&#xff0c;提升可测试性、可配置性与多环境适配能力。在 Vue 组件库开发中&#xff0c;避免硬编码 API 调用&#xff08;如直接 impor…...

终极指南:如何在Windows上实现Mac风格的三指拖拽功能

终极指南&#xff1a;如何在Windows上实现Mac风格的三指拖拽功能 【免费下载链接】ThreeFingersDragOnWindows Enables macOS-style three-finger dragging functionality on Windows Precision touchpads. 项目地址: https://gitcode.com/gh_mirrors/th/ThreeFingersDragOnW…...

7.css部署指南:从开发到生产的完整工作流程

7.css部署指南&#xff1a;从开发到生产的完整工作流程 【免费下载链接】7.css A JS-independent, tree-shakeable CSS framework for building faithful recreations of the Windows 7 UI. 项目地址: https://gitcode.com/gh_mirrors/7c/7.css 7.css是一个独立于JavaSc…...

3步掌握AudioSep音频分离:用自然语言精准提取任何声音

3步掌握AudioSep音频分离&#xff1a;用自然语言精准提取任何声音 【免费下载链接】AudioSep Official implementation of "Separate Anything You Describe" 项目地址: https://gitcode.com/gh_mirrors/au/AudioSep AudioSep是一款革命性的音频分离工具&…...

吊打大模型幻觉!保姆级RAG原理+极简实战代码,新手一秒看懂

吊打大模型幻觉&#xff01;保姆级RAG原理极简实战代码&#xff0c;新手一秒看懂 前言&#xff1a;拒绝晦涩干货&#xff0c;通俗讲透RAG 很多小伙伴初学大模型的时候&#xff0c;都会遇到一个让人崩溃的问题&#xff1a;AI瞎编乱造&#xff01; 问它最新技术&#xff0c;它一问…...