資料介紹
作者:Wen Chen,文章來源: 賽靈思中文社區(qū)論壇
注意:本論壇博客所有內(nèi)容皆來源于Xilinx工程師,如需轉(zhuǎn)載,請寫明出處作者及賽靈思論壇鏈接并發(fā)郵件至cncrc@xilinx.com,未經(jīng)Xilinx及著作權(quán)人許可,禁止用作商業(yè)用途
說起高層次綜合技術(shù)(High-level synthesis)的概念,現(xiàn)在有很多初學(xué)者簡單地把它理解為可以自動把c/c++之類地高級語言直接轉(zhuǎn)換成底層硬件描述語言(RTL)的技術(shù)。其實更準(zhǔn)確的表述是:由更高抽象度的行為描述生產(chǎn)電路的技術(shù)。高層次的概念代表的是硬件描述語言里面較高的抽象層次,只是隨著軟件硬件語言的共同發(fā)展,這樣的高抽象度的行為描述語言來到了C/C++/System C 這樣的層次。
以下是南加州大學(xué)的DANIEL D.GAJSKI教授在1994年出版的期刊時對高層次綜合技術(shù)的描述[1]:High-level synthesis systems start with an abstract behavioral specification of a digital system and find a register-transfer level structure that realizes the given behavior. 下圖揭示了高層次綜合工作的基本流程,以及它于傳統(tǒng)的RTL綜合流程的對比。接下來將對行為描述,行為綜合,分析與優(yōu)化三個主要子流程詳細(xì)描述。
1、行為描述
當(dāng)我們把HLS技術(shù)的起點立為一種行為描述語言的時候,就需要軟件語言遵循特定的行為描述規(guī)范,并且剔除一些源自于軟件系統(tǒng)的的思維理念。雖然各個HLS工具的行為綜合都有自己的規(guī)范,但是關(guān)于動態(tài)內(nèi)存分配的約束是共通的:禁止遞歸和動態(tài)指針。
函數(shù)遞歸意味著需要能夠動態(tài)生成電路模塊,動態(tài)指針是指運行時指針值可以任意變化的指針變量。 硬件不像軟件具有大塊的主內(nèi)存,只有分布在局部的內(nèi)存,所以比較適合并行實現(xiàn)。動態(tài)指針要求作為對象的訪問實體在運行時變化,超出了數(shù)字電路概念的一種功能。同樣,超出了數(shù)字電路概念的還有管理系統(tǒng)內(nèi)存分配的系統(tǒng)調(diào)用函數(shù)等,在此不一一列舉了。
行為描述的概念,讓我們明確了針對數(shù)字電路特性使用高層次語言去編寫行為代碼的這一設(shè)計基本準(zhǔn)則。而后探討代碼風(fēng)格(coding style),系統(tǒng)優(yōu)化都由這一基本準(zhǔn)則延申。這就是為什么我們寫的C語言代碼會有一種介于硬件與軟件設(shè)計風(fēng)格之間的根本原因。
行為描述的基本對象有輸入輸出接口,數(shù)據(jù)位寬,并行化描述等等,在 Vitis HLS 中有行為描述的規(guī)范和推薦的寫法等等,在展開介紹之前,我們先明確行為綜合的流程。
2、行為綜合
在行為綜合的過程中,行為描述中使用的變量,數(shù)組,運算分別用寄存器(FF,LUT),局部內(nèi)存(URAM,BRAM,DRAM),運算器(DSP,ALU)等數(shù)字電路單元來實現(xiàn)。行為描述中的處理流程(順序執(zhí)行, 分支,循環(huán)則以有限狀態(tài)機(jī)(FSM)的形式來呈現(xiàn)。通過分析行為描述,可以將運算的依賴關(guān)系表示為數(shù)據(jù)流圖(DFG),將控制流程表示為控制流圖(CFG)。
分析到這里兩個非常重要的行為綜合概念出現(xiàn)了,就是調(diào)度(scheduling)和綁定(Binding).
根據(jù)數(shù)據(jù)流圖和控制流圖來決定運行順序和運行速度的過程稱為調(diào)度。
將變量和運算映射到寄存器或運算器的過程稱為綁定。
下圖簡潔明了地介紹了從C語言設(shè)計到導(dǎo)出RTL設(shè)計過程中,依據(jù)HLS庫和用戶指令進(jìn)行調(diào)度和綁定的過程。
這里我們使用一個非常簡單的例子描述一下行為綜合的過程
(1) Compilation and Transformation 將一個行為描述代碼的轉(zhuǎn)化為數(shù)據(jù)流圖DFG
數(shù)據(jù)流圖由很多數(shù)據(jù)節(jié)點組成,最重要的是表達(dá)出了各個節(jié)點上數(shù)據(jù)的依賴關(guān)系,這是后面調(diào)度和綁定的基礎(chǔ)。
在這個步驟中,代碼風(fēng)格是一個比較關(guān)鍵的因素。HLS在轉(zhuǎn)化過于繁復(fù)高層次語言表達(dá)的時候,極個別情況會無法識別一些嵌套非常深的軟件算法,也會增加編譯時間. 所以盡量簡潔,邏輯明晰的硬件友好代碼會提升開發(fā)效率。
(2) Scheduling 調(diào)度
在數(shù)據(jù)流圖中,我們看到XY和EF數(shù)據(jù)之間沒有依賴,他們可以選擇在同一個Control Step里面并行執(zhí)行,或者在兩個ST里面順序執(zhí)行.
這個過程中調(diào)度的并行性由HLS編譯器,用戶指令共同作用影響著,比如編譯器會主動發(fā)現(xiàn)可以并行的優(yōu)化點自動優(yōu)化,也會誤以為某些表達(dá)式存在數(shù)據(jù)依賴無法并行優(yōu)化等,所以仍需要用戶加入指令說明情況。 當(dāng)然追求更高的并行性對資源也有更大的需求,所以并不是一切調(diào)度都以最大并行性為目標(biāo)。
(3) Binding
在早期的HLS研究中,Allocation 和 Binding 是分開的兩個步驟。其中Allocation 鎖定了資源的數(shù)量和類型,Binding完成了運算到資源的映射?,F(xiàn)在我們就統(tǒng)稱這些操作在Binding步驟完成。早期FPGA中的含有一種集成的算法單元ALU,如今DSP這樣的硬件模塊已經(jīng)包含了ALU和乘法器模塊等等。
下圖基于早期的ALU單元揭示了Binding 的可能性, 將加減法操作映射到寄存器還是ALU模塊,呈現(xiàn)了兩種不同的方案.
以下是選擇了使用一個ALU、兩個寄存器、一個乘法器的綜合結(jié)果。對于既定的調(diào)度方案,可以通過行為綜合來生成相應(yīng)的狀態(tài)機(jī)。HLS在行為綜合的過程中,除了達(dá)到算法的基本功能,更重要的是選擇不同的綁定和調(diào)度方案在資源、性能、吞吐量等各個指標(biāo)中做權(quán)衡和取舍。
3、分析和優(yōu)化
電路的規(guī)模和運行時間存在權(quán)衡關(guān)系,所以產(chǎn)生最優(yōu)化的RTL描述需要開發(fā)者提供大致的優(yōu)化方針,甚至是明確的優(yōu)化仿真。
因此Xilinx的高層綜合工具提供了一系列性能評估的功能和向編譯器指向優(yōu)化方式的途徑。針對行為描述進(jìn)行行為綜合,可以獲取如下多種性能指標(biāo):
?面積(電路規(guī)模):根據(jù)資源實施設(shè)計所需的硬件資源量
在FPGA中可用,包括查找表(LUT),寄存器,Block RAM和DSP48。
?延遲:函數(shù)計算所有輸出值所需的時鐘周期數(shù)。
?初始化間隔(II):函數(shù)可以接受新輸入數(shù)據(jù)之前的時鐘周期數(shù)。
?循環(huán)迭代延遲:完成循環(huán)的一次迭代所需的時鐘周期數(shù)。
?循環(huán)啟動間隔:下一次循環(huán)迭代開始處理數(shù)據(jù)之前的時鐘周期數(shù)。
?循環(huán)延遲:執(zhí)行循環(huán)所有迭代的循環(huán)數(shù)。
這些性能指標(biāo)的行為綜合結(jié)果都會在HLS工具的報告中指出,開發(fā)者需要找出性能瓶頸或者性能過剩的部分。針對循環(huán)的優(yōu)化方式由流水線(pipeline)或展開(unroll). 此外還有指示運算器的并行或共享,指示數(shù)組的拆分(partition)和訪問調(diào)度,指示功能函數(shù)的內(nèi)聯(lián)(inline)等等。這些優(yōu)化指令相互作用,需要從全局出發(fā)確定優(yōu)化指令。
當(dāng)進(jìn)行詳細(xì)的優(yōu)化指令也無法達(dá)到預(yù)期的指標(biāo)時,就需要考慮代碼本身的優(yōu)化。這就需要開發(fā)者在設(shè)計模塊(函數(shù)、循環(huán)等)時靈活運用并行、流水線等架構(gòu),并在充分理解行為綜合機(jī)制的基礎(chǔ)上編寫更容易生成高效硬件行為描述的代碼。
4、接口連接
行為描述后的模塊需再和其他模塊群整合,所以就過渡到考慮如何設(shè)計端口類型與其他IP進(jìn)行實例化連接了。
在RTL設(shè)計中,數(shù)據(jù)通過端口進(jìn)出IP,這些端口可以使用固特定的IP接口協(xié)議(AXI-Master/ AXI-lite)來進(jìn)行操作. 進(jìn)出IP的每一條數(shù)據(jù),都應(yīng)該將其指定為主源文件中的一個獨立函數(shù)實參。該函數(shù)實參將會被綜合為硬件RTL中的一個端口。
數(shù)據(jù)端口的類型大概分為以下三個大類:
1、直接讀寫數(shù)據(jù)值的寄存器式
2、按照隊列收發(fā)數(shù)據(jù)的數(shù)據(jù)流式
3、指定地址進(jìn)行讀寫的內(nèi)存總線模式
不同接口能夠為不同設(shè)計提供最優(yōu)性能,比如數(shù)據(jù)流接口更適合于數(shù)據(jù)驅(qū)動型應(yīng)用,為了更高效地傳輸數(shù)據(jù)經(jīng)常在發(fā)送和接收雙方之間插入FIFO緩沖器。這樣的使用規(guī)則為FPGA硬件開發(fā)者所熟知,軟件開發(fā)者仍需要深入理解。
下表為Vivado Design Flow 下的接口類型已經(jīng)變量類型的關(guān)系。 其中標(biāo)量,數(shù)組,指針和hls數(shù)據(jù)流格式對應(yīng)的默認(rèn)接口模式標(biāo)注為D,支持的接口標(biāo)注為1,不支持的接口標(biāo)注為3, ,是一個重要的設(shè)計參考表格。
本章節(jié)通過揭示HLS工作的基本概念讓大家對技術(shù)有了宏觀上的理解。這一份宏觀上的理解雖然淺顯易懂,但是它將基于CPU的架構(gòu)的軟件程序與在高層次綜合這項技術(shù)上行為描述語言做出了明顯的區(qū)分。賽靈思的HLS官方手冊中,對文中提到了端口協(xié)議,優(yōu)化指令,數(shù)據(jù)類型等都有非常詳細(xì)的解釋。本系列以后的文章將適合HLS加速的應(yīng)用場景出發(fā),重點講解數(shù)據(jù)傳輸?shù)募軜?gòu)優(yōu)化以及如何編寫高效的硬件描述C代碼。
寫在最后:
"為現(xiàn)場可編程門陣列的高層次綜合建立的算法基礎(chǔ)”曾獲IEEE計算機(jī)分會年度技術(shù)成就獎的叢京生教授在ASPDAC 會議上對高層次綜合技術(shù)未來的展望:
一個性能優(yōu)于CPU的優(yōu)秀的高層次綜合設(shè)計的HLS C/C++代碼可能會很長,甚至和原始代碼相比面目全非。類似這樣對于一個軟件程序員進(jìn)行常年的HLS C/C++代碼的訓(xùn)練并不是可推廣和有效率的模式。但是在可定制計算技術(shù)的長河中,科學(xué)家和研究者們希望無論軟硬件工作人員,都只要經(jīng)過一些基本優(yōu)化理論的訓(xùn)練就可以通過寫軟件代碼得到優(yōu)于通用CPU的設(shè)計。這樣大家才能廣泛體會到可定制計算能夠帶來的好處[4]。
參考:
[1] D. D. Gajski and L. Ramachandran, "Introduction to high-level synthesis," in?IEEE Design & Test of Computers, vol. 11, no. 4, pp. 44-54, Winter 1994, doi: 10.1109/54.329454.
[2] 天野英晴, FPGA 原理和結(jié)構(gòu)
[3] High-Level Synthesis - Saraju P. Mohanty http://www.smohanty.org/Presentations/2001/MohantyHLS2001Talk.pdf
[4] aspdac20_keynote.pdf https://ucla.app.box.com/s/l2l1158ze86h38xj5sglgkcrjqz12cxg
- 使用Vivado高層次綜合(HLS)進(jìn)行FPGA設(shè)計的簡介
- UltraFast高層次生產(chǎn)力設(shè)計方法指南
- 基于創(chuàng)龍科技Xilinx Zynq-7010/20開發(fā)板——HLS案例開發(fā)手冊
- 淺析YG-SD隧道綜合環(huán)境監(jiān)測系統(tǒng) 33次下載
- 淺析電容倍增器的原理及應(yīng)用 李文元 70次下載
- PYNQ上手筆記 | ⑤采用Vivado HLS進(jìn)行高層次綜合設(shè)計
- L4微內(nèi)核技術(shù)淺析 20次下載
- EDA技術(shù)的發(fā)展與應(yīng)用詳細(xì)資料說明
- 數(shù)字集成電路設(shè)計Verilog的詳細(xì)資料介紹免費下載 36次下載
- 使用Vivado高層次綜合 (HLS)進(jìn)行FPGA設(shè)計的簡介 65次下載
- SOC設(shè)計中高層次功耗估算和優(yōu)化技術(shù) 46次下載
- 利用Catapult LB 創(chuàng)建高層次綜合工藝庫
- Catapult SL高層次綜合算法C工具的開發(fā)技巧
- 利用Mentor高層次綜合技術(shù)快速實現(xiàn)復(fù)雜DSP算法
- synplify_pro經(jīng)典教程 0次下載
- 邏輯綜合的相關(guān)知識 885次閱讀
- 如何使用Vitis AI Library來安裝、使用和開發(fā)應(yīng)用 1824次閱讀
- Vitis HLS的基礎(chǔ)知識科普 2378次閱讀
- Vitis HLS工具簡介及設(shè)計流程 2206次閱讀
- 深度剖析虛擬內(nèi)存 1624次閱讀
- 淺析FPGA+DSP結(jié)構(gòu)中的配置方式 8009次閱讀
- 詳解Arduino GY-30數(shù)字光強(qiáng)傳感器應(yīng)用 1.5w次閱讀
- 詳解DHT11數(shù)字溫濕度傳感器實驗 2.3w次閱讀
- 關(guān)于Python 新手不得不知道 1534次閱讀
- 基于Vivado高層次綜合工具評估IQ數(shù)據(jù)的無線電設(shè)備接口壓縮算法設(shè)計 2090次閱讀
- 傳感器和物聯(lián)網(wǎng)的介紹和“極端物聯(lián)網(wǎng)”的詳細(xì)資料概述 3805次閱讀
- vxworks和linux有什么區(qū)別 3.8w次閱讀
- 了解Vivado設(shè)計套件集成能力的九大理由分析 1661次閱讀
- Vivado Hls 設(shè)計分析(二) 3553次閱讀
- FPGA專家教您如何在FPGA設(shè)計中使用HLS 3572次閱讀
下載排行
本周
- 1HFSS電磁仿真設(shè)計應(yīng)用詳解PDF電子教程免費下載
- 24.30 MB | 128次下載 | 1 積分
- 2雷達(dá)的基本分類方法
- 1.25 MB | 4次下載 | 4 積分
- 3電感技術(shù)講解
- 827.73 KB | 2次下載 | 免費
- 4從 MSP430? MCU 到 MSPM0 MCU 的遷移指南
- 1.17MB | 2次下載 | 免費
- 5有源低通濾波器設(shè)計應(yīng)用說明
- 1.12MB | 2次下載 | 免費
- 6RA-Eco-RA2E1-48PIN-V1.0開發(fā)板資料
- 35.59 MB | 2次下載 | 免費
- 7面向熱插拔應(yīng)用的 I2C 解決方案
- 685.57KB | 1次下載 | 免費
- 8愛普生有源晶體振蕩器SG3225EEN應(yīng)用于儲能NPC、新能源
- 317.46 KB | 1次下載 | 免費
本月
- 12024年工控與通信行業(yè)上游發(fā)展趨勢和熱點解讀
- 2.61 MB | 763次下載 | 免費
- 2HFSS電磁仿真設(shè)計應(yīng)用詳解PDF電子教程免費下載
- 24.30 MB | 128次下載 | 1 積分
- 3繼電保護(hù)原理
- 2.80 MB | 36次下載 | 免費
- 4正激、反激、推挽、全橋、半橋區(qū)別和特點
- 0.91 MB | 32次下載 | 1 積分
- 5labview實現(xiàn)DBC在界面加載配置
- 0.57 MB | 21次下載 | 5 積分
- 6在設(shè)計中使用MOSFET瞬態(tài)熱阻抗曲線
- 1.57MB | 15次下載 | 免費
- 7GBT 4706.1-2024家用和類似用途電器的安全第1部分:通用要求
- 7.43 MB | 14次下載 | 免費
- 8H橋中的電流感測
- 545.39KB | 7次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935113次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計
- 1.48MB | 420061次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233084次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費下載
- 340992 | 191360次下載 | 10 積分
- 5十天學(xué)會AVR單片機(jī)與C語言視頻教程 下載
- 158M | 183329次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81578次下載 | 10 積分
- 7Keil工具M(jìn)DK-Arm免費下載
- 0.02 MB | 73804次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65985次下載 | 10 積分
評論
查看更多