国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

FPGA加速系統(tǒng)開發(fā)工具設(shè)計:綜述與實踐?

2020-01-02 03:45
軟件學(xué)報 2020年10期
關(guān)鍵詞:框架定義工具

(上海交通大學(xué) 軟件學(xué)院,上海 200240)

隨著大數(shù)據(jù)分析和人工智能計算的大規(guī)模普及和應(yīng)用,數(shù)據(jù)中心的計算負(fù)載規(guī)模在不斷擴(kuò)大[1].在此背景下,將計算任務(wù)進(jìn)行分門別類,并根據(jù)不同任務(wù)的特點用專門設(shè)計的加速處理芯片取代通用處理器,從長遠(yuǎn)來看成為了一種可行的降低成本或提高服務(wù)質(zhì)量的方式.其中,為人工智能計算特化的通用圖形處理器(generalpurposed GPU)和應(yīng)用專用處理芯片(application-specific integrated circuit)TPU[2]已在該領(lǐng)域取得了顯著成就.但是,數(shù)據(jù)中心中除了日益龐大的人工智能應(yīng)用以外,其他配套的支持計算也在相應(yīng)地擴(kuò)大規(guī)模,這些方面包括數(shù)據(jù)庫處理、網(wǎng)絡(luò)通信、虛擬化支持等等.利用專用芯片來加速這些基礎(chǔ)計算同樣能夠獲得可觀的收益.使用硬件加速的理想情況是能夠直接部署經(jīng)過專門優(yōu)化的ASIC,但是ASIC 的設(shè)計、生產(chǎn)和部署都需要較長的周期和較高的成本,在需要快速迭代的生產(chǎn)環(huán)境中或者在需要控制風(fēng)險的情況下,FPGA 作為一種可重新配置的硬件平臺成為了一種首選的過渡或者替代方案[3,4].

FPGA 除了能夠在生產(chǎn)環(huán)境中作為專用芯片的一種過渡和替代,其優(yōu)秀的可定制性和可重配特點使得它在異構(gòu)計算的學(xué)術(shù)研究中也發(fā)揮著重要作用.與ASIC 相比,基于FPGA 的研究主要有兩點優(yōu)勢:(1)區(qū)別于ASIC的靜態(tài)功能,FPGA 可重配特點引入的功能動態(tài)變化在系統(tǒng)設(shè)計時可創(chuàng)造更多可能;(2)區(qū)別于ASIC 的流片流程,FPGA 的快速燒寫在降低成本的同時也使應(yīng)用可以快速地在硬件上驗證并測試端到端的性能.這些特性近年來吸引了許多學(xué)者投入到FPGA 的應(yīng)用研究中,這些研究從最初的加速器設(shè)計慢慢擴(kuò)展到了與FPGA 相關(guān)的操作系統(tǒng)、體系結(jié)構(gòu)等領(lǐng)域[5-7].

然而,面向FPGA 硬件平臺的硬件設(shè)計和系統(tǒng)集成方法相較于軟件工程和程序語言領(lǐng)域的發(fā)展仍然處于十分初級的階段.目前主流的FPGA 加速系統(tǒng)的開發(fā)可以大致分為3 個部分:硬件加速器設(shè)計、軟件驅(qū)動設(shè)計和軟件應(yīng)用集成.硬件設(shè)計雖然經(jīng)過了多年的發(fā)展,已經(jīng)形成了成熟的工具鏈,但是這些初衷是輔助專業(yè)硬件工程師的開發(fā)工具和語言,只提供十分底層的硬件抽象,例如寄存器和邏輯運算.由于缺少指令集抽象,軟件工程師無法直接將算法映射成硬件邏輯,對于希望快速驗證硬件加速有效性的云應(yīng)用開發(fā)者和實驗室學(xué)者等非專業(yè)的硬件工程師來說,硬件設(shè)計無疑成為了利用FPGA 加速上門檻最高的一關(guān).而第2 個難點是需要實現(xiàn)驅(qū)動軟件來構(gòu)建底層軟件和硬件的數(shù)據(jù)通信機制并提供接口給上層應(yīng)用.這一部分工作即使利用現(xiàn)成驅(qū)動(例如PCIe DMA 驅(qū)動),也需要對底層通信協(xié)議有充足的了解,并從軟硬件兩方面進(jìn)行適配:軟件需要對數(shù)據(jù)進(jìn)行序列化和反序列化,硬件則需要構(gòu)建加速器的外圍數(shù)據(jù)通信模塊.相比于硬件加速核心的設(shè)計和驗證,這一步的工程量并不遜色甚至猶有過之.克服前兩點之后,需要經(jīng)過最后一步的軟硬件集成,開發(fā)者才能真正地對應(yīng)用進(jìn)行加速.此時,可能由于前期軟硬件工程師協(xié)同的溝通失誤或者考慮欠缺,應(yīng)用的性能受限于不理想的硬件抽象和接口,如果需要改進(jìn),則往往需要重新進(jìn)行各部分的設(shè)計.

FPGA 的高度可定制化給其帶來靈活性的同時也引入了功能是由硬件來實現(xiàn)還是由軟件來實現(xiàn)的權(quán)衡,如果開發(fā)框架不能提供清晰的軟硬件交互界面和設(shè)計空間定義,加速系統(tǒng)容易陷入軟硬件功能過于耦合,調(diào)試、迭代、維護(hù)十分困難的境地.為了提高FPGA 加速系統(tǒng)的開發(fā)效率,研究者們在一脈相承的傳統(tǒng)硬件開發(fā)工具的基礎(chǔ)上提出了許多針對FPGA 特點的優(yōu)化框架以應(yīng)對不同的需求.從傳統(tǒng)的硬件描述語言開始,這些新的框架和工具主要走上了兩條道路:高層次綜合(high-level synthesis)和高級語言實現(xiàn)的硬件描述語言(high-level hardware description language).近年來,國內(nèi)外FPGA 應(yīng)用的研究已頗具規(guī)模[8,9],但是與國外傳承有序的EDA(electronic design automation)研究歷史相比,國內(nèi)關(guān)于硬件開發(fā)工具與框架的研究資料依然十分缺乏,本文旨在對FPGA 相關(guān)開發(fā)工具的發(fā)展?fàn)顩r作一定的總結(jié)和歸納,以提供從事本領(lǐng)域工作的國內(nèi)學(xué)者參考.接下來,本文第1 節(jié)將綜述近年來硬件及硬件加速系統(tǒng)開發(fā)工具相關(guān)的典型工作.第2 節(jié)介紹我們自己針對FPGA 加速系統(tǒng)開發(fā)框架的設(shè)計實踐.第3 節(jié)總結(jié)全文并提出未來展望.

1 相關(guān)工作綜述

本節(jié)介紹一般硬件以及硬件加速系統(tǒng)開發(fā)工具和框架的相關(guān)工作,并引入硬件加速系統(tǒng)設(shè)計的基本概念和背景知識.

1.1 硬件描述語言

廣義來說,后文將提到的高層次綜合工具使用的描述語言和高級硬件描述語言都可以歸納進(jìn)硬件描述語言,本節(jié)討論狹義的硬件描述語言,即以VHDL 和Verilog 為代表的經(jīng)典硬件描述語言.

硬件描述語言的出現(xiàn)可以追溯到20 世紀(jì)60 年代,在1971 年,Bell 和Newell 在他們的教材中提出了影響至今的硬件設(shè)計抽象級別——寄存器傳輸級(register-transfer level)[10].基于該抽象,DEC(digital equipment corporation)首先設(shè)計了ISP 語言以及其擴(kuò)展版本來描述PDP-8 和PDP-16 機器中的基于寄存器傳輸模塊(register-tansfer module)的硬件行為[11].1979 年左右,Kaiserslautern 大學(xué)的團(tuán)隊開發(fā)出KARL,以支持結(jié)構(gòu)化硬件設(shè)計和日益興起的超大規(guī)模集成電路(VLSI)設(shè)計[12].同一時間,為了滿足同樣興起的可編程邏輯設(shè)備(PLD)的商業(yè)化需求,DATA I/O 公司也開始設(shè)計面向可編程設(shè)備的ABEL[13].

隨著超大規(guī)模集成設(shè)計的逐漸流行和現(xiàn)場可編程設(shè)備的發(fā)明,傳統(tǒng)的基于電路圖繪制(schematic capture)的硬件設(shè)計方法受限于適合處理的晶體管數(shù)量(通常是數(shù)百個)已經(jīng)越來越難以滿足設(shè)計效率的需求,在20 世紀(jì)80 年代,Verilog[14]和VHDL[15]相繼出現(xiàn)并逐步發(fā)展成熟.VHDL 和Verilog 的設(shè)計初衷都是希望用開發(fā)者熟悉的編程語言來描述設(shè)計好的電路圖以便于工程管理,其中,VHDL 借鑒了大量Ada 語言的理念和語法而Verilog 借鑒了C 語言的編程風(fēng)格.相比于其他硬件描述語言,類Ada 和類C 的語言風(fēng)格更受開發(fā)者青睞,隨著VHDL 和Verilog 的標(biāo)準(zhǔn)化,兩者逐漸取代了其他硬件描述語言,并統(tǒng)治硬件設(shè)計領(lǐng)域直到今日.初期版本的VHDL 與Verilog 的功能十分類似,相比于Verilog,VHDL 有更高的抽象級別和語言復(fù)雜度.但是進(jìn)入21 世紀(jì)以后,經(jīng)過Verilog 到System Verilog 的演變,以及多次迭代(最新標(biāo)準(zhǔn)是IEEE Standard 2017[16]),Verilog 引入了許多提高生產(chǎn)效率的語言特性,并提高了對大規(guī)模系統(tǒng)的描述能力.在此基礎(chǔ)上,又由于C 語言使用的廣泛性,Verilog相比于VHDL 得到了更大規(guī)模的應(yīng)用.

基于寄存器傳輸級抽象的硬件描述語言在邏輯綜合技術(shù)引入之前并不足以完成完整的硬件設(shè)計,VHDL 和Verilog 初期都只是用于描述和歸檔門電路級的電路圖設(shè)計.類比高級軟件編程語言,邏輯綜合器可以被理解為編譯器,即將寄存器傳輸級的設(shè)計翻譯成門電路級的網(wǎng)表設(shè)計.但是,與高級語言的編譯器不同,由于沒有統(tǒng)一的指令集抽象和確定的硬件布局,描述門電路連接方式的網(wǎng)表還不足以在硬件上“運行”.以一般FPGA 開發(fā)為例,我們還需要經(jīng)過“布局布線(place and route)”步驟,將網(wǎng)表與特定硬件平臺上的物理資源對應(yīng)起來,并通過下載配置才能讓FPGA 實現(xiàn)我們想要的功能(放置與路由由于涉及到FPGA 硬件的技術(shù)細(xì)節(jié),目前這一步一般都是由FPGA 生產(chǎn)商提供的閉源軟件來實現(xiàn),因此本文討論的開發(fā)框架將不包括這部分內(nèi)容).系統(tǒng)設(shè)計的經(jīng)驗告訴我們,提高抽象層次的代價往往是性能的損失,而這一點在硬件設(shè)計上也沒有例外.基于硬件描述語言和邏輯綜合器生成的設(shè)計相比于有經(jīng)驗的工程師使用傳統(tǒng)方法完成設(shè)計,幾乎總是需要更大的硬件面積和提供更低的性能.然而,隨著硬件集成度的提高,硬件本身性能的發(fā)展和綜合算法的改進(jìn),人們在設(shè)計質(zhì)量和開發(fā)效率的權(quán)衡中,最終接受了高開發(fā)效率的工具,這一點與軟件編程語言的發(fā)展是類似的.

硬件描述語言經(jīng)過30 多年的使用,盡管自身依然在迭代和發(fā)展,但面對新的需求和挑戰(zhàn),它們遇到了與自己前身類似的問題:語言本身的局限性限制了開發(fā)效率的進(jìn)步.近年來,FPGA 應(yīng)用研究的興起吸引了大量非專業(yè)硬件背景的工程師投入到FPGA 的開發(fā)中,不同于C、Ada 等底層語言,他們熟悉的工作語言經(jīng)常是C++、Java、Scala 等面向?qū)ο笳Z言或者是Python、JavaScript 等腳本語言.對于新的使用群體來說,硬件描述語言曾經(jīng)語言友好的優(yōu)勢不復(fù)存在,而另一方面,區(qū)別于硬件工程師是從門電路級抽象提升到寄存器傳輸級抽象,軟件工程師卻是從算法級抽象降低到有明顯語義鴻溝的寄存器器傳輸級抽象,抽象級別的優(yōu)勢也不復(fù)存在.而對于傳統(tǒng)的硬件工程師來說,現(xiàn)代軟件編程框架中體現(xiàn)的軟件工程理念同樣吸引著他們,經(jīng)典硬件描述語言中缺乏面向?qū)ο缶幊?、參?shù)化類型、類型安全等特性,這在項目規(guī)模不斷擴(kuò)大的今天,已經(jīng)開始給項目管理、維護(hù)帶來巨大的困擾.為了適應(yīng)新的需求,在經(jīng)典硬件描述語言的基礎(chǔ)上,新的硬件開發(fā)工具或框架基本走上了兩條道路:高層次綜合[17-19]和高級硬件描述語言[20].并形成了如圖1 所示的層次,接下來,我們將依次介紹高層次綜合和高級硬件描述語言.

Fig.1 The hierarchy of development tools圖1 開發(fā)工具層次

1.2 高層次綜合

事實上,在基于寄存器傳輸級抽象的硬件描述語言流行之前,學(xué)術(shù)界就已經(jīng)開始將算法級或行為級描述映射成硬件設(shè)計的研究.這些早期的工作大約從20 世紀(jì)70 年代一直持續(xù)到90 年代初,在這段時間涌現(xiàn)了許多論文和學(xué)術(shù)著作.其中影響力較大的是Paulin 與Knight[21]、Camposano 與Wolf[22]、Gajski[23]以及De Micheli[24]等學(xué)者的工作.這些工作探索了高層次綜合的基本原理和概念,并發(fā)展出了高層次綜合工具的基本特征:專用輸入語言加編譯綜合器.盡管對后世影響深遠(yuǎn),但這些工作的商業(yè)化嘗試都失敗了.在當(dāng)時的背景下,硬件工程師才剛開始接受寄存器傳輸級的設(shè)計抽象,硬件描述語言都還沒有普及,高層次綜合技術(shù)的引入過于超前,具體來說該技術(shù)當(dāng)時存在以下兩個問題.

(1)較高的學(xué)習(xí)成本和較低的硬件設(shè)計質(zhì)量.高層次綜合工具一般使用特別定義的行為或算法描述語言作為輸入語言,這些語言與硬件描述語言相比更加專用化且沒有通用的規(guī)范,基本依賴于廠商的支持.同時在可以預(yù)計的硬件設(shè)計質(zhì)量下降的前提下,開發(fā)人員沒有學(xué)習(xí)的欲望;

(2)適用的專用領(lǐng)域沒有廣泛的市場.當(dāng)時的許多高層次綜合工具是為數(shù)字信號處理器(DSP)的開發(fā)設(shè)計的,這類設(shè)計的特點是專注數(shù)據(jù)流和結(jié)構(gòu)化的硬件,這在大部分開發(fā)人員都在進(jìn)行非結(jié)構(gòu)化隨機邏輯集成這類側(cè)重控制流設(shè)計的背景下是不合時宜的.

雖然早期學(xué)術(shù)成果商業(yè)化的嘗試失敗了,但是高層次綜合提升開發(fā)效率的前景以及硬件描述語言蓬勃發(fā)展的現(xiàn)狀依然吸引了Synopsys、Cadence 和Mentor Graphics 這些大型的電子設(shè)計自動化(EDA)公司投入到了高層次綜合工具的研發(fā)中,典型的代表包括Synopsys 公司的Behavioral Compiler[25]、Cadence 公司的Visual Architect 和Mentor Graphics 公司的Monet Tool[26].在20 世紀(jì)90 年代中后期,這些產(chǎn)品一度吸引了廣泛的關(guān)注.這些工具的特點是使用單獨設(shè)計的行為級描述語言作為輸入語言,并直接生成門電路級的設(shè)計.不過,這次嘗試依然未能取得期待中的成功,并且在之前的基礎(chǔ)上又暴露出了有關(guān)產(chǎn)品定位的新問題.

(1)錯誤的目標(biāo)群體,并以經(jīng)典硬件描述語言為競爭對手.這時期的商業(yè)產(chǎn)品以正在接受寄存器傳輸級抽象、開始使用VHDL 和Verilog 等硬件描述語言的硬件設(shè)計師為目標(biāo)用戶,提出了基于算法或行為級抽象的新語言和相應(yīng)的綜合器.這些工具直接從高抽象級別的描述綜合生成門電路級的設(shè)計,與硬件描述語言并不兼容且互相替代,這迫使工程師們必須從中做出選擇.在已經(jīng)逐步接受硬件描述語言的背景下,當(dāng)時的硬件工程師們關(guān)心的問題是,新的工具能否用相同的工作量設(shè)計出更高質(zhì)量的硬件、是否可在硬件設(shè)計質(zhì)量不變的情況下減少工作量,以及學(xué)習(xí)曲線是否陡峭.但是,新的工具不僅學(xué)習(xí)曲線陡峭,而且?guī)缀醪荒芴岣哂布O(shè)計質(zhì)量或者是降低工作量;

(2)沒有清晰地界定基于控制流的設(shè)計和基于數(shù)據(jù)流的設(shè)計,導(dǎo)致未能發(fā)揮出自身優(yōu)勢.控制流設(shè)計大多包含隨機邏輯和跳轉(zhuǎn)結(jié)構(gòu),而數(shù)據(jù)流的設(shè)計則大多為結(jié)構(gòu)化硬件.基于寄存器傳輸級的綜合器可同時處理好控制流和數(shù)據(jù)流的設(shè)計.高層次綜合由于具有更高的抽象級別,很難生成性能理想的復(fù)雜控制流硬件,但是對于更適合抽象和采取針對優(yōu)化的數(shù)據(jù)流設(shè)計,高層次綜合往往能夠生成性能更加良好的硬件.但是,這時的高層次綜合工具未能專注于自身的特長,反而試圖在一個框架上來完成各種類型的硬件設(shè)計,以致失去了自身的競爭優(yōu)勢.

時間進(jìn)入21 世紀(jì),由于超大規(guī)模集成電路的持續(xù)發(fā)展,Verilog 和VHDL 的開發(fā)效率處于瓶頸狀態(tài),同時,由于異構(gòu)計算和硬件加速的興起,大量軟件工程師和系統(tǒng)架構(gòu)師開始嘗試協(xié)同設(shè)計.在軟硬件工程師對硬件開發(fā)效率應(yīng)加以提高的共同需求下,之前高層次綜合推廣的失利未能阻止工業(yè)界和學(xué)術(shù)界的新一輪嘗試.與之前的環(huán)境相比,在新世紀(jì)高層次綜合的應(yīng)用有了以下優(yōu)勢.

(1)大數(shù)據(jù)處理相關(guān)應(yīng)用的規(guī)模不斷擴(kuò)大,針對特定類型應(yīng)用的硬件設(shè)計工具擁有了可觀市場,尤其是有關(guān)人工智能和數(shù)據(jù)庫的應(yīng)用.這些應(yīng)用在規(guī)模大的同時更側(cè)重數(shù)據(jù)流的處理,讓高層次綜合有了用武之地.

(2)經(jīng)典硬件描述語言開發(fā)效率已經(jīng)達(dá)到瓶頸,開發(fā)人員有了對更高層次抽象的明確需求.

在這一階段,不斷有新的高層次綜合工具取得學(xué)術(shù)上和工業(yè)上的成功,以至于到了2019 年依然不斷有新的工具被提出,其中影響較大的包括Bluespec[27]、LegUp[28,29]、Vivado HLS[30]和Intel HLS Compiler[31].新的工作吸取了之前工作的教訓(xùn),大多做出了如下改進(jìn).

(1)主要使用或支持C、C++等廣泛使用的通用編程語言作為輸入語言,這使得工具具有了更廣泛的受眾并降低了學(xué)習(xí)成本;

(2)以Verilog 或(和)VHDL 為輸出結(jié)果.這使得新的工具可以兼容老的設(shè)計,并在生成的硬件性能不夠理想時提供了手動優(yōu)化的可能,進(jìn)而豐富了工具的適用場景;

(3)針對特定類型設(shè)計的綜合算法進(jìn)行專門優(yōu)化.以犧牲通用性換取性能,這強化了高層次綜合的優(yōu)勢.

到目前為止,我們討論的工作都是針對單獨的硬件設(shè)計而言的,對于傳統(tǒng)的硬件來說,從硬件設(shè)計到硬件應(yīng)用中間有較長的時間跨度,也會由各自的團(tuán)隊來完成.但是,隨著FPGA 的興起,由于FPGA 可以通過快速的下載配置直接形成對應(yīng)的硬件,設(shè)計和部署的分工變得模糊起來,人們需要集成的框架來快速構(gòu)建加速應(yīng)用.而要構(gòu)建一個完整的加速系統(tǒng),如本文開始部分中提到的,我們還需要硬件驅(qū)動和軟件集成.將驅(qū)動和集成功能包含在一個框架下,在我們不知道用戶會設(shè)計出具有什么功能的硬件和使用什么樣的接口進(jìn)行數(shù)據(jù)傳輸?shù)那闆r下是十分困難的.如果設(shè)計十分底層的接口來提高適用性和靈活性,則依然會保留較多的工作量給開發(fā)者;而如果規(guī)定接口協(xié)議和做各種假設(shè)來提高抽象層次,則會對用戶的硬件設(shè)計帶來各種限制.隨著一些高層次綜合工具開始有針對性地處理特定應(yīng)用,以及OpenCL 等計算框架的興起,工具開發(fā)人員不再面對硬件功能未知的情況,而完整的開發(fā)框架設(shè)計也變得可行.

Xilinx 和Intel 分別推出了SDAccel[32]和Intel SDK for OpenCL[33],用于將OpenCL 定義的加速器部署到FPGA 上,并包含基于PCIe 的主機與FPGA 數(shù)據(jù)傳輸機制的集成.對于特定領(lǐng)域的應(yīng)用,DnnWeaver[34]和Inter OpenVINO[35]可以根據(jù)的Caffe,TensorFlow 等機器學(xué)習(xí)框架定義的模型自動生成硬件并部署到主機+FPGA 的加速平臺上,而p4FPGA[36]框架可以將用p4 語言定義的數(shù)據(jù)面板部署成FPGA 包處理器.這些框架相比于通用的高層次綜合工具更受系統(tǒng)架構(gòu)師和軟件工程師的青睞,它們能夠顯著降低開發(fā)門檻,提高開發(fā)效率,方便系統(tǒng)的早期驗證.雖然這些框架生成的硬件設(shè)計與使用硬件描述語言完成的設(shè)計相比依然存在不小的性能差距,但是,從硬件描述語言的發(fā)展歷史來看,對開發(fā)效率的需求將推動綜合算法的改進(jìn).同時,由于硬件本身性能的提高,具有更高生產(chǎn)效率的工具將逐漸取代生產(chǎn)效率低的工具.

對依山而建、受山坡地表徑流危害的城鎮(zhèn)、集中居民點、重要設(shè)施等,需修建截洪溝、排洪溝渠,將坡面地表徑流引入溝道排泄。對溝道內(nèi)淤積的泥沙、亂石、雜物和人為卡口進(jìn)行清理疏挖,提高溝道泄洪能力。重點在城鎮(zhèn)河段清除河道行洪障礙,確保溝道泄洪暢通。疏浚、擴(kuò)挖的淤積物、棄渣等應(yīng)堆放在距溝道有一定距離的低洼處,嚴(yán)禁人為設(shè)障。截洪溝、排洪渠應(yīng)盡量利用坡面原有溝埂、天然溝道,其斷面大小應(yīng)滿足排洪量的要求。在經(jīng)過重要位置或彎道凹岸、跌水等沖刷強烈地帶,需考慮必要的護(hù)砌措施。

1.3 高級硬件描述語言

高層次綜合工具在側(cè)重數(shù)據(jù)流處理的加速系統(tǒng)中得到了良好應(yīng)用,但對于控制流復(fù)雜的硬件設(shè)計,比如非結(jié)構(gòu)化的硬件設(shè)計和基于指令集的處理器設(shè)計,高層次綜合工具往往需要與其他寄存器傳輸級設(shè)計工具相互配合.因此,在對硬件性能要求較高、需要在微架構(gòu)上進(jìn)行創(chuàng)新的設(shè)計情景下,寄存器傳輸級設(shè)計工具依然在發(fā)揮著重要作用.將經(jīng)典硬件描述語言使用新的高級編程語言重新包裝以獲得高級語言在編程效率、維護(hù)管理上的優(yōu)勢同樣吸引了大量研究人員.本文將提供寄存器傳輸級抽象設(shè)計接口,并使用高級編程語言作為輸入語言的硬件描述語言歸納為高級硬件描述語言.這些高級硬件描述語言通常會利用高級語言中的面向?qū)ο?、語法糖等機制來擴(kuò)展自身的數(shù)據(jù)結(jié)構(gòu)并提供更便利的語法接口,或者以庫的形式來模板化特定類型硬件的設(shè)計.在一定程度上,這些方法提供了更高層次的設(shè)計抽象,但與高層次綜合不同,這種抽象更多的是語言機制上的抽象,它沒有隱藏硬件數(shù)據(jù)傳輸?shù)牡讓訖C制,也就是說,沒有溝通軟硬件描述的語意鴻溝.因此,我們認(rèn)為目前大部分高級硬件描述語言依然處在寄存器傳輸級抽象.表1 根據(jù)輸入語言的特征列舉了2000 年以來典型的高級硬件描述語言.

函數(shù)式編程風(fēng)格一度被認(rèn)為是最適合進(jìn)行硬件描述的編程風(fēng)格,函數(shù)式語言作為輸入語言的開發(fā)工具幾乎涵蓋了硬件設(shè)計的各個抽象層次,其中一部分工作可以被歸納為高層次綜合工具,例如Bluespec,還有一部分則可以被歸納為高級硬件描述語言,例如表1.函數(shù)式硬件定義的優(yōu)勢十分突出:簡明的語義結(jié)構(gòu)便于形式化驗證和對遞歸的良好支持.這些優(yōu)點使得函數(shù)式硬件描述語言在定義大規(guī)模組合邏輯電路時十分簡練而易于測試驗證.但在定義時序電路時,函數(shù)式定義卻不夠直觀,以至于各種工具都采取了不同的定義方式,而未能達(dá)成一致的抽象.由于缺乏標(biāo)準(zhǔn)、學(xué)習(xí)成本過高、函數(shù)式編程在應(yīng)用開發(fā)上使用較少等因素,在當(dāng)前背景下,函數(shù)式硬件描述語言大多成為了學(xué)術(shù)語言,較少在實際生產(chǎn)中得到應(yīng)用.

Table 1 High-level HDLs classified by characteristics of input languages表1 根據(jù)輸入語言特征分類的高級硬件描述語言

另一方面,基于Java、Python、Scala 等支持面向?qū)ο缶幊毯兔钍秸Z言風(fēng)格的高級語言構(gòu)建的硬件描述語言,由于本身語言更優(yōu)秀的生態(tài)和更廣泛的用戶基礎(chǔ),近年來我們能觀察到它們持續(xù)的更新和更深入的發(fā)展.尤其是內(nèi)嵌于高級語言的硬件描述語言,因為繼承了原本語言的語法,有更低的學(xué)習(xí)成本,吸引了更多開發(fā)者的使用.其中,基于Scala 語言的Chisel[42],已經(jīng)形成了硬件定義與測試一體的集成框架,并通過對RISC-V 設(shè)計的特化支持,擴(kuò)展了自身的硬件設(shè)計生態(tài).

高級硬件描述語言總體來看目前還處于學(xué)術(shù)研究階段.一方面是因為這些語言還沒有形成充實的生態(tài)基礎(chǔ),無法吸引硬件工程師付出學(xué)習(xí)成本進(jìn)行轉(zhuǎn)型;另一方面則是因為這些語言并不專注于通過提供特定的抽象和完整的集成框架來降低開發(fā)門檻,因而對軟件工程師也未能構(gòu)成足夠的吸引力.如圖2 所示,與高層次綜合工具正在向應(yīng)用層特化發(fā)展,逐步讓底層硬件細(xì)節(jié)透明化不同,高級硬件描述語言則在確定了寄存器傳輸級抽象的基礎(chǔ)上,在擴(kuò)充自身的硬件實現(xiàn)生態(tài),以形成類似于C++、Java 等語言的豐富庫支持.本文接下來將介紹我們在高級硬件描述語言方向上的實踐工作,其中包括高級硬件描述語言ScalaHDL 以及基于ScalaHDL 的系統(tǒng)集成開發(fā)框架VeriScala[47].

Fig.2 The prospectives of high-level HDL and HLS圖2 高層級硬件描述語言和高層次綜合的發(fā)展方向

2 基于高級硬件描述語言的FPGA 加速系統(tǒng)開發(fā)框架設(shè)計

在硬件加速的學(xué)術(shù)研究中,我們經(jīng)常需要進(jìn)行微架構(gòu)的創(chuàng)新,常常遇到Verilog 或VHDL 學(xué)習(xí)門檻高、開發(fā)周期長、軟硬件集成麻煩的困難.Xilinx 推出了Vitis 工具,通過將高層次綜合和細(xì)粒度的RTL 優(yōu)化集成在一個框架下來滿足這樣的需求.但是,Vitis 雖然提供了統(tǒng)一的框架,開發(fā)者依然需要使用多種語言來進(jìn)行綜合開發(fā),這顯然增加了工程維護(hù)和管理的難度.在高層次硬件描述語言的基礎(chǔ)上構(gòu)建集成開發(fā)框架可以很好地解決這個問題.本節(jié)將介紹我們實現(xiàn)的ScalaHDL 硬件描述語言,以及基于ScalaHDL 的開發(fā)框架VeriScala.

2.1 設(shè)計目標(biāo)

基于高級硬件描述語言的加速系統(tǒng)開發(fā)框架設(shè)計目標(biāo)主要有兩方面:充分利用高級語言在開發(fā)效率、維護(hù)管理上的優(yōu)勢并提供簡便的集成策略.具體來說有以下幾點.

(1)支持豐富的代碼重用機制.需要提供包括繼承、參數(shù)化類型在內(nèi)的特性來提高代碼重用率和可維護(hù)性.

(2)易用的語言抽象.一方面需要通過支持面向?qū)ο缶幊虂磉M(jìn)行模塊化設(shè)計,另一方面還需要將RTL 抽象在高級語言中進(jìn)行映射以幫助軟件工程師的理解.

(3)支持庫的設(shè)計和使用.需要通過支持硬件設(shè)計的引用方法,讓現(xiàn)有設(shè)計逐漸形成豐富的生態(tài),進(jìn)一步提高生產(chǎn)效率.

(5)支持快速的系統(tǒng)集成和部署.需要在框架內(nèi)處理好底層硬件數(shù)據(jù)傳輸機制,并提供簡潔的軟件接口.

理想的設(shè)計流程如圖3 所示,軟硬件設(shè)計在同一種高級語言的上下文中,其中,軟件計算需求可以通過函數(shù)接口來定義,而硬件設(shè)計則可以使用內(nèi)嵌的高級硬件描述語言來定義.框架本身將包含通信相關(guān)經(jīng)過適配的軟硬件庫,基于基礎(chǔ)通信驅(qū)動可以實現(xiàn)應(yīng)用的后端,而基于硬件通信子系統(tǒng)可以實現(xiàn)加速硬件的通信外圍.接下來,完成的硬件設(shè)計可以直接輸入給軟件模擬器進(jìn)行硬件功能測試,而軟件模擬器又可以作為模擬硬件與驅(qū)動對接,完成整個加速系統(tǒng)的功能測試.最后用驗證過的加速硬件替換模擬硬件,從而完成加速系統(tǒng)的集成.

面向上文的設(shè)計目標(biāo)和開發(fā)流程,我們設(shè)計實現(xiàn)了基于ScalaHDL 語言的VeriScala 框架.后面將在第2.2 節(jié)介紹ScalaHDL 語言的設(shè)計,在第2.3 節(jié)介紹VeriScala 中軟硬件協(xié)同的集成支持,在第2.4 節(jié)展示VeriScala 的代碼示例和實驗結(jié)果.

Fig.3 An ideal workflow圖3 理想開發(fā)流程

2.2 輸入語言與硬件設(shè)計抽象

ScalaHDL 是一種內(nèi)嵌于Scala 語言的硬件描述語言,它被實現(xiàn)成了Scala 庫而不需要修改Scala 編譯器.選擇Scala 作為框架輸入語言是因為:(1)Scala 是一種多范式的編程語言,既可以支持面向?qū)ο缶幊?也能良好地支持函數(shù)式編程,提供了更多設(shè)計的可能性;(2)Scala 基于Java 虛擬機運行,可以受益于豐富的Java 生態(tài).如圖4展示了ScalaHDL 的整體框架,主要分成硬件定義和測試兩個模塊.ScalaHDL 使用高擴(kuò)展性、可插拔的模塊化設(shè)計,核心功能實現(xiàn)在HDLBaseClass 和SimulationSuite 兩個類中(圖中紅色模塊),分別支持硬件的定義和測試.而擴(kuò)展的語言特性,例如新的硬件描述語句語義或者更高的設(shè)計抽象則可以實現(xiàn)在Scala 的Trait 定義之中(如圖4 中淺綠模塊所示),只需在硬件定義時指定需要的Trait 即可使用對應(yīng)的特性.在ScalaHDL 中我們實現(xiàn)了BasicOps 以支持基本的硬件定義功能,以及通過Translator 來完成ScalaHDL 到Verilog 的翻譯.

Fig.4 The architecture of ScalaHDL圖4 ScalaHDL 架構(gòu)

ScalaHDL 使用Scala 語言中原生的Class 作為硬件模塊定義的容器,通過繼承HDLBaseClass 并引用BasicOps 特性,開發(fā)者可以在原生的Scala 類中使用BasicOps 中定義的類型、語句和結(jié)構(gòu)來描述硬件設(shè)計.ScalaHDL 的設(shè)計應(yīng)用了Lightweight Modular Staging[48]的思想,即ScalaHDL 的翻譯通過Scala 的反射機制,依據(jù)運行時掃描類定義中實體得到的類型信息,來生成對應(yīng)的Verilog 描述.在一個硬件定義類中,會包含兩部分代碼:硬件定義和原生Scala 語句.翻譯時,包含ScalaHDL 特殊硬件類型的語句會被識別為硬件描述,而原生的Scala 代碼則會被執(zhí)行并發(fā)揮類似于編譯指令的功能.這樣的方式使得我們可以很方便地利用類型系統(tǒng),將RTL抽象在Scala 中進(jìn)行映射.具體來說,硬件定義實體的類型可以為模塊、語句塊、語句和值,其中語句塊包括同步語句塊和異步語句塊.

SimulationSuite 與SimulationSchedule 相結(jié)合實現(xiàn)了軟件模擬功能.由于我們在硬件類型實現(xiàn)中包含了不同類型在模擬時的行為,因此可以通過事件接口直接驅(qū)動硬件定義類實例的運行來實現(xiàn)功能模擬,這極大地簡化了軟件模擬器的實現(xiàn).通過與實現(xiàn)好的基礎(chǔ)通信驅(qū)動進(jìn)行對接,測試平臺也可以針對真實硬件進(jìn)行測試.

2.3 底層數(shù)據(jù)傳輸與集成方法

要提供簡便的軟硬件集成支持,基本思路是通過抽象和包裝將繁瑣的底層數(shù)據(jù)傳輸細(xì)節(jié)隱藏起來.在Verilog 中我們通過用Scala 實現(xiàn)的基礎(chǔ)通信驅(qū)動和根據(jù)用戶模塊定義自動生成的硬件數(shù)據(jù)接口層來完成軟硬件的對接和傳輸細(xì)節(jié)的隱藏.圖5 展示了VeriScala 框架中的運行時系統(tǒng).在軟件方面,Scala 實現(xiàn)的基礎(chǔ)通信驅(qū)動包裝內(nèi)核中的PCIe DMA 驅(qū)動,將上層Scala 定義的數(shù)據(jù)結(jié)構(gòu)序列化后傳給內(nèi)核模塊,并通過相應(yīng)的接口控制PCIe 通道的負(fù)載.應(yīng)用可以在基礎(chǔ)通信驅(qū)動的基礎(chǔ)上開發(fā)特定應(yīng)用的數(shù)據(jù)傳輸后端來實現(xiàn)類似函數(shù)調(diào)用語義的硬件調(diào)用,也可以直接使用基礎(chǔ)驅(qū)動來進(jìn)行數(shù)據(jù)傳輸.在硬件方面,我們設(shè)計了通用的接口層實現(xiàn)庫來處理底層傳輸協(xié)議握手和數(shù)據(jù)緩存.通過用戶頂層設(shè)計的接口定義,ScalaHDL 的翻譯器可以在生成硬件設(shè)計時自動識別接口信號并進(jìn)行相關(guān)的適配.同時在調(diào)試時,用戶可以指定需要監(jiān)視的信號,讓翻譯器額外生成調(diào)試服務(wù)硬件,通過與軟件驅(qū)動配合來實現(xiàn)類似于GDB(GNU debugger)風(fēng)格的硬件調(diào)試工具.

Fig.5 The runtime system圖5 運行時系統(tǒng)

2.4 示例與實驗結(jié)果

基于之前兩節(jié)的闡述,VeriScala 框架中形成了如圖6 所示的代碼流程.圖6 中以簡單的加法器定義為例,在文件Adder.scala 中首先定義模塊的容器類Adder 及其構(gòu)造接口,然后在類中定義模塊add,add 的邏輯由一個同步塊來描述,由于加法器的功能簡單,該同步塊中僅包含一個條件分支語句.事實上,在Scala 中,我們可以將運算函數(shù)作為參數(shù)來傳遞,如文件Arithmetic.scala 中定義的Arithmetic 類可以在實例時接受一個函數(shù)f作為參數(shù)來生成不同的算術(shù)模塊,這給硬件定義代碼的復(fù)用提供了方便.對于定義好的硬件,開發(fā)者可以利用VeriScala 中的軟件模擬器,通過編寫測試平臺和測試代碼,進(jìn)行軟件模擬,也可以通過生成的一系列Verilog 代碼,利用對應(yīng)廠商的工具鏈和VeriScala 的運行時框架進(jìn)行硬件測試并加速系統(tǒng)構(gòu)建.

為了評估ScalaHDL 的生成代碼質(zhì)量,我們針對不同復(fù)雜度的常用電路分別使用ScalaHDL 和Verilog 進(jìn)行定義,并根據(jù)Xilinx Vivado 軟件編譯自動生成代碼和手動編寫代碼的資源消耗報告,得到的統(tǒng)計結(jié)果見表2.

Fig.6 Code overview圖6 代碼流程總覽

Table 2 Resource consumptions of both variants (generated Verilog code and direct Verilog code)表2 生成的Verilog 代碼與手寫Verilog 代碼的資源消耗對比(生成Verilog 代碼/手寫Verilog 代碼)

我們發(fā)現(xiàn),ScalaHDL 和Verilog 在定義表中電路時完全消耗相同的硬件資源.由于ScalaHDL 與Verilog 處于相同的抽象層次,這樣的結(jié)果與預(yù)期相吻合.

為了評估VeriScala框架的實用性,我們基于VeriScala構(gòu)建了典型的數(shù)據(jù)庫過濾器加速系統(tǒng),該應(yīng)用使用Scala編寫,將Scala 管理的主機數(shù)據(jù)庫表項發(fā)送給FPGA 處理,再讀回過濾后的數(shù)據(jù).數(shù)據(jù)傳輸通過PCIE 3.0 接口完成.作為對比基準(zhǔn),我們同樣基于Scala 實現(xiàn)了使用CPU 完成的過濾程序.該測試使用的硬件配置見表3.

Table 3 Experiment environment表3 測試環(huán)境

通過統(tǒng)計軟件應(yīng)用過濾512MB 隨機數(shù)據(jù)的平均(1 000 次)任務(wù)運行時間,可以得到表4 展示的隨單次傳輸塊大小的增加而變化的加速比,受限于實驗使用的FPGA 資源總量和我們采用的過濾器設(shè)計,單次傳輸32KB 是我們能在250MHz 下運行的最優(yōu)值.從實驗結(jié)果來看,VeriScala 框架能夠有效地構(gòu)建CPU+FPGA 的加速系統(tǒng).

Table 4 Performance comparison between FPGA accelerated filter and CPU filter表4 FPGA 加速過濾器和CPU 過濾器的性能對比

3 總結(jié)和展望

2009 年,Martin 和Smith 在他們的綜述文章中指出,當(dāng)時不存在一種開發(fā)框架能夠同時支持所有的領(lǐng)域:控制流和數(shù)據(jù)流、ASIC 和FPGA、隨機邏輯和結(jié)構(gòu)化模塊,以及硬件、軟件和軟/硬協(xié)同各自的設(shè)計.他們指出,一個完整的能夠探索整個設(shè)計空間的集成框架是設(shè)計師們的終極理想,同時也是未來的發(fā)展方向[18].經(jīng)過10 年的發(fā)展,已經(jīng)形成了如圖1 所示的工具層次,高層次綜合和高級硬件描述語言似乎都有潛力達(dá)到這一終極目標(biāo),而又有各自的不足.其中,高層次綜合有難以處理復(fù)雜控制流和隨機邏輯的缺點,使其需要高級語言框架外的經(jīng)典硬件描述語言來輔助優(yōu)化;而高級硬件描述語言則依然處于較低的抽象層次,其開發(fā)效率瓶頸和軟硬件的語義鴻溝沒有完全消除.那么一個直接的想法是,這兩者能不能結(jié)合起來呢?

從圖2 中我們可以發(fā)現(xiàn),高級硬件描述語言和高層次綜合并不完全獨立.高級硬件描述語言將高級語言定義的寄存器傳輸級描述翻譯成Verilog 或者VHDL,而高層次綜合則是將高級語言定義的計算模型翻譯成Verilog 或者VHDL.如果我們在高級硬件描述語言的基礎(chǔ)上構(gòu)建高層次綜合工具,使得高層次綜合首先生成高級硬件描述語言定義的硬件,然后再生成對應(yīng)的經(jīng)典硬件描述語言代碼,或者我們將高層次綜合功能實現(xiàn)為高級硬件描述語言的一個特殊庫,是不是這樣就能享受兩者共同的優(yōu)勢呢?基于這個想法我們可以得到如圖7 所示的架構(gòu).

Fig.7 The future architecture圖7 未來架構(gòu)

在該框架中,我們可以在同一種高級語言的上下文中進(jìn)行硬件與軟件設(shè)計,一方面,硬件設(shè)計可以兼顧控制流與數(shù)據(jù)流,另一方面,軟硬件集成變成了簡單的庫調(diào)用.該架構(gòu)的實現(xiàn)在很大程度上可以復(fù)用現(xiàn)有的研究成果,以ScalaHDL 為例,要想支持某種特定硬件的高層次綜合,需要做的是,實現(xiàn)一個Scala Trait 來擴(kuò)展已有的硬件類型和硬件定義語句,以及定義這些新的抽象在翻譯時的機制.這一點對于許多基于Java、Scala 等可擴(kuò)展性強的語言實現(xiàn)的框架來說都會有類似的解決方案.

硬件及硬件加速系統(tǒng)開發(fā)工具的選擇取決于開發(fā)質(zhì)量與開發(fā)效率的平衡,當(dāng)硬件資源成為瓶頸時,硬件設(shè)計質(zhì)量就會發(fā)揮更大的影響,而當(dāng)硬件資源不是瓶頸時,開發(fā)效率則會發(fā)揮更大的影響.因此,在開發(fā)工具的發(fā)展歷史中,一種抽象層次不會被輕易淘汰,人們往往希望使用提供更大設(shè)計空間的開發(fā)工具來面對復(fù)雜的需求與限制.在當(dāng)前環(huán)境下,我們無法判斷是高層次綜合還是高級硬件描述語言會得到更廣泛的應(yīng)用,兩者可能會長期共存.因此,可以推測,類似于圖7 所示的綜合開發(fā)框架是未來合理的發(fā)展方向.

猜你喜歡
框架定義工具
框架
波比的工具
波比的工具
嚴(yán)昊:不定義終點 一直在路上
構(gòu)建新外商投資法下的外匯管理框架
準(zhǔn)備工具:步驟:
“巧用”工具
成功的定義
關(guān)于原點對稱的不規(guī)則Gabor框架的構(gòu)造
我國在WYO框架下面對的貿(mào)易保護(hù)現(xiàn)狀及應(yīng)對
武强县| 锡林浩特市| 申扎县| 康马县| 板桥市| 盈江县| 靖安县| 宾川县| 望都县| 金堂县| 景泰县| 洞头县| 资溪县| 涟水县| 厦门市| 太仓市| 松江区| 大庆市| 晋城| 吉林市| 运城市| 万山特区| 淅川县| 五大连池市| 新民市| 井研县| 岢岚县| 黄梅县| 通海县| 如东县| 靖州| 岳阳县| 岳普湖县| 白玉县| 河曲县| 万年县| 彭州市| 湘阴县| 祁东县| 江陵县| 莒南县|