AbstractA method is presented for the formal specification and decomposition of asynchronously communicating components. The method is demonstrated by the design of some arbiters. An arbiter is a hardware primitive that realizes the mutual exclusive access of processes to their critical sections. It is shown how large arbiters can be decomposed into small ones, and how the communication behaviour of arbiters can be specified concisely and conveniently in a simple program notation. Furthermore, it is shown that the syntax of a program may guide the designer in the verification, and even derivation, of possible decompositions in a calculational style