• 正文
    • 一、什么是FPGA?
    • 二、FPGA的應(yīng)用場景
    • 三、公司
    • 五、IP核
    • 六、語言和舉例
    • 七、為什么效率會如此之高?
    • 八、收入
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

什么是FPGA?嵌入式方向中的FPGA怎么樣?

02/03 15:17
1362
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

很多粉絲問我,嵌入式方向中的FPGA怎么樣?收入如何?

講述FPGA前,我們先講講當(dāng)年中興被制裁的問題。

美國前總統(tǒng)特朗普曾經(jīng)發(fā)布過一條禁令,由于中興違反了美國的某個條例,禁止美國已經(jīng)國外任何一家公司向中興銷售FPGA芯片

這個時候,一定會有抬杠青年說,我見過國內(nèi)生產(chǎn)的FPGA芯片,還用過呢?!就ǔS龅竭@一類質(zhì)疑聲,我一般都會說:你是對的!】

后來中興沒有辦法,只能妥協(xié)了,美國派了人入駐中興,還簽了一些協(xié)議。最后才恢復(fù)到原來的買賣關(guān)系中。

要知道CPU、GPU、FPGA三者能力相加就是芯片的未來!

FPGA門檻之高在芯片行業(yè)里無出其右。

FPGA是一個本領(lǐng)群集型的行業(yè),沒有堅實的本領(lǐng)功底,很難造成有角逐力的產(chǎn)物。

好了,我們來介紹下到底什么是FPGA吧!

一、什么是FPGA?

FPGA 是一種硬件可重構(gòu)的體系結(jié)構(gòu)。它的英文全稱是Field Programmable Gate Array,中文名是現(xiàn)場可編程門陣列。

FPGA就是一個可以通過編程來改變內(nèi)部結(jié)構(gòu)的芯片,F(xiàn)PGA常年來被用作專用芯片(ASIC)的小批量替代品,同時也在微軟百度等公司的數(shù)據(jù)中心大規(guī)模部署,以同時提供強(qiáng)大的計算能力和足夠的靈活性。

在沒有FPGA之前,要想實現(xiàn)一個新計算機(jī)體架構(gòu)的設(shè)計想法,必須要開發(fā)一個ASIC作為原型,在面板上安裝很多個體積龐大的IC。

但是,與這些需要投入巨大成本和精力的方式不同,一旦用戶創(chuàng)建了具有多個FPGA的原型板,就可以立即運(yùn)行您設(shè)計的新架構(gòu)。

而且,修正和更改規(guī)格也變得輕松簡單。

要知道、流片的價格可不低!

因此,許多新的架構(gòu)應(yīng)運(yùn)而生因此,對可重構(gòu)處理器的研究和對新FPGA架構(gòu)的研究也開始蓬勃發(fā)展,在此之后,F(xiàn)PGA使用靈活,適用性強(qiáng)的特征在通信/圖像處理領(lǐng)域也大獲好評,并將其應(yīng)用于路由器通信網(wǎng)絡(luò)的各種設(shè)備中。

與ASIC的概念截然相反,F(xiàn)PGA的概念是在短時間能以低成本讓用戶得到想要的邏輯。

賽靈思Xilinx公司

可編程FPGA技術(shù)于上個世紀(jì)80年代初由美國賽靈思Xilinx公司發(fā)明。

Xilinx于1985年首次推出商業(yè)化產(chǎn)品“XC2000”。

近40年來,先后有超過60家以上的公司從事過FPGA技術(shù)與產(chǎn)品的研發(fā),其中包括Intel、IBM、AMD、TI、GE、AT&T、摩托羅拉、朗訊、三星、東芝、飛利浦等實力雄厚的大公司,但絕大多數(shù)在耗費(fèi)了上億美元后功虧一簣!

歐洲、日本、韓國、等經(jīng)濟(jì)強(qiáng)國和中國臺灣等地區(qū)都尚未真正掌握其核心技術(shù)。

二、FPGA的應(yīng)用場景

FPGA是集成電路大產(chǎn)業(yè)中的小領(lǐng)域,5GAI為行業(yè)增長提供確定性,國產(chǎn)替代疊加行業(yè)增長,國產(chǎn)FPGA市場騰飛在即。

借助5G、自動駕駛、AI,F(xiàn)PGA需求還在逐步增大,未來空間還非常巨大。

1,通信領(lǐng)域。

通信領(lǐng)域需要高速的通信協(xié)議處理方式,另一方面通信協(xié)議隨時都在修改,不適合做成專門的芯片,所以能夠靈活改變的功能的FPGA就成了首選

電信行業(yè)一直大量使用FPGA。電信標(biāo)準(zhǔn)不斷變化,建造電信設(shè)備非常困難,因此首先提供電信解決方案的公司往往會占領(lǐng)最大的市場份額。由于ASIC需要花費(fèi)很長時間才能制造,因此FPGA提供了捷徑的機(jī)會。最初的電信設(shè)備版本開始采用FPGA,這引發(fā)了FPGA價格沖突。盡管FPGA的價格與ASIC仿真市場無關(guān)緊要,但電信芯片的價格卻很重要。許多年前,AT&T和朗訊制造了自己的FPGA,稱為ORCA(優(yōu)化的可重配置單元陣列),但就硅片的速度或尺寸而言,它們與Xilinx或Altera不具有競爭優(yōu)勢。

2,算法領(lǐng)域。

FPGA對于復(fù)雜信號的處理性很強(qiáng),可以處理多維信號。

3,嵌入式領(lǐng)域。

利用FPGA構(gòu)建一個嵌入式的底層環(huán)境,然后在此之上編寫一些嵌入式軟件,事務(wù)性的操作更加繁雜一些,對FPGA的操作較少。

4,在安防監(jiān)控領(lǐng)域

目前CPU很難做到多通道處理和只能檢測分析,但是加上FPGA之后就可以輕松解決了,尤其在圖形算法領(lǐng)域有得天獨(dú)厚的優(yōu)勢。

5,在工業(yè)自動化領(lǐng)域

FPGA可以做到多通道的馬達(dá)控制,目前馬達(dá)電力消耗占據(jù)全球能源消耗的大頭,在節(jié)能環(huán)保的趨勢下,未來各類精準(zhǔn)控制馬達(dá)得以采用,一片F(xiàn)PGA就可以控制大量的馬達(dá)。

三、公司

FPGA多年來被四大巨頭Xilinx(賽靈思)、Altera(阿爾特拉)、Lattice(萊迪思)、Microsemi(美高森美)壟斷。

還有一些小公司勉強(qiáng)在夾縫中生存。

其中Xilinx(賽靈思)是全球領(lǐng)先的可編程邏輯完整解決方案的供應(yīng)商。Xilinx研發(fā)、制造并銷售范圍廣泛的高級集成電路、軟件設(shè)計工具以及作為預(yù)定義系統(tǒng)級功能的IP(Intellectual Property)核。

國外三巨頭占據(jù)90%全球市場,國產(chǎn)廠商暫時落后。

FPGA市場呈現(xiàn)雙寡頭壟斷格局,Xilinx和Altera分別占據(jù)全球市場56%和31%,

在中國FPGA市場中,占比也高達(dá)52%和28%,

由于技術(shù)、資金、人才上的壁壘及FPGA量產(chǎn)帶來的規(guī)模經(jīng)濟(jì),行業(yè)領(lǐng)導(dǎo)者地位較為穩(wěn)定。

國產(chǎn)廠商目前在中國市場占比約4%,未來隨著國產(chǎn)廠商技術(shù)突破,

FPGA領(lǐng)域國產(chǎn)替代或?qū)⑹前賰|級的機(jī)會,替代空間廣闊。

Altera目前已被Intel收購,AMD正在收購賽靈思,預(yù)計2021年底完成收購。

我國FPGA公司

    1、京微齊力:二次創(chuàng)業(yè),瞄準(zhǔn)AI云邊端2、上海遨格芯:從編譯軟件切入生態(tài)鏈3、廣東高云:28nm中高密度FPGA4、深圳紫光同創(chuàng):高性能FPGA已量產(chǎn)商用5、西安智多晶:小米為第四大股東6、上海安路科技:28nm今年批量供應(yīng)7、成都華微科技:出身國家“909”工程8、上海復(fù)旦微電子:超大規(guī)模億門級FPGA

五、IP核

FPGA有個最重要的概念就是IP核。

IP(Intelligent Property) 核是具有知識產(chǎn)權(quán)核的集成電路芯核總稱,是經(jīng)過反復(fù)驗證過的、具有特定功能的宏模塊,與芯片制造工藝無關(guān),可以移植到不同的半導(dǎo)體工藝中。

如果還不理解,你就當(dāng)他是一個軟件模塊,或者是一個積木的部件。

比如賽靈思已經(jīng)基于FPGA設(shè)計好了UDP 核、PCIE xDMA 核、UART 核,我們只需要把人家的核添加到我們工程中,那么就相當(dāng)于與我們的板子已經(jīng)支持了這個功能。

對于FPGA 開發(fā)軟件,其提供的IP核越豐富,用戶的設(shè)計就越方便,其市場占用率就越高。

一句話:IP核很值錢!

六、語言和舉例

talk is cheap,show you code!

下面我們舉一個例子來講解

下面我們用verilog實現(xiàn)超前進(jìn)位加法器

例1:超前進(jìn)位信號的產(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ì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]);

//計算和
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é)果:

可以看到,這個和一般的高級語言差別比較大。

學(xué)習(xí)FPGA必須有過硬的硬件電路基礎(chǔ)。

例2:

上述為lattice的一款FPGA架構(gòu),你可以把它想象成一塊放滿電子元件的硬件電路板,圖中“電路板”上的元件有IICSPI硬核接口“器件”,有NVCM程序存儲“器件”,有RAM數(shù)據(jù)存儲“器件”,還有最小單元的LUT(查找表)器件。

一般FPGA工程師會使用硬件描述語言Verilog或者VHDL對FPGA進(jìn)行“編程”,之后,再經(jīng)過廠家提供的FPGA開發(fā)工具(Diamond或Radiant、vivado)的綜合、布局、布線,會產(chǎn)生bit文件或bin文件。

如果工程師將最終產(chǎn)生的bit文件或bin文件下載到FPGA中,就相當(dāng)于一位硬件工程師,在FPGA芯片這塊已經(jīng)放置了“元件”的“電路板”上,進(jìn)行了布線操作。(也就是把毫無關(guān)聯(lián)的與器件,用銅線連接起來)

下載程序后的FPGA,我們就不能簡單稱之為“電路板”了。

舉個例子,F(xiàn)PGA實現(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ù)布線的電路板。

七、為什么效率會如此之高?

1. FPGA與GPU的區(qū)別本質(zhì)上是體系結(jié)構(gòu)的區(qū)別

CPU、GPU 都屬于馮·諾依曼結(jié)構(gòu),指令譯碼執(zhí)行、共享內(nèi)存。

FPGA 本質(zhì)上是無指令、無需共享內(nèi)存的體系結(jié)構(gòu)。

CPU與FPGA區(qū)別之(指令):CPU結(jié)構(gòu)——有指令:馮氏結(jié)構(gòu)中,由于執(zhí)行單元(如 CPU 核)可能執(zhí)行任意指令,就需要有指令存儲器、譯碼器、各種指令的運(yùn)算器、分支跳轉(zhuǎn)處理邏輯。由于指令流的控制邏輯復(fù)雜,不可能有太多條獨(dú)立的指令流,
因此 GPU 使用 SIMD(單指令流多數(shù)據(jù)流)來讓多個執(zhí)行單元以同樣的步調(diào)處理不同的數(shù)據(jù),CPU 也支持 SIMD 指令。FPGA結(jié)構(gòu)——無需指令:而 FPGA 每個邏輯單元的功能在重編程(燒寫)時就已經(jīng)確定,不需要指令。

CPU與FPGA區(qū)別之(內(nèi)存)CPU結(jié)構(gòu)——仲裁與共享內(nèi)存:馮氏結(jié)構(gòu)中使用內(nèi)存有兩種作用。一是保存狀態(tài),二是在執(zhí)行單元間通信。由于內(nèi)存是共享的,就需要做訪問仲裁;為了利用訪問局部性,每個執(zhí)行單元有一個私有的緩存,這就要維持執(zhí)行部件間緩存的一致性。

FPGA結(jié)構(gòu)——無需仲裁與共享內(nèi)存:對于保存狀態(tài)的需求,F(xiàn)PGA 中的寄存器和片上內(nèi)存(BRAM)是屬于各自的控制邏輯的,無需不必要的仲裁和緩存。對于通信的需求,F(xiàn)PGA 每個邏輯單元與周圍邏輯單元的連接在重編程(燒寫)時就已經(jīng)確定,并不需要通過共享內(nèi)存來通信。

FPGA 同時擁有流水線并行和數(shù)據(jù)并行,而 GPU 幾乎只有數(shù)據(jù)并行(流水線深度受限)。

FPGA流水線與數(shù)據(jù)并行處理:例如:處理一個數(shù)據(jù)包有 10 個步驟,F(xiàn)PGA 可以搭建一個 10 級流水線,流水線的不同級在處理不同的數(shù)據(jù)包,每個數(shù)據(jù)包流經(jīng) 10 級之后處理完成。每處理完成一個數(shù)據(jù)包,就能馬上輸出。

GPU數(shù)據(jù)并行處理:而 GPU 的數(shù)據(jù)并行方法是做 10 個計算單元,每個計算單元也在處理不同的數(shù)據(jù)包,

然而所有的計算單元必須按照統(tǒng)一的步調(diào),做相同的事情(SIMD,Single Instruction Multiple Data)。

這就要求 10 個數(shù)據(jù)包必須一起輸入、一起輸出,輸入輸出的延遲增加了。

總結(jié)一句話,很多算法如果用純軟件實現(xiàn),需要很多條指令才能完成,
如果用FPGA,只需要在有限個時鐘周期即可完成,速度快的不是一點(diǎn)半腥。

八、收入

FPGA軍品使用非常廣泛,基本上只要涉及無線通信的產(chǎn)品都會涉及到FPGA開發(fā)。

尤其在高校里,應(yīng)用非常廣,
這個領(lǐng)域,特別容易發(fā)論文(博士論文)

還有一些其他領(lǐng)域都是些小公司,工控機(jī)器人,3d成像,裸眼3d公司,led拼接屏公司,

通信領(lǐng)域用的比較多,還有些大數(shù)據(jù)的,比如說騰訊和百度也有類似的崗位做數(shù)據(jù)挖掘

一口君隨手截取了某APP發(fā)布的南京、上海、深圳的FPGA崗位信息。

可見收入一般2萬到5萬,和互聯(lián)網(wǎng)寡頭動輒上百萬年薪,沒法比,和金融收入也沒法比,整體來說中規(guī)中矩吧!

對比軟件行業(yè)屬于薪水較低 但是經(jīng)驗積累時間長了,工資會很高,越老越厲害,后面就比軟件工資高了。

一口君曾經(jīng)和龍芯的技術(shù)人員交流過,他們的中流砥柱都是做FPGA出身的!

相關(guān)推薦

登錄即可解鎖
  • 海量技術(shù)文章
  • 設(shè)計資源下載
  • 產(chǎn)業(yè)鏈客戶資源
  • 寫文章/發(fā)需求
立即登錄

公眾號『一口Linux』號主彭老師,擁有15年嵌入式開發(fā)經(jīng)驗和培訓(xùn)經(jīng)驗。曾任職ZTE,某研究所,華清遠(yuǎn)見教學(xué)總監(jiān)。擁有多篇網(wǎng)絡(luò)協(xié)議相關(guān)專利和軟件著作。精通計算機(jī)網(wǎng)絡(luò)、Linux系統(tǒng)編程、ARM、Linux驅(qū)動、龍芯、物聯(lián)網(wǎng)。原創(chuàng)內(nèi)容基本從實際項目出發(fā),保持原理+實踐風(fēng)格,適合Linux驅(qū)動新手入門和技術(shù)進(jìn)階。