Verilog 实现ALU
我正试图实现一个ALU给定的特定功能代码 由于某些原因,下面的代码无法运行,并且根据编译器的说明存在错误 错误(可抑制):alu.v(61):(vlog-2388)“结果”已在此范围(alu)中声明。Verilog 实现ALU,verilog,alu,Verilog,Alu,我正试图实现一个ALU给定的特定功能代码 由于某些原因,下面的代码无法运行,并且根据编译器的说明存在错误 错误(可抑制):alu.v(61):(vlog-2388)“结果”已在此范围(alu)中声明。 错误(可抑制):alu.v(67):(vlog-2388)“操作数0”已在此作用域(alu)中声明。 错误(可抑制):alu.v(67):(vlog-2388)“操作数1”已在此作用域(alu)中声明。 错误(可抑制):alu.v(68):(vlog-2388)“控制”已在此作用域(alu)中声明
错误(可抑制):alu.v(67):(vlog-2388)“操作数0”已在此作用域(alu)中声明。
错误(可抑制):alu.v(67):(vlog-2388)“操作数1”已在此作用域(alu)中声明。
错误(可抑制):alu.v(68):(vlog-2388)“控制”已在此作用域(alu)中声明。
错误:(vlog-13069)alu.v(71):在“附近,您的代码几乎没有问题。声明输入和输出有两种方法:
module alu (
input [31:0] operand0,
input [31:0] operand1,
input [3:0] control,
output reg [31:0] result,
output zero,
output overflow
);
第二种方法是:
module (operand0,operand1,control,result,zero,overflow);
input [31:0] operand0;
input [31:0] operand1;
input [3:0] control;
output reg [31:0] result;
output zero;
output overflow;
我希望您能看到其中的区别。因此,在您的代码中,您正在重新声明输入和输出
还有非阻塞作业,也就是非常感谢。你的解释非常清楚!现在,我收到错误“非法引用网络”结果3次。我能不能将变量与案例中的结果相等?我编辑了上述问题中的陈述。我也做了你提到的更改。默认情况下有一个输入错误。我使用过,您不能将案例中的变量等同于结果,因为只要输入操作数0和操作数1发生变化,输出就会发生变化。因此,必须将其添加到敏感度列表中。所以总是@(*)意味着所有的输入都包含在灵敏度列表中,这将影响输出。
module (operand0,operand1,control,result,zero,overflow);
input [31:0] operand0;
input [31:0] operand1;
input [3:0] control;
output reg [31:0] result;
output zero;
output overflow;
module alu
(
input [31:0] operand0,
input [31:0] operand1,
input [3:0] control,
output reg [31:0] result,
output zero,
output overflow
);
always @(*)
begin
case(control)
4'b0000: result= operand0 | operand1; // OR
4'b0001: begin
result= operand0 & operand1; // AND
end
default : result =4'b0;
endcase
end
endmodule