34 lines
669 B
Coq
34 lines
669 B
Coq
![]() |
`define ADD 4'd0
|
||
|
`define LESS 4'd1
|
||
|
`define EQ 4'd2
|
||
|
`define OR 4'd3
|
||
|
`define AND 4'd4
|
||
|
`define NOT 4'd5
|
||
|
`define MUL 4'd6
|
||
|
`define DIV 4'd7
|
||
|
`define MOD 4'd8
|
||
|
|
||
|
module ALU(opcode, op_a, op_b, result);
|
||
|
parameter N = 32;
|
||
|
input [3:0] opcode;
|
||
|
input [N-1:0] op_a, op_b;
|
||
|
output [N-1:0] result;
|
||
|
|
||
|
reg [N-1:0] result;
|
||
|
|
||
|
always @* begin
|
||
|
case (opcode)
|
||
|
`ADD: result = op_a + op_b;
|
||
|
`LESS: result = op_a < op_b;
|
||
|
`EQ: result = op_a == op_b;
|
||
|
`OR: result = op_a | op_b;
|
||
|
`AND: result = op_a & op_b;
|
||
|
`NOT: result = !op_a;
|
||
|
`MUL: result = op_a * op_b;
|
||
|
`DIV: result = op_a / op_b;
|
||
|
`MOD: result = op_a % op_b;
|
||
|
default: result = 0;
|
||
|
endcase
|
||
|
end
|
||
|
|
||
|
endmodule
|