VHDL常量在Verilog中的应用

VHDL常量在Verilog中的应用,vhdl,verilog,Vhdl,Verilog,我已经定义了一个VHDL常量,我在“generate”语句中使用它作为开关来生成代码的一部分还是跳过它。 我有一个Verilog模块在同一个顶层,我想做一些类似的事情。 我想在Verilog的“ifdef”语句中使用VHDL常量来实例化或跳过Verilog模块。 有什么技巧可以让我达到这个目的吗?因为我知道VHDL常量不能用在Verilog“ifdef”语句中 谢谢, --Rudyifdef意味着您需要决定何时以及是否设置各种`define MY_MACRO_DEF,这可能会污染您的全局名称空间

我已经定义了一个VHDL常量,我在“generate”语句中使用它作为开关来生成代码的一部分还是跳过它。 我有一个Verilog模块在同一个顶层,我想做一些类似的事情。 我想在Verilog的“ifdef”语句中使用VHDL常量来实例化或跳过Verilog模块。 有什么技巧可以让我达到这个目的吗?因为我知道VHDL常量不能用在Verilog“ifdef”语句中

谢谢,
--Rudy

ifdef意味着您需要决定何时以及是否设置各种
`define MY_MACRO_DEF
,这可能会污染您的全局名称空间,并且取决于编译顺序

相反,使用IEEE标准1364-2001中介绍的Verilog的
生成
。它类似于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
module my_module#(参数PARAM_VALUE=0)(/*端口*/);
生成
如果(参数值==1)开始
此模块子指令(.*);
否则开始
ThatMoudle subinst(.*);
结束
最终生成
端模
模块顶部;
/*网*/
genvar gvar_i;
生成
对于(gvar_i=0;gvar_i