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 > Partitioning and reconnecting > Improving prototype performance

TABLE OF CONTENTS

Xilinx FPGA FPGA Forum

Improving prototype performance

FONT SIZE : AAA

The timing for signals to travel between FPGAs is typically longer than signals that  remain inside a given FPGA, therefore inter-FPGA timing is likely to become the  limiting factor of the system clock rate, especially in cases where multiplexing is  used. We will have a greater impact upon prototype performance if we focus on IO  timing and critical inter-FPGA paths. This is done using timing constraints. 

SoC top-level constraints apply to the FPGAs down to the level of the individual  FFs in their respective clock domains and also between them if cross-domain timing  is defined. This is particularly powerful when we can ensure that each FPGA  boundary has an IO FF which aligns with a sequential element in the SoC, as we  shall see in a moment.  

Recommendation: after partitioning, the constraints act upon FPGA synthesis and  place & route back-end on each FPGA in isolation so we also need to generate  implementation constraints for each FPGA to ensure maximum performance.  

We will not give details here of timing constraints in FPGA tools because the  references, including the tool vendor’s user guides, are the best source of such  information but here are some short notes most relevant to this discussion:  

• Synthesis uses estimated timing and maximum delay models for the  FPGA. 

• Place & route uses exact timing models for maximum timing and statistical  estimates for minimum timing. 

• The synthesis and place & route tools are timing driven so all paths in the  FPGA are constrained, even if only by the global defaults unless explicitly  given relaxed timing using false path constraints or other methods to break  a timing path.  

• Black boxes break a timing path so it is recommended to provide timing  information for any black boxes in order to constrain any connected paths. 

• FPGA IO pins are considered constrained by the applicable clock  constraint. 

In general, any FPGA design benefits from plentiful and accurate timing constraints  but sometimes designers may not have enough understanding of the final  environment or clock domain relationships to create them and this is particularly  true for IO constraints. In FPGA-based prototyping we have an advantage in that we have a good understanding of the boundary and external conditions for every FPGA  pin. For example, we know the board trace performance, the exact route taken  across the board and even the logic in the source FPGA which is driving the signal.  These boundary conditions can be automatically translated into the timing  constraints necessary for driving both synthesis and place & route for each FPGA in  isolation. This process is called time budgeting.

Time budgeting at sequential boundaries

We can improve the timing of any inter-FPGA path by ensuring that there are FFs at  the FPGA pins on the path. This is because the clock-to-output delay on the source  FPGA output pin and the set-up time on the destination FPGA input pin(s) are minimized.  

As we saw in chapter 3, every FPGA IO pad has multiple embedded FFs and these  are available to us “free-of-charge,” so why not use them? If we can use these IO  FFs in our prototype then they will also provide an additional benefit that the SoC  top-level constraints will apply by default to all FFs.  

FPGA-to-FPGA timing using the above ideal mapping is constrained by the toplevel constraints which automatically propagate to the FFs at each end of any path,  internal or external, unless overridden locally. Therefore, the constraints applying to  SoC FFs mapped into IO FF are simplified and the FPGAs can be more easily  constrained in isolation. This helps in our EDA tool flow because top-level  constraints will be automatically reapplied to the FPGAs during each design  iteration.  

If the partition or the SoC design does not provide FFs which can be placed readily  in the FPGA’s IO FF, then is it feasible to add these manually or via scripted netlist  editing? The addition of extra FFs into an SoC path just so that they can be mapped  into IO FFs would, of course, introduce pipeline delays into that path, altering its  system-level scheduling. For prototyping purposes we cannot arbitrarily add such  extra FFs, tempting as this may be for the improved performance, without checking  with the original designers and probably adding compensating FFs elsewhere in  order to maintain scheduling across the design.  

Recommendation: addition of pipeline FFs can improve prototype performance but  must be acceptable to the SoC design team and a re-run of system-level simulation  is recommended. 

It is therefore preferable to have FFs at every SoC block boundary and to only  partition at those block boundaries and these are indeed recommendations of a  possible project-wide Design-for-Prototyping approach that we explore further in  chapter 9.

Time budgeting at combinatorial boundaries

If the insertion of FFs at FPGA boundaries or movement of the existing FFs to those  boundaries is not possible for all signals, then careful timing constraints for the  combinatorial paths across the FPGA boundaries must take place. In this case, we need to evaluate and divide the timing budget between the FPGAs based on the  complexity of each section of the path.

Considering a typical path origination in an internal FF on one FPGA that ends at an  internal FF in a different FPGA, we would need to break the applicable FF-to-FF  constraint, perhaps derived from the top-level SoC constraints mentioned above. Since only the total path is controlled by the system-level constraint we need to  determine how much of that constraint should be applied to the two parts of the path  as mapped into the two FPGAs. The resulting IO constraints would then be passed  on to subsequent synthesis and place & route for each FPGA.  

This is especially important for designs which require highest performance because  the presence or absence of accurate IO constraints will drive quite different results  in the place & route tool. By default, both synthesis and place & route working on  the isolated FPGA after partitioning will assume that a whole period of the  respective clock is available for propagating the signal to/from the IO pin to/from  the internal FF. However, this assumption will almost certainly not be correct.  

For example, if the signal has come from an internal FF in another FPGA, then the  data will have to traverse that FPGA’s internal routing, its output pad delay plus the  board trace delay before arriving at the receiving FPGA’s pin. The receiving FF’s  clock will probably have been generated internally in the receiving FPGA. We can  therefore see that considerably less than the whole clock period would be available  for propagating the signal through the input pad to the receiving FF in order to meet  its set-up timing requirement. Relying on the default is risky and so we need to give  better IO constraints at combinatorial boundaries, but what should those values be? 

It is worth noting that a semi-manual approach could be taken: extracting delay  information from a first-pass FPGA timing analysis and then using a spreadsheet to  calculate more accurate IO constraints. However, creating IO constraints for many  hundreds or even thousands of signals at combinatorial partition boundaries would  be a long and potentially error-prone approach. It would also need to be repeated for  every design iteration.  Another workaround would be to apply a default of a half-clock cycle of the  receiving FF’s clock and this coarse value may be adequate for a low performance  target.

Time budgeting at combinatorial partition boundaries.png

The good news is that automatic and accurate timing budgeting at combinatorial  partition boundaries is possible. The Certify tool, for example, uses a simple  algorithm to budget IO constraints based on the slack of the total FF to FF. The  synthesis is run in a quick-pass mode to estimate the timing of a path accounting for  IO pad delays and even the trace delay. Multiple FPGA boundaries and different  clock domains in a path are also incorporated in the timing calculation. The result is  a slack value for every multi-FPGA path and we can see the proportion of the path  delay shared between the FPGAs. An example of this is shown in Figure 113 with  exaggerated numbers just to make the sums easy. We see that the timing budgeting  synthesis has estimated that 40ns of the total clock constraint of 100ns is spent  traversing the first FPGA and 10ns is spent in the second FPGA. There is also a  time allowance for the “flight time” on the trace between the FPGAs. 

The total permitted path delay (usually the clock period) is budgeted between the  devices in proportion to each FPGA’s share of the total path delay. Therefore if  either the launching or catching FPGA has a larger share of the total path delay,  then the place & route for that FPGA will also have received a more relaxed IO  timing constraint i.e., the path is given more time. This is a relatively simple process  for an EDA tool to perform but can only be done if the tool has top-down  knowledge of the whole path. 

This all assumes an ideal clock relationship between the source and destination  FPGAs on our boards and we may need to take extra steps to ensure that this is  really so, as we shall see in section 8.5.1.

  • XC3S50A-4FTG256I

    Manufacturer:Xilinx

  • FPGA Spartan-3A Family 50K Gates 1584 Cells 667MHz 90nm Technology 1.2V 256-Pin FTBGA
  • Product Categories: FPGAs

    Lifecycle:Active Active

    RoHS:

  • XC3S50A-4VQ100I

    Manufacturer:Xilinx

  • FPGA Spartan-3A Family 50K Gates 1584 Cells 667MHz 90nm Technology 1.2V 100-Pin VTQFP
  • Product Categories: FPGAs

    Lifecycle:Active Active

    RoHS: No RoHS

  • XC3S50A-5VQ100C

    Manufacturer:Xilinx

  • FPGA Spartan-3A Family 50K Gates 1584 Cells 770MHz 90nm Technology 1.2V 100-Pin VTQFP
  • Product Categories: FPGAs (Field Programmable Gate Array)

    Lifecycle:Active Active

    RoHS: No RoHS

  • XCS20-5PQ208I

    Manufacturer:Xilinx

  • Spartan and Spartan-XL Families Field Programmable Gate Arrays
  • Product Categories:

    Lifecycle:Obsolete -

    RoHS: -

  • XC5215-6HQ240C

    Manufacturer:Xilinx

  • FPGA XC5200 Family 23K Gates 1936 Cells 83MHz 0.5um Technology 5V 240-Pin HSPQFP EP
  • Product Categories:

    Lifecycle:Obsolete -

    RoHS: No RoHS

Need Help?

Support

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