【发布时间】:2014-05-08 18:49:46
【问题描述】:
我已经定义了一个 VHDL 常量,我将它用作“生成”语句中的一个开关,以决定是生成一部分代码还是跳过它。 我在同一顶层有一个 Verilog 模块,我想做类似的事情。 我想在 Verilog 的“ifdef”语句中使用 VHDL 常量来实例化或跳过 Verilog 模块。 我有什么技巧可以实现这一目标吗?因为我知道 VHDL 常量不能用于 Verilog“ifdef”语句。
谢谢, --鲁迪
【问题讨论】:
我已经定义了一个 VHDL 常量,我将它用作“生成”语句中的一个开关,以决定是生成一部分代码还是跳过它。 我在同一顶层有一个 Verilog 模块,我想做类似的事情。 我想在 Verilog 的“ifdef”语句中使用 VHDL 常量来实例化或跳过 Verilog 模块。 我有什么技巧可以实现这一目标吗?因为我知道 VHDL 常量不能用于 Verilog“ifdef”语句。
谢谢, --鲁迪
【问题讨论】:
`ifdef 意味着您需要决定何时以及是否设置各种`define MY_MACRO_DEF 并且可能会污染您的全局名称空间并且依赖于编译顺序。
改为使用 Verilog 的 generate,在 IEEE Std 1364-2001 中引入。它类似于 VHDL 的生成方法。这是一个例子:
module my_module #(parameter PARAM_VALUE=0) ( /* ports */ );
generate
if (PARAM_VALUE==1) begin
ThisModule subinst ( .* );
else begin
ThatMoudle subinst ( .* );
end
endgenerate
endmodule
module top;
/* nets */
genvar gvar_i;
generate
for (gvar_i = 0; gvar_i<2; gvar_i=gvar_i+1) begin
my_module #(.PARAM_VALUE(gvar_i)) inst ( .* );
end
endgenerate
endmodule
【讨论】: