《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 其他 > 業(yè)界動(dòng)態(tài) > 高層次綜合:解鎖FPGA廣闊應(yīng)用的最后一塊拼圖

高層次綜合:解鎖FPGA廣闊應(yīng)用的最后一塊拼圖

2019-10-16
關(guān)鍵詞: FPGA 高層次綜合

  我們?yōu)槭裁葱枰邔哟尉C合

  高層次綜合(High-level Synthesis)簡稱HLS,,指的是將高層次語言描述的邏輯結(jié)構(gòu),,自動(dòng)轉(zhuǎn)換成低抽象級(jí)語言描述的電路模型的過程,。所謂的高層次語言,,包括C,、C++,、SystemC等,,通常有著較高的抽象度,,并且往往不具有時(shí)鐘或時(shí)序的概念,。相比之下,,諸如Verilog、VHDL,、SystemVerilog等低層次語言,,通常用來描述時(shí)鐘周期精確(cycle-accurate)的寄存器傳輸級(jí)電路模型,這也是當(dāng)前ASIC或FPGA設(shè)計(jì)最為普遍使用的電路建模和描述方法,。

  然而,,HLS技術(shù)在近十年來獲得了大量的關(guān)注和飛速的發(fā)展,尤其是在FPGA領(lǐng)域,??v觀近年來各大FPGA學(xué)術(shù)會(huì)議,HLS一直是學(xué)術(shù)界和工業(yè)界研究最集中的領(lǐng)域之一,。究其原因,,主要有以下幾點(diǎn)。

  第一,,使用更高的抽象層次對(duì)電路建模,,是集成電路設(shè)計(jì)發(fā)展的必然選擇。集成電路伴隨摩爾定律發(fā)展至今,,其復(fù)雜性已經(jīng)逐漸超過人類可以手工管理的范疇,。例如,蘋果iPhone11內(nèi)置的A13芯片,,就有著約85億支晶體管,。

640.webp (20).jpg

  (圖片來自Stephen Shankland/CNET)

  然而,,根據(jù)NEC 2004年發(fā)布的研究,,一個(gè)擁有100萬邏輯門的芯片設(shè)計(jì)通常需要編寫30萬行RTL代碼。因此,,完全使用RTL級(jí)的邏輯抽象設(shè)計(jì)當(dāng)代芯片是不現(xiàn)實(shí)的,,并將對(duì)設(shè)計(jì),、驗(yàn)證、集成等各個(gè)環(huán)節(jié)造成巨大的壓力,。

  相比之下,,使用諸如C、C++等高層語言對(duì)系統(tǒng)建模,,可以將代碼密度壓縮7到10倍,,這極大的緩解了設(shè)計(jì)復(fù)雜度。

  第二,,高層語言能促進(jìn)IP重用的效率,。傳統(tǒng)的基于RTL的IP往往需要定義固定的架構(gòu)和接口標(biāo)準(zhǔn),在IP重用時(shí)需要花費(fèi)大量時(shí)間進(jìn)行系統(tǒng)互聯(lián)和接口驗(yàn)證,。相比之下,高層語言隱藏了這些要求,,轉(zhuǎn)而由HLS工具負(fù)責(zé)具體實(shí)現(xiàn),。

  對(duì)于FPGA而言,現(xiàn)代FPGA里有著大量成熟的IP單元,,如嵌入式存儲(chǔ)器,、算術(shù)運(yùn)算單元、嵌入式處理器,,以及最近逐漸興起的AI加速器,、片上網(wǎng)絡(luò)系統(tǒng)等等。這些FPGA IP有著固定的功能和位置,,因此可以被HLS工具充分利用,,在提升IP重用效率的同時(shí),簡化綜合算法,、提高綜合后電路的性能,。

  第三,HLS能幫助軟件和算法工程師參與,、甚至主導(dǎo)芯片或FPGA設(shè)計(jì),。這是由于HLS工具能封裝和隱藏硬件的實(shí)現(xiàn)細(xì)節(jié),從而使軟件和工程師能專注于上層算法的實(shí)現(xiàn),。對(duì)于硬件工程師而言,,HLS也能幫助他們進(jìn)行快速的設(shè)計(jì)迭代,并專注于對(duì)性能,、面積或功耗敏感的模塊和子系統(tǒng)的優(yōu)化設(shè)計(jì),。

  FPGA高層次綜合的前世今生

  伴隨集成電路的復(fù)雜性的飛速增長,芯片設(shè)計(jì)方法學(xué)也在不斷演進(jìn),。早在FPGA出現(xiàn)之前,,人們就已經(jīng)開始嘗試擺脫依靠人工檢視芯片版圖的設(shè)計(jì)方法,,轉(zhuǎn)而探索使用高層語言對(duì)電路邏輯進(jìn)行行為級(jí)描述,并通過自動(dòng)化工具將電路模型轉(zhuǎn)化為實(shí)際的電路設(shè)計(jì),。

  在上世紀(jì)八九十年代,,面向集成電路設(shè)計(jì)的HLS工具就已經(jīng)是學(xué)術(shù)界研究的熱點(diǎn)。這其中比較有代表性的工作,,包括卡耐基梅隆大學(xué)的CMU-DA(design automation)工具,,以及加拿大卡爾頓大學(xué)提出的force-directed調(diào)度算法等等。

  從現(xiàn)在看來,,這些工作為當(dāng)前的電路綜合算法打下了基礎(chǔ),,并為后來HLS研究提供了很多寶貴的經(jīng)驗(yàn)和借鑒。然而,,這個(gè)階段的HLS工作在成果轉(zhuǎn)化方面十分失敗,,并未有效的轉(zhuǎn)化成工業(yè)實(shí)踐。一個(gè)最主要的原因,,就在于“在錯(cuò)誤的時(shí)間,,遇上了對(duì)的人”。

  當(dāng)時(shí)正值摩爾定律蓬勃興起的時(shí)期,,集成電路設(shè)計(jì)正在經(jīng)歷史上最大的變革,。在后端,自動(dòng)布局布線已經(jīng)逐漸成為主流,;在前端,,RTL綜合也在逐漸興起。傳統(tǒng)電路設(shè)計(jì)工程師都紛紛開始采用基于RTL的電路建模方法,,取代傳統(tǒng)的基于原理圖和版圖的設(shè)計(jì),,并由此帶來RTL綜合工具的飛速發(fā)展。相比之下,,這個(gè)階段的HLS研究往往使用了特殊的編程語言,,如CMU-DA采用的名為“ISPS”的語言,因此很難獲得那些正在和RTL處于“蜜月期”的工程師們的青睞,。

  伴隨著一段時(shí)間的沉寂,,HLS在2000年之后再次開始獲得學(xué)術(shù)界和工業(yè)界的關(guān)注,比較有名的工具包括Bluespec和AutoPilot等,。主導(dǎo)這一變化的主要原因是,,HLS工具開始將C/C++作為主要的目標(biāo)語言,從而被很多不了解RTL的系統(tǒng)和算法工程師所逐漸接受,。同時(shí),,HLS工具綜合生成的結(jié)果也有了長足進(jìn)步,在某些應(yīng)用領(lǐng)域甚至可以和人工手寫RTL近似的性能水平。

  此外,,F(xiàn)PGA的逐漸興起也對(duì)HLS的發(fā)展起到了重要的助推作用,。和ASIC設(shè)計(jì)不同,F(xiàn)PGA有著固定數(shù)量的片上邏輯資源,。因此HLS工具不用過度糾結(jié)于ASIC設(shè)計(jì)中面積,、性能和功耗的絕對(duì)優(yōu)化,而只需要將設(shè)計(jì)合理的映射到FPGA的固定架構(gòu)上即可,。這樣,,HLS就成為了在FPGA上快速實(shí)現(xiàn)目標(biāo)算法的絕佳方式。

  時(shí)至今日,,高層次綜合技術(shù)取得了進(jìn)一步的發(fā)展,。大型FPGA公司都推出了各自的HLS工具,如賽靈思的Vivado HLS和英特爾的HLS編譯器,、OpenCL SDK等,。在學(xué)術(shù)界也有諸多成果涌現(xiàn),如多倫多大學(xué)的LegUp等等,。

  接下來,,老石將以AutoPilot這個(gè)HLS工具為例,簡單介紹高層次綜合的主要工作原理,。

  高層次綜合的主要工作原理

  AutoESL公司的AutoPilot工具,可以說是HLS領(lǐng)域最為成功的學(xué)術(shù)成果轉(zhuǎn)化案例,。AutoPilot源自于UCLA叢京生教授主導(dǎo)的xPilot項(xiàng)目,,從隨后與當(dāng)時(shí)負(fù)責(zé)該課題的博士生張志如(現(xiàn)任康奈爾大學(xué)副教授)一起創(chuàng)辦了AutoESL公司,并在2011年被賽靈思收購,,成為了之后的Vivado HLS,。

640.webp (19).jpg

  AutoPilot的工作流程框圖如下圖所示。在前端,,它使用了基于LLVM的編譯器架構(gòu),,能夠處理可綜合的ANSI C、C++,,以及OSCI SystemC等語言編寫的模型,。這個(gè)名為llvm-gcc的前端編譯器會(huì)將高層語言模型轉(zhuǎn)換為中間表達(dá)式(IR),并進(jìn)行一系列針對(duì)代碼復(fù)雜度,、冗余,、并行性等方面的代碼優(yōu)化。然后再根據(jù)具體的硬件平臺(tái),,綜合生成RTL代碼,、驗(yàn)證與仿真環(huán)境,以及必須的時(shí)序和布局約束等。

640.webp (18).jpg

  AutoPilot的成功之處在于,,它的HLS結(jié)果在某些應(yīng)用領(lǐng)域完勝人工優(yōu)化RTL取得的結(jié)果,。例如,在一個(gè)無線MIMO系統(tǒng)中使用的Sphere解碼器IP中,,AutoPilot將4000行C代碼算法成功綜合到Virtex5 FPGA上,,運(yùn)行在225MHz,并取得了比賽靈思Sphere解碼器IP更少的邏輯資源使用量,,見下圖,。這個(gè)結(jié)果放在現(xiàn)在也令人十分震撼,它很好的證明了HLS有潛力取得比RTL IP更為出色的性能,。

640.webp (17).jpg

  獲取有關(guān)AutoPilot的更多技術(shù)細(xì)節(jié)和論文內(nèi)容,,請(qǐng)?jiān)诶鲜勑竟娞?hào)后臺(tái)回復(fù)“HLS”或“高層次綜合”。

  高層次綜合工具常用的優(yōu)化方法

  傳統(tǒng)的處理器編譯器設(shè)計(jì)通常只有一個(gè)主要目標(biāo),,那就是盡量提升性能,。相比之下,高層次綜合工具需要統(tǒng)籌考慮各種電路設(shè)計(jì)的主要指標(biāo),,如性能,、功耗、面積等等,,同時(shí)也要兼顧工具本身的性能,,比如占用的資源和運(yùn)行時(shí)間等。因此,,在開發(fā)HLS工具時(shí),,要額外考慮和采用更多的優(yōu)化方法,而這些優(yōu)化方法也是當(dāng)今學(xué)術(shù)界和工業(yè)界在HLS領(lǐng)域重點(diǎn)研究的方向,??偟膩碚f,HLS工具的主流優(yōu)化方法有以下幾種,。

  01

  字長分析和優(yōu)化

  FPGA的一個(gè)最主要特點(diǎn)就是可以使用任意字長的數(shù)據(jù)通路和運(yùn)算,。因此,F(xiàn)PGA的HLS工具不需要拘泥于某種固定長度(如常見的32位或64位)的表達(dá)方式,,而可以對(duì)設(shè)計(jì)進(jìn)行全局或局部的字長優(yōu)化,,從而達(dá)到性能提升和面積縮減的雙重效果。

  然而,,字長分析和優(yōu)化需要HLS的使用者對(duì)待綜合的算法和數(shù)據(jù)集有深入的了解,,這也是限制這種優(yōu)化方式廣泛使用的主要因素之一。

  02

  循環(huán)優(yōu)化

  循環(huán)優(yōu)化一直是HLS優(yōu)化方法的研究重點(diǎn)和熱點(diǎn),,因?yàn)檫@是將原本順序執(zhí)行的高層軟件循環(huán)有效映射到并行執(zhí)行的硬件架構(gòu)的重點(diǎn)環(huán)節(jié),。

  循環(huán)優(yōu)化的最終目的,,就是盡量將循環(huán)里兩次相鄰的操作以最小的時(shí)延實(shí)現(xiàn),理想情況下,,相鄰的循環(huán)操作可以完全并行執(zhí)行,。然而,由于硬件資源的限制,,以及更多的是因?yàn)檠h(huán)間存在嵌套和依賴關(guān)系,,很難將循環(huán)完全展開。如何優(yōu)化各種循環(huán),,以實(shí)現(xiàn)最優(yōu)的硬件結(jié)構(gòu),,就成為了學(xué)術(shù)界和工業(yè)界最為關(guān)心的要點(diǎn)。

  一個(gè)流行的循環(huán)優(yōu)化方法,,就是所謂的多面體模型,,即Polyhedral Model。多面體模型的應(yīng)用非常廣泛,,在HLS里主要被用來將循環(huán)語句以空間多面體表示(見下圖),,然后根據(jù)邊界約束和依賴關(guān)系,通過幾何操作進(jìn)行語句調(diào)度,,從而實(shí)現(xiàn)循環(huán)的變換,。

640.webp (16).jpg

  關(guān)于多面體模型的細(xì)節(jié),本文不再展開,,有興趣的讀者可以在公眾號(hào)后臺(tái)回復(fù)“HLS”或“高層次綜合”獲取更多相關(guān)信息,。需要指出的是,多面體模型在FPGA HLS里已經(jīng)取得了相當(dāng)?shù)某晒?,很多研究均證明多面體模型可以幫助實(shí)現(xiàn)性能和面積的優(yōu)化,,同時(shí)也能幫助提升FPGA片上內(nèi)存的使用效率。

  03

  對(duì)軟件并行性的支持

  C/C++與RTL相比,,一個(gè)主要的區(qū)別是,,前者編寫的程序被設(shè)計(jì)用來在處理器上順序執(zhí)行,,而后者可以通過直接例化多個(gè)運(yùn)算單元,,實(shí)現(xiàn)任務(wù)的并行處理。隨著處理器對(duì)并行性的逐步支持,,以及如GPU等非處理器芯片的興起,,C/C++開始逐漸引入對(duì)并行性的支持。例如,,出現(xiàn)了pthreads和OpenMP等多線程并行編程方法,,以及OpenCL等針對(duì)GPU等異構(gòu)系統(tǒng)進(jìn)行并行編程的C語言擴(kuò)展。

  因此作為HLS工具,,勢(shì)必要增加對(duì)這些軟件并行性的支持,。例如,LegUp就整合了度pthreads和OpenMP的支持,從而可以實(shí)現(xiàn)任務(wù)和數(shù)據(jù)層面的并行性,。

640.webp (15).jpg

  獲取有關(guān)LegUp的更多技術(shù)細(xì)節(jié)和論文內(nèi)容,,請(qǐng)?jiān)诶鲜勑竟娞?hào)后臺(tái)回復(fù)“HLS”或“高層次綜合”。

640.webp (14).jpg

  另外,,Altera在被英特爾收購之前就已經(jīng)推出了OpenCL SDK,,可以將OpenCL進(jìn)行高層次綜合,并生成FPGA電路邏輯與CPU代碼兩部分,,從而實(shí)現(xiàn)FPGA作為硬件加速模塊的快速開發(fā),。

640.webp (13).jpg

  高層次綜合的發(fā)展前景

  HLS經(jīng)過十?dāng)?shù)年的發(fā)展,雖然有諸如AutoPilot,、OpenCL SDK等FPGA HLS商業(yè)化成功的案例出現(xiàn),,但距離其完全替代人工RTL建模還有很長的路要走。

  比如,,對(duì)于FPGA而言,,內(nèi)存瓶頸一直是制約系統(tǒng)性能的重要因素。除片上的各類BRAM之外,,還有各類片外存儲(chǔ)單元,,如DDR、QDR,,以及近年興起的HBM等等,。因此,有效利用片上和片外各類存儲(chǔ)單元一直是HLS的研究熱點(diǎn),。

  此外,,HLS的仿真和調(diào)試也需要進(jìn)一步探索。一方面,,需要形式化方法證明HLS生成的RTL代碼與高層次代碼等效,;另一方面,當(dāng)需要進(jìn)行軟硬件分別和協(xié)同仿真,、調(diào)試時(shí),,HLS工具要提供相關(guān)的測(cè)試環(huán)境、用例,、腳本,、調(diào)試方法等。當(dāng)硬件出現(xiàn)問題時(shí),,如何向上調(diào)試軟件中的漏洞,,也需要方法論的支持。

  近年來,,越來越多的研究開始專注于特定領(lǐng)域(domain specific)的編程語言和對(duì)應(yīng)的HLS,,比如在之前文章中介紹過的P4,,就是針對(duì)網(wǎng)絡(luò)數(shù)據(jù)包領(lǐng)域的高層編程語言。隨著人工智能的發(fā)展,,也出現(xiàn)了針對(duì)AI應(yīng)用的Python HLS,。通過使用特定領(lǐng)域的HLS,可以進(jìn)一步對(duì)工具進(jìn)行領(lǐng)域的針對(duì)性優(yōu)化,,也能大幅提升系統(tǒng)性能,、減少面積和功耗。

  結(jié)語

  業(yè)界普遍認(rèn)為,,GPU之所以在人工智能時(shí)代取得了非凡成功,,很大程度上得益于對(duì)軟件和算法工程師友好的編程語言和環(huán)境。與之相比,,F(xiàn)PGA雖然也在不斷擴(kuò)展自己的應(yīng)用范圍,,并在性能和功耗上相比GPU有著明顯優(yōu)勢(shì),其編程模型還是以硬件工程師進(jìn)行RTL開發(fā)為主,。

  老石認(rèn)為,,F(xiàn)PGA的高層次綜合是業(yè)界發(fā)展的必然趨勢(shì)。相信隨著HLS領(lǐng)域的難題不斷被攻破,,使用高層語言對(duì)FPGA進(jìn)行高效編程也必然會(huì)實(shí)現(xiàn),,而這也將最終成為FPGA更廣泛應(yīng)用的最后一塊拼圖。


本站內(nèi)容除特別聲明的原創(chuàng)文章之外,,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章,、圖片,、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者,。如涉及作品內(nèi)容,、版權(quán)和其它問題,請(qǐng)及時(shí)通過電子郵件或電話通知我們,,以便迅速采取適當(dāng)措施,,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118,;郵箱:[email protected],。