【FPGA XDMA AXI Bridge 模式】PCIe:BARs 和 AXI:BARs 含义解析

一. XDMA IP核两种模式

Xilinx的 DMA/Bridge Subsystem for PCI Express IP核中,支持普通的XDMA模式,但是这种模式只允许主机端发起PCIe 读写请求,FPGA内部无法主动发起读写请求,也即FPGA无法主动读写HOST的内存。

而该IP核的另一种模式,AXI Bridge模式则支持HOST主动读写,以及FPGA主动读写。该模式下有个参数需要配置,分别是PCIe:BARs以及AXI:BARs。而上述的普通模式只有PCIe:BARs需要配置。下面详细说说这两个参数的含义。

二. PCIe:BARs

首先要明确一点,在基于FPGA的PCIe子系统中,主机HOST想要访问PCIe Endpoint(FPGA)中的寄存器(假设寄存器名为gpio_ctrl)数据时,会涉及到 三个重要的地址。

  1. PCIe 寄存器中的Bar寄存器中存放的值。该值表示的是一个HOST端的地址。HOST想要访问PCIe Endpoint端中的寄存器时,有且仅能通过这个地址去访问。关于这个地址会被设置成多少,完全取决于HOST系统的BIOS程序,在主机上电时自己决定的,跟FPGA端的任何一个地址都无关。
  2. gpio_ctrl寄存器在映射在FPGA域内的地址。此地址可在vivado中的Address Editor或Address Map中找到。在FPGA内部想访问这个寄存器时,直接访问在Address Editor查到的地址即可。但是在HOST端,则不行。
  3. XDMA IP核中的PCIe to AXI Translation中填的地址。该地址表示HOST端访问FPGA内部地址时的偏移量。

以一个例子说明这三个地址的关系以及转化过程。假设Bar寄存器为0x1000,gpio_ctrl寄存器在FPGA内部的地址为0x4000_0000,XDMA IP核中的PCIe to AXI Translation设置为0x1000_0000。
在这里插入图片描述

三. AXI: BARs

同样,在基于FPGA的PCIe子系统中,FPGA中的IP想要访问主机HOST的内存时,需要涉及到 两个重要的地址。

  1. 如下图所示,PCIe IP中的AXI:BARs栏目下,需要设置AXI BARs的数量,这里以3为例子,即一共有三个AXI BAR。每个AXI BAR都需要设置一个**"AXI to PCIe Translation"地址**,该地址表示要访问的主机端的基地址。这里一共可以设置三个主机端的物理地址(BAR0= 0x10_0000,BAR1= 0x200_0000,BAR2= 0x3000_0000),后续通过2(下文)的地址进行访问。
    在这里插入图片描述
  2. 这个PCIe IP核在FPGA AXI域中映射地址。如下图所示,由于1中设置了三个AXI BARs,所以可以在Address Editor看到有三个BAR的地址,我们可以设置每一个BARs在FPGA域中的地址,以及每一个BARs的大小。后续通过这些地址去访问HOST中的物理内存。
    在这里插入图片描述
    以一个例子说明这两个地址的关系以及转化过程。假设当前FPGA中想要访问主机端物理内存为0x200_0001处的数据。那么此时在FPGA中需要读取 “BAR1的地址” 加上 “0x200_0001减去 AXI to PCIe Translation”。
    也即是在FPGA中读取 0x00_A010_0000 + 0x200_0001 - 0x200_0000 = 0x00_A010_0001 处的内存。
    即可完成对HOST端0x200_0001处物理内存的访问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值