TLP报文与MMIO空间的关系及FPGA PCIe驱动技术问询
CPU与Xilinx FPGA板卡PCIe MMIO交互问题解答
1. 实际板卡如何访问MMIO空间中写入的内容?
Xilinx FPGA板卡上的PCIe硬核(比如Integrated Block for PCIe)会将你配置的BAR地址空间直接映射到FPGA内部的总线架构(通常是AXI总线,包括AXI Lite/AXI Full)。当CPU通过驱动向MMIO地址写入数据时:
- PCIe硬核会把收到的写TLP转换为内部总线事务,将数据写入对应地址的FPGA内部存储单元(比如自定义寄存器、BRAM或者外挂的DDR)。
- FPGA端的用户逻辑可以直接通过内部总线接口(如AXI Lite)访问这些存储单元,读取CPU写入的内容,无需额外的协议转换。
2. MMIO读写操作时数据如何通过pcie_mgt传输?
pcie_mgt是FPGA板卡的PCIe物理层端口,负责处理物理层的信号传输:
- 主机到FPGA(写/读请求):CPU发起的MMIO请求经操作系统PCIe子系统转换为TLP报文,通过主机根复合体发送。TLP会被编码为PCIe物理层信号(如8b/10b或128b/130b编码的差分信号),通过PCIe插槽传输到FPGA的pcie_mgt。pcie_mgt完成信号解码、时钟恢复、错误校验后,将TLP传递给PCIe硬核的事务层/数据链路层处理。
- FPGA到主机(读响应):对于读请求,FPGA端生成读响应TLP,经pcie_mgt编码为物理层信号后,反向传输回主机根复合体,最终将数据返回给CPU。
3. MMIO流量产生时TLP报文如何生成?
TLP报文的生成分为主机侧和FPGA侧两种场景:
- 主机侧(CPU写/读FPGA MMIO):
- CPU通过驱动调用MMIO读写接口(如
iowrite32/ioread32),内核先将虚拟地址转换为BAR对应的物理地址。 - 操作系统PCIe驱动栈根据请求类型构造TLP:
- 写操作:生成Memory Write TLP,包含事务类型标识、目标MMIO物理地址、数据长度、payload数据及校验字段。
- 读操作:生成Memory Read TLP,包含事务类型标识、目标MMIO物理地址、请求数据长度及校验字段。
- 构造完成的TLP由主机根复合体发送到PCIe链路。
- CPU通过驱动调用MMIO读写接口(如
- FPGA侧(主动访问主机MMIO,若配置了主机侧BAR):
FPGA用户逻辑通过内部总线发起读写请求,PCIe硬核会自动将总线事务转换为符合PCIe规范的TLP报文,经pcie_mgt发送到主机。
内容的提问来源于stack exchange,提问作者happychild
相关产品推荐
相关产品推荐

