This website uses cookies. By using this site, you consent to the use of cookies. For more information, please take a look at our Privacy Policy.
Home > FPGA Technical Tutorials > FPGA-Based Prototyping Methodology > FPGA technology today: chips and tools > Design partitioning flows

TABLE OF CONTENTS

Xilinx FPGA FPGA Forum

Design partitioning flows

FONT SIZE : AAA

Even though FPGA capacity has increased in line with Moore’s Law, the SoC designs themselves have also increased in size and complexity so SoC designs are still usually larger than today’s largest FPGA devices. As a result, the first law of prototyping is as true now as it was when first proposed at the start of the millennium and the prototyper is faced with the task of partitioning the SoC design into multiple, smaller FPGA devices. 

There are two main approaches to partitioning: pre-synthesis or post-synthesis. We will consider each in turn here along with a less common approach of partitioning the actual SoC netlist. 

Pre-synthesis partitioning flow

When the partitioning is performed on the design before synthesis, the input format is the RTL of the SoC design. The partitioning task is a process of creating FPGA- sized sub-designs from the overall design tree and can be automated to some degree. Figure 29 shows the steps in a pre-synthesis partitioning tool flow. 

Figure 29: Pre-synthesis partitioning flow 

Pre-synthesis partitioning flow.png

The flow is often performed top-down, which requires that the partitioning tools and the workstations upon which they run have the capacity to accommodate the whole SoC design, which can amount to gigabytes of data. Therefore, tool efficiency and runtime can become important factors and consideration needs to be given to the turn-around time from RTL changes to having a new version of the designpartitioned and running on the prototype board.

Originally, the pre-synthesis partitioning approach dictated that compilation andsynthesis occurred on the whole design, potentially resulting in long runtimes anddemanding large server resources. However, recent advances mean that the FPGAsynthesis is performed on all FPGAs in parallel. This requires that the partitioningmakes an estimate of final results for each FPGA in order to infer timing budgetsfor the IO on each device. The benefit is that total runtime is greatly improved byrunning multiple synthesis tools in parallel. Turn-around time for each RTL changeand bug fix is reduced accordingly, especially if incremental synthesis and place &route techniques are used. More detail of incremental flows is given in chapter 11.

The drawback of this flow is that it is actually a two-pass flow. To make a correctpartition, some knowledge of final FPGA resources required by each RTL moduleis required. If possible, and if timing-driven partitioning is our aim, then a timingknowledge at each module boundary would also be useful. This accurate knowledgeof resources and timing can only come from synthesis (or preferably from place &route). We therefore need to skip ahead and pre-run synthesis before feeding backthe results to the partitioner. In the Certify ® tool, that is precisely what is done. Thesynthesis is run in a quick-pass automated mode in order to estimate resources andtiming. Thus, although a two-pass flow, the pre-synthesis in effect seems like anextra “estimate” step in a single-pass flow.

The case where top-down pre-synthesis partitioning can be most powerful is whenperformance, especially inter-FPGA performance, is crucial. By working top-downand using the system-level constraints, a pre-synthesis partitioning flow allows fortiming to be budgeted and constrained across multiple FPGAs at the same time. Thesynthesis is also more able to account for board-level delays and pin-multiplexing inorder to correctly constrain the individual FPGAs later in their respective flows.

Post-synthesis partitioning flow

As the name suggests, post-synthesis partitioning takes place after synthesis at the netlist level. Figure 30 shows how individual modules are synthesized and mapped into FPGA elements individually, resulting in numerous gate-level netlists. The netlists are combined into a hierarchy and then re-grouped into FPGA-sized partitions. At the same time, the netlists are conditioned for FPGA (e.g., gated clocks are changed to enables) and wrappers are created for modules which will be modeled externally (e.g., RAMs). We will discuss wrappers in detail in chapter 7. 

The main advantage of post-synthesis partitioning is that only those RTL source files which have changed are re-synthesized, the results of the other RTL files being adopted without change. The resultant netlists are merged and the partitioning results are also likely to be reusable except in cases where module boundaries have altered. This lends itself to easier automation and scripting as a flow.

Figure 30: Post-synthesis partitioning flow

Post-synthesis partitioning flow.png

Another advantage of post-synthesis partitioning comes from the flow being a

Table 5: Comparing partitioning flows


Pre-synthesis Post-synthesis
QoR Best Sub-optimal
Set-upTop-down Simpler
Turn-around

Needs incremental synthesis

and place & route

Naturally

block-based

Debug advantageMulti-FPGA instrumentationName preservation
Full runtime Slightly slower Slightly faster

natural single-pass flow. That means that by the partitioning stage, the design isalready mapped into FPGA resources and timing information is accurate enough toallow more accurate partitioning decisions. There is therefore no need for a pre-runon the synthesis in order to estimate resources.

Table 5 makes a short comparison between pre-synthesis and post-synthesispartitioning flows based on the discussions above.

The choices are between a faster turn-around time and more automation on the onehand, and best results on the other hand.

Alternative netlist-based partitioning flow

There are some teams that advocate an alternative flow for FPGA-based prototyping in which the synthesis is performed by the normal SoC synthesis tools and it is the resultant gate-level netlist, or hierarchy of netlists, that becomes the input for the rest of the flow. Figure 31 shows this netlist-level flow. Here we note that normal SoC synthesis is used and the design is mapped into the same cell library as for the final SoC. The task of mapping the design into FPGA elements is performed at a cell-by-cell level, via an intermediate format where the .lib cells are replaced with their functional equivalent. During the SoC synthesis, netlists may be manipulated using built in group and ungroup style commands to do the job of partitioning. The same top-level tasks still need to be performed as in the other partitioning flows i.e., 

objects unsuitable for FPGA implementation need to be isolated and doing this at a netlist level might be too complex for many users.

Figure 31: Alternative SoC netlist-based flow

Alternative SoC netlist-based flow.png

Nevertheless, netlist editors exist that allow very powerful manipulation of the design under the control of scripted netlist editor commands. Some find this preferable to changing RTL in order to do the same thing. We should understand that a netlist-based approach is likely to achieve lower performance and use more FPGA resources than the other flows because FPGA synthesis is limited to mapping a very fragmented design into FPGA low-level cells, missing many chances for optimization. All possibility of automatically inferring the high-level resources, such as DSP blocks or SRL functions of the logic elements from such a low-level netlist is lost. 

We shall cover more about our uses of partitioning tools in chapter 8 but let us now move on from the front-end steps in our FPGA-based prototyping tool flow and consider the remaining steps in the flow that take our partitioned synthesized design into the FPGAs themselves. 

Partitioning tool example: Certify®

Usually provided by third-party EDA vendors, these tools are used to automate and accelerate the partitioning of a single RTL code into multiple FPGAs. While partitioning can be done manually, for example by using group and ungroup commands and selective net-listing of subsets of the design, dedicated EDA tools significantly simplify and speed-up the initial partitioning and allow subsequent partitioning modification with ease. 

Figure 32: Screenshot of Certify partitioning environment

Screenshot of Certify partitioning environment.png

Partitioning tools such as Synopsys’ Certify, pictured in Figure 32, perform a mix ofautomatic, interactive (drag-and-drop) or scripted partitioning. These kinds of toolsallow what-if exploration of the partitioning options which is important becausesome designs will not appear to have obvious partition boundaries to begin with.Tools that allow quick trials and provide immediate visibility of utilization andconnectivity can guide the users to better partitioning decisions than workingcompletely manually at the netlist level.

For example, in the Certify screen shot we can see an interactive partitioningsession is in progress. The top-level of the RTL is shown schematically in the centrepanel. Here we see the core of the design and a simple chip-support block alongside,in this case just clock and reset (we shall explain more about top-level partitioningin chapter 8). At the top panel, we see a representation of the board resources intowhich we can partition. In this case, a simple board with two FPGAs, a RAM,external IO connectors and a clock source. On the left of this panel we can also seethe board’s resources in a nested-list view, common to many EDA tools. In that listview and in the top-level diagram and other places we can see our progress as weassign various design elements to relevant board resources. We can also see otherassignments into each FPGA, such as our debug instrumentation (in this case,Xilinx ® ChipScope tools).

At each step, we get immediate feedback on how we are doing, for example, in thisshot, the FPGAs have histograms showing proportion of logic, memory and IO usedso far. Another useful guide for interactive partitioning is the connectivity matrix,showing the inter-block connections at this level of the design; this shot shows thatthere are 128 connections between the core of the design and the system-levelinterface (i.e., external IO).

Some further detail of the use of Certify tools, including pin multiplexing, fine-grainpartitioning by logic replication and clock domain rationalization is given in chapter7 and 8.

  • XC4VLX60-11FF1148C

    Manufacturer:Xilinx

  • FPGA Virtex-4 LX Family 59904 Cells 90nm Technology 1.2V 1148-Pin FCBGA
  • Product Categories: FPGAs

    Lifecycle:Active Active

    RoHS: No RoHS

  • XC18V02VQ44I

    Manufacturer:Xilinx

  • PROM Parallel/Serial 2M-bit 3.3V 44-Pin VQFP
  • Product Categories: Memory - Configuration Proms for FPGA's

    Lifecycle:Obsolete -

    RoHS: No RoHS

  • XC2S30-5VQG100I

    Manufacturer:Xilinx

  • FPGA Spartan-II Family 30K Gates 972 Cells 263MHz 0.18um Technology 2.5V 100-Pin VTQFP
  • Product Categories: FPGAs

    Lifecycle:Active Active

    RoHS:

  • XC4VLX60-11FF668C

    Manufacturer:Xilinx

  • FPGA Virtex-4 LX Family 59904 Cells 90nm Technology 1.2V 668-Pin FCBGA
  • Product Categories: FPGAs

    Lifecycle:Active Active

    RoHS: No RoHS

  • XC4VLX60-11FFG668I

    Manufacturer:Xilinx

  • FPGA Virtex-4 LX Family 59904 Cells 90nm Technology 1.2V 668-Pin FCBGA
  • Product Categories: FPGAs (Field Programmable Gate Array)

    Lifecycle:Active Active

    RoHS:

Need Help?

Support

If you have any questions about the product and related issues, Please contact us.