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

Subversion Repositories aemb

[/] [aemb/] [trunk/] [rtl/] [verilog/] [aeMB_ctrl.v] - Diff between revs 65 and 72

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

Rev 65 Rev 72
Line 1... Line 1...
// $Id: aeMB_ctrl.v,v 1.9 2007-11-15 09:26:43 sybreon Exp $
// $Id: aeMB_ctrl.v,v 1.10 2007-11-30 16:44:40 sybreon Exp $
//
//
// AEMB CONTROL UNIT
// AEMB CONTROL UNIT
// 
// 
// Copyright (C) 2004-2007 Shawn Tan Ser Ngiap <shawn.tan@aeste.net>
// Copyright (C) 2004-2007 Shawn Tan Ser Ngiap <shawn.tan@aeste.net>
//  
//  
Line 18... Line 18...
//
//
// You should have received a copy of the GNU Lesser General Public
// You should have received a copy of the GNU Lesser General Public
// License along with AEMB. If not, see <http://www.gnu.org/licenses/>.
// License along with AEMB. If not, see <http://www.gnu.org/licenses/>.
//
//
// $Log: not supported by cvs2svn $
// $Log: not supported by cvs2svn $
 
// Revision 1.9  2007/11/15 09:26:43  sybreon
 
// Fixed minor typo causing synthesis failure.
 
//
// Revision 1.8  2007/11/14 23:19:24  sybreon
// Revision 1.8  2007/11/14 23:19:24  sybreon
// Fixed minor typo.
// Fixed minor typo.
//
//
// Revision 1.7  2007/11/14 22:14:34  sybreon
// Revision 1.7  2007/11/14 22:14:34  sybreon
// Changed interrupt handling system (reported by M. Ettus).
// Changed interrupt handling system (reported by M. Ettus).
Line 61... Line 64...
   //output [31:2] rPCLNK;
   //output [31:2] rPCLNK;
   output [1:0]  rMXDST;
   output [1:0]  rMXDST;
   output [1:0]  rMXSRC, rMXTGT, rMXALT;
   output [1:0]  rMXSRC, rMXTGT, rMXALT;
   output [2:0]  rMXALU;
   output [2:0]  rMXALU;
   output [4:0]  rRW;
   output [4:0]  rRW;
   //output      rDWBSTB;
 
   //output      rFSLSTB;
 
 
 
   //input [1:0]         rXCE;
 
   input         rDLY;
   input         rDLY;
   input [15:0]  rIMM;
   input [15:0]  rIMM;
   input [10:0]  rALT;
   input [10:0]  rALT;
   input [5:0]    rOPC;
   input [5:0]    rOPC;
   input [4:0]    rRD, rRA, rRB;
   input [4:0]    rRD, rRA, rRB;
Line 159... Line 159...
   reg [1:0]      rMXALT, xMXALT;
   reg [1:0]      rMXALT, xMXALT;
 
 
 
 
   // --- OPERAND SELECTOR ---------------------------------
   // --- OPERAND SELECTOR ---------------------------------
 
 
   /*
 
   wire          fRDWE = |rRW;
 
   wire          fAFWD_M = (rRW == rRA) & (rMXDST == 2'o2) & fRDWE;
 
   wire          fBFWD_M = (rRW == rRB) & (rMXDST == 2'o2) & fRDWE;
 
   wire          fAFWD_R = (rRW == rRA) & (rMXDST == 2'o0) & fRDWE;
 
   wire          fBFWD_R = (rRW == rRB) & (rMXDST == 2'o0) & fRDWE;
 
 
 
   assign        rMXSRC = (fBRU | fBCC) ? 2'o3 : // PC
 
                          (fAFWD_M) ? 2'o2: // RAM
 
                          (fAFWD_R) ? 2'o1: // FWD
 
                          2'o0; // REG
 
 
 
   assign        rMXTGT = (rOPC[3]) ? 2'o3 : // IMM
 
                          (fBFWD_M) ? 2'o2 : // RAM
 
                          (fBFWD_R) ? 2'o1 : // FWD
 
                          2'o0; // REG
 
 
 
   assign        rMXALT = (fAFWD_M) ? 2'o2 : // RAM
 
                          (fAFWD_R) ? 2'o1 : // FWD
 
                          2'o0; // REG
 
   */
 
 
 
   wire          wRDWE = |xRW;
   wire          wRDWE = |xRW;
   wire          wAFWD_M = (xRW == wRA) & (xMXDST == 2'o2) & wRDWE;
   wire          wAFWD_M = (xRW == wRA) & (xMXDST == 2'o2) & wRDWE;
   wire          wBFWD_M = (xRW == wRB) & (xMXDST == 2'o2) & wRDWE;
   wire          wBFWD_M = (xRW == wRB) & (xMXDST == 2'o2) & wRDWE;
   wire          wAFWD_R = (xRW == wRA) & (xMXDST == 2'o0) & wRDWE;
   wire          wAFWD_R = (xRW == wRA) & (xMXDST == 2'o0) & wRDWE;
   wire          wBFWD_R = (xRW == wRB) & (xMXDST == 2'o0) & wRDWE;
   wire          wBFWD_R = (xRW == wRB) & (xMXDST == 2'o0) & wRDWE;
Line 209... Line 187...
                  (wBFWD_R) ? 2'o1 : // FWD
                  (wBFWD_R) ? 2'o1 : // FWD
                  2'o0; // REG
                  2'o0; // REG
        xMXALT <= (wAFWD_M) ? 2'o2 : // RAM
        xMXALT <= (wAFWD_M) ? 2'o2 : // RAM
                  (wAFWD_R) ? 2'o1 : // FWD
                  (wAFWD_R) ? 2'o1 : // FWD
                  2'o0; // REG  
                  2'o0; // REG  
     end
     end // else: !if(rBRA)
 
 
   // --- ALU CONTROL ---------------------------------------
   // --- ALU CONTROL ---------------------------------------
 
 
   /*
 
   reg [2:0]     rMXALU;
 
   always @(fBRA or fBSF or fDIV or fLOG or fMOV or fMUL
 
     or fSFT) begin
 
      rMXALU <= (fBRA | fMOV) ? 3'o3 :
 
                (fSFT) ? 3'o2 :
 
                (fLOG) ? 3'o1 :
 
                (fMUL) ? 3'o4 :
 
                (fBSF) ? 3'o5 :
 
                (fDIV) ? 3'o6 :
 
                3'o0;
 
   end
 
    */
 
 
 
   reg [2:0]     rMXALU, xMXALU;
   reg [2:0]     rMXALU, xMXALU;
 
 
   always @(/*AUTOSENSE*/rBRA or wBRA or wBSF or wDIV or wLOG or wMOV
   always @(/*AUTOSENSE*/rBRA or wBRA or wBSF or wDIV or wLOG or wMOV
            or wMUL or wSFT)
            or wMUL or wSFT)
     //if (rBRA | |rXCE) begin
     //if (rBRA | |rXCE) begin
Line 245... Line 209...
                  (wLOG) ? 3'o1 :
                  (wLOG) ? 3'o1 :
                  (wMUL) ? 3'o4 :
                  (wMUL) ? 3'o4 :
                  (wBSF) ? 3'o5 :
                  (wBSF) ? 3'o5 :
                  (wDIV) ? 3'o6 :
                  (wDIV) ? 3'o6 :
                  3'o0;
                  3'o0;
     end
     end // else: !if(rBRA)
 
 
   // --- DELAY SLOT REGISTERS ------------------------------
   // --- DELAY SLOT REGISTERS ------------------------------
 
 
   wire          fSKIP = (rBRA & !rDLY);
   wire          fSKIP = (rBRA & !rDLY);
 
 
Line 260... Line 224...
        // Beginning of autoreset for uninitialized flops
        // Beginning of autoreset for uninitialized flops
        xMXDST <= 2'h0;
        xMXDST <= 2'h0;
        xRW <= 5'h0;
        xRW <= 5'h0;
        // End of automatics
        // End of automatics
     end else begin
     end else begin
        /*
 
        case (rXCE)
 
          2'o2: xMXDST <= 2'o1;
 
          default: xMXDST <= (fSTR | fRTD | fBCC) ? 2'o3 :
 
                             (fLOD | fGET) ? 2'o2 :
 
                             (fBRU) ? 2'o1 :
 
                             2'o0;
 
        endcase
 
 
 
        case (rXCE)
 
          2'o2: xRW <= 5'd14;
 
          default: xRW <= rRD;
 
        endcase
 
        */
 
        xMXDST <= (fSTR | fRTD | fBCC) ? 2'o3 :
        xMXDST <= (fSTR | fRTD | fBCC) ? 2'o3 :
                  (fLOD | fGET) ? 2'o2 :
                  (fLOD | fGET) ? 2'o2 :
                  (fBRU) ? 2'o1 :
                  (fBRU) ? 2'o1 :
                  2'o0;
                  2'o0;
        xRW <= rRD;
        xRW <= rRD;
Line 367... Line 317...
        rMXDST <= 2'h0;
        rMXDST <= 2'h0;
        rMXSRC <= 2'h0;
        rMXSRC <= 2'h0;
        rMXTGT <= 2'h0;
        rMXTGT <= 2'h0;
        rRW <= 5'h0;
        rRW <= 5'h0;
        // End of automatics
        // End of automatics
     end else if (gena) begin
     end else if (gena) begin // if (grst)
        //rPCLNK <= #1 xPCLNK;
        //rPCLNK <= #1 xPCLNK;
        rMXDST <= #1 xMXDST;
        rMXDST <= #1 xMXDST;
        rRW <= #1 xRW;
        rRW <= #1 xRW;
        rMXSRC <= #1 xMXSRC;
        rMXSRC <= #1 xMXSRC;
        rMXTGT <= #1 xMXTGT;
        rMXTGT <= #1 xMXTGT;

powered by: WebSVN 2.1.0

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