0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

spinalhdl轉(zhuǎn)Verilog可讀性 SpinalHDL開(kāi)發(fā)流程

FPGA開(kāi)源工坊 ? 來(lái)源:FPGA開(kāi)源工坊 ? 2023-07-27 09:29 ? 次閱讀

SpinalHDL是基于Scala全新的硬件描述語(yǔ)言,解決了不少Verilog等傳統(tǒng)HDL語(yǔ)言的痛點(diǎn),可以快速的完成某些IP的開(kāi)發(fā),和完美的融入現(xiàn)有的開(kāi)發(fā)流程。

誠(chéng)然SpinalHDL的學(xué)習(xí)路線是比較陡峭的。另外在團(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ù)。

860588c0-2bbf-11ee-a368-dac502259ad0.png

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

861c7ecc-2bbf-11ee-a368-dac502259ad0.png

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

8633b0a6-2bbf-11ee-a368-dac502259ad0.png

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

8665ed5a-2bbf-11ee-a368-dac502259ad0.png

8692bc90-2bbf-11ee-a368-dac502259ad0.png

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

86c63610-2bbf-11ee-a368-dac502259ad0.png

86f87666-2bbf-11ee-a368-dac502259ad0.png

通過(guò)上面的代碼指明vivado的路徑,工作路徑,以及目標(biāo)器件和頻率就可以愉快的開(kāi)始等著頻率和資源的利用報(bào)告了。

可以看到IDEA的窗口已經(jīng)開(kāi)始打印相關(guān)的log了。

87180aa8-2bbf-11ee-a368-dac502259ad0.png

875bff10-2bbf-11ee-a368-dac502259ad0.png

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

87786222-2bbf-11ee-a368-dac502259ad0.png

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

87a17586-2bbf-11ee-a368-dac502259ad0.png

87c514c8-2bbf-11ee-a368-dac502259ad0.png

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

87e8e5c4-2bbf-11ee-a368-dac502259ad0.png

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

883e3bb4-2bbf-11ee-a368-dac502259ad0.png

88592c4e-2bbf-11ee-a368-dac502259ad0.png

所以兩種不同的代碼如上。

887931c4-2bbf-11ee-a368-dac502259ad0.png

經(jīng)過(guò)評(píng)估后可以跑到218MHz,的確有性能上的提升。

這個(gè)只是一個(gè)很小的模塊,可以這樣很快完成設(shè)計(jì)上的探索。

當(dāng)我們要進(jìn)行不同實(shí)現(xiàn)方式的探索的時(shí)候,便可以這樣快速的完成,不斷的完善模塊的架構(gòu)。

責(zé)任編輯:彭菁

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 開(kāi)發(fā)
    +關(guān)注

    關(guān)注

    0

    文章

    360

    瀏覽量

    40769
  • Verilog
    +關(guān)注

    關(guān)注

    28

    文章

    1335

    瀏覽量

    109847

原文標(biāo)題:SpinalHDL--快速評(píng)估代碼性能

文章出處:【微信號(hào):FPGA開(kāi)源工坊,微信公眾號(hào):FPGA開(kāi)源工坊】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何實(shí)現(xiàn)SpinalHDL 環(huán)境搭建

    據(jù)說(shuō)SpinalHDL相比chisel更具優(yōu)勢(shì),這讓我有了興趣,今天開(kāi)始安裝搭建。平常用的linux系統(tǒng)的,但是Intel IDEA安裝在Ubuntu上的時(shí)候總是卡的不行,就放棄了,其實(shí)
    的頭像 發(fā)表于 08-24 14:43 ?8551次閱讀
    如何實(shí)現(xiàn)<b class='flag-5'>SpinalHDL</b> 環(huán)境搭建

    SpinalHDL里實(shí)現(xiàn)優(yōu)雅的添加待跟蹤波形信號(hào)

    在FPGA的開(kāi)發(fā)過(guò)程中,在線抓取波形往往是終極調(diào)試大法。而如何抓取信號(hào),相信做邏輯開(kāi)發(fā)的小伙伴都是輕車熟路,張口就來(lái),無(wú)非兩種方式嘛:待跟蹤信號(hào)添加原語(yǔ)或者手動(dòng)例化Ila。而在SpinalHDL
    發(fā)表于 06-22 14:37

    聊一聊SpinalHDL 1.6.1引入的blackbox inline功能

    編程都有極大的便利。在上面的blackbox的使用方式里,封裝成blackbox的Verilog代碼和SpinalHDL代碼是分開(kāi)維護(hù)的,作為開(kāi)發(fā)使用沒(méi)有什么問(wèn)題,但如果你是作為一個(gè)第三方IP提供者,像
    發(fā)表于 06-29 16:02

    SpinalHDL中關(guān)于casez的使用

    SpinalHDL中的switch在之前的文章中曾提到過(guò)SpinalHDL中switch的使用:通常情況下,switch對(duì)應(yīng)著我們?nèi)粘?b class='flag-5'>Verilog代碼中的case。像下面的代碼:其生成的RTL代碼
    發(fā)表于 07-06 10:59

    SpinalHDL中的代碼組織結(jié)構(gòu)如何實(shí)現(xiàn)Component參數(shù)化設(shè)計(jì)呢

    ;io_"前綴,若想在代碼中避免可在SpinalHDL里添加"noIoPrefix()"。在SpinalHDL里,Component對(duì)于端口的訪問(wèn)與Verilog類似:可讀
    發(fā)表于 07-21 14:20

    SpinalHDL是如何讓仿真跑起來(lái)的

    倘若用SpinalHDL寫(xiě)完代碼后需要用Verilog/SystemVerilog來(lái)進(jìn)行驗(yàn)證,那將是一件痛苦的事情。仿真設(shè)計(jì)不分家對(duì)于數(shù)字電路邏輯設(shè)計(jì)而言,設(shè)計(jì)與仿真往往是緊密結(jié)合的。在
    發(fā)表于 07-25 15:09

    如何在SpinalHDL里啟動(dòng)一個(gè)仿真

    仿真的原理,盡管我們仿真對(duì)象是我們的SpinalHDL代碼生成Verilog文件交給仿真器去執(zhí)行但我們的仿真環(huán)境搭建和case構(gòu)建可以借助scala語(yǔ)言本身豐富的軟件庫(kù)來(lái)進(jìn)行構(gòu)建,這是我們用
    發(fā)表于 07-26 16:59

    SpinalHDL開(kāi)發(fā)環(huán)境搭建步驟相關(guān)資料分享

    1、SpinalHDL開(kāi)發(fā)環(huán)境搭建步驟開(kāi)發(fā)所需軟件SpinalHDL 是 Scala 語(yǔ)言的一個(gè)庫(kù),SpinaHDL 環(huán)境搭建所需的軟件開(kāi)發(fā)
    發(fā)表于 10-17 15:33

    SpinalHDL設(shè)計(jì)錯(cuò)誤總結(jié)相關(guān)資料分享

    1、SpinalHDL設(shè)計(jì)錯(cuò)誤  SpinalHDL編譯器會(huì)做很多設(shè)計(jì)檢查,來(lái)確保生成的VHDL/Verilog是可仿真的可綜合的。基本上,SpinalHDL不會(huì)生成破損的VHDL/
    發(fā)表于 10-24 15:37

    基于Windows系統(tǒng)的SpinalHDL開(kāi)發(fā)環(huán)境搭建步驟

    開(kāi)發(fā)所需軟件SpinaHDL環(huán)境搭建所需的軟件安裝包,SpinalHDL是Scala語(yǔ)言的一個(gè)庫(kù),開(kāi)發(fā)Scala需要使用IDEA軟件;JDK17、SDK:Scala2.12.15,SBT1.5.5
    發(fā)表于 10-24 15:40

    VerilogSpinalHDL

    不點(diǎn)藍(lán)字,何來(lái)故事?  學(xué)習(xí)SpinalHDL已有近半年,其誠(chéng)然小眾,但“小家碧玉”未嘗不是絕代佳人。出坑Verilog遙想當(dāng)年本科之時(shí)畫(huà)過(guò)電路PCB、玩兒過(guò)單片機(jī)、PLC,亦學(xué)...
    發(fā)表于 12-20 18:56 ?3次下載
    從<b class='flag-5'>Verilog</b>到<b class='flag-5'>SpinalHDL</b>

    SpinalHDL中的對(duì)應(yīng)關(guān)系及聲明形式

    針對(duì)SpinalHDL中的兩大類型Reg、Wire,來(lái)梳理下在SpinalHDL中的對(duì)應(yīng)關(guān)系及聲明形式。
    的頭像 發(fā)表于 07-03 11:02 ?1475次閱讀

    SpinalHDL里如何實(shí)現(xiàn)Sobel邊緣檢測(cè)

    書(shū)接上文,趁著今天休假,采用SpinalHDL做一個(gè)小的demo,看看在SpinalHDL里如何優(yōu)雅的實(shí)現(xiàn)Sobel邊緣檢測(cè)。
    的頭像 發(fā)表于 08-26 08:59 ?1218次閱讀

    SpinalHDL BlackBox時(shí)鐘與復(fù)位

    SpinalHDL中使用之前已有的Verilog等代碼的時(shí)候需要將這些代碼包在一個(gè)BlackBox里面,但是如果這些代碼里面有時(shí)鐘和復(fù)位,我們需要怎么將時(shí)鐘和復(fù)位端口和SpinalHDL中已有的時(shí)鐘域連接起來(lái)呢?
    的頭像 發(fā)表于 05-04 11:13 ?736次閱讀
    <b class='flag-5'>SpinalHDL</b> BlackBox時(shí)鐘與復(fù)位

    SpinalHDL Simulation性能提升測(cè)試

    昨晚看SpinalHDL的Issues,其中有一個(gè)關(guān)于性能提升的case 吸引到了我,嘗試實(shí)驗(yàn)到深夜,測(cè)試下在SpinalHDL以及cocotb下的性能優(yōu)化手段。
    的頭像 發(fā)表于 08-06 17:10 ?702次閱讀
    <b class='flag-5'>SpinalHDL</b> Simulation性能提升測(cè)試