// ========== Copyright Header Begin ==========================================
// OpenSPARC T2 Processor File: efu_fct_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 RD_CNT_START 9'd20
`define ASHIFT_CNT_START {(7'd09),2'b11}
`define DSHIFT_CNT_START {(7'd12),2'b11}
`define RSLTSHIFT_CNT_START {(7'd63),2'b11}
`define RECOVER_CNT_START 9'd10
`define MSEQ_IDLE 4'b0000 // 4'h0
`define MSEQ_DUMP 4'b1001 // 4'h9
`define MSEQ_RSLTSHFT 4'b1011 // 4'ha
`define MSEQ_SGLRD 4'b1010 // 4'hb
`define MSEQ_BYPASS 4'b1100 // 4'hc
`define MSEQ_DEST_SMPL 4'b1101 // 4'hd
`define MSEQ_L2RR_SMPL 4'b1110 // 4'he
`define MSEQ_SHIFT 4'b1111 // 4'hf
`define MRD_IDLE 3'b000 // 3'b0
`define MRD_RD_ARRAY 3'b100 // 3'b4
//`define MRD_ASHIFT 3'b001 // 3'b1
`define MRD_XFER 3'b001 // 3'b1
`define MRD_DSHIFT 3'b011 // 3'b3
`define MRD_RECOVER 3'b010 // 3'b2
efu_ncu_fusestat_xfer_en,
wire read_data_ff_vld_r1;
wire ff_pulse_read_data_ff_vld_scanin;
wire ff_pulse_read_data_ff_vld_scanout;
wire enable_efa_por_reg_scanin;
wire enable_efa_por_reg_scanout;
wire efa_array_power_down_reg_scanin;
wire efa_array_power_down_reg_scanout;
wire seq_state_reg_scanin;
wire seq_state_reg_scanout;
wire addr_cnt_reg_scanin;
wire addr_cnt_reg_scanout;
wire mrd_state_reg_scanin;
wire mrd_state_reg_scanout;
wire mrd_cnt_dec1_true_value;
wire ff_mrd_zero_scanout;
wire mrd_63_to_0_ff_scanin;
wire mrd_63_to_0_ff_scanout;
wire mrd_cnt_reg_scanout;
wire [31:0] efa_out_data;
wire [31:0] tck_shft_data_ff;
wire read_data_reg_scanin;
wire read_data_reg_scanout;
wire l2rd_id_reg_scanout;
wire rslt_status_reg_scanin;
wire rslt_status_reg_scanout;
wire local_fuse_data_reg_scanin;
wire local_fuse_data_reg_scanout;
wire ncu_coreavail_dshift_reg_scanin;
wire ncu_coreavail_dshift_reg_scanout;
wire ncu_bankavail_dshift_reg_scanin;
wire ncu_bankavail_dshift_reg_scanout;
wire ncu_sernum0_dshift_reg_scanin;
wire ncu_sernum0_dshift_reg_scanout;
wire ncu_sernum1_dshift_reg_scanin;
wire ncu_sernum1_dshift_reg_scanout;
wire ncu_sernum2_dshift_reg_scanin;
wire ncu_sernum2_dshift_reg_scanout;
wire ncu_fusestat_dshift_reg_scanin;
wire ncu_fusestat_dshift_reg_scanout;
wire ff_updtdr_slice_scanin;
wire ff_updtdr_slice_scanout;
wire ff_updtdr_slice1_scanin;
wire ff_updtdr_slice1_scanout;
wire ff_updtdr_slice2_scanin;
wire ff_updtdr_slice2_scanout;
wire ff_read_en_slice_scanin;
wire ff_read_en_slice_scanout;
wire ff_read_en_slice1_scanin;
wire ff_read_en_slice1_scanout;
wire ff_read_en_slice2_scanin;
wire ff_read_en_slice2_scanout;
wire ff_read_start_0_slice_scanin;
wire ff_read_start_0_slice_scanout;
wire ff_read_start_1_slice_scanin;
wire ff_read_start_1_slice_scanout;
wire ff_cmp_io_sync_en_scanin;
wire ff_cmp_io_sync_en_scanout;
wire ff_fuse_bypass_slice_scanin;
wire ff_fuse_bypass_slice_scanout;
wire ff_fuse_bypass_slice_1_scanin;
wire ff_fuse_bypass_slice_1_scanout;
wire ff_fuse_bypass_slice_2_scanin;
wire ff_fuse_bypass_slice_2_scanout;
wire fuse_bypass_hist_ff;
wire ff_dest_sample_slice_scanin;
wire ff_dest_sample_slice_scanout;
wire ff_dest_sample_slice_1_scanin;
wire ff_dest_sample_slice_1_scanout;
wire ff_dest_sample_slice_2_scanin;
wire ff_dest_sample_slice_2_scanout;
wire dest_sample_hist_ff;
wire [31:0] w_mux_shift_retain;
wire ff_tck_shift_data_nxt_scanin;
wire ff_tck_shift_data_nxt_scanout;
wire ff_sync1_rowaddr_6_1_scanin;
wire ff_sync1_rowaddr_6_1_scanout;
wire sync_tcu_efu_rowaddr6;
wire ff_sync1_rowaddr_5_1_scanin;
wire ff_sync1_rowaddr_5_1_scanout;
wire sync_tcu_efu_rowaddr5;
wire ff_sync1_rowaddr_4_1_scanin;
wire ff_sync1_rowaddr_4_1_scanout;
wire sync_tcu_efu_rowaddr4;
wire ff_sync1_rowaddr_3_1_scanin;
wire ff_sync1_rowaddr_3_1_scanout;
wire sync_tcu_efu_rowaddr3;
wire ff_sync1_rowaddr_2_1_scanin;
wire ff_sync1_rowaddr_2_1_scanout;
wire sync_tcu_efu_rowaddr2;
wire ff_sync1_rowaddr_1_1_scanin;
wire ff_sync1_rowaddr_1_1_scanout;
wire sync_tcu_efu_rowaddr1;
wire ff_sync1_rowaddr_0_1_scanin;
wire ff_sync1_rowaddr_0_1_scanout;
wire sync_tcu_efu_rowaddr0;
wire ff_sync1_rowaddr_6_scanin;
wire ff_sync1_rowaddr_6_scanout;
wire ff_sync1_rowaddr_5_scanin;
wire ff_sync1_rowaddr_5_scanout;
wire ff_sync1_rowaddr_4_scanin;
wire ff_sync1_rowaddr_4_scanout;
wire ff_sync1_rowaddr_3_scanin;
wire ff_sync1_rowaddr_3_scanout;
wire ff_sync1_rowaddr_2_scanin;
wire ff_sync1_rowaddr_2_scanout;
wire ff_sync1_rowaddr_1_scanin;
wire ff_sync1_rowaddr_1_scanout;
wire ff_sync1_rowaddr_scanin;
wire ff_sync1_rowaddr_scanout;
wire ff_sync1_coladdr_4_1_scanin;
wire ff_sync1_coladdr_4_1_scanout;
wire sync_tcu_efu_coladdr4;
wire ff_sync1_coladdr_3_1_scanin;
wire ff_sync1_coladdr_3_1_scanout;
wire sync_tcu_efu_coladdr3;
wire ff_sync1_coladdr_2_1_scanin;
wire ff_sync1_coladdr_2_1_scanout;
wire sync_tcu_efu_coladdr2;
wire ff_sync1_coladdr_1_1_scanin;
wire ff_sync1_coladdr_1_1_scanout;
wire sync_tcu_efu_coladdr1;
wire ff_sync1_coladdr_0_1_scanin;
wire ff_sync1_coladdr_0_1_scanout;
wire sync_tcu_efu_coladdr0;
wire ff_sync1_coladdr_4_scanin;
wire ff_sync1_coladdr_4_scanout;
wire ff_sync1_coladdr_3_scanin;
wire ff_sync1_coladdr_3_scanout;
wire ff_sync1_coladdr_2_scanin;
wire ff_sync1_coladdr_2_scanout;
wire ff_sync1_coladdr_1_scanin;
wire ff_sync1_coladdr_1_scanout;
wire ff_sync1_coladdr_scanin;
wire ff_sync1_coladdr_scanout;
wire [4:0] sync_tcu_efu_coladdr;
wire ff_tcu_efu_read_mode_bit1_scanin;
wire ff_tcu_efu_read_mode_bit1_scanout;
wire tcu_efu_read_mode1_1;
wire ff_tcu_efu_read_mode_bit1_1_scanin;
wire ff_tcu_efu_read_mode_bit1_1_scanout;
wire sync_tcu_efu_read_mode1;
wire ff_tcu_efu_read_mode_bit0_scanin;
wire ff_tcu_efu_read_mode_bit0_scanout;
wire tcu_efu_read_mode0_1;
wire ff_tcu_efu_read_mode_bit0_1_scanin;
wire ff_tcu_efu_read_mode_bit0_1_scanout;
wire sync_tcu_efu_read_mode0;
wire [1:0] sync_tcu_efu_read_mode;
wire ff_power_down_sync_slice_scanin;
wire ff_power_down_sync_slice_scanout;
wire inhibit_power_down_sync_l;
wire ff_power_down_sync_slice_1_scanin;
wire ff_power_down_sync_slice_1_scanout;
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
input tcu_efu_read_start;
input tcu_efu_fuse_bypass;
input tcu_efu_dest_sample;
input [4:0] tcu_efu_coladdr;
input [2:0] tcu_efu_read_mode;
input [6:0] tcu_efu_rowaddr;
input [31:0] efa_sbc_data;
output sbc_efa_power_down;
output [6:0] sync1_rowaddress;
output [4:0] sbc_efa_bit_addr;
output sbc_efa_sup_det_rd;
output sbc_efa_margin0_rd;
output sbc_efa_margin1_rd;
output [5:0] sbc_efa_word_addr;
input [31:0] shift_data_ff_out;
//output mrd_state_rd_array;
output [31:0] read_data_ff;
//output [6:0] addr_cnt_ff;
//output efa_array_power_down_ff;
output local_efu_read_start;
output local_fuse_bypass;
output local_dest_sample;
output decode_enable_vld;
// Chip Primary Inputs/Globals
input jbus_arst_l; // JBus clock domain async reset.
input [6:0] snc1_rowaddr;
//input inhibit_power_down_l;
// Destination Register Interface
// Interface with NCU for data array repair
output efu_ncu_fuse_data;
output efu_ncu_srlnum0_xfer_en;
output efu_ncu_srlnum1_xfer_en;
output efu_ncu_srlnum2_xfer_en;
output efu_ncu_fusestat_xfer_en;
output efu_ncu_coreavl_xfer_en;
output efu_ncu_bankavl_xfer_en;
input [31:0] niu_read_data_shift;
input load_niu_read_data;
//input [31:0] efa_out_data;
assign pce_ov = tcu_pce_ov;
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
wire efu_ncu_sernum0_dshift;
wire efu_ncu_sernum1_dshift;
wire efu_ncu_sernum2_dshift;
wire efu_ncu_fusestat_dshift;
wire efu_ncu_coreavail_dshift;
wire local_efu_read_start;
//wire [6:0] addr_cnt_ff;
wire [5:0] addr_cnt_inc1;
wire local_fuse_bypass; //tcu_efu_fuse_bypass
wire local_dest_sample; //tcu_efu_fuse_bypass
wire local_read_en; //tcu_efu_fuse_bypass
wire [31:0] read_data_nxt;
wire [31:0] read_data_ff;
wire seq_state_dest_smpl;
wire seq_state_l2rr_smpl;
wire inhibit_power_down_snc_l;
wire inhibit_power_down_l;
wire enable_efa_por_nxt_l;
wire enable_efa_por_ff_l;
wire efa_array_power_down_ff;
wire efa_array_power_down_nxt;
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
assign pwr_ok = jbus_arst_l;
assign por_n = jbus_arst_l & por_l;
assign read_data_ff_vld_d = seq_state_rsltshft | seq_state_bypass | seq_state_dump & mrd_state_xfer ;
assign read_data_ff_vld = read_data_ff_vld_d & ~read_data_ff_vld_r1;
assign decode_enable_vld=1'b0;
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
efu_fct_ctl_l1clkhdr_ctl_macro ioclkgen (
efu_fct_ctl_l1clkhdr_ctl_macro l2clkgen (
efu_fct_ctl_l1clkhdr_ctl_macro tckclkgen (
assign enable_efa_por_nxt_l = seq_state_rsltshft | enable_efa_por_ff_l;
efu_fct_ctl_msff_ctl_macro__width_1 ff_pulse_read_data_ff_vld
.scan_in(ff_pulse_read_data_ff_vld_scanin),
.scan_out(ff_pulse_read_data_ff_vld_scanout),
.dout (read_data_ff_vld_r1),
.din (read_data_ff_vld_d),
efu_fct_ctl_msff_ctl_macro__width_1 enable_efa_por_reg
.scan_in(enable_efa_por_reg_scanin),
.scan_out(enable_efa_por_reg_scanout),
.dout (enable_efa_por_ff_l),
.din (enable_efa_por_nxt_l),
assign efa_array_power_down_nxt
= seq_state_idle & !(local_efu_read_start | local_fuse_bypass
| local_read_en | local_dest_sample)
& enable_efa_por_ff_l & inhibit_power_down_l;
efu_fct_ctl_msff_ctl_macro__width_1 efa_array_power_down_reg
.scan_in(efa_array_power_down_reg_scanin),
.scan_out(efa_array_power_down_reg_scanout),
.dout (efa_array_power_down_ff),
.din (efa_array_power_down_nxt),
//-----------------------------------------------------------------------------
// Read whole array sequencer
//-----------------------------------------------------------------------------
// Note| State encodings are chosen so the outputs are equal to signle
// state bits. Changing state encodings will change outputs!
// Bit[3] is used to indicate idle/not idle.
always @(addr_cnt_max or local_dest_sample or local_efu_read_start or local_fuse_bypass or local_read_en or mrd_cnt_done or recover_done or seq_state_ff or shift_done)
case (seq_state_ff) //synopsys parallel_case full_case
if (local_efu_read_start)
seq_state_nxt = `MSEQ_DUMP;
seq_state_nxt = `MSEQ_SGLRD;
else if (local_fuse_bypass | local_dest_sample)
seq_state_nxt = `MSEQ_SHIFT;
seq_state_nxt = `MSEQ_IDLE;
if (addr_cnt_max && shift_done)
seq_state_nxt = `MSEQ_RSLTSHFT;
seq_state_nxt = `MSEQ_DUMP;
seq_state_nxt = `MSEQ_IDLE;
seq_state_nxt = `MSEQ_RSLTSHFT;
seq_state_nxt = `MSEQ_IDLE;
seq_state_nxt = `MSEQ_SGLRD;
seq_state_nxt = `MSEQ_IDLE;
seq_state_nxt = `MSEQ_SHIFT;
seq_state_nxt = `MSEQ_IDLE;
seq_state_nxt = `MSEQ_DEST_SMPL;
seq_state_nxt = `MSEQ_IDLE;
seq_state_nxt = `MSEQ_L2RR_SMPL;
seq_state_nxt = `MSEQ_IDLE;
seq_state_nxt = `MSEQ_BYPASS;
seq_state_nxt = `MSEQ_IDLE;
assign seq_state_idle = (!seq_state_ff[3]);
assign seq_state_dump = (seq_state_ff == `MSEQ_DUMP);
assign seq_state_sglrd = (seq_state_ff == `MSEQ_SGLRD);
//assign seq_state_bypass = (seq_state_ff == `MSEQ_BYPASS);
assign seq_state_bypass = (seq_state_ff == `MSEQ_SHIFT);
assign seq_state_rsltshft = (seq_state_ff == `MSEQ_RSLTSHFT);
assign seq_state_dest_smpl = (seq_state_ff == `MSEQ_DEST_SMPL);
assign seq_state_l2rr_smpl = (seq_state_ff == `MSEQ_L2RR_SMPL);
efu_fct_ctl_msff_ctl_macro__width_4 seq_state_reg
.scan_in(seq_state_reg_scanin),
.scan_out(seq_state_reg_scanout),
.dout (seq_state_ff[3:0]),
.din (seq_state_nxt[3:0]),
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
assign addr_cnt_inc1[5:0] = addr_cnt_ff[5:0] + 6'b000001;
assign addr_cnt_nxt [6:0] = local_efu_read_start ? 7'b0000000
: !seq_state_dump ? snc1_rowaddr[6:0]
assign addr_cnt_max = &addr_cnt_ff[5:0];
assign addr_cnt_en = local_efu_read_start
| shift_done & !addr_cnt_max & seq_state_dump
efu_fct_ctl_msff_ctl_macro__en_1__width_7 addr_cnt_reg
.scan_in(addr_cnt_reg_scanin),
.scan_out(addr_cnt_reg_scanout),
.dout (addr_cnt_ff[6:0]),
.din (addr_cnt_nxt[6:0]),
//-----------------------------------------------------------------------------
// Read and process one entry sequencer
//-----------------------------------------------------------------------------
// Note!! MRD_RD_ARRAY encoding was chosen so that mrd_state_ff[2] uniquely
// defines being in that state. (like one hot, but only for that state)
always @(local_dest_sample or local_fuse_bypass or mrd_cnt_done or mrd_state_ff or seq_state_dump or seq_state_sglrd)
case (mrd_state_ff) //synopsys parallel_case full_case
if (seq_state_sglrd || seq_state_dump)
mrd_state_nxt = `MRD_RD_ARRAY;
else if (local_fuse_bypass || local_dest_sample)
// mrd_state_nxt = `MRD_ASHIFT;
mrd_state_nxt = `MRD_XFER;
mrd_state_nxt = `MRD_IDLE;
////////////////////////////////////////////
if (mrd_cnt_done && seq_state_dump)
mrd_state_nxt = `MRD_XFER;
mrd_state_nxt = `MRD_RECOVER;
mrd_state_nxt = `MRD_RD_ARRAY;
////////////////////////////////////////////
mrd_state_nxt = `MRD_IDLE;
mrd_state_nxt = `MRD_XFER;
////////////////////////////////////////////
mrd_state_nxt = `MRD_IDLE;
mrd_state_nxt = `MRD_RECOVER;
mrd_state_nxt = `MRD_IDLE;
//assign mrd_state_idle = (mrd_state_ff == `MRD_IDLE);
assign mrd_state_rd_array = mrd_state_ff[2];
//assign mrd_state_ashift = (mrd_state_ff == `MRD_ASHIFT);
//assign mrd_state_dshift = (mrd_state_ff == `MRD_DSHIFT);
assign mrd_state_xfer = (mrd_state_ff == `MRD_XFER);
//assign mrd_state_shift = mrd_state_ashift | mrd_state_dshift;
assign mrd_state_recover = (mrd_state_ff == `MRD_RECOVER);
assign shift_done = mrd_state_xfer & mrd_cnt_done;
assign rd_array_done = mrd_state_rd_array & mrd_cnt_done;
assign recover_done = mrd_state_recover & mrd_cnt_done;
assign mrd_state_ashift = mrd_state_xfer;
assign mrd_state_dshift = mrd_state_xfer;
assign mrd_state_shift = mrd_state_xfer;
efu_fct_ctl_msff_ctl_macro__width_3 mrd_state_reg
.scan_in(mrd_state_reg_scanin),
.scan_out(mrd_state_reg_scanout),
.dout (mrd_state_ff[2:0]),
.din (mrd_state_nxt[2:0]),
//-----------------------------------------------------------------------------
// General purpose timing counter
//-----------------------------------------------------------------------------
wire [5:0] l2rr_read_cnt;
wire [8:0] mrd_cnt_dec1_true_value_9;
wire [8:0] enter_recover_false_value;
assign l2rr_read_cnt = read_data_ff[17:12];
// General purpose CNTer used for timing reads from array and shifting
// to destination registers. Note that CNTdown stops at 0 and won't wrap.
assign mrd_cnt_dec1[8:0] = mrd_cnt_ff[8:0] - 9'b0_0000_0001;
assign mrd_cnt_dec1_true_value = !mrd_cnt_done;
assign mrd_cnt_dec1_true_value_9 = {9{mrd_cnt_dec1_true_value}};
assign enter_recover_false_value = (mrd_cnt_dec1 & mrd_cnt_dec1_true_value_9);
//assign mrd_cnt_nxt [8:0] = enter_rd_array ? 9'd20
// : enter_ashift ? {(7'd09),2'b11}
// : (enter_dshift & seq_state_l2rr_smpl) ? ({1'b0,l2rr_read_cnt,2'b11})
// : enter_dshift ? {(7'd12),2'b11}
// : enter_rsltshft ? {(7'd63),2'b11}
// : enter_recover ? 9'd10 : enter_recover_false_value;
// need to load d21 so that bit 21-0 get shifted out
// : enter_recover ? 9'd10 : enter_recover_false_value;
// : enter_rsltshft ? {(7'd63),2'b11}
//need to change 20 to 40
assign mrd_cnt_nxt [8:0] = enter_rd_array ? 9'd42
: enter_xfer ? (serdes ? 9'd91 : 9'd21)
: mrd_cnt_ff == 9'd0 ? 9'd0
//assign mrd_cnt_done = ~|mrd_cnt_ff;
assign mrd_cnt_63 = mrd_cnt_nxt == 9'd63;
efu_fct_ctl_msff_ctl_macro__width_1 ff_mrd_zero
.scan_in(ff_mrd_zero_scanin),
.scan_out(ff_mrd_zero_scanout),
.din (mrd_cnt_ff == 9'd1),
efu_fct_ctl_msff_ctl_macro__width_1 mrd_63_to_0_ff
.scan_in(mrd_63_to_0_ff_scanin),
.scan_out(mrd_63_to_0_ff_scanout),
.din ((~mrd_cnt_done & mrd_63_to_0) | mrd_cnt_63),
efu_fct_ctl_msff_ctl_macro__width_9 mrd_cnt_reg
.scan_in(mrd_cnt_reg_scanin),
.scan_out(mrd_cnt_reg_scanout),
//-----------------------------------------------------------------------------
// Read array data register
//-----------------------------------------------------------------------------
//wire [21:0] payload_data;
wire [31:0] read_data_shift;
wire [31:0] read_data_l2shift;
assign serdes = enter_xfer & ((efa_out_data[27:22] == 6'b101010) | (efa_out_data[27:22] == 6'b101001)
| (efa_out_data[27:22] == 6'b101011));
assign read_data_shift_en = (seq_state_dest_smpl
| seq_state_l2rr_smpl & mrd_state_xfer)
& (mrd_cnt_ff[1:0]==2'b00);
assign read_data_en = rd_array_done | update_dr_jbus | read_data_shift_en | load_l2_read_data | load_niu_read_data;
assign read_data_shift = {read_data_ff[31:12], read_data_ff[10:0], shift_in};
assign read_data_l2shift = {read_data_ff[30:0], shift_in};
assign read_data_nxt = update_dr_jbus ? tck_shft_data_ff
: seq_state_dest_smpl ? read_data_shift
: seq_state_l2rr_smpl ? read_data_l2shift
: load_l2_read_data ? shift_data_ff_out
: load_niu_read_data ? niu_read_data_shift
//assign l2rd_id_en = enter_ashift;
assign l2rd_id_en = enter_xfer;
efu_fct_ctl_msff_ctl_macro__en_1__width_32 read_data_reg
.scan_in(read_data_reg_scanin),
.scan_out(read_data_reg_scanout),
efu_fct_ctl_msff_ctl_macro__en_1__width_3 l2rd_id_reg
.scan_in(l2rd_id_reg_scanin),
.scan_out(l2rd_id_reg_scanout),
//assign parity_bit = read_data_ff[28];
//assign payload_data = read_data_ff[21:0];
assign valid_bits = read_data_ff[31:29];
assign block_id = read_data_ff[27:22];
assign computed_parity = ^read_data_ff[28:0];
assign good_parity = !computed_parity;
//assign good_parity = computed_parity;
case (valid_bits) //synopsys parallel_case full_case
3'b000: {valid, val_err} = 2'b00;
3'b001: {valid, val_err} = 2'b01;
3'b010: {valid, val_err} = 2'b01;
3'b100: {valid, val_err} = 2'b01;
3'b011: {valid, val_err} = 2'b10;
3'b101: {valid, val_err} = 2'b10;
3'b110: {valid, val_err} = 2'b10;
3'b111: {valid, val_err} = 2'b10;
assign valid_row = good_parity & valid;
wire [63:0] rslt_status_nxt;
wire [63:0] rslt_status_ff;
wire [63:0] rslt_status_set;
wire [63:0] rslt_status_clr;
wire [63:0] rslt_status_vect;
//###CPS parity is 1 == row error ??????
// parity is 0 == no row error ??????
// assign row_error = val_err | (valid & ~good_parity);
//assign invalid_blk_id = (block_id[5] == 1'b1 & block_id[4] == 1'b1) | (block_id == 6'b101101) | (block_id == 6'b101110) | (block_id == 6'b101111);
//assign row_error = (val_err | (valid & ~good_parity)) & ~invalid_blk_id;
assign row_error = val_err | (valid & ~good_parity);
assign rslt_status_en = seq_state_dump & shift_done;
assign rslt_status_vect = ({{63{1'b0}},rslt_status_en} << addr_cnt_ff[5:0]);
assign rslt_status_set = rslt_status_vect & {64{row_error}};
assign rslt_status_clr = rslt_status_vect & {64{!row_error}};
assign rslt_status_nxt = rslt_status_set | ~rslt_status_clr & rslt_status_ff;
efu_fct_ctl_msff_ctl_macro__width_64 rslt_status_reg
.scan_in(rslt_status_reg_scanin),
.scan_out(rslt_status_reg_scanout),
.dout (rslt_status_ff[63:0]),
.din (rslt_status_nxt[63:0]),
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
//wire local_fuse_clk1_nxt;
wire local_fuse_ashift_nxt;
wire local_fuse_dshift_nxt;
wire local_fuse_data_nxt;
//wire decode_enable_l2rr;
//wire local_fuse_clk1_ff;
//wire local_fuse_clk1_dly_ff;
//wire local_fuse_clk2_ff;
wire [31:0] write_dest_data;
assign dest_ncu = ncu_coreavail_dec | ncu_sernum0_dec
| ncu_sernum1_dec | ncu_sernum2_dec;
assign rid_data = dest_ncu
read_data_ff[21:12], write_en};
assign write_en = !(seq_state_dest_smpl | seq_state_l2rr_smpl);
assign write_dest_data = {{8{1'b0}},
read_data_ff[21:12], write_en,
// assign local_fuse_clk1_nxt =
// (mrd_state_shift | seq_state_rsltshft) & (mrd_cnt_ff[1:0]==2'b10) & efu_rst_l;
//assign local_fuse_clk1_nxt =
// (mrd_state_shift | seq_state_rsltshft) & (mrd_cnt_ff[1:0]==2'b10);
assign mrd_cnt_ge_12 = (mrd_cnt_ff[6:0] >= {5'd12,2'b00});
assign mrd_cnt_ge_2 = (mrd_cnt_ff[6:0] >= { 5'd2,2'b00});
assign mrd_cnt_ge_1 = (mrd_cnt_ff[8:0] >= { 7'd1,2'b00});
//assign local_fuse_ashift_nxt = mrd_state_ashift & efu_rst_l;
assign local_fuse_ashift_nxt = mrd_state_ashift;
//assign local_fuse_dshift_nxt = efu_rst_l & (seq_state_rsltshft
// | (mrd_state_dshift & (seq_state_dest_smpl ? (!mrd_cnt_ge_12 & mrd_cnt_ge_1)
// : seq_state_l2rr_smpl ? (mrd_cnt_ge_1)
// : mrd_cnt_ge_2 | dest_ncu & mrd_cnt_ge_1)) );
assign local_fuse_dshift_nxt = (seq_state_rsltshft & mrd_63_to_0
| (mrd_state_dshift & (seq_state_dest_smpl ? (!mrd_cnt_ge_12 & mrd_cnt_ge_1)
: seq_state_l2rr_smpl ? (mrd_cnt_ge_1)
: mrd_cnt_ge_2 | dest_ncu & mrd_cnt_ge_1)) );
assign fuse_data_bit_mux = write_dest_data[mrd_cnt_ff[6:2]];
assign fuse_rid_bit_mux = rid_data[mrd_cnt_ff[5:2]];
//assign rslt_data_bit_mux = rslt_status_ff[mrd_cnt_ff[7:2]];
assign rslt_data_bit_mux = rslt_status_ff[mrd_cnt_ff[5:0]];
//##### change back if necessary CPS
// need to include the rsltshft terms
// need to find something to inhibit the read_data_ff term
//assign local_fuse_data_nxt = (mrd_state_ashift & fuse_rid_bit_mux)
// | (mrd_state_dshift & fuse_data_bit_mux)
// | (seq_state_rsltshft & rslt_data_bit_mux);
// added mrd_state_shift to qualify the shift out data
assign local_fuse_data_nxt = (mrd_state_shift & read_data_ff[mrd_cnt_ff]) | (seq_state_rsltshft & rslt_data_bit_mux);
efu_fct_ctl_msff_ctl_macro__width_1 local_fuse_data_reg
.scan_in(local_fuse_data_reg_scanin),
.scan_out(local_fuse_data_reg_scanout),
.dout (local_fuse_data_ff),
.din (local_fuse_data_nxt),
//assign decode_enable = mrd_state_shift & (valid_row | seq_state_dest_smpl | seq_state_bypass);
assign decode_enable = mrd_state_shift & (valid_row & (seq_state_dump | seq_state_dest_smpl | seq_state_bypass));
//assign decode_enable_l2rr = mrd_state_shift & seq_state_l2rr_smpl;
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
assign ncu_coreavail_dec= (block_id[5:0] == 6'b100000) & decode_enable;
assign ncu_bankavail_dec= (block_id[5:0] == 6'b100001) & decode_enable;
assign ncu_sernum0_dec = (block_id[5:0] == 6'b100010) & decode_enable;
assign ncu_sernum1_dec = (block_id[5:0] == 6'b100011) & decode_enable;
assign ncu_sernum2_dec = (block_id[5:0] == 6'b100100) & decode_enable;
assign ncu_fusestat_dec = seq_state_rsltshft;
assign l2d_fuse_dec = (block_id[5:3] == 3'b011);
//assign l2d0_read_dec = (l2rd_id_ff[2:0] == 3'b000) & decode_enable_l2rr;
//assign l2d1_read_dec = (l2rd_id_ff[2:0] == 3'b001) & decode_enable_l2rr;
//assign l2d2_read_dec = (l2rd_id_ff[2:0] == 3'b010) & decode_enable_l2rr;
//assign l2d3_read_dec = (l2rd_id_ff[2:0] == 3'b011) & decode_enable_l2rr;
//assign l2d4_read_dec = (l2rd_id_ff[2:0] == 3'b100) & decode_enable_l2rr;
//assign l2d5_read_dec = (l2rd_id_ff[2:0] == 3'b101) & decode_enable_l2rr;
//assign l2d6_read_dec = (l2rd_id_ff[2:0] == 3'b110) & decode_enable_l2rr;
//assign l2d7_read_dec = (l2rd_id_ff[2:0] == 3'b111) & decode_enable_l2rr;
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
assign efu_ncu_fuse_data = local_fuse_data_ff;
//-----------------------------------------------------------------------------
// Shift Control Output flops
//-----------------------------------------------------------------------------
efu_fct_ctl_msff_ctl_macro__width_1 ncu_coreavail_dshift_reg
.scan_in(ncu_coreavail_dshift_reg_scanin),
.scan_out(ncu_coreavail_dshift_reg_scanout),
.din (ncu_coreavail_dec & (local_fuse_ashift_nxt | local_fuse_dshift_nxt)),
.dout (efu_ncu_coreavl_xfer_en),
efu_fct_ctl_msff_ctl_macro__width_1 ncu_bankavail_dshift_reg
.scan_in(ncu_bankavail_dshift_reg_scanin),
.scan_out(ncu_bankavail_dshift_reg_scanout),
.din (ncu_bankavail_dec & (local_fuse_ashift_nxt | local_fuse_dshift_nxt)),
.dout (efu_ncu_bankavl_xfer_en),
efu_fct_ctl_msff_ctl_macro__width_1 ncu_sernum0_dshift_reg
.scan_in(ncu_sernum0_dshift_reg_scanin),
.scan_out(ncu_sernum0_dshift_reg_scanout),
.din (ncu_sernum0_dec & (local_fuse_ashift_nxt | local_fuse_dshift_nxt)),
.dout (efu_ncu_srlnum0_xfer_en),
efu_fct_ctl_msff_ctl_macro__width_1 ncu_sernum1_dshift_reg
.scan_in(ncu_sernum1_dshift_reg_scanin),
.scan_out(ncu_sernum1_dshift_reg_scanout),
.din (ncu_sernum1_dec & (local_fuse_ashift_nxt | local_fuse_dshift_nxt)),
.dout (efu_ncu_srlnum1_xfer_en),
efu_fct_ctl_msff_ctl_macro__width_1 ncu_sernum2_dshift_reg
.scan_in(ncu_sernum2_dshift_reg_scanin),
.scan_out(ncu_sernum2_dshift_reg_scanout),
.din (ncu_sernum2_dec & (local_fuse_ashift_nxt | local_fuse_dshift_nxt)),
.dout (efu_ncu_srlnum2_xfer_en),
efu_fct_ctl_msff_ctl_macro__width_1 ncu_fusestat_dshift_reg
.scan_in(ncu_fusestat_dshift_reg_scanin),
.scan_out(ncu_fusestat_dshift_reg_scanout),
.din (ncu_fusestat_dec & (local_fuse_ashift_nxt | local_fuse_dshift_nxt)),
.dout (efu_ncu_fusestat_xfer_en),
wire [31:0] tck_shft_data_nxt;
wire updtdr_snc1_ff,updtdr_snc2_ff,updtdr_hist_ff;
cl_sc1_clksyncff_4x ff_updtdr_slice
.si(ff_updtdr_slice_scanin),
.so(ff_updtdr_slice_scanout),
cl_sc1_clksyncff_4x ff_updtdr_slice1
.si(ff_updtdr_slice1_scanin),
.so(ff_updtdr_slice1_scanout),
cl_sc1_clksyncff_4x ff_updtdr_slice2
.si(ff_updtdr_slice2_scanin),
.so(ff_updtdr_slice2_scanout),
//cl_sc1_clksyncff_4x ff_updtdr_slice (width=3)
// .si(ff_updtdr_slice_scanin),
// .so(ff_updtdr_slice_scanout),
// .q ({updtdr_sync1,updtdr_sync2,updtdr_hist_ff}),
// .d ({tcu_efu_updatedr,updtdr_sync1,updtdr_sync2}),
assign update_dr_jbus = updtdr_sync2 & ~updtdr_hist_ff ;
///////////////////////////////////////////////////////////////////
cl_sc1_clksyncff_4x ff_read_en_slice
.si ( ff_read_en_slice_scanin ),
.so ( ff_read_en_slice_scanout ),
cl_sc1_clksyncff_4x ff_read_en_slice1
.si ( ff_read_en_slice1_scanin ),
.so ( ff_read_en_slice1_scanout ),
cl_sc1_clksyncff_4x ff_read_en_slice2
.si ( ff_read_en_slice2_scanin ),
.so ( ff_read_en_slice2_scanout ),
//msff_ctl_macro ff_read_en_slice (width=3)
// .scan_in(ff_read_en_slice_scanin),
// .scan_out(ff_read_en_slice_scanout),
// .dout ({read_en_sync1,read_en_sync2,read_en_hist_ff}),
// .din ({tcu_efu_read_en,read_en_sync1,read_en_sync2}),
assign local_read_en = read_en_sync2 & ~read_en_hist_ff ;
///////////////////////////////////////////////////////////////////
//msff_ctl_macro ff_read_start_slice (width=3)
// .scan_in(ff_read_start_slice_scanin),
// .scan_out(ff_read_start_slice_scanout),
// .dout ({read_start_sync1,read_start_sync2,read_start_hist_ff}),
// .din ({tcu_efu_read_start,read_start_sync1,read_start_sync2}),
//msff_ctl_macro ff_read_start_2_slice (width=1)
// .scan_in(ff_read_start_2_slice_scanin),
// .scan_out(ff_read_start_2_slice_scanout),
// .dout (read_start_sync1),
// .din (tcu_efu_read_start),
efu_fct_ctl_msff_ctl_macro__width_1 ff_read_start_0_slice
.scan_in(ff_read_start_0_slice_scanin),
.scan_out(ff_read_start_0_slice_scanout),
.dout (read_start_hist_ff),
efu_fct_ctl_msff_ctl_macro__en_1__width_1 ff_read_start_1_slice
.scan_in(ff_read_start_1_slice_scanin),
.scan_out(ff_read_start_1_slice_scanout),
.dout (read_start_sync2),
// .din (read_start_sync1),
.din (tcu_efu_read_start),
// .en (cmp_io_sync_en_r2),
efu_fct_ctl_msff_ctl_macro__width_1 ff_cmp_io_sync_en
.scan_in(ff_cmp_io_sync_en_scanin),
.scan_out(ff_cmp_io_sync_en_scanout),
.dout (cmp_io_sync_en_r1),
//msff_ctl_macro ff_cmp_io_sync_en_r1 (width=1)
// .scan_in(ff_cmp_io_sync_en_r1_scanin),
// .scan_out(ff_cmp_io_sync_en_r1_scanout),
// .dout (cmp_io_sync_en_r2),
// .din (cmp_io_sync_en_r1),
assign local_efu_read_start = read_start_sync2 & ~read_start_hist_ff ;
///////////////////////////////////////////////////////////////////
cl_sc1_clksyncff_4x ff_fuse_bypass_slice
.si ( ff_fuse_bypass_slice_scanin ),
.so ( ff_fuse_bypass_slice_scanout ),
.d ( tcu_efu_fuse_bypass ),
.q ( fuse_bypass_sync1 ),
cl_sc1_clksyncff_4x ff_fuse_bypass_slice1
.si ( ff_fuse_bypass_slice_1_scanin ),
.so ( ff_fuse_bypass_slice_1_scanout ),
.d ( fuse_bypass_sync1 ),
.q ( fuse_bypass_sync2 ),
cl_sc1_clksyncff_4x ff_fuse_bypass_slice2
.si ( ff_fuse_bypass_slice_2_scanin ),
.so ( ff_fuse_bypass_slice_2_scanout ),
.d ( fuse_bypass_sync2 ),
.q ( fuse_bypass_hist_ff ),
//msff_ctl_macro ff_fuse_bypass_slice (width=3)
// .scan_in(ff_fuse_bypass_slice_scanin),
// .scan_out(ff_fuse_bypass_slice_scanout),
// .dout ({fuse_bypass_sync1,fuse_bypass_sync2,fuse_bypass_hist_ff}),
// .din ({tcu_efu_fuse_bypass,fuse_bypass_sync1,fuse_bypass_sync2}),
assign local_fuse_bypass = fuse_bypass_sync2 & ~fuse_bypass_hist_ff ;
///////////////////////////////////////////////////////////////////
cl_sc1_clksyncff_4x ff_dest_sample_slice
.si ( ff_dest_sample_slice_scanin ),
.so ( ff_dest_sample_slice_scanout ),
.d ( tcu_efu_dest_sample ),
.q ( dest_sample_sync1 ),
cl_sc1_clksyncff_4x ff_dest_sample_slice1
.si ( ff_dest_sample_slice_1_scanin ),
.so ( ff_dest_sample_slice_1_scanout ),
.d ( dest_sample_sync1 ),
.q ( dest_sample_sync2 ),
cl_sc1_clksyncff_4x ff_dest_sample_slice2
.si ( ff_dest_sample_slice_2_scanin ),
.so ( ff_dest_sample_slice_2_scanout ),
.d ( dest_sample_sync2 ),
.q ( dest_sample_hist_ff ),
//msff_ctl_macro ff_dest_sample_slice (width=3)
// .scan_in(ff_dest_sample_slice_scanin),
// .scan_out(ff_dest_sample_slice_scanout),
// .dout ({dest_sample_sync1,dest_sample_sync2,dest_sample_hist_ff}),
// .din ({tcu_efu_dest_sample,dest_sample_sync1,dest_sample_sync2}),
assign local_dest_sample = dest_sample_sync2 & ~dest_sample_hist_ff ;
///////////////////////////////////////////////////////////////////
assign w_mux_shift_retain[31:0] = tcu_efu_shiftdr ? {tck_shft_data_ff[30:0], tcu_efu_data_in} : tck_shft_data_ff[31:0] ;
assign tck_shft_data_nxt[31:0] = tcu_efu_capturedr ? read_data_ff[31:0] : w_mux_shift_retain[31:0] ;
efu_fct_ctl_msff_ctl_macro__width_32 ff_tck_shift_data_nxt
.scan_in(ff_tck_shift_data_nxt_scanin),
.scan_out(ff_tck_shift_data_nxt_scanout),
.dout (tck_shft_data_ff[31:0]),
.din (tck_shft_data_nxt[31:0]),
assign efu_tcu_data_out = tck_shft_data_ff[31] ;
///////////////////////////////////////////////////////////////////
cl_sc1_clksyncff_4x ff_sync1_rowaddr6_1
.si(ff_sync1_rowaddr_6_1_scanin),
.so(ff_sync1_rowaddr_6_1_scanout),
.q (sync_tcu_efu_rowaddr6),
cl_sc1_clksyncff_4x ff_sync1_rowaddr5_1
.si(ff_sync1_rowaddr_5_1_scanin),
.so(ff_sync1_rowaddr_5_1_scanout),
.q (sync_tcu_efu_rowaddr5),
cl_sc1_clksyncff_4x ff_sync1_rowaddr4_1
.si(ff_sync1_rowaddr_4_1_scanin),
.so(ff_sync1_rowaddr_4_1_scanout),
.q (sync_tcu_efu_rowaddr4),
cl_sc1_clksyncff_4x ff_sync1_rowaddr3_1
.si(ff_sync1_rowaddr_3_1_scanin),
.so(ff_sync1_rowaddr_3_1_scanout),
.q (sync_tcu_efu_rowaddr3),
cl_sc1_clksyncff_4x ff_sync1_rowaddr2_1
.si(ff_sync1_rowaddr_2_1_scanin),
.so(ff_sync1_rowaddr_2_1_scanout),
.q (sync_tcu_efu_rowaddr2),
cl_sc1_clksyncff_4x ff_sync1_rowaddr1_1
.si(ff_sync1_rowaddr_1_1_scanin),
.so(ff_sync1_rowaddr_1_1_scanout),
.q (sync_tcu_efu_rowaddr1),
cl_sc1_clksyncff_4x ff_sync1_rowaddr_1
.si(ff_sync1_rowaddr_0_1_scanin),
.so(ff_sync1_rowaddr_0_1_scanout),
.q (sync_tcu_efu_rowaddr0),
cl_sc1_clksyncff_4x ff_sync1_rowaddr6
.si(ff_sync1_rowaddr_6_scanin),
.so(ff_sync1_rowaddr_6_scanout),
cl_sc1_clksyncff_4x ff_sync1_rowaddr5
.si(ff_sync1_rowaddr_5_scanin),
.so(ff_sync1_rowaddr_5_scanout),
cl_sc1_clksyncff_4x ff_sync1_rowaddr4
.si(ff_sync1_rowaddr_4_scanin),
.so(ff_sync1_rowaddr_4_scanout),
cl_sc1_clksyncff_4x ff_sync1_rowaddr3
.si(ff_sync1_rowaddr_3_scanin),
.so(ff_sync1_rowaddr_3_scanout),
cl_sc1_clksyncff_4x ff_sync1_rowaddr2
.si(ff_sync1_rowaddr_2_scanin),
.so(ff_sync1_rowaddr_2_scanout),
cl_sc1_clksyncff_4x ff_sync1_rowaddr1
.si(ff_sync1_rowaddr_1_scanin),
.so(ff_sync1_rowaddr_1_scanout),
cl_sc1_clksyncff_4x ff_sync1_rowaddr
.si(ff_sync1_rowaddr_scanin),
.so(ff_sync1_rowaddr_scanout),
//msff_ctl_macro ff_sync1_rowaddr (width=7)
// .scan_in(ff_sync1_rowaddr_scanin),
// .scan_out(ff_sync1_rowaddr_scanout),
// .dout (sync1_rowaddress[6:0]),
// .din (tcu_efu_rowaddr[6:0]),
assign sync1_rowaddress[6:0] = {sync_tcu_efu_rowaddr6, sync_tcu_efu_rowaddr5, sync_tcu_efu_rowaddr4, sync_tcu_efu_rowaddr3, sync_tcu_efu_rowaddr2, sync_tcu_efu_rowaddr1, sync_tcu_efu_rowaddr0};
///////////////////////////////////////////////////////////////////
cl_sc1_clksyncff_4x ff_sync1_coladdr4_1
.si(ff_sync1_coladdr_4_1_scanin),
.so(ff_sync1_coladdr_4_1_scanout),
.q (sync_tcu_efu_coladdr4),
cl_sc1_clksyncff_4x ff_sync1_coladdr3_1
.si(ff_sync1_coladdr_3_1_scanin),
.so(ff_sync1_coladdr_3_1_scanout),
.q (sync_tcu_efu_coladdr3),
cl_sc1_clksyncff_4x ff_sync1_coladdr2_1
.si(ff_sync1_coladdr_2_1_scanin),
.so(ff_sync1_coladdr_2_1_scanout),
.q (sync_tcu_efu_coladdr2),
cl_sc1_clksyncff_4x ff_sync1_coladdr1_1
.si(ff_sync1_coladdr_1_1_scanin),
.so(ff_sync1_coladdr_1_1_scanout),
.q (sync_tcu_efu_coladdr1),
cl_sc1_clksyncff_4x ff_sync1_coladdr_1
.si(ff_sync1_coladdr_0_1_scanin),
.so(ff_sync1_coladdr_0_1_scanout),
.q (sync_tcu_efu_coladdr0),
cl_sc1_clksyncff_4x ff_sync1_coladdr4
.si(ff_sync1_coladdr_4_scanin),
.so(ff_sync1_coladdr_4_scanout),
cl_sc1_clksyncff_4x ff_sync1_coladdr3
.si(ff_sync1_coladdr_3_scanin),
.so(ff_sync1_coladdr_3_scanout),
cl_sc1_clksyncff_4x ff_sync1_coladdr2
.si(ff_sync1_coladdr_2_scanin),
.so(ff_sync1_coladdr_2_scanout),
cl_sc1_clksyncff_4x ff_sync1_coladdr1
.si(ff_sync1_coladdr_1_scanin),
.so(ff_sync1_coladdr_1_scanout),
cl_sc1_clksyncff_4x ff_sync1_coladdr
.si(ff_sync1_coladdr_scanin),
.so(ff_sync1_coladdr_scanout),
assign sync_tcu_efu_coladdr[4:0] = {sync_tcu_efu_coladdr4, sync_tcu_efu_coladdr3, sync_tcu_efu_coladdr2, sync_tcu_efu_coladdr1, sync_tcu_efu_coladdr0};
///////////////////////////////////////////////////////////////////
cl_sc1_clksyncff_4x ff_tcu_efu_read_mode_bit1
.si(ff_tcu_efu_read_mode_bit1_scanin),
.so(ff_tcu_efu_read_mode_bit1_scanout),
.q (tcu_efu_read_mode1_1),
.d (tcu_efu_read_mode[1]),
cl_sc1_clksyncff_4x ff_tcu_efu_read_mode_bit1_1
.si(ff_tcu_efu_read_mode_bit1_1_scanin),
.so(ff_tcu_efu_read_mode_bit1_1_scanout),
.q (sync_tcu_efu_read_mode1),
.d (tcu_efu_read_mode1_1),
cl_sc1_clksyncff_4x ff_tcu_efu_read_mode_bit0
.si(ff_tcu_efu_read_mode_bit0_scanin),
.so(ff_tcu_efu_read_mode_bit0_scanout),
.q (tcu_efu_read_mode0_1),
.d (tcu_efu_read_mode[0]),
cl_sc1_clksyncff_4x ff_tcu_efu_read_mode_bit0_1
.si(ff_tcu_efu_read_mode_bit0_1_scanin),
.so(ff_tcu_efu_read_mode_bit0_1_scanout),
.q (sync_tcu_efu_read_mode0),
.d (tcu_efu_read_mode0_1),
assign sync_tcu_efu_read_mode[1:0] = {sync_tcu_efu_read_mode1, sync_tcu_efu_read_mode0};
///////////////////////////////////////////////////////////////////
cl_sc1_clksyncff_4x ff_power_down_sync_slice
.si(ff_power_down_sync_slice_scanin),
.so(ff_power_down_sync_slice_scanout),
.q (inhibit_power_down_sync_l),
.d (tcu_efu_read_mode[2]),
cl_sc1_clksyncff_4x ff_power_down_sync_slice1
.si(ff_power_down_sync_slice_1_scanin),
.so(ff_power_down_sync_slice_1_scanout),
.q (inhibit_power_down_l),
.d (inhibit_power_down_sync_l),
//msff_ctl_macro ff_power_down_sync_slice (width=2)
// .scan_in(ff_power_down_sync_slice_scanin),
// .scan_out(ff_power_down_sync_slice_scanout),
// .dout ({inhibit_power_down_sync_l,inhibit_power_down_l}),
// .din ({tcu_efu_read_mode[2],inhibit_power_down_sync_l}),
///////////////////////////////////////////////////////////////////
efu_fct_ctl_spare_ctl_macro__num_4 spares (
.scan_out(spares_scanout),
assign {sbc_efa_margin1_rd, sbc_efa_margin0_rd} = sync_tcu_efu_read_mode[1:0];
assign sbc_efa_sup_det_rd = addr_cnt_ff[6];
assign sbc_efa_word_addr[5:0] = addr_cnt_ff[5:0];
assign sbc_efa_bit_addr[4:0] = sync_tcu_efu_coladdr[4:0];
assign sbc_efa_power_down = efa_array_power_down_ff;
assign efa_out_data[31:0] = efa_sbc_data[31:0];
assign sbc_efa_read_en = mrd_state_rd_array; // & testmode_l;
assign ff_pulse_read_data_ff_vld_scanin = scan_in;
assign mrd_63_to_0_ff_scanin = ff_pulse_read_data_ff_vld_scanout;
assign ff_mrd_zero_scanin = mrd_63_to_0_ff_scanout;
assign enable_efa_por_reg_scanin = ff_mrd_zero_scanout ;
assign efa_array_power_down_reg_scanin = enable_efa_por_reg_scanout;
assign seq_state_reg_scanin = efa_array_power_down_reg_scanout;
assign addr_cnt_reg_scanin = seq_state_reg_scanout ;
assign mrd_state_reg_scanin = addr_cnt_reg_scanout ;
assign mrd_cnt_reg_scanin = mrd_state_reg_scanout ;
assign read_data_reg_scanin = mrd_cnt_reg_scanout ;
assign l2rd_id_reg_scanin = read_data_reg_scanout ;
assign rslt_status_reg_scanin = l2rd_id_reg_scanout ;
assign local_fuse_data_reg_scanin = rslt_status_reg_scanout ;
assign ncu_coreavail_dshift_reg_scanin = local_fuse_data_reg_scanout;
assign ncu_bankavail_dshift_reg_scanin = ncu_coreavail_dshift_reg_scanout;
assign ncu_sernum0_dshift_reg_scanin = ncu_bankavail_dshift_reg_scanout;
assign ncu_sernum1_dshift_reg_scanin = ncu_sernum0_dshift_reg_scanout;
assign ncu_sernum2_dshift_reg_scanin = ncu_sernum1_dshift_reg_scanout;
assign ncu_fusestat_dshift_reg_scanin = ncu_sernum2_dshift_reg_scanout;
assign ff_updtdr_slice_scanin = ncu_fusestat_dshift_reg_scanout;
assign ff_updtdr_slice1_scanin = ff_updtdr_slice_scanout;
assign ff_updtdr_slice2_scanin = ff_updtdr_slice1_scanout;
assign ff_read_en_slice_scanin = ff_updtdr_slice2_scanout;
assign ff_read_en_slice1_scanin = ff_read_en_slice_scanout;
assign ff_read_en_slice2_scanin = ff_read_en_slice1_scanout;
//assign ff_fuse_bypass_slice_scanin = ff_read_start_slice_scanout ;
//assign ff_read_start_2_slice_scanin = ff_read_en_slice_scanout;
assign ff_read_start_1_slice_scanin = ff_read_en_slice2_scanout;
assign ff_read_start_0_slice_scanin = ff_read_start_1_slice_scanout;
assign ff_fuse_bypass_slice_scanin = ff_read_start_0_slice_scanout ;
assign ff_fuse_bypass_slice_1_scanin = ff_fuse_bypass_slice_scanout;
assign ff_fuse_bypass_slice_2_scanin = ff_fuse_bypass_slice_1_scanout;
assign ff_dest_sample_slice_scanin = ff_fuse_bypass_slice_2_scanout;
assign ff_dest_sample_slice_1_scanin = ff_dest_sample_slice_scanout;
assign ff_dest_sample_slice_2_scanin = ff_dest_sample_slice_1_scanout;
assign ff_tck_shift_data_nxt_scanin = ff_dest_sample_slice_2_scanout;
assign ff_sync1_coladdr_4_1_scanin = ff_tck_shift_data_nxt_scanout;
assign ff_sync1_coladdr_3_1_scanin = ff_sync1_coladdr_4_1_scanout;
assign ff_sync1_coladdr_2_1_scanin = ff_sync1_coladdr_3_1_scanout;
assign ff_sync1_coladdr_1_1_scanin = ff_sync1_coladdr_2_1_scanout;
assign ff_sync1_coladdr_0_1_scanin = ff_sync1_coladdr_1_1_scanout;
assign ff_sync1_coladdr_4_scanin = ff_sync1_coladdr_0_1_scanout;
assign ff_sync1_coladdr_3_scanin = ff_sync1_coladdr_4_scanout;
assign ff_sync1_coladdr_2_scanin = ff_sync1_coladdr_3_scanout;
assign ff_sync1_coladdr_1_scanin = ff_sync1_coladdr_2_scanout;
assign ff_sync1_coladdr_scanin = ff_sync1_coladdr_1_scanout;
assign ff_sync1_rowaddr_scanin = ff_sync1_coladdr_scanout;
assign ff_sync1_rowaddr_6_scanin = ff_sync1_rowaddr_scanout;
assign ff_sync1_rowaddr_5_scanin = ff_sync1_rowaddr_6_scanout;
assign ff_sync1_rowaddr_4_scanin = ff_sync1_rowaddr_5_scanout;
assign ff_sync1_rowaddr_3_scanin = ff_sync1_rowaddr_4_scanout;
assign ff_sync1_rowaddr_2_scanin = ff_sync1_rowaddr_3_scanout;
assign ff_sync1_rowaddr_1_scanin = ff_sync1_rowaddr_2_scanout;
assign ff_sync1_rowaddr_6_1_scanin = ff_sync1_rowaddr_1_scanout;
assign ff_sync1_rowaddr_5_1_scanin = ff_sync1_rowaddr_6_1_scanout;
assign ff_sync1_rowaddr_4_1_scanin = ff_sync1_rowaddr_5_1_scanout;
assign ff_sync1_rowaddr_3_1_scanin = ff_sync1_rowaddr_4_1_scanout;
assign ff_sync1_rowaddr_2_1_scanin = ff_sync1_rowaddr_3_1_scanout;
assign ff_sync1_rowaddr_1_1_scanin = ff_sync1_rowaddr_2_1_scanout;
assign ff_sync1_rowaddr_0_1_scanin = ff_sync1_rowaddr_1_1_scanout;
assign ff_power_down_sync_slice_scanin = ff_sync1_rowaddr_0_1_scanout;
assign ff_power_down_sync_slice_1_scanin = ff_power_down_sync_slice_scanout;
assign ff_cmp_io_sync_en_scanin = ff_power_down_sync_slice_1_scanout;
assign ff_tcu_efu_read_mode_bit1_scanin = ff_cmp_io_sync_en_scanout;
assign ff_tcu_efu_read_mode_bit1_1_scanin = ff_tcu_efu_read_mode_bit1_scanout;
assign ff_tcu_efu_read_mode_bit0_scanin = ff_tcu_efu_read_mode_bit1_1_scanout;
assign ff_tcu_efu_read_mode_bit0_1_scanin = ff_tcu_efu_read_mode_bit0_scanout;
assign spares_scanin = ff_tcu_efu_read_mode_bit0_1_scanout;
//assign ff_cmp_io_sync_en_r1_scanin = ff_cmp_io_sync_en_scanout;
//assign spares_scanin = ff_cmp_io_sync_en_r1_scanout;
assign scan_out = spares_scanout;
// any PARAMS parms go into naming of macro
module efu_fct_ctl_l1clkhdr_ctl_macro (
// any PARAMS parms go into naming of macro
module efu_fct_ctl_msff_ctl_macro__width_1 (
assign fdin[0:0] = din[0:0];
// any PARAMS parms go into naming of macro
module efu_fct_ctl_msff_ctl_macro__width_4 (
assign fdin[3:0] = din[3:0];
// any PARAMS parms go into naming of macro
module efu_fct_ctl_msff_ctl_macro__en_1__width_7 (
assign fdin[6:0] = (din[6:0] & {7{en}}) | (dout[6:0] & ~{7{en}});
// any PARAMS parms go into naming of macro
module efu_fct_ctl_msff_ctl_macro__width_3 (
assign fdin[2:0] = din[2:0];
// any PARAMS parms go into naming of macro
module efu_fct_ctl_msff_ctl_macro__width_9 (
assign fdin[8:0] = din[8:0];
// any PARAMS parms go into naming of macro
module efu_fct_ctl_msff_ctl_macro__en_1__width_32 (
assign fdin[31:0] = (din[31:0] & {32{en}}) | (dout[31:0] & ~{32{en}});
.so({so[30:0],scan_out}),
// any PARAMS parms go into naming of macro
module efu_fct_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 efu_fct_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 efu_fct_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 efu_fct_ctl_msff_ctl_macro__width_32 (
assign fdin[31:0] = din[31:0];
.so({so[30: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 efu_fct_ctl_spare_ctl_macro__num_4 (
wire spare0_buf_32x_unused;
wire spare0_nand3_8x_unused;
wire spare0_inv_8x_unused;
wire spare0_aoi22_4x_unused;
wire spare0_buf_8x_unused;
wire spare0_oai22_4x_unused;
wire spare0_inv_16x_unused;
wire spare0_nand2_16x_unused;
wire spare0_nor3_4x_unused;
wire spare0_nand2_8x_unused;
wire spare0_buf_16x_unused;
wire spare0_nor2_16x_unused;
wire spare0_inv_32x_unused;
wire spare1_buf_32x_unused;
wire spare1_nand3_8x_unused;
wire spare1_inv_8x_unused;
wire spare1_aoi22_4x_unused;
wire spare1_buf_8x_unused;
wire spare1_oai22_4x_unused;
wire spare1_inv_16x_unused;
wire spare1_nand2_16x_unused;
wire spare1_nor3_4x_unused;
wire spare1_nand2_8x_unused;
wire spare1_buf_16x_unused;
wire spare1_nor2_16x_unused;
wire spare1_inv_32x_unused;
wire spare2_buf_32x_unused;
wire spare2_nand3_8x_unused;
wire spare2_inv_8x_unused;
wire spare2_aoi22_4x_unused;
wire spare2_buf_8x_unused;
wire spare2_oai22_4x_unused;
wire spare2_inv_16x_unused;
wire spare2_nand2_16x_unused;
wire spare2_nor3_4x_unused;
wire spare2_nand2_8x_unused;
wire spare2_buf_16x_unused;
wire spare2_nor2_16x_unused;
wire spare2_inv_32x_unused;
wire spare3_buf_32x_unused;
wire spare3_nand3_8x_unused;
wire spare3_inv_8x_unused;
wire spare3_aoi22_4x_unused;
wire spare3_buf_8x_unused;
wire spare3_oai22_4x_unused;
wire spare3_inv_16x_unused;
wire spare3_nand2_16x_unused;
wire spare3_nor3_4x_unused;
wire spare3_nand2_8x_unused;
wire spare3_buf_16x_unused;
wire spare3_nor2_16x_unused;
wire spare3_inv_32x_unused;
cl_sc1_msff_8x spare0_flop (.l1clk(l1clk),
cl_u1_buf_32x spare0_buf_32x (.in(1'b1),
.out(spare0_buf_32x_unused));
cl_u1_nand3_8x spare0_nand3_8x (.in0(1'b1),
.out(spare0_nand3_8x_unused));
cl_u1_inv_8x spare0_inv_8x (.in(1'b1),
.out(spare0_inv_8x_unused));
cl_u1_aoi22_4x spare0_aoi22_4x (.in00(1'b1),
.out(spare0_aoi22_4x_unused));
cl_u1_buf_8x spare0_buf_8x (.in(1'b1),
.out(spare0_buf_8x_unused));
cl_u1_oai22_4x spare0_oai22_4x (.in00(1'b1),
.out(spare0_oai22_4x_unused));
cl_u1_inv_16x spare0_inv_16x (.in(1'b1),
.out(spare0_inv_16x_unused));
cl_u1_nand2_16x spare0_nand2_16x (.in0(1'b1),
.out(spare0_nand2_16x_unused));
cl_u1_nor3_4x spare0_nor3_4x (.in0(1'b0),
.out(spare0_nor3_4x_unused));
cl_u1_nand2_8x spare0_nand2_8x (.in0(1'b1),
.out(spare0_nand2_8x_unused));
cl_u1_buf_16x spare0_buf_16x (.in(1'b1),
.out(spare0_buf_16x_unused));
cl_u1_nor2_16x spare0_nor2_16x (.in0(1'b0),
.out(spare0_nor2_16x_unused));
cl_u1_inv_32x spare0_inv_32x (.in(1'b1),
.out(spare0_inv_32x_unused));
cl_sc1_msff_8x spare1_flop (.l1clk(l1clk),
cl_u1_buf_32x spare1_buf_32x (.in(1'b1),
.out(spare1_buf_32x_unused));
cl_u1_nand3_8x spare1_nand3_8x (.in0(1'b1),
.out(spare1_nand3_8x_unused));
cl_u1_inv_8x spare1_inv_8x (.in(1'b1),
.out(spare1_inv_8x_unused));
cl_u1_aoi22_4x spare1_aoi22_4x (.in00(1'b1),
.out(spare1_aoi22_4x_unused));
cl_u1_buf_8x spare1_buf_8x (.in(1'b1),
.out(spare1_buf_8x_unused));
cl_u1_oai22_4x spare1_oai22_4x (.in00(1'b1),
.out(spare1_oai22_4x_unused));
cl_u1_inv_16x spare1_inv_16x (.in(1'b1),
.out(spare1_inv_16x_unused));
cl_u1_nand2_16x spare1_nand2_16x (.in0(1'b1),
.out(spare1_nand2_16x_unused));
cl_u1_nor3_4x spare1_nor3_4x (.in0(1'b0),
.out(spare1_nor3_4x_unused));
cl_u1_nand2_8x spare1_nand2_8x (.in0(1'b1),
.out(spare1_nand2_8x_unused));
cl_u1_buf_16x spare1_buf_16x (.in(1'b1),
.out(spare1_buf_16x_unused));
cl_u1_nor2_16x spare1_nor2_16x (.in0(1'b0),
.out(spare1_nor2_16x_unused));
cl_u1_inv_32x spare1_inv_32x (.in(1'b1),
.out(spare1_inv_32x_unused));
cl_sc1_msff_8x spare2_flop (.l1clk(l1clk),
cl_u1_buf_32x spare2_buf_32x (.in(1'b1),
.out(spare2_buf_32x_unused));
cl_u1_nand3_8x spare2_nand3_8x (.in0(1'b1),
.out(spare2_nand3_8x_unused));
cl_u1_inv_8x spare2_inv_8x (.in(1'b1),
.out(spare2_inv_8x_unused));
cl_u1_aoi22_4x spare2_aoi22_4x (.in00(1'b1),
.out(spare2_aoi22_4x_unused));
cl_u1_buf_8x spare2_buf_8x (.in(1'b1),
.out(spare2_buf_8x_unused));
cl_u1_oai22_4x spare2_oai22_4x (.in00(1'b1),
.out(spare2_oai22_4x_unused));
cl_u1_inv_16x spare2_inv_16x (.in(1'b1),
.out(spare2_inv_16x_unused));
cl_u1_nand2_16x spare2_nand2_16x (.in0(1'b1),
.out(spare2_nand2_16x_unused));
cl_u1_nor3_4x spare2_nor3_4x (.in0(1'b0),
.out(spare2_nor3_4x_unused));
cl_u1_nand2_8x spare2_nand2_8x (.in0(1'b1),
.out(spare2_nand2_8x_unused));
cl_u1_buf_16x spare2_buf_16x (.in(1'b1),
.out(spare2_buf_16x_unused));
cl_u1_nor2_16x spare2_nor2_16x (.in0(1'b0),
.out(spare2_nor2_16x_unused));
cl_u1_inv_32x spare2_inv_32x (.in(1'b1),
.out(spare2_inv_32x_unused));
cl_sc1_msff_8x spare3_flop (.l1clk(l1clk),
cl_u1_buf_32x spare3_buf_32x (.in(1'b1),
.out(spare3_buf_32x_unused));
cl_u1_nand3_8x spare3_nand3_8x (.in0(1'b1),
.out(spare3_nand3_8x_unused));
cl_u1_inv_8x spare3_inv_8x (.in(1'b1),
.out(spare3_inv_8x_unused));
cl_u1_aoi22_4x spare3_aoi22_4x (.in00(1'b1),
.out(spare3_aoi22_4x_unused));
cl_u1_buf_8x spare3_buf_8x (.in(1'b1),
.out(spare3_buf_8x_unused));
cl_u1_oai22_4x spare3_oai22_4x (.in00(1'b1),
.out(spare3_oai22_4x_unused));
cl_u1_inv_16x spare3_inv_16x (.in(1'b1),
.out(spare3_inv_16x_unused));
cl_u1_nand2_16x spare3_nand2_16x (.in0(1'b1),
.out(spare3_nand2_16x_unused));
cl_u1_nor3_4x spare3_nor3_4x (.in0(1'b0),
.out(spare3_nor3_4x_unused));
cl_u1_nand2_8x spare3_nand2_8x (.in0(1'b1),
.out(spare3_nand2_8x_unused));
cl_u1_buf_16x spare3_buf_16x (.in(1'b1),
.out(spare3_buf_16x_unused));
cl_u1_nor2_16x spare3_nor2_16x (.in0(1'b0),
.out(spare3_nor2_16x_unused));
cl_u1_inv_32x spare3_inv_32x (.in(1'b1),
.out(spare3_inv_32x_unused));