SpinalHDL是基于Scala全新的硬件描述語(yǔ)言,解決了不少Verilog等傳統(tǒng)HDL語(yǔ)言的痛點(diǎn),可以快速的完成某些IP的開(kāi)發(fā),和完美的融入現(xiàn)有的開(kāi)發(fā)流程。
誠(chéng)然SpinalHDL的學(xué)習(xí)路線(xiàn)是比較陡峭的。另外在團(tuán)隊(duì)協(xié)作中,你可以要求你的同伴對(duì)Verilog,VHDL語(yǔ)言進(jìn)行掌握,但是不能要求他們也掌握SpinalHDL,Chisel這些語(yǔ)言,所以你的代碼怎么安排別人接手也是一個(gè)問(wèn)題。但是這并不妨礙我們采用SpinalHDL來(lái)快速驗(yàn)證我們某個(gè)想法是否是合理的,快速驗(yàn)證某個(gè)架構(gòu)是否合理。
在SpinalHDL的lib里面有一個(gè)eda目錄,里面有Xilinx,Altera等公司的一套工具庫(kù)。

我們以Xilinx的為例來(lái)說(shuō)明怎么利用里面的工具庫(kù)來(lái)驗(yàn)證我們的代碼能夠跑的頻率和占用的資源。

可以看到里面只有一個(gè)VivadoFlow的文件,在VivadoFlow里面需要我們指定Vivado的路徑,工作目錄,以及RTL,目標(biāo)器件,頻率等一系列參數(shù)

之后便可以獲取到當(dāng)前RTL能夠跑到的最大頻率和所需的資源了。可以看到A7和K7返回的是利用的LUT和FF,而KU,VU等器件把BRAM和URAM的資源利用也得到了。


通過(guò)一個(gè)直方圖均衡化的例子來(lái)說(shuō)明這個(gè)VivadoFlow如何評(píng)估資源的消耗。


通過(guò)上面的代碼指明vivado的路徑,工作路徑,以及目標(biāo)器件和頻率就可以愉快的開(kāi)始等著頻率和資源的利用報(bào)告了。
可以看到IDEA的窗口已經(jīng)開(kāi)始打印相關(guān)的log了。


可以看到實(shí)際能夠跑到的頻率只有147M,資源利用了976個(gè)LUT,1058個(gè)FF,因?yàn)檫x了A7的器件,所以BRAM的利用并沒(méi)有輸出。但是可以在中間日志中看到。

我們?cè)谥霸O(shè)置的目標(biāo)頻率是200MHz,但是經(jīng)過(guò)評(píng)估之后只能跑到147M,說(shuō)明我們還需要優(yōu)化下現(xiàn)在的代碼,繼續(xù)查看日志,可以看到建立時(shí)間不滿(mǎn)足。具體不滿(mǎn)足的地方在日志中也有輸出。


Intra 說(shuō)明是同一時(shí)鐘下的,不存在跨時(shí)鐘的問(wèn)題,當(dāng)然這個(gè)在我們?cè)O(shè)計(jì)的時(shí)候已經(jīng)確定了。

通過(guò)上面的日志可以確定是divSum和divMul之間的時(shí)序不滿(mǎn)足。這一部分是一個(gè)乘法和截尾操作。乘法被映射到DSP上,我們知道xilinx的DSP內(nèi)部有幾級(jí)的寄存器,如果把這幾級(jí)寄存器給利用起來(lái)那么就可以提高時(shí)鐘頻率,所以可以通過(guò)打拍的方式,讓這幾個(gè)寄存器被DSP所吸收掉,從而達(dá)到時(shí)序收斂的目的。(PS:如果是異步復(fù)位的寄存器是不能被7系列的FPGA的DSP所吸收的)


所以?xún)煞N不同的代碼如上。

經(jīng)過(guò)評(píng)估后可以跑到218MHz,的確有性能上的提升。
這個(gè)只是一個(gè)很小的模塊,可以這樣很快完成設(shè)計(jì)上的探索。
當(dāng)我們要進(jìn)行不同實(shí)現(xiàn)方式的探索的時(shí)候,便可以這樣快速的完成,不斷的完善模塊的架構(gòu)。
責(zé)任編輯:彭菁
-
開(kāi)發(fā)
+關(guān)注
關(guān)注
0文章
378瀏覽量
42144 -
Verilog
+關(guān)注
關(guān)注
30文章
1374瀏覽量
114523
原文標(biāo)題:SpinalHDL--快速評(píng)估代碼性能
文章出處:【微信號(hào):FPGA開(kāi)源工坊,微信公眾號(hào):FPGA開(kāi)源工坊】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
如何實(shí)現(xiàn)SpinalHDL 環(huán)境搭建
在SpinalHDL里實(shí)現(xiàn)優(yōu)雅的添加待跟蹤波形信號(hào)
聊一聊SpinalHDL 1.6.1引入的blackbox inline功能
在SpinalHDL中關(guān)于casez的使用
在SpinalHDL中的代碼組織結(jié)構(gòu)如何實(shí)現(xiàn)Component參數(shù)化設(shè)計(jì)呢
SpinalHDL是如何讓仿真跑起來(lái)的
如何在SpinalHDL里啟動(dòng)一個(gè)仿真
SpinalHDL開(kāi)發(fā)環(huán)境搭建步驟相關(guān)資料分享
SpinalHDL設(shè)計(jì)錯(cuò)誤總結(jié)相關(guān)資料分享
基于Windows系統(tǒng)的SpinalHDL開(kāi)發(fā)環(huán)境搭建步驟
從Verilog到SpinalHDL
在SpinalHDL中的對(duì)應(yīng)關(guān)系及聲明形式
SpinalHDL里如何實(shí)現(xiàn)Sobel邊緣檢測(cè)
SpinalHDL BlackBox時(shí)鐘與復(fù)位
SpinalHDL Simulation性能提升測(cè)試
spinalhdl轉(zhuǎn)Verilog可讀性 SpinalHDL開(kāi)發(fā)流程
評(píng)論