Bus top-level wiring
module bus_top (
input logic clk, rst,
input bus_req_t cpu_req,
output bus_resp_t cpu_resp
);
bus_resp_t uart_resp, timer_resp, gpio_resp, dmem_resp;
logic sel_uart, sel_timer, sel_gpio, sel_dmem;
bus_decoder dec (.addr(cpu_req.addr),
.sel_uart(sel_uart), .sel_timer(sel_timer),
.sel_gpio(sel_gpio), .sel_dmem(sel_dmem));
uart_periph uart (.clk(clk), .rst(rst), .req(cpu_req),
.en(sel_uart), .resp(uart_resp));
timer_periph timer (.clk(clk), .rst(rst), .req(cpu_req),
.en(sel_timer), .resp(timer_resp));
gpio_periph gpio (.clk(clk), .rst(rst), .req(cpu_req),
.en(sel_gpio), .resp(gpio_resp));
dmem_periph dmem (.clk(clk), .rst(rst), .req(cpu_req),
.en(sel_dmem), .resp(dmem_resp));
always_comb begin
cpu_resp = dmem_resp;
if (sel_uart) cpu_resp = uart_resp;
if (sel_timer) cpu_resp = timer_resp;
if (sel_gpio) cpu_resp = gpio_resp;
end
endmodule