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