24.04.2013 Views

Verification of Parameterised FPGA Circuit Descriptions with Layout ...

Verification of Parameterised FPGA Circuit Descriptions with Layout ...

Verification of Parameterised FPGA Circuit Descriptions with Layout ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

CHAPTER 2. BACKGROUND AND RELATED WORK 16<br />

The Quartz framework is also intended as a platform for experimenting <strong>with</strong> language and<br />

CAD algorithm design. The relative simplicity <strong>of</strong> the language and the modular design <strong>of</strong><br />

the compiler simplifies experimentation <strong>with</strong> new language constructs and processing stages.<br />

A workflow exists to take Quartz designs from an abstract specification through to real<br />

hardware using a compiler which transforms Quartz into Pebble then into VHDL.<br />

Quartz higher-order combinators allow circuits to be described quickly and concisely by<br />

having libraries <strong>of</strong> common circuit structures available such as rows and columns as well as<br />

more complex structures such as trees. Quartz designs can also be parameterised by integer or<br />

boolean input variables and the combination <strong>of</strong> these features leads to an expressive language<br />

which puts the power <strong>of</strong> the Ruby calculus <strong>with</strong>in a practical VHDL-inspired framework.<br />

2.3.1 Type System and Overloading<br />

Quartz has three basic signal types for wires, integers and booleans. Integers and booleans<br />

are used for parameterisation to control the circuit description while wires are a primitive<br />

type which are not evaluated by the compiler during elaboration. Assignment to wires is<br />

overloaded allowing both boolean and integer values to be statically assigned to wires as<br />

well as wires being connected together. Although an integer assignment to a wire clearly<br />

has no meaning in terms <strong>of</strong> pure hardware it can be very useful for simulating word-level<br />

descriptions <strong>of</strong> a design where a wire type signal can represent a data word.<br />

The language supports both tuples and vectors <strong>of</strong> signals. While tuple size is fixed by the<br />

designer at coding-time the length <strong>of</strong> a vector can be parameterised. Blocks also have a block<br />

type and can be passed as parameters to other blocks. Any valid polymorphic operation can<br />

be carried out on blocks, for example it is acceptable to build a vector <strong>of</strong> blocks.<br />

Quartz uses implicit typing and infers most types using the Hindley/Milner type system<br />

[14, 27, 53], however designers are required to enter type signatures for each block entity.<br />

This requirement contributes to the documentation <strong>of</strong> the code and allows clear and localised<br />

feedback on type errors. Combined <strong>with</strong> the use <strong>of</strong> tuples rather than lists for fixed-arity<br />

groups <strong>of</strong> signals, this substantially accelerates design development by eliminating time spent<br />

chasing confusing type errors.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!