除了 Marty 的优秀答案之外,SystemVerilog 规范还提供了byte
数据类型。下面声明一个 4x8 位变量(4 个字节),为每个字节分配一个值,然后显示所有值:
module tb;
byte b [4];
initial begin
foreach (b[i]) b[i] = 1 << i;
foreach (b[i]) $display("Address = %0d, Data = %b", i, b[i]);
$finish;
end
endmodule
这打印出来:
Address = 0, Data = 00000001
Address = 1, Data = 00000010
Address = 2, Data = 00000100
Address = 3, Data = 00001000
这在概念上类似于 Marty 的reg [7:0] a [0:3];
. 但是,byte
它是 2 状态数据类型(0 和 1),而是reg
4 状态 (01xz)。使用byte
还需要您的工具链(模拟器、合成器等)支持此 SystemVerilog 语法。还要注意更紧凑的foreach (b[i])
循环语法。
SystemVerilog 规范支持多种多维数组类型。LRM 可以比我更好地解释它们;请参阅IEEE Std 1800-2005第 5 章。