Cyclone IV GX PCIe Hard IP behaves differently on Intel Core I7 vs Xeon root complexes
Hello,
I am working with a Cyclone IV GX (EP4CGX22) using the Altera PCIe Hard IP configured as PCIe Gen1 x1 with an Avalon-MM interface.
The same FPGA image shows different behavior depending on the host platform.
Platforms Tested
Working Platform
- Intel Core i7-13700
- Windows 11
Platforms Where the Issue Is Observed
- Supermicro X10SRA + Xeon E5-1620 v3
- Supermicro X12SPL-F + Xeon Silver 4309Y
PCIe Configuration
The FPGA endpoint is configured as PCIe Gen1 x1
The Xeon platforms provide newer PCIe root complexes:
Xeon E5-1620 v3 -> PCIe Gen3/4 capable slot
Xeon Silver 4309Y -> PCIe Gen3/4 capable slots
However, the link correctly negotiates down to:
- Link Width : x1
- Link Speed : Gen1 (2.5 GT/s)
which matches the FPGA endpoint capability.
Common Observations
On all platforms:
- PCIe enumeration succeeds
- Vendor ID and Device ID are detected correctly
- BAR resources are assigned correctly
- The device driver loads successfully
- The PCIe link is established successfully
TLP as data input getting unexpected value
Observed Difference
Although the PCIe link is established correctly on all systems, the FPGA observes different transaction behavior on the Xeon platforms compared to the Intel Core i7 platform.
The same FPGA image and software stack operate as expected on the Intel Core i7-13700 system, while different behavior is observed on both Xeon-based systems.
Questions
- Are repeated accesses to BAR-space offsets after boot expected from BIOS/UEFI, Windows PCI bus enumeration, or other background PCIe activity?
- Has anyone observed different behavior between Intel Core desktop root complexes and Xeon/server root complexes when using the Cyclone IV GX PCIe Hard IP?
- Are there known interoperability issues between older Cyclone IV GX PCIe endpoints and modern Gen3/Gen4 server root complexes, even when the link successfully negotiates to Gen1 x1?
- Is there a recommended way to distinguish firmware/OS-generated PCIe accesses from accesses generated by the application or function driver?
Any feedback or similar experience would be greatly appreciated.
Thank you.