news 2026/6/26 3:59:54

MMIO 和 PCIe 3.0 / 10G/100G 网口的完整关系梳理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MMIO 和 PCIe 3.0 / 10G/100G 网口的完整关系梳理

MMIO 和 PCIe 3.0 / 10G/100G 网口的完整关系梳理
一、先分清两个概念本质
1. MMIO(内存映射 IO)
是CPU 访问外设的寻址模型,属于软件 / 总线地址层面规范;
CPU 把外设寄存器映射到物理地址空间,用读写内存指令操控硬件,ARM、RISC-V、x86 全通用。
2. PCIe 3.0、10G/100G 以太网
是硬件高速传输物理接口 / 总线协议,属于数据传输通道;
• PCIe 3.0:主机与板卡之间的互联总线(网卡、FPGA 加速卡都插 PCIe)
• 10G/100G 网口:设备对外的数据收发光 / 电接口
二、核心关系:PCIe 设备完全依靠 MMIO 工作,万兆 / 百兆网口是 PCIe 设备上的数据业务口
1. PCIe 标准强制使用 MMIO 作为控制通道
PCIe 设备上电后,固件会分配两段资源给网卡 / FPGA 卡:
1)MMIO BAR 空间(核心控制区)
一段物理内存地址窗口,里面存放设备所有控制寄存器:
• 网卡:MAC 配置、中断掩码、TX/RX 队列门限、错误状态、速率模式(10G/100G 切换)
• FPGA:DMA 描述符、寄存器读写、时钟、复位、EMIO 控制
CPU 通过 ioremap 映射虚拟地址,MMIO 读写寄存器下发指令,这是主机控制网卡 / FPGA 的唯一通道。
2)DMA 缓冲区空间(数据搬运)
大块内存用于网卡和 CPU 之间搬运 10G/100G 数据包,同样通过 MMIO 配置 DMA 寄存器启动传输。
简单链路:
CPU 软件 → MMIO读写PCIe BAR寄存器 → PCIe 3.0总线 → 网卡/FPGA芯片 → 10G/100G光口收发数据
2. 10G/100G 网口本身不实现 MMIO,只负责数据流
光口 / 电口只做高速数据包收发,没有地址寄存器、没有寻址逻辑:
• 网口不能直接被 CPU 访问;
• 网口的速率、开关、流控、故障诊断,全部要通过上游 PCIe 设备的 MMIO 寄存器配置;
• 百兆 / 万兆只是带宽差异,MMIO 控制逻辑完全同一套,只是 DMA 吞吐、FIFO 大小寄存器参数不同。
三、分两层讲清楚依赖关系
层 1:控制通道(MMIO + PCIe)
MMIO 是控制指令的载体,PCIe 是控制指令的传输线缆:
1. 主机要修改网卡速率从 10G 切 100G:
软件写 MMIO 地址里的速率配置寄存器;
2. 该写操作通过 PCIe 3.0 物理链路下发到网卡芯片;
3. 网卡硬件根据寄存器值切换 Serdes 速率。
没有 MMIO,CPU 无法对 PCIe 设备下发任何配置命令。
层 2:业务数据通道(PCIe DMA + 10G/100G 网口)
1. MMIO 配置 DMA 寄存器,告诉网卡数据包存放地址、长度;
2. DMA 通过 PCIe 3.0 高速搬运内存数据包;
3. 数据包最终从 10G/100G 网口发出;
4. 网口收到数据后,DMA 通过 PCIe 回传到内存,MMIO 中断寄存器通知 CPU 收包。
四、关键结论:三者的绑定关系
1. MMIO 和 PCIe 强绑定,缺一不可
所有 PCIe 端点设备(网卡、FPGA、加速卡)必须基于 MMIO BAR 寄存器实现控制,PCIe 只是承载 MMIO 读写操作的物理总线,PCIe 3.0/4.0 只是带宽升级,MMIO 寻址模型不变。
2. 10G/100G 网口依赖 PCIe 设备,间接依赖 MMIO
网口只是 PCIe 网卡的对外数据接口,自身无控制寄存器;所有功能配置、状态读取都要经由 PCIe 的 MMIO 寄存器完成;网口带宽高低不改变 MMIO 控制方式,仅影响 DMA 吞吐参数。
3. 对比区分
• MMIO:控制接口(软件寻址模型)
• PCIe 3.0:主机与板卡的内部互联总线
• 10G/100G:板卡对外高速数据业务接口
五、举个直观例子(FPGA PCIe 卡带 100G 光口)
1. Linux 驱动 ioremap PCIe BAR0,得到 MMIO 虚拟地址;
2. MMIO 写寄存器配置 100G Serdes、开启 TX/RX;
3. MMIO 配置 DMA 环形缓冲区;
4. 数据包经 PCIe 3.0 DMA 传给 FPGA;
5. FPGA 内部逻辑转发至 100G 光口对外传输;
6. 光口接收数据反向走 DMA、PCIe、MMIO 中断通知 CPU。
全程:MMIO 负责 “发命令控硬件”,PCIe 负责 “传命令和大数据”,100G 网口只负责 “收发业务数据流”

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/26 3:58:38

FPGA高精度TDC设计:POR与ITI技术解析

1. FPGA高精度TDC设计背景与挑战在量子通信、激光雷达(LiDAR)和核物理实验等领域,皮秒级时间测量精度已成为关键需求。传统的时间-幅度转换器(TAC)虽然精度较高,但其模拟特性导致集成难度大、测量范围有限。相比之下,时间数字转换器(TDC)凭借…

作者头像 李华
网站建设 2026/6/26 3:58:17

基于ESP32的智能声光控照明系统:从原理到实践

1. 项目概述:从“声光控”到“智能照明”的进化几年前,我还在为一个老旧小区的楼道灯改造项目头疼。传统的声光控开关虽然解决了“人来灯亮,人走灯灭”的基本需求,但问题一大堆:深夜一点声响就亮灯扰民、阴天光线稍暗就…

作者头像 李华
网站建设 2026/6/26 3:57:33

从CTF实战解析SQL注入:过滤绕过与堆叠注入攻防

1. 从一道经典CTF题看SQL注入的攻防博弈最近在复盘一些经典的网络安全竞赛题目,发现“[极客大挑战 2019]easysql”这道题被反复提及,甚至衍生出“[suctf 2019]easysql”等多个变种。题目名字叫“easysql”,听起来简单,但里面蕴含的…

作者头像 李华
网站建设 2026/6/26 3:55:28

Lazypredict模型筛选工具:一行代码快速对比30+机器学习模型

1. 项目概述:当“一行代码跑遍所有模型”不再是口号你有没有过这种经历?刚拿到一个新数据集,满腔热血想建模,结果光是把 scikit-learn 里那二十多个回归器、三十多个分类器挨个写fit()、predict()、score(),就花了大半…

作者头像 李华
网站建设 2026/6/26 3:54:30

awesome-frontend:前端开发者的工具箱

文章目录awesome-frontend:前端开发者的工具箱awesome-frontend:前端开发者的工具箱 做前端开发,最头疼的事情之一就是选型。UI 框架用哪个?图表库选哪家?轮播组件哪个好用?每次开新项目,都要花…

作者头像 李华
网站建设 2026/6/26 3:53:15

2026年B端工业与专业服务业抖音运营行业分析及优质公司选型指南

一、宏观背景与行业痛点分析 2026年,短视频平台已彻底脱离"泛娱乐流量池"的定位,进化为B2B企业品牌建设与销售线索获取的核心商业基础设施。据艾瑞咨询及行业公开数据,2025年国内短视频代运营市场规模突破960亿元,预计2…

作者头像 李华