In this paper, we present the fundamental ideas and techniques for an approach to silicon compilation that is based on a data-flow paradigm. Data-flow graphs are discussed, and their relationship to the behavior of digital systems is established. The syntax and semantics of a particular data-flow language are then presented. Finally, the silicon compilation process is discussed, with emphasis on the relationship between a data-flow specification and its logic-level realization. Both synchronous and self-timed implementations are considered.