在賽靈思 SDSoC 開(kāi)發(fā)環(huán)境發(fā)布前,標(biāo)準(zhǔn) SoC 設(shè)計(jì)方法涉及一系列不同的工程設(shè)計(jì)技巧。通常來(lái)說(shuō),如果系統(tǒng)架構(gòu)師根據(jù)要求生成系統(tǒng)架構(gòu)和子系統(tǒng),那么解決方案的功能要分別實(shí)現(xiàn)在硬件(邏輯側(cè))和軟件(處理器側(cè))中。這樣,FPGA 和軟件工程師要分別開(kāi)發(fā)各自的功能,再根據(jù)集成測(cè)試計(jì)劃進(jìn)行組成和測(cè)試。這種方法持續(xù)運(yùn)用了多年,但賽靈思 Zynq-7000 All Programmable SoC 以及即將推出的賽靈思 Zynq UltraScale+ MP-SoC 等功能更強(qiáng)的 SoC 的問(wèn)世要求采用新的設(shè)計(jì)方法。
SDSoC 方法能幫助更廣泛的工程師用戶群開(kāi)發(fā)極高性能系統(tǒng)。在 SDSoC 開(kāi)發(fā)環(huán)境中進(jìn)行開(kāi)發(fā)的工程師新手會(huì)發(fā)現(xiàn),可以輕松快速地啟動(dòng)并運(yùn)行系統(tǒng),而且系統(tǒng)優(yōu)化也同樣便捷。
我們舉一個(gè)簡(jiǎn)單而具代表性的例子來(lái)說(shuō)明如何完成上述任務(wù)并獲得相應(yīng)的收益。我們針對(duì)的是運(yùn)行 Linux 的 ZedBoard,并采用內(nèi)置示例之一:矩陣乘法器和加法模板。
設(shè)計(jì)方法簡(jiǎn)史
可編程邏輯器件自 1980 年推出以來(lái)一直迅速發(fā)展。起初,工程師通過(guò)原理圖輸入法對(duì)器件進(jìn)行編程(雖然 22v10 等較早期的可編程邏輯器件 (PLD) 是通過(guò)邏輯方程編程的)。這需要電子工程師執(zhí)行大部分 PLD 開(kāi)發(fā)工作,因?yàn)檫壿嬙O(shè)計(jì)和優(yōu)化通常屬于電子工程學(xué)范疇。隨著器件尺寸和功能的不斷提升,這種原理圖輸入法自然開(kāi)始面臨局限性問(wèn)題,因?yàn)樵O(shè)計(jì)和驗(yàn)證時(shí)間會(huì)隨著設(shè)計(jì)復(fù)雜性的增加而顯著延長(zhǎng)。工程師需要具備在更高抽象層上工作的能力。
VHDL 和 Verilog 應(yīng)運(yùn)而生。二者開(kāi)始都是用來(lái)描述和模擬邏輯設(shè)計(jì)(特別是 ASIC)的語(yǔ)言。VHDL 甚至有自己的軍用標(biāo)準(zhǔn)。既然我們要在硬件描述語(yǔ)言 (HDL) 中描述邏輯行為,那么自然應(yīng)該綜合所需的邏輯電路。綜合工具的開(kāi)發(fā)使得工程師能描述通常在寄存器傳輸層的邏輯行為。HDL 也能大幅改進(jìn)驗(yàn)證方法,有助于開(kāi)發(fā)行為測(cè)試平臺(tái),支持結(jié)構(gòu)化驗(yàn)證。HDL 也首次支持模塊化和廠商獨(dú)立性。
HDL 內(nèi)在并行性、寄存器傳輸層設(shè)計(jì)法和實(shí)現(xiàn)流程則需要了解優(yōu)化和時(shí)序收斂,這就意味著 PLD 開(kāi)發(fā)任務(wù)大部分落到了電子工程師的身上。
HDL 一直是 PLD 開(kāi)發(fā)領(lǐng)域的事實(shí)標(biāo)準(zhǔn),但多年發(fā)展中也考慮到整體產(chǎn)業(yè)的發(fā)展需求。單就 VHDL 而言,相繼于 1987 年(IEEE 采用的第一年)、1993 年、2000 年、2002 年、2007 年、2008 年進(jìn)行了修訂。不過(guò),跟原理圖輸入法一樣,HDL 也逐漸開(kāi)始面臨一系列局限性問(wèn)題,包括開(kāi)發(fā)和驗(yàn)證時(shí)間太長(zhǎng)、器件功能要求提高等。
隨著 PLD 的角色從膠合邏輯向加速外設(shè)甚至最終向系統(tǒng)核心發(fā)展,業(yè)界需要新的設(shè)計(jì)方法來(lái)滿足有關(guān)發(fā)展需求。近年來(lái),高層次綜合 (HLS) 越來(lái)越受歡迎。根據(jù)高層次綜合法,設(shè)計(jì)通過(guò) C/C++(用賽靈思的 Vivado HLS)或其他工具(如 MathWorks 公司的 MATLAB 或國(guó)家儀器公司的 LabVIEW)輸入。由于新的設(shè)計(jì)方法能夠充分發(fā)揮器件的功能,這種方法開(kāi)始將設(shè)計(jì)和實(shí)現(xiàn)從電子工程領(lǐng)域轉(zhuǎn)向軟件領(lǐng)域,從而顯著擴(kuò)大了潛在的 PLD 設(shè)計(jì)人員群體,并鞏固了 PLD 作為系統(tǒng)核心的地位。
因此,SoC 設(shè)計(jì)自然能用 HLS 來(lái)生成緊密集成的開(kāi)發(fā)環(huán)境,工程師則能在環(huán)境中無(wú)縫加速設(shè)計(jì)邏輯側(cè)功能。在此情況下,SDSoC 環(huán)境應(yīng)運(yùn)而生。
熟悉的環(huán)境
SDSoC 開(kāi)發(fā)環(huán)境基于 Eclipse,大多數(shù)軟件開(kāi)發(fā)人員對(duì)這種環(huán)境應(yīng)該是比較熟悉的(圖1)。該環(huán)境通過(guò)采用能處理 C 或 C++ 程序的全新 SDSoC 編譯器無(wú)縫支持器件可編程邏輯 (PL) 側(cè)功能加速。
SDSoC環(huán)境中使用最高抽象層進(jìn)行開(kāi)發(fā),具體如下:
在 C 或 C++ 中開(kāi)發(fā)應(yīng)用。
對(duì)應(yīng)用進(jìn)行特性分析,明確性能瓶頸問(wèn)題。
使用特性分析信息,明確器件 PL 側(cè)哪些功能需要加速。
隨后構(gòu)建系統(tǒng)并生成 SD 卡映像。
硬件到位后,進(jìn)一步分析性能并根據(jù)要求優(yōu)化加速功能。
我們能在 SDSoC 環(huán)境中開(kāi)發(fā)出可在裸機(jī)、FreeRTOS 或 Linux 操作系統(tǒng)上運(yùn)行的各種不同應(yīng)用。該環(huán)境內(nèi)置支持 ZedBoard、MicroZed 和 Digilent ZYBO 等大部分 Zynq SoC 開(kāi)發(fā)板。這樣,我們不僅能加速開(kāi)發(fā)應(yīng)用,還能通過(guò)該功能定義自己的底層硬件平臺(tái),在自己的定制硬件平臺(tái)能用于集成時(shí)使用。
在 SDSoC 環(huán)境中編譯程序時(shí),構(gòu)建過(guò)程輸出提供了從 SD 卡配置 Zynq SoC 所需的系列文件。該系列文件包括一級(jí)和二級(jí)引導(dǎo)載入程序,以及操作系統(tǒng)所需的應(yīng)用和映像。
SDSOC 實(shí)例
下面我們看看 SDSoC 環(huán)境如何工作,多快就能讓實(shí)例啟動(dòng)并運(yùn)行起來(lái)。我們針對(duì)的 ZedBoard 開(kāi)發(fā)板運(yùn)行 Linux 操作系統(tǒng)并使用內(nèi)置矩陣乘法器和加法模板。
首先一如既往地創(chuàng)建項(xiàng)目。我們能通過(guò)歡迎窗口(圖 1)或通過(guò)菜單選擇“File -> New -> SDSoC”項(xiàng)目來(lái)創(chuàng)建項(xiàng)目。這兩種方法都能打開(kāi)對(duì)話框,讓我們給項(xiàng)目命名,選擇開(kāi)發(fā)板和操作系統(tǒng)(圖 2)。
這將在 SDSoC GUI 左側(cè) Project Explorer 下生成項(xiàng)目。我們?cè)谠擁?xiàng)目下會(huì)看到以下文件夾,每個(gè)文件夾都有自己唯一的圖標(biāo):
SDSoC 硬件功能:這里我們能看到轉(zhuǎn)移到硬件的功能。一開(kāi)始這個(gè)文件夾是空的,等待我們轉(zhuǎn)移。
Includes:展開(kāi)這個(gè)文件夾能看到構(gòu)建過(guò)程中使用的所有 C/C++ 報(bào)頭文件。
src:包含演示用源代碼。
為確保我們正確配置所有事項(xiàng),包括 SDSoC 安裝和環(huán)境以及開(kāi)發(fā)板,我們要構(gòu)建演示,其只在器件片上處理系統(tǒng) (PS) 側(cè)運(yùn)行。
當(dāng)然,下一步就是構(gòu)建項(xiàng)目了。在菜單上選中項(xiàng)目,我們選擇“Project->Build Project”。構(gòu)建時(shí)間不會(huì)太長(zhǎng)。完成后,會(huì)看到如圖 3 所示的文件夾出現(xiàn)在 Project Explorer 中的項(xiàng)目下。除了上述文件夾之外,還有:
二進(jìn)制文件:這里能找到軟件編譯過(guò)程生成的可執(zhí)行連接 (ELF) 文件。
歸檔:鏈接對(duì)象文件,創(chuàng)建其中的二進(jìn)制文件。
SDRelease:包含我們的引導(dǎo)文件和報(bào)告。
我們已經(jīng)構(gòu)建了首個(gè)演示,只能在 Zynq SoC 的 PS 上運(yùn)行,下面我們來(lái)看看如何確保其按預(yù)期正常運(yùn)行。對(duì)應(yīng)用進(jìn)行特性分析,明確 SDSoC 加速運(yùn)行。工程師用特性分析信息明確應(yīng)該移動(dòng)哪些功能。
我們用已提供的 sds_lib.h 庫(kù)在基本層面進(jìn)行特性分析,這能在 64 位全局計(jì)數(shù)器上獲得基本時(shí)間戳 API,讓我們測(cè)出每個(gè)功能的用時(shí)。我們用API 能簡(jiǎn)單記錄功能開(kāi)始和停止時(shí)間,這一時(shí)間差就是整個(gè)過(guò)程的執(zhí)行時(shí)間。
源代碼包括兩個(gè)版本的矩陣乘法和加法算法。所謂的黃金版不用于轉(zhuǎn)移到片上可編程邏輯 (PL);另一版則針對(duì)這個(gè)目的。通過(guò)在 PS 中構(gòu)建并運(yùn)行,我們能確保有針對(duì)性地對(duì)比,而且兩個(gè)流程執(zhí)行時(shí)間基本相同。
構(gòu)建完成后,我們能拷貝“Project Explorer 下 SDRelease -> sd_card”文件夾中的所有文件到 SD 卡,然后將 SD 卡插到 ZedBoard 上(SD 卡配置的模式引腳要正確設(shè)置)。終端程序連接以及引導(dǎo)序列完成后,我們就要運(yùn)行程序。輸入“/mnt/mult_add.elf”(這里的 mult_add 是我們創(chuàng)建的項(xiàng)目的名稱)。在 ZedBoard 上運(yùn)行,得到如圖 4 所示的結(jié)果,顯示兩個(gè)功能運(yùn)行的時(shí)間基本相同。
驗(yàn)證執(zhí)行時(shí)間基本相同后,我們將乘法函數(shù)移到 SoC 的 PL 側(cè),這步很容易實(shí)現(xiàn)。
分析實(shí)例中 src 目錄的文件結(jié)構(gòu),我們看到:
main.cpp:這包含主函數(shù)、黃金計(jì)算、時(shí)間戳和器件硬件側(cè)所用的乘法加法函數(shù)調(diào)用。
mmult.cpp:這包含在硬件部分運(yùn)行的乘法函數(shù)。
madd.cpp:這包含在硬件部分運(yùn)行的加法函數(shù)。
完成上述步驟后,下次構(gòu)建項(xiàng)目時(shí),SDSoC 鏈接器會(huì)自動(dòng)調(diào)用賽靈思 Vivado HLS 和Vivado 來(lái)執(zhí)行 SoC 中 PL 側(cè)的功能。
下一步就是將一個(gè)函數(shù)轉(zhuǎn)移到 SoC 的 PL 側(cè)。我們通過(guò)以下兩種方法之一能完成這一任務(wù):
在 Project Explorer 中,我們展開(kāi)文件,看到文件中的函數(shù),選擇感興趣的函數(shù),右鍵點(diǎn)擊并選擇“Toggle HW/SW [H]”(圖5)。
打開(kāi)文件并執(zhí)行右側(cè)“outline”標(biāo)簽下的同樣選項(xiàng),這也能顯示函數(shù)(圖 6)。
開(kāi)關(guān)硬件中加速的 mmult() 函數(shù)能讓 [H] 添加到函數(shù)后面(圖 7)。
我們還會(huì)看到 SDSoC Hardware Functions 下選擇的功能(“Project Explorer”標(biāo)簽中項(xiàng)目下方,圖 8)。這能讓我們方便地看到設(shè)計(jì)中加速的所有功能。
完成上述步驟后,下次構(gòu)建項(xiàng)目時(shí),SDSoC 鏈接器會(huì)自動(dòng)調(diào)用賽靈思 Vivado HLS和Vivado Design Suite 其余部分來(lái)執(zhí)行 SoC 中 PL 側(cè)的功能。與此同時(shí),會(huì)創(chuàng)建軟件驅(qū)動(dòng)程序,支持功能加速。我們看到,功能轉(zhuǎn)移到器件 PL 側(cè)是無(wú)縫的,而且還會(huì)提高性能。
編譯和生成 SD 卡映像后,我將 mmult() 函數(shù)移到硬件,在 ZedBoard 上運(yùn)行。如圖 9 所示,執(zhí)行時(shí)間(處理器工作循環(huán))只有 52,444 / 183,289 = 0.28,也就是此前期間 PS 側(cè) 183,289 個(gè)處理器工作循環(huán)(執(zhí)行時(shí)間)的 28%(圖 4)??紤]到器件 PS 側(cè)相同功能的性能,我們看到只需簡(jiǎn)單點(diǎn)擊鼠標(biāo)就能大幅改進(jìn)執(zhí)行時(shí)間。
-
子系統(tǒng)
+關(guān)注
關(guān)注
0文章
115瀏覽量
12679 -
系統(tǒng)構(gòu)架
+關(guān)注
關(guān)注
0文章
5瀏覽量
6301
發(fā)布評(píng)論請(qǐng)先 登錄
評(píng)論