高級綜合HLS(high-level-synthesis):軟件算法在FPGA上實現硬件加速的綜合工具
HLS(high-level-synthesis),高級綜合,將C/C++/SystemC編寫的軟體算法綜合成RTL編碼(VHDL/HDL),以實現軟件算法設計的硬件加速和硬件電路設計的抽象級設計&驗證。算法
HLS簡述
HLS(High-level-synthesis,高級綜合)工具是指將C、C++或SystemC編寫的C規範代碼轉換爲寄存器傳輸級(RTL)實現,並將其綜合到現場可編程門陣列(FPGA)上,以實現軟件的硬件加速效果。而FPGA提供了一種大規模並行架構,在性能、成本和功耗方面都優於傳統處理器。HLS的目標是經過讓硬件設計人員在更高的抽象級別上描述設計,從而更有效地構建和驗證硬件。編程
本文概述了HLS高級綜合的應用背景、基本要素以及優點。數組
HLS應用背景
1. FPGA應用領域的拓展架構
隨着當前各領域計算速度以及數據處理實時性的需求不斷增加,FPGA的應用領域也在不斷拓展。傳統通訊、工業控制等傳統領域已經逐漸趨於成熟,然而近年來隨着雲計算/邊緣計算、大數據、AI人工智能、物聯網等的發展,FPGA開始向新領域不斷擴展。函數
2. 算法藉助硬件加速的需求工具
隨着高速信息化的到來,諸如AI、自動駕駛、工業物聯網、大數據等領域的算法對數據處理的實時性和計算時延的要求愈來愈高。然而純軟件所能達到的運算效率彷佛已經碰到了瓶頸,這就使得愈來愈多的人開始藉助硬件加速算法運算效率,各類控制器&計算單元的異構計算(CPU+GPU/ASIC/FPGA)層出不窮,而FPGA的高度並行性、強控制能力和可重構性使得其地位逐漸突顯出來。oop
3. 算法實現硬件加速的困難
因爲硬件沒法直接識別C規範的語言,通常是寄存器傳輸級(RTL)如VHDL或HDL。而硬件描述語言和程序設計語言存在本質上的區別,前者更傾向電路器件思惟,後者更傾向函數功能思惟,每每須要軟件工程師來實現算法的功能以後交給硬件工程師實現硬件加速,這就致使算法實現硬件加速過程會有更多的時間和經濟開銷。
性能
因而就有了高級綜合(HLS)工具的誕生,雖然HLS的前景是但願軟件工程師可以直接實現硬件加速(搶硬件工程師飯碗),但因爲其轉換能力有待提高,直接轉換的代碼有時候會差強人意(主要是不如高級硬件工程師實現的效果好),使得HLS逐漸轉換成了硬件工程師加速FPGA開發的工具,省去了硬件工程師將軟件算法從頭轉換成硬件編碼的步驟,只須要在HLS自動生成的硬件編碼上進一步修改便可。學習
HLS基本要素
高級綜合(HLS)包括如下步驟:大數據
- 時序安排
若是時鐘週期更長或者目標設備更快的FPGA,則能夠在單個時鐘週期內完成更多操做,而且全部操做可能在一個時鐘週期內完成。相反,若是時鐘週期較短或目標設備速度較慢的FPGA,HLS會自動將操做安排在更多的時鐘週期內,有些操做可能須要做爲多週期資源來實現。 - 綁定(binding)
爲每一個計劃的操做指定執行的硬件資源。 - 控制邏輯提取
提取控制邏輯以建立一個有限狀態機,以在RTL設計中對操做進行排序。
高級綜合(HLS)將C代碼綜合成:
- 將頂層函數參數綜合到RTL I/O端口。
- 將C函數綜合爲RTL模塊。
- 默認狀況下,C函數中的循環保收縮(roll)狀態(與unroll展開狀態相對應)。
當循環未展開時,循環被建立成一種迭代邏輯,該循環中的每次迭代將依次執行該邏輯。使用優化指令能夠展開循環,這容許全部迭代並行發生,從而增長並行性。循環也能夠流水線化,或者用有限狀態機細粒度實現(循環流水線),或者用更粗粒度的基於握手的實現(數據流)。 - 在最終的FPGA設計中,C代碼中的數組被綜合到block RAM或UltraRAM 中。
若是數組位於頂層函數接口上,HLS會將其實現爲端口,以訪問設計以外的塊內存。
爲了肯定設計是否知足需求,在HLS生成的綜合報告中能夠查看性能指標。綜合報告包含如下性能指標的信息:
- 面積(area):根據FPGA中的可用資源實現設計所需的硬件資源量,包括查找表(LUT)、寄存器(register)、塊內存(block RAM)和DSP48系列。
- 延遲(latency):函數計算全部輸出值所需的時鐘週期數。
- 啓動間隔(initiation interval):功能能夠接受新輸入數據以前的時鐘週期數。
- 循環迭代延遲(loop iteration latency):完成一次循環迭代所需的時鐘週期數。
- 循環啓動間隔(loop initiation latency):循環的下一次迭代開始處理數據以前的時鐘週期數。循環延遲:執行循環全部迭代的週期數。
HLS優點
- 高級綜合(HLS)跨越硬件和軟件領域,提供如下主要優點:
提高硬件工程師的工做效率
硬件設計人員能夠在建立高性能硬件的同時,在更高的抽象層次上工做。
提升軟件工程師的系統性能
軟件開發人員能夠在新的編譯目標——FPGA上加速他們算法的高密度計算部分。針對吞吐量、功耗和延遲優化代碼,而無需解決單個內存空間和有限計算資源的性能瓶頸。
- 使用高級綜合設計方法,能夠實現:
在C層級開發算法
從功能實現的抽象層次來開發算法,能夠節省開發時間。
在C層級驗證
與傳統硬件的模擬仿真相比,能更快地驗證所設計功能的正確性。
經過優化指令控制C綜合過程
使用優化指令從C源代碼探索不一樣實現方法,以找到最佳實現的可能性。
建立可讀和可移植的C算法
經過打包成IP便可實現算法的共享及調用。
小結
本文主概述了HLS的應用前景和優點,做爲一名搞過軟件設計的硬件工程師(PS.搞軟件的能夠不懂硬件設計,可是搞硬件的必定不能不懂軟件設計),經過抽象語言的算法實現,HLS確實能夠在必定程度上節省開發時間,但其也還有很大的拓展空間,咱們目前有一款在研的HLS輔助工具,若是您有意向,能夠聯繫咱們廣州虹科,或者關注咱們公衆號:FPGA技術支持。 因爲咱們和賽靈思有合做,因此咱們採用的HLS工具是賽靈思的vivado HLS。本文主要參考了賽靈思官方文件《UG902-vivado-high-level-synthesis》。推薦學習如何使用vivado HLS能夠參考《UG871》。