Line 1... |
Line 1... |
// $Id: aeMB_edk32.v,v 1.3 2007-11-03 08:34:55 sybreon Exp $
|
// $Id: aeMB_edk32.v,v 1.4 2007-11-08 14:17:47 sybreon Exp $
|
//
|
//
|
// AEMB EDK 3.2 Compatible Core
|
// AEMB EDK 3.2 Compatible Core
|
//
|
//
|
// 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... |
// License along with this library; if not, write to the Free Software
|
// License along with this library; if not, write to the Free Software
|
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
|
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
|
// USA
|
// USA
|
//
|
//
|
// $Log: not supported by cvs2svn $
|
// $Log: not supported by cvs2svn $
|
|
// Revision 1.3 2007/11/03 08:34:55 sybreon
|
|
// Minor code cleanup.
|
|
//
|
// Revision 1.2 2007/11/02 19:20:58 sybreon
|
// Revision 1.2 2007/11/02 19:20:58 sybreon
|
// Added better (beta) interrupt support.
|
// Added better (beta) interrupt support.
|
// Changed MSR_IE to disabled at reset as per MB docs.
|
// Changed MSR_IE to disabled at reset as per MB docs.
|
//
|
//
|
// Revision 1.1 2007/11/02 03:25:40 sybreon
|
// Revision 1.1 2007/11/02 03:25:40 sybreon
|
Line 36... |
Line 39... |
dwb_adr_o,
|
dwb_adr_o,
|
// Inputs
|
// Inputs
|
sys_rst_i, sys_int_i, sys_clk_i, iwb_dat_i, iwb_ack_i, dwb_dat_i,
|
sys_rst_i, sys_int_i, sys_clk_i, iwb_dat_i, iwb_ack_i, dwb_dat_i,
|
dwb_ack_i
|
dwb_ack_i
|
);
|
);
|
|
// Bus widths
|
parameter IW = 32;
|
parameter IW = 32; /// Instruction bus address width
|
parameter DW = 32;
|
parameter DW = 32; /// Data bus address width
|
|
|
|
// Optional functions
|
|
parameter MUL = 1; // Multiplier
|
|
parameter BSF = 1; // Barrel Shifter
|
|
|
/*AUTOOUTPUT*/
|
/*AUTOOUTPUT*/
|
// Beginning of automatic outputs (from unused autoinst outputs)
|
// Beginning of automatic outputs (from unused autoinst outputs)
|
output [DW-1:2] dwb_adr_o; // From xecu of aeMB_xecu.v
|
output [DW-1:2] dwb_adr_o; // From xecu of aeMB_xecu.v
|
output [31:0] dwb_dat_o; // From regf of aeMB_regf.v
|
output [31:0] dwb_dat_o; // From regf of aeMB_regf.v
|
Line 52... |
Line 59... |
output [IW-1:2] iwb_adr_o; // From bpcu of aeMB_bpcu.v
|
output [IW-1:2] iwb_adr_o; // From bpcu of aeMB_bpcu.v
|
output iwb_stb_o; // From ibuf of aeMB_ibuf.v
|
output iwb_stb_o; // From ibuf of aeMB_ibuf.v
|
// End of automatics
|
// End of automatics
|
/*AUTOINPUT*/
|
/*AUTOINPUT*/
|
// Beginning of automatic inputs (from unused autoinst inputs)
|
// Beginning of automatic inputs (from unused autoinst inputs)
|
input dwb_ack_i; // To scon of aeMB_scon.v
|
input dwb_ack_i; // To scon of aeMB_scon.v, ...
|
input [31:0] dwb_dat_i; // To regf of aeMB_regf.v
|
input [31:0] dwb_dat_i; // To regf of aeMB_regf.v
|
input iwb_ack_i; // To scon of aeMB_scon.v, ...
|
input iwb_ack_i; // To scon of aeMB_scon.v, ...
|
input [31:0] iwb_dat_i; // To ibuf of aeMB_ibuf.v
|
input [31:0] iwb_dat_i; // To ibuf of aeMB_ibuf.v
|
input sys_clk_i; // To scon of aeMB_scon.v
|
input sys_clk_i; // To scon of aeMB_scon.v
|
input sys_int_i; // To scon of aeMB_scon.v
|
input sys_int_i; // To scon of aeMB_scon.v
|
Line 94... |
Line 101... |
wire [4:0] rRW; // From ctrl of aeMB_ctrl.v
|
wire [4:0] rRW; // From ctrl of aeMB_ctrl.v
|
wire [31:0] rSIMM; // From ibuf of aeMB_ibuf.v
|
wire [31:0] rSIMM; // From ibuf of aeMB_ibuf.v
|
wire [1:0] rXCE; // From scon of aeMB_scon.v
|
wire [1:0] rXCE; // From scon of aeMB_scon.v
|
// End of automatics
|
// End of automatics
|
|
|
wire [31:0] rOPA, rOPB;
|
|
wire [31:0] rRES_MUL, rRES_BSF;
|
|
|
|
// --- OPTIONAL COMPONENTS -----------------------------------
|
|
// Trade off hardware size/speed for software speed
|
|
|
|
aeMB_mult
|
|
mult (
|
|
// Outputs
|
|
.rRES_MUL (rRES_MUL[31:0]),
|
|
// Inputs
|
|
.rOPA (rOPA[31:0]),
|
|
.rOPB (rOPB[31:0]));
|
|
|
|
aeMB_bsft
|
|
bsft (
|
|
// Outputs
|
|
.rRES_BSF (rRES_BSF[31:0]),
|
|
// Inputs
|
|
.rOPA (rOPA[31:0]),
|
|
.rOPB (rOPB[31:0]),
|
|
.rALT (rALT[10:0]));
|
|
|
|
|
|
// --- NON-OPTIONAL COMPONENTS -------------------------------
|
|
// These components make up the main AEMB processor.
|
|
|
|
aeMB_scon
|
aeMB_scon
|
scon (/*AUTOINST*/
|
scon (/*AUTOINST*/
|
// Outputs
|
// Outputs
|
.rXCE (rXCE[1:0]),
|
.rXCE (rXCE[1:0]),
|
.grst (grst),
|
.grst (grst),
|
Line 186... |
Line 166... |
.rRA (rRA[4:0]),
|
.rRA (rRA[4:0]),
|
.rRB (rRB[4:0]),
|
.rRB (rRB[4:0]),
|
.rPC (rPC[31:2]),
|
.rPC (rPC[31:2]),
|
.rBRA (rBRA),
|
.rBRA (rBRA),
|
.rMSR_IE (rMSR_IE),
|
.rMSR_IE (rMSR_IE),
|
|
.dwb_ack_i (dwb_ack_i),
|
.gclk (gclk),
|
.gclk (gclk),
|
.grst (grst),
|
.grst (grst),
|
.gena (gena));
|
.gena (gena));
|
|
|
aeMB_bpcu #(IW)
|
aeMB_bpcu #(IW)
|
Line 236... |
Line 217... |
.dwb_dat_i (dwb_dat_i[31:0]),
|
.dwb_dat_i (dwb_dat_i[31:0]),
|
.gclk (gclk),
|
.gclk (gclk),
|
.grst (grst),
|
.grst (grst),
|
.gena (gena));
|
.gena (gena));
|
|
|
aeMB_xecu #(DW)
|
aeMB_xecu #(DW, MUL, BSF)
|
xecu (
|
xecu (/*AUTOINST*/
|
.rOPA (rOPA[31:0]),
|
|
.rOPB (rOPB[31:0]),
|
|
/*AUTOINST*/
|
|
// Outputs
|
// Outputs
|
.dwb_adr_o (dwb_adr_o[DW-1:2]),
|
.dwb_adr_o (dwb_adr_o[DW-1:2]),
|
.dwb_sel_o (dwb_sel_o[3:0]),
|
.dwb_sel_o (dwb_sel_o[3:0]),
|
.rRESULT (rRESULT[31:0]),
|
.rRESULT (rRESULT[31:0]),
|
.rDWBSEL (rDWBSEL[3:0]),
|
.rDWBSEL (rDWBSEL[3:0]),
|
Line 258... |
Line 236... |
.rMXTGT (rMXTGT[1:0]),
|
.rMXTGT (rMXTGT[1:0]),
|
.rRA (rRA[4:0]),
|
.rRA (rRA[4:0]),
|
.rMXALU (rMXALU[2:0]),
|
.rMXALU (rMXALU[2:0]),
|
.rBRA (rBRA),
|
.rBRA (rBRA),
|
.rDLY (rDLY),
|
.rDLY (rDLY),
|
|
.rALT (rALT[10:0]),
|
.rSIMM (rSIMM[31:0]),
|
.rSIMM (rSIMM[31:0]),
|
.rIMM (rIMM[15:0]),
|
.rIMM (rIMM[15:0]),
|
.rOPC (rOPC[5:0]),
|
.rOPC (rOPC[5:0]),
|
.rRD (rRD[4:0]),
|
.rRD (rRD[4:0]),
|
.rDWBDI (rDWBDI[31:0]),
|
.rDWBDI (rDWBDI[31:0]),
|
.rPC (rPC[31:2]),
|
.rPC (rPC[31:2]),
|
.rRES_MUL (rRES_MUL[31:0]),
|
|
.rRES_BSF (rRES_BSF[31:0]),
|
|
.gclk (gclk),
|
.gclk (gclk),
|
.grst (grst),
|
.grst (grst),
|
.gena (gena));
|
.gena (gena));
|
|
|
|
|