diff --git a/servant/servant.v b/servant/servant.v index ece4ce7..31f33f3 100644 --- a/servant/servant.v +++ b/servant/servant.v @@ -46,7 +46,6 @@ module servant servant_arbiter servant_arbiter ( - .i_ibus_active (wb_cpu_ibus_cyc), .i_wb_cpu_dbus_adr (wb_cpu_dbus_adr), .i_wb_cpu_dbus_dat (wb_cpu_dbus_dat), .i_wb_cpu_dbus_sel (wb_cpu_dbus_sel), diff --git a/servant/servant_arbiter.v b/servant/servant_arbiter.v index d8e902d..00b39c8 100644 --- a/servant/servant_arbiter.v +++ b/servant/servant_arbiter.v @@ -1,6 +1,8 @@ +/* Arbitrates between dbus and ibus accesses. + * Relies on the fact that not both masters are active at the same time + */ module servant_arbiter ( - input wire i_ibus_active, input wire [31:0] i_wb_cpu_dbus_adr, input wire [31:0] i_wb_cpu_dbus_dat, input wire [3:0] i_wb_cpu_dbus_sel, @@ -23,15 +25,15 @@ module servant_arbiter input wire i_wb_cpu_ack); assign o_wb_cpu_dbus_rdt = i_wb_cpu_rdt; - assign o_wb_cpu_dbus_ack = i_wb_cpu_ack & !i_ibus_active; + assign o_wb_cpu_dbus_ack = i_wb_cpu_ack & !i_wb_cpu_ibus_cyc; assign o_wb_cpu_ibus_rdt = i_wb_cpu_rdt; - assign o_wb_cpu_ibus_ack = i_wb_cpu_ack & i_ibus_active; + assign o_wb_cpu_ibus_ack = i_wb_cpu_ack & i_wb_cpu_ibus_cyc; - assign o_wb_cpu_adr = i_ibus_active ? i_wb_cpu_ibus_adr : i_wb_cpu_dbus_adr; + assign o_wb_cpu_adr = i_wb_cpu_ibus_cyc ? i_wb_cpu_ibus_adr : i_wb_cpu_dbus_adr; assign o_wb_cpu_dat = i_wb_cpu_dbus_dat; assign o_wb_cpu_sel = i_wb_cpu_dbus_sel; - assign o_wb_cpu_we = i_wb_cpu_dbus_we & !i_ibus_active; - assign o_wb_cpu_cyc = i_ibus_active ? i_wb_cpu_ibus_cyc : i_wb_cpu_dbus_cyc; + assign o_wb_cpu_we = i_wb_cpu_dbus_we & !i_wb_cpu_ibus_cyc; + assign o_wb_cpu_cyc = i_wb_cpu_ibus_cyc | i_wb_cpu_dbus_cyc; endmodule