--- /dev/null
+//////////////////////////////////////////////////////////////////////
+//// ////
+//// File name "wb_slave_unit.v" ////
+//// ////
+//// This file is part of the "PCI bridge" project ////
+//// http://www.opencores.org/cores/pci/ ////
+//// ////
+//// Author(s): ////
+//// - Miha Dolenc (mihad@opencores.org) ////
+//// ////
+//// All additional information is avaliable in the README ////
+//// file. ////
+//// ////
+//// ////
+//////////////////////////////////////////////////////////////////////
+//// ////
+//// Copyright (C) 2001 Miha Dolenc, mihad@opencores.org ////
+//// ////
+//// This source file may be used and distributed without ////
+//// restriction provided that this copyright statement is not ////
+//// removed from the file and that any derivative work contains ////
+//// the original copyright notice and the associated disclaimer. ////
+//// ////
+//// This source file is free software; you can redistribute it ////
+//// and/or modify it under the terms of the GNU Lesser General ////
+//// Public License as published by the Free Software Foundation; ////
+//// either version 2.1 of the License, or (at your option) any ////
+//// later version. ////
+//// ////
+//// This source 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 Lesser General Public License for more ////
+//// details. ////
+//// ////
+//// You should have received a copy of the GNU Lesser General ////
+//// Public License along with this source; if not, download it ////
+//// from http://www.opencores.org/lgpl.shtml ////
+//// ////
+//////////////////////////////////////////////////////////////////////
+//
+// CVS Revision History
+//
+// $Log: pci_wb_slave_unit.v,v $
+// Revision 1.1 2007-03-20 17:50:56 sithglan
+// add shit
+//
+// Revision 1.4 2006/07/04 13:16:19 mihad
+// Write burst performance patch applied.
+// Not tested. Everything should be backwards
+// compatible, since functional code is ifdefed.
+//
+// Revision 1.3 2004/01/24 11:54:18 mihad
+// Update! SPOCI Implemented!
+//
+// Revision 1.2 2003/10/17 09:11:52 markom
+// mbist signals updated according to newest convention
+//
+// Revision 1.1 2003/01/27 16:49:31 mihad
+// Changed module and file names. Updated scripts accordingly. FIFO synchronizations changed.
+//
+// Revision 1.8 2002/10/18 03:36:37 tadejm
+// Changed wrong signal name mbist_sen into mbist_ctrl_i.
+//
+// Revision 1.7 2002/10/17 22:49:22 tadejm
+// Changed BIST signals for RAMs.
+//
+// Revision 1.6 2002/10/11 10:09:01 mihad
+// Added additional testcase and changed rst name in BIST to trst
+//
+// Revision 1.5 2002/10/08 17:17:06 mihad
+// Added BIST signals for RAMs.
+//
+// Revision 1.4 2002/09/25 15:53:52 mihad
+// Removed all logic from asynchronous reset network
+//
+// Revision 1.3 2002/02/01 15:25:13 mihad
+// Repaired a few bugs, updated specification, added test bench files and design document
+//
+// Revision 1.2 2001/10/05 08:14:30 mihad
+// Updated all files with inclusion of timescale file for simulation purposes.
+//
+// Revision 1.1.1.1 2001/10/02 15:33:46 mihad
+// New project directory structure
+//
+//
+
+// Module instantiates and connects other modules lower in hierarcy
+// Wishbone slave unit consists of modules that together form datapath
+// between external WISHBONE masters and external PCI targets
+`include "pci_constants.v"
+
+// synopsys translate_off
+`include "timescale.v"
+// synopsys translate_on
+
+module pci_wb_slave_unit
+(
+ reset_in,
+ wb_clock_in,
+ pci_clock_in,
+ ADDR_I,
+ SDATA_I,
+ SDATA_O,
+ CYC_I,
+ STB_I,
+ WE_I,
+ SEL_I,
+ ACK_O,
+ RTY_O,
+ ERR_O,
+ CAB_I,
+ wbu_map_in,
+ wbu_pref_en_in,
+ wbu_mrl_en_in,
+ wbu_pci_drcomp_pending_in,
+ wbu_conf_data_in,
+ wbu_pciw_empty_in,
+ wbu_bar0_in,
+ wbu_bar1_in,
+ wbu_bar2_in,
+ wbu_bar3_in,
+ wbu_bar4_in,
+ wbu_bar5_in,
+ wbu_am0_in,
+ wbu_am1_in,
+ wbu_am2_in,
+ wbu_am3_in,
+ wbu_am4_in,
+ wbu_am5_in,
+ wbu_ta0_in,
+ wbu_ta1_in,
+ wbu_ta2_in,
+ wbu_ta3_in,
+ wbu_ta4_in,
+ wbu_ta5_in,
+ wbu_at_en_in,
+ wbu_ccyc_addr_in ,
+ wbu_master_enable_in,
+ wb_init_complete_in,
+ wbu_cache_line_size_not_zero,
+ wbu_cache_line_size_in,
+ wbu_pciif_gnt_in,
+ wbu_pciif_frame_in,
+ wbu_pciif_irdy_in,
+ wbu_pciif_trdy_in,
+ wbu_pciif_trdy_reg_in,
+ wbu_pciif_stop_in,
+ wbu_pciif_stop_reg_in,
+ wbu_pciif_devsel_in,
+ wbu_pciif_devsel_reg_in,
+ wbu_pciif_ad_reg_in,
+ wbu_pciif_req_out,
+ wbu_pciif_frame_out,
+ wbu_pciif_frame_en_out,
+ wbu_pciif_frame_en_in,
+ wbu_pciif_frame_out_in,
+ wbu_pciif_frame_load_out,
+ wbu_pciif_irdy_out,
+ wbu_pciif_irdy_en_out,
+ wbu_pciif_ad_out,
+ wbu_pciif_ad_en_out,
+ wbu_pciif_cbe_out,
+ wbu_pciif_cbe_en_out,
+ wbu_err_addr_out,
+ wbu_err_bc_out,
+ wbu_err_signal_out,
+ wbu_err_source_out,
+ wbu_err_rty_exp_out,
+ wbu_tabort_rec_out,
+ wbu_mabort_rec_out,
+ wbu_conf_offset_out,
+ wbu_conf_renable_out,
+ wbu_conf_wenable_out,
+ wbu_conf_be_out,
+ wbu_conf_data_out,
+ wbu_del_read_comp_pending_out,
+ wbu_wbw_fifo_empty_out,
+ wbu_latency_tim_val_in,
+ wbu_ad_load_out,
+ wbu_ad_load_on_transfer_out
+
+`ifdef PCI_BIST
+ ,
+ // debug chain signals
+ mbist_si_i, // bist scan serial in
+ mbist_so_o, // bist scan serial out
+ mbist_ctrl_i // bist chain shift control
+`endif
+);
+
+input reset_in,
+ wb_clock_in,
+ pci_clock_in ;
+
+input [31:0] ADDR_I ;
+input [31:0] SDATA_I ;
+output [31:0] SDATA_O ;
+input CYC_I ;
+input STB_I ;
+input WE_I ;
+input [3:0] SEL_I ;
+output ACK_O ;
+output RTY_O ;
+output ERR_O ;
+input CAB_I ;
+
+input [5:0] wbu_map_in ;
+input [5:0] wbu_pref_en_in ;
+input [5:0] wbu_mrl_en_in ;
+
+input wbu_pci_drcomp_pending_in ;
+
+input [31:0] wbu_conf_data_in ;
+
+input wbu_pciw_empty_in ;
+
+input [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] wbu_bar0_in ;
+input [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] wbu_bar1_in ;
+input [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] wbu_bar2_in ;
+input [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] wbu_bar3_in ;
+input [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] wbu_bar4_in ;
+input [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] wbu_bar5_in ;
+input [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] wbu_am0_in ;
+input [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] wbu_am1_in ;
+input [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] wbu_am2_in ;
+input [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] wbu_am3_in ;
+input [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] wbu_am4_in ;
+input [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] wbu_am5_in ;
+input [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] wbu_ta0_in ;
+input [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] wbu_ta1_in ;
+input [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] wbu_ta2_in ;
+input [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] wbu_ta3_in ;
+input [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] wbu_ta4_in ;
+input [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] wbu_ta5_in ;
+input [5:0] wbu_at_en_in ;
+
+input [23:0] wbu_ccyc_addr_in ;
+
+input wbu_master_enable_in ;
+input wb_init_complete_in ;
+
+input wbu_cache_line_size_not_zero ;
+input [7:0] wbu_cache_line_size_in ;
+
+input wbu_pciif_gnt_in ;
+input wbu_pciif_frame_in ;
+input wbu_pciif_frame_en_in ;
+input wbu_pciif_irdy_in ;
+input wbu_pciif_trdy_in;
+input wbu_pciif_trdy_reg_in;
+input wbu_pciif_stop_in ;
+input wbu_pciif_stop_reg_in ;
+input wbu_pciif_devsel_in ;
+input wbu_pciif_devsel_reg_in ;
+input [31:0] wbu_pciif_ad_reg_in ;
+
+output wbu_pciif_req_out ;
+output wbu_pciif_frame_out ;
+output wbu_pciif_frame_en_out ;
+input wbu_pciif_frame_out_in ;
+output wbu_pciif_frame_load_out ;
+output wbu_pciif_irdy_out ;
+output wbu_pciif_irdy_en_out ;
+output [31:0] wbu_pciif_ad_out ;
+output wbu_pciif_ad_en_out ;
+output [3:0] wbu_pciif_cbe_out ;
+output wbu_pciif_cbe_en_out ;
+
+output [31:0] wbu_err_addr_out ;
+output [3:0] wbu_err_bc_out ;
+output wbu_err_signal_out ;
+output wbu_err_source_out ;
+output wbu_err_rty_exp_out ;
+output wbu_tabort_rec_out ;
+output wbu_mabort_rec_out ;
+
+output [11:0] wbu_conf_offset_out ;
+output wbu_conf_renable_out ;
+output wbu_conf_wenable_out ;
+output [3:0] wbu_conf_be_out ;
+output [31:0] wbu_conf_data_out ;
+
+output wbu_del_read_comp_pending_out ;
+output wbu_wbw_fifo_empty_out ;
+
+input [7:0] wbu_latency_tim_val_in ;
+
+output wbu_ad_load_out ;
+output wbu_ad_load_on_transfer_out ;
+
+`ifdef PCI_BIST
+/*-----------------------------------------------------
+BIST debug chain port signals
+-----------------------------------------------------*/
+input mbist_si_i; // bist scan serial in
+output mbist_so_o; // bist scan serial out
+input [`PCI_MBIST_CTRL_WIDTH - 1:0] mbist_ctrl_i; // bist chain shift control
+`endif
+
+// pci master interface outputs
+wire [31:0] pcim_if_address_out ;
+wire [3:0] pcim_if_bc_out ;
+wire [31:0] pcim_if_data_out ;
+wire [3:0] pcim_if_be_out ;
+wire pcim_if_req_out ;
+wire pcim_if_rdy_out ;
+wire pcim_if_last_out ;
+wire pcim_if_wbw_renable_out ;
+wire pcim_if_wbr_wenable_out ;
+wire [31:0] pcim_if_wbr_data_out ;
+wire [3:0] pcim_if_wbr_be_out ;
+wire [3:0] pcim_if_wbr_control_out ;
+wire pcim_if_del_complete_out ;
+wire pcim_if_del_error_out ;
+wire pcim_if_del_rty_exp_out ;
+wire [31:0] pcim_if_err_addr_out ;
+wire [3:0] pcim_if_err_bc_out ;
+wire pcim_if_err_signal_out ;
+wire pcim_if_err_source_out ;
+wire pcim_if_err_rty_exp_out ;
+wire pcim_if_tabort_out ;
+wire pcim_if_mabort_out ;
+wire [31:0] pcim_if_next_data_out ;
+wire [3:0] pcim_if_next_be_out ;
+wire pcim_if_next_last_out ;
+wire pcim_if_posted_write_not_present_out ;
+
+
+
+wire pcim_sm_req_out ;
+wire pcim_sm_frame_out ;
+wire pcim_sm_frame_en_out ;
+wire pcim_sm_irdy_out ;
+wire pcim_sm_irdy_en_out ;
+wire [31:0] pcim_sm_ad_out ;
+wire pcim_sm_ad_en_out ;
+wire [3:0] pcim_sm_cbe_out ;
+wire pcim_sm_cbe_en_out ;
+wire pcim_sm_ad_load_out ;
+wire pcim_sm_ad_load_on_transfer_out ;
+
+wire pcim_sm_wait_out ;
+wire pcim_sm_wtransfer_out ;
+wire pcim_sm_rtransfer_out ;
+wire pcim_sm_retry_out ;
+wire pcim_sm_rerror_out ;
+wire pcim_sm_first_out ;
+wire pcim_sm_mabort_out ;
+wire pcim_sm_frame_load_out ;
+
+assign wbu_pciif_frame_load_out = pcim_sm_frame_load_out ;
+
+assign wbu_err_addr_out = pcim_if_err_addr_out ;
+assign wbu_err_bc_out = pcim_if_err_bc_out ;
+assign wbu_err_signal_out = pcim_if_err_signal_out ;
+assign wbu_err_source_out = pcim_if_err_source_out ;
+assign wbu_err_rty_exp_out = pcim_if_err_rty_exp_out ;
+assign wbu_tabort_rec_out = pcim_if_tabort_out ;
+assign wbu_mabort_rec_out = pcim_if_mabort_out ;
+
+assign wbu_wbw_fifo_empty_out = pcim_if_posted_write_not_present_out ;
+
+// pci master state machine outputs
+// pci interface signals
+assign wbu_pciif_req_out = pcim_sm_req_out ;
+assign wbu_pciif_frame_out = pcim_sm_frame_out ;
+assign wbu_pciif_frame_en_out = pcim_sm_frame_en_out ;
+assign wbu_pciif_irdy_out = pcim_sm_irdy_out ;
+assign wbu_pciif_irdy_en_out = pcim_sm_irdy_en_out ;
+assign wbu_pciif_ad_out = pcim_sm_ad_out ;
+assign wbu_pciif_ad_en_out = pcim_sm_ad_en_out ;
+assign wbu_pciif_cbe_out = pcim_sm_cbe_out ;
+assign wbu_pciif_cbe_en_out = pcim_sm_cbe_en_out ;
+assign wbu_ad_load_out = pcim_sm_ad_load_out ;
+assign wbu_ad_load_on_transfer_out = pcim_sm_ad_load_on_transfer_out ;
+
+// signals to internal of the core
+wire [31:0] pcim_sm_data_out ;
+
+// wishbone slave state machine outputs
+wire [3:0] wbs_sm_del_bc_out ;
+wire wbs_sm_del_req_out ;
+wire wbs_sm_del_done_out ;
+wire wbs_sm_del_burst_out ;
+wire wbs_sm_del_write_out ;
+wire [11:0] wbs_sm_conf_offset_out ;
+wire wbs_sm_conf_renable_out ;
+wire wbs_sm_conf_wenable_out ;
+wire [3:0] wbs_sm_conf_be_out ;
+wire [31:0] wbs_sm_conf_data_out ;
+wire [31:0] wbs_sm_data_out ;
+wire [3:0] wbs_sm_cbe_out ;
+wire wbs_sm_wbw_wenable_out ;
+wire [3:0] wbs_sm_wbw_control_out ;
+wire wbs_sm_wbr_renable_out ;
+wire wbs_sm_wbr_flush_out ;
+wire wbs_sm_del_in_progress_out ;
+wire [31:0] wbs_sm_sdata_out ;
+wire wbs_sm_ack_out ;
+wire wbs_sm_rty_out ;
+wire wbs_sm_err_out ;
+wire wbs_sm_sample_address_out ;
+
+assign wbu_conf_offset_out = wbs_sm_conf_offset_out ;
+assign wbu_conf_renable_out = wbs_sm_conf_renable_out ;
+assign wbu_conf_wenable_out = wbs_sm_conf_wenable_out ;
+assign wbu_conf_be_out = ~wbs_sm_conf_be_out ;
+assign wbu_conf_data_out = wbs_sm_conf_data_out ;
+
+assign SDATA_O = wbs_sm_sdata_out ;
+assign ACK_O = wbs_sm_ack_out ;
+assign RTY_O = wbs_sm_rty_out ;
+assign ERR_O = wbs_sm_err_out ;
+
+
+// wbw_wbr fifo outputs
+
+// wbw_fifo_outputs:
+wire [31:0] fifos_wbw_addr_data_out ;
+wire [3:0] fifos_wbw_cbe_out ;
+wire [3:0] fifos_wbw_control_out ;
+wire fifos_wbw_almost_full_out ;
+wire fifos_wbw_full_out ;
+wire fifos_wbw_half_full_out; //Robert, burst issue
+wire fifos_wbw_empty_out ;
+wire fifos_wbw_transaction_ready_out ;
+
+// wbr_fifo_outputs
+wire [31:0] fifos_wbr_data_out ;
+wire [3:0] fifos_wbr_be_out ;
+wire [3:0] fifos_wbr_control_out ;
+wire fifos_wbr_empty_out ;
+
+// address multiplexer outputs
+wire [5:0] amux_hit_out ;
+wire [31:0] amux_address_out ;
+
+// delayed transaction logic outputs
+wire [31:0] del_sync_addr_out ;
+wire [3:0] del_sync_be_out ;
+wire del_sync_we_out ;
+wire del_sync_comp_req_pending_out ;
+wire del_sync_comp_comp_pending_out ;
+wire del_sync_req_req_pending_out ;
+wire del_sync_req_comp_pending_out ;
+wire [3:0] del_sync_bc_out ;
+wire del_sync_status_out ;
+wire del_sync_comp_flush_out ;
+wire del_sync_burst_out ;
+
+assign wbu_del_read_comp_pending_out = del_sync_comp_comp_pending_out ;
+
+// delayed write storage output
+wire [31:0] del_write_data_out ;
+
+// config. cycle address decoder output
+wire [31:0] ccyc_addr_out ;
+
+
+// WISHBONE slave interface inputs
+wire [4:0] wbs_sm_hit_in = amux_hit_out[5:1] ;
+wire wbs_sm_conf_hit_in = amux_hit_out[0] ;
+wire [4:0] wbs_sm_map_in = wbu_map_in[5:1] ;
+wire [4:0] wbs_sm_pref_en_in = wbu_pref_en_in[5:1] ;
+wire [4:0] wbs_sm_mrl_en_in = wbu_mrl_en_in[5:1] ;
+wire [31:0] wbs_sm_addr_in = amux_address_out ;
+wire [3:0] wbs_sm_del_bc_in = del_sync_bc_out ;
+wire wbs_sm_del_req_pending_in = del_sync_req_req_pending_out ;
+wire wbs_sm_wb_del_comp_pending_in = del_sync_req_comp_pending_out ;
+wire wbs_sm_pci_drcomp_pending_in = wbu_pci_drcomp_pending_in ;
+wire wbs_sm_del_write_in = del_sync_we_out ;
+wire wbs_sm_del_error_in = del_sync_status_out ;
+wire [31:0] wbs_sm_del_addr_in = del_sync_addr_out ;
+wire [3:0] wbs_sm_del_be_in = del_sync_be_out ;
+wire [31:0] wbs_sm_conf_data_in = wbu_conf_data_in ;
+wire wbs_sm_wbw_almost_full_in = fifos_wbw_almost_full_out ;
+wire wbs_sm_wbw_full_in = fifos_wbw_full_out ;
+wire wbs_sm_wbw_half_full_in = fifos_wbw_half_full_out; ////Robert, burst issue
+wire [3:0] wbs_sm_wbr_be_in = fifos_wbr_be_out ;
+wire [31:0] wbs_sm_wbr_data_in = fifos_wbr_data_out ;
+wire [3:0] wbs_sm_wbr_control_in = fifos_wbr_control_out ;
+wire wbs_sm_wbr_empty_in = fifos_wbr_empty_out ;
+wire wbs_sm_pciw_empty_in = wbu_pciw_empty_in ;
+wire wbs_sm_lock_in = ~wbu_master_enable_in ;
+wire wbs_sm_cache_line_size_not_zero = wbu_cache_line_size_not_zero ;
+wire wbs_sm_cyc_in = CYC_I ;
+wire wbs_sm_stb_in = STB_I ;
+wire wbs_sm_we_in = WE_I ;
+wire [3:0] wbs_sm_sel_in = SEL_I ;
+wire [31:0] wbs_sm_sdata_in = SDATA_I ;
+wire wbs_sm_cab_in = CAB_I ;
+wire [31:0] wbs_sm_ccyc_addr_in = ccyc_addr_out ;
+wire wbs_sm_init_complete_in = wb_init_complete_in ;
+
+// WISHBONE slave interface instantiation
+pci_wb_slave wishbone_slave(
+ .wb_clock_in (wb_clock_in) ,
+ .reset_in (reset_in) ,
+ .wb_hit_in (wbs_sm_hit_in) ,
+ .wb_conf_hit_in (wbs_sm_conf_hit_in) ,
+ .wb_map_in (wbs_sm_map_in) ,
+ .wb_pref_en_in (wbs_sm_pref_en_in) ,
+ .wb_mrl_en_in (wbs_sm_mrl_en_in) ,
+ .wb_addr_in (wbs_sm_addr_in),
+ .del_bc_in (wbs_sm_del_bc_in),
+ .wb_del_req_pending_in (wbs_sm_del_req_pending_in),
+ .wb_del_comp_pending_in (wbs_sm_wb_del_comp_pending_in),
+ .pci_drcomp_pending_in (wbs_sm_pci_drcomp_pending_in),
+ .del_bc_out (wbs_sm_del_bc_out),
+ .del_req_out (wbs_sm_del_req_out),
+ .del_done_out (wbs_sm_del_done_out),
+ .del_burst_out (wbs_sm_del_burst_out),
+ .del_write_out (wbs_sm_del_write_out),
+ .del_write_in (wbs_sm_del_write_in),
+ .del_error_in (wbs_sm_del_error_in),
+ .wb_del_addr_in (wbs_sm_del_addr_in),
+ .wb_del_be_in (wbs_sm_del_be_in),
+ .wb_conf_offset_out (wbs_sm_conf_offset_out),
+ .wb_conf_renable_out (wbs_sm_conf_renable_out),
+ .wb_conf_wenable_out (wbs_sm_conf_wenable_out),
+ .wb_conf_be_out (wbs_sm_conf_be_out),
+ .wb_conf_data_in (wbs_sm_conf_data_in),
+ .wb_conf_data_out (wbs_sm_conf_data_out),
+ .wb_data_out (wbs_sm_data_out),
+ .wb_cbe_out (wbs_sm_cbe_out),
+ .wbw_fifo_wenable_out (wbs_sm_wbw_wenable_out),
+ .wbw_fifo_control_out (wbs_sm_wbw_control_out),
+ .wbw_fifo_almost_full_in (wbs_sm_wbw_almost_full_in),
+ .wbw_fifo_full_in (wbs_sm_wbw_full_in),
+ .wbw_fifo_half_full_in (wbs_sm_wbw_half_full_in), ////Robert, burst issue
+ .wbr_fifo_renable_out (wbs_sm_wbr_renable_out),
+ .wbr_fifo_be_in (wbs_sm_wbr_be_in),
+ .wbr_fifo_data_in (wbs_sm_wbr_data_in),
+ .wbr_fifo_control_in (wbs_sm_wbr_control_in),
+ .wbr_fifo_flush_out (wbs_sm_wbr_flush_out),
+ .wbr_fifo_empty_in (wbs_sm_wbr_empty_in),
+ .pciw_fifo_empty_in (wbs_sm_pciw_empty_in),
+ .wbs_lock_in (wbs_sm_lock_in),
+ .init_complete_in (wbs_sm_init_complete_in),
+ .cache_line_size_not_zero (wbs_sm_cache_line_size_not_zero),
+ .del_in_progress_out (wbs_sm_del_in_progress_out),
+ .ccyc_addr_in (wbs_sm_ccyc_addr_in),
+ .sample_address_out (wbs_sm_sample_address_out),
+ .CYC_I (wbs_sm_cyc_in),
+ .STB_I (wbs_sm_stb_in),
+ .WE_I (wbs_sm_we_in),
+ .SEL_I (wbs_sm_sel_in),
+ .SDATA_I (wbs_sm_sdata_in),
+ .SDATA_O (wbs_sm_sdata_out),
+ .ACK_O (wbs_sm_ack_out),
+ .RTY_O (wbs_sm_rty_out),
+ .ERR_O (wbs_sm_err_out),
+ .CAB_I (wbs_sm_cab_in)
+ );
+
+// wbw_wbr_fifos inputs
+// WBW_FIFO inputs
+wire fifos_wbw_wenable_in = wbs_sm_wbw_wenable_out;
+wire [31:0] fifos_wbw_addr_data_in = wbs_sm_data_out ;
+wire [3:0] fifos_wbw_cbe_in = wbs_sm_cbe_out ;
+wire [3:0] fifos_wbw_control_in = wbs_sm_wbw_control_out ;
+wire fifos_wbw_renable_in = pcim_if_wbw_renable_out ;
+
+//wire fifos_wbw_flush_in = 1'b0 ; flush for write fifo not used
+
+// WBR_FIFO inputs
+wire fifos_wbr_wenable_in = pcim_if_wbr_wenable_out ;
+wire [31:0] fifos_wbr_data_in = pcim_if_wbr_data_out ;
+wire [3:0] fifos_wbr_be_in = pcim_if_wbr_be_out ;
+wire [3:0] fifos_wbr_control_in = pcim_if_wbr_control_out ;
+wire fifos_wbr_renable_in = wbs_sm_wbr_renable_out ;
+wire fifos_wbr_flush_in = wbs_sm_wbr_flush_out || del_sync_comp_flush_out ;
+
+// WBW_FIFO and WBR_FIFO instantiation
+pci_wbw_wbr_fifos fifos
+(
+ .wb_clock_in (wb_clock_in),
+ .pci_clock_in (pci_clock_in),
+ .reset_in (reset_in),
+ .wbw_wenable_in (fifos_wbw_wenable_in),
+ .wbw_addr_data_in (fifos_wbw_addr_data_in),
+ .wbw_cbe_in (fifos_wbw_cbe_in),
+ .wbw_control_in (fifos_wbw_control_in),
+ .wbw_renable_in (fifos_wbw_renable_in),
+ .wbw_addr_data_out (fifos_wbw_addr_data_out),
+ .wbw_cbe_out (fifos_wbw_cbe_out),
+ .wbw_control_out (fifos_wbw_control_out),
+// .wbw_flush_in (fifos_wbw_flush_in), // flush for write fifo not used
+ .wbw_almost_full_out (fifos_wbw_almost_full_out),
+ .wbw_full_out (fifos_wbw_full_out),
+ .wbw_empty_out (fifos_wbw_empty_out),
+ .wbw_transaction_ready_out (fifos_wbw_transaction_ready_out),
+ .wbw_half_full_out (fifos_wbw_half_full_out),////Robert, burst issue
+ .wbr_wenable_in (fifos_wbr_wenable_in),
+ .wbr_data_in (fifos_wbr_data_in),
+ .wbr_be_in (fifos_wbr_be_in),
+ .wbr_control_in (fifos_wbr_control_in),
+ .wbr_renable_in (fifos_wbr_renable_in),
+ .wbr_data_out (fifos_wbr_data_out),
+ .wbr_be_out (fifos_wbr_be_out),
+ .wbr_control_out (fifos_wbr_control_out),
+ .wbr_flush_in (fifos_wbr_flush_in),
+ .wbr_empty_out (fifos_wbr_empty_out)
+
+`ifdef PCI_BIST
+ ,
+ .mbist_si_i (mbist_si_i),
+ .mbist_so_o (mbist_so_o),
+ .mbist_ctrl_i (mbist_ctrl_i)
+`endif
+) ;
+
+wire [31:0] amux_addr_in = ADDR_I ;
+wire amux_sample_address_in = wbs_sm_sample_address_out ;
+
+wire [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] amux_bar0_in = wbu_bar0_in ;
+wire [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] amux_bar1_in = wbu_bar1_in ;
+wire [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] amux_bar2_in = wbu_bar2_in ;
+wire [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] amux_bar3_in = wbu_bar3_in ;
+wire [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] amux_bar4_in = wbu_bar4_in ;
+wire [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] amux_bar5_in = wbu_bar5_in ;
+wire [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] amux_am0_in = wbu_am0_in ;
+wire [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] amux_am1_in = wbu_am1_in ;
+wire [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] amux_am2_in = wbu_am2_in ;
+wire [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] amux_am3_in = wbu_am3_in ;
+wire [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] amux_am4_in = wbu_am4_in ;
+wire [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] amux_am5_in = wbu_am5_in ;
+wire [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] amux_ta0_in = wbu_ta0_in ;
+wire [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] amux_ta1_in = wbu_ta1_in ;
+wire [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] amux_ta2_in = wbu_ta2_in ;
+wire [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] amux_ta3_in = wbu_ta3_in ;
+wire [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] amux_ta4_in = wbu_ta4_in ;
+wire [(`WB_NUM_OF_DEC_ADDR_LINES - 1):0] amux_ta5_in = wbu_ta5_in ;
+wire [5:0] amux_at_en_in = wbu_at_en_in ;
+
+pci_wb_addr_mux wb_addr_dec
+(
+ `ifdef REGISTER_WBS_OUTPUTS
+ .clk_in (wb_clock_in),
+ .reset_in (reset_in),
+ .sample_address_in (amux_sample_address_in),
+ `endif
+ .address_in (amux_addr_in),
+ .bar0_in (amux_bar0_in),
+ .bar1_in (amux_bar1_in),
+ .bar2_in (amux_bar2_in),
+ .bar3_in (amux_bar3_in),
+ .bar4_in (amux_bar4_in),
+ .bar5_in (amux_bar5_in),
+ .am0_in (amux_am0_in),
+ .am1_in (amux_am1_in),
+ .am2_in (amux_am2_in),
+ .am3_in (amux_am3_in),
+ .am4_in (amux_am4_in),
+ .am5_in (amux_am5_in),
+ .ta0_in (amux_ta0_in),
+ .ta1_in (amux_ta1_in),
+ .ta2_in (amux_ta2_in),
+ .ta3_in (amux_ta3_in),
+ .ta4_in (amux_ta4_in),
+ .ta5_in (amux_ta5_in),
+ .at_en_in (amux_at_en_in),
+ .hit_out (amux_hit_out),
+ .address_out (amux_address_out)
+);
+
+// delayed transaction logic inputs
+wire del_sync_req_in = wbs_sm_del_req_out ;
+wire del_sync_comp_in = pcim_if_del_complete_out ;
+wire del_sync_done_in = wbs_sm_del_done_out ;
+wire del_sync_in_progress_in = wbs_sm_del_in_progress_out ;
+wire [31:0] del_sync_addr_in = wbs_sm_data_out ;
+wire [3:0] del_sync_be_in = wbs_sm_conf_be_out ;
+wire del_sync_we_in = wbs_sm_del_write_out ;
+wire [3:0] del_sync_bc_in = wbs_sm_del_bc_out ;
+wire del_sync_status_in = pcim_if_del_error_out ;
+wire del_sync_burst_in = wbs_sm_del_burst_out ;
+wire del_sync_retry_expired_in = pcim_if_del_rty_exp_out ;
+
+// delayed transaction logic instantiation
+pci_delayed_sync del_sync (
+ .reset_in (reset_in),
+ .req_clk_in (wb_clock_in),
+ .comp_clk_in (pci_clock_in),
+ .req_in (del_sync_req_in),
+ .comp_in (del_sync_comp_in),
+ .done_in (del_sync_done_in),
+ .in_progress_in (del_sync_in_progress_in),
+ .comp_req_pending_out (del_sync_comp_req_pending_out),
+ .comp_comp_pending_out(del_sync_comp_comp_pending_out),
+ .req_req_pending_out (del_sync_req_req_pending_out),
+ .req_comp_pending_out (del_sync_req_comp_pending_out),
+ .addr_in (del_sync_addr_in),
+ .be_in (del_sync_be_in),
+ .addr_out (del_sync_addr_out),
+ .be_out (del_sync_be_out),
+ .we_in (del_sync_we_in),
+ .we_out (del_sync_we_out),
+ .bc_in (del_sync_bc_in),
+ .bc_out (del_sync_bc_out),
+ .status_in (del_sync_status_in),
+ .status_out (del_sync_status_out),
+ .comp_flush_out (del_sync_comp_flush_out),
+ .burst_in (del_sync_burst_in),
+ .burst_out (del_sync_burst_out),
+ .retry_expired_in (del_sync_retry_expired_in)
+ );
+
+// delayed write storage inputs
+wire del_write_we_in = wbs_sm_del_req_out && wbs_sm_del_write_out ;
+wire [31:0] del_write_data_in = wbs_sm_conf_data_out ;
+
+pci_delayed_write_reg delayed_write_data
+(
+ .reset_in (reset_in),
+ .req_clk_in (wb_clock_in),
+ .comp_wdata_out (del_write_data_out),
+ .req_we_in (del_write_we_in),
+ .req_wdata_in (del_write_data_in)
+);
+
+`ifdef HOST
+ // configuration cycle address decoder input
+ wire [31:0] ccyc_addr_in = {8'h00, wbu_ccyc_addr_in} ;
+
+ pci_conf_cyc_addr_dec ccyc_addr_dec
+ (
+ .ccyc_addr_in (ccyc_addr_in),
+ .ccyc_addr_out (ccyc_addr_out)
+ ) ;
+`else
+`ifdef GUEST
+ assign ccyc_addr_out = 32'h0000_0000 ;
+`endif
+`endif
+
+// pci master interface inputs
+wire [31:0] pcim_if_wbw_addr_data_in = fifos_wbw_addr_data_out ;
+wire [3:0] pcim_if_wbw_cbe_in = fifos_wbw_cbe_out ;
+wire [3:0] pcim_if_wbw_control_in = fifos_wbw_control_out ;
+wire pcim_if_wbw_empty_in = fifos_wbw_empty_out ;
+wire pcim_if_wbw_transaction_ready_in = fifos_wbw_transaction_ready_out ;
+wire [31:0] pcim_if_data_in = pcim_sm_data_out ;
+wire [31:0] pcim_if_del_wdata_in = del_write_data_out ;
+wire pcim_if_del_req_in = del_sync_comp_req_pending_out ;
+wire [31:0] pcim_if_del_addr_in = del_sync_addr_out ;
+wire [3:0] pcim_if_del_bc_in = del_sync_bc_out ;
+wire [3:0] pcim_if_del_be_in = del_sync_be_out ;
+wire pcim_if_del_burst_in = del_sync_burst_out ;
+wire pcim_if_del_we_in = del_sync_we_out ;
+wire [7:0] pcim_if_cache_line_size_in = wbu_cache_line_size_in ;
+wire pcim_if_wait_in = pcim_sm_wait_out ;
+wire pcim_if_wtransfer_in = pcim_sm_wtransfer_out ;
+wire pcim_if_rtransfer_in = pcim_sm_rtransfer_out ;
+wire pcim_if_retry_in = pcim_sm_retry_out ;
+wire pcim_if_rerror_in = pcim_sm_rerror_out ;
+wire pcim_if_first_in = pcim_sm_first_out ;
+wire pcim_if_mabort_in = pcim_sm_mabort_out ;
+
+pci_master32_sm_if pci_initiator_if
+(
+ .clk_in (pci_clock_in),
+ .reset_in (reset_in),
+ .address_out (pcim_if_address_out),
+ .bc_out (pcim_if_bc_out),
+ .data_out (pcim_if_data_out),
+ .data_in (pcim_if_data_in),
+ .be_out (pcim_if_be_out),
+ .req_out (pcim_if_req_out),
+ .rdy_out (pcim_if_rdy_out),
+ .last_out (pcim_if_last_out),
+ .wbw_renable_out (pcim_if_wbw_renable_out),
+ .wbw_fifo_addr_data_in (pcim_if_wbw_addr_data_in),
+ .wbw_fifo_cbe_in (pcim_if_wbw_cbe_in),
+ .wbw_fifo_control_in (pcim_if_wbw_control_in),
+ .wbw_fifo_empty_in (pcim_if_wbw_empty_in),
+ .wbw_fifo_transaction_ready_in (pcim_if_wbw_transaction_ready_in),
+ .wbr_fifo_wenable_out (pcim_if_wbr_wenable_out),
+ .wbr_fifo_data_out (pcim_if_wbr_data_out),
+ .wbr_fifo_be_out (pcim_if_wbr_be_out),
+ .wbr_fifo_control_out (pcim_if_wbr_control_out),
+ .del_wdata_in (pcim_if_del_wdata_in),
+ .del_complete_out (pcim_if_del_complete_out),
+ .del_req_in (pcim_if_del_req_in),
+ .del_addr_in (pcim_if_del_addr_in),
+ .del_bc_in (pcim_if_del_bc_in),
+ .del_be_in (pcim_if_del_be_in),
+ .del_burst_in (pcim_if_del_burst_in),
+ .del_error_out (pcim_if_del_error_out),
+ .del_rty_exp_out (pcim_if_del_rty_exp_out),
+ .del_we_in (pcim_if_del_we_in),
+ .err_addr_out (pcim_if_err_addr_out),
+ .err_bc_out (pcim_if_err_bc_out),
+ .err_signal_out (pcim_if_err_signal_out),
+ .err_source_out (pcim_if_err_source_out),
+ .err_rty_exp_out (pcim_if_err_rty_exp_out),
+ .cache_line_size_in (pcim_if_cache_line_size_in),
+ .mabort_received_out (pcim_if_mabort_out),
+ .tabort_received_out (pcim_if_tabort_out),
+ .next_data_out (pcim_if_next_data_out),
+ .next_be_out (pcim_if_next_be_out),
+ .next_last_out (pcim_if_next_last_out),
+ .wait_in (pcim_if_wait_in),
+ .wtransfer_in (pcim_if_wtransfer_in),
+ .rtransfer_in (pcim_if_rtransfer_in),
+ .retry_in (pcim_if_retry_in),
+ .rerror_in (pcim_if_rerror_in),
+ .first_in (pcim_if_first_in),
+ .mabort_in (pcim_if_mabort_in),
+ .posted_write_not_present_out (pcim_if_posted_write_not_present_out)
+);
+
+// pci master state machine inputs
+wire pcim_sm_gnt_in = wbu_pciif_gnt_in ;
+wire pcim_sm_frame_in = wbu_pciif_frame_in ;
+wire pcim_sm_irdy_in = wbu_pciif_irdy_in ;
+wire pcim_sm_trdy_in = wbu_pciif_trdy_in;
+wire pcim_sm_stop_in = wbu_pciif_stop_in ;
+wire pcim_sm_devsel_in = wbu_pciif_devsel_in ;
+wire [31:0] pcim_sm_ad_reg_in = wbu_pciif_ad_reg_in ;
+wire [31:0] pcim_sm_address_in = pcim_if_address_out ;
+wire [3:0] pcim_sm_bc_in = pcim_if_bc_out ;
+wire [31:0] pcim_sm_data_in = pcim_if_data_out ;
+wire [3:0] pcim_sm_be_in = pcim_if_be_out ;
+wire pcim_sm_req_in = pcim_if_req_out ;
+wire pcim_sm_rdy_in = pcim_if_rdy_out ;
+wire pcim_sm_last_in = pcim_if_last_out ;
+wire [7:0] pcim_sm_latency_tim_val_in = wbu_latency_tim_val_in ;
+wire [31:0] pcim_sm_next_data_in = pcim_if_next_data_out ;
+wire [3:0] pcim_sm_next_be_in = pcim_if_next_be_out ;
+wire pcim_sm_next_last_in = pcim_if_next_last_out ;
+wire pcim_sm_trdy_reg_in = wbu_pciif_trdy_reg_in ;
+wire pcim_sm_stop_reg_in = wbu_pciif_stop_reg_in ;
+wire pcim_sm_devsel_reg_in = wbu_pciif_devsel_reg_in ;
+wire pcim_sm_frame_en_in = wbu_pciif_frame_en_in ;
+wire pcim_sm_frame_out_in = wbu_pciif_frame_out_in ;
+
+pci_master32_sm pci_initiator_sm
+(
+ .clk_in (pci_clock_in),
+ .reset_in (reset_in),
+ .pci_req_out (pcim_sm_req_out),
+ .pci_gnt_in (pcim_sm_gnt_in),
+ .pci_frame_in (pcim_sm_frame_in),
+ .pci_frame_out (pcim_sm_frame_out),
+ .pci_frame_en_out (pcim_sm_frame_en_out),
+ .pci_frame_out_in (pcim_sm_frame_out_in),
+ .pci_frame_load_out (pcim_sm_frame_load_out),
+ .pci_frame_en_in (pcim_sm_frame_en_in),
+ .pci_irdy_in (pcim_sm_irdy_in),
+ .pci_irdy_out (pcim_sm_irdy_out),
+ .pci_irdy_en_out (pcim_sm_irdy_en_out),
+ .pci_trdy_in (pcim_sm_trdy_in),
+ .pci_trdy_reg_in (pcim_sm_trdy_reg_in),
+ .pci_stop_in (pcim_sm_stop_in),
+ .pci_stop_reg_in (pcim_sm_stop_reg_in),
+ .pci_devsel_in (pcim_sm_devsel_in),
+ .pci_devsel_reg_in (pcim_sm_devsel_reg_in),
+ .pci_ad_reg_in (pcim_sm_ad_reg_in),
+ .pci_ad_out (pcim_sm_ad_out),
+ .pci_ad_en_out (pcim_sm_ad_en_out),
+ .pci_cbe_out (pcim_sm_cbe_out),
+ .pci_cbe_en_out (pcim_sm_cbe_en_out),
+ .address_in (pcim_sm_address_in),
+ .bc_in (pcim_sm_bc_in),
+ .data_in (pcim_sm_data_in),
+ .data_out (pcim_sm_data_out),
+ .be_in (pcim_sm_be_in),
+ .req_in (pcim_sm_req_in),
+ .rdy_in (pcim_sm_rdy_in),
+ .last_in (pcim_sm_last_in),
+ .latency_tim_val_in (pcim_sm_latency_tim_val_in),
+ .next_data_in (pcim_sm_next_data_in),
+ .next_be_in (pcim_sm_next_be_in),
+ .next_last_in (pcim_sm_next_last_in),
+ .ad_load_out (pcim_sm_ad_load_out),
+ .ad_load_on_transfer_out (pcim_sm_ad_load_on_transfer_out),
+ .wait_out (pcim_sm_wait_out),
+ .wtransfer_out (pcim_sm_wtransfer_out),
+ .rtransfer_out (pcim_sm_rtransfer_out),
+ .retry_out (pcim_sm_retry_out),
+ .rerror_out (pcim_sm_rerror_out),
+ .first_out (pcim_sm_first_out),
+ .mabort_out (pcim_sm_mabort_out)
+) ;
+
+endmodule