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 卡1MMIO BAR 空间核心控制区一段物理内存地址窗口里面存放设备所有控制寄存器• 网卡MAC 配置、中断掩码、TX/RX 队列门限、错误状态、速率模式10G/100G 切换• FPGADMA 描述符、寄存器读写、时钟、复位、EMIO 控制CPU 通过 ioremap 映射虚拟地址MMIO 读写寄存器下发指令这是主机控制网卡 / FPGA 的唯一通道。2DMA 缓冲区空间数据搬运大块内存用于网卡和 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 PCIeMMIO 是控制指令的载体PCIe 是控制指令的传输线缆1. 主机要修改网卡速率从 10G 切 100G软件写 MMIO 地址里的速率配置寄存器2. 该写操作通过 PCIe 3.0 物理链路下发到网卡芯片3. 网卡硬件根据寄存器值切换 Serdes 速率。没有 MMIOCPU 无法对 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/RX3. MMIO 配置 DMA 环形缓冲区4. 数据包经 PCIe 3.0 DMA 传给 FPGA5. FPGA 内部逻辑转发至 100G 光口对外传输6. 光口接收数据反向走 DMA、PCIe、MMIO 中断通知 CPU。全程MMIO 负责 “发命令控硬件”PCIe 负责 “传命令和大数据”100G 网口只负责 “收发业务数据流”
MMIO 和 PCIe 3.0 / 10G/100G 网口的完整关系梳理
发布时间:2026/6/26 4:00:07
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 卡1MMIO BAR 空间核心控制区一段物理内存地址窗口里面存放设备所有控制寄存器• 网卡MAC 配置、中断掩码、TX/RX 队列门限、错误状态、速率模式10G/100G 切换• FPGADMA 描述符、寄存器读写、时钟、复位、EMIO 控制CPU 通过 ioremap 映射虚拟地址MMIO 读写寄存器下发指令这是主机控制网卡 / FPGA 的唯一通道。2DMA 缓冲区空间数据搬运大块内存用于网卡和 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 PCIeMMIO 是控制指令的载体PCIe 是控制指令的传输线缆1. 主机要修改网卡速率从 10G 切 100G软件写 MMIO 地址里的速率配置寄存器2. 该写操作通过 PCIe 3.0 物理链路下发到网卡芯片3. 网卡硬件根据寄存器值切换 Serdes 速率。没有 MMIOCPU 无法对 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/RX3. MMIO 配置 DMA 环形缓冲区4. 数据包经 PCIe 3.0 DMA 传给 FPGA5. FPGA 内部逻辑转发至 100G 光口对外传输6. 光口接收数据反向走 DMA、PCIe、MMIO 中断通知 CPU。全程MMIO 负责 “发命令控硬件”PCIe 负责 “传命令和大数据”100G 网口只负责 “收发业务数据流”