readyLatency of Arria 10 PCIe Avalon-ST IP
Hello,
I'm writing a design with Arria 10 AVST PCIe IP (Quartus 22.4; PCIe IP version 20.1.1). The SoC is written in verilog rather than Block Design to promote portability. So we need to handle readyLatency ourself. Also, we use custom 250Mhz clock `soc_clk` to drive `pld_clk` rather than default `coreclkout_hip` to avoid CDC.
And I have encounterd a weird problem regarding ready & valid handshake of AVST interface on the RX path.
Basically , using SignalTap, I saw AVST's valid asserted by the IP after two cycles when ready is asserted, recovering from a backpressure on the RX path. According to AvalonST Spec, valid can only be asserted on ready cycles (n + <readyLatency>). So I believe this implies a readyLatency = 2 on RX path.
But after I checked the pcie_ep.xml, which I believe is a document regarding current IP settings. And I saw readyLatency on both RX and TX path is 3.
So I checked PCIe IP's User Guide (version 18.0, latest on website), and it says that RX path has a readyLatency of 3, but for TX path, it has a readyLatency of 2.
Based on my obverstaion, I'm very confused now. What is the actual ready latency for these path? Is there a reliable way that I can confirm for each IP generation?
Hi Chenyang,
Thank you for sharing your detailed observations regarding the signal behavior of rx_st_ready and rx_st_valid.
You are right about the current IP settings in which both the RX and TX path has a readyLatency of 3. I observed the same from our Design Example generated from Quartus.
According to the User Guide, when it mentions a ready latency of 3 cycles, it does not mean the readyLatency must be exactly 3 cycles. Instead, it means the readyLatency can be up to 3 cycles. The user's Application Layer should be designed to handle the readyLatency up to the specified number, which is 3 in this IP.
Another way to check your readyLatency is via Quartus Platform Designer.
1. Open the .qsys file.
2. Go to View > Component Instantiation.
3. Locate the Arria 10/Cyclone 10 Hard FPGA PCIe IP.
4. Under Component Instantiation tab > Signals & Interfaces sub-tab > click rx_st signals.
5. You should be able to see the Ready latency value configured.
Arria® 10 and Cyclone® 10 GX Avalon® Streaming Interface for PCI Express* User Guide: https://www.intel.com/content/www/us/en/docs/programmable/683647/18-0/datasheet.html
I apologize again for my late response. I hope this has clarified your questions regarding the readyLatency of this IP.
Please let me know if anything remains unclear.
Thanks.
Best Regards,
Ven