DDR3控制模块设计

        DDR3控制模块负责驱动DDR3片外存储器,缓存图像传感器输出的图像数据,该模块将DDR3 IP核复杂的读写操作封装成类似FIFO的用户接口,DDR3控制模块顶层例化了四个模块,分别是DDR读写控制模块,DDR3 IP核模块、FIFO控制模块、AXI控制模块;其中DDR读写模块负责与DDR3 IP模块的命令和地址的交互,根据FIFO控制模块中FIFO的剩余数据量来切换DDR3的读写命令和地址。DDR3 IP核模块负责链接外设FPGA;FIFO控制模块负责对输入和输出的数据进行时钟域的切换和位宽的转换。模块图如下:

         DDR3读写控制:

        在DDR3读写测试中,读写操作地址都是DDR3的同一存储空间,如果只使用一个存储空间缓存图像数据,这么做虽然会保证数据不会出现错乱的问题,但是会导致当前读取的图像与上一次存出的图像存在交错;为了避免这一情况,我们需要再DDR3的其他bank中开辟一个相同大小的存储空间,使用乒乓操作的方式来写入和读取数据;我们在DDR3中开辟多个存储空间进行乒乓操作与缓存帧图像,在初始化结束后,每一帧图像的第一个数据对应图像的第一个像素点,将其写入存储空间的首地址中。通过在DDR控制模块中对输出的图像数据进行计数,从而将他们写入相应的地址空间。计数达存入DDR的最大存储地址后,完成一帧图像的存储,然后当帧复位到来时切换Bank以达到乒乓操作的目的,并同时回到存储空间的首地址继续下一帧图像的存储。在显示图像时LCD顶层模块从DDR存储空间的首地址开始读数据,同样对读过程进行计数,并将读取的图像分别显示到显示器相应的像素点位置。

        图像数据总是在两个存储空间之间不断切换写入,而读请求信号在读完当前存储空间后判断那个存储空间没有被写入,然后去读取没有被写入的存储空间;对于本次程序设计来说,数据写入较慢而读出较快,因此会出现统一存储空间被多次读取的情况,但保证了读出数据一定是一帧完整的图像而不是两帧数据拼接的图像。当正在读取其中一个缓存空间,另一个缓存空间已经写完,并开始切换写入下一个存储空间时,由于图像读出的速度总是大于写入的速度,因此读出的数据仍然是一根完整的图像。

        DDR3读写模块设计:

        DDR3读写控制模块负责与AXI控制模块进行读写命令和地址交互,并根据FIFO控制模块中读写FIFO的剩余数据量来切换读写命令和地址。DDR3读写状态跳转:初始化完成后判断写FIFO数据量是否大于一次写突发长度,如果是开始向DDR3写入数据,写地址计数器计数到写突发长度;判断读FIFO中的数据量是否小于一次读突发长度,如果是开始从DDR3中读出数据,写入到读FIFO中,读地址计数器计数到读突发长度

        AXI控制模块设计

        AXI 控制模块产生AXI接口时序实现与IP核的数据及信号交互。该模块的主要输入输出信号为简化版的AXI总线写地址、写数据、读地址、读数据,以及与DDR读写控制模块进行交互的读写请求和地址信号。

        Simplified AXI4接口包含四个通道:写地址通道,读地址通道,写数据通道,读数据通道,各个通道间彼此独立,一般来说需要先发送地址,在收发数据。用户可以通过不同的ID号,判断返回数据是否为请求值,DDR3的一次突发长度为8,数据位宽为32,所以数据每次写入256个,在写数据准备信号为高时将数据写入DDR3中。起始地址是0,每次增加128,(单片DDR的突发长度x一次读写长度8x16)个地址,所以一次突发的地址为0-127,每次DDR3突发完成后都会拉高最后一个标记信号标志最后一个数据被接收,第二次的地址为128-256。因为这里是两片DDR,所以同一个地址会写入两个数据,两个16bit组成的一个32bit,指的是数据和地址没有关系。

        FIFO控制模块设计

        FIFO控制模块主要负责对输入和输出的数据进行时钟域的切换和位宽的转换,为了实现乒乓操作,在FIFO控制的端口信号添加了wr_load 和 rd_load ,用于对读写FIFO进行复位

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值