我刚刚开始学习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循环,但我想稍后使用参数。
谢谢,对不起,如果它太基本了。
答案 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块而不是初始块。这应该完全符合你的要求。