【问题标题】:VHDL constant used in VerilogVerilog 中使用的 VHDL 常量
【发布时间】:2014-05-08 18:49:46
【问题描述】:

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

谢谢, --鲁迪

【问题讨论】:

    标签: vhdl verilog


    【解决方案1】:

    `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
    
    • IEEE Std 1364-2001 § 12.1.3 生成的实例化
    • IEEE Std 1364-2005 § 12.4 生成构造
    • IEEE Std 1800-2012 (SystemVerilog) § 27. 生成构造

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多