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

Subversion Repositories aemb

[/] [aemb/] [trunk/] [rtl/] [verilog/] [aeMB2_intu.v] - Diff between revs 150 and 158

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

Rev 150 Rev 158
Line 1... Line 1...
/* $Id: aeMB2_intu.v,v 1.6 2008-04-28 08:15:25 sybreon Exp $
/* $Id: aeMB2_intu.v,v 1.7 2008-05-01 12:00:18 sybreon Exp $
**
**
** AEMB2 EDK 6.2 COMPATIBLE CORE
** AEMB2 EDK 6.2 COMPATIBLE CORE
** Copyright (C) 2004-2008 Shawn Tan <shawn.tan@aeste.net>
** Copyright (C) 2004-2008 Shawn Tan <shawn.tan@aeste.net>
**
**
** This file is part of AEMB.
** This file is part of AEMB.
Line 97... Line 97...
   wire [31:0]           wADD;
   wire [31:0]           wADD;
   wire                 wADC;
   wire                 wADC;
 
 
   wire                 fCCC = !opc_of[5] & opc_of[1]; // & !opc_of[4]
   wire                 fCCC = !opc_of[5] & opc_of[1]; // & !opc_of[4]
   wire                 fSUB = !opc_of[5] & opc_of[0]; // & !opc_of[4]
   wire                 fSUB = !opc_of[5] & opc_of[0]; // & !opc_of[4]
   wire                 fCMP = !opc_of[3] & imm_of[1]; // & imm_of[0]; // unsigned
   wire                 fCMP = !opc_of[3] & imm_of[1]; // unsigned only
   wire                 wCMP = (fCMP) ? (opa_of > opb_of) : wADD[31];
   wire                 wCMP = (fCMP) ? !wADC : wADD[31]; // cmpu adjust
 
 
   wire [31:0]           wOPA = (fSUB) ? ~opa_of : opa_of;
   wire [31:0]           wOPA = (fSUB) ? ~opa_of : opa_of;
   wire                 wOPC = (fCCC) ? rMSR_CC : fSUB;
   wire                 wOPC = (fCCC) ? rMSR_CC : fSUB;
 
 
   assign               {wADC, wADD} = (opb_of + wOPA) + wOPC; // add carry
   assign               {wADC, wADD} = (opb_of + wOPA) + wOPC; // add carry
 
 
   always @(/*AUTOSENSE*/wADC or wADD or wCMP) begin
   always @(/*AUTOSENSE*/wADC or wADD or wCMP) begin
      {add_c, add_ex} <= #1 {wADC, wCMP, wADD[30:0]}; // add with carry
      {add_c, add_ex} <= #1 {wADC, wCMP, wADD[30:0]}; // add with carry
                         //(!opc_of[3] & imm_of[0]) ? 
 
                         //{wADC, wCMP , wADD[30:0]} : // add with carry
 
                         //{wADC, wADD[31:0]} ; // add with carry
 
   end
   end
 
 
   // SHIFT/LOGIC/MOVE
   // SHIFT/LOGIC/MOVE
   reg [31:0]            slm_ex;
   reg [31:0]            slm_ex;
 
 
Line 208... Line 205...
 
 
   wire       fBRKI = (opc_of == 6'o56) & (ra_of[4:0] == 5'hD);
   wire       fBRKI = (opc_of == 6'o56) & (ra_of[4:0] == 5'hD);
   wire       fBRKB = ((opc_of == 6'o46) | (opc_of == 6'o56)) & (ra_of[4:0] == 5'hC);
   wire       fBRKB = ((opc_of == 6'o46) | (opc_of == 6'o56)) & (ra_of[4:0] == 5'hC);
 
 
   wire       fMOV = (opc_of == 6'o45);
   wire       fMOV = (opc_of == 6'o45);
   //wire       fMOV = opc_of[5] & !opc_of[4] & !opc_of[3] & opc_of[2] & !opc_of[1] & opc_of[0];
 
   //wire           fMOV = ({!opc_of[5], opc_of[4:3], !opc_of[2], opc_of[1], !opc_of[0]} == 6'd0);   
 
   wire       fMTS = fMOV & &imm_of[15:14];
   wire       fMTS = fMOV & &imm_of[15:14];
   wire       fMOP = fMOV & ~|imm_of[15:14];
   wire       fMOP = fMOV & ~|imm_of[15:14];
 
 
   reg [31:0] sfr_ex;
   reg [31:0] sfr_ex;
 
 
Line 244... Line 239...
                   rMSR_BIP,
                   rMSR_BIP,
                   rMSR_CC,
                   rMSR_CC,
                   rMSR_IE,
                   rMSR_IE,
                   rMSR_BE
                   rMSR_BE
                   };
                   };
        /*
 
        rMSR_DTE <= #1
 
                   (fMTS) ? opa_of[7] :
 
                   (fMOP) ? wRES[7] :
 
                   rMSR_DTE;
 
 
 
        rMSR_ITE <= #1
 
                   (fMTS) ? opa_of[5] :
 
                   (fMOP) ? wRES[5] :
 
                   rMSR_ITE;
 
 
 
        rMSR_MTX <= #1
 
                   (fMTS) ? opa_of[4] :
 
                   (fMOP) ? wRES[4] :
 
                   rMSR_MTX;
 
 
 
        rMSR_BE <= #1
 
                   (fMTS) ? opa_of[0] :
 
                   (fMOP) ? wRES[0] :
 
                   rMSR_BE;
 
         */
 
 
 
        case ({fMTS, fMOP})
        rMSR_DTE <= #1
          2'o2: {rMSR_DTE,
                   (fMTS) ? opa_of[7] :
                 rMSR_ITE,
                   (fMOP) ? wRES[7] :
                 rMSR_MTX,
                   rMSR_DTE;
                 rMSR_BE} <= #1 {opa_of[7],
 
                                 opa_of[5],
        rMSR_ITE <= #1
                                 opa_of[4],
                   (fMTS) ? opa_of[5] :
                                 opa_of[0]};
                   (fMOP) ? wRES[5] :
          2'o1: {rMSR_DTE,
                   rMSR_ITE;
                 rMSR_ITE,
 
                 rMSR_MTX,
        rMSR_MTX <= #1
                 rMSR_BE} <= #1 {wRES[7],
                   (fMTS) ? opa_of[4] :
                                 wRES[5],
                   (fMOP) ? wRES[4] :
                                 wRES[4],
                   rMSR_MTX;
                                 wRES[0]};
 
          default: {rMSR_DTE,
        rMSR_BE <= #1
                    rMSR_ITE,
                   (fMTS) ? opa_of[0] :
                    rMSR_MTX,
                   (fMOP) ? wRES[0] :
                    rMSR_BE} <= #1 {rMSR_DTE,
                   rMSR_BE;
                                    rMSR_ITE,
 
                                    rMSR_MTX,
 
                                    rMSR_BE};
 
        endcase // case ({fMTS, fMOP})
 
 
 
        case ({fMTS, fMOP})
 
          2'o2: {rMSR_BIP,
 
                 rMSR_IE} <= #1 {opa_of[3],
 
                                 opa_of[1]};
 
          2'o1: {rMSR_BIP,
 
                 rMSR_IE} <= #1 {wRES[3],
 
                                 wRES[1]};
 
          default: begin
 
             rMSR_BIP <= #1 (fBRKB | fRTBD) ? !rMSR_BIP : rMSR_BIP;
 
             rMSR_IE <= #1 (fBRKI | fRTID) ? !rMSR_IE : rMSR_IE;
 
          end
 
        endcase // case ({fMTS, fMOP})
 
 
 
 
        rMSR_IE <= #1
 
                   (fBRKI) ? 1'b0 :
 
                   (fRTID) ? 1'b1 :
 
                   (fMTS) ? opa_of[1] :
 
                   (fMOP) ? wRES[1] :
 
                   rMSR_IE;
 
 
 
        rMSR_BIP <= #1
 
                    (fBRKB) ? 1'b1 :
 
                    (fRTBD) ? 1'b0 :
 
                    (fMTS) ? opa_of[3] :
 
                    (fMOP) ? wRES[3] :
 
                    rMSR_BIP;
        /*
        /*
        rMSR_IE <= #1
 
                   (fBRKI) ? 1'b0 :
        case ({fMTS, fMOP})
                   (fRTID) ? 1'b1 :
          2'o2: {rMSR_DTE,
                   (fMTS) ? opa_of[1] :
                 rMSR_ITE,
                   (fMOP) ? wRES[1] :
                 rMSR_MTX,
                   rMSR_IE;
                 rMSR_BE} <= #1 {opa_of[7],
 
                                 opa_of[5],
        rMSR_BIP <= #1
                                 opa_of[4],
                    (fBRKB) ? 1'b1 :
                                 opa_of[0]};
                    (fRTBD) ? 1'b0 :
          2'o1: {rMSR_DTE,
                    (fMTS) ? opa_of[3] :
                 rMSR_ITE,
                    (fMOP) ? wRES[3] :
                 rMSR_MTX,
                    rMSR_BIP;
                 rMSR_BE} <= #1 {wRES[7],
 
                                 wRES[5],
 
                                 wRES[4],
 
                                 wRES[0]};
 
          default: {rMSR_DTE,
 
                    rMSR_ITE,
 
                    rMSR_MTX,
 
                    rMSR_BE} <= #1 {rMSR_DTE,
 
                                    rMSR_ITE,
 
                                    rMSR_MTX,
 
                                    rMSR_BE};
 
        endcase // case ({fMTS, fMOP})
 
 
 
        case ({fMTS, fMOP})
 
          2'o2: {rMSR_BIP,
 
                 rMSR_IE} <= #1 {opa_of[3],
 
                                 opa_of[1]};
 
          2'o1: {rMSR_BIP,
 
                 rMSR_IE} <= #1 {wRES[3],
 
                                 wRES[1]};
 
          default: begin
 
             rMSR_BIP <= #1 (fBRKB | fRTBD) ? !rMSR_BIP : rMSR_BIP;
 
             rMSR_IE <= #1 (fBRKI | fRTID) ? !rMSR_IE : rMSR_IE;
 
          end
 
        endcase // case ({fMTS, fMOP})
        */
        */
     end // if (dena)
     end // if (dena)
 
 
   // BARREL C
   // BARREL C
   wire fADDSUB = (opc_of[5:2] == 4'h0) | (opc_of[5:2] == 4'h2);
   wire fADDSUB = !opc_of[5] & !opc_of[4] & !opc_of[2];
   wire fSHIFT  = (opc_of == 6'o44) & (imm_of[6:5] != 2'o3);
   // (opc_of[5:2] == 4'h0) | (opc_of[5:2] == 4'h2);
 
   wire fSHIFT  = (opc_of == 6'o44) & &imm_of[6:5];
 
 
   always @(posedge gclk)
   always @(posedge gclk)
     if (grst) begin
     if (grst) begin
        /*AUTORESET*/
        /*AUTORESET*/
     end else if (dena) begin
     end else if (dena) begin
Line 339... Line 334...
        rMSR_C <= 1'h0;
        rMSR_C <= 1'h0;
        rMSR_CC <= 1'h0;
        rMSR_CC <= 1'h0;
        // End of automatics
        // End of automatics
     end else if (dena) begin
     end else if (dena) begin
        rMSR_CC <= #1 rMSR_C;
        rMSR_CC <= #1 rMSR_C;
 
 
        rMSR_C <= #1
        rMSR_C <= #1
                  (fMTS) ? opa_of[2] :
                  (fMTS) ? opa_of[2] :
                  (fMOP) ? wRES[2] :
                  (fMOP) ? wRES[2] :
                  (fSHIFT) ? opa_of[0] : // SRA/SRL/SRC
                  (fSHIFT) ? opa_of[0] : // SRA/SRL/SRC
                  (fADDSUB) ? add_c : // ADD/SUB/ADDC/SUBC
                  (fADDSUB) ? add_c : // ADD/SUB/ADDC/SUBC
                  rMSR_CC;
                  rMSR_CC;
 
 
 
        /*
 
        case ({fMTS,fMOP,fSHIFT,fADDSUB})
 
          4'h8: rMSR_C <= #1 opa_of[2];
 
          4'h4: rMSR_C <= #1 wRES[2];
 
          4'h2: rMSR_C <= #1 opa_of[0];
 
          4'h1: rMSR_C <= #1 add_c;
 
          default: rMSR_C <= #1 rMSR_CC;
 
        endcase // case ({fMTS,fMOP,fSHIFT,fADDSUB})
 
        */
     end
     end
 
 
endmodule // aeMB2_intu
endmodule // aeMB2_intu
 
 
/*
/*
 $Log: not supported by cvs2svn $
 $Log: not supported by cvs2svn $
 
 Revision 1.6  2008/04/28 08:15:25  sybreon
 
 Optimisations.
 
 
 Revision 1.5  2008/04/26 17:57:43  sybreon
 Revision 1.5  2008/04/26 17:57:43  sybreon
 Minor performance improvements.
 Minor performance improvements.
 
 
 Revision 1.4  2008/04/26 01:09:06  sybreon
 Revision 1.4  2008/04/26 01:09:06  sybreon
 Passes basic tests. Minor documentation changes to make it compatible with iverilog pre-processor.
 Passes basic tests. Minor documentation changes to make it compatible with iverilog pre-processor.

powered by: WebSVN 2.1.0

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