Line 1... |
Line 1... |
// $Id: aeMB_xecu.v,v 1.8 2007-11-16 21:52:03 sybreon Exp $
|
// $Id: aeMB_xecu.v,v 1.9 2007-11-30 16:42:51 sybreon Exp $
|
//
|
//
|
// AEMB MAIN EXECUTION ALU
|
// AEMB MAIN EXECUTION ALU
|
//
|
//
|
// 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.8 2007/11/16 21:52:03 sybreon
|
|
// Added fsl_tag_o to FSL bus (tag either address or data).
|
|
//
|
// 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).
|
//
|
//
|
// Revision 1.6 2007/11/10 16:39:38 sybreon
|
// Revision 1.6 2007/11/10 16:39:38 sybreon
|
// Upgraded license to LGPLv3.
|
// Upgraded license to LGPLv3.
|
Line 70... |
Line 73... |
// INTERNAL
|
// INTERNAL
|
output [31:0] rRESULT;
|
output [31:0] rRESULT;
|
output [3:0] rDWBSEL;
|
output [3:0] rDWBSEL;
|
output rMSR_IE;
|
output rMSR_IE;
|
output rMSR_BIP;
|
output rMSR_BIP;
|
//input [1:0] rXCE;
|
|
input [31:0] rREGA, rREGB;
|
input [31:0] rREGA, rREGB;
|
input [1:0] rMXSRC, rMXTGT;
|
input [1:0] rMXSRC, rMXTGT;
|
input [4:0] rRA, rRB;
|
input [4:0] rRA, rRB;
|
input [2:0] rMXALU;
|
input [2:0] rMXALU;
|
input rBRA, rDLY;
|
input rBRA, rDLY;
|
Line 84... |
Line 86... |
input [15:0] rIMM;
|
input [15:0] rIMM;
|
input [5:0] rOPC;
|
input [5:0] rOPC;
|
input [4:0] rRD;
|
input [4:0] rRD;
|
input [31:0] rDWBDI;
|
input [31:0] rDWBDI;
|
input [31:2] rPC;
|
input [31:2] rPC;
|
//input [31:0] rRES_MUL; // External Multiplier
|
|
//input [31:0] rRES_BSF; // External Barrel Shifter
|
|
|
|
// SYSTEM
|
// SYSTEM
|
input gclk, grst, gena;
|
input gclk, grst, gena;
|
|
|
reg rMSR_C, xMSR_C;
|
reg rMSR_C, xMSR_C;
|
Line 186... |
Line 186... |
(fMFPC) ? rPC :
|
(fMFPC) ? rPC :
|
(rRA[3]) ? rOPB :
|
(rRA[3]) ? rOPB :
|
rOPA;
|
rOPA;
|
|
|
// --- MULTIPLIER ------------------------------------------
|
// --- MULTIPLIER ------------------------------------------
|
|
// TODO: 2 stage multiplier
|
|
|
reg [31:0] rRES_MUL;
|
reg [31:0] rRES_MUL;
|
always @(/*AUTOSENSE*/rOPA or rOPB) begin
|
always @(/*AUTOSENSE*/rOPA or rOPB) begin
|
rRES_MUL <= (rOPA * rOPB);
|
rRES_MUL <= (rOPA * rOPB);
|
end
|
end
|
Line 277... |
Line 278... |
|
|
// IE/BIP/BE
|
// IE/BIP/BE
|
wire fRTID = (rOPC == 6'o55) & rRD[0];
|
wire fRTID = (rOPC == 6'o55) & rRD[0];
|
wire fRTBD = (rOPC == 6'o55) & rRD[1];
|
wire fRTBD = (rOPC == 6'o55) & rRD[1];
|
wire fBRK = ((rOPC == 6'o56) | (rOPC == 6'o66)) & (rRA == 5'hC);
|
wire fBRK = ((rOPC == 6'o56) | (rOPC == 6'o66)) & (rRA == 5'hC);
|
wire fXCE = ((rOPC == 6'o56) | (rOPC == 6'o66)) & (rRA == 5'hE);
|
wire fINT = ((rOPC == 6'o56) | (rOPC == 6'o66)) & (rRA == 5'hE);
|
|
|
always @(/*AUTOSENSE*/fMTS or fRTID or fXCE or rMSR_IE or rOPA)
|
always @(/*AUTOSENSE*/fINT or fMTS or fRTID or rMSR_IE or rOPA)
|
xMSR_IE <= (fXCE) ? 1'b0 :
|
xMSR_IE <= (fINT) ? 1'b0 :
|
(fRTID) ? 1'b1 :
|
(fRTID) ? 1'b1 :
|
(fMTS) ? rOPA[1] :
|
(fMTS) ? rOPA[1] :
|
rMSR_IE;
|
rMSR_IE;
|
|
|
always @(/*AUTOSENSE*/fBRK or fMTS or fRTBD or rMSR_BIP or rOPA)
|
always @(/*AUTOSENSE*/fBRK or fMTS or fRTBD or rMSR_BIP or rOPA)
|