xilinx vivado zynq PLDMA时序冲突解决

2016-10-18 23:01 阅读 1,098 次 评论 0 条

调试APB总线代码后,PLDMA的读操作正常,但运行PL DMA写操作(即从BRAM到DDR)第一次写正常,中断后连续写则出现SDK程序跑飞。

返回PL DMA的设计发现在Implementation时有严重警告,与时序相关。

clip_image002

在timing report中存在一处红色的信息部分

clip_image004

增加xdc文件中约束后,timing report中的红色部分没有了。约束语句如下

clip_image006

clip_image008

但写操作时,仍然出现sdk程序无响应的状态。

添加ILA观测S_AXI_HP总线的数据,由于是写问题,所以引出了写地址(AW)通道与写(W)通道的相关信号进行调试。

clip_image010

在第一次写操作的时候,启动PLDMA信号直到dma_write_start为高电平之间相隔12个时钟周期。

clip_image012

在dma_write_start变为低电平后,开始从bram读取数据地址开始,然后写入ddr的地址计数开始。时序表现上,bram的地址自加在前,然后是ddr地址块(对应burst的首地址)的自加。

下面为第二次dma写的截图,由于启动dma后的时序与第一次相同,而出现问题时的图如下。

clip_image014

在0x80地址写到ddr之后,然后有读取bram的0x81信号,而没有写ddr的信号。还好默认的采集数据存储深度多,不然还看不到这个问题现象了。

clip_image016

问题表现为S_AXI_HP_WREADY_pin信号变为了低电平,即无效,表示DDR不能写入数据,实际上写通道的FIFO为1KB深度,此时的0x80地址代表(128x64bit=1KB),即写通道FIFO写满,即从启动开始数据就没有往ddr中写。

======================================================

最后通过与avnet的代码比较,发现了手敲代码时的问题,如下

clip_image018

正常情况下的,AWVALID的清零情况,如下图所示。AWVALID信号在waddr_cnt为0后,等待AWREADY为1有效,再清零AWVALID信号,保证最后一个地址传输完毕。

clip_image020

错误代码的效果如下,AWVALID信号,在waddr_cnt为0的下一个时钟就清零,此时对应这个地址的AWREADY信号未有效,导致最后一个地址没有写入地址通道。

clip_image022

修改代码后,sdk的测试程序从串口输出的数据如下。

clip_image024

版权声明:本文著作权归原作者所有,欢迎分享本文,谢谢支持!
转载请注明:xilinx vivado zynq PLDMA时序冲突解决 | 起点博客
分类:应用笔记 标签:, , , , ,

发表评论


表情