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。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/115170.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue elementUI form组件动态添加el-form-item并且动态添加rules必填项校验方法

vue elementUI form组件动态添加el-form-item并且动态添加rules必填项校验方法 先看一下效果图&#xff08;想在表单里动态的增删 form-item&#xff0c;然后添加rules&#xff0c;校验其必填项&#xff1b; &#xff09;: html部分 <div v-for"(item, index) in …

设计模式-工厂方法(Factory Method)

1.定义 工厂模式提供了一种将对象的实例化过程封装在工厂类中的方式。通过使用工厂模式&#xff0c;可以将对象的创建与使用代码分离&#xff0c;提供一种统一的接口来创建不同类型的对象。在工厂模式中&#xff0c;我们在创建对象时不会对客户端暴露创建逻辑&#xff0c; 定义…

知识分享|分段函数线性化及matlab测试

目录 1 使用0-1变量将分段函数转换为线性约束 2 连续函数采用分段线性化示例 3 matlab程序测试 4 matlab测试结果说明 5 分段线性化应用 1 使用0-1变量将分段函数转换为线性约束 2 连续函数采用分段线性化示例 3 matlab程序测试 clc;clear all; gn10;tn1; x_pfsdpvar(1, t…

用PHP组合数组,生成笛卡尔积。写几个例子

#创作灵感# [红色&#xff0c;白色&#xff0c;黄色&#xff0c;蓝色] [128G,256G,512G] [国行,港版,美版&#xff0c;韩版] 用PHP组合数组&#xff0c;生成笛卡尔积。写几个例子 你可以使用嵌套的循环来生成这些数组的笛卡尔积。以下是一些示例代码&#xff1a; // 示例…

【机械臂视觉抓取从理论到实战】

首先声明一下,此项目是参考B站哈萨克斯坦UP的【机械臂视觉抓取从理论到实战】 此内容为他研究生生涯的阶段性成果展示和技术分享,所有数据和代码均开源。所以鹏鹏我特此来复现一下,我采用的硬件与之有所不同,UP主使用UR5,我实验室采用的是UR3,下面列出相关材料 UR3CB3.12…

自然语言处理---经典序列模型

1 HMM模型介绍 1.1 HMM模型的输入和输出 HMM(Hidden Markov Model), 中文称作隐含马尔科夫模型, 因俄国数学家马尔可夫而得名. 它一般以文本序列数据为输入, 以该序列对应的隐含序列为输出. 什么是隐含序列: * 序列数据中每个单元包含的隐性信息, 这些隐性信息之间也存在一定…

Spring Boot自动配置原理揭秘

自动配置原理 概述原理Spring Boot Starterspring.factories 文件ConditionalOnX 注解配置 Bean配置属性 源码剖析 主页传送门&#xff1a;&#x1f4c0; 传送 概述 Spring Boot 是一个用于创建独立的、生产级别的 Spring 应用程序的框架。它极大地简化了 Spring 应用程序的开…

【C++进阶(九)】C++多态深度剖析

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:C从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习C   &#x1f51d;&#x1f51d; 多态 1. 前言2. 多态的概念以及定义3. 多态的实…

Stable Diffusion WebUI扩展adetailer安装及功能介绍

ADetailer是Stable Diffusion WebUI的一个扩展,类似于检测细节器。 目录 安装地址 如何安装 1. Windows系统 (1)手动安装 (2)一体机

MyBatis篇---第三篇

系列文章目录 文章目录 系列文章目录一、如何执行批量插入?二、Xml映射文件中,除了常见的select|insert|updae|delete标签之外,还有哪些标签?三、MyBatis实现一对一有几种方式?具体怎么操作的?一、如何执行批量插入? 首先,创建一个简单的insert语句: <insert id=”…

Django设置跨域

1, 安装 pip install django-cors-headers 2, 添加应用 INSTALLED_APPS (...corsheaders,... ) 3, 中间层设置 MIDDLEWARE [corsheaders.middleware.CorsMiddleware,... ] 4, 添加白名单 # CORS CORS_ORIGIN_WHITELIST (127.0.0.1:8080,localhost:8080,www.meiduo.si…

架构案例分析重点

架构案例分析重点 信息系统架构架构图 层次式架构&#xff08;可能考点&#xff09;表现层框架设计中间层架构设计数据访问层数据访问层工厂模式的设计&#xff08;一个考点&#xff09; 物联网三层 云原生架构面向服务架构(SOA)SOA设计模式 嵌入式系统架构鸿蒙操作系统&#x…

数据要素安全流通:挑战与解决方案

文章目录 数据要素安全流通&#xff1a;挑战与解决方案一、引言二、数据要素安全流通的挑战数据泄露风险数据隐私保护数据跨境流动监管 三、解决方案加强数据安全防护措施实施数据隐私保护技术建立合规的数据跨境流动机制 四、数据安全流通的未来趋势01 数据价值与产业崛起02 多…

如何查看SSL证书是OV还是DV?

网站的安全性与信任度对于用户来说至关重要&#xff0c;它决定着用户是否继续浏览以及是否与您开展业务。SSL证书则是确保网站能够通过HTTPS加密安全传输数据的基础&#xff0c;可确保网站的安全可信。部署了SSL证书的网站打开后&#xff0c;在浏览器地址栏处会有安全锁标志。而…

【tg】8: Manager的主要功能

Manager 提供的是media thread 说明media thread 是主线程&#xff0c; 而 mediamgr里是worker threadnetworkmgr是network thread了。 Manager 的功能重要&#xff0c;但是特别短 G:\CDN\P2P-DEV\tdesktop-offical\Telegram\ThirdParty\tgcalls\tgcalls\Manager.cpp class…

vue3传递prop踩坑

这是官方文档中的介绍&#xff1a; Vue3中文官网 我们在组件中定义props时推荐使用驼峰命名&#xff0c;但是在父组件中传递数据时要使用kebab-case形式 这是我写的loading组件中定义的几个porps 我在使用时是这样传入的 但是打印出来的值是&#xff1a; 可以看到这里的ou…

Merge Joins(PostgreSQL 14 Internals翻译版)

合并连接处理按连接键排序的数据集&#xff0c;并返回以类似方式排序的结果。输入集可以在索引扫描后预先排序;否则&#xff0c;执行者必须在实际合并开始之前对它们进行排序。 归并排序集 让我们看一个合并连接的例子;它在执行计划中由Merge Join节点表示&#xff1a; 优化器…

uni-app:多种方法写入图片路径

一、文件在前端文件夹中 1、相对路径引用 从当前文件所在位置开始寻找图片文件的路径。../../ 表示返回两级目录&#xff0c;即从当前文件所在的 wind.vue 所在的位置开始向上回退两级。接着&#xff0c;进入 static 目录&#xff0c;再进入 look 目录&#xff0c;最后定位到 …

uview1.0部分机型u-input组件禁用后无法触发click事件

最近&#xff0c;线上的一个 App 收到用户反馈&#xff0c;输入框禁用状态下点击无法拉起模态框。找了一下身边可用机型进行了测试&#xff0c;起初所有机型都没有复现这个问题&#xff0c;突然有一天 Redmi K30S Ultra 出现了异常&#xff0c;点击输入框无法触发点击事件&…

Oracle 数据库相关操作记录

1 数据库操作&#xff1a; 1.1 --调用存储过程&#xff1a; DECLARE P_DATA_DATE VARCHAR2(32767);--定义输入参数 P_O_RESULT VARCHAR2(32767); BEGIN P_DATA_DATE : 20220320;--输入日期 P_O_RESULT : NULL; TPS.PR_TP_RBC34_TMP ( P_DATA_DATE, P_O_RESULT );--输…