// ========== Copyright Header Begin ==========================================
// OpenSPARC T2 Processor File: n2_com_cm_8x40_cust.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 ============================================
module n2_com_cm_8x40_cust (
input [7:0] adr_w ; // set up to +ve edge
input [39:0] din; // set up to +ve edge
input write_en; // +ve edge clk; write enable
input tcu_array_wr_inhibit;
input [7:0] adr_r; // set up to +ve edge
input lookup_en; // set up to -ve edge
input [39:7] key; // set up to -ve edge
input tcu_se_scancollar_in;
input tcu_se_scancollar_out;
input tcu_array_bypass; // array bypass for DFT
// synopsys translate_off
wire [7:0] match_p_array;
wire [7:0] match_idx_p_array;
// scan chain connections ////
assign stop = tcu_clk_stop;
assign pce_ov = tcu_pce_ov;
//0in kndr -var adr_w[7:0] -active write_en
//0in kndr -var adr_r[7:0] -active read_en
//0in one_hot -var adr_r[7:0] -active (|adr_r & read_en) -group mbist_mode
//0in one_hot -var adr_w[7:0] -active (|adr_w & write_en) -group mbist_mode
//inv_macro tcu_array_bypass_inv (width = 1)
// .dout(tcu_array_bypass_n),
// .din(tcu_array_bypass)
////msff_ctl_macro ff_tcu_array_wr_inhibit (width = 1)
// ( // not a real flop. ONly used as a trigger
// .scan_in(ff_tcu_array_wr_inhibit_scanin),
// .scan_out(ff_tcu_array_wr_inhibit_scanout),
// .din(tcu_array_wr_inhibit),
// .dout(tcu_array_wr_inhibit_d1)
n2_com_cm_8x40_cust_l1clkhdr_ctl_macro collar_in
.se (tcu_se_scancollar_in),
n2_com_cm_8x40_cust_l1clkhdr_ctl_macro collar_out
.se (tcu_se_scancollar_out),
n2_com_cm_8x40_cust_l1clkhdr_ctl_macro scan_en
n2_com_cm_8x40_cust_l1clkhdr_ctl_macro mat
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx0 (.scan_in(scan_in), .scan_out(so[0]), .l1clk(l1clk_in), .d(din[0]), .latout(xx0_unused[0]), .q_l(xx_unused[0]), .q(din_d1[0]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx1 (.scan_in(so[0]), .scan_out(so[1]), .l1clk(l1clk_in), .d(din[1]), .latout(xx0_unused[1]), .q_l(xx_unused[1]), .q(din_d1[1]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx2 (.scan_in(so[1]), .scan_out(so[2]), .l1clk(l1clk_in), .d(din[2]), .latout(xx0_unused[2]), .q_l(xx_unused[2]), .q(din_d1[2]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx3 (.scan_in(so[2]), .scan_out(so[3]), .l1clk(l1clk_in), .d(din[3]), .latout(xx0_unused[3]), .q_l(xx_unused[3]), .q(din_d1[3]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx4 (.scan_in(so[3]), .scan_out(so[4]), .l1clk(l1clk_in), .d(din[4]), .latout(xx0_unused[4]), .q_l(xx_unused[4]), .q(din_d1[4]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx5 (.scan_in(so[4]), .scan_out(so[5]), .l1clk(l1clk_in), .d(din[5]), .latout(xx0_unused[5]), .q_l(xx_unused[5]), .q(din_d1[5]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx6 (.scan_in(so[5]), .scan_out(so[6]), .l1clk(l1clk_in), .d(din[6]), .latout(xx0_unused[6]), .q_l(xx_unused[6]), .q(din_d1[6]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx7 (.scan_in(so[6]), .scan_out(so[7]), .l1clk(l1clk_in), .d(din[9]), .latout(xx0_unused[7]), .q_l(xx_unused[7]), .q(din_d1[9]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx8 (.scan_in(so[7]), .scan_out(so[8]), .l1clk(l1clk_in), .d(din[10]), .latout(xx0_unused[8]), .q_l(xx_unused[8]), .q(din_d1[10]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx9 (.scan_in(so[8]), .scan_out(so[9]), .l1clk(l1clk_in), .d(din[11]), .latout(xx0_unused[9]), .q_l(xx_unused[9]), .q(din_d1[11]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx10 (.scan_in(so[9]), .scan_out(so[10]), .l1clk(l1clk_in), .d(din[12]), .latout(xx0_unused[10]), .q_l(xx_unused[10]), .q(din_d1[12]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx11 (.scan_in(so[10]), .scan_out(so[11]), .l1clk(l1clk_out), .d(match_idx_p_array[4]), .q(match_idx[4]), .q_l(xx_unused[11]), .latout(xx0_unused[11]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx12 (.scan_in(so[11]), .scan_out(so[12]), .l1clk(l1clk_out), .d(match_idx_p_array[5]), .q(match_idx[5]), .q_l(xx_unused[12]), .latout(xx0_unused[12]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx13 (.scan_in(so[12]), .scan_out(so[13]), .l1clk(l1clk_out), .d(match_idx_p_array[6]), .q(match_idx[6]), .q_l(xx_unused[13]), .latout(xx0_unused[13]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx14 (.scan_in(so[13]), .scan_out(so[14]), .l1clk(l1clk_out), .d(match_idx_p_array[7]), .q(match_idx[7]), .q_l(xx_unused[14]), .latout(xx0_unused[14]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx15 (.scan_in(so[14]), .scan_out(so[15]), .l1clk(l1clk_in), .d(din[13]), .latout(xx0_unused[15]), .q_l(xx_unused[15]), .q(din_d1[13]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx16 (.scan_in(so[15]), .scan_out(so[16]), .l1clk(l1clk_in), .d(din[14]), .latout(xx0_unused[16]), .q_l(xx_unused[16]), .q(din_d1[14]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx17 (.scan_in(so[16]), .scan_out(so[17]), .l1clk(l1clk_in), .d(din[15]), .latout(xx0_unused[17]), .q_l(xx_unused[17]), .q(din_d1[15]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx18 (.scan_in(so[17]), .scan_out(so[18]), .l1clk(l1clk_in), .d(din[16]), .latout(xx0_unused[18]), .q_l(xx_unused[18]), .q(din_d1[16]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx19 (.scan_in(so[18]), .scan_out(so[19]), .l1clk(l1clk_in), .d(din[17]), .latout(xx0_unused[19]), .q_l(xx_unused[19]), .q(din_d1[17]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx20 (.scan_in(so[19]), .scan_out(so[20]), .l1clk(l1clk_in), .d(din[7]), .latout(xx0_unused[20]), .q_l(xx_unused[20]), .q(din_d1[7]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx21 (.scan_in(so[20]), .scan_out(so[21]), .l1clk(l1clk_in), .d(din[8]), .latout(xx0_unused[21]), .q_l(xx_unused[21]), .q(din_d1[8]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx22 (.scan_in(so[21]), .scan_out(so[22]), .l1clk(l1clk_in), .d(din[18]), .latout(xx0_unused[22]), .q_l(xx_unused[22]), .q(din_d1[18]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx23 (.scan_in(so[22]), .scan_out(so[23]), .l1clk(l1clk_in), .d(din[19]), .latout(xx0_unused[23]), .q_l(xx_unused[23]), .q(din_d1[19]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx24 (.scan_in(so[23]), .scan_out(so[24]), .l1clk(l1clk_out), .d(match_idx_p_array[0]), .q(match_idx[0]), .q_l(xx_unused[24]), .latout(xx0_unused[24]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx25 (.scan_in(so[24]), .scan_out(so[25]), .l1clk(l1clk_out), .d(match_idx_p_array[1]), .q(match_idx[1]), .q_l(xx_unused[25]), .latout(xx0_unused[25]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx26 (.scan_in(so[25]), .scan_out(so[26]), .l1clk(l1clk_out), .d(match_idx_p_array[2]), .q(match_idx[2]), .q_l(xx_unused[26]), .latout(xx0_unused[26]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx27 (.scan_in(so[26]), .scan_out(so[27]), .l1clk(l1clk_out), .d(match_idx_p_array[3]), .q(match_idx[3]), .q_l(xx_unused[27]), .latout(xx0_unused[27]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx28 (.scan_in(so[27]), .scan_out(so[28]), .l1clk(l1clk_in), .d(din[20]), .latout(xx0_unused[28]), .q_l(xx_unused[28]), .q(din_d1[20]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx29 (.scan_in(so[28]), .scan_out(so[29]), .l1clk(l1clk_in), .d(din[21]), .latout(xx0_unused[29]), .q_l(xx_unused[29]), .q(din_d1[21]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx30 (.scan_in(so[29]), .scan_out(so[30]), .l1clk(l1clk_in), .d(din[22]), .latout(xx0_unused[30]), .q_l(xx_unused[30]), .q(din_d1[22]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx31 (.scan_in(so[30]), .scan_out(so[31]), .l1clk(l1clk_in), .d(din[23]), .latout(xx0_unused[31]), .q_l(xx_unused[31]), .q(din_d1[23]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx32 (.scan_in(so[31]), .scan_out(so[32]), .l1clk(l1clk_out), .d(match_p_array[4]), .q(match[4]), .q_l(xx_unused[32]), .latout(xx0_unused[32]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx33 (.scan_in(so[32]), .scan_out(so[33]), .l1clk(l1clk_out), .d(match_p_array[5]), .q(match[5]), .q_l(xx_unused[33]), .latout(xx0_unused[33]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx34 (.scan_in(so[33]), .scan_out(so[34]), .l1clk(l1clk_out), .d(match_p_array[6]), .q(match[6]), .q_l(xx_unused[34]), .latout(xx0_unused[34]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx35 (.scan_in(so[34]), .scan_out(so[35]), .l1clk(l1clk_out), .d(match_p_array[7]), .q(match[7]), .q_l(xx_unused[35]), .latout(xx0_unused[35]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx36 (.scan_in(so[35]), .scan_out(so[36]), .l1clk(l1clk_in), .d(din[24]), .latout(xx0_unused[36]), .q_l(xx_unused[36]), .q(din_d1[24]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx37 (.scan_in(so[36]), .scan_out(so[37]), .l1clk(l1clk_in), .d(din[25]), .latout(xx0_unused[37]), .q_l(xx_unused[37]), .q(din_d1[25]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx38 (.scan_in(so[37]), .scan_out(so[38]), .l1clk(l1clk_in), .d(din[26]), .latout(xx0_unused[38]), .q_l(xx_unused[38]), .q(din_d1[26]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx39 (.scan_in(so[38]), .scan_out(so[39]), .l1clk(l1clk_in), .d(din[27]), .latout(xx0_unused[39]), .q_l(xx_unused[39]), .q(din_d1[27]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx40 (.scan_in(so[39]), .scan_out(so[40]), .l1clk(l1clk_out), .d(match_p_array[0]), .q(match[0]), .q_l(xx_unused[40]), .latout(xx0_unused[40]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx41 (.scan_in(so[40]), .scan_out(so[41]), .l1clk(l1clk_out), .d(match_p_array[1]), .q(match[1]), .q_l(xx_unused[41]), .latout(xx0_unused[41]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx42 (.scan_in(so[41]), .scan_out(so[42]), .l1clk(l1clk_out), .d(match_p_array[2]), .q(match[2]), .q_l(xx_unused[42]), .latout(xx0_unused[42]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx43 (.scan_in(so[42]), .scan_out(so[43]), .l1clk(l1clk_out), .d(match_p_array[3]), .q(match[3]), .q_l(xx_unused[43]), .latout(xx0_unused[43]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx44 (.scan_in(so[43]), .scan_out(so[44]), .l1clk(l1clk_in), .d(din[28]), .latout(xx0_unused[44]), .q_l(xx_unused[44]), .q(din_d1[28]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx45 (.scan_in(so[44]), .scan_out(so[45]), .l1clk(l1clk_in), .d(din[29]), .latout(xx0_unused[45]), .q_l(xx_unused[45]), .q(din_d1[29]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx46 (.scan_in(so[45]), .scan_out(so[46]), .l1clk(l1clk_in), .d(din[30]), .latout(xx0_unused[46]), .q_l(xx_unused[46]), .q(din_d1[30]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx47 (.scan_in(so[46]), .scan_out(so[47]), .l1clk(l1clk_in), .d(din[31]), .latout(xx0_unused[47]), .q_l(xx_unused[47]), .q(din_d1[31]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx48 (.scan_in(so[47]), .scan_out(so[48]), .l1clk(l1clk_in), .d(din[32]), .latout(xx0_unused[48]), .q_l(xx_unused[48]), .q(din_d1[32]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx49 (.scan_in(so[48]), .scan_out(so[49]), .l1clk(l1clk_in), .d(din[33]), .latout(xx0_unused[49]), .q_l(xx_unused[49]), .q(din_d1[33]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx50 (.scan_in(so[49]), .scan_out(so[50]), .l1clk(l1clk_in), .d(din[34]), .latout(xx0_unused[50]), .q_l(xx_unused[50]), .q(din_d1[34]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx51 (.scan_in(so[50]), .scan_out(so[51]), .l1clk(l1clk_in), .d(din[35]), .latout(xx0_unused[51]), .q_l(xx_unused[51]), .q(din_d1[35]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx52 (.scan_in(so[51]), .scan_out(so[52]), .l1clk(l1clk_in), .d(din[36]), .latout(xx0_unused[52]), .q_l(xx_unused[52]), .q(din_d1[36]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx53 (.scan_in(so[52]), .scan_out(so[53]), .l1clk(l1clk_in), .d(din[37]), .latout(xx0_unused[53]), .q_l(xx_unused[53]), .q(din_d1[37]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx54 (.scan_in(so[53]), .scan_out(so[54]), .l1clk(l1clk_in), .d(din[38]), .latout(xx0_unused[54]), .q_l(xx_unused[54]), .q(din_d1[38]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx55 (.scan_in(so[54]), .scan_out(so[55]), .l1clk(l1clk_in), .d(din[39]), .latout(xx0_unused[55]), .q_l(xx_unused[55]), .q(din_d1[39]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx56 (.scan_in(so[55]), .scan_out(so[56]), .l1clk(l1clk_in), .d(read_en), .latout(mb_ren_d1), .q_l(xx_unused[56]), .q(xx0_unused[56]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx57 (.scan_in(so[56]), .scan_out(so[57]), .l1clk(l1clk_in), .d(write_en), .latout(mb_wen_d1), .q_l(xx_unused[57]), .q(xx0_unused[57]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx58 (.scan_in(so[57]), .scan_out(so[58]), .l1clk(l1clk_in), .d(adr_r[0]), .latout(adr_r_d1[0]), .q_l(xx_unused[58]), .q(xx0_unused[58]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx59 (.scan_in(so[58]), .scan_out(so[59]), .l1clk(l1clk_in), .d(adr_r[1]), .latout(adr_r_d1[1]), .q_l(xx_unused[59]), .q(xx0_unused[59]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx60 (.scan_in(so[59]), .scan_out(so[60]), .l1clk(l1clk_in), .d(adr_r[2]), .latout(adr_r_d1[2]), .q_l(xx_unused[60]), .q(xx0_unused[60]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx61 (.scan_in(so[60]), .scan_out(so[61]), .l1clk(l1clk_in), .d(adr_r[3]), .latout(adr_r_d1[3]), .q_l(xx_unused[61]), .q(xx0_unused[61]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx62 (.scan_in(so[61]), .scan_out(so[62]), .l1clk(l1clk_in), .d(adr_w[0]), .latout(adr_w_d1[0]), .q_l(xx_unused[62]), .q(xx0_unused[62]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx63 (.scan_in(so[62]), .scan_out(so[63]), .l1clk(l1clk_in), .d(adr_w[1]), .latout(adr_w_d1[1]), .q_l(xx_unused[63]), .q(xx0_unused[63]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx64 (.scan_in(so[63]), .scan_out(so[64]), .l1clk(l1clk_in), .d(adr_w[2]), .latout(adr_w_d1[2]), .q_l(xx_unused[64]), .q(xx0_unused[64]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx65 (.scan_in(so[64]), .scan_out(so[65]), .l1clk(l1clk_in), .d(adr_w[3]), .latout(adr_w_d1[3]), .q_l(xx_unused[65]), .q(xx0_unused[65]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx66 (.scan_in(so[65]), .scan_out(so[66]), .l1clk(l1clk_in), .d(adr_r[4]), .latout(adr_r_d1[4]), .q_l(xx_unused[66]), .q(xx0_unused[66]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx67 (.scan_in(so[66]), .scan_out(so[67]), .l1clk(l1clk_in), .d(adr_r[5]), .latout(adr_r_d1[5]), .q_l(xx_unused[67]), .q(xx0_unused[67]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx68 (.scan_in(so[67]), .scan_out(so[68]), .l1clk(l1clk_in), .d(adr_r[6]), .latout(adr_r_d1[6]), .q_l(xx_unused[68]), .q(xx0_unused[68]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx69 (.scan_in(so[68]), .scan_out(so[69]), .l1clk(l1clk_in), .d(adr_r[7]), .latout(adr_r_d1[7]), .q_l(xx_unused[69]), .q(xx0_unused[69]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx70 (.scan_in(so[69]), .scan_out(so[70]), .l1clk(l1clk_in), .d(adr_w[4]), .latout(adr_w_d1[4]), .q_l(xx_unused[70]), .q(xx0_unused[70]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx71 (.scan_in(so[70]), .scan_out(so[71]), .l1clk(l1clk_in), .d(adr_w[5]), .latout(adr_w_d1[5]), .q_l(xx_unused[71]), .q(xx0_unused[71]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx72 (.scan_in(so[71]), .scan_out(so[72]), .l1clk(l1clk_in), .d(adr_w[6]), .latout(adr_w_d1[6]), .q_l(xx_unused[72]), .q(xx0_unused[72]),
n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 xx73 (.scan_in(so[72]), .scan_out(so[73]), .l1clk(l1clk_in), .d(adr_w[7]), .latout(adr_w_d1[7]), .q_l(xx_unused[73]), .q(xx0_unused[73]),
//mux_macro mux_dout (width=40,ports=2,mux=aonpe)
// .din1 (dout_array[39:0]),
// .sel0 (tcu_array_bypass),
// .sel1 (tcu_array_bypass_n)
assign dout = dout_array;
n2_com_cm_8x40_cust_array array (
.bypass(tcu_array_bypass),
.write_disable(tcu_array_wr_inhibit),
.match_p(match_p_array[7:0]),
.match_idx_p(match_idx_p_array[7:0]),
//assign ff_din_scanin = scan_in ;
//assign ff_wr_en_scanin = ff_din_scanout ;
//assign ff_wr_adr_scanin = ff_wr_en_scanout ;
//assign ff_rd_adr_scanin = ff_wr_adr_scanout ;
//assign ff_ren_scanin = ff_rd_adr_scanout ;
//assign ff_tcu_array_wr_inhibit_scanin = ff_ren_scanout ;
//assign ff_match_scanin = ff_tcu_array_wr_inhibit_scanout ;
//assign ff_match_idx_scanin = ff_match_scanout ;
//assign scan_out = ff_match_idx_scanout ;
assign scan_out = so[73] ;
module n2_com_cm_8x40_cust_array (
output [7:0] match_idx_p;
reg [39:0] mb_cam_data[7:0] ; // BS and SR 8 deep change 3/3/04
wire [39:0] mb_cam_data_0;
wire [39:0] mb_cam_data_1;
wire [39:0] mb_cam_data_2;
wire [39:0] mb_cam_data_3;
wire [39:0] mb_cam_data_4;
wire [39:0] mb_cam_data_5;
wire [39:0] mb_cam_data_6;
wire [39:0] mb_cam_data_7;
assign mb_cam_data_0 = mb_cam_data[0];
assign mb_cam_data_1 = mb_cam_data[1];
assign mb_cam_data_2 = mb_cam_data[2];
assign mb_cam_data_3 = mb_cam_data[3];
assign mb_cam_data_4 = mb_cam_data[4];
assign mb_cam_data_5 = mb_cam_data[5];
assign mb_cam_data_6 = mb_cam_data[6];
assign mb_cam_data_7 = mb_cam_data[7];
///////////////////////////////////////
// Initialize the cam/arrays. //
///////////////////////////////////////
for (n = 0; n < 8; n = n + 1) begin
mb_cam_data[n] = {40 {1'b0}};
always @(l1clk_mat or l2clk or write_disable or bypass or lookup_en or key) begin
lookup_en_d1 <= lookup_en ;
if (~l1clk_mat & ~l2clk & lookup_en_d1 & ~(write_disable|bypass) ) begin
tmp_addr0 = mb_cam_data[0];
match_p[0] = ( tmp_addr0[39:7] == key_d1[39:7] ) ;
match_idx_p[0] = ( tmp_addr0[17:9] == key_d1[17:9] ) ;
tmp_addr1 = mb_cam_data[1];
match_p[1] = ( tmp_addr1[39:7] == key_d1[39:7] ) ;
match_idx_p[1] = ( tmp_addr1[17:9] == key_d1[17:9] ) ;
tmp_addr2 = mb_cam_data[2];
match_p[2] = ( tmp_addr2[39:7] == key_d1[39:7] ) ;
match_idx_p[2] = ( tmp_addr2[17:9] == key_d1[17:9] ) ;
tmp_addr3 = mb_cam_data[3];
match_p[3] = ( tmp_addr3[39:7] == key_d1[39:7] ) ;
match_idx_p[3] = ( tmp_addr3[17:9] == key_d1[17:9] ) ;
tmp_addr4 = mb_cam_data[4];
match_p[4] = ( tmp_addr4[39:7] == key_d1[39:7] ) ;
match_idx_p[4] = ( tmp_addr4[17:9] == key_d1[17:9] ) ;
tmp_addr5 = mb_cam_data[5];
match_p[5] = ( tmp_addr5[39:7] == key_d1[39:7] ) ;
match_idx_p[5] = ( tmp_addr5[17:9] == key_d1[17:9] ) ;
tmp_addr6 = mb_cam_data[6];
match_p[6] = ( tmp_addr6[39:7] == key_d1[39:7] ) ;
match_idx_p[6] = ( tmp_addr6[17:9] == key_d1[17:9] ) ;
tmp_addr7 = mb_cam_data[7];
match_p[7] = ( tmp_addr7[39:7] == key_d1[39:7] ) ;
match_idx_p[7] = ( tmp_addr7[17:9] == key_d1[17:9] ) ;
else if (~l1clk_mat & ~l2clk & (~lookup_en_d1 |write_disable|bypass) ) begin
if (l1clk_mat & l2clk) begin
// READ AND WRITE HAPPEN in Phase 1.
// write_disable_d1 & reset_l_d1 are part of the
// list because we want to enter the following
// always block under the following condition:
// - wr_addr , din , wr_en remain the same across the
// rising edge of the clock
// - write_disable or reset_l change across the rising edge of the
// clock from high to low.
always @(l1clk or rd_en or rd_addr or l2clk or wr_addr or din or wr_en or write_disable or bypass ) begin
if (l1clk & l2clk & wr_en & ~(write_disable|bypass))
8'b0000_0000: ; // do nothing
8'b0000_0001: mb_cam_data[0] = din ;
8'b0000_0010: mb_cam_data[1] = din ;
8'b0000_0100: mb_cam_data[2] = din ;
8'b0000_1000: mb_cam_data[3] = din ;
8'b0001_0000: mb_cam_data[4] = din;
8'b0010_0000: mb_cam_data[5] = din ;
8'b0100_0000: mb_cam_data[6] = din ;
8'b1000_0000: mb_cam_data[7] = din ;
// mb_cam_data[7] = din ;
// mb_cam_data[6] = din ;
// mb_cam_data[5] = din ;
// mb_cam_data[4] = din ;
// mb_cam_data[3] = din ;
// mb_cam_data[2] = din ;
// mb_cam_data[1] = din ;
// mb_cam_data[0] = din ;
// 0in <fire -message "FATAL ERROR: incorrect write wordline" -group mbist_mode
if(rd_en & (rd_addr == wr_addr))
// 0in < known_driven -var rd_addr -message "read pointer write pointer conflict" -group mbist_mode
// reset_l_d1 has purely been added so that we enter the always
// block when the wordline/wr_en does not change across clk cycles
// Notice reset_l_d1 is not used in any of the "if" statements.
// Notice that the renable is qualified with l1clk to take
// care that we do not read from the array if reset_l goes high
// during the negative phase of l1clk.
always @( /*memory or*/ rd_addr or wr_addr or l1clk or l2clk
or rd_en or wr_en or write_disable or
mb_cam_data_0 or mb_cam_data_1 or mb_cam_data_2 or mb_cam_data_3
or mb_cam_data_4 or mb_cam_data_5 or mb_cam_data_6 or mb_cam_data_7
else if (rd_en & l1clk & write_disable ) begin
// dout <= 40'hff_ffff_ffff ;
else if (rd_en & l1clk & ~write_disable) begin
if ((wr_en) && (rd_addr == wr_addr) )
// 0in < known_driven -var rd_addr -message "read pointer write pointer conflict" -group mbist_mode
// match sense amp ckt behavior when no read wl is selected
8'b0000_0000: dout <= 40'hff_ffff_ffff ;
8'b0000_0001: dout <= mb_cam_data_0 ;
8'b0000_0010: dout <= mb_cam_data_1 ;
8'b0000_0100: dout <= mb_cam_data_2 ;
8'b0000_1000: dout <= mb_cam_data_3 ;
8'b0001_0000: dout <= mb_cam_data_4 ;
8'b0010_0000: dout <= mb_cam_data_5 ;
8'b0100_0000: dout <= mb_cam_data_6 ;
8'b1000_0000: dout <= mb_cam_data_7 ;
// 0in <fire -message "FATAL ERROR: incorrect read wordline" -group mbist_mode
// any PARAMS parms go into naming of macro
module n2_com_cm_8x40_cust_l1clkhdr_ctl_macro (
// macro for cl_mc1_scm_msff_lat_{4}x flops
module n2_com_cm_8x40_cust_scm_msff_lat_macro__width_1 (
//place::generic_place($width,$stack,$left);