arrays - 覆盖 systemverilog 中结构数组参数的大小

标签 arrays verilog system-verilog hdl register-transfer-level

我有一个模块参数,它是预定义结构的数组。我将此数组的默认大小设置为 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

最佳答案

使用类型参数。但是,您仍然需要一个额外的参数来传递到实例中。优点是您可以更改参数的类型。

module reg_slave
  #(parameter
     type T = int,
     T 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 #(
               .T(reg_pkg::defval_pair[1:0]),
               .REG_DEFVAL(REG_DEFVAL) //trying to override the size.
             )  
  reg_slave_inst ();

endmodule : top

关于arrays - 覆盖 systemverilog 中结构数组参数的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18627235/

相关文章:

verilog - 使用 with 代替 iff 的功能覆盖问题

java - 错误 : cannot find symbol- variable. 引用 ".length"

javascript - 画线javascript的循环逻辑

Verilog 模块实例化和空开始结束

verilog - Verilog中数组初始化错误

function - 在 2 个 Verilog 模块中重用相同的函数

python - Python 中的二维数组

c - 为什么这不会从用户命令的末尾删除 '&'?

verilog - Verilog 始终@* 敏感度列表中包含哪些内容?

vhdl - 从命令行重新加载 gtkwave 中的 VCD 文件