在 AXI 基礎(chǔ)第 6 講 - Vitis HLS 中的 AXI4-Lite 簡(jiǎn)介中,使用 C 語(yǔ)言在 HLS 中創(chuàng)建包含 AXI4-Lite 接口的 IP。
在本篇博文中,我們將學(xué)習(xí)如何導(dǎo)出 IP 以供在 Vivado Design Suite 中使用、如何將其連接到其它 IP 核與處理器以及如何在板上運(yùn)行工程。
本篇博文將分為 3 個(gè)部分:
1. 從 Vitis HLS 導(dǎo)出 IP。
2. 使用Vivado Design Suite創(chuàng)建硬件。
3. 在Vitis 統(tǒng)一軟件平臺(tái)中編寫(xiě)軟件并在板上運(yùn)行。
1. 導(dǎo)出 IP
在AXI 基礎(chǔ)第 6 講 - Vitis HLS 中的 AXI4-Lite 簡(jiǎn)介中(AXI 第六講請(qǐng)回復(fù)本公眾號(hào)AXI 獲得),我們創(chuàng)建了 1 個(gè)包含 AXI4-Lite 接口的 IP。如果要把新 IP 連接到任何其它 IP 或者連接到 PS,則首先需要將軟件代碼綜合成 RTL(即,將其轉(zhuǎn)換為硬件)。隨后,我們就可以將 RTL IP 導(dǎo)出到 Vivado Design Suite,以便在其中將其連接到其它 IP 核或者連接到 PS。
1.1. 按如下所示編輯代碼,然后保存。
int example(char *a, char *b, char *c) { #pragma HLS INTERFACE s_axilite port=a bundle=BUS_A #pragma HLS INTERFACE s_axilite port=b bundle=BUS_A #pragma HLS INTERFACE s_axilite port=c bundle=BUS_A #pragma HLS INTERFACE s_axilite port=return bundle=BUS_A *c += *a + *b; int result = 0; result = *c; return result; }
1.2. 鑒于我們將在板上運(yùn)行此代碼,因此需要將綜合設(shè)置更改為對(duì)應(yīng)于可用的開(kāi)發(fā)板的設(shè)置。
我這里選擇的是 Zynq UltraScale+ ZCU106 評(píng)估板。要更改所使用的開(kāi)發(fā)板,請(qǐng)轉(zhuǎn)至“解決方案 (Solution) -> 解決方案設(shè)置 (Solution Settings) -> 綜合設(shè)置 (Synthesis Settings)”,然后選擇如下所示高亮的“...”即可選擇可用的開(kāi)發(fā)板。
1.3. 選擇屏幕頂部的綠色運(yùn)行按鈕 即可運(yùn)行 C 語(yǔ)言綜合。這樣即可將代碼轉(zhuǎn)換為 RTL:
1.4. 完成綜合后,您可選擇“導(dǎo)出 RTL (ExportRTL)”工具欄按鈕,或者也可以單擊“解決方案 (Solution) -> 導(dǎo)出 RTL (Export RTL)”以打開(kāi)“Export RTL”對(duì)話框。
1.5. 打開(kāi)的對(duì)話框應(yīng)如下截屏所示。
本文包含有關(guān)所有可用選項(xiàng)的詳細(xì)解釋。
- 選擇“配置 (configuration)”選項(xiàng),為新 RTL IP 添加詳細(xì)信息。將顯示名稱更改為“Example”,然后選擇“確定 (OK)”。當(dāng)您在 Vivado Design Suite 中打開(kāi)自己的 IP 時(shí),將顯示此名稱。
- 選擇“瀏覽 (Browse)”按鈕以選擇 Vivado IP (.zip) 文件的輸出位置及其名稱。輸出的 ZIP 文件將包含您的 RTL IP,您可將其導(dǎo)入 Vivado Design Suite。
?
1.6. 等待工具完成導(dǎo)出,然后打開(kāi) Vivado Design Suite。選擇“創(chuàng)建新工程”選項(xiàng):
1.7. 對(duì)于后續(xù)所有其它步驟,請(qǐng)選擇“下一步 (Next)”。選擇器件時(shí),請(qǐng)務(wù)必選擇您在創(chuàng)建工程時(shí)所選的器件。如果您不確定,可在 Vitis HLS 中的“解決方案設(shè)置 (solution settings) -> 綜合設(shè)置 (synthesis settings)”下找到該器件。如果您選擇其它器件,那么將您的 IP 導(dǎo)入 Vivado Design Suite 時(shí)可能會(huì)出現(xiàn)問(wèn)題。
最后,選擇“完成 (Finish)”以打開(kāi)空工程。
1.8. 要使用 Vivado 工程中生成的 IP,首先必須將新 IP 存儲(chǔ)庫(kù)添加到 Vivado 工程中。此處所示文件夾包含從 Vitis HLS 導(dǎo)出的 .zip 文件。要添加存儲(chǔ)庫(kù),請(qǐng)選擇“設(shè)置 (Settings) -> IP -> 存儲(chǔ)庫(kù) (Repository)”。選擇 + 按鈕并在 Vitis HLS 中選擇 IP 導(dǎo)出的位置(即,以上第 6 步)。
選擇位于對(duì)話框底部的“應(yīng)用 (Apply)”按鈕,然后選擇“確定 (OK)”。
1.9. 選擇 IP 目錄 (Select IP Catalog)?,F(xiàn)在,您的新存儲(chǔ)庫(kù)應(yīng)已顯示在目錄中。
如已成功導(dǎo)入 IP,那么詳細(xì)信息窗口中所列出的 IP 數(shù)量應(yīng)為“1”。
注:如果列出的 IP 數(shù)量為 0,那么您可右鍵單擊自己的新存儲(chǔ)庫(kù)并選擇“將 IP 添加到存儲(chǔ)庫(kù)中 (Add IP to Repository)”。選擇您從 Vitis HLS 導(dǎo)出的 ZIP 文件。隨后,存儲(chǔ)庫(kù)中的 IP 數(shù)量應(yīng)已顯示為“1”。如果未顯示正確數(shù)量,請(qǐng)檢查您在 Vitis HLS 中所選的板/器件與您在 Vivado 中所使用的是否相同,否則,則表示您的 IP 可能不兼容。
1.10. 在 Flow Navigator 中,選擇“創(chuàng)建模塊設(shè)計(jì) (Create Block Design)”。
在顯示的選項(xiàng)卡中,選擇 + 按鈕并搜索您在第 6 步中在 Vitis HLS 中指定的 IP 名稱(即,Example)。
祝賀您!您已成功創(chuàng)建了 IP、將其從 Vitis HLS 導(dǎo)出并已添加到 Vivado Design Suite 中的模塊設(shè)計(jì)中。
單擊 s_axi_BUS_A 旁的 + 按鈕即可展開(kāi)端口。如需獲取更多相關(guān)信息,請(qǐng)參閱 (PG155 )中的 “端口描述”。https://www.xilinx.com/support/documentation/ip_documentation/axi_lite_i...
2. 創(chuàng)建硬件
您可能會(huì)想要連接到 PS 以便充分利用其功能。添加 PS IP(如 ZCU106 評(píng)估板上提供的 Zynq UltraScale+ MPSoC IP)即可支持您執(zhí)行此操作。如需獲取有關(guān) Zynq UltraScale+ MPSoC IP 的更多信息,請(qǐng)參閱:https://china.xilinx.com/content/xilinx/en/products/intellectual-propert...
2.1. 將 Zynq UltraScale+ MPSoC IP 添加到模塊框圖中。添加完成后,將在屏幕頂部出現(xiàn)一條提示信息。選擇“運(yùn)行自動(dòng)連接功能 (Run Connection Automation)”。
2.2. 這樣即可得到如下圖示?;蛘?,您可為此 IP 手動(dòng)添加所有器件,并如該圖所示連接這些器件。這樣即可得到如下圖示:
2.3. 右鍵單擊“源 (Source)”選項(xiàng)卡下的.bd 以創(chuàng)建 HDL 封裝器 (wrapper)。運(yùn)行綜合、運(yùn)行實(shí)現(xiàn),然后生成比特流。下一步,選擇“文件 (File) -> 導(dǎo)出 (Export) -> 導(dǎo)出硬件 (Export Hardware)”。請(qǐng)務(wù)必選中包含比特流的選項(xiàng),并記下所選導(dǎo)出位置。這樣即可創(chuàng)建包含所有硬件信息的 XSA 文件?,F(xiàn)在,您可以關(guān)閉 Vivado。
3. 編寫(xiě)軟件
鑒于您的硬件已完成創(chuàng)建并導(dǎo)出,我們需要編寫(xiě)軟件以向硬件提供操作指示。我們將在Vitis中編寫(xiě)軟件。您將需要從賽靈思網(wǎng)站下載 Vitis Core 開(kāi)發(fā)套件(查閱:https://china.xilinx.com/support/download/index.html/content/xilinx/en/d... )。
3.1. 打開(kāi) Vitis。在打開(kāi)的菜單中,選擇“創(chuàng)建平臺(tái)工程 (Create Platform Project)”。這將生成工程基本信息,我們將在其中添加硬件信息(XSA 文件)并編寫(xiě)一些軟件定義。出現(xiàn)提示時(shí),請(qǐng)選中“從 XSA 文件創(chuàng)建 (create from XSA file)”選項(xiàng)。隨后,我們需要選擇以上步驟 2.3 中的 XSA 文件導(dǎo)出位置。繼續(xù)完成其它設(shè)置,最后單擊“完成 (Finish)”。
3.2. 下一步,我們需要?jiǎng)?chuàng)建包含軟件的應(yīng)用工程。它將基于我們的平臺(tái)工程,因此其中包含我們的硬件信息,并且我們需要使用該應(yīng)用工程在目標(biāo)板上運(yùn)行應(yīng)用。選擇“文件 (File) -> 新建 (New) -> 新建應(yīng)用工程 (New Application Project)”。
3.3. 出現(xiàn)提示時(shí),選中“選擇存儲(chǔ)庫(kù)中的平臺(tái) (Select a platform from arepository)”選項(xiàng)。選擇步驟 3.1 中創(chuàng)建的平臺(tái)工程,然后單擊“下一步 (Next)”。
3.4. 選擇 Hello World 模板,然后單擊“完成 (Finish)”。
3.5. 現(xiàn)在,Hello World 代碼會(huì)顯示在/src/helloworld.c下。為了執(zhí)行完整性檢查,我們將通過(guò) JTAG 把示例下載到板上,并使用 UART 終端查看 printf 信息。
為此,請(qǐng)連接目標(biāo)板,并打開(kāi)終端仿真器軟件(例如,Tera Term)以讀取輸出消息。如果您不知曉如何執(zhí)行此操作,請(qǐng)參閱板相關(guān)的用戶指南。 編譯并運(yùn)行程序。正確完成此操作后,您應(yīng)可在 Tera Term 中看到 Hello World 打印信息。
3.6. 現(xiàn)在,確認(rèn)板已正確連接后,下一步即可創(chuàng)建使用 HLS IP 的代碼。從Vitis_Code.c復(fù)制代碼(隨附于本教程)并將其粘貼到 helloworld.c 中,替換原有 helloworld 代碼。
保存,然后重新編譯并運(yùn)行軟件。這次 Tera Term 會(huì)提示您提供 2 項(xiàng)輸入:A 和 B,這 2 項(xiàng)將作為輸入一并傳遞給 HLS IP 中,并顯示結(jié)果。
注:由于在 Vitis HLS 中,A 和 B 已定義為“char”類型,因此輸入的值上限為 127。
示例代碼使用由 Vitis 自動(dòng)創(chuàng)建的函數(shù),因此開(kāi)發(fā)非常便捷。
在名為X.h的文件中以及在
/hw/drivers//src 下可找到所使用的函數(shù)。
如需獲取有關(guān)這些函數(shù)的詳細(xì)信息,請(qǐng)參閱:https://china.xilinx.com/html_docs/xilinx2020_1/vitis_doc/axi4liteslavec... 。請(qǐng)查看此文件以及該文件夾中的其它相關(guān)文件。您可通過(guò)編輯這些文件來(lái)進(jìn)一步控制自己的 IP 以及執(zhí)行中斷編程等操作。
祝賀您
現(xiàn)在,您已在 Vitis HLS 中通過(guò) AXI-Lite 接口創(chuàng)建了自己的 IP,并已將其連接到 PS。
如需了解有關(guān) AXI 第一講到第六講的更多信息,請(qǐng)私信本公眾號(hào)回復(fù) AXI 參閱本系列其它教程。
審核編輯:湯梓紅
評(píng)論
查看更多