OpenCores
URL https://opencores.org/ocsvn/t6507lp/t6507lp/trunk

Subversion Repositories t6507lp

[/] [t6507lp/] [trunk/] [rtl/] [verilog/] [t6507lp_alu.v] - Diff between revs 149 and 150

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 149 Rev 150
Line 70... Line 70...
`include "t6507lp_package.v"
`include "t6507lp_package.v"
 
 
always @ (posedge clk or negedge reset_n)
always @ (posedge clk or negedge reset_n)
begin
begin
        if (reset_n == 0) begin
        if (reset_n == 0) begin
                $display("RESTART");
                //$display("RESTART");
                alu_result <= 0;
                alu_result <= 0;
                alu_status[C] <= 0;
                alu_status[C] <= 0;
                alu_status[N] <= 0;
                alu_status[N] <= 0;
                alu_status[V] <= 0;
                alu_status[V] <= 0;
                alu_status[5] <= 1;
                alu_status[5] <= 1;
Line 161... Line 161...
                        begin
                        begin
                                alu_status[B] <= 0;
                                alu_status[B] <= 0;
                        end
                        end
                        PLP_IMP, RTI_IMP :
                        PLP_IMP, RTI_IMP :
                        begin
                        begin
                                alu_status <= alu_a;
                                alu_status[C] <= alu_a[C];
 
                                alu_status[Z] <= alu_a[Z];
 
                                alu_status[I] <= alu_a[I];
 
                                alu_status[D] <= alu_a[D];
 
                                alu_status[B] <= alu_a[B];
 
                                alu_status[V] <= alu_a[V];
 
                                alu_status[N] <= alu_a[N];
                        end
                        end
                        BIT_ZPG, BIT_ABS :
                        BIT_ZPG, BIT_ABS :
                        begin
                        begin
                                alu_status[Z] <= STATUS[Z];
                                alu_status[Z] <= STATUS[Z];
                                alu_status[V] <= alu_a[6];
                                alu_status[V] <= alu_a[6];
Line 186... Line 192...
end
end
 
 
always @ (*) begin
always @ (*) begin
        bcd1      = A;
        bcd1      = A;
        bcd2      = alu_a;
        bcd2      = alu_a;
        //result    = alu_result;
        result    = alu_result;
        //STATUS[C] = STATUS[C];
        STATUS[N] = alu_status[N];
        //STATUS[V] = STATUS[V];
        STATUS[C] = alu_status[C];
        //STATUS[B] = STATUS[B];
        STATUS[V] = alu_status[V];
        //STATUS[I] = STATUS[I];
        STATUS[B] = alu_status[B];
        //STATUS[D] = STATUS[D];
        STATUS[I] = alu_status[I];
 
        STATUS[D] = alu_status[D];
 
        STATUS[Z] = alu_status[Z];
 
        STATUS[N] = alu_status[N];
 
        STATUS[5] = alu_status[5];
 
 
        case (alu_opcode)
        case (alu_opcode)
                // BIT - Bit Test
                // BIT - Bit Test
                BIT_ZPG, BIT_ABS: begin
                BIT_ZPG, BIT_ABS: begin
                        result = A & alu_a;
                        result = A & alu_a;
Line 334... Line 344...
                                if (result[7:4] > 9) begin
                                if (result[7:4] > 9) begin
                                        result = result[7:4] + 6; // A = A - 10 and A = A + 16
                                        result = result[7:4] + 6; // A = A - 10 and A = A + 16
                                        STATUS[C] = 1;
                                        STATUS[C] = 1;
                                end
                                end
                        end
                        end
                        $display("op1 = %h op2 = %h result = %h", bcd1, bcd2, result);
                        //$display("op1 = %h op2 = %h result = %h", bcd1, bcd2, result);
                        $display("V = %b C = %b D = %b", STATUS[V], STATUS[C], STATUS[D]);
                        //$display("V = %b C = %b D = %b", STATUS[V], STATUS[C], STATUS[D]);
                end
                end
 
 
                // AND - Logical AND
                // AND - Logical AND
                AND_IMM, AND_ZPG, AND_ZPX, AND_ABS, AND_ABX, AND_ABY, AND_IDX, AND_IDY : begin
                AND_IMM, AND_ZPG, AND_ZPX, AND_ABS, AND_ABX, AND_ABY, AND_IDX, AND_IDY : begin
                        result = A & alu_a;
                        result = A & alu_a;

powered by: WebSVN 2.1.0

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