2

定義済みの構造体の配列であるモジュール パラメーターがあります。この配列のデフォルト サイズを 1 要素に設定しました。アイデアは、インスタンス化時に適切なサイズでオーバーライドすることです。

以下に示す方法は、サイズをオーバーライドしません。最初の値をオーバーライドするだけです。サイズフィールドがパラメーター化されていないため、なぜこれを行うのかがわかります。サイズのパラメーターを渡すよりも良い方法はありますか?

お手伝いありがとう。

    module reg_slave
      #(parameter
         reg_pkg::defval_pair [0:0] REG_DEFVAL  = '0 //param decl with size=1
       )();
     endmodule : reg_slave

    module top();
      localparam reg_pkg::defval_pair [1:0] REG_DEFVAL = '{ 
         {3,'h32},
         {0,'h1}
         };  //param of same type and size = 2

      reg_slave #(
                   .REG_DEFVAL(REG_DEFVAL) //trying to override the size.
                 )  
      reg_slave_inst ();

    endmodule : top

    package reg_pkg;
      typedef struct packed { int ADDR; bit [31:0] VAL;} defval_pair;
    endpackage : reg_pkg
4

2 に答える 2

2

サイズには追加のパラメーターが必要です。

module reg_slave
      #(parameter
      int SIZE=1,
     reg_pkg::defval_pair [SIZE-1:0] REG_DEFVAL  = '0 //param decl with size=1
   )();
endmodule : reg_slave

での割り当てREG_DEFVALにいくつかのエラーがありtopます。REG_DEFVALはパックされた配列であるため、単一のかなりを削除します。defval_pairは であるpacked structため、エントリにはキャスト割り当てが必要です。

module top();
  localparam int SIZE=2;
  localparam reg_pkg::defval_pair [SIZE-1:0] REG_DEFVAL = { // no single quite
     reg_pkg::defval_pair'{3,'h32}, // cast as defval_pair
     reg_pkg::defval_pair'{0,'h1} // cast as defval_pair
     };  //param of same type and size = 2

  reg_slave #( .SIZE(SIZE), // override size
               .REG_DEFVAL(REG_DEFVAL)
             )  
  reg_slave_inst ();

endmodule : top

UPDATE : SIZE パラメータを渡さずに N サイズの配列パラメータを渡します。

: これはおそらく合成可能ではありません。この機能に対する SystemVeilog のサポートは、シミュレーターによって異なる場合があります。

module reg_slave
      #(parameter
     reg_pkg::defval_pair REG_DEFVAL [] = '{ reg_pkg::defval_pair'{0,'h0} } //param decl with size=1
   )();
endmodule : reg_slave

module top();
  localparam reg_pkg::defval_pair REG_DEFVAL [] = '{ // with single quite
     reg_pkg::defval_pair'{3,'h32}, // cast as defval_pair
     reg_pkg::defval_pair'{0,'h1} // cast as defval_pair
     };  //param of same type and size = 2

  reg_slave #(
               .REG_DEFVAL(REG_DEFVAL)
             )  
  reg_slave_inst ();

endmodule : top
于 2013-09-05T19:48:57.257 に答える