Line 1... |
Line 1... |
// -*- Mode: Verilog -*-
|
// -*- Mode: Verilog -*-
|
// Filename : aeMB_core.v
|
// Filename : aeMB_core.v
|
// Description : Microblaze Compatible Core
|
// Description : Microblaze Compatible Core
|
// Author : Shawn Tan Ser Ngiap <shawn.tan@aeste.net>
|
// Author : Shawn Tan Ser Ngiap <shawn.tan@aeste.net>
|
// Created On : Fri Dec 29 16:15:18 2006
|
// Created On : Fri Dec 29 16:15:18 2006
|
// Last Modified By: Shawn Tan
|
// Last Modified By: $Author: sybreon $
|
// Last Modified On: 2006-12-29
|
// Last Modified On: $Date: 2007-04-04 06:13:23 $
|
// Update Count : 0
|
// Update Count : $Revision: 1.2 $
|
// Status : Unknown, Use with caution!
|
// Status : $State: Exp $
|
|
|
/*
|
/*
|
* $Id: aeMB_core.v,v 1.1 2007-03-09 17:52:17 sybreon Exp $
|
* $Id: aeMB_core.v,v 1.2 2007-04-04 06:13:23 sybreon Exp $
|
*
|
*
|
|
* AEMB 32-bit Microblaze Compatible Core
|
* Copyright (C) 2006 Shawn Tan Ser Ngiap <shawn.tan@aeste.net>
|
* Copyright (C) 2006 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 modify it
|
* under the terms of the GNU Lesser General Public License as published by
|
* under the terms of the GNU Lesser General Public License as published by
|
* the Free Software Foundation; either version 2.1 of the License,
|
* the Free Software Foundation; either version 2.1 of the License,
|
Line 32... |
Line 33... |
* 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.1 2007/03/09 17:52:17 sybreon
|
|
* initial import
|
*
|
*
|
*/
|
*/
|
|
|
module aeMB_core (/*AUTOARG*/
|
module aeMB_core (/*AUTOARG*/
|
// Outputs
|
// Outputs
|
iwb_we_o, iwb_stb_o, iwb_sel_o, iwb_adr_o, dwb_we_o, dwb_stb_o,
|
iwb_stb_o, iwb_adr_o, dwb_we_o, dwb_stb_o, dwb_dat_o, dwb_adr_o,
|
dwb_dat_o, dwb_adr_o,
|
|
// Inputs
|
// Inputs
|
sys_run_i, sys_rst_i, sys_int_i, sys_exc_i, sys_clk_i, iwb_dat_i,
|
sys_run_i, sys_rst_i, sys_int_i, sys_exc_i, sys_clk_i, iwb_dat_i,
|
iwb_ack_i, dwb_dat_i, dwb_ack_i
|
iwb_ack_i, dwb_dat_i, dwb_ack_i
|
);
|
);
|
// Instruction WB address space
|
// Instruction WB address space
|
Line 55... |
Line 57... |
output [DSIZ-1:0] dwb_adr_o; // From aslu of aeMB_aslu.v
|
output [DSIZ-1:0] dwb_adr_o; // From aslu of aeMB_aslu.v
|
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 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 [3:0] iwb_sel_o; // From decode of aeMB_decode.v
|
|
output iwb_stb_o; // From decode of aeMB_decode.v
|
output iwb_stb_o; // From decode of aeMB_decode.v
|
output iwb_we_o; // From decode of aeMB_decode.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 88... |
Line 88... |
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 decode of aeMB_decode.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] 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 [31:0] rPCNXT; // From fetch of aeMB_fetch.v
|
wire [31:0] rPCNXT; // From fetch of aeMB_fetch.v
|
Line 187... |
Line 188... |
.rOPC (rOPC[5:0]),
|
.rOPC (rOPC[5:0]),
|
.rPC (rPC[31:0]),
|
.rPC (rPC[31:0]),
|
.rIMM (rIMM[15:0]),
|
.rIMM (rIMM[15:0]),
|
.rRD (rRD[4:0]),
|
.rRD (rRD[4:0]),
|
.rRA (rRA[4:0]),
|
.rRA (rRA[4:0]),
|
|
.rMXLDST (rMXLDST[1:0]),
|
.nclk (nclk),
|
.nclk (nclk),
|
.nrst (nrst),
|
.nrst (nrst),
|
.drun (drun),
|
.drun (drun),
|
.drst (drst));
|
.drst (drst));
|
|
|
Line 213... |
Line 215... |
.rIWBSTB (rIWBSTB),
|
.rIWBSTB (rIWBSTB),
|
.rDLY (rDLY),
|
.rDLY (rDLY),
|
.rLNK (rLNK),
|
.rLNK (rLNK),
|
.rBRA (rBRA),
|
.rBRA (rBRA),
|
.rRWE (rRWE),
|
.rRWE (rRWE),
|
.iwb_sel_o (iwb_sel_o[3:0]),
|
.rMXLDST (rMXLDST[1:0]),
|
.iwb_stb_o (iwb_stb_o),
|
.iwb_stb_o (iwb_stb_o),
|
.iwb_we_o (iwb_we_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
|
.rREGA (rREGA[31:0]),
|
.rREGA (rREGA[31:0]),
|
.rRESULT (rRESULT[31:0]),
|
.rRESULT (rRESULT[31:0]),
|