描述
在实例化中重写的Verilog参数失败,出现以下错误:
错误:[Synth 8-3438]模块’async_fifo’在’async_fifo.v:4’中声明没有任何参数’param_test’用作命名参数override [“FifoBuffer.v”:28]
下面是在模块语句之外定义参数“param_test”的代码。
————————————————-
module async_fifo#(
参数DEVICE =“7SERIES”,
…
FIFO_RAM_TYPE =“BLOCK_RAM”)
(输入[FIFO_WIDTH-1:0] din,
…
输出prog_full
);参数param_test = 1;
……
endmodule
————————————————–
模块实例化如下,其中值2传递给参数param_test:
async_fifo#(。param_test(2))buffer_fifo(.din(din),……);
为什么会这样?
解
这是预期的行为。
当使用两种样式声明参数时会出现此问题 – 在模块语句中(例如上面代码中的DEVICE)和模块语句外部(例如param_tesst)。
根据Verilog LRM,当您使用两种参数样式时,在模块语句之外声明的参数将成为本地参数,因此无法覆盖它们。
要么将它们全部放在模块语句中,要么将它们全部移出模块语句。
下面的任何一个都可以
module async_fifo#(
参数DEVICE =“7SERIES”,
…
FIFO_RAM_TYPE =“BLOCK_RAM”,
param_test = 1)
(输入[FIFO_WIDTH-1:0] din,
…
输出prog_full
);
要么
模块async_fifo
(输入[FIFO_WIDTH-1:0] din,
…
输出prog_full
);
参数DEVICE =“7SERIES”;
…
参数FIFO_RAM_TYPE =“BLOCK_RAM”;
参数param_test = 1;
没有回复内容