嵌入式系統(tǒng)的設(shè)計人員所面臨的最大挑戰(zhàn)之一,,在於確定系統(tǒng)的硬體設(shè)計究竟須具備多少性能,。用以確定真實(shí)效能需求的必要資訊不是付之闕如,就是難以獲得,。即便系統(tǒng)設(shè)計人員對硬體性能需求做精確的估算,,有時也會因意料之外的運(yùn)算任務(wù)而預(yù)估失準(zhǔn),。
因此,有些嵌入式系統(tǒng)開發(fā)人員認(rèn)為,,與其在設(shè)計初期對嵌入式系統(tǒng)的硬體性能需求進(jìn)行分析,,不如一開始就設(shè)計具備高度擴(kuò)充性的系統(tǒng),因為只要系統(tǒng)具有高度的可擴(kuò)充性,,就能夠適應(yīng)不斷變動的效能需求,。本文將以影像處理與視頻辨識這種對硬體效能要求嚴(yán)苛的應(yīng)用來說明,設(shè)計人員如何利用現(xiàn)場可編程閘陣列(FPGA)內(nèi)部建置的控制平面(Control Plane)與資料平面(Data Plane)處理架構(gòu)來滿足系統(tǒng)對性能與可擴(kuò)充性的要求,。
對于視頻監(jiān)控,、生產(chǎn)線自動檢測與醫(yī)學(xué)成像等應(yīng)用而言,視頻分析是頗受使用者歡迎的一項功能,。然由于視頻系統(tǒng)已經(jīng)普遍進(jìn)入高畫質(zhì)時代,,為針對如此龐大的資料流量進(jìn)行視頻分析,造成一般通用型處理器的挑戰(zhàn),。本文將介紹一種用FPGA實(shí)現(xiàn)視頻分析功能的替代性方案,,可協(xié)助研發(fā)人員在低成本的前提下,實(shí)現(xiàn)這類頗受市場歡迎的功能,。
控制/資料平面分工 嵌入式系統(tǒng)效能升級
在無法或者實(shí)際上不能用軟體完成所有處理工作的系統(tǒng)中,,設(shè)計人員可以透過多種方式來獲得系統(tǒng)所需的額外效能。設(shè)計人員可以採用對稱或者非對稱處理配置的多處理器,,利用額外的硬體實(shí)現(xiàn)輔助運(yùn)算器,,或者將資料處理任務(wù)拆分給一個或多個專用處理元件,例如把任務(wù)分拆,,分別交給控制平面與資料平面處理,。
在這種編程方式下,資料處理被分成兩個截然不同的面,??刂破矫娲碇鴮π苡绊懖淮蟮难菟惴ㄔ兀绻芾硇匀蝿?wù),、用戶介面和作業(yè)系統(tǒng)功能,。同時,資料平面代表著資料在系統(tǒng)中的移動,,例如視頻串流,、音訊串流及其處理。在資料平面上,設(shè)計人員採用如管線(Pipeline)的技術(shù)來增強(qiáng)資料傳輸能力,??刂破矫?資料平面處理的典型應(yīng)用包括串流視頻、網(wǎng)路封包處理及高速訊號處理,。
以高畫質(zhì)(HD)視頻串流特有的模式識別問題為例,,將串行資料即時處理的運(yùn)算任務(wù)分拆給控制平面與資料平面進(jìn)行處理,就是一種能有效解決問題的作法,。假設(shè)有一個視頻系統(tǒng),,其視頻串行的解析度為720p,畫面更新頻率為60Hz,,則其視頻串行的畫素率(Pixel Rate)為74.25MHz,。對處理器而言,這可以換算成222.75MBit/s的處理速率要求,。
高畫質(zhì)視頻處理是一種可以把任務(wù)分割為控制平面和資料平面,,并分別予以處理的常見實(shí)際應(yīng)用要求。作為一種高度平行處理的元件,,F(xiàn)PGA在本例中負(fù)責(zé)視頻處理,,同時由FPGA內(nèi)部的中等效能的處理器負(fù)責(zé)視頻處理管線。該處理器可專用於單個應(yīng)用,,也可以運(yùn)行如Linux般的作業(yè)系統(tǒng),。最終形成的硬軟體混合建置方案可以把處理工作交付給能夠進(jìn)行最佳處理的部分,實(shí)現(xiàn)低成本,、高效能資料處理解決方案,。圖1為典型的控制平面/資料平面系統(tǒng)。
假定采用運(yùn)行在2.5GHz的雙核心雙指令執(zhí)行處理器來處理該資料,,最佳的指令率為每秒一百億條指令,。這樣的處理器可針對所處理資料的每一位元組執(zhí)行22.4條指令。對某些應(yīng)用而言這已經(jīng)足夠了,,但事實(shí)上對復(fù)雜的視頻處理而言,,22.4條指令所能處理的資料其實(shí)非常有限。若設(shè)計人員想執(zhí)行內(nèi)核卷積(Kernel Convo-lution),、噪音消除和其他過濾功能,,處理器每秒須執(zhí)行的指令數(shù)遠(yuǎn)比上述數(shù)字來的多。因此,,最理想的解決方案之一,,便是在資料平面上創(chuàng)建平行或管線處理等單元,。
圖1典型的控制平面/資料平面處理系統(tǒng)
FPGA內(nèi)建處理器 降低控制平面實(shí)作成本
除了昂貴的特定應(yīng)用積體電路(ASIC),,F(xiàn)PGA是效能最高、最具經(jīng)濟(jì)效益的串行資料處理單元建置方法。FPGA因其靈活的架構(gòu)而能讓設(shè)計人員可建置包含并行和管線單元的處理系統(tǒng),,以最佳化系統(tǒng)的效能和延遲,。
雖然設(shè)計人員可利用FPGA的資料平面來滿足運(yùn)算需求外,但仍設(shè)法控制該資料平面,。以往,,設(shè)計人員必須透過外部的獨(dú)立微處理器來進(jìn)行控制。然而,,隨著FPGA整合嵌入式處理器的情況越來越普及,,設(shè)計人員所需的控制功能其實(shí)已不假外求。採用內(nèi)部整合的處理器能夠帶來多項優(yōu)勢,,例如能夠大大減少處理器和資料平面單元之間的控制延遲時間,,并減少電路板上布線與晶片接腳的需求量。
延遲時間減少,,可以釋放出更多處理器週期,,其對系統(tǒng)運(yùn)算性能的提升是顯而易見的。這是許多設(shè)計人員喜歡採用內(nèi)嵌式處理器的主因之一,。另外,,若設(shè)計人員使用外部處理器,因為外部處理器必須與資料平面保持通訊,,而通訊所需的通道寬度可能是32位元或更高,,因此設(shè)計人員必須用更多電路板布線與晶片接腳來進(jìn)行定址和控制。額外增加的連線可能會導(dǎo)致設(shè)計人員必須使用高階的處理器,,或是有更多輸入/輸出(I/O)的FPGA,,從而導(dǎo)致系統(tǒng)成本增加。
採用PCI Express介面能大幅度減少接腳與連線數(shù)量的需求,,但遺憾的是,,即便PCI Express在個人電腦(PC)領(lǐng)域已相當(dāng)普遍,但在嵌入式領(lǐng)域,,這種介面的普及率仍然不高,,且支援PCI Express的元件,其成本通常也遠(yuǎn)高於不採用PCI Express的同類元件,。
在FPGA內(nèi)部建置控制平面處理器和資料平面可以減少元件數(shù)量,、機(jī)板空間和功耗,最終形成一個低成本的解決方案,。在FPGA內(nèi)既可以硬體實(shí)作PowerPC等嵌入式硬核處理器,,也可以軟式建置賽靈思(Xilinx)的MicroBlaze等軟核處理器。此外還可以根據(jù)應(yīng)用要求配置以FPGA為基礎(chǔ)的處理器,。以FPGA為基礎(chǔ)的系統(tǒng)能夠在處理器和FPGA邏輯之間提供移動決策和計算功能,,從而達(dá)到系統(tǒng)級的優(yōu)化,。
設(shè)計工具/參考設(shè)計簡化系統(tǒng)建置
某些設(shè)計工具軟體可以簡化以FPGA為基礎(chǔ)的控制平面、資料平面系統(tǒng)建置工作,。使用軟體內(nèi)建的精靈工具或者透過調(diào)整現(xiàn)有參考設(shè)計來編譯系統(tǒng)是其中兩種常用方法,。
透過引導(dǎo)精靈,設(shè)計人員可以迅速編譯微處理器系統(tǒng),。在許多先進(jìn)的設(shè)計工具環(huán)境下,,設(shè)計人員只要使用下拉清單或者確認(rèn)方塊,就可以輕松配置特定的功能區(qū)塊,、需要的處理器和周邊配置,。設(shè)計人員也可以使用諸如MATLAB軟體這樣的工具來迅速編譯具有處理器介面的訊號處理管線,以實(shí)現(xiàn)控制功能,。還有些設(shè)計工具甚至支援C-to-HDL功能,,可構(gòu)建數(shù)位訊號管線??刂破矫?資料平面的連接也可以簡單地透過匹配匯流排介面來完成,。圖2顯示的是啟動引導(dǎo)精靈的說明視窗和採用引導(dǎo)精靈構(gòu)建的最終系統(tǒng)。
圖2引導(dǎo)精靈啟動螢?zāi)唤貓D和已完成的系統(tǒng)
除了藉由設(shè)計工具輔助外,,調(diào)整現(xiàn)有的參考設(shè)計也是設(shè)計人員常用的方法,。FPGA參考設(shè)計不斷發(fā)展,已成為市場焦點(diǎn),。在本文案例研究中使用的參考設(shè)計具有完整的微處理器系統(tǒng),、記憶體、周邊和720p高畫質(zhì)數(shù)位訊號處理管線,。因此,,該系統(tǒng)相當(dāng)於一款完整的控制平面與資料平面解決方案。在該參考設(shè)計中,,由處理器控制增益和管線中的有限脈衝響應(yīng)(FIR)濾波器,。使用C-to-FPGA工具創(chuàng)建目標(biāo)探測和強(qiáng)調(diào)顯示模組,讓整個系統(tǒng)具備所需功能所花的設(shè)計時間甚至不到20個小時,。
該處理器可以使用機(jī)板支援封包提供的補(bǔ)充驅(qū)動程式來控制資料管線,。目前已有針對Linux的驅(qū)動程式,可以讓處理器直接控制資料處理管線,。Linux運(yùn)用包括從Linux應(yīng)用中打開I/O元件,,然后針對該元件進(jìn)行讀出或者寫入。
尋找小丑魚 視頻識別系統(tǒng)輕松達(dá)成任務(wù)
目標(biāo)檢測和識別廣泛應(yīng)用於監(jiān)控,、醫(yī)學(xué)成像和工廠自動化等行業(yè),。圖像的解析度越高,目標(biāo)識別的準(zhǔn)確度越高,。因此,,對高畫質(zhì)攝影機(jī)和相關(guān)的高畫質(zhì)視頻串行處理功能的需求較為強(qiáng)勁,。本案例(圖3)研究試圖解決以下問題:在720p高畫質(zhì)視頻串行的條件下,能否檢測出畫面中的小丑魚,,并為它打上聚光燈效果以實(shí)現(xiàn)強(qiáng)調(diào)顯示在720p高畫質(zhì)視頻中的小丑魚(圖4),?
圖3小丑魚探測器控制平面/資料平面系統(tǒng)
圖4小丑魚探測器想做出的效果,。
為了辨識出小丑魚,,該設(shè)計需要16位元的色譜,以便識別小丑魚的條紋圖案,。一旦識別,,在螢?zāi)簧系男〕篝~將被打上移動的聚光燈明顯強(qiáng)調(diào)。此外,,聚光燈的大小經(jīng)設(shè)計后可以隨匹配的相似性而調(diào)整,。實(shí)際上,系統(tǒng)降低了除小丑魚周圍聚光燈外的其他區(qū)域圖像亮度,。聚光燈的尺寸變化和形狀計算,,以及為在每個畫素位置搜索小丑魚所進(jìn)行的比較,將為系統(tǒng)帶來大量的運(yùn)算能力,,處理器若要執(zhí)行這項功能,,需要的時脈周期可達(dá)74.25MHz。顯然,,這樣的處理要求大大超出一般嵌入式處理器的能力,。
在這種情況下,最好的解決辦法是把串行資料處理轉(zhuǎn)移到輔助運(yùn)算器上,。在FPGA內(nèi)部建置輔助運(yùn)算器能夠以最低成本靈活構(gòu)建能夠滿足效能要求的解決方案,。因此,以FPGA為基礎(chǔ)的控制平面,、資料平面架構(gòu)就是最佳選擇,。FPGA嵌入式處理可以透過匯流排介面控制負(fù)責(zé)接收視頻資料、探測小丑魚,、強(qiáng)調(diào)顯示小丑魚并輸出供顯示之用的視頻資料的數(shù)位訊號處理管線,。
因此,在本目標(biāo)檢測和強(qiáng)調(diào)顯示案例中,,研發(fā)人員選擇50MHz的MicroBlaze嵌入式處理器來管理和控制74.25MHz的資料處理管線,,同時管理用戶介面。在免除了實(shí)際執(zhí)行視頻處理的責(zé)任后,,處理器可以處理許多其他的功能,,比如託管乙太網(wǎng)路(Ethernet)資料通訊、管理圖形用戶介面(GUI),、對資料處理管線進(jìn)行精細(xì)控制,,如逐幀增益控制等,。
Linux這類作業(yè)系統(tǒng)是提供多工功能、網(wǎng)路協(xié)定堆疊和用戶介面語言支援的理想選擇,。圖3顯示所建置系統(tǒng)的方框圖,。該解決方案可以在高資料處理頻寬需求和用軟體控制資料處理方式之間實(shí)現(xiàn)理想的平衡。
與FPGA製造商合作的Linux供應(yīng)商已經(jīng)開發(fā)完成了可讓處理器與FPGA溝通并對其進(jìn)行控制的驅(qū)動程式,。首先,,設(shè)計必須針對該I/O元件配置Linux。配置步驟由兩個步驟組成,。首先,,把定制的驅(qū)動程式載入到Linux內(nèi)核中:
隨后,將驅(qū)動程式註冊到特定的元件號碼(比如253):
,、
通訊是透過開啟該I/O元件,、然后對該元件進(jìn)行讀寫而完成的,示例編碼段落如下所示:
C-to-FPGA工具實(shí)現(xiàn)軟硬體協(xié)同設(shè)計
C-to-FPGA編譯器可以讓開發(fā)人員使用新的開發(fā)工具組和新技術(shù)解決軟體與硬體開發(fā)問題,。開發(fā)人員可以先在軟體中進(jìn)行演算法編碼,。根據(jù)筆者的過去經(jīng)驗,在軟體中開發(fā)演算法比在硬體中開發(fā)演算法的效率更高,,因為C語言這類軟體語言能夠讓編碼人員在更高的層面上開發(fā)演算法,,而這種層次是使用Verilog或VHDL這樣的硬體定義語言所無法達(dá)到的;其次,,與同類的硬體開發(fā)工具相比,,針對C語言的調(diào)整和測試工具運(yùn)行速度更快、效率更高,,通常也更易於使用,。相當(dāng)于硬件演算法,C語言演算法可以在目標(biāo)處理器上全速運(yùn)行,,而硬件演算法須要先在類比程式上完成測試和調(diào)整,;最后,C語言開發(fā)工具較同類硬件開發(fā)工具的成本要低得多,。因此,,工程人員一般傾向於在C語言或者類似的高階語言中開發(fā)演算法。
一旦使用C語言這樣的軟體語言完成對某個演算法的驗證,,設(shè)計人員必須測量其效能,,并確定該演算法是否能夠完全在嵌入式處理器或是硬件上運(yùn)行、或者硬軟體混合協(xié)同處理建置方案是否為最佳選擇,。在這種判斷過程中可以採用效能分析工具,。如果編碼必須被轉(zhuǎn)到硬件上,則設(shè)計人員必須手工轉(zhuǎn)換演算法,,或者使用C-to-FPGA工具,。
C-to-FPGA工具可以讓開發(fā)人員迅速把演算法轉(zhuǎn)為HDL,,對產(chǎn)生的硬件處理器進(jìn)行最佳化,并在一些假設(shè)的場景下平衡效能和FPGA資源,。該工具還能夠讓軟體工程師使用FPGA內(nèi)部的高效能資料處理邏輯,,從而變身為硬件工程師。
FPGA加持 視頻分析功能輕鬆實(shí)現(xiàn)
數(shù)位訊號處理器(DSP)系統(tǒng)的資料頻寬要求非常高,,設(shè)計人員如果不採用昂貴的高性能通用處理器,,往往無法滿足應(yīng)用需求。在這種情況下,,設(shè)計人員一般會把資料處理系統(tǒng)畫分為兩個處理功能:使用通用處理器進(jìn)行控制處理,,然后由FPGA來擔(dān)任硬件加速器,,以進(jìn)行資料處理,。這種架構(gòu)就是一個典型的控制平面和資料平面處理系統(tǒng)。
然而,,在FPGA內(nèi)建嵌入式處理器的情況越來越普遍后,,設(shè)計人員其實(shí)已不太須要使用外部處理器,因為FPGA就已經(jīng)可以同時實(shí)現(xiàn)控制平面和資料平面功能,。一個FPGA可以包含一個或者多個像MicroBlaze這類軟核處理器,,或像PowerPC這類硬核處理器。將它們整合到FPGA中,,可以實(shí)現(xiàn)控制平面處理器和資料平面處理系統(tǒng)之間的低延遲,、高頻寬通訊。
借助引導(dǎo)精靈和預(yù)先構(gòu)建的參考設(shè)計,,針對嵌入式和資料處理功能的系統(tǒng)編譯簡單明瞭,。透過把在C語言中構(gòu)建的演算法原型轉(zhuǎn)換到高效能硬件處理單元,C-to-FPGA工具有助于優(yōu)化這一流程,。最后,,可以利用目前可用的Linux驅(qū)動程式輕松地完成處理器和FPGA訊號處理管線之間的通訊及控制編碼。
本案例研究是一個典型的應(yīng)用示例,,在這個例子中,,透過低成本通用處理器處理高畫質(zhì)視頻流是不可行的,但是可以透過FPGA內(nèi)部的訊號處理管線輕松加以解決,。處理器隨即被釋放出來用於提供用戶介面,、網(wǎng)絡(luò)和系統(tǒng)管理功能,并同時監(jiān)測和控制信號處理管線,。