百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

基于DDR3-SDRAM 的高速视频传输系统

moboyou 2025-05-23 16:47 8 浏览

摘 要:设计了一种基于多片DDR3-SDRAM多BANK存储技术的传输系统,用于高速视频图像的传输。采用Camera Link总线技术用来接收视频图像数据,采用DDR3-SDRAM用来转存数据,对系统软件进行了搭建,对数据进行编码,并对DDR3-SDRAM多BANK存储进行仿真及分析。结果表明,DDR3-SDRAM多BANK存储技术可以有效地提高DDR3-SDRAM的工作效率,满足高速视频存储的需求。

0 引言

高速视频图像技术被广泛应用于铁道铁路、航空航天、水下、生物运动捕获、医疗器械、远程教学及生产生活的诸多领域。目前,视频图像传输技术已经日趋成熟,并开始向高清、高速的需求方向发展。

针对目前普遍存在的因为存储速度低而只能采集低分辨率视频数据的缺点,利用Camera Link的Full传输模式对图像数据进行接收并利用多片DDR3-SDRAM多BANK存储的原理对高带宽和大容量图像数据实现高速存储及传输。

1 总体设计方案

视频图像传输系统的设计框图如图1所示。系统主要由时钟与复位单元、逻辑控制单元、视频采集单元、视频转存单元、实时显示单元组成。

系统工作过程为:FPGA通过Camera Link接口将配置信息发送给CMOS相机,控制CMOS相机开始进行视频数据的采集、编帧并通过Camera Link接口将数据传送至FPGA;视频数据经过FPGA的一系列相关的视频数据处理之后存储到DDR3-SDRAM中,当DDR3-SDRAM中的视频数据存满后,将存储的视频数据通过千兆以太网接口传输到上位机,最终在上位机上进行实时观测。

2 高速视频采集传输

2.1 视频采集单元

视频采集单元主要包括COMS相机及Camera Link接口。采用Camera Link的Full模式进行数据采集,数据传输位宽为80 bit。

设置图像采集系统数据位宽为8 bit、采样频率为250帧/s、分辨率为2 048×1 088 Pixels的彩色视频图像。

2.2 图像数据转存单元

DDR3-SDRAM为第三代双倍数据速率动态同步随机存储器,与上一代产品相比,DDR3-SDRAM拥有两倍于DDR2的预取能力;突发长度固定为8,增加了突发突变模式及重置功能,极大地降低了系统功耗。

采用Micron公司的MT41K1G8SN-125内存条作为图像的存储介质,其由8个DDR3-SDRAM的存储芯片组成,每个存储芯片为8 bit,8片组合在一起为64 bit的数据位宽,FPGA与DDR3-SDRAM的硬件连接如图2所示。其中,CK_N与CK_P 为DDR3-SDRAM的差分时钟,其频率为800 MHz;FPGA通过复位信号(RESET)、行地址选择信号(RAS)、列地址选择信号(CAS)、时钟使能信号(CKE)和写使能信号(WE)实现对DDR3-SDRAM的控制。

64 bit数据并行地与FPGA的I/O口直接相连, DDR3-SDRAM的工作时钟一次能够传输64 bit的数据,极大地提高了数据的传输速率。单颗粒DDR3-SDRAM地址线的位宽为16 bit,Bank的位宽为3 bit,FPGA可直接通过控制Bank地址与16 bit的行列地址来选择数据在DDR3-SDRAM中存储的位置。

3 软件设计及测试

系统功能主要为对经过Camer Link接收模块的串并转换以及经过FIFO进行数据缓存处理之后的视频进行再处理,转化成能够满足DDR3-SDRAM存储条件的时序控制之后,将视频数据写入DDR3-SDRAM的内部;将存储DDR3-SDRAM内部数据读出,经过处理后通过FIFO的处理,再经过千兆以太网输出,经上位机处理后显示。

系统的工作流程如图3所示。上电后系统复位,各功能模块进行初始化;初始化及DDR3 DQS、Write、Read校验完成后init_done拉高;相机开始工作,图像数据经Camera Link接口进入FPGA进行数据编码,编码后数据暂存在内置FIFO模块;判断FIFO的almost_full信号是否为高电平,当almost_full信号为高电平则DDR3-SDRAM可以进行写数据操作了,然后控制器开始向DDR3-SDRAM发送写命令、写地址以及写数据操作,在写数据的过程中控制器通过帧计数信号counter_frame来判断DDR3-SDRAM是否被写满,当counter_frame=480时DDR3-SDRAM已经不能够再接收一帧完整的视频数据了,此时start_ddr3信号拉低,不再进行写数据操作。然后等待千兆以太网模块使能DDR3-SDRAM的读数据操作,去将写入DDR3-SDRAM中的数据经过控制器的控制后,通过FIFO的处理,经过千兆以太网模块将数据输出到上位机上进行显示。

3.1 DDR3-SDRAM工作状态机

按JEDEC规定,DDR3-SDRAM工作必须遵守一定的规则,DDR3-SDRAM存储器工作状态如图4所示。

图4中涉及命令及功能如表1所示。

3.2 DDR3-SDRAM突发模式下数据编码

系统采用DDR3突发传输模式,一次传输数据量为512 bit,而Camera Link接口一次传输数据为80 bit;对Camera Link传来数据进行如图5格式的编码。编码采用十六进制的EB 90作为帧标志,并设计16 bit的帧计数,将Camera Link传来的每六次(480 bit)作为一组数据,然后缓存至FPGA内置FIFO模块。

3.3 DDR3-SDRAM多BANK同行切换存储设计与测试

每片DDR3-SDRAM有8个BANK用于存储数据,为了最大限度地提高DDR3-SDRAM的存储速度,选择最佳的工作模式,对单BANK内行切换存储及多BANK同行切换存储进行测试,如图6所示。

单BANK内行切换存储是指在DDR3-SDRAM写数据时先逐行写BANK0,待BANK0写满之后再写BANK1,依次写各个BANK。在本次测试中采用的是每行写8个64 bit的数据,再依次转入该BANK的下一行。多BANK同行切换存储是指DDR3-SDRAM写数据时依次再写BANK0~BANK7的第一行,所有BANK的第一行写满之后再依次写各个BANK的第二行,以此类推进行DDR3-SDRAM的写数据操作。测试时序是在ISE14.3建立的DDR3-SDRAM控制器工程中,添加DDR3-SDRAM模型联合进行仿真的测试结果,仿真工具采用modesim仿真软件。

图6(a)的单BANK内行切换测试时序,当ddr3_ras_n_fpga信号和ddr3_cke_n_fpga 信号均为高电平、ddr3_cas_n_fpga信号和ddr3_we_n_fpga信号均为低电平,DDR3-SDRAM接收写数据命令,命令接收完毕后,开始往DDR3-SDRAM中写入位宽为64 bit的数据。测试可得,在BANK0的一行连续写完8个64 bit数据大概花费的时间约为6 045 756 fs,写第一行的数据开始到写入第二行数据的开始所花费的时间约为70 050 164 fs,则单BANK内行切换测试得出的写数据的带宽的利用率大约为8.6%。理想情况下的带宽为12.5 GB/s,单BANK内行切换测试得出的带宽大约为1 100.8 MB/s,系统采用的Camera link接收模块接收的数据流为820 MB/s,则DDR3-SDRAM的带宽约为1 100.8 MB/s时能够满足缓存的数据流条件,但是在实际处理中DDR3-SDRAM还会有一些其他的数据等待操作,比如等待FIFO的almost_full信号命令,还会消耗一定的DDR3-SDRAM带宽,因此DDR3-SDRAM的带宽有必要设计的更大一些。图5(b)所示的为多BANK同行切换测试时序,其中ddr3_dq_fpga为写入DDR3-SDRAM的数据。如图5(b)所示,写第一个BANK的一行的8个64 bit数据所花费的时间约为5 079 040 fs,写第一个BANK的一行8个数据开始到写第二个BANK的一行8个数据开始所花费的时间大约为9 994 240 fs,则多BANK同行切换测试得出的写数据的带宽的利用率大约为50.8%。理想情况下的带宽为12.5 GB/s,则多BANK同行切换测试得出的带宽大约为6 502.4 MB/s,Camera link接收模块接收的数据流为820 MB/s,则DDR3-SDRAM的带宽约为6 502.4 MB/s,这在很大程度上超过了Camera link接收模块接收的数据流,能够满足缓存的数据流条件。

4 结论

利用系统采集视频图像,经上位机还原后视频图像清晰完整,设计符合预期。结果表明:利用Full模式下Camera Link总线接口可满足高速视频图像的采集需求,DDR3-SDRAM多BANK存储技术可极大地提高数据存储的速度,解决高速视频高分辨率转存及传输的问题。

参考文献

[1] BARRERA E,RUIZ M,SANZ D,et al.Test bed for real-time image acquisition and processing systems based on FlexRIO,CameraLink,and EPICS[J].Fusion Engineering and Design,2014,89(5):633-637.

[2] 王正宇.DDR3内存控制器的IP核设计及FPGA验证[D].兰州:兰州交通大学,2012.

[3] 黄云翔.DDR3-SDRAM的控制器设计和验证[D].广州:华南理工大学,2012.

[4] 李辉,岳田.在FPGA设计中ChipScope与MATLAB的应用[J].无线电工程,2010,40(1):62-64.

[5] 张超,余综.基于DDR3系统互联的信号完整性设计[J].计算机工程与设计,2013,34(2):616-621.

相关推荐

深入解读-全流程分析Netty设计思路与实践

1.背景深入理解NIO多路复用,了解到内核态通过事件通知+中断检测socket事件,用户态可以使用1个线程处理所有socket请求,时间复杂度为O(1)。看上去该IO方案已经很完美了,但是当连接数越...

Java Web应用调优线程池:没你想的那么复杂

“不论你是否关注,JavaWeb应用都或多或少的使用了线程池来处理请求。线程池的实现细节可能会被忽视,但是有关于线程池的使用和调优迟早是需要了解的。本文由浅入深,介绍了Java线程池的使用,以及正确...

Java 多线程与高并发,基础概念回顾

Java多线程基础想当初上大学时,最开始的计算机入门课是用Java语言教学的,也就是说,人生的第一行"HelloWorld"程序是用Java写的。可惜到现在在组里写Web项目,Ja...

Qt 的4种多线程实现详解

为何需要多线程?1、进行耗时操作时,可以处理用户的其他输入输出。比如,如果在UI线程里面进行耗时操作,界面会不响应用户操作。2、提升程序性能。现在的电脑一般都是多核CPU,多线程并行处理事务,可以大大...

Java线程池原理与源码详细解读,再也不怕面试问线程池了

线程池“线程池”,顾名思义就是一个线程缓存,线程是稀缺资源,如果被无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,因此Java中提供线程池对线程进行统一分配、调优和监控。线程池介绍在web开发...

一分钟快速部署Django应用

在PythonWeb开发方面,Django的用户人数应该是最多的。很多开发者在完成应用开发之后,都会面临线上部署Django应用这个头疼的问题。当初我在部署“编程派”网站时,就碰到了很多障碍,折腾了...

还不懂Java线程池实现原理,看这一篇文章就够了

线程池无论是工作还是面试都是必备的技能,但是很多人对于线程池的实现原理却一知半解,并不了解线程池内部的工作原理,今天一灯就带大家一块剖析线程池底层实现原理。1.为什么要使用线程池使用线程池通常由以下...

探讨C语言系统编程中线程的原理以及实现

点击蓝字关注我们线程的概念我们今天来聊一聊线程,之前有写过一篇关于进程的文章,今天我们聊的线程,和进程差不多,我们首先要知道的一件事情是一个进程里面可以包括多个线程,不能反过来,我们之前了解到的不同...

Java线程池的正确创建方式

在阿里Java开发手册里边,关于线程池创建有一条强制规则,如下图,里边也列出了相应的弊端,但是我觉得最大的弊端还是使用Executors之后,开发人员就会忽略掉线程池内部的实现。ThreadPoolE...

Linux系统编程之进程创建

概述在Linux系统中,通过创建新的进程,我们可以实现多任务处理、并发执行和资源隔离等功能。创建进程的主要方法为:fork、vfork、clone。下面,我们将分别进行介绍。forkfork是最常用的...

linux:线程的3种实现方式(内核级,用户级和混合型)

1、线程的3种实现方式在传统的操作系统中,拥有资源和独立调度的基本单位都是进程。在引入线程的操作系统中,线程是独立调度的基本单位,进程是资源拥有的基本单位。在同一进程中,线程的切换不会引起进程切换。...

追求性能极致:Redis6.0的多线程模型

背景我们在第一篇《Redis系列1:深刻理解高性能Redis的本质》中就已经提到了,Redis的网络IO以及键值对指令读写是由单个线程来执行的,避免了不必要的contextswitch和资源竞争...

Qt快速入门(工程的创建、UI界面布局、多线程、项目)

本文档将介绍QT工程的创建、UI界面布局,并以计数器为例了解QT中多线程的用法,最终完成一个基础的QT项目。1创建QT工程文件在安装好QT之后,能够在其安装组件中找到QtCreator,点击设置项...

C++ 创建新线程的核心指南:从基础到关键要点

一、引言在C++11标准中,库的引入让开发者能够轻松实现多线程编程。本文将通过代码示例和关键要点分析,带你掌握C++创建线程的核心技术。二、创建线程的基本步骤1.引入必要头文件#include&l...

Java面试篇基础部分-Java创建线程详解

多线程的方式能够在操作系统的多核配置上更好的利用服务器的多个CPU的资源,这样的操作可以使得程序运行起来更加高效。Java中多线程机制提供了在一个进程内并发去执行多个线程,并且每个线程都并行的去执行属...