Line 1... |
Line 1... |
/*
|
/*
|
* $Id: aeMB_core.v,v 1.4 2007-04-25 22:15:04 sybreon Exp $
|
* $Id: aeMB_core.v,v 1.5 2007-04-27 00:23:55 sybreon Exp $
|
*
|
*
|
* AEMB 32-bit Microblaze Compatible Core
|
* AEMB 32-bit Microblaze Compatible Core
|
* Copyright (C) 2006 Shawn Tan Ser Ngiap <shawn.tan@aeste.net>
|
* Copyright (C) 2004-2007 Shawn Tan Ser Ngiap <shawn.tan@aeste.net>
|
*
|
*
|
* This library is free software; you can redistribute it and/or modify it
|
* This library is free software; you can redistribute it and/or
|
* under the terms of the GNU Lesser General Public License as published by
|
* modify it under the terms of the GNU Lesser General Public License
|
* the Free Software Foundation; either version 2.1 of the License,
|
* as published by the Free Software Foundation; either version 2.1 of
|
* or (at your option) any later version.
|
* the License, or (at your option) any later version.
|
*
|
*
|
* This library is distributed in the hope that it will be useful, but
|
* This library is distributed in the hope that it will be useful, but
|
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
* License for more details.
|
* Lesser General Public License for more details.
|
*
|
*
|
* You should have received a copy of the GNU Lesser General Public License
|
* You should have received a copy of the GNU Lesser General Public
|
* along with this library; if not, write to the Free Software Foundation, Inc.,
|
* License along with this library; if not, write to the Free Software
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
|
|
* USA
|
*
|
*
|
* DESCRIPTION
|
* DESCRIPTION
|
* Microblaze compatible, WISHBONE compliant hardware core. This core is
|
* Microblaze compatible, WISHBONE compliant hardware core. This core is
|
* capable of executing software compile for EDK 2.1 using GCC. It has the
|
* capable of executing software compile for EDK 2.1 using GCC. It has the
|
* capability of handling interrupts as well as exceptions.
|
* capability of handling interrupts as well as exceptions.
|
*
|
*
|
* HISTORY
|
* HISTORY
|
* $Log: not supported by cvs2svn $
|
* $Log: not supported by cvs2svn $
|
|
* Revision 1.4 2007/04/25 22:15:04 sybreon
|
|
* Added support for 8-bit and 16-bit data types.
|
|
*
|
* Revision 1.3 2007/04/11 04:30:43 sybreon
|
* Revision 1.3 2007/04/11 04:30:43 sybreon
|
* Added pipeline stalling from incomplete bus cycles.
|
* Added pipeline stalling from incomplete bus cycles.
|
* Separated sync and async portions of code.
|
* Separated sync and async portions of code.
|
*
|
*
|
* Revision 1.2 2007/04/04 06:13:23 sybreon
|
* Revision 1.2 2007/04/04 06:13:23 sybreon
|
Line 56... |
Line 60... |
output [31:0] dwb_dat_o; // From regfile of aeMB_regfile.v
|
output [31:0] dwb_dat_o; // From regfile of aeMB_regfile.v
|
output [3:0] dwb_sel_o; // From aslu of aeMB_aslu.v
|
output [3:0] dwb_sel_o; // From aslu of aeMB_aslu.v
|
output dwb_stb_o; // From decode of aeMB_decode.v
|
output dwb_stb_o; // From decode of aeMB_decode.v
|
output dwb_we_o; // From decode of aeMB_decode.v
|
output dwb_we_o; // From decode of aeMB_decode.v
|
output [ISIZ-1:0] iwb_adr_o; // From fetch of aeMB_fetch.v
|
output [ISIZ-1:0] iwb_adr_o; // From fetch of aeMB_fetch.v
|
output iwb_stb_o; // From decode of aeMB_decode.v
|
output iwb_stb_o; // From fetch of aeMB_fetch.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 control of aeMB_control.v
|
input dwb_ack_i; // To control of aeMB_control.v
|
input [31:0] dwb_dat_i; // To regfile of aeMB_regfile.v
|
input [31:0] dwb_dat_i; // To regfile of aeMB_regfile.v
|
Line 83... |
Line 87... |
wire [3:0] rDWBSEL; // From aslu of aeMB_aslu.v
|
wire [3:0] rDWBSEL; // From aslu of aeMB_aslu.v
|
wire rDWBSTB; // From decode of aeMB_decode.v
|
wire rDWBSTB; // From decode of aeMB_decode.v
|
wire rDWBWE; // From decode of aeMB_decode.v
|
wire rDWBWE; // From decode of aeMB_decode.v
|
wire [1:0] rFSM; // From control of aeMB_control.v
|
wire [1:0] rFSM; // From control of aeMB_control.v
|
wire [15:0] rIMM; // From decode of aeMB_decode.v
|
wire [15:0] rIMM; // From decode of aeMB_decode.v
|
wire rIWBSTB; // From decode of aeMB_decode.v
|
wire rIWBSTB; // From fetch of aeMB_fetch.v
|
wire rLNK; // From decode of aeMB_decode.v
|
wire rLNK; // From decode of aeMB_decode.v
|
wire [1:0] rMXALU; // From decode of aeMB_decode.v
|
wire [1:0] rMXALU; // From decode of aeMB_decode.v
|
wire [1:0] rMXLDST; // From decode of aeMB_decode.v
|
wire [1:0] rMXLDST; // From decode of aeMB_decode.v
|
wire [1:0] rMXSRC; // From decode of aeMB_decode.v
|
wire [1:0] rMXSRC; // From decode of aeMB_decode.v
|
wire [1:0] rMXTGT; // From decode of aeMB_decode.v
|
wire [1:0] rMXTGT; // From decode of aeMB_decode.v
|
wire [5:0] rOPC; // From decode of aeMB_decode.v
|
wire [5:0] rOPC; // From decode of aeMB_decode.v
|
wire [31:0] rPC; // From fetch of aeMB_fetch.v
|
wire [31:0] rPC; // From fetch of aeMB_fetch.v
|
wire [4:0] rRA; // From decode of aeMB_decode.v
|
wire [4:0] rRA; // From decode of aeMB_decode.v
|
wire [4:0] rRB; // From decode of aeMB_decode.v
|
wire [4:0] rRB; // From decode of aeMB_decode.v
|
wire [4:0] rRD; // From decode of aeMB_decode.v
|
wire [4:0] rRD; // From decode of aeMB_decode.v
|
wire [4:0] rRD_; // From decode of aeMB_decode.v
|
|
wire [31:0] rREGA; // From regfile of aeMB_regfile.v
|
wire [31:0] rREGA; // From regfile of aeMB_regfile.v
|
wire [31:0] rREGB; // From regfile of aeMB_regfile.v
|
wire [31:0] rREGB; // From regfile of aeMB_regfile.v
|
wire [31:0] rRESULT; // From aslu of aeMB_aslu.v
|
wire [31:0] rRESULT; // From aslu of aeMB_aslu.v
|
wire rRWE; // From decode of aeMB_decode.v
|
wire rRWE; // From decode of aeMB_decode.v
|
wire [31:0] rSIMM; // From decode of aeMB_decode.v
|
wire [31:0] rSIMM; // From decode of aeMB_decode.v
|
wire [31:0] sDWBDAT; // From regfile of aeMB_regfile.v
|
wire [31:0] sDWBDAT; // From regfile of aeMB_regfile.v
|
// End of automatics
|
// End of automatics
|
|
|
|
// INSTANTIATIONS /////////////////////////////////////////////////////////////////
|
|
|
aeMB_regfile #(DSIZ)
|
aeMB_regfile #(DSIZ)
|
regfile (/*AUTOINST*/
|
regfile (/*AUTOINST*/
|
// Outputs
|
// Outputs
|
.dwb_dat_o (dwb_dat_o[31:0]),
|
.dwb_dat_o (dwb_dat_o[31:0]),
|
.rREGA (rREGA[31:0]),
|
.rREGA (rREGA[31:0]),
|
Line 117... |
Line 122... |
.rDWBSTB (rDWBSTB),
|
.rDWBSTB (rDWBSTB),
|
.rDWBWE (rDWBWE),
|
.rDWBWE (rDWBWE),
|
.rRA (rRA[4:0]),
|
.rRA (rRA[4:0]),
|
.rRB (rRB[4:0]),
|
.rRB (rRB[4:0]),
|
.rRD (rRD[4:0]),
|
.rRD (rRD[4:0]),
|
.rRD_ (rRD_[4:0]),
|
|
.rRESULT (rRESULT[31:0]),
|
.rRESULT (rRESULT[31:0]),
|
.rFSM (rFSM[1:0]),
|
.rFSM (rFSM[1:0]),
|
.rPC (rPC[31:0]),
|
.rPC (rPC[31:0]),
|
.rOPC (rOPC[5:0]),
|
.rOPC (rOPC[5:0]),
|
.rDWBSEL (rDWBSEL[3:0]),
|
.rDWBSEL (rDWBSEL[3:0]),
|
Line 134... |
Line 138... |
|
|
aeMB_fetch #(ISIZ)
|
aeMB_fetch #(ISIZ)
|
fetch (/*AUTOINST*/
|
fetch (/*AUTOINST*/
|
// Outputs
|
// Outputs
|
.iwb_adr_o (iwb_adr_o[ISIZ-1:0]),
|
.iwb_adr_o (iwb_adr_o[ISIZ-1:0]),
|
|
.iwb_stb_o (iwb_stb_o),
|
.rPC (rPC[31:0]),
|
.rPC (rPC[31:0]),
|
|
.rIWBSTB (rIWBSTB),
|
// Inputs
|
// Inputs
|
.iwb_dat_i (iwb_dat_i[31:0]),
|
.iwb_dat_i (iwb_dat_i[31:0]),
|
.nclk (nclk),
|
.nclk (nclk),
|
.nrst (nrst),
|
.nrst (nrst),
|
.nrun (nrun),
|
.nrun (nrun),
|
Line 203... |
Line 209... |
.rMXSRC (rMXSRC[1:0]),
|
.rMXSRC (rMXSRC[1:0]),
|
.rMXTGT (rMXTGT[1:0]),
|
.rMXTGT (rMXTGT[1:0]),
|
.rRA (rRA[4:0]),
|
.rRA (rRA[4:0]),
|
.rRB (rRB[4:0]),
|
.rRB (rRB[4:0]),
|
.rRD (rRD[4:0]),
|
.rRD (rRD[4:0]),
|
.rRD_ (rRD_[4:0]),
|
|
.rOPC (rOPC[5:0]),
|
.rOPC (rOPC[5:0]),
|
.rIMM (rIMM[15:0]),
|
.rIMM (rIMM[15:0]),
|
.rDWBSTB (rDWBSTB),
|
.rDWBSTB (rDWBSTB),
|
.rDWBWE (rDWBWE),
|
.rDWBWE (rDWBWE),
|
.rIWBSTB (rIWBSTB),
|
|
.rDLY (rDLY),
|
.rDLY (rDLY),
|
.rLNK (rLNK),
|
.rLNK (rLNK),
|
.rBRA (rBRA),
|
.rBRA (rBRA),
|
.rRWE (rRWE),
|
.rRWE (rRWE),
|
.rMXLDST (rMXLDST[1:0]),
|
.rMXLDST (rMXLDST[1:0]),
|
.iwb_stb_o (iwb_stb_o),
|
|
.dwb_stb_o (dwb_stb_o),
|
.dwb_stb_o (dwb_stb_o),
|
.dwb_we_o (dwb_we_o),
|
.dwb_we_o (dwb_we_o),
|
// Inputs
|
// Inputs
|
.sDWBDAT (sDWBDAT[31:0]),
|
.sDWBDAT (sDWBDAT[31:0]),
|
.rDWBSEL (rDWBSEL[3:0]),
|
.rDWBSEL (rDWBSEL[3:0]),
|