181、调试手记:当PCIE链路死活不起来

181、调试手记:当PCIE链路死活不起来 181、调试手记:当PCIE链路死活不起来上周又熬了个大夜,问题出在一块自研的FPGA板卡上。PCIE链路训练死活过不去,LTSSM卡在Detect状态纹丝不动。查了三天,从硬件信号完整性查到参考时钟,最后发现是IP核配置里一个不起眼的Lane参数设错了。这事让我觉得,是时候系统梳理下各家PCIE IP核的那些门道了。为什么需要关注IP核现在做FPGA设计,很少有人从零开始写PCIE链路层了。时间成本扛不住,稳定性更没法保证。三大厂的IP核——Xilinx的XDMA、Intel的PCIe Hard IP、Synopsys的DesignWare PCIe——基本成了行业标配。但用现成IP不等于闭着眼睛连信号,每个核的脾气秉性、坑位分布,都得心里有数。Xilinx家:集成度高,但别迷信向导7系列之后的UltraScale/UltraScale+,PCIE硬核已经做在硅片里了。用Vivado的IP Integrator拖个PCIe Block出来,图形化配置看着挺省心。这里踩过坑:那个配置向导生成的Example Design,经常得大改才能用到实际项目里。关键点在于AXI接口的位宽和时钟域处理。官方例程喜欢用250MHz的user_clk,但实际应用里数据流吞吐量大的时候,这个频率可能成为瓶颈。建议自己根据吞吐量需求算一下,别盲目跟着例程走。// 官方例程里常见的配置,吞吐量要求不高时可用 pcie_ip_inst.axi_aclk