在always块中实例化一个模块

时间:2013-11-25 03:27:05

标签: verilog

我刚刚开始学习verilog,所以这可能是一个非常基本的问题,但我无法理解或找到另一种方法来表达我在verilog中的意图。

我将采取一个较小的例子。我基本上试图将我的一个模块的输出连接到另一个模块的输入。请用行标记49帮助我,并提供替代方案。

   25 module ands (
   26     input1,
   27     input2,
   28     outputs
   29 );
   30     input [2:0] input1;
   31     input input2;
   32     output [2:0] outputs;
   33 
   34     integer itr;
   35 
   36     and a (outputs[0],input1[0],input2);
   37     initial
   38     begin
   39         for (itr = 1 ; itr <= 2; itr = itr+1)
   40             and a(outputs[itr],input1[itr],outputs[itr-1]);
   41     end
   42 
   43 endmodule

我知道这是一个愚蠢的例子,我可以很容易地避免使用for循环,但我想稍后使用参数。

谢谢,对不起,如果它太基本了。

2 个答案:

答案 0 :(得分:5)

Verilog模块不能在initial或always块中实例化。如果要使用循环实例化多个模块,则generate块就是您要使用的块。使用您的示例:

module ands (
    input1,
    input2,
    outputs
);
    input [2:0] input1;
    input input2;
    output [2:0] outputs;

    integer itr;

    and a (outputs[0],input1[0],input2);

    genvar itr;
    generate
        for (itr = 1 ; itr <= 2; itr = itr+1)
            and a(outputs[itr],input1[itr],outputs[itr-1]);
    endgenerate

endmodule

这需要使用verilog2001或更高版本。

答案 1 :(得分:0)

您需要使用genvar itr和generate ... endgenerate块而不是初始块。这应该完全符合你的要求。