配列
CoddyのVerilogジャーニー「基礎」セクションの一部 — レッスン 10/90。
配列を使用すると、1つの変数に複数の値を格納できます。配列内の各要素は、そのインデックスによってアクセスできます。
注: 配列は独立したデータ型ではありません。wire、reg、integer、または real 型のコレクションです。
配列の宣言
構文: <data_type> <name> [<size>];
reg [7:0] memory [0:255]; // 256バイトのメモリ(各8ビット)
reg data [0:7]; // 8個の1ビットレジスタ
wire [3:0] bus [0:3]; // 4本のバス、各4ビット幅
integer counters [0:9]; // 10個の整数ブラケット [ ] 内の数値はビット幅ではなく、array サイズです。
配列要素へのアクセス
reg [7:0] memory [0:3];
memory[0] = 165; // 10進数 165
memory[1] = 90; // 10進数 90
memory[2] = memory[0] + memory[1];
$display("%d", memory[2]); // 出力: 255Arrays は、テストデータ(test data)を格納するための testbench で非常に便利です。
多次元配列
複数の次元を持つ配列を作成できます:
reg [7:0] matrix [0:3][0:3]; // 8ビット値の4x4配列
matrix[0][0] = 255; // 8'hFF = 255 10進数
matrix[2][1] = 85; // 8'h55 = 85 10進数Array vs Vector
| Vector | Array | |
|---|---|---|
| 概要 | マルチビットの wire または reg | 複数の値のコレクション |
| 構文 | [MSB:LSB] | [size] |
| 例 | reg [7:0] data; | reg [7:0] mem [0:255]; |
| アクセス | data[3] (ビット 3) | mem[3] (要素 3) |
ベクトルは複数の bit を持つ1つの値です。
配列(array)は複数の valuesであり、それぞれが独自の bits を持ちます。
重要事項
- 大きなサイズで使用する場合、配列は多くのツールで論理合成できません
- 配列は主に
testbenchで使用されます - ハードウェアメモリには、専用のメモリプリミティブを使用してください
チャレンジ
4つのテスト値を格納する `array` を作成するために、以下のコードを完成させてください。
作業手順:
test_dataという名前の `array` を宣言するregデータ型を使用する (`testbench` で `values` を格納するため)- 各要素は 8 `bits` 幅とする (
[7:0]) - `array` は 4 つの `elements` を持つようにする (
[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このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。