win10 64bit
modelsim 10.6d 64bit
vivado 2017.4
KC705开发板
此ip可以分为两部分, AXI MM/S bridge + AXI-S Enhanced pcie.
AXI MM/S bridge
用户侧逻辑接口为标准AXI4总线,通过 AXI MM/S bridge 模块,转换成 AXI-stream 数据流
AXI-S Enhanced pcie
相当于 “7 series intergrated block for pci express” 这个ip core。
由于AXI-stream 协议不携带地址属性,转换成AXI4总线后,用户接口直接对接AXI4,可以很方便使用很多现成AXI4接口的ip核,应用起来更方便。
包含桥核中用于动态映射AXI4的寄存器使用AXIBAR参数将内存映射(MM)地址范围提供给一个地址作为PCIe地址
only support the INCR burst type .
链接到 axi interconnect 作为一个slave设备,处理axi master(例如CPU)的读写请求。
slave bridge 提供一种AXI memory address 到pcie address转换的方法,axi master的写请求被转换成1个或者多个MemWr TLP,
最多支持8个活动的写请求。axi master的读请求被转换成MemRd,同时compeletion timeout timer检测开启, 等待收到compeletions,返回数据给axi master, 最多支持8个活动的读请求。
only support the INCR burst type .
master bridge 处理从 AXI-S enhance pcie收到 MemWr, MemRd tlp报文,将pcie域的地址翻译为AXI memory域的地址。
FIXED:burst中的每个transfer都使用相同的地址v |
INCR:burst中的每个transfer的地址在上一个transfer的基础上递增 |
WRAP:与INCR burst类似,只是地址会卷绕(就是增加到某个地址后又回到最低地址) |
参考时钟必须通过IBUFDSGTE原语接入,axi_aclk 输出时钟可以供其他相关AXI接口时钟,例如axi_interconnect的*_ACK管脚,和 axi_ctl_aclk管脚。axi_aclk不是和free-run 时钟,不能用作用户逻辑的系统时钟。
axi_aresetn与axi_aclk 同步。
C_AXIBAR_n表示AXI总线基地址,C_AXIBAR_HIGHADDR_n表示AXI总线最高地址,空间大小为8KB~2GB且必须为偶数。
example1
C_AXIBAR_0 = 0x12340000 (AXI_BAR0地址空间的基地址)
C_AXIBAR_HIGHADDR_0 = 0x1234FFFF (AXI_BAR0 地址空间最大地址)
AXI_AWADDR = 0x12340ABC (用户下发指令,操作AXI地址0x12340ABC)
C_AXIBAR2PCIEBAR_0=0x5671XXXX (Bits 15-0 do not matter as the lower 16-bits hold the
actual lower 16-bits of the PCIe address), AXI_BAR0映射到PCIE_BAR0地址。
最后经过计算,实际操作的物理地址为0x56710ABC.
example2
生成example过程比较简单,我这里全部保持默认属性,直接 open ip example 就行, example工程中自带仿真工程。
仿真模型框图
traffic generator 负责生TLP(MRd,MWr)报文, 首先对 AXI BRAM 地址0写入0x01020304 , 然后读AXI BRAM地址0,
提取返回cplD中数据,比较是否等于0x01020304.