Files
ComputerComposition/Experiments/Shared/ALU.v
2025-11-06 09:35:54 +08:00

31 lines
890 B
Verilog

module ALU(
input [31:0] a,
input [31:0] b,
input [2:0] AluCtrl,
output reg [31:0] AddResult,
output reg Zero
);
parameter ADD = 3'b000;
parameter SUB = 3'b001;
parameter AND = 3'b010;
parameter OR = 3'b011;
parameter NOR = 3'b100;
parameter SLT = 3'b101;
parameter SLTU = 3'b110;
parameter PASSB= 3'b111;
always @(*) begin
case (AluCtrl)
ADD: AddResult = a + b;
SUB: AddResult = a - b;
AND: AddResult = a & b;
OR: AddResult = a | b;
NOR: AddResult = ~(a | b);
SLT: AddResult = ($signed(a) < $signed(b)) ? 32'd1 : 32'd0;
SLTU: AddResult = (a < b) ? 32'd1 : 32'd0;
PASSB:AddResult = b;
default: AddResult = 32'hxxxxxxxx;
endcase
Zero = (AddResult == 32'd0);
end
endmodule