Researchers at Bell Labs have recently developed a silicon compiler, named Plex, that automatically generates VLSI layouts of high performance and area efficient microprocessors. Plex takes as input a specification of the function to be executed and generates a complete mask-level layout of a customized microprocessor to execute that function. The Plex microprocessor interacts with the external world, via input and output wires, and interrupts. The dedicated function performed by a Plex microprocessor typically involves real-time handling of inputs and interrupts and the real-time generation of output signals. The objective of Plex is to provide high-level logic building blocks on a chip. Using Plex to generate designs of customized chips is attractive because it cuts the initial design time from months to hours; moreover, the designer need not be cognizant of VLSI design techniques and other details. Currently, flex specifications are programs written in an Assembly-like language. We have designed a higher level specification language, called Flex, for describing Plex-like microprocessors. Although the design of Flex has been motivated by Plex, Flex is not specific to Plex and it can be used with other silicon compilers. Flex has been designed for the silicon environment in which input- output is performed on wires and chip area severely limits program complexity. Flex is unique in that it provides very high-level facilities for dealing with low-level inputs. It provides facilities for describing input-output wires, processing based on the state of these wires, and concurrent processing. En this paper, we discuss the motivation for the advantages of a high- level language for specifying customized microprocessors, give an informal description of Flex, and illustrate its use with examples. We also discuss some Flex design decisions and examine some implementation issues. [ABSTRACT FROM AUTHOR]