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

Subversion Repositories openrisc

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /openrisc/trunk/orpsocv2/rtl
    from Rev 350 to Rev 351
    Reverse comparison

Rev 350 → Rev 351

/verilog/components/or1200/or1200_dc_top.v
292,7 → 292,7
wire [31:`OR1200_DCTAGL] dcqmem_adr_i_tag;
assign dcqmem_adr_i_tag = dcqmem_adr_i[31:`OR1200_DCTAGL];
always @(tag or dcqmem_adr_i or tag_v) begin
always @(tag or dcqmem_adr_i_tag or tag_v) begin
if ((tag != dcqmem_adr_i_tag) || !tag_v)
tagcomp_miss = 1'b1;
else
/verilog/components/wb_ram_b3/wb_ram_b3.v
0,0 → 1,268
 
// Version 5
 
`define NONBLOCK_ASSIGN <=
 
//`define RANDOM_ACK_NEGATION
 
module wb_ram_b3(
wb_adr_i, wb_bte_i, wb_cti_i, wb_cyc_i, wb_dat_i, wb_sel_i,
wb_stb_i, wb_we_i,
 
wb_ack_o, wb_err_o, wb_rty_o, wb_dat_o,
 
wb_clk_i, wb_rst_i);
 
// Memory parameters
parameter dw = 32;
 
// 32MB memory by default
parameter aw = 25;
parameter mem_size = 8388608;
 
input [aw-1:0] wb_adr_i;
input [1:0] wb_bte_i;
input [2:0] wb_cti_i;
input wb_cyc_i;
input [dw-1:0] wb_dat_i;
input [3:0] wb_sel_i;
input wb_stb_i;
input wb_we_i;
output wb_ack_o;
output wb_err_o;
output wb_rty_o;
output [dw-1:0] wb_dat_o;
input wb_clk_i;
input wb_rst_i;
 
 
// synthesis attribute ram_style of mem is block
reg [dw-1:0] mem [ 0 : mem_size-1 ] /* verilator public */ /* synthesis ram_style = no_rw_check */;
//reg [aw-1:2] wb_adr_i_r;
reg [(aw-2)-1:0] adr;
wire [31:0] wr_data;
 
// Register to indicate if the cycle is a Wishbone B3-registered feedback
// type access
reg wb_b3_trans;
wire wb_b3_trans_start, wb_b3_trans_stop;
// Register to use for counting the addresses when doing burst accesses
reg [aw-1-2:0] burst_adr_counter;
reg [2:0] wb_cti_i_r;
reg [1:0] wb_bte_i_r;
wire using_burst_adr;
wire burst_access_wrong_wb_adr;
 
reg random_ack_negate;
// Logic to detect if there's a burst access going on
assign wb_b3_trans_start = ((wb_cti_i == 3'b001)|(wb_cti_i == 3'b010)) &
wb_stb_i & !wb_b3_trans;
assign wb_b3_trans_stop = (wb_cti_i == 3'b111) &
wb_stb_i & wb_b3_trans & wb_ack_o;
always @(posedge wb_clk_i)
if (wb_rst_i)
wb_b3_trans <= 0;
else if (wb_b3_trans_start)
wb_b3_trans <= 1;
else if (wb_b3_trans_stop)
wb_b3_trans <= 0;
 
// Burst address generation logic
always @(/*AUTOSENSE*/wb_ack_o or wb_b3_trans or wb_b3_trans_start
or wb_bte_i_r or wb_cti_i_r or wb_adr_i or wb_rst_i or adr)
if (wb_rst_i)
burst_adr_counter <= 0;
else if (wb_b3_trans_start)
burst_adr_counter <= wb_adr_i[aw-1:2];
else if ((wb_cti_i_r == 3'b010) & wb_ack_o & wb_b3_trans)
// Incrementing burst
begin
if (wb_bte_i_r == 2'b00) // Linear burst
burst_adr_counter <= adr + 1;
if (wb_bte_i_r == 2'b01) // 4-beat wrap burst
burst_adr_counter[1:0] <= adr[1:0] + 1;
if (wb_bte_i_r == 2'b10) // 8-beat wrap burst
burst_adr_counter[2:0] <= adr[2:0] + 1;
if (wb_bte_i_r == 2'b11) // 16-beat wrap burst
burst_adr_counter[3:0] <= adr[3:0] + 1;
end // if ((wb_cti_i_r == 3'b010) & wb_ack_o_r)
else if (!wb_ack_o & wb_b3_trans)
burst_adr_counter <= adr;
 
 
always @(posedge wb_clk_i)
wb_bte_i_r <= wb_bte_i;
 
// Register it locally
always @(posedge wb_clk_i)
wb_cti_i_r <= wb_cti_i;
 
assign using_burst_adr = wb_b3_trans;
assign burst_access_wrong_wb_adr = (using_burst_adr & (adr != wb_adr_i[aw-1:2]));
 
// Address registering logic
always@(posedge wb_clk_i)
if(wb_rst_i)
adr <= 0;
else if (using_burst_adr)
adr <= burst_adr_counter;
else if (wb_cyc_i & wb_stb_i)
adr <= wb_adr_i[aw-1:2];
parameter memory_file = "sram.vmem";
 
`ifdef verilator
task do_readmemh;
// verilator public
$readmemh(memory_file, mem);
endtask // do_readmemh
`else
initial
begin
$readmemh(memory_file, mem);
end
`endif // !`ifdef verilator
 
// Function to access RAM (for use by Verilator).
function [31:0] get_mem;
// verilator public
input [aw-1:0] addr;
get_mem = mem[addr];
endfunction // get_mem
 
// Function to write RAM (for use by Verilator).
function set_mem;
// verilator public
input [aw-1:0] addr;
input [dw-1:0] data;
mem[addr] = data;
endfunction // set_mem
 
 
assign wb_rty_o = 0;
 
// mux for data to ram, RMW on part sel != 4'hf
assign wr_data[31:24] = wb_sel_i[3] ? wb_dat_i[31:24] : wb_dat_o[31:24];
assign wr_data[23:16] = wb_sel_i[2] ? wb_dat_i[23:16] : wb_dat_o[23:16];
assign wr_data[15: 8] = wb_sel_i[1] ? wb_dat_i[15: 8] : wb_dat_o[15: 8];
assign wr_data[ 7: 0] = wb_sel_i[0] ? wb_dat_i[ 7: 0] : wb_dat_o[ 7: 0];
 
// Address logic
/*
always @(posedge wb_clk_i)
begin
if (wb_rst_i)
wb_adr_i_r <= 0;
else
if (wb_cyc_i & wb_stb_i)
wb_adr_i_r <= wb_adr_i[aw-1:2];
end
*/
wire ram_we;
assign ram_we = wb_we_i & wb_ack_o;
 
assign wb_dat_o = mem[adr];
// Write logic
always @ (posedge wb_clk_i)
begin
if (ram_we)
mem[adr] <= wr_data;
end
// Ack Logic
reg wb_ack_o_r;
 
assign wb_ack_o = wb_ack_o_r & wb_stb_i;
always @ (posedge wb_clk_i)
if (wb_rst_i)
begin
wb_ack_o_r <= 1'b0;
end
else if (wb_cyc_i) // We have bus
begin
if (wb_cti_i == 3'b111)
begin
// End of burst
if (wb_ack_o_r)
// ALWAYS de-assert ack after burst end
wb_ack_o_r <= 0;
else if (wb_stb_i & !random_ack_negate)
wb_ack_o_r <= 1;
else
wb_ack_o_r <= 0;
end
else if (wb_cti_i == 3'b000)
begin
// Classic cycle acks
if (wb_stb_i & !random_ack_negate)
begin
if (!wb_ack_o_r)
wb_ack_o_r <= 1;
else
wb_ack_o_r <= 0;
end
else
wb_ack_o_r <= 0;
end // if (wb_cti_i == 3'b000)
else if ((wb_cti_i == 3'b001) | (wb_cti_i == 3'b010))
begin
// Increment/constant address bursts
if (wb_stb_i & !random_ack_negate)
wb_ack_o_r <= 1;
else
wb_ack_o_r <= 0;
end
else if (wb_cti_i == 3'b111)
begin
// End of cycle
if (wb_stb_i & !random_ack_negate)
wb_ack_o_r <= 1;
else
wb_ack_o_r <= 0;
end
end // if (wb_cyc_i)
else
wb_ack_o_r <= 0;
assign wb_err_o = 1'b0;// wb_ack_o & (burst_access_wrong_wb_adr); // OR in other errors here
 
 
// Random ACK negation logic
`ifdef RANDOM_ACK_NEGATION
reg [31:0] lfsr;
always @(posedge wb_clk_i)
if (wb_rst_i)
lfsr <= 32'h273e2d4a;
else lfsr <= {lfsr[30:0], ~(lfsr[30]^lfsr[6]^lfsr[4]^lfsr[1]^lfsr[0])};
 
always @(posedge wb_clk_i)
random_ack_negate <= lfsr[26];
`else
always @(wb_rst_i)
random_ack_negate <= 0;
`endif
endmodule // wb_ram_b3_v2
 
/verilog/components/wb_switch_b3/wb_switch_b3.v
0,0 → 1,2633
// 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
 
/verilog/orpsoc_top.v
241,8 → 241,10
 
wire eth_clk;
wire [1:1] eth_int;
 
wb_conbus_top
/*
// Crossbar arbiter.
wb_conbus_top
#(.s0_addr_w(4), .s0_addr(4'h0), // MC
.s1_addr_w(4), .s1_addr(4'hf), // ROM
.s27_addr_w(8),
498,7 → 500,7
// Inputs
.clk_i (wb_clk),
.rst_i (wb_rst));
 
// Tie all cycle type identifiers (CTI) and burst type extension (BTE) signals low
// Not supported by this arbiter.
assign wbs_eth1_cfg_bte_i = 0;
517,7 → 519,172
assign wbs_ds2_cti_i = 0;
assign wbs_ds3_bte_i = 0;
assign wbs_ds3_cti_i = 0;
*/
 
// Switch arbiter
wb_switch_b3
#(
.slave0_sel_width(4),
.slave0_sel_addr(4'h0), // Main memory
.slave1_sel_width(4),
.slave1_sel_addr(4'hf), // ROM
.slave2_sel_width(8),
.slave2_sel_addr(8'h92), // Ethernet Slave
.slave3_sel_width(8),
.slave3_sel_addr(8'hb0), // SPI
.slave4_sel_width(8),
.slave4_sel_addr(8'h90) // UART
)
wb_switch0
(
// Master 0
// Inputs
.wbm0_dat_o (wbm_or12_i_dat_o),
.wbm0_adr_o (wbm_or12_i_adr_o),
.wbm0_sel_o (wbm_or12_i_sel_o),
.wbm0_we_o (wbm_or12_i_we_o),
.wbm0_cyc_o (wbm_or12_i_cyc_o),
.wbm0_stb_o (wbm_or12_i_stb_o),
.wbm0_cti_o (wbm_or12_i_cti_o),
.wbm0_bte_o (wbm_or12_i_bte_o),
// Outputs
.wbm0_dat_i (wbm_or12_i_dat_i),
.wbm0_ack_i (wbm_or12_i_ack_i),
.wbm0_err_i (wbm_or12_i_err_i),
.wbm0_rty_i (wbm_or12_i_rty_i),
// Master 1
// Inputs
.wbm1_dat_o (wbm_or12_debug_dat_o),
.wbm1_adr_o (wbm_or12_debug_adr_o),
.wbm1_sel_o (wbm_or12_debug_sel_o),
.wbm1_we_o (wbm_or12_debug_we_o),
.wbm1_cyc_o (wbm_or12_debug_cyc_o),
.wbm1_stb_o (wbm_or12_debug_stb_o),
.wbm1_cti_o (wbm_or12_debug_cti_o),
.wbm1_bte_o (wbm_or12_debug_bte_o),
// Outputs
.wbm1_dat_i (wbm_or12_debug_dat_i),
.wbm1_ack_i (wbm_or12_debug_ack_i),
.wbm1_err_i (wbm_or12_debug_err_i),
.wbm1_rty_i (wbm_or12_debug_rty_i),
 
// Master 2
// Inputs
.wbm2_dat_o (wbm_or12_d_dat_o),
.wbm2_adr_o (wbm_or12_d_adr_o),
.wbm2_sel_o (wbm_or12_d_sel_o),
.wbm2_we_o (wbm_or12_d_we_o),
.wbm2_cyc_o (wbm_or12_d_cyc_o),
.wbm2_stb_o (wbm_or12_d_stb_o),
.wbm2_cti_o (wbm_or12_d_cti_o),
.wbm2_bte_o (wbm_or12_d_bte_o),
// Outputs
.wbm2_dat_i (wbm_or12_d_dat_i),
.wbm2_ack_i (wbm_or12_d_ack_i),
.wbm2_err_i (wbm_or12_d_err_i),
.wbm2_rty_i (wbm_or12_d_rty_i),
 
// Master 3
// Inputs
.wbm3_dat_o (wbm_eth1_dat_o),
.wbm3_adr_o (wbm_eth1_adr_o),
.wbm3_sel_o (wbm_eth1_sel_o),
.wbm3_we_o (wbm_eth1_we_o),
.wbm3_cyc_o (wbm_eth1_cyc_o),
.wbm3_stb_o (wbm_eth1_stb_o),
.wbm3_cti_o (wbm_eth1_cti_o),
.wbm3_bte_o (wbm_eth1_bte_o),
// Outputs
.wbm3_dat_i (wbm_eth1_dat_i),
.wbm3_ack_i (wbm_eth1_ack_i),
.wbm3_err_i (wbm_eth1_err_i),
.wbm3_rty_i (wbm_eth1_rty_i),
 
// Slave 0
// Inputs
.wbs0_dat_o (wbs_mc_m_dat_o),
.wbs0_ack_o (wbs_mc_m_ack_o),
.wbs0_err_o (wbs_mc_m_err_o),
.wbs0_rty_o (wbs_mc_m_rty_o),
// Outputs
.wbs0_dat_i (wbs_mc_m_dat_i),
.wbs0_adr_i (wbs_mc_m_adr_i),
.wbs0_sel_i (wbs_mc_m_sel_i),
.wbs0_we_i (wbs_mc_m_we_i),
.wbs0_cyc_i (wbs_mc_m_cyc_i),
.wbs0_stb_i (wbs_mc_m_stb_i),
.wbs0_cti_i (wbs_mc_m_cti_i),
.wbs0_bte_i (wbs_mc_m_bte_i),
 
// No other slaves have burst capability, dont forward CTI or BTE
// Slave 1
// Inputs
.wbs1_dat_o (wbs_rom_dat_o),
.wbs1_ack_o (wbs_rom_ack_o),
.wbs1_err_o (wbs_rom_err_o),
.wbs1_rty_o (wbs_rom_rty_o),
// Outputs
.wbs1_dat_i (wbs_rom_dat_i),
.wbs1_adr_i (wbs_rom_adr_i),
.wbs1_sel_i (wbs_rom_sel_i),
.wbs1_we_i (wbs_rom_we_i),
.wbs1_cyc_i (wbs_rom_cyc_i),
.wbs1_stb_i (wbs_rom_stb_i),
//.wbs1_cab_i (),
 
// Slave 2
// Inputs
.wbs2_dat_o (wbs_eth1_cfg_dat_o),
.wbs2_ack_o (wbs_eth1_cfg_ack_o),
.wbs2_err_o (wbs_eth1_cfg_err_o),
.wbs2_rty_o (wbs_eth1_cfg_rty_o),
// Outputs
.wbs2_dat_i (wbs_eth1_cfg_dat_i),
.wbs2_adr_i (wbs_eth1_cfg_adr_i),
.wbs2_sel_i (wbs_eth1_cfg_sel_i),
.wbs2_we_i (wbs_eth1_cfg_we_i),
.wbs2_cyc_i (wbs_eth1_cfg_cyc_i),
.wbs2_stb_i (wbs_eth1_cfg_stb_i),
//.wbs2_cab_i (),
 
// Slave 3
// Inputs
.wbs3_dat_o (wbs_spi_flash_dat_o),
.wbs3_ack_o (wbs_spi_flash_ack_o),
.wbs3_err_o (wbs_spi_flash_err_o),
.wbs3_rty_o (wbs_spi_flash_rty_o),
// Outputs
.wbs3_dat_i (wbs_spi_flash_dat_i),
.wbs3_adr_i (wbs_spi_flash_adr_i),
.wbs3_sel_i (wbs_spi_flash_sel_i),
.wbs3_we_i (wbs_spi_flash_we_i),
.wbs3_cyc_i (wbs_spi_flash_cyc_i),
.wbs3_stb_i (wbs_spi_flash_stb_i),
//.wbs3_cab_i (),
 
// Slave 4
// Inputs
.wbs4_dat_o (wbs_uart0_dat_o),
.wbs4_ack_o (wbs_uart0_ack_o),
.wbs4_err_o (wbs_uart0_err_o),
.wbs4_rty_o (wbs_uart0_rty_o),
// Outputs
.wbs4_dat_i (wbs_uart0_dat_i),
.wbs4_adr_i (wbs_uart0_adr_i),
.wbs4_sel_i (wbs_uart0_sel_i),
.wbs4_we_i (wbs_uart0_we_i),
.wbs4_cyc_i (wbs_uart0_cyc_i),
.wbs4_stb_i (wbs_uart0_stb_i),
//.wbs4_cab_i (),
// Inputs
.wb_clk (wb_clk),
.wb_rst (wb_rst));
 
// Programmable interrupt controller lines (aka. IRQ lines)
assign pic_ints[30] = 1'b0;
assign pic_ints[29] = 1'b0;
677,12 → 844,13
1'b0;
`else // !`ifdef USE_SDRAM
 
 
parameter ram_wb_dat_width = 32;
parameter ram_wb_adr_width = 25;
//parameter ram_wb_mem_size = 2097152; // 8MB
parameter ram_wb_mem_size = 8388608; // 32MB -- for linux test
 
/*
ram_wb
#
(
704,7 → 872,33
.clk_i(wb_clk),
.rst_i(wb_rst)
);
*/
 
// New Wishbone B3 RAM
wb_ram_b3
#
(
.dw(ram_wb_dat_width),
.aw(ram_wb_adr_width),
.mem_size(ram_wb_mem_size)
)
ram_wb0
(
.wb_dat_i(wbs_mc_m_dat_i),
.wb_dat_o(wbs_mc_m_dat_o),
.wb_sel_i(wbs_mc_m_sel_i),
.wb_adr_i(wbs_mc_m_adr_i[ram_wb_adr_width-1:0]),
.wb_we_i (wbs_mc_m_we_i),
.wb_bte_i(wbs_mc_m_bte_i),
.wb_cti_i(wbs_mc_m_cti_i),
.wb_stb_i(wbs_mc_m_stb_i),
.wb_cyc_i(wbs_mc_m_cyc_i),
.wb_ack_o(wbs_mc_m_ack_o),
.wb_clk_i(wb_clk),
.wb_rst_i(wb_rst)
);
 
`endif // !`ifdef USE_SDRAM
 
assign wbs_mc_m_err_o = 1'b0;

powered by: WebSVN 2.1.0

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