基于ZEDBoard构建图像处理通路(Block Ram版本)

注:本博文的工程文件位于:
对于集fpga和arm于一体的zynq系列平台来说,图像处理是zynq平台主要的应用方向之一。图像采集部分是图像处理系统的重要组成部分,它通过图像传感器将外部的图像信息采集进来,转换为数字信号存储到系统的帧存储器中。目前在工业图像采集领域,人们常用的两种图像传感器为ccd与cmos图像传感器。ccd一般输出带制式的模拟信号,需要经过视频解码器得到数字信号才能传入控制器中,而cmos图像传感器直接输出数字信号,可以直接与控制器进行连接。随着集成电路设计技术和工艺水平的提高,cmos图像传感器像素单元的数量和采集速度都不断增大。由于cmos器件的高速性,近年来,越来越多的高速图像采集系统采用cmos图像传感器作为图像采集器件。
常用cmos传感器品牌以及选择:
sony: 日产cmos,高灵敏度和低噪声,偏重于摄影拍照,但开发的参考资料比较少;
aptina:cmos系统按拍照架构设计,开发流程较为繁琐,且价格偏高,成像品质性价比略高;
omnivision:cmos系统架构最适合图像采集,开发资料较充足,各系列间兼容性好。
数字图像采集平台架构如图所示。系统通过cmos传感器ov7725将图像高速采集进zedboard并存储到bram,然后通过vga控制模块将图像显示出来。
我们要在vivado中实现以下功能:
l 驱动cmos图像传感器ov7725,实现图像采集;
l 将图像存放到block ram中;
l 图像的vga显示;
该实例将会涉及cmos传感器的接口及驱动、cmos图像传感器的寄存器参数配置、bram存放策略等方面。
1.ov7725的引脚以及驱动
ov7725的引脚很多,但本系统中用到的ov7725模块只包含以下一些引脚:
d0~d9: cmos输出的10位数据口.本实例只用到d2~d9。
reset: cmos输入信号,复位引脚,低电平有效。本实例将其置空
pwdn: cmos输入信号,休眠模式选择,0为正常模式,1为休眠模式。本实例将其置空
pclk: cmos输出的像素时钟
xclk: cmos输入的时钟信号,本实例采用25mhz。
href: cmos输出的行同步信号
vsync: cmos输出的帧同步信号
sioc: cmos寄存器的iic时钟输入
siod: cmos寄存器的iic数据输入/输出
因为用到的引脚数量并不多,因此我们选择用zedboard上ja,jb两组pmod接口与ov7725模块相连。ov7725的驱动包含两个操作:1.配置寄存器 2.根据传入的时序信号(pclk,href,vsync),对传入数据进行拼接,组合成rgb像素。
n 配置寄存器
ov7725的正常工作需要寄存器的正确配置。寄存器的配置遵从iic协议,在pl提供的iic时钟驱使下,向不同功能的寄存器地址写入数据。本实例构建了一个iic的主模块,寄存器配置指令只需要两条即可:
0x1100;//11为clkrc寄存器,设置为00值,采用内部时钟
0x1206;//分辨率设置为vga 640x480,像素输出格式设置为rgb565
n 拼接数据得到像素rgb565
ov7725像素格式为rgb565时,时序图如下:
当帧同步信号vsync出现有效边沿之后,在href为高电平时,第一个pclk上升沿读取第一个byte(d7~d0)。此时要注意,这个byte并不代表第一个像素,而是第一个像素的r[4:0]以及g[5:3],第二个pclk上升沿读取的byte则是第一个像素的g[2:0]以及b[4:0]。当第二个pclk上升沿到来时,将这两个byte组合成一个完整的像素,就得到了第一个像素。以此类推,采集一行数据(640x2个数据),就得到640个像素值。当采集完480行的时候,就完成了一帧数据的采集。
由ov7725的vga时序可知,每一行有效时间为640x2个pclk,无效时间为144x2个pclk,每一行花费时间为784x2个pclk时钟;而每一帧总行数是510(有效行数是480);因此采集一帧数据的时间是784*510x2个pclk的时间。
2.帧缓存(framebuffer)的实现
为了方便进行显示,以及后续的图像处理,需要存储采集的图像。在vavado的ip catalog界面,在search 栏输入block mem,下方ip列表会显示出block memorygenerator,如图所示:
双击上图的蓝色区域,打开ip核定制界面。在basic板块的memory type选项设置成simple dual portram,然后在port a options 的port a width 设置成48bit,depth设置成76800.“enable port type”设置成 always enabled。在port b options 的port b width 设置成12bit,此时dept会自动设置成307200.同样,“enable port type”设置成 always enabled。
那么,读者朋友们会注意到刚才port a 的端口位宽是48bit。我们知道,要进行vga显示,zedboard的vga部分r,g,b每个通道都是4bit,显示一个像素需要12bit。因此,我们存储一个像素采用的位宽也是12bit,一共存储的像素数量为640x480 = 307200个像素。既然这样,那为什么存进ram的位宽不是12bit呢?这是因为,ip核的写入端深度允许的范围只有2-130172,而读端口就没有这种限制,为了存储一帧图像,存储的位宽就需要增加。我们需要另写一个像素整合存储到ram的机制,使连续的四个像素在存储之前先整合成一个12x4bit的变量。
ov7725的采集模块代码如下:
3.vga显示的实现
本实例中实现的vga模块顶视图如图所示:
vga部分除了产生vga信号,将像素信号接到vga的rgb三通道以外,还有一个比较重要的功能,就是产生读frame buffer的地址信号frame_addr。
利用vga的列计数器和行计数器,可以轻松产生frame_addr:当行计数器范围在0-479,列计数器范围在0-639时,每来一个vga时钟信号,地址值加1。当行计数值等于480时,地址值清零。产生frame_addr的关键代码如下:
4.具体实现步骤:
(1)启动vivado2013.3,在工作目录(例如d:xuped)下创建新工程cam_ov7725_imageshow.
(2)选择rtl project, target language选择verilog, part orboard部分选择xc7z020clg484-3,完成工程的创建
(3)添加verilog文件:在vivado主页面左边的project manager一栏,点击add sources,,勾选add existing block design source,选择add files,添加/verilog_files文件夹下的所有v文件。记住勾选“copy source into project”,如图所示:
添加帧缓存ip核:点击ip catalog,在search栏输入block mem,添加block memory generator ip核,按照以下3图设置ip参数:
(4)添加时钟ip核:在ip catalog中的search栏输入clock,选取clocking wizard ip核,双击进入配置界面。元件名字改为clk_gen,在output clocks板块增加两个时钟输出:50mhz与25mhz,并勾去下方的reset与locked。如图所示:
(4)添加引脚配置文件:再一次点击add sources,,勾选add or create constraints,选择add files,添加/constraints文件夹下的zed.xdc文件。
(5)保存,点击generate bitstream,综合、实现,生成bit文件。
系统调试及板级验证
将ov7725模块连接到pmod转接板,转接板连上zedboard的ja,jb口,上电,然后下载bit文件。可以看到红色的led[0]亮起,说明寄存器配置完毕,也可以按下btnu按键再次进行寄存器配置。通过vga显示器,可以看到ov7725采集到的图像,如图所示。

中兴F50 5G随身WiFi今日正式开售
国内光伏产业链价格迎来涨价潮
第七届高工金球奖颁奖典礼将于12月21日隆重举行
开关电源无输出的解决方法
“高能锂离子动力电池创新技术及应用跨界对接”活动召开
基于ZEDBoard构建图像处理通路(Block Ram版本)
携手地平线、楚航科技,极目智能产品方案亮相上海车展
基于一款全球范围流行的加密货币支付软件Bitpay介绍
朗德万斯宣布将启用LEDVANCE作为灯具品牌
安防芯片国产化迫在眉睫 整个行业技术成本逐渐降低
5G和AI将变革许多细分领域和行业
疑似RTX2070Ti显卡曝光 显存竟是7.5GB
超级电容器原理及电特性详细分析
线路过流对电容器有什么影响
固态电池用什么原材料_固态电池有什么优势
谷景科普不同品牌大功率电感器规格相同能否进行替代
利用PSD3XX与ADMC401接口设计的无功发生器系统方案
【新专利介绍】一种改进电表
单片4 1/2位A/D转换器7135的特点、引脚功能及应用范围
如何制作树莓派相框