OpenCores
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 163 to Rev 164
    Reverse comparison

Rev 163 → Rev 164

/t6507lp_alu.v
68,8 → 68,10
reg [7:0] op2;
reg [7:0] bcdl;
reg [7:0] bcdh;
reg [7:0] bcdh2;
reg [7:0] AL;
reg [7:0] AH;
 
 
`include "t6507lp_package.v"
 
always @ (posedge clk or negedge reset_n)
321,17 → 323,17
// TODO: verify synthesis for % operand
ADC_IMM, ADC_ZPG, ADC_ZPX, ADC_ABS, ADC_ABX, ADC_ABY, ADC_IDX, ADC_IDY : begin
if (alu_status[D] == 1) begin
bcdl = A[3:0] + alu_a[3:0] + alu_status[C];
bcdh = A[7:4] + alu_a[7:4];
if (bcdl > 9) begin
bcdh = bcdh + bcdl[5:4];
bcdl = bcdl % 10;
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
if (bcdh > 9) begin
if (AH > 9) begin
STATUS[C] = 1;
bcdh = bcdh % 10;
bcdh2 = bcdh % 10;
end
result = {bcdh[3:0],bcdl[3:0]};
result = {bcdh2[3:0],bcdl[3:0]};
end
else
{STATUS[C],result} = op1 + op2 + alu_status[C];
/t6507lp_alu_tb.v
19,9 → 19,14
reg [7:0] alu_x_expected;
reg [7:0] alu_y_expected;
 
reg c_aux;
reg C_in;
reg [7:0] temp;
reg sign;
reg [3:0] AL;
reg [3:0] AH;
reg [3:0] BL;
reg [3:0] BH;
reg [7:0] alu_result_expected_temp;
 
t6507lp_alu DUT (
.clk (clk),
105,7 → 110,7
check();
end
 
/* // BCD
// BCD
// LDA
alu_a = 0;
alu_opcode = LDA_IMM;
114,8 → 119,14
@(negedge clk);
alu_result_expected = 8'h00;
// NV1BDIZC
alu_status_expected = 8'b00101010;
alu_status_expected[N] = 0;
alu_status_expected[Z] = 1;
check();
// SED
alu_opcode = SED_IMP;
@(negedge clk);
alu_status_expected[D] = 1;
check();
 
// ADC
alu_opcode = ADC_IMM;
123,17 → 134,43
begin
alu_a = $random;
@(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], DUT.result);
$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], DUT.result);
sign = alu_result_expected[7];
{alu_status_expected[C], alu_result_expected} = alu_a + alu_result_expected + alu_status_expected[C];
AL = alu_a[3:0];
AH = alu_a[7:4];
BL = alu_result_expected[3:0];
BH = alu_result_expected[7:4];
if ( AL > 9 ) begin
AL = AL - 10;
AH = AH + 1;
end
if (AH > 9) begin
AH = AH - 10;
end
if ( BL > 9 ) begin
BL = BL - 10;
BH = BH + 1;
end
if ( BH > 9 ) begin
BH = BH - 10;
end
{C_in,alu_result_expected_temp[3:0]} = AL + BL + alu_status_expected[C];
{alu_status_expected[C],alu_result_expected_temp[7:4]} = AH + BH + C_in;
if ( alu_result_expected_temp[3:0] > 9 ) begin
alu_result_expected[3:0] = alu_result_expected_temp[3:0] - 10;
alu_result_expected[7:4] = alu_result_expected_temp[7:4] + 1;
end
if ( alu_result_expected_temp[7:4] > 9 ) begin
alu_result_expected[7:4] = alu_result_expected_temp[7:4] - 10;
end
alu_status_expected[Z] = (alu_result_expected == 0) ? 1 : 0;
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
*/
 
// ASL
alu_opcode = ASL_ABS;

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.