Contents

Home

About...

Major Upgrades
The LEB Architecture
Placement
Routing
Support Tools
Generating LEB Netlists
Results
Placement
Routing
References
References
Appendix
Placement Pictures
Architecture Generation Pictures

Generating LEB Netlists

In order to verify that our upgrades to VPR were correct, we needed to generate a set of benchmark circuits which contained LEBs. One elegant solution to this was to convert a random sample of CLBs to LEBs in existing VPR netlists. Assuming LEBs represent large blocks such as RAMs, this conversion method was reasonable since combinational logic can be implemented within RAMs. Assuming that the current CLB does not contain any registers, CLBs can be packed into RAMs or, in our case, LEBs.

General Method

CLBs are chosen at random and are either joined in pairs to form a large LEB or single CLBs are directly converted a LEB. After a percentage of CLBs are converted into LEBs, where the percentage is user defined, the conversion ends.

Implementation Details

We modified t-vpack [Betz1997] to generate our LEB netlist. t-vpack is part of the University of Toronto FPGA Place and Route CAD suite that is responsible for converting a LUT-based technology mapped netlist into CLBs for placement on an FPGA. In order to generate LEBs from CLBs, we added a post-processing step after clustering in t-vpack. This post-processing step randomly selects a percentage of clusters to be converted into LEBs. Clusters could either be joined in pairs to form an LEB or be directly converted into an LEB. Once the conversion is completed, the final converted netlist is printed out to a ".net" file which is read in by VPR.

The ".net" file has basic syntax for describing blocks as follows:

<type> <identifier>
pinlist: < <pin_id|open> ... >
[subblock:] < <output_pin> <in_id> ... <out_id> <clk_id> >

The <type> field specifies the type of the block and can be either a .clb, .input, .output, or .leb. The original t-vpack did not support the .leb type field. Following the <type> field is a identifier for the block. After the identifier follows the pinlist: which lists the input, output, and global pins connected to the block. The order of the pin names is important where input pins precede the output pins and global pins appear at the end of the pinlist. The subblock: field is only used for .clb block types since the subblocks within the clusters need to be specified. The following is an example .clb block definition containing two sublocks that output to outpin1 and output2.

.clb test_clb
pinlist: inpin1 inpin2 open open outpin1 outpin2 clk
subblock: [outpin1] 0 1    4 clk
subblock: [outpin2] 1 open 5 open

When directly converting a .clb into a .leb, the subblock: fields are removed and the type field is converted from .clb to .leb. The following is an example of converting clb_a into leb_simp.

.clb clb_a
pinlist: inpin1 inpin2 open open outpin1 outpin3 clk1
subblock: [outpin1] 0 1    4 clk
subblock: [outpin3] 1 open 5 open

.leb leb_simp
pinlist: inpin1 inpin2 open open outpin1 outpin3 clk

When converting a clb pair into a single LEB, the same steps as the singular conversion are followed; however, the clb pins of the clb pair are combined where the clb inputs are placed at the front of the LEB pinlist, followed by the clb outputs, and ending with the clock pins. Thus, the leb with have twice as many pins as a single clb. The following shows an example of converting clb_a and clb_b into a single leb.

.clb clb_a
pinlist: inpin1 inpin2 open open outpin1 outpin3 clk1
subblock: [outpin1] 0 1    4 clk
subblock: [outpin3] 1 open 5 open
.clb clb_b
pinlist: inpin1 inpin5 inpin6 open outpin3 outpin2 open
subblock: [outpin3] 0 1  4 clk
subblock: [outpin2] 1 3  5 open

.leb leb_join
pinlist: inpin1 inpin2 open open inpin1 inpin5 inpin6 open \
         outpin1 outpin3 outpin3 outpin2 clk1 open

Program Usage

Please contact Andrew Ling if you wish to have a copy of the LEB generator. The program accepts all of the original t-vpack flags and runs as a basic clusterer if no LEB specific flags are used. The following table lists the LEB specific flags and how to use them. The Default description describes the behaviour of t-vpack when the associated flag is omitted.

Flag

Description

-create_lebs <float>

Accepts a float with values 0.0 to 100.0.  The float value represents the percentage of CLBs to convert into LEBs.

Default – No CLBs will be converted.

-convert_clbs_direct

Tells t-vpack to convert a single CLB directly into an LEBs.

Default – pairs of CLBs are converted into an LEB.

-inputs_per_leb <int>

Specifies the number of LEB input pins.

Default – sets the number of inputs per LEB as twice the number of inputs per CLB.

-output_per_leb <int>

Specifies the number of LEB output pins.

Default – sets the number of outputs per LEB as twice the number of outputs per CLB.

Table 1. t-vpack LEB generation options.


Last updated Dec 2005