story · 2020年05月08日

SystemVerilog教程之Data Types Part-III

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
未经作者同意,请勿转载!

推荐阅读

想了解更多内容,欢迎关注芯片数字实验室专栏
推荐阅读
关注数
12315
内容数
220
前瞻性的眼光,和持之以恒的学习~
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息