引言:《Exploring Zynq MPSoC With PYNQ and Machine Learning Applications》是當(dāng)年Zynq Book(ZYNQ-7000)的升級版本,在新版本中,不僅僅介紹了MPSOC的體系結(jié)構(gòu)和應(yīng)用場景,更是結(jié)合當(dāng)前應(yīng)用最廣的PYNQ框架和機(jī)器學(xué)習(xí)應(yīng)用進(jìn)行分析。作為一本不可多得的免費(fèi)電子英文書籍,本書既是使用Zynq
MPSoC的開發(fā)人員的實(shí)用指南,同樣也是希望熟悉器件及其相關(guān)設(shè)計(jì)方法的技術(shù)人員的有效參考資料。
前? 言
Zynq MPSoC(多處理器片上系統(tǒng))是Xilinx公司推出的第二代SoC系列產(chǎn)品,集成了復(fù)雜的處理系統(tǒng),包括ARM Cortex-A53應(yīng)用程序處理器和ARM Cortex-R5實(shí)時處理器,以及FPGA可編程邏輯。
來自蘇格蘭斯特拉斯克萊德大學(xué)(University of Strathclyde)的Louise Crockett團(tuán)隊(duì)基于這一平臺的軟件和硬件結(jié)構(gòu),撰寫了Exploring Zynq MPSoC: With PYNQ and Machine Learning Applications,綜合且全面地介紹了軟件堆棧、多處理器處理系統(tǒng)以及可編程硬件陣列等問題。本書既是使用Zynq MPSoC的開發(fā)人員的實(shí)用指南,同樣也是希望熟悉器件及其相關(guān)設(shè)計(jì)方法的技術(shù)人員的有效參考。程序員可以學(xué)會如何使用簡單的軟件界面和框架來快速實(shí)現(xiàn)他們的機(jī)器學(xué)習(xí)算法,系統(tǒng)設(shè)計(jì)師可以利用它來獲取系統(tǒng)的最高性能。
《基于PYNQ和機(jī)器學(xué)習(xí)探索Zynq MPSoC》將帶領(lǐng)讀者了解軟件堆棧、多處理器處理系統(tǒng)和強(qiáng)大的可編程硬件陣列方面的重要內(nèi)容。MPSoC處理器系統(tǒng)最多配備四個ARM Cortex-A53處理器內(nèi)核和兩個ARM Cortex-R5實(shí)時處理器內(nèi)核。其FPGA結(jié)構(gòu)由強(qiáng)大的DSP Slices陣列和大量分布式RAM擴(kuò)展而成。這種新架構(gòu)使處理器系統(tǒng)從當(dāng)今新興人工智能應(yīng)用所需的復(fù)雜算術(shù)和數(shù)據(jù)移動中解放出來。這本書特別關(guān)注軟件堆棧和編程工具的闡述,有專門的一章專門介紹PYNQ編程環(huán)境。
PYNQ是Xilinx的一個開源項(xiàng)目,可以輕松地在Zynq平臺上設(shè)計(jì)嵌入式系統(tǒng)。使用Python語言和庫,設(shè)計(jì)者可以利用可編程邏輯和ARM微處理器的優(yōu)勢來構(gòu)建更強(qiáng)大、更令人興奮的嵌入式系統(tǒng)。本書的E部分討論了Zynq MPSoC平臺上許多應(yīng)用程序的實(shí)現(xiàn)。這包括對用于有效實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)的FINN-R開源框架的詳細(xì)討論。
第一章? 簡 介
接下來將全面介紹Zynq MPSoC器件,它是Xilinx的一種片上集成系統(tǒng)(SoC)器件,它繼承了其前身Zynq-7000的眾多特性。
術(shù)語MPSoC反映了其是一種多處理器片上系統(tǒng),它包括許多不同的處理單元,每個處理單元都針對特定目的進(jìn)行了優(yōu)化。例如,應(yīng)用處理器、實(shí)時處理器和圖形處理器,以及現(xiàn)場可編程門陣列(FPGA)可編程邏輯。該器件的組成將在后面的章節(jié)中詳細(xì)介紹,但就目前而言,我們可以簡單地認(rèn)為Zynq MPSoC為工作提供了各種最佳資源!
圖2:Zynq UltraScale+ EV內(nèi)部框圖
除了Zynq MPSoC體系結(jié)構(gòu)之外,設(shè)計(jì)方法和軟件工具也非常重要。適當(dāng)?shù)脑O(shè)計(jì)方法可以充分利用Zynq MPSoC的組件來解決實(shí)際設(shè)計(jì)問題。與以前的器件相比,隨著處理組件的擴(kuò)展,設(shè)計(jì)師能夠利用Zynq MPSoC同時在系統(tǒng)性能、可靠性、成本、功耗、安全性、上市時間等方面實(shí)現(xiàn)預(yù)期結(jié)果以及適用的任何其他約束。因此,本書重要的一個方面是概述系統(tǒng)開發(fā),包括部署在處理核上的設(shè)計(jì)工具和操作系統(tǒng)。
我們在Xilinx SDx工具中包含了一個特定功能,它使系統(tǒng)能夠完全使用軟件代碼進(jìn)行描述,然后在各種可用的處理元素之間進(jìn)行分區(qū)(在用戶指導(dǎo)下)。SDx中的SD代表軟件定義,如將在后面的章節(jié)中進(jìn)一步討論的,基于軟件的設(shè)計(jì)正成為可編程設(shè)備越來越強(qiáng)大的設(shè)計(jì)方法。Zynq MPSoC器件的應(yīng)用多種多樣,根據(jù)Zynq-7000的先前經(jīng)驗(yàn)和Zynq MPC提供的擴(kuò)展組件,Zynq MPSoC在高級駕駛員輔助系統(tǒng)(ADAS)、計(jì)算機(jī)視覺、大數(shù)據(jù)分析、軟件無線電(SDR)以及高價值監(jiān)控和自動化(工業(yè)物聯(lián)網(wǎng),IoT)等領(lǐng)域廣泛應(yīng)用。
1.為什么我應(yīng)該感興趣?
傳統(tǒng)上,半導(dǎo)體器件市場包括多個領(lǐng)域,包括邏輯(固定和可編程)、存儲器、微處理器、光學(xué)、模擬、分立元件、微控制器、傳感器系統(tǒng)和專用數(shù)字信號處理器。2017年,全球半導(dǎo)體市場總價值為4122億美元,為有史以來的最高水平,與前一年相比增長了20%以上。半導(dǎo)體器件可以實(shí)現(xiàn)從兒童玩具到筆記本電腦、核電站控制系統(tǒng)、國際空間站的一切功能。簡而言之,我們離不開他們!
近年來,系統(tǒng)集成已成為一個備受關(guān)注的領(lǐng)域。簡單來說,為什么要制作系統(tǒng)所需的各種組件,然后將它們連接在一起?設(shè)計(jì)將所需資源組合到單個芯片中的器件會更好嗎?由此我們提出了片上系統(tǒng)(SoC)的思想。
參考上面確定的半導(dǎo)體類別,請注意,Zynq和Zynq MPSoC等SoC包括可編程邏輯、微處理器和存儲器,這些是嵌入式系統(tǒng)中通常需要的主要組件。事實(shí)上,這些器件還包括一些模擬電路,以及支持?jǐn)?shù)字信號處理(DSP)應(yīng)用的算術(shù)引擎,類似于DSP處理器提供的功能。如圖下圖所示,Zynq MPSoC是由一個處理系統(tǒng)(PS)與FPGA可編程邏輯(PL)耦合組成的器件。這兩個部分通過許多高級可擴(kuò)展接口(AXI)接口互聯(lián)。這種高級結(jié)構(gòu)與Zynq-7000芯片非常相似。
圖3:Zynq MPSoC架構(gòu)的簡化圖
與Zynq相比,主要的區(qū)別在于,Zynq MPSoC擴(kuò)展了PS中處理器的種類和數(shù)量以及FPGA PL部分的大小,以及增加PS和PL之間AXI連接的數(shù)量和帶寬,使集成更進(jìn)一步。當(dāng)然還有許多其他增強(qiáng)功能(稍后將詳細(xì)介紹)。
圖4:Zynq系列家族核心資源對比
對SoC的需求在一定程度上是由在快速發(fā)展的應(yīng)用領(lǐng)域需要實(shí)現(xiàn)快速上市的動機(jī)驅(qū)動的。其他因素包括將組件集成到系統(tǒng)中所需的工程工作量減少、物理尺寸最小化以及功耗降低。另一方面,由于軟件設(shè)計(jì)工具和方法的發(fā)展,這些相對復(fù)雜的SoC設(shè)備必須能夠設(shè)計(jì)系統(tǒng),而且其易用性也在不斷提高。Xilinx及其合作伙伴支持各種設(shè)計(jì)輸入方法和語言,并繼續(xù)引入新功能以實(shí)現(xiàn)快速開發(fā)及快速評估不同實(shí)施方案。
如果你是一名工程師,目前正在使用FPGA等可編程邏輯設(shè)備,或基于處理器的嵌入式系統(tǒng),那么SoC的增長很可能很快就會與你相關(guān)。值得將SoC設(shè)計(jì)添加到你的技能中,或者至少閱讀本書的其余部分,了解更多關(guān)于它的信息!如果你是一名學(xué)生,那么同樣地,獲得SoC技能對你未來的職業(yè)生涯非常有用。最后,如果你是一個愛好者,那么用SoC創(chuàng)建酷炫系統(tǒng)的可能性幾乎是無限的!即使承認(rèn)了通常的學(xué)術(shù)和商業(yè)壓力,這無疑也吸引了學(xué)生和專業(yè)人士。
2.Xilinx SoCs的演變簡述
Xilinx傳統(tǒng)上是一家可編程邏輯公司,專門從事FPGA技術(shù)和復(fù)雜可編程邏輯器件(CPLDs,可以被認(rèn)為是FPGA的一個不那么復(fù)雜的版本)設(shè)計(jì)。自2011年推出Zynq-7000以來,在向SoC邁進(jìn)的過程中,Xilinx Soc還集成了其他構(gòu)建塊,因此Xilinx現(xiàn)在生產(chǎn)的器件不僅由可編程邏輯組成,而且是與處理器、存儲器、接口等相結(jié)合的可編程邏輯。
自從三十多年前Xilinx發(fā)明了FPGA,尤其是在最近的時代,人們對創(chuàng)建基于FPGA的靈活嵌入式系統(tǒng)產(chǎn)生了興趣,可以使用FPGA的通用可編程邏輯(而不是使用專用處理器芯片)創(chuàng)建可用的“軟”處理器。以這種方式實(shí)現(xiàn)嵌入式系統(tǒng)仍然有效,并且具有相當(dāng)大的靈活性,但在處理器的性能方面受到限制。在某些情況下,應(yīng)用程序會要求將一個單獨(dú)的處理器芯片集成到系統(tǒng)中,并與FPGA進(jìn)行適當(dāng)?shù)慕涌谶B接。
這導(dǎo)致了Zynq-7000芯片在2010年代初開發(fā)時,便將FPGA的可編程邏輯與專用“硬”處理器內(nèi)置于專用硅中,并提供了兩部分之間的快速交互。此時的處理器是雙核Arm Cortex-A9(“A”表示應(yīng)用處理器),與智能手機(jī)中的處理器類型相同。與之前采用的“軟”處理器方法相比,該器件提供了增強(qiáng)處理器能力的優(yōu)勢,這意味著一個完整的系統(tǒng)可以在單個芯片上實(shí)現(xiàn)。
3.設(shè)計(jì)方法
一個至關(guān)重要的問題是我們?nèi)绾卫眠@些復(fù)雜的SoC芯片創(chuàng)建系統(tǒng)?實(shí)際上,有多種方法可供選擇,反映了SoC系統(tǒng)的組成、電子設(shè)計(jì)自動化(EDA)工具的復(fù)雜演變以及支持的各種應(yīng)用。賽靈思和第三方軟件合作伙伴不斷突破極限,使SoC系統(tǒng)的設(shè)計(jì)盡可能快速、簡單和可靠。
我們將在第4章中對設(shè)計(jì)方法和流程進(jìn)行詳細(xì)討論,但同時,值得簡單概述的是,SoC系統(tǒng)將包括(i)硬件設(shè)計(jì)和(ii)軟件設(shè)計(jì)(由于其分層組成,軟件設(shè)計(jì)通常被稱為“堆?!保?。硬件設(shè)計(jì)被映射到SoC器件上可用的物理資源,而軟件在系統(tǒng)內(nèi)部署的一個或多個處理器上運(yùn)行。
圖5:使用Zynq MPSoC的簡化設(shè)計(jì)流程(左:傳統(tǒng)的“硬件/軟件”設(shè)計(jì)流程;右:使用SDx的“軟件定義”設(shè)計(jì)工具)
考慮到這些基本差異,通常分別使用專用工具設(shè)計(jì)硬件和軟件系統(tǒng)。這種“硬件和軟件”方法如圖5的左側(cè)所示(細(xì)節(jié)暫時抽象)。在這個設(shè)計(jì)流程中,硬件和軟件開發(fā)在很大程度上可以獨(dú)立進(jìn)行,然后是集成階段,而不是一個階段依賴于另一個階段的完成。工程師使用他們選擇的工具生成硬件系統(tǒng)的元素,使用Xilinx Vivado開發(fā)環(huán)境進(jìn)行系統(tǒng)集成并在目標(biāo)器件上實(shí)現(xiàn)。軟件開發(fā)人員可以使用Xilinx軟件開發(fā)工具包(SDK),也可以選擇自己喜歡的開發(fā)環(huán)境。一種可能的變體是在第三方工具中開發(fā),該工具“隱藏”地利用Xilinx工具,但即便如此,同樣的高級方法仍然適用。
最近,有一個相當(dāng)大的轉(zhuǎn)變,即以軟件為導(dǎo)向,硬件/軟件協(xié)同設(shè)計(jì)。簡單地說,這些工具允許使用軟件代碼或基于模塊的設(shè)計(jì)方法,在高抽象級別上描述整個系統(tǒng)的功能。然后,在設(shè)計(jì)者的指導(dǎo)下,考慮到可用資源的能力,在SoC的硬件和軟件元素之間劃分功能,工具可以快速生成不同的排列,而且軟件和硬件中實(shí)現(xiàn)的元素之間的所有接口都是自動處理的。這種“共同設(shè)計(jì)”方法如圖5右側(cè)所示,反映了本章前面提到的Xilinx SDx工具的流程。
我們將在第4章中更詳細(xì)地討論設(shè)計(jì)方法,包括填寫圖5中概述的設(shè)計(jì)流程的細(xì)節(jié)。SDx將是本書D部分深入回顧的主題。
4.如何使用本書
本書旨在介紹Zynq MPSoC設(shè)備以及相關(guān)的設(shè)計(jì)方法、工具和應(yīng)用程序。希望讀者發(fā)現(xiàn)它可讀性和可訪問性很強(qiáng)。然而,這本書不可能成為所有問題的答案——請記住,該器件由Xilinx出版的1000多頁技術(shù)文獻(xiàn)支持,這是尋找細(xì)節(jié)的地方!
盡可能地,我們試圖在不假設(shè)太多先驗(yàn)知識的情況下解決技術(shù)問題,盡管不可避免地,由于Zynq MPSoC是一個先進(jìn)的集成系統(tǒng),因此背景材料會對許多主題有益。在適當(dāng)?shù)牡胤酵怀鲲@示有用的支持材料。
4.1書籍的組織
本書分為五個部分,概述如下。每一部分都由不同主題的多個章節(jié)組成,這些章節(jié)共同代表了本書的一個主題。
?A部分:了解Zynq MPSoC——本書的這一部分介紹了該器件,概述了其架構(gòu),并回顧了設(shè)計(jì)方法和候選應(yīng)用領(lǐng)域。A部分的抽象水平略高于本書的其余部分,可能特別適合技術(shù)經(jīng)理和其他希望在Zynq MPSoC的基礎(chǔ)上建立大綱而不必深入研究細(xì)節(jié)的人!
?B部分:Zynq MPSoC體系結(jié)構(gòu)詳細(xì)介紹——B部分?jǐn)U展了A部分的體系結(jié)構(gòu)概述,其中有一系列專門的章節(jié)涵蓋了設(shè)備體系結(jié)構(gòu)的不同方面。其中包括分別關(guān)于應(yīng)用程序和實(shí)時處理系統(tǒng)以及安全、安全和電源管理設(shè)施的章節(jié)。
?C部分:Zynq MPSoC系統(tǒng)開發(fā)——在C部分中,重點(diǎn)是在Zynq MPC上開發(fā)系統(tǒng)設(shè)計(jì)的方法和工具。這里我們介紹硬件系統(tǒng)開發(fā),以及軟件堆棧和常見配置的概念。接下來的章節(jié)重點(diǎn)介紹多處理器開發(fā)和系統(tǒng)引導(dǎo)。
?D部分:Xilinx SDx開發(fā)環(huán)境下的系統(tǒng)設(shè)計(jì)——本書的第四部分深入探討了基于Xilinx SDx開發(fā)環(huán)境的軟件定義設(shè)計(jì)流程。
?E部分:展望——本書的最后一個簡短部分著眼于更廣泛的視角,包括SoC“生態(tài)系統(tǒng)”,它代表了Zynq MPSoC系統(tǒng)設(shè)計(jì)中可以利用的IP、設(shè)計(jì)工具、硬件開發(fā)板和其他可用資源的范圍。我們還考慮了一些基于先前發(fā)表的針對Zynq-7000 SoC的工作的學(xué)術(shù)案例研究。
4.2進(jìn)一步的信息來源
在每一章的結(jié)尾,你會發(fā)現(xiàn)一份可能對進(jìn)一步閱讀有用的參考文獻(xiàn)列表,并提供了網(wǎng)絡(luò)鏈接以方便閱讀(當(dāng)然,請注意,這些內(nèi)容可能會更改?。?。這些信息來源多種多樣,包括Xilinx在線發(fā)布的許多參考手冊、教程和其他技術(shù)文獻(xiàn),這些都是特別有價值和權(quán)威的信息來源。它們提供了支持設(shè)計(jì)項(xiàng)目所需的深層技術(shù)細(xì)節(jié)。您可以通過以下URL訪問Xilinx支持門戶,從中可以獲得文檔和其他有用的資源:
還要注意的是,特別重要的網(wǎng)絡(luò)鏈接偶爾會在本章的主要流程中突出顯示(如上所述),而不是通過章節(jié)末尾的參考。
同樣值得強(qiáng)調(diào)的是,這本書沿用了我們之前的標(biāo)題《Zynq book》,該書涉及之前發(fā)布的Xilinx SoC設(shè)備Zynq-7000 SoC。您可能會發(fā)現(xiàn)參考《Zynk book》了解一般背景、介紹性示例和某些主題的擴(kuò)展信息很有用;例如,Vivado HLS(高級合成)設(shè)計(jì)工具在Zynq書中進(jìn)行了廣泛討論,而我們在本書中不重復(fù)該材料。相反,本書以Xilinx最新的設(shè)計(jì)工具SDx為特色,該工具使用基于軟件的設(shè)計(jì)入門方法實(shí)現(xiàn)硬件/軟件協(xié)同設(shè)計(jì)。順便說一句,SDx利用了Vivado HLS的功能。
4.3對初學(xué)者的建議
如果你認(rèn)為自己是SoC設(shè)計(jì)的初學(xué)者,那么值得一讀《Zynq書》(在最后一節(jié)中提到),其中包括一些關(guān)于SoC原理和其他相關(guān)背景的介紹材料(從“什么是SoC?”開始)。特別是考慮到《Zynq書》是免費(fèi)下載的,我們盡量不要在這里重復(fù)同樣的材料。
盡管Zynq MPSoC系統(tǒng)可以使用各種操作系統(tǒng)開發(fā),但預(yù)計(jì)大多數(shù)設(shè)計(jì)都將以Linux為特色,因此使用Linux開發(fā)嵌入式系統(tǒng)是一個需要注意的重要主題。提供對嵌入式Linux的全面處理超出了本書的范圍,但幸運(yùn)的是,已經(jīng)有一些非常好的書可用,例如[1]。
如果你想加強(qiáng)你在計(jì)算機(jī)體系結(jié)構(gòu)和一般操作原理方面的背景知識,那么[2]也是一本有用的書。
5.后續(xù)
接下來,我們進(jìn)入A部分——了解Zynq MPSoC。本大章節(jié)會進(jìn)一步介紹MPSoC,包括設(shè)備架構(gòu)的概述,以及創(chuàng)建MPSoC系統(tǒng)所需的設(shè)計(jì)過程和工具,最后討論應(yīng)用領(lǐng)域。
6 參考資料
[1] Christopher Hallinan, Embedded Linux Primer: A Practical Real-World Approach, 2nd edition, Prentice Hall, 2011.
[2] David A. Patterson and John L. Hennessy, Computer Organization and Design: The Hardware Software Interface, ARM Edition,Morgan Kaufman, April 2016.