FPGA实现PCIe端点导致Linux主机重启异常、网卡失效问题求助
FPGA PCIe端点开发枚举故障求助
开发背景
- 正在为项目开发FPGA PCIe端点,用于开展接口原型验证工作
- 所用FPGA平台为搭载Xilinx Virtex-7 980T器件的Synopsys HAPS DX7 S6,通过Xilinx下载线经JTAG接口完成FPGA烧写
- 因处于远程实习阶段,通过远程登录连接至直连下载线、FPGA的Linux主机开展编程与实验
- 当前基于Xilinx DMA subsystem for PCIe(简称XDMA)IP开发,编译示例设计、下载比特流后原计划重启Linux主机完成设备枚举
已完成的开发操作
- 例化PCIe DMA子系统(因账号声望不足无法嵌入图片,配置可点击对应链接查看):
- 修改顶层设计与约束文件:
- 因需远程访问板卡、无法手动控制板上开关/按键,使用
Debug_clk_p/n作为VIO核的时钟,由VIO核提供复位信号,原设计中sys_rst_n已被注释 Debug_clk_p/n被约束至板载时钟源,sys_clk_p与sys_clk_n差分对被约束至PCIe bank的封装引脚D7、D8- 相关文件参考:
- 因需远程访问板卡、无法手动控制板上开关/按键,使用
- 通过JTAG将比特流下载至FPGA,可通过VIO核控制操作确认比特流加载成功
故障表现
下载完成后执行枚举操作未达预期:
- 执行命令
lspci | grep Xilinx,未查询到目标设备 - 执行命令
echo 1 > /sys/bus/pci/rescan尝试重新枚举PCI总线,未生效 - 原计划通过重启主机完成端点枚举与内存分配,但重启过程中出现故障,具体现象:
- Linux主机无法正常启动,无法使用账号凭据正常登录。已确认故障与FPGA PCIe端点比特流直接相关:烧写无PCIe逻辑的比特流时,主机可正常完成重启
- 同事现场排查确认,主机可走完启动流程但以太网功能受影响:正常场景(FPGA为空或烧写非PCIe设计)下eth0可正常启动,烧写PCIe设计后eth0无法工作,这是无法远程登录的直接原因
- 同事手动断开FPGA与主机的连接后重启主机,可正常登录,但主机IP地址发生变化,需通过新地址ssh远程连接主机
- 启动日志参考:
补充说明
- 已确认FPGA PCIe与主机硬件连接正常:最初使用Synopsys Protocompiler编译的Synopsys示例工程比特流时,FPGA PCIe端点可被正常检测,但目前该原始比特流已遗失,也因工具版本问题无法重新编译该示例工程
- 已尝试其他IP核的示例设计,包括AXI for PCIe、PCIe端点IP,采用相近配置(大多为默认配置、基于示例设计修改)与约束,均出现相似故障,导致无法正常登录主机
- 由于主机易出现重启故障、同事目前大多居家办公,故障排查效率较低。目前已将JTAG连接至另一台个人笔记本开展调试,避免原Linux主机意外启动失败影响工作
- 以太网异常的现象存在疑点:按照常规认知,PCIe端点属于类似USB鼠标、键盘的外设,即使自身存在故障也不应影响其他设备正常工作。查阅资料有帖子提到BAR配置问题,但设计中配置的1MB BAR0理论上不会引发此类问题
在此提前感谢大家提供的实现、调试相关建议或故障原因分析,如需补充其他细节可随时更新内容。
Tao
内容的提问来源于stack exchange,提问作者GeekTao
相关产品推荐
相关产品推荐

