Python 生產(chǎn)力價(jià)值:賽靈思 Zynq 產(chǎn)品組合 的前沿優(yōu)勢分析
嵌入式計(jì)算的新范例
本文引用地址:http://m.butianyuan.cn/article/201905/400878.htm近期的 IEEE 調(diào)查報(bào)告稱 2017 年最流行的兩種編程語言分別是 Python 和 C 語言。在嵌入式計(jì)算領(lǐng)域,C 語言一直以來都是中堅(jiān)力量。傳統(tǒng)上來說,我們一直將 Python 語言用于網(wǎng)絡(luò)或臺式機(jī)計(jì)算,而從未用作嵌入式計(jì)算語言;
但是這種情況正在發(fā)生改變。
Python 及其相關(guān)框架能支持用于數(shù)據(jù)分析、機(jī)器學(xué)習(xí)(ML)和人工智能(AI)應(yīng)用的復(fù)雜算法的開發(fā)。當(dāng)然,這些應(yīng)用屬于嵌入式計(jì)算領(lǐng)域的熱點(diǎn)話題,而且它們正在促使 Python 得到采用,特別是在邊緣工業(yè)物聯(lián)網(wǎng) (IIoT) 領(lǐng)域的普及。
C、C++ 和 Python 緊密相連,因?yàn)?Python 本身也依賴 C 和 C++ 用來提供最核心的庫。但是,C 和 C++ 屬于編譯型語言,能夠在裸機(jī)上執(zhí)行。Python 在這點(diǎn)上則與之不同,是一種解釋型語言。這種差異在嵌入式計(jì)算中為自身帶來了挑戰(zhàn):例如,Python 需要操作系統(tǒng)(一般是 Linux),另外還需要易失性和非易失性存儲器資源。
在工業(yè)物聯(lián)網(wǎng)邊緣嵌入式計(jì)算領(lǐng)域,ML 和 AI 的實(shí)現(xiàn)日趨傾向于發(fā)揮數(shù)字孿生體 (1) 與物理致動器的功用。因此,解決方案必須能夠?qū)崟r(shí)以低確定性時(shí)延做出響應(yīng)。此外,工業(yè)物聯(lián)網(wǎng)解決方案也必須能夠支持其他行業(yè)趨勢,例如:
·根據(jù)待解決問題在實(shí)時(shí)處理器、應(yīng)用處理器和專用處理單元間進(jìn)行分區(qū)
·為專用處理器卸載引擎創(chuàng)建接口,從而為性能關(guān)鍵內(nèi)核提速
·使用 Linux 等標(biāo)準(zhǔn)操作系統(tǒng)
·提供具備調(diào)度功能和確定性的解決方案
·為原型設(shè)計(jì)和生產(chǎn)提供高生產(chǎn)力框架
·覆蓋標(biāo)準(zhǔn)和傳統(tǒng)網(wǎng)絡(luò)通信接口與協(xié)議,包括 IT、OT 融合網(wǎng)絡(luò)。
·為機(jī)器學(xué)習(xí)和分析提供豐富的庫
·功能安全性
·網(wǎng)絡(luò)安全
構(gòu)建工業(yè)物聯(lián)網(wǎng)平臺絕非易事。從物理環(huán)境的邊緣到云(包括 AI 和 ML)的整個鏈條是復(fù)雜的,并需要多種專業(yè)能力。因此,開發(fā)工業(yè)物聯(lián)網(wǎng)就要求使用更高水平的抽象,而這種抽象水平又要與項(xiàng)目涉及的不同工作職能相關(guān)聯(lián),才能讓開發(fā)在可接受的時(shí)間預(yù)算和成本預(yù)算內(nèi)完成。參見圖 1。
圖 1:同一平臺的不同抽象水平
在工業(yè)物聯(lián)網(wǎng)中探索機(jī)器學(xué)習(xí)
工業(yè)物聯(lián)網(wǎng)解決方案越來越多地在邊緣納入嵌入式智能。對于眾多應(yīng)用而言,這意味著機(jī)器學(xué)習(xí)推斷的實(shí)現(xiàn)。實(shí)現(xiàn)后,ML 算法會利用其經(jīng)驗(yàn),根據(jù)一套輸入數(shù)據(jù)得出結(jié)論。在 ML 中,經(jīng)驗(yàn)可通過名為培訓(xùn)的學(xué)習(xí)過程來獲得。ML 應(yīng)用的培訓(xùn)可使用下列兩種方法之一執(zhí)行:(1) 人工監(jiān)督或 (2) 實(shí)現(xiàn)判斷功能。兩種方法都需要將由正反例構(gòu)成的大數(shù)據(jù)集應(yīng)用于 ML 網(wǎng)絡(luò)。在 ML 算法得到充分培訓(xùn)后,就能將其部署在工業(yè)物聯(lián)網(wǎng)邊緣,根據(jù)新輸入和未知輸入進(jìn)行推斷。
工業(yè)物聯(lián)網(wǎng)解決方案應(yīng)用從 ML 的使用中獲益匪淺,尤其是對于那些傳統(tǒng)方法不能提供可接受的性能的應(yīng)用或者需要大量人工干預(yù)的應(yīng)用,例如再校準(zhǔn)、維護(hù)、診斷和故障安全保護(hù)操作。這些應(yīng)用具體包括:
·傳感器與測量系統(tǒng)
·系統(tǒng)識別
·機(jī)器學(xué)習(xí)系統(tǒng)控制
·高級信號處理
·自主系統(tǒng)的強(qiáng)化學(xué)習(xí)
·圖像處理
因此,開發(fā) ML 解決方案需要具備有足夠通用性的平臺和生態(tài)系統(tǒng),才能支持完整的開發(fā)模型,而不僅僅支持解決方案的獨(dú)立單元。
賽靈思 Zynq-7000 SoC 包含用來為現(xiàn)代 SoC 提供不成文標(biāo)準(zhǔn)特性的雙核 Arm? Cortex?-A9 處理器系統(tǒng) (PS) 和可編程邏輯 (PL),同時(shí)它還提供獨(dú)特的高度差異化靈活性,支持將關(guān)鍵任務(wù)卸載到 PL 。Zynq UltraScale+ MPSoC 和 Zynq UltraScale+ RFSoC 使用四核 Arm Cortex-A53 PS、PL 和其他特定部件型號的處理塊進(jìn)一步擴(kuò)展這一模型。
PS 和 PL 間的緊密耦合能實(shí)現(xiàn)比傳統(tǒng)方法響應(yīng)性更好、可重配置性更強(qiáng)、能效更高的系統(tǒng)。基于 CPU 的傳統(tǒng)方法需要使用外部存儲器來共享鏡像等大型數(shù)據(jù)結(jié)構(gòu)。因?yàn)樾枰庵俨煤屯ㄐ牛@樣做會降低確定性并增大功耗與時(shí)延,Zynq 產(chǎn)品組合中提供的異構(gòu)片上系統(tǒng)器件允許設(shè)計(jì)人員在器件的 PL 內(nèi)為功能提速。這樣,提供的解決方案不僅擁有確定性響應(yīng)時(shí)間,還能降低時(shí)延,優(yōu)化功耗。參見 圖 2。
圖 2:與典型 SoC 相比 Zynq 產(chǎn)品組合的優(yōu)勢
使用 PL 能提供比傳統(tǒng) CPU 方法更豐富的接口功能,因?yàn)楹笳咧惶峁┕潭ń涌?。PL I/O 結(jié)構(gòu)的靈活性可支持業(yè)界標(biāo)準(zhǔn)、專有或傳統(tǒng)接口,從而實(shí)現(xiàn)任意連接。
在高級綜合工具 SDSoC? 和 Vivado? HLS 的幫助下,開發(fā)人員能夠把 C 和 C++ 編譯代碼直接轉(zhuǎn)化為硬件。
結(jié)合可編程邏輯中功能的加速,還能夠?qū)嵗粋€或更多的 MicroBlaze? 32 位軟核處理器。MicroBlaze 核允許執(zhí)行實(shí)時(shí)關(guān)鍵應(yīng)用。這些功能讓 Zynq 產(chǎn)品組合可用來滿足支持 Python 的嵌入式平臺的所有要求。
PYNQ 框架支持 Python 能與 Zynq 產(chǎn)品組合一起使用,可充分發(fā)揮可編程邏輯提供的加速功能。為實(shí)現(xiàn)這一點(diǎn),PYNQ 采用了將 PL 疊加封裝成混合庫
的方式?;旌蠋焓且环N全新形式的庫,包含疊加比特流和與之相關(guān)視硬件而定的 C 代碼和 Python API?;旌蠋焓菍?shí)現(xiàn)重復(fù)使用的關(guān)鍵機(jī)制,使用 PIP Install(用于安裝和管理使用 Python 編寫的軟件包的封裝管理系統(tǒng))就能輕松安裝。因此,PYNQ 框架為數(shù)據(jù)科學(xué)家、嵌入式工程師、硬件工程師和系統(tǒng)工程師等所有開發(fā)人員提供了所需的必要抽象層次。參見圖 3。
圖 3:PYNQ 框架中不斷提高的抽象水平
PYNQ 框架率先結(jié)合下列要素,能簡化和改進(jìn)基于 Zynq 產(chǎn)品組合的設(shè)計(jì):
·高層次生產(chǎn)力語言 (Python)
·在可編程邏輯內(nèi)實(shí)現(xiàn)加速的混合庫
·受嵌入式處理器支持的基于 Web 的架構(gòu)
·Jupyter Notebook 框架
與不能使用可編程邏輯的傳統(tǒng) SoC 方法相比,依托這些要素的 PYNQ 框架擁有顯著優(yōu)勢。
數(shù)據(jù)科學(xué)家能立刻把由賽靈思用熟悉的封裝在 Python 框架里創(chuàng)建的系統(tǒng)投入使用。圖 3展示了可以使用一些標(biāo)準(zhǔn)封裝的堆棧。Panda、Scikit-learn 和 NumPy 位于頂層,其他封裝則提供專門功能,比如用于機(jī)器人的 ROS 和用于仿真的 SimPy。
Python 能夠?qū)胍粋€或多個隨時(shí)可用的預(yù)配置硬件模塊,為應(yīng)用加速并消除瓶頸。所有封裝都能在 Jupyter 環(huán)境中進(jìn)行嘗試和使用,并可使用基于 FPGA 疊加的硬件庫接口連接到可編程邏輯。
PYNQ 框架是圍繞開源社區(qū)設(shè)計(jì)的,開發(fā)人員在該社區(qū)可以創(chuàng)建和共享疊加。使用這種方法,開發(fā)人員在確認(rèn)需要新疊加之前不需要構(gòu)建疊加。也就是說,在運(yùn)行所需功能的疊加不存在時(shí)才需要構(gòu)建它。每個新疊加都應(yīng)嚴(yán)格遵循為工業(yè)物聯(lián)網(wǎng)確立的“設(shè)計(jì)模式”。這些設(shè)計(jì)模式包括(但不僅限于)下列模式:
·加速器為計(jì)算提速-與主處理器共享和/或交換數(shù)據(jù)。根據(jù)數(shù)據(jù)大小和性能要求,數(shù)據(jù)交換可以在 PL 存儲器內(nèi)(塊 RAM)、片上存儲器內(nèi) (COM)、L2 高速緩存內(nèi)和 DDR 存儲器內(nèi)進(jìn)行。
·日志記錄器負(fù)責(zé)采集數(shù)據(jù),一般是與主處理器共享的原始數(shù)據(jù)。根據(jù)數(shù)據(jù)大小和性能要求,日志記錄可以在 PL 存儲器內(nèi)(塊 RAM)、片上存儲器內(nèi) (COM)、L2 高速緩存內(nèi)和 DDR 存儲器內(nèi)進(jìn)行。采集過程可以通過明確觸發(fā)來自主處理器的事件或通過捕獲外部事件來啟動。
·定序器生成邏輯值的自動序列;根據(jù)復(fù)雜程度,這其中可包含用于實(shí)現(xiàn)布爾函數(shù)、FSM 和/或
仲裁數(shù)字模式的可編程生成器實(shí)例。
·運(yùn)行器提供可用 C/C++ 語言進(jìn)行編程的基于 MicroBlaze 32 位軟核處理器的實(shí)時(shí)控制功能,用于從主處理器卸載重復(fù)性任務(wù)以確保確定性。
·可以把運(yùn)行器用作安全模塊??膳渲?MicroBlaze 處理器用于鎖步操作。雖然整個 Zynq 產(chǎn)品組合都針對功能安全性進(jìn)行了精心設(shè)計(jì),但當(dāng)產(chǎn)品從最初的原型設(shè)計(jì)進(jìn)入到可生產(chǎn)階段時(shí),這一功能尤為重要。
傳感器與測量系統(tǒng)
傳感器是任何工業(yè)系統(tǒng),尤其是工業(yè)物聯(lián)網(wǎng)解決方案的關(guān)鍵組成部分。從簡單的溫度測量熱電偶,到結(jié)合多個異構(gòu)傳感器的用來測量特定物理量的復(fù)雜傳感器融合,工業(yè)物聯(lián)網(wǎng)解決方案采用多種不同的傳感器模態(tài)。在工業(yè)物聯(lián)網(wǎng)解決方案中實(shí)現(xiàn) ML,有助于開發(fā)人員讓給定傳感器發(fā)揮出最佳性能,同時(shí)提高下列操作的效率:
·傳感器數(shù)據(jù)采集(例如:振動分析)
·傳感器數(shù)據(jù)標(biāo)準(zhǔn)化
·傳感器線性化
·傳感器診斷
·高級傳感器
·傳感器融合
·校準(zhǔn)與自校準(zhǔn)
傳感器診斷
因?yàn)槔匣颍瑐鞲衅餍阅茉谡麄€工作壽命期間會發(fā)生變化。傳感器在惡劣環(huán)境中使用時(shí)尤其如此,此時(shí)老化會影響可靠性,并帶來偏離和偏差問題。此外,如果將傳感器用于安全應(yīng)用,傳感器診斷功能同樣極為有用;在此情況下,正確的診斷流程也是安全系統(tǒng)的組成部分。
通過使用 ML,設(shè)計(jì)人員能夠創(chuàng)建傳感器模型,或更為普遍的說法,即數(shù)字孿生,在持續(xù)監(jiān)控實(shí)際傳感器輸出的同時(shí)預(yù)測傳感器輸出。在額定條件下,傳感器信號遵循某種已知模式,且伴隨系統(tǒng)與測量噪聲導(dǎo)致的一定程度的不確定性。但是,如果傳感器失效,觀察到的輸出就會與預(yù)測輸出相左,并且當(dāng)偏差越過指定時(shí)序或閾值時(shí),就可以明確聲明傳感器失效。由于分析冗余技術(shù)允許使用工作在額定條件下的傳感器提供的信息為動態(tài)系統(tǒng)創(chuàng)建模型,因此“數(shù)字孿生”不會老化或失效,會永久存續(xù)。
預(yù)測性維護(hù)用例:
用于診斷與安全的滾珠軸承故障檢測
封裝材料行業(yè)已經(jīng)認(rèn)識到“全面生產(chǎn)維護(hù)”作為提高設(shè)備可靠性的積極方法體系的重要意義。逐漸發(fā)生的軸承失效是行業(yè)故障最主要的原因之一。因此,盡早地檢測這些故障對確??煽扛咝У倪\(yùn)營而言至關(guān)重要。單個包裝機(jī)往往就裝有 8 部以上的電動機(jī)和眾多主軸,存在可能導(dǎo)致生產(chǎn)線停運(yùn)的多個故障源。
滾珠軸承能確保軸以最小摩擦自由轉(zhuǎn)動,同時(shí)讓軸保持在正確位置上。如果旋轉(zhuǎn)系統(tǒng)的滾珠軸承失效,
后果將不堪設(shè)想。造成軸承受損的原因有很多,包括:
·軸承錯位
·微動磨損,對軸承接觸面的一種侵蝕性破壞
·變頻驅(qū)動,產(chǎn)生導(dǎo)致點(diǎn)蝕、槽蝕和弧坑的軸電流
·軸承潤滑不當(dāng)
·軸承侵蝕
·軸承疲勞
·高溫和其他因素
在故障發(fā)生之前檢測此類故障,對于降低運(yùn)營成本和維護(hù)成本而言有極為重要的意義。幸運(yùn)的是,低成本加速計(jì)的問世提供高帶寬測量,能支持功能極為強(qiáng)大的振動數(shù)據(jù)采集系統(tǒng)。將這些加速計(jì)與先進(jìn)的電動機(jī)控制功能共同部署,便可基于 PYNQ 框架實(shí)現(xiàn)偵測系統(tǒng),實(shí)時(shí)檢測可能的失效。
對于本應(yīng)用而言,PYNQ 架構(gòu)部署在 ARTY-Z7 電路板上。該電路板支持基于 PYNQ 的疊加,但這只僅僅是 PYNQ 框架的可能的用途之一。在本例中,系統(tǒng)設(shè)置包含一個高性能電動機(jī)控制系統(tǒng)和一個由
5 個 Kionix(1) 三軸加速計(jì)構(gòu)成的采集系統(tǒng)。
可以使用多種技術(shù)進(jìn)行振動監(jiān)測,其中包括振動測量、聲學(xué)測量、溫度測量和磨損分析。使用硅微加速計(jì)為感應(yīng)全部三個軸向的振動提供了低成本的方法,從而能夠全面掌握系統(tǒng)中發(fā)生的所有可能的振動模式。具體如圖 4所示。
為了確保測量準(zhǔn)確,加速計(jì)位置應(yīng)貼近電動機(jī)、齒輪箱和主滑輪內(nèi)的滾珠軸承。
電動機(jī)電流、定子電壓和軸角度位置等系統(tǒng)參數(shù)均在監(jiān)測范圍內(nèi)。將電動機(jī)模型用于估算角度和內(nèi)部電壓。
圖 4:故障檢測與電動機(jī)控制
1.Kionix公司是一家微電子機(jī)械 (MEMS) 系統(tǒng)制造商,產(chǎn)品包括加速度計(jì)、陀螺儀和傳感器融合慣性傳感器技術(shù)。
如圖 5所示,使用下列單元為 PYNQ 環(huán)境創(chuàng)建了新的疊加:
·電動機(jī)控制系統(tǒng):實(shí)例化為使用 QDESYS高性能電動機(jī)控制 IP 集的 HDL 塊。
·日志記錄器:實(shí)例化為 Vivado HLS 模塊,并連接高性能 AXI 總線 0。
·即時(shí)高速傅立葉轉(zhuǎn)換 (FFT):實(shí)例化為 Vivado HLS 模塊,并連接高性能 AXI 總線 0。
·運(yùn)行器:用于解耦和管理加速度計(jì),采用 MicroBlaze 軟核處理器實(shí)現(xiàn)并以 DDR 存儲器內(nèi)共享段的形式對外提供。MicroBlaze 處理器:從 ARM 處理器分擔(dān)加速度計(jì)管理工作。I2C
協(xié)議對這些單元進(jìn)行區(qū)別對待,分別補(bǔ)償偏置、靈敏度、溫度和比率誤差。
圖 5:捕獲與電動機(jī)控制內(nèi)部模塊
為實(shí)現(xiàn)能與 PYNQ 框架配合的新疊加,使用了Python C 外部函數(shù)接口 (CFFI)。在使用 Python 時(shí),該接口支持與幾乎任何 C 代碼進(jìn)行交互??删幊踢壿嫾铀俟δ苤糜?PYNQ 框架內(nèi),并且可以訪問該框架下基于 C/C++ 的軟件驅(qū)動程序。PYNQ 框架也提供在開發(fā)應(yīng)用時(shí)有所幫助的補(bǔ)充功能。PYNQ 的兩大核心功能包括:
(a)mmio:用于實(shí)現(xiàn)存儲器映射 I/O,以及 xlnk:將 DDR 存儲器分配為 NumPy(使用 Python 開展科學(xué)計(jì)算的基本庫)可見的緩存空間。xlnk 負(fù)責(zé)為 PL(用于映射登記的向量)獲取虛擬地址和物理地址。
舉個簡單的例子,可以借助觀察通過電動機(jī)的電流,來建立加速度計(jì)輸出的振動信號與檢測到的振動信號間的關(guān)聯(lián)關(guān)系,因此開展傳統(tǒng)的振動分析或是更先進(jìn)的信號特征分析就可以建立這一關(guān)聯(lián)。
具體指標(biāo)及整體系統(tǒng)的描述將占盡單獨(dú)一本白皮書的篇幅,故不在本白皮書中詳述。作為展示,圖 6 體現(xiàn)了超過閾值的滾珠軸承頻率限值信號由圖 7 中看似正常的電流波形中提取的。
圖 6:使用電流信號特征的振動分析
圖 7:三相電動機(jī)的波形(滾珠軸承信號特征被噪聲淹沒)
上述示例證明,只要正確理解了問題和 Zynq 產(chǎn)品組合特性,就能開展切實(shí)的高級診斷,為具備機(jī)器學(xué)習(xí)功能的工業(yè)物聯(lián)網(wǎng)系統(tǒng)敞開通向更智能方法的大門。
結(jié)論本白皮書僅涵蓋 PYNQ 框架的一些基礎(chǔ)知識,該框架將 Python 與 Zynq 組合結(jié)合為一體。PYNQ 框架提供了新的切實(shí)可能性,有助于打造能夠充分利用工業(yè)物聯(lián)網(wǎng)全部功能,以及機(jī)器學(xué)習(xí)提供的新興功能的系統(tǒng)。
邊緣計(jì)算機(jī)器學(xué)習(xí)的發(fā)展尚處于萌芽階段,而賽靈思致力于交付一流的產(chǎn)品和設(shè)計(jì)框架,以加快和簡化智能和自適應(yīng)資產(chǎn)的設(shè)計(jì)、部署與維護(hù)。這僅僅是動人旅程的開端,本白皮書中提及的許多話題將在后續(xù)的白皮書、應(yīng)用說明和示例中詳細(xì)介紹。其中一部分已經(jīng)在PYNQ GitHub 庫里提供。
評論