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 > More about multiplexing

TABLE OF CONTENTS

Xilinx FPGA FPGA Forum

More about multiplexing

FONT SIZE : AAA

The partitioning is done. The resource utilization of all FPGAs is well balanced and  within the suggested range. Furthermore, the design IOs per FPGA are minimized  but after such good work, there is still a chance that there are not enough FPGA pins  available to connect all design IOs, or to be more accurate, there are not enough onboard traces between some of the FPGAs. As mentioned in section 8.2.9 above, the  solution is to multiplex design signals between FPGAs in question. Multiplexing  means that multiple compatible design signals are assembled and serialized through  the same board trace and then de-multiplexed at the receiving FPGA. We shall now  go into more detail on how this is done and also compare different multiplexing  schemes. We shall also explain the criteria for selecting compatible signals for  multiplexing and give guidance on timing constraints.

What do we need for inter-FPGA multiplexing? 

To multiplex signals between FPGAs we need a number of elements including a  multiplexer (mux), demultiplexer (dmux), clock source and a method for keeping all  of these mutually synchronous. All of these elements are seen in the in Figure 119 (see next section for full explanation). 

If we have freedom to alter our RTL then theoretically, these elements could be  manually added at each FPGA boundary. We would need to add the multiplexing  elements after partitioning or add the elements into the RTL from the start, therefore  pre-supposing the locations for partition boundaries. In both cases, the rest of the  SoC team might see this as stepping too far away from the original SoC RTL and  introducing too many opportunities for error.

Most teams would not contemplate such widespread changes to the SoC RTL and  instead they rely on automated ways to add the multiplexing, either by scripted  direct editing of the post-synthesis netlists or by inference during synthesis, based  on direction given by the partitioning process. We shall explain more about this in a  moment.

Basic time-division multiplexing of inter-FPGA signals.png

Whatever the method for introducing the muxing, the basic requirement of the  scheme is to transfer IO data values from one FPGA to another within one design  clock. To achieve this, the serial transfer clock (also named multiplexing clock or  fast clock) must sample those data values faster than the design clock to guarantee  that all the data is available in the receiving FPGA before the next active design  clock edge.  

As an example, let’s assume that we have four IO data values to transfer between  two FPGAs which are multiplexed on a single on-board connection i.e., a mux ratio  of 4:1. If this part of the design is running at 20MHz then, to transfer the four design  IOs within a design clock cycle, we need a transfer clock which is at least four times  faster than the design clock. Therefore the transfer clock must be 80MHz at  minimum. In practice it needs to more than four times faster for a multiplexing of  4:1 because we need to ensure that we meet the setup and hold times between the  data arriving on the transfer clock and then being latched into the downstream logic  on the design clock. 

In most of the cases where multiplexing is used, it decreases the overall speed of the  design and is often the governing factor on overall system speed. The serial transfer  speed is limited by the maximum speed through the FPGA IOs and the flight time  through the on-board traces. Therefore, with these physical limits the multiplexing  scheme needs to be optimized to allow the prototype to be run at maximum speed.

Multiplexing is typically supported by partitioning tools which insert the mux and  dmux elements and populate them with suitable signals. For example, in the Certify  tool there are two different types of scheme called certify pin multiplier (CPM) or  high speed time domain multiplexing (HSTDM). 

Based on the relationship of the transfer clock and design clock, we can differentiate  between two types of multiplexing. Asynchronous multiplexing, where the transfer  clock has no phase relation to the design clock, and synchronous multiplexing,  where the transfer clock is phase aligned to the design clock, and probably even  derived from it.


  • XC3S50A-5TQ144C

    Manufacturer:Xilinx

  • FPGA Spartan-3A Family 50K Gates 1584 Cells 770MHz 90nm Technology 1.2V 144-Pin TQFP
  • Product Categories: FPGAs

    Lifecycle:Active Active

    RoHS: No RoHS

  • XC3S50AN-4TQ144I

    Manufacturer:Xilinx

  • FPGA Spartan-3AN Family 50K Gates 1584 Cells 667MHz 90nm Technology 1.2V Automotive Medical 144-Pin TQFP EP
  • Product Categories: FPGAs (Field Programmable Gate Array)

    Lifecycle:Active Active

    RoHS: No RoHS

  • XC5215-6HQ208C

    Manufacturer:Xilinx

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

    Lifecycle:Obsolete -

    RoHS: No RoHS

  • XC5215-6PQ160C

    Manufacturer:Xilinx

  • FPGA XC5200 Family 23K Gates 1936 Cells 83MHz 0.5um Technology 5V 160-Pin PQFP
  • Product Categories: FPGAs

    Lifecycle:Obsolete -

    RoHS: No RoHS

  • XC2V1000-4FF896I

    Manufacturer:Xilinx

  • FPGA Virtex-II Family 1M Gates 11520 Cells 650MHz 0.15um Technology 1.5V 896-Pin FCBGA
  • Product Categories: FPGAs

    Lifecycle:Obsolete -

    RoHS: No RoHS

Need Help?

Support

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