隋旭阳,赖文娟,李 健
(中国兵器装备集团自动化研究所 武器装备信息与控制技术研发中心, 四川 绵阳 621000)
随着现代图像处理领域的高速发展,对高分辨率、高帧频图像数据进行高速、大容量、实时处理的要求越来越高,FPGA凭借其结构灵活、集成度高等优势,便于实现硬件逻辑接口的设计,完成高速、大数据量的图像处理。基于FPGA的高速图像采集系统需要与之相匹配的数据缓存设计,DDR3 SDRAM成为当前最常用的高效解决方案[1-3]。
DDR(Double Data Rate SDRAM)是双倍速率同步动态随机存储器,双倍速率存取即为数据在工作时钟的上升沿和下降沿都会进行采样,有效地提升了存储速率。DDR SDRAM在经历了DDR、DDR2阶段后,在DDR3阶段系统性能有了明显提升[4-6]。一方面核心工作电压由1.8 V降低为1.5 V,大幅度降低了系统功耗。另一方面,DDR3的内存模式也有了很大的改进:逻辑Bank数量由DDR2的4个增加为8个;突发长度增加为8 bit,并采用更为灵活的突发传输控制;增加了ZQ校准功能,从而大大提高了存储信号的完整性[7-9]。
结合Xilinx提供的MIG 7 Series 4.0 IP核,本文给出了一种利用Verilog HDL语言设计DDR3 SDRAM用户接口的方法,采用类FIFO的封装方式优化了与MIG IP核信号互联的用户接口,用户只需要控制数据向FIFO写入和从FIFO读出,无需再对内存控制器的众多控制信号进行操作,为实现DDR3数据流的缓存提供了便利。
针对高速图像数据采集系统的应用,创新地提出了基于DDR3 SDRAM存储地址的读写控制方法,更加灵活地处理数据在DDR3中的缓存。
根据Xilinx提供的IP核用户手册介绍,用户首先需要在MIG IP核配置页面对DDR3芯片型号、数据位宽、引脚分配等参数进行设置。设置完成后即可得到Xilinx 官方提供的DDR3控制器接口解决方案[10-11]。解决方案如图1所示。
该方案由用户逻辑控制模块、用户接口模块[12-13]、内存控制模块和物理层接口模块4个部分组成。
1) 用户逻辑控制模块。用户自己设计的DDR3逻辑控制模块与位于IP核最前端的用户接口模块对接,即可通过用户接口模块控制DDR3进行读写操作。
2) 内存控制模块。内存控制模块[14]位于用户接口模块和物理层模块之间,其前端为用户接口模块提供连接至IP核的本地接口,该接口可为用户提交对存储器的读写请求,并提供了用户设计模块与外部存储设备DDR3之间的数据传输机制;内存控制器后端连接至物理层接口,并处理所有物理层模块的接口请求。
3) 物理层接口。物理层接口[15]前端连接至内存控制器模块,后端通过物理引脚连接外部存储设备DDR3,其主要功能是将内存控制模块输入的所有DDR3的控制信号、地址信号以及数据信号缓存,产生DDR3所需要的控制指令信号,保证指令与地址、数据的同步和信号的维持,并捕获DDR3发出的数据,传输给内存控制模块。
用户接口模块在MIG IP核配置页面中对DDR3的参数进行设置时已经确定,用户逻辑控制模块主要工作是控制图1所示的用户接口信号,进而控制DDR3读写操作。
1) 读操作。在进行读操作时,用户接口模块准备信号app_rdy,使能信号app_en高使能,写地址信号app_addr与命令信号app_cmd有效,更新读地址。读操作时序如图2所示。数据会延时有效输出,延时由IP核自动确定给出[12]。
2) 写操作。若要成功进行写操作,必须保证写地址和写数据都有效。当用户接口准备信号app_rdy和使能信号app_en高使能,保证了写操作命令app_cmd以及写地址信号app_addr有效。当app_wdf_rdy信号和app_wdf_wren信号高使能时,保证了写入数据的app_wdf_data信号有效[13]。写操作对应的时序如图3所示。另外,根据用户手册介绍,写地址和写数据不必同时有效,可以相差几个周期[10]。
由于IP核提供的DDR3用户接口信号逻辑复杂,为提升用户使用的方便性,对DDR3 SDRAM用户接口进行优化,引入读、写FIFO和读写逻辑控制模块,屏蔽掉了DDR3 IP核复杂的用户接口,设计如图4所示的接口封装,使得用户使用时只需控制数据能正确存入写FIFO以及从读FIFO中读取使用,不再需要对内存控制器的众多控制信号进行操作。由此,DDR3用户接口优化的关键是为读写逻辑控制模块提供解决方法[16-17]。
简易的读写控制方法,是利用Xilinx提供FIFO的IP核中可编程标识信号建立读写控制状态机,控制数据写入、读出等操作。利用写FIFO编程空标识信号和读FIFO编程满标识信号判断状态机的读写切换,逻辑简单,读写高效,避免了频繁的读写切换操作以保证较高的读写效率。
该方法将DDR3视作大容量数据的“蓄水池”,使用中只需合理控制读写切换,避免数据溢出,即可完成高效读写。该方法优点是简化了DDR3使用时众多的读写控制信号和读写逻辑判断,写FIFO模块用来接收数据,读FIFO模块用来输出从DDR3内读取的数据,FIFO逻辑控制模块用来控制DDR3的读写操作,合理切换读写状态,保证读写效率。采用类FIFO封装方式的读写控制状态机逻辑简单,大幅度地减少用户繁杂的控制操作,可应用于高速、大容量的数据缓存。
针对图像数据存储的应用,为提升DDR3使用的灵活性,本文在简易的读写控制方法基础上进行了改进,提出了基于DDR3 SDRAM存储地址的读写控制方法,需要通过FIFO计数器对FIFO中缓存的数据状态进行判断,生成读写控制命令,进而通过发送读写控制命令控制DDR3读写操作,将用户设定的一定数量的数据写入用户指定的DDR3的地址空间位置中,并通过读写切换操作读出使用。设计的状态机有3种状态,IDLE状态为初始状态,该状态下不进行读写操作,WRITE状态下进行写操作,READ状态下进行读操作。方案设计如图5所示。状态机的读写切换如图6所示。
基于DDR3 SDRAM存储地址的读写控制方法将DDR3作为大容量数据的“收纳盒”。对于DDR3的使用,在逻辑控制上实现了更加精确的基于DDR3存储地址位置的读写控制。每一次的写操作都可以将用户设定的数据量存储到用户指定的存储地址位置中,读操作也可以根据用户控制将所需地址空间的数据读出使用,充分发挥DDR3存储的灵活性,增强用户的可操作性。此外,精确的基于DDR3存储地址位置的读写控制为图像的每一处数据存储提供良好的定位,用户可根据后端显示、处理需求进行调整,使图像的显示和后端处理更加方便。该方法为多路视频源的图像存储提供了参考。
对上述两种设计进行板级验证以确保可靠性。在Kintex-7 xc7k325t的FPGA上进行了高速图像数据采集与显示的实现。选用DDR3 SDRAM型号为MT41K256M16XX-125,视频图像来源于模拟源生成器,分辨率为1 920×1 080,帧频200 Hz,视频图像经DDR3存储和帧率转换后,得到稳定的VGA显示,如图7所示。同时由于模块化、通用化、参数化设计,可以通过顶层模块的参数配置实现多种分辨率图像视频的显示。
采用VIVADO软件的ILA对两种方法分别抓取数据进行测试。如图8、图9所示。
设计中对DDR3的读写,采用的是顺序读写,数据位宽为32bit,理论带宽为4 000 MB/s。在图9中,ddr_write_address对应视频通道的数据写入地址,ddr_read_address对应读出数据地址,每次写入地址增减量为F0 H,即为240个十进制地址;在387~568时间周期内,共写入、读出数据3次,时间周期为8 ns,可计算带宽为:
效率为:1 988.95÷4 000×100%=49.7%。
从图9发现,在数据缓存过程中有很长时间是在等待视频源数据,造成带宽未利用。应用中,可达到70%以上的读写效率。
本文结合Xilinx提供的MIG_v1.9 IP核,首先讲解Xilinx提供的7系列FPGA内存控制器接口解决方案;其次,为提升用户使用的方便性,避免繁杂的控制操作,引入读、写FIFO和读写逻辑控制模块进行用户接口优化;最后,在简易的读写控制方法的基础上,提出了基于DDR3 SDRAM存储地址的读写控制方法,提升DDR3使用的灵活性。两种设计进行板级验证,实现了高速图像数据采集与显示,工作稳定可靠,参数化的顶层设计更加方便用户对不同分辨率需求地修改,具有较强的可移植性。基于DDR3 SDRAM存储地址的读写控制方法为多路视频源的图像存储提供了参考。
[1] 代耀东,苏彦辰.基于FPGA的高速数据采集系统设计[J].兵器装备工程学报,2012,33(6):89-91.
[2] 宋明,赵英潇,林钱强.基于FPGA的DDR3 SDRAM控制器的设计与优化[J].电子科技,2016,29(11):47-50.
[3] 陈一波,杨玉华,王红亮,等.基于DDR3-SDRAM的图像采集与显示系统[J].电子器件,2017,40(3):702-707.
[4] 董岱岳.基于FPGA的DDR3 SDRAM控制器设计[D].济南:山东大学,2015.
[5] 焦淑红,程仁涛.基于FPGA的DDR3控制器设计[J].电子科技,2015,28(7):41-43.
[6] 毕然.基于DDR3的CMOS高速图像采集系统的FPGA设计与实现[D].哈尔滨:哈尔滨理工大学,2017.
[7] 丁宁,马游春,秦丽,等.基于FPGA的DDR3-SDRAM控制器用户接口设计[J].科学技术与工程,2014,17(14):225-229.
[8] 王正宇.DDR3内存控制器的IP核设计及FPGA验证[D].兰州:兰州交通大学,2012.
[9] 高胜.高速采样数据存储控制器的设计与实现[D].成都:电子科技大学,2016.
[10] XILINX C.Xilinx corporation 7 series devices memory interface solutions (UG586)[M].PD,USA:Xilinx Corporation,2013.
[11] 吴连慧,周建江,夏伟杰.基于FPGA的DDR3多端口读写存储管理设计[J].单片机与嵌入式系统应用,2015,15(1):71-74.
[12] 宗凯.基于FPGA的DDR3控制器设计[J].电子测量技术,2017,40(1):118-122.
[13] 潘一飞,余海.基于FPGA的DDR3用户接口设计[J].电子制作,2013(15):9-10.
[14] 张刚,贾建超,赵龙.基于FPGA的DDR3 SDRAM控制器设计与实现[J].电子科技,2014,27(1):70-73.
[15] 吴进,刘路.同步动态随机存储器的控制器设计与实现[J].西安邮电大学学报,2012,17(5):78-80.
[16] 王红兵,强景,周珍龙.Xilinx MIG IP核的研究及大容量数据缓冲区的实现[J].电子产品世界,2016,23(8):43-46.
[17] 任敏.多通道高速数据转发系统的设计与实现[D].成都:电子科技大学,2016.
[18] 张素萍,李朝强,张建芬. 一种高速实时数据采集处理系统设计[J].火力与指挥控制,2016(7):125-129.