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

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

一、先分清两个概念本质

  1. MMIO(内存映射 IO)

是CPU 访问外设的寻址模型,属于软件 / 总线地址层面规范;

CPU 把外设寄存器映射到物理地址空间,用读写内存指令操控硬件,ARM、RISC-V、x86 全通用。

  1. 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光口收发数据

  1. 10G/100G 网口本身不实现 MMIO,只负责数据流

光口 / 电口只做高速数据包收发,没有地址寄存器、没有寻址逻辑:

• 网口不能直接被 CPU 访问;

• 网口的速率、开关、流控、故障诊断,全部要通过上游 PCIe 设备的 MMIO 寄存器配置;

• 百兆 / 万兆只是带宽差异,MMIO 控制逻辑完全同一套,只是 DMA 吞吐、FIFO 大小寄存器参数不同。

三、分两层讲清楚依赖关系

层 1:控制通道(MMIO + PCIe)

MMIO 是控制指令的载体,PCIe 是控制指令的传输线缆:

  1. 主机要修改网卡速率从 10G 切 100G:

软件写 MMIO 地址里的速率配置寄存器;

  1. 该写操作通过 PCIe 3.0 物理链路下发到网卡芯片;

  2. 网卡硬件根据寄存器值切换 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 寻址模型不变。

  1. 10G/100G 网口依赖 PCIe 设备,间接依赖 MMIO

网口只是 PCIe 网卡的对外数据接口,自身无控制寄存器;所有功能配置、状态读取都要经由 PCIe 的 MMIO 寄存器完成;网口带宽高低不改变 MMIO 控制方式,仅影响 DMA 吞吐参数。

  1. 对比区分

• 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 网口只负责 "收发业务数据流"