调通DMA系统集成中遇到的问题
先写出整个流程,一环一环来找问题所在:
整个流程:
1.用c语言cnn源码用HLS生成相应的IP core
2.在vivado中加入IP core,生成系统
3.生成比特流,放入SD卡,烧录入FPGA中
4.服务器编译对单片机的Bench程序,并用单片机运行
目前最有可能出现问题:
一、HLS生成的IP core有问题:
方法:
1.用HLS和骆工源码生成cnnL和simpleIO,放入系统实验是否出问题。
2.直接用骆工源码和FIFO实验是否出问题。
实验步骤:
1.用vivado搭建实验FIFO创建实验,整流程实验无误。
2.用骆工cnn IP替代FIFO IP
3.用cnnL IP替代FIFO IP
实验过程:
1.vivado搭建FIFO系统,生成比特流。
运行成功
这个结果表明fifo的IPcore正常工作
另外,如果用dmabench运行这个程序
表示dmabench这个单片机的程序虽然不能调用fifo的IPcore,但是fifo的IPcore还是正常工作的。并且dmabench这个程序是正常的。
2.在vivado上用骆工cnn替代fifo模块
运行失败
运行结果:用骆工的dmabench,
用fifoBench
这个结果说明对应的cnn的IP core根本没有工作,因为单片机没有实现对IP core的读和写。我们认为骆工给的IP core是没有问题的,所以我们从搭建系统之中找相应的问题。
二、我们基本断定为系统搭建问题??先排除系统搭建问题,再来排除IPcore的问题。
3.可能针对constant的位长有误,之前位宽为1,值为1,现在改为位宽4096,值为1,其他不变再试一下
依然运行失败,错误与上个实验一模一样,这表示IP core根本没工作
4.位宽为1,值为5,再试。
运行失败。
5.更改rst的链接位置,我们忽然发现两种rst管脚,一种是system产生的,只给system reset模块提供中断,另一种由system reset模块产生,给其他所有模块产生中断。我们两种都试一下。
cnn的rst有以下几种选择:
接常数0
接system产生的rst
接system reset产生的rst
5.1我们可能需要cnn一直工作,所以我们将其接常数0试一下
运行失败
5.2用cnn的rst接系统输出的rst
连接到系统之后就好像要出问题了,因为警告了
我们将连线去掉,重新进行auto connection
多了个rst_rtl给了system reset模块。
我们还用cnn的rst连到sys reset模块出的rst上,validate后没有warning与error,于是我们生成比特流。
直接writing之后就没有反应,之前还有reading这个printf,难道加入中断不对导致了系统停止?并且点击回车之后,之前即使没有打出行也有反应,现在一点反应都没有。所以我们推断是rst加入不对。
5.3在此图基础上,我们继续把相应的换成FIFO,然后再试。
我们一直用的是AXI4-Stream Data FIFO
实验失败,说明系统的搭建是有问题的,中断会一直中断。
6 processingsystem中管脚的问题,
去掉AXI中的GP0
重新搭系统连cnn
这次生成了完全不一样的系统,与之前的系统不一样,只有一个interConnect
实验失败。
7.在processing system中axi中加入non secure enablement,使能GP0
实验失败
8.骆工帮忙搭建系统cnnLuo,在与DMA相连的AXI上多使能了一个管脚,因为DMA是一个进一个出。(不知为什么看上去与之前的一样)
终于成功!我们详细记录下正确的操作步骤。
见