上篇文章探讨了基于Xilinx PCIE IP核的PCIE最小系统搭建和开发框架,这篇文章聚焦于IP核本身,讨论其中的一些关键配置和用法。
1. 第一页
Pcie Block Location:选择PCIE位置。PCIE 以硬核形式存在于片上,一些芯片(比如690T)会存在多个PCIE硬核,需要开发者指定IP位置。同时,PCIE使用GT接口作为其底层数据传输的实现载体。每个PCIE硬核都存在若干个“最优”的GT BANK选择,通常位于PCIE硬核附近。在板级硬件布局允许的情况下,推荐使用最优的GT BANK。否则,可能会影响工程的布局布线,不利于时序收敛,甚至影响PCIE速率。
如上图所示,该芯片共有三个PCIE 硬核 (X0Y0~X0Y2),我选择将PCIE实现于X0Y0,同时选择GT BANK111、BANK112作为数据接口。
Maximum Link Speed:选择PCIE速率 ,2.5G对应GEN1,5G对应GEN2,8G对应GEN3。
需要注意的是,PCIE实际运行速率取决于与主端自协商后的结果,如果上述PCIE和GT位置距离较远,实际速率可能会小于配置值。例如配置的是8G,但由于PCIE硬核距离GT太远,导致与主端自协商到了GEN2(5G)。
其他配置包括参考时钟频率,AXI总线时钟频率和位宽,是否增加DRP端口等都是常见配置,不再赘述。
2、第二页
主要是PCIE基本信息配置,vender ID,Device ID等信息将会在主端进行PCIE扫链的时候由主端获取。其余配置一般默认就好。
3、第三页
本页主要是PCIE BAR地址设置,PCIE和很多通信协议一样,其架构是基于地址的数据传输(与之对应的是流式传输,比如视频数据)。
BAR地址的意思是:我们FPGA作为PCIE的从端设备,想要占据主端设备的地址空间,这些地址空间有多少段,每一段的大小是多少,都需要在本页进行配置。
上图中只有PF0_BAR0被勾选,说明我们只要一段空间;
“size”为4KB,即FPGA的PCIE占据主端地址空间长度为4KB;
“64Bit”没有勾选,说明地址是32位的;
Value:暂时不明确这个是什么作用,默认设置不影响使用。
Pcie to AXI Translation:地址转换增量。PCIE主端会根据BAR配置为其分配地址空间,假设主端分配的空间其实地址为A,Pcie to AXI Translation配置为B,那么主控端对A地址的访问,到达从端后将变为对B地址的访问。
举例说明:为FPGA分配的地址空间为0x58000000,Pcie to AXI Translation设置为0x00000000。那么在主端对0x58000000在到达FPGA段后将变成对地址0x00000000的访问。
第四页:本页保持默认设置即可,非必要不需要更改。将来用到会更新。
第五页:
AXI to PCIe translation:和上述Pcie to AXI Translation类似的一个配置。
PCIE为双向传输,主端可以访问从端的地址空间,同时也会为从端开辟一个地址空间,共从端访问,此时也可以加一个类似的地址偏移。具体规则如下
假设:
PCIE S_AXI端起始地址为A
AXI to PCIe translation设置为B
那么FPGA外设通过PCIE S_AXI端对地址A的访问等价于对主端地址B的访问。
举例说明,在FPGA内部,通过一个CDMA IP核与PCIE S_AXI端口连接,以实现FPGA对PCIE主端地址空间的访问
同时,PCIE A_AXI端口的地址分配如下图所示,这意味着CDMA可通过0x80000000这个地址开始通过PCIE访问主端地址空间
同时,AXI to PCIe translation设置为0x00000000
那么CDMA对0x80000000地址的访问,到了主端那边,就成了对地址0x00000000的访问。
通过上述的规则,我们可以有一个相对简单的设置方法。
首先,从端FPGA通过PCIE 访问主端地址空间是有限制的,不是所有空间都可以被访问到。比如主端是一个CPU,那么cpu软件开发人员可以设置从端pcie可以访问的地址空间范围,可能是一个DDR或电子盘所对应的空间。
我们就假设cpu端开放了DDR地址空间供从端PCIE设备访问,起始地址为0x80000000,大小为2GB,即0x80000000~0xFFFFFFFF。
那么我们可以设置AXI to PCIe translation为0x80000000,同时设置PCIE S_AXI的地址范围为0x80000000~0xFFFFFFFF。那么根据上述规则可以推导出:CDMA访问PCIE S_AXI端口,地址是0x80000000,到了CPU那边,地址仍为0x80000000,这样子就实现了CDMA直接对CPU端DDR的访问,中间再无需任何地址转换动作。
IP核后续的配置项都可以保持默认设置,不用管。若后续用到了,再在文章中进行更新。