6502 implementation in SystemVerilog
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

133 lines
1.9 KiB

2 years ago
module test_alu;
initial begin
$dumpfile("test.vcd");
$dumpvars(0, test_alu);
end
2 years ago
`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;
2 years ago
wire [7:0] result;
wire r_z;
wire r_n;
wire r_c;
wire r_v;
2 years ago
`include "parameters.vh"
2 years ago
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));
2 years ago
initial begin
2 years ago
// Testing OR
#10 A = 8'h11;
B = 8'h22;
C = 0;
op_sel = OP_OR;
2 years ago
#2 `assert (result, 8'h33);
2 years ago
// Testing AND
#2 op_sel = OP_AND;
2 years ago
#2 `assert (result, 8'h00);
2 years ago
// Testing EOR
#2 op_sel = OP_EOR;
2 years ago
#2 `assert (result, 8'h33);
2 years ago
#2 A = 8'h22;
B = 8'h22;
2 years ago
#2 `assert (result, 8'h00);
2 years ago
// Testing ADC
// Without carry
#2 op_sel = OP_ADC;
2 years ago
#2 A = 8'h22;
B = 8'h22;
C = 0;
2 years ago
#2 `assert (result, 8'h44);
2 years ago
// With carry
#2 C = 1;
2 years ago
#2 `assert (result, 8'h45);
2 years ago
#2 A = 8'hf0;
B = 8'h10;
C = 0;
2 years ago
#2 `assert (r_c, 1);
2 years ago
// Test SUB
#2 op_sel = OP_SUB;
A = 8'hf0;
B = 8'h10;
C = 0;
#2 `assert (result, 8'hdf);
2 years ago
#2 C = 1;
2 years ago
#2 `assert (result, 8'he0);
2 years ago
// Test ROT
#2 op_sel = OP_ROT;
2 years ago
A = 8'hf0;
B = SHIFT_LEFT;
C = 1;
2 years ago
#2 `assert (result, 8'he1);
`assert (r_c, 1);
2 years ago
#2 C = 0;
2 years ago
#2 `assert (result, 8'he0);
2 years ago
#2 B = SHIFT_RIGHT;
C = 0;
2 years ago
#2 `assert (result, 8'h78);
2 years ago
#2 A = 8'hf1;
C = 1;
2 years ago
#2 `assert (result, 8'hf8);
`assert (r_c, 1);
2 years ago
// Test SHF
#2 op_sel = OP_SHF;
A = 8'hf9;
B = SHIFT_LEFT;
#1 `assert (result, 8'hf2);
2 years ago
B = SHIFT_RIGHT;
#1 `assert (result, 8'h7c);
#500 $finish;
end
2 years ago
endmodule