Forum Discussion

SharmaUmesh278's avatar
SharmaUmesh278
Icon for New Contributor rankNew Contributor
4 days ago

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:

  1. Link Width : x1
  2. 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

  1. Are repeated accesses to BAR-space offsets after boot expected from BIOS/UEFI, Windows PCI bus enumeration, or other background PCIe activity?
  2. 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?
  3. 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?
  4. 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.

1 Reply

  • Wincent_Altera's avatar
    Wincent_Altera
    Icon for Regular Contributor rankRegular Contributor

    Hi SharmaUmesh278 ,

    Are repeated accesses to BAR-space offsets after boot expected from BIOS/UEFI, Windows PCI bus enumeration, or other background PCIe activity?
    >> In our user guide mentioned that, the RX logic processes requests from the root complex, and that the Avalon-MM RX master issues the corresponding Avalon-MM read/write transactions into the FPGA fabric. It also states that some bridge register regions are typically intended for access by PCI Express processors only, and that the PCI Express root complex typically requires write/read access to certain mailbox registers. So the guide supports the idea that root-complex-originated accesses are normal
    >> detail please refer to IP Compiler for PCI Express User Guide

    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?
    >> Our PCIe IP is following PCI-SIG compliance
    >> As long as the Laptop is PCI-SIG compliance, by right it shall be no problem.
    >> But in your case, I would suggest to switch to another different host and check if the error is follow. I suspect is individual host issue.

    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?
    >> Are you using Gen1 design if I understand correctly ?
    >> I would suggest to set the BIOS PCIe speed from "auto" into "gen1", I did experience certain brand of host actually cannot perform auto negotiation.

    Is there a recommended way to distinguish firmware/OS-generated PCIe accesses from accesses generated by the application or function driver?
    >>From what I understand , the RX block processes requests from the root complex, passes header information to the Avalon-MM master, and the RX master generates the corresponding Avalon-MM transactions to the connected slaves.

    Regards,
    Wincent_Altera