blob: 1edaf7c92dc7b220af04ca5e94d3a18da1514261 [file] [log] [blame]
// SPDX-FileCopyrightText: © 2022 semify <office@semify-eda.com>
// SPDX-License-Identifier: Apache-2.0
`default_nettype none
module wb_mux #(
parameter MATCH_ADDR_0 = 32'h30000000,
parameter MATCH_MASK_0 = 32'hFFFFF000,
parameter MATCH_ADDR_1 = 32'h30001000,
parameter MATCH_MASK_1 = 32'hFFFFF000
)(
`ifdef USE_POWER_PINS
inout vccd1, // User area 1 1.8V supply
inout vssd1, // User area 1 digital ground
`endif
// WB Master
input [31:0] io_wbs_adr,
input [31:0] io_wbs_datwr,
output logic [31:0] io_wbs_datrd,
input io_wbs_we,
input [ 3:0] io_wbs_sel,
input io_wbs_stb,
output logic io_wbs_ack,
input io_wbs_cyc,
// WB Peripheral 0
output [31:0] io_wbs_adr_0,
output [31:0] io_wbs_datwr_0,
input [31:0] io_wbs_datrd_0,
output io_wbs_we_0,
output [ 3:0] io_wbs_sel_0,
output io_wbs_stb_0,
input io_wbs_ack_0,
output io_wbs_cyc_0,
// WB Peripheral 1
output [31:0] io_wbs_adr_1,
output [31:0] io_wbs_datwr_1,
input [31:0] io_wbs_datrd_1,
output io_wbs_we_1,
output [ 3:0] io_wbs_sel_1,
output io_wbs_stb_1,
input io_wbs_ack_1,
output io_wbs_cyc_1
);
logic match_0;
logic match_1;
assign match_0 = (io_wbs_adr & MATCH_MASK_0) == MATCH_ADDR_0;
assign match_1 = (io_wbs_adr & MATCH_MASK_1) == MATCH_ADDR_1;
// WB Peripheral 0
assign io_wbs_adr_0 = io_wbs_adr;
assign io_wbs_datwr_0 = io_wbs_datwr;
assign io_wbs_we_0 = io_wbs_we;
assign io_wbs_sel_0 = io_wbs_sel;
assign io_wbs_stb_0 = io_wbs_stb & match_0;
assign io_wbs_cyc_0 = io_wbs_cyc & match_0;
// WB Peripheral 1
assign io_wbs_adr_1 = io_wbs_adr;
assign io_wbs_datwr_1 = io_wbs_datwr;
assign io_wbs_we_1 = io_wbs_we;
assign io_wbs_sel_1 = io_wbs_sel;
assign io_wbs_stb_1 = io_wbs_stb & match_1;
assign io_wbs_cyc_1 = io_wbs_cyc & match_1;
always_comb begin
io_wbs_datrd = '0;
io_wbs_ack = '0;
if (match_0) begin
io_wbs_datrd = io_wbs_datrd_0;
io_wbs_ack = io_wbs_ack_0;
end
if (match_1) begin
io_wbs_datrd = io_wbs_datrd_1;
io_wbs_ack = io_wbs_ack_1;
end
end
endmodule
`default_nettype wire