I am recently getting myself into the field of FPGA design and development, and lately I've found myself hearing a lot about transceivers. I tried searching the net for some answers about these components and learn their role in the world of FPGAs but could not find much information but a few articles related to serial communications and Ser/Des's…
I wanted to ask, why, when, and most importantly how will I use transceivers on FPGAs? What are their alternatives (if any exist)? Is there some kind of a thumb rule for transceivers usage? And how can I "harness" all of that transceiving good to my advantage?
Best Answer
You need to use a transceiver when you want to bring out high speed signals from inside the FPGA and interface with the real world.
Typical examples are to communicate with other high speed parts on the same board (for example another FPGA or ADC) or to interface off board (for example using PCI, HDMI or ethernet).
In order to send these high speed signals correctly there are a number of encoding and electrical considerations. Perhaps it is necessary to remove DC bias, for example using some form of symbol encoding (e.g. 8b/10b). Maybe the communication channel uses differential pairs to accurately send high speed data across a wire. FPGA manufacturers build in flexible transceivers to do this work, saving you the effort.
For example, the Spartan 6 LXT contains what Xilinx call a "3.2Gbps GTP transceiver". Their literature says:
That's a lot of high speed interfaces which can be achieved using the transceivers.
You could implement a lot of this on your own and in older/smaller/cheaper FPGAs this is often the only way. However you soon run into problems designing logic that will run fast enough to keep up and you will require a lot of external components for the electrical interface.
Unfortunately with many modern interfaces the normal FPGA I/O pins simply don't run fast enough to achieve the high data rates required.
So in summary, the benefits of internal transceivers are:
Disadvantages include: