OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [orpsocv2/] [rtl/] [verilog/] [wb_switch_b3/] [wb_switch_b3.v] - Rev 534

Go to most recent revision | Compare with Previous | Blame | View Log

// Switch network arbiter
// Wishbone B3 signals compliant 
 
`define NUM_MASTERS_4
`define NUM_SLAVES_5
`define WATCHDOG_TIMER
 
`ifdef NUM_MASTERS_6
 `define NUM_MASTERS 6
 `define WBM5
 `define WBM4
 `define WBM3
 `define WBM2
 `define WBM1
`else
 `ifdef NUM_MASTERS_5
  `define NUM_MASTERS 5
  `define WBM4
  `define WBM3
  `define WBM2
  `define WBM1
 `else
  `ifdef NUM_MASTERS_4
   `define NUM_MASTERS 4
   `define WBM3
   `define WBM2
   `define WBM1
  `else
   `ifdef NUM_MASTERS_3
    `define NUM_MASTERS 3
    `define WBM2
    `define WBM1
   `else
    `ifdef NUM_MASTERS_2
     `define NUM_MASTERS 2
     `define WBM1
    `else
     `define NUM_MASTERS 1
    `endif
   `endif // !`ifdef NUM_MASTERS_3
  `endif // !`ifdef NUM_MASTERS_4
 `endif // !`ifdef NUM_MASTERS_5
`endif // !`ifdef NUM_MASTERS_6
 
 
`ifdef NUM_SLAVES_8
 `define NUM_SLAVES 8
 `define WBS7
 `define WBS6
 `define WBS5
 `define WBS4
 `define WBS3
 `define WBS2
 `define WBS1
`else
 `ifdef NUM_SLAVES_7
  `define NUM_SLAVES 7
  `define WBS6
  `define WBS5
  `define WBS4
  `define WBS3
  `define WBS2
  `define WBS1
 `else
  `ifdef NUM_SLAVES_6
   `define NUM_SLAVES 6
   `define WBS5
   `define WBS4
   `define WBS3
   `define WBS2
   `define WBS1
  `else
   `ifdef NUM_SLAVES_5
    `define NUM_SLAVES 5
    `define WBS4
    `define WBS3
    `define WBS2
    `define WBS1
   `else
    `ifdef NUM_SLAVES_4
     `define NUM_SLAVES 4
     `define WBS3
     `define WBS2
     `define WBS1
    `else
     `ifdef NUM_SLAVES_3
      `define NUM_SLAVES 3
      `define WBS2
      `define WBS1
     `else
      `ifdef NUM_SLAVES_2
       `define NUM_SLAVES 2
       `define WBS1
      `else
       `define NUM_SLAVES 1
      `endif
     `endif
    `endif // !`ifdef NUM_SLAVES_4
   `endif // !`ifdef NUM_SLAVES_5
  `endif // !`ifdef NUM_SLAVES_6
 `endif // !`ifdef NUM_SLAVES_7
`endif // !`ifdef NUM_SLAVES_8
 
 
 
module wb_switch_b3
  (
   // Master ports
   wbm0_adr_o, wbm0_bte_o, wbm0_cti_o, wbm0_cyc_o, wbm0_dat_o, wbm0_sel_o,
   wbm0_stb_o, wbm0_we_o, wbm0_ack_i, wbm0_err_i, wbm0_rty_i, wbm0_dat_i,
`ifdef WBM1		    
   wbm1_adr_o, wbm1_bte_o, wbm1_cti_o, wbm1_cyc_o, wbm1_dat_o, wbm1_sel_o,
   wbm1_stb_o, wbm1_we_o, wbm1_ack_i, wbm1_err_i, wbm1_rty_i, wbm1_dat_i,
`endif
`ifdef WBM2		    		     
   wbm2_adr_o, wbm2_bte_o, wbm2_cti_o, wbm2_cyc_o, wbm2_dat_o, wbm2_sel_o,
   wbm2_stb_o, wbm2_we_o, wbm2_ack_i, wbm2_err_i, wbm2_rty_i, wbm2_dat_i,
`endif
`ifdef WBM3		    		     
   wbm3_adr_o, wbm3_bte_o, wbm3_cti_o, wbm3_cyc_o, wbm3_dat_o, wbm3_sel_o,
   wbm3_stb_o, wbm3_we_o, wbm3_ack_i, wbm3_err_i, wbm3_rty_i, wbm3_dat_i,
`endif
`ifdef WBM4		    		     
   wbm4_adr_o, wbm4_bte_o, wbm4_cti_o, wbm4_cyc_o, wbm4_dat_o, wbm4_sel_o,
   wbm4_stb_o, wbm4_we_o, wbm4_ack_i, wbm4_err_i, wbm4_rty_i, wbm4_dat_i,
`endif
`ifdef WBM5		    		     
   wbm5_adr_o, wbm5_bte_o, wbm5_cti_o, wbm5_cyc_o, wbm5_dat_o, wbm5_sel_o,
   wbm5_stb_o, wbm5_we_o, wbm5_ack_i, wbm5_err_i, wbm5_rty_i, wbm5_dat_i,
`endif
 
   // Slave ports
   wbs0_adr_i, wbs0_bte_i, wbs0_cti_i, wbs0_cyc_i, wbs0_dat_i, wbs0_sel_i,
   wbs0_stb_i, wbs0_we_i, wbs0_ack_o, wbs0_err_o, wbs0_rty_o, wbs0_dat_o,   
`ifdef WBS1
   wbs1_adr_i, wbs1_bte_i, wbs1_cti_i, wbs1_cyc_i, wbs1_dat_i, wbs1_sel_i,
   wbs1_stb_i, wbs1_we_i, wbs1_ack_o, wbs1_err_o, wbs1_rty_o, wbs1_dat_o,
`endif
`ifdef WBS2
   wbs2_adr_i, wbs2_bte_i, wbs2_cti_i, wbs2_cyc_i, wbs2_dat_i, wbs2_sel_i,
   wbs2_stb_i, wbs2_we_i, wbs2_ack_o, wbs2_err_o, wbs2_rty_o, wbs2_dat_o,
`endif		     
`ifdef WBS3
   wbs3_adr_i, wbs3_bte_i, wbs3_cti_i, wbs3_cyc_i, wbs3_dat_i, wbs3_sel_i,
   wbs3_stb_i, wbs3_we_i, wbs3_ack_o, wbs3_err_o, wbs3_rty_o, wbs3_dat_o,
`endif
`ifdef WBS4
   wbs4_adr_i, wbs4_bte_i, wbs4_cti_i, wbs4_cyc_i, wbs4_dat_i, wbs4_sel_i,
   wbs4_stb_i, wbs4_we_i, wbs4_ack_o, wbs4_err_o, wbs4_rty_o, wbs4_dat_o,
`endif
`ifdef WBS5
   wbs5_adr_i, wbs5_bte_i, wbs5_cti_i, wbs5_cyc_i, wbs5_dat_i, wbs5_sel_i,
   wbs5_stb_i, wbs5_we_i, wbs5_ack_o, wbs5_err_o, wbs5_rty_o, wbs5_dat_o,
`endif
`ifdef WBS6
   wbs6_adr_i, wbs6_bte_i, wbs6_cti_i, wbs6_cyc_i, wbs6_dat_i, wbs6_sel_i,
   wbs6_stb_i, wbs6_we_i, wbs6_ack_o, wbs6_err_o, wbs6_rty_o, wbs6_dat_o,
`endif
`ifdef WBS7
   wbs7_adr_i, wbs7_bte_i, wbs7_cti_i, wbs7_cyc_i, wbs7_dat_i, wbs7_sel_i,
   wbs7_stb_i, wbs7_we_i, wbs7_ack_o, wbs7_err_o, wbs7_rty_o, wbs7_dat_o,
`endif
 
   // Clocks, resets
   wb_clk, wb_rst
   );
   // Data and address width parameters
   parameter dw = 32;
   parameter aw = 32;
 
   input [aw-1:0] wbm0_adr_o;input [1:0] wbm0_bte_o;input [2:0]	wbm0_cti_o;input wbm0_cyc_o;input [dw-1:0] wbm0_dat_o;input [3:0] wbm0_sel_o;input wbm0_stb_o;input wbm0_we_o;output wbm0_ack_i;output wbm0_err_i;output wbm0_rty_i;output [dw-1:0] wbm0_dat_i;
`ifdef WBM1
   input [aw-1:0] wbm1_adr_o;input [1:0] wbm1_bte_o;input [2:0]	wbm1_cti_o;input wbm1_cyc_o;input [dw-1:0] wbm1_dat_o;input [3:0] wbm1_sel_o;input wbm1_stb_o;input wbm1_we_o;output wbm1_ack_i;output wbm1_err_i;output wbm1_rty_i;output [dw-1:0] wbm1_dat_i;   
`endif
`ifdef WBM2
   input [aw-1:0] wbm2_adr_o;input [1:0] wbm2_bte_o;input [2:0]	wbm2_cti_o;input wbm2_cyc_o;input [dw-1:0] wbm2_dat_o;input [3:0] wbm2_sel_o;input wbm2_stb_o;input wbm2_we_o;output wbm2_ack_i;output wbm2_err_i;output wbm2_rty_i;output [dw-1:0] wbm2_dat_i;   
`endif
`ifdef WBM3
   input [aw-1:0] wbm3_adr_o;input [1:0] wbm3_bte_o;input [2:0]	wbm3_cti_o;input wbm3_cyc_o;input [dw-1:0] wbm3_dat_o;input [3:0] wbm3_sel_o;input wbm3_stb_o;input wbm3_we_o;output wbm3_ack_i;output wbm3_err_i;output wbm3_rty_i;output [dw-1:0] wbm3_dat_i;   
`endif
`ifdef WBM4
   input [aw-1:0] wbm4_adr_o;input [1:0] wbm4_bte_o;input [2:0]	wbm4_cti_o;input wbm4_cyc_o;input [dw-1:0] wbm4_dat_o;input [3:0] wbm4_sel_o;input wbm4_stb_o;input wbm4_we_o;output wbm4_ack_i;output wbm4_err_i;output wbm4_rty_i;output [dw-1:0] wbm4_dat_i;   
`endif
`ifdef WBM5
   input [aw-1:0] wbm5_adr_o;input [1:0] wbm5_bte_o;input [2:0]	wbm5_cti_o;input wbm5_cyc_o;input [dw-1:0] wbm5_dat_o;input [3:0] wbm5_sel_o;input wbm5_stb_o;input wbm5_we_o;output wbm5_ack_i;output wbm5_err_i;output wbm5_rty_i;output [dw-1:0] wbm5_dat_i;   
`endif
 
   output [aw-1:0] wbs0_adr_i;output [1:0] wbs0_bte_i;output [2:0]	wbs0_cti_i;output wbs0_cyc_i;output [dw-1:0] wbs0_dat_i;output [3:0] wbs0_sel_i;output wbs0_stb_i;output wbs0_we_i;input wbs0_ack_o;input wbs0_err_o;input wbs0_rty_o;input [dw-1:0] wbs0_dat_o;
 
`ifdef WBS1
   output [aw-1:0] wbs1_adr_i;output [1:0] wbs1_bte_i;output [2:0]	wbs1_cti_i;output wbs1_cyc_i;output [dw-1:0] wbs1_dat_i;output [3:0] wbs1_sel_i;output wbs1_stb_i;output wbs1_we_i;input wbs1_ack_o;input wbs1_err_o;input wbs1_rty_o;input [dw-1:0] wbs1_dat_o;
`endif
`ifdef WBS2
   output [aw-1:0] wbs2_adr_i;output [1:0] wbs2_bte_i;output [2:0]	wbs2_cti_i;output wbs2_cyc_i;output [dw-1:0] wbs2_dat_i;output [3:0] wbs2_sel_i;output wbs2_stb_i;output wbs2_we_i;input wbs2_ack_o;input wbs2_err_o;input wbs2_rty_o;input [dw-1:0] wbs2_dat_o;
`endif
`ifdef WBS3
   output [aw-1:0] wbs3_adr_i;output [1:0] wbs3_bte_i;output [2:0]	wbs3_cti_i;output wbs3_cyc_i;output [dw-1:0] wbs3_dat_i;output [3:0] wbs3_sel_i;output wbs3_stb_i;output wbs3_we_i;input wbs3_ack_o;input wbs3_err_o;input wbs3_rty_o;input [dw-1:0] wbs3_dat_o;
`endif
`ifdef WBS4
   output [aw-1:0] wbs4_adr_i;output [1:0] wbs4_bte_i;output [2:0]	wbs4_cti_i;output wbs4_cyc_i;output [dw-1:0] wbs4_dat_i;output [3:0] wbs4_sel_i;output wbs4_stb_i;output wbs4_we_i;input wbs4_ack_o;input wbs4_err_o;input wbs4_rty_o;input [dw-1:0] wbs4_dat_o;
`endif
`ifdef WBS5
   output [aw-1:0] wbs5_adr_i;output [1:0] wbs5_bte_i;output [2:0]	wbs5_cti_i;output wbs5_cyc_i;output [dw-1:0] wbs5_dat_i;output [3:0] wbs5_sel_i;output wbs5_stb_i;output wbs5_we_i;input wbs5_ack_o;input wbs5_err_o;input wbs5_rty_o;input [dw-1:0] wbs5_dat_o;
`endif
`ifdef WBS6
   output [aw-1:0] wbs6_adr_i;output [1:0] wbs6_bte_i;output [2:0]	wbs6_cti_i;output wbs6_cyc_i;output [dw-1:0] wbs6_dat_i;output [3:0] wbs6_sel_i;output wbs6_stb_i;output wbs6_we_i;input wbs6_ack_o;input wbs6_err_o;input wbs6_rty_o;input [dw-1:0] wbs6_dat_o;
`endif
`ifdef WBS7
   output [aw-1:0] wbs7_adr_i;output [1:0] wbs7_bte_i;output [2:0]	wbs7_cti_i;output wbs7_cyc_i;output [dw-1:0] wbs7_dat_i;output [3:0] wbs7_sel_i;output wbs7_stb_i;output wbs7_we_i;input wbs7_ack_o;input wbs7_err_o;input wbs7_rty_o;input [dw-1:0] wbs7_dat_o;
`endif
 
   input 	   wb_clk, wb_rst;
 
 
   // have a master select for each slave, meaning multiple slaves could be driven at a time
   wire [`NUM_MASTERS-1:0] wbs0_master_sel;
   wire 		   wbs0_master_sel_new;
`ifdef WBS1
   wire [`NUM_MASTERS-1:0] wbs1_master_sel;
   wire 		   wbs1_master_sel_new;
`endif
`ifdef WBS2
   wire [`NUM_MASTERS-1:0] wbs2_master_sel;
   wire 		   wbs2_master_sel_new;
`endif
`ifdef WBS3
   wire [`NUM_MASTERS-1:0] wbs3_master_sel;
   wire 		   wbs3_master_sel_new;   
`endif
`ifdef WBS4
   wire [`NUM_MASTERS-1:0] wbs4_master_sel;
   wire 		   wbs4_master_sel_new;   
`endif
`ifdef WBS5
   wire [`NUM_MASTERS-1:0] wbs5_master_sel;
   wire 		   wbs5_master_sel_new;   
`endif
`ifdef WBS6
   wire [`NUM_MASTERS-1:0] wbs6_master_sel;
   wire 		   wbs6_master_sel_new;   
`endif
`ifdef WBS7
   wire [`NUM_MASTERS-1:0] wbs7_master_sel;
   wire 		   wbs7_master_sel_new;   
`endif
 
   wire [`NUM_SLAVES-1:0]  wbm0_slave_sel;
`ifdef WBM1   
   wire [`NUM_SLAVES-1:0]  wbm1_slave_sel;
`endif
`ifdef WBM2
   wire [`NUM_SLAVES-1:0]  wbm2_slave_sel;
`endif
`ifdef WBM3   
   wire [`NUM_SLAVES-1:0]  wbm3_slave_sel;
`endif
`ifdef WBM4
   wire [`NUM_SLAVES-1:0]  wbm4_slave_sel;
`endif
`ifdef WBM5
   wire [`NUM_SLAVES-1:0]  wbm5_slave_sel;
`endif
 
   // Should probably be def-param'd outside
   parameter slave0_sel_width = -1;
   parameter slave0_sel_addr = 4'hx;
 
   parameter slave1_sel_width = -1;
   parameter slave1_sel_addr = 4'hx;
 
   parameter slave2_sel_width = -1;
   parameter slave2_sel_addr = 8'hxx;
 
   parameter slave3_sel_width = -1;
   parameter slave3_sel_addr = 8'hxx;
 
   parameter slave4_sel_width = -1;
   parameter slave4_sel_addr = 8'hxx;
 
   parameter slave5_sel_width = -1;
   parameter slave5_sel_addr = 8'hxx;
 
   parameter slave6_sel_width = -1;
   parameter slave6_sel_addr = 8'hxx;
 
   parameter slave7_sel_width = -1;
   parameter slave7_sel_addr = 8'hxx;
 
 
 
   ///////////////////////////////////////////////////////////////////////////
   // Slave Select logic                                                    //
   ///////////////////////////////////////////////////////////////////////////
 
   // Slave select logic, for each master   
   wb_b3_switch_slave_sel slave_sel0
     (
      // Outputs
      .wbs_master_sel			(wbs0_master_sel),
      .wbs_master_sel_new		(wbs0_master_sel_new),
      // Inputs
      .wbm0_adr_o			(wbm0_adr_o[aw-1:0]),
      .wbm0_cyc_o			(wbm0_cyc_o),
`ifdef WBM1      
      .wbm1_adr_o			(wbm1_adr_o[aw-1:0]),
      .wbm1_cyc_o			(wbm1_cyc_o),
`endif
`ifdef WBM2
      .wbm2_adr_o			(wbm2_adr_o[aw-1:0]),
      .wbm2_cyc_o			(wbm2_cyc_o),
`endif
`ifdef WBM3            
      .wbm3_adr_o			(wbm3_adr_o[aw-1:0]),
      .wbm3_cyc_o			(wbm3_cyc_o),
`endif
`ifdef WBM4            
      .wbm4_adr_o			(wbm4_adr_o[aw-1:0]),
      .wbm4_cyc_o			(wbm4_cyc_o),
`endif      
`ifdef WBM5            
      .wbm5_adr_o			(wbm5_adr_o[aw-1:0]),
      .wbm5_cyc_o			(wbm5_cyc_o),
`endif      
 
      .wb_clk				(wb_clk),
      .wb_rst				(wb_rst));
 
   defparam slave_sel0.num_masters = `NUM_MASTERS;
   defparam slave_sel0.slave_sel_bit_width = slave0_sel_width;   
   defparam slave_sel0.slave_addr = slave0_sel_addr;
 
 
`ifdef WBS1
   // Slave selec logic, for each master   
   wb_b3_switch_slave_sel slave_sel1
     (
      // Outputs
      .wbs_master_sel			(wbs1_master_sel),
      .wbs_master_sel_new		(wbs1_master_sel_new),
      // Inputs
      .wbm0_adr_o			(wbm0_adr_o[aw-1:0]),
      .wbm0_cyc_o			(wbm0_cyc_o),
`ifdef WBM1      
      .wbm1_adr_o			(wbm1_adr_o[aw-1:0]),
      .wbm1_cyc_o			(wbm1_cyc_o),
`endif
`ifdef WBM2
      .wbm2_adr_o			(wbm2_adr_o[aw-1:0]),
      .wbm2_cyc_o			(wbm2_cyc_o),
`endif
`ifdef WBM3            
      .wbm3_adr_o			(wbm3_adr_o[aw-1:0]),
      .wbm3_cyc_o			(wbm3_cyc_o),
`endif
`ifdef WBM4            
      .wbm4_adr_o			(wbm4_adr_o[aw-1:0]),
      .wbm4_cyc_o			(wbm4_cyc_o),
`endif      
`ifdef WBM5            
      .wbm5_adr_o			(wbm5_adr_o[aw-1:0]),
      .wbm5_cyc_o			(wbm5_cyc_o),
`endif      
 
      .wb_clk				(wb_clk),
      .wb_rst				(wb_rst));
 
   defparam slave_sel1.num_masters = `NUM_MASTERS;
   defparam slave_sel1.slave_sel_bit_width = slave1_sel_width;   
   defparam slave_sel1.slave_addr = slave1_sel_addr;
 
`endif //  `ifdef WBS1
 
 
`ifdef WBS2
   // Slave selec logic, for each master   
   wb_b3_switch_slave_sel slave_sel2
     (
      // Outputs
      .wbs_master_sel			(wbs2_master_sel),
      .wbs_master_sel_new		(wbs2_master_sel_new),
      // Inputs
      .wbm0_adr_o			(wbm0_adr_o[aw-1:0]),
      .wbm0_cyc_o			(wbm0_cyc_o),
`ifdef WBM1      
      .wbm1_adr_o			(wbm1_adr_o[aw-1:0]),
      .wbm1_cyc_o			(wbm1_cyc_o),
`endif
`ifdef WBM2
      .wbm2_adr_o			(wbm2_adr_o[aw-1:0]),
      .wbm2_cyc_o			(wbm2_cyc_o),
`endif
`ifdef WBM3            
      .wbm3_adr_o			(wbm3_adr_o[aw-1:0]),
      .wbm3_cyc_o			(wbm3_cyc_o),
`endif
`ifdef WBM4            
      .wbm4_adr_o			(wbm4_adr_o[aw-1:0]),
      .wbm4_cyc_o			(wbm4_cyc_o),
`endif      
`ifdef WBM5            
      .wbm5_adr_o			(wbm5_adr_o[aw-1:0]),
      .wbm5_cyc_o			(wbm5_cyc_o),
`endif      
      .wb_clk				(wb_clk),
      .wb_rst				(wb_rst));
 
   defparam slave_sel2.num_masters = `NUM_MASTERS;
   defparam slave_sel2.slave_sel_bit_width = slave2_sel_width;   
   defparam slave_sel2.slave_addr = slave2_sel_addr;
 
`endif //  `ifdef WBS2
 
`ifdef WBS3
   // Slave selec logic, for each master   
   wb_b3_switch_slave_sel slave_sel3
     (
      // Outputs
      .wbs_master_sel			(wbs3_master_sel),
      .wbs_master_sel_new		(wbs3_master_sel_new),
      // Inputs
      .wbm0_adr_o			(wbm0_adr_o[aw-1:0]),
      .wbm0_cyc_o			(wbm0_cyc_o),
`ifdef WBM1      
      .wbm1_adr_o			(wbm1_adr_o[aw-1:0]),
      .wbm1_cyc_o			(wbm1_cyc_o),
`endif
`ifdef WBM2
      .wbm2_adr_o			(wbm2_adr_o[aw-1:0]),
      .wbm2_cyc_o			(wbm2_cyc_o),
`endif
`ifdef WBM3            
      .wbm3_adr_o			(wbm3_adr_o[aw-1:0]),
      .wbm3_cyc_o			(wbm3_cyc_o),
`endif
`ifdef WBM4            
      .wbm4_adr_o			(wbm4_adr_o[aw-1:0]),
      .wbm4_cyc_o			(wbm4_cyc_o),
`endif      
`ifdef WBM5            
      .wbm5_adr_o			(wbm5_adr_o[aw-1:0]),
      .wbm5_cyc_o			(wbm5_cyc_o),
`endif      
 
      .wb_clk				(wb_clk),
      .wb_rst				(wb_rst));
 
   defparam slave_sel3.num_masters = `NUM_MASTERS;
   defparam slave_sel3.slave_sel_bit_width = slave3_sel_width;   
   defparam slave_sel3.slave_addr = slave3_sel_addr;
 
`endif //  `ifdef WBS3
 
`ifdef WBS4
   // Slave selec logic, for each master   
   wb_b3_switch_slave_sel slave_sel4
     (
      // Outputs
      .wbs_master_sel			(wbs4_master_sel),
      .wbs_master_sel_new		(wbs4_master_sel_new),
      // Inputs
      .wbm0_adr_o			(wbm0_adr_o[aw-1:0]),
      .wbm0_cyc_o			(wbm0_cyc_o),
`ifdef WBM1      
      .wbm1_adr_o			(wbm1_adr_o[aw-1:0]),
      .wbm1_cyc_o			(wbm1_cyc_o),
`endif
`ifdef WBM2
      .wbm2_adr_o			(wbm2_adr_o[aw-1:0]),
      .wbm2_cyc_o			(wbm2_cyc_o),
`endif
`ifdef WBM3            
      .wbm3_adr_o			(wbm3_adr_o[aw-1:0]),
      .wbm3_cyc_o			(wbm3_cyc_o),
`endif
`ifdef WBM4            
      .wbm4_adr_o			(wbm4_adr_o[aw-1:0]),
      .wbm4_cyc_o			(wbm4_cyc_o),
`endif      
`ifdef WBM5            
      .wbm5_adr_o			(wbm5_adr_o[aw-1:0]),
      .wbm5_cyc_o			(wbm5_cyc_o),
`endif      
 
      .wb_clk				(wb_clk),
      .wb_rst				(wb_rst));
 
   defparam slave_sel4.num_masters = `NUM_MASTERS;
   defparam slave_sel4.slave_sel_bit_width = slave4_sel_width;   
   defparam slave_sel4.slave_addr = slave4_sel_addr;
 
`endif //  `ifdef WBS4
`ifdef WBS5
   // Slave selec logic, for each master   
   wb_b3_switch_slave_sel slave_sel5
     (
      // Outputs
      .wbs_master_sel			(wbs5_master_sel),
      .wbs_master_sel_new		(wbs5_master_sel_new),
      // Inputs
      .wbm0_adr_o			(wbm0_adr_o[aw-1:0]),
      .wbm0_cyc_o			(wbm0_cyc_o),
`ifdef WBM1      
      .wbm1_adr_o			(wbm1_adr_o[aw-1:0]),
      .wbm1_cyc_o			(wbm1_cyc_o),
`endif
`ifdef WBM2
      .wbm2_adr_o			(wbm2_adr_o[aw-1:0]),
      .wbm2_cyc_o			(wbm2_cyc_o),
`endif
`ifdef WBM3            
      .wbm3_adr_o			(wbm3_adr_o[aw-1:0]),
      .wbm3_cyc_o			(wbm3_cyc_o),
`endif
`ifdef WBM4            
      .wbm4_adr_o			(wbm4_adr_o[aw-1:0]),
      .wbm4_cyc_o			(wbm4_cyc_o),
`endif      
`ifdef WBM5            
      .wbm5_adr_o			(wbm5_adr_o[aw-1:0]),
      .wbm5_cyc_o			(wbm5_cyc_o),
`endif      
 
      .wb_clk				(wb_clk),
      .wb_rst				(wb_rst));
 
   defparam slave_sel5.num_masters = `NUM_MASTERS;
   defparam slave_sel5.slave_sel_bit_width = slave5_sel_width;   
   defparam slave_sel5.slave_addr = slave5_sel_addr;
 
`endif //  `ifdef WBS5
`ifdef WBS6
   // Slave selec logic, for each master   
   wb_b3_switch_slave_sel slave_sel6
     (
      // Outputs
      .wbs_master_sel			(wbs6_master_sel),
      .wbs_master_sel_new		(wbs6_master_sel_new),
      // Inputs
      .wbm0_adr_o			(wbm0_adr_o[aw-1:0]),
      .wbm0_cyc_o			(wbm0_cyc_o),
`ifdef WBM1      
      .wbm1_adr_o			(wbm1_adr_o[aw-1:0]),
      .wbm1_cyc_o			(wbm1_cyc_o),
`endif
`ifdef WBM2
      .wbm2_adr_o			(wbm2_adr_o[aw-1:0]),
      .wbm2_cyc_o			(wbm2_cyc_o),
`endif
`ifdef WBM3            
      .wbm3_adr_o			(wbm3_adr_o[aw-1:0]),
      .wbm3_cyc_o			(wbm3_cyc_o),
`endif
`ifdef WBM4            
      .wbm4_adr_o			(wbm4_adr_o[aw-1:0]),
      .wbm4_cyc_o			(wbm4_cyc_o),
`endif      
`ifdef WBM5            
      .wbm5_adr_o			(wbm5_adr_o[aw-1:0]),
      .wbm5_cyc_o			(wbm5_cyc_o),
`endif      
 
      .wb_clk				(wb_clk),
      .wb_rst				(wb_rst));
 
   defparam slave_sel6.num_masters = `NUM_MASTERS;
   defparam slave_sel6.slave_sel_bit_width = slave6_sel_width;   
   defparam slave_sel6.slave_addr = slave6_sel_addr;
 
`endif //  `ifdef WBS6
`ifdef WBS7
   // Slave selec logic, for each master   
   wb_b3_switch_slave_sel slave_sel7
     (
      // Outputs
      .wbs_master_sel			(wbs7_master_sel),
      .wbs_master_sel_new		(wbs7_master_sel_new),
      // Inputs
      .wbm0_adr_o			(wbm0_adr_o[aw-1:0]),
      .wbm0_cyc_o			(wbm0_cyc_o),
`ifdef WBM1      
      .wbm1_adr_o			(wbm1_adr_o[aw-1:0]),
      .wbm1_cyc_o			(wbm1_cyc_o),
`endif
`ifdef WBM2
      .wbm2_adr_o			(wbm2_adr_o[aw-1:0]),
      .wbm2_cyc_o			(wbm2_cyc_o),
`endif
`ifdef WBM3            
      .wbm3_adr_o			(wbm3_adr_o[aw-1:0]),
      .wbm3_cyc_o			(wbm3_cyc_o),
`endif
`ifdef WBM4            
      .wbm4_adr_o			(wbm4_adr_o[aw-1:0]),
      .wbm4_cyc_o			(wbm4_cyc_o),
`endif      
`ifdef WBM5            
      .wbm5_adr_o			(wbm5_adr_o[aw-1:0]),
      .wbm5_cyc_o			(wbm5_cyc_o),
`endif      
 
      .wb_clk				(wb_clk),
      .wb_rst				(wb_rst));
 
   defparam slave_sel7.num_masters = `NUM_MASTERS;
   defparam slave_sel7.slave_sel_bit_width = slave7_sel_width;   
   defparam slave_sel7.slave_addr = slave7_sel_addr;
 
`endif //  `ifdef WBS7
 
   /////////////////////////////////////////////////////////////////////////////
   // Master slave detection: detect which slave has selected each master
   /////////////////////////////////////////////////////////////////////////////
   wb_b3_switch_master_detect_slave_sel master_detect_slave0
     (
      // Outputs
      .wbm_slave_sel			(wbm0_slave_sel),
      // Inputs
      .wbs0_master_sel			(wbs0_master_sel),
      .wbs0_master_sel_new		(wbs0_master_sel_new),
`ifdef WBS1      
      .wbs1_master_sel			(wbs1_master_sel),
      .wbs1_master_sel_new		(wbs1_master_sel_new),
`endif
`ifdef WBS2      
      .wbs2_master_sel			(wbs2_master_sel),
      .wbs2_master_sel_new		(wbs2_master_sel_new),
`endif
`ifdef WBS3      
      .wbs3_master_sel			(wbs3_master_sel),
      .wbs3_master_sel_new		(wbs3_master_sel_new),
`endif
`ifdef WBS4      
      .wbs4_master_sel			(wbs4_master_sel),
      .wbs4_master_sel_new		(wbs4_master_sel_new),
`endif
`ifdef WBS5      
      .wbs5_master_sel			(wbs5_master_sel),
      .wbs5_master_sel_new		(wbs5_master_sel_new),
`endif      
`ifdef WBS6      
      .wbs6_master_sel			(wbs6_master_sel),
      .wbs6_master_sel_new		(wbs6_master_sel_new),
`endif      
`ifdef WBS7      
      .wbs7_master_sel			(wbs7_master_sel),
      .wbs7_master_sel_new		(wbs7_master_sel_new),
`endif      
      .wb_clk(wb_clk),
      .wb_rst(wb_rst)
      );
   defparam master_detect_slave0.slave_bit = 0;
 
`ifdef WBM1
   wb_b3_switch_master_detect_slave_sel master_detect_slave1
     (
      // Outputs
      .wbm_slave_sel			(wbm1_slave_sel),
      // Inputs
      .wbs0_master_sel			(wbs0_master_sel),
      .wbs0_master_sel_new		(wbs0_master_sel_new),
`ifdef WBS1      
      .wbs1_master_sel			(wbs1_master_sel),
      .wbs1_master_sel_new		(wbs1_master_sel_new),
`endif
`ifdef WBS2      
      .wbs2_master_sel			(wbs2_master_sel),
      .wbs2_master_sel_new		(wbs2_master_sel_new),
`endif
`ifdef WBS3      
      .wbs3_master_sel			(wbs3_master_sel),
      .wbs3_master_sel_new		(wbs3_master_sel_new),
`endif
`ifdef WBS4      
      .wbs4_master_sel			(wbs4_master_sel),
      .wbs4_master_sel_new		(wbs4_master_sel_new),
`endif
`ifdef WBS5      
      .wbs5_master_sel			(wbs5_master_sel),
      .wbs5_master_sel_new		(wbs5_master_sel_new),
`endif      
`ifdef WBS6      
      .wbs6_master_sel			(wbs6_master_sel),
      .wbs6_master_sel_new		(wbs6_master_sel_new),
`endif      
`ifdef WBS7      
      .wbs7_master_sel			(wbs7_master_sel),
      .wbs7_master_sel_new		(wbs7_master_sel_new),
`endif      
      .wb_clk(wb_clk),
      .wb_rst(wb_rst)
      );
   defparam master_detect_slave1.slave_bit = 1;
`endif //  `ifdef WBM1
 
`ifdef WBM2
      wb_b3_switch_master_detect_slave_sel master_detect_slave2
     (
      // Outputs
      .wbm_slave_sel			(wbm2_slave_sel),
      // Inputs
      .wbs0_master_sel			(wbs0_master_sel),
      .wbs0_master_sel_new		(wbs0_master_sel_new),
`ifdef WBS1      
      .wbs1_master_sel			(wbs1_master_sel),
      .wbs1_master_sel_new		(wbs1_master_sel_new),
`endif
`ifdef WBS2      
      .wbs2_master_sel			(wbs2_master_sel),
      .wbs2_master_sel_new		(wbs2_master_sel_new),
`endif
`ifdef WBS3      
      .wbs3_master_sel			(wbs3_master_sel),
      .wbs3_master_sel_new		(wbs3_master_sel_new),
`endif
`ifdef WBS4      
      .wbs4_master_sel			(wbs4_master_sel),
      .wbs4_master_sel_new		(wbs4_master_sel_new),
`endif
`ifdef WBS5      
      .wbs5_master_sel			(wbs5_master_sel),
      .wbs5_master_sel_new		(wbs5_master_sel_new),
`endif      
`ifdef WBS6      
      .wbs6_master_sel			(wbs6_master_sel),
      .wbs6_master_sel_new		(wbs6_master_sel_new),
`endif      
`ifdef WBS7      
      .wbs7_master_sel			(wbs7_master_sel),
      .wbs7_master_sel_new		(wbs7_master_sel_new),
`endif      
      .wb_clk(wb_clk),
      .wb_rst(wb_rst)
      );
   defparam master_detect_slave2.slave_bit = 2;
`endif //  `ifdef WBM2
 
`ifdef WBM3
      wb_b3_switch_master_detect_slave_sel master_detect_slave3
     (
      // Outputs
      .wbm_slave_sel			(wbm3_slave_sel),
      // Inputs
      .wbs0_master_sel			(wbs0_master_sel),
      .wbs0_master_sel_new		(wbs0_master_sel_new),
`ifdef WBS1      
      .wbs1_master_sel			(wbs1_master_sel),
      .wbs1_master_sel_new		(wbs1_master_sel_new),
`endif
`ifdef WBS2      
      .wbs2_master_sel			(wbs2_master_sel),
      .wbs2_master_sel_new		(wbs2_master_sel_new),
`endif
`ifdef WBS3      
      .wbs3_master_sel			(wbs3_master_sel),
      .wbs3_master_sel_new		(wbs3_master_sel_new),
`endif
`ifdef WBS4      
      .wbs4_master_sel			(wbs4_master_sel),
      .wbs4_master_sel_new		(wbs4_master_sel_new),
`endif
`ifdef WBS5      
      .wbs5_master_sel			(wbs5_master_sel),
      .wbs5_master_sel_new		(wbs5_master_sel_new),
`endif      
`ifdef WBS6      
      .wbs6_master_sel			(wbs6_master_sel),
      .wbs6_master_sel_new		(wbs6_master_sel_new),
`endif      
`ifdef WBS7      
      .wbs7_master_sel			(wbs7_master_sel),
      .wbs7_master_sel_new		(wbs7_master_sel_new),
`endif      
      .wb_clk(wb_clk),
      .wb_rst(wb_rst)
      );
   defparam master_detect_slave3.slave_bit = 3;
`endif //  `ifdef WBM3
 
`ifdef WBM4
      wb_b3_switch_master_detect_slave_sel master_detect_slave4
     (
      // Outputs
      .wbm_slave_sel			(wbm4_slave_sel),
      // Inputs
      .wbs0_master_sel			(wbs0_master_sel),
      .wbs0_master_sel_new		(wbs0_master_sel_new),
`ifdef WBS1      
      .wbs1_master_sel			(wbs1_master_sel),
      .wbs1_master_sel_new		(wbs1_master_sel_new),
`endif
`ifdef WBS2      
      .wbs2_master_sel			(wbs2_master_sel),
      .wbs2_master_sel_new		(wbs2_master_sel_new),
`endif
`ifdef WBS3      
      .wbs3_master_sel			(wbs3_master_sel),
      .wbs3_master_sel_new		(wbs3_master_sel_new),
`endif
`ifdef WBS4      
      .wbs4_master_sel			(wbs4_master_sel),
      .wbs4_master_sel_new		(wbs4_master_sel_new),
`endif
`ifdef WBS5      
      .wbs5_master_sel			(wbs5_master_sel),
      .wbs5_master_sel_new		(wbs5_master_sel_new),
`endif      
`ifdef WBS6      
      .wbs6_master_sel			(wbs6_master_sel),
      .wbs6_master_sel_new		(wbs6_master_sel_new),
`endif      
`ifdef WBS7      
      .wbs7_master_sel			(wbs7_master_sel),
      .wbs7_master_sel_new		(wbs7_master_sel_new),
`endif      
      .wb_clk(wb_clk),
      .wb_rst(wb_rst)
      );
   defparam master_detect_slave4.slave_bit = 4;
`endif //  `ifdef WBM4
 
`ifdef WBM5
      wb_b3_switch_master_detect_slave_sel master_detect_slave5
     (
      // Outputs
      .wbm_slave_sel			(wbm5_slave_sel),
      // Inputs
      .wbs0_master_sel			(wbs0_master_sel),
      .wbs0_master_sel_new		(wbs0_master_sel_new),
`ifdef WBS1      
      .wbs1_master_sel			(wbs1_master_sel),
      .wbs1_master_sel_new		(wbs1_master_sel_new),
`endif
`ifdef WBS2      
      .wbs2_master_sel			(wbs2_master_sel),
      .wbs2_master_sel_new		(wbs2_master_sel_new),
`endif
`ifdef WBS3      
      .wbs3_master_sel			(wbs3_master_sel),
      .wbs3_master_sel_new		(wbs3_master_sel_new),
`endif
`ifdef WBS4      
      .wbs4_master_sel			(wbs4_master_sel),
      .wbs4_master_sel_new		(wbs4_master_sel_new),
`endif
`ifdef WBS5      
      .wbs5_master_sel			(wbs5_master_sel),
      .wbs5_master_sel_new		(wbs5_master_sel_new),
`endif      
`ifdef WBS6      
      .wbs6_master_sel			(wbs6_master_sel),
      .wbs6_master_sel_new		(wbs6_master_sel_new),
`endif      
`ifdef WBS7      
      .wbs7_master_sel			(wbs7_master_sel),
      .wbs7_master_sel_new		(wbs7_master_sel_new),
`endif      
      .wb_clk(wb_clk),
      .wb_rst(wb_rst)
      );
   defparam master_detect_slave5.slave_bit = 5;
`endif //  `ifdef WBM5
 
   /////////////////////////////////////////////////////////////////////////////
   // Slave Output MUXes
   /////////////////////////////////////////////////////////////////////////////
 
   wb_b3_switch_slave_out_mux slave_out_mux0
     (
      // Outputs
      .wbs_adr_i			(wbs0_adr_i[aw-1:0]),
      .wbs_bte_i			(wbs0_bte_i[1:0]),
      .wbs_cti_i			(wbs0_cti_i[2:0]),
      .wbs_cyc_i			(wbs0_cyc_i),
      .wbs_dat_i			(wbs0_dat_i[dw-1:0]),
      .wbs_sel_i			(wbs0_sel_i[3:0]),
      .wbs_stb_i			(wbs0_stb_i),
      .wbs_we_i				(wbs0_we_i),
      // Inputs
      .wbm0_adr_o			(wbm0_adr_o[aw-1:0]),
      .wbm0_bte_o			(wbm0_bte_o[1:0]),
      .wbm0_cti_o			(wbm0_cti_o[2:0]),
      .wbm0_cyc_o			(wbm0_cyc_o),
      .wbm0_dat_o			(wbm0_dat_o[dw-1:0]),
      .wbm0_sel_o			(wbm0_sel_o[3:0]),
      .wbm0_stb_o			(wbm0_stb_o),
      .wbm0_we_o			(wbm0_we_o),
`ifdef WBM1      
      .wbm1_adr_o			(wbm1_adr_o[aw-1:0]),
      .wbm1_bte_o			(wbm1_bte_o[1:0]),
      .wbm1_cti_o			(wbm1_cti_o[2:0]),
      .wbm1_cyc_o			(wbm1_cyc_o),
      .wbm1_dat_o			(wbm1_dat_o[dw-1:0]),
      .wbm1_sel_o			(wbm1_sel_o[3:0]),
      .wbm1_stb_o			(wbm1_stb_o),
      .wbm1_we_o			(wbm1_we_o),
`endif
`ifdef WBM2      
      .wbm2_adr_o			(wbm2_adr_o[aw-1:0]),
      .wbm2_bte_o			(wbm2_bte_o[1:0]),
      .wbm2_cti_o			(wbm2_cti_o[2:0]),
      .wbm2_cyc_o			(wbm2_cyc_o),
      .wbm2_dat_o			(wbm2_dat_o[dw-1:0]),
      .wbm2_sel_o			(wbm2_sel_o[3:0]),
      .wbm2_stb_o			(wbm2_stb_o),
      .wbm2_we_o			(wbm2_we_o),
`endif
`ifdef WBM3      
      .wbm3_adr_o			(wbm3_adr_o[aw-1:0]),
      .wbm3_bte_o			(wbm3_bte_o[1:0]),
      .wbm3_cti_o			(wbm3_cti_o[2:0]),
      .wbm3_cyc_o			(wbm3_cyc_o),
      .wbm3_dat_o			(wbm3_dat_o[dw-1:0]),
      .wbm3_sel_o			(wbm3_sel_o[3:0]),
      .wbm3_stb_o			(wbm3_stb_o),
      .wbm3_we_o			(wbm3_we_o),
`endif
`ifdef WBM4      
      .wbm4_adr_o			(wbm4_adr_o[aw-1:0]),
      .wbm4_bte_o			(wbm4_bte_o[1:0]),
      .wbm4_cti_o			(wbm4_cti_o[2:0]),
      .wbm4_cyc_o			(wbm4_cyc_o),
      .wbm4_dat_o			(wbm4_dat_o[dw-1:0]),
      .wbm4_sel_o			(wbm4_sel_o[3:0]),
      .wbm4_stb_o			(wbm4_stb_o),
      .wbm4_we_o			(wbm4_we_o),
`endif      
`ifdef WBM5      
      .wbm5_adr_o			(wbm5_adr_o[aw-1:0]),
      .wbm5_bte_o			(wbm5_bte_o[1:0]),
      .wbm5_cti_o			(wbm5_cti_o[2:0]),
      .wbm5_cyc_o			(wbm5_cyc_o),
      .wbm5_dat_o			(wbm5_dat_o[dw-1:0]),
      .wbm5_sel_o			(wbm5_sel_o[3:0]),
      .wbm5_stb_o			(wbm5_stb_o),
      .wbm5_we_o			(wbm5_we_o),
`endif      
      .wbs_master_sel			(wbs0_master_sel),
      .wb_clk				(wb_clk),
      .wb_rst				(wb_rst));
 
`ifdef WBS1
   wb_b3_switch_slave_out_mux slave_out_mux1
     (
      // Outputs
      .wbs_adr_i			(wbs1_adr_i[aw-1:0]),
      .wbs_bte_i			(wbs1_bte_i[1:0]),
      .wbs_cti_i			(wbs1_cti_i[2:0]),
      .wbs_cyc_i			(wbs1_cyc_i),
      .wbs_dat_i			(wbs1_dat_i[dw-1:0]),
      .wbs_sel_i			(wbs1_sel_i[3:0]),
      .wbs_stb_i			(wbs1_stb_i),
      .wbs_we_i				(wbs1_we_i),
      // Inputs
      .wbm0_adr_o			(wbm0_adr_o[aw-1:0]),
      .wbm0_bte_o			(wbm0_bte_o[1:0]),
      .wbm0_cti_o			(wbm0_cti_o[2:0]),
      .wbm0_cyc_o			(wbm0_cyc_o),
      .wbm0_dat_o			(wbm0_dat_o[dw-1:0]),
      .wbm0_sel_o			(wbm0_sel_o[3:0]),
      .wbm0_stb_o			(wbm0_stb_o),
      .wbm0_we_o			(wbm0_we_o),
`ifdef WBM1      
      .wbm1_adr_o			(wbm1_adr_o[aw-1:0]),
      .wbm1_bte_o			(wbm1_bte_o[1:0]),
      .wbm1_cti_o			(wbm1_cti_o[2:0]),
      .wbm1_cyc_o			(wbm1_cyc_o),
      .wbm1_dat_o			(wbm1_dat_o[dw-1:0]),
      .wbm1_sel_o			(wbm1_sel_o[3:0]),
      .wbm1_stb_o			(wbm1_stb_o),
      .wbm1_we_o			(wbm1_we_o),
`endif
`ifdef WBM2      
      .wbm2_adr_o			(wbm2_adr_o[aw-1:0]),
      .wbm2_bte_o			(wbm2_bte_o[1:0]),
      .wbm2_cti_o			(wbm2_cti_o[2:0]),
      .wbm2_cyc_o			(wbm2_cyc_o),
      .wbm2_dat_o			(wbm2_dat_o[dw-1:0]),
      .wbm2_sel_o			(wbm2_sel_o[3:0]),
      .wbm2_stb_o			(wbm2_stb_o),
      .wbm2_we_o			(wbm2_we_o),
`endif
`ifdef WBM3      
      .wbm3_adr_o			(wbm3_adr_o[aw-1:0]),
      .wbm3_bte_o			(wbm3_bte_o[1:0]),
      .wbm3_cti_o			(wbm3_cti_o[2:0]),
      .wbm3_cyc_o			(wbm3_cyc_o),
      .wbm3_dat_o			(wbm3_dat_o[dw-1:0]),
      .wbm3_sel_o			(wbm3_sel_o[3:0]),
      .wbm3_stb_o			(wbm3_stb_o),
      .wbm3_we_o			(wbm3_we_o),
`endif
`ifdef WBM4      
      .wbm4_adr_o			(wbm4_adr_o[aw-1:0]),
      .wbm4_bte_o			(wbm4_bte_o[1:0]),
      .wbm4_cti_o			(wbm4_cti_o[2:0]),
      .wbm4_cyc_o			(wbm4_cyc_o),
      .wbm4_dat_o			(wbm4_dat_o[dw-1:0]),
      .wbm4_sel_o			(wbm4_sel_o[3:0]),
      .wbm4_stb_o			(wbm4_stb_o),
      .wbm4_we_o			(wbm4_we_o),
`endif      
`ifdef WBM5      
      .wbm5_adr_o			(wbm5_adr_o[aw-1:0]),
      .wbm5_bte_o			(wbm5_bte_o[1:0]),
      .wbm5_cti_o			(wbm5_cti_o[2:0]),
      .wbm5_cyc_o			(wbm5_cyc_o),
      .wbm5_dat_o			(wbm5_dat_o[dw-1:0]),
      .wbm5_sel_o			(wbm5_sel_o[3:0]),
      .wbm5_stb_o			(wbm5_stb_o),
      .wbm5_we_o			(wbm5_we_o),
`endif      
      .wbs_master_sel			(wbs1_master_sel),
      .wb_clk				(wb_clk),
      .wb_rst				(wb_rst));
`endif //  `ifdef WBS1
 
`ifdef WBS2
   wb_b3_switch_slave_out_mux slave_out_mux2
     (
      // Outputs
      .wbs_adr_i			(wbs2_adr_i[aw-1:0]),
      .wbs_bte_i			(wbs2_bte_i[1:0]),
      .wbs_cti_i			(wbs2_cti_i[2:0]),
      .wbs_cyc_i			(wbs2_cyc_i),
      .wbs_dat_i			(wbs2_dat_i[dw-1:0]),
      .wbs_sel_i			(wbs2_sel_i[3:0]),
      .wbs_stb_i			(wbs2_stb_i),
      .wbs_we_i				(wbs2_we_i),
      // Inputs
      .wbm0_adr_o			(wbm0_adr_o[aw-1:0]),
      .wbm0_bte_o			(wbm0_bte_o[1:0]),
      .wbm0_cti_o			(wbm0_cti_o[2:0]),
      .wbm0_cyc_o			(wbm0_cyc_o),
      .wbm0_dat_o			(wbm0_dat_o[dw-1:0]),
      .wbm0_sel_o			(wbm0_sel_o[3:0]),
      .wbm0_stb_o			(wbm0_stb_o),
      .wbm0_we_o			(wbm0_we_o),
`ifdef WBM1      
      .wbm1_adr_o			(wbm1_adr_o[aw-1:0]),
      .wbm1_bte_o			(wbm1_bte_o[1:0]),
      .wbm1_cti_o			(wbm1_cti_o[2:0]),
      .wbm1_cyc_o			(wbm1_cyc_o),
      .wbm1_dat_o			(wbm1_dat_o[dw-1:0]),
      .wbm1_sel_o			(wbm1_sel_o[3:0]),
      .wbm1_stb_o			(wbm1_stb_o),
      .wbm1_we_o			(wbm1_we_o),
`endif
`ifdef WBM2      
      .wbm2_adr_o			(wbm2_adr_o[aw-1:0]),
      .wbm2_bte_o			(wbm2_bte_o[1:0]),
      .wbm2_cti_o			(wbm2_cti_o[2:0]),
      .wbm2_cyc_o			(wbm2_cyc_o),
      .wbm2_dat_o			(wbm2_dat_o[dw-1:0]),
      .wbm2_sel_o			(wbm2_sel_o[3:0]),
      .wbm2_stb_o			(wbm2_stb_o),
      .wbm2_we_o			(wbm2_we_o),
`endif
`ifdef WBM3      
      .wbm3_adr_o			(wbm3_adr_o[aw-1:0]),
      .wbm3_bte_o			(wbm3_bte_o[1:0]),
      .wbm3_cti_o			(wbm3_cti_o[2:0]),
      .wbm3_cyc_o			(wbm3_cyc_o),
      .wbm3_dat_o			(wbm3_dat_o[dw-1:0]),
      .wbm3_sel_o			(wbm3_sel_o[3:0]),
      .wbm3_stb_o			(wbm3_stb_o),
      .wbm3_we_o			(wbm3_we_o),
`endif
`ifdef WBM4      
      .wbm4_adr_o			(wbm4_adr_o[aw-1:0]),
      .wbm4_bte_o			(wbm4_bte_o[1:0]),
      .wbm4_cti_o			(wbm4_cti_o[2:0]),
      .wbm4_cyc_o			(wbm4_cyc_o),
      .wbm4_dat_o			(wbm4_dat_o[dw-1:0]),
      .wbm4_sel_o			(wbm4_sel_o[3:0]),
      .wbm4_stb_o			(wbm4_stb_o),
      .wbm4_we_o			(wbm4_we_o),
`endif      
`ifdef WBM5      
      .wbm5_adr_o			(wbm5_adr_o[aw-1:0]),
      .wbm5_bte_o			(wbm5_bte_o[1:0]),
      .wbm5_cti_o			(wbm5_cti_o[2:0]),
      .wbm5_cyc_o			(wbm5_cyc_o),
      .wbm5_dat_o			(wbm5_dat_o[dw-1:0]),
      .wbm5_sel_o			(wbm5_sel_o[3:0]),
      .wbm5_stb_o			(wbm5_stb_o),
      .wbm5_we_o			(wbm5_we_o),
`endif      
 
      .wbs_master_sel			(wbs2_master_sel),
      .wb_clk				(wb_clk),
      .wb_rst				(wb_rst));
`endif //  `ifdef WBS2
 
`ifdef WBS3
   wb_b3_switch_slave_out_mux slave_out_mux3
     (
      // Outputs
      .wbs_adr_i			(wbs3_adr_i[aw-1:0]),
      .wbs_bte_i			(wbs3_bte_i[1:0]),
      .wbs_cti_i			(wbs3_cti_i[2:0]),
      .wbs_cyc_i			(wbs3_cyc_i),
      .wbs_dat_i			(wbs3_dat_i[dw-1:0]),
      .wbs_sel_i			(wbs3_sel_i[3:0]),
      .wbs_stb_i			(wbs3_stb_i),
      .wbs_we_i				(wbs3_we_i),
      // Inputs
      .wbm0_adr_o			(wbm0_adr_o[aw-1:0]),
      .wbm0_bte_o			(wbm0_bte_o[1:0]),
      .wbm0_cti_o			(wbm0_cti_o[2:0]),
      .wbm0_cyc_o			(wbm0_cyc_o),
      .wbm0_dat_o			(wbm0_dat_o[dw-1:0]),
      .wbm0_sel_o			(wbm0_sel_o[3:0]),
      .wbm0_stb_o			(wbm0_stb_o),
      .wbm0_we_o			(wbm0_we_o),
`ifdef WBM1      
      .wbm1_adr_o			(wbm1_adr_o[aw-1:0]),
      .wbm1_bte_o			(wbm1_bte_o[1:0]),
      .wbm1_cti_o			(wbm1_cti_o[2:0]),
      .wbm1_cyc_o			(wbm1_cyc_o),
      .wbm1_dat_o			(wbm1_dat_o[dw-1:0]),
      .wbm1_sel_o			(wbm1_sel_o[3:0]),
      .wbm1_stb_o			(wbm1_stb_o),
      .wbm1_we_o			(wbm1_we_o),
`endif
`ifdef WBM2      
      .wbm2_adr_o			(wbm2_adr_o[aw-1:0]),
      .wbm2_bte_o			(wbm2_bte_o[1:0]),
      .wbm2_cti_o			(wbm2_cti_o[2:0]),
      .wbm2_cyc_o			(wbm2_cyc_o),
      .wbm2_dat_o			(wbm2_dat_o[dw-1:0]),
      .wbm2_sel_o			(wbm2_sel_o[3:0]),
      .wbm2_stb_o			(wbm2_stb_o),
      .wbm2_we_o			(wbm2_we_o),
`endif
`ifdef WBM3      
      .wbm3_adr_o			(wbm3_adr_o[aw-1:0]),
      .wbm3_bte_o			(wbm3_bte_o[1:0]),
      .wbm3_cti_o			(wbm3_cti_o[2:0]),
      .wbm3_cyc_o			(wbm3_cyc_o),
      .wbm3_dat_o			(wbm3_dat_o[dw-1:0]),
      .wbm3_sel_o			(wbm3_sel_o[3:0]),
      .wbm3_stb_o			(wbm3_stb_o),
      .wbm3_we_o			(wbm3_we_o),
`endif
`ifdef WBM4      
      .wbm4_adr_o			(wbm4_adr_o[aw-1:0]),
      .wbm4_bte_o			(wbm4_bte_o[1:0]),
      .wbm4_cti_o			(wbm4_cti_o[2:0]),
      .wbm4_cyc_o			(wbm4_cyc_o),
      .wbm4_dat_o			(wbm4_dat_o[dw-1:0]),
      .wbm4_sel_o			(wbm4_sel_o[3:0]),
      .wbm4_stb_o			(wbm4_stb_o),
      .wbm4_we_o			(wbm4_we_o),
`endif      
`ifdef WBM5      
      .wbm5_adr_o			(wbm5_adr_o[aw-1:0]),
      .wbm5_bte_o			(wbm5_bte_o[1:0]),
      .wbm5_cti_o			(wbm5_cti_o[2:0]),
      .wbm5_cyc_o			(wbm5_cyc_o),
      .wbm5_dat_o			(wbm5_dat_o[dw-1:0]),
      .wbm5_sel_o			(wbm5_sel_o[3:0]),
      .wbm5_stb_o			(wbm5_stb_o),
      .wbm5_we_o			(wbm5_we_o),
`endif      
      .wbs_master_sel			(wbs3_master_sel),
      .wb_clk				(wb_clk),
      .wb_rst				(wb_rst));
`endif //  `ifdef WBS3
`ifdef WBS4
   wb_b3_switch_slave_out_mux slave_out_mux4
     (
      // Outputs
      .wbs_adr_i			(wbs4_adr_i[aw-1:0]),
      .wbs_bte_i			(wbs4_bte_i[1:0]),
      .wbs_cti_i			(wbs4_cti_i[2:0]),
      .wbs_cyc_i			(wbs4_cyc_i),
      .wbs_dat_i			(wbs4_dat_i[dw-1:0]),
      .wbs_sel_i			(wbs4_sel_i[3:0]),
      .wbs_stb_i			(wbs4_stb_i),
      .wbs_we_i				(wbs4_we_i),
      // Inputs
      .wbm0_adr_o			(wbm0_adr_o[aw-1:0]),
      .wbm0_bte_o			(wbm0_bte_o[1:0]),
      .wbm0_cti_o			(wbm0_cti_o[2:0]),
      .wbm0_cyc_o			(wbm0_cyc_o),
      .wbm0_dat_o			(wbm0_dat_o[dw-1:0]),
      .wbm0_sel_o			(wbm0_sel_o[3:0]),
      .wbm0_stb_o			(wbm0_stb_o),
      .wbm0_we_o			(wbm0_we_o),
`ifdef WBM1      
      .wbm1_adr_o			(wbm1_adr_o[aw-1:0]),
      .wbm1_bte_o			(wbm1_bte_o[1:0]),
      .wbm1_cti_o			(wbm1_cti_o[2:0]),
      .wbm1_cyc_o			(wbm1_cyc_o),
      .wbm1_dat_o			(wbm1_dat_o[dw-1:0]),
      .wbm1_sel_o			(wbm1_sel_o[3:0]),
      .wbm1_stb_o			(wbm1_stb_o),
      .wbm1_we_o			(wbm1_we_o),
`endif
`ifdef WBM2      
      .wbm2_adr_o			(wbm2_adr_o[aw-1:0]),
      .wbm2_bte_o			(wbm2_bte_o[1:0]),
      .wbm2_cti_o			(wbm2_cti_o[2:0]),
      .wbm2_cyc_o			(wbm2_cyc_o),
      .wbm2_dat_o			(wbm2_dat_o[dw-1:0]),
      .wbm2_sel_o			(wbm2_sel_o[3:0]),
      .wbm2_stb_o			(wbm2_stb_o),
      .wbm2_we_o			(wbm2_we_o),
`endif
`ifdef WBM3      
      .wbm3_adr_o			(wbm3_adr_o[aw-1:0]),
      .wbm3_bte_o			(wbm3_bte_o[1:0]),
      .wbm3_cti_o			(wbm3_cti_o[2:0]),
      .wbm3_cyc_o			(wbm3_cyc_o),
      .wbm3_dat_o			(wbm3_dat_o[dw-1:0]),
      .wbm3_sel_o			(wbm3_sel_o[3:0]),
      .wbm3_stb_o			(wbm3_stb_o),
      .wbm3_we_o			(wbm3_we_o),
`endif
`ifdef WBM4      
      .wbm4_adr_o			(wbm4_adr_o[aw-1:0]),
      .wbm4_bte_o			(wbm4_bte_o[1:0]),
      .wbm4_cti_o			(wbm4_cti_o[2:0]),
      .wbm4_cyc_o			(wbm4_cyc_o),
      .wbm4_dat_o			(wbm4_dat_o[dw-1:0]),
      .wbm4_sel_o			(wbm4_sel_o[3:0]),
      .wbm4_stb_o			(wbm4_stb_o),
      .wbm4_we_o			(wbm4_we_o),
`endif      
`ifdef WBM5      
      .wbm5_adr_o			(wbm5_adr_o[aw-1:0]),
      .wbm5_bte_o			(wbm5_bte_o[1:0]),
      .wbm5_cti_o			(wbm5_cti_o[2:0]),
      .wbm5_cyc_o			(wbm5_cyc_o),
      .wbm5_dat_o			(wbm5_dat_o[dw-1:0]),
      .wbm5_sel_o			(wbm5_sel_o[3:0]),
      .wbm5_stb_o			(wbm5_stb_o),
      .wbm5_we_o			(wbm5_we_o),
`endif      
      .wbs_master_sel			(wbs4_master_sel),
      .wb_clk				(wb_clk),
      .wb_rst				(wb_rst));
`endif //  `ifdef WBS4
`ifdef WBS5
   wb_b3_switch_slave_out_mux slave_out_mux5
     (
      // Outputs
      .wbs_adr_i			(wbs5_adr_i[aw-1:0]),
      .wbs_bte_i			(wbs5_bte_i[1:0]),
      .wbs_cti_i			(wbs5_cti_i[2:0]),
      .wbs_cyc_i			(wbs5_cyc_i),
      .wbs_dat_i			(wbs5_dat_i[dw-1:0]),
      .wbs_sel_i			(wbs5_sel_i[3:0]),
      .wbs_stb_i			(wbs5_stb_i),
      .wbs_we_i				(wbs5_we_i),
      // Inputs
      .wbm0_adr_o			(wbm0_adr_o[aw-1:0]),
      .wbm0_bte_o			(wbm0_bte_o[1:0]),
      .wbm0_cti_o			(wbm0_cti_o[2:0]),
      .wbm0_cyc_o			(wbm0_cyc_o),
      .wbm0_dat_o			(wbm0_dat_o[dw-1:0]),
      .wbm0_sel_o			(wbm0_sel_o[3:0]),
      .wbm0_stb_o			(wbm0_stb_o),
      .wbm0_we_o			(wbm0_we_o),
`ifdef WBM1      
      .wbm1_adr_o			(wbm1_adr_o[aw-1:0]),
      .wbm1_bte_o			(wbm1_bte_o[1:0]),
      .wbm1_cti_o			(wbm1_cti_o[2:0]),
      .wbm1_cyc_o			(wbm1_cyc_o),
      .wbm1_dat_o			(wbm1_dat_o[dw-1:0]),
      .wbm1_sel_o			(wbm1_sel_o[3:0]),
      .wbm1_stb_o			(wbm1_stb_o),
      .wbm1_we_o			(wbm1_we_o),
`endif
`ifdef WBM2      
      .wbm2_adr_o			(wbm2_adr_o[aw-1:0]),
      .wbm2_bte_o			(wbm2_bte_o[1:0]),
      .wbm2_cti_o			(wbm2_cti_o[2:0]),
      .wbm2_cyc_o			(wbm2_cyc_o),
      .wbm2_dat_o			(wbm2_dat_o[dw-1:0]),
      .wbm2_sel_o			(wbm2_sel_o[3:0]),
      .wbm2_stb_o			(wbm2_stb_o),
      .wbm2_we_o			(wbm2_we_o),
`endif
`ifdef WBM3      
      .wbm3_adr_o			(wbm3_adr_o[aw-1:0]),
      .wbm3_bte_o			(wbm3_bte_o[1:0]),
      .wbm3_cti_o			(wbm3_cti_o[2:0]),
      .wbm3_cyc_o			(wbm3_cyc_o),
      .wbm3_dat_o			(wbm3_dat_o[dw-1:0]),
      .wbm3_sel_o			(wbm3_sel_o[3:0]),
      .wbm3_stb_o			(wbm3_stb_o),
      .wbm3_we_o			(wbm3_we_o),
`endif
`ifdef WBM4      
      .wbm4_adr_o			(wbm4_adr_o[aw-1:0]),
      .wbm4_bte_o			(wbm4_bte_o[1:0]),
      .wbm4_cti_o			(wbm4_cti_o[2:0]),
      .wbm4_cyc_o			(wbm4_cyc_o),
      .wbm4_dat_o			(wbm4_dat_o[dw-1:0]),
      .wbm4_sel_o			(wbm4_sel_o[3:0]),
      .wbm4_stb_o			(wbm4_stb_o),
      .wbm4_we_o			(wbm4_we_o),
`endif      
`ifdef WBM5      
      .wbm5_adr_o			(wbm5_adr_o[aw-1:0]),
      .wbm5_bte_o			(wbm5_bte_o[1:0]),
      .wbm5_cti_o			(wbm5_cti_o[2:0]),
      .wbm5_cyc_o			(wbm5_cyc_o),
      .wbm5_dat_o			(wbm5_dat_o[dw-1:0]),
      .wbm5_sel_o			(wbm5_sel_o[3:0]),
      .wbm5_stb_o			(wbm5_stb_o),
      .wbm5_we_o			(wbm5_we_o),
`endif      
      .wbs_master_sel			(wbs5_master_sel),
      .wb_clk				(wb_clk),
      .wb_rst				(wb_rst));
`endif //  `ifdef WBS5
`ifdef WBS6
   wb_b3_switch_slave_out_mux slave_out_mux6
     (
      // Outputs
      .wbs_adr_i			(wbs6_adr_i[aw-1:0]),
      .wbs_bte_i			(wbs6_bte_i[1:0]),
      .wbs_cti_i			(wbs6_cti_i[2:0]),
      .wbs_cyc_i			(wbs6_cyc_i),
      .wbs_dat_i			(wbs6_dat_i[dw-1:0]),
      .wbs_sel_i			(wbs6_sel_i[3:0]),
      .wbs_stb_i			(wbs6_stb_i),
      .wbs_we_i				(wbs6_we_i),
      // Inputs
      .wbm0_adr_o			(wbm0_adr_o[aw-1:0]),
      .wbm0_bte_o			(wbm0_bte_o[1:0]),
      .wbm0_cti_o			(wbm0_cti_o[2:0]),
      .wbm0_cyc_o			(wbm0_cyc_o),
      .wbm0_dat_o			(wbm0_dat_o[dw-1:0]),
      .wbm0_sel_o			(wbm0_sel_o[3:0]),
      .wbm0_stb_o			(wbm0_stb_o),
      .wbm0_we_o			(wbm0_we_o),
`ifdef WBM1      
      .wbm1_adr_o			(wbm1_adr_o[aw-1:0]),
      .wbm1_bte_o			(wbm1_bte_o[1:0]),
      .wbm1_cti_o			(wbm1_cti_o[2:0]),
      .wbm1_cyc_o			(wbm1_cyc_o),
      .wbm1_dat_o			(wbm1_dat_o[dw-1:0]),
      .wbm1_sel_o			(wbm1_sel_o[3:0]),
      .wbm1_stb_o			(wbm1_stb_o),
      .wbm1_we_o			(wbm1_we_o),
`endif
`ifdef WBM2      
      .wbm2_adr_o			(wbm2_adr_o[aw-1:0]),
      .wbm2_bte_o			(wbm2_bte_o[1:0]),
      .wbm2_cti_o			(wbm2_cti_o[2:0]),
      .wbm2_cyc_o			(wbm2_cyc_o),
      .wbm2_dat_o			(wbm2_dat_o[dw-1:0]),
      .wbm2_sel_o			(wbm2_sel_o[3:0]),
      .wbm2_stb_o			(wbm2_stb_o),
      .wbm2_we_o			(wbm2_we_o),
`endif
`ifdef WBM3      
      .wbm3_adr_o			(wbm3_adr_o[aw-1:0]),
      .wbm3_bte_o			(wbm3_bte_o[1:0]),
      .wbm3_cti_o			(wbm3_cti_o[2:0]),
      .wbm3_cyc_o			(wbm3_cyc_o),
      .wbm3_dat_o			(wbm3_dat_o[dw-1:0]),
      .wbm3_sel_o			(wbm3_sel_o[3:0]),
      .wbm3_stb_o			(wbm3_stb_o),
      .wbm3_we_o			(wbm3_we_o),
`endif
`ifdef WBM4      
      .wbm4_adr_o			(wbm4_adr_o[aw-1:0]),
      .wbm4_bte_o			(wbm4_bte_o[1:0]),
      .wbm4_cti_o			(wbm4_cti_o[2:0]),
      .wbm4_cyc_o			(wbm4_cyc_o),
      .wbm4_dat_o			(wbm4_dat_o[dw-1:0]),
      .wbm4_sel_o			(wbm4_sel_o[3:0]),
      .wbm4_stb_o			(wbm4_stb_o),
      .wbm4_we_o			(wbm4_we_o),
`endif      
`ifdef WBM5      
      .wbm5_adr_o			(wbm5_adr_o[aw-1:0]),
      .wbm5_bte_o			(wbm5_bte_o[1:0]),
      .wbm5_cti_o			(wbm5_cti_o[2:0]),
      .wbm5_cyc_o			(wbm5_cyc_o),
      .wbm5_dat_o			(wbm5_dat_o[dw-1:0]),
      .wbm5_sel_o			(wbm5_sel_o[3:0]),
      .wbm5_stb_o			(wbm5_stb_o),
      .wbm5_we_o			(wbm5_we_o),
`endif      
      .wbs_master_sel			(wbs6_master_sel),
      .wb_clk				(wb_clk),
      .wb_rst				(wb_rst));
`endif //  `ifdef WBS6
`ifdef WBS7
   wb_b3_switch_slave_out_mux slave_out_mux7
     (
      // Outputs
      .wbs_adr_i			(wbs7_adr_i[aw-1:0]),
      .wbs_bte_i			(wbs7_bte_i[1:0]),
      .wbs_cti_i			(wbs7_cti_i[2:0]),
      .wbs_cyc_i			(wbs7_cyc_i),
      .wbs_dat_i			(wbs7_dat_i[dw-1:0]),
      .wbs_sel_i			(wbs7_sel_i[3:0]),
      .wbs_stb_i			(wbs7_stb_i),
      .wbs_we_i				(wbs7_we_i),
      // Inputs
      .wbm0_adr_o			(wbm0_adr_o[aw-1:0]),
      .wbm0_bte_o			(wbm0_bte_o[1:0]),
      .wbm0_cti_o			(wbm0_cti_o[2:0]),
      .wbm0_cyc_o			(wbm0_cyc_o),
      .wbm0_dat_o			(wbm0_dat_o[dw-1:0]),
      .wbm0_sel_o			(wbm0_sel_o[3:0]),
      .wbm0_stb_o			(wbm0_stb_o),
      .wbm0_we_o			(wbm0_we_o),
`ifdef WBM1      
      .wbm1_adr_o			(wbm1_adr_o[aw-1:0]),
      .wbm1_bte_o			(wbm1_bte_o[1:0]),
      .wbm1_cti_o			(wbm1_cti_o[2:0]),
      .wbm1_cyc_o			(wbm1_cyc_o),
      .wbm1_dat_o			(wbm1_dat_o[dw-1:0]),
      .wbm1_sel_o			(wbm1_sel_o[3:0]),
      .wbm1_stb_o			(wbm1_stb_o),
      .wbm1_we_o			(wbm1_we_o),
`endif
`ifdef WBM2      
      .wbm2_adr_o			(wbm2_adr_o[aw-1:0]),
      .wbm2_bte_o			(wbm2_bte_o[1:0]),
      .wbm2_cti_o			(wbm2_cti_o[2:0]),
      .wbm2_cyc_o			(wbm2_cyc_o),
      .wbm2_dat_o			(wbm2_dat_o[dw-1:0]),
      .wbm2_sel_o			(wbm2_sel_o[3:0]),
      .wbm2_stb_o			(wbm2_stb_o),
      .wbm2_we_o			(wbm2_we_o),
`endif
`ifdef WBM3      
      .wbm3_adr_o			(wbm3_adr_o[aw-1:0]),
      .wbm3_bte_o			(wbm3_bte_o[1:0]),
      .wbm3_cti_o			(wbm3_cti_o[2:0]),
      .wbm3_cyc_o			(wbm3_cyc_o),
      .wbm3_dat_o			(wbm3_dat_o[dw-1:0]),
      .wbm3_sel_o			(wbm3_sel_o[3:0]),
      .wbm3_stb_o			(wbm3_stb_o),
      .wbm3_we_o			(wbm3_we_o),
`endif
`ifdef WBM4      
      .wbm4_adr_o			(wbm4_adr_o[aw-1:0]),
      .wbm4_bte_o			(wbm4_bte_o[1:0]),
      .wbm4_cti_o			(wbm4_cti_o[2:0]),
      .wbm4_cyc_o			(wbm4_cyc_o),
      .wbm4_dat_o			(wbm4_dat_o[dw-1:0]),
      .wbm4_sel_o			(wbm4_sel_o[3:0]),
      .wbm4_stb_o			(wbm4_stb_o),
      .wbm4_we_o			(wbm4_we_o),
`endif      
`ifdef WBM5      
      .wbm5_adr_o			(wbm5_adr_o[aw-1:0]),
      .wbm5_bte_o			(wbm5_bte_o[1:0]),
      .wbm5_cti_o			(wbm5_cti_o[2:0]),
      .wbm5_cyc_o			(wbm5_cyc_o),
      .wbm5_dat_o			(wbm5_dat_o[dw-1:0]),
      .wbm5_sel_o			(wbm5_sel_o[3:0]),
      .wbm5_stb_o			(wbm5_stb_o),
      .wbm5_we_o			(wbm5_we_o),
`endif      
      .wbs_master_sel			(wbs7_master_sel),
      .wb_clk				(wb_clk),
      .wb_rst				(wb_rst));
`endif //  `ifdef WBS7
 
   /////////////////////////////////////////////////////////////////////////////
   // Master output MUXes
   /////////////////////////////////////////////////////////////////////////////
 
   wb_b3_switch_master_out_mux master_out_mux0
     (
      .wbm_stb_o                        (wbm0_stb_o),
      // Outputs
      .wbm_ack_i			(wbm0_ack_i),
      .wbm_err_i			(wbm0_err_i),
      .wbm_rty_i			(wbm0_rty_i),
      .wbm_dat_i			(wbm0_dat_i[dw-1:0]),
      // Inputs
      .wbs0_ack_o			(wbs0_ack_o),
      .wbs0_err_o			(wbs0_err_o),
      .wbs0_rty_o			(wbs0_rty_o),
      .wbs0_dat_o			(wbs0_dat_o[dw-1:0]),
`ifdef WBS1      
      .wbs1_ack_o			(wbs1_ack_o),
      .wbs1_err_o			(wbs1_err_o),
      .wbs1_rty_o			(wbs1_rty_o),
      .wbs1_dat_o			(wbs1_dat_o[dw-1:0]),
`endif
`ifdef WBS2      
      .wbs2_ack_o			(wbs2_ack_o),
      .wbs2_err_o			(wbs2_err_o),
      .wbs2_rty_o			(wbs2_rty_o),
      .wbs2_dat_o			(wbs2_dat_o[dw-1:0]),
`endif
`ifdef WBS3      
      .wbs3_ack_o			(wbs3_ack_o),
      .wbs3_err_o			(wbs3_err_o),
      .wbs3_rty_o			(wbs3_rty_o),
      .wbs3_dat_o			(wbs3_dat_o[dw-1:0]),
`endif
`ifdef WBS4
      .wbs4_ack_o			(wbs4_ack_o),
      .wbs4_err_o			(wbs4_err_o),
      .wbs4_rty_o			(wbs4_rty_o),
      .wbs4_dat_o			(wbs4_dat_o[dw-1:0]),
`endif      
`ifdef WBS5
      .wbs5_ack_o			(wbs5_ack_o),
      .wbs5_err_o			(wbs5_err_o),
      .wbs5_rty_o			(wbs5_rty_o),
      .wbs5_dat_o			(wbs5_dat_o[dw-1:0]),
`endif      
`ifdef WBS6
      .wbs6_ack_o			(wbs6_ack_o),
      .wbs6_err_o			(wbs6_err_o),
      .wbs6_rty_o			(wbs6_rty_o),
      .wbs6_dat_o			(wbs6_dat_o[dw-1:0]),
`endif      
`ifdef WBS7
      .wbs7_ack_o			(wbs7_ack_o),
      .wbs7_err_o			(wbs7_err_o),
      .wbs7_rty_o			(wbs7_rty_o),
      .wbs7_dat_o			(wbs7_dat_o[dw-1:0]),
`endif      
      .wbm_slave_sel			(wbm0_slave_sel),
      .wb_clk				(wb_clk),
      .wb_rst				(wb_rst));
 
`ifdef WBM1
   wb_b3_switch_master_out_mux master_out_mux1
     (
      .wbm_stb_o                        (wbm1_stb_o),
      // Outputs
      .wbm_ack_i			(wbm1_ack_i),
      .wbm_err_i			(wbm1_err_i),
      .wbm_rty_i			(wbm1_rty_i),
      .wbm_dat_i			(wbm1_dat_i[dw-1:0]),
      // Inputs
      .wbs0_ack_o			(wbs0_ack_o),
      .wbs0_err_o			(wbs0_err_o),
      .wbs0_rty_o			(wbs0_rty_o),
      .wbs0_dat_o			(wbs0_dat_o[dw-1:0]),
`ifdef WBS1      
      .wbs1_ack_o			(wbs1_ack_o),
      .wbs1_err_o			(wbs1_err_o),
      .wbs1_rty_o			(wbs1_rty_o),
      .wbs1_dat_o			(wbs1_dat_o[dw-1:0]),
`endif
`ifdef WBS2      
      .wbs2_ack_o			(wbs2_ack_o),
      .wbs2_err_o			(wbs2_err_o),
      .wbs2_rty_o			(wbs2_rty_o),
      .wbs2_dat_o			(wbs2_dat_o[dw-1:0]),
`endif
`ifdef WBS3      
      .wbs3_ack_o			(wbs3_ack_o),
      .wbs3_err_o			(wbs3_err_o),
      .wbs3_rty_o			(wbs3_rty_o),
      .wbs3_dat_o			(wbs3_dat_o[dw-1:0]),
`endif      
`ifdef WBS4
      .wbs4_ack_o			(wbs4_ack_o),
      .wbs4_err_o			(wbs4_err_o),
      .wbs4_rty_o			(wbs4_rty_o),
      .wbs4_dat_o			(wbs4_dat_o[dw-1:0]),
`endif      
`ifdef WBS5
      .wbs5_ack_o			(wbs5_ack_o),
      .wbs5_err_o			(wbs5_err_o),
      .wbs5_rty_o			(wbs5_rty_o),
      .wbs5_dat_o			(wbs5_dat_o[dw-1:0]),
`endif      
`ifdef WBS6
      .wbs6_ack_o			(wbs6_ack_o),
      .wbs6_err_o			(wbs6_err_o),
      .wbs6_rty_o			(wbs6_rty_o),
      .wbs6_dat_o			(wbs6_dat_o[dw-1:0]),
`endif      
`ifdef WBS7
      .wbs7_ack_o			(wbs7_ack_o),
      .wbs7_err_o			(wbs7_err_o),
      .wbs7_rty_o			(wbs7_rty_o),
      .wbs7_dat_o			(wbs7_dat_o[dw-1:0]),
`endif      
      .wbm_slave_sel			(wbm1_slave_sel),
      .wb_clk				(wb_clk),
      .wb_rst				(wb_rst));
`endif //  `ifdef WBM1
 
`ifdef WBM2
   wb_b3_switch_master_out_mux master_out_mux2
     (
      .wbm_stb_o                        (wbm2_stb_o),
      // Outputs
      .wbm_ack_i			(wbm2_ack_i),
      .wbm_err_i			(wbm2_err_i),
      .wbm_rty_i			(wbm2_rty_i),
      .wbm_dat_i			(wbm2_dat_i[dw-1:0]),
      // Inputs
      .wbs0_ack_o			(wbs0_ack_o),
      .wbs0_err_o			(wbs0_err_o),
      .wbs0_rty_o			(wbs0_rty_o),
      .wbs0_dat_o			(wbs0_dat_o[dw-1:0]),
`ifdef WBS1      
      .wbs1_ack_o			(wbs1_ack_o),
      .wbs1_err_o			(wbs1_err_o),
      .wbs1_rty_o			(wbs1_rty_o),
      .wbs1_dat_o			(wbs1_dat_o[dw-1:0]),
`endif
`ifdef WBS2      
      .wbs2_ack_o			(wbs2_ack_o),
      .wbs2_err_o			(wbs2_err_o),
      .wbs2_rty_o			(wbs2_rty_o),
      .wbs2_dat_o			(wbs2_dat_o[dw-1:0]),
`endif
`ifdef WBS3      
      .wbs3_ack_o			(wbs3_ack_o),
      .wbs3_err_o			(wbs3_err_o),
      .wbs3_rty_o			(wbs3_rty_o),
      .wbs3_dat_o			(wbs3_dat_o[dw-1:0]),
`endif      
`ifdef WBS4
      .wbs4_ack_o			(wbs4_ack_o),
      .wbs4_err_o			(wbs4_err_o),
      .wbs4_rty_o			(wbs4_rty_o),
      .wbs4_dat_o			(wbs4_dat_o[dw-1:0]),
`endif      
`ifdef WBS5
      .wbs5_ack_o			(wbs5_ack_o),
      .wbs5_err_o			(wbs5_err_o),
      .wbs5_rty_o			(wbs5_rty_o),
      .wbs5_dat_o			(wbs5_dat_o[dw-1:0]),
`endif      
`ifdef WBS6
      .wbs6_ack_o			(wbs6_ack_o),
      .wbs6_err_o			(wbs6_err_o),
      .wbs6_rty_o			(wbs6_rty_o),
      .wbs6_dat_o			(wbs6_dat_o[dw-1:0]),
`endif      
`ifdef WBS7
      .wbs7_ack_o			(wbs7_ack_o),
      .wbs7_err_o			(wbs7_err_o),
      .wbs7_rty_o			(wbs7_rty_o),
      .wbs7_dat_o			(wbs7_dat_o[dw-1:0]),
`endif      
      .wbm_slave_sel			(wbm2_slave_sel),
      .wb_clk				(wb_clk),
      .wb_rst				(wb_rst));
`endif
 
`ifdef WBM3
   wb_b3_switch_master_out_mux master_out_mux3
     (
      .wbm_stb_o                        (wbm3_stb_o),
      // Outputs
      .wbm_ack_i			(wbm3_ack_i),
      .wbm_err_i			(wbm3_err_i),
      .wbm_rty_i			(wbm3_rty_i),
      .wbm_dat_i			(wbm3_dat_i[dw-1:0]),
      // Inputs
      .wbs0_ack_o			(wbs0_ack_o),
      .wbs0_err_o			(wbs0_err_o),
      .wbs0_rty_o			(wbs0_rty_o),
      .wbs0_dat_o			(wbs0_dat_o[dw-1:0]),
`ifdef WBS1      
      .wbs1_ack_o			(wbs1_ack_o),
      .wbs1_err_o			(wbs1_err_o),
      .wbs1_rty_o			(wbs1_rty_o),
      .wbs1_dat_o			(wbs1_dat_o[dw-1:0]),
`endif
`ifdef WBS2      
      .wbs2_ack_o			(wbs2_ack_o),
      .wbs2_err_o			(wbs2_err_o),
      .wbs2_rty_o			(wbs2_rty_o),
      .wbs2_dat_o			(wbs2_dat_o[dw-1:0]),
`endif
`ifdef WBS3      
      .wbs3_ack_o			(wbs3_ack_o),
      .wbs3_err_o			(wbs3_err_o),
      .wbs3_rty_o			(wbs3_rty_o),
      .wbs3_dat_o			(wbs3_dat_o[dw-1:0]),
`endif      
`ifdef WBS4
      .wbs4_ack_o			(wbs4_ack_o),
      .wbs4_err_o			(wbs4_err_o),
      .wbs4_rty_o			(wbs4_rty_o),
      .wbs4_dat_o			(wbs4_dat_o[dw-1:0]),
`endif      
`ifdef WBS5
      .wbs5_ack_o			(wbs5_ack_o),
      .wbs5_err_o			(wbs5_err_o),
      .wbs5_rty_o			(wbs5_rty_o),
      .wbs5_dat_o			(wbs5_dat_o[dw-1:0]),
`endif      
`ifdef WBS6
      .wbs6_ack_o			(wbs6_ack_o),
      .wbs6_err_o			(wbs6_err_o),
      .wbs6_rty_o			(wbs6_rty_o),
      .wbs6_dat_o			(wbs6_dat_o[dw-1:0]),
`endif      
`ifdef WBS7
      .wbs7_ack_o			(wbs7_ack_o),
      .wbs7_err_o			(wbs7_err_o),
      .wbs7_rty_o			(wbs7_rty_o),
      .wbs7_dat_o			(wbs7_dat_o[dw-1:0]),
`endif      
      .wbm_slave_sel			(wbm3_slave_sel),
      .wb_clk				(wb_clk),
      .wb_rst				(wb_rst));
`endif
`ifdef WBM4
   wb_b3_switch_master_out_mux master_out_mux4
     (
      .wbm_stb_o                        (wbm4_stb_o),
      // Outputs
      .wbm_ack_i			(wbm4_ack_i),
      .wbm_err_i			(wbm4_err_i),
      .wbm_rty_i			(wbm4_rty_i),
      .wbm_dat_i			(wbm4_dat_i[dw-1:0]),
      // Inputs
      .wbs0_ack_o			(wbs0_ack_o),
      .wbs0_err_o			(wbs0_err_o),
      .wbs0_rty_o			(wbs0_rty_o),
      .wbs0_dat_o			(wbs0_dat_o[dw-1:0]),
`ifdef WBS1      
      .wbs1_ack_o			(wbs1_ack_o),
      .wbs1_err_o			(wbs1_err_o),
      .wbs1_rty_o			(wbs1_rty_o),
      .wbs1_dat_o			(wbs1_dat_o[dw-1:0]),
`endif
`ifdef WBS2      
      .wbs2_ack_o			(wbs2_ack_o),
      .wbs2_err_o			(wbs2_err_o),
      .wbs2_rty_o			(wbs2_rty_o),
      .wbs2_dat_o			(wbs2_dat_o[dw-1:0]),
`endif
`ifdef WBS3      
      .wbs3_ack_o			(wbs3_ack_o),
      .wbs3_err_o			(wbs3_err_o),
      .wbs3_rty_o			(wbs3_rty_o),
      .wbs3_dat_o			(wbs3_dat_o[dw-1:0]),
`endif      
`ifdef WBS4
      .wbs4_ack_o			(wbs4_ack_o),
      .wbs4_err_o			(wbs4_err_o),
      .wbs4_rty_o			(wbs4_rty_o),
      .wbs4_dat_o			(wbs4_dat_o[dw-1:0]),
`endif      
`ifdef WBS5
      .wbs5_ack_o			(wbs5_ack_o),
      .wbs5_err_o			(wbs5_err_o),
      .wbs5_rty_o			(wbs5_rty_o),
      .wbs5_dat_o			(wbs5_dat_o[dw-1:0]),
`endif      
`ifdef WBS6
      .wbs6_ack_o			(wbs6_ack_o),
      .wbs6_err_o			(wbs6_err_o),
      .wbs6_rty_o			(wbs6_rty_o),
      .wbs6_dat_o			(wbs6_dat_o[dw-1:0]),
`endif      
`ifdef WBS7
      .wbs7_ack_o			(wbs7_ack_o),
      .wbs7_err_o			(wbs7_err_o),
      .wbs7_rty_o			(wbs7_rty_o),
      .wbs7_dat_o			(wbs7_dat_o[dw-1:0]),
`endif      
      .wbm_slave_sel			(wbm4_slave_sel),
      .wb_clk				(wb_clk),
      .wb_rst				(wb_rst));
`endif
`ifdef WBM5
   wb_b3_switch_master_out_mux master_out_mux5
     (
      .wbm_stb_o                        (wbm5_stb_o),
      // Outputs
      .wbm_ack_i			(wbm5_ack_i),
      .wbm_err_i			(wbm5_err_i),
      .wbm_rty_i			(wbm5_rty_i),
      .wbm_dat_i			(wbm5_dat_i[dw-1:0]),
      // Inputs
      .wbs0_ack_o			(wbs0_ack_o),
      .wbs0_err_o			(wbs0_err_o),
      .wbs0_rty_o			(wbs0_rty_o),
      .wbs0_dat_o			(wbs0_dat_o[dw-1:0]),
`ifdef WBS1      
      .wbs1_ack_o			(wbs1_ack_o),
      .wbs1_err_o			(wbs1_err_o),
      .wbs1_rty_o			(wbs1_rty_o),
      .wbs1_dat_o			(wbs1_dat_o[dw-1:0]),
`endif
`ifdef WBS2      
      .wbs2_ack_o			(wbs2_ack_o),
      .wbs2_err_o			(wbs2_err_o),
      .wbs2_rty_o			(wbs2_rty_o),
      .wbs2_dat_o			(wbs2_dat_o[dw-1:0]),
`endif
`ifdef WBS3      
      .wbs3_ack_o			(wbs3_ack_o),
      .wbs3_err_o			(wbs3_err_o),
      .wbs3_rty_o			(wbs3_rty_o),
      .wbs3_dat_o			(wbs3_dat_o[dw-1:0]),
`endif      
`ifdef WBS4
      .wbs4_ack_o			(wbs4_ack_o),
      .wbs4_err_o			(wbs4_err_o),
      .wbs4_rty_o			(wbs4_rty_o),
      .wbs4_dat_o			(wbs4_dat_o[dw-1:0]),
`endif      
`ifdef WBS5
      .wbs5_ack_o			(wbs5_ack_o),
      .wbs5_err_o			(wbs5_err_o),
      .wbs5_rty_o			(wbs5_rty_o),
      .wbs5_dat_o			(wbs5_dat_o[dw-1:0]),
`endif      
`ifdef WBS6
      .wbs6_ack_o			(wbs6_ack_o),
      .wbs6_err_o			(wbs6_err_o),
      .wbs6_rty_o			(wbs6_rty_o),
      .wbs6_dat_o			(wbs6_dat_o[dw-1:0]),
`endif      
`ifdef WBS7
      .wbs7_ack_o			(wbs7_ack_o),
      .wbs7_err_o			(wbs7_err_o),
      .wbs7_rty_o			(wbs7_rty_o),
      .wbs7_dat_o			(wbs7_dat_o[dw-1:0]),
`endif      
      .wbm_slave_sel			(wbm5_slave_sel),
      .wb_clk				(wb_clk),
      .wb_rst				(wb_rst));
`endif
 
endmodule // wb_b3_switch
 
// Master selection logic
module wb_b3_switch_slave_sel
  (
   wbm0_adr_o, wbm0_cyc_o,
`ifdef WBM1		    
   wbm1_adr_o, wbm1_cyc_o,
`endif
`ifdef WBM2		    		     
   wbm2_adr_o, wbm2_cyc_o,
`endif
`ifdef WBM3		    		     
   wbm3_adr_o, wbm3_cyc_o,
`endif
`ifdef WBM4		    		     
   wbm4_adr_o, wbm4_cyc_o,
`endif
`ifdef WBM5		    		     
   wbm5_adr_o, wbm5_cyc_o,
`endif
 
   wbs_master_sel, wbs_master_sel_new,   
 
   wb_clk, wb_rst);
 
   parameter dw = 32;
   parameter aw = 32;
 
   parameter num_masters = 4;
   parameter slave_sel_bit_width = 4;   
   parameter slave_addr = 4'hf;
 
 
   input [aw-1:0] wbm0_adr_o;input wbm0_cyc_o;
`ifdef WBM1
   input [aw-1:0] wbm1_adr_o;input wbm1_cyc_o;   
`endif
`ifdef WBM2
   input [aw-1:0] wbm2_adr_o;input wbm2_cyc_o;   
`endif
`ifdef WBM3
   input [aw-1:0] wbm3_adr_o;input wbm3_cyc_o;   
`endif
`ifdef WBM4
   input [aw-1:0] wbm4_adr_o;input wbm4_cyc_o;   
`endif
`ifdef WBM5
   input [aw-1:0] wbm5_adr_o;input wbm5_cyc_o;   
`endif
 
   input 	  wb_clk, wb_rst;
 
   output reg [num_masters - 1:0] wbs_master_sel;
   output 			  wbs_master_sel_new;
 
   reg [num_masters - 1:0] 	  wbs_master_sel_r;
 
   reg [num_masters - 1:0] 	  last_master;
 
   wire 			  wbm0_req;
   assign wbm0_req = (wbm0_adr_o[aw-1:(aw-(slave_sel_bit_width))] ==  slave_addr) &
		     wbm0_cyc_o;
`ifdef WBM1
   wire 			  wbm1_req;
   assign wbm1_req = (wbm1_adr_o[aw-1:(aw-(slave_sel_bit_width))] ==  slave_addr) &
		     wbm1_cyc_o;
`endif
 
`ifdef WBM2
   wire 			  wbm2_req;
   assign wbm2_req = (wbm2_adr_o[aw-1:(aw-(slave_sel_bit_width))] ==  slave_addr) &
		     wbm2_cyc_o;
`endif
 
`ifdef WBM3
   wire 			  wbm3_req;
   assign wbm3_req = (wbm3_adr_o[aw-1:(aw-(slave_sel_bit_width))] ==  slave_addr) &
		     wbm3_cyc_o;
`endif
`ifdef WBM4
   wire 			  wbm4_req;
   assign wbm4_req = (wbm4_adr_o[aw-1:(aw-(slave_sel_bit_width))] ==  slave_addr) &
		     wbm4_cyc_o;
`endif
`ifdef WBM5
   wire 			  wbm5_req;
   assign wbm5_req = (wbm5_adr_o[aw-1:(aw-(slave_sel_bit_width))] ==  slave_addr) &
		     wbm5_cyc_o;
`endif
 
   // Generate wires to check if there's other requests than our own, to enable us to stop
   // any particular master hogging the bus
`ifdef WBM5
   wire 			  wbm0_other_reqs;
   assign wbm0_other_reqs = (wbm1_req | wbm2_req | wbm3_req | wbm4_req | wbm5_req);
   wire 			  wbm1_other_reqs;
   assign wbm1_other_reqs = (wbm0_req | wbm2_req | wbm3_req | wbm4_req | wbm5_req);
   wire 			  wbm2_other_reqs;
   assign wbm2_other_reqs = (wbm1_req | wbm0_req | wbm3_req | wbm4_req | wbm5_req);
   wire 			  wbm3_other_reqs;
   assign wbm3_other_reqs = (wbm1_req | wbm2_req | wbm0_req | wbm4_req | wbm5_req);
   wire 			  wbm4_other_reqs;
   assign wbm4_other_reqs = (wbm1_req | wbm2_req | wbm0_req | wbm3_req | wbm5_req);
   wire 			  wbm5_other_reqs;
   assign wbm5_other_reqs = (wbm1_req | wbm2_req | wbm0_req | wbm3_req | wbm4_req);
`else   
`ifdef WBM4
   wire 			  wbm0_other_reqs;
   assign wbm0_other_reqs = (wbm1_req | wbm2_req | wbm3_req | wbm4_req);
   wire 			  wbm1_other_reqs;
   assign wbm1_other_reqs = (wbm0_req | wbm2_req | wbm3_req | wbm4_req);
   wire 			  wbm2_other_reqs;
   assign wbm2_other_reqs = (wbm1_req | wbm0_req | wbm3_req | wbm4_req);
   wire 			  wbm3_other_reqs;
   assign wbm3_other_reqs = (wbm1_req | wbm2_req | wbm0_req | wbm4_req);
   wire 			  wbm4_other_reqs;
   assign wbm4_other_reqs = (wbm1_req | wbm2_req | wbm0_req | wbm3_req);
`else   
`ifdef WBM3
   wire 			  wbm0_other_reqs;
   assign wbm0_other_reqs = (wbm1_req | wbm2_req | wbm3_req);
   wire 			  wbm1_other_reqs;
   assign wbm1_other_reqs = (wbm0_req | wbm2_req | wbm3_req);
   wire 			  wbm2_other_reqs;
   assign wbm2_other_reqs = (wbm1_req | wbm0_req | wbm3_req);
   wire 			  wbm3_other_reqs;
   assign wbm3_other_reqs = (wbm1_req | wbm2_req | wbm0_req);
`else
 `ifdef WBM2
   wire 			  wbm0_other_reqs;
   assign wbm0_other_reqs = (wbm1_req | wbm2_req);
   wire 			  wbm1_other_reqs;
   assign wbm1_other_reqs = (wbm0_req | wbm2_req);
   wire 			  wbm2_other_reqs;
   assign wbm2_other_reqs = (wbm1_req | wbm0_req);
 `else
  `ifdef WBM1
   wire 			  wbm0_other_reqs;
   assign wbm0_other_reqs = (wbm1_req);
   wire 			  wbm1_other_reqs;
   assign wbm1_other_reqs = (wbm0_req);
  `else
   wire 			  wbm0_other_reqs;
   assign wbm0_other_reqs = 0;
  `endif
 `endif // !`ifdef WBM2
`endif // !`ifdef WBM3
`endif // !`ifdef WBM4
`endif // !`ifdef WBM5
 
   // Address match logic - number of bits from the MSbit we used for address 
   // selection. Typically just the top nibble
   always @(posedge wb_clk)
     if (wb_rst)
       begin
	  wbs_master_sel <= 0;
	  last_master <= 0;	  
       end // if (wb_rst)
     else
       begin
	  if ((!(|wbs_master_sel)) & (!(|wbs_master_sel_r))) 
	    // Make sure it's cleared for a couple cycles
	    begin
	       // check for a new master request
	       if (wbm0_req & ((!last_master[0]) | (last_master[0] & !wbm0_other_reqs)))
		 begin
		    wbs_master_sel[0] <= 1;
		    last_master <= 1;		    
		 end
`ifdef WBM1	       
	       else if (wbm1_req & ((!last_master[1]) | (last_master[1] & !wbm1_other_reqs)))
		 begin
		    wbs_master_sel[1] <= 1;
		    last_master <= 2;		    
		 end
`endif
`ifdef WBM2
	       else if (wbm2_req & ((!last_master[2]) | (last_master[2] & !wbm2_other_reqs)))
		 begin
		    wbs_master_sel[2] <= 1;
		    last_master <= 4;		    
		 end
`endif
`ifdef WBM3
	       else if (wbm3_req & ((!last_master[3]) | (last_master[3] & !wbm3_other_reqs)))
		 begin
		    wbs_master_sel[3] <= 1;
		    last_master <= 8;		    
		 end
`endif
`ifdef WBM4
	       else if (wbm4_req & ((!last_master[4]) | (last_master[4] & !wbm4_other_reqs)))
		 begin
		    wbs_master_sel[4] <= 1;
		    last_master <= 16;		    
		 end
`endif
`ifdef WBM5
	       else if (wbm5_req & ((!last_master[5]) | (last_master[5] & !wbm5_other_reqs)))
		 begin
		    wbs_master_sel[5] <= 1;
		    last_master <= 32;		    
		 end
`endif
	    end // if (!(|wbs_master_sel))
	  else
	    begin
	       // Poll the cycle of the selected master until it goes low, 
	       // at which point we select another master
	       if (wbs_master_sel[0] & !wbm0_cyc_o)
		 wbs_master_sel[0] <= 0;
`ifdef WBM1
	       if (wbs_master_sel[1] & !wbm1_cyc_o)
		 wbs_master_sel[1] <= 0;
`endif
`ifdef WBM2
	       if (wbs_master_sel[2] & !wbm2_cyc_o)
		 wbs_master_sel[2] <= 0;
`endif	       
`ifdef WBM3
	       if (wbs_master_sel[3] & !wbm3_cyc_o)
		 wbs_master_sel[3] <= 0;
`endif
`ifdef WBM4
	       if (wbs_master_sel[4] & !wbm4_cyc_o)
		 wbs_master_sel[4] <= 0;
`endif	       
`ifdef WBM5
	       if (wbs_master_sel[5] & !wbm5_cyc_o)
		 wbs_master_sel[5] <= 0;
`endif	       
	    end // else: !if(!(|wbs_master_sel))
       end // else: !if(wb_rst)
 
   always @(posedge wb_clk)
     wbs_master_sel_r <= wbs_master_sel;
 
`define  WBS_MASTER_DESELECT_ALSO   
`ifdef WBS_MASTER_DESELECT_ALSO
   // Also pulse for deselection of master
   assign wbs_master_sel_new = ((|wbs_master_sel) & !(|wbs_master_sel_r)) |
			       (!(|wbs_master_sel)) & (|wbs_master_sel_r);   
`else
   // Pulse for just new select of master by slave
   assign wbs_master_sel_new = (|wbs_master_sel) & !(|wbs_master_sel_r);
`endif   
 
endmodule // wb_b3_switch_slave_sel
 
 
// Detect which slave has selected this master to control its bus
// Need this to determine which slave's output to mux onto which master's inputs
module wb_b3_switch_master_detect_slave_sel
  (   
    output reg [`NUM_SLAVES-1:0] wbm_slave_sel,
 
    input [`NUM_MASTERS-1:0] wbs0_master_sel,
    input 		     wbs0_master_sel_new,
`ifdef WBS1
    input [`NUM_MASTERS-1:0] wbs1_master_sel,
    input 		     wbs1_master_sel_new,
`endif
`ifdef WBS2
    input [`NUM_MASTERS-1:0] wbs2_master_sel,
    input 		     wbs2_master_sel_new,
`endif
`ifdef WBS3
    input [`NUM_MASTERS-1:0] wbs3_master_sel,
    input 		     wbs3_master_sel_new,
`endif
`ifdef WBS4
    input [`NUM_MASTERS-1:0] wbs4_master_sel,
    input 		     wbs4_master_sel_new,
`endif
`ifdef WBS5
    input [`NUM_MASTERS-1:0] wbs5_master_sel,
    input 		     wbs5_master_sel_new,
`endif
`ifdef WBS6
    input [`NUM_MASTERS-1:0] wbs6_master_sel,
    input 		     wbs6_master_sel_new,
`endif
`ifdef WBS7
    input [`NUM_MASTERS-1:0] wbs7_master_sel,
    input 		     wbs7_master_sel_new,
`endif
    input 		     wb_clk, wb_rst
      );
 
   parameter slave_bit = 0;
 
   // Master's slave select detection logic (depends on which slave has 
   // selected it)
   always @(posedge wb_clk)
     if (wb_rst)
       wbm_slave_sel <= 0;
     else
       if (wbs0_master_sel_new
`ifdef WBS1
	   | wbs1_master_sel_new
`endif	   
`ifdef WBS2
	   | wbs2_master_sel_new
`endif	   
`ifdef WBS3
	   | wbs3_master_sel_new
`endif
`ifdef WBS4
	   | wbs4_master_sel_new
`endif
`ifdef WBS5
	   | wbs5_master_sel_new
`endif
`ifdef WBS6
	   | wbs6_master_sel_new
`endif
`ifdef WBS7
	   | wbs7_master_sel_new
`endif
	   )
	 // Figure out which slave is tied to master0
	 wbm_slave_sel <=
`ifdef WBS7
	   {wbs7_master_sel[slave_bit], wbs6_master_sel[slave_bit], 
	    wbs5_master_sel[slave_bit], wbs4_master_sel[slave_bit], 
	    wbs3_master_sel[slave_bit], wbs2_master_sel[slave_bit], 
	    wbs1_master_sel[slave_bit], wbs0_master_sel[slave_bit]};   
`else
 `ifdef WBS6
	   {wbs6_master_sel[slave_bit], wbs5_master_sel[slave_bit],
	    wbs4_master_sel[slave_bit], wbs3_master_sel[slave_bit], 
	    wbs2_master_sel[slave_bit], wbs1_master_sel[slave_bit], 
	    wbs0_master_sel[slave_bit]};   
 `else
  `ifdef WBS5
	   {wbs5_master_sel[slave_bit], wbs4_master_sel[slave_bit], 
	    wbs3_master_sel[slave_bit], wbs2_master_sel[slave_bit], 
	    wbs1_master_sel[slave_bit], wbs0_master_sel[slave_bit]};   
  `else
   `ifdef WBS4
	   {wbs4_master_sel[slave_bit], wbs3_master_sel[slave_bit], 
	    wbs2_master_sel[slave_bit], wbs1_master_sel[slave_bit], 
	    wbs0_master_sel[slave_bit]};   
   `else
    `ifdef WBS3
	   {wbs3_master_sel[slave_bit], wbs2_master_sel[slave_bit], 
	    wbs1_master_sel[slave_bit], wbs0_master_sel[slave_bit]};   
    `else
     `ifdef WBS2
           {wbs2_master_sel[slave_bit], wbs1_master_sel[slave_bit], 
	    wbs0_master_sel[slave_bit]};
     `else
      `ifdef WBS1
           {wbs1_master_sel[slave_bit], wbs0_master_sel[slave_bit]};
      `else
           wbs0_master_sel[slave_bit];
      `endif
     `endif
    `endif // !`ifdef WBS3
   `endif // !`ifdef WBS4
  `endif // !`ifdef WBS5
 `endif // !`ifdef WBS6
`endif // !`ifdef WBS7
 
endmodule // wb_b3_switch_master_detect_slave_sel
 
// All signals FROM master coming in, Muxing them to the signals TO the slave
module wb_b3_switch_slave_out_mux
  (
   // Master ports
   wbm0_adr_o, wbm0_bte_o, wbm0_cti_o, wbm0_cyc_o, wbm0_dat_o, wbm0_sel_o,
   wbm0_stb_o, wbm0_we_o,
`ifdef WBM1		    
   wbm1_adr_o, wbm1_bte_o, wbm1_cti_o, wbm1_cyc_o, wbm1_dat_o, wbm1_sel_o,
   wbm1_stb_o, wbm1_we_o,
`endif
`ifdef WBM2		    		     
   wbm2_adr_o, wbm2_bte_o, wbm2_cti_o, wbm2_cyc_o, wbm2_dat_o, wbm2_sel_o,
   wbm2_stb_o, wbm2_we_o,
`endif
`ifdef WBM3		    		     
   wbm3_adr_o, wbm3_bte_o, wbm3_cti_o, wbm3_cyc_o, wbm3_dat_o, wbm3_sel_o,
   wbm3_stb_o, wbm3_we_o,
`endif
`ifdef WBM4		    		     
   wbm4_adr_o, wbm4_bte_o, wbm4_cti_o, wbm4_cyc_o, wbm4_dat_o, wbm4_sel_o,
   wbm4_stb_o, wbm4_we_o,
`endif
`ifdef WBM5		    		    
   wbm5_adr_o, wbm5_bte_o, wbm5_cti_o, wbm5_cyc_o, wbm5_dat_o, wbm5_sel_o,
   wbm5_stb_o, wbm5_we_o,
`endif
 
   // Slave ports
   wbs_adr_i, wbs_bte_i, wbs_cti_i, wbs_cyc_i, wbs_dat_i, wbs_sel_i,
   wbs_stb_i, wbs_we_i,
 
   wbs_master_sel,
 
   wb_clk, wb_rst
   );
 
 
   parameter dw = 32;
   parameter aw = 32;
   parameter num_masters = `NUM_MASTERS;   
 
   input [aw-1:0] wbm0_adr_o;input [1:0] wbm0_bte_o;input [2:0]	wbm0_cti_o;input wbm0_cyc_o;input [dw-1:0] wbm0_dat_o;input [3:0] wbm0_sel_o;input wbm0_stb_o;input wbm0_we_o;
`ifdef WBM1
   input [aw-1:0] wbm1_adr_o;input [1:0] wbm1_bte_o;input [2:0]	wbm1_cti_o;input wbm1_cyc_o;input [dw-1:0] wbm1_dat_o;input [3:0] wbm1_sel_o;input wbm1_stb_o;input wbm1_we_o;
`endif
`ifdef WBM2
   input [aw-1:0] wbm2_adr_o;input [1:0] wbm2_bte_o;input [2:0]	wbm2_cti_o;input wbm2_cyc_o;input [dw-1:0] wbm2_dat_o;input [3:0] wbm2_sel_o;input wbm2_stb_o;input wbm2_we_o;
`endif
`ifdef WBM3
   input [aw-1:0] wbm3_adr_o;input [1:0] wbm3_bte_o;input [2:0]	wbm3_cti_o;input wbm3_cyc_o;input [dw-1:0] wbm3_dat_o;input [3:0] wbm3_sel_o;input wbm3_stb_o;input wbm3_we_o;
`endif
`ifdef WBM4
   input [aw-1:0] wbm4_adr_o;input [1:0] wbm4_bte_o;input [2:0]	wbm4_cti_o;input wbm4_cyc_o;input [dw-1:0] wbm4_dat_o;input [3:0] wbm4_sel_o;input wbm4_stb_o;input wbm4_we_o;
`endif
`ifdef WBM5
   input [aw-1:0] wbm5_adr_o;input [1:0] wbm5_bte_o;input [2:0]	wbm5_cti_o;input wbm5_cyc_o;input [dw-1:0] wbm5_dat_o;input [3:0] wbm5_sel_o;input wbm5_stb_o;input wbm5_we_o;
`endif
 
   output [aw-1:0] wbs_adr_i;output [1:0] wbs_bte_i;output [2:0] wbs_cti_i;output wbs_cyc_i;output [dw-1:0] wbs_dat_i;output [3:0] wbs_sel_i;output wbs_stb_i;output wbs_we_i;
 
   input [num_masters-1:0] wbs_master_sel;
 
   input 		   wb_clk, wb_rst;
 
   assign wbs_adr_i = (wbs_master_sel[0]) ? wbm0_adr_o :
`ifdef WBM1
                      (wbs_master_sel[1]) ? wbm1_adr_o :
`endif
`ifdef WBM2
	              (wbs_master_sel[2]) ? wbm2_adr_o :
`endif
`ifdef WBM3
		      (wbs_master_sel[3]) ? wbm3_adr_o :
`endif
`ifdef WBM4
		      (wbs_master_sel[4]) ? wbm4_adr_o :
`endif
`ifdef WBM5
		      (wbs_master_sel[5]) ? wbm5_adr_o :
`endif
		       0;
   assign wbs_bte_i = (wbs_master_sel[0]) ? wbm0_bte_o :
`ifdef WBM1
                      (wbs_master_sel[1]) ? wbm1_bte_o :
`endif
`ifdef WBM2
	              (wbs_master_sel[2]) ? wbm2_bte_o :
`endif
`ifdef WBM3
		      (wbs_master_sel[3]) ? wbm3_bte_o :
`endif
`ifdef WBM4
		      (wbs_master_sel[4]) ? wbm4_bte_o :
`endif
`ifdef WBM5
		      (wbs_master_sel[5]) ? wbm5_bte_o :
`endif
		       0;
   assign wbs_cti_i = (wbs_master_sel[0]) ? wbm0_cti_o :
`ifdef WBM1
                      (wbs_master_sel[1]) ? wbm1_cti_o :
`endif
`ifdef WBM2
	              (wbs_master_sel[2]) ? wbm2_cti_o :
`endif
`ifdef WBM3
		      (wbs_master_sel[3]) ? wbm3_cti_o :
`endif
`ifdef WBM4
		      (wbs_master_sel[4]) ? wbm4_cti_o :
`endif
`ifdef WBM5
		      (wbs_master_sel[5]) ? wbm5_cti_o :
`endif
		       0;
 
   assign wbs_cyc_i = (wbs_master_sel[0]) ? wbm0_cyc_o :
`ifdef WBM1
                      (wbs_master_sel[1]) ? wbm1_cyc_o :
`endif
`ifdef WBM2
	              (wbs_master_sel[2]) ? wbm2_cyc_o :
`endif
`ifdef WBM3
		      (wbs_master_sel[3]) ? wbm3_cyc_o :
`endif
`ifdef WBM4
		      (wbs_master_sel[4]) ? wbm4_cyc_o :
`endif
`ifdef WBM5
		      (wbs_master_sel[5]) ? wbm5_cyc_o :
`endif
		       0;
 
   assign wbs_dat_i = (wbs_master_sel[0]) ? wbm0_dat_o :
`ifdef WBM1
                      (wbs_master_sel[1]) ? wbm1_dat_o :
`endif
`ifdef WBM2
	              (wbs_master_sel[2]) ? wbm2_dat_o :
`endif
`ifdef WBM3
		      (wbs_master_sel[3]) ? wbm3_dat_o :
`endif
`ifdef WBM4
		      (wbs_master_sel[4]) ? wbm4_dat_o :
`endif
`ifdef WBM5
		      (wbs_master_sel[5]) ? wbm5_dat_o :
`endif
		       0;
 
   assign wbs_sel_i = (wbs_master_sel[0]) ? wbm0_sel_o :
`ifdef WBM1
                      (wbs_master_sel[1]) ? wbm1_sel_o :
`endif
`ifdef WBM2
	              (wbs_master_sel[2]) ? wbm2_sel_o :
`endif
`ifdef WBM3
		      (wbs_master_sel[3]) ? wbm3_sel_o :
`endif
`ifdef WBM4
		      (wbs_master_sel[4]) ? wbm4_sel_o :
`endif
`ifdef WBM5
		      (wbs_master_sel[5]) ? wbm5_sel_o :
`endif
		       0;
 
      assign wbs_stb_i = (wbs_master_sel[0]) ? wbm0_stb_o :
`ifdef WBM1
                      (wbs_master_sel[1]) ? wbm1_stb_o :
`endif
`ifdef WBM2
	              (wbs_master_sel[2]) ? wbm2_stb_o :
`endif
`ifdef WBM3
		      (wbs_master_sel[3]) ? wbm3_stb_o :
`endif
`ifdef WBM4
		      (wbs_master_sel[4]) ? wbm4_stb_o :
`endif
`ifdef WBM5
		      (wbs_master_sel[5]) ? wbm5_stb_o :
`endif
		       0;
 
   assign wbs_we_i = (wbs_master_sel[0]) ? wbm0_we_o :
`ifdef WBM1
                      (wbs_master_sel[1]) ? wbm1_we_o :
`endif
`ifdef WBM2
	              (wbs_master_sel[2]) ? wbm2_we_o :
`endif
`ifdef WBM3
		      (wbs_master_sel[3]) ? wbm3_we_o :
`endif
`ifdef WBM4
		      (wbs_master_sel[4]) ? wbm4_we_o :
`endif
`ifdef WBM5
		      (wbs_master_sel[5]) ? wbm5_we_o :
`endif
		       0;
endmodule // wb_b3_switch_slave_out_mux
 
 
module wb_b3_switch_master_out_mux
  (
   // Master in, for watchdog
   wbm_stb_o,
   // Master outs
   wbm_ack_i, wbm_err_i, wbm_rty_i, wbm_dat_i,
   // Slave ports
   wbs0_ack_o, wbs0_err_o, wbs0_rty_o, wbs0_dat_o,   
`ifdef WBS1
   wbs1_ack_o, wbs1_err_o, wbs1_rty_o, wbs1_dat_o,
`endif
`ifdef WBS2
   wbs2_ack_o, wbs2_err_o, wbs2_rty_o, wbs2_dat_o,
`endif		     
`ifdef WBS3
   wbs3_ack_o, wbs3_err_o, wbs3_rty_o, wbs3_dat_o,
`endif
`ifdef WBS4
   wbs4_ack_o, wbs4_err_o, wbs4_rty_o, wbs4_dat_o,
`endif
`ifdef WBS5
   wbs5_ack_o, wbs5_err_o, wbs5_rty_o, wbs5_dat_o,
`endif
`ifdef WBS6
   wbs6_ack_o, wbs6_err_o, wbs6_rty_o, wbs6_dat_o,
`endif
`ifdef WBS7
   wbs7_ack_o, wbs7_err_o, wbs7_rty_o, wbs7_dat_o,
`endif
 
   wbm_slave_sel,
 
   wb_clk, wb_rst);
 
   // Data and address width parameters
   parameter dw = 32;
   parameter aw = 32;
   input  wbm_stb_o;
 
   output wbm_ack_i;output wbm_err_i;output wbm_rty_i;output [dw-1:0] wbm_dat_i;
 
   input   wbs0_ack_o;input wbs0_err_o;input wbs0_rty_o;input [dw-1:0] wbs0_dat_o;
 
`ifdef WBS1
    input  wbs1_ack_o;input wbs1_err_o;input wbs1_rty_o;input [dw-1:0] wbs1_dat_o;
`endif
`ifdef WBS2
   input   wbs2_ack_o;input wbs2_err_o;input wbs2_rty_o;input [dw-1:0] wbs2_dat_o;
`endif
`ifdef WBS3
   input   wbs3_ack_o;input wbs3_err_o;input wbs3_rty_o;input [dw-1:0] wbs3_dat_o;
`endif
`ifdef WBS4
   input   wbs4_ack_o;input wbs4_err_o;input wbs4_rty_o;input [dw-1:0] wbs4_dat_o;
`endif
`ifdef WBS5
   input   wbs5_ack_o;input wbs5_err_o;input wbs5_rty_o;input [dw-1:0] wbs5_dat_o;
`endif
`ifdef WBS6
   input   wbs6_ack_o;input wbs6_err_o;input wbs6_rty_o;input [dw-1:0] wbs6_dat_o;
`endif
`ifdef WBS7
   input   wbs7_ack_o;input wbs7_err_o;input wbs7_rty_o;input [dw-1:0] wbs7_dat_o;
`endif
 
   input [`NUM_SLAVES-1:0] wbm_slave_sel;
 
   input 		   wb_clk, wb_rst;
 
`ifdef WATCHDOG_TIMER   
   parameter watchdog_timer_width = 8;
   reg [watchdog_timer_width-1:0] watchdog_timer;
   reg 			   watchdog_err;
   reg 			   wbm_stb_r, wbm_stb_r2; // Register strobe
   wire 		   wbm_stb_edge; // Detect its edge
   reg 			   wbm_stb_edge_r;
   reg 			   wbm_ack_i_r;
 
 
   always @(posedge wb_clk)
     wbm_stb_r <= wbm_stb_o;
 
   always @(posedge wb_clk)
     wbm_stb_r2 <= wbm_stb_r;
 
   always @(posedge wb_clk)
     wbm_stb_edge_r <= wbm_stb_edge;
 
   always @(posedge wb_clk)
     wbm_ack_i_r <= wbm_ack_i;
 
 
   assign wbm_stb_edge = (wbm_stb_r & !wbm_stb_r2);
 
   // Counter logic
   always @(posedge wb_clk)
     if (wb_rst) watchdog_timer <= 0;
     else if (wbm_ack_i_r) // When we see an ack, turn off timer
       watchdog_timer <= 0;
     else if (wbm_stb_edge_r) // New access means start timer again
       watchdog_timer <= 1;
     else if (|watchdog_timer) // Continue counting if counter > 0
       watchdog_timer <= watchdog_timer + 1;
 
   always @(posedge wb_clk) 
     watchdog_err <= (&watchdog_timer);
 
   always @(posedge watchdog_err)
     begin
	$display("%t: %m - Watchdog counter error",$time);
	if (|wbm_slave_sel)
	  $display("%t: %m - slave %d selected - it didn't respond in time", 
		   $time, wbm_slave_sel);
	else
	  $display("%t: %m - NO slave was selected by switch - either bad address or arbiter hadn't granted a access to a locked slave", $time);
     end
 
`else
   wire 		   watchdog_err;
   assign watchdog_err = 0;
`endif
 
 
 
   assign wbm_ack_i = (wbm_slave_sel[0]) ? wbs0_ack_o :
`ifdef WBS1
                      (wbm_slave_sel[1]) ? wbs1_ack_o :		      
`endif
`ifdef WBS2
                      (wbm_slave_sel[2]) ? wbs2_ack_o :		      
`endif
`ifdef WBS3
                      (wbm_slave_sel[3]) ? wbs3_ack_o :		      
`endif
`ifdef WBS4
                      (wbm_slave_sel[4]) ? wbs4_ack_o :		      
`endif
`ifdef WBS5
                      (wbm_slave_sel[5]) ? wbs5_ack_o :		      
`endif
`ifdef WBS6
                      (wbm_slave_sel[6]) ? wbs6_ack_o :		      
`endif
`ifdef WBS7
                      (wbm_slave_sel[7]) ? wbs7_ack_o :		      
`endif
		       watchdog_err;
 
   assign wbm_err_i = (wbm_slave_sel[0]) ? wbs0_err_o :
`ifdef WBS1
                      (wbm_slave_sel[1]) ? wbs1_err_o :		      
`endif
`ifdef WBS2
                      (wbm_slave_sel[2]) ? wbs2_err_o :		      
`endif
`ifdef WBS3
                      (wbm_slave_sel[3]) ? wbs3_err_o :		      
`endif
`ifdef WBS4
                      (wbm_slave_sel[4]) ? wbs4_err_o :		      
`endif
`ifdef WBS5
                      (wbm_slave_sel[5]) ? wbs5_err_o :		      
`endif
`ifdef WBS6
                      (wbm_slave_sel[6]) ? wbs6_err_o :		      
`endif
`ifdef WBS7
                      (wbm_slave_sel[7]) ? wbs7_err_o :		      
`endif
		       watchdog_err;
 
   assign wbm_rty_i = (wbm_slave_sel[0]) ? wbs0_rty_o :
`ifdef WBS1
                      (wbm_slave_sel[1]) ? wbs1_rty_o :		      
`endif
`ifdef WBS2
                      (wbm_slave_sel[2]) ? wbs2_rty_o :		      
`endif
`ifdef WBS3
                      (wbm_slave_sel[3]) ? wbs3_rty_o :		      
`endif
`ifdef WBS4
                      (wbm_slave_sel[4]) ? wbs4_rty_o :		      
`endif
`ifdef WBS5
                      (wbm_slave_sel[5]) ? wbs5_rty_o :		      
`endif
`ifdef WBS6
                      (wbm_slave_sel[6]) ? wbs6_rty_o :		      
`endif
`ifdef WBS7
                      (wbm_slave_sel[7]) ? wbs7_rty_o :		      
`endif
		       0;
 
   assign wbm_dat_i = (wbm_slave_sel[0]) ? wbs0_dat_o :
`ifdef WBS1
                      (wbm_slave_sel[1]) ? wbs1_dat_o :		      
`endif
`ifdef WBS2
                      (wbm_slave_sel[2]) ? wbs2_dat_o :		      
`endif
`ifdef WBS3
                      (wbm_slave_sel[3]) ? wbs3_dat_o :		      
`endif		       		
`ifdef WBS4
                      (wbm_slave_sel[4]) ? wbs4_dat_o :		      
`endif		       		
`ifdef WBS5
                      (wbm_slave_sel[5]) ? wbs5_dat_o :		      
`endif		       		
`ifdef WBS6
                      (wbm_slave_sel[6]) ? wbs6_dat_o :		      
`endif		       		
`ifdef WBS7
                      (wbm_slave_sel[7]) ? wbs7_dat_o :		      
`endif		       		
		       0;
 
endmodule // wb_b3_switch_master_out_mux
 
 
 

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.