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 178 to Rev 179
- ↔ Reverse comparison
Rev 178 → Rev 179
/t6507lp_alu.v
418,6 → 418,32
// SBC - Subtract with Carry |
SBC_IMM, SBC_ZPG, SBC_ZPX, SBC_ABS, SBC_ABX, SBC_ABY, SBC_IDX, SBC_IDY : begin |
if (alu_status[D] == 1) begin |
op2 = ~op2; |
AL = A[3:0] + alu_a[3:0] + alu_status[C]; |
AH = A[7:4] + alu_a[7:4]; |
if (AL > 9) begin |
bcdh = AH + (AL / 10); |
bcdl = AL % 10; |
end |
else begin |
bcdh = AH; |
bcdl = AL; |
end |
if (bcdh > 9) begin |
STATUS[C] = 1; |
bcdh2 = bcdh % 10; |
end |
else begin |
STATUS[C] = 0; |
bcdh2 = bcdh; |
end |
result = {bcdh2[3:0],bcdl[3:0]}; |
end |
else begin |
//$display("MODO NORMAL"); |
{STATUS[C],result} = op1 + op2 + alu_status[C]; |
end |
/* if (alu_status[D] == 1) begin |
bcdl = op1[3:0] - op2[3:0] - (1 - alu_status[C]); |
bcdh = op1[7:4] - op2[7:4]; |
if (bcdl > 9) begin |
435,7 → 461,7
result = op1 + op2 + alu_status[C]; |
STATUS[C] = ~result[7]; |
end |
|
*/ |
|
if ((op1[7] == sign) && (op1[7] != result[7])) |
STATUS[V] = 1; |
/t6507lp_alu_tb.v
110,7 → 110,6
check; |
end |
|
/* |
// BCD |
// LDA |
alu_a = 0; |
171,9 → 170,14
alu_status_expected[N] = alu_result_expected[7]; |
alu_status_expected[V] = ((alu_a[7] == sign) && (alu_a[7] != alu_result_expected[7])); |
check; |
end |
*/ |
|
end |
$stop |
// CLD |
alu_opcode = CLD_IMP; |
@(negedge clk); |
alu_status_expected[D] = 0; |
check; |
|
// ASL |
alu_opcode = ASL_ABS; |
for (i = 0; i < 1000; i = i + 1) |
210,11 → 214,11
//$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); |
$display("result_expected = %d",alu_result_expected); |
//$display("result_expected = %d",alu_result_expected); |
alu_result_expected = alu_a ^ alu_result_expected; |
alu_status_expected[Z] = (alu_result_expected == 0) ? 1 : 0; |
alu_status_expected[N] = alu_result_expected[7]; |
$display("result_expected = %d", alu_result_expected); |
//$display("result_expected = %d", alu_result_expected); |
check; |
end |
|
271,7 → 275,7
alu_a = i; |
@(negedge clk); |
alu_x_expected = alu_a; |
$display("alu_x_expected = %h", alu_x_expected); |
//$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]; |
288,7 → 292,7
alu_a = i; |
@(negedge clk); |
alu_y_expected = alu_a; |
$display("alu_y_expected = %h", alu_y_expected); |
//$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]; |
318,7 → 322,7
begin |
alu_a = i; |
@(negedge clk); |
$display("alu_x_expected = %h", alu_x_expected); |
//$display("alu_x_expected = %h", alu_x_expected); |
//alu_result_expected = i; |
//alu_x_expected = alu_a; |
//$display("i = %d alu_opcode = %h alu_enable = %d", i, alu_opcode, alu_enable); |
333,7 → 337,7
begin |
alu_a = i; |
@(negedge clk); |
$display("alu_y_expected = %h", alu_y_expected); |
//$display("alu_y_expected = %h", alu_y_expected); |
//alu_result_expected = i; |
//alu_y_expected = alu_a; |
//$display("i = %d alu_opcode = %h alu_enable = %d", i, alu_opcode, alu_enable); |