随想录(fpga处理图像的优缺点)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

 

    fpga在很多人看来,是一个异类。说它是硬件,却需要编写RTL代码、综合和下载;说它是软件,还需要专门的fpga芯片,综合出来的也是门电路,还会涉及到时序、信号完整性的问题。但是,不管怎么说,fpga在很多领域扮演非常重要的角色。图像处理就是很重要的一个环节。这个时候,有些同学可能就会有疑问,fpga的时钟频率没有比cpu高,为什么可以做到高效率又省电呢?我想可能有这么几个原因。

 

1、数据并发处理

    大家都知道cpu是一个数据、一个数据处理的。但是对于fpga来说, 它可以一个时钟内,并发处理多个数据,而且这个数据同时可以做很多个运算,比如乘加、比较等等,只要没有clock vilation,这一点相信很多朋友都知道。

 

2、流水线技术

    fpga里面处理数据,很多时候需要很多算法一起参与运行,这个时候就需要用到流水线机制。fpga里面的数据都是按行计算的。所以,每一个像素在输出前,可能经历好几个算法,比如灰化、算子、二值化、膨胀、腐蚀等多个运算。这个时候,流水线技术就派上了用场。前一行数据处理算子的时候,后一行数据可以处理灰化,整个过程是并行的,彼此之间没有打扰。

 

3、边接收边处理

   这一点是最容易被忽略的。传统的软件操作都是数据都准备好了,才能开始处理。而fpga,可以一边从sensor接收数据,一边处理,这部分其实效率非常高。利用数据传输的空隙就可以处理数据,这部分节省的时间非常多,外部传输数据是很浪费时间的。

 

4、fpga和cpu流水线作业

    cpu和fpga擅长的领域不同,fpga擅长简单重复的算法,cpu擅长复杂的算法。因此一幅图片,可以让fpga处理上半部分,cpu处理下半部分,这样也是一个小的流水线,增加图片的处理速度,节约时间。

 

5、缓存

    fpga里面有一些缓存空间,比如可以保存若干行图像数据,这个可以在处理一些算子的时候使用,也可以帮助提高效率。

 

    上面说的都是fpga的优点,其实fpga也有一些缺点的,

 

1、学习成本高

    fpga需要了解数字电路、vivado或者quartus软件很多知识,软件工作者无法享受到fpga带来的好处,这一点影响了fpga的推广。虽然现在学hls的人很多,但是很多人并不会使用。

 

2、价格

    相比较stm32或者其他arm soc,fpga的价格还是略高些,特别是xilinx里面的mpsoc系列,那个价格基本是arm的好几倍。

 

3、难度

    和软件不同,只要有一点c语言基础就可以做,但要做好fpga需要坐很长时间冷板凳的。不管是test bench、system verilog,或者在线的chip scope调试,这些都不是短时间能够解决的。

 

4、市场供给人少

    一个不争的事实时,相比较大量的java工程师,c、c++工程师要少很多。相比较c工程师、嵌入式工程师,fpga的工程师就更少了。要从不多的fpga工程师里面,找到优秀的、合格的候选者,更是难上加难了。

 

    当然,对于特定的算法加速场景,用fpga还是比较适合的。不需要很高的速率,只要选择好了策略,用好传输时间、并发机制和流水线方法,fpga常常会达到很不错的使用效果。有兴趣的同学可以试一试。

 

 

 

 

 

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页