xilinx PCIe PIO工程仿真及验证

验证环境

window 10 系统

vivado 2017.4

KC705 开发板

验证目的

1)通过xilinx 提供的PIO example 入门pcie。

2)抓取pcie tlp报文,学习TLP报文。

背景知识

首先了解一下pcie的应用,在PCIE中有两种数据传输方式:

DMA(Direct Memory Access),直接内存访问,在该模式下,数据传送不是由CPU负责处理,而是由一个特殊的处理器DMA控制器来完成,因此占用极少的CPU资源。

PIO(Programmed Input-Output),可编程输入输出,在该模式下,数据传送由CPU执行I/O端口指令来按照字节或更大的数据单位来处理,占用大量的CPU资源,数据传输速度也大大低于DMA模式。举例老说,在DMA方式下,如果copy文件的同时在播放mp3音乐,则不受丝毫影响;如果在PIO模式下,则会发现音乐声时断时续,这是因为大部分CPU资源被文件传输占用。

目前笔者也在研究pcie dma实现(毫无头绪),这里先记录下PIO学习过程。

工程搭建

如下图所示,选择KC705开发板,通道数X8, 速度5.0GT/s, 其他保持默认就行。
 

xilinx PCIe PIO工程仿真及验证_第1张图片

然后生成example例程如下

xilinx PCIe PIO工程仿真及验证_第2张图片

直接综合,实现,生成mcs文件下载到板卡。

exampe 的逻辑框图如下

xilinx PCIe PIO工程仿真及验证_第3张图片

PIO example 工程的功能是FPGA内部开辟了4 * (512 *32)的RAM区,可以通过pcie接口做读写测试,地址范围 0x000- 0x7ff, 位宽32bit。

仿真流程

PIO工程提供了完整的PIO仿真模型及testbench文件,直接在vivado菜单栏点击 run simulation 就可开始仿真。

上机调试

将开发板插在主机的pcie插槽上,然后打开windriver软件,可以发现开发板被找到,显示设备如下:

xilinx PCIe PIO工程仿真及验证_第4张图片

xilinx PCIe PIO工程仿真及验证_第5张图片

可以看到当前开发板pcie的配置信息,而且申请了bar0空间,接下来对bar0空间读写测试

xilinx PCIe PIO工程仿真及验证_第6张图片

读写地址0 ,写入0x11223344 ,读出来0x11223344 , 读写正确

xilinx PCIe PIO工程仿真及验证_第7张图片

读写地址0x7fc, 写入0xaabbccdd, 读出来0xaabbccdd, 读写正确

xilinx PCIe PIO工程仿真及验证_第8张图片

读写地址0x800, 写入0x01020304 ,读出来0xffffffff, 读写错误。

xilinx PCIe PIO工程仿真及验证_第9张图片

因为PIO example工程申请的ram地址空间为0x000-0x7ff,所以无法对0x800地址做读写操作。

通过ILA抓取pcie报文,这里不记录了。

工程案例

最近在做一个PCIE相关的项目,用的altera的FPGA, 简单的PIO模式访问,逻辑也很简单,就是读写一下RAM和register, 结果上板之后,操作系统可以扫描到板卡, DEVICE ID /VERDOR ID都是对的,枚举到bar0 memory空间, 但是就是无法读写bar0,通过signaltap抓取avalon-st报文,发现经过pcie core后没有任何报文发出, bar_hit也一直显示0,实在摸不到头脑。 最后查到pcie的配置寄存器有问题,

xilinx PCIe PIO工程仿真及验证_第10张图片

cmd寄存器读到的值为0 ,

xilinx PCIe PIO工程仿真及验证_第11张图片

xilinx PCIe PIO工程仿真及验证_第12张图片

xilinx PCIe PIO工程仿真及验证_第13张图片

xilinx PCIe PIO工程仿真及验证_第14张图片

不知道为什么altera pcie的 command register初始化为0,还是我工程的问题, 最后软件将 command register 写为7 , 终于可以正常读写,avalon-st上也可以抓取到报文了。

 

参考文档

pg054

你可能感兴趣的:(PCIE)