For formally reasoning about, transforming, and verifying hardware designs it is necessary to have a formal framework with a sound semantital basis. We present a language, called
STREAM, with these purposes. With it, one can describe stream processing agents for modelling all kinds of concurrent systems. Two styles of composition of agents are defined: an applicative style, in which streams are named, and a functional style, with which also a topology can be defined.
The language is used for the description of digital circuits at different levels of detail. First a non-hardware-specific system level is studied. Then the register-transfer and gate level are characterized and modelled with STREAM. It is shown that apart from being able to describe loosely coupled systems in general, also synchronous and even asynchronous systems can easily be modelled.