URL
https://opencores.org/ocsvn/t6507lp/t6507lp/trunk
Subversion Repositories t6507lp
Compare Revisions
- This comparison shows the changes necessary to convert path
/t6507lp/trunk/rtl/verilog
- from Rev 176 to Rev 178
- ↔ Reverse comparison
Rev 176 → Rev 178
/t6507lp_alu.v
130,10 → 130,15
begin |
alu_status <= STATUS; |
end |
PHA_IMP : |
begin |
PHA_IMP, STA_ZPG, STA_ZPX, STA_ABS, STA_ABX, STA_ABY, STA_IDX, STA_IDY : begin |
alu_result <= result; |
end |
STX_ZPG, STX_ZPY, STX_ABS : begin |
alu_x <= result; |
end |
STY_ZPG, STY_ZPX, STY_ABS : begin |
alu_y <= result; |
end |
SEC_IMP : |
begin |
alu_status[C] <= 1; |
412,11 → 417,9
|
// SBC - Subtract with Carry |
SBC_IMM, SBC_ZPG, SBC_ZPX, SBC_ABS, SBC_ABX, SBC_ABY, SBC_IDX, SBC_IDY : begin |
op2 = ~alu_a; |
if (alu_status[D] == 1) begin |
|
bcdl = op1[3:0] + op2[3:0] + alu_status[C]; |
bcdh = op1[7:4] + op2[7:4]; |
bcdl = op1[3:0] - op2[3:0] - (1 - alu_status[C]); |
bcdh = op1[7:4] - op2[7:4]; |
if (bcdl > 9) begin |
bcdh = bcdh + bcdl[5:4]; |
bcdl = bcdl % 10; |
428,7 → 431,8
result = {bcdh[3:0],bcdl[3:0]}; |
end |
else begin |
{C_aux,result} = op1 + op2 + alu_status[C]; |
op2 = ~alu_a; |
result = op1 + op2 + alu_status[C]; |
STATUS[C] = ~result[7]; |
end |
|
/t6507lp_alu_tb.v
270,7 → 270,8
begin |
alu_a = i; |
@(negedge clk); |
alu_x_expected = i; |
alu_x_expected = alu_a; |
$display("alu_x_expected = %h", alu_x_expected); |
//alu_result_expected = i; |
alu_status_expected[Z] = (alu_x_expected == 0) ? 1 : 0; |
alu_status_expected[N] = alu_x_expected[7]; |
286,7 → 287,8
begin |
alu_a = i; |
@(negedge clk); |
alu_y_expected = i; |
alu_y_expected = alu_a; |
$display("alu_y_expected = %h", alu_y_expected); |
//alu_result_expected = i; |
alu_status_expected[Z] = (alu_y_expected == 0) ? 1 : 0; |
alu_status_expected[N] = alu_y_expected[7]; |
305,6 → 307,8
//$display("i = %d alu_opcode = %h alu_enable = %d", i, alu_opcode, alu_enable); |
//$display("DUT.A = %h DUT.X = %h DUT.Y = %h", DUT.A, DUT.X, DUT.Y); |
//$display("op1 = %d op2 = %d c = %d d = %d n = %d v = %d result = %d", alu_a, DUT.A, alu_status[C], alu_status[D], alu_status[N], alu_status[V], alu_result); |
//alu_result_expected = alu_a; |
//alu_result_expected = DUT.A; |
check; |
end |
|
314,8 → 318,9
begin |
alu_a = i; |
@(negedge clk); |
$display("alu_x_expected = %h", alu_x_expected); |
//alu_result_expected = i; |
//alu_x_expected = i; |
//alu_x_expected = alu_a; |
//$display("i = %d alu_opcode = %h alu_enable = %d", i, alu_opcode, alu_enable); |
//$display("DUT.A = %h DUT.X = %h DUT.Y = %h", DUT.A, DUT.X, DUT.Y); |
//$display("op1 = %d op2 = %d c = %d d = %d n = %d v = %d result = %d", alu_a, DUT.A, alu_status[C], alu_status[D], alu_status[N], alu_status[V], alu_result); |
328,8 → 333,9
begin |
alu_a = i; |
@(negedge clk); |
$display("alu_y_expected = %h", alu_y_expected); |
//alu_result_expected = i; |
//alu_y_expected = i; |
//alu_y_expected = alu_a; |
//$display("i = %d alu_opcode = %h alu_enable = %d", i, alu_opcode, alu_enable); |
//$display("DUT.A = %h DUT.X = %h DUT.Y = %h", DUT.A, DUT.X, DUT.Y); |
//$display("op1 = %d op2 = %d c = %d d = %d n = %d v = %d result = %d", alu_a, DUT.A, alu_status[C], alu_status[D], alu_status[N], alu_status[V], alu_result); |
557,7 → 563,26
alu_status_expected[I] = alu_a[I]; |
check; |
end |
|
|
// PLP |
alu_opcode = PLP_IMP; |
for (i = 0; i < 1000; i = i + 1) |
begin |
alu_a = i; |
@(negedge clk); |
//$display("i = %d alu_opcode = %h alu_enable = %d", i, alu_opcode, alu_enable); |
//$display("DUT.A = %h DUT.X = %h DUT.Y = %h", DUT.A, DUT.X, DUT.Y); |
//$display("op1 = %d op2 = %d c = %d d = %d n = %d v = %d result = %d", alu_a, DUT.A, alu_status[C], alu_status[D], alu_status[N], alu_status[V], alu_result); |
alu_status_expected[C] = alu_a[C]; |
alu_status_expected[Z] = alu_a[Z]; |
alu_status_expected[N] = alu_a[N]; |
alu_status_expected[V] = alu_a[V]; |
alu_status_expected[B] = alu_a[B]; |
alu_status_expected[D] = alu_a[D]; |
alu_status_expected[I] = alu_a[I]; |
check; |
end |
|
// PHA |
alu_opcode = PHA_IMP; |
@(negedge clk); |
564,7 → 589,8
//$display("i = %d alu_opcode = %h alu_enable = %d", i, alu_opcode, alu_enable); |
//$display("DUT.A = %h DUT.X = %h DUT.Y = %h", DUT.A, DUT.X, DUT.Y); |
//$display("op1 = %d op2 = %d c = %d d = %d n = %d v = %d result = %d", alu_a, DUT.A, alu_status[C], alu_status[D], alu_status[N], alu_status[V], alu_result); |
alu_result_expected = DUT.A; |
//alu_result_expected = DUT.A; |
alu_result_expected = alu_a; |
check; |
|
// PHP |