模块中的systemverilog参数数组,实例化模块时如何设置参数数组单元素
systemverilog parameter array in module , how to set parameter array single element when instantiating module
我正在尝试创建一个具有其他内存模块的模块,我正在尝试使用数组中的一个参数,使用此参数后的代码将生成模块实例,现在我正在尝试实例化此模块仅设置此参数数组的一个元素,只有一个索引
现在下面的代码会让您了解我已经尝试过的方法,但是编译器给出了一个错误——“”MEM_AT_CS 不是数组”
/////////////////////////////////////////////////////////
typedef enum {NONE , SSRAM_X16 , SSRAM_X32 , SDRAM_X8 , SDRAM_X16 ,
SDRAM_X32 , SYNC , ASYNC} memory_config_type;
module MEM_MODEL_WRAPPER (mem_intf intf , input logic mc_clk);
parameter no_of_chip_select = 8;
parameter memory_config_type MEM_AT_CS[no_of_chip_select-1 :0] =
'{NONE ,NONE ,NONE ,NONE ,NONE ,NONE ,NONE ,NONE };
genvar i;
generate
for(i=0 ; i<no_of_chip_select;i++) begin
case(MEM_AT_CS[i])
SDRAM_X8:begin
.
.
.
现在是顶级模块
module top ;
//////////here i want to set the parameter array by index
defparam mem_dut.MEM_AT_CS[2] = SSRAM_X16;
MEM_MODEL_WRAPPER mem_dut(mem_intf , mc_clk);
endmodule
这个我也试过了
MEM_MODEL_WRAPPER #( .MEM_AT_CS[2] (SSRAM_X16) )
mem_dut(mem_intf , mc_clk);
您不能对参数的一部分执行此操作。您需要设置整个数组。这是一个例子:
module M#(parameter int array[2] = '{1,2})();
initial $display("%m {%0d,%0d}", array[0], array[1]);
endmodule // M
module top();
M m1();
M m2();
defparam m2.array = '{3, 4};
M #(.array('{5,6}))m3() ;
endmodule // top
SystemVerilog 不允许部分参数数组(即,仅分配参数数组的单个索引)。您一次只能分配整个数组:
MEM_MODEL_WRAPPER #(.MEM_AT_CS('{NONE, NONE, SSRAM_X16, NONE, NONE, NONE, NONE, NONE})) mem_dut(mem_intf , mc_clk);
我正在尝试创建一个具有其他内存模块的模块,我正在尝试使用数组中的一个参数,使用此参数后的代码将生成模块实例,现在我正在尝试实例化此模块仅设置此参数数组的一个元素,只有一个索引
现在下面的代码会让您了解我已经尝试过的方法,但是编译器给出了一个错误——“”MEM_AT_CS 不是数组”
/////////////////////////////////////////////////////////
typedef enum {NONE , SSRAM_X16 , SSRAM_X32 , SDRAM_X8 , SDRAM_X16 ,
SDRAM_X32 , SYNC , ASYNC} memory_config_type;
module MEM_MODEL_WRAPPER (mem_intf intf , input logic mc_clk);
parameter no_of_chip_select = 8;
parameter memory_config_type MEM_AT_CS[no_of_chip_select-1 :0] =
'{NONE ,NONE ,NONE ,NONE ,NONE ,NONE ,NONE ,NONE };
genvar i;
generate
for(i=0 ; i<no_of_chip_select;i++) begin
case(MEM_AT_CS[i])
SDRAM_X8:begin
.
.
.
现在是顶级模块
module top ;
//////////here i want to set the parameter array by index
defparam mem_dut.MEM_AT_CS[2] = SSRAM_X16;
MEM_MODEL_WRAPPER mem_dut(mem_intf , mc_clk);
endmodule
这个我也试过了
MEM_MODEL_WRAPPER #( .MEM_AT_CS[2] (SSRAM_X16) )
mem_dut(mem_intf , mc_clk);
您不能对参数的一部分执行此操作。您需要设置整个数组。这是一个例子:
module M#(parameter int array[2] = '{1,2})();
initial $display("%m {%0d,%0d}", array[0], array[1]);
endmodule // M
module top();
M m1();
M m2();
defparam m2.array = '{3, 4};
M #(.array('{5,6}))m3() ;
endmodule // top
SystemVerilog 不允许部分参数数组(即,仅分配参数数组的单个索引)。您一次只能分配整个数组:
MEM_MODEL_WRAPPER #(.MEM_AT_CS('{NONE, NONE, SSRAM_X16, NONE, NONE, NONE, NONE, NONE})) mem_dut(mem_intf , mc_clk);