// ========== Copyright Header Begin ==========================================
// OpenSPARC T2 Processor File: ncu_ssisif_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 ============================================
`define RF_RDEN_OFFSTATE 1'b1
//====================================
`define NCU_INTMANRF_DEPTH 128
`define NCU_INTMANRF_DATAWIDTH 16
`define NCU_INTMANRF_ADDRWIDTH 7
//====================================
//====================================
`define NCU_MONDORF_DEPTH 64
`define NCU_MONDORF_DATAWIDTH 72
`define NCU_MONDORF_ADDRWIDTH 6
//====================================
//====================================
`define NCU_CPUBUFRF_DEPTH 32
`define NCU_CPUBUFRF_DATAWIDTH 144
`define NCU_CPUBUFRF_ADDRWIDTH 5
//====================================
//====================================
`define NCU_IOBUFRF_DEPTH 32
`define NCU_IOBUFRF_DATAWIDTH 144
`define NCU_IOBUFRF_ADDRWIDTH 5
//====================================
//====================================
`define NCU_IOBUF1RF_DEPTH 32
`define NCU_IOBUF1RF_DATAWIDTH 32
`define NCU_IOBUF1RF_ADDRWIDTH 5
//====================================
//====================================
`define NCU_INTBUFRF_DEPTH 32
`define NCU_INTBUFRF_DATAWIDTH 144
`define NCU_INTBUFRF_ADDRWIDTH 5
//====================================
//== fix me : need to remove when warm //
//== becomes available //
`define WMR_LENGTH 10'd999
`define WMR_LENGTH_P1 10'd1000
//// NCU CSR_MAN address 80_0000_xxxx ////
`define NCU_CSR_MAN 16'h0000
`define NCU_CREG_INTMAN 16'h0000
//`define NCU_CREG_INTVECDISP 16'h0800
`define NCU_CREG_MONDOINVEC 16'h0a00
`define NCU_CREG_SERNUM 16'h1000
`define NCU_CREG_FUSESTAT 16'h1008
`define NCU_CREG_COREAVAIL 16'h1010
`define NCU_CREG_BANKAVAIL 16'h1018
`define NCU_CREG_BANK_ENABLE 16'h1020
`define NCU_CREG_BANK_ENABLE_STATUS 16'h1028
`define NCU_CREG_L2_HASH_ENABLE 16'h1030
`define NCU_CREG_L2_HASH_ENABLE_STATUS 16'h1038
`define NCU_CREG_MEM32_BASE 16'h2000
`define NCU_CREG_MEM32_MASK 16'h2008
`define NCU_CREG_MEM64_BASE 16'h2010
`define NCU_CREG_MEM64_MASK 16'h2018
`define NCU_CREG_IOCON_BASE 16'h2020
`define NCU_CREG_IOCON_MASK 16'h2028
`define NCU_CREG_MMUFSH 16'h2030
`define NCU_CREG_ESR 16'h3000
`define NCU_CREG_ELE 16'h3008
`define NCU_CREG_EIE 16'h3010
`define NCU_CREG_EJR 16'h3018
`define NCU_CREG_FEE 16'h3020
`define NCU_CREG_PER 16'h3028
`define NCU_CREG_SIISYN 16'h3030
`define NCU_CREG_NCUSYN 16'h3038
`define NCU_CREG_SCKSEL 16'h3040
`define NCU_CREG_DBGTRIG_EN 16'h4000
//// NUC CSR_MONDO address 80_0004_xxxx ////
`define NCU_CSR_MONDO 16'h0004
`define NCU_CREG_MDATA0 16'h0000
`define NCU_CREG_MDATA1 16'h0200
`define NCU_CREG_MDATA0_ALIAS 16'h0400
`define NCU_CREG_MDATA1_ALIAS 16'h0600
`define NCU_CREG_MBUSY 16'h0800
`define NCU_CREG_MBUSY_ALIAS 16'h0a00
// ASI shared reg 90_xxxx_xxxx//
`define NCU_ASI_A_HIT 10'h104 // 6-bits cpuid and thread id are "x"
`define NCU_ASI_B_HIT 10'h1CC // 6-bits cpuid and thread id are "x"
`define NCU_ASI_C_HIT 10'h114 // 6-bits cpuid and thread id are "x"
`define NCU_ASI_COREAVAIL 16'h0000
`define NCU_ASI_CORE_ENABLE_STATUS 16'h0010
`define NCU_ASI_CORE_ENABLE 16'h0020
`define NCU_ASI_XIR_STEERING 16'h0030
`define NCU_ASI_CORE_RUNNINGRW 16'h0050
`define NCU_ASI_CORE_RUNNING_STATUS 16'h0058
`define NCU_ASI_CORE_RUNNING_W1S 16'h0060
`define NCU_ASI_CORE_RUNNING_W1C 16'h0068
`define NCU_ASI_INTVECDISP 16'h0000
`define NCU_ASI_ERR_STR 16'h1000
`define NCU_ASI_WMR_VEC_MASK 16'h0018
`define NCU_ASI_CMP_TICK_ENABLE 16'h0038
//// UCB packet type ////
`define UCB_READ_NACK 4'b0000 // ack/nack types
`define UCB_READ_ACK 4'b0001
`define UCB_WRITE_ACK 4'b0010
`define UCB_IFILL_ACK 4'b0011
`define UCB_IFILL_NACK 4'b0111
`define UCB_READ_REQ 4'b0100 // req types
`define UCB_WRITE_REQ 4'b0101
`define UCB_IFILL_REQ 4'b0110
`define UCB_INT 4'b1000 // plain interrupt
`define UCB_INT_VEC 4'b1100 // interrupt with vector
`define UCB_INT_SOC_UE 4'b1001 // soc interrup ue
`define UCB_INT_SOC_CE 4'b1010 // soc interrup ce
`define UCB_RESET_VEC 4'b0101 // reset with vector
`define UCB_IDLE_VEC 4'b1110 // idle with vector
`define UCB_RESUME_VEC 4'b1111 // resume with vector
`define UCB_INT_SOC 4'b1101 // soc interrup ce
//// PCX packet type ////
`define PCX_LOAD_RQ 5'b00000
`define PCX_IMISS_RQ 5'b10000
`define PCX_STORE_RQ 5'b00001
`define PCX_FWD_RQs 5'b01101
`define PCX_FWD_RPYs 5'b01110
//// CPX packet type ////
//`define CPX_LOAD_RET 4'b0000
`define CPX_LOAD_RET 4'b1000
`define CPX_ST_ACK 4'b0100
//`define CPX_IFILL_RET 4'b0001
`define CPX_IFILL_RET 4'b1001
`define CPX_INT_RET 4'b0111
`define CPX_INT_SOC 4'b1101
//`define CPX_FWD_RQ_RET 4'b1010
//`define CPX_FWD_RPY_RET 4'b1011
//// Global CSR decode ////
/////8'hA0 ~ BF L2 CSR////
`define DMU_PIO 4'hC // C0 ~ CF
`define SSI_ADDR 12'hFF_F
`define SSI_ADDR_TIMEOUT_REG 40'hFF_0001_0088
`define SSI_ADDR_LOG_REG 40'hFF_0000_0018
`define SSI_REQ_PAR 3'b101
`define SSI_ACK_PAR 3'b010
wire [2:0] next_wdata_sel;
wire u_dffrle_rw_scanout;
wire u_dffrle_size_scanin;
wire u_dffrle_size_scanout;
wire u_dffrle_wdata_scanin;
wire u_dffrle_wdata_scanout;
wire u_dffrle_wdata_sel_scanin;
wire u_dffrle_wdata_sel_scanout;
wire u_dffrle_sif_ucbif_rdata_scanin;
wire u_dffrle_sif_ucbif_rdata_scanout;
wire u_dffrle_par_scanin;
wire u_dffrle_par_scanout;
wire [23:0] n_timeout_cnt;
wire [23:0] next_timeout_cnt;
wire u_dffrle_timeout_cnt_scanin;
wire u_dffrle_timeout_cnt_scanout;
wire [7:0] mosi_shreg0_p_out;
wire [7:0] mosi_shreg1_p_out;
wire [7:0] mosi_shreg2_p_out;
wire [7:0] mosi_shreg3_p_out;
wire [7:0] mosi_shreg4_p_out;
wire [7:0] mosi_shreg5_p_out;
wire [7:0] mosi_shreg6_p_out;
wire [7:0] mosi_shreg0_p_in;
wire [63:0] mosi_shreg_din;
wire [7:0] mosi_shreg1_p_in;
wire [7:0] mosi_shreg2_p_in;
wire [7:0] mosi_shreg3_p_in;
wire [7:0] mosi_shreg4_p_in;
wire [7:0] mosi_shreg5_p_in;
wire [7:0] mosi_shreg6_p_in;
wire [7:0] mosi_shreg7_p_in;
wire u_mosi_shreg0_scanin;
wire u_mosi_shreg0_scanout;
wire u_mosi_shreg1_scanin;
wire u_mosi_shreg1_scanout;
wire u_mosi_shreg2_scanin;
wire u_mosi_shreg2_scanout;
wire u_mosi_shreg3_scanin;
wire u_mosi_shreg3_scanout;
wire u_mosi_shreg4_scanin;
wire u_mosi_shreg4_scanout;
wire u_mosi_shreg5_scanin;
wire u_mosi_shreg5_scanout;
wire u_mosi_shreg6_scanin;
wire u_mosi_shreg6_scanout;
wire [7:0] mosi_shreg7_p_out;
wire u_mosi_shreg7_scanin;
wire u_mosi_shreg7_scanout;
wire [6:0] next_sck_cyc_cnt;
wire [63:0] srg64p_out_next;
wire srg64p_out_ff_scanin;
wire srg64p_out_ff_scanout;
wire next_sif_ucbif_rdata_vld;
wire sif_ucbif_timeout_rst_l;
wire next_sif_ucbif_timeout;
wire next_sif_ucbif_par_err;
wire u_dffrl_async_ctu_jbi_ssiclk_ff_scanin;
wire u_dffrl_async_ctu_jbi_ssiclk_ff_scanout;
wire next_jbi_io_ssi_sck;
wire u_dffrl_async_jbi_io_ssi_sck_scanin;
wire u_dffrl_async_jbi_io_ssi_sck_scanout;
wire u_dff_io_jbi_ssi_miso_ff_scanin;
wire u_dff_io_jbi_ssi_miso_ff_scanout;
wire sck_posedge_ff_scanin;
wire sck_posedge_ff_scanout;
wire sck_posedge_d1_ff_scanin;
wire sck_posedge_d1_ff_scanout;
wire sck_posedge_d2_ff_scanin;
wire sck_posedge_d2_ff_scanout;
wire sck_posedge_d3_ff_scanin;
wire sck_posedge_d3_ff_scanout;
wire sck_posedge_d4_ff_scanin;
wire sck_posedge_d4_ff_scanout;
wire u_dffrl_ssi_sm_scanin;
wire u_dffrl_ssi_sm_scanout;
wire [6:0] n_sck_cyc_cnt;
wire u_dffrl_sck_cyc_cnt_scanin;
wire u_dffrl_sck_cyc_cnt_scanout;
wire u_dffrl_sif_ucbif_rdata_vld_scanin;
wire u_dffrl_sif_ucbif_rdata_vld_scanout;
wire n_sif_ucbif_timeout;
wire u_dffrl_sif_ucbif_timeout_scanin;
wire u_dffrl_sif_ucbif_timeout_scanout;
wire u_dffrl_sif_ucbif_par_err_scanin;
wire u_dffrl_sif_ucbif_par_err_scanout;
wire u_dffrl_jbi_io_ssi_mosi_scanin;
wire u_dffrl_jbi_io_ssi_mosi_scanout;
wire [17:0] next_sck_cnt;
wire sck_bypass_ff_scanin;
wire sck_bypass_ff_scanout;
////////////////////////////////////////////////////////////////////////
// Interface signal list declarations
////////////////////////////////////////////////////////////////////////
input [23:0] ucbif_sif_timeval;
input ucbif_sif_timeout_accpt;
output sif_ucbif_timeout; //assert until accepted
output sif_ucbif_timeout_rw; //timeout of a rd or wr
output sif_ucbif_par_err; //for rd par err, assert until accepted
input ucbif_sif_rw; //instr w/o data will have no dlen asserted
input [1:0] ucbif_sif_size;
input [27:0] ucbif_sif_addr;
input [63:0] ucbif_sif_wdata;
input ucbif_sif_rdata_accpt;
output [63:0] sif_ucbif_rdata;
output sif_ucbif_rdata_vld;
////////////////////////////////////////////////////////////////////////
// Interface signal type declarations
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
// Local signal declarations
////////////////////////////////////////////////////////////////////////
//parameter SSI_IDLE = 3'b000,
reg [63:0] next_sif_ucbif_rdata;
reg next_jbi_io_ssi_mosi;
//*******************************************************************************
//*******************************************************************************
assign sif_ucbif_busy = ~sck_cntexp | ((ssi_sm[2:0]!=`SSI_IDLE) |
assign req_info_en = ucbif_sif_vld & ~sif_ucbif_busy;
assign next_wdata[63:0] = ucbif_sif_wdata[63:0];
assign wdata_en = req_info_en;
assign next_wdata_sel[2:0] = ucbif_sif_addr[2:0];
assign wdata_sel_en = req_info_en;
assign next_size[1:0] = ucbif_sif_size[1:0];
assign size_en = req_info_en;
assign next_rw = ucbif_sif_rw;
assign rw_en = req_info_en;
//*******************************************************************************
//*******************************************************************************
ncu_ssisif_ctl_msff_ctl_macro__en_1__width_1 u_dffrle_rw
.scan_in(u_dffrle_rw_scanin),
.scan_out(u_dffrle_rw_scanout),
ncu_ssisif_ctl_msff_ctl_macro__en_1__width_2 u_dffrle_size
.scan_in(u_dffrle_size_scanin),
.scan_out(u_dffrle_size_scanout),
ncu_ssisif_ctl_msff_ctl_macro__en_1__width_64 u_dffrle_wdata
.scan_in(u_dffrle_wdata_scanin),
.scan_out(u_dffrle_wdata_scanout),
ncu_ssisif_ctl_msff_ctl_macro__en_1__width_3 u_dffrle_wdata_sel
.scan_in(u_dffrle_wdata_sel_scanin),
.scan_out(u_dffrle_wdata_sel_scanout),
.din (next_wdata_sel[2:0]),
ncu_ssisif_ctl_msff_ctl_macro__en_1__width_64 u_dffrle_sif_ucbif_rdata
.scan_in(u_dffrle_sif_ucbif_rdata_scanin),
.scan_out(u_dffrle_sif_ucbif_rdata_scanout),
.dout (sif_ucbif_rdata[63:0]),
.en (sif_ucbif_rdata_en),
.din (next_sif_ucbif_rdata[63:0]),
assign n_par = par_rst_l ? next_par : 1'b0 ;
ncu_ssisif_ctl_msff_ctl_macro__en_1__width_1 u_dffrle_par
.scan_in(u_dffrle_par_scanin),
.scan_out(u_dffrle_par_scanout),
assign n_timeout_cnt[23:0] = timeout_cnt_rst_l ? next_timeout_cnt[23:0] : 24'b0 ;
ncu_ssisif_ctl_msff_ctl_macro__en_1__width_24 u_dffrle_timeout_cnt
.scan_in(u_dffrle_timeout_cnt_scanin),
.scan_out(u_dffrle_timeout_cnt_scanout),
.dout (timeout_cnt[23:0]),
.en ((sck_posedge&timeout_cnt_en)|~timeout_cnt_rst_l),
.din (n_timeout_cnt[23:0]),
assign mosi_shreg0_s_in = 1'b0;
assign mosi_shreg1_s_in = mosi_shreg0_p_out[7];
assign mosi_shreg2_s_in = mosi_shreg1_p_out[7];
assign mosi_shreg3_s_in = mosi_shreg2_p_out[7];
assign mosi_shreg4_s_in = mosi_shreg3_p_out[7];
assign mosi_shreg5_s_in = mosi_shreg4_p_out[7];
assign mosi_shreg6_s_in = mosi_shreg5_p_out[7];
assign mosi_shreg7_s_in = mosi_shreg6_p_out[7];
assign mosi_shreg0_p_in[7:0] = mosi_shreg_din[ 7: 0];
assign mosi_shreg1_p_in[7:0] = mosi_shreg_din[15: 8];
assign mosi_shreg2_p_in[7:0] = mosi_shreg_din[23:16];
assign mosi_shreg3_p_in[7:0] = mosi_shreg_din[31:24];
assign mosi_shreg4_p_in[7:0] = mosi_shreg_din[39:32];
assign mosi_shreg5_p_in[7:0] = mosi_shreg_din[47:40];
assign mosi_shreg6_p_in[7:0] = mosi_shreg_din[55:48];
assign mosi_shreg7_p_in[7:0] = mosi_shreg_din[63:56];
//DW03_shftreg #(8) u_mosi_shreg0 (/*AUTOINST*/
ncu_ssisrg8_ctl u_mosi_shreg0 (/*AUTOINST*/
.p_out (mosi_shreg0_p_out[7:0]), // Templated
.scan_in(u_mosi_shreg0_scanin),
.scan_out(u_mosi_shreg0_scanout),
.tcu_pce_ov (tcu_pce_ov),
.tcu_clk_stop (tcu_clk_stop),
.tcu_scan_en (tcu_scan_en),
.s_in (mosi_shreg0_s_in), // Templated
.p_in (mosi_shreg0_p_in[7:0]), // Templated
.shift_n(mosi_shift_n), // Templated
.load_n(mosi_load_n)); // Templated
ncu_ssisrg8_ctl u_mosi_shreg1 (/*AUTOINST*/
.p_out (mosi_shreg1_p_out[7:0]), // Templated
.scan_in(u_mosi_shreg1_scanin),
.scan_out(u_mosi_shreg1_scanout),
.tcu_pce_ov (tcu_pce_ov),
.tcu_clk_stop (tcu_clk_stop),
.tcu_scan_en (tcu_scan_en),
.s_in (mosi_shreg1_s_in), // Templated
.p_in (mosi_shreg1_p_in[7:0]), // Templated
.shift_n(mosi_shift_n), // Templated
.load_n(mosi_load_n)); // Templated
ncu_ssisrg8_ctl u_mosi_shreg2 (/*AUTOINST*/
.p_out (mosi_shreg2_p_out[7:0]), // Templated
.scan_in(u_mosi_shreg2_scanin),
.scan_out(u_mosi_shreg2_scanout),
.tcu_pce_ov (tcu_pce_ov),
.tcu_clk_stop (tcu_clk_stop),
.tcu_scan_en (tcu_scan_en),
.s_in (mosi_shreg2_s_in), // Templated
.p_in (mosi_shreg2_p_in[7:0]), // Templated
.shift_n(mosi_shift_n), // Templated
.load_n(mosi_load_n)); // Templated
ncu_ssisrg8_ctl u_mosi_shreg3 (/*AUTOINST*/
.p_out (mosi_shreg3_p_out[7:0]), // Templated
.scan_in(u_mosi_shreg3_scanin),
.scan_out(u_mosi_shreg3_scanout),
.tcu_pce_ov (tcu_pce_ov),
.tcu_clk_stop (tcu_clk_stop),
.tcu_scan_en (tcu_scan_en),
.s_in (mosi_shreg3_s_in), // Templated
.p_in (mosi_shreg3_p_in[7:0]), // Templated
.shift_n(mosi_shift_n), // Templated
.load_n(mosi_load_n)); // Templated
ncu_ssisrg8_ctl u_mosi_shreg4 (/*AUTOINST*/
.p_out (mosi_shreg4_p_out[7:0]), // Templated
.scan_in(u_mosi_shreg4_scanin),
.scan_out(u_mosi_shreg4_scanout),
.tcu_pce_ov (tcu_pce_ov),
.tcu_clk_stop (tcu_clk_stop),
.tcu_scan_en (tcu_scan_en),
.s_in (mosi_shreg4_s_in), // Templated
.p_in (mosi_shreg4_p_in[7:0]), // Templated
.shift_n(mosi_shift_n), // Templated
.load_n(mosi_load_n)); // Templated
ncu_ssisrg8_ctl u_mosi_shreg5 (/*AUTOINST*/
.p_out (mosi_shreg5_p_out[7:0]), // Templated
.scan_in(u_mosi_shreg5_scanin),
.scan_out(u_mosi_shreg5_scanout),
.tcu_pce_ov (tcu_pce_ov),
.tcu_clk_stop (tcu_clk_stop),
.tcu_scan_en (tcu_scan_en),
.s_in (mosi_shreg5_s_in), // Templated
.p_in (mosi_shreg5_p_in[7:0]), // Templated
.shift_n(mosi_shift_n), // Templated
.load_n(mosi_load_n)); // Templated
ncu_ssisrg8_ctl u_mosi_shreg6 (/*AUTOINST*/
.p_out (mosi_shreg6_p_out[7:0]), // Templated
.scan_in(u_mosi_shreg6_scanin),
.scan_out(u_mosi_shreg6_scanout),
.tcu_pce_ov (tcu_pce_ov),
.tcu_clk_stop (tcu_clk_stop),
.tcu_scan_en (tcu_scan_en),
.s_in (mosi_shreg6_s_in), // Templated
.p_in (mosi_shreg6_p_in[7:0]), // Templated
.shift_n(mosi_shift_n), // Templated
.load_n(mosi_load_n)); // Templated
ncu_ssisrg8_ctl u_mosi_shreg7 (/*AUTOINST*/
.p_out (mosi_shreg7_p_out[7:0]), // Templated
.scan_in(u_mosi_shreg7_scanin),
.scan_out(u_mosi_shreg7_scanout),
.tcu_pce_ov (tcu_pce_ov),
.tcu_clk_stop (tcu_clk_stop),
.tcu_scan_en (tcu_scan_en),
.s_in (mosi_shreg7_s_in), // Templated
.p_in (mosi_shreg7_p_in[7:0]), // Templated
.shift_n(mosi_shift_n), // Templated
.load_n(mosi_load_n)); // Templated
//*******************************************************************************
// - ctu_jbi_ssiclk is jbus clk divided by 4
//*******************************************************************************
////assign sck_posedge_d1 = ~ctu_jbi_ssiclk_d1 & ctu_jbi_ssiclk_ff;
////assign sck_negedge_d1 = ctu_jbi_ssiclk_d1 & ~ctu_jbi_ssiclk_ff;
//assign sck_negedge = sck_posedge_d2;
//sck cycle count increments at rising edge of sck
assign sck_cyc_cnt_rst_l = ssi_sm[2:0] == next_ssi_sm[2:0]; //clear count when jumping into new state
assign next_sck_cyc_cnt[6:0] = ( ( (ssi_sm[2:0] == `SSI_RDATA | ssi_sm[2:0] == `SSI_ACK_PAR) & sck_posedge_d4)
| ( ~(ssi_sm[2:0] == `SSI_RDATA | ssi_sm[2:0] == `SSI_ACK_PAR) & sck_posedge) ) ?
sck_cyc_cnt[6:0] + 7'd1 : sck_cyc_cnt[6:0] ;
//***********************************************************************************
// signal at pin (board level, note, mosi and miso do not active at same time)
//***********************************************************************************
// | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |10 |11 |12 |13 |14 |15 |16 |
// _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
//iol2clk _| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_|
// _______________ _______________ _____
//sck(pin) _|a |_______________|b |_______________|
// _____ _______________________________ _______________
//mosi(pin) _____X_________data_out______________X_______________
// __ _________________ _________
//miso(pin) __XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX___data_a________XXXXXXXXXXXXXXX__data_b_
// MIO sample miso @ rising of sck
//***********************************************************************************
// AT NCU port level (note mosi and miso do not active at same time)
//***********************************************************************************
// | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |10 |11 |12 |13 |14 |15 |16 |17 |
// _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
//iol2clk | |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_|
// _______________ _______________ _
//sck(pin) ___|a |_______________|b |_______________|
// _______________ _______________ _____
//io_ssi_sck _|a |_______________|b |_______________|
// __ _______________________________ _______________________________ __
//ssi_mosi(ncu) __X_____data______________________X_________data__________________X__
// _______________________________ ______
//ssi_miso(ncu) XXXXXXXXXXXXXXXXXXXXXXXXXXXX__data_a_______________________X______
// ^ncu sample ssi_miso(from mio) ^
// _______________________________ __
//ssi_miso_ff(internal) XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX__data_a_______________________X__
// | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |10 |11 |12 |13 |14 |15 |16 |17 |18 |
// ^Internally processing at P4
// Load miso shift register
assign ssi_req[27:0] = ucbif_sif_addr[27:0];
assign ssi_req[29:28] = ucbif_sif_size[1:0];
assign ssi_req[30] = ucbif_sif_rw;
assign mosi_shreg_din[63:0] = (ssi_sm[2:0] == `SSI_IDLE) ? { {33{1'b1}}, ssi_req[30:0] } : wdata[63:0] ;
assign mosi_load_n = ~(ssi_sm[2:0] == `SSI_IDLE |
(ssi_sm[2:0] == `SSI_REQ & sck_cyc_cnt[5] & ~rw));
// Advance miso shift register
assign mosi_shift_n = ~(sck_posedge_d1
& (ssi_sm[2:0] == `SSI_REQ | ssi_sm[2:0] == `SSI_WDATA) & mosi_load_n);
// Determine where wdata is to be taken
always @ ( /*AUTOSENSE*/mosi_shreg0_p_out or mosi_shreg1_p_out
or mosi_shreg2_p_out or mosi_shreg3_p_out
or mosi_shreg4_p_out or mosi_shreg5_p_out
or mosi_shreg6_p_out or mosi_shreg7_p_out or wdata_sel) begin
3'd0: mosi_wdata_bit = mosi_shreg7_p_out[7];
3'd1: mosi_wdata_bit = mosi_shreg6_p_out[7];
3'd2: mosi_wdata_bit = mosi_shreg5_p_out[7];
3'd3: mosi_wdata_bit = mosi_shreg4_p_out[7];
3'd4: mosi_wdata_bit = mosi_shreg3_p_out[7];
3'd5: mosi_wdata_bit = mosi_shreg2_p_out[7];
3'd6: mosi_wdata_bit = mosi_shreg1_p_out[7];
3'd7: mosi_wdata_bit = mosi_shreg0_p_out[7];
assign par_en = ( sck_posedge_d2 // gen par
& (ssi_sm[2:0] == `SSI_REQ | ssi_sm[2:0] == `SSI_WDATA))
| ( sck_posedge_d4 // check par
& (ssi_sm[2:0] == `SSI_ACK | ssi_sm[2:0] == `SSI_RDATA | ssi_sm[2:0] == `SSI_ACK_PAR));
assign par_rst_l = ~( ssi_sm[2:0] == `SSI_IDLE
| ssi_sm[2:0] == `SSI_ACK & ~(sck_posedge_d4 & io_jbi_ssi_miso_ff));
always @ ( /*AUTOSENSE*/io_jbi_ssi_miso_ff or next_jbi_io_ssi_mosi
`SSI_WDATA : next_par = par ^ next_jbi_io_ssi_mosi;
`SSI_ACK_PAR : next_par = par ^ io_jbi_ssi_miso_ff;
default : next_par = 1'b0;
always @ ( /*AUTOSENSE*/mosi_shreg3_p_out or mosi_wdata_bit or par
`SSI_REQ: next_jbi_io_ssi_mosi = mosi_shreg3_p_out[7]; // include start bit
`SSI_WDATA: next_jbi_io_ssi_mosi = mosi_wdata_bit;
`SSI_REQ_PAR: next_jbi_io_ssi_mosi = par;
default: next_jbi_io_ssi_mosi = 1'b0;
//*******************************************************************************
//*******************************************************************************
//assign rdata_shift_n = ~(ssi_sm[2:0] == `SSI_RDATA & sck_posedge_d2);
assign rdata_shift_n = ~(ssi_sm[2:0] == `SSI_RDATA & sck_posedge_d4);
assign srg64p_out_next[63:0] = rdata_shift_n ? srg64p_out[63:0] :
{srg64p_out[62:0],io_jbi_ssi_miso_ff} ;
assign rdata_shreg[63:0]=srg64p_out[63:0];
ncu_ssisif_ctl_msff_ctl_macro__width_64 srg64p_out_ff
.scan_in(srg64p_out_ff_scanin),
.scan_out(srg64p_out_ff_scanout),
.dout (srg64p_out[63:0]),
.din (srg64p_out_next[63:0]),
// Signal read return data
assign sif_ucbif_rdata_en = ssi_sm[2:0] == `SSI_ACK_PAR ;
always @ ( /*AUTOSENSE*/rdata_shreg or size) begin
2'b00: next_sif_ucbif_rdata[63:0] = {8{rdata_shreg[7:0]}};
2'b01: next_sif_ucbif_rdata[63:0] = {4{rdata_shreg[15:0]}};
2'b10: next_sif_ucbif_rdata[63:0] = {2{rdata_shreg[31:0]}};
2'b11: next_sif_ucbif_rdata[63:0] = rdata_shreg;
//default: next_sif_ucbif_rdata[63:0] = 64'bx;
assign next_sif_ucbif_rdata_vld = ack_par_rdy & rw
& ~ucbif_sif_rdata_accpt);
//*******************************************************************************
//*******************************************************************************
assign timeout_cnt_en = ssi_sm[2:0] == `SSI_ACK ;
assign timeout_cnt_rst_l = ssi_sm[2:0] == `SSI_ACK ;
assign next_timeout_cnt[23:0] = timeout_cnt[23:0] + 24'd1;
assign sif_ucbif_timeout_rst_l = ~ucbif_sif_timeout_accpt;
assign next_sif_ucbif_timeout = sif_ucbif_timeout | (timeout_cnt[23:0] ==
ucbif_sif_timeval[23:0]);
assign sif_ucbif_timeout_rw = rw;
assign ack_par_rdy = (ssi_sm[2:0] == `SSI_ACK_PAR) & (next_ssi_sm[2:0] != `SSI_ACK_PAR);
assign next_sif_ucbif_par_err = ack_par_rdy & par
& ~ucbif_sif_rdata_accpt);
//*******************************************************************************
// Async Reset DFFRL Instantiations
//*******************************************************************************
assign cntr_n[2:0] = cntr[2:0] + 3'd1 ;
//assign iol2clk_by8 = cntr[2];
//assign iol2clk_by4 = cntr[1];
always @(ncu_scksel[1:0] or cntr[2:0])
2'b00: begin iol2clk_div = cntr[2];
sck_posedge_next = cntr[2:0]==3'b011;
//sck_negedge_next = cntr[2:0]==3'b111 ;
2'b01: begin iol2clk_div = cntr[1];
sck_posedge_next = cntr[1:0]==2'b01;
//sck_negedge_next = cntr[1:0]==2'b11 ;
default: begin iol2clk_div = cntr[2];
sck_posedge_next = cntr[2:0]==3'b011;
//sck_negedge_next = cntr[2:0]==3'b111 ;
ncu_ssisif_ctl_msff_ctl_macro__width_3 cntr_ff
.scan_in(cntr_ff_scanin),
.scan_out(cntr_ff_scanout),
ncu_ssisif_ctl_msff_ctl_macro__width_1 u_dffrl_async_ctu_jbi_ssiclk_ff
.scan_in(u_dffrl_async_ctu_jbi_ssiclk_ff_scanin),
.scan_out(u_dffrl_async_ctu_jbi_ssiclk_ff_scanout),
.dout (ctu_jbi_ssiclk_ff),
assign next_jbi_io_ssi_sck = ctu_jbi_ssiclk_ff;
ncu_ssisif_ctl_msff_ctl_macro__width_1 u_dffrl_async_jbi_io_ssi_sck
.scan_in(u_dffrl_async_jbi_io_ssi_sck_scanin),
.scan_out(u_dffrl_async_jbi_io_ssi_sck_scanout),
.din (next_jbi_io_ssi_sck),
//*******************************************************************************
//*******************************************************************************
ncu_ssisif_ctl_msff_ctl_macro__width_1 u_dff_io_jbi_ssi_miso_ff
.scan_in(u_dff_io_jbi_ssi_miso_ff_scanin),
.scan_out(u_dff_io_jbi_ssi_miso_ff_scanout),
.dout (io_jbi_ssi_miso_ff),
ncu_ssisif_ctl_msff_ctl_macro__width_1 sck_posedge_ff
.scan_in(sck_posedge_ff_scanin),
.scan_out(sck_posedge_ff_scanout),
ncu_ssisif_ctl_msff_ctl_macro__width_1 sck_posedge_d1_ff
.scan_in(sck_posedge_d1_ff_scanin),
.scan_out(sck_posedge_d1_ff_scanout),
ncu_ssisif_ctl_msff_ctl_macro__width_1 sck_posedge_d2_ff
.scan_in(sck_posedge_d2_ff_scanin),
.scan_out(sck_posedge_d2_ff_scanout),
ncu_ssisif_ctl_msff_ctl_macro__width_1 sck_posedge_d3_ff
.scan_in(sck_posedge_d3_ff_scanin),
.scan_out(sck_posedge_d3_ff_scanout),
ncu_ssisif_ctl_msff_ctl_macro__width_1 sck_posedge_d4_ff
.scan_in(sck_posedge_d4_ff_scanin),
.scan_out(sck_posedge_d4_ff_scanout),
//msff_ctl_macro sck_negedge_ff (width=1)
//.scan_in(sck_negedge_ff_scanin),
//.scan_out(sck_negedge_ff_scanout),
//.din (sck_negedge_next)
//msff_ctl_macro sck_negedge_d1_ff (width=1)
//.scan_in(sck_negedge_d1_ff_scanin),
//.scan_out(sck_negedge_d1_ff_scanout),
//.dout (sck_negedge_d1),
////dff #(1) u_dff_ctu_jbi_ssiclk_d1
////(.din(ctu_jbi_ssiclk_ff),
////.q(ctu_jbi_ssiclk_d1)
//dff_ns #(1) u_dff_sck_posedge_d2
// (.din(sck_posedge_d1),
//*******************************************************************************
//*******************************************************************************
assign n_ssi_sm[2:0] = ssi_sm_rst_l ? next_ssi_sm[2:0] : 3'b0 ;
ncu_ssisif_ctl_msff_ctl_macro__width_3 u_dffrl_ssi_sm
.scan_in(u_dffrl_ssi_sm_scanin),
.scan_out(u_dffrl_ssi_sm_scanout),
assign n_sck_cyc_cnt[6:0] = sck_cyc_cnt_rst_l ? next_sck_cyc_cnt[6:0] : 7'b0 ;
ncu_ssisif_ctl_msff_ctl_macro__width_7 u_dffrl_sck_cyc_cnt
.scan_in(u_dffrl_sck_cyc_cnt_scanin),
.scan_out(u_dffrl_sck_cyc_cnt_scanout),
.dout (sck_cyc_cnt[6:0]),
.din (n_sck_cyc_cnt[6:0]),
ncu_ssisif_ctl_msff_ctl_macro__width_1 u_dffrl_sif_ucbif_rdata_vld
.scan_in(u_dffrl_sif_ucbif_rdata_vld_scanin),
.scan_out(u_dffrl_sif_ucbif_rdata_vld_scanout),
.dout (sif_ucbif_rdata_vld),
.din (next_sif_ucbif_rdata_vld),
assign n_sif_ucbif_timeout = sif_ucbif_timeout_rst_l ? next_sif_ucbif_timeout : 1'b0 ;
ncu_ssisif_ctl_msff_ctl_macro__width_1 u_dffrl_sif_ucbif_timeout
.scan_in(u_dffrl_sif_ucbif_timeout_scanin),
.scan_out(u_dffrl_sif_ucbif_timeout_scanout),
.dout (sif_ucbif_timeout),
.din (n_sif_ucbif_timeout),
ncu_ssisif_ctl_msff_ctl_macro__width_1 u_dffrl_sif_ucbif_par_err
.scan_in(u_dffrl_sif_ucbif_par_err_scanin),
.scan_out(u_dffrl_sif_ucbif_par_err_scanout),
.dout (sif_ucbif_par_err),
.din (next_sif_ucbif_par_err),
ncu_ssisif_ctl_msff_ctl_macro__width_1 u_dffrl_jbi_io_ssi_mosi
.scan_in(u_dffrl_jbi_io_ssi_mosi_scanin),
.scan_out(u_dffrl_jbi_io_ssi_mosi_scanout),
.din (next_jbi_io_ssi_mosi),
//*******************************************************************************
//sck_cnt[17:0] (lock counter) starting all 0's and inc to all 1's, then
//allow busy signal to be drop and can accept request from uif block
//counting is bypassed if tcu_sck_bypass is 1 (for testing or debugging use)
//*******************************************************************************
ncu_ssisif_ctl_msff_ctl_macro__width_18 sck_cnt_ff
.scan_in(sck_cnt_ff_scanin),
.scan_out(sck_cnt_ff_scanout),
.din (next_sck_cnt[17:0]),
ncu_ssisif_ctl_msff_ctl_macro__width_1 sck_bypass_ff
.scan_in(sck_bypass_ff_scanin),
.scan_out(sck_bypass_ff_scanout),
assign sck_cntexp = (sck_cnt[17:0] == 18'h3FFFF);
assign next_sck_cnt[17:0] = sck_bypass ? 18'h3FFFF :
(~sck_cntexp & sck_posedge) ? (sck_cnt[17:0] + 18'b1) :
//*******************************************************************************
//*******************************************************************************
assign ssi_sm_rst_l = ~sif_ucbif_timeout; // stop processing after timeout
//jimmy: sm runs at d1 and change at d2 for IDLE->REQ-WDATA-REQPAR
always @(/*AUTOSENSE*/io_jbi_ssi_miso_ff or rw or sck_cyc_cnt
or sck_posedge_d4 or sck_posedge_d1 or sif_ucbif_timeout or size
or ssi_sm or ucbif_sif_vld) begin
if (ucbif_sif_vld & sck_posedge_d1) // must line up with mosi
next_ssi_sm[2:0] = `SSI_REQ ;
next_ssi_sm[2:0] = `SSI_IDLE ;
if (sck_cyc_cnt[5]) begin // == 32 which includes start bit
next_ssi_sm[2:0] = `SSI_REQ_PAR ;
next_ssi_sm[2:0] = `SSI_WDATA ;
next_ssi_sm[2:0] = `SSI_REQ ;
if ( (size[1:0] == 2'b00 & sck_cyc_cnt[3])
| (size[1:0] == 2'b01 & sck_cyc_cnt[4])
| (size[1:0] == 2'b10 & sck_cyc_cnt[5])
| (size[1:0] == 2'b11 & sck_cyc_cnt[6]))
next_ssi_sm[2:0] = `SSI_REQ_PAR ;
next_ssi_sm[2:0] = `SSI_WDATA ;
next_ssi_sm[2:0] = `SSI_ACK ;
next_ssi_sm[2:0] = `SSI_REQ_PAR ;
//sample at posedge of sck period + 10 cycle delay from io_ssi_sck gen to recv
if (sck_posedge_d4 & io_jbi_ssi_miso_ff) begin
next_ssi_sm[2:0] = `SSI_RDATA ;
next_ssi_sm[2:0] = `SSI_ACK_PAR ;
else if (sif_ucbif_timeout)
next_ssi_sm[2:0] = `SSI_IDLE ;
next_ssi_sm[2:0] = `SSI_ACK ;
//sample at posedge of sck period + 10 cycle delay from io_ssi_sck gen to recv
if ( (size[1:0] == 2'b00 & sck_cyc_cnt[3])
| (size[1:0] == 2'b01 & sck_cyc_cnt[4])
| (size[1:0] == 2'b10 & sck_cyc_cnt[5])
| (size[1:0] == 2'b11 & sck_cyc_cnt[6]))
next_ssi_sm[2:0] = `SSI_ACK_PAR ;
next_ssi_sm[2:0] = `SSI_RDATA ;
next_ssi_sm[2:0] = `SSI_IDLE ;
next_ssi_sm[2:0] = `SSI_ACK_PAR ;
next_ssi_sm[2:0] = `SSI_IDLE ;
/* spare gate, 4531 cells / 450 = 11 */
ncu_ssisif_ctl_spare_ctl_macro__num_11 spares (
.scan_out(spares_scanout),
/**** adding clock header ****/
ncu_ssisif_ctl_l1clkhdr_ctl_macro clkgen (
/*** building tcu port ***/
assign pce_ov = tcu_pce_ov;
assign stop = tcu_clk_stop;
assign u_dffrle_rw_scanin = scan_in ;
assign u_dffrle_size_scanin = u_dffrle_rw_scanout ;
assign u_dffrle_wdata_scanin = u_dffrle_size_scanout ;
assign u_dffrle_wdata_sel_scanin = u_dffrle_wdata_scanout ;
assign u_dffrle_sif_ucbif_rdata_scanin = u_dffrle_wdata_sel_scanout;
assign u_dffrle_par_scanin = u_dffrle_sif_ucbif_rdata_scanout;
assign u_dffrle_timeout_cnt_scanin = u_dffrle_par_scanout ;
assign u_mosi_shreg0_scanin = u_dffrle_timeout_cnt_scanout;
assign u_mosi_shreg1_scanin = u_mosi_shreg0_scanout ;
assign u_mosi_shreg2_scanin = u_mosi_shreg1_scanout ;
assign u_mosi_shreg3_scanin = u_mosi_shreg2_scanout ;
assign u_mosi_shreg4_scanin = u_mosi_shreg3_scanout ;
assign u_mosi_shreg5_scanin = u_mosi_shreg4_scanout ;
assign u_mosi_shreg6_scanin = u_mosi_shreg5_scanout ;
assign u_mosi_shreg7_scanin = u_mosi_shreg6_scanout ;
assign srg64p_out_ff_scanin = u_mosi_shreg7_scanout ;
assign cntr_ff_scanin = srg64p_out_ff_scanout ;
assign u_dffrl_async_ctu_jbi_ssiclk_ff_scanin = cntr_ff_scanout ;
assign u_dffrl_async_jbi_io_ssi_sck_scanin = u_dffrl_async_ctu_jbi_ssiclk_ff_scanout;
assign u_dff_io_jbi_ssi_miso_ff_scanin = u_dffrl_async_jbi_io_ssi_sck_scanout;
assign sck_posedge_ff_scanin = u_dff_io_jbi_ssi_miso_ff_scanout;
assign sck_posedge_d1_ff_scanin = sck_posedge_ff_scanout ;
assign sck_posedge_d2_ff_scanin = sck_posedge_d1_ff_scanout;
assign sck_posedge_d3_ff_scanin = sck_posedge_d2_ff_scanout;
assign sck_posedge_d4_ff_scanin = sck_posedge_d3_ff_scanout;
//assign sck_negedge_ff_scanin = sck_posedge_d2_ff_scanout;
//assign sck_negedge_d1_ff_scanin = sck_negedge_ff_scanout ;
//assign u_dffrl_ssi_sm_scanin = sck_negedge_d1_ff_scanout;
assign u_dffrl_ssi_sm_scanin = sck_posedge_d4_ff_scanout;
assign u_dffrl_sck_cyc_cnt_scanin = u_dffrl_ssi_sm_scanout ;
assign u_dffrl_sif_ucbif_rdata_vld_scanin = u_dffrl_sck_cyc_cnt_scanout;
assign u_dffrl_sif_ucbif_timeout_scanin = u_dffrl_sif_ucbif_rdata_vld_scanout;
assign u_dffrl_sif_ucbif_par_err_scanin = u_dffrl_sif_ucbif_timeout_scanout;
assign u_dffrl_jbi_io_ssi_mosi_scanin = u_dffrl_sif_ucbif_par_err_scanout;
assign sck_cnt_ff_scanin = u_dffrl_jbi_io_ssi_mosi_scanout;
assign sck_bypass_ff_scanin = sck_cnt_ff_scanout;
assign spares_scanin = sck_bypass_ff_scanout ;
assign scan_out = spares_scanout ;
// verilog-library-directories:("." "/import/datools/vendor/synopsys/v2003.03-beta1/dw/dw03/src_ver/")
// verilog-auto-sense-defines-constant:t
// any PARAMS parms go into naming of macro
module ncu_ssisif_ctl_msff_ctl_macro__en_1__width_1 (
assign fdin[0:0] = (din[0:0] & {1{en}}) | (dout[0:0] & ~{1{en}});
// any PARAMS parms go into naming of macro
module ncu_ssisif_ctl_msff_ctl_macro__en_1__width_2 (
assign fdin[1:0] = (din[1:0] & {2{en}}) | (dout[1:0] & ~{2{en}});
// any PARAMS parms go into naming of macro
module ncu_ssisif_ctl_msff_ctl_macro__en_1__width_64 (
assign fdin[63:0] = (din[63:0] & {64{en}}) | (dout[63:0] & ~{64{en}});
.so({so[62:0],scan_out}),
// any PARAMS parms go into naming of macro
module ncu_ssisif_ctl_msff_ctl_macro__en_1__width_3 (
assign fdin[2:0] = (din[2:0] & {3{en}}) | (dout[2:0] & ~{3{en}});
// any PARAMS parms go into naming of macro
module ncu_ssisif_ctl_msff_ctl_macro__en_1__width_24 (
assign fdin[23:0] = (din[23:0] & {24{en}}) | (dout[23:0] & ~{24{en}});
.so({so[22:0],scan_out}),
// any PARAMS parms go into naming of macro
module ncu_ssisif_ctl_msff_ctl_macro__width_8 (
assign fdin[7:0] = din[7:0];
// any PARAMS parms go into naming of macro
module ncu_ssisif_ctl_l1clkhdr_ctl_macro (
// any PARAMS parms go into naming of macro
module ncu_ssisif_ctl_msff_ctl_macro__width_64 (
assign fdin[63:0] = din[63:0];
.so({so[62:0],scan_out}),
// any PARAMS parms go into naming of macro
module ncu_ssisif_ctl_msff_ctl_macro__width_3 (
assign fdin[2:0] = din[2:0];
// any PARAMS parms go into naming of macro
module ncu_ssisif_ctl_msff_ctl_macro__width_1 (
assign fdin[0:0] = din[0:0];
// any PARAMS parms go into naming of macro
module ncu_ssisif_ctl_msff_ctl_macro__width_7 (
assign fdin[6:0] = din[6:0];
// any PARAMS parms go into naming of macro
module ncu_ssisif_ctl_msff_ctl_macro__width_18 (
assign fdin[17:0] = din[17:0];
.so({so[16:0],scan_out}),
// 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 ncu_ssisif_ctl_spare_ctl_macro__num_11 (
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;
wire spare4_buf_32x_unused;
wire spare4_nand3_8x_unused;
wire spare4_inv_8x_unused;
wire spare4_aoi22_4x_unused;
wire spare4_buf_8x_unused;
wire spare4_oai22_4x_unused;
wire spare4_inv_16x_unused;
wire spare4_nand2_16x_unused;
wire spare4_nor3_4x_unused;
wire spare4_nand2_8x_unused;
wire spare4_buf_16x_unused;
wire spare4_nor2_16x_unused;
wire spare4_inv_32x_unused;
wire spare5_buf_32x_unused;
wire spare5_nand3_8x_unused;
wire spare5_inv_8x_unused;
wire spare5_aoi22_4x_unused;
wire spare5_buf_8x_unused;
wire spare5_oai22_4x_unused;
wire spare5_inv_16x_unused;
wire spare5_nand2_16x_unused;
wire spare5_nor3_4x_unused;
wire spare5_nand2_8x_unused;
wire spare5_buf_16x_unused;
wire spare5_nor2_16x_unused;
wire spare5_inv_32x_unused;
wire spare6_buf_32x_unused;
wire spare6_nand3_8x_unused;
wire spare6_inv_8x_unused;
wire spare6_aoi22_4x_unused;
wire spare6_buf_8x_unused;
wire spare6_oai22_4x_unused;
wire spare6_inv_16x_unused;
wire spare6_nand2_16x_unused;
wire spare6_nor3_4x_unused;
wire spare6_nand2_8x_unused;
wire spare6_buf_16x_unused;
wire spare6_nor2_16x_unused;
wire spare6_inv_32x_unused;
wire spare7_buf_32x_unused;
wire spare7_nand3_8x_unused;
wire spare7_inv_8x_unused;
wire spare7_aoi22_4x_unused;
wire spare7_buf_8x_unused;
wire spare7_oai22_4x_unused;
wire spare7_inv_16x_unused;
wire spare7_nand2_16x_unused;
wire spare7_nor3_4x_unused;
wire spare7_nand2_8x_unused;
wire spare7_buf_16x_unused;
wire spare7_nor2_16x_unused;
wire spare7_inv_32x_unused;
wire spare8_buf_32x_unused;
wire spare8_nand3_8x_unused;
wire spare8_inv_8x_unused;
wire spare8_aoi22_4x_unused;
wire spare8_buf_8x_unused;
wire spare8_oai22_4x_unused;
wire spare8_inv_16x_unused;
wire spare8_nand2_16x_unused;
wire spare8_nor3_4x_unused;
wire spare8_nand2_8x_unused;
wire spare8_buf_16x_unused;
wire spare8_nor2_16x_unused;
wire spare8_inv_32x_unused;
wire spare9_buf_32x_unused;
wire spare9_nand3_8x_unused;
wire spare9_inv_8x_unused;
wire spare9_aoi22_4x_unused;
wire spare9_buf_8x_unused;
wire spare9_oai22_4x_unused;
wire spare9_inv_16x_unused;
wire spare9_nand2_16x_unused;
wire spare9_nor3_4x_unused;
wire spare9_nand2_8x_unused;
wire spare9_buf_16x_unused;
wire spare9_nor2_16x_unused;
wire spare9_inv_32x_unused;
wire spare10_flop_unused;
wire spare10_buf_32x_unused;
wire spare10_nand3_8x_unused;
wire spare10_inv_8x_unused;
wire spare10_aoi22_4x_unused;
wire spare10_buf_8x_unused;
wire spare10_oai22_4x_unused;
wire spare10_inv_16x_unused;
wire spare10_nand2_16x_unused;
wire spare10_nor3_4x_unused;
wire spare10_nand2_8x_unused;
wire spare10_buf_16x_unused;
wire spare10_nor2_16x_unused;
wire spare10_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));
cl_sc1_msff_8x spare4_flop (.l1clk(l1clk),
cl_u1_buf_32x spare4_buf_32x (.in(1'b1),
.out(spare4_buf_32x_unused));
cl_u1_nand3_8x spare4_nand3_8x (.in0(1'b1),
.out(spare4_nand3_8x_unused));
cl_u1_inv_8x spare4_inv_8x (.in(1'b1),
.out(spare4_inv_8x_unused));
cl_u1_aoi22_4x spare4_aoi22_4x (.in00(1'b1),
.out(spare4_aoi22_4x_unused));
cl_u1_buf_8x spare4_buf_8x (.in(1'b1),
.out(spare4_buf_8x_unused));
cl_u1_oai22_4x spare4_oai22_4x (.in00(1'b1),
.out(spare4_oai22_4x_unused));
cl_u1_inv_16x spare4_inv_16x (.in(1'b1),
.out(spare4_inv_16x_unused));
cl_u1_nand2_16x spare4_nand2_16x (.in0(1'b1),
.out(spare4_nand2_16x_unused));
cl_u1_nor3_4x spare4_nor3_4x (.in0(1'b0),
.out(spare4_nor3_4x_unused));
cl_u1_nand2_8x spare4_nand2_8x (.in0(1'b1),
.out(spare4_nand2_8x_unused));
cl_u1_buf_16x spare4_buf_16x (.in(1'b1),
.out(spare4_buf_16x_unused));
cl_u1_nor2_16x spare4_nor2_16x (.in0(1'b0),
.out(spare4_nor2_16x_unused));
cl_u1_inv_32x spare4_inv_32x (.in(1'b1),
.out(spare4_inv_32x_unused));
cl_sc1_msff_8x spare5_flop (.l1clk(l1clk),
cl_u1_buf_32x spare5_buf_32x (.in(1'b1),
.out(spare5_buf_32x_unused));
cl_u1_nand3_8x spare5_nand3_8x (.in0(1'b1),
.out(spare5_nand3_8x_unused));
cl_u1_inv_8x spare5_inv_8x (.in(1'b1),
.out(spare5_inv_8x_unused));
cl_u1_aoi22_4x spare5_aoi22_4x (.in00(1'b1),
.out(spare5_aoi22_4x_unused));
cl_u1_buf_8x spare5_buf_8x (.in(1'b1),
.out(spare5_buf_8x_unused));
cl_u1_oai22_4x spare5_oai22_4x (.in00(1'b1),
.out(spare5_oai22_4x_unused));
cl_u1_inv_16x spare5_inv_16x (.in(1'b1),
.out(spare5_inv_16x_unused));
cl_u1_nand2_16x spare5_nand2_16x (.in0(1'b1),
.out(spare5_nand2_16x_unused));
cl_u1_nor3_4x spare5_nor3_4x (.in0(1'b0),
.out(spare5_nor3_4x_unused));
cl_u1_nand2_8x spare5_nand2_8x (.in0(1'b1),
.out(spare5_nand2_8x_unused));
cl_u1_buf_16x spare5_buf_16x (.in(1'b1),
.out(spare5_buf_16x_unused));
cl_u1_nor2_16x spare5_nor2_16x (.in0(1'b0),
.out(spare5_nor2_16x_unused));
cl_u1_inv_32x spare5_inv_32x (.in(1'b1),
.out(spare5_inv_32x_unused));
cl_sc1_msff_8x spare6_flop (.l1clk(l1clk),
cl_u1_buf_32x spare6_buf_32x (.in(1'b1),
.out(spare6_buf_32x_unused));
cl_u1_nand3_8x spare6_nand3_8x (.in0(1'b1),
.out(spare6_nand3_8x_unused));
cl_u1_inv_8x spare6_inv_8x (.in(1'b1),
.out(spare6_inv_8x_unused));
cl_u1_aoi22_4x spare6_aoi22_4x (.in00(1'b1),
.out(spare6_aoi22_4x_unused));
cl_u1_buf_8x spare6_buf_8x (.in(1'b1),
.out(spare6_buf_8x_unused));
cl_u1_oai22_4x spare6_oai22_4x (.in00(1'b1),
.out(spare6_oai22_4x_unused));
cl_u1_inv_16x spare6_inv_16x (.in(1'b1),
.out(spare6_inv_16x_unused));
cl_u1_nand2_16x spare6_nand2_16x (.in0(1'b1),
.out(spare6_nand2_16x_unused));
cl_u1_nor3_4x spare6_nor3_4x (.in0(1'b0),
.out(spare6_nor3_4x_unused));
cl_u1_nand2_8x spare6_nand2_8x (.in0(1'b1),
.out(spare6_nand2_8x_unused));
cl_u1_buf_16x spare6_buf_16x (.in(1'b1),
.out(spare6_buf_16x_unused));
cl_u1_nor2_16x spare6_nor2_16x (.in0(1'b0),
.out(spare6_nor2_16x_unused));
cl_u1_inv_32x spare6_inv_32x (.in(1'b1),
.out(spare6_inv_32x_unused));
cl_sc1_msff_8x spare7_flop (.l1clk(l1clk),
cl_u1_buf_32x spare7_buf_32x (.in(1'b1),
.out(spare7_buf_32x_unused));
cl_u1_nand3_8x spare7_nand3_8x (.in0(1'b1),
.out(spare7_nand3_8x_unused));
cl_u1_inv_8x spare7_inv_8x (.in(1'b1),
.out(spare7_inv_8x_unused));
cl_u1_aoi22_4x spare7_aoi22_4x (.in00(1'b1),
.out(spare7_aoi22_4x_unused));
cl_u1_buf_8x spare7_buf_8x (.in(1'b1),
.out(spare7_buf_8x_unused));
cl_u1_oai22_4x spare7_oai22_4x (.in00(1'b1),
.out(spare7_oai22_4x_unused));
cl_u1_inv_16x spare7_inv_16x (.in(1'b1),
.out(spare7_inv_16x_unused));
cl_u1_nand2_16x spare7_nand2_16x (.in0(1'b1),
.out(spare7_nand2_16x_unused));
cl_u1_nor3_4x spare7_nor3_4x (.in0(1'b0),
.out(spare7_nor3_4x_unused));
cl_u1_nand2_8x spare7_nand2_8x (.in0(1'b1),
.out(spare7_nand2_8x_unused));
cl_u1_buf_16x spare7_buf_16x (.in(1'b1),
.out(spare7_buf_16x_unused));
cl_u1_nor2_16x spare7_nor2_16x (.in0(1'b0),
.out(spare7_nor2_16x_unused));
cl_u1_inv_32x spare7_inv_32x (.in(1'b1),
.out(spare7_inv_32x_unused));
cl_sc1_msff_8x spare8_flop (.l1clk(l1clk),
cl_u1_buf_32x spare8_buf_32x (.in(1'b1),
.out(spare8_buf_32x_unused));
cl_u1_nand3_8x spare8_nand3_8x (.in0(1'b1),
.out(spare8_nand3_8x_unused));
cl_u1_inv_8x spare8_inv_8x (.in(1'b1),
.out(spare8_inv_8x_unused));
cl_u1_aoi22_4x spare8_aoi22_4x (.in00(1'b1),
.out(spare8_aoi22_4x_unused));
cl_u1_buf_8x spare8_buf_8x (.in(1'b1),
.out(spare8_buf_8x_unused));
cl_u1_oai22_4x spare8_oai22_4x (.in00(1'b1),
.out(spare8_oai22_4x_unused));
cl_u1_inv_16x spare8_inv_16x (.in(1'b1),
.out(spare8_inv_16x_unused));
cl_u1_nand2_16x spare8_nand2_16x (.in0(1'b1),
.out(spare8_nand2_16x_unused));
cl_u1_nor3_4x spare8_nor3_4x (.in0(1'b0),
.out(spare8_nor3_4x_unused));
cl_u1_nand2_8x spare8_nand2_8x (.in0(1'b1),
.out(spare8_nand2_8x_unused));
cl_u1_buf_16x spare8_buf_16x (.in(1'b1),
.out(spare8_buf_16x_unused));
cl_u1_nor2_16x spare8_nor2_16x (.in0(1'b0),
.out(spare8_nor2_16x_unused));
cl_u1_inv_32x spare8_inv_32x (.in(1'b1),
.out(spare8_inv_32x_unused));
cl_sc1_msff_8x spare9_flop (.l1clk(l1clk),
cl_u1_buf_32x spare9_buf_32x (.in(1'b1),
.out(spare9_buf_32x_unused));
cl_u1_nand3_8x spare9_nand3_8x (.in0(1'b1),
.out(spare9_nand3_8x_unused));
cl_u1_inv_8x spare9_inv_8x (.in(1'b1),
.out(spare9_inv_8x_unused));
cl_u1_aoi22_4x spare9_aoi22_4x (.in00(1'b1),
.out(spare9_aoi22_4x_unused));
cl_u1_buf_8x spare9_buf_8x (.in(1'b1),
.out(spare9_buf_8x_unused));
cl_u1_oai22_4x spare9_oai22_4x (.in00(1'b1),
.out(spare9_oai22_4x_unused));
cl_u1_inv_16x spare9_inv_16x (.in(1'b1),
.out(spare9_inv_16x_unused));
cl_u1_nand2_16x spare9_nand2_16x (.in0(1'b1),
.out(spare9_nand2_16x_unused));
cl_u1_nor3_4x spare9_nor3_4x (.in0(1'b0),
.out(spare9_nor3_4x_unused));
cl_u1_nand2_8x spare9_nand2_8x (.in0(1'b1),
.out(spare9_nand2_8x_unused));
cl_u1_buf_16x spare9_buf_16x (.in(1'b1),
.out(spare9_buf_16x_unused));
cl_u1_nor2_16x spare9_nor2_16x (.in0(1'b0),
.out(spare9_nor2_16x_unused));
cl_u1_inv_32x spare9_inv_32x (.in(1'b1),
.out(spare9_inv_32x_unused));
cl_sc1_msff_8x spare10_flop (.l1clk(l1clk),
.q(spare10_flop_unused));
cl_u1_buf_32x spare10_buf_32x (.in(1'b1),
.out(spare10_buf_32x_unused));
cl_u1_nand3_8x spare10_nand3_8x (.in0(1'b1),
.out(spare10_nand3_8x_unused));
cl_u1_inv_8x spare10_inv_8x (.in(1'b1),
.out(spare10_inv_8x_unused));
cl_u1_aoi22_4x spare10_aoi22_4x (.in00(1'b1),
.out(spare10_aoi22_4x_unused));
cl_u1_buf_8x spare10_buf_8x (.in(1'b1),
.out(spare10_buf_8x_unused));
cl_u1_oai22_4x spare10_oai22_4x (.in00(1'b1),
.out(spare10_oai22_4x_unused));
cl_u1_inv_16x spare10_inv_16x (.in(1'b1),
.out(spare10_inv_16x_unused));
cl_u1_nand2_16x spare10_nand2_16x (.in0(1'b1),
.out(spare10_nand2_16x_unused));
cl_u1_nor3_4x spare10_nor3_4x (.in0(1'b0),
.out(spare10_nor3_4x_unused));
cl_u1_nand2_8x spare10_nand2_8x (.in0(1'b1),
.out(spare10_nand2_8x_unused));
cl_u1_buf_16x spare10_buf_16x (.in(1'b1),
.out(spare10_buf_16x_unused));
cl_u1_nor2_16x spare10_nor2_16x (.in0(1'b0),
.out(spare10_nor2_16x_unused));
cl_u1_inv_32x spare10_inv_32x (.in(1'b1),
.out(spare10_inv_32x_unused));