3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[SystemVerilog]動的二次元配列の初期化とかparameterとか。

Posted at

Twitterでやり取りしててちょっと思い出したのでメモと考えたこと。

シミュレーションを軽くするために動的配列をよく使うのであるが、二次元配列を初期化している例があまり書かれていなかったので書いてみた。

class PIX_t;

  // ---------------------------------------------------------------------------
  // members
  // ---------------------------------------------------------------------------
  int    WIDTH, HEIGHT;
  logic  [47:0] pix [][];

  // ---------------------------------------------------------------------------
  // constructor
  // ---------------------------------------------------------------------------
   function new (int w, h);
     WIDTH  = w;
     HEIGHT = h;
     pix    = new[WIDTH];
     foreach(pix[i])
       pix[i] = new[HEIGHT];
   endfunction

endclass

module tb();

  parameter int WIDTH  = 3840;
  parameter int HEIGHT = 2160;

  PIX_t pix;

  initial
    pix = new(WIDTH, HEIGHT);

endmodule

foreachを使用する。残念ながら一発で初期化はできない。

用途によっては、動的配列ではなくparameterで配列を確保する方がコンパクトで良さそう。

class PIX_t #(parameter int WIDTH = 1920, HEIGHT = 1080);

  // ---------------------------------------------------------------------------
  // members
  // ---------------------------------------------------------------------------
  logic  [47:0] pix [WIDTH][HEIGHT];

  // ---------------------------------------------------------------------------
  // constructor
  // ---------------------------------------------------------------------------
   function new (logic [47:0] p = 48'hFF_FF_FF_FF_FF_FF);
     for (int x=0; x<WIDTH; x++)
       for (int y=0; y<HEIGHT; y++)
         pix[x][y] = p;
   endfunction

endclass

module tb();

  parameter int  WIDTH  = 3840;
  parameter int  HEIGHT = 2160;

  PIX_t #(WIDTH, HEIGHT) pix;

  initial
    pix = new();

endmodule

ただし、parameterによるインスタンス方法は、渡す引数の場所によってはうまくいかない場合があるので悩ましいところ。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?