“main.v:38:错误:格式错误的语句”。在加法器模块中调用。
我想在 Verilog 中实现 ALU,但我得到了这个错误。
甚至 StackOverflow 上一个问题也帮不了我。
module Adder(A, B, Cin, S, Cout);
input A, B, Cin;
output reg S, Cout;
always @(*)
begin
S = (A ^ B) ^ Cin;
Cout = (A & B) | (A & Cin) | (B & Cin);
end
endmodule
module ALU(op1, op2, opCode, Cin, Res, cFlag, zFlag, oFlag);
input [31 : 0] op1, op2;
input [3 : 0] opCode;
input Cin;
output [31 : 0] Res;
output cFlag, zFlag, oFlag;
integer i;
wire Cout;
always @(*) begin
if(opCode == 4'b1001) begin
for(i = 0; i < 32; i = i + 1) begin
Adder adder(op1[i], op2[i], Cin, Res[i], Cout);
case(Cout)
1'b1 : Cin = 1'b1;
1'b0 : Cin = 1'b0;
endcase
end
end
end
endmodule
模块不能在 always 块中实例化。如果您需要一个模块的多个实例,请使用带有 for 循环的生成。您可以完全实例化模块而无需循环。我可能首先使用两个模块来完成此操作以使其正常工作,然后进行更改以获得设计所需的数字(在本例中为 32)。
所有模块都在仿真的细化阶段静态实例化,仅一次,并且在 t=0 之前的时间。没有动态创建模块。
您可能会发现这有助于解决此问题和类似问题:
https
://www.amiq.com/consulting/2014/10/01/what-goes-where-in-systemverilog/始终块不是此问题的“容器”图表。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句