作為半吊子的硬件開發工程師,一個偶然的機會就去面試了一家互聯網公司的項目經理,其實平台還挺大的,這裡面試都通過了,期間産生的一些問題也跟大家做分享一下。
面試一共是四輪,兩輪技術面,一輪綜合面試,一輪hr面,都死采取電話面試的過程。
其中當問到FPGA的時候,我第一時間竟然隻是聽過,但是不知道具體是什麼東西,抱着務實求真和學習的态度,也就有了這篇文章的出來,希望在總結的同時,也可以跟大家一起分享學習一下。
我将從三個部分跟大家介紹一下什麼是FPGA,他的工作原理,以及更為複雜的FPGA架構。
什麼是FPGA?聽到這個名詞的時候,第一時間是耳熟,FPGA的官方解釋是Field-Programmable Gate Array,翻譯過來就是現場可編程門陣列。
它是在PAL、GAL、CPLD(不可讀系列)等可編程器件的基礎上進一步發展的産物,跟ASIC相比,它是作為一種半定制電路而出現的,既解決了定制電路的不足,也克服了可編程門陣列電路有限的缺點。
相信你應該有聽過CPU,GPU等通用處理器吧,FPGA跟他們相比具有更高的效率,更高的速度、功耗更低等優點,但是他易于開發的程度遠遠不如GPU。
跟剛才ASIC這種專職專用的定制電路相比,FPGA的開發難度較小,開發周期也是更短,更适用于複雜多變的數據中心等應用,但是缺點呢?它犧牲了資源,成本較高,性能上會比專職專用的ASIC定制電路差,在一定程度上不能完全的替代ASIC。
FPGA的工作原理
由于FPGA 需要反複燒寫,所以他實現組合邏輯的結構不能像ASIC 那樣通過固定的與非門來完成,而隻能采用一種抑郁反複配置的結構。查找表(LUT)可以很好地滿足這一要求,目前主流FPGA 都采用了基于SRAM 工藝的查找表結構。通過燒寫文件改變查找表内容的方法來實現對FPGA 的重複配置。
FPGA 的原理就是如此,他通過燒寫文件去配置查找表的内容,從而在相同的電路情況下實現了不同的邏輯功能。
那麼什麼是查找表呢?
查找表(Look-Up-Table)簡稱為LUT,LUT 本質上就是一個RAM。目前FPGA 中多實用4 輸入的LUT,所以每一個LUT 可以看成一個有4 位地址線的RAM。當用戶通過原理圖或HDL 語言描述了一個邏輯電路以後,FPGA 開發軟件會自動計算邏輯電路的所有可能結果,并把真值表(即結果)事先寫入RAM,這樣,每輸入一個信号進行邏輯運算就等于輸入一個地址進行查找表,找出相應的内容,然後輸出即可。
簡短概括上面的那段話就是:
- 通過開發軟件将所有可能的結果寫到LUT上,然後通過輸入是何種狀态,直接查找輸出結果。下面這種圖應該會讓你比較直觀的看出來。
它的查找表是什麼呢?
- 在 FPGA,用戶首先寫出“y=(a&b)|c”代碼,軟件工具(QUARTUS、ISE 或 VIVADO)分析這一行代碼,得出 a、b、c 不同值下(共8 種不同值),y 的值分别是多少。
- 然後軟件工具将結果寫到LUT 上,從而實現了該代碼的功能。下圖就是FPGA 的實現基本結構。LUT 就像一個RAM,abc 則相當于地址,通過abc 的地址就得讀到值賦給y。
是不是不難理解呢?到目前為止。
更為複雜的FPGA架構
賽靈思公司在1985 年推出的第一塊FPGA—XC2064 包含8×8=64 的邏輯塊陣列,每個邏輯塊包含一個四輸入查找表及其它一些簡單功能。
由于它們的容量非常有限,因此早期的FPGA 隻用來執行一些相對簡單的任務,比如集中一些膠合邏輯,或實現基本的狀态機。
但是随着時間的推移和工藝節點的進步,FPGA 的容量和性能不斷得到提高,功耗卻不斷的下降。直到大約2006 年以前廣泛使用的一直是四輸入查找表,一些高端器件可能使用六、七或八輸入的查找表,這些大家夥可能被用作一個大的查找表,或分裂成許多更小的功能,比如兩個四輸入的查找表或一個三輸入一個五輸入的查找表。
在實際的高端器件中,這種可編程構造可以描述相當于百萬級(有時甚至千萬級)的原始邏輯門。
如果某個邏輯功能(比方說計數器)是用FPGA 的可編程構造實現的,那麼這個功能可以被說成“軟功能”,我們稱之為軟内核。
相比之下,如果某個功能是直接用芯片實現的,則被說成“硬功能”,我們一般稱之為硬内核。
軟内核的優勢在于,你可以讓它們做你想讓它們做的任何事,注意,是數字功能,不包括模拟功能。硬内核的優勢是它們占用較少的矽片面積,具有較高的性能,并且功耗較低,并且硬内核可用于實現模拟功能。例如鎖相環的倍頻功能,這需要用于模拟電路,所以這一部分是在FPGA 内部用硬件來實現的。
閑聊可能第一部分什麼是FPGA,以及FPGA的工作原理大家理解起來不會那麼難,第三部分我更多使用文字描述的形式展現,更多也是一種定義,希望不會給你們覺得困難。
總之FPGA理解起來就是一堆的門電路組合,可以反複的進行擦寫,好的甚至可以擦寫百萬次,其實針對FGPA的還有兩部分細節我還沒跟大家介紹,由于篇幅有限,下篇會跟大家補上,主要是:
- 帶嵌入式處理器的FPGA
- FPGA的編程方式
讓大家對它有個整體的認識,然後我就會詳細的介紹他的設計與應用,也是為自己理解應用FPGA打下基礎,在日後工作上有更深的理解。
歡迎大家點贊,評論,支持和收藏,你的支持是對我創作的認可!感謝!
,