1. ホーム
  2. arrays

[解決済み] Verilogで1次元と2次元のバイト配列を宣言して使用するには?

2022-01-28 14:06:19

質問内容

Verilogで1次元と2次元のバイト配列を宣言して使用するにはどうしたらよいですか?

例えば、次のようなことをするにはどうしたらよいでしょうか。

byte a_2D[3][3];
byte a_1D[3];

// using 1D
for (int i=0; i< 3; i++)
{
    a_1D[i] = (byte)i;
}

// using 2D
for (int i=0; i< 3; i++)
{
    for (int j=0; j< 3; j++)
    {
        a_2D[i][j] = (byte)i*j;
    }
}

解決方法は?

Verilogはビットで考えるので reg [7:0] a[0:3] とすると、4x8ビット配列(=4x1バイト配列)が得られます。この中から最初の1バイトを取り出すには a[0] . 2バイト目の3ビット目は a[1][2] .

バイトの2次元配列の場合、まずシミュレータ/コンパイラを確認してください。古いバージョン(確か'01以前)ではサポートされていません。 次に reg [7:0] a [0:3] [0:3] を実行すると、バイトの2次元配列が得られます。 1つのビットにアクセスするには a[2][0][7] 例えば

reg [7:0] a [0:3];
reg [7:0] b [0:3] [0:3];

reg [7:0] c;
reg d;

initial begin

   for (int i=0; i<=3; i++) begin
      a[i] = i[7:0];
   end

   c = a[0];
   d = a[1][2]; 


   // using 2D
   for (int i=0; i<=3; i++)
      for (int j=0; j<=3; j++)
          b[i][j] = i*j;  // watch this if you're building hardware

end