|
|
|
|
module test_alu;
|
|
|
|
|
initial begin
|
|
|
|
|
$dumpfile("test.vcd");
|
|
|
|
|
$dumpvars(0, test_alu);
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
`define assert(signal, value) \
|
|
|
|
|
if (signal !== value) begin \
|
|
|
|
|
$display("ASSERTION FAILED in %m: signal != value"); \
|
|
|
|
|
$finish; \
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
reg [7:0] A;
|
|
|
|
|
reg [7:0] B;
|
|
|
|
|
reg C;
|
|
|
|
|
reg [2:0] op_sel;
|
|
|
|
|
|
|
|
|
|
wire [7:0] result;
|
|
|
|
|
wire r_z;
|
|
|
|
|
wire r_n;
|
|
|
|
|
wire r_c;
|
|
|
|
|
wire r_v;
|
|
|
|
|
|
|
|
|
|
`include "parameters.vh"
|
|
|
|
|
|
|
|
|
|
alu my_alu(
|
|
|
|
|
.A(A),
|
|
|
|
|
.B(B),
|
|
|
|
|
.C(C),
|
|
|
|
|
.sel(op_sel),
|
|
|
|
|
.result(result),
|
|
|
|
|
.r_z(r_z),
|
|
|
|
|
.r_n(r_n),
|
|
|
|
|
.r_c(r_c),
|
|
|
|
|
.r_v(r_v));
|
|
|
|
|
|
|
|
|
|
initial begin
|
|
|
|
|
|
|
|
|
|
// Testing OR
|
|
|
|
|
#10 A = 8'h11;
|
|
|
|
|
B = 8'h22;
|
|
|
|
|
C = 0;
|
|
|
|
|
op_sel = OP_OR;
|
|
|
|
|
|
|
|
|
|
#2 `assert (result, 8'h33);
|
|
|
|
|
|
|
|
|
|
// Testing AND
|
|
|
|
|
#2 op_sel = OP_AND;
|
|
|
|
|
|
|
|
|
|
#2 `assert (result, 8'h00);
|
|
|
|
|
|
|
|
|
|
// Testing EOR
|
|
|
|
|
#2 op_sel = OP_EOR;
|
|
|
|
|
|
|
|
|
|
#2 `assert (result, 8'h33);
|
|
|
|
|
|
|
|
|
|
#2 A = 8'h22;
|
|
|
|
|
B = 8'h22;
|
|
|
|
|
|
|
|
|
|
#2 `assert (result, 8'h00);
|
|
|
|
|
|
|
|
|
|
// Testing ADC
|
|
|
|
|
// Without carry
|
|
|
|
|
#2 op_sel = OP_ADC;
|
|
|
|
|
|
|
|
|
|
#2 A = 8'h22;
|
|
|
|
|
B = 8'h22;
|
|
|
|
|
C = 0;
|
|
|
|
|
|
|
|
|
|
#2 `assert (result, 8'h44);
|
|
|
|
|
|
|
|
|
|
// With carry
|
|
|
|
|
#2 C = 1;
|
|
|
|
|
|
|
|
|
|
#2 `assert (result, 8'h45);
|
|
|
|
|
|
|
|
|
|
#2 A = 8'hf0;
|
|
|
|
|
B = 8'h10;
|
|
|
|
|
C = 0;
|
|
|
|
|
|
|
|
|
|
#2 `assert (r_c, 1);
|
|
|
|
|
|
|
|
|
|
// Test SUB
|
|
|
|
|
#2 op_sel = OP_SUB;
|
|
|
|
|
A = 8'hf0;
|
|
|
|
|
B = 8'h10;
|
|
|
|
|
C = 0;
|
|
|
|
|
#2 `assert (result, 8'hdf);
|
|
|
|
|
|
|
|
|
|
#2 C = 1;
|
|
|
|
|
|
|
|
|
|
#2 `assert (result, 8'he0);
|
|
|
|
|
|
|
|
|
|
// Test ROT
|
|
|
|
|
#2 op_sel = OP_ROT;
|
|
|
|
|
|
|
|
|
|
A = 8'hf0;
|
|
|
|
|
B = SHIFT_LEFT;
|
|
|
|
|
C = 1;
|
|
|
|
|
|
|
|
|
|
#2 `assert (result, 8'he1);
|
|
|
|
|
`assert (r_c, 1);
|
|
|
|
|
|
|
|
|
|
#2 C = 0;
|
|
|
|
|
|
|
|
|
|
#2 `assert (result, 8'he0);
|
|
|
|
|
|
|
|
|
|
#2 B = SHIFT_RIGHT;
|
|
|
|
|
C = 0;
|
|
|
|
|
|
|
|
|
|
#2 `assert (result, 8'h78);
|
|
|
|
|
|
|
|
|
|
#2 A = 8'hf1;
|
|
|
|
|
C = 1;
|
|
|
|
|
|
|
|
|
|
#2 `assert (result, 8'hf8);
|
|
|
|
|
`assert (r_c, 1);
|
|
|
|
|
|
|
|
|
|
// Test SHF
|
|
|
|
|
#2 op_sel = OP_SHF;
|
|
|
|
|
A = 8'hf9;
|
|
|
|
|
B = SHIFT_LEFT;
|
|
|
|
|
#1 `assert (result, 8'hf2);
|
|
|
|
|
|
|
|
|
|
B = SHIFT_RIGHT;
|
|
|
|
|
#1 `assert (result, 8'h7c);
|
|
|
|
|
|
|
|
|
|
#500 $finish;
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
endmodule
|