有意思的論文FPGA Catapult
(續前文:有意思的論文FPGA Catapult(P1))
FPGA可編程原理
FPGA的基本組成單元是可編程ConfigurableLogical Block(CLB)。簡單說,大量CLB排列組成FPGA板。
CLB是由門單元組成的組合邏輯電路,可編程為任意的真值表(Look-up-table(LUT))。換句話說,可編程為任意邏輯。編程方式如下圖,A、B、C、D為輸入,R指寄存器。LUT-Mask由寄存器組成,為其設定不同的0/1值,即可編程。圖中4-輸入LUT,需要2^4個LUT-Mask寄存器來編程。
FPGA板上除CLB外,實際還排布了大量內存。CLB編程需要寄存器,可以是SRAM。另一方面,時序邏輯電路自身也需要內存。可以有獨立的內存塊,內存也可以分散混編入邏輯單元中。
總體上,CLB、內存、其它附屬混合排布,周圍有IO引腳連出。
內存並不能持久保存編程配置。通常FPGA配有Boot Flash,以持久化編程配置。開機時讀取Boot Flash重新編程。
回到第一張圖,除橘黃色方塊代表的CLB外,還有大量藍色方塊和黑色連接線。它們構成FPGA的Routing Architecture,即可編程的路由結構。Routing Architecture控制CLB間如何連接,通過對它們的編程,大量CLB連接成為複雜的功能邏輯。
連接線交匯點,即第一張圖中的藍色方塊,通常稱為Switch Box,名稱由來類似交換機。它們支持多種連接結構,可編程其連接方式。Routing Architecture的可配置即在於對Switch Box的編程。
商用FPGA更進一步,常常在板上嵌入DSP核甚至ARM核,與CLB混排,達到更強的運算能力,並且與它們互補長短。與可編程的CLB相反,這些DSP核、ARM核不能再編程,它們被稱為Hard block。
談到時序邏輯電路,當然少不了時鐘。FPGA板配有多個時鐘,劃分時鐘區域Clock Domain。Clock Domain可配置不同的時鐘頻率,以平衡性能和省電需要。例如前述Catapult V2論文中,不同功能模塊劃分時鐘區域和頻率。
關於FPGA的可編程性,術語是Reconfiguration。現代FPGA通常支持Partial-reconfiguration,即部分重編程。Partial-reconfiguration可以在不中斷FPGA其它部分運作的情況下,將指定區域重新編程。另一方面,Partial-reconfiguration速度更快,一般在~100ms左右,而全部重新編程可消耗1-2s。後文將會看到,Partial-reconfiguration對FPGA的雲虛擬化至關重要。
上文圖片的出處、關於FPGA的可編程原理的資料
[Altera FPGA Architecture White Paper](https://www.altera.com/en_US/pdfs/literature/wp/wp-01003.pdf)可了解CLB編程的原理。Altera改進版CLB被其稱為ALM。
[How FPGAs work, and why you"ll buy one](https://www.embeddedrelated.com/showarticle/195.php)淺顯易懂地介紹了FPGA架構的原理和各個概念。
[FPGA Architecture: Survey and Challenges](http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.153.3122)深入介紹FPGA架構的原理、各個組成部分、不同實現方法、未來的發展以及挑戰。
關於Partial-reconfiguration的資料
[How to take advantage of partial reconfiguration in FPGAdesigns](https://www.eetimes.com/document.asp?doc_id=1274489)
[Partial Reconfiguration on FPGAs](http://www.uio.no/studier/emner/matnat/ifi/INF5430/v11/undervisningsmateriale/lecture_slides_dirk/lecture_RC.pdf)
從上述硬體原理,可以推論出FPGA相比GPU、CPU的諸多不同,以及優缺點。前文李博傑的文章中也有很好的總結。除了可編程和低能耗外,
FPGA是一個可編程的集成電路,而GPU、CPU屬於馮諾依曼架構。FPGA沒有指令的概念,根據編程邏輯不同,可以構造任何想要的電路。GPU、CPU讀取一條條指令,按照指令處理數據;GPU集成大量處理核,以SIMD方式提高吞吐量,而CPU則以複雜的指令流水和預測見長。
對於訪問內存,FPGA的邏輯單元和任意連接、劃分區域,各自控制邏輯不需要仲裁和緩存。而GPU、CPU等由於多核競爭訪問內存,需要引入仲裁和緩存機制,增加的延遲。
FPGA編程消耗CLB的數量;如果有更多的CLB,就可以燒制更多的並行流水邏輯;換句話說,板上面積就是計算能力。GPU、CPU可以通過增加核數提高吞吐量,但由於總體更加複雜,能做到批量處理,但無法做到FPGA的低延遲。
複雜的處理邏輯,在FPGA上可以燒製為更大面積的電路,但在一兩個時鐘周期內運算完畢。對於GPU、CPU,則需要多條指令,多個時鐘處理周期,天然延遲更高。
對專用電路支持的複雜邏輯,FPGA需要編程實現,而GPU、CPU則有內置支持,可以是ASIC。FPGA這方面通常劣勢,例如FPGA不擅長浮點數運算,這成為其機器學習應用的一大障礙。但作為補充,商用FPGA通常內嵌DSP處理器,以彌補之。
FPGA的編程是完全面向硬體的,通常使用硬體開發語言,如Verilog。面向CPU的編程語言如C,雖然可以使用,但不利於完全發揮其硬體特性和並行。作為彌補,廠商大量提供可復用的功能設計,稱為IP。相比GPU、CPU,後者面向廣大軟體開發者,直接兼容的大量語言和框架,開發易度和推廣速度遠超FPGA。
(未完待續……後面將講解FPGA的雲虛擬化方案、多種應用場景等。註:本文為個人觀點總結,作者工作於微軟)


TAG:Accela推箱子 |