// ========== Copyright Header Begin ==========================================
// OpenSPARC T2 Processor File: niu_ipp_1ke.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_ipp_1ke.v
Module(s) name : niu_ipp_1ke
Original: : ipp.v main.70, label: IPP_VERIF_1.84
Parent modules : niu_ipp_top.v
Child modules : niu_ipp_load.v, niu_ipp_slv.v, niu_ipp_lib.v,
niu_ipp_hdr_fifo.v, niu_ipp_dat_fifo_1ke.v, niu_ipp_sum_unit.v,
niu_ipp_unload_ctl_1ke.v, niu_ipp_unload_dat.v, niu_ipp_pkt_dsc.v,
Author's name : Jonathan Shen, George Chu
Description : Top level of single IPP.
************************************************************
***********************************************************/
/* top level of single ipp block*/
mbi_prebuf_header_rd_addr,
mbi_prebuf_header_wr_addr,
mbi_prebuf_header_scan_in,
mbi_prebuf_header_scan_out,
mbi_prebuf_header_data_out,
mbi_rx_data_fifo_rd_addr,
mbi_rx_data_fifo_wr_addr,
mbi_rx_data_fifo_scan_in,
mbi_rx_data_fifo_scan_out,
mbi_rx_data_fifo_data_out,
); // end of pin definition
input tcu_se_scancollar_in;
input tcu_se_scancollar_out;
input tcu_array_wr_inhibit;
input [6:0] hdr_sram_rvalue;
input [2:0] hdr_sram_rid;
output [6:0] sram_hdr_read_data;
input [7:0] mbi_prebuf_header_wdata;
input [5:0] mbi_prebuf_header_rd_addr;
input [5:0] mbi_prebuf_header_wr_addr;
input mbi_prebuf_header_wr_en;
input mbi_prebuf_header_rd_en;
input mbi_prebuf_header_run;
input mbi_prebuf_header_scan_in;
output mbi_prebuf_header_scan_out;
output [145:0] mbi_prebuf_header_data_out;
input [7:0] mbi_rx_data_fifo_wdata;
input [9:0] mbi_rx_data_fifo_rd_addr;
input [9:0] mbi_rx_data_fifo_wr_addr;
input mbi_rx_data_fifo_wr_en;
input mbi_rx_data_fifo_rd_en;
input mbi_rx_data_fifo_run;
input mbi_rx_data_fifo_scan_in;
output mbi_rx_data_fifo_scan_out;
output [145:0] mbi_rx_data_fifo_data_out;
input mac_ipp_req; // bmac sends the request to ipp
input xmac_ipp_ack; // xmac sends the ack to ipp
input mac_ipp_tag; // mac identifies the last part packet
input [63:0] mac_ipp_data; // mac writing the data to ipp
input mac_ipp_ctrl; // active high for control information
input [22:0] mac_ipp_stat; // mac writing the status to ipp
input ffl_ipp_ready; // ffl ready to take header
input ffl_ipp_dvalid; // which port's parsed data is valid
input [13:0] ffl_ipp_data; // parsed packet header information
input dmc_ipp_dat_req; // dmc request data from ipp_data_fifo
input ipp_pio_sel; // behaves like req
input [13:0] ipp_pio_addr; // addr for slave
input [14:0] ipp_pio_addr; // addr for slave
input ipp_pio_rd; // 1: rd; 0: wr.
input [31:0] ipp_pio_wdata; // wr data bus
output ipp_mac_ack; // ack from ipp to bmac
output ipp_xmac_req; // req(as rdy) from ipp to xmac
output ipp_ffl_dvalid; // valid data from ipp to ffl
output [127:0] ipp_ffl_data; // ipp sends a packet's header data
output [11:0] ipp_ffl_mac_default; // default value of mac addr table
output [129:0] ipp_dmc_data;
output ipp_ffl_req; // packet header data is valid
output ipp_pio_ack; // ack from nrx
output [31:0] ipp_pio_rdata; // rd data bus
/*****************************************************************************/
wire [129:0] ipp_dmc_data;
wire ipp_ecc_corrupt_sop;
wire ipp_ecc_corrupt_2nd;
wire ipp_ecc_corrupt_eop;
wire ipp_ecc_corrupt_sing;
wire ipp_ecc_corrupt_doub;
wire ipp_ecc_corrupt_no_uncor;
wire ecc_pkt_corrupted_clr;
wire ipp_enable = config_reg[0];
wire debug_out_ena = config_reg[1];
wire dfifo_ecc_correct_en = config_reg[2];
wire ipp_hfifo_par_err_inc_en = config_reg[3];
wire pio_cksum_ena = config_reg[4];
wire datfifo_pio_wr_ena = config_reg[5];
wire ippfifo_rd_wr_ptr_bypass = config_reg[6]; // to ipp_load
wire bypass_ffl = config_reg[7];
wire [16:0] ipp_max_bytes = config_reg[24:8];
wire pio_full_cksum = 1'h0; // geo: pio directly selects, No need
wire xmac_mode; //1: xmac, 0: big mac;
wire ippfifo_rd_ptr_pio_wr_en; // from slave to ipp_load
wire ippfifo_wr_ptr_pio_wr_en; // from slave to ipp_load
wire dfifo_wt_data_reg_wr_en_pls;
wire dfifo_rd_ptr_pio_wr_en;
wire dfifo_wt_ptr_pio_wr_en;
wire mac_ipp_req; // from ipp to ipp_slv
wire xmac_ipp_ack; // from ipp to ipp_slv
wire mac_ipp_tag; // from ipp to ipp_slv
wire [63:0] mac_ipp_data; // from ipp to ipp_slv
wire mac_ipp_ctrl; // from ipp to ipp_slv
wire [22:0] mac_ipp_stat; // from ipp to ipp_slv
wire ipp_mac_ack; // from ipp to ipp_slv
wire ipp_xmac_req; // from ipp to ipp_slv
wire [129:0] fifo_wr_data_reg;
wire fifo_wr_data_reg_wr_en_pls;
wire vec_cycle1_wr_en; // geo: this is for pio programming fflp_ipp_sum
wire [2:0] phase_state_xmac;
wire phase_state_1st_data;
wire [3:0] mac_ack_fsm_curstate;
wire [1:0] ipp_ffl_curstate;
wire [1:0] tag_fsm_curstate;
wire [1:0] ipp_en_rst_fsm_curstate;
wire [31:0] ipp_pio_rdata;
wire ipp_inc_pkt_dsc_cnt;
wire [15:0] sum_prt_cksum;
wire [15:0] sum_prt_length;
wire [31:0] sum_prt_state;
wire [6:0] ipp_hfifo_wptr;
wire [5:0] ipp_hfifo_rptr;
wire ipp_hfifo_dat_empty;
wire ipp_hfifo_over_run_r;
wire ipp_hfifo_under_run_r;
wire [6:0] cur_pkt_hdr_base_ptr;
wire [13:0] cur_pkt_ffl_sum_info;
wire [145:0] ipp_hfifo_dout;
wire [5:0] ipp_hfifo_par_addr;
wire ipp_hfifo_par_err_inc = ipp_hfifo_par_err && ipp_hfifo_par_err_inc_en;
wire [129:0] ipp_hfifo_dinp;
wire inc_hfifo_dat_rptr_d;
wire [6:0] ipp_hfifo_dat_rptr;
wire [1:0] ipp_hfifo_dat_tag_rd;
wire [10:0] ipp_dfifo_wptr; // addr[9:0] of 16k-byte data, 1k entries, + 1_wrap
wire [10:0] ipp_dfifo_rptr; // addr[9:0] of 16k-byte data, 1k entries, + 1_wrap
wire req_rd_dfifo_eop; // geo: may NOT need
wire req_rd_dfifo_sop; // geo: may NOT need
wire fwd_posting_dn = clr_ipp_unload;
wire [129:0] ipp_dfifo_dinp;
wire sum_prt_fail_act = sum_prt_fail && ipp_full_cksum && fet_pio_tcp_ena;
wire [1:0] ipp_dfifo_dout0_tag;
wire [129:0] ipp_dfifo_dout1;
wire [31:0] ipp_dfifo_dout1_ecc;
wire [15:0] ipp_dfifo_dout1_ecc_syn;
wire [1:0] rd_eop; //10: eop, data; 11: stat, eop
wire [1:0] rd_stat; //01: null, stat; 11: stat, eop
wire [145:0] fifo_data_out = inc_hfifo_dat_rptr_d ? ipp_hfifo_dout[145:0] : 146'h0; // geo
wire rd_abort_occ = (rd_stat[1:0] == 2'b01) ?
((rd_stat[1:0] == 2'b11) ?
fifo_data_out[79] : 1'b0);
ipp_RSFF RSFF_abortOc (.reset(reset), .clk(clk), .set(rd_abort_occ),
.rst(fwd_posting_dn), .Q(rd_abort));
wire bad_crc_occ = (rd_stat[1:0] == 2'b01) ?
((rd_stat[1:0] == 2'b11) ?
fifo_data_out[78] : 1'b0);
ipp_RSFF RSFF_bad_crcOc (.reset(reset), .clk(clk), .set(bad_crc_occ),
.rst(fwd_posting_dn), .Q(bad_crc));
wire drop_bad_crc = bad_crc;
reg [145:0] fifo_data_out_reg; // for ipp_slv
fifo_data_out_reg[145:0] <= 146'h0;
//g:fifo_data_out_reg[145:0] <= fifo_data_out[145:0];
fifo_data_out_reg[145:0] <= ipp_hfifo_dout[145:0];
/***** ipp_ffl hand-shaking *****/
wire [127:0] ipp_ffl_data = ipp_hfifo_dout[127:0];
wire eop_from_hdr_fifo = ipp_hfifo_dout[129];
//****** Phase Monitor at IPP fifo data out point ******
// Generating rd_eop, rd_status
wire /* geo */ fifo_rd_en_reg = inc_hfifo_dat_rptr_d; // 1 cycle delay of fifo_rd_en; no rd advance
wire [1:0] ipp_fifo_rd_tag;
assign ipp_fifo_rd_tag[1:0] = {fifo_rd_en_reg & fifo_data_out[129],
fifo_rd_en_reg & fifo_data_out[128]};
/******************************* Instantiation *******************************/
// geo: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ NIU ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// synopsys translate_off
wire [15:0] dmc_sum_prt_cksum;
wire [31:0] dmc_sum_prt_state;
niu_ipp_dmc_checker ipp_dmc_checker_0 (
.ipp_dmc_data (ipp_dmc_data[129:0]),
.ipp_dmc_dat_ack (ipp_dmc_dat_ack),
.ipp_dmc_ful_pkt (ipp_dmc_ful_pkt),
.dmc_sum_prt_fail (dmc_sum_prt_fail),
.dmc_sum_prt_cksum (dmc_sum_prt_cksum[15:0]),
.dmc_sum_prt_state (dmc_sum_prt_state[31:0]),
.dmc_sum_prt_valid (dmc_sum_prt_valid));
// ---------------------------------------------------------------------------
niu_ipp_pkt_dsc ipp_pkt_dsc_0 (
.ipp_hfifo_par_err_inc (ipp_hfifo_par_err_inc),
.clr_ipp_unload (clr_ipp_unload),
.ipp_dsc_pkt (ipp_dsc_pkt),
.ipp_inc_pkt_dsc_cnt (ipp_inc_pkt_dsc_cnt)
reg ipp_hfifo_dat_tag_rd1_d;
ipp_sum_info_vld_d <= 1'h0;
ipp_hfifo_dat_tag_rd1_d <= 1'h0;
ipp_sum_info_vld_d <= ipp_sum_info_vld;
ipp_start_tcp_d <= ipp_start_tcp;
ipp_hfifo_dat_tag_rd1_d <= ipp_hfifo_dat_tag_rd[1];
niu_ipp_sum_unit sum_unit_0 (
.ipp_din_dat (fifo_data_out_reg[127:0]),
.port_num (1'h1 /* geo */),
.ipp_full_cksum (1'h1 /* rxc */),
.ipp_la4_prot (ipp_la4_prot[1:0]),
.ipp_la3_vers (ipp_la3_vers[1:0]),
.ipp_la2_opti (ipp_la2_opti[1:0]),
.ip4_hdr_leng (ip4_hdr_leng[3:0]),
.ipp_info_valid (ipp_sum_info_vld_d),
.ipp_start_tcp (ipp_start_tcp_d),
.ipp_pkt_end (ipp_hfifo_dat_tag_rd1_d),
.ipp_max_bytes (ipp_max_bytes[16:0]),
.sum_prt_started (sum_prt_started),
.sum_prt_valid (sum_prt_valid),
.sum_prt_fail (sum_prt_fail),
.sum_prt_cksum (sum_prt_cksum[15:0]),
.sum_prt_length (sum_prt_length[15:0]),
.sum_prt_state (sum_prt_state[31:0])
-read_addr ipp_hfifo_dat_rptr[5:0]
-read inc_hfifo_dat_rptr_d
-write_addr ipp_hfifo_wptr[5:0]
-read_data ipp_hfifo_dout
-write_data ipp_hfifo_dinp
-message "test ipp_ffl_hdr_fifo_146x64 FIFO"
wire [6:0] sram_hdr_read_data;
wire mbi_prebuf_header_scan_out;
wire mbi_rx_data_fifo_scan_out;
wire [145:0] mbi_prebuf_header_data_out = ipp_hfifo_dout[145:0];
wire [145:0] mbi_rx_data_fifo_data_out;
wire [145:0] mbi_prebuf_header_wdata_146 = {mbi_prebuf_header_wdata[1:0],{18{mbi_prebuf_header_wdata}}};
wire [145:0] mbi_rx_data_fifo_wdata_146 = {mbi_rx_data_fifo_wdata[1:0], {18{mbi_rx_data_fifo_wdata}}};
niu_ipp_hdr_fifo ipp_hdr_fifo_0 (
.tcu_se_scancollar_in (tcu_se_scancollar_in),
.tcu_array_wr_inhibit (tcu_array_wr_inhibit),
.scan_in (mbi_prebuf_header_scan_in),
.scan_out (mbi_prebuf_header_scan_out),
.mbi_wdata (mbi_prebuf_header_wdata_146),
.mbi_rd_adr (mbi_prebuf_header_rd_addr),
.mbi_wr_adr (mbi_prebuf_header_wr_addr),
.mbi_wr_en (mbi_prebuf_header_wr_en),
.mbi_rd_en (mbi_prebuf_header_rd_en),
.mbi_run (mbi_prebuf_header_run),
.ipp_hfifo_rden (ipp_hfifo_rden),
.ipp_hfifo_rptr (ipp_hfifo_rptr[5:0]),
.ipp_hfifo_wptr (ipp_hfifo_wptr[5:0]),
.ipp_hfifo_wten (ipp_hfifo_wten),
.ipp_hfifo_dinp (ipp_hfifo_dinp[129:0]),
.inc_hfifo_dat_rptr_d (inc_hfifo_dat_rptr_d),
.ipp_ffl_dvalid_n (ipp_ffl_dvalid_n),
.clr_ipp_hfifo_par_err (clr_ipp_unload),
.ipp_hfifo_dout (ipp_hfifo_dout[145:0]),
.ipp_hfifo_par_err (ipp_hfifo_par_err),
.ipp_hfifo_par_addr (ipp_hfifo_par_addr[5:0])
.mac_ipp_req(mac_ipp_req),
.xmac_ipp_ack(xmac_ipp_ack),
.mac_ipp_data(mac_ipp_data),
.mac_ipp_tag(mac_ipp_tag),
.mac_ipp_ctrl(mac_ipp_ctrl),
.mac_ipp_stat(mac_ipp_stat),
.ffl_ipp_ready(ffl_ipp_ready),
.ffl_ipp_dvalid(ffl_ipp_dvalid),
.fflp_ipp_sum (ffl_ipp_data[13:0]),
.ffl_arb_ack(ffl_arb_ack),
.ippfifo_rd_wr_ptr_bypass(ippfifo_rd_wr_ptr_bypass),
.ippfifo_wr_ptr_pio_wr_en(ippfifo_wr_ptr_pio_wr_en),
.eop_from_hdr_fifo(eop_from_hdr_fifo),
.pio_wr_data (ipp_pio_wdata[13:0]),
.fifo_wr_data_reg(fifo_wr_data_reg),
.fifo_wr_data_reg_wr_en_pls(fifo_wr_data_reg_wr_en_pls),
.bypass_ffl (bypass_ffl),
.vec_cycle1_wr_en (vec_cycle1_wr_en),
.inc_hfifo_dat_rptr (inc_hfifo_dat_rptr),
.ipp_hfifo_dat_rptr (ipp_hfifo_dat_rptr[6:0]),
.n_ipp_unload_idle (n_ipp_unload_idle),
.clr_ipp_unload (clr_ipp_unload),
.ipp_mac_ack(ipp_mac_ack),
.ipp_xmac_req(ipp_xmac_req),
.ipp_ffl_dvalid(ipp_ffl_dvalid),
.ipp_ffl_dvalid_n(ipp_ffl_dvalid_n),
.ipp_ffl_mac_default(ipp_ffl_mac_default),
.ipp_ffl_req(ipp_ffl_req),
.fifo_wr_en (ipp_hfifo_wten),
.fifo_wr_ptr (ipp_hfifo_wptr[6:0]),
.ipp_hfifo_rden (ipp_hfifo_rden),
.ipp_hfifo_rptr (ipp_hfifo_rptr[5:0]),
.ipp_hfifo_dat_empty (ipp_hfifo_dat_empty),
.fifo_data_in (ipp_hfifo_dinp[129:0]),
.ipp_hfifo_over_run_r (ipp_hfifo_over_run_r),
.ipp_hfifo_under_run_r (ipp_hfifo_under_run_r),
.phase_state_xmac(phase_state_xmac),
.phase_state(phase_state),
.phase_state_1st_data(phase_state_1st_data),
.mac_ack_fsm_curstate(mac_ack_fsm_curstate),
.ipp_ffl_curstate(ipp_ffl_curstate),
.cur_pkt_hdr_base_ptr (cur_pkt_hdr_base_ptr[6:0]),
.cur_pkt_ffl_sum_info (cur_pkt_ffl_sum_info[13:0])
niu_ipp_unload_ctl_1ke ipp_unload_ctl_1ke_0 (
.ipp_ffl_dvalid_n (ipp_ffl_dvalid_n),
.cur_pkt_hdr_base_ptr (cur_pkt_hdr_base_ptr[6:0]),
.cur_pkt_ffl_sum_info (cur_pkt_ffl_sum_info[9:0]),
.ipp_hfifo_dat_tag (ipp_hfifo_dout[129:128]),
.ipp_hfifo_dat_empty (ipp_hfifo_dat_empty),
.ipp_dfifo_dout_tag (ipp_dfifo_dout0_tag[1:0]),
.ipp_dmc_dat_err1 (ipp_dmc_dat_err1),
.sum_prt_valid (sum_prt_valid),
.dmc_ipp_dat_req (dmc_ipp_dat_req),
.pio_cksum_ena (pio_cksum_ena),
.pio_full_cksum (pio_full_cksum),
.ipp_enable (ipp_enable),
.ippfifo_rd_wr_ptr_bypass (ippfifo_rd_wr_ptr_bypass),
.ippfifo_rd_ptr_pio_wr_en (ippfifo_rd_ptr_pio_wr_en),
.datfifo_pio_wr_ena (datfifo_pio_wr_ena),
.dfifo_rd_ptr_pio_wr_en (dfifo_rd_ptr_pio_wr_en),
.dfifo_wt_ptr_pio_wr_en (dfifo_wt_ptr_pio_wr_en),
.dfifo_wt_data_reg_wr_en_pls (dfifo_wt_data_reg_wr_en_pls),
.ipp_pio_wdata (ipp_pio_wdata[10:0]),
.inc_hfifo_dat_rptr (inc_hfifo_dat_rptr),
.inc_hfifo_dat_rptr_d (inc_hfifo_dat_rptr_d),
.ipp_hfifo_dat_rptr (ipp_hfifo_dat_rptr[6:0]),
.ipp_hfifo_dat_tag_rd (ipp_hfifo_dat_tag_rd[1:0]),
.ipp_dfifo_wptr (ipp_dfifo_wptr[10:0]),
.ipp_dfifo_wten (ipp_dfifo_wten),
.ipp_dfifo_wten_2nd (ipp_dfifo_wten_2nd),
.ipp_dfifo_rden (ipp_dfifo_rden),
.ipp_dfifo_rptr (ipp_dfifo_rptr[10:0]),
.ipp_dfifo_full (ipp_dfifo_full),
.wt_dfifo_1st_wd (wt_dfifo_1st_wd),
.addr_status (addr_status[11:0]),
.ipp_dmc_dat_ack (ipp_dmc_dat_ack),
.ipp_dmc_ful_pkt (ipp_dmc_ful_pkt),
.ipp_full_cksum (ipp_full_cksum),
.ipp_start_tcp (ipp_start_tcp),
.ipp_sum_info_vld (ipp_sum_info_vld),
.req_rd_dfifo_eop (req_rd_dfifo_eop),
.req_rd_dfifo_sop (req_rd_dfifo_sop),
.ipp_la2_opti (ipp_la2_opti[1:0]),
.ipp_la3_vers (ipp_la3_vers[1:0]),
.ip4_hdr_leng (ip4_hdr_leng[3:0]),
.ipp_la4_prot (ipp_la4_prot[1:0]),
.clr_ipp_unload (clr_ipp_unload),
.n_ipp_unload_idle (n_ipp_unload_idle),
.fet_pio_tcp_ena (fet_pio_tcp_ena),
.dfifo_miss_eop (dfifo_miss_eop),
.dfifo_miss_sop (dfifo_miss_sop),
.c_unload_st (c_unload_st[4:0])
niu_ipp_unload_dat ipp_unload_dat_0 (
.ipp_hfifo_dat_dout (ipp_hfifo_dout[129:0]),
.inc_hfifo_dat_rptr_d (inc_hfifo_dat_rptr_d),
.ipp_hfifo_dat_tag_rd (rd_stat /* geo: ipp_hfifo_dat_tag_rd[1:0] */),
.wt_dfifo_1st_wd (wt_dfifo_1st_wd),
.cur_pkt_ffl_sum_info (cur_pkt_ffl_sum_info[13:0]),
.ipp_dsc_pkt (ipp_dsc_pkt),
.mac_drop_bad_crc (1'h0 /* geo: drop_bad_crc */),
.status_rd_abort (rd_abort),
.ipp_hfifo_over_run_r (1'h0 /* geo: ipp_hfifo_over_run_r */),
.ipp_hfifo_under_run_r (1'h0 /* geo: ipp_hfifo_under_run_r */),
.ipp_hfifo_par_err (1'h0 /* geo: ipp_hfifo_par_err */),
.fet_pio_tcp_ena (fet_pio_tcp_ena),
.ipp_full_cksum (ipp_full_cksum),
.sum_prt_cksum (sum_prt_cksum[15:0]),
.sum_prt_length (sum_prt_length[15:0]),
.sum_prt_fail (sum_prt_fail_act),
`ifdef NEPTUNE .addr_status (12'h0 /* geo: addr_status[11:0] */),
`else .addr_status (addr_status[11:0]),
.datfifo_pio_wr_ena (datfifo_pio_wr_ena),
.dfifo_wt_data_reg (fifo_wr_data_reg[129:0]),
.clr_ipp_unload (clr_ipp_unload),
.ipp_dfifo_dinp (ipp_dfifo_dinp[129:0])
niu_ipp_dat_fifo_1ke ipp_dat_fifo_1ke_0 (
`else .tcu_aclk (tcu_aclk),
.tcu_scan_en (tcu_scan_en),
.tcu_se_scancollar_in (tcu_se_scancollar_in),
.tcu_se_scancollar_out (tcu_se_scancollar_out),
.tcu_array_wr_inhibit (tcu_array_wr_inhibit),
.scan_in (mbi_rx_data_fifo_scan_in),
.scan_out (mbi_rx_data_fifo_scan_out),
.hdr_sram_rvalue (hdr_sram_rvalue[6:0]),
.hdr_sram_rid (hdr_sram_rid[2:0]),
.hdr_sram_wr_en (hdr_sram_wr_en),
.hdr_sram_red_clr (hdr_sram_red_clr),
.sram_hdr_read_data (sram_hdr_read_data[6:0]),
.mbi_wdata (mbi_rx_data_fifo_wdata_146),
.mbi_rd_adr (mbi_rx_data_fifo_rd_addr),
.mbi_wr_adr (mbi_rx_data_fifo_wr_addr),
.mbi_wr_en (mbi_rx_data_fifo_wr_en),
.mbi_rd_en (mbi_rx_data_fifo_rd_en),
.mbi_run (mbi_rx_data_fifo_run),
.mbi_rx_data_fifo_data_out (mbi_rx_data_fifo_data_out),
.ipp_dfifo_rden (ipp_dfifo_rden),
.ipp_dfifo_rptr (ipp_dfifo_rptr[9:0]),
.ipp_dfifo_wptr (ipp_dfifo_wptr[9:0]),
.ipp_dfifo_wten (ipp_dfifo_wten),
.ipp_dfifo_wten_2nd (ipp_dfifo_wten_2nd),
.ipp_dfifo_dinp (ipp_dfifo_dinp[129:0]),
.ipp_ecc_corrupt_sop (ipp_ecc_corrupt_sop),
.ipp_ecc_corrupt_2nd (ipp_ecc_corrupt_2nd),
.ipp_ecc_corrupt_eop (ipp_ecc_corrupt_eop),
.ipp_ecc_corrupt_sing (ipp_ecc_corrupt_sing),
.ipp_ecc_corrupt_doub (ipp_ecc_corrupt_doub),
.ipp_ecc_corrupt_no_uncor(ipp_ecc_corrupt_no_uncor),
.dfifo_ecc_correct_en (dfifo_ecc_correct_en),
.ecc_pkt_corrupted_clr (ecc_pkt_corrupted_clr),
.ipp_dfifo_dout (ipp_dmc_data[129:0]),
.ipp_dfifo_dout0_tag (ipp_dfifo_dout0_tag[1:0]),
.ipp_dmc_dat_err (ipp_dmc_dat_err),
.ipp_dmc_dat_err1 (ipp_dmc_dat_err1),
.ipp_dfifo_dout1 (ipp_dfifo_dout1[129:0]),
.ipp_dfifo_dout1_ecc (ipp_dfifo_dout1_ecc[31:0]),
.ipp_dfifo_dout1_ecc_syn (ipp_dfifo_dout1_ecc_syn[15:0]),
.ecc_pkt_corrupted (ecc_pkt_corrupted)
.fifo_data_out_reg (fifo_data_out_reg[145:0]),
.inc_pkt_disc_cntr (ipp_inc_pkt_dsc_cnt),
.sum_prt_fail (sum_prt_fail),
.sum_prt_valid (sum_prt_valid),
.fifo_over_run (ipp_hfifo_over_run_r),
.fifo_under_run (ipp_hfifo_under_run_r),
.par_err (ipp_hfifo_par_err),
.ipp_hfifo_par_addr (ipp_hfifo_par_addr[5:0]),
.fwd_vec_cycle1 (cur_pkt_ffl_sum_info[13:0]),
.fifo_rd_ptr (ipp_hfifo_dat_rptr[5:0]),
.fifo_wr_ptr (ipp_hfifo_wptr[6:0]),
.ipp_dfifo_rptr ({1'h0,ipp_dfifo_rptr[10:0]}),
.ipp_dfifo_wptr ({1'h0,ipp_dfifo_wptr[10:0]}),
.ipp_dfifo_dout1 (ipp_dfifo_dout1[129:0]),
.ipp_dfifo_dout1_ecc (ipp_dfifo_dout1_ecc[18:0]),
.ipp_dfifo_dout1_ecc_syn (ipp_dfifo_dout1_ecc_syn[15:0]),
.dfifo_miss_eop (dfifo_miss_eop),
.dfifo_miss_sop (dfifo_miss_sop),
.ecc_pkt_corrupted (ecc_pkt_corrupted),
.state_mach0({1'b0, phase_state[2:0]}),
.state_mach1({mac_ack_fsm_curstate[3:0]}),
.state_mach2({2'b0, ipp_ffl_curstate[1:0]}),
.state_mach3 (c_unload_st[3:0]),
.state_mach4 ({3'h0,c_unload_st[4]}),
.state_mach5 ({phase_state_1st_data,phase_state_xmac[2:0]}),
.state_mach6({2'b0, tag_fsm_curstate[1:0]}),
.state_mach7({2'b0, ipp_en_rst_fsm_curstate[1:0]}),
.state_mach8 (sum_prt_state[03:00]),
.state_mach9 (sum_prt_state[07:04]),
.state_mach10 (sum_prt_state[11:08]),
.state_mach11 (sum_prt_state[15:12]),
.state_mach12 (sum_prt_state[19:16]),
.state_mach13 (sum_prt_state[23:20]),
.state_mach14 (sum_prt_state[27:24]),
.state_mach15 (sum_prt_state[31:28]),
.mac_ipp_req(mac_ipp_req),
.xmac_ipp_ack(xmac_ipp_ack),
.mac_ipp_tag(mac_ipp_tag),
.mac_ipp_data(mac_ipp_data),
.mac_ipp_ctrl(mac_ipp_ctrl),
.mac_ipp_stat(mac_ipp_stat),
.ipp_mac_ack(ipp_mac_ack),
.ipp_xmac_req(ipp_xmac_req),
.ffl_ipp_data (ffl_ipp_data[13:0]),
.ffl_ipp_dvalid (ffl_ipp_dvalid),
.ffl_ipp_ready (ffl_ipp_ready),
.ipp_ffl_mac_default (ipp_ffl_mac_default[11:0]),
.ipp_ffl_dvalid (ipp_ffl_dvalid),
.ffl_arb_ack (ffl_arb_ack),
.ipp_ffl_req (ipp_ffl_req),
.ipp_pio_sel(ipp_pio_sel),
`ifdef NEPTUNE .ipp_pio_addr (ipp_pio_addr[13:0]),
`else .ipp_pio_addr (ipp_pio_addr[14:0]),
`endif .ipp_pio_rd (ipp_pio_rd),
.ipp_pio_wdata(ipp_pio_wdata),
.fifo_wr_data_reg(fifo_wr_data_reg),
.fifo_wr_data_reg_wr_en_pls(fifo_wr_data_reg_wr_en_pls),
.config_reg (config_reg[24:0]),
.vec_cycle1_wr_en(vec_cycle1_wr_en),
.ippfifo_rd_ptr_pio_wr_en(ippfifo_rd_ptr_pio_wr_en),
.ippfifo_wr_ptr_pio_wr_en(ippfifo_wr_ptr_pio_wr_en),
.dfifo_wt_data_reg_wr_en_pls (dfifo_wt_data_reg_wr_en_pls),
.dfifo_rd_ptr_pio_wr_en (dfifo_rd_ptr_pio_wr_en),
.dfifo_wt_ptr_pio_wr_en (dfifo_wt_ptr_pio_wr_en),
.wr_ipp_en_bit0(wr_ipp_en_bit0),
.ipp_pio_ack(ipp_pio_ack),
.ipp_pio_rdata(ipp_pio_rdata),
.ipp_pio_err(ipp_pio_err),
.ipp_pio_intr(ipp_pio_intr),
.ipp_ecc_corrupt_sop (ipp_ecc_corrupt_sop),
.ipp_ecc_corrupt_2nd (ipp_ecc_corrupt_2nd),
.ipp_ecc_corrupt_eop (ipp_ecc_corrupt_eop),
.ipp_ecc_corrupt_sing (ipp_ecc_corrupt_sing),
.ipp_ecc_corrupt_doub (ipp_ecc_corrupt_doub),
.ipp_ecc_corrupt_no_uncor (ipp_ecc_corrupt_no_uncor),
.ecc_pkt_corrupted_clr (ecc_pkt_corrupted_clr),
reg fifo_empty_reg; // fifo is read in front; same as ipp_hfifo_dat_empty
fifo_empty_reg <= ipp_hfifo_dat_empty;
ipp_phase_sm2 phase_sm2_u1 (
.valid(~fifo_data_out[129] & ~fifo_data_out[128] &
.rx_tag(ipp_fifo_rd_tag),
.cur_state(tag_fsm_curstate)
wire IFG = tag_fsm_curstate[1:0] == 2'b00;
niu_ipp_en_rst_fsm ipp_en_rst_fsm_u1(.clk(clk), .reset(reset2),
.ipp_enable(ipp_enable), .wr_ipp_en_bit0(wr_ipp_en_bit0),
.mac_stat(rd_stat[0]), .IFG(IFG), .rst_ipp_en(rst_ipp_en),
.ipp_en_rst_fsm_curstate(ipp_en_rst_fsm_curstate[1:0]));
endmodule // end of ipp module