LOGIN   :::   RECOVER PASS   :::   GET ACCOUNT    
Browse
  • Projects
  • Code (CVS)
  • Forums
  • News
  • Articles
  • Polls
  •  
    OpenCores
  • FAQ
  • CVS HowTo
  • Mission
  • Media
  • Tools
  • Advertise
  • Mirrors
  • Logos
  • Contact us
  • Job Opportunity
  •  
    Tools
  • Search
      
  • Download Cores (CVSGet)
  •  
    More
  • Wishbone
  • Perlilog
  • EDA tools
  • OpenTech CD
  •  
    Navigation: All forums > Cvs-checkins > Message List > Message Post

    Message

    Reply | Reply all
    Date Prev | Date Next | Thread Prev | Thread Next Date Index | Thread Index

    From: cvs at opencores.org<cvs@o...>
    Date: Thu Apr 26 16:29:54 CEST 2007
    Subject: [cvs-checkins] MODIFIED: aemb ...
    Top
    Date: 00/07/04 26:16:29

    Modified: aemb/rtl/verilog aeMB_aslu.v aeMB_regfile.v
    Log:
    Made minor performance optimisations.


    Revision Changes Path
    1.6 aemb/rtl/verilog/aeMB_aslu.v

    http://www.opencores.org/cvsweb.shtml/aemb/rtl/verilog/aeMB_aslu.v.diff?r1=1.5&r2=1.6

    (In the diff below, changes in quantity of whitespace are not shown.)

    Index: aeMB_aslu.v
    ===================================================================
    RCS file: /cvsroot/sybreon/aemb/rtl/verilog/aeMB_aslu.v,v
    retrieving revision 1.5
    retrieving revision 1.6
    diff -u -b -r1.5 -r1.6
    --- aeMB_aslu.v 25 Apr 2007 22:15:04 -0000 1.5
    +++ aeMB_aslu.v 26 Apr 2007 14:29:53 -0000 1.6
    @@ -1,5 +1,5 @@
    /*
    - * $Id: aeMB_aslu.v,v 1.5 2007/04/25 22:15:04 sybreon Exp $
    + * $Id: aeMB_aslu.v,v 1.6 2007/04/26 14:29:53 sybreon Exp $
    *
    * AEMB Arithmetic Shift Logic Unit
    * Copyright (C) 2006 Shawn Tan Ser Ngiap <shawn.tan@a...>
    @@ -23,6 +23,9 @@
    *
    * HISTORY
    * $Log: aeMB_aslu.v,v $
    + * Revision 1.6 2007/04/26 14:29:53 sybreon
    + * Made minor performance optimisations.
    + *
    * Revision 1.5 2007/04/25 22:15:04 sybreon
    * Added support for 8-bit and 16-bit data types.
    *
    @@ -41,7 +44,7 @@
    *
    */

    -// 268 at 91
    +// 246 at 101
    module aeMB_aslu (/*AUTOARG*/
    // Outputs
    dwb_adr_o, dwb_sel_o, rRESULT, rDWBSEL,
    @@ -82,7 +85,7 @@
    wire [31:0] wDWBADR;

    assign dwb_adr_o = {rDWBADR[DSIZ-1:2],2'b00};
    - assign wDWBADR = (wOPA + wOPB);
    + //assign wDWBADR = (wOPA + wOPB);

    reg [3:0] rDWBSEL, xDWBSEL;

    @@ -128,25 +131,38 @@

    // ARITHMETIC
    //wire wADDC_ = (rOPC[1] & (rMXLDST == 2'o0)) ? rMSR_C : 1'b0;
    - wire wADDC_ = (rOPC[1]) ? rMSR_C : 1'b0;
    - wire wSUBC_ = (rOPC[1]) ? rMSR_C : 1'b1;
    - wire wADDC, wSUBC, wRES_AC,wCMPC;
    - wire [31:0] wADD,wSUB,wRES_A,wCMP;
    + wire wADDC_ = (rOPC[1] & rMSR_C) & ~|rMXLDST;
    + wire wSUBC_ = (rOPC[1] & rMSR_C | ~rOPC[1]);
    + wire wADDC, wSUBC, wRES_AC, wCMPC, wOPC;
    + wire [31:0] wADD, wSUB, wRES_A, wCMP, wOPX;

    // TODO: verify signed compare
    - wire wCMPU = (wOPA > wOPB);
    +
    + wire wCMP0 = (wOPA[7:0] > wOPB[7:0]);
    + wire wCMP1 = (wOPA[15:8] > wOPB[15:8]);
    + wire wCMP2 = (wOPA[23:16] > wOPB[23:16]);
    + wire wCMP3 = (wOPA[31:24] > wOPB[31:24]);
    + wire wCMPU = wCMP3 | (wCMP2 & ~wCMP3) | (wCMP1 & ~wCMP2 & ~wCMP3) | (wCMP0 & ~wCMP2 & ~wCMP3 & ~wCMP1);
    +
    + //wire wCMPU = (wOPA > wOPB);
    wire wCMPF = (rIMM[1]) ? wCMPU :
    ((wCMPU & ~(wOPB[31] ^ wOPA[31])) | (wOPB[31] & ~wOPA[31]));
    assign {wCMPC,wCMP} = {wSUBC,wCMPF,wSUB[30:0]};
    - assign {wADDC,wADD} = (wOPB + wOPA) + wADDC_;
    - assign {wSUBC,wSUB} = (wOPB + ~wOPA) + wSUBC_;
    + //assign {wADDC,wADD} = (wOPB + wOPA) + wADDC_;
    + //assign {wSUBC,wSUB} = (wOPB + ~wOPA) + wSUBC_;
    + assign wOPX = (rOPC[0] & !rOPC[5]) ? ~wOPA : wOPA ;
    + assign wOPC = (rOPC[0] & !rOPC[5]) ? wSUBC_ : wADDC_ ;
    + assign {wSUBC,wSUB} = {wADDC,wADD};
    + assign {wADDC,wADD} = (wOPB + wOPX) + wOPC;
    + assign wDWBADR = wADD;
    +

    reg rRES_AC;
    reg [31:0] rRES_A;
    always @(/*AUTOSENSE*/rIMM or rOPC or wADD or wADDC or wCMP
    or wCMPC or wSUB or wSUBC)
    //{rRES_AC,rRES_A} <= #1 (rOPC[0] & ~rOPC[5]) ? {~wSUBC,wSUB} : {wADDC,wADD};
    - case ({rOPC[5],rOPC[3],rOPC[0],rIMM[0]})
    + case ({rOPC[3],rOPC[0],rIMM[0]})
    4'h2, 4'h6, 4'h7: {rRES_AC,rRES_A} <= #1 {~wSUBC,wSUB}; // SUB
    4'h3: {rRES_AC,rRES_A} <= #1 {~wCMPC,wCMP}; // CMP default: {rRES_AC,rRES_A} <= #1 {wADDC,wADD}; 1.11 aemb/rtl/verilog/aeMB_regfile.v http://www.opencores.org/cvsweb.shtml/aemb/rtl/verilog/aeMB_regfile.v.diff?r1=1.10&r2=1.11 (In the diff below, changes in quantity of whitespace are not shown.) Index: aeMB_regfile.v =================================================================== RCS file: /cvsroot/sybreon/aemb/rtl/verilog/aeMB_regfile.v,v retrieving revision 1.10 retrieving revision 1.11 diff -u -b -r1.10 -r1.11 --- aeMB_regfile.v 25 Apr 2007 22:52:53 -0000 1.10 +++ aeMB_regfile.v 26 Apr 2007 14:29:53 -0000 1.11 @@ -1,5 +1,5 @@ /* - * $Id: aeMB_regfile.v,v 1.10 2007/04/25 22:52:53 sybreon Exp $ + * $Id: aeMB_regfile.v,v 1.11 2007/04/26 14:29:53 sybreon Exp $ * * AEMB Register File * Copyright (C) 2006 Shawn Tan Ser Ngiap <shawn.tan@a...> @@ -25,6 +25,9 @@ * * HISTORY * $Log: aeMB_regfile.v,v $ + * Revision 1.11 2007/04/26 14:29:53 sybreon + * Made minor performance optimisations. + * * Revision 1.10 2007/04/25 22:52:53 sybreon * Fixed minor simulation bug. * @@ -122,14 +125,14 @@ always @(/*AUTOSENSE*/rDWBSEL or wDWBDAT) case (rDWBSEL) - 4'hF: sDWBDAT <= wDWBDAT; + default: sDWBDAT <= wDWBDAT; 4'hC: sDWBDAT <= {16'd0,wDWBDAT[31:16]}; 4'h3: sDWBDAT <= {16'd0,wDWBDAT[15:0]}; 4'h8: sDWBDAT <= {24'd0,wDWBDAT[31:24]}; 4'h4: sDWBDAT <= {24'd0,wDWBDAT[23:16]}; 4'h2: sDWBDAT <= {24'd0,wDWBDAT[15:8]}; 4'h1: sDWBDAT <= {24'd0,wDWBDAT[7:0]}; - default: sDWBDAT <= 32'h0; + //default: sDWBDAT <= 32'h0; endcase // case (rDWBSEL) // Forwarding Control

     
    Copyright (c) 1999 OPENCORES.ORG. All rights reserved.