数组
本课属于 Coddy Verilog 学习旅程的“基础知识”单元。第 10 课,共 90 课。
数组可以让你在一个变量中存储多个值。你可以通过索引访问数组中的每个元素。
注意:数组不是一种独立的数据类型。它是由 wire、reg、integer 或 real 类型组成的集合。
声明数组
语法: <data_type> <name> [<size>];
reg [7:0] memory [0:255]; // 256 字节的内存(每字节 8 位)
reg data [0:7]; // 8 个单比特寄存器
wire [3:0] bus [0:3]; // 4 条总线,每条宽 4 位
integer counters [0:9]; // 10 个整数方括号 [ ] 中的数字表示数组大小,不是位宽。
访问数组元素
reg [7:0] memory [0:3];
memory[0] = 165; // 十进制数 165
memory[1] = 90; // 十进制数 90
memory[2] = memory[0] + memory[1];
$display("%d", memory[2]); // 输出:255数组在测试平台中非常有用,可以用来存储测试数据。
多维数组
你可以创建具有多个维度的数组:
reg [7:0] matrix [0:3][0:3]; // 由 8 位值组成的 4x4 数组
matrix[0][0] = 255; // 8'hFF = 十进制的 255
matrix[2][1] = 85; // 8'h55 = 十进制的 85数组与向量
| 向量 | 数组 | |
|---|---|---|
| 定义 | 多位的 wire 或 reg | 多个值的集合 |
| 语法 | [MSB:LSB] | [size] |
| 示例 | reg [7:0] data; | reg [7:0] mem [0:255]; |
| 访问 | data[3](第 3 位) | mem[3](第 3 个元素) |
向量是一个包含多个位的值。
数组是多个值,每个值都有自己的位。
重要说明
reg数组是可综合的:综合工具会根据reg [7:0] mem [0:255];这样的数组构建 RAM 和寄存器文件等存储器。- 数组也用于测试平台中,用来存储测试数据。
挑战
补全下面的代码,创建一个用于存储 4 个测试值的数组。
要做什么:
- 声明一个名为
test_data的数组- 使用
reg数据类型(因为它会在测试平台中存储值) - 每个元素应为 8 位宽(
[7:0]) - 数组应有 4 个元素(
[0:3])
- 使用
亲手试试
module arrays;
// 声明一个名为 test_data 的数组
// 它应有 4 个元素,每个元素宽 8 位
// 使用 reg 数据类型(因为它能在测试平台中存储值)
integer i;
initial begin
test_data[0] = 170;
test_data[1] = 240;
test_data[2] = 204;
test_data[3] = 15;
for (i = 0; i < 4; i = i + 1) begin
$display("test_data[%0d] = %b", i, test_data[i]);
end
$finish;
end
endmodule这节课包含一个小测验。开始学习即可作答,并记录你的进度。
基础知识中的所有课
自己练习: Verilog 在线编译器