最近的几篇论文都改好投出去了,希望后面有好的结果。暂时也就有点闲暇时间空出来了,好久没有写技术文章来总结提炼一下了,今天难得就写一点。
每年到了找工作的时节,总会有很多迷茫的小本甚至是小硕在到处讯问说:我是不是应该去参加个培训班,去学一门什么什么技术。然后学哪个比较好找工作一点,学哪个收入会高一点等等。每当这个时候就有很多抱着就业目的的人来问到底学什么技术好啊,哪个技术有前途啊,等等。
一般在这个时候,我是不推荐这帮人去学习FPGA的。当然,并不是FPGA技术不好,也不是学FPGA技术没有前途,而是有别的很多原因。导致它并不适合推荐给以就业为目的的这帮人去学习。
原因一:FPGA的“逼格”太高
FPGA的应用范围相对而言一直不宽。之前我也谈过,其主要的应用面就是三个:高速接口电路、高速数学运算与数据处理、ASIC/SoC的验证原型;也有人说可重构计算是FPGA的第四大应用领域,但是我觉得目前还没有什么真正意义上的可重构计算,即使有也可以将其归并到第二类里面去。在掌握基本的HDL语言和FPGA开发流程的基础上,三个方向分别还需要掌握其它相应的知识。
第一个方向是传统的,也是目前国内大量中小公司和部分科研院所使用FPGA的主要方向。主要包括接口扩展、协议转换、高速收发与处理等内容。通常在这个方向混饭还至少需要掌握以下内容:1、高速电路板设计,2、计算机接口技术;可能还要求掌握的技术包括:1、底层驱动开发,2、通信协议。
第二个方向涵盖的内容较多,但是核心都是利用FPGA实现算法或运算加速,从传统的FFT、FIR到最新的一些所谓的NB的算法都有可能。这个方向门槛相对于第一个方向更高,通常都是需要有一定技术水平的公司才能完成。因为涉及到算法和FPGA的协同优化。目前国内的华为、中兴这样的大的通信公司,以及一些电子通信类的整机研究所会招聘这个方向的人。一些有技术实力的创业型公司或特殊领域的公司(如金融、石油领域的数据分析方案解决)也有这方面的需求。更值得欣慰的是目前google、X讯这样的互联网公司看起来也在考虑引入FPGA实现算法加速。但这个方向混饭吃也不容易,至少需要掌握以下内容:1、常用的数字信号处理/数值计算算法,2、基于Matlab/C++的算法仿真,3、常用的数字算法FPGA实现方式或技巧;可能还要求掌握的技术包括:1、图像、视频处理算法,2、通信系统理论,3、其它常见的并行计算算法。
第三个方向属于是给ASIC/SoC设计打下手,别人已经做好的很多模块、IP用FPGA的板子去验证一下。招人不多。而且现在随着EDA tools的发展,很多时候也不是靠FPGA去做一个原型能验证出来的。这一块需要掌握的技术包括:1、各种验证方法学,2、板级电路的调试经验;可能还要求掌握的技术包括:前面提到的各种技术……
原因二:FPGA的“门槛”太高
FPGA“门槛”高是几个方面,一个是费用问题。虽然FPGA的价格已经一降再降,但是MCU、DSP的价格同样也是一降再降。在大多数场合FPGA还是显得有点“奢侈”。另外一个问题就是就是开发能力的问题。相比于MCU或者DSP而言FPGA更加灵活,但也意味着对资源的利用和掌控更加“底层”。现在MCU和DSP的开发很多时候就是调用一些库函数,完成一定的功能即可。而FPGA却要组织更底层的逻辑资源去构建一整套完整的系统。虽然有很多IP可以用,但是一方面这些IP都不是免费的,另一方面使用IP可比调用一个函数难多了。这也是为什么前面说的3个方向要掌握那么技术的原因,在FPGA开发上要从底层开始组织好这些资源,一些基本的理论、方法是必须要掌握的。
门槛太高就导致用它做开发的公司、机构少。换言之能创造的就业岗位也就不多。
原因三:FPGA在面临转型
目前FPGA正在面临一个转型的问题,换言之就是传统市场萎缩,新兴市场还待打开的问题。这一转型既有开发手段上的转型,也有行业应用的变化。因此,目前学习到的这些FPGA开发的方法,在未来还有没有用,就成了一个疑问。目前以SoC-FPGA为代表的一种转型方向,是去抢占传统的高性能SoC市场。但这个市场好不好抢,是很怀疑的。之前我曾经认为这一块应该是有所作为的,但是现在发现不是那么简单的。在ARM外面加上一圈可编程逻辑,用来做什么好呢?做接口?现在的高端SoC芯片上面接口已经如此的丰富,在大多数情况还是基本够用的。做算法加速?那么去加速什么算法呢?目前移动多媒体设备上面各类图形图像加速器也不少了。别的特殊的应用需要加速的又需要是以SoC形式的加速的?也许是一些特种设备,我不是很了解。但是应该不会是通用的市场。剩下的就是做做研究了。另外一种就是以高层语言综合为代表的转型方向,如Xilinx的Auto-ESL和Altera的OpenCL Based FPGA开发。这一类转型的未来在大数据、云计算加速方向。这一块目前是GPGPU的主场。对于Xilinx的Auto-ESL我不是很清楚。OpenCL Based FPGA开发目前看来还是很有希望的。但问题在于OpenCL继承了GPGPU的优势,也继承了GPGPU的缺陷。那就是传统的GPU是用来做图形图像处理的,数据都是一帧一帧加进去算的,而且算完以后就直接输出了。因此对于数据传输的latency其实并不是很大的问题。而如果涉及到通用计算,这GPU和CPU之间的交互latency就是大问题。上周刚听了个讲座,就是专门讲这一方面的。不过我没怎么听懂就是了……
所以在这个转型期,其实FPGA开发需要的岗位是在萎缩的。之前听在华为的同学爆料,美国某大学教授预言FPGA在网络通信市场大概还有10年的寿命,再往后就全是SDN了。这一大块FPGA传统市场的丧失将是一个巨大的危机。而另一大市场,视频/图像领域,随着网络化视频监控SoC的普及,原来采用FPGA作为主要技术方案的厂家也就逐渐改弦更张或者被淘汰出局了。另外一个风险就是现有的开发手段可能会存在被淘汰的风险。虽然现在OpenCL去开发FPGA还存在诸多问题,但是我认为在大数据、云计算加速领域,使用OpenCL开发的便捷是完全可能弥补其效率的暂时低下的。从能效上来说,FPGA比GPGPU要高1到2个数量级。而这一块又是传统的软件开发者盘踞的地盘。换言之,这一块新增的就业岗位恐怕不是学习现在这些FPGA开发流程和技术的人能够去吃得到的。
以上三点原因,造成了一个即使参加了FPGA培训或者学习了FPGA半年的新手,其实是很难在就业市场上找到工作的。另外一方面也不得不感慨我们这个行业的发展是如此的迅速。如果放在10年前,甚至5年前有人问我该学什么。我肯定会毫不犹豫的推荐学FPGA。因为在那个时代,会使用FPGA的人才是如此的缺乏。以至于你只要学会了FPGA开发的一般流程,就可以找到一份还不错的工作。而现在,这个好时代已经一去不回了。类似问题其实也在困扰其它IT技术。以北大青鸟为代表的一大软件开发批培训机构的没落,也同样标志着在软件技术领域只掌握一门编程语言就可以拿到好工作的日子也已经过去了。
所以,从功利的角度上来讲,如果是只是为了找工作的话。应该去选择那些就业概率更大的技术学习。毕竟,已经“沦落”到要靠上培训班才能找到工作的地步,“理想”也都无从谈起了。相比与学习FPGA,恐怕还是去学个什么Java编程更加靠谱一点。