【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
在嵌入式芯片领域,除了mcu和soc、dsp以外,还有一类集成式的soc也是非常有特点的。比如集成cpu和gpu的nvidia jetson系列;集成cpu和dsp的ti j6、j7系列;集成cpu和mcu的stm32mp157系列,里面装了一个m4。还有一种就是cpu+fpga,比如zynq,这是大家听过最多的fpga集成芯片了。前面几种集成芯片的开发,基本都是c/c++开发,难度不是很大。但是arm+fpga这种,对人的要求还是蛮高的。要真正用起来,还是需要下一番功夫的。

1、fpga当成arm的一个协处理器
fpga最厉害的地方,就是外设扩展和算法加速。它的缺点也很明显,那就是开发难度要比c语言高一点。主要是因为学习fpga,要比学习c/c++的人少很多。因此,最好的方法,就是把fpga当成是arm下面的一个协处理器,用它做接口拓展,或者是对某些特定算法进行加速处理,这是最方便的,也是发挥两者优势最好的方法。
2、共享内存的交互模式最简单
arm+fpga的处理,也可以通过分列式元器件来实现,这个时候通信方法就变得很关键。简单的如串口、spi、iic、sdio都可以,高速的通信方法一般用pcie。不过两者都没有共享内存来的方便,因为fpga本身只是一个协处理器,arm cpu也是单独挂在总线上的,ddr也是如此,这种情况下就可以借助于共享ddr实现大数据通信处理了,但是数据太多的话,fpga独享ddr,和arm cpu分开来也是可以的。
3、国产arm+fpga soc的兴起
之前,实用arm+fpga开发的模式,从性价比来说,能够使用的soc不是很多,主要就是xilinx的zynq系列。现在随着国产化的推进,复旦微、紫光同创、安路都有自己的arm+fpga soc芯片,因此在可选择性上面有了很大的进步,这是之前所没有的。
4、低成本应用不适合这类soc
一般这类soc,价格不会特别便宜。和单独的mcu、soc比较,价格没有明显的优势。这就导致了,如果是开发一般的mcu应用、soc应用,最好还是选用那种量大的芯片。只有对产品性能、稳定性、实时性有一定要求的场景,比如汽车、医疗、军工、内窥镜、工业等领域,才能最大程度把arm+fpga这种形态的优势发挥出来。
5、一定要把arm+linux的优势发挥出来
fpga虽然性能比较好,但是开发比较麻烦,它的优势其实是加速。要论生态,arm+linux开发的模式,要好得多。但是一部分算法的性能,是没有办法借助于cpu来实现的,比如说图像处理,不管是常规的isp,还是数字图像处理,用cpu来实现都是勉为其难,这种情况下就应该发挥fpga的优势,等预处理结果ok之后,再交由cpu做后续的处理,这是比较好的方法。
linux开发本身也是很大的topic,从系统移植、uboot开发,到device tree配置、驱动开发、应用开发,每一步都不容易,这部分需要自己有一定的基础,才会做的比较好。在zynq上面,arm一般认为是ps侧,fpga一般认为是pl侧,开始的时候可能不太适应,时间长了就好了。
6、开发方式多样
虽然是arm+fpga开发,但是从开发形态方面可以有多种多样的形式。比如单arm开发、双arm开发、单arm+fpga、rtos+fpga、双核arm+fpga、单纯fpga开发、linux+fpga开发、rtos+linux+fpga开发等等,这里面选取哪一种一般根据自己的实际情况来决定。
7、慢慢掌握vivado+vivado sdk开发环境
vivado从前大家都是认为开发fpga的,事实也确实如此。不过自从有了vivado sdk之后,我们还可以用它来开发arm程序,尤其是单核arm、双核arm、rtos程序,使用起来还是非常方便的。生成好的fpga工程直接导入到sdk,就可以生成对应的sdk代码,整体应用不算复杂。
8、学习zynq的一般路径
很多推荐zynq学习的路径一般是这样的,fpga学习、sdk学习、hls学习、linux学习。第一、第二、第四都比较好理解,hls学习有一点不好懂,其实就是用c写数字ip。虽然理念很好,但是实际开发未必有verilog方便。所以开发的时候,不妨直接学习第一、第二、第四部分,如果个人对嵌入式mcu、soc比较精通,那么可以稍微了解verilog之后,直接做项目也是可以的。
9、zynq的启动
zynq的启动其实比较有意思,它是自检完之后,先加载fsbl,bitfile也是fsbl里面完成加载的,接着加载application代码。这个fsbl和application的bsp部分,是可以共享的。所以zynq最小的镜像开发模式其实就是三个文件,一个fsbl、一个bitfile、一个application。
如果是换成linux的话,那么就把application换成uboot就可以,这就变成了一个fsbl、一个bitfile、一个uboot,其他linux需要的device tree、kernel、rootfs依次放到后面就可以了。如果有用户需要单独加载代码,只需要挂在一个tf卡,把应用程序放在tf卡,启动后加载即可。
10、未来zynq的发展
除了arm+fpga这种模式之外,将来的soc为了适应ai时代的到来,势必会增加ai相关的ip,比如说gpu、比如说npu,这些基本上都是预料之中的事情。所以,可以肯定的是,类似zynq的芯片肯定会长期存在,但是市场是否扩大还是萎缩,确实是一个未知数。