SystemVerilog -- 2.1 Data Types ~ New Data types
SystemVerilog logic and bit
在上一篇文章
中,概述了主要数据类型。在本会话中,我们将研究 4-state 和 2-state 变量以及两种名为logic
和bit
的新数据类型。
4-state data types
除了 0 和 1 之外,还可以具有未知(X)和高阻态(Z)值的类型称为 4 态类型。请注意,只能在过程快中驱动,例如,数据类型只能在语句中驱动。SystemVerilog 引入了一种新的 4-state 数据类型,称为可以在过程快和连续语句中驱动。但是,具有多个驱动程序的信号需要声明为 net-type,以便 SystemVerilog 可以解析最终值。reg
always
initial
wire
assign
logic
assign
wire
logic
module tb;
logic [3:0] my_data; // Declare a 4-bit logic type variable
logic en; // Declare a 1-bit logic type variable
initial begin
$display ("my_data=0x%0h en=%0b", my_data, en); // Default value of logic type is X
my_data = 4'hB;
$display ("my_data=0x%0h en=%0b", my_data, en);
#1;
$display ("my_data=0x%0h en=%0b", my_data, en);
end
assign en = my_data[0]; // logic datatype can also be driven via assign statements
endmodule
模拟日志
ncsim> run
my_data=0xx en=x
my_data=0xb en=x
my_data=0xb en=x
ncsim: *W,RNQUTE: Simulation is complete.
2-state data types
在典型的验证tb中,在许多情况下,我们实际上并不需要所有四个值(0、1、x、z),例如,在使用指定数据包长度的标头对网络数据包进行建模时。长度通常是一个数字,但不是 X 和 Z。SystemVerilog 添加了许多新的 2-state数据类型,这些数据类型只能存储且值为 0 或 1。这将有助于加快仿真速度,占用更少的内存,并且在某些设计风格中是首选。
当 4-state 值转换为 2-state 值时,任何未知或高阻抗位都应该转换为0.
最重要的 2-state 数据类型是tb中最常用的数据类型。类型的变量可以是 0 或 1,表示单个位。应提供从 MSB 到 LSB 的范围,使其表示和存储多各位bit
。
bit
module tb;
bit var_a;
bit [3:0] var_b;
logic [3:0] x_val; // declare a 4 bit varible of type "logic"
initial begin
$display ("Initial value var_a=%0b var_b=0x%0h", var_a, var_b);
var_a = 1;
var_b = 4'hF;
$display ("New values var_a=%0b var_b=0x%0h", var_a, var_b);
var_b = 16'h481a;
$display ("Truncated value: var_b=0x%0h", var_b);
var_b = 4'b01zx; // X and Z get converted to 0
$display ("var_b = %b", var_b);
end
endmodule
模拟日志
ncsim> run
Initial value var_a=0 var_b=0x0
New values var_a=1 var_b=0xf
Truncated value: var_b=0xa
var_b = 0100
ncsim: *W,RNQUTE: Simulation is complete.