金华市住房和城乡建设局网站,狮山建网站,开平网站建设,程序员是学什么专业一. XDMA IP核两种模式
Xilinx的 DMA/Bridge Subsystem for PCI Express IP核中#xff0c;支持普通的XDMA模式#xff0c;但是这种模式只允许主机端发起PCIe 读写请求#xff0c;FPGA内部无法主动发起读写请求#xff0c;也即FPGA无法主动读写HOST的内存。
而该IP核的另…一. 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需要配置。下面详细说说这两个参数的含义。
二. PCIeBARs
首先要明确一点在基于FPGA的PCIe子系统中主机HOST想要访问PCIe EndpointFPGA中的寄存器假设寄存器名为gpio_ctrl数据时会涉及到 三个重要的地址。
PCIe 寄存器中的Bar寄存器中存放的值。该值表示的是一个HOST端的地址。HOST想要访问PCIe Endpoint端中的寄存器时有且仅能通过这个地址去访问。关于这个地址会被设置成多少完全取决于HOST系统的BIOS程序在主机上电时自己决定的跟FPGA端的任何一个地址都无关。gpio_ctrl寄存器在映射在FPGA域内的地址。此地址可在vivado中的Address Editor或Address Map中找到。在FPGA内部想访问这个寄存器时直接访问在Address Editor查到的地址即可。但是在HOST端则不行。XDMA IP核中的PCIe to AXI Translation中填的地址。该地址表示HOST端访问FPGA内部地址时的偏移量。
以一个例子说明这三个地址的关系以及转化过程。假设Bar寄存器为0x1000gpio_ctrl寄存器在FPGA内部的地址为0x4000_0000XDMA IP核中的PCIe to AXI Translation设置为0x1000_0000。
三. AXI: BARs
同样在基于FPGA的PCIe子系统中FPGA中的IP想要访问主机HOST的内存时需要涉及到 两个重要的地址。
如下图所示PCIe IP中的AXI:BARs栏目下需要设置AXI BARs的数量这里以3为例子即一共有三个AXI BAR。每个AXI BAR都需要设置一个**AXI to PCIe Translation地址**该地址表示要访问的主机端的基地址。这里一共可以设置三个主机端的物理地址BAR0 0x10_0000BAR1 0x200_0000BAR2 0x3000_0000后续通过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处物理内存的访问。