数据类型
verilog
1、Verilog语言提供两种基本的数据类型,即变量类型(variables)和线网类型(nets),这两种类型都是四值逻辑,即可表示0、1、X和Z值。
2、例如reg,integer和time等变量类型可以用来存储组合逻辑或者时序逻辑的值。
例如wire,wor,wand和其它线网类型用来连接硬件模块,以及提供特殊的线网逻辑解决方案。
3、Verilog并没有严格区分信号的类型,变量和线网类型均是四值逻辑。
4、reg并不一定会被综合为register,而它只是用原来与线网类型相对,表示存储数据的变量。
5、Verilog语言自身不提供枚举类型,因此为了提供类似于枚举类型可实现的便利,我们不得不采用parameter常量来表示可取的值范围,或者使用`define来定义各个合法值对应的宏名称
system verilog
SV中
1、logic或者bit构成的向量(vector)是无符号类型。
integer、byte、shortint、int、longint为有符号类型。
2、四值逻辑变量例如reg、logic或者integer等,在仿真开始时的初值为X。
二值逻辑变量例如bit等,在仿真开始时的初值为0。
如果四值逻辑与二值逻辑的数据类型之间发生的默认转换,那么Z和X值将转换为0
3、SV添加void类型来表示空类型,经常用在函数定义时表示不会返回数值,同C语言的void使用方法。
SV添加shortreal表示32位单精度浮点类型,同C语言的float;而Verilog的real类型表示双精度浮点类型,同C语言的double。
自定义类型
通过typedef来创建用户自定义类型。
通过enum来创建枚举类型。
通过struct来创建结构体类型。
为了使代码更易读和维护,通常我们对于自定义的类型,都习惯添加“_t”的后缀用来表示它是一个自定义类型(type)。
枚举类型(enum)提供方法来描述抽象变量的合法值范围,其每一个值都需要提供一个用户自定义的名字。
下面的枚举类型RGB可以拥有red、green和blue的三个数值:
enum {red,green,blue} RGB;
默认的枚举类型是int,即32位的二值逻辑数据类型。
为了能够更准确地描述硬件,SV允许指明枚举类型的数据类型,例如:
enum bit {TRUE, FALSE} Boolean;
enum logic [1:0] {WAITE, LOAD, READY} state;
如果一个枚举类型数值被赋值,那么所赋的值必须符合其数据类型。
enum logic [2:0] {WAITE = 3’b001,LOAD = 3’b010,READY = 3’b100} state;
如果枚举类型是四值逻辑数据类型,那么对枚举值赋为X或者Z也是合法的。
enum logic {ON=1’b1, OFF=1’bz} out;