// ========== Copyright Header Begin ==========================================
// OpenSPARC T2 Processor File: niu_zcp_slv.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 ============================================
/*****************************************************************
* File Name : niu_zcp_slv.v
* Description : It contains ZCP read/write decoder, registers,
* Parent Module: niu_zcp.v
* Copyright (c) 2020, Sun Microsystems, Inc.
* Sun Proprietary and Confidential
****************************************************************/
module niu_zcp_slv(/*AUTOARG*/
zcp_debug_sel, ecc_chk_bypass0, double_bit_err0, single_bit_err0,
last_line_err0, second_line_err0, first_line_err0,
ecc_chk_bypass1, double_bit_err1, single_bit_err1, last_line_err1,
second_line_err1, first_line_err1, ecc_chk_bypass2,
double_bit_err2, single_bit_err2, last_line_err2,
second_line_err2, first_line_err2, ecc_chk_bypass3,
double_bit_err3, single_bit_err3, last_line_err3,
second_line_err3, first_line_err3, zcp_pio_ack, zcp_pio_rdata,
zcp_pio_err, zcp_pio_intr, handle, fn, default_rdc, table_rdc,
zc_rdc, tt_en, zcp_32bit_mode, req_dis, rsp_dis, par_chk_dis,
ecc_chk_dis, dmaw_threshold, reset_cfifo0, reset_cfifo1,
reset_cfifo2, reset_cfifo3, training_vector, slv_request,
slv_tt_index, slv_ram_addr, slv_ram_wdata, slv_ram_be,
va_ram_rwen, va_ram_rwen0, va_ram_rwen1, va_ram_rwen2,
va_ram_rwen3, va_ram_rwen4, va_ram_rwen5, va_ram_rwen6,
va_ram_rwen7, va_ram_ren, va_ram_wen, va_ram_ren0, va_ram_wen0,
va_ram_ren1, va_ram_wen1, va_ram_ren2, va_ram_wen2, va_ram_ren3,
va_ram_wen3, va_ram_ren4, va_ram_wen4, va_ram_ren5, va_ram_wen5,
va_ram_ren6, va_ram_wen6, va_ram_ren7, va_ram_wen7, st_ram_ren,
st_ram_wen, dn_ram_ren, dn_ram_wen, cfifo_ren0, cfifo_wen0,
cfifo_ren1, cfifo_wen1, cfifo_ren2, cfifo_wen2, cfifo_ren3,
cfifo_wen3, tt_offset0, tt_index_start0, tt_index_end0,
tt_index_chk0, tt_offset1, tt_index_start1, tt_index_end1,
tt_index_chk1, tt_offset2, tt_index_start2, tt_index_end2,
tt_index_chk2, tt_offset3, tt_index_start3, tt_index_end3,
tt_index_chk3, ds_offset0, ds_offset1, ds_offset2, ds_offset3,
chk_bit_data, ram_access_state,
clk, slv_reset, kickoff_tt_reg, ififo_state, tt_state,
req_load_state, req_unload_state, rsp_load_state,
rsp_unload_state, ififo_overrun, set_tt_program_err,
zcp_tt_index_err, slv_tt_index_err, rsp_tt_index_err, va_ram_perr,
dn_ram_perr, st_ram_perr, rrfifo_overrun, rrfifo_underrun,
rspfifo_uncorr_err, pio_clients_addr, pio_clients_rd,
pio_clients_wdata, pio_zcp_sel, zcp_dmc_dat_err0,
zcp_dmc_dat_err1, zcp_dmc_dat_err2, zcp_dmc_dat_err3,
decode_default_rdc, decode_table_rdc, decode_zc_rdc, tt_rdc_reg,
fflp_rdc, rdmc_zcp_func_num, page_handle, slv_accepted,
vram_slv_rdata, sram_slv_rdata, dram_slv_rdata, cfifo_slv_rdata0,
cfifo_slv_rdata1, cfifo_slv_rdata2, cfifo_slv_rdata3
input [1:0] req_load_state;
input [1:0] req_unload_state;
input [3:0] rsp_load_state;
input [3:0] rsp_unload_state;
output [7:0] zcp_debug_sel;
input set_tt_program_err;
input rspfifo_uncorr_err;
output ecc_chk_bypass0; // per fifo ecc_chk disable
output ecc_chk_bypass1; // per fifo ecc_chk disable
output ecc_chk_bypass2; // per fifo ecc_chk disable
output ecc_chk_bypass3; // per fifo ecc_chk disable
// vlint flag_dangling_net_within_module off
// vlint flag_input_port_not_connected off
// vlint flag_net_has_no_load off
input [19:0] pio_clients_addr;
// vlint flag_dangling_net_within_module on
// vlint flag_input_port_not_connected on
// vlint flag_net_has_no_load on
input [31:0] pio_clients_wdata;
output [63:0] zcp_pio_rdata;
input decode_default_rdc;
input [31:0] rdmc_zcp_func_num;
input [`PMS15:0] page_handle; // 20 bit per handle
output [4:0] default_rdc;
output [10:0] dmaw_threshold;
output [31:0] training_vector;
output [11:0] slv_tt_index;
output [10:0] slv_ram_addr;
output [`DN_R] slv_ram_wdata;
output [16:0] slv_ram_be;
input [1023:0] vram_slv_rdata;
input [`ST_R] sram_slv_rdata;
input [`DN_R] dram_slv_rdata;
input [`CFIFO_W_R] cfifo_slv_rdata0;
input [`CFIFO_W_R] cfifo_slv_rdata1;
input [`CFIFO_W_R] cfifo_slv_rdata2;
input [`CFIFO_W_R] cfifo_slv_rdata3;
output [7:0] tt_offset0 ;
output [9:0] tt_index_start0 ;
output [9:0] tt_index_end0 ;
output [7:0] tt_offset1 ;
output [9:0] tt_index_start1 ;
output [9:0] tt_index_end1 ;
output [7:0] tt_offset2 ;
output [9:0] tt_index_start2 ;
output [9:0] tt_index_end2 ;
output [7:0] tt_offset3 ;
output [9:0] tt_index_start3 ;
output [9:0] tt_index_end3 ;
output [9:0] ds_offset0 ;
output [9:0] ds_offset1 ;
output [9:0] ds_offset2 ;
output [9:0] ds_offset3 ;
output [16:0] chk_bit_data ;
output [2:0] ram_access_state; // From niu_zcp_ram_access_sm of niu_zcp_ram_access_sm.v
// Beginning of automatic wires (for undeclared instantiated-module outputs)
wire ld_ram2reg; // From niu_zcp_ram_access_sm of niu_zcp_ram_access_sm.v
wire ram_ren; // From niu_zcp_ram_access_sm of niu_zcp_ram_access_sm.v
wire ram_wen; // From niu_zcp_ram_access_sm of niu_zcp_ram_access_sm.v
wire [21:0] reset = slv_reset;
wire reset10 = reset[10];
wire [31:0] ecc_err_ctl0;
wire [31:0] ecc_err_ctl1;
wire [31:0] ecc_err_ctl2;
wire [31:0] ecc_err_ctl3;
wire ecc_chk_bypass0; // per fifo ecc_chk disable
wire ecc_chk_bypass1; // per fifo ecc_chk disable
wire ecc_chk_bypass2; // per fifo ecc_chk disable
wire ecc_chk_bypass3; // per fifo ecc_chk disable
// vlint flag_variable_assign_never_reference off
// vlint flag_dangling_net_within_module off
// vlint flag_net_has_no_load off
// vlint flag_net_has_no_load on
// vlint flag_dangling_net_within_module on
// vlint flag_variable_assign_never_reference on
reg [63:0] zcp_pio_rdata;
reg non_qualified_addr_err;
wire [31:0] buf4_region_ctl;
wire [31:0] buf8_region_ctl;
wire [31:0] buf16_region_ctl;
wire [31:0] buf32_region_ctl;
wire [31:0] ds4_region_ctl;
wire [31:0] ds8_region_ctl;
wire [31:0] ds16_region_ctl;
wire [31:0] ds32_region_ctl;
wire [`ST_R] sram_slv_rdata;
wire [`DN_R] dram_slv_rdata;
wire [`CFIFO_W_R] cfifo_slv_rdata0;
wire [`CFIFO_W_R] cfifo_slv_rdata1;
wire [`CFIFO_W_R] cfifo_slv_rdata2;
wire [`CFIFO_W_R] cfifo_slv_rdata3;
// vlint flag_dangling_net_within_module off
// vlint flag_net_has_no_load off
// vlint flag_undeclared_name_in_module off
// vlint flag_dangling_net_within_module on
// vlint flag_net_has_no_load on
// vlint flag_undeclared_name_in_module on
wire [`DN_R] slv_ram_wdata;
wire zcp_dmc_dat_err0_stat;
wire zcp_dmc_dat_err1_stat;
wire zcp_dmc_dat_err2_stat;
wire zcp_dmc_dat_err3_stat;
wire [1:0] req_load_state;
wire [1:0] req_unload_state;
wire [3:0] rsp_load_state;
wire [3:0] rsp_unload_state;
wire zcp_tt_index_err_stat;
wire slv_tt_index_err_stat;
wire rsp_tt_index_err_stat;
wire tt_program_err_stat;
wire rspfifo_uncorr_err_stat;
wire rrfifo_overrun_stat;
wire rrfifo_underrun_stat;
// vlint flag_dangling_net_within_module off
// vlint flag_net_has_no_load off
// vlint flag_dangling_net_within_module on
// vlint flag_net_has_no_load on
/* ----------- Read and Write logic ------------------------ */
// regiser pio input signals
always @ (posedge clk) begin rd_wr <= pio_clients_rd; end
always @ (posedge clk) begin zcp_sel <= pio_zcp_sel; end
always @ (posedge clk) begin addr_reg <= pio_clients_addr[19:0]; end
always @ (posedge clk) begin wr_data <= pio_clients_wdata[31:0]; end
// vlint flag_dangling_net_within_module off
// vlint flag_net_has_no_load off
wire rd_en = zcp_sel & rd_wr;
wire rac_ok = zcp_sel_lead & rd_wr;
// vlint flag_dangling_net_within_module on
// vlint flag_net_has_no_load on
wire wr_en = zcp_sel_lead & (~rd_wr) & (~addr_reg[2]); // prohibit illegal 32bit write
zcp_pls_gen2 zcp_sel_pls_gen2(.sig_in(zcp_sel),
// register pio output signals
wire [31:0] rd_data_temp = addr_reg[2] ? 32'b0 : rd_data; // reserved field read.
always @ (posedge clk) begin zcp_pio_rdata <= {32'b0,rd_data_temp[31:0]}; end
begin zcp_sel_lead_d1 <= zcp_sel_lead;
zcp_sel_lead_d2 <= zcp_sel_lead_d1;
ackgen <= zcp_sel_lead_d2;
assign addr_err = non_qualified_addr_err & ackgen;
always @ (posedge clk) begin zcp_pio_err <= addr_err; end
always @ (/*AUTOSENSE*/addr_reg or buf16_region_ctl
or buf32_region_ctl or buf4_region_ctl or buf8_region_ctl
or chk_bit_data or config1 or ds16_region_ctl
or ds32_region_ctl or ds4_region_ctl or ds8_region_ctl
or ecc_err_ctl0 or ecc_err_ctl1 or ecc_err_ctl2
or ecc_err_ctl3 or ififo_state or kickoff_tt_reg or mask
or ram_addr or ram_be or ram_data0 or ram_data1 or ram_data2
or ram_data3 or ram_data4 or rdc0 or rdc1 or rdc10 or rdc100
or rdc101 or rdc102 or rdc103 or rdc104 or rdc105 or rdc106
or rdc107 or rdc108 or rdc109 or rdc11 or rdc110 or rdc111
or rdc112 or rdc113 or rdc114 or rdc115 or rdc116 or rdc117
or rdc118 or rdc119 or rdc12 or rdc120 or rdc121 or rdc122
or rdc123 or rdc124 or rdc125 or rdc126 or rdc127 or rdc13
or rdc14 or rdc15 or rdc16 or rdc17 or rdc18 or rdc19
or rdc2 or rdc20 or rdc21 or rdc22 or rdc23 or rdc24
or rdc25 or rdc26 or rdc27 or rdc28 or rdc29 or rdc3
or rdc30 or rdc31 or rdc32 or rdc33 or rdc34 or rdc35
or rdc36 or rdc37 or rdc38 or rdc39 or rdc4 or rdc40
or rdc41 or rdc42 or rdc43 or rdc44 or rdc45 or rdc46
or rdc47 or rdc48 or rdc49 or rdc5 or rdc50 or rdc51
or rdc52 or rdc53 or rdc54 or rdc55 or rdc56 or rdc57
or rdc58 or rdc59 or rdc6 or rdc60 or rdc61 or rdc62
or rdc63 or rdc64 or rdc65 or rdc66 or rdc67 or rdc68
or rdc69 or rdc7 or rdc70 or rdc71 or rdc72 or rdc73
or rdc74 or rdc75 or rdc76 or rdc77 or rdc78 or rdc79
or rdc8 or rdc80 or rdc81 or rdc82 or rdc83 or rdc84
or rdc85 or rdc86 or rdc87 or rdc88 or rdc89 or rdc9
or rdc90 or rdc91 or rdc92 or rdc93 or rdc94 or rdc95
or rdc96 or rdc97 or rdc98 or rdc99 or req_load_state
or req_unload_state or reset_cfifo0 or reset_cfifo1
or reset_cfifo2 or reset_cfifo3 or rsp_load_state
or rsp_unload_state or status_dout or training_vector
non_qualified_addr_err = 0;
/* ----------------------------------------------- */
case ({addr_reg[11:3],3'b0}) // synopsys parallel_case full_case infer_mux
12'h000:begin // Config1 Register
/* --- Functional status register w/ w1c ---- */
12'h008:begin // Status Register
12'h010:begin // Mask Register
/* --- tt va_ram access control registers --- */
ld_buf4_region_ctl = wr_en;
rd_data = buf4_region_ctl;
ld_buf8_region_ctl = wr_en;
rd_data = buf8_region_ctl;
ld_buf16_region_ctl= wr_en;
rd_data = buf16_region_ctl;
ld_buf32_region_ctl= wr_en;
rd_data = buf32_region_ctl;
/* --- dn&st ram access control registers --- */
ld_ds4_region_ctl = wr_en;
rd_data = ds4_region_ctl;
ld_ds8_region_ctl = wr_en;
rd_data = ds8_region_ctl;
ld_ds16_region_ctl= wr_en;
rd_data = ds16_region_ctl;
ld_ds32_region_ctl= wr_en;
rd_data = ds32_region_ctl;
/* ------ zcp ram access data register ------ */
rd_data = ram_data0[31:0];
rd_data = ram_data1[31:0];
rd_data = ram_data2[31:0];
rd_data = ram_data3[31:0];
rd_data = {24'b0,ram_data4[7:0]};
/* ------ zcp ram access bit enable register ------ */
rd_data = {15'b0,ram_be[16:0]};
rd_data = ram_addr[31:0];
/* -------- par data register ------------------- */
rd_data = {15'b0,chk_bit_data};
/* -------- reset cfifo register ---------------- */
rd_data = {28'b0,reset_cfifo3,reset_cfifo2,reset_cfifo1,reset_cfifo0};
/* -------- ecc_err_ctl0 ------------------------ */
/* -------- ecc_err_ctl1 ------------------------ */
/* -------- ecc_err_ctl2 ------------------------ */
/* -------- ecc_err_ctl3 ------------------------ */
/* -------- debug_training_vector --------------- */
ld_training_vector = wr_en;
rd_data = training_vector;
/* -------- err log register -------------------- */
12'h0c8: rd_data = {12'b0,
rsp_unload_state[3:0], // 4b
rsp_load_state[3:0], // 4b
req_unload_state[1:0], // 2b
req_load_state[1:0], // 2b
/* --- Test status register w/o w1c ---- */
12'h108:begin // Status Register
non_qualified_addr_err = 1;
/* -------- rdc registers ---------------------- */
else if (addr_reg[16]) // rdc
case ({addr_reg[11:3],3'b0}) // synopsys parallel_case full_case infer_mux
rd_data = {28'b0,rdc100};
rd_data = {28'b0,rdc101};
rd_data = {28'b0,rdc102};
rd_data = {28'b0,rdc103};
rd_data = {28'b0,rdc104};
rd_data = {28'b0,rdc105};
rd_data = {28'b0,rdc106};
rd_data = {28'b0,rdc107};
rd_data = {28'b0,rdc108};
rd_data = {28'b0,rdc109};
rd_data = {28'b0,rdc110};
rd_data = {28'b0,rdc111};
rd_data = {28'b0,rdc112};
rd_data = {28'b0,rdc113};
rd_data = {28'b0,rdc114};
rd_data = {28'b0,rdc115};
rd_data = {28'b0,rdc116};
rd_data = {28'b0,rdc117};
rd_data = {28'b0,rdc118};
rd_data = {28'b0,rdc119};
rd_data = {28'b0,rdc120};
rd_data = {28'b0,rdc121};
rd_data = {28'b0,rdc122};
rd_data = {28'b0,rdc123};
rd_data = {28'b0,rdc124};
rd_data = {28'b0,rdc125};
rd_data = {28'b0,rdc126};
rd_data = {28'b0,rdc127};
non_qualified_addr_err = 1;
non_qualified_addr_err = 1;
/* -------------------- config1 Register -------------------- */
zcp_xREG #(25) config1_xREG (.clk(clk),
wire req_dis = config1[1];
wire rsp_dis = config1[2];
wire par_chk_dis = config1[3]; // disable parity check
wire ecc_chk_dis = config1[4];
wire [10:0] dmaw_threshold = config1[15:5];
wire [7:0] zcp_debug_sel = config1[23:16];
wire zcp_32bit_mode = config1[24];
assign config1[31:25] = 0;
/* --------------------- Status Register -------------------- */
zcp_w1c_ff stat0 (.clk(clk),.reset(reset[1]),.set(zcp_dmc_dat_err0),.ld(ld_status),.w1c(w1c_status),.w1c_data(wr_data[0]),.q(zcp_dmc_dat_err0_stat));
zcp_w1c_ff stat1 (.clk(clk),.reset(reset[1]),.set(zcp_dmc_dat_err1),.ld(ld_status),.w1c(w1c_status),.w1c_data(wr_data[1]),.q(zcp_dmc_dat_err1_stat));
zcp_w1c_ff stat2 (.clk(clk),.reset(reset[1]),.set(zcp_dmc_dat_err2),.ld(ld_status),.w1c(w1c_status),.w1c_data(wr_data[2]),.q(zcp_dmc_dat_err2_stat));
zcp_w1c_ff stat3 (.clk(clk),.reset(reset[1]),.set(zcp_dmc_dat_err3),.ld(ld_status),.w1c(w1c_status),.w1c_data(wr_data[3]),.q(zcp_dmc_dat_err3_stat));
zcp_w1c_ff stat4 (.clk(clk),.reset(reset[1]),.set(zcp_tt_index_err),.ld(ld_status),.w1c(w1c_status),.w1c_data(wr_data[4]),.q(zcp_tt_index_err_stat));
zcp_w1c_ff stat5 (.clk(clk),.reset(reset[1]),.set(slv_tt_index_err),.ld(ld_status),.w1c(w1c_status),.w1c_data(wr_data[5]),.q(slv_tt_index_err_stat));
zcp_w1c_ff stat6 (.clk(clk),.reset(reset[1]),.set(rsp_tt_index_err),.ld(ld_status),.w1c(w1c_status),.w1c_data(wr_data[6]),.q(rsp_tt_index_err_stat));
zcp_w1c_ff stat7 (.clk(clk),.reset(reset[1]),.set(set_tt_program_err),.ld(ld_status),.w1c(w1c_status),.w1c_data(wr_data[7]),.q(tt_program_err_stat));
// vlint flag_null_instance_port off
// vlint flag_unmatched_port_connect_in_inst off
zcp_pls_gen2_reg va_ram_perr_pls_gen2(.clk(clk),.sig_in(va_ram_perr),.lead(va_ram_perr_pls),.trail());
zcp_pls_gen2_reg dn_ram_perr_pls_gen2(.clk(clk),.sig_in(dn_ram_perr),.lead(dn_ram_perr_pls),.trail());
zcp_pls_gen2_reg st_ram_perr_pls_gen2(.clk(clk),.sig_in(st_ram_perr),.lead(st_ram_perr_pls),.trail());
// vlint flag_null_instance_port on
// vlint flag_unmatched_port_connect_in_inst on
zcp_w1c_ff stat8 (.clk(clk),.reset(reset[1]),.set(va_ram_perr_pls),.ld(ld_status),.w1c(w1c_status),.w1c_data(wr_data[8]), .q(va_ram_perr_stat));
zcp_w1c_ff stat9 (.clk(clk),.reset(reset[1]),.set(dn_ram_perr_pls),.ld(ld_status),.w1c(w1c_status),.w1c_data(wr_data[9]), .q(dn_ram_perr_stat));
zcp_w1c_ff stat10(.clk(clk),.reset(reset[1]),.set(st_ram_perr_pls),.ld(ld_status),.w1c(w1c_status),.w1c_data(wr_data[10]),.q(st_ram_perr_stat));
zcp_w1c_ff stat11(.clk(clk),.reset(reset[1]),.set(ififo_overrun), .ld(ld_status),.w1c(w1c_status),.w1c_data(wr_data[11]),.q(ififo_overrun_stat));
zcp_w1c_ff stat12(.clk(clk),.reset(reset[1]),.set(rspfifo_uncorr_err),.ld(ld_status),.w1c(w1c_status),.w1c_data(wr_data[12]),.q(rspfifo_uncorr_err_stat));
zcp_w1c_ff stat14(.clk(clk),.reset(reset[1]),.set(rrfifo_overrun), .ld(ld_status),.w1c(w1c_status),.w1c_data(wr_data[14]),.q(rrfifo_overrun_stat));
zcp_w1c_ff stat15(.clk(clk),.reset(reset[1]),.set(rrfifo_underrun),.ld(ld_status),.w1c(w1c_status),.w1c_data(wr_data[15]),.q(rrfifo_underrun_stat));
assign status_dout[0] = zcp_dmc_dat_err0_stat;
assign status_dout[1] = zcp_dmc_dat_err1_stat;
assign status_dout[2] = zcp_dmc_dat_err2_stat;
assign status_dout[3] = zcp_dmc_dat_err3_stat;
assign status_dout[4] = zcp_tt_index_err_stat;
assign status_dout[5] = slv_tt_index_err_stat;
assign status_dout[6] = rsp_tt_index_err_stat;
assign status_dout[7] = tt_program_err_stat;
assign status_dout[8] = va_ram_perr_stat;
assign status_dout[9] = dn_ram_perr_stat;
assign status_dout[10] = st_ram_perr_stat;
assign status_dout[11] = ififo_overrun_stat;
assign status_dout[12] = rspfifo_uncorr_err_stat;
assign status_dout[13] = 0;
assign status_dout[14] = rrfifo_overrun_stat;
assign status_dout[15] = rrfifo_underrun_stat;
assign status_dout[31:16] = 0;
wire pio_intr = status_dout[0] & mask[0] |
status_dout[1] & mask[1] |
status_dout[2] & mask[2] |
status_dout[3] & mask[3] |
status_dout[4] & mask[4] |
status_dout[5] & mask[5] |
status_dout[6] & mask[6] |
status_dout[7] & mask[7] |
status_dout[8] & mask[8] |
status_dout[9] & mask[9] |
status_dout[10] & mask[10] |
status_dout[11] & mask[11] |
status_dout[12] & mask[12] |
status_dout[14] & mask[14] |
status_dout[15] & mask[15] ;
always @ (posedge clk) begin zcp_pio_intr <= pio_intr; end
/* ---------------------- Mask Register --------------------- */
zcp_xREG2 #(16) mask_xREG2(
.reset_value({16{1'b1}}),
assign mask[31:16] = 16'b0;
/* ---------------------- 4 buffer region_ctl --------------- */
zcp_xREG #(32) buf4_region_ctl_xREG(
.qout(buf4_region_ctl[31:0]));
wire [7:0] tt_offset0 = buf4_region_ctl[7:0];
wire [9:0] tt_index_start0 = buf4_region_ctl[19:10];
wire [9:0] tt_index_end0 = buf4_region_ctl[29:20];
wire tt_index_chk0 = buf4_region_ctl[30];
// vlint flag_dangling_net_within_module off
// vlint flag_net_has_no_load off
wire tt_index_rsv0 = buf4_region_ctl[31];
// vlint flag_net_has_no_load on
// vlint flag_dangling_net_within_module on
/* ---------------------- 8 buffer region_ctl --------------- */
zcp_xREG #(32) buf8_region_ctl_xREG(
.qout(buf8_region_ctl[31:0]));
wire [7:0] tt_offset1 = buf8_region_ctl[7:0];
wire [9:0] tt_index_start1 = buf8_region_ctl[19:10];
wire [9:0] tt_index_end1 = buf8_region_ctl[29:20];
wire tt_index_chk1 = buf8_region_ctl[30];
// vlint flag_dangling_net_within_module off
// vlint flag_net_has_no_load off
wire tt_index_rsv1 = buf8_region_ctl[31];
// vlint flag_net_has_no_load on
// vlint flag_dangling_net_within_module on
/* --------------------- 16 buffer region_ctl --------------- */
zcp_xREG #(32) buf16_region_ctl_xREG(
.en(ld_buf16_region_ctl),
.qout(buf16_region_ctl[31:0]));
wire [7:0] tt_offset2 = buf16_region_ctl[7:0];
wire [9:0] tt_index_start2 = buf16_region_ctl[19:10];
wire [9:0] tt_index_end2 = buf16_region_ctl[29:20];
wire tt_index_chk2 = buf16_region_ctl[30];
// vlint flag_dangling_net_within_module off
// vlint flag_net_has_no_load off
wire tt_index_rsv2 = buf16_region_ctl[31];
// vlint flag_net_has_no_load on
// vlint flag_dangling_net_within_module on
/* --------------------- 32 buffer region_ctl --------------- */
zcp_xREG #(32) buf32_region_ctl_xREG(
.en(ld_buf32_region_ctl),
.qout(buf32_region_ctl[31:0]));
wire [7:0] tt_offset3 = buf32_region_ctl[7:0];
wire [9:0] tt_index_start3 = buf32_region_ctl[19:10];
wire [9:0] tt_index_end3 = buf32_region_ctl[29:20];
wire tt_index_chk3 = buf32_region_ctl[30];
// vlint flag_dangling_net_within_module off
// vlint flag_net_has_no_load off
wire tt_index_rsv3 = buf32_region_ctl[31];
// vlint flag_net_has_no_load on
// vlint flag_dangling_net_within_module on
// ds stands for dynamic and static table ram.
/* ------------------- ds 4 buffer region_ctl --------------- */
zcp_xREG #(10) ds4_region_ctl_xREG(
.qout(ds4_region_ctl[9:0]));
wire [9:0] ds_offset0 = ds4_region_ctl[9:0];
assign ds4_region_ctl[31:10] = 0;
/* ------------------- ds8 buffer region_ctl --------------- */
zcp_xREG #(10) ds8_region_ctl_xREG(
.qout(ds8_region_ctl[9:0]));
wire [9:0] ds_offset1 = ds8_region_ctl[9:0];
assign ds8_region_ctl[31:10] = 0;
/* ------------------- ds16 buffer region_ctl --------------- */
zcp_xREG #(10) ds16_region_ctl_xREG(
.qout(ds16_region_ctl[9:0]));
wire [9:0] ds_offset2 = ds16_region_ctl[9:0];
assign ds16_region_ctl[31:10]= 0;
/* ------------------- ds32 buffer region_ctl --------------- */
zcp_xREG #(10) ds32_region_ctl_xREG(
.qout(ds32_region_ctl[9:0]));
wire [9:0] ds_offset3 = ds32_region_ctl[9:0];
assign ds32_region_ctl[31:10]= 0;
/* ----- ram access data registers ------ */
zcp_RegLd #(32) ram_data0_RegLd(
.ld_value(ram_rdata[31:0]),
zcp_RegLd #(32) ram_data1_RegLd(
.ld_value(ram_rdata[63:32]),
zcp_RegLd #(32) ram_data2_RegLd(
.ld_value(ram_rdata[95:64]),
zcp_RegLd #(32) ram_data3_RegLd(
.ld_value(ram_rdata[127:96]),
zcp_RegLd #(8) ram_data4_RegLd(
.ld_value(ram_rdata[135:128]),
assign ram_data = {ram_data4,ram_data3,ram_data2,ram_data1,ram_data0};
/* ------ ram access byte enable registers ------ */
zcp_xREG #(17) ram_be_xREG(
/* ----- ram access address register ------ */
zcp_xREG #(31) ram_addr_xREG(
zcp_pls_gen2_reg slv_ram_pls_gen2_reg(.clk(clk),.sig_in(ld_ram_addr),.lead(ld_ram_addr_lead),.trail(ld_ram_addr_trail));
wire [10:0] slv_ram_addr = ram_addr[10:0]; // For accessing cfifo only.
wire [4:0] ram_sel = ram_addr[16:12];
wire [11:0] slv_tt_index = ram_addr[28:17]; // For accessing va_ram, st_ram, dn_ram.
assign ram_addr[31] = |ram_access_state; // ram busy
assign slv_ram_wdata = ram_data;
assign slv_ram_be = ram_be;
/* -------- par data register ------------------- */
zcp_xREG #(17) chk_bit_data_xREG(
.qout(chk_bit_data[16:0]));
/* -------- reset cfifo register ---------------- */
zcp_xREG #(4) reset_cfifo_xREG(
.qout({reset_cfifo3,reset_cfifo2,reset_cfifo1,reset_cfifo0}));
/* -------- ecc_err_ctl ------------------------- */
wire [5:0] ecc_err_wd = {wr_data[31],wr_data[17:16],wr_data[2:0]}; // 6b
zcp_xREG #(6) ecc_err_ctl0_xREG(.clk(clk),.reset(reset[8]),.en(ld_ecc_err_ctl0),.din(ecc_err_wd[5:0]),
.qout({ecc_err_ctl0[31],ecc_err_ctl0[17:16],ecc_err_ctl0[2:0]}));
zcp_xREG #(6) ecc_err_ctl1_xREG(.clk(clk),.reset(reset[8]),.en(ld_ecc_err_ctl1),.din(ecc_err_wd[5:0]),
.qout({ecc_err_ctl1[31],ecc_err_ctl1[17:16],ecc_err_ctl1[2:0]}));
zcp_xREG #(6) ecc_err_ctl2_xREG(.clk(clk),.reset(reset[8]),.en(ld_ecc_err_ctl2),.din(ecc_err_wd[5:0]),
.qout({ecc_err_ctl2[31],ecc_err_ctl2[17:16],ecc_err_ctl2[2:0]}));
zcp_xREG #(6) ecc_err_ctl3_xREG(.clk(clk),.reset(reset[8]),.en(ld_ecc_err_ctl3),.din(ecc_err_wd[5:0]),
.qout({ecc_err_ctl3[31],ecc_err_ctl3[17:16],ecc_err_ctl3[2:0]}));
assign ecc_chk_bypass0 = ecc_err_ctl0[31]; // per fifo ecc_chk disable
assign ecc_err_ctl0[30:18] = 0;
assign double_bit_err0 = ecc_err_ctl0[17];
assign single_bit_err0 = ecc_err_ctl0[16];
assign ecc_err_ctl0[15:11] = 0;
assign ecc_err_ctl0[10] = 1'b1; // all packets
assign ecc_err_ctl0[9:3] = 0;
assign last_line_err0 = ecc_err_ctl0[2] ;
assign second_line_err0 = ecc_err_ctl0[1] ;
assign first_line_err0 = ecc_err_ctl0[0] ;
assign ecc_err_ctl1[30:18] = 0;
assign ecc_chk_bypass1 = ecc_err_ctl1[31]; // per fifo ecc_chk disable
assign double_bit_err1 = ecc_err_ctl1[17];
assign single_bit_err1 = ecc_err_ctl1[16];
assign ecc_err_ctl1[15:11] = 0;
assign ecc_err_ctl1[10] = 1'b1; // all packets
assign ecc_err_ctl1[9:3] = 0;
assign last_line_err1 = ecc_err_ctl1[2] ;
assign second_line_err1 = ecc_err_ctl1[1] ;
assign first_line_err1 = ecc_err_ctl1[0] ;
assign ecc_err_ctl2[30:18] = 0;
assign ecc_chk_bypass2 = ecc_err_ctl2[31]; // per fifo ecc_chk disable
assign double_bit_err2 = ecc_err_ctl2[17];
assign single_bit_err2 = ecc_err_ctl2[16];
assign ecc_err_ctl2[15:11] = 0;
assign ecc_err_ctl2[10] = 1'b1; // all packets
assign ecc_err_ctl2[9:3] = 0;
assign last_line_err2 = ecc_err_ctl2[2] ;
assign second_line_err2 = ecc_err_ctl2[1] ;
assign first_line_err2 = ecc_err_ctl2[0] ;
assign ecc_err_ctl3[30:18] = 0;
assign ecc_chk_bypass3 = ecc_err_ctl3[31]; // per fifo ecc_chk disable
assign double_bit_err3 = ecc_err_ctl3[17];
assign single_bit_err3 = ecc_err_ctl3[16];
assign ecc_err_ctl3[15:11] = 0;
assign ecc_err_ctl3[10] = 1'b1; // all packets
assign ecc_err_ctl3[9:3] = 0;
assign last_line_err3 = ecc_err_ctl3[2] ;
assign second_line_err3 = ecc_err_ctl3[1] ;
assign first_line_err3 = ecc_err_ctl3[0] ;
/* -------- debug_training_vector --------------- */
zcp_xREG #(32) training_vector_xREG(.clk(clk),.reset(reset[9]),.en(ld_training_vector),.din(wr_data[31:0]),.qout(training_vector));
// vlint flag_empty_block off
// RAM enable selection MUX
// va read or write enable
casex (ram_sel[4:0]) // synopsys parallel_case full_case
va_ram_rwen <= ram_ren | ram_wen;// r/w enable
va_ram_rwen0 <= ram_ren | ram_wen;// r/w enable
va_ram_ren0 <= ram_ren;// ram_ren is a pulse
va_ram_wen0 <= ram_wen;// ram_wen is a pulse
va_ram_ren <= ram_ren;// ram_ren is a pulse
va_ram_wen <= ram_wen;// ram_wen is a pulse
va_ram_rwen <= ram_ren | ram_wen;// r/w enable
va_ram_rwen1 <= ram_ren | ram_wen;// r/w enable
va_ram_ren1 <= ram_ren;// ram_ren is a pulse
va_ram_wen1 <= ram_wen;// ram_wen is a pulse
va_ram_ren <= ram_ren;// ram_ren is a pulse
va_ram_wen <= ram_wen;// ram_wen is a pulse
va_ram_rwen <= ram_ren | ram_wen;// r/w enable
va_ram_rwen2 <= ram_ren | ram_wen;// r/w enable
va_ram_ren2 <= ram_ren;// ram_ren is a pulse
va_ram_wen2 <= ram_wen;// ram_wen is a pulse
va_ram_ren <= ram_ren;// ram_ren is a pulse
va_ram_wen <= ram_wen;// ram_wen is a pulse
va_ram_rwen <= ram_ren | ram_wen;// r/w enable
va_ram_rwen3 <= ram_ren | ram_wen;// r/w enable
va_ram_ren3 <= ram_ren;// ram_ren is a pulse
va_ram_wen3 <= ram_wen;// ram_wen is a pulse
va_ram_ren <= ram_ren;// ram_ren is a pulse
va_ram_wen <= ram_wen;// ram_wen is a pulse
va_ram_rwen <= ram_ren | ram_wen;// r/w enable
va_ram_rwen4 <= ram_ren | ram_wen;// r/w enable
va_ram_ren4 <= ram_ren;// ram_ren is a pulse
va_ram_wen4 <= ram_wen;// ram_wen is a pulse
va_ram_ren <= ram_ren;// ram_ren is a pulse
va_ram_wen <= ram_wen;// ram_wen is a pulse
va_ram_rwen <= ram_ren | ram_wen;// r/w enable
va_ram_rwen5 <= ram_ren | ram_wen;// r/w enable
va_ram_ren5 <= ram_ren;// ram_ren is a pulse
va_ram_wen5 <= ram_wen;// ram_wen is a pulse
va_ram_ren <= ram_ren;// ram_ren is a pulse
va_ram_wen <= ram_wen;// ram_wen is a pulse
va_ram_rwen <= ram_ren | ram_wen;// r/w enable
va_ram_rwen6 <= ram_ren | ram_wen;// r/w enable
va_ram_ren6 <= ram_ren;// ram_ren is a pulse
va_ram_wen6 <= ram_wen;// ram_wen is a pulse
va_ram_ren <= ram_ren;// ram_ren is a pulse
va_ram_wen <= ram_wen;// ram_wen is a pulse
va_ram_rwen <= ram_ren | ram_wen;// r/w enable
va_ram_rwen7 <= ram_ren | ram_wen;// r/w enable
va_ram_wen7 <= ram_wen;// ram_wen is a pulse
va_ram_ren <= ram_ren;// ram_ren is a pulse
va_ram_wen <= ram_wen;// ram_wen is a pulse
st_ram_wen <= ram_wen;// ram_wen is a pulse
dn_ram_wen <= ram_wen;// ram_wen is a pulse
cfifo_wen0 <= ram_wen;// ram_wen is a pulse
cfifo_wen1 <= ram_wen;// ram_wen is a pulse
cfifo_wen2 <= ram_wen;// ram_wen is a pulse
cfifo_wen3 <= ram_wen;// ram_wen is a pulse
// vlint flag_empty_block on
// ram_rdata selection mux
always @ ( cfifo_slv_rdata0 or cfifo_slv_rdata1
or cfifo_slv_rdata2 or cfifo_slv_rdata3 or dram_slv_rdata
or ram_sel or sram_slv_rdata or vram_slv_rdata)
ram_rdata = `DN_W'h0000_dead_beef;
5'h00 : ram_rdata = {8'b0,vram_slv_rdata[`W128D0]};
5'h01 : ram_rdata = {8'b0,vram_slv_rdata[`W128D1]};
5'h02 : ram_rdata = {8'b0,vram_slv_rdata[`W128D2]};
5'h03 : ram_rdata = {8'b0,vram_slv_rdata[`W128D3]};
5'h04 : ram_rdata = {8'b0,vram_slv_rdata[`W128D4]};
5'h05 : ram_rdata = {8'b0,vram_slv_rdata[`W128D5]};
5'h06 : ram_rdata = {8'b0,vram_slv_rdata[`W128D6]};
5'h07 : ram_rdata = {8'b0,vram_slv_rdata[`W128D7]};
5'h08 : ram_rdata = {24'b0,sram_slv_rdata};
5'h09 : ram_rdata = dram_slv_rdata;
5'h10 : ram_rdata = {6'b0,cfifo_slv_rdata0};
5'h11 : ram_rdata = {6'b0,cfifo_slv_rdata1};
5'h12 : ram_rdata = {6'b0,cfifo_slv_rdata2};
5'h13 : ram_rdata = {6'b0,cfifo_slv_rdata3};
default: ram_rdata = `DN_W'h0000_dead_beef;
niu_zcp_ram_access_sm niu_zcp_ram_access_sm
.slv_request (slv_request),
.ld_ram2reg (ld_ram2reg),
.ram_access_state (ram_access_state[2:0]),
.ld_ram_addr_trail (ld_ram_addr_trail),
.slv_accepted (slv_accepted),
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
/* -------- rdc Registers ---------------------- */
zcp_xREG #(4) rdc0_xREG( .clk(clk),.reset(reset[11]),.en(ld_rdc0),.din(wr_data[3:0]),.qout(rdc0));
zcp_xREG #(4) rdc1_xREG( .clk(clk),.reset(reset[11]),.en(ld_rdc1),.din(wr_data[3:0]),.qout(rdc1));
zcp_xREG #(4) rdc2_xREG( .clk(clk),.reset(reset[11]),.en(ld_rdc2),.din(wr_data[3:0]),.qout(rdc2));
zcp_xREG #(4) rdc3_xREG( .clk(clk),.reset(reset[11]),.en(ld_rdc3),.din(wr_data[3:0]),.qout(rdc3));
zcp_xREG #(4) rdc4_xREG( .clk(clk),.reset(reset[11]),.en(ld_rdc4),.din(wr_data[3:0]),.qout(rdc4));
zcp_xREG #(4) rdc5_xREG( .clk(clk),.reset(reset[11]),.en(ld_rdc5),.din(wr_data[3:0]),.qout(rdc5));
zcp_xREG #(4) rdc6_xREG( .clk(clk),.reset(reset[11]),.en(ld_rdc6),.din(wr_data[3:0]),.qout(rdc6));
zcp_xREG #(4) rdc7_xREG( .clk(clk),.reset(reset[11]),.en(ld_rdc7),.din(wr_data[3:0]),.qout(rdc7));
zcp_xREG #(4) rdc8_xREG( .clk(clk),.reset(reset[11]),.en(ld_rdc8),.din(wr_data[3:0]),.qout(rdc8));
zcp_xREG #(4) rdc9_xREG( .clk(clk),.reset(reset[11]),.en(ld_rdc9),.din(wr_data[3:0]),.qout(rdc9));
zcp_xREG #(4) rdc10_xREG(.clk(clk),.reset(reset[11]),.en(ld_rdc10),.din(wr_data[3:0]),.qout(rdc10));
zcp_xREG #(4) rdc11_xREG(.clk(clk),.reset(reset[11]),.en(ld_rdc11),.din(wr_data[3:0]),.qout(rdc11));
zcp_xREG #(4) rdc12_xREG(.clk(clk),.reset(reset[11]),.en(ld_rdc12),.din(wr_data[3:0]),.qout(rdc12));
zcp_xREG #(4) rdc13_xREG(.clk(clk),.reset(reset[12]),.en(ld_rdc13),.din(wr_data[3:0]),.qout(rdc13));
zcp_xREG #(4) rdc14_xREG(.clk(clk),.reset(reset[12]),.en(ld_rdc14),.din(wr_data[3:0]),.qout(rdc14));
zcp_xREG #(4) rdc15_xREG(.clk(clk),.reset(reset[12]),.en(ld_rdc15),.din(wr_data[3:0]),.qout(rdc15));
zcp_xREG #(4) rdc16_xREG(.clk(clk),.reset(reset[12]),.en(ld_rdc16),.din(wr_data[3:0]),.qout(rdc16));
zcp_xREG #(4) rdc17_xREG(.clk(clk),.reset(reset[12]),.en(ld_rdc17),.din(wr_data[3:0]),.qout(rdc17));
zcp_xREG #(4) rdc18_xREG(.clk(clk),.reset(reset[12]),.en(ld_rdc18),.din(wr_data[3:0]),.qout(rdc18));
zcp_xREG #(4) rdc19_xREG(.clk(clk),.reset(reset[12]),.en(ld_rdc19),.din(wr_data[3:0]),.qout(rdc19));
zcp_xREG #(4) rdc20_xREG(.clk(clk),.reset(reset[12]),.en(ld_rdc20),.din(wr_data[3:0]),.qout(rdc20));
zcp_xREG #(4) rdc21_xREG(.clk(clk),.reset(reset[12]),.en(ld_rdc21),.din(wr_data[3:0]),.qout(rdc21));
zcp_xREG #(4) rdc22_xREG(.clk(clk),.reset(reset[12]),.en(ld_rdc22),.din(wr_data[3:0]),.qout(rdc22));
zcp_xREG #(4) rdc23_xREG(.clk(clk),.reset(reset[12]),.en(ld_rdc23),.din(wr_data[3:0]),.qout(rdc23));
zcp_xREG #(4) rdc24_xREG(.clk(clk),.reset(reset[12]),.en(ld_rdc24),.din(wr_data[3:0]),.qout(rdc24));
zcp_xREG #(4) rdc25_xREG(.clk(clk),.reset(reset[13]),.en(ld_rdc25),.din(wr_data[3:0]),.qout(rdc25));
zcp_xREG #(4) rdc26_xREG(.clk(clk),.reset(reset[13]),.en(ld_rdc26),.din(wr_data[3:0]),.qout(rdc26));
zcp_xREG #(4) rdc27_xREG(.clk(clk),.reset(reset[13]),.en(ld_rdc27),.din(wr_data[3:0]),.qout(rdc27));
zcp_xREG #(4) rdc28_xREG(.clk(clk),.reset(reset[13]),.en(ld_rdc28),.din(wr_data[3:0]),.qout(rdc28));
zcp_xREG #(4) rdc29_xREG(.clk(clk),.reset(reset[13]),.en(ld_rdc29),.din(wr_data[3:0]),.qout(rdc29));
zcp_xREG #(4) rdc30_xREG(.clk(clk),.reset(reset[13]),.en(ld_rdc30),.din(wr_data[3:0]),.qout(rdc30));
zcp_xREG #(4) rdc31_xREG(.clk(clk),.reset(reset[13]),.en(ld_rdc31),.din(wr_data[3:0]),.qout(rdc31));
zcp_xREG #(4) rdc32_xREG(.clk(clk),.reset(reset[13]),.en(ld_rdc32),.din(wr_data[3:0]),.qout(rdc32));
zcp_xREG #(4) rdc33_xREG(.clk(clk),.reset(reset[13]),.en(ld_rdc33),.din(wr_data[3:0]),.qout(rdc33));
zcp_xREG #(4) rdc34_xREG(.clk(clk),.reset(reset[13]),.en(ld_rdc34),.din(wr_data[3:0]),.qout(rdc34));
zcp_xREG #(4) rdc35_xREG(.clk(clk),.reset(reset[13]),.en(ld_rdc35),.din(wr_data[3:0]),.qout(rdc35));
zcp_xREG #(4) rdc36_xREG(.clk(clk),.reset(reset[13]),.en(ld_rdc36),.din(wr_data[3:0]),.qout(rdc36));
zcp_xREG #(4) rdc37_xREG(.clk(clk),.reset(reset[14]),.en(ld_rdc37),.din(wr_data[3:0]),.qout(rdc37));
zcp_xREG #(4) rdc38_xREG(.clk(clk),.reset(reset[14]),.en(ld_rdc38),.din(wr_data[3:0]),.qout(rdc38));
zcp_xREG #(4) rdc39_xREG(.clk(clk),.reset(reset[14]),.en(ld_rdc39),.din(wr_data[3:0]),.qout(rdc39));
zcp_xREG #(4) rdc40_xREG(.clk(clk),.reset(reset[14]),.en(ld_rdc40),.din(wr_data[3:0]),.qout(rdc40));
zcp_xREG #(4) rdc41_xREG(.clk(clk),.reset(reset[14]),.en(ld_rdc41),.din(wr_data[3:0]),.qout(rdc41));
zcp_xREG #(4) rdc42_xREG(.clk(clk),.reset(reset[14]),.en(ld_rdc42),.din(wr_data[3:0]),.qout(rdc42));
zcp_xREG #(4) rdc43_xREG(.clk(clk),.reset(reset[14]),.en(ld_rdc43),.din(wr_data[3:0]),.qout(rdc43));
zcp_xREG #(4) rdc44_xREG(.clk(clk),.reset(reset[14]),.en(ld_rdc44),.din(wr_data[3:0]),.qout(rdc44));
zcp_xREG #(4) rdc45_xREG(.clk(clk),.reset(reset[14]),.en(ld_rdc45),.din(wr_data[3:0]),.qout(rdc45));
zcp_xREG #(4) rdc46_xREG(.clk(clk),.reset(reset[14]),.en(ld_rdc46),.din(wr_data[3:0]),.qout(rdc46));
zcp_xREG #(4) rdc47_xREG(.clk(clk),.reset(reset[14]),.en(ld_rdc47),.din(wr_data[3:0]),.qout(rdc47));
zcp_xREG #(4) rdc48_xREG(.clk(clk),.reset(reset[14]),.en(ld_rdc48),.din(wr_data[3:0]),.qout(rdc48));
zcp_xREG #(4) rdc49_xREG(.clk(clk),.reset(reset[15]),.en(ld_rdc49),.din(wr_data[3:0]),.qout(rdc49));
zcp_xREG #(4) rdc50_xREG(.clk(clk),.reset(reset[15]),.en(ld_rdc50),.din(wr_data[3:0]),.qout(rdc50));
zcp_xREG #(4) rdc51_xREG(.clk(clk),.reset(reset[15]),.en(ld_rdc51),.din(wr_data[3:0]),.qout(rdc51));
zcp_xREG #(4) rdc52_xREG(.clk(clk),.reset(reset[15]),.en(ld_rdc52),.din(wr_data[3:0]),.qout(rdc52));
zcp_xREG #(4) rdc53_xREG(.clk(clk),.reset(reset[15]),.en(ld_rdc53),.din(wr_data[3:0]),.qout(rdc53));
zcp_xREG #(4) rdc54_xREG(.clk(clk),.reset(reset[15]),.en(ld_rdc54),.din(wr_data[3:0]),.qout(rdc54));
zcp_xREG #(4) rdc55_xREG(.clk(clk),.reset(reset[15]),.en(ld_rdc55),.din(wr_data[3:0]),.qout(rdc55));
zcp_xREG #(4) rdc56_xREG(.clk(clk),.reset(reset[15]),.en(ld_rdc56),.din(wr_data[3:0]),.qout(rdc56));
zcp_xREG #(4) rdc57_xREG(.clk(clk),.reset(reset[15]),.en(ld_rdc57),.din(wr_data[3:0]),.qout(rdc57));
zcp_xREG #(4) rdc58_xREG(.clk(clk),.reset(reset[15]),.en(ld_rdc58),.din(wr_data[3:0]),.qout(rdc58));
zcp_xREG #(4) rdc59_xREG(.clk(clk),.reset(reset[15]),.en(ld_rdc59),.din(wr_data[3:0]),.qout(rdc59));
zcp_xREG #(4) rdc60_xREG(.clk(clk),.reset(reset[15]),.en(ld_rdc60),.din(wr_data[3:0]),.qout(rdc60));
zcp_xREG #(4) rdc61_xREG(.clk(clk),.reset(reset[16]),.en(ld_rdc61),.din(wr_data[3:0]),.qout(rdc61));
zcp_xREG #(4) rdc62_xREG(.clk(clk),.reset(reset[16]),.en(ld_rdc62),.din(wr_data[3:0]),.qout(rdc62));
zcp_xREG #(4) rdc63_xREG(.clk(clk),.reset(reset[16]),.en(ld_rdc63),.din(wr_data[3:0]),.qout(rdc63));
zcp_xREG #(4) rdc64_xREG(.clk(clk),.reset(reset[16]),.en(ld_rdc64),.din(wr_data[3:0]),.qout(rdc64));
zcp_xREG #(4) rdc65_xREG(.clk(clk),.reset(reset[16]),.en(ld_rdc65),.din(wr_data[3:0]),.qout(rdc65));
zcp_xREG #(4) rdc66_xREG(.clk(clk),.reset(reset[16]),.en(ld_rdc66),.din(wr_data[3:0]),.qout(rdc66));
zcp_xREG #(4) rdc67_xREG(.clk(clk),.reset(reset[16]),.en(ld_rdc67),.din(wr_data[3:0]),.qout(rdc67));
zcp_xREG #(4) rdc68_xREG(.clk(clk),.reset(reset[16]),.en(ld_rdc68),.din(wr_data[3:0]),.qout(rdc68));
zcp_xREG #(4) rdc69_xREG(.clk(clk),.reset(reset[16]),.en(ld_rdc69),.din(wr_data[3:0]),.qout(rdc69));
zcp_xREG #(4) rdc70_xREG(.clk(clk),.reset(reset[16]),.en(ld_rdc70),.din(wr_data[3:0]),.qout(rdc70));
zcp_xREG #(4) rdc71_xREG(.clk(clk),.reset(reset[16]),.en(ld_rdc71),.din(wr_data[3:0]),.qout(rdc71));
zcp_xREG #(4) rdc72_xREG(.clk(clk),.reset(reset[16]),.en(ld_rdc72),.din(wr_data[3:0]),.qout(rdc72));
zcp_xREG #(4) rdc73_xREG(.clk(clk),.reset(reset[17]),.en(ld_rdc73),.din(wr_data[3:0]),.qout(rdc73));
zcp_xREG #(4) rdc74_xREG(.clk(clk),.reset(reset[17]),.en(ld_rdc74),.din(wr_data[3:0]),.qout(rdc74));
zcp_xREG #(4) rdc75_xREG(.clk(clk),.reset(reset[17]),.en(ld_rdc75),.din(wr_data[3:0]),.qout(rdc75));
zcp_xREG #(4) rdc76_xREG(.clk(clk),.reset(reset[17]),.en(ld_rdc76),.din(wr_data[3:0]),.qout(rdc76));
zcp_xREG #(4) rdc77_xREG(.clk(clk),.reset(reset[17]),.en(ld_rdc77),.din(wr_data[3:0]),.qout(rdc77));
zcp_xREG #(4) rdc78_xREG(.clk(clk),.reset(reset[17]),.en(ld_rdc78),.din(wr_data[3:0]),.qout(rdc78));
zcp_xREG #(4) rdc79_xREG(.clk(clk),.reset(reset[17]),.en(ld_rdc79),.din(wr_data[3:0]),.qout(rdc79));
zcp_xREG #(4) rdc80_xREG(.clk(clk),.reset(reset[17]),.en(ld_rdc80),.din(wr_data[3:0]),.qout(rdc80));
zcp_xREG #(4) rdc81_xREG(.clk(clk),.reset(reset[17]),.en(ld_rdc81),.din(wr_data[3:0]),.qout(rdc81));
zcp_xREG #(4) rdc82_xREG(.clk(clk),.reset(reset[17]),.en(ld_rdc82),.din(wr_data[3:0]),.qout(rdc82));
zcp_xREG #(4) rdc83_xREG(.clk(clk),.reset(reset[17]),.en(ld_rdc83),.din(wr_data[3:0]),.qout(rdc83));
zcp_xREG #(4) rdc84_xREG(.clk(clk),.reset(reset[17]),.en(ld_rdc84),.din(wr_data[3:0]),.qout(rdc84));
zcp_xREG #(4) rdc85_xREG(.clk(clk),.reset(reset[18]),.en(ld_rdc85),.din(wr_data[3:0]),.qout(rdc85));
zcp_xREG #(4) rdc86_xREG(.clk(clk),.reset(reset[18]),.en(ld_rdc86),.din(wr_data[3:0]),.qout(rdc86));
zcp_xREG #(4) rdc87_xREG(.clk(clk),.reset(reset[18]),.en(ld_rdc87),.din(wr_data[3:0]),.qout(rdc87));
zcp_xREG #(4) rdc88_xREG(.clk(clk),.reset(reset[18]),.en(ld_rdc88),.din(wr_data[3:0]),.qout(rdc88));
zcp_xREG #(4) rdc89_xREG(.clk(clk),.reset(reset[18]),.en(ld_rdc89),.din(wr_data[3:0]),.qout(rdc89));
zcp_xREG #(4) rdc90_xREG(.clk(clk),.reset(reset[18]),.en(ld_rdc90),.din(wr_data[3:0]),.qout(rdc90));
zcp_xREG #(4) rdc91_xREG(.clk(clk),.reset(reset[18]),.en(ld_rdc91),.din(wr_data[3:0]),.qout(rdc91));
zcp_xREG #(4) rdc92_xREG(.clk(clk),.reset(reset[18]),.en(ld_rdc92),.din(wr_data[3:0]),.qout(rdc92));
zcp_xREG #(4) rdc93_xREG(.clk(clk),.reset(reset[18]),.en(ld_rdc93),.din(wr_data[3:0]),.qout(rdc93));
zcp_xREG #(4) rdc94_xREG(.clk(clk),.reset(reset[18]),.en(ld_rdc94),.din(wr_data[3:0]),.qout(rdc94));
zcp_xREG #(4) rdc95_xREG(.clk(clk),.reset(reset[18]),.en(ld_rdc95),.din(wr_data[3:0]),.qout(rdc95));
zcp_xREG #(4) rdc96_xREG(.clk(clk),.reset(reset[18]),.en(ld_rdc96),.din(wr_data[3:0]),.qout(rdc96));
zcp_xREG #(4) rdc97_xREG(.clk(clk),.reset(reset[19]),.en(ld_rdc97),.din(wr_data[3:0]),.qout(rdc97));
zcp_xREG #(4) rdc98_xREG(.clk(clk),.reset(reset[19]),.en(ld_rdc98),.din(wr_data[3:0]),.qout(rdc98));
zcp_xREG #(4) rdc99_xREG(.clk(clk),.reset(reset[19]),.en(ld_rdc99),.din(wr_data[3:0]),.qout(rdc99));
zcp_xREG #(4) rdc100_xREG(.clk(clk),.reset(reset[19]),.en(ld_rdc100),.din(wr_data[3:0]),.qout(rdc100));
zcp_xREG #(4) rdc101_xREG(.clk(clk),.reset(reset[19]),.en(ld_rdc101),.din(wr_data[3:0]),.qout(rdc101));
zcp_xREG #(4) rdc102_xREG(.clk(clk),.reset(reset[19]),.en(ld_rdc102),.din(wr_data[3:0]),.qout(rdc102));
zcp_xREG #(4) rdc103_xREG(.clk(clk),.reset(reset[19]),.en(ld_rdc103),.din(wr_data[3:0]),.qout(rdc103));
zcp_xREG #(4) rdc104_xREG(.clk(clk),.reset(reset[19]),.en(ld_rdc104),.din(wr_data[3:0]),.qout(rdc104));
zcp_xREG #(4) rdc105_xREG(.clk(clk),.reset(reset[19]),.en(ld_rdc105),.din(wr_data[3:0]),.qout(rdc105));
zcp_xREG #(4) rdc106_xREG(.clk(clk),.reset(reset[19]),.en(ld_rdc106),.din(wr_data[3:0]),.qout(rdc106));
zcp_xREG #(4) rdc107_xREG(.clk(clk),.reset(reset[19]),.en(ld_rdc107),.din(wr_data[3:0]),.qout(rdc107));
zcp_xREG #(4) rdc108_xREG(.clk(clk),.reset(reset[19]),.en(ld_rdc108),.din(wr_data[3:0]),.qout(rdc108));
zcp_xREG #(4) rdc109_xREG(.clk(clk),.reset(reset[20]),.en(ld_rdc109),.din(wr_data[3:0]),.qout(rdc109));
zcp_xREG #(4) rdc110_xREG(.clk(clk),.reset(reset[20]),.en(ld_rdc110),.din(wr_data[3:0]),.qout(rdc110));
zcp_xREG #(4) rdc111_xREG(.clk(clk),.reset(reset[20]),.en(ld_rdc111),.din(wr_data[3:0]),.qout(rdc111));
zcp_xREG #(4) rdc112_xREG(.clk(clk),.reset(reset[20]),.en(ld_rdc112),.din(wr_data[3:0]),.qout(rdc112));
zcp_xREG #(4) rdc113_xREG(.clk(clk),.reset(reset[20]),.en(ld_rdc113),.din(wr_data[3:0]),.qout(rdc113));
zcp_xREG #(4) rdc114_xREG(.clk(clk),.reset(reset[20]),.en(ld_rdc114),.din(wr_data[3:0]),.qout(rdc114));
zcp_xREG #(4) rdc115_xREG(.clk(clk),.reset(reset[20]),.en(ld_rdc115),.din(wr_data[3:0]),.qout(rdc115));
zcp_xREG #(4) rdc116_xREG(.clk(clk),.reset(reset[20]),.en(ld_rdc116),.din(wr_data[3:0]),.qout(rdc116));
zcp_xREG #(4) rdc117_xREG(.clk(clk),.reset(reset[20]),.en(ld_rdc117),.din(wr_data[3:0]),.qout(rdc117));
zcp_xREG #(4) rdc118_xREG(.clk(clk),.reset(reset[20]),.en(ld_rdc118),.din(wr_data[3:0]),.qout(rdc118));
zcp_xREG #(4) rdc119_xREG(.clk(clk),.reset(reset[20]),.en(ld_rdc119),.din(wr_data[3:0]),.qout(rdc119));
zcp_xREG #(4) rdc120_xREG(.clk(clk),.reset(reset[20]),.en(ld_rdc120),.din(wr_data[3:0]),.qout(rdc120));
zcp_xREG #(4) rdc121_xREG(.clk(clk),.reset(reset[21]),.en(ld_rdc121),.din(wr_data[3:0]),.qout(rdc121));
zcp_xREG #(4) rdc122_xREG(.clk(clk),.reset(reset[21]),.en(ld_rdc122),.din(wr_data[3:0]),.qout(rdc122));
zcp_xREG #(4) rdc123_xREG(.clk(clk),.reset(reset[21]),.en(ld_rdc123),.din(wr_data[3:0]),.qout(rdc123));
zcp_xREG #(4) rdc124_xREG(.clk(clk),.reset(reset[21]),.en(ld_rdc124),.din(wr_data[3:0]),.qout(rdc124));
zcp_xREG #(4) rdc125_xREG(.clk(clk),.reset(reset[21]),.en(ld_rdc125),.din(wr_data[3:0]),.qout(rdc125));
zcp_xREG #(4) rdc126_xREG(.clk(clk),.reset(reset[21]),.en(ld_rdc126),.din(wr_data[3:0]),.qout(rdc126));
zcp_xREG #(4) rdc127_xREG(.clk(clk),.reset(reset[21]),.en(ld_rdc127),.din(wr_data[3:0]),.qout(rdc127));
/* --- rdc decoder -------------------------- */
always @ (/*AUTOSENSE*/rdc0 or rdc1 or rdc10 or rdc100 or rdc101
or rdc102 or rdc103 or rdc104 or rdc105 or rdc106 or rdc107
or rdc108 or rdc109 or rdc11 or rdc110 or rdc111 or rdc112
or rdc113 or rdc114 or rdc115 or rdc116 or rdc117 or rdc118
or rdc119 or rdc12 or rdc120 or rdc121 or rdc122 or rdc123
or rdc124 or rdc125 or rdc126 or rdc127 or rdc13 or rdc14
or rdc15 or rdc16 or rdc17 or rdc18 or rdc19 or rdc2
or rdc20 or rdc21 or rdc22 or rdc23 or rdc24 or rdc25
or rdc26 or rdc27 or rdc28 or rdc29 or rdc3 or rdc30
or rdc31 or rdc32 or rdc33 or rdc34 or rdc35 or rdc36
or rdc37 or rdc38 or rdc39 or rdc4 or rdc40 or rdc41
or rdc42 or rdc43 or rdc44 or rdc45 or rdc46 or rdc47
or rdc48 or rdc49 or rdc5 or rdc50 or rdc51 or rdc52
or rdc53 or rdc54 or rdc55 or rdc56 or rdc57 or rdc58
or rdc59 or rdc6 or rdc60 or rdc61 or rdc62 or rdc63
or rdc64 or rdc65 or rdc66 or rdc67 or rdc68 or rdc69
or rdc7 or rdc70 or rdc71 or rdc72 or rdc73 or rdc74
or rdc75 or rdc76 or rdc77 or rdc78 or rdc79 or rdc8
or rdc80 or rdc81 or rdc82 or rdc83 or rdc84 or rdc85
or rdc86 or rdc87 or rdc88 or rdc89 or rdc9 or rdc90
or rdc91 or rdc92 or rdc93 or rdc94 or rdc95 or rdc96
or rdc97 or rdc98 or rdc99 or sel_rdc)
casex ({sel_rdc[7:5],sel_rdc[3:0]}) // synopsys parallel_case full_case infer_mux
assign sel_rdc[7:0] = decode_zc_rdc ? tt_rdc_reg[7:0] :
decode_default_rdc ? fflp_rdc[7:0] :
{fflp_rdc[7:5],5'b0}; // table_rdc
// default_rdc is abailable @ DLY1 state
zcp_xREG #(5) default_rdc_xREG(.clk(clk),.reset(reset[21]),.en(decode_default_rdc),.din({1'b0,rdc}),.qout(default_rdc[4:0]));
// table_rdc is abailable @ DLY2 state
zcp_xREG #(5) table_rdc_xREG (.clk(clk),.reset(reset[21]),.en(decode_table_rdc), .din({1'b0,rdc}),.qout(table_rdc[4:0]));
// zc_rdc is available @ CAL2 state
zcp_xREG #(5) zc_rdc_xREG (.clk(clk),.reset(reset[21]),.en(decode_zc_rdc), .din({1'b0,rdc}),.qout(zc_rdc[4:0]));
niu_zcp_handle_decoder niu_zcp_handle_decoder
.rdmc_zcp_func_num (rdmc_zcp_func_num[31:0]),
.page_handle (page_handle[`PMS15:0]));
/* --------------- spare gates --------------- */
zcp_spare_gates zcp_slv_spare_gates (
.di_nd3 ({1'h1, 1'h1, do_q[3]}),
.di_nd2 ({1'h1, 1'h1, do_q[2]}),
.di_nd1 ({1'h1, 1'h1, do_q[1]}),
.di_nd0 ({1'h1, 1'h1, do_q[0]}),
.rst ({reset[0],reset[0],reset[0],reset[0]}),