糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > xilinx PCIe PIO工程仿真及验证

xilinx PCIe PIO工程仿真及验证

时间:2023-05-07 10:42:35

相关推荐

xilinx PCIe PIO工程仿真及验证

验证环境

window 10系统

vivado .4

KC705开发板

验证目的

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

2)抓取pcietlp报文,学习TLP报文。

背景知识

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

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

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

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

工程搭建

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

然后生成example例程如下

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

exampe的逻辑框图如下

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

仿真流程

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

上机调试

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

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

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

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

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

因为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的配置寄存器有问题,

cmd寄存器读到的值为0 ,

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

参考文档

pg054

如果觉得《xilinx PCIe PIO工程仿真及验证》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。