Forum Discussion

Aflop's avatar
Aflop
Icon for Occasional Contributor rankOccasional Contributor
9 months ago
Solved

Arria 10 - PCIe Hard IP - 2x PCIe Gen3x8 OR 1xPCIe Gen3x16

My company produced a custom board with an Arria 10 FPGA and a PCIe Gen3x16 interface. While looking at the specifications for the "Intel® Arria® 10 and Intel® Cyclone® 10 PCIe Hard IP" we found that it supports up to Gen3x8 with DMA. It also says that it support 1-4 IP Blocks per device. The team is thinking that they will be able to instantiate 2 Gen3x8 IP blocks to effectively create 1 Gen3x16. Is this correct? If so, has anyone done this successfully and could they provide an example?

If this is not possible please let me know. My concern is that BAR 0 contains (to my knowledge) information on the configuration of the PCIe card being gen3x8. This will be read by the PCIe drivers on the PC. My prediction is that at best, the PC will read 2 gen3x8 devices on the same slot and at worst it just wont work entirely, but maybe I am a pessimist.

Thank you for any help at all

  • Hi Aflop,


    "1 IP for the first 8 channels and another IP for the next 8 channels"

    I think it depends on whether the 16 channels (RX and TX signals) in the FPGA are from the same bank.

    1. If they are from the same bank, you can only instantiate 1 PCIe IP even though the next 8 channels (in the case of Gen3 x8) are unused. This results in 1 PCIe device.

    2. If they are from the same bank, you can instantiate 1 PCIe IP and perform PCIe bifurcation Gen3 2x8, allowing it to work as two separate PCIe devices. However, this requires the PCIe IP to support PCIe bifurcation. In your case, unfortunately, Arria® 10 or Cyclone® 10 GX Hard IP for PCI Express does not have support to PCIe bifurcation. https://www.intel.com/content/www/us/en/docs/programmable/683647/18-0/features.html

    3. On the other hand, if they are from a separate bank, and you instantiate 2 Gen3 x8 PCIe IP, I think the one endpoint hardware can be recognized and enumerated by the host as two separate PCIe endpoint devices.


    Thanks.

    Best Regards,

    Ven


6 Replies

  • VenT_Altera's avatar
    VenT_Altera
    Icon for Frequent Contributor rankFrequent Contributor

    Hi Aflop,


    "1 IP for the first 8 channels and another IP for the next 8 channels"

    I think it depends on whether the 16 channels (RX and TX signals) in the FPGA are from the same bank.

    1. If they are from the same bank, you can only instantiate 1 PCIe IP even though the next 8 channels (in the case of Gen3 x8) are unused. This results in 1 PCIe device.

    2. If they are from the same bank, you can instantiate 1 PCIe IP and perform PCIe bifurcation Gen3 2x8, allowing it to work as two separate PCIe devices. However, this requires the PCIe IP to support PCIe bifurcation. In your case, unfortunately, Arria® 10 or Cyclone® 10 GX Hard IP for PCI Express does not have support to PCIe bifurcation. https://www.intel.com/content/www/us/en/docs/programmable/683647/18-0/features.html

    3. On the other hand, if they are from a separate bank, and you instantiate 2 Gen3 x8 PCIe IP, I think the one endpoint hardware can be recognized and enumerated by the host as two separate PCIe endpoint devices.


    Thanks.

    Best Regards,

    Ven


  • VenT_Altera's avatar
    VenT_Altera
    Icon for Frequent Contributor rankFrequent Contributor

    Hi Aflop,


    Thanks for reaching out.


    Allow me some time to investigate your issue. I shall come back to you with the findings.


    Thanks.

    Best Regards,

    Ven


  • VenT_Altera's avatar
    VenT_Altera
    Icon for Frequent Contributor rankFrequent Contributor

    Hi Aflop,


    My apologies for the delayed response.


    Yes, Arria® 10 or Cyclone® 10 GX PCIe IP does support AVMM DMA Gen3 x8.


    However, instantiating two Gen3 x8 PCIe IP blocks does not create a Gen3 x16. Instead, the two Gen3 x8 PCIe IPs are treated as two separate Gen3 x8 PCIe endpoint devices by the host, and they will have separate BARs. Additionally, they are enumerated by the host as two distinct PCIe endpoint devices, meaning they will not be combined into a single Gen3 x16 PCIe endpoint device.


    I hope this addresses your inquiries.


    Thanks.

    Best Regards,

    Ven


  • Aflop's avatar
    Aflop
    Icon for Occasional Contributor rankOccasional Contributor

    Ven,

    Thank you for your insights. My team is also curious if they were to connect 2 Gen3 x8 PCIe IPs to the same endpoint hardware interface, i.e. 1 IP for the first 8 channels and another IP for the next 8 channels, if the PC would read this as 2 endpoints? Or would this this read as just 1 Gen3 x8 endpoint and the 2nd IP would be ignored?

    Thank you,

    Aflop

  • Aflop's avatar
    Aflop
    Icon for Occasional Contributor rankOccasional Contributor

    Ven,

    Thank you very much for your help. Closing this issue now.

  • VenT_Altera's avatar
    VenT_Altera
    Icon for Frequent Contributor rankFrequent Contributor

    Hi Aflop,


    I’m glad that your questions have been addressed. I now transition this thread to community support. If you have a new question, feel free to open a new thread to get support from Altera experts.


    Thanks.

    Best Regards,

    Ven