Line 16... |
Line 16... |
// You should have received a copy of the GNU General Public
|
// You should have received a copy of the GNU General Public
|
// License along with this work; if not, write to the Free Software
|
// License along with this work; if not, write to the Free Software
|
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
|
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
|
//
|
//
|
// ========== Copyright Header End ============================================
|
// ========== Copyright Header End ============================================
|
|
`ifdef SIMPLY_RISC_TWEAKS
|
|
`define SIMPLY_RISC_SCANIN .si(0)
|
|
`else
|
|
`define SIMPLY_RISC_SCANIN .si()
|
|
`endif
|
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
/*
|
/*
|
// Module Name: sparc_ifu_imd
|
// Module Name: sparc_ifu_imd
|
// Description:
|
// Description:
|
// Contains the immediate operand datapath. Has two outputs: The
|
// Contains the immediate operand datapath. Has two outputs: The
|
Line 138... |
Line 143... |
//--------
|
//--------
|
// D stage
|
// D stage
|
// Contains the immediate data and branch offset muxes
|
// Contains the immediate data and branch offset muxes
|
//--------
|
//--------
|
|
|
dff #(32) inst_d_reg(.din (fdp_dtu_inst_s),
|
dff_s #(32) inst_d_reg(.din (fdp_dtu_inst_s),
|
.clk (clk),
|
.clk (clk),
|
.q (dtu_inst_d),
|
.q (dtu_inst_d),
|
.se (se), .si(), .so());
|
.se (se), `SIMPLY_RISC_SCANIN, .so());
|
|
|
dff #(1) ifu_lsu_imm_asi_inst(.din (fdp_dtu_inst_s[13]),
|
dff_s #(1) ifu_lsu_imm_asi_inst(.din (fdp_dtu_inst_s[13]),
|
.clk (clk),
|
.clk (clk),
|
.q (ifu_lsu_imm_asi_vld_f),
|
.q (ifu_lsu_imm_asi_vld_f),
|
.se (se), .si(), .so());
|
.se (se), `SIMPLY_RISC_SCANIN, .so());
|
|
|
assign imd_dcl_abit_d = dtu_inst_d[29];
|
assign imd_dcl_abit_d = dtu_inst_d[29];
|
|
|
// imm data select
|
// imm data select
|
// sext12:0 -- add/sub/and/or/xor/taggedOP/jmpl/ld/store/atomic/div/mul/popc
|
// sext12:0 -- add/sub/and/or/xor/taggedOP/jmpl/ld/store/atomic/div/mul/popc
|
Line 206... |
Line 211... |
// if call instruction set rd = 0f (15)
|
// if call instruction set rd = 0f (15)
|
assign ifu_exu_rd_d[3:0] = dtu_inst_d[28:25] | {4{dcl_imd_call_inst_d}};
|
assign ifu_exu_rd_d[3:0] = dtu_inst_d[28:25] | {4{dcl_imd_call_inst_d}};
|
assign ifu_exu_rd_d[4] = (dtu_inst_d[29] & ~dcl_imd_call_inst_d) ^
|
assign ifu_exu_rd_d[4] = (dtu_inst_d[29] & ~dcl_imd_call_inst_d) ^
|
(ifu_exu_rd_d[3] & fcl_imd_oddwin_d);
|
(ifu_exu_rd_d[3] & fcl_imd_oddwin_d);
|
|
|
dff #(5) rde_ff(.din (ifu_exu_rd_d[4:0]),
|
dff_s #(5) rde_ff(.din (ifu_exu_rd_d[4:0]),
|
.clk (clk),
|
.clk (clk),
|
.q (ifu_lsu_rd_e[4:0]),
|
.q (ifu_lsu_rd_e[4:0]),
|
.se (se), .si(), .so());
|
.se (se), `SIMPLY_RISC_SCANIN, .so());
|
|
|
// read/write pr and read/write sr
|
// read/write pr and read/write sr
|
dp_mux2es #(5) sraddr_mux(.dout (sraddr5[4:0]),
|
dp_mux2es #(5) sraddr_mux(.dout (sraddr5[4:0]),
|
.in0 (dtu_inst_d[18:14]), // rs1 for rdpr
|
.in0 (dtu_inst_d[18:14]), // rs1 for rdpr
|
.in1 (dtu_inst_d[29:25]), // rd for wrpr
|
.in1 (dtu_inst_d[29:25]), // rd for wrpr
|