Line 1... |
Line 1... |
/*
|
/*
|
* $Id: aeMB_aslu.v,v 1.8 2007-04-30 15:56:50 sybreon Exp $
|
* $Id: aeMB_aslu.v,v 1.9 2007-05-17 09:08:21 sybreon Exp $
|
*
|
*
|
* AEMB Arithmetic Shift Logic Unit
|
* AEMB Arithmetic Shift Logic 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>
|
*
|
*
|
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
Line 23... |
Line 23... |
* Arithmetic, shift and logic execution unit. It also performs the
|
* Arithmetic, shift and logic execution unit. It also performs the
|
* necessary calculations for branch and load/store targets.
|
* necessary calculations for branch and load/store targets.
|
*
|
*
|
* HISTORY
|
* HISTORY
|
* $Log: not supported by cvs2svn $
|
* $Log: not supported by cvs2svn $
|
|
* Revision 1.8 2007/04/30 15:56:50 sybreon
|
|
* Removed byte acrobatics.
|
|
*
|
* Revision 1.7 2007/04/27 00:23:55 sybreon
|
* Revision 1.7 2007/04/27 00:23:55 sybreon
|
* Added code documentation.
|
* Added code documentation.
|
* Improved size & speed of rtl/verilog/aeMB_aslu.v
|
* Improved size & speed of rtl/verilog/aeMB_aslu.v
|
*
|
*
|
* Revision 1.6 2007/04/26 14:29:53 sybreon
|
* Revision 1.6 2007/04/26 14:29:53 sybreon
|
Line 53... |
Line 56... |
module aeMB_aslu (/*AUTOARG*/
|
module aeMB_aslu (/*AUTOARG*/
|
// Outputs
|
// Outputs
|
dwb_adr_o, dwb_sel_o, rRESULT, rDWBSEL,
|
dwb_adr_o, dwb_sel_o, rRESULT, rDWBSEL,
|
// Inputs
|
// Inputs
|
sDWBDAT, rBRA, rDLY, rREGA, rREGB, rSIMM, rMXSRC, rMXTGT, rMXALU,
|
sDWBDAT, rBRA, rDLY, rREGA, rREGB, rSIMM, rMXSRC, rMXTGT, rMXALU,
|
rOPC, rPC, rIMM, rRD, rRA, rMXLDST, nclk, nrst, drun, nrun
|
rOPC, rPC, rIMM, rRD, rRA, rMXLDST, nclk, prst, drun, prun
|
);
|
);
|
parameter DSIZ = 32;
|
parameter DSIZ = 32;
|
|
|
output [DSIZ-1:0] dwb_adr_o;
|
output [DSIZ-1:0] dwb_adr_o;
|
output [3:0] dwb_sel_o;
|
output [3:0] dwb_sel_o;
|
Line 74... |
Line 77... |
input [31:0] rPC;
|
input [31:0] rPC;
|
input [15:0] rIMM;
|
input [15:0] rIMM;
|
input [4:0] rRD, rRA;
|
input [4:0] rRD, rRA;
|
input [1:0] rMXLDST;
|
input [1:0] rMXLDST;
|
|
|
input nclk, nrst, drun, nrun;
|
input nclk, prst, drun, prun;
|
|
|
reg [31:0] rRESULT, xRESULT;
|
reg [31:0] rRESULT, xRESULT;
|
reg rMSR_C, xMSR_C;
|
reg rMSR_C, xMSR_C;
|
|
|
/**
|
/**
|
Line 256... |
Line 259... |
endcase // case (rMXALU)
|
endcase // case (rMXALU)
|
end
|
end
|
|
|
// PIPELINE REGISTER //////////////////////////////////////////////////
|
// PIPELINE REGISTER //////////////////////////////////////////////////
|
|
|
always @(negedge nclk or negedge nrst)
|
always @(negedge nclk)
|
if (!nrst) begin
|
if (prst) begin
|
/*AUTORESET*/
|
/*AUTORESET*/
|
// Beginning of autoreset for uninitialized flops
|
// Beginning of autoreset for uninitialized flops
|
rDWBSEL <= 4'h0;
|
rDWBSEL <= 4'h0;
|
rMSR_C <= 1'h0;
|
rMSR_C <= 1'h0;
|
rRESULT <= 32'h0;
|
rRESULT <= 32'h0;
|
// End of automatics
|
// End of automatics
|
end else if (nrun) begin
|
end else if (prun) begin
|
rRESULT <= #1 xRESULT;
|
rRESULT <= #1 xRESULT;
|
rMSR_C <= #1 xMSR_C;
|
rMSR_C <= #1 xMSR_C;
|
rDWBSEL <= #1 xDWBSEL;
|
rDWBSEL <= #1 xDWBSEL;
|
end
|
end
|
|
|