大多數(shù)FPGA程序員認(rèn)為,高級(jí)工具總是發(fā)出更大的比特流,作為提高生產(chǎn)率的 "代價(jià)"。但是這總是真的嗎?
在本文中,我們展示了一個(gè)真實(shí)的例子,我們使用傳統(tǒng)的RTL/Verilog工具創(chuàng)建了一個(gè)普通的網(wǎng)絡(luò)函數(shù)(RSS),然后在相同的硬件上使用高級(jí)合成工具(HLS)來實(shí)現(xiàn)相同的功能。
我們發(fā)現(xiàn),令人驚訝的是:HLS方法實(shí)際上使用了更少的FPGA門和內(nèi)存。這好像和我們習(xí)慣的思維不太一致啊…
通過使用Vivado(Xilinx)或Intel(Quartus)工具,F(xiàn)PGA開發(fā)的HLS方法是只抽象出可以在C/C++環(huán)境中輕松表達(dá)的應(yīng)用程序的部分。
要想在HLS取得成功,重要的是要認(rèn)識(shí)到項(xiàng)目中哪些部分或模塊適合在HLS中實(shí)現(xiàn)?;緶?zhǔn)則可以概括如下(可能描述不太清楚準(zhǔn)確):
目標(biāo)用途一般是以高級(jí)語言開始定義的IP塊。一個(gè)數(shù)學(xué)算法會(huì)很有效,或者像我們的RSS塊那樣,一些網(wǎng)絡(luò)協(xié)議處理。
另一類用途是定義不明確的塊,因此可能需要多輪的實(shí)現(xiàn)。這里最大的好處是允許HLS工具自動(dòng)對(duì)產(chǎn)生的本地FPGA代碼進(jìn)行流水線處理,通常比快速手工編碼流水線的階段要少。另外,當(dāng)需要修改手工編碼的流水線時(shí),一個(gè)并行路徑上的延遲變化會(huì)對(duì)所有的東西產(chǎn)生連鎖反應(yīng)。使用HLS工具自動(dòng)進(jìn)行第二次流水線,從頭開始,消除了這種頭痛的問題。
最后,HLS流程使不同F(xiàn)PGA品牌之間的代碼移植變得更加容易。這是因?yàn)镠LS會(huì)自動(dòng)生成適當(dāng)數(shù)量的流水線階段--這是你在使用Verilog或VHDL時(shí)需要手動(dòng)指定的。
目前HLS的局限性很明顯,它的范圍限于IP塊。應(yīng)用團(tuán)隊(duì)仍然需要其他組件的RTL。還應(yīng)該注意的是,對(duì)于最簡(jiǎn)單的代碼或主要由預(yù)先優(yōu)化的組件組成的大型設(shè)計(jì)來說,HLS是一個(gè)不太理想的選擇。
1. 用于做對(duì)比的應(yīng)用,F(xiàn)PGA上的聯(lián)網(wǎng)RSS
什么是RSS?RSS是 "接收方擴(kuò)展 "的意思。它是一種散列算法,用于在多個(gè)CPU上有效分配網(wǎng)絡(luò)數(shù)據(jù)包。RSS是現(xiàn)代以太網(wǎng)卡的一項(xiàng)功能,一般實(shí)現(xiàn)微軟定義的特定托普利茨哈希。
SmartNIC Shell框架的實(shí)施實(shí)例框圖。這里的RSS塊被替換成了HLS實(shí)現(xiàn)。
2. 用RTL和HLS實(shí)現(xiàn)RSS的結(jié)果對(duì)比
我們?cè)u(píng)估的假設(shè)如下:本地FPGA編碼總是導(dǎo)致最小的資源使用。然而,BittWare的一位工程師對(duì)這一決定提出了質(zhì)疑,并在HLS中重新實(shí)現(xiàn)了RSS,以測(cè)試這一方法。他是對(duì)的,現(xiàn)在BittWare已經(jīng)用HLS代碼取代了我們SmartNIC Shell中的RSS模塊和解析器模塊。
兩種實(shí)現(xiàn)方式的最大區(qū)別是Verilog/RTL版本使用了FIFO,而HLS C++版本沒有使用。我們很驚訝地看到,通過轉(zhuǎn)移到HLS,資源的使用量實(shí)際上下降了——這與我們預(yù)想的差異較大。
開發(fā)時(shí)間呢?粗略地說,我們看到原生RTL版本的時(shí)間線為一個(gè)月,而HLS代碼在一周內(nèi)完成。
3. 總結(jié)
“今天的高層FPGA開發(fā)工具被設(shè)計(jì)用來減少上市時(shí)間和對(duì)硬件工程師的依賴。然而,使用這些工具總是帶來應(yīng)用性能的妥協(xié)——無論是速度還是硅資源”。然而這種假設(shè)是錯(cuò)誤的。
我們發(fā)現(xiàn)使用HLS為BittWare的SmartNIC Shell開發(fā)IP塊,將開發(fā)時(shí)間從大約一個(gè)月縮短到一周。我們還發(fā)現(xiàn),它實(shí)際上使用了更少的門電路來實(shí)現(xiàn)。
審核編輯:湯梓紅
-
FPGA
+關(guān)注
關(guān)注
1630文章
21803瀏覽量
606435 -
Verilog
+關(guān)注
關(guān)注
28文章
1352瀏覽量
110453 -
HDL
+關(guān)注
關(guān)注
8文章
328瀏覽量
47482 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4346瀏覽量
63024 -
Vivado
+關(guān)注
關(guān)注
19文章
815瀏覽量
66931
原文標(biāo)題:Vivado HLS 能否取代HDL開發(fā)
文章出處:【微信號(hào):Hack電子,微信公眾號(hào):Hack電子】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
探索Vivado HLS設(shè)計(jì)流,Vivado HLS高層次綜合設(shè)計(jì)
請(qǐng)問如何只下載Vivado HLS 2015.2
Vivado HLS設(shè)計(jì)流的相關(guān)資料分享
嵌入式硬件開發(fā)學(xué)習(xí)教程——Xilinx Vivado HLS案例 (流程說明)
Hackaday讀者有話說:Vivado HLS使用經(jīng)驗(yàn)分享
![Hackaday讀者有話說:<b class='flag-5'>Vivado</b> <b class='flag-5'>HLS</b>使用經(jīng)驗(yàn)分享](https://file1.elecfans.com//web2/M00/A6/A8/wKgZomUMP22ACg7eAAAS4Iecc64562.jpg)
用Vivado-HLS實(shí)現(xiàn)低latency 除法器
![用<b class='flag-5'>Vivado-HLS</b>實(shí)現(xiàn)低latency 除法器](https://file.elecfans.com/web2/M00/49/70/poYBAGKhwLSALp-1AABLz8q1CfE363.png)
基于Vivado HLS的計(jì)算機(jī)視覺開發(fā)
如何創(chuàng)建Vivado HLS項(xiàng)目
如何使用Tcl命令語言讓Vivado HLS運(yùn)作
關(guān)于Vivado HLS錯(cuò)誤理解
![關(guān)于<b class='flag-5'>Vivado</b> <b class='flag-5'>HLS</b>錯(cuò)誤理解](https://file.elecfans.com/web1/M00/99/4F/pIYBAF0VNwqAKlgbAAB6aroCEaU033.jpg)
極客對(duì)Xilinx Vivado HLS工具使用經(jīng)驗(yàn)和心得
Vivado HDL編寫示例
UltraFast Vivado HLS方法指南
![UltraFast <b class='flag-5'>Vivado</b> <b class='flag-5'>HLS</b>方法指南](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
將VIVADO HLS設(shè)計(jì)移植到CATAPULT HLS平臺(tái)
![將<b class='flag-5'>VIVADO</b> <b class='flag-5'>HLS</b>設(shè)計(jì)移植到CATAPULT <b class='flag-5'>HLS</b>平臺(tái)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評(píng)論