【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
抛开arm soc不谈,处理图像的方法基本就是fpga,或者是fpga+mcu,或者是zynq这种fpga、ddr、arm可以一起访问的芯片。但是三种方法里面,最简单的还是zynq这种芯片,其他三种方式,各有各的问题。
1、纯fpga意味着需要硬编码一切
以图像处理为例,中间少不了图像的采集和显示。既然如此,那么不管是camera的读取,还是lcd、hdmi的显示都需要fpga来完成。当然camera和lcd的显示,中间的速率还不一定完全匹配,这个时候就需要fpga来处理ddr的初始化。**这就意味,我们在编写业务之前需要做一大堆的准备工作,其中就包括了复杂度很高的ddr初始化。**难度是肉眼可见的。
2、fpga+mcu能弥补,但不多
除了fpga处理图像之外,有的时候还需要处理一些额外的工作。比如图像显示的时候,有些情况下需要截图,需要进行回显,需要进行上下图片的切换。甚至,图片保存的时候,还需要放到tf卡里面,需要一个文件系统来交互。这种情况下如果再去用fpga实现,就不合适了。此时为了不增加过多的成本,mcu倒是一个不错的办法。
虽然fpga已经占据了全部的ddr资源,这个时候fpga和mcu之间就只能通过spi这类总线来进行联系。这样一来,mcu就可以处理一些人机交互的事情,比如资源配置、图片保存、文件信息提示、图形界面等等,这部分都可以mcu来完成。不过mcu也有自己的缺陷,那就是内部ram空间有限,就算访问ram,只能是速率不高的sram。此外,mcu无法支持复杂的usb和tcp/ip协议栈,这些都是它的缺点。
3、fpga+arm+ddr
**zynq最为客户着想的地方,就是fpga、arm、ddr相互之间都可以通过总线进行访问,使用上非常方便。**基于这一点,适合fpga来做的,就可以fpga来做;适合arm来做的,就arm来做。不仅如此,zynq由于cpu频率高,还可以跑linux,这样就可以用好usb、tcp/ip,使用上十分的方便。
哪怕不是用linux,只是用arm跑一个bare mental系统,也是非常合适的。很多的产品,或者是应用,从效率考虑本身是非常适合fpga来处理的,但是中间处理过程中也会涉及到一些配置或者是算法,这个时候就可以把这些算法或者是配置单独写成一个ip。数据部分,直接dma从ddr拷贝到ip,ip处理完了结果直接发给cpu,让cpu再去做后面的工作。不管是lcd直接显示,还是通过lwip网络协议栈发出去,都是非常方便的。这里是所以让ip实现算法,而不是让cpu来做,一部分是因为处理不过来,一部分是因为实时性要求。

4、zynq为后续的soc创造可能
虽然类zynq的应用场景很多,但是对图像来说,它还是无法实现编解码、npu、gpu处理这些功能的。所以哪怕是当前zynq做不了这些,也是可以通过后续接一个soc芯片来继续处理的。当然,如果实在不需要zynq里面的arm,换一个纯fpga处理,也是可以的。