Verilog 为循环调用内部模块
我想为循环调用一个模块,下面是示例代码,但它显示以下错误。请注意,我们使用概要cad工具进行编译 错误: 错误-[SE]verilog源后面的语法错误有语法错误: “andgate.v”,14:标记为“and” 和a(输出[0],输入1[0],输入2) 代码是: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
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;itrgenerate
语句不能在始终
块中使用。
无法在始终块中实例化模块。
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这看起来很奇怪。听起来你遗漏了一些右括号。你使用了哪个工具编译?它为我编译。