Verilog 实现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给定的特定功能代码

由于某些原因,下面的代码无法运行,并且根据编译器的说明存在错误

错误(可抑制):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)中声明。

错误:(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