【发布时间】:2021-05-27 06:09:15
【问题描述】:
我想定义一些本地参数,其值由在该模块外部分配的参数决定。在这里,我使用了一个生成块。就像下面这样:
module doppler_fft_cluster # (
parameter CORE_TYPE = "DOPPLER_FFT_D0"
) (
clk, rst_,
i_tvalid, i_tdata, i_tready, i_tlast
// and more ports
);
input clk;
input rst_;
generate
case (CORE_TYPE)
"DOPPLER_FFT_D0": begin
localparam FFT_XN_DATA_WIDTH = 42;
localparam FFT_XK_DATA_WIDTH = 66;
localparam FFT_LENGTH = 2048;
end
"DOPPLER_FFT_D1": begin
localparam FFT_XN_DATA_WIDTH = 64;
localparam FFT_XK_DATA_WIDTH = 66;
localparam FFT_LENGTH = 512;
end
endcase
endgenerate
input i_tvalid;
input i_tdata;
output i_tready;
input i_tlast;
input [FFT_XN_DATA_WIDTH-1:0] i_tdata; // Boom!
// ... ...
endmodule
我曾尝试使用 ModelSim 模拟此模块,但它显示那些本地参数未定义。
Error: ./demo.v(31): (vlog-2730) Undefined variable: 'FFT_XN_DATA_WIDTH'.
这个localparams好像不能进入模块级作用域。
那么,如何在模块级别访问它们?或者,有没有其他方法可以实现这样的东西?
更新 0616
我最终选择 Ehab Ibrahim 的方法,因为我的项目需要 Xilinx ISE 或 XST 合成器,它不能接受带有点语法的 parameter 或 localparam 分配。但是,如果您没有遇到 EDA 工具的限制,请随意尝试 dave_59 的方法。
谢谢!
【问题讨论】:
标签: parameters verilog modelsim