数据类型
SystemVerilog新引进数据类型的优点:
双状态数据类型:更好的性能,更低的内存消耗。
队列、动态和关联数组:减少内存消耗、自带搜索和分类功能。
类和结构:支持抽象的数据结构。
联合和合并结构:允许对同一数据有多种试图。
字符串:支持内建的字符序列。
枚举类型:方便代码编写,增加可读性。
Verilog数据类型
变量:4种取值:0,1,X,Z;可以是单比特或多比特无符号数(reg),32比特有符号数(integer),64比特无符号数(time)或浮点数(real),若干变量可以放到定宽数组中,所有存储都是静态的,意味着所有变量在仿真过程中都是存活的,子程序不能通过堆栈来保存形式参数和局部变量。
线网:用来连接设计中的不同部分。
SystemVerilog数据类型
逻辑类型 Logic
Logic除了能作为变量之外,还能被连续赋值、门单元和模块所驱动。任何使用“线网”的地方都能使用logic,但logic不能有多个结构性的驱动, 双向总线时应使用wire。
示例如下:
module logic_data_type(input logic rst_h);
parameter CYCLE = 20;
logic q,q_l,d,clk,rst_l;
initial beign
clk = 0;
forever #(CYCLE/2) clk = ~clk;//原reg类型
end
assign rst_l = ~rst_h; //原wire类型
not n1(q_l,q);
mt_dff d1(q,d,clk,rst_l);
endmodule
注:由于logic只能有一个驱动,所以可以用来查找网单中的漏洞,将reg和wire声明成logic类型, 如果存在多个驱动,编译时则会出错。
双状态数据类型
双状态的数据类型有利于提高仿真器的性能并减少内存的使用量。
常见的数据类型介绍:
bit b; //双状态,单比特;
bit [31:0] b32; //双状态,32比特无符号整数;
int unsigned ui; //双状态,32比特无符号整数;
int i; //双状态,32比特有符号整数;
byte b8; //双状态,8比特有符号整数;
shortint s; //双状态,16比特有符号整数;
longint l; //双状态,64比特有符号整数;
integer i4 //四状态,32比特有符号整数;
time t; //四状态,64比特无符号整数;
real r; //双状态,双精度浮点数;
在进行随机化时,带符号变量可能会造成意想不到的结果,使用时要注意!
把双状态变量连接到被测设计时,尤其是被测设计的输出时,务必要小心。如果被测设计试图产生X或者Z,这些值会被转化为双状态值,而测试代码可能永远都察觉不了。使用($isunknown)操作符,可以在表达式的任意位置出现X或Z时返回1。