Hello, I get PCIe link up problems in FPGA connecting to DSP. The C6678 DSP works as RC and the V6 FPGA works as EP. But I hardly get link up in both sides.
On our custom board, I have achieved the DMA communication between two V6 FPGAs. And the FPGA communicates with DSP based on PCIe protocol as well. My partner use the example provided by TI. When we first try it, both sides got link up well. Then, sometimes DSP prints “Link is up” while FPGA’s trn_lnk_n is not stable and sometimes both sides can’t get link up.
We change the x2 gen2 link to x1 gen1 link. The trn_lnk_n becomes stable. In the first try, trn_lnk_n is asserted. But after that trn_lnk_n is always high. We also try to make FPGA as RC and DSP as EP. And the results are same as before.
According to Xilinx AR#34151, I find the 8b/10b RX errors happened. After PIPERX#ELECIDLEGT goes low, the PIPERX#STATUSGT doesn't stay 000b stably. And PIPERXVALIDGT is unstable as well. The signal trn_lnk_n doesn’t assert although the pl_ltssm_state hops well.
An external PLL provides the clocks to FPGA and DSP. We have compared the quality of it to the clock which supports the communication between two FPGAs. They are comparable. So we pay attention to the Training Sequences. We compare the FPGA Rx’s TS with FPGA-FPGA’s case and do some changes. But that doesn’t impact the unstability of PIPERX#STATUSG and PIPERXVALIDGT, and trn_lnk_n doesn’t assert.
What causes these problems? Is it the bad signal integrity or the mismatch configuration in link training between C6678 DSP and V6 FPGA?
sincerely,