blob: 59a267ee945e2f9235b847f3c5c83302f8588b44 [file] [log] [blame] [edit]
// ========== Copyright Header Begin ==========================================
//
// OpenSPARC T1 Processor File: scbuf_fbd.v
// Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.
// DO NOT ALTER OR REMOVE COPYRIGHT NOTICES.
//
// The above named program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public
// License version 2 as published by the Free Software Foundation.
//
// The above named program is distributed in the hope that it will be
// useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// General Public License for more details.
//
// You should have received a copy of the GNU General Public
// License along with this work; if not, write to the Free Software
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
//
// ========== Copyright Header End ============================================
`include "iop.h"
module scbuf_fbd
(/*AUTOARG*/
// Outputs
so, sctag_scbuf_fbrd_en_c3_v1, sctag_scbuf_fbrd_en_c3_v2,
sctag_scbuf_fbrd_en_c3_v3, sctag_scbuf_fbrd_en_c3_v4,
sctag_scbuf_fbrd_wl_c3_v1, sctag_scbuf_fbrd_wl_c3_v2,
sctag_scbuf_fbrd_wl_c3_v3, sctag_scbuf_fbrd_wl_c3_v4,
sctag_scbuf_fbwr_wen_r3, sctag_scbuf_fbwr_wren_r3_v4,
sctag_scbuf_fbwr_wren_r3_v3, sctag_scbuf_fbwr_wren_r3_v2,
sctag_scbuf_fbwr_wren_r3_v1, sctag_scbuf_fbwr_wl_r3_v1,
sctag_scbuf_fbwr_wl_r3_v2, sctag_scbuf_fbwr_wl_r3_v3,
sctag_scbuf_fbwr_wl_r3_v4, fb_array_din,
// Inputs
rclk, se, si, sctag_scbuf_fbrd_en_c3,
sctag_scbuf_fbrd_wl_c3, sctag_scbuf_fbwr_wen_r2,
sctag_scbuf_fbwr_wl_r2, sctag_scbuf_fbd_stdatasel_c3,
sctag_scbuf_stdecc_c3, dram_scbuf_data_r2, dram_scbuf_ecc_r2
) ;
input rclk;
input se, si;
input sctag_scbuf_fbrd_en_c3;
input [2:0] sctag_scbuf_fbrd_wl_c3;
input [15:0] sctag_scbuf_fbwr_wen_r2; // dram Fill or store in OFF mode.
input [2:0] sctag_scbuf_fbwr_wl_r2; // dram Fill entry.
input sctag_scbuf_fbd_stdatasel_c3; // select store data in OFF mode
input [77:0] sctag_scbuf_stdecc_c3; // store data goes to scbuf and scdata
input [127:0] dram_scbuf_data_r2; // fill data.
input [27:0] dram_scbuf_ecc_r2; // fill ecc
output so;
output sctag_scbuf_fbrd_en_c3_v1;
output sctag_scbuf_fbrd_en_c3_v2;
output sctag_scbuf_fbrd_en_c3_v3;
output sctag_scbuf_fbrd_en_c3_v4;
output [2:0] sctag_scbuf_fbrd_wl_c3_v1;
output [2:0] sctag_scbuf_fbrd_wl_c3_v2;
output [2:0] sctag_scbuf_fbrd_wl_c3_v3;
output [2:0] sctag_scbuf_fbrd_wl_c3_v4;
output [15:0] sctag_scbuf_fbwr_wen_r3; // dram Fill or store in OFF mode.
output sctag_scbuf_fbwr_wren_r3_v4;
output sctag_scbuf_fbwr_wren_r3_v3;
output sctag_scbuf_fbwr_wren_r3_v2;
output sctag_scbuf_fbwr_wren_r3_v1;
output [2:0] sctag_scbuf_fbwr_wl_r3_v1; // dram Fill entry.
output [2:0] sctag_scbuf_fbwr_wl_r3_v2;
output [2:0] sctag_scbuf_fbwr_wl_r3_v3;
output [2:0] sctag_scbuf_fbwr_wl_r3_v4;
output [623:0] fb_array_din; // FB read data
wire [ 77:0] sctag_scdata_stdecc_c4;
wire [155:0] btu_scbuf_decc_r2, btu_scbuf_decc_r3;
wire [623:0] ram_decc;
wire [623:0] sctag_decc;
wire [2:0] sctag_scbuf_fbwr_wl_r3;
////////////////////////////////////////////////////////////////////////////////
assign sctag_scbuf_fbrd_en_c3_v1 = sctag_scbuf_fbrd_en_c3 ;
assign sctag_scbuf_fbrd_en_c3_v2 = sctag_scbuf_fbrd_en_c3 ;
assign sctag_scbuf_fbrd_en_c3_v3 = sctag_scbuf_fbrd_en_c3 ;
assign sctag_scbuf_fbrd_en_c3_v4 = sctag_scbuf_fbrd_en_c3 ;
assign sctag_scbuf_fbrd_wl_c3_v1[2:0] = sctag_scbuf_fbrd_wl_c3[2:0] ;
assign sctag_scbuf_fbrd_wl_c3_v2[2:0] = sctag_scbuf_fbrd_wl_c3[2:0] ;
assign sctag_scbuf_fbrd_wl_c3_v3[2:0] = sctag_scbuf_fbrd_wl_c3[2:0] ;
assign sctag_scbuf_fbrd_wl_c3_v4[2:0] = sctag_scbuf_fbrd_wl_c3[2:0] ;
dff_s #(16) ff_fbwr_wen_r3
(.q (sctag_scbuf_fbwr_wen_r3[15:0]),
.din (sctag_scbuf_fbwr_wen_r2[15:0]),
.clk (rclk),
.se (1'b0), .si (), .so ()
) ;
assign sctag_scbuf_fbwr_wren_r3_v4 = (sctag_scbuf_fbwr_wen_r3[6] |
sctag_scbuf_fbwr_wen_r3[4] |
sctag_scbuf_fbwr_wen_r3[2] |
sctag_scbuf_fbwr_wen_r3[0]) ;
assign sctag_scbuf_fbwr_wren_r3_v3 = (sctag_scbuf_fbwr_wen_r3[7] |
sctag_scbuf_fbwr_wen_r3[5] |
sctag_scbuf_fbwr_wen_r3[3] |
sctag_scbuf_fbwr_wen_r3[1]) ;
assign sctag_scbuf_fbwr_wren_r3_v2 = (sctag_scbuf_fbwr_wen_r3[14] |
sctag_scbuf_fbwr_wen_r3[12] |
sctag_scbuf_fbwr_wen_r3[10] |
sctag_scbuf_fbwr_wen_r3[8]) ;
assign sctag_scbuf_fbwr_wren_r3_v1 = (sctag_scbuf_fbwr_wen_r3[15] |
sctag_scbuf_fbwr_wen_r3[13] |
sctag_scbuf_fbwr_wen_r3[11] |
sctag_scbuf_fbwr_wen_r3[9]) ;
dff_s #(3) ff_fbwr_wl_r3
(.q (sctag_scbuf_fbwr_wl_r3[2:0]),
.din (sctag_scbuf_fbwr_wl_r2[2:0]),
.clk (rclk),
.se (1'b0), .si (), .so ()
) ;
assign sctag_scbuf_fbwr_wl_r3_v1[2:0] = sctag_scbuf_fbwr_wl_r3[2:0] ;
assign sctag_scbuf_fbwr_wl_r3_v2[2:0] = sctag_scbuf_fbwr_wl_r3[2:0] ;
assign sctag_scbuf_fbwr_wl_r3_v3[2:0] = sctag_scbuf_fbwr_wl_r3[2:0] ;
assign sctag_scbuf_fbwr_wl_r3_v4[2:0] = sctag_scbuf_fbwr_wl_r3[2:0] ;
dff_s #(78) ff_sctag_scdata_stdecc_c4
(.q (sctag_scdata_stdecc_c4[77:0]),
.din (sctag_scbuf_stdecc_c3[77:0]),
.clk (rclk),
.se (1'b0), .si (), .so ()
) ;
assign sctag_decc = {8{sctag_scdata_stdecc_c4[77:0]}} ;
assign btu_scbuf_decc_r2 = {dram_scbuf_data_r2[127:96], dram_scbuf_ecc_r2[27:21],
dram_scbuf_data_r2[ 95:64], dram_scbuf_ecc_r2[20:14],
dram_scbuf_data_r2[ 63:32], dram_scbuf_ecc_r2[13: 7],
dram_scbuf_data_r2[ 31: 0], dram_scbuf_ecc_r2[ 6: 0]} ;
dff_s #(156) ff_btu_scbuf_decc_r3
(.q (btu_scbuf_decc_r3[155:0]),
.din (btu_scbuf_decc_r2[155:0]),
.clk (rclk),
.se (1'b0), .si (), .so ()
) ;
assign ram_decc = {4{btu_scbuf_decc_r3[155:0]}} ;
dff_s #(1) ff_fbd_stdatasel_c4
(.q (sctag_scbuf_fbd_stdatasel_c4),
.din (sctag_scbuf_fbd_stdatasel_c3),
.clk (rclk),
.se (1'b0), .si (), .so ()
) ;
mux2ds #(624) mux_fb_array_din
(.dout (fb_array_din[623:0]),
.in0 (ram_decc[623:0]), .sel0 (~sctag_scbuf_fbd_stdatasel_c4),
.in1 (sctag_decc[623:0]), .sel1 (sctag_scbuf_fbd_stdatasel_c4)
) ;
endmodule