PCIE auto negotiation in cyclone V
Hi,
I'm trying to make gen2 x4 PCIE link using cyclone V 5CGTFD5C5 FPGA. I'm using a custom board and Intel PCIE gen2 X4 FPGA example design. The problem I'm facing is PCIE link always downgrade to either Gen1 or to X1 or X2. With cvp, it downgrades to gen2 X2, and without cvp its either gen2 X1, or gen1 X2. I have tested perstn with both hard reset (U22) and softreset. I captured ltssam state transitions as follows.
0x00 -> 0x01 -> 0x02 -> 0x07 -> 0x08 -> 0x0B -> 0x0C -> 0x0D -> 0x0E-> 0x0F -> 0x0C -> 0x0D -> 0x1A -> 0x07 -> 0x08 -> 0x0B -> 0x0F
State encoding defines available in datasheet as follows
0x00: detect.quiet
0x01: detect.active
0x02: polling.active
0x03: polling.compliance
0x04: polling.configuration
0x05: polling.speed
0x06: config.linkwidthstart
0x07: config.linkaccept
0x08: config.lanenumaccept
0x09: config.lanenumwait
0x0A: config.complete
0x0B: config.idle
0x0C: recovery.rcvlock
0x0D: recovery.rcvconfig
0x0E: recovery.idle
0x0F: L0
0x10: disable
0x11: loopback.entry
0x12: loopback.active
0x13: loopback.exit
0x14: hot.reset
0x16: L1.entry
0x17: L1.idle
0x18: L2.idle
0x19: L2.transmit.wake
0x1A: speed.recovery
Besides, I have been using a similer custom board with 5CGTFD7D5 fpga and gen2 X4 pcie link is working fine. I also captured ltssam state transitions for this.
0x00 -> 0x01 -> 0x02 -> 0x07 -> 0x08 -> 0x0B -> 0x0C -> 0x0D -> 0x0E -> 0x0F -> 0x0C -> 0x0D -> 0x1A -> 0x0D -> 0x0E -> 0x0F
Both projects meets timing and both PCBs are almost same which makes hard to conclude that this issue is due to electrical problem in PCB. I'm using the same example design from Intel Gen2 X4 PCIE in two projects by only changing the part number since the both FPGAs are pin compatible.
Any information to solve this issue is highly appreciated.
Thanks,
Aruna