如何使用Vitis Model Composer從建模到部署生成FPGA IP核
在當(dāng)今快節(jié)奏的世界中,技術(shù)正以前所未有的速度發(fā)展,FPGA設(shè)計(jì)也不例外。高級(jí)工具正在迅速出現(xiàn),以前所未有的速度加速開發(fā)。傳統(tǒng)上,F(xiàn)PGA設(shè)計(jì)包括用硬件描述語言(hdl)編寫代碼,并使用合成工具來映射設(shè)計(jì)。雖然這些傳統(tǒng)方法仍然是必不可少的,但像Vitis Model Composer和HDL Coder這樣的工具已經(jīng)大大簡(jiǎn)化了開發(fā)過程,特別是對(duì)于基于sdr和fpga的系統(tǒng)。BAE系統(tǒng)公司的一位高級(jí)官員表示:“一位擁有多年VHDL編程經(jīng)驗(yàn)的工程師用我們的傳統(tǒng)設(shè)計(jì)流程手工編寫了一個(gè)功能齊全的SDR波形,耗時(shí)645小時(shí)。另一位經(jīng)驗(yàn)有限的工程師使用Simulink和Xilinx System Generator在不到46小時(shí)內(nèi)完成了相同的項(xiàng)目。”
“一位擁有多年VHDL編程經(jīng)驗(yàn)的工程師使用我們的傳統(tǒng)設(shè)計(jì)流程手工編寫了一個(gè)功能齊全的SDR波形,耗時(shí)645小時(shí)。另一位經(jīng)驗(yàn)有限的工程師使用Simulink和Xilinx System Generator在不到46小時(shí)內(nèi)完成了相同的項(xiàng)目?!?
今天的教程提供了創(chuàng)建自定義IP的分步指南,從算法開發(fā)到為IP生成準(zhǔn)備模型,包括資源和時(shí)序分析,最后將其添加到Vivado IP目錄。
介紹
在所有的信號(hào)處理應(yīng)用中,檢測(cè)噪聲中的信號(hào)是至關(guān)重要的,因?yàn)樵肼暿菐缀跛袛?shù)字系統(tǒng)的固有部分。準(zhǔn)確的檢測(cè)是確??煽客ㄐ藕蛿?shù)據(jù)處理的關(guān)鍵。在今天的教程中,我們將開發(fā)一種算法,用于確定頻率未知的信號(hào)中是否存在脈沖。在處理噪聲信號(hào)時(shí),這種類型的檢測(cè)尤其重要,因?yàn)閷⒚}沖與背景噪聲區(qū)分開來可能具有挑戰(zhàn)性。我們將通過所需的步驟來創(chuàng)建一個(gè)強(qiáng)大的算法,可以有效地識(shí)別脈沖的存在,無論信號(hào)的頻率,在一個(gè)嘈雜的環(huán)境。
環(huán)境設(shè)置
Vitis Model Composer是Vitis套件的一部分,它為基于fpga的加速提供了一個(gè)高級(jí)設(shè)計(jì)環(huán)境。要學(xué)習(xí)本教程,請(qǐng)確保在您的系統(tǒng)上安裝了Vitis套件,并且在您的終端中有正確的源代碼。執(zhí)行如下命令:
一旦獲得了Vitis,您就可以通過在終端中執(zhí)行以下命令來啟動(dòng)Vitis Model Composer:
這將打開MATLAB與AMD工具箱啟用。在MATLAB中,打開Simulink,您現(xiàn)在就可以開始使用Vitis Model Composer設(shè)計(jì)和模擬您的模型。
信號(hào)一代
在Simulink中,我們嘗試模擬啁啾脈沖信號(hào)進(jìn)行分析。為了實(shí)現(xiàn)這一點(diǎn),我們使用Chirp塊生成調(diào)頻信號(hào),然后將其與脈沖發(fā)生器塊相乘,將其塑造成不同的脈沖。為了使模擬更真實(shí),更接近現(xiàn)實(shí)世界的場(chǎng)景,我們?cè)谛盘?hào)中引入了高斯白噪聲。該附加功能模擬了實(shí)際系統(tǒng)中不可避免的噪聲,使我們能夠分析在噪聲條件下檢測(cè)和處理信號(hào)的效果。
包絡(luò)檢波
在信號(hào)生成后,為了實(shí)現(xiàn)脈沖檢測(cè),我們首先對(duì)信號(hào)進(jìn)行平方,以去除負(fù)值,然后進(jìn)行FIR抽取,然后進(jìn)行低通濾波器。simulink模塊設(shè)計(jì)如圖5所示。
包絡(luò)提取后的信號(hào)如圖8所示。
如圖8所示,應(yīng)用包絡(luò)檢測(cè)算法后,信號(hào)幅度明顯增大,有效地將其與噪聲區(qū)分開來。在噪聲區(qū)域內(nèi),不存在不必要的過渡,使其更容易從背景中區(qū)分脈沖。這種增強(qiáng)提高了我們準(zhǔn)確確定信號(hào)中是否存在脈沖的能力,從而導(dǎo)致更可靠的檢測(cè)。
基于信號(hào)的這種后處理,選擇一個(gè)恒定的閾值來確定脈沖的存在變得更加容易。該模塊輸出‘1’或‘0 ’,表示是否檢測(cè)到脈沖。然而,不使用固定的閾值,可以通過使用基于標(biāo)準(zhǔn)差的分析等方法使閾值自適應(yīng)來進(jìn)一步改進(jìn)檢測(cè)。該方法允許系統(tǒng)根據(jù)噪聲變化動(dòng)態(tài)調(diào)整閾值,提高在不同信號(hào)條件下的檢測(cè)精度。最終的simulink模型如圖9所示。
最終結(jié)果
檢測(cè)結(jié)果如下所示
在針對(duì)多個(gè)測(cè)試用例成功驗(yàn)證算法之后,下一步是使用Vitis Model Composer復(fù)制類似的結(jié)果。要生成IP并執(zhí)行其他相關(guān)功能,首先需要從Simulink庫中插入Vitis Model Composer Hub塊。這可以在下面找到:
Simulink庫瀏覽器→AMD工具箱→實(shí)用工具→代碼生成→Vitis模型編寫器中心
Vitis Model Composer Hub作為中心流程顧問,指導(dǎo)從設(shè)計(jì)到代碼生成的整個(gè)過程,確保與Vitis工具鏈的無縫集成。
板的選擇
對(duì)于本教程,我使用Zynq UltraScale+ MPSoC ZCU102板。但是,您可以選擇任何可用的主板,只要它來自AMD(以前的Xilinx)。
要選擇一個(gè)板,打開Vitis Model Composer Hub并按照下圖所示的步驟操作。單板選擇過程確保生成的IP和設(shè)計(jì)配置與您的特定硬件平臺(tái)兼容。
模型創(chuàng)建
對(duì)于IP核的生成,AMD給出了一些具體的指導(dǎo)方針。要學(xué)習(xí)本教程,請(qǐng)記住以下幾點(diǎn)。
網(wǎng)關(guān)輸入/輸出塊作為輸入/輸出進(jìn)行測(cè)試
這些端口之間的任何內(nèi)容都將被vitis模型編寫器中心自動(dòng)識(shí)別,并可以轉(zhuǎn)換為ip。
為了使vitis模型編寫器中心能夠識(shí)別執(zhí)行功能的所需模塊轉(zhuǎn)換為子系統(tǒng),AMD為IP核生成提供了具體的指導(dǎo)方針-因?yàn)?,?dāng)然,設(shè)計(jì)硬件還不夠復(fù)雜!要成功地遵循本教程,請(qǐng)記住以下幾點(diǎn):
網(wǎng)關(guān)In/Out塊被視為輸入和輸出??梢园阉鼈兛醋魇菙?shù)據(jù)的VIP入口和出口。
這些端口之間的任何內(nèi)容都將被Vitis Model Composer Hub自動(dòng)檢測(cè),并可以轉(zhuǎn)換為類似ip的魔法,但需要更多的調(diào)試。
為了正確識(shí)別,任何執(zhí)行功能的塊都必須轉(zhuǎn)換為子系統(tǒng)。如果您不這樣做,Vitis可能會(huì)假裝從未見過它們。
網(wǎng)關(guān)在/
現(xiàn)在是時(shí)候在您的模塊設(shè)計(jì)中插入兩個(gè)Gateway In和Gateway Out模塊了,因?yàn)楹苊黠@,Simulink還不能讀取您的思想。
將信號(hào)產(chǎn)生分系統(tǒng)的輸出連接到網(wǎng)關(guān)In的輸入端。這確保了你精心制作的信號(hào)有一個(gè)合適的切入點(diǎn)。
如果您還沒有從信號(hào)生成過程中創(chuàng)建一個(gè)子系統(tǒng),那么現(xiàn)在是時(shí)候這樣做了——因?yàn)槭止趧?dòng)仍然是自動(dòng)化世界中的一件事。
類似地,為信封檢測(cè)算法創(chuàng)建一個(gè)子系統(tǒng),確保它只由通用的Simulink塊組成。這里沒有捷徑!
根據(jù)下圖所示的設(shè)置修改Gateway In塊參數(shù)——因?yàn)槟J(rèn)設(shè)置從來都不是我們所需要的,不是嗎?同時(shí),保持Gateway Out塊不變,因?yàn)檫@一次,這個(gè)過程中的某些東西不需要額外的調(diào)整。
IP生成的算法復(fù)制
在Gateway In塊的輸出處,連接一個(gè)乘法塊來計(jì)算樣本的平方—因?yàn)楹苊黠@,Vitis Model Composer不相信內(nèi)置的平方函數(shù)。
由于沒有直接的平方運(yùn)算,下面是解決方法:
將相同的輸入輸入到第一個(gè)乘法塊的兩個(gè)端口。瞧!你用老辦法平方了這個(gè)值。
現(xiàn)在,為了進(jìn)行額外的數(shù)學(xué)練習(xí),取另一個(gè)乘法塊,并將其輸出與前一個(gè)乘法塊的結(jié)果相加——因?yàn)闆]有什么比為一個(gè)函數(shù)使用多個(gè)塊更“工程”的了。
最后,將第二個(gè)輸入連接到一個(gè)值為4的常量塊,有效地提高幅度水平。
這些塊的塊參數(shù)如下圖所示
此時(shí),您的圖形模型應(yīng)該如圖16所示。
對(duì)于抽取,雖然預(yù)先構(gòu)建的抽取塊在Simulink的通用庫中可用,但它不包括在AMD工具箱中。然而,我們可以使用低通濾波器和下采樣器來實(shí)現(xiàn)相同的功能,兩者都可以在AMD工具箱中獲得。
要實(shí)現(xiàn)這一點(diǎn):
在第二個(gè)乘法器的輸出端,在下采樣之前添加一個(gè)數(shù)字FIR濾波器來平滑信號(hào)。
然后使用AMD工具箱中的Downsample塊來降低采樣率。
為了設(shè)計(jì)過濾器,我們將使用FDA工具,它提供了一個(gè)用戶友好的界面來指定過濾器參數(shù)。
注意:將FDA工具放在設(shè)計(jì)的根級(jí)別(在更高的級(jí)別,而不是在任何子系統(tǒng)中)。它可以在下面找到:
Simulink庫瀏覽器→AMD工具箱→實(shí)用程序→工具→FDATool
FDAToolPulse檢測(cè)輸出模型作曲家流
雙擊FDA工具塊打開其配置窗口。修改如下圖所示的參數(shù),以確保結(jié)果的精確復(fù)制。這些設(shè)置將定義適當(dāng)?shù)男盘?hào)處理所需的濾波器特性。
要在模型中使用設(shè)計(jì)好的濾波器,請(qǐng)打開我們之前插入的FIR濾波器的塊參數(shù)。在“系數(shù)向量”字段下,輸入如下一行:
這將FIR濾波器連接到FDA工具生成的系數(shù),確保正確應(yīng)用設(shè)計(jì)的濾波器。此塊的確切配置如圖18所示。
應(yīng)用更改后,在繼續(xù)下一步之前,請(qǐng)驗(yàn)證過濾器是否按預(yù)期運(yùn)行。類似地,打開Downsample塊的塊參數(shù),并根據(jù)圖19修改其設(shè)置,以確保正確的功能。這些調(diào)整將配置下采樣過程以匹配設(shè)計(jì)要求。
過濾
在抽取步驟之后,添加另一個(gè)低通濾波器以進(jìn)一步細(xì)化信號(hào)。在過濾器塊參數(shù)的系數(shù)向量字段中,輸入以下一行:
它使用Parks-McClellan算法定義濾波器,指定所需的頻率響應(yīng)。根據(jù)圖20配置其余參數(shù),以確保正確實(shí)現(xiàn)。
最終框圖
最終的Simulink框圖如圖21所示。在濾波器的輸出端,使用一個(gè)關(guān)系運(yùn)算符塊將過濾后的信號(hào)與一個(gè)常數(shù)閾值2.5進(jìn)行比較。該塊輸出1或0,表示信號(hào)是否超過閾值,有效地對(duì)脈沖檢測(cè)做出判斷。
如圖21所示,已經(jīng)創(chuàng)建了多個(gè)子系統(tǒng)來組織設(shè)計(jì)。您可以類似地構(gòu)建模型,也可以通過將從Gateway In到Gateway Out的所有內(nèi)容封裝到單個(gè)子系統(tǒng)中來簡(jiǎn)化模型。
塊設(shè)計(jì)現(xiàn)在已經(jīng)完成,我們準(zhǔn)備繼續(xù)進(jìn)行代碼生成。在進(jìn)入下一步之前,請(qǐng)確保所有配置都設(shè)置正確。
最終結(jié)果(模型編輯器流程)
在這一點(diǎn)上模擬設(shè)計(jì),如果兩個(gè)輸出正常的simulink流和模型編寫器流是相似的意味著你已經(jīng)成功地復(fù)制了算法。我的結(jié)果完全匹配如下所示。
代碼/ IP代
再次打開Vitis Model Composer Hub。如果正確地遵循了所有步驟,那么您的系統(tǒng)現(xiàn)在應(yīng)該在Code Generation選項(xiàng)卡下列出,并帶有綠色的復(fù)選標(biāo)記,表明它已準(zhǔn)備好進(jìn)行進(jìn)一步處理。
此外,在同一選項(xiàng)卡下,您將看到四個(gè)不同的部分:
設(shè)置:包含與時(shí)鐘配置和目標(biāo)語言選擇相關(guān)的一般設(shè)置。
分析:用于時(shí)間和資源分析,確保設(shè)計(jì)滿足硬件約束。
在硬件上驗(yàn)證:此選項(xiàng)允許您在實(shí)際硬件上測(cè)試設(shè)計(jì),驗(yàn)證其實(shí)際性能。(我們不討論這個(gè))
導(dǎo)出:允許導(dǎo)出生成的IP,使其可以集成到Vivado或其他工具中。
根據(jù)圖22所示的步驟配置所有這些設(shè)置。
分析
Analysis部分是一個(gè)非常有用的實(shí)用程序,它允許您在合成和實(shí)現(xiàn)之后執(zhí)行計(jì)時(shí)和資源分析。這有助于做出明智的設(shè)計(jì)決策、優(yōu)化資源利用和微調(diào)算法以獲得更好的性能。
要執(zhí)行分析,請(qǐng)遵循下圖所示的步驟。這將提供對(duì)時(shí)間限制、資源消耗和整體系統(tǒng)效率的洞察,允許您在最終部署之前根據(jù)需要改進(jìn)設(shè)計(jì)
在單擊Analyze之后,Vitis Model Composer將花費(fèi)一些時(shí)間來處理設(shè)計(jì),并根據(jù)您的選擇生成時(shí)序和資源分析報(bào)告。
時(shí)序分析報(bào)告提供了有關(guān)時(shí)鐘頻率、延遲和設(shè)置/保持違規(guī)的詳細(xì)信息,有助于確保您的設(shè)計(jì)滿足時(shí)序限制。
資源分析報(bào)告分解了lut、dsp、bram和ff的使用情況,提供了對(duì)硬件利用率和優(yōu)化機(jī)會(huì)的見解。
我們?cè)O(shè)計(jì)的時(shí)序和資源分析報(bào)告分別如圖24和25所示。檢查這些報(bào)告,以確認(rèn)您的設(shè)計(jì)滿足所需的性能和資源限制,然后再繼續(xù)。
出口
導(dǎo)出部分是我們?yōu)閂ivado完成和導(dǎo)出IP的地方。為了確保順利集成,請(qǐng)按照?qǐng)D26所示的方式配置設(shè)置,然后單擊Export。這將花費(fèi)一些時(shí)間,并將出現(xiàn)與圖27類似的消息。
這個(gè)過程將生成必要的IP文件,使它們準(zhǔn)備好在Vivado的IP Catalog中使用。導(dǎo)出后,您可以輕松地將自定義IP集成到Vivado設(shè)計(jì)流中,以便進(jìn)一步處理和實(shí)現(xiàn)。
添加自定義到Vivado
打開Vivado并創(chuàng)建一個(gè)新項(xiàng)目。項(xiàng)目設(shè)置完成后,導(dǎo)航到頂部欄,單擊Tools,然后選擇Settings。
按照?qǐng)D28所示的步驟配置所需的設(shè)置。此步驟確保正確設(shè)置Vivado以識(shí)別導(dǎo)出的自定義IP并將其集成到您的項(xiàng)目中。
成功完成所有步驟后,您的自定義IP現(xiàn)在就可以集成到Vivado中了。該IP可以無縫地用于IP集成商和塊設(shè)計(jì),使其成為FPGA開發(fā)工作流程的多功能補(bǔ)充。
將IP添加到您的模塊設(shè)計(jì)中:
?在Vivado中打開框圖。
?按CTRL + I調(diào)出IP搜索欄。
?鍵入自定義IP的名稱,選擇它,并將其添加到設(shè)計(jì)中。
?瞧!您的IP現(xiàn)在已經(jīng)完全集成,可以進(jìn)行進(jìn)一步的執(zhí)行和測(cè)試。
結(jié)論
隨著自定義IP的成功創(chuàng)建和集成,您已經(jīng)完成了FPGA開發(fā)的關(guān)鍵步驟。這種工作流程不僅簡(jiǎn)化了IP設(shè)計(jì)過程,還提高了未來項(xiàng)目的效率、模塊化和可擴(kuò)展性。通過利用Vitis Model Composer和Vivado,您可以確保從算法開發(fā)到硬件實(shí)現(xiàn)的無縫過渡。
隨著您的發(fā)展,進(jìn)一步的優(yōu)化、硬件驗(yàn)證和性能調(diào)優(yōu)將使您的設(shè)計(jì)更適合實(shí)際應(yīng)用程序。這標(biāo)志著更先進(jìn)的基于fpga的解決方案的基礎(chǔ),為高性能,硬件加速系統(tǒng)鋪平了道路。
本文編譯自hackster.io