公司网站建设站酷,seo推广怎么做视频教程,wordpress全站cdn,wordpress云建站系统对象类型和数据类型
Verilog数据类型 Verilog语言具有针对硬件的变量类型和线网类型。这些类型具有特定的仿真和综合语义#xff0c;表示芯片或系统中的实际连接行为。 #xff08;1#xff09;Verilog的reg、integer和time变量的每一位都有四种逻辑#xff1a;0、1、Z、X…对象类型和数据类型
Verilog数据类型 Verilog语言具有针对硬件的变量类型和线网类型。这些类型具有特定的仿真和综合语义表示芯片或系统中的实际连接行为。 1Verilog的reg、integer和time变量的每一位都有四种逻辑0、1、Z、X 2Verilog的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更抽象的层次如系统级和交易级建模。 1bit1位两态整数 2byte8位两态整数类似于C语言的char 3shortint16位两态整数类似于C语言的short 4int32位两态整数类似于C语言的int 5longint64位两态整数类似于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就和综合前一样。