Alveo系列開(kāi)發(fā)板上的平臺(tái)其實(shí)是一個(gè)DFX設(shè)計(jì)的靜態(tài)部分,在Vitis 統(tǒng)一軟件平臺(tái)中使用Alveo系列開(kāi)發(fā)板設(shè)計(jì)加速Kernel, 最終這些Kernel的邏輯會(huì)在分布在DFX設(shè)計(jì)的動(dòng)態(tài)區(qū)域。
本篇將介紹如何為Kernel的邏輯做floorplan(畫Pblock),人為控制Kernel邏輯的布局。
我們以經(jīng)典Example design“Vector Addition” 為例:
1. 打開(kāi)Vitis 2020.2,創(chuàng)建新的 Application Project
File -> New -> Application project
2. 選擇xilinx_u200_qdma_201910_1平臺(tái) (本篇討論的方法不局限于某個(gè)具體平臺(tái))
3. 選擇打開(kāi)Example Design "Vector Addition"
4. 對(duì)Hardware Flow 在Link階段設(shè)置 "-R2",然后Build
此處report level 選擇-R2:VPL(Vitis Platform link) 過(guò)程輸出更多中間文件, 后續(xù)我們會(huì)用到畫Kernel Pblock所需要的opt.dcp

5. 不用等到生成xclbin文件,VPL完成opt_design步驟之后我們就能看到XX_opt.dcp 文件.
XX_opt .dcp 所在目錄及文件名:
vitis_pblock_u200/vadd_test_system_hw_link/Hardware/binary_container_1.build/link/vivado/vpl/prj/prj.runs/impl_1 pfm_top_wrapper_opt.dcp
6. 把這個(gè)XX_opt.dcp拷貝到另外的目錄,并用Vivado打開(kāi)這個(gè)dcp 文件

7. 查看已有的Pblock。主菜單 Window -> Physical Constraints

在這個(gè)視圖可以看到平臺(tái)已經(jīng)為動(dòng)態(tài)區(qū)域在各個(gè)SLR中設(shè)置了相應(yīng)的Pblock, 而且需要注意的是,設(shè)計(jì)中已有的Pblock是有層級(jí)關(guān)系的
例如:pblock_dynamic_region 包含三個(gè)下級(jí)pblock:
pblock_dynamic_SLR0,
pblock_dynamic_SLR1,
pblock_dynamic_SLR2,
提醒:不同平臺(tái)SLR的數(shù)目也可能是不同的. 不同平臺(tái)中自帶pblock的名字有差異是正常的. 需要用戶自己觀察.
為Kernel模塊生成的Pblock應(yīng)該是pblock_dynamic_SLR0 這一級(jí)Pblock 的子模塊, 工具支持把同一個(gè)Kernel的不同部分放置到多個(gè)SLR中,用戶需要保證跨SLR路徑的時(shí)序.
8. 為Kernel模塊畫Pblock
在這里嘗試把Kernel 放置在pblock_dynamic_SLR0所屬的中心區(qū)域
. 在Vivado的Netlist View中選中Kernel 模塊
例子中的模塊名是 pfm_top_i/dynamic_region/krnl_vadd_1
. 可以在Cells properties 窗口看到這個(gè)模塊當(dāng)前所屬的Pblock是pblock_dynamic_region

. 點(diǎn)擊Device 視圖中的"Draw Pblock" 按鈕, 在Device視圖上原有pblock_dynamic_SLR0的范圍內(nèi)畫一個(gè)方框,新畫的Pblock所覆蓋面積要被原Pblock完全包含. 畫完之后還可以選中Pblock微調(diào)Pblock的邊界,同時(shí)為了不影響原來(lái)Pblock的結(jié)構(gòu),在TCL CONSOLE中用以下命令把新Pblock的Parent Pblock設(shè)置成pblock_dynamic_SLR0:
set_property PARENT pblock_dynamic_SLR0 [get_pblocks pblock_krnl_vadd_1]
. 再看Kernel 模塊的Pblock屬性,已經(jīng)變?yōu)閜block_krnl_vadd_1

在TCL CONSOLE中會(huì)打印出了畫pblock相應(yīng)的約束,我們可以將這些約束拷貝到一個(gè)新的tcl文件中保存.
(在這里保存到kernel_pblock.tcl)

看下更新的Pblock結(jié)構(gòu),新生成的pblock_krnl_vadd_1 是pblock_dynamic_SLR0的Child Pblock

繼續(xù)在TCL CONSOLE執(zhí)行 place_design 命令完成布局
理論上這一步可以跳過(guò),如果你確信你畫的Pblock沒(méi)有問(wèn)題的話。
完成place_design之后,可以觀察一下Kernel 的資源在Device 上的實(shí)際分布情況

可以看到Kernel的邏輯全部都分布在剛才所畫的Pblock 區(qū)域內(nèi)


9. 在Vitis的link階段做以下設(shè)置,使之前保存的畫Pblock的命令在VPL(Vitis Platform link) 的place_design步驟執(zhí)行之前生效
--vivado.prop run.impl_1.STEPS.PLACE_DESIGN.TCL.PRE=XX/kernel_pblock.tcl

10. 重新build Vitis 的Hardware flow, 之前加入的命令就會(huì)生效。
總結(jié): 這就是一個(gè)簡(jiǎn)單的為Kernel邏輯創(chuàng)建面積約束(Pblock)的過(guò)程, 實(shí)際用戶也可以為Kernel的子模塊創(chuàng)建Pblock,這方面工具沒(méi)有限制。
審核編輯:劉清
-
開(kāi)發(fā)板
+關(guān)注
關(guān)注
26文章
6293瀏覽量
118222 -
Kernel
+關(guān)注
關(guān)注
0文章
50瀏覽量
12077
發(fā)布評(píng)論請(qǐng)先 登錄
Vivado時(shí)序約束中invert參數(shù)的作用和應(yīng)用場(chǎng)景
如何在AMD Vitis Unified IDE中使用系統(tǒng)設(shè)備樹(shù)
AMD Vitis AI 5.1測(cè)試版現(xiàn)已開(kāi)放下載
如何在VS code中配置Zephyr集成開(kāi)發(fā)環(huán)境
AMD Vitis AI 5.1測(cè)試版發(fā)布
如何在應(yīng)用程序調(diào)試期間分析棧和堆使用情況
如何在RT-Thread上創(chuàng)建一個(gè)GD32F470工程?
如何在AMD Vitis Unified 2024.2中連接到QEMU
如何在Unified IDE中創(chuàng)建視覺(jué)庫(kù)HLS組件
全新AMD Vitis統(tǒng)一軟件平臺(tái)2025.1版本發(fā)布
使用AMD Vitis Unified IDE創(chuàng)建HLS組件
如何使用AMD Vitis HLS創(chuàng)建HLS IP
西門子再收購(gòu)EDA公司 西門子宣布收購(gòu)Excellicon公司 時(shí)序約束工具開(kāi)發(fā)商
PCB Layout 約束管理,助力優(yōu)化設(shè)計(jì)
一文詳解Vivado時(shí)序約束
如何在Vitis加速設(shè)計(jì)中為Kernel創(chuàng)建面積約束
評(píng)論