Verilog的模块的条件实例(Conditional instantiation of veril

2019-08-17 07:46发布

是否有可能在verliog有条件实例化一个模块?

例如:

if (en==1)  
  then module1 instantiation  
else  
  module2 instantiation  

Answer 1:

从IEEE标准1364-2001:

12.1.3.3生成-条件甲生成-条件是一个的if-else-如果产生构建体,其允许模块,用户定义的原语,Verilog的栅元,连续分配,初始块和总是块基于表达式被有条件地实例化到另一个模块这是确定的,在设计阐述的时间。

例如在LRM给出:

module multiplier(a,b,product);
parameter a_width = 8, b_width = 8;
localparam product_width = a_width+b_width; // can not be modified
// directly with the defparam statement
// or the module instance statement #
input [a_width-1:0] a;
input [b_width-1:0] b;
output [product_width-1:0] product;

generate
    if((a_width < 8) || (b_width < 8))
        CLA_multiplier #(a_width,b_width) u1(a, b, product);
        // instantiate a CLA multiplier
    else
        WALLACE_multiplier #(a_width,b_width) u1(a, b, product);
        // instantiate a Wallace-tree multiplier
endgenerate
// The generated instance name is u1

endmodule


Answer 2:

您可以使用编译器指令一样

`define FOO
`ifdef FOO
    module1 ...
`else
    module2 ...
`endif

选择在编译时的实例。

如果你问,如果你可以实例根据线值的模块,没有你不能做到这一点。



Answer 3:

如你所描述的硬件,不能在运行中改变你不能在运行时做到这一点。 您可以启用或禁用功能,以节省电力,但你不能让它停止现有的。 假设你正在寻找提高重用或块的配置能力:

预编译技术经常使用以及``defines`(打勾定义)添提到。

他们会由它解析模板文件一个Perl,红宝石等脚本。

我以前的答复使用Ruby脚本和模板 。



文章来源: Conditional instantiation of verilog module