pcie学习记录(1):基于xdma的工程搭建

写在最前面

Vivado的版本!!!(后面验证是错误的思路,可以不用看)

XDMA PCIE开发期间两个版本问题的解决https://blog.csdn.net/kris_paul/article/details/128131527

我说实话在这里卡了很久,哪怕是最简单的bram的测试。我的板子是ALINX的AKU60,FPGA芯片为xcku060-ffva1156-2-i。我前两周的开发环境是vivado2020.2,这是我实验室电脑上安装的版本。但是一直跑不通,我一直以为是程序的问题。后面重新弄了几次,还是不行。运行xilinx官方的simple_xdma,exe时,甚至会出现蓝屏卡死,重启的状况。

后面我查看了ALINX的开发手册,将他们提供的pcie测试历程烧录进板卡,可以成功正常通信:

然后我将这个例程用我当前的开发环境(vivado2020.2)打开,什么都不操作,只是进行了ip核升级,然后重新进行了bitstream的生成,再烧录进去,就不行了!

后面我用了ALINX手册中的开发环境,重新装了一个vivado2017.4,就可以了!!!所以我一直卡在了版本问题。大家的开发板如果有例程的话,建议用对应的开发环境。

我将这个问题在xilinx的中文社区进行了提问,等待大佬能够解决。

解决了!!!

哈哈哈,解决了,不是版本问题,是xdma的参考时钟需要进行约束,总结:少了一句约束,在这居然卡了两三周,我真是。以后得注意:

xdma约束https://adaptivesupport.amd.com/s/feed/0D54U00008xrzf6SAA?language=zh_CN 这是在amd官网找到的解决方案。

我一开始是在综合的时候进行的io口分配,导致xdc中的约束是这样的:

然后进行implement也没时序报错,就一直修改bd设计了,没关注这里了。

后面我又生成了一个xdma的例程(因为一直在进行bd设计,所以没有考虑这个步骤,属实是粗心了)。提供了一个约束文件,里面是这样的:

然后王博的xdc中也是这样:

然后就瞬间懂了,加了一个时序约束,终于在我的vivado2020.2上测试成功了!

前面的疑问就不删了(vivado版本问题),也算是自己探索的一步骤。

0,参考

大家一定要去学下下这个:花个3,4天简单通读,有一个简单的结构在脑子中,后面使用的时候随时查询各自详细的部分。PCIe扫盲系列博文连载目录篇(第一阶段)-Felix-电子技术应用-AET-中国科技核心期刊-最丰富的电子设计资源平台 (chinaaet.com)https://blog.chinaaet.com/justlxy/p/5100053251

记录一下在学习过程中参考的资料:

1,xdma网上一般推荐在block_design里面实现,所以关于地址映射需要考虑

block design中关于地址映射问题https://blog.csdn.net/m0_61298445/article/details/126323544

2,板卡与pc机的pcie确认在上电时就会确认,所以需要将程序烧写进板卡的flash中

烧写程序进flashhttps://blog.csdn.net/weixin_42837669/article/details/121625188擦除flash中程序https://blog.csdn.net/AlibabaApple/article/details/123114304

3,XDMA因为其接口众多,建议使用block_design开发,网上查询的资料都是BD为主。

参考模块搭建:

Xilinx XDMA说明和测试-MMhttps://blog.csdn.net/weixin_43956013/article/details/128608551【FPGA干货教程】10分钟上手Xilinx XDMA IP核 手把手搭建测试工程https://www.bilibili.com/video/BV1QsU7Y8EgS/?spm_id_from=333.337.search-card.all.click&vd_source=ab9cce66f1d596ced0a60f784d99d365

4,站内很好的关于xdma的模块介绍

新手学习Vivado XDMA (1) - 配置详细分析https://blog.csdn.net/qq_18553915/article/details/136524372 PCIE XDMA调试记录https://blog.csdn.net/hy_520520/article/details/120545128

5,GitHub的王博

WangXuan95 / Xilinx-FPGA-PCIe-XDMA-Tutorialhttps://github.com/WangXuan95/Xilinx-FPGA-PCIe-XDMA-Tutorial?tab=readme-ov-file

工程编写:

xdma使用gen3.0x8

1,xcku060_bd_xdma_bram

1,bram_bar:与xdma的bar_axi_lite接口相连接,用于测试bar空间的使用。

2,bram_ddr:与xdma相连接,用于数据交互。

3,几个ila,用于上板时抓取数据。

2,xcku060_bd_xdma_ddr

上图为我搭建的xdma测试用例,包括:

1,bram:与xdma的bar_axi_lite接口相连接,用于测试bar空间的使用。

2,ddr4:与xdma相连接,用于数据交互。

3,几个ila,用于上板时抓取数据。

上板测试

推荐使用两台电脑,一台用于抓取ila数据,帮助我们更好的去了解xdma的数据流向与详情。另一台用于插FPGA板卡。

实物连接:

1,xcku060_bd_xdma_bram

一开是认为是版本问题,在vivado2017.4中开发的。后续也成功的在vivado2020.2中实现。

这个模块实现的是基于bram的xdma测试模块:bd设计框图如下:

使用一个bam与xdma的M_AXI相连接,进行交互数据的处理。另外一个bram与AXI-LITE相连接,作为bar空间的存储单元。

ila抓取,使用Drive Wizard进行bar空间的写入(写入12345678):

速度测试:

数据AXI抓取:

2,xcku060_bd_xdma_ddr

与前面相比只是将存储数据的容器从bram换成了ddr,这也间接证明了bd在设计带AXI接口时的快速开发能力。

mig pass:

xilinx官方例程:

测速计算与后续基本一致:

ila抓取,数据:

ila抓取,axi_lite,bar空间:

测速软件:可以看到相比与bram, 写速率快乐很多

读写同时测试:

只读测试:

只写测试:

调试完毕。

相关推荐
大丈夫立于天地间2 小时前
OSPF - 1类LSA(Router-LSA)
网络·网络协议·学习·信息与通信
Chrikk5 小时前
NCCL学习笔记-概念全解
笔记·学习
GHL2842710905 小时前
redis学习-value数据结构
数据库·redis·学习
vortex55 小时前
正则表达式进阶学习(一):环视、捕获分组与后向引用
学习·正则表达式
武昌库里写JAVA6 小时前
Redis奇幻之旅(四)4. Redis Cluster
java·开发语言·spring boot·学习·课程设计
酒与花生米6 小时前
【Vue学习】Vue 组件实例的生命周期(四个阶段,八个钩子)
javascript·vue.js·学习
开心邮递员6 小时前
关于元学习的相关论文
学习
私人珍藏库6 小时前
《空舞的巨兽》官方学习版
学习
山山而川粤8 小时前
共享充电宝系统|Java|SSM|VUE| 前后端分离
java·开发语言·后端·学习·mysql