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 3. GENERATING PARAMETERISED LIBRARIES WITH LAYOUT 57<br />

processor also resolves overloading using an algorithm based around satisfiability matrix<br />

predicates [64]. The standard output <strong>of</strong> the type processing module is a monomorphic,<br />

annotated AST <strong>with</strong> multiple copies <strong>of</strong> polymorphic blocks instantiated for each utilised<br />

type.<br />

This output is suitable for the standard later stages <strong>of</strong> the compiler, however for placed<br />

Quartz compilation we need to insert a new layout processing module between the type<br />

processor and direction processor. This requires significant changes to the type processor to<br />

split the instantiation stage in two, one part that resolves overloading and the other that<br />

removes all polymorphism.<br />

Since different overloaded instances <strong>of</strong> Quartz blocks can have different size expressions it<br />

is necessary to resolve overloading prior to layout generation or layout verification. This is<br />

achieved by the new “overloading resolution” stage <strong>with</strong>in the type processor which replaces<br />

references to overloaded blocks <strong>with</strong> references to specific instances, instantiating new copies<br />

<strong>of</strong> blocks which use different overloaded instances on different occasions. This non-overloaded<br />

but still polymorphic Quartz AST is then passed to the layout processing module.<br />

After layout processing, the type processor completes the process <strong>of</strong> generating monomorphic<br />

Quartz by eliminating all polymorphic types.<br />

3.7.2 <strong>Layout</strong> Processing Module<br />

The layout processing module, despite its name, does not take full responsibility for compiling<br />

layout information in Quartz descriptions. It is responsible for initial processing <strong>of</strong> layout<br />

information and preparation for later stages.<br />

If the compiler is invoked on a design and is not requested to generate placed output the layout<br />

processing module strips all size attributes and placement information from blocks. The<br />

modified circuit design is then passed to the later compilation stages. If layout verification<br />

or placed output mode is requested then the module checks that there are no unplaced<br />

block instantiations <strong>with</strong>in the circuit (unless they are the only instantiation <strong>with</strong>in a block,<br />

in which case they are automatically placed at (0, 0)) and then the size inference stage is<br />

invoked.

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

Saved successfully!

Ooh no, something went wrong!