写在最前面
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的王博
工程编写:
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, 写速率快乐很多
读写同时测试:
只读测试:
只写测试:
调试完毕。