wb оченть простая шина если не юзать сразу всякие пакетные и конвеерные режимы
к примеру порт FE на wb может выглядеть так (IO шину я подразумеваю 8бит с топологией shared bus + mux и декодером в самих устройствах, арбитр переключает шину к ответившему устройству)
Код:
module PortFE(
// wb side
input wire clk_i,
input wire res_i,
input wire[15:0] adr_i,
input wire[7:0] dat_i,
output wire[7:0] dat_o,
input wire stb_i,
input wire cyc_i,
input wire we_i,
output reg ack_o,
// hid
output reg[2:0] border,
output reg speaker,
input wire mic,
output reg tape,
// kbmatrix
output reg [7:0] kb_row,
input wire[4:0] kb_col
);
localparam
H = 1'b1,
L = 1'b0;
assign dat_o = { L, mic, L, kb_col };
always @ (posedge clk_i)
if (adr_i[0] == L && stb_i && cyc_i)
begin
ack_o <= H;
kb_row <= adr_i[15:8];
if (we_i)
{tape, speaker, border} <= dat_i[6:0];
end
else
ack_o <= L;
endmodule