1 Introduction
Devil is a domain-specific language for specifying the functional
interface of a device. Concretely, a device can be described by
three layers of abstractions: ports, registers, and
device variables. The entry point of a Devil specification is
the declaration of a device, parameterized by ports or range of ports,
which abstract physical addresses. Ports then allow device registers to
be declared; these define the granularity of interaction with the
device. Finally, device variables are defined from registers, forming
the functional interface to the device.
Only device variables are visible from outside a Devil description;
ports and registers are hidden since these abstractions are not part
of the functional interface of the device. In fact, the Devil compiler
(named Taz) generates for each variable two C procedures which permit
to write or read the variable by emitting the proper I/O operations.