FPGA图像处理开发流程

在掌握FPGA基本知识以及数字图像处理基础之后,还需要准备的硬件有一块FPGA开发板(含有显示接口,摄像头接口)、一个入门级的摄像头(0v7725)以及一个液晶显示屏,在正式开启FPGA图像处理开发之旅之前,务必要使用FPGA驱动摄像头视频显示,同时要掌握摄像头驱动和液晶屏驱动接口和时序,最重要就是要能够进行视频流Modesim仿真。一个常规的FPGA图像处理开发流程是由需求分析及问题描述、软件算法设计及验证、硬件平台设计、FPGA映射以及仿真验证几部分组成。如下图所示:

 

 

一、需求分析及问题描述

1.1 系统的功能。也就是你要做什么,需要一个详细的图像处理后的预期结果说明。

 

1.2 系统的性能。完成这个系统的指标是什么,对于实时的图像处理来说。系统所允许的最大延时以及需要每秒所处理的帧数是比较关键的两个指标。同时比如采用的摄像头的分辨率、焦距等指标,还有车牌识别的识别率要求等。

 

1.3系统的工作环境。图像处理受光照的影响因素很大,因此考虑系统的工作环境对后期算法的选择极其重要。还需要考虑要契合所工作的机械位置,对板子形状体积等影响。

 

二、软件算法设计及其验证

在进行FPGA图像开发之前,首要做的就是软件算法设计及其验证,其中软件算法复杂性会对,硬件的架构,硬件的选型以及资源的消耗。因此做FPGA图像开发不直接在FPGA上做,因为后期的编译,调试将会花费很长时间。

 

在拿到需求之后,我们一般首先要做的就是使用Matlab/opncnv软件算法验证,不断的调试仿真,选取一个最优的方案;然后尝试将串行的软件算法以及软件封装的函数,改写成适合FPGA处理的形式,在进行进一步仿真验证。其中最重要的一点就是精度问题,因为FPGA不善于处理浮点运算,因此要考虑浮点到定点的转化,这样做,当然会带来精度的丢失,因此需要评估精度对系统的影响,在满足要求范围内,进而来确定FPGA中定点转换的位数。举一个例子:

计算3.145/2(1.573);系统要求的精度在0.01之内,在FPGA计算中可以首先将3.145扩大256倍取整后为805进行计算;得到[805/2]=402,然后在缩小256倍(右移8bit)等于1.570;可以看到满足系统精度要求。

 

三、硬件平台设计

3.1软件和硬件划分

这里所说的硬件指的是由FPGA逻辑实现,软件是由DSPARM、单片机编程实现,像计算量较大的预处理算法(形态学滤波、sobel算子和均值滤波等)可以交由FPGA加入处理,像一些涉及到复杂浮点运算或者FPGA不易实现的可以交由软件编程实现,达到软硬协同工作。

 

3.1资源评估和FPGA选型

在硬件方案确定后,在系统选型之前,很有必要对系统资源的预估,对图像处理系统来讲,肯定会涉及到诸如行缓存,帧缓存,以及显存,不可避免的会使用到片上资源(寄存器,SRAM资源),同时也会预留一些调试的片上资源(SigaltapII),一般片内资源较多的FPGA比较贵,像大的帧缓存可以考虑存储在片外资源上。

 

四、FPGA映射

FPAG映射也就说FPGA的硬件实现,将软件算法转换成适合FPGA是实现的算法,FPGA操作是可以是并行的,考虑到时序约束问题,经常使用的是流水线操作,同时考虑信号扇出问题可以进行逻辑赋值,说白了,这里涉及到了一个速度与面积的平衡。

 

很多情况会涉及到共享资源的使用,采用时分复用的方式实现;这样能节省很多资源,与之而来的就是要设计一个仲裁机制防止冲突

 

五、仿真验证

在RTL代码完成之后,首先进行功能测试,其次才是下板测试,这里在设计RTL代码时要设计一些debug信号便于定位问题,或者将一些关键信号引到顶层模块便于在线查看(使用示波器或者在线逻辑分析仪);也可以硬件模拟一些激励信号来辅助调试。