Search code examples
buffervhdlfpgaclockvirtex

Reaching clock regions using BUFIO and BUFG


I need to realize a source-synchronous receiver in a Virtex 6 that receives data and a clock from a high speed ADC. For the SERDES Module I need two clocks, that are basically the incoming clock, buffered by BUFIO and BUFR (recommended). I hope my picture makes the situation clear.

Clock distribution

My problem is, that I have some IOBs, that cannot be reached by the BUFIO because they are in a different, not adjacent clock region. A friend recommended using the MMCM and connecting the output to a BUFG, which can reach all IOBs. Is this a good idea? Can't I connect my LVDS clock buffer directly to a BUFG, without using the MMCM before?

My knowledge about FPGA Architecture and clocking regions is still very limited, so it would be nice if anybody has some good ideas, wise words or has maybe worked out a solution to a similar problem in the past.


Solution

  • It is quite common to use a MMCM for external inputs, if only to cleanup the signal and realize some other nice features (like 90/180/270 degree phase shift for quad-data rate sampling).

    With the 7-series they introduced the multi-region clock buffer (BUFMR) that might help you here. Xilinx has published a nice answer record on which clock buffer to use when: 7 Series FPGA Design Assistant - Details on using different clocking buffers

    I think your friends suggestion is correct.

    Also check this application note for some suggestions: LVDS Source Synchronous 7:1 Serialization and Deserialization Using Clock Multiplication