当前位置:AIGC资讯 > 数据采集 > 正文

【FPGA工程篇】图像采集及显示(一)

FPGA学习入门:流水灯;

FPGA项目入门:图像采集及显示。

----FPGA大叔·沃自己硕得

目录

前言

一、项目要求

二、方案设计

三、代码实现

前言

        很多小伙伴在学习FPGA的时候,肯定都是先了解了verilog语法后,写了几个加法器;然后搞块学习开发板,跑跑流水灯、搞搞数码管显示对吧。流水灯的点亮,也可以说是点亮了我们FPGA殿堂的第一盏灯。

        而同样的,图像采集及显示,在笔者看来可以说是FPGA项目入门的第一个项目也不为过。在该系统中,涉及到接口时序、缓存(FIFO、DDR3)、显示驱动(LCD)等,一个较为完整而又较为容易理解的系统。另外,上板调试还会涉及到约束文件的编写、硬件的连接、bit文件及mcs文件的生成、程序固化等,一个完整的入门项目。

        其他图像处理类项目,基本可以在此基础上进行扩展。包括图像前处理(图像滤波、伽马矫正、图像增强etc)、图像后处理(锐化、边沿提取etc)等。

        所以,笔者在此对其进行整理。温故而知新。

一、项目要求

对摄像头信号采集并传输到LCD屏上显示。

硬件平台:

摄像头型号 :MT9V034(灰度摄像头,8位并行接口,分辨率:752*480 ,帧率:15-60fps)

FPGA型号  :Xilinx  A7

软件平台:

Vivado 2018.3

二、方案设计

        首先,我们拿到项目要求,第一件事情就是分析其需求。而且,需求分解尽可能细致、详尽。那么,对于本项目要求来说,我们也可以大致对其需求分解:

摄像头信号采集 图像数据传输 LCD屏显示

        针对各个需求,我们再进一步深究其内涵。

        摄像头信号采集,如何采集、根据什么采集?根据摄像头手册可知,摄像头将采集到的模拟信号转为数字信号,包括: 场同步信号、行同步信号、8位并行数据信号;这里,简单解释下,场同步信号代表一帧图像的有效范围;行同步信号确定有效像素数据。在场同步信号以及行同步信号都有效时,数据为有效像素数据。

        所以,我们只需要在同步信号有效时,采集这8位并行数据即可。

        图像数据传输,从采集到输出显示,如何保证不丢帧,不撕裂?一般来说,由于FPGA内部存储容量有限,会外挂DDR芯片作为存储扩展;所以,常用的做法是,先通过FIFO进行数据缓存,然后写入DDR,进行缓存一定帧数的图像(通常,项目也会要求xxM大小的缓存容量)。同时,FIFO还能起到跨时钟域数据同步的作用。最后,再从DDR读出图像数据,根据发送接口的不同,对发送模块设计相应的时序控制。

        LCD屏显示,需要我们设计驱动模块,提供LCD显示所需的行/场同步信号以及RGB信号。RGB数据为565格式。即:R[4:0]G[5:0]B[4:0]

        接下来,我们可以初步画出系统框图了:(后面使用电脑重新画图,便于查看)

 根据系统设计,我们将项目分为以下三个子模块:

图像采集子模块(接收模块) image_capture.v DDR缓存子模块(缓存模块) ddr_top.v LCD驱动子模块(发送模块)lcd_drive.v

        ——>接收——缓存——发送——>

接下来,我们再仔细讨论这几个子模块。

三、代码实现

各模块的详细规划设计以及代码实现,我们下期见。

项目涉及到DDR3部分可以参考博文:

Xilinx FPGA平台DDR3设计保姆式教程(汇总篇)——看这一篇就够了

更新时间 2023-11-08