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: Mon Apr 28 10:15:26 CEST 2008
    Subject: [cvs-checkins] MODIFIED: aemb ...
    Top
    Date: 00/08/04 28:10:15

    Modified: aemb/rtl/verilog aeMB2_bsft.v aeMB2_ctrl.v aeMB2_intu.v
    aeMB2_mult.v
    Log:
    Optimisations.


    Revision Changes Path
    1.3 aemb/rtl/verilog/aeMB2_bsft.v

    http://www.opencores.org/cvsweb.shtml/aemb/rtl/verilog/aeMB2_bsft.v.diff?r1=1.2&r2=1.3

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

    Index: aeMB2_bsft.v
    ===================================================================
    RCS file: /cvsroot/sybreon/aemb/rtl/verilog/aeMB2_bsft.v,v
    retrieving revision 1.2
    retrieving revision 1.3
    diff -u -b -r1.2 -r1.3
    --- aeMB2_bsft.v 26 Apr 2008 01:09:05 -0000 1.2
    +++ aeMB2_bsft.v 28 Apr 2008 08:15:25 -0000 1.3
    @@ -1,4 +1,4 @@
    -/* $Id: aeMB2_bsft.v,v 1.2 2008/04/26 01:09:05 sybreon Exp $
    +/* $Id: aeMB2_bsft.v,v 1.3 2008/04/28 08:15:25 sybreon Exp $
    **
    ** AEMB2 EDK 6.2 COMPATIBLE CORE
    ** Copyright (C) 2004-2008 Shawn Tan <shawn.tan@a...>
    @@ -27,6 +27,8 @@

    */

    +// 420 LUTS
    +
    module aeMB2_bsft (/*AUTOARG*/
    // Outputs
    bsf_mx,
    @@ -57,8 +59,6 @@
    wire [31:0] wOPB = opb_of;
    wire [31:0] wOPA = opa_of;

    - assign bsf_mx = (AEMB_BSF[0]) ? rBSR : 32'hX;
    -
    // STAGE-1 SHIFTERS

    // logical
    @@ -135,10 +135,15 @@
    imm_ex <= #1 imm_of[10:9]; // delay 1 cycle
    end

    + assign bsf_mx = (AEMB_BSF[0]) ? rBSR : 32'hX;
    +
    endmodule // aeMB2_bsft

    /*
    $Log: aeMB2_bsft.v,v $
    + Revision 1.3 2008/04/28 08:15:25 sybreon
    + Optimisations.
    +
    Revision 1.2 2008/04/26 01:09:05 sybreon
    Passes basic tests. Minor documentation changes to make it compatible with iverilog pre-processor.




    1.5 aemb/rtl/verilog/aeMB2_ctrl.v

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

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

    Index: aeMB2_ctrl.v
    ===================================================================
    RCS file: /cvsroot/sybreon/aemb/rtl/verilog/aeMB2_ctrl.v,v
    retrieving revision 1.4
    retrieving revision 1.5
    diff -u -b -r1.4 -r1.5
    --- aeMB2_ctrl.v 26 Apr 2008 17:57:43 -0000 1.4
    +++ aeMB2_ctrl.v 28 Apr 2008 08:15:25 -0000 1.5
    @@ -1,4 +1,4 @@
    -/* $Id: aeMB2_ctrl.v,v 1.4 2008/04/26 17:57:43 sybreon Exp $
    +/* $Id: aeMB2_ctrl.v,v 1.5 2008/04/28 08:15:25 sybreon Exp $
    **
    ** AEMB2 EDK 6.2 COMPATIBLE CORE
    ** Copyright (C) 2004-2008 Shawn Tan <shawn.tan@a...>
    @@ -100,28 +100,28 @@

    // decode main opgroups

    - wire fSFT = (wOPC == 6'o44);
    - wire fLOG = ({wOPC[5:4],wOPC[2]} == 3'o4);
    + //wire fSFT = (wOPC == 6'o44);
    + //wire fLOG = ({wOPC[5:4],wOPC[2]} == 3'o4);
    wire fMUL = (wOPC == 6'o20) | (wOPC == 6'o30);
    wire fBSF = (wOPC == 6'o21) | (wOPC == 6'o31);
    - wire fDIV = (wOPC == 6'o22);
    + //wire fDIV = (wOPC == 6'o22);
    wire fRTD = (wOPC == 6'o55);
    wire fBCC = (wOPC == 6'o47) | (wOPC == 6'o57);
    wire fBRU = (wOPC == 6'o46) | (wOPC == 6'o56);
    - wire fBRA = fBRU & wRA[3];
    + //wire fBRA = fBRU & wRA[3]; wire fIMM = (wOPC == 6'o54); wire fMOV = (wOPC == 6'o45); wire fLOD = ({wOPC[5:4],wOPC[2]} == 3'o6); wire fSTR = ({wOPC[5:4],wOPC[2]} == 3'o7); - wire fLDST = (wOPC[5:4] == 2'o3); - wire fPUT = (wOPC == 6'o33) & wRB[4]; + //wire fLDST = (wOPC[5:4] == 2'o3); + //wire fPUT = (wOPC == 6'o33) & wRB[4]; wire fGET = (wOPC == 6'o33) & !wRB[4]; // control signals - wire [31:0] wXCEOP = 32'hBA2D0020; // Vector 0x20 - wire [31:0] wINTOP = 32'hB9CE0010; // Vector 0x10 - wire [31:0] wNOPOP = 32'h88000000; // branch-no-delay/stall + //wire [31:0] wXCEOP = 32'hBA2D0020; // Vector 0x20 + //wire [31:0] wINTOP = 32'hB9CE0010; // Vector 0x10 + //wire [31:0] wNOPOP = 32'h88000000; // branch-no-delay/stall localparam [2:0] MUX_SFR = 3'o7, MUX_BSF = 3'o6, @@ -145,18 +145,16 @@ end else if (dena) begin mux_of <= #1 - (hzd_bpc | hzd_fwd) ? MUX_NOP : + (hzd_bpc | hzd_fwd | fSTR | fRTD | fBCC) ? MUX_NOP : + (fLOD | fGET) ? MUX_MEM : (fMOV) ? MUX_SFR : (fMUL) ? MUX_MUL : (fBSF) ? MUX_BSF : - (fLOD | fGET) ? MUX_MEM : (fBRU) ? MUX_RPC : - (fSTR | fRTD | fBCC) ? MUX_NOP : - (|wRD) ? MUX_ALU : - MUX_NOP; + MUX_ALU; opc_of <= #1 - (hzd_bpc | hzd_fwd) ? 6'o42 : + (hzd_bpc | hzd_fwd) ? 6'o42 : // XOR (SKIP) wOPC; rd_of <= #1 wRD; @@ -201,16 +199,16 @@ wire opb_fwd, opa_fwd, opd_fwd; assign mux_opb = {wOPC[3], opb_fwd}; - assign opb_fwd = ~|(wRB ^ rd_ex) & // RB forwarding needed + assign opb_fwd = ((wRB ^ rd_ex) == 5'd0) & // RB forwarding needed fwd_ex & wrb_ex; assign mux_opa = {(fBRU|fBCC), opa_fwd}; - assign opa_fwd = ~|(wRA ^ rd_ex) & // RA forwarding needed + assign opa_fwd = ((wRA ^ rd_ex) == 5'd0) & // RA forwarding needed fwd_ex & wrb_ex; assign mux_opd = {fBCC, opd_fwd}; - assign opd_fwd = (( ~|(wRA ^ rd_ex) & fBCC) | - ( ~|(wRD ^ rd_ex) & fSTR)) & + assign opd_fwd = (( ((wRA ^ rd_ex) == 5'd0) & fBCC) | // RA forwarding + ( ((wRD ^ rd_ex) == 5'd0) & fSTR)) & // RD forwarding fwd_ex & wrb_ex; always @(posedge gclk) @@ -267,10 +265,10 @@ end // if (dena) // Hazard Detection - wire wFMUL = (mux_ex == MUX_MUL); - wire wFBSF = (mux_ex == MUX_BSF); - wire wFMEM = (mux_ex == MUX_MEM); - wire wFMOV = (mux_ex == MUX_SFR); + //wire wFMUL = (mux_ex == MUX_MUL); + //wire wFBSF = (mux_ex == MUX_BSF); + //wire wFMEM = (mux_ex == MUX_MEM); + //wire wFMOV = (mux_ex == MUX_SFR); assign hzd_fwd = (opd_fwd | opa_fwd | opb_fwd) & mux_ex[2]; //(wFMUL | wFBSF | wFMEM | wFMOV); @@ -280,6 +278,9 @@ /* $Log: aeMB2_ctrl.v,v $ + Revision 1.5 2008/04/28 08:15:25 sybreon + Optimisations. + Revision 1.4 2008/04/26 17:57:43 sybreon Minor performance improvements. 1.6 aemb/rtl/verilog/aeMB2_intu.v http://www.opencores.org/cvsweb.shtml/aemb/rtl/verilog/aeMB2_intu.v.diff?r1=1.5&r2=1.6 (In the diff below, changes in quantity of whitespace are not shown.) Index: aeMB2_intu.v =================================================================== RCS file: /cvsroot/sybreon/aemb/rtl/verilog/aeMB2_intu.v,v retrieving revision 1.5 retrieving revision 1.6 diff -u -b -r1.5 -r1.6 --- aeMB2_intu.v 26 Apr 2008 17:57:43 -0000 1.5 +++ aeMB2_intu.v 28 Apr 2008 08:15:25 -0000 1.6 @@ -1,4 +1,4 @@ -/* $Id: aeMB2_intu.v,v 1.5 2008/04/26 17:57:43 sybreon Exp $ +/* $Id: aeMB2_intu.v,v 1.6 2008/04/28 08:15:25 sybreon Exp $ ** ** AEMB2 EDK 6.2 COMPATIBLE CORE ** Copyright (C) 2004-2008 Shawn Tan <shawn.tan@a...> @@ -44,6 +44,7 @@ output [31:0] alu_ex, alu_mx; + //input [2:0] mux_of; input [5:0] opc_of; input [31:0] opa_of; input [31:0] opb_of; @@ -69,21 +70,26 @@ reg [31:0] sfr_mx; // End of automatics + localparam [2:0] MUX_SFR = 3'o7, + MUX_BSF = 3'o6, + MUX_MUL = 3'o5, + MUX_MEM = 3'o4, + + MUX_RPC = 3'o2, + MUX_ALU = 3'o1, + MUX_NOP = 3'o0; + reg rMSR_C, rMSR_CC, - rMSR_C0, rMSR_C1, rMSR_MTX, - rMSR_DCE, - rMSR_ICE, + rMSR_DTE, + rMSR_ITE, rMSR_BIP, rMSR_IE, rMSR_BE; - // ADDER - /* Infer a ADD cell because ADD/SUB cannot be inferred cross - technologies. */ - - // FIXME: Redesign this critical path + // Infer a ADD with carry cell because ADDSUB cannot be inferred + // across technologies. reg [31:0] add_ex; reg add_c; @@ -91,26 +97,25 @@ wire [31:0] wADD; wire wADC; - wire fCCC = !opc_of[5] & !opc_of[4] & opc_of[1]; - wire fSUB = !opc_of[5] & !opc_of[4] & opc_of[0]; - wire fCMP = !opc_of[3] & imm_of[1] & imm_of[0]; // unsigned + wire fCCC = !opc_of[5] & opc_of[1]; // & !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 wCMP = (fCMP) ? (opa_of > opb_of) : wADD[31]; wire [31:0] wOPA = (fSUB) ? ~opa_of : opa_of; wire wOPC = (fCCC) ? rMSR_CC : fSUB; - assign {wADC, wADD} = (opb_of + wOPA) + wOPC; + assign {wADC, wADD} = (opb_of + wOPA) + wOPC; // add carry - always @(/*AUTOSENSE*/imm_of or opc_of or wADC or wADD or wCMP) begin - {add_c, add_ex} <= #1 - (!opc_of[3] & imm_of[0]) ? - {wADC, wCMP , wADD[30:0]} : // add with carry - {wADC, wADD[31:0]} ; // add with carry + always @(/*AUTOSENSE*/wADC or wADD or wCMP) begin + {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 // SHIFT/LOGIC/MOVE reg [31:0] slm_ex; - reg slm_c; always @(/*AUTOSENSE*/imm_of or opa_of or opb_of or opc_of or rMSR_CC) @@ -136,9 +141,6 @@ default: slm_ex <= #1 32'hX; endcase // case (opc_of[2:0]) - always @(/*AUTOSENSE*/imm_of or opa_of or rMSR_CC) - slm_c <= #1 (&imm_of[6:5]) ? rMSR_CC : opa_of[0]; - // ALU RESULT always @(posedge gclk) if (grst) begin @@ -172,8 +174,8 @@ 30 - HTE (hardware thread enabled) 29 - PHA (current phase) - 7 - DCE (data cache enable) - 5 - ICE (instruction cache enable) + 7 - DTE (data cache enable) + 5 - ITE (instruction cache enable) 4 - MTX (hardware mutex bit) 3 - BIP (break in progress) 2 - C (carry flag) @@ -182,9 +184,9 @@ */ assign msr_ex = { - rMSR_DCE, + rMSR_DTE, 1'b0, - rMSR_ICE, + rMSR_ITE, rMSR_MTX, rMSR_BIP, rMSR_C, @@ -207,8 +209,9 @@ 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 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 == 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 fMOP = fMOV & ~|imm_of[15:14]; @@ -220,9 +223,9 @@ // Beginning of autoreset for uninitialized flops rMSR_BE <= 1'h0; rMSR_BIP <= 1'h0; - rMSR_DCE <= 1'h0; - rMSR_ICE <= 1'h0; + rMSR_DTE <= 1'h0; rMSR_IE <= 1'h0; + rMSR_ITE <= 1'h0; rMSR_MTX <= 1'h0; sfr_ex <= 32'h0; sfr_mx <= 32'h0; @@ -234,9 +237,9 @@ AEMB_HTX[0], gpha, 21'd0, - rMSR_DCE, + rMSR_DTE, 1'b0, - rMSR_ICE, + rMSR_ITE, rMSR_MTX, rMSR_BIP, rMSR_CC, @@ -244,15 +247,15 @@ rMSR_BE }; /* - rMSR_DCE <= #1 + rMSR_DTE <= #1 (fMTS) ? opa_of[7] : (fMOP) ? wRES[7] : - rMSR_DCE; + rMSR_DTE; - rMSR_ICE <= #1 + rMSR_ITE <= #1 (fMTS) ? opa_of[5] : (fMOP) ? wRES[5] : - rMSR_ICE; + rMSR_ITE; rMSR_MTX <= #1 (fMTS) ? opa_of[4] : @@ -266,25 +269,25 @@ */ case ({fMTS, fMOP}) - 2'o2: {rMSR_DCE, - rMSR_ICE, + 2'o2: {rMSR_DTE, + rMSR_ITE, rMSR_MTX, rMSR_BE} <= #1 {opa_of[7], opa_of[5], opa_of[4], opa_of[0]}; - 2'o1: {rMSR_DCE, - rMSR_ICE, + 2'o1: {rMSR_DTE, + rMSR_ITE, rMSR_MTX, rMSR_BE} <= #1 {wRES[7], wRES[5], wRES[4], wRES[0]}; - default: {rMSR_DCE, - rMSR_ICE, + default: {rMSR_DTE, + rMSR_ITE, rMSR_MTX, - rMSR_BE} <= #1 {rMSR_DCE, - rMSR_ICE, + rMSR_BE} <= #1 {rMSR_DTE, + rMSR_ITE, rMSR_MTX, rMSR_BE}; endcase // case ({fMTS, fMOP}) @@ -350,6 +353,9 @@ /* $Log: aeMB2_intu.v,v $ + Revision 1.6 2008/04/28 08:15:25 sybreon + Optimisations. + Revision 1.5 2008/04/26 17:57:43 sybreon Minor performance improvements. 1.5 aemb/rtl/verilog/aeMB2_mult.v http://www.opencores.org/cvsweb.shtml/aemb/rtl/verilog/aeMB2_mult.v.diff?r1=1.4&r2=1.5 (In the diff below, changes in quantity of whitespace are not shown.) Index: aeMB2_mult.v =================================================================== RCS file: /cvsroot/sybreon/aemb/rtl/verilog/aeMB2_mult.v,v retrieving revision 1.4 retrieving revision 1.5 diff -u -b -r1.4 -r1.5 --- aeMB2_mult.v 26 Apr 2008 17:57:43 -0000 1.4 +++ aeMB2_mult.v 28 Apr 2008 08:15:25 -0000 1.5 @@ -1,4 +1,4 @@ -/* $Id: aeMB2_mult.v,v 1.4 2008/04/26 17:57:43 sybreon Exp $ +/* $Id: aeMB2_mult.v,v 1.5 2008/04/28 08:15:25 sybreon Exp $ ** ** AEMB2 EDK 6.2 COMPATIBLE CORE ** Copyright (C) 2004-2008 Shawn Tan <shawn.tan@a...> @@ -28,6 +28,8 @@ */ +// 30 LUTS @ 20 MHZ + module aeMB2_mult (/*AUTOARG*/ // Outputs mul_mx, @@ -71,12 +73,15 @@ rOPB <= #1 opb_of; end - assign mul_mx = rMUL1; + assign mul_mx = (AEMB_MUL[0]) ? rMUL1 : 32'hX; endmodule // aeMB2_mult /* $Log: aeMB2_mult.v,v $ + Revision 1.5 2008/04/28 08:15:25 sybreon + Optimisations. + Revision 1.4 2008/04/26 17:57:43 sybreon Minor performance improvements.

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