在高速图像数据传输系统中,针对图像数据“高吞吐量”与“大容量”数据缓存的应用需求,提出了一种基于DDR2 SDRAM的高速图像数据传输系统设计方案。为了满足图像数据的高吞吐率要求和数据缓存的大容量需求,采用了FPGA内部FIFO资源搭配片外DDR2的分级缓存机制;为了方便对图像数据的读写与地址的管理,对DDR2内部存储空间进行了重新分布。经测试,该系统可在上位机实时显示图像数据,且稳定可靠。
中文引用格式: 任勇峰,张泽芳,王国忠,等. 基于DDR2的高速图像数据传输系统设计[J].电子技术应用,2020,46(1):62-65.
英文引用格式: Ren Yongfeng,Zhang Zefang,Wang Guozhong,et al. Design of high-speed image data transmission system based on DDR2[J]. Application of Electronic Technique,2020,46(1):62-65.
CMOS图像传感器凭借着集成度高、功耗小、速度快、成本低、灵活性强等特点[1],在各个行业得到了广泛的应用。随着CMOS传感器的快速发展,其帧频、分辨率等参数得到了大幅度提升[2]。当CMOS传感器分辨率设置为2 048×2 048(约400万像素),帧频设置为20 f/s时,CMOS图像传感器每秒产生的图像数据量可达80 MB,这意味着图像数据传输系统需在短时间内对大量数据进行快速读写操作,对内存的容量和速度提出了较高的要求。为了满足对高速图像数据的传输要求,在综合考虑带宽、速率、数据存储容量、成本、功耗等因素后[3],本设计选用DDR2作为数据缓存单元。本文提出的分布式三级数据缓存结构,结合了FPGA内部FIFO的高数据吞吐量与片外DDR2大容量的特点,很好地解决了高速图像数据的缓存难题,实现了图像数据的实时显示。本文介绍的基于DDR2的高速图像数据传输系统能够实时显示数据采集前端接收的图像数据,该系统的总体结构框图如图1所示。
该设计由数据采集、数据缓存、数据传输[4]共3个模块构成。数据采集模块利用CMOS图像传感器进行图像数据的采集,采集到的信号为串行信号;数据缓存模块利用FPGA片内FIFO资源与片外DDR2进行图像数据的缓存,其中,FIFO主要用来解决各个模块之间数据位宽不一致以及数据传输速度不匹配的问题,DDR2主要用来满足高速大容量的数据缓存要求;数据传输模块利用千兆以太网将图像数据以巨型帧格式发送至上位机软件并进行实时显示。该设计选用的DDR2存储容量为2 Gbit,有8个Bank存储块,由于DDR2读写操作不能同时进行,因此需要对DDR2的地址总线进行分时复用,以提高其数据带宽利用率。为了适应不同分辨率的图像数据,设计了图像参数计算模块以得到不同分辨率下的图像数据量以及各个参数,从而对DDR2存储空间的重新分布提供理论基础。同时,重新分布DDR2的存储空间可实现对图像数据的便捷式管理与控制。本设计选用的DDR2芯片为Micron公司生产的MT47H128M16RT,该芯片在时钟上升沿与下降沿同时进行数据的传输,因而其传输速度为普通存储器件的两倍。DDR2控制器逻辑设计复杂,为了节省人力、加快开发速度,采用嵌入FPGA内部的DDR2控制器对DDR2进行读写操作的控制[5]。本设计利用FPGA的Bank1控制DDR2,在硬件电路设计时严格遵照固定引脚分配连接FPGA与DDR2,如图2所示。其中,CK和CKN为时钟差分线,数据在差分时钟相交处进行数据传输;A[13:0]为行列地址复用线,BA[2:0]为块地址,在进行读写操作时,需首先确定数据具体地址[6];D[15:0]为数据线;CKE、ODT、CS为控制信号线,其中,ODT为片内终结电阻,通过调整电阻值来克服片内总线上的信号反射效应[3];RAS、WE、CAS为命令信号线,FPGA通过这3条命令实现对DDR2读写操作的控制;UDM、LDM为数据屏蔽线,可用来屏蔽来自外部的干扰。
3.1 DDR2读写逻辑设计
数据采集模块在接收到上位机开始采集指令后,将会持续输出串行数据,由于FPGA逻辑控制一般处理并行信号,因此需先对图像数据进行串并转换,而后再将其缓存至FIFO_in中。从FIFO_in中读取图像数据并按照一定格式写入DDR2中;同时,从DDR2中读取图像数据,利用FIFO_out阵列进行位宽转换及速度匹配后,通过千兆以太网传输至上位机软件[7]。整体逻辑控制框图如图3所示。
3.1.1 写逻辑设计
图像采集时钟与DDR2的工作时钟频率不同,又由于DDR2只支持突发写入,一次写入256 B的数据量,因而设计容量为2 KB的异步FIFO可将串并转换输出的并行数据进行缓冲,FIFO_in既能够满足数据缓存,又可以防止数据溢出。系统上电开始工作,FPGA为DDR2提供125 MHz的参考时钟,DDR2开始初始化;待初始化完成后,通过判断DDR2控制器的写入命令是否有效,对DDR2输入写命令、突发长度命令以及命令使能信号[8];其后,当FIFO读空信号为‘0’,即该信号无效时,将DDR2的写入使能置‘1’,并从FIFO_in中读取图像数据存入DDR2中,当FIFO读空信号有效时,停止从FIFO_in中读取数据,以确保读取的数据均为有效数据;最后,通过计数信号判断一次突发写入是否完成。写DDR2将会一直持续到整个数据采集装置掉电为止。此外,为了方便对图像数据进行管理,图像数据以以太网包添加包头包尾后写入DDR2中,该过程在一个独立的进程中实现。
3.1.2 读逻辑控制
本设计利用千兆以太网作为传输方式将数据上传至上位机软件,所涉及的千兆以太网包大小为9 014 B,位宽为8 bit,不支持突发传输,所以为了与前级实现更好的匹配,设计FIFO来实现数据的缓冲。DDR2与千兆以太网时钟均为125 MHz,由于DDR2的传输速度可达456 MB/s,而千兆以太网传输速率为125 MB/s,因此设置4个容量为16 KB的FIFO阵列即可满足系统对数据传输的需求。当上位机接收到千兆以太网下发的读取指令后,首先判断DDR2的写块地址是否大于读块地址[9],若写地址块大于读地址块,则读取的数据为有效数据;而后判断DDR2控制器的读取命令是否有效,若有效,输入对DDR2的读取命令、突发长度命令以及命令使能信号;最后,通过计数信号完成对FIFO_out阵列的轮换写入以及读取操作。在往FIFO_out阵列写数据前,通过复位信号将FIFO中数据清空;写数据同时,将计数信号及地址信息上传至数据传输模块。利用逻辑分析仪Chipscope抓取到的DDR2读写时序图如图4所示。由图可得,可以连续对DDR2进行突发读写操作,并且读写可分时进行;往DDR2中写数据时,需要等待图像传感器采集满256 B时才可突发写入;在进行读写操作之前都要先进行命令空信号判断。
3.2 重新分布DDR2存储空间
DDR2仅有一组地址总线,读写操作不能够同时进行,所以要对DDR2的地址总线进行分时复用[10]。控制DDR2地址即可实现对其内部存储空间的控制,因此,通过更改地址即可完成对DDR2内部存储空间的重新分布。为了满足分辨率为2 048×2 048的图像数据以巨型帧格式进行传输,本设计对DDR2存储空间进行了扩展。本设计使用的DDR2的存储容量为2 Gbit,内部含有8个Bank,通过14位行地址与10位列地址判断读写操作的具体地址,其中一个地址存储2 B数据。为了方便对数据的读写以及对地址的管理,本设计利用一个地址存储1 B数据,一个列地址存储256 B数据,一个行地址存储一包图像数据,以行地址为寻址的主地址方式进行数据存储。在一包数据中,除协议占用的50 B外,剩余8 964 B均为图像数据。图像参数计算模块可计算不同分辨率下的一幅图像要传输的包数,一包数据需要突发读写的次数以及最后一包数据需要突发读写的次数等参数,通过一幅图像最后一包的行地址来判断该幅图像是否传输完成。文中数据采集模块采集到的图像数据的分辨率为2 048×2 048,一幅图像需要传输467包余8 116 B,一包数据需要突发读写的次数为35次,最后一包数据需要突发读写的次数为31次余180 B,因此可通过最后一行列地址与其他行列地址是否相同来判断数据是否有效。在DDR读写逻辑设计中首先判断是否为最后一行数据,然后再对列地址进行操作。一列数据存储256 B,所以列地址低8位需全部赋值为0;一包数据最大需要突发读写35(100011)次,因此列地址总共需要14位,即DDR2存储空间的10位列地址需扩展至14位。由于DDR2控制器的IP核实际列地址位宽为11位,因而将列地址高3位以行地址高3位的形式输入到地址控制端口即可完成列地址的扩展。DDR2存储空间经过扩展后,当行地址小于468,列地址增加至35时,行地址加1列地址归0;当行地址增加至468,列地址增加至32时,行地址归0块地址加1。所以在逻辑设计中首先判断是否为最后一行数据,然后再对列地址进行分别增加。本设计数据采集模块采集的图像数据分辨率为2 048×2 048,帧频为20 f/s,即1 s可产生80 MB的图像数据;在数据缓存模块中,DDR2的工作时钟为125 MHz,再考虑到自动刷新及预充电等消耗的时钟,实际平均数据吞吐量为456 MB/s;数据传输模块中,以太网传输速度为125 MB/s;经测试,该设计能够正常工作,上位机可实时显示数据采集模块采集的图像数据,且稳定可靠。本设计以FPGA为核心,对图像数据流进行整体逻辑设计,采用三级数据缓存机制,利用FPGA内部FIFO的高效读写性能与片外DDR2大容量存储的特点,形成速率与容量(时间与空间)的优势互补,很好地满足了高速图像数据传输系统对于图像数据传输的性能需求。同时,本设计通过设计图像参数计算模块,可应对不同分辨率的图像数据,增强了该设计的可操作性和可移植性。
参考文献
[1] 叶威,肖康,康冰锋,等.CMOS传感器在航空摄影测量中的应用[J].测绘通报,2017(8):150-151.
[2] 丁宁,常玉春,赵健博,等.基于USB 3.0的高速CMOS图像传感器数据采集系统[J].吉林大学学报(工学版),2018,48(4):1298-1304.
[3] 周彬,宋茂忠,熊骏,等.基于FPGA和DDR2的北斗导航信号模拟[J].电子设计工程,2016,24(6):138-141.
[4] 王昊.基于FPGA的千兆以太网高速图像采集与传输系统的设计[D].呼和浩特:内蒙古大学,2017.
[5] 袁鑫,卢磊,景彦哲.基于FPGA的DDR2缓存控制器在无线链路图像跟踪系统中的应用[J].导航与控制,2016,15(4):63-69,7.
[6] 段岑林.DDR2 SDRAM控制器的设计与实现[D].西安:西安电子科技大学,2018.
[7] 高俊岭,陈志飞,章佩佩.基于FPGA的实时视频图像采集处理系统设计[J].电子技术应用,2018,44(2):10-12,19.
[8] 王晓鹏.基于FPGA片内存储器读写控制与仿真[J].农村经济与科技,2018,29(14):296.
[9] WANG H,WENG Z,LI Y.Design of high-speed image acquisition system based on FPGA[C].第30届中国控制与决策会议论文集(2),2018.
[10] 田杰,王广龙,乔中涛,等.基于FPGA高速视频图像实时采集与处理系统设计[J].电子器件,2016,39(3):623-627.
作者信息:
任勇峰,张泽芳,王国忠,张凯华
(中北大学 电子测试技术国家重点实验室,山西 太原030051)
原创声明:此内容为AET网站原创,未经授权禁止转载。