// ========== Copyright Header Begin ==========================================
// OpenSPARC T2 Processor File: l2t_dirtop_ctl.v
// Copyright (C) 1995-2007 Sun Microsystems, Inc. All Rights Reserved
// 4150 Network Circle, Santa Clara, California 95054, U.S.A.
// * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; version 2 of the License.
// This 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 program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
// For the avoidance of doubt, and except that if any non-GPL license
// choice is available it will apply instead, Sun elects to use only
// the General Public License version 2 (GPLv2) at this time for any
// software where a choice of GPL license versions is made
// available with the language indicating that GPLv2 or any later version
// may be used, or where a choice of which version of the GPL is applied is
// otherwise unspecified.
// Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
// CA 95054 USA or visit www.sun.com if you need additional information or
// ========== Copyright Header End ============================================
dirlbf_lkup_wr_data_c4_buf,
dirrep_lkup_panel_dec_c4,
dirrep_rdwr_panel_dec_c4,
wire ic_ctl_0145_scanout;
wire [3:0] ic_lkup_en_c4_buf_row0;
wire [7:0] ic_inv_mask_c4_buf_row0;
wire [3:0] ic_rw_dec_c4_buf_row0;
wire ic_rd_en_c4_buf_row0;
wire ic_wr_en_c4_buf_row0;
wire [5:0] ic_rw_entry_c4_buf_row0;
wire ic_dir_clear_c4_buf_row0;
wire ic_buf_row0_scanout;
output [3:0] dir_rd_data_en_c4;
output [3:0] dir_wr_data_en_c4;
output [3:0] dir_cam_en_c4;
output [5:0] dir_rw_entry_c4;
output [7:0] dir_inval_mask_c4;
output [15:0] dirlbf_lkup_wr_data_c4_buf;
output dirlbf_force_hit_c4;
input [7:0] l2t_mb0_mask;
input [5:0] l2t_mb0_addr;
input [3:0] l2t_mb0_row_panel_en;
input l2t_mb0_row_row_en;
input [3:0] l2t_mb0_row_lookup_en;
input [15:0] l2t_mb0_lookup_wdata;
input arbadr_arbdp_addr4_c4;
input [7:0] dirrep_inval_mask_c4;
input [1:0] dirrep_rdwr_row_en_c4;
input [1:0] dirrep_lkup_row_dec_c4;
input [3:0] dirrep_lkup_panel_dec_c4;
input [3:0] dirrep_rdwr_panel_dec_c4;
input [5:0] dirrep_rw_entry_c4;
input [14:0] lkup_wr_data_c4;
//////////////////////////////////////////////////
//////////////////////////////////////////////////
assign pce_ov = tcu_pce_ov;
l2t_dirtop_ctl_l1clkhdr_ctl_macro clkgen (
//////////////////////////////////////////
l2t_dir_ctl dir_ctl_0145(
.scan_in(ic_ctl_0145_scanin),
.scan_out(ic_ctl_0145_scanout),
.dir_rd_data_en_c4(dir_rd_data_en_c4[3:0]), // to cam
.dir_wr_data_en_c4(dir_wr_data_en_c4[3:0]),// to cam
.dir_cam_en_c4 (dir_cam_en_c4[3:0]),// to cam
.dir_rw_entry_c4 (dir_rw_entry_c4[5:0]),// to cam
.dir_inval_mask_c4(dir_inval_mask_c4[7:0]),// to cam
.dir_warm_rst_c4 (dir_warm_rst_c4), // to cam
.select_panel0(select_panel0), // to dirout
.select_panel1(select_panel1),// to dirout
.select_panel2(select_panel2),// to dirout
.select_panel3(select_panel3),// to dirout
.dirlbf_lkup_en_c4_buf(ic_lkup_en_c4_buf_row0[3:0]),
.dirlbf_inval_mask_c4_buf(ic_inv_mask_c4_buf_row0[7:0]),
.dirlbf_rw_dec_c4_buf(ic_rw_dec_c4_buf_row0[3:0]),
.dirlbf_rd_en_c4_buf (ic_rd_en_c4_buf_row0),
.dirlbf_wr_en_c4_buf (ic_wr_en_c4_buf_row0),
.dirlbf_rw_entry_c4_buf(ic_rw_entry_c4_buf_row0[5:0]),
.dirlbf_dir_clear_c4_buf(ic_dir_clear_c4_buf_row0),
.l2t_mb0_run(l2t_mb0_run));
//l2t_dirlbf_dp ic_buf_row0 (
l2t_dirbuf_ctl buf_row0 (
.dirlbf_lkup_wr_data_c4_buf(dirlbf_lkup_wr_data_c4_buf[15:0]),
.dirlbf_lkup_en_c4_buf(ic_lkup_en_c4_buf_row0[3:0]),
.dirlbf_inval_mask_c4_buf(ic_inv_mask_c4_buf_row0[7:0]),
.dirlbf_rw_dec_c4_buf(ic_rw_dec_c4_buf_row0[3:0]),
.dirlbf_rd_en_c4_buf(ic_rd_en_c4_buf_row0),
.dirlbf_wr_en_c4_buf(ic_wr_en_c4_buf_row0),
.dirlbf_rw_entry_c4_buf(ic_rw_entry_c4_buf_row0[5:0]),
.dirlbf_dir_clear_c4_buf(ic_dir_clear_c4_buf_row0),
.dirlbf_force_hit_c4 (dirlbf_force_hit_c4),
.scan_in(ic_buf_row0_scanin),
.scan_out(ic_buf_row0_scanout),
.l2t_mb0_run (l2t_mb0_run),
.l2t_mb0_mask (l2t_mb0_mask[7:0]),
.l2t_mb0_addr (l2t_mb0_addr[5:0]),
.l2t_mb0_lookup_wdata (l2t_mb0_lookup_wdata[15:0]),
.l2t_mb0_row_wr_en (l2t_mb0_row_wr_en),
.l2t_mb0_row_rd_en (l2t_mb0_row_rd_en),
.l2t_mb0_row_lookup_en (l2t_mb0_row_lookup_en[3:0]),
.l2t_mb0_row_row_en (l2t_mb0_row_row_en),
.l2t_mb0_row_panel_en (l2t_mb0_row_panel_en[3:0]),
.arb_force_hit_c4 (arb_force_hit_c4),
.arbadr_arbdp_addr4_c4 (arbadr_arbdp_addr4_c4),
.rd_en_c4 (dirrep_rd_en_c4),
.wr_en_c4 (dirrep_wr_en_c4),
.addr_index_bit5 (addr_index_bit5),
.dir_inval_mask_c4(dirrep_inval_mask_c4[7:0]),
.rw_row_en_c4(dirrep_rdwr_row_en_c4[1:0]),
.rw_panel_en_c4(dirrep_rdwr_panel_dec_c4[3:0]),
.dir_rw_entry_c4(dirrep_rw_entry_c4[5:0]),
.lkup_row_en_c4(dirrep_lkup_row_dec_c4[1:0]),
.lkup_panel_en_c4(dirrep_lkup_panel_dec_c4[3:0]),
.lkup_wr_data_c4(lkup_wr_data_c4[14:0]),
.dir_clear_c4(dir_clear_c4)
assign ic_ctl_0145_scanin = scan_in ;
assign ic_buf_row0_scanin = ic_ctl_0145_scanout ;
assign scan_out = ic_buf_row0_scanout ;
// any PARAMS parms go into naming of macro
module l2t_dirtop_ctl_l1clkhdr_ctl_macro (
// Description: Spare gate macro for control blocks
// Param num controls the number of times the macro is added
// flops=0 can be used to use only combination spare logic
module l2t_dirtop_ctl_spare_ctl_macro__num_4 (
wire spare0_buf_32x_unused;
wire spare0_nand3_8x_unused;
wire spare0_inv_8x_unused;
wire spare0_aoi22_4x_unused;
wire spare0_buf_8x_unused;
wire spare0_oai22_4x_unused;
wire spare0_inv_16x_unused;
wire spare0_nand2_16x_unused;
wire spare0_nor3_4x_unused;
wire spare0_nand2_8x_unused;
wire spare0_buf_16x_unused;
wire spare0_nor2_16x_unused;
wire spare0_inv_32x_unused;
wire spare1_buf_32x_unused;
wire spare1_nand3_8x_unused;
wire spare1_inv_8x_unused;
wire spare1_aoi22_4x_unused;
wire spare1_buf_8x_unused;
wire spare1_oai22_4x_unused;
wire spare1_inv_16x_unused;
wire spare1_nand2_16x_unused;
wire spare1_nor3_4x_unused;
wire spare1_nand2_8x_unused;
wire spare1_buf_16x_unused;
wire spare1_nor2_16x_unused;
wire spare1_inv_32x_unused;
wire spare2_buf_32x_unused;
wire spare2_nand3_8x_unused;
wire spare2_inv_8x_unused;
wire spare2_aoi22_4x_unused;
wire spare2_buf_8x_unused;
wire spare2_oai22_4x_unused;
wire spare2_inv_16x_unused;
wire spare2_nand2_16x_unused;
wire spare2_nor3_4x_unused;
wire spare2_nand2_8x_unused;
wire spare2_buf_16x_unused;
wire spare2_nor2_16x_unused;
wire spare2_inv_32x_unused;
wire spare3_buf_32x_unused;
wire spare3_nand3_8x_unused;
wire spare3_inv_8x_unused;
wire spare3_aoi22_4x_unused;
wire spare3_buf_8x_unused;
wire spare3_oai22_4x_unused;
wire spare3_inv_16x_unused;
wire spare3_nand2_16x_unused;
wire spare3_nor3_4x_unused;
wire spare3_nand2_8x_unused;
wire spare3_buf_16x_unused;
wire spare3_nor2_16x_unused;
wire spare3_inv_32x_unused;
cl_sc1_msff_8x spare0_flop (.l1clk(l1clk),
cl_u1_buf_32x spare0_buf_32x (.in(1'b1),
.out(spare0_buf_32x_unused));
cl_u1_nand3_8x spare0_nand3_8x (.in0(1'b1),
.out(spare0_nand3_8x_unused));
cl_u1_inv_8x spare0_inv_8x (.in(1'b1),
.out(spare0_inv_8x_unused));
cl_u1_aoi22_4x spare0_aoi22_4x (.in00(1'b1),
.out(spare0_aoi22_4x_unused));
cl_u1_buf_8x spare0_buf_8x (.in(1'b1),
.out(spare0_buf_8x_unused));
cl_u1_oai22_4x spare0_oai22_4x (.in00(1'b1),
.out(spare0_oai22_4x_unused));
cl_u1_inv_16x spare0_inv_16x (.in(1'b1),
.out(spare0_inv_16x_unused));
cl_u1_nand2_16x spare0_nand2_16x (.in0(1'b1),
.out(spare0_nand2_16x_unused));
cl_u1_nor3_4x spare0_nor3_4x (.in0(1'b0),
.out(spare0_nor3_4x_unused));
cl_u1_nand2_8x spare0_nand2_8x (.in0(1'b1),
.out(spare0_nand2_8x_unused));
cl_u1_buf_16x spare0_buf_16x (.in(1'b1),
.out(spare0_buf_16x_unused));
cl_u1_nor2_16x spare0_nor2_16x (.in0(1'b0),
.out(spare0_nor2_16x_unused));
cl_u1_inv_32x spare0_inv_32x (.in(1'b1),
.out(spare0_inv_32x_unused));
cl_sc1_msff_8x spare1_flop (.l1clk(l1clk),
cl_u1_buf_32x spare1_buf_32x (.in(1'b1),
.out(spare1_buf_32x_unused));
cl_u1_nand3_8x spare1_nand3_8x (.in0(1'b1),
.out(spare1_nand3_8x_unused));
cl_u1_inv_8x spare1_inv_8x (.in(1'b1),
.out(spare1_inv_8x_unused));
cl_u1_aoi22_4x spare1_aoi22_4x (.in00(1'b1),
.out(spare1_aoi22_4x_unused));
cl_u1_buf_8x spare1_buf_8x (.in(1'b1),
.out(spare1_buf_8x_unused));
cl_u1_oai22_4x spare1_oai22_4x (.in00(1'b1),
.out(spare1_oai22_4x_unused));
cl_u1_inv_16x spare1_inv_16x (.in(1'b1),
.out(spare1_inv_16x_unused));
cl_u1_nand2_16x spare1_nand2_16x (.in0(1'b1),
.out(spare1_nand2_16x_unused));
cl_u1_nor3_4x spare1_nor3_4x (.in0(1'b0),
.out(spare1_nor3_4x_unused));
cl_u1_nand2_8x spare1_nand2_8x (.in0(1'b1),
.out(spare1_nand2_8x_unused));
cl_u1_buf_16x spare1_buf_16x (.in(1'b1),
.out(spare1_buf_16x_unused));
cl_u1_nor2_16x spare1_nor2_16x (.in0(1'b0),
.out(spare1_nor2_16x_unused));
cl_u1_inv_32x spare1_inv_32x (.in(1'b1),
.out(spare1_inv_32x_unused));
cl_sc1_msff_8x spare2_flop (.l1clk(l1clk),
cl_u1_buf_32x spare2_buf_32x (.in(1'b1),
.out(spare2_buf_32x_unused));
cl_u1_nand3_8x spare2_nand3_8x (.in0(1'b1),
.out(spare2_nand3_8x_unused));
cl_u1_inv_8x spare2_inv_8x (.in(1'b1),
.out(spare2_inv_8x_unused));
cl_u1_aoi22_4x spare2_aoi22_4x (.in00(1'b1),
.out(spare2_aoi22_4x_unused));
cl_u1_buf_8x spare2_buf_8x (.in(1'b1),
.out(spare2_buf_8x_unused));
cl_u1_oai22_4x spare2_oai22_4x (.in00(1'b1),
.out(spare2_oai22_4x_unused));
cl_u1_inv_16x spare2_inv_16x (.in(1'b1),
.out(spare2_inv_16x_unused));
cl_u1_nand2_16x spare2_nand2_16x (.in0(1'b1),
.out(spare2_nand2_16x_unused));
cl_u1_nor3_4x spare2_nor3_4x (.in0(1'b0),
.out(spare2_nor3_4x_unused));
cl_u1_nand2_8x spare2_nand2_8x (.in0(1'b1),
.out(spare2_nand2_8x_unused));
cl_u1_buf_16x spare2_buf_16x (.in(1'b1),
.out(spare2_buf_16x_unused));
cl_u1_nor2_16x spare2_nor2_16x (.in0(1'b0),
.out(spare2_nor2_16x_unused));
cl_u1_inv_32x spare2_inv_32x (.in(1'b1),
.out(spare2_inv_32x_unused));
cl_sc1_msff_8x spare3_flop (.l1clk(l1clk),
cl_u1_buf_32x spare3_buf_32x (.in(1'b1),
.out(spare3_buf_32x_unused));
cl_u1_nand3_8x spare3_nand3_8x (.in0(1'b1),
.out(spare3_nand3_8x_unused));
cl_u1_inv_8x spare3_inv_8x (.in(1'b1),
.out(spare3_inv_8x_unused));
cl_u1_aoi22_4x spare3_aoi22_4x (.in00(1'b1),
.out(spare3_aoi22_4x_unused));
cl_u1_buf_8x spare3_buf_8x (.in(1'b1),
.out(spare3_buf_8x_unused));
cl_u1_oai22_4x spare3_oai22_4x (.in00(1'b1),
.out(spare3_oai22_4x_unused));
cl_u1_inv_16x spare3_inv_16x (.in(1'b1),
.out(spare3_inv_16x_unused));
cl_u1_nand2_16x spare3_nand2_16x (.in0(1'b1),
.out(spare3_nand2_16x_unused));
cl_u1_nor3_4x spare3_nor3_4x (.in0(1'b0),
.out(spare3_nor3_4x_unused));
cl_u1_nand2_8x spare3_nand2_8x (.in0(1'b1),
.out(spare3_nand2_8x_unused));
cl_u1_buf_16x spare3_buf_16x (.in(1'b1),
.out(spare3_buf_16x_unused));
cl_u1_nor2_16x spare3_nor2_16x (.in0(1'b0),
.out(spare3_nor2_16x_unused));
cl_u1_inv_32x spare3_inv_32x (.in(1'b1),
.out(spare3_inv_32x_unused));
// any PARAMS parms go into naming of macro
module l2t_dirtop_ctl_msff_ctl_macro__width_3 (
assign fdin[2:0] = din[2:0];
// any PARAMS parms go into naming of macro
module l2t_dirtop_ctl_msff_ctl_macro__width_2 (
assign fdin[1:0] = din[1:0];
// any PARAMS parms go into naming of macro
module l2t_dirtop_ctl_msff_ctl_macro__width_4 (
assign fdin[3:0] = din[3:0];
// any PARAMS parms go into naming of macro
module l2t_dirtop_ctl_msff_ctl_macro__width_1 (
assign fdin[0:0] = din[0:0];
// general mux macro for pass-gate and and-or muxes with/wout priority encoders
// also for pass-gate with decoder
// any PARAMS parms go into naming of macro
module l2t_dirtop_ctl_mux_ctl_macro__mux_aonpe__ports_2__width_2 (
assign dout[1:0] = ( {2{sel0}} & din0[1:0] ) |
( {2{sel1}} & din1[1:0]);
// general mux macro for pass-gate and and-or muxes with/wout priority encoders
// also for pass-gate with decoder
// any PARAMS parms go into naming of macro
module l2t_dirtop_ctl_mux_ctl_macro__mux_aonpe__ports_2__width_8 (
assign dout[7:0] = ( {8{sel0}} & din0[7:0] ) |
( {8{sel1}} & din1[7:0]);
// general mux macro for pass-gate and and-or muxes with/wout priority encoders
// also for pass-gate with decoder
// any PARAMS parms go into naming of macro
module l2t_dirtop_ctl_mux_ctl_macro__mux_aonpe__ports_2__width_6 (
assign dout[5:0] = ( {6{sel0}} & din0[5:0] ) |
( {6{sel1}} & din1[5:0]);
// general mux macro for pass-gate and and-or muxes with/wout priority encoders
// also for pass-gate with decoder
// any PARAMS parms go into naming of macro
module l2t_dirtop_ctl_mux_ctl_macro__mux_aonpe__ports_2__width_16 (
assign dout[15:0] = ( {16{sel0}} & din0[15:0] ) |
( {16{sel1}} & din1[15:0]);
// general mux macro for pass-gate and and-or muxes with/wout priority encoders
// also for pass-gate with decoder
// any PARAMS parms go into naming of macro
module l2t_dirtop_ctl_mux_ctl_macro__mux_aonpe__ports_2__width_4 (
assign dout[3:0] = ( {4{sel0}} & din0[3:0] ) |
( {4{sel1}} & din1[3:0]);