Corundum项目FPGA网卡RX模块复位问题分析与解决
问题背景
在基于Corundum开源项目的FPGA网卡开发过程中,开发者遇到了一个棘手的问题:在完成驱动加载和设备启动后,网卡的RX(接收)模块始终处于复位状态,导致无法正常接收网络数据包。该问题出现在将Corundum项目移植到自定义硬件平台的过程中,特别是当使用Zynq UltraScale+ MPSoC作为主控芯片时。
现象描述
系统启动后,通过以下步骤操作:
- 加载Linux内核和mqnic.ko驱动模块
- 加载FPGA比特流
- 执行
ip link set dev eth1 up命令启用网络接口
虽然TX(发送)模块能够正常工作,但RX模块的rx_cfg_enable信号始终为0,导致接收通路被阻塞。通过ILA(集成逻辑分析仪)抓取信号发现,XGMII接口上有数据输入,但由于RX模块未启用,数据无法传递到AXIS总线。
深入分析
驱动行为验证
通过在内核驱动中添加调试打印信息,确认驱动确实执行了以下关键步骤:
- 调用
mqnic_port_set_tx_ctrl()启用TX模块 - 激活调度器
mqnic_activate_sched_block() - 启动所有传输队列
netif_tx_start_all_queues() - 尝试调用
mqnic_port_set_rx_ctrl(MQNIC_PORT_RX_CTRL_EN)启用RX模块
调试信息显示驱动逻辑完整执行,没有报错返回,但RX模块仍未被启用。
寄存器访问问题
通过ILA抓取AXI Lite总线上的寄存器访问情况,发现一个关键现象:虽然驱动尝试写入RX控制寄存器(地址0x13041024)的值为1,但实际总线上观察到的写入值始终为0。这与驱动中的调试打印信息矛盾,表明存在总线传输问题。
总线宽度不匹配
进一步检查发现,系统中存在总线宽度不匹配的问题:
- Zynq PS侧配置为128位AXI主接口
- Corundum IP核使用32位AXI Lite从接口
- 中间使用的AXI Interconnect IP在宽度转换时存在数据丢失
这与Corundum官方提供的ZCU106参考设计不同,参考设计中PS侧配置为32位AXI接口。
解决方案
总线配置调整
将Zynq PS侧的AXI主接口配置从128位改为32位,确保与Corundum IP核的接口宽度一致。这一修改解决了寄存器写入时的数据丢失问题。
验证结果
修改后,系统表现出以下改进:
- RX控制寄存器能够正确写入
rx_cfg_enable信号按预期变为高电平- 网络数据能够正常通过RX通路
通过iperf测试验证了网络性能:
- PC到MPSoC的TCP吞吐量达到655Mbps
- MPSoC到PC的TCP吞吐量达到940Mbps
经验总结
-
总线一致性检查:在异构系统设计中,必须确保主从设备之间的总线参数(如数据宽度)完全匹配,特别是在使用AXI Interconnect进行协议转换时。
-
调试方法:
- 采用分层调试策略,从软件驱动到硬件信号逐层验证
- 结合内核打印和逻辑分析仪进行交叉验证
- 对关键控制信号(如使能信号)进行实时监控
-
参考设计的重要性:在项目移植初期,应严格遵循参考设计的硬件配置,特别是总线接口参数,避免引入不必要的问题。
-
性能优化空间:虽然基本功能已实现,但当前吞吐量与10Gbps的理论带宽仍有差距,后续可针对数据通路优化和驱动参数调优进一步提升性能。
该问题的解决过程展示了FPGA系统设计中硬件-软件协同调试的重要性,也为类似项目的开发提供了有价值的参考经验。
PaddleOCR-VLPaddleOCR-VL 是一款顶尖且资源高效的文档解析专用模型。其核心组件为 PaddleOCR-VL-0.9B,这是一款精简却功能强大的视觉语言模型(VLM)。该模型融合了 NaViT 风格的动态分辨率视觉编码器与 ERNIE-4.5-0.3B 语言模型,可实现精准的元素识别。Python00- DDeepSeek-OCR暂无简介Python00
openPangu-Ultra-MoE-718B-V1.1昇腾原生的开源盘古 Ultra-MoE-718B-V1.1 语言模型Python00
HunyuanWorld-Mirror混元3D世界重建模型,支持多模态先验注入和多任务统一输出Python00
AI内容魔方AI内容专区,汇集全球AI开源项目,集结模块、可组合的内容,致力于分享、交流。03
Spark-Scilit-X1-13BFLYTEK Spark Scilit-X1-13B is based on the latest generation of iFLYTEK Foundation Model, and has been trained on multiple core tasks derived from scientific literature. As a large language model tailored for academic research scenarios, it has shown excellent performance in Paper Assisted Reading, Academic Translation, English Polishing, and Review Generation, aiming to provide efficient and accurate intelligent assistance for researchers, faculty members, and students.Python00
GOT-OCR-2.0-hf阶跃星辰StepFun推出的GOT-OCR-2.0-hf是一款强大的多语言OCR开源模型,支持从普通文档到复杂场景的文字识别。它能精准处理表格、图表、数学公式、几何图形甚至乐谱等特殊内容,输出结果可通过第三方工具渲染成多种格式。模型支持1024×1024高分辨率输入,具备多页批量处理、动态分块识别和交互式区域选择等创新功能,用户可通过坐标或颜色指定识别区域。基于Apache 2.0协议开源,提供Hugging Face演示和完整代码,适用于学术研究到工业应用的广泛场景,为OCR领域带来突破性解决方案。00- HHowToCook程序员在家做饭方法指南。Programmer's guide about how to cook at home (Chinese only).Dockerfile013
Spark-Chemistry-X1-13B科大讯飞星火化学-X1-13B (iFLYTEK Spark Chemistry-X1-13B) 是一款专为化学领域优化的大语言模型。它由星火-X1 (Spark-X1) 基础模型微调而来,在化学知识问答、分子性质预测、化学名称转换和科学推理方面展现出强大的能力,同时保持了强大的通用语言理解与生成能力。Python00- PpathwayPathway is an open framework for high-throughput and low-latency real-time data processing.Python00