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 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意2 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码2 天前
嵌入式学习路线
学习
毛小茛3 天前
计算机系统概论——校验码
学习
babe小鑫3 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms3 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下3 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。3 天前
2026.2.25监控学习
学习
im_AMBER3 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode
CodeJourney_J3 天前
从“Hello World“ 开始 C++
c语言·c++·学习