Verilog 为循环调用内部模块

Verilog 为循环调用内部模块,verilog,Verilog,我想为循环调用一个模块,下面是示例代码,但它显示以下错误。请注意,我们使用概要cad工具进行编译 错误: 错误-[SE]verilog源后面的语法错误有语法错误: “andgate.v”,14:标记为“and” 和a(输出[0],输入1[0],输入2) 代码是: module ands ( input1, input2, outputs ); input [2:0] input1; input input2; output [2:0] output

我想为循环调用一个模块,下面是示例代码,但它显示以下错误。请注意,我们使用概要cad工具进行编译

错误:

错误-[SE]verilog源后面的语法错误有语法错误: “andgate.v”,14:标记为“and” 和a(输出[0],输入1[0],输入2)

代码是:

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

always@(input1 or input2)
begin
   integer itr;

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

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

endmodule
模块(
输入1,
输入2,
输出
);
输入[2:0]输入1;
输入2;
输出[2:0]输出;
始终@(输入1或输入2)
开始
整数itr;
和a(输出[0],输入1[0],输入2);
genvar-itr;
生成

for(itr=1;itr
generate
语句不能在
始终
块中使用。 无法在
始终
块中实例化模块。
itr
必须是
genvar

所以,在你的情况下,类似的方法应该有效:

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

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

  genvar itr;
  generate
    for (itr = 1 ; itr <= 2; itr = itr+1)
    begin : gen_loop
        and a(outputs[itr],input1[itr],outputs[itr-1]);
    end
  endgenerate
endmodule
模块(
输入1,
输入2,
输出
);
输入[2:0]输入1;
输入2;
输出[2:0]输出;
和a(输出[0],输入1[0],输入2);
genvar-itr;
生成

对于(itr=1;itr-Hi,我认为不允许在
always@
块中实例化模块。将实例放在always块之外。了解always/sensitive列表的工作方式。何时何地需要它们。或者创建一个实例数组
和一个[2:0](输出[2:0],输入[2:0],{outputs[1:0],输入2});
(从Verilog-95开始支持)。或行为
assign outputs[2:0]=input1[2:0]&{outputs[1:0],input2};
我尝试使用Serge提供的代码,但仍然显示以下错误:以下Verilog源有语法错误:非法端口或变量声明“andgate.v”,12:token是“;”genvar itr;^@RiazUlHaqueMian这看起来很奇怪。听起来你遗漏了一些右括号。你使用了哪个工具编译?它为我编译。