Closed DragMou1204 closed 7 months ago
我的工程中没有在design source处添加这个accel_conv,直接在block design导入的ip,应该没有影响吧
考虑检查以下几点:
1.硬件部分:
accel conv的复位信号应该是正复位即peripheral_reset,与AXI通用IP通常采用的反复位reset_negative(resetn)不同
2.软件部分:
检查中断的绑定是否正确,中断的执行包括:中断信号->GIC->CPU->中断处理函数->回调函数
您需要检查外部中断在GIC中的编号是否正确(通常在头文件或源文件的开头中声明,zynq7000中的PL中断默认绑定编号是61),中断是否注册为CPU异常(通常在头文件或源文件的开头中声明,zynq7000的编号是5),mpsoc架构请自行查阅手册。
#define XIL_EXCEPTION_ID_IRQ_INT 5U //cpu异常绑定例子
若仍不能解决问题,则可以先使用中断例程熟悉中断的触发方式,而后逐个排查。
在本项目中,ap_done仅为一个简单的中断信号标志着任务完成,中断回调函数也仅修改了内存中的一个标志信号量,这个中断的处理并不复杂,如有条件可以在中断的各个过程逐级调试。
你说的这些我都检查了,我觉得不是中断的问题,我检查了很多遍中断了,也对比了很多网上的中断例子,实在是找不到原因,传输给dma和卷积计算ip的数据我也没改啊
我没有碰到过类似的问题,考虑其他细节呢?例如: 先拿逻辑分析仪ILA抓apdone的变化,有拉起就是中断问题,没拉起就是IP核内部的问题 然后检查IP核内部: 检查DMA位宽必须得是64位,DMA配置必须完全相同 然后拿ILA抓一下DMA给卷积IP的数据和回传的数据,方便的话截个图我看看
apdone上升沿触发没结果,apdone没有升高电平,dma配置是完全相同的
怎么抓DMA给卷积IP的数据和回传的数据,没有触发的该怎么抓
apdone没拉起就是卷积内部的问题,DMA给卷积IP的数据是AXI Stream协议,传输肯定有握手信号,握手信号tvalid
的拉起标志着传输开始,或者末尾标志tlast
代表传输完成。抓上述两个信号的低到高跳变,跳变前后看tdata
有没有传输数据
为什么还是什么都没呢,是我别的地方有问题吗
那个axi4 stream subset converter设置有什么讲究的吗,我有时设置的没有显示
那抓一下控制总线AXI lite control
,这个是任务信息的传递,是CPU直接连接conv ip的传输信号线。如果AXI lite control
有数据那就是DMA配置的问题,如果Lite control
也没有数据,请确认是否正确使用了ILA。如果正确使用了ILA,blockdesign发我看看,另外抓一下其他的AXI信号线看看情况。
Axi4 stream subset converter
的作用有几个,不同的converter作用也不同。
以源项目为例:
从相机输入端开始开始算,第一个converter用于把RGB565转RGB888
第二个(也就是preprocess前的converter)用于把图像的3通道转为4通道(第四通道补0)
第三个(也就是preprocess后的converter)用于把图像的4通道转为8通道(5-8通道补0,同上)
设置的slot0和slot1的所有valid上升触发,都没有触发,是我哪里设置错了吗
我看你design的slot0是连的控制线,这个不可能不触发的,否则就是AXI interconnect整个都没工作,如果图像能显示,你AXI连DMA的控制线也一定会有握手信号,考虑一下ILA使用方法是否正确:ILA启动后,需要在vitis运行项目程序才会有触发
我对accel_conv ip和dma 的axi-lite 的控制线和数据线在整个程序运行过程中进行了触发设置,全都没有触发,别的地方都是有触发的,我的ila设置应该没有问题,dma的设置也没有任何改动 design_1.pdf 我怀疑可能是cpu对这两部分的软件设置部分存在问题,硬件连线我也检查了很多遍了,没有问题
这个0x10003超过32位了啊,这个数传输的正确吗
0x10003是20位呀,一个十六进制是4个bit,我这里是能跑的。你看一下是不是头文件的设置问题,就是#define关键字的配置,我的配置是针对zynq7000的。如果按你说的其他IP有反应这个没反应那就是硬件地址配置问题。
dma和卷积ip的基地址设置都没有问题
dma模块需要软件配置吗,我看只有 这一部分有gua关于dma的配置
默认配置
#define X_AXI_DMA_SEND_RST_ADDR XPAR_AXI_DMA_0_BASEADDR
#define X_AXI_DMA_SEND_ADDR_0 XPAR_AXI_DMA_0_BASEADDR+XAXIDMA_SRCADDR_OFFSET
#define X_AXI_DMA_SEND_ADDR_1 XPAR_AXI_DMA_0_BASEADDR+XAXIDMA_CR_OFFSET//channel control
#define X_AXI_DMA_SEND_ADDR_2 XPAR_AXI_DMA_0_BASEADDR+XAXIDMA_BUFFLEN_OFFSET//
#define X_AXI_DMA_RECV_RST_ADDR XPAR_AXI_DMA_0_BASEADDR+0x30
#define X_AXI_DMA_RECV_ADDR_0 XPAR_AXI_DMA_0_BASEADDR+0x30+XAXIDMA_DESTADDR_OFFSET
#define X_AXI_DMA_RECV_ADDR_1 XPAR_AXI_DMA_0_BASEADDR+0x30+XAXIDMA_CR_OFFSET
#define X_AXI_DMA_RECV_ADDR_2 XPAR_AXI_DMA_0_BASEADDR+0x30+XAXIDMA_BUFFLEN_OFFSET
#define DMA_RESET_VAL 0x04
#define DMA_READREG_MASK 0x10003
软件初始化
void Setup_Accel_System(){
Xil_Out32(X_AXI_DMA_SEND_RST_ADDR,0x04);//DMA MM2S发送口设置环通模式
Xil_Out32(X_AXI_DMA_RECV_RST_ADDR,0x04);//DMA S2MM接收口设置环通模式
usleep(1000000);
Xil_Out32(X_AXI_DMA_SEND_ADDR_1,DMA_READREG_MASK); //0x10003 1bit启动DMA 0bit无意义 16bit设置中断阈值为1 ,即counter为1
Xil_Out32(X_AXI_DMA_RECV_ADDR_1,DMA_READREG_MASK);//0x10003 同上,这是S2MM
xil_printf("ACCEL System Setup Success!\n\r");
return;
}
如果你确认XPAR_AXI_DMA_0_BASEADDR
这个参数没有问题,那你看一看vivado硬件的地址配置对不对,就是block diagram那边设置的address map。
这个吗,这硬件导出地址是同步的啊,一样的
那看起来能排查的都排了,我暂时没有解决思路了,我近期会拿mpsoc的板子重构一下这个项目,如果我有碰到类似的问题会在这个贴子回复的。
好的,感谢您的解答
不客气,您解决了问题也可以留言解决方案提供大家学习
好的
我看前两行代码是复位的意思吧,整个软件中都没有关于dma的控制,比如告诉dma读取地址都没有,是我哪里没有搞懂吗
DMA读取地址是在开始任务才传递的,初始化的代码就是这几行
---- 回复的原邮件 ---- | 发件人 | @.> | | 日期 | 2023年12月27日 19:29 | | 收件人 | @.> | | 抄送至 | @.>@.> | | 主题 | Re: [huanggeli/yolov3tiny-ZYNQ7000] 程序卡在 wait_done (Issue #2) |
image.png (view on web) image.png (view on web) 我看前两行代码是复位的意思吧,整个软件中都没有关于dma的控制,比如告诉dma读取地址都没有,是我哪里没有搞懂吗
— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>
您好,有用户反应wait ap done信号没反应的原因是移植过程中vdma2的错误配置导致的,可以考虑类似思路。
收到,我试试
---- 回复的原邮件 ---- | 发件人 | @.> | | 日期 | 2024年04月06日 22:20 | | 收件人 | @.> | | 抄送至 | @.>@.> | | 主题 | Re: [huanggeli/yolov3tiny-ZYNQ7000] 程序卡在 wait_done (Issue #2) |
您好,有用户反应wait ap done信号没反应的原因是移植过程中vdma2的错误配置导致的,可以考虑类似思路。
— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you authored the thread.Message ID: @.***>
我的 vdma2 配置跟您的项目一样,还是卡在这个地方
---- 回复的原邮件 ---- | 发件人 | @.> | | 日期 | 2024年04月06日 22:20 | | 收件人 | @.> | | 抄送至 | @.>@.> | | 主题 | Re: [huanggeli/yolov3tiny-ZYNQ7000] 程序卡在 wait_done (Issue #2) |
您好,有用户反应wait ap done信号没反应的原因是移植过程中vdma2的错误配置导致的,可以考虑类似思路。
— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you authored the thread.Message ID: @.***>
我已经仔细检查了硬件连线,vitis软件的中断部分也仔细和我的板子的中断例程进行了对比,还是接收不到apdone的中断,摄像头已经有显示了,请问您有什么意见吗,accel_conv的ip还需要在vivado中进行什么设置吗,引脚定义之类的?