Embedded Hardware Description Languages
General functional languages, like Haskell, have been used as host languages for the embedding of modern Hardware Description Languages. This field has been widely explored, and improvements where made for the description of circuit generators at higher levels of abstraction, while maintaining the possibility to manipulate or reason about the generated circuits. Nevertheless, a fair amount of uncertainty is still present on how to describe, or infer, non-functional aspects of hardware systems, such as component placement and power consumption, while preserving the abstraction level that has already been established. More recent research has successfully shown how Meta-Programming mechanisms can be included in the functional programming paradigm. The Meta-Functional Programming Language reFLect is a modern example of a strongly-typed functional language with built-in meta-programming features. The meta-functional programming capabilities of reFLect, allow the development of circuit description that are able to manipulate and reason about the circuit generators themselves, thus introducing, or inferring, additional information necessary for the non-functional properties of the circuits being generated.
Shade is a hardware description language embedded within the meta-functional language reFLect. It uses code quotations and antiquotations to achieve a deep embedding of the described circuits, providing the possibility to describe circuit generators and access the generated circuits as object programs, whilst concealing the meta-programming constructs from the user. Through the use of meta-language constructs Shade offers additional features to enable circuit descriptions to be enhanced with hierarchical block markings of sub-circuits, and optional placement annotations. Furthermore, code quotations are used at a higher level of abstraction, allowing Shade to access the circuit generators themselves, thus providing the possibility to reason about the generators and apply transformations. Shade uses this approach to provide the automatic extraction of verification models reducing user intervention, and consequently reducing user errors.