2.1 内建数据类型
Verilog 1995,两个基本数据类型:
1. 变量:如reg,integer,time,real。
2.线网:如wire。
各有四种取值:0,1,X,Z。
2.1.1 logic
logic:SV中针对Verilog中的reg改进后的数据类型。
与reg相比,可以被连续赋值,门单元驱动,模块驱动。
注意:logic不可以被多个结构驱动,如双向总线需要使用wire类型。
logic的使用:
module logic_data_type(input logic rst_h);
parameter CYCLE=20;
logic q,q_1,d,clk,rst_l;
initial begin
clk=0; //过程赋值
forever # (CYCLE/2) clk=~clk;
end
assign rst_l=~rst_h; //连续赋值
not n1(q_1,q); //门驱动
my_dff d1(q,d,clk,rst_l); //模块驱动
endmodule
2.1.2 双状态数据类型
双状态数据类型的引入,有利于提高仿真器的性能并减少内存的使用量。
双状态数据类型如下:
bit: 单比特无符号。
byte:8比特有符号整数。
shortint:16比特有符号整数。
int:32比特有符号整数。
longint:64比特有符号整数。
real:双精度浮点数。
对四状态值的检查:使用$isunknown,可以在表达式任意位出现X或Z时返回1。
2.2 定宽数组
2.2.1 定宽数组的声明和初始化
int lo_hi[0:15];
int c_style[16];
数组元素的缺省值:四状态返回X,双状态返回0。
线网无驱动时输出Z。
2.2.2 常量数组
使用常量数组初始化一个数组:
int ascend[4]='{0,1,2,3};
int descend[5];
descend='{4,3,2,1,0};
descend[0:2]='{5,6,7};
ascend='{4{8}};
descend='{9,8,default:1}; //{9,8,1,1,1}
2.2.3 for foreach