各位大神,专家,请教一个AM3358芯片上的GPMC+EDMA的方案。
背景介绍:主要目的是为了通过GPMC接口将FPGA侧FIFO内缓存的图像数据传递至AM3358中,之前已经实现GPMC+EDMA的方案,不过带宽仅仅达到57MB/s。
当时GPMC侧参数设置为:
且GPMC是开启了busrt模式的,ATTACHEDDEVICEPAGELENGTH设置为2h——即16words。
而同时EDMA的参数设置为:
同样的,在FPGA采样得到的GPMC接口的波形如下:
这样实现的效果就是一次burst的字节数为2048,但是每个OE低电平期间读走的数据是2个16bit数据即4个字节数据。(GPMC_A=8'h04表示FPGA映射的地址为8'h04)
目前的测试异常:
现在我要提高FPGA与ARM之间的传递速度,而前面的这种方案的速率已经不够了。我希望能够在每次OE低电平期间能够多读一些数据出来。
因此,我根据之前的经验,就是把EDMAAPP_MAX_ACOUNT加大,也即每个OE低电平获取的数据更多,同时调整GPMC的参数。
调整如下:
仅仅修改了上面的参数之后,我们从FPGA侧采读取时候的波形,得到波形如下:
不仅仅GPMC_A很奇怪的变成了全0,而且OEN的低电平宽度也变得异常,因为我的OEOFFTIME相对于之前也只是从5改为了7,但是从上下图对比看可以看出,OEN的低电平变得长了一倍多。
然后又做了一种调整:
这种调整的原因在于,考虑到前面ATTACHEDDEVICEPAGELENGTH设置为2h——即16words,我们这里把EDMA的突发ACOUNT也设置为32(即16个16bit数据)。得到的波形如下:
这时候地址从一开始的04变成了后面00和20来回变化。而且OEN低电平信号宽度来回变化。
期望结果:
我希望在更改参数配置之后,GPMC_A地址能够像一开始一样维持8'h04不变,然后仅仅是OEN正常的拉宽,同时对应读出更多的有效数据,从而能够使得FPGA和GPMC之间的带宽提高至100MB/s左右。
附注:
其实每次不加EDMA的时候,单独用GPMC的burst方案,在修改GPMC参数的时候,都能得到正常的波形如下:
但是为了让ARM不去干预这个图像传递过程,而是直接EMDA搬移至ARM外挂的DDR上面,所以GPMC+EDMA的方案又势在必行。
因此想咨询一下大家,是我对于EDMA方面,有哪些参数考虑的有问题吗?忘批评改正。
david hu1:
用DMA,memory to memory可以试试,16位位宽,速度为fclk/2,可以上100M