You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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):
    1. CPU通过驱动调用MMIO读写接口(如iowrite32/ioread32),内核先将虚拟地址转换为BAR对应的物理地址。
    2. 操作系统PCIe驱动栈根据请求类型构造TLP:
      • 写操作:生成Memory Write TLP,包含事务类型标识、目标MMIO物理地址、数据长度、payload数据及校验字段。
      • 读操作:生成Memory Read TLP,包含事务类型标识、目标MMIO物理地址、请求数据长度及校验字段。
    3. 构造完成的TLP由主机根复合体发送到PCIe链路。
  • FPGA侧(主动访问主机MMIO,若配置了主机侧BAR):
    FPGA用户逻辑通过内部总线发起读写请求,PCIe硬核会自动将总线事务转换为符合PCIe规范的TLP报文,经pcie_mgt发送到主机。

内容的提问来源于stack exchange,提问作者happychild

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 02:22:53