alu
This commit is contained in:
parent
cba979bf0f
commit
b407d22c78
2 changed files with 63 additions and 0 deletions
34
06-alu/alu.v
Normal file
34
06-alu/alu.v
Normal file
|
@ -0,0 +1,34 @@
|
|||
`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
|
29
06-alu/alu_tb.v
Normal file
29
06-alu/alu_tb.v
Normal file
|
@ -0,0 +1,29 @@
|
|||
module alu_tb;
|
||||
|
||||
parameter N = 32;
|
||||
reg [N-1:0] op_a;
|
||||
reg [N-1:0] op_b;
|
||||
reg [3:0] opcode;
|
||||
wire [N-1:0] result;
|
||||
|
||||
initial begin
|
||||
opcode = 3'd0;
|
||||
op_a = 2;
|
||||
op_b = 3;
|
||||
#2 opcode = 4'd1;
|
||||
#2 opcode = 4'd2;
|
||||
#2 opcode = 4'd3;
|
||||
#2 opcode = 4'd4;
|
||||
#2 opcode = 4'd5;
|
||||
#2 opcode = 4'd6;
|
||||
#2 opcode = 4'd7;
|
||||
#2 opcode = 4'd8;
|
||||
#2 opcode = 4'd8;
|
||||
end
|
||||
|
||||
ALU c1 (opcode, op_a, op_b, result);
|
||||
|
||||
initial
|
||||
$monitor("Opcode = %h | Op A = %h | Op B = %h | Result = %h", opcode, op_a, op_b,result);
|
||||
|
||||
endmodule
|
Loading…
Add table
Add a link
Reference in a new issue