配列
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個の整数角括弧 [ ] 内の数値は、ビット幅ではなく配列のサイズです。
配列要素へのアクセス
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]); // 出力: 255配列は、テストベンチでテストデータを保存するのにとても便利です。
多次元配列
複数の次元を持つ配列を作成できます。
reg [7:0] matrix [0:3][0:3]; // 8ビット値の4x4配列
matrix[0][0] = 255; // 8'hFF = 10進数の255
matrix[2][1] = 85; // 8'h55 = 10進数の85配列とベクターの違い
| ベクター | 配列 | |
|---|---|---|
| 概要 | 複数ビットのワイヤまたはレジスタ | 複数の値の集合 |
| 構文 | [MSB:LSB] | [size] |
| 例 | reg [7:0] data; | reg [7:0] mem [0:255]; |
| アクセス | data[3](ビット3) | mem[3](要素3) |
ベクトルは複数のビットを持つ1つの値です。
配列は複数の値で、それぞれが独自のビットを持ちます。
重要な注意事項
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オンラインコンパイラ