HOME       UP       PREV       NEXT (Basic bus: Multiple Initiators.)  

Arbiter

(Internal details not lectured).

When multiple clients wish to share a resource, an arbiter is required. An arbiter decides which requester should be serviced.

Arbiter circuits may be synchronous or asynchronous.

Typical shared resources are busses, memories and multipliers.

There are two main arbitration disciplines:

Another major policy variation is preemptive or not: can a granted resource be deassigned while the request is still asserted.

Complex disciplines involve dynamic priorites based on use history that avoid starvation or might implement »`best matchings' between a number of requesters and a number of resources.

//RTL implementation of synchronous, static priority arbiter with preemption.
module arbiter(input clk,
               input reset,
               input [2:0] reqs,
               output reg [2:0] grants);

  always @(posedge clk) if (reset) grants <= 0;
      else begin
         grants[0] <= reqs[0]; // Highest static priority
         grants[1] <= reqs[1] && !(reqs[0]);
         grants[2] <= reqs[2] && !(reqs[0] || reqs[1]);
      end

Exercise: Give the RTL code for a non-preemptive version of the 3-input arbiter.

Exercise: Give the RTL code for a round-robin, non-preemptive version of the 3-input arbiter.


37: (C) 2008-17, DJ Greaves, University of Cambridge, Computer Laboratory.