基于SDRAM的视频图像采集系统

本文是在前面设计好的简易SDRAM控制器的基础上完善,逐步实现使用SDRAM存储视频流数据,实现视频图像采集系统,CMOS使用的是OV7725。

SDRAM控制器的完善

1. 修改SDRAM的时钟到100Mhz

系统时钟提了上来下面对应的时间参数就需要注意,再50Mhz下的这些时间参数的计数器的都需要做相应的修改。

2. 写入一幅图像(640 * 480)到SDRAM

640 * 480 = 307200个数据

307200 / 256 = 1200行,所以我们只需要写入1200行数据写满即可。

OV7725支持640*480分辨率的30万像素摄像头,首先验证SDRAM和VGA级联能够显示出来,所以先用串口发送一幅640*480的图片存到SDRAM中,通过VGA显示出来。

3. 将突发长度设置为full page

视频图像采集显示对实时性要求比较高,所以本设计将SDRAM的突发长度设置为full page。

sdram页突发模式

将burst length设置为full page,full page就是一次写入一行数据,我这里就是2 ^ 8 = 256个位宽16的数据。

当刷新请求来临,但是些突发还没有写完full page,所以这个时候需要等待,等一个突发长度操作完成,才能去进行刷新。相应的读操作也是一样的。

SDRAM写入1200行后又会继续写入数据。

边写边读

为了要求设计的实时性,做到编写边读,当系统检测到第一次写入数据时,然后触发使能,然后就开始读数据,实现边读边写。

加入读写FIFO缓存自动读写SDRAM

sdram写模块一次写入256个数据,rdusedw为fifo深度判断,设置fifo深度为512,当rdusedw大于256时,即拉高wr_trig,读fifo模块也是一样的,从sdram中把数据写入fifo里,当读fifo的wrusedw小于256就往里面写数据。fifo起到一个缓冲作用,既不能写满也不能读空。这里是博主感觉到妙的地方,使用异步FIFO缓冲,实现数据再两个模块在时钟域不同的情况下传输。基本上FIFO一直处在半满的状态下。

串口的时钟是50Mhz,SDRAM写入的时钟是100Mhz,所以这里fifo应该要两个独立的读写时钟。使用两个fifo,一个fifo作为串口发送过来的数据和sdram写数据端口的连接,一个作为VGA和sdram读数据端口连接。VGA模块的读使能信号决定什么时候从sdram读出数据进行显示。

这部分由于数据比较大,而且出了错不容易查找,所以更要做好充分的仿真。具体的仿真方法,我是这样仿真的,在testbench里加上串口发送模块,把接收模块的波特率提高到50Mhz,发送模块也相应的对应上1/16的关系,发送模块里面给一串数据,用for循环的方法。

VGA显示的行场扫描的的参数也缩小,这里主要是看前几行数据有没有对应上,我这是的一行有256个数据,需要注意下一行数据是不是连续显示的。

这个仿真过程是比较痛苦的,具体的就是不断的重复仿真,不断的去凑波形,当然这也应该是一名合格的工程师的必备技能,在不断重复过程中就体现出了do脚本自动化仿真的必要性,找到波形中错误的地方,回去对照代码,一级一级的往上推错误的原因,大概就是这样,掌握了仿真的技巧,其实仿真也不难。确保仿真没问题,下板子基本也就会成功了。

最后效果如下

https://v.qq.com/x/page/y0644dld7dt.html

乒乓操作

为了达到显示的实时性和同步性,设计SDRAM里的两片bank乒乓操作来进行显示,我先用串口发送一次发送两幅图片分别到两个bank里,调试VGA显示驱动能正常显示。

摄像头输入的视频源为640*[email protected],VGA的驱动显示为640*[email protected],也就是说,摄像头发送过来一帧,但VGA已经扫描了两帧,这里就会存在问题是,直接把摄像头发送过来的视频流数据显示,可能会出现两帧重叠现象。

如图是没有乒乓操作的存储,在t0时刻sdram完成了1/2帧的存储,VGA已经显示了1帧,t1时刻sdram完成1帧的存储,VGA显示了两帧,到了t2时刻可以看到第一帧和第二帧的是交叠的,在理想的情况下这样显示其实是没有什么问题,即使你的t2时刻第一帧图像和第二帧的图像重合,人的肉眼也察觉不到。但是实际上考虑到硬件本身的因素,摄像头输出的帧率并不能保证完整的640*[email protected],这样如果继续单帧存储,那么这样的两帧交叠可能会更严重,乒乓操作可以解决这个问题。

我们为了确保当前显示的一帧是完整的一帧,使用两个bank进行分别存取,在刚开始的时候摄像头给bank0写入数据,写满bank0然后切换到bank3写数据,VGA读取bank3的数据,读完一帧切换到bank0读取数据。这样基本上可以保证两帧交叠的概率降低。Verilog代码实现起来也是非常简单的。

在写模块里加上

在读模块里加上

然后就可以实现乒乓操作了

我先用串口发送了分别发送了两幅640*480的图片到sdram的两个bank里,最后乒乓操作显示的效果还是比较有趣,视频如下。

https://v.qq.com/x/page/w06602k4eho.html

视频图像采集系统

如果完成到上面的过程,sdram控制器基本上没毛病了,在上面写的SDRAM的基础上加上OV7725摄像头驱动显示,摄像头驱动和采集部分代码移植的是CrazyBingo的,这个过程还是比较顺利的,sdram部分基本不用改,直接把摄像头采集到的数据和写sdram使能连接到一起就可以了,我的sdram控制器跑到100Mhz,并实现视频图像实时采集没毛病。

https://v.qq.com/x/page/m06607w3y9s.html

转载请注明出处:NingHeChuan(宁河川)

个人微信订阅号:开源FPGA

如果你想及时收到个人撰写的博文推送,可以扫描左边二维码(或者长按识别二维码)关注个人微信订阅号

知乎ID:NingHeChuan

微博ID:NingHeChuan

原文地址:https://www.cnblogs.com/ninghechuan/p/9096671.html

原文地址:https://www.cnblogs.com/ninghechuan/p/9096671.html

时间: 2024-08-28 12:22:44

基于SDRAM的视频图像采集系统的相关文章

基于AXI VDMA的图像采集系统

基于AXI VDMA的图像采集系统 转载 2017年04月18日 17:26:43 标签: framebuffer / AXIS / AXI VDMA 2494 本课程将对Xilinx提供的一款IP核--AXI VDMA(Video Direct Memory Access) 进行详细讲解,为后续的学习和开发做好准备.内容安排如下:首先分析为什么要使用VDMA.VDMA的作用:然后详细介绍VDMA的特点.寄存器作空间: 最后阐述如何使用VDMA,包括IP核的配置方法.代码编写流程等. 本章主要是

[blog]基于SURF特征的图像与视频拼接技术的研究和实现(一)

基于SURF特征的图像与视频拼接技术的研究和实现(一) 一直有计划研究实时图像拼接,但是直到最近拜读西电2013年张亚娟的<基于SURF特征的图像与视频拼接技术的研究和实现>,条理清晰.内容完整.实现的技术具有市场价值.因此定下决心以这篇论文为基础脉络,结合实际情况,进行“基于SURF特征的图像与视频拼接技术的研究和实现”. 一.基于opencv的surf实现 3.0以后,surf被分到了"opencv_contrib-master"中去,操作起来不习惯,这里仍然选择一直在

项目三. 基于图像压缩的视频监控系统

项目三. 基于图像压缩的视频监控系统 Sprint0-产品设计与规划 基于图像压缩的视频监控系统 1. 产品功能演示 在linux系统上运行程序,弹出登录界面,输入地址.端口信息,弹出视频监控界面,实时传出视频信息. 2. 功能模块分析 采集端: 图像采集子系统 图像编码子系统 传输子系统 主程序 监控端: 传输子系统 图像编码子系统 传输子系统 主程序 Sprint1-基于Epoll架构的采集端程序框架设计 第1课-Epoll机制精通 大纲: v  为什么用Epoll? 阻塞型IO与多路复用

一种基于FSIM对视频编码图像质量客观评价的方法

一 为什么对视频编码图像质量客观评价     视频图像质量主观评价一般采用连续双激励质量度量法对任一观测者连续给出原始视频图像和处理过的失真图像,由观测者根据主观感知给出分值,其需针对多个视频对象进行多次重复实验,耗时多.费用高,难以操作:而视频编码图像的客观评价早期主要采用峰值信噪比(PSNR)或均方差(MSE)衡量视频序列的失真度,虽然其具有操作简单.成本低.易于实现的特点,但是由于其忽略了图像内容对人眼的影响,不能完整地反映出图像的质量.所以现实中还是多以主观评价方式为主的,码率影响视频请

基于内容的视频搜索引擎

项目介绍:随着视频类型的增加和数据量的日益庞大,如何有效地组织和管理这些数据,使人们能够方便地从大量视频数据中找到自己感兴趣的相关视频片段已成为一种迫切的需求,而能够满足这一需求的技术便是目前人们普遍关注的基于内容的视频检索技术(CBVR, Content-Based Video Retrieval).CBVR相对于传统的检索系统而言有很大的不同.一方面,CBVR中检索的对象不再是视频数据本身,而是从视频数据中提取出的“内容”描述数据:另一方面,检索的方式也更加多样化,可以像文本检索系统一样,通

视频图像去模糊常用处理方法

视频图像去模糊常用处理方法 随着“平安城市”的广泛建设,各大城市已经建有大量的视频监控系统,虽然监控系统己经广泛地存在于银行.商场.车站和交通路口等公共场所,但是在公安工作中,由于设备或者其他条件的限制,案情发生后的图像回放都存在图像不清晰,数据不完整的问题,无法为案件的及时侦破提供有效线索.经常出现嫌疑人面部特征不清晰,难以辨认,嫌疑车辆车牌模糊无法辨认等问题.这给公安部门破案.法院的取证都带来了极大的麻烦.随着平安城市的推广.各地各类监控系统建设的进一步推进,此类问题会越来越突出. 一.模糊

转:基于内容的视频分析与检索

摘要 文章简要介绍了从基于内容的视频分析与检索问题的提出到所涉及的关键技术以及目前研究状况,并简要介绍了现阶段在这方面的研究热点及以后要做的工作. 一.问题的提出: 互联网的出现给人类带来了很大的便利,特别是实现资源共享之后的互联网,但面对这浩如烟海的资源到底哪些是对自己有利用价值的呢?而90年代以来,多媒体技术和网络技术的突飞猛进,人们正快速的进入一个信息化社会.现代技术已能运用各种手段采集和生产大量各种类型的多媒体信息数据,出现了数字图书馆.数字博物馆.数字电影.可视电话.交互电视.会议电视

多媒体编程——ios视频图像绘制工具类。

IOS上视频级的图像绘制 ios上的图像绘制常规的是 UIView的drawRect函数,但是这个函数是异步触发,并且由主线程执行.虽然可以通过一定技巧达到主动绘制的效果: 1.传递图像给UIView缓存着. 2.然后调用UIView的setNeedDisplay 改写重绘标志. (以上两步是讲图像丢给UIView,让它自己进行绘制,但是绘制的时机不可控,有时候我们需要它马上绘制,甚至有时候我们需要知道它什么时候绘制完成了,就需要下面两步) 3.在播放线程中调用UIView的 perfromOn

基于opencv将视频转化为字符串Java版

基于opencv将视频转化为字符串Java版 opencv java 先上一个效果图吧 首先,弄清一下原理 我们要将视频转化为字符画,那么就需要获取画面的每一帧,也就是每一张图片,然后将图片进行转化,变成字符串,然后进行打印. 1.获取视频 在opencv中提供了一个函数去获取视频 VideoCapture capture = new VideoCapture("");//里面放图片的地址 //ps:如果里面为0[不要"",就是整数0],则就对默认摄像头进行抓取 M