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

Subversion Repositories next186

[/] [next186/] [trunk/] [Next186_ALU.v] - Diff between revs 2 and 9

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

Rev 2 Rev 9
Line 69... Line 69...
//      PASS RB         11_111  // ALUOP <- RB, FLAGS <- RA
//      PASS RB         11_111  // ALUOP <- RB, FLAGS <- RA
//
//
//
//
//  FLAGS:              X X X X OF DF IF TF  |  SF ZF X AF X PF X CF
//  FLAGS:              X X X X OF DF IF TF  |  SF ZF X AF X PF X CF
//
//
 
// 09Feb2013 - fixed DAA,DAS bug
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
`timescale 1ns / 1ps
`timescale 1ns / 1ps
 
 
module Next186_ALU(
module Next186_ALU(
    input [15:0] RA,
    input [15:0] RA,
Line 108... Line 109...
        wire parity = ~^ALUOUT[7:0];
        wire parity = ~^ALUOUT[7:0];
        wire zero8 = ~|ALUOUT[7:0];
        wire zero8 = ~|ALUOUT[7:0];
        wire zero = ~|ALUOUT[15:0];
        wire zero = ~|ALUOUT[15:0];
        wire overflow8 = (SUMOP1[7] & SUMOP2[7] & !SUMOUT[7]) | (!SUMOP1[7] & !SUMOP2[7] & SUMOUT[7]);
        wire overflow8 = (SUMOP1[7] & SUMOP2[7] & !SUMOUT[7]) | (!SUMOP1[7] & !SUMOP2[7] & SUMOUT[7]);
        wire overflow = (SUMOP1[15] & SUMOP2[15] & !SUMOUT[15]) | (!SUMOP1[15] & !SUMOP2[15] & SUMOUT[15]);
        wire overflow = (SUMOP1[15] & SUMOP2[15] & !SUMOUT[15]) | (!SUMOP1[15] & !SUMOP2[15] & SUMOUT[15]);
        wire LO9 = RA[3:0] > 9;
        wire LONIBBLE = (RA[3:0] > 4'h9)  || FIN[4];
        wire LONIBBLE =  LO9 | FIN[4];
        wire HINIBBLE = (RA[7:0] > 8'h99) || FIN[0];
        wire HINIBBLE = (RA[7:4] > 8 && LO9) | FIN[0];
 
 
 
// ADDER                
// ADDER                
        assign {AF, SUMOUT[3:0]} = SUMOP1[3:0] + SUMOP2[3:0] + SCIN;
        assign {AF, SUMOUT[3:0]} = SUMOP1[3:0] + SUMOP2[3:0] + SCIN;
        assign {SC8OUT, SUMOUT[7:4]} = SUMOP1[7:4] + SUMOP2[7:4] + AF;
        assign {SC8OUT, SUMOUT[7:4]} = SUMOP1[7:4] + SUMOP2[7:4] + AF;
        assign {SC16OUT, SUMOUT[15:8]} = SUMOP1[15:8] + SUMOP2[15:8] + SC8OUT;
        assign {SC16OUT, SUMOUT[15:8]} = SUMOP1[15:8] + SUMOP2[15:8] + SC8OUT;
Line 205... Line 205...
                                ALUOUT = SUMOUT;
                                ALUOUT = SUMOUT;
                                FOUT[0] = FIN[0];
                                FOUT[0] = FIN[0];
                        end
                        end
                        5'b01100, 5'b01101: begin       // DAA, DAS
                        5'b01100, 5'b01101: begin       // DAA, DAS
                                ALUOUT = SUMOUT;
                                ALUOUT = SUMOUT;
                                FOUT[0] = HINIBBLE ? 1'b1 : FIN[0];
                                FOUT[0] = HINIBBLE;
                                FOUT[4] = LONIBBLE ? 1'b1 : FIN[4];
                                FOUT[4] = LONIBBLE;
                        end
                        end
                        5'b01110, 5'b01111: begin       // AAA, AAS
                        5'b01110, 5'b01111: begin       // AAA, AAS
                                ALUOUT = {SUMOUT[15:8], 4'b0000, SUMOUT[3:0]};
                                ALUOUT = {SUMOUT[15:8], 4'b0000, SUMOUT[3:0]};
                                FOUT[0] = LONIBBLE;
                                FOUT[0] = LONIBBLE;
                                FOUT[4] = LONIBBLE;
                                FOUT[4] = LONIBBLE;

powered by: WebSVN 2.1.0

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