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 lsu_tagdp( /*AUTOARG*/
|
module lsu_tagdp( /*AUTOARG*/
|
// Outputs
|
// Outputs
|
so, lsu_misc_rdata_w2, lsu_rd_dtag_parity_g,
|
so, lsu_misc_rdata_w2, lsu_rd_dtag_parity_g,
|
// Inputs
|
// Inputs
|
rclk, si, se, lsu_va_wtchpt_addr, lsu_va_wtchpt_sel_g, dva_vld_m,
|
rclk, si, se, lsu_va_wtchpt_addr, lsu_va_wtchpt_sel_g, dva_vld_m,
|
Line 97... |
Line 102... |
.sel2 (lsu_dtag_rsel_m[2]),
|
.sel2 (lsu_dtag_rsel_m[2]),
|
.sel3 (lsu_dtag_rsel_m[3]),
|
.sel3 (lsu_dtag_rsel_m[3]),
|
.dout ({dtag_rdata_sel_m[29:0],dtag_vld_sel_m})
|
.dout ({dtag_rdata_sel_m[29:0],dtag_vld_sel_m})
|
);
|
);
|
|
|
dff #(31) dtag_rdata_sel_g_ff (
|
dff_s #(31) dtag_rdata_sel_g_ff (
|
.din ({dtag_rdata_sel_m[29:0],dtag_vld_sel_m}),
|
.din ({dtag_rdata_sel_m[29:0],dtag_vld_sel_m}),
|
.q ({dtag_rdata_sel_g[29:0],dtag_vld_sel_g}),
|
.q ({dtag_rdata_sel_g[29:0],dtag_vld_sel_g}),
|
.clk (clk),
|
.clk (clk),
|
.se (se), .si (), .so ());
|
.se (se), `SIMPLY_RISC_SCANIN, .so ());
|
|
|
mux4ds #(64) lsu_misc_rdata_sel (
|
mux4ds #(64) lsu_misc_rdata_sel (
|
.in0 ({16'h0,lsu_local_ldxa_data_g[47:0]}),
|
.in0 ({16'h0,lsu_local_ldxa_data_g[47:0]}),
|
.in1 (lsu_tlb_rd_data[63:0]),
|
.in1 (lsu_tlb_rd_data[63:0]),
|
.in2 ({16'h0,lsu_va_wtchpt_addr[47:3],3'b000}),
|
.in2 ({16'h0,lsu_va_wtchpt_addr[47:3],3'b000}),
|
Line 115... |
Line 120... |
.sel2 (lsu_va_wtchpt_sel_g),
|
.sel2 (lsu_va_wtchpt_sel_g),
|
.sel3 (lsu_local_diagnstc_tagrd_sel_g),
|
.sel3 (lsu_local_diagnstc_tagrd_sel_g),
|
.dout (lsu_misc_rdata_g[63:0])
|
.dout (lsu_misc_rdata_g[63:0])
|
);
|
);
|
|
|
dff #(64) lsu_misc_rdata_w2_ff (
|
dff_s #(64) lsu_misc_rdata_w2_ff (
|
.din (lsu_misc_rdata_g[63:0]),
|
.din (lsu_misc_rdata_g[63:0]),
|
.q (lsu_misc_rdata_w2[63:0]),
|
.q (lsu_misc_rdata_w2[63:0]),
|
.clk (clk),
|
.clk (clk),
|
.se (se), .si (), .so ());
|
.se (se), `SIMPLY_RISC_SCANIN, .so ());
|
|
|
|
|
//=================================================================================================
|
//=================================================================================================
|
// Tag Parity Calculation
|
// Tag Parity Calculation
|
//=================================================================================================
|
//=================================================================================================
|
|
|
// flop tag parity bits
|
// flop tag parity bits
|
dff #(4) dtag_rdata_parity_g_ff (
|
dff_s #(4) dtag_rdata_parity_g_ff (
|
.din ({dtag_rdata_w0_m[29],
|
.din ({dtag_rdata_w0_m[29],
|
dtag_rdata_w1_m[29],
|
dtag_rdata_w1_m[29],
|
dtag_rdata_w2_m[29],
|
dtag_rdata_w2_m[29],
|
dtag_rdata_w3_m[29]}),
|
dtag_rdata_w3_m[29]}),
|
.q ({dtag_rdata_w0_parity_g,
|
.q ({dtag_rdata_w0_parity_g,
|
dtag_rdata_w1_parity_g,
|
dtag_rdata_w1_parity_g,
|
dtag_rdata_w2_parity_g,
|
dtag_rdata_w2_parity_g,
|
dtag_rdata_w3_parity_g}),
|
dtag_rdata_w3_parity_g}),
|
.clk (clk),
|
.clk (clk),
|
.se (se), .si (), .so ());
|
.se (se), `SIMPLY_RISC_SCANIN, .so ());
|
|
|
|
|
// generate 8bit parity for all ways before g-flop
|
// generate 8bit parity for all ways before g-flop
|
assign dtag_rdata_w0_8b_parity_m[0] = ^dtag_rdata_w0_m[7:0] ;
|
assign dtag_rdata_w0_8b_parity_m[0] = ^dtag_rdata_w0_m[7:0] ;
|
assign dtag_rdata_w0_8b_parity_m[1] = ^dtag_rdata_w0_m[15:8] ;
|
assign dtag_rdata_w0_8b_parity_m[1] = ^dtag_rdata_w0_m[15:8] ;
|
Line 164... |
Line 169... |
assign dtag_rdata_w3_8b_parity_m[3] = ^dtag_rdata_w3_m[28:24] ;
|
assign dtag_rdata_w3_8b_parity_m[3] = ^dtag_rdata_w3_m[28:24] ;
|
|
|
|
|
// g-flop for 8-bit parity for all 4 ways
|
// g-flop for 8-bit parity for all 4 ways
|
|
|
dff #(4) dtag_rdata_w0_8b_parity_g_ff (
|
dff_s #(4) dtag_rdata_w0_8b_parity_g_ff (
|
.din (dtag_rdata_w0_8b_parity_m[3:0]),
|
.din (dtag_rdata_w0_8b_parity_m[3:0]),
|
.q (dtag_rdata_w0_8b_parity_g[3:0]),
|
.q (dtag_rdata_w0_8b_parity_g[3:0]),
|
.clk (clk),
|
.clk (clk),
|
.se (se), .si (), .so ());
|
.se (se), `SIMPLY_RISC_SCANIN, .so ());
|
|
|
dff #(4) dtag_rdata_w1_8b_parity_g_ff (
|
dff_s #(4) dtag_rdata_w1_8b_parity_g_ff (
|
.din (dtag_rdata_w1_8b_parity_m[3:0]),
|
.din (dtag_rdata_w1_8b_parity_m[3:0]),
|
.q (dtag_rdata_w1_8b_parity_g[3:0]),
|
.q (dtag_rdata_w1_8b_parity_g[3:0]),
|
.clk (clk),
|
.clk (clk),
|
.se (se), .si (), .so ());
|
.se (se), `SIMPLY_RISC_SCANIN, .so ());
|
|
|
dff #(4) dtag_rdata_w2_8b_parity_g_ff (
|
dff_s #(4) dtag_rdata_w2_8b_parity_g_ff (
|
.din (dtag_rdata_w2_8b_parity_m[3:0]),
|
.din (dtag_rdata_w2_8b_parity_m[3:0]),
|
.q (dtag_rdata_w2_8b_parity_g[3:0]),
|
.q (dtag_rdata_w2_8b_parity_g[3:0]),
|
.clk (clk),
|
.clk (clk),
|
.se (se), .si (), .so ());
|
.se (se), `SIMPLY_RISC_SCANIN, .so ());
|
|
|
dff #(4) dtag_rdata_w3_8b_parity_g_ff (
|
dff_s #(4) dtag_rdata_w3_8b_parity_g_ff (
|
.din (dtag_rdata_w3_8b_parity_m[3:0]),
|
.din (dtag_rdata_w3_8b_parity_m[3:0]),
|
.q (dtag_rdata_w3_8b_parity_g[3:0]),
|
.q (dtag_rdata_w3_8b_parity_g[3:0]),
|
.clk (clk),
|
.clk (clk),
|
.se (se), .si (), .so ());
|
.se (se), `SIMPLY_RISC_SCANIN, .so ());
|
|
|
|
|
assign lsu_rd_dtag_parity_g[0] = ^({dtag_rdata_w0_8b_parity_g[3:0],dtag_rdata_w0_parity_g});
|
assign lsu_rd_dtag_parity_g[0] = ^({dtag_rdata_w0_8b_parity_g[3:0],dtag_rdata_w0_parity_g});
|
assign lsu_rd_dtag_parity_g[1] = ^({dtag_rdata_w1_8b_parity_g[3:0],dtag_rdata_w1_parity_g});
|
assign lsu_rd_dtag_parity_g[1] = ^({dtag_rdata_w1_8b_parity_g[3:0],dtag_rdata_w1_parity_g});
|
assign lsu_rd_dtag_parity_g[2] = ^({dtag_rdata_w2_8b_parity_g[3:0],dtag_rdata_w2_parity_g});
|
assign lsu_rd_dtag_parity_g[2] = ^({dtag_rdata_w2_8b_parity_g[3:0],dtag_rdata_w2_parity_g});
|