CPU、GPU、FPGA三者能力相加就是芯片的未來(lái)!
很多粉絲問(wèn)我,嵌入式方向中的FPGA怎么樣?收入如何?
前言
講述FPGA前,我們先講講當(dāng)年中興被制裁的問(wèn)題。
美國(guó)前總統(tǒng)特朗普曾經(jīng)發(fā)布過(guò)一條禁令,由于中興違反了美國(guó)的某個(gè)條例,禁止美國(guó)已經(jīng)國(guó)外任何一家公司向中興銷售FPGA芯片。
這個(gè)時(shí)候,一定會(huì)有抬杠青年說(shuō),我見(jiàn)過(guò)國(guó)內(nèi)生產(chǎn)的FPGA芯片,還用過(guò)呢。【通常遇到這一類質(zhì)疑聲,我一般都會(huì)說(shuō):你是對(duì)的!】
后來(lái)中興沒(méi)有辦法,只能妥協(xié)了,美國(guó)派了人入駐中興,還簽了一些協(xié)議。最后才恢復(fù)到原來(lái)的買賣關(guān)系中。
要知道CPU、GPU、FPGA三者能力相加就是芯片的未來(lái)!
FPGA門檻之高在芯片行業(yè)里無(wú)出其右。
FPGA是一個(gè)本領(lǐng)群集型的行業(yè),沒(méi)有堅(jiān)實(shí)的本領(lǐng)功底,很難造成有角逐力的產(chǎn)物。
好了,我們來(lái)介紹下到底什么是FPGA吧!
一、什么是FPGA?
FPGA 是一種硬件可重構(gòu)的體系結(jié)構(gòu)。它的英文全稱是Field Programmable Gate Array,中文名是現(xiàn)場(chǎng)可編程門陣列。
FPGA就是一個(gè)可以通過(guò)編程來(lái)改變內(nèi)部結(jié)構(gòu)的芯片,F(xiàn)PGA常年來(lái)被用作專用芯片(ASIC)的小批量替代品,
同時(shí)也在微軟、百度等公司的數(shù)據(jù)中心大規(guī)模部署,已同時(shí)提供強(qiáng)大的計(jì)算能力和足夠的靈活性。
在沒(méi)有FPGA之前,要想實(shí)現(xiàn)一個(gè)新計(jì)算機(jī)體架構(gòu)的設(shè)計(jì)想法,
必須要開(kāi)發(fā)一個(gè)ASIC作為原型,在面板上安裝很多個(gè)體積龐大的IC。
但是,與這些需要投入巨大成本和精力的方式不同,一旦用戶創(chuàng)建了具有多個(gè)FPGA的原型板,就可以立即運(yùn)行您設(shè)計(jì)的新架構(gòu)。
而且,修正和更改規(guī)格也變得輕松簡(jiǎn)單。
要知道、流片的價(jià)格可不低!
因此,許多新的架構(gòu)應(yīng)運(yùn)而生因此,對(duì)可重構(gòu)處理器的研究和對(duì)新FPGA架構(gòu)的研究也開(kāi)始蓬勃發(fā)展,
在此之后,F(xiàn)PGA使用靈活,適用性強(qiáng)的特征在通信/圖像處理領(lǐng)域也大獲好評(píng),并將其應(yīng)用于路由器等通信網(wǎng)絡(luò)的各種設(shè)備中。
與ASIC的概念截然相反,F(xiàn)PGA的概念是在短時(shí)間能以低成本讓用戶得到想要的邏輯。
賽靈思Xilinx公司
可編程FPGA技術(shù)于上個(gè)世紀(jì)80年代初由美國(guó)賽靈思Xilinx公司發(fā)明。
Xilinx于1985年首次推出商業(yè)化產(chǎn)品“XC2000”。
近40年來(lái),先后有超過(guò)60家以上的公司從事過(guò)FPGA技術(shù)與產(chǎn)品的研發(fā),
其中包括Intel、IBM、AMD、TI、GE、AT&T、摩托羅拉、朗訊、三星、東芝、飛利浦等實(shí)力雄厚的大公司,
但絕大多數(shù)在耗費(fèi)了上億美元后功虧一簣!
歐洲、日本、韓國(guó)、等經(jīng)濟(jì)強(qiáng)國(guó)和中國(guó)臺(tái)灣等地區(qū)都尚未真正掌握其核心技術(shù)。
二、FPGA的應(yīng)用場(chǎng)景
FPGA是集成電路大產(chǎn)業(yè)中的小領(lǐng)域,5G和AI為行業(yè)增長(zhǎng)提供確定性,國(guó)產(chǎn)替代疊加行業(yè)增長(zhǎng),國(guó)產(chǎn)FPGA市場(chǎng)騰飛在即。
全球FPGA市場(chǎng)規(guī)模走勢(shì)及未來(lái)預(yù)測(cè):
借助5G、自動(dòng)駕駛、AI,F(xiàn)PGA需求還在逐步增大,未來(lái)空間還非常巨大。
1,通信領(lǐng)域。
通信領(lǐng)域需要高速的通信協(xié)議處理方式,另一方面通信協(xié)議隨時(shí)都在修改,不適合做成專門的芯片,所以能夠靈活改變的功能的FPGA就成了首選
電信行業(yè)一直大量使用FPGA。電信標(biāo)準(zhǔn)不斷變化,建造電信設(shè)備非常困難,因此首先提供電信解決方案的公司往往會(huì)占領(lǐng)最大的市場(chǎng)份額。由于ASIC需要花費(fèi)很長(zhǎng)時(shí)間才能制造,因此FPGA提供了捷徑的機(jī)會(huì)。最初的電信設(shè)備版本開(kāi)始采用FPGA,這引發(fā)了FPGA價(jià)格沖突。盡管FPGA的價(jià)格與ASIC仿真市場(chǎng)無(wú)關(guān)緊要,但電信芯片的價(jià)格卻很重要。許多年前,AT&T和朗訊制造了自己的FPGA,稱為ORCA(優(yōu)化的可重配置單元陣列),但就硅片的速度或尺寸而言,它們與Xilinx或Altera不具有競(jìng)爭(zhēng)優(yōu)勢(shì)。
2,算法領(lǐng)域。
FPGA對(duì)于復(fù)雜信號(hào)的處理性很強(qiáng),可以處理多維信號(hào)。
3,嵌入式領(lǐng)域。
利用FPGA構(gòu)建一個(gè)嵌入式的底層環(huán)境,然后在此之上編寫一些嵌入式軟件,事務(wù)性的操作更加繁雜一些,對(duì)FPGA的操作較少。
4,在安防監(jiān)控領(lǐng)域
目前CPU很難做到多通道處理和只能檢測(cè)分析,但是加上FPGA之后就可以輕松解決了,尤其在圖形算法領(lǐng)域有得天獨(dú)厚的優(yōu)勢(shì)。
5,在工業(yè)自動(dòng)化領(lǐng)域
FPGA可以做到多通道的馬達(dá)控制,目前馬達(dá)電力消耗占據(jù)全球能源消耗的大頭,在節(jié)能環(huán)保的趨勢(shì)下,未來(lái)各類精準(zhǔn)控制馬達(dá)得以采用,一片F(xiàn)PGA就可以控制大量的馬達(dá)。
三、公司
FPGA多年來(lái)被四大巨頭Xilinx(賽靈思)、Altera(阿爾特拉)、Lattice(萊迪思)、Microsemi(美高森美)壟斷。
還有一些小公司勉強(qiáng)在夾縫中生存。
其中Xilinx(賽靈思)是全球領(lǐng)先的可編程邏輯完整解決方案的供應(yīng)商。 Xilinx研發(fā)、制造并銷售范圍廣泛的高級(jí)集成電路、軟件設(shè)計(jì)工具以及作為預(yù)定義系統(tǒng)級(jí)功能的IP(Intellectual Property)核。
國(guó)外三巨頭占據(jù)90%全球市場(chǎng),國(guó)產(chǎn)廠商暫時(shí)落后。
FPGA市場(chǎng)呈現(xiàn)雙寡頭壟斷格局,Xilinx和Altera分別占據(jù)全球市場(chǎng)56%和31%,
在中國(guó)FPGA市場(chǎng)中,占比也高達(dá)52%和28%,
由于技術(shù)、資金、人才上的壁壘及FPGA量產(chǎn)帶來(lái)的規(guī)模經(jīng)濟(jì),行業(yè)領(lǐng)導(dǎo)者地位較為穩(wěn)定。
國(guó)產(chǎn)廠商目前在中國(guó)市場(chǎng)占比約4%,未來(lái)隨著國(guó)產(chǎn)廠商技術(shù)突破,
FPGA領(lǐng)域國(guó)產(chǎn)替代或?qū)⑹前賰|級(jí)的機(jī)會(huì),替代空間廣闊。
Altera目前已被Intel收購(gòu),AMD正在收購(gòu)賽靈思,預(yù)計(jì)2021年底完成收購(gòu)。
我國(guó)FPGA公司
- 1、京微齊力:二次創(chuàng)業(yè),瞄準(zhǔn)AI云邊端
- 2、上海遨格芯:從編譯軟件切入生態(tài)鏈
- 3、廣東高云:28nm中高密度FPGA
- 4、深圳紫光同創(chuàng):高性能FPGA已量產(chǎn)商用
- 5、西安智多晶:小米為第四大股東
- 6、上海安路科技:28nm今年批量供應(yīng)
- 7、成都華微科技:出身國(guó)家“909”工程
- 8、上海復(fù)旦微電子:超大規(guī)模億門級(jí)FPGA
五、IP核
FPGA有個(gè)最重要的概念就是IP核。
IP(Intelligent Property) 核是具有知識(shí)產(chǎn)權(quán)核的集成電路芯核總稱,是經(jīng)過(guò)反復(fù)驗(yàn)證過(guò)的、具有特定功能的宏模塊,與芯片制造工藝無(wú)關(guān),可以移植到不同的半導(dǎo)體工藝中。
如果還不理解,你就當(dāng)他是一個(gè)軟件模塊,或者是一個(gè)積木的部件。
比如賽靈思已經(jīng)基于FPGA設(shè)計(jì)好了UDP 核、PCIE xDMA 核、UART 核,我們只需要把人家的核添加到我們工程中,那么就相當(dāng)于與我們的板子已經(jīng)支持了這個(gè)功能。
對(duì)于FPGA 開(kāi)發(fā)軟件,其提供的IP核越豐富,用戶的設(shè)計(jì)就越方便,其市場(chǎng)占用率就越高。
一句話:IP核很值錢!
六、語(yǔ)言和舉例
talk is cheap,show you code!
下面我們舉一個(gè)例子來(lái)講解
下面我們用verilog實(shí)現(xiàn)超前進(jìn)位加法器:
例1:超前進(jìn)位信號(hào)的產(chǎn)生原理
ab = 1 --> co = 1
a + b = 1,且ci = 1 --> co =1
兩位多位數(shù)中第i位相加產(chǎn)生的進(jìn)位輸出co(i)可以表示位
coi=aibi+(ai+bi)(cii)
從全加器的真值表寫出第i位和s(i)的邏輯式:
si=aibi′cii′+ai′bicii′+ai′bi′cii+(ai+bi)cii
上式變換位異或函數(shù)位:
si=ai⊕bi⊕cii
代碼:
module carry_look_aheadadder(
output [3:0] s,
output co,
input [3:0] a,
input [3:0] b,
input ci
);
wire [3:0] co_tmp;
wire [3:0] cin;
assign cin[3:0] = {co_tmp[2:0],ci};
//計(jì)算中間進(jìn)位
assign co_tmp[0] = a[0]&b[0] || (a[0] || b[0])&(cin[0]);
assign co_tmp[1] = a[1]&b[1] || (a[1] || b[1])&(cin[1]);
assign co_tmp[2] = a[2]&b[2] || (a[2] || b[2])&(cin[2]);
assign co_tmp[3] = a[3]&b[3] || (a[3] || b[3])&(cin[3]);
//計(jì)算和
assign s[0] = a[0] ^ b[0] ^ cin[0];
assign s[1] = a[1] ^ b[1] ^ cin[1];
assign s[2] = a[2] ^ b[2] ^ cin[2];
assign s[3] = a[3] ^ b[3] ^ cin[3];
assign co = co_tmp[3];
endmodule
module carry_look_aheadadder_tb;
wire [3:0] s;
wire co;
reg [3:0] a;
reg [3:0] b;
reg ci;
initial
begin
a = 4'b0000; b = 4'b0000; ci = 0;
#10 a = 4'b1111; b = 4'b1111; ci = 0;
#10 a = 4'b1100; b = 4'b1001; ci = 0;
#10 a = 4'b0111; b = 4'b0110; ci = 0;
#10 a = 4'b0101; b = 4'b0101; ci = 1;
#10 a = 4'b1110; b = 4'b1001; ci = 1;
#10 a = 4'b0010; b = 4'b0110; ci = 1;
#10 a = 4'b0110; b = 4'b1100; ci = 1;
#10 $finish;
end
initial begin
$fsdbDumpfile("test.fsdb");
$fsdbDumpvars();
end
carry_look_aheadadder u_carry_look_aheadadder(
.s(s),
.co(co),
.a(a),
.b(b),
.ci(ci)
);
endmodule
結(jié)果:
可以看到,這個(gè)和一般的高級(jí)語(yǔ)言差別比較大。
學(xué)習(xí)FPGA必須有過(guò)硬的硬件電路基礎(chǔ)。
例2:
上述為lattice的一款FPGA架構(gòu),你可以把它想象成一塊放滿電子元件的硬件電路板,圖中“電路板”上的元件有IIC和SPI硬核接口“器件”,有NVCM程序存儲(chǔ)“器件”,有RAM數(shù)據(jù)存儲(chǔ)“器件”,還有最小單元的LUT(查找表)器件。
一般FPGA工程師會(huì)使用硬件描述語(yǔ)言Verilog或者VHDL對(duì)FPGA進(jìn)行“編程”,之后,再經(jīng)過(guò)廠家提供的FPGA開(kāi)發(fā)工具(Diamond或Radiant、vivado)的綜合、布局、布線,會(huì)產(chǎn)生bit文件或bin文件。
如果工程師將最終產(chǎn)生的bit文件或bin文件下載到FPGA中,就相當(dāng)于一位硬件工程師,在FPGA芯片這塊已經(jīng)放置了“元件”的“電路板”上,進(jìn)行了布線操作。(也就是把毫無(wú)關(guān)聯(lián)的與器件,用銅線連接起來(lái))
下載程序后的FPGA,我們就不能簡(jiǎn)單稱之為“電路板”了。
舉個(gè)例子,F(xiàn)PGA實(shí)現(xiàn)的功能是SPI轉(zhuǎn)并口,那么這塊FPGA就可以稱為“spi接口轉(zhuǎn)換板”。
當(dāng)然,F(xiàn)PGA和“電路板”終究是不同的,F(xiàn)PGA可以進(jìn)行重復(fù)編程,相當(dāng)于一塊可以反復(fù)布線的電路板。
七、為什么效率會(huì)如此之高?
1. FPGA與GPU的區(qū)別本質(zhì)上是體系結(jié)構(gòu)的區(qū)別
CPU、GPU 都屬于馮·諾依曼結(jié)構(gòu),指令譯碼執(zhí)行、共享內(nèi)存。
FPGA 本質(zhì)上是無(wú)指令、無(wú)需共享內(nèi)存的體系結(jié)構(gòu)。
- CPU與FPGA區(qū)別之(指令): CPU結(jié)構(gòu)——有指令: 馮氏結(jié)構(gòu)中,由于執(zhí)行單元(如 CPU 核)可能執(zhí)行任意指令,就需要有指令存儲(chǔ)器、譯碼器、各種指令的運(yùn)算器、分支跳轉(zhuǎn)處理邏輯。 由于指令流的控制邏輯復(fù)雜,不可能有太多條獨(dú)立的指令流, 因此 GPU 使用 SIMD(單指令流多數(shù)據(jù)流)來(lái)讓多個(gè)執(zhí)行單元以同樣的步調(diào)處理不同的數(shù)據(jù),CPU 也支持 SIMD 指令。 FPGA結(jié)構(gòu)——無(wú)需指令: 而 FPGA 每個(gè)邏輯單元的功能在重編程(燒寫)時(shí)就已經(jīng)確定,不需要指令。
- CPU與FPGA區(qū)別之(內(nèi)存) CPU結(jié)構(gòu)——仲裁與共享內(nèi)存: 馮氏結(jié)構(gòu)中使用內(nèi)存有兩種作用。一是保存狀態(tài),二是在執(zhí)行單元間通信。 由于內(nèi)存是共享的,就需要做訪問(wèn)仲裁; 為了利用訪問(wèn)局部性,每個(gè)執(zhí)行單元有一個(gè)私有的緩存,這就要維持執(zhí)行部件間緩存的一致性。
FPGA結(jié)構(gòu)——無(wú)需仲裁與共享內(nèi)存: 對(duì)于保存狀態(tài)的需求,F(xiàn)PGA 中的寄存器和片上內(nèi)存(BRAM)是屬于各自的控制邏輯的,無(wú)需不必要的仲裁和緩存。 對(duì)于通信的需求,F(xiàn)PGA 每個(gè)邏輯單元與周圍邏輯單元的連接在重編程(燒寫)時(shí)就已經(jīng)確定,并不需要通過(guò)共享內(nèi)存來(lái)通信。
FPGA 同時(shí)擁有流水線并行和數(shù)據(jù)并行,而 GPU 幾乎只有數(shù)據(jù)并行(流水線深度受限)。
- FPGA流水線與數(shù)據(jù)并行處理: 例如:處理一個(gè)數(shù)據(jù)包有 10 個(gè)步驟,F(xiàn)PGA 可以搭建一個(gè) 10 級(jí)流水線,流水線的不同級(jí)在處理不同的數(shù)據(jù)包,每個(gè)數(shù)據(jù)包流經(jīng) 10 級(jí)之后處理完成。每處理完成一個(gè)數(shù)據(jù)包,就能馬上輸出。
- GPU數(shù)據(jù)并行處理: 而 GPU 的數(shù)據(jù)并行方法是做 10 個(gè)計(jì)算單元,每個(gè)計(jì)算單元也在處理不同的數(shù)據(jù)包,
然而所有的計(jì)算單元必須按照統(tǒng)一的步調(diào),做相同的事情(SIMD,Single Instruction Multiple Data)。
這就要求 10 個(gè)數(shù)據(jù)包必須一起輸入、一起輸出,輸入輸出的延遲增加了。
總結(jié)一句話,很多算法如果用純軟件實(shí)現(xiàn),需要很多條指令才能完成, 如果用FPGA,只需要在有限個(gè)時(shí)鐘周期即可完成,速度快的不是一點(diǎn)半腥。
八、收入
FPGA軍品使用非常廣泛,基本上只要涉及無(wú)線通信的產(chǎn)品都會(huì)涉及到FPGA開(kāi)發(fā)。
尤其在高校里,應(yīng)用非常廣, 這個(gè)領(lǐng)域,特別容易發(fā)論文(博士論文)
還有一些其他領(lǐng)域都是些小公司,工控機(jī)器人,3d成像,裸眼3d公司,led拼接屏公司,
通信領(lǐng)域用的比較多,還有些大數(shù)據(jù)的,比如說(shuō)騰訊和百度也有類似的崗位做數(shù)據(jù)挖掘
一口君隨手截取了某App發(fā)布的南京、上海、深圳的FPGA崗位信息。
可見(jiàn)收入一般2萬(wàn)到5萬(wàn),
和互聯(lián)網(wǎng)寡頭動(dòng)輒上百萬(wàn)年薪,沒(méi)法比,
和金融收入也沒(méi)法比,
整體來(lái)說(shuō)中規(guī)中矩吧!
對(duì)比軟件行業(yè)屬于薪水較低 但是經(jīng)驗(yàn)積累時(shí)間長(zhǎng)了,
工資會(huì)很高,越老越厲害,后面就比軟件工資高了。
一口君曾經(jīng)和龍芯的技術(shù)人員交流過(guò), 他們的中流砥柱都是做FPGA出身的!