最近的幾篇論文都改好投出去了,希望后面有好的結(jié)果。暫時也就有點閑暇時間空出來了,好久沒有寫技術(shù)文章來總結(jié)提煉一下了,今天難得就寫一點。
每年到了找工作的時節(jié),總會有很多迷茫的小本甚至是小碩在到處訊問說:我是不是應(yīng)該去參加個培訓(xùn)班,去學(xué)一門什么什么技術(shù)。然后學(xué)哪個比較好找工作一點,學(xué)哪個收入會高一點等等。每當(dāng)這個時候就有很多抱著就業(yè)目的的人來問到底學(xué)什么技術(shù)好啊,哪個技術(shù)有前途啊,等等。
一般在這個時候,我是不推薦這幫人去學(xué)習(xí)FPGA的。當(dāng)然,并不是FPGA技術(shù)不好,也不是學(xué)FPGA技術(shù)沒有前途,而是有別的很多原因。導(dǎo)致它并不適合推薦給以就業(yè)為目的的這幫人去學(xué)習(xí)。
原因一:FPGA的“逼格”太高
FPGA的應(yīng)用范圍相對而言一直不寬。之前我也談過,其主要的應(yīng)用面就是三個:高速接口電路、高速數(shù)學(xué)運算與數(shù)據(jù)處理、ASIC/SoC的驗證原型;也有人說可重構(gòu)計算是FPGA的第四大應(yīng)用領(lǐng)域,但是我覺得目前還沒有什么真正意義上的可重構(gòu)計算,即使有也可以將其歸并到第二類里面去。在掌握基本的HDL語言和FPGA開發(fā)流程的基礎(chǔ)上,三個方向分別還需要掌握其它相應(yīng)的知識。
第一個方向是傳統(tǒng)的,也是目前國內(nèi)大量中小公司和部分科研院所使用FPGA的主要方向。主要包括接口擴(kuò)展、協(xié)議轉(zhuǎn)換、高速收發(fā)與處理等內(nèi)容。通常在這個方向混飯還至少需要掌握以下內(nèi)容:1、高速電路板設(shè)計,2、計算機(jī)接口技術(shù);可能還要求掌握的技術(shù)包括:1、底層驅(qū)動開發(fā),2、通信協(xié)議。
第二個方向涵蓋的內(nèi)容較多,但是核心都是利用FPGA實現(xiàn)算法或運算加速,從傳統(tǒng)的FFT、FIR到最新的一些所謂的NB的算法都有可能。這個方向門檻相對于第一個方向更高,通常都是需要有一定技術(shù)水平的公司才能完成。因為涉及到算法和FPGA的協(xié)同優(yōu)化。目前國內(nèi)的華為、中興這樣的大的通信公司,以及一些電子通信類的整機(jī)研究所會招聘這個方向的人。一些有技術(shù)實力的創(chuàng)業(yè)型公司或特殊領(lǐng)域的公司(如金融、石油領(lǐng)域的數(shù)據(jù)分析方案解決)也有這方面的需求。更值得欣慰的是目前google、X訊這樣的互聯(lián)網(wǎng)公司看起來也在考慮引入FPGA實現(xiàn)算法加速。但這個方向混飯吃也不容易,至少需要掌握以下內(nèi)容:1、常用的數(shù)字信號處理/數(shù)值計算算法,2、基于Matlab/C++的算法仿真,3、常用的數(shù)字算法FPGA實現(xiàn)方式或技巧;可能還要求掌握的技術(shù)包括:1、圖像、視頻處理算法,2、通信系統(tǒng)理論,3、其它常見的并行計算算法。
第三個方向?qū)儆谑墙oASIC/SoC設(shè)計打下手,別人已經(jīng)做好的很多模塊、IP用FPGA的板子去驗證一下。招人不多。而且現(xiàn)在隨著EDA tools的發(fā)展,很多時候也不是靠FPGA去做一個原型能驗證出來的。這一塊需要掌握的技術(shù)包括:1、各種驗證方法學(xué),2、板級電路的調(diào)試經(jīng)驗;可能還要求掌握的技術(shù)包括:前面提到的各種技術(shù)……
原因二:FPGA的“門檻”太高
FPGA“門檻”高是幾個方面,一個是費用問題。雖然FPGA的價格已經(jīng)一降再降,但是MCU、DSP的價格同樣也是一降再降。在大多數(shù)場合FPGA還是顯得有點“奢侈”。另外一個問題就是就是開發(fā)能力的問題。相比于MCU或者DSP而言FPGA更加靈活,但也意味著對資源的利用和掌控更加“底層”?,F(xiàn)在MCU和DSP的開發(fā)很多時候就是調(diào)用一些庫函數(shù),完成一定的功能即可。而FPGA卻要組織更底層的邏輯資源去構(gòu)建一整套完整的系統(tǒng)。雖然有很多IP可以用,但是一方面這些IP都不是免費的,另一方面使用IP可比調(diào)用一個函數(shù)難多了。這也是為什么前面說的3個方向要掌握那么技術(shù)的原因,在FPGA開發(fā)上要從底層開始組織好這些資源,一些基本的理論、方法是必須要掌握的。
門檻太高就導(dǎo)致用它做開發(fā)的公司、機(jī)構(gòu)少。換言之能創(chuàng)造的就業(yè)崗位也就不多。
原因三:FPGA在面臨轉(zhuǎn)型
目前FPGA正在面臨一個轉(zhuǎn)型的問題,換言之就是傳統(tǒng)市場萎縮,新興市場還待打開的問題。這一轉(zhuǎn)型既有開發(fā)手段上的轉(zhuǎn)型,也有行業(yè)應(yīng)用的變化。因此,目前學(xué)習(xí)到的這些FPGA開發(fā)的方法,在未來還有沒有用,就成了一個疑問。目前以SoC-FPGA為代表的一種轉(zhuǎn)型方向,是去搶占傳統(tǒng)的高性能SoC市場。但這個市場好不好搶,是很懷疑的。之前我曾經(jīng)認(rèn)為這一塊應(yīng)該是有所作為的,但是現(xiàn)在發(fā)現(xiàn)不是那么簡單的。在ARM外面加上一圈可編程邏輯,用來做什么好呢?做接口?現(xiàn)在的高端SoC芯片上面接口已經(jīng)如此的豐富,在大多數(shù)情況還是基本夠用的。做算法加速?那么去加速什么算法呢?目前移動多媒體設(shè)備上面各類圖形圖像加速器也不少了。別的特殊的應(yīng)用需要加速的又需要是以SoC形式的加速的?也許是一些特種設(shè)備,我不是很了解。但是應(yīng)該不會是通用的市場。剩下的就是做做研究了。另外一種就是以高層語言綜合為代表的轉(zhuǎn)型方向,如Xilinx的Auto-ESL和Altera的OpenCL Based FPGA開發(fā)。這一類轉(zhuǎn)型的未來在大數(shù)據(jù)、云計算加速方向。這一塊目前是GPGPU的主場。對于Xilinx的Auto-ESL我不是很清楚。OpenCL Based FPGA開發(fā)目前看來還是很有希望的。但問題在于OpenCL繼承了GPGPU的優(yōu)勢,也繼承了GPGPU的缺陷。那就是傳統(tǒng)的GPU是用來做圖形圖像處理的,數(shù)據(jù)都是一幀一幀加進(jìn)去算的,而且算完以后就直接輸出了。因此對于數(shù)據(jù)傳輸?shù)膌atency其實并不是很大的問題。而如果涉及到通用計算,這GPU和CPU之間的交互latency就是大問題。上周剛聽了個講座,就是專門講這一方面的。不過我沒怎么聽懂就是了……
所以在這個轉(zhuǎn)型期,其實FPGA開發(fā)需要的崗位是在萎縮的。之前聽在華為的同學(xué)爆料,美國某大學(xué)教授預(yù)言FPGA在網(wǎng)絡(luò)通信市場大概還有10年的壽命,再往后就全是SDN了。這一大塊FPGA傳統(tǒng)市場的喪失將是一個巨大的危機(jī)。而另一大市場,視頻/圖像領(lǐng)域,隨著網(wǎng)絡(luò)化視頻監(jiān)控SoC的普及,原來采用FPGA作為主要技術(shù)方案的廠家也就逐漸改弦更張或者被淘汰出局了。另外一個風(fēng)險就是現(xiàn)有的開發(fā)手段可能會存在被淘汰的風(fēng)險。雖然現(xiàn)在OpenCL去開發(fā)FPGA還存在諸多問題,但是我認(rèn)為在大數(shù)據(jù)、云計算加速領(lǐng)域,使用OpenCL開發(fā)的便捷是完全可能彌補(bǔ)其效率的暫時低下的。從能效上來說,F(xiàn)PGA比GPGPU要高1到2個數(shù)量級。而這一塊又是傳統(tǒng)的軟件開發(fā)者盤踞的地盤。換言之,這一塊新增的就業(yè)崗位恐怕不是學(xué)習(xí)現(xiàn)在這些FPGA開發(fā)流程和技術(shù)的人能夠去吃得到的。
以上三點原因,造成了一個即使參加了FPGA培訓(xùn)或者學(xué)習(xí)了FPGA半年的新手,其實是很難在就業(yè)市場上找到工作的。另外一方面也不得不感慨我們這個行業(yè)的發(fā)展是如此的迅速。如果放在10年前,甚至5年前有人問我該學(xué)什么。我肯定會毫不猶豫的推薦學(xué)FPGA。因為在那個時代,會使用FPGA的人才是如此的缺乏。以至于你只要學(xué)會了FPGA開發(fā)的一般流程,就可以找到一份還不錯的工作。而現(xiàn)在,這個好時代已經(jīng)一去不回了。類似問題其實也在困擾其它IT技術(shù)。以北大青鳥為代表的一大軟件開發(fā)批培訓(xùn)機(jī)構(gòu)的沒落,也同樣標(biāo)志著在軟件技術(shù)領(lǐng)域只掌握一門編程語言就可以拿到好工作的日子也已經(jīng)過去了。
所以,從功利的角度上來講,如果是只是為了找工作的話。應(yīng)該去選擇那些就業(yè)概率更大的技術(shù)學(xué)習(xí)。畢竟,已經(jīng)“淪落”到要靠上培訓(xùn)班才能找到工作的地步,“理想”也都無從談起了。相比與學(xué)習(xí)FPGA,恐怕還是去學(xué)個什么Java編程更加靠譜一點。