简介:SystemVerilog引进了一些新的数据类型,具有以下的优点:(1)双状态数据类型,更好的性能,更低的内存消耗;(2)队列、动态和关联数组,减少内存消耗,自带搜索和分类功能。(3)类和结构:支持抽象数据结构。(4)联合和合并结构:允许对同一数据有多种视图。(5)字符串:支持内建的字符序列。(6)枚举类型:方便代码编写,增加可读性。
1.1内建数据类型
Verilog-1995有两种基本数据类型:变量和线网。变量可以是reg,integer,time与real。其中integer是32比特的有符号数。所有的存储都是静态的,意味着所有变量在整个仿真过程中都是存活的,子程序不能通过堆栈来保存形式参数和局部变量。Verilog-2001允许使用者在静态和动态存储之间切换,例如堆栈。
1.1.1逻辑类型(logic)
SystemVerilog对经典的reg数据类型进行改进,使得它除了作为一个变量以外,还可以被连续赋值,门单元和模块所驱动,命名为logic。任何使用线网的地方都可以使用logic类型,但是要求logic类型不能有多个结构性驱动,例如双向总线,必须使用wire类型。
module logic_data_type(input logic rst_h);
parameter CYCLE = 20;
logic q,q_l,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(q,d,clk,rst_l);
end
endmodule
1.1.2双状态数据类型
SystemVerilog引入的双状态数据类型有利于提高仿真器的性能并减少内存的使用量。最简单的双状态数据类型是bit,它是无符号的。双状态数据类型:bit,int,byte,shortint,longint,real。四状态数据类型:integer,time。无符号数据类型:bit,time。有符号数据类型:int,byte,int,integer。可以使用unsigned或者signed改变数据的符号类型。
注意:在把双状态变量连接到被测设计时,尤其时被测设计的输出时务必要小心,如果被测设计试图产生X或Z,这些值会被转换为0或1.使用$isunknown操作符,可以在表达式任意位出现X或Z时返回1.
if ($isunknown(iport) == 1) begin
$display("@%0t:4-state value detected on iport %b", $time, iport);
end