EDIS: Guide | FAQ | New | Search | Bibliography | Index | Feedback




A (blocking) Mixer is a handshake component with three 2-phase handshake ports, two passive and one active. The handshakes on the passive ports are `multiplexed' over the active port. That is, whenever the environment requests on a passive port and the Mixer is not `busy', the Mixer requests on the active port (becoming `busy'), and when the active port receives an acknowledge, the passive port that received the original request is also acknowledged (becoming `idle').

In contrast to a Non-Receptive Mixer, the environment of a Mixer need not guarantee mutual exclusion of the passive requests. A request on a passive port while the Mixer is `busy' (processing a request on the other passive port) is not lost but is handled when the Mixer becomes `idle' again.

When a Mixer receives requests on both passive ports, it will process exactly one of them (and delay the other). The specification leaves the choice open. Often there is a fairness requirement on this choice: if a choice situation arises `infinitely often' then both outputs are chosen `infinitely often'.


Schematic diagram for a Mixer:


XDI state graph for a Mixer:


Specification in XDI model.


Specification in Verdect:

define MIXER =
  |[ a0, a1, a, b0, b1 ::
     pref *[ ar?; a0; a1; aa! ]
  || pref *[ br?; b0; b1; ba! ]
  || pref *[ (a0 | b0); a ]
  || pref *[ a; cr!; ca?; (a1 | b1) ]
Also available through this link

DI Algebra

Specification in DI Algebra:

NAME = "Mixer"
I = { r0, r1, a }
O = { a0, a1, r }

MX = [ r0? -> r!; M0 
     , r1? -> r!; M1
M0 = [ r1? -> M2
     , a?  -> a0!; MX
M1 = [ r0? -> M2
     , a?  -> a1!; MX
M2 = a?; [ a0! -> r!; M1, a1! -> r!; M0 ]
Also available through this link


XDI Report.

The roles of ports a and b can be interchanged:
MIX(a, b; c) = MIX(b, a; c)

A Mixer is not output deterministic, since there is output disabling in states 9 and 10 (not in 11!). The output nondeterminism is dynamic.


DI Decompositions

  1. A Mixer can be implemented with an RGDA Arbiter and a Non-Receptive Mixer (not equ):


Using Boolean Gates

No information available

Using Transistors

No information available


The Mixer is said to be blocking because a request on a passive port is only acknowledged after a handshake has been completed on the active port. There is also a Nonblocking Mixer.

The Mixer can be generalized to a k-mixer, which multiplexes k passive ports onto one active port. A Mixer is a 2-Mixer.


Exercise: Find a DI decomposition of the Mixer that is equivalent to it and uses only one arbitration element.


Last modified at Fri Nov 20 10:11:40 1998
Encyclopaedia of Delay-Insensitive Systems
Copyright © 1995-1998 Tom Verhoeff / Tom.Verhoeff@acm.org