对象类型和数据类型

对象类型和数据类型

Verilog数据类型
Verilog语言具有针对硬件的变量类型和线网类型。这些类型具有特定的仿真和综合语义,表示芯片或系统中的实际连接行为。
(1)Verilog的reg、integer和time变量的每一位都有四种逻辑:0、1、Z、X
(2)Verilog的wire、wor、wand和其他线网(net)类型的每一位有120种值及专用线逻辑决断函数。

SystemVerilog的数据类型
数据声明具有类型和数据类型
“类型”定义了数据是线网还是变量
类型指示信号是线网还是变量
“数据类型”定义了数据是两态还是四态的
数据类型指示线网或变量的值系统:对两态数据类型是0或1,对四态数据类型是0、1、Z、X。SystemVerilog关键字logic定义对象是四态数据类型。在SystemVerilog-2005标准中,变量类型可是两态的也可以是四态的,而线网类型只能是四态数据类型。

SystemVerilog四态变量
SystemVerilog使用logic关键字来描述通用的针对硬件的数据类型

logic resetN;//1位4态变量
logic[63:0] data; //64位宽变量
logic [0:7] array [0:255]; //8位数组变量

关键字logic实际上并不是一个变量类型,它是一个数据类型,表示信号具有四态值。但是,当logic关键字单独使用时,则暗示这是一个变量。四态变量可以使用一对关键字var logic进行显示声明

var logic [63:0] addr; //一位64位宽变量

线网也可以用logic关键字显示声明为四态数据类型

wire logic[63:0] addr;//一位64位宽线网

SystemVerilog两态变量
SystemVerilog增加了几个新的两态类型,更适合于比RTL更抽象的层次,如系统级和交易级建模。
(1)bit:1位两态整数
(2)byte:8位两态整数,类似于C语言的char
(3)shortint:16位两态整数,类似于C语言的short
(4)int:32位两态整数,类似于C语言的int
(5)longint:64位两态整数,类似于C语言的longlong

使用两态bit类型
抽象建模不需要四态值
reg和logic数据类型的 变量用来在过程中对硬件进行建模。这些数据类型储存四态逻辑值:0、1、Z、X。可综合RTL硬件模型中,更愿意使用四态类型。Z用于表示连接或三态逻辑。X值有助于检测和隔离设计错误。更高级建模,如系统级和交易级中,几乎不需要逻辑值Z和X。
两态bit类型可以代替reg或logic类型
SystemVerilog允许变量声明为bit数据类型。从语法上来说,任何使用reg和logic的地方都可以使用bit数据类型。但是,从语义上讲,bit数据类型是不同的,它只要两态值:0和1。bit数据类型对更高抽象的硬件建模非常有用。

bit restN; //1位两态变量
bit [63:0] data;//64位宽的两态变量
bit [0:7] array [0:255]; //8位两态数组变量

关键字bit实际上并不是一种变量类型,而是一种数据类型,表示变量具有两态值。但是,当bit变量单独使用时,就暗示这是一个变量。一个两态变量可以用关键字var bit显示声明

var bit [63:0] addr;//64位宽的变量

两态仿真语义
四态类型从逻辑值X开始仿真
仿真开始时,四态变量,如reg、logic、和integer的所有位缺省为逻辑值X。这些变量认为没有被初始化,因此直到赋给变量第一个值之前它们的值都是不确定的。四态变量可以通过内嵌初始化定义开始仿真时的值,但这是不可综合的。

两态类型从逻辑值0开始仿真
所有的两态数据类型从逻辑0开始仿真。由于两态类型不存储X值,它们不能描述未初始化状态。这也是更喜欢用四态类型描述可综合RTL模型的原因之一

两天类型X和Z值会被指定为0
给一个两态变量赋值是合法的。例如,模块输入端口的四态值可以赋给模块内的两态bit类型。四态类型任何位的X或Z值赋给两态时对应为会转换为逻辑0

其他抽象类型
void类型代表无储存
SystemVerilog增加了void类型表示无储存。void类型可以用在标签联合体中以及用来定义无返回值的函数
shortreal等效于C中的float
SystemVerilog还增加了类似Verilog的real类型的shortreal变量类型。
shortreal是一个32位单精度浮点数,与C语言的float相同,而Verilog的real是一个双精度变量,与C语言的double相同。real和shortreal类型是不可综合的,但是在硬件抽象建模和测试程序中和有用。

显示及隐式变量和线网类型
SystemVerilog具有线网和变量类型以及两态和四态数据类型
在SystemVerilog术语中,变量和线网是具有两态或四态“数据类型”。四态数据类型用关键字logic表示。两态数据类型用关键字bit表示。当这些四态或两态数据类型没哟显示指定数据类型是变量还是线网时,则推断为隐式变量。

logic [7:0] busA;//推断出一个四态数据类型的变量
bit [31:0] busA;//推断出一个两态数据类型的变量

Verilog关键字integer和time是具有预定义向量宽度的四态数据类型的变量。SystemVerilog关键字int、byte、shortint和longint是具有预定义向量宽度的两态数据类型的变量。
SystemVerilog允许在任何数据类型前选择性的使用var关键字

var logic [7:0] a; //四态8位变量
var bit [31:0] b; //两态32位变量
var int i;//两态32位变量

var关键字(variable的简称)表示对象是一个变量。var关键字并不影响变量的仿真或综合行为。它的用途是使代码能自成文档。这一显示描述方式可以在变量为用户自定义类型时,代码更易读。

typedef enum bit {FALSE,TRUE} bool_t;
var bool_t c;//用户定义类型的变量

还可以用不含显示数据类型的var声明变量。在这种情况下,变量为logic数据类型

var [7:0] d;//四态8位变量

所有的Verilog线网类型(wire、uwire、wand、wor、tri、triand、trior、tri0、tri1、trireg、supply0、supply1)都是隐含为四态逻辑数据类型。

wire [31:0] busB;//声明了一个线网类型,隐含为四态逻辑数据类型

线网可以选择使用线网型和logic数据类型进行声明

wire logic [31:0] busC;

为了避免混淆关键字组合,SystemVerilog不允许reg关键字直接与任何线网型关键字成对使用

wire reg [31:0] busD;//非法的关键字配对

两态类型与四态类型同样综合
综合会忽略两态类型的默认初始值
四态logic类型和两态bit、byte、shorint、int和longint类型都是可综合的。综合编译器对两态和四态类型同样对待。两态类型的使用主要影响仿真。
两态类型从默认逻辑值0开始仿真。综合忽略这一默认初始值,使用两态类型时,综合后的设计不能保证加电后为0,就和综合前一样。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

傻童:CPU

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值