use*_*118 1 loops verilog module
我试图生成 128 个并行异或门,然后将它们的输出连接到 Verilog 中的 64 个异或门。我使用一个名为“EXOR”的模块。我的问题是:当我将此模块“EXOR”放入循环中时,程序给出语法错误“意外标记:'EXOR'”。我想将门命名为 exor0、exor1、...。
我该如何解决?
initial begin
for (i=0; i<128 ; i=i +1 )
EXOR exor[i](.I1(m[2*i]), .I2(m[2*i+1]), .o(t[i]));
end
initial begin
for (i=0; i<64 ; i=i +1 )
EXOR exor[i+128](.I1(t[2*i]), .I2(t[2*i+1]), .o(f[i]));
end
initial begin
for (i=0; i<32 ; i=i +1 )
EXOR exor[i+192](.I1(f[2*i]), .I2(f[2*i+1]), .o(g[i]));
end
Run Code Online (Sandbox Code Playgroud)
为了详细说明 Munkymorgy 的答案,您在这里寻找的是生成循环。“initial”和“always”块用于“运行时”构造。由于您正在尝试在实例上创建数组,因此您希望在详细说明时进行解释。
genvar i;
generate
for (i = 0; i < 64; i = i + 1) begin : gen_loop
EXOR exor(.I1(m[2 * i]), .I2(m[2 * i + 1], .o(t[i]));
end
endgenerate
Run Code Online (Sandbox Code Playgroud)
两件事情:
1)循环变量必须声明为“genvar”
2)for循环需要命名。这将用于实例的分层名称。