verilog中可变大小的参数数组
在(系统)verilog中使用参数数组模拟设计时,我观察到了奇怪的行为 这是我的模块界面:verilog中可变大小的参数数组,verilog,system-verilog,modelsim,Verilog,System Verilog,Modelsim,在(系统)verilog中使用参数数组模拟设计时,我观察到了奇怪的行为 这是我的模块界面: module src_multi #( parameter NUM_DEST = 4, parameter [N_ADDR_WIDTH-1:0] DEST [0:NUM_DEST-1] //problematic line ) ( ... ); 以及测试台中该模块的实例化: src_multi #( .NUM_DEST(3),
module src_multi
#(
parameter NUM_DEST = 4,
parameter [N_ADDR_WIDTH-1:0] DEST [0:NUM_DEST-1] //problematic line
)
(
...
);
以及测试台中该模块的实例化:
src_multi
#(
.NUM_DEST(3),
.DEST('{13,12,8})
)
src_src1_outbun
(
...
);
基本上,我希望DEST
是一个数字数组,条目的数量应该取决于NUM\u DEST
。但是,当如上所示声明了DEST
但未初始化时:
parameter [N_ADDR_WIDTH-1:0] DEST [0:NUM_DEST-1]
modelsim总是从DEST读取值0
,就好像它充满了零一样
如果我按如下方式初始化数组:
parameter [N_ADDR_WIDTH-1:0] DEST [0:NUM_DEST-1] = '{0,1,2,3}
parameter NUM_DEST = 4,
parameter [N_ADDR_WIDTH-1:0] DEST [0:NUM_DEST-1] = '{NUM_DEST{1}}
我得到一个运行时模拟错误:
# ** Fatal: (vsim-120) Illegal Concat. Number of elements doesn't match with the type.
这是因为在我的实例化中,我希望数组的大小为3。所以我试着用大小3初始化它(如下所示),这非常有效
parameter NUM_DEST = 3,
parameter [N_ADDR_WIDTH-1:0] DEST [0:NUM_DEST-1] = '{0,1,2}
但这迫使我对该数组只使用一个大小,但我希望它具有可变大小
如何在(系统)verilog中使用可变大小的参数数组?我原以为最后一个会起作用,当您尝试用不同大小的数组覆盖它时,会出现什么样的错误
您可以尝试使用如下问题中的参数化类型:这是modelsim的错误。此输入在两个不同的modelsim版本上产生不同的结果:
parameter NUM_DEST = 4,
parameter [N_ADDR_WIDTH-1:0] DEST [0:NUM_DEST-1]
modelsim 10.3d=正确
modelsim 10.1e=错误
要在所有情况下修复它,我们可以使用参数化的输入数NUM\u DEST
初始化数组,如下所示:
parameter [N_ADDR_WIDTH-1:0] DEST [0:NUM_DEST-1] = '{0,1,2,3}
parameter NUM_DEST = 4,
parameter [N_ADDR_WIDTH-1:0] DEST [0:NUM_DEST-1] = '{NUM_DEST{1}}
我得到这个错误(也写在问题中)
#**致命:(vsim-120)非法Concat。元素数与类型不匹配。
oops,很抱歉我错过了。我猜你同时也改变了数量?