使用SDSoC的仿真工具,在基于Zynq的嵌入式系統(tǒng)設(shè)計(jì)中查找并修復(fù)PS / PL性能加速問(wèn)題
得益于賽靈思的SDSoC開(kāi)發(fā)環(huán)境,將您的軟件算法部分卸載到Zynq SoC或Zynq UltraScale + MPSoC的PL(可編程邏輯)以滿(mǎn)足系統(tǒng)性能要求是非常簡(jiǎn)單的。一旦您熟悉了SDSoC的數(shù)據(jù)傳輸選項(xiàng),可以在PS和PL之間來(lái)回移動(dòng)數(shù)據(jù),您可以選擇適合您的設(shè)計(jì)的最佳選擇的數(shù)據(jù)移動(dòng)器。然后,SDSoC的軟件估算工具會(huì)顯示預(yù)期的性能結(jié)果。
然而,當(dāng)在實(shí)際的硅片上進(jìn)行執(zhí)行的最終測(cè)試時(shí),您的系統(tǒng)的性能有時(shí)不符合預(yù)期,您需要發(fā)現(xiàn)原因和治療方法。由于您已將軟件任務(wù)卸載到PL,所以現(xiàn)有的軟件調(diào)試/分析方法并不完全適用,因?yàn)椴⒉皇撬械奶幚矶及l(fā)生在PS中。
您需要確定出現(xiàn)意想不到的性能差距的原因。也許你是數(shù)據(jù)移動(dòng)者的最佳選擇。也許卸載的代碼不是卸載到PL的好候選人。在不了解其原因的情況下,您無(wú)法解決性能問(wèn)題。
您如何調(diào)查和調(diào)試基于Zynq的異構(gòu)嵌入式系統(tǒng)的系統(tǒng)性能,其中部分代碼在PS中運(yùn)行,部分在PL中?
如果您是PL數(shù)據(jù)處理調(diào)試的世界的新人,您可能不熟悉查看PL數(shù)據(jù)流的選項(xiàng)。幸運(yùn)的是,如果您使用SDSoC通過(guò)將其卸載到PL來(lái)加速軟件任務(wù),則有一個(gè)簡(jiǎn)單的解決方案。SDSoC具有仿真功能,用于查看使用整個(gè)系統(tǒng)上下文的PL硬件的模擬操作。
此仿真功能允許您識(shí)別數(shù)據(jù)流進(jìn)出自動(dòng)生成的IP塊的任何時(shí)序問(wèn)題,從而加速卸載的軟件。同樣的功能也可以顯示出卸載的軟件加速本身是否出現(xiàn)意外的放緩。
使用此工具可以幫助您找到性能瓶頸。您可以通過(guò)顯示的仿真信號(hào)波形觀(guān)察您的硬件數(shù)據(jù)流量來(lái)調(diào)查這些潛在的瓶頸。類(lèi)似地,您可以通過(guò)觀(guān)察PS和PL之間的數(shù)據(jù)信號(hào)傳輸數(shù)據(jù)來(lái)調(diào)查接口點(diǎn)。此信息提供了重要的見(jiàn)解,可幫助您查找和修復(fù)您的性能問(wèn)題。
我們將重點(diǎn)介紹Xilinx MMADD示例中的乘法器IP塊,以演示如何調(diào)試/仿真硬件加速功能。為了簡(jiǎn)單起見(jiàn),我們將重點(diǎn)介紹一個(gè)IP塊,乘法乘法器IP塊從乘法和添加示例,如圖1所示。
圖1:擴(kuò)展了端口A的乘法器IP塊以顯示其信號(hào)
我們將在仿真中查看來(lái)自該Mmult IP塊的信號(hào)的波形。具體來(lái)說(shuō),我們將會(huì)看到如上圖所示的A_PORTA信號(hào)。這些信號(hào)表示矩陣A的數(shù)據(jù)輸入,對(duì)應(yīng)于矩陣乘法器函數(shù)的軟件輸入?yún)?shù)A。
要開(kāi)始使用仿真,可以在SDSoC的項(xiàng)目設(shè)置中生成“仿真模型”配置,如圖2所示。
圖2:?jiǎn)⒂梅抡嫠璧膍mult項(xiàng)目設(shè)置
接下來(lái),正常地重建項(xiàng)目。在配置中啟用仿真模型支持構(gòu)建項(xiàng)目后,通過(guò)在“Xilinx工具”菜單選項(xiàng)下選擇“啟動(dòng)/停止仿真”來(lái)運(yùn)行仿真器。當(dāng)窗口打開(kāi)時(shí),選擇“開(kāi)始”啟動(dòng)仿真器。然后,SDSoC將自動(dòng)啟動(dòng)Xilinx Vivado的實(shí)例,該實(shí)例將觸發(fā)SDSoC為您的SDSoC項(xiàng)目中為您創(chuàng)建的子項(xiàng)目自動(dòng)生成的PL項(xiàng)目。
我們特意想查看Mmult IP塊的A_PORTA信號(hào)。這些信號(hào)必須添加到波形窗口,以便在仿真期間查看。通過(guò)在“范圍”窗格中選擇mmult_1塊,可以在“對(duì)象”窗格中查看可用的Mmult信號(hào)。要將A_PORTA信號(hào)添加到波形窗口,請(qǐng)?jiān)?ldquo;對(duì)象”窗格中選擇所有“A_ *”信號(hào),右鍵單擊,然后選擇“添加到波形窗口”,如圖3所示。
圖3:行為模擬 - mmult_1信號(hào)突出顯示
現(xiàn)在,您可以運(yùn)行仿真并查看波形查看器中的信號(hào)狀態(tài)。通過(guò)從“運(yùn)行”下拉菜單中單擊“全部運(yùn)行”啟動(dòng)仿真器,如圖4所示。
圖4:開(kāi)始仿真PL
返回SDSoC的工具鏈環(huán)境,您現(xiàn)在可以運(yùn)行連接到此仿真會(huì)話(huà)的調(diào)試會(huì)話(huà),就像您在目標(biāo)上運(yùn)行的軟件一樣。從“運(yùn)行”菜單選項(xiàng)中,選擇“Debug As - > 1 Launch on Emulator(SDSoC Debugger)”啟動(dòng)調(diào)試會(huì)話(huà),如圖5所示。
圖5:連接調(diào)試會(huì)話(huà)以運(yùn)行PL仿真
現(xiàn)在,您可以步驟或運(yùn)行您的應(yīng)用程序測(cè)試代碼,并查看模擬器中感興趣的信號(hào)。在圖6中顯示的是我們前面所強(qiáng)調(diào)的A_PORTA信號(hào),以及使用Mmult和Add示例測(cè)試代碼在PL邏輯運(yùn)算結(jié)束時(shí)的信號(hào)值。
圖6:仿真的mmult_1信號(hào)波形
這些信號(hào)告訴我們很多關(guān)于現(xiàn)在在PL中運(yùn)行的卸載代碼的性能,我們使用熟悉的仿真工具來(lái)獲取此故障排除信息。這種強(qiáng)大的調(diào)試方法可以幫助您在硬件加速的C算法中解決意外的行為,讓您能夠同步到PL處理的黑匣子中,從而揭示可能使用一些微調(diào)的數(shù)據(jù)流行為。