(本系列只需要modelsim即可完成数字图像的处理,每个工程都搭建了全自动化的仿真环境,只需要双击 文件就可以完成整个的仿真,大大降低了初学者的门槛!!!! 如需要该系列的工程文件请关注知识星球: 成工fpga, ,关注即送200GB学习资料,链接已置顶!)
上个系列《闲庭信步使用SV搭建图像测试平台》完成了图像测试平台的搭建和一些常用图像处理算法的实现,该测试平台不包括任何的时序逻辑,也就是说不用关注认识的底层硬件,说白了就是软件的开发,等同于用matlab/python/opencv等进行的图像处理。
这个时候,成工想和大家探讨一下FPGA开发到底是硬件开发还是软件开发 。FPGA的开发,不同于硬件电路的设计,需要画电路原理图,画PCB,贴片,焊接和调试等,使用硬件描述语言进行编程开发的。一说到编程,很多人马上就会说编程就是属于软件开发,而且很多招聘岗位上,都把FPGA开发归到软件编程的范畴(成工不建议大家去面试这些岗位,原因大家细品)。但是成工可以明确的告诉大家,FPGA的开发设计基本都是硬件的开发,对于纯粹zynq的ps端的编程和目前FPGA各种加速卡的应用开发,这些属于软件开发,其它的基本都是硬件开发。
对于成工的上个系列《闲庭信步使用SV搭建图像测试平台》到底是软件开发还是硬件开发呢?成工不止一次的说过,该系列不包括任何的时序逻辑,等同于matlab/python/opencv等软件的开发,所以很明显,也是属于软件的开发 。成工想说的是,SV语言是verilog的扩展,可面向对象进行编程,除了继承了verilog的电路描述功能,还适合用于验证环境的搭建,所以SV是非常完备的,既能进行软件和开发又可以进行硬件的开发。
在很多人的眼中,硬件开发和软件开发有着不可逾越的鸿沟 ,而且在很多时候,确实也是如此。大约五六年前,成工还在浙大的一个实验室工作,有结合其它大学合作实验室的研究生需要在FPGA开发板上验证他们的算法,但是把编程综合布局布线后生成的烧写文件下载到FPGA中去后,根本得不到想要的结果,于是就让成工帮忙分析一下。成工了解了一下情况,他们是在前面实验人员工作的基础上添加了他们的算法,成工确认了一下,传感器数据的采集和预处理,输入和输出接口等都没问题,这说明前面实验人员留下的FPGA平台都是好的。当成工看到算法实现部分的时候惊呆了,算法是很复杂的加减乘除运算,但是他们只用了assign来实现,中间没有任何的时序逻辑,一口想吃成大胖子,这就是纯粹的软件编程思维,一问他们确实都是在matlab上做算法验证的,第一次使用FPGA编程。
而这个系列,《闲庭信步使用图像验证平台加速FPGA的开发》就是带领大家一步步将图像处理的各种算法和操作用硬件描述语言来实现,也就是打破软件和硬件编程的壁垒,让软件编程和硬件编程协同起来,该软的时候软,该硬的时候用,提高开发的效率。
上个系列中,图像测试平台都是能直接获取一副图像的所有数据,但是实际的硬件平台,图像数据是一行行,一个像素点一个像素点产生的,所以对于任何不管是3x3还是5x5的算子,软件编程直接根据标号取数据即可,数据随时都是准备好的,就像开启了上帝视角一样;但是硬件编程要对数据进行缓存,还要对数据进行对齐,然后才能进行操作;软件编程加减乘除,不管是整数还是小数,都可以直接进行赋值操作;但是硬件编程要考虑如何拆分加减乘除,如何安排一个时钟周期的任务,对于小数应该如何移位放大,最终的结果如何再缩小回去。说白了,软件开发人员的上帝视角是因为底层的硬件驱动开发安排好了所有的控制逻辑,也就是软件开发人员屏蔽了底层的硬件开发。这就像高层的领导只把握公司发展的大方向,至于底层员工如何开发,测试,销售等他们都不会太关注。
虽然上个系列的结篇中有介绍,这个成工还是会把本系列的内容再复述一下。
《闲庭信步使用图像验证平台加速FPGA的开发》,该系列首先基于上个系列的图像测试平台,使用interface完成FPGA的时序逻辑模块和测试平台的交互,所以将图像测试平台改名为图像仿真测试平台。这个系列的RTL代码都是可以直接拿到开发板去使用的,成工会详细的和大家讲解如何使用FPGA实现数字图像的处理。
《闲庭信步使用图像仿真验证平台加速FPGA的开发》**,**该系列成工也已经完成,共34课,如下所示:

每一课的内容分别如下所示。

该系列增加了一个img_sequence_pkt包,实现了测试平台和时序逻辑间的数据交互。

如下是仿真文件的顶层,定义了interface ,例化了video_ctrl模块,该模块用于产生图像的相关时序,还例化了top模块,该模块包括所有的图像处理的FPGA实现。138到162行的initial块完成了图像数据的读取,测试模型和FPGA仿真图片保存和图像数据的比对等功能。164到173行的initial块完成了测试平台和时序模块间的数据交互。

到了该系列的结束,src文件夹下会有所有的可综合的rtl代码,这些代码基本可以直接拿到开发板上使用,如下所示。

最后让大家欣赏一下该系列图像处理得到图片的动图。








