Can my RX and TX serial rates be different? How can I have different line rates with the same REFCLK?
Yes. Virtex-4 gives you full control of the RX and TX PLLs via the PMA attributes. More information on these attributes can be found in the Virtex-4 RocketIO User Guide (UG076):
RX and TX use the same REFCLK:
This is the recommended way to have different RX and TX line rates. Setting RXPLLNDIVSEL and TXPLLNDIVSEL will specify the RX and TX line rates respectively. You do not have to set these as the same.
For example, if you want the RX side to run at 5 GHz and the TX side to run at 1.25 GHz, you can set the PMA as follows:
REFCLK = 125 MHz
RXOUTDIV2SEL = /2 (The line rate in Gb/s is twice the frequency of the output of the OUTDIV2SEL blocks)
TXOUTDIV2SEL = /4 (The line rate in Gb/s is twice the frequency of the output of the OUTDIV2SEL blocks)
RXPLLNDIVSEL = 40
TXPLLNDIVSEL = 20
RX VCO Frequency = (REFCLK * RXPLLNDIVSEL) = 125MHz * 40 = 5.0 GHz.
TX VCO Frequency = (REFCLK * TXPLLNDIVSEL) = 125MHz * 20 = 2.5 GHz.
RX Line Rate = RX VCO Frequency / RXOUTDIV2SEL = 5.0 GHz / 2 = 2.5 GHz DDR = 5 Gbit/s.
TX Line Rate = TX VCO Frequency / TXOUTDIV2SEL = 2.5 GHz / 4 = 0.625 GHz DDR = 1.25 Gbit/s.
NOTE: When TX and RX use the same REFCLK, the line rates must be a power of 2 ratios of each other.
RX and TX use different REFCLKs:
While it is possible to do this by setting RXPMACLKSEL and TXPMACLKSEL, Xilinx does not recommend it.