图11 PCIE IPCore Parameter Set Page
-Device Identification Registers
这个目录下的参数设置了当前使用的pcie核的一些身份信息,在配置空间里面,在Qsys系统下,逻辑自身读取不到这些寄存器,每个公司都有自身的ID,以做区分。Altera公司的参数设置如上图所示。
图12图11 PCIE IPCore Parameter Set Page(Cont.)
-Buffer configuration
这个参数设置了接收与发送数据的payload的大小,该值不仅与器件有关系,还要符合pcie协议中规定的数据长度。本设计中,Maximun payload size选择为256Bytes,RX buffer credit allocation选择为Maximun,其余灰色的选项是系统自动根据前面的设置计算出来的。 -Avalon-MM Settings
这个选项设置了与Avalon总线相关的参数。 -Peripheral mode
是指pcie的工作模式,有两个选项Requester/Completer和Completer-only;
本设计中选项Requester/Completer,有关Requester与Completer的相关资料,要参考PCIE2.1的相关标准,里面有详细的描述。
图13图11 PCIE IPCore Parameter Set Page(Cont.)
Address Translation这个选项下的参数直接与数据传输相关,即DMA传输数据要依靠这个来完成。
-Address translation table configuration 这个参数是指描述符的属性,即cpu维护的是动态的描述符链还是静态描述符链。所谓动态描述链,是指cpu要实时更新描述链;相对的,静态描述符链则是指描述符链固定不变。选择哪种方式,取决于系统方案,本设计中,采样动态描述符链的方式。即使选择了动态模式,cpu也可以根据情况维护自己的链表是动态的还是静态的。 -Number of address pages
这个参数是指地址翻译表/描述符链中的最大的描述符个数,实际的描述符个数可小于该值,但不可大于该值,该值以2^N的形式存在,最大值为512. -Size of address pages
这个值限制了描述符中每页中传输数据的大小。这个大小与实际应用有关,可根据实际需要来定。本设计中,选择一个page 4Kbytes。
对于以上的三个参数,必须与cpu那边的配置一样,否则DMA传输肯定不会成功。 设置好以上参数以后,点击右下角的finish,即可以生成Qsys系统下的PCIE IPCore了。
以上内容说明了生成用到的component的生成方法以及参数设置等情况,里面涉及到的一些内容没有详细说明,接下来的一部分内容将进行补充。
第一个要补充的内容是有关CRA的描述。CRA是Control Registers Access的缩写,字面意思是控制寄存器访问。在Qsys系统中,fpga的fabric不能访问这些内容,只有cpu才有权限。在Avalon-ST的接口中,fpga的fabric也可以通过接口访问,这里不做说明。pcie IPCore的CRA空间大小共有16Kbytes,这16Kbytes又分为4个子空间,每个子空间4Kbytes,如下表所示:
表7 CRA地址空间分配表
0x0000~0x0fff这个4Kbytes空间只有cpu能否访问,本设计中不做深入探讨。
0x1000~0x1fff这个地址空间是有关地址映射表的,是本设计中软件需要仔细研究的内容 0x2000~0x2fff是保留的。
0x3000~0x3fff是有关中断的一些描述,稍后会介绍。 这里对本设计最为重要的就是地址翻译表了。
Avalon Address 根据(描述符/数据地址)hostMemory的地址和映射表以及固定Slave 地址组成。
hostMemoryAvalon address 0FPGA固定值0x01PCI-E High Address 311211PCI-E Low Address 011位最多支持512个描述符,存放描述符的索引从0-511High indexPCI-E Low Address 12110Slave Base Addr3121203100x1000310x10040x1000Pci-e Address 121010Pci-e h address(64位时有用,32位保留)310...0x1FFF0x1FFF映射表
图14地址转换示意图
下表是translation table的相关说明。
表8 translation table
下面这段说明了Avalon地址的含义。
图15 地址转换示意图
按照以上方式就可以完成地址转换了。
下面补充下有关中断的内容。
PCIE支持的中断类型有以下几种: -MSI interrupt/MSI-X interrupte -Legacy interrupt -INTX interrupt
就本设计而言,由于使用的是Qsys系统,所以MSI/MSI-X interrupt就不支持了,支持的是INTX虚拟中断。因为INTX通常情况下是采用管脚的方式给cpu处理,所以pcie这边的INTX是虚内的中断管脚。当触发一个中断时,PCIE IPCore的配置空间里面有关中断的寄存器会发生变化,这样PCIE IPCore会发送一个中断TLP包给cpu,当cpu收到中断后,再查询PCIE IPCore配置空间里面的寄存器,以确认触发了哪个中断,从而响应对应的中断处理程序。PCIE IPCore的配置空间里面涉及到中断的寄存器有以下几个:
表9 Register Map