Alveo系列開發板上的平臺其實是一個DFX設計的靜態部分,在Vitis 統一軟件平臺中使用Alveo系列開發板設計加速Kernel, 最終這些Kernel的邏輯會在分布在DFX設計的動態區域。
本篇將介紹如何為Kernel的邏輯做floorplan(畫Pblock),人為控制Kernel邏輯的布局。
我們以經典Example design“Vector Addition” 為例:
1. 打開Vitis 2020.2,創建新的 Application Project
File -> New -> Application project
2. 選擇xilinx_u200_qdma_201910_1平臺 (本篇討論的方法不局限于某個具體平臺)
3. 選擇打開Example Design "Vector Addition"
4. 對Hardware Flow 在Link階段設置 "-R2",然后Build
此處report level 選擇-R2:VPL(Vitis Platform link) 過程輸出更多中間文件, 后續我們會用到畫Kernel Pblock所需要的opt.dcp
![pYYBAGGYHrqAfItSAADnwMZ_bJo435.png](https://file.elecfans.com/web2/M00/1F/69/pYYBAGGYHrqAfItSAADnwMZ_bJo435.png)
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. 把這個XX_opt.dcp拷貝到另外的目錄,并用Vivado打開這個dcp 文件
![pYYBAGGYHruAbYjgAABXk7VZLSg742.png](https://file.elecfans.com/web2/M00/1F/69/pYYBAGGYHruAbYjgAABXk7VZLSg742.png)
7. 查看已有的Pblock。主菜單 Window -> Physical Constraints
![poYBAGGYHryAQmyOAAChXbBCUpw194.png](https://file.elecfans.com/web2/M00/1F/62/poYBAGGYHryAQmyOAAChXbBCUpw194.png)
在這個視圖可以看到平臺已經為動態區域在各個SLR中設置了相應的Pblock, 而且需要注意的是,設計中已有的Pblock是有層級關系的
例如:pblock_dynamic_region 包含三個下級pblock:
pblock_dynamic_SLR0,
pblock_dynamic_SLR1,
pblock_dynamic_SLR2,
提醒:不同平臺SLR的數目也可能是不同的. 不同平臺中自帶pblock的名字有差異是正常的. 需要用戶自己觀察.
為Kernel模塊生成的Pblock應該是pblock_dynamic_SLR0 這一級Pblock 的子模塊, 工具支持把同一個Kernel的不同部分放置到多個SLR中,用戶需要保證跨SLR路徑的時序.
8. 為Kernel模塊畫Pblock
在這里嘗試把Kernel 放置在pblock_dynamic_SLR0所屬的中心區域
. 在Vivado的Netlist View中選中Kernel 模塊
例子中的模塊名是 pfm_top_i/dynamic_region/krnl_vadd_1
. 可以在Cells properties 窗口看到這個模塊當前所屬的Pblock是pblock_dynamic_region
![poYBAGGYHr6AIziMAACysjYj0-M030.png](https://file.elecfans.com/web2/M00/1F/62/poYBAGGYHr6AIziMAACysjYj0-M030.png)
. 點擊Device 視圖中的"Draw Pblock" 按鈕, 在Device視圖上原有pblock_dynamic_SLR0的范圍內畫一個方框,新畫的Pblock所覆蓋面積要被原Pblock完全包含. 畫完之后還可以選中Pblock微調Pblock的邊界,同時為了不影響原來Pblock的結構,在TCL CONSOLE中用以下命令把新Pblock的Parent Pblock設置成pblock_dynamic_SLR0:
set_property PARENT pblock_dynamic_SLR0 [get_pblocks pblock_krnl_vadd_1]
. 再看Kernel 模塊的Pblock屬性,已經變為pblock_krnl_vadd_1
![poYBAGGYHr-AHfvDAADrNWsvQGQ739.png](https://file.elecfans.com/web2/M00/1F/62/poYBAGGYHr-AHfvDAADrNWsvQGQ739.png)
在TCL CONSOLE中會打印出了畫pblock相應的約束,我們可以將這些約束拷貝到一個新的tcl文件中保存.
(在這里保存到kernel_pblock.tcl)
![pYYBAGGYHsCARyabAAAxDcQd3OM287.png](https://file.elecfans.com/web2/M00/1F/69/pYYBAGGYHsCARyabAAAxDcQd3OM287.png)
看下更新的Pblock結構,新生成的pblock_krnl_vadd_1 是pblock_dynamic_SLR0的Child Pblock
![poYBAGGYHsGAOkNOAACQ0GpIHoc098.png](https://file.elecfans.com/web2/M00/1F/62/poYBAGGYHsGAOkNOAACQ0GpIHoc098.png)
繼續在TCL CONSOLE執行 place_design 命令完成布局
理論上這一步可以跳過,如果你確信你畫的Pblock沒有問題的話。
完成place_design之后,可以觀察一下Kernel 的資源在Device 上的實際分布情況
![pYYBAGGYHsKAVCzaAADZaA1Fa9I356.png](https://file.elecfans.com/web2/M00/1F/69/pYYBAGGYHsKAVCzaAADZaA1Fa9I356.png)
可以看到Kernel的邏輯全部都分布在剛才所畫的Pblock 區域內
![poYBAGGYHsSAGaCAAAGp_Tb6WxI859.png](https://file.elecfans.com/web2/M00/1F/62/poYBAGGYHsSAGaCAAAGp_Tb6WxI859.png)
![pYYBAGGYHsWAZntAAAMwSamYIG4356.png](https://file.elecfans.com/web2/M00/1F/69/pYYBAGGYHsWAZntAAAMwSamYIG4356.png)
9. 在Vitis的link階段做以下設置,使之前保存的畫Pblock的命令在VPL(Vitis Platform link) 的place_design步驟執行之前生效
--vivado.prop run.impl_1.STEPS.PLACE_DESIGN.TCL.PRE=XX/kernel_pblock.tcl
![pYYBAGGYHseAJnhHAADl-uS05aY930.png](https://file.elecfans.com/web2/M00/1F/69/pYYBAGGYHseAJnhHAADl-uS05aY930.png)
10. 重新build Vitis 的Hardware flow, 之前加入的命令就會生效。
總結: 這就是一個簡單的為Kernel邏輯創建面積約束(Pblock)的過程, 實際用戶也可以為Kernel的子模塊創建Pblock,這方面工具沒有限制。
審核編輯:劉清
-
開發板
+關注
關注
25文章
5121瀏覽量
98195 -
Kernel
+關注
關注
0文章
48瀏覽量
11235
發布評論請先 登錄
相關推薦
使用AMD Vitis進行嵌入式設計開發用戶指南
![使用AMD <b class='flag-5'>Vitis</b>進行嵌入式設計開發用戶指南](https://file1.elecfans.com/web3/M00/05/37/wKgZO2d91oCATzE9AAANPruioLE081.png)
時序約束一主時鐘與生成時鐘
![時序<b class='flag-5'>約束</b>一主時鐘與生成時鐘](https://file1.elecfans.com/web3/M00/00/6A/wKgZPGdJL3mAa0qAAAATtpEneAs782.png)
AMD Vitis Unified Software Platform 2024.2發布
如何在TMS320C6727 DSP上創建基于延遲的音頻效果
![如<b class='flag-5'>何在</b>TMS320C6727 DSP上<b class='flag-5'>創建</b>基于延遲的音頻效果](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
如何在Draftsman中創建PCB制造圖紙
![如<b class='flag-5'>何在</b>Draftsman<b class='flag-5'>中</b><b class='flag-5'>創建</b>PCB制造圖紙](https://file1.elecfans.com/web2/M00/FC/B5/wKgZomaVzYWASXeSAAIGDcKske8405.png)
如何在引腳映射器文件中添加TC322?
linux kernel通過修改鏈接腳本lds文件,如何在esp32的linker.lf文件中實現?
在Windows 10上創建并運行AMD Vitis?視覺庫示例
![在Windows 10上<b class='flag-5'>創建</b>并運行AMD <b class='flag-5'>Vitis</b>?視覺庫示例](https://file1.elecfans.com/web2/M00/E3/03/wKgaomY7FfGACGydAAATP3RldMw890.png)
Xilinx FPGA的約束設置基礎
![Xilinx FPGA的<b class='flag-5'>約束</b>設置基礎](https://file1.elecfans.com/web2/M00/DB/6A/wKgZomYrb5WAQePpAAAK28w_-08592.png)
評論