29 lines
464 B
Coq
29 lines
464 B
Coq
|
/*
|
||
|
A and B are inputs, O is out
|
||
|
OP is the operation to perform:
|
||
|
000 = add
|
||
|
001 = sub
|
||
|
010 = mul
|
||
|
(011)
|
||
|
100 = and
|
||
|
101 = or
|
||
|
110 = xor
|
||
|
111 = not A
|
||
|
*/
|
||
|
module alu(
|
||
|
input [31:0] A,
|
||
|
input [31:0] B,
|
||
|
input [2:0] op,
|
||
|
output [31:0] O,
|
||
|
output Cout,
|
||
|
output Fzero
|
||
|
);
|
||
|
|
||
|
wire subtraction = op == 3'b001;
|
||
|
wire [31:0] adder_B = subtraction ? ~B : B;
|
||
|
|
||
|
carry_select_adder a(A, adder_B, subtraction, O, Cout);
|
||
|
assign Fzero = & O;
|
||
|
|
||
|
endmodule
|