// ========== Copyright Header Begin ========================================== // // OpenSPARC T2 Processor File: lsu_tgd_dp.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 // have any questions. // // ========== Copyright Header End ============================================ module lsu_tgd_dp ( dta_rdata_w0_m, dta_rdata_w1_m, dta_rdata_w2_m, dta_rdata_w3_m, tgc_cache_way_vld_m, tgc_cache_way_vld2_m, tgc_way_sel_m, dcs_watchpoint_m, dcs_context0_e, dcs_context1_e, dcc_rd_dt_diag_m, dcc_rd_dt_diag_b, dcc_tlb_tag0_read_b, dcc_tlb_tag1_read_b, dcc_tlb_data_read_b, dcc_ld_inst_vld_m, dcc_ldst_m_clken, tlb_pgnum, tlb_tte_data, tlb_tte_tag, tlb_tte_u_bit, tlb_cam_hit, tlb_context0_hit, tlb_cam_mhit, tld_prty_256m, tld_prty_4m, tld_prty_64k, tld_prty_8k, tld_prty_ctxt0, tld_prty_ctxt1, tld_tag_c0, tld_tag_c1, tlc_sel_tte_tag, tlc_sel_demap_tag_c0, tlc_sel_demap_tag_c1, bist_cmp_data, bist_dta_cmp_en, bist_cmpsel_2, lsu_va_m, tgd_w0_parity_b, tgd_w1_parity_b, tgd_w2_parity_b, tgd_w3_parity_b, dta_rdata_w0_rep, dta_rdata_w1_rep, dta_rdata_w2_rep, dta_rdata_w3_rep, tgd_prty_256m_b, tgd_prty_4m_b, tgd_prty_64k_b, tgd_prty_8k_b, tgd_prty_ctxt0_b, tgd_prty_ctxt1_b, tgd_va_wp_47_16, tgd_va_wp_15_3, tgd_pa_wp_39_16, tgd_pa_wp_15_3, tgd_tag_c0, tgd_tag_c1, tlb_tag_parity, tlb_pgsize, tlb_tte_nfo_b, tlb_tte_ie_b, tlb_tte_cp_b, tlb_tte_ebit_b, tlb_tte_pbit_b, tlb_tte_wbit_b, tgd_ldxa_asi_data_b, tgd_bist_compare, lsu_mbi_tlb_data_cmp, lsu_mbi_tlb_cam_hit, lsu_mbi_tlb_cam_mhit, lsu_mbi_tlb_ctxt0_hit, lsu_mbi_tlb_valid, lsu_mbi_tlb_used, l2clk, scan_in, tcu_pce_ov, tcu_scan_en, tcu_se_scancollar_out, spc_aclk, spc_bclk, scan_out); wire stop; wire se; wire pce_ov; wire siclk; wire soclk; wire clk; wire [1:0] w0_16b_parity_m; wire [1:0] w1_16b_parity_m; wire [1:0] w2_16b_parity_m; wire [1:0] w3_16b_parity_m; wire dff_16b_prty_w01_scanin; wire dff_16b_prty_w01_scanout; wire [1:0] w0_16b_parity_b; wire [1:0] w1_16b_parity_b; wire dff_16b_prty_w23_scanin; wire dff_16b_prty_w23_scanout; wire [1:0] w2_16b_parity_b; wire [1:0] w3_16b_parity_b; wire [3:0] tag_parity_b; wire [31:0] tgd_diag_tag01_m; wire [31:0] tgd_diag_tag23_m; wire dff_diag_tag_scanin; wire dff_diag_tag_scanout; wire [31:0] tgd_diag_tag_b; wire tte_data_va_27_22_v_; wire tte_data_sz_1; wire [12:0] tag_c0; wire [12:0] tag_c1; wire [63:0] ldxa_asi_data_b; wire [47:3] va_m_buf; wire dff_va_b_scanin; wire dff_va_b_scanout; wire [47:3] va_b; wire dff_wpt_b_scanin; wire dff_wpt_b_scanout; wire [47:3] watchpoint_b; wire va_wp_47_16; wire va_wp_15_3; wire pa_wp_39_16; wire pa_wp_15_3; wire [63:0] bist_mux_data; input [29:0] dta_rdata_w0_m; input [29:0] dta_rdata_w1_m; input [29:0] dta_rdata_w2_m; input [29:0] dta_rdata_w3_m; input [3:0] tgc_cache_way_vld_m; input [3:0] tgc_cache_way_vld2_m; input [1:0] tgc_way_sel_m; input [47:3] dcs_watchpoint_m; input [12:0] dcs_context0_e; input [12:0] dcs_context1_e; input dcc_rd_dt_diag_m; input dcc_rd_dt_diag_b; input dcc_tlb_tag0_read_b; input dcc_tlb_tag1_read_b; input dcc_tlb_data_read_b; input dcc_ld_inst_vld_m; input dcc_ldst_m_clken; input [39:13] tlb_pgnum; input [37:0] tlb_tte_data; // for diag read muxing input [65:0] tlb_tte_tag; // for diag read muxing input tlb_tte_u_bit; // for diag read muxing input tlb_cam_hit; input tlb_context0_hit; input tlb_cam_mhit; input tld_prty_256m; input tld_prty_4m; input tld_prty_64k; input tld_prty_8k; input tld_prty_ctxt0; input tld_prty_ctxt1; input [12:0] tld_tag_c0; input [12:0] tld_tag_c1; input tlc_sel_tte_tag; input tlc_sel_demap_tag_c0; input tlc_sel_demap_tag_c1; input [7:0] bist_cmp_data; input bist_dta_cmp_en; input bist_cmpsel_2; input [47:3] lsu_va_m; output tgd_w0_parity_b; output tgd_w1_parity_b; output tgd_w2_parity_b; output tgd_w3_parity_b; output [28:0] dta_rdata_w0_rep; output [28:0] dta_rdata_w1_rep; output [28:0] dta_rdata_w2_rep; output [28:0] dta_rdata_w3_rep; //output tgd_tte_tag_parity; //output tgd_tte_data_parity; output tgd_prty_256m_b; output tgd_prty_4m_b; output tgd_prty_64k_b; output tgd_prty_8k_b; output tgd_prty_ctxt0_b; output tgd_prty_ctxt1_b; output tgd_va_wp_47_16; output tgd_va_wp_15_3; output tgd_pa_wp_39_16; output tgd_pa_wp_15_3; output [12:0] tgd_tag_c0; output [12:0] tgd_tag_c1; output tlb_tag_parity; output [2:0] tlb_pgsize; output tlb_tte_nfo_b; output tlb_tte_ie_b; output tlb_tte_cp_b; output tlb_tte_ebit_b; output tlb_tte_pbit_b; output tlb_tte_wbit_b; output [63:0] tgd_ldxa_asi_data_b; output tgd_bist_compare; output lsu_mbi_tlb_data_cmp; output lsu_mbi_tlb_cam_hit; output lsu_mbi_tlb_cam_mhit; output lsu_mbi_tlb_ctxt0_hit; output lsu_mbi_tlb_valid; output lsu_mbi_tlb_used; // Globals input l2clk; input scan_in; input tcu_pce_ov; // scan signals input tcu_scan_en; input tcu_se_scancollar_out; input spc_aclk; input spc_bclk; output scan_out; // scan renames assign stop = 1'b0; // end scan lsu_tgd_dp_buff_macro__dbuff_32x__rep_1__stack_none__width_4 test_rep0 ( .din ({tcu_scan_en,tcu_pce_ov,spc_aclk,spc_bclk}), .dout({se,pce_ov,siclk,soclk}) ); assign clk = l2clk; // TLB TTE defines `define TAG_CNTX1_HI 65 `define TAG_CNTX1_LO 53 `define TAG_PID_HI 52 `define TAG_PID_LO 50 `define TAG_REAL 49 `define TAG_VA_47_28_HI 48 `define TAG_VA_47_28_LO 29 `define TAG_VA_27_22_HI 28 `define TAG_VA_27_22_LO 23 `define TAG_V 22 `define TAG_VA_21_16_HI 21 `define TAG_VA_21_16_LO 16 `define TAG_VA_15_13_HI 15 `define TAG_VA_15_13_LO 13 `define TAG_CNTX0_HI 12 `define TAG_CNTX0_LO 0 `define TAG_PARITY 37 `define DATA_PARITY 36 `define DATA_PA_39_28_HI 35 `define DATA_PA_39_28_LO 24 `define DATA_PA_27_22_HI 23 `define DATA_PA_27_22_LO 18 `define DATA_VA_27_22_V 17 `define DATA_PA_21_16_HI 16 `define DATA_PA_21_16_LO 11 `define DATA_VA_21_16_V 10 `define DATA_PA_15_13_HI 9 `define DATA_PA_15_13_LO 7 `define DATA_VA_15_13_V 6 `define DATA_NFO 5 `define DATA_IE 4 `define DATA_CP 3 `define DATA_E 2 `define DATA_P 1 `define DATA_W 0 // Parity checking for tag. Tag is available late in M. Flopping all 4 tags into // B would require 120 flops, but there is not enough time to check 30b parity in M. // So, generate 16b parity in M and flop that result (2 flops/way). Then finish the // check in B. lsu_tgd_dp_prty_macro__width_16 w0_16b_p1 ( .din ({2'b00,dta_rdata_w0_m[29:16]}), .dout (w0_16b_parity_m[1]) ); lsu_tgd_dp_prty_macro__width_16 w0_16b_p0 ( .din (dta_rdata_w0_m[15:0]), .dout (w0_16b_parity_m[0]) ); lsu_tgd_dp_prty_macro__width_16 w1_16b_p1 ( .din ({2'b00,dta_rdata_w1_m[29:16]}), .dout (w1_16b_parity_m[1]) ); lsu_tgd_dp_prty_macro__width_16 w1_16b_p0 ( .din (dta_rdata_w1_m[15:0]), .dout (w1_16b_parity_m[0]) ); lsu_tgd_dp_prty_macro__width_16 w2_16b_p1 ( .din ({2'b00,dta_rdata_w2_m[29:16]}), .dout (w2_16b_parity_m[1]) ); lsu_tgd_dp_prty_macro__width_16 w2_16b_p0 ( .din (dta_rdata_w2_m[15:0]), .dout (w2_16b_parity_m[0]) ); lsu_tgd_dp_prty_macro__width_16 w3_16b_p1 ( .din ({2'b00,dta_rdata_w3_m[29:16]}), .dout (w3_16b_parity_m[1]) ); lsu_tgd_dp_prty_macro__width_16 w3_16b_p0 ( .din (dta_rdata_w3_m[15:0]), .dout (w3_16b_parity_m[0]) ); lsu_tgd_dp_msff_macro__width_4 dff_16b_prty_w01 ( .scan_in(dff_16b_prty_w01_scanin), .scan_out(dff_16b_prty_w01_scanout), .se (tcu_se_scancollar_out), .din ({w0_16b_parity_m[1:0],w1_16b_parity_m[1:0]}), .dout ({w0_16b_parity_b[1:0],w1_16b_parity_b[1:0]}), .en (dcc_ld_inst_vld_m), .clk(clk), .siclk(siclk), .soclk(soclk), .pce_ov(pce_ov), .stop(stop) ); lsu_tgd_dp_msff_macro__width_4 dff_16b_prty_w23 ( .scan_in(dff_16b_prty_w23_scanin), .scan_out(dff_16b_prty_w23_scanout), .se (tcu_se_scancollar_out), .din ({w2_16b_parity_m[1:0],w3_16b_parity_m[1:0]}), .dout ({w2_16b_parity_b[1:0],w3_16b_parity_b[1:0]}), .en (dcc_ld_inst_vld_m), .clk(clk), .siclk(siclk), .soclk(soclk), .pce_ov(pce_ov), .stop(stop) ); lsu_tgd_dp_xor_macro__width_4 prty_xor ( .din0 ({w3_16b_parity_b[0],w2_16b_parity_b[0],w1_16b_parity_b[0],w0_16b_parity_b[0]}), .din1 ({w3_16b_parity_b[1],w2_16b_parity_b[1],w1_16b_parity_b[1],w0_16b_parity_b[1]}), .dout (tag_parity_b[3:0]) ); lsu_tgd_dp_buff_macro__width_4 prty_buf ( .din (tag_parity_b[3:0]), .dout ({tgd_w3_parity_b,tgd_w2_parity_b,tgd_w1_parity_b,tgd_w0_parity_b}) ); // Mux for diagnostic read lsu_tgd_dp_mux_macro__mux_pgpe__ports_2__stack_32c__width_32 mx_tag_way01 ( .din0 ({dta_rdata_w1_m[29:0],tgc_cache_way_vld_m[1],tgc_cache_way_vld2_m[1]}), .din1 ({dta_rdata_w0_m[29:0],tgc_cache_way_vld_m[0],tgc_cache_way_vld2_m[0]}), .sel0 (tgc_way_sel_m[0]), .dout (tgd_diag_tag01_m[31:0]) ); lsu_tgd_dp_mux_macro__mux_pgpe__ports_2__stack_32c__width_32 mx_tag_way23 ( .din0 ({dta_rdata_w3_m[29:0],tgc_cache_way_vld_m[3],tgc_cache_way_vld2_m[3]}), .din1 ({dta_rdata_w2_m[29:0],tgc_cache_way_vld_m[2],tgc_cache_way_vld2_m[2]}), .sel0 (tgc_way_sel_m[0]), .dout (tgd_diag_tag23_m[31:0]) ); lsu_tgd_dp_msff_macro__mux_pgpe__ports_2__stack_32l__width_32 dff_diag_tag ( .scan_in(dff_diag_tag_scanin), .scan_out(dff_diag_tag_scanout), .se (tcu_se_scancollar_out), .din0 (tgd_diag_tag23_m[31:0]), .din1 (tgd_diag_tag01_m[31:0]), .sel0 (tgc_way_sel_m[1]), .dout (tgd_diag_tag_b[31:0]), .en (dcc_rd_dt_diag_m), .clk(clk), .siclk(siclk), .soclk(soclk), .pce_ov(pce_ov), .stop(stop) ); // Buffer tag to tlb lsu_tgd_dp_buff_macro__left_2__rep_1__stack_32c__width_29 buf_tag_w0 ( .din (dta_rdata_w0_m[28:0]), .dout (dta_rdata_w0_rep[28:0]) ); lsu_tgd_dp_buff_macro__left_2__rep_1__stack_32c__width_29 buf_tag_w1 ( .din (dta_rdata_w1_m[28:0]), .dout (dta_rdata_w1_rep[28:0]) ); lsu_tgd_dp_buff_macro__left_2__rep_1__stack_32c__width_29 buf_tag_w2 ( .din (dta_rdata_w2_m[28:0]), .dout (dta_rdata_w2_rep[28:0]) ); lsu_tgd_dp_buff_macro__left_2__rep_1__stack_32c__width_29 buf_tag_w3 ( .din (dta_rdata_w3_m[28:0]), .dout (dta_rdata_w3_rep[28:0]) ); lsu_tgd_dp_inv_macro__width_1 inv_sz_mux ( .din (tlb_tte_data[`DATA_VA_27_22_V]), .dout (tte_data_va_27_22_v_) ); lsu_tgd_dp_and_macro__ports_2__width_1 and_sz ( .din0 (tlb_tte_data[`DATA_VA_21_16_V]), .din1 (tte_data_va_27_22_v_), .dout (tte_data_sz_1) ); //////////////////////////////////////////////////////////////////////////// // tte_tag context muxing // First level of muxing is done in lsu_tld_dp and comes in as tld_tag_c0 // and tld_tag_c1. lsu_tgd_dp_mux_macro__mux_aope__ports_3__stack_14l__width_13 mx_tag_c0 ( .din0 (tld_tag_c0[12:0]), .din1 (dcs_context1_e[12:0]), .din2 (dcs_context0_e[12:0]), .sel0 (tlc_sel_tte_tag), .sel1 (tlc_sel_demap_tag_c1), .dout (tag_c0[12:0]) ); lsu_tgd_dp_buff_macro__stack_14l__width_13 buf_tag_c0 ( .din (tag_c0[12:0]), .dout (tgd_tag_c0[12:0]) ); lsu_tgd_dp_mux_macro__mux_aope__ports_3__stack_14r__width_13 mx_tag_c1 ( .din0 (tld_tag_c1[12:0]), .din1 (dcs_context0_e[12:0]), .din2 (dcs_context1_e[12:0]), .sel0 (tlc_sel_tte_tag), .sel1 (tlc_sel_demap_tag_c0), .dout (tag_c1[12:0]) ); lsu_tgd_dp_buff_macro__stack_14r__width_13 buf_tag_c1 ( .din (tag_c1[12:0]), .dout (tgd_tag_c1[12:0]) ); ////// // Data access read format (sun4v TTE) is // V NFO PRTY 0 0 PA IE E CP 0 P 0 W 0 SZ // 63 | 62 | 61 | 60:56 | 55:40 | 39:13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5:3 | 2:0 // // Tag read register format is // PID R P U 0 VA Context // 63:61 | 60 | 59 | 58 | 57:48 | 47:13 | 12:0 // Mux the different ASI read sources that are on the right side of the LSU lsu_tgd_dp_mux_macro__mux_aonpe__ports_4__stack_64c__width_64 mx_asi_b ( .din0 ({32'd0,tgd_diag_tag_b[31:0]}), .din1 ({tlb_tte_tag[`TAG_V], // V tlb_tte_data[`DATA_NFO], // NFO tlb_tte_data[`DATA_PARITY], // PARITY 5'b0, // SOFT 16'b0, tlb_tte_data[`DATA_PA_39_28_HI:`DATA_PA_39_28_LO], // PA tlb_tte_data[`DATA_PA_27_22_HI:`DATA_PA_27_22_LO], tlb_tte_data[`DATA_PA_21_16_HI:`DATA_PA_21_16_LO], tlb_tte_data[`DATA_PA_15_13_HI:`DATA_PA_15_13_LO], tlb_tte_data[`DATA_IE], // IE tlb_tte_data[`DATA_E], // E tlb_tte_data[`DATA_CP], // CP 1'b0, // CV tlb_tte_data[`DATA_P], // P 1'b0, // EP tlb_tte_data[`DATA_W], // W 3'b0, tlb_tte_data[`DATA_VA_27_22_V], // SZ tte_data_sz_1,tlb_tte_data[`DATA_VA_15_13_V] // SZ }), .din2 ({tlb_tte_tag[`TAG_PID_HI:`TAG_PID_LO], // PID tlb_tte_tag[`TAG_REAL], // REAL tlb_tte_data[`TAG_PARITY], // PARITY tlb_tte_u_bit, // USED 10'b0, tlb_tte_tag[`TAG_VA_47_28_HI:`TAG_VA_27_22_LO], tlb_tte_tag[`TAG_VA_21_16_HI:`TAG_VA_21_16_LO], tlb_tte_tag[`TAG_VA_15_13_HI:`TAG_VA_15_13_LO], tlb_tte_tag[`TAG_CNTX0_HI:`TAG_CNTX0_LO] // context }), .din3 ({tlb_tte_tag[`TAG_PID_HI:`TAG_PID_LO], // PID tlb_tte_tag[`TAG_REAL], // REAL tlb_tte_data[`TAG_PARITY], // PARITY tlb_tte_u_bit, // USED 10'b0, tlb_tte_tag[`TAG_VA_47_28_HI:`TAG_VA_27_22_LO], tlb_tte_tag[`TAG_VA_21_16_HI:`TAG_VA_21_16_LO], tlb_tte_tag[`TAG_VA_15_13_HI:`TAG_VA_15_13_LO], tlb_tte_tag[`TAG_CNTX1_HI:`TAG_CNTX1_LO] // context }), .sel0 (dcc_rd_dt_diag_b), .sel1 (dcc_tlb_data_read_b), .sel2 (dcc_tlb_tag0_read_b), .sel3 (dcc_tlb_tag1_read_b), .dout (ldxa_asi_data_b[63:0]) ); lsu_tgd_dp_buff_macro__rep_1__stack_64c__width_64 buf_asi_b ( .din (ldxa_asi_data_b[63:0]), .dout (tgd_ldxa_asi_data_b[63:0]) ); lsu_tgd_dp_buff_macro__left_19__minbuff_1__stack_64c__width_45 va_minbuf ( .din (lsu_va_m[47:3]), .dout (va_m_buf[47:3]) ); // VA staging lsu_tgd_dp_msff_macro__left_13__stack_64c__width_51 dff_va_b ( .scan_in(dff_va_b_scanin), .scan_out(dff_va_b_scanout), .din ({va_m_buf[47:3], tld_prty_256m ,tld_prty_4m ,tld_prty_64k ,tld_prty_8k ,tld_prty_ctxt0 ,tld_prty_ctxt1}), .dout ({va_b[47:3], tgd_prty_256m_b,tgd_prty_4m_b,tgd_prty_64k_b,tgd_prty_8k_b,tgd_prty_ctxt0_b,tgd_prty_ctxt1_b}), .en (dcc_ldst_m_clken), .clk(clk), .se(se), .siclk(siclk), .soclk(soclk), .pce_ov(pce_ov), .stop(stop) ); /////////////////////////////////////////////////////////////// // Watchpoint mux and compare is here so it's close to the TLB lsu_tgd_dp_msff_macro__left_19__stack_64c__width_45 dff_wpt_b ( .scan_in(dff_wpt_b_scanin), .scan_out(dff_wpt_b_scanout), .din (dcs_watchpoint_m[47:3]), .dout (watchpoint_b[47:3]), .en (dcc_ldst_m_clken), .clk(clk), .se(se), .siclk(siclk), .soclk(soclk), .pce_ov(pce_ov), .stop(stop) ); lsu_tgd_dp_cmp_macro__width_32 cmp_va_47_16 ( .din0 (watchpoint_b[47:16]), .din1 (va_b[47:16]), .dout (va_wp_47_16) ); lsu_tgd_dp_cmp_macro__width_16 cmp_va_15_3 ( .din0 ({3'b0,watchpoint_b[15:3]}), .din1 ({3'b0,va_b[15:3]}), .dout (va_wp_15_3) ); lsu_tgd_dp_cmp_macro__width_32 cmp_pa_39_16 ( .din0 ({8'b0,watchpoint_b[39:16]}), .din1 ({8'b0,tlb_pgnum[39:16]}), .dout (pa_wp_39_16) ); lsu_tgd_dp_cmp_macro__width_16 cmp_pa_15_3 ( .din0 ({3'b0,watchpoint_b[15:3]}), .din1 ({3'b0,tlb_pgnum[15:13],va_b[12:3]}), .dout (pa_wp_15_3) ); lsu_tgd_dp_buff_macro__width_4 wpt_buf ( .din ({ va_wp_47_16, pa_wp_39_16, va_wp_15_3, pa_wp_15_3}), .dout ({tgd_va_wp_47_16,tgd_pa_wp_39_16,tgd_va_wp_15_3,tgd_pa_wp_15_3}) ); lsu_tgd_dp_buff_macro__rep_1__width_10 tte_buf ( .din ({tlb_tte_data[`TAG_PARITY],tlb_tte_data[`DATA_VA_27_22_V], tlb_tte_data[`DATA_VA_21_16_V],tlb_tte_data[`DATA_VA_15_13_V], tlb_tte_data[`DATA_NFO:`DATA_W]}), .dout ({tlb_tag_parity, tlb_pgsize[2:0],tlb_tte_nfo_b,tlb_tte_ie_b, tlb_tte_cp_b,tlb_tte_ebit_b,tlb_tte_pbit_b,tlb_tte_wbit_b}) ); // BIST mux and tag comparator lsu_tgd_dp_mux_macro__mux_aope__ports_3__stack_64c__width_64 bist_mx ( .din0 ({{4{bist_cmp_data[7:0]}},bist_cmp_data[7:6],tgd_diag_tag_b[31:2]}), .din1 ({bist_cmp_data[7:1],tlb_tte_u_bit,bist_cmp_data[7:5],tlb_tte_tag[52:50], bist_cmp_data[1],tlb_tte_tag[48:0]}), .din2 ({tlb_tte_tag[65:53],bist_cmp_data[2:0],bist_cmp_data[7:0], bist_cmp_data[7:6],tlb_tte_data[37:0]}), .sel0 (bist_dta_cmp_en), .sel1 (bist_cmpsel_2), .dout (bist_mux_data[63:0]) ); lsu_tgd_dp_cmp_macro__width_64 bist_cmp ( .din0 ({8{bist_cmp_data[7:0]}}), .din1 (bist_mux_data[63:0]), .dout (tgd_bist_compare) ); lsu_tgd_dp_cmp_macro__width_8 cambist_cmp ( .din0 ({1'b0,bist_cmp_data[6:0]}), .din1 ({1'b0,tlb_tte_data[6:0]}), .dout (lsu_mbi_tlb_data_cmp) ); lsu_tgd_dp_buff_macro__width_5 cambist_buf ( .din ({tlb_cam_hit, tlb_context0_hit, tlb_cam_mhit, tlb_tte_u_bit, tlb_tte_tag[`TAG_V]}), .dout ({lsu_mbi_tlb_cam_hit,lsu_mbi_tlb_ctxt0_hit,lsu_mbi_tlb_cam_mhit, lsu_mbi_tlb_used, lsu_mbi_tlb_valid}) ); // fixscan start: assign dff_16b_prty_w01_scanin = scan_in ; assign dff_16b_prty_w23_scanin = dff_16b_prty_w01_scanout ; assign dff_diag_tag_scanin = dff_16b_prty_w23_scanout ; assign dff_va_b_scanin = dff_diag_tag_scanout ; assign dff_wpt_b_scanin = dff_va_b_scanout ; assign scan_out = dff_wpt_b_scanout ; // fixscan end: endmodule // // buff macro // // module lsu_tgd_dp_buff_macro__dbuff_32x__rep_1__stack_none__width_4 ( din, dout); input [3:0] din; output [3:0] dout; buff #(4) d0_0 ( .in(din[3:0]), .out(dout[3:0]) ); endmodule // // parity macro (even parity) // // module lsu_tgd_dp_prty_macro__width_16 ( din, dout); input [15:0] din; output dout; prty #(16) m0_0 ( .in(din[15:0]), .out(dout) ); endmodule // any PARAMS parms go into naming of macro module lsu_tgd_dp_msff_macro__width_4 ( din, clk, en, se, scan_in, siclk, soclk, pce_ov, stop, dout, scan_out); wire l1clk; wire siclk_out; wire soclk_out; wire [2:0] so; input [3:0] din; input clk; input en; input se; input scan_in; input siclk; input soclk; input pce_ov; input stop; output [3:0] dout; output scan_out; cl_dp1_l1hdr_8x c0_0 ( .l2clk(clk), .pce(en), .aclk(siclk), .bclk(soclk), .l1clk(l1clk), .se(se), .pce_ov(pce_ov), .stop(stop), .siclk_out(siclk_out), .soclk_out(soclk_out) ); dff #(4) d0_0 ( .l1clk(l1clk), .siclk(siclk_out), .soclk(soclk_out), .d(din[3:0]), .si({scan_in,so[2:0]}), .so({so[2:0],scan_out}), .q(dout[3:0]) ); endmodule // // xor macro for ports = 2,3 // // module lsu_tgd_dp_xor_macro__width_4 ( din0, din1, dout); input [3:0] din0; input [3:0] din1; output [3:0] dout; xor2 #(4) d0_0 ( .in0(din0[3:0]), .in1(din1[3:0]), .out(dout[3:0]) ); endmodule // // buff macro // // module lsu_tgd_dp_buff_macro__width_4 ( din, dout); input [3:0] din; output [3:0] dout; buff #(4) d0_0 ( .in(din[3:0]), .out(dout[3:0]) ); endmodule // 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 lsu_tgd_dp_mux_macro__mux_pgpe__ports_2__stack_32c__width_32 ( din0, din1, sel0, dout); wire psel0_unused; wire psel1; input [31:0] din0; input [31:0] din1; input sel0; output [31:0] dout; cl_dp1_penc2_8x c0_0 ( .sel0(sel0), .psel0(psel0_unused), .psel1(psel1) ); mux2e #(32) d0_0 ( .sel(psel1), .in0(din0[31:0]), .in1(din1[31:0]), .dout(dout[31:0]) ); endmodule // any PARAMS parms go into naming of macro module lsu_tgd_dp_msff_macro__mux_pgpe__ports_2__stack_32l__width_32 ( din0, din1, sel0, clk, en, se, scan_in, siclk, soclk, pce_ov, stop, dout, scan_out); wire psel0_unused; wire psel1; wire [31:0] muxout; wire l1clk; wire siclk_out; wire soclk_out; wire [30:0] so; input [31:0] din0; input [31:0] din1; input sel0; input clk; input en; input se; input scan_in; input siclk; input soclk; input pce_ov; input stop; output [31:0] dout; output scan_out; cl_dp1_penc2_8x c1_0 ( .sel0(sel0), .psel0(psel0_unused), .psel1(psel1) ); mux2e #(32) d1_0 ( .sel(psel1), .in0(din0[31:0]), .in1(din1[31:0]), .dout(muxout[31:0]) ); cl_dp1_l1hdr_8x c0_0 ( .l2clk(clk), .pce(en), .aclk(siclk), .bclk(soclk), .l1clk(l1clk), .se(se), .pce_ov(pce_ov), .stop(stop), .siclk_out(siclk_out), .soclk_out(soclk_out) ); dff #(32) d0_0 ( .l1clk(l1clk), .siclk(siclk_out), .soclk(soclk_out), .d(muxout[31:0]), .si({scan_in,so[30:0]}), .so({so[30:0],scan_out}), .q(dout[31:0]) ); endmodule // // buff macro // // module lsu_tgd_dp_buff_macro__left_2__rep_1__stack_32c__width_29 ( din, dout); input [28:0] din; output [28:0] dout; buff #(29) d0_0 ( .in(din[28:0]), .out(dout[28:0]) ); endmodule // // invert macro // // module lsu_tgd_dp_inv_macro__width_1 ( din, dout); input [0:0] din; output [0:0] dout; inv #(1) d0_0 ( .in(din[0:0]), .out(dout[0:0]) ); endmodule // // and macro for ports = 2,3,4 // // module lsu_tgd_dp_and_macro__ports_2__width_1 ( din0, din1, dout); input [0:0] din0; input [0:0] din1; output [0:0] dout; and2 #(1) d0_0 ( .in0(din0[0:0]), .in1(din1[0:0]), .out(dout[0:0]) ); endmodule // 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 lsu_tgd_dp_mux_macro__mux_aope__ports_3__stack_14l__width_13 ( din0, din1, din2, sel0, sel1, dout); wire psel0; wire psel1; wire psel2; input [12:0] din0; input [12:0] din1; input [12:0] din2; input sel0; input sel1; output [12:0] dout; cl_dp1_penc3_8x c0_0 ( .test(1'b1), .sel0(sel0), .sel1(sel1), .psel0(psel0), .psel1(psel1), .psel2(psel2) ); mux3s #(13) d0_0 ( .sel0(psel0), .sel1(psel1), .sel2(psel2), .in0(din0[12:0]), .in1(din1[12:0]), .in2(din2[12:0]), .dout(dout[12:0]) ); endmodule // // buff macro // // module lsu_tgd_dp_buff_macro__stack_14l__width_13 ( din, dout); input [12:0] din; output [12:0] dout; buff #(13) d0_0 ( .in(din[12:0]), .out(dout[12:0]) ); endmodule // 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 lsu_tgd_dp_mux_macro__mux_aope__ports_3__stack_14r__width_13 ( din0, din1, din2, sel0, sel1, dout); wire psel0; wire psel1; wire psel2; input [12:0] din0; input [12:0] din1; input [12:0] din2; input sel0; input sel1; output [12:0] dout; cl_dp1_penc3_8x c0_0 ( .test(1'b1), .sel0(sel0), .sel1(sel1), .psel0(psel0), .psel1(psel1), .psel2(psel2) ); mux3s #(13) d0_0 ( .sel0(psel0), .sel1(psel1), .sel2(psel2), .in0(din0[12:0]), .in1(din1[12:0]), .in2(din2[12:0]), .dout(dout[12:0]) ); endmodule // // buff macro // // module lsu_tgd_dp_buff_macro__stack_14r__width_13 ( din, dout); input [12:0] din; output [12:0] dout; buff #(13) d0_0 ( .in(din[12:0]), .out(dout[12:0]) ); endmodule // 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 lsu_tgd_dp_mux_macro__mux_aonpe__ports_4__stack_64c__width_64 ( din0, sel0, din1, sel1, din2, sel2, din3, sel3, dout); wire buffout0; wire buffout1; wire buffout2; wire buffout3; input [63:0] din0; input sel0; input [63:0] din1; input sel1; input [63:0] din2; input sel2; input [63:0] din3; input sel3; output [63:0] dout; cl_dp1_muxbuff4_8x c0_0 ( .in0(sel0), .in1(sel1), .in2(sel2), .in3(sel3), .out0(buffout0), .out1(buffout1), .out2(buffout2), .out3(buffout3) ); mux4s #(64) d0_0 ( .sel0(buffout0), .sel1(buffout1), .sel2(buffout2), .sel3(buffout3), .in0(din0[63:0]), .in1(din1[63:0]), .in2(din2[63:0]), .in3(din3[63:0]), .dout(dout[63:0]) ); endmodule // // buff macro // // module lsu_tgd_dp_buff_macro__rep_1__stack_64c__width_64 ( din, dout); input [63:0] din; output [63:0] dout; buff #(64) d0_0 ( .in(din[63:0]), .out(dout[63:0]) ); endmodule // // buff macro // // module lsu_tgd_dp_buff_macro__left_19__minbuff_1__stack_64c__width_45 ( din, dout); input [44:0] din; output [44:0] dout; buff #(45) d0_0 ( .in(din[44:0]), .out(dout[44:0]) ); endmodule // any PARAMS parms go into naming of macro module lsu_tgd_dp_msff_macro__left_13__stack_64c__width_51 ( din, clk, en, se, scan_in, siclk, soclk, pce_ov, stop, dout, scan_out); wire l1clk; wire siclk_out; wire soclk_out; wire [49:0] so; input [50:0] din; input clk; input en; input se; input scan_in; input siclk; input soclk; input pce_ov; input stop; output [50:0] dout; output scan_out; cl_dp1_l1hdr_8x c0_0 ( .l2clk(clk), .pce(en), .aclk(siclk), .bclk(soclk), .l1clk(l1clk), .se(se), .pce_ov(pce_ov), .stop(stop), .siclk_out(siclk_out), .soclk_out(soclk_out) ); dff #(51) d0_0 ( .l1clk(l1clk), .siclk(siclk_out), .soclk(soclk_out), .d(din[50:0]), .si({scan_in,so[49:0]}), .so({so[49:0],scan_out}), .q(dout[50:0]) ); endmodule // any PARAMS parms go into naming of macro module lsu_tgd_dp_msff_macro__left_19__stack_64c__width_45 ( din, clk, en, se, scan_in, siclk, soclk, pce_ov, stop, dout, scan_out); wire l1clk; wire siclk_out; wire soclk_out; wire [43:0] so; input [44:0] din; input clk; input en; input se; input scan_in; input siclk; input soclk; input pce_ov; input stop; output [44:0] dout; output scan_out; cl_dp1_l1hdr_8x c0_0 ( .l2clk(clk), .pce(en), .aclk(siclk), .bclk(soclk), .l1clk(l1clk), .se(se), .pce_ov(pce_ov), .stop(stop), .siclk_out(siclk_out), .soclk_out(soclk_out) ); dff #(45) d0_0 ( .l1clk(l1clk), .siclk(siclk_out), .soclk(soclk_out), .d(din[44:0]), .si({scan_in,so[43:0]}), .so({so[43:0],scan_out}), .q(dout[44:0]) ); endmodule // // comparator macro (output is 1 if both inputs are equal; 0 otherwise) // // module lsu_tgd_dp_cmp_macro__width_32 ( din0, din1, dout); input [31:0] din0; input [31:0] din1; output dout; cmp #(32) m0_0 ( .in0(din0[31:0]), .in1(din1[31:0]), .out(dout) ); endmodule // // comparator macro (output is 1 if both inputs are equal; 0 otherwise) // // module lsu_tgd_dp_cmp_macro__width_16 ( din0, din1, dout); input [15:0] din0; input [15:0] din1; output dout; cmp #(16) m0_0 ( .in0(din0[15:0]), .in1(din1[15:0]), .out(dout) ); endmodule // // buff macro // // module lsu_tgd_dp_buff_macro__rep_1__width_10 ( din, dout); input [9:0] din; output [9:0] dout; buff #(10) d0_0 ( .in(din[9:0]), .out(dout[9:0]) ); endmodule // 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 lsu_tgd_dp_mux_macro__mux_aope__ports_3__stack_64c__width_64 ( din0, din1, din2, sel0, sel1, dout); wire psel0; wire psel1; wire psel2; input [63:0] din0; input [63:0] din1; input [63:0] din2; input sel0; input sel1; output [63:0] dout; cl_dp1_penc3_8x c0_0 ( .test(1'b1), .sel0(sel0), .sel1(sel1), .psel0(psel0), .psel1(psel1), .psel2(psel2) ); mux3s #(64) d0_0 ( .sel0(psel0), .sel1(psel1), .sel2(psel2), .in0(din0[63:0]), .in1(din1[63:0]), .in2(din2[63:0]), .dout(dout[63:0]) ); endmodule // // comparator macro (output is 1 if both inputs are equal; 0 otherwise) // // module lsu_tgd_dp_cmp_macro__width_64 ( din0, din1, dout); input [63:0] din0; input [63:0] din1; output dout; cmp #(64) m0_0 ( .in0(din0[63:0]), .in1(din1[63:0]), .out(dout) ); endmodule // // comparator macro (output is 1 if both inputs are equal; 0 otherwise) // // module lsu_tgd_dp_cmp_macro__width_8 ( din0, din1, dout); input [7:0] din0; input [7:0] din1; output dout; cmp #(8) m0_0 ( .in0(din0[7:0]), .in1(din1[7:0]), .out(dout) ); endmodule // // buff macro // // module lsu_tgd_dp_buff_macro__width_5 ( din, dout); input [4:0] din; output [4:0] dout; buff #(5) d0_0 ( .in(din[4:0]), .out(dout[4:0]) ); endmodule