Arrays
数组是相同的类型变量的集合,可以使用索引进行访问。
在C语言中,数组从0开始索引。尽管C语言可以初始化整个数组,但在程序中使用时只能单独读写每个元素。
在Verilog-2001中,reg和wire数据类型都可以声明为数组,并且需要在对象名称之前声明数组宽度,还可以在对象名称之后声明的数组的维度。
Packed and Unpacked arrays
SystemVerilog使用术语 packed array来表示维度在对象名称之前的数组,使用术语 unpacked array来表示维度在对象名称之后的数组。
Packed arrays只能由单bit类型( bit, logic, reg, wire)和其他packed arrays组成。
Example - Packed Unpacked array
module packed_unpacked_data();
// packed array
bit [7:0] packed_array = 8'hAA;
// unpacked array
reg unpacked_array [7:0] = '{0,0,0,0,0,0,0,1};
initial begin
$display ("packed array[0] = %b", packed_array[0]);
$display ("unpacked array[0] = %b", unpacked_array[0]);
$display ("packed array = %b", packed_array);
// Below one is wrong syntax
//$display("unpacked array[0] = %b",unpacked_array);
#1 $finish;
end
endmodule
Simulation Output
packed array[0] = 0
unpacked array[0] = 1
packed array = 10101010
Dynamic arrays
动态数组是unpacked array,其大小可以在运行时设置或更改。
动态数组的内存空间直到运行时显式创建才分配。
SystemVerilog还提供了一组用于处理动态数组的函数。
new []:用于新建数组,设置大小。
size():返回数组的当前大小。
delete():清除所有数组元素。。
Example - Dynamic Array
module dynamic_array_data();
// Declare dynamic array
reg [7:0] mem [];
initial begin
// Allocate array for 4 locations
$display ("Setting array size to 4");
mem = new[4];
$display("Initial the array with default values");
for (int i = 0; i < 4; i ++) begin
mem[i] = i;
end
// Doubling the size of array, with old content still valid
mem = new[8] (mem);
// Print current size
$display ("Current array size is %d",mem.size());
for (int i = 0; i < 4; i ++) begin
$display ("Value at location %g is %d ", i, mem[i]);
end
// Delete array
$display ("Deleting the array");
mem.delete();
$display ("Current array size is %d",mem.size());
#1 $finish;
end
endmodule
Simulation Output
Setting array size to 4
Initial the array with default values
Current array size is 8
Value at location 0 is 0
Value at location 1 is 1
Value at location 2 is 2
Value at location 3 is 3
Deleting the array
Current array size is 0
本文转载自公众号:芯片数字实验室
原文链接:
https://mp.weixin.qq.com/s/9C8LbPvMChWVh-cpW9HJ0Q
未经作者同意,请勿转载!
推荐阅读
想了解更多内容,欢迎关注芯片数字实验室专栏