Menu
Coddy logo textTech

配列

CoddyのVerilogジャーニー「基礎」セクションの一部 — レッスン 10/90。

配列を使用すると、1つの変数に複数の値を格納できます。配列内の各要素には、そのインデックスによってアクセスできます。

注意: 配列は独立したデータ型ではありません。これは、wirereginteger、または 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

配列 vs ベクタ

 ベクタ配列
概要複数ビットの wire または reg複数の値の集合
構文[MSB:LSB][size]
reg [7:0] data;reg [7:0] mem [0:255];
アクセスdata[3] (ビット 3)mem[3] (要素 3)

ベクトルは複数のビットを持つ1つの値です。
配列は複数の値であり、それぞれが独自のビットを持ちます。

重要な注意事項

  • 配列は、大きなサイズで使用される場合、多くのツールで合成可能ではありません
  • 配列は主にテストベンチで使用されます
  • ハードウェアメモリには、専用のメモリプリミティブを使用してください
challenge icon

チャレンジ

4つのテスト値を格納する配列を作成するために、以下のコードを完成させてください。

行うべきこと: 

  1. test_data という名前の配列を宣言します
    1. reg データ型を使用します(テストベンチで値を格納するため)
    2. 各要素の幅は8ビットにする必要があります ([7:0])
    3. 配列は4つの要素を持つ必要があります ([0:3])

チートシート

配列は、インデックスによってアクセスされる複数の値を1つの変数に格納します。配列は、wirereginteger、または real 型の集合です。

宣言の構文: <data_type> <name> [<size>];

reg [7:0] memory [0:255];  // 256個の要素、各8ビット幅
wire [3:0] bus [0:3];      // 4個の要素、各4ビット幅
integer counters [0:9];    // 10個の整数

要素へのアクセス:

memory[0] = 165;
memory[2] = memory[0] + memory[1];
$display("%d", memory[2]);

多次元配列:

reg [7:0] matrix [0:3][0:3];  // 8ビット値の4x4配列
matrix[0][0] = 255;

配列とベクトルの違い:

  • ベクトル — 複数のビットを持つ1つの値: reg [7:0] data;data[3] はビット3にアクセスします
  • 配列 — それぞれが独自のビットを持つ複数の値: reg [7:0] mem [0:255];mem[3] は要素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
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

基礎のすべてのレッスン