V0 第5节 数据类型

2023-12-10 19:38
文章标签 数据类型 v0

本文主要是介绍V0 第5节 数据类型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. Verilog的数据类型

  • Verilog语言提供两种基本的数据类型, 变量类型variables和线网类型nets,这两种类型都是四值逻辑,即可表示0、1、X和Z值
  • 例如reg,integer和time等变量类型可以用来存储组合逻辑或者时序逻辑的值
  • 例如wire,wor,wand和其它线网类型用来连接硬件模块,以及提供特殊的线网驱动解决方案

1.1 Verilog线网类型

  • 线网用于建模硬件设计中的连接线路,而线网的值由线网驱动器所决定
  • 驱动器可以是门或模块的实例,或者连续赋值的输出

1.2 Verilog变量类型

  • 变量类型保存在initial、always、task和function内赋的值
  • 变量只能用过程赋值来完成
  • 类型是integer或time 的变量一般像有相同数量位数的reg一样运转
  • 在表达式中integer的值作为有符号数处理,而reg或time的值作为无符号数处理
  • 用reg描述逻辑,integer描述循环变量和计算,real在系统模型中使用,time和realtime保存测试装置的仿真时间

2. SV新添加的数据类型

  • Verilog中的变量和线网类型均是四值逻辑
  • SV添加了新的数据类型来帮助设计和验证工程师
  • SV将硬件信号区分为类型数据类型
  • 类型即表示该信号为变量var或者线网类型wire
  • 数据类型则表示该数据是四值逻辑logic或者二值逻辑bit

2.1. 四值逻辑数据类型

  • 在Verilog中,reg经常用来表示存储组合逻辑或者时序逻辑的变量,初学者容易混淆其综合后的硬件单元,实际上,reg并不一定会被综合为register,而它只是用来与线网类型相对,表示存储数据的变量

  • 在SV中,我们可以直接使用logic(数据类型)来实现通用的存储硬件数据
    logic resetN; //1位宽的四值逻辑
    logic [63:0] data; //64位宽的变量
    logic [0:7] array [0:255]; //由8位向量元素构成的数组, 256个8位的数组

  • logic虽然只是表示数据类型,而在声明时,它默认会表示变量类型variable,用户也可以显式声明其类型:
    var logic [63:0] addr; //64位宽的变量类型
    wire logic [63:0] data; //64位完的线网类型

2.2. 二值逻辑数据类型

  • 在RTL级别,X值用来捕捉设计错误,例如寄存器未初始化,Z值用来表示未连接或者三态的设计逻辑,但是在系统级或者事务级,Z和X少被使用
  • 类似于logic类型默认为变量类型,bit类型默认也为变量类型

3.有符号类型和无符号类型

  • logic或者bit构成的向量vector是无符号类型
  • integer、byte、shortint、int、longint为有符号类型
  • 可以在有符号类型后添加 unsigned来表示无符号类型,例如:
    byte有符号类型,表示的数值范围是[-128,127]
    byte unsigned 表示无符号类型,等同于bit[7:0],表示的数值范围是[0,255]
  • 在构建验证驱动组件时,无需关注硬件底层逻辑(X或者Z值),所以可使用二值逻辑实现
  • SV在与C在发生交互时,也可以使用二值逻辑来使得两种语言的函数接口参数类型传输更为简单

4. 仿真行为

  • 四值逻辑变量例如reg、logic或者integer等,在仿真开始时的初值为X
  • 二值逻辑变量例如bit等,在仿真开始时的初值为0
  • 如果四值逻辑与二值逻辑的数据类型之间发生的默认转换,那么Z和X值将转换为0
4-state valueconverts To
00
01
Z0
X0
  • 二值逻辑也可以用来实现可综合电路,只是二值逻辑由于没有X和Z值,因此可能会出现仿真行为同综合电路结果不一致的情况

5. 其它类型

  • SV添加void类型来表示空类型,经常用在函数定义时表示不会返回数值,同C语言的void使用方法
  • SV添加shortreal表示32位单精度浮点类型,同C语言float,而Verilog的real类型表示双精度浮点类型,同C语言的double

这篇关于V0 第5节 数据类型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/478142

相关文章

v0.dev快速开发

探索v0.dev:次世代开发者之利器 今之技艺日新月异,开发者之工具亦随之进步不辍。v0.dev者,新兴之开发者利器也,迅速引起众多开发者之瞩目。本文将引汝探究v0.dev之基本功能与优势,助汝速速上手,提升开发之效率。 何谓v0.dev? v0.dev者,现代化之开发者工具也,旨在简化并加速软件开发之过程。其集多种功能于一体,助开发者高效编写、测试及部署代码。无论汝为前端开发者、后端开发者

C 语言的基本数据类型

C 语言的基本数据类型 注:本文面向 C 语言初学者,如果你是熟手,那就不用看了。 有人问我,char、short、int、long、float、double 等这些关键字到底是什么意思,如果说他们是数据类型的话,那么为啥有这么多数据类型呢? 如果写了一句: int a; 那么执行的时候在内存中会有什么变化呢? 橡皮泥大家都玩过吧,一般你买橡皮泥的时候,店家会赠送一些模板。 上

C语言程序设计(数据类型、运算符与表达式)

一、C的数据类型 C语言提供的数据类型: 二、常量和变量 2.1常量和符号常量 在程序运行过程中,其值不能被改变的量称为常量。 常量区分为不同的类型: 程序中用#define(预处理器指令)命令行定义变量将代表常量,用一个标识符代表一个常量,称为符合常量。 2.2变量 变量代表内存中具有特定属性的一个存储单元,用来存放数据,在程序运行期间,这些值是可以 改变的。 变

Redis地理数据类型GEO

通常要计算两个地理位置的距离不是很方便,这里可以直接通过Redis提供的GEO操作来完成地理位置相关的计算 1)添加地理位置 语法:geoadd key longitude latitude member [longitude latitude member] ...字段说明:key:存放地理位置的集合名称longitude:地理坐标的经度latitude:地理坐标的纬度member:表示这

【JavaScript】基本数据类型与引用数据类型区别(及为什么String、Boolean、Number基本数据类型会有属性和方法?)

基本数据类型   JavaScript基本数据类型包括:undefined、null、number、boolean、string。基本数据类型是按值访问的,就是说我们可以操作保存在变量中的实际的值。 1)基本数据类型的值是不可变的 任何方法都无法改变一个基本类型的值,比如一个字符串: var name = "change";name.substr();//hangconsole.log

【MySQL】MySQL常用的数据类型——表的操作

前言: 🌟🌟本期讲解关于MySQL常用数据类型,表的简单使用,希望能帮到屏幕前的你。 🌈上期博客在这里:http://t.csdnimg.cn/wwaqe 🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-CSDN博客   目录 前言: 📚️1.MySQL常用的数据类型 1.1数值类型 1.2字符串类型 1.3日期类型  📚️2.表的简单操作 2.1创建

c语言(三种语言对比、数据类型及输出、变量存储、内存分配)

数据类型: 变量的输出: c语言不能直接打印数字,字符,只能将他们转化成字符串打印, printf("%d\n", num); %d 是整数占位符,将来由逗号右边的变量的值占据这个位置。(%i和%d是一样的) %f 是浮点数占位符,默认输出小数点后6位,若只想输出小数点后两位:%.2f %c 是字符型数据占位符。

SpinalHDL之数据类型(一)

本文作为SpinalHDL学习笔记第五十四篇,介绍SpinalHDL的Bool数据类型。 SpinalHDL技术交流QQ群: Note: 1.本群是个人技术交流群,不是什么官方答疑群; 2.提问是你的权利,但回答不是别人的义务; 3.可以潜水,不能灌水; 4.请文明交流,做这行的都算高层次人才,希望你有对应的高素质; 5.不强制改名,但希望统一格式:姓名(昵称也行)-公司/学校-

MySQL数据类型和Schema优化(二)

MySQL数据类型和Schema优化 MySQL合适的数据类型日期和时间类型(datetime、timesamp)整数类型实数类型(float\double\decimal)字符串类型(Varchar、Char) Schema设计缓存表和汇总表 MySQL 良好的逻辑设计与物理设计是高性能的基石,应该根据具体业务需求的查询语句来设计schema,这往往需要权衡各种因素。 比如

【R语言数据类型】深入了解 向量、矩阵、数据框、列表

R语言数据类型有向量、矩阵、数据框、列表。下面我们来深入了解下: vector 的划分 R中的vector分为两类,atomic和list,二者的区别在于,前者元素类型必须相同,后者可以不同。前者的代表是向量和矩阵,后者的代表是list和数据框。 创建向量、矩阵、数据框、列表 # atomica <- 1:5b <- letters[1:5]c <- 1:10mat <- matr