SpinalHDL是基于Scala全新的硬件描述語言,解決了不少Verilog等傳統(tǒng)HDL語言的痛點(diǎn),可以快速的完成某些IP的開發(fā),和完美的融入現(xiàn)有的開發(fā)流程。
誠然SpinalHDL的學(xué)習(xí)路線是比較陡峭的。另外在團(tuán)隊(duì)協(xié)作中,你可以要求你的同伴對(duì)Verilog,VHDL語言進(jìn)行掌握,但是不能要求他們也掌握SpinalHDL,Chisel這些語言,所以你的代碼怎么安排別人接手也是一個(gè)問題。但是這并不妨礙我們采用SpinalHDL來快速驗(yàn)證我們某個(gè)想法是否是合理的,快速驗(yàn)證某個(gè)架構(gòu)是否合理。
在SpinalHDL的lib里面有一個(gè)eda目錄,里面有Xilinx,Altera等公司的一套工具庫。
我們以Xilinx的為例來說明怎么利用里面的工具庫來驗(yàn)證我們的代碼能夠跑的頻率和占用的資源。
可以看到里面只有一個(gè)VivadoFlow的文件,在VivadoFlow里面需要我們指定Vivado的路徑,工作目錄,以及RTL,目標(biāo)器件,頻率等一系列參數(shù)
之后便可以獲取到當(dāng)前RTL能夠跑到的最大頻率和所需的資源了。可以看到A7和K7返回的是利用的LUT和FF,而KU,VU等器件把BRAM和URAM的資源利用也得到了。
通過一個(gè)直方圖均衡化的例子來說明這個(gè)VivadoFlow如何評(píng)估資源的消耗。
通過上面的代碼指明vivado的路徑,工作路徑,以及目標(biāo)器件和頻率就可以愉快的開始等著頻率和資源的利用報(bào)告了。
可以看到IDEA的窗口已經(jīng)開始打印相關(guān)的log了。
可以看到實(shí)際能夠跑到的頻率只有147M,資源利用了976個(gè)LUT,1058個(gè)FF,因?yàn)檫x了A7的器件,所以BRAM的利用并沒有輸出。但是可以在中間日志中看到。
我們?cè)谥霸O(shè)置的目標(biāo)頻率是200MHz,但是經(jīng)過評(píng)估之后只能跑到147M,說明我們還需要優(yōu)化下現(xiàn)在的代碼,繼續(xù)查看日志,可以看到建立時(shí)間不滿足。具體不滿足的地方在日志中也有輸出。
Intra 說明是同一時(shí)鐘下的,不存在跨時(shí)鐘的問題,當(dāng)然這個(gè)在我們?cè)O(shè)計(jì)的時(shí)候已經(jīng)確定了。
通過上面的日志可以確定是divSum和divMul之間的時(shí)序不滿足。這一部分是一個(gè)乘法和截尾操作。乘法被映射到DSP上,我們知道xilinx的DSP內(nèi)部有幾級(jí)的寄存器,如果把這幾級(jí)寄存器給利用起來那么就可以提高時(shí)鐘頻率,所以可以通過打拍的方式,讓這幾個(gè)寄存器被DSP所吸收掉,從而達(dá)到時(shí)序收斂的目的。(PS:如果是異步復(fù)位的寄存器是不能被7系列的FPGA的DSP所吸收的)
所以兩種不同的代碼如上。
經(jīng)過評(píng)估后可以跑到218MHz,的確有性能上的提升。
這個(gè)只是一個(gè)很小的模塊,可以這樣很快完成設(shè)計(jì)上的探索。
當(dāng)我們要進(jìn)行不同實(shí)現(xiàn)方式的探索的時(shí)候,便可以這樣快速的完成,不斷的完善模塊的架構(gòu)。
責(zé)任編輯:彭菁
-
開發(fā)
+關(guān)注
關(guān)注
0文章
370瀏覽量
40844 -
Verilog
+關(guān)注
關(guān)注
28文章
1351瀏覽量
110106
原文標(biāo)題:SpinalHDL--快速評(píng)估代碼性能
文章出處:【微信號(hào):FPGA開源工坊,微信公眾號(hào):FPGA開源工坊】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論