W i r e d  project
Performance by construction
Funded by the SRC (task ID: 1402.001), as an Intel-custom project
Continuous down-scaling of sizes in VLSI circuits causes low-level electrical phenomena to become more and more prominent performance stoppers in modern chip technologies. This forces designers to work at a lower level of abstraction than desired in order to gain control over these effects. The most dominating contributors to low-level performance problems are the routing wires, which are used to connect the gates (computational units) on the chip. Hardware description languages (HDLs) -- which naturally strive for generality and reusablility -- tend to focus on higher levels of abstraction. This means that the low-level effects are not visible and thus very hard to control. To date, we are not aware of any HDL that allows control over the effects of routing wires in a really useful way, so when high-performance is crucial, designers are left to interfacing directly with CAD tools for physical chip design.
This project focuses on using techniques from functional programming to raise the abstraction level of semi-custum VLSI designs (standard cell based designs where the designer wants to control detatils such as placement and some aspects of the routing). We have developed a domain-specific language (called "Wired"), embedded in the functional programming language Haskell, which enables a more flexible design at this level.
The ideas in Wired seem general enough to be used at higher levels of abstraction as well. In the future, we would like to explore the possibility of using Wired for exploration at the floorplan level, particularly since this is the level where the non-ideal properties of routing wires become highly visible.
The Wired library
Wired is a Haskell library for wire-aware hardware design. It can be seen as an extension to Lava that targets (not exclusively) semi-custom VLSI design. A particular aim of Wired is to give the designer more control over on-chip wires' effects on performance.
The easiest way to install Wired is to first install the Haskell Platform. After that, just give the command:
The Wired library can also be obtained using darcs:
Wired makes use of quite a few language extensions. The appropriate command line options for turning on these extensions are found in the
darcs get http://www.cse.chalmers.se/~emax/darcs/Wired/
.ghci file in the package. The most convenient way to run an example is to copy the
.ghci file to the same directory as the example, and simply start GHCi from there without any options.
The package text contains some more information.