【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
学习嵌入式的同学都知道,嵌入式一般分成这几种chip,有51,有stm32 mcu,有soc,有dsp,有gpu,有npu,最后一种就是fpga。有的最后是单独卖,有的需要一个上位机。前面几种一般就是软件编程为主,应用也比较广,只有最后一种fpga,它的使用和前面几种差异很大,听说过的人多,用的人少。今天正好来聊一聊。
1、fpga的基础是时钟、复位和信号
如果是软件开发,大部分都是c语言开发,少部分是c++开发。既然是软件开发,那就是我们写好软件之后,由编译器和链接器生成二进制代码之后,送到flash里面,等着被cpu执行。不管这个cpu属于51、arm、还是dsp,它都是一条一条去执行的。所以软件执行的基础是汇编指令。
但是fpga不同,它的基础是一个、一个的数字信号。从颗粒度来说,它要比纯软件细很多。基本上每一个外设,每一个接口都需要去详细设计,当然这个过程中也可以使用厂家提供的ip,或者是sample code。每一个fpga工程都有一个top module,这个top module中除了clk、rst,剩下来就是各种外设,包括gpio、sdram、lcd、camera、spi、iic等等。这里说的是,相比较纯软件的芯片,fpga本身更接近硬件一点。
2、fpga的并发问题
和软件一条一条去执行不同,fpga天生就是并发的。当然,我们也可以说,多核cpu也可以并发执行。不过这种并发和fpga比起来,还是小巫见大巫。因为fpga,本身设计的时候,就是让所有的register在一个clock下面,并发运行,这是它的基因决定的。
至于是不是所有的register,真的每一个时刻都要去变更,这个真不一定。首先,我们会切分成不同的module,每一个module都是独立的状态机。module里面,如果复杂程度比较高,还会继续切分成子模块。另外,对于每一个module而言,如果register之间相互依赖,那么即使是并发的fpga,也会变成顺序执行的形式,这个时候就和mcu开发是一样的了。
3、fpga的demo居然和mcu demo一致
fpga具有天生的并发特性,不过大家在学习和开发买板子的时候,却发现这样一个事实。那就是fpga的demo例子居然和mcu是一样的,也是从点灯、串口、定时器、spi、iic、ddr、屏幕这些开始,最后以一个小的工程收尾。这个时候大家就会很疑惑,既然fpga学的内容和mcu一致,而且fpga是并发思维,调试也不好调试,价格上也没有优势,为啥自己还要学习fpga?
4、价格问题
fpga本身是很垄断的行业,之前都是国外垄断,尤其是xilinx、altera和lattice三家公司,基本占据了全部的市场。现在慢慢的国产fpga起来了,尤其是中低端领域,国产fpga也开始展露头脚。不过和mcu相比较,fpga的整体价格还是偏贵,资源密集度也少。一般的mcu或者是soc板子,最便宜的十几块、二十几块就可以,fpga虽然说现在便宜一点了,最便宜的也要上百块,更不要说动则上千、几千的fpga了。
5、实际落地场景问题
从实际应用来看,fpga的应用还是在两个领域比较多。一个是希望用fpga做多接口的电路。比如一个mcu、soc,它的某种接口,例如spi、iic都是数量有限的,但是fpga几乎是全能的,做成什么接口都可以,数量没有限制。还有一种就是算法加速,特别是那种高带宽、低复杂度的算法。这种情况,特别适合cpu采样、fpga做预处理、接着cpu完成算法的场景,很多cpu+fpga的soc就是这么做的,以前可能只有zynq,现在很多国产的fpga厂商也开始支持这种模式了。图像就是fpga应用最合适的场景之一。
6、厂家的支持
大家使用fpga的时候,最好得到原厂的帮助,这样会快很多。不光fpga可以用ide开发,做一些简单的pll、fifo、ram、rom、乘法器、dma这些,还可以利用原厂的资源,获取pcie软核、mac软核,以及数量不低的sample code,这些都可以改一改就可以用在自己的产品上的。我们学习的时候,是需要一行代码一行代码去写,实际应用,最好还是建立在厂家的sample code基础之上去开发、去应用。