MicroBlaze微處理器在實(shí)時(shí)汽車(chē)系統(tǒng)中的應(yīng)用
掃描二維碼
隨時(shí)隨地手機(jī)看文章
普遍認(rèn)為開(kāi)發(fā)多處理器系統(tǒng)軟件的難度要大于單處理器系統(tǒng)。但實(shí)際情況并非總是如此。我們這個(gè)在 TRW 汽車(chē)公司下屬的咨詢(xún)部 TRW Conekt 工作的設(shè)計(jì)團(tuán)隊(duì)最近接管了一個(gè)項(xiàng)目,展示了如何根據(jù)手中的問(wèn)題發(fā)揮硬件的功能,并通過(guò)使用許多個(gè)處理器開(kāi)發(fā)出高效系統(tǒng)。
我們小組接到了一項(xiàng)任務(wù),為一個(gè)名為“Foot-LITE”的項(xiàng)目開(kāi)發(fā)車(chē)載嵌入式處理電子系統(tǒng)(該項(xiàng)目由MIRA 公司牽頭,英國(guó)政府支持的技術(shù)戰(zhàn)略委員會(huì)、交通部和工程物理科學(xué)研究所贊助)。該項(xiàng)目能夠?yàn)轳{駛員提供反饋信息,從安全和燃油經(jīng)濟(jì)性的角度讓他們了解他們的駕駛習(xí)慣。
該系統(tǒng)通過(guò)兩種方式為駕駛?cè)藛T提供反饋。一是,由一個(gè)儀表盤(pán)式的智能電話顯示系統(tǒng)(由布魯塞爾大學(xué)設(shè)計(jì),HW CommunicaTIons 公司開(kāi)發(fā))向駕駛員提供與需要立即關(guān)注的事件有關(guān)的實(shí)時(shí)通信。二是,該系統(tǒng)還能夠連續(xù)采集行程數(shù)據(jù),包括特別“事件”的視頻流,然后將其上傳到互聯(lián)網(wǎng)服務(wù)器,供用戶(hù)在閑暇時(shí)查看。根據(jù)我們的合作伙伴汽車(chē)高級(jí)駕駛協(xié)會(huì) (Institute of Advance Motorists) 提出的駕駛建議,另一個(gè)合作伙伴英國(guó)里卡多有限公司 (Ricardo UK) 開(kāi)發(fā)出了一種算法,能夠決定哪些事件需要標(biāo)出來(lái)提醒用戶(hù)注意。
該項(xiàng)目將把這個(gè)系統(tǒng)安裝到由30輛車(chē)組成的車(chē)隊(duì)里。測(cè)試車(chē)手由項(xiàng)目合作方Hampshire縣議會(huì) (Hampshire County Council) 公開(kāi)招募。
該項(xiàng)目將逐步納入由12家行業(yè)、政府和學(xué)術(shù)合作伙伴協(xié)同研究的成果。這意味著我們需要非常靈活的解決方案來(lái)解決我們的處理問(wèn)題。
起初,我們想提供單處理器系統(tǒng)。不過(guò)很快發(fā)現(xiàn),專(zhuān)用處理器可以簡(jiǎn)化算法開(kāi)發(fā)工作每次迭代所需的集成工作。
基本系統(tǒng)
我們已經(jīng)有一種處理器系統(tǒng),目前正在另一個(gè)項(xiàng)目中進(jìn)行開(kāi)發(fā),主要用于圖像處理(圖2)。
該系統(tǒng)基于連接到 4 個(gè)獨(dú)立的DDR存儲(chǔ)塊的單個(gè)Xilinx? Spartan?-3A XC3SD3400A器件。該架構(gòu)可以讓用戶(hù)實(shí)現(xiàn)眾多不同的處理器/邏輯配置。舉例來(lái)說(shuō),可以把整個(gè) FPGA 結(jié)構(gòu)用作完全采用HDL定義的純邏輯資源。另外,還可以使用更高級(jí)的工具,比如賽靈思EDK來(lái)實(shí)現(xiàn) 4 個(gè)(或者更多)的軟核微處理器。每個(gè)軟核微處理器都可以訪問(wèn)自己專(zhuān)用的DDR存儲(chǔ)設(shè)備,保護(hù)數(shù)據(jù)免遭其它微處理器的干擾。對(duì)于其他的簡(jiǎn)單工作,可以使用內(nèi)嵌的BRAM塊來(lái)實(shí)現(xiàn)更多的處理器。
圖 1 – Foot-LITE 系統(tǒng)
此外,可以采用小型子卡來(lái)配置對(duì)外的I/O,從而可以針對(duì)不同的項(xiàng)目迅速轉(zhuǎn)換定制的I/O設(shè)置。
項(xiàng)目合作伙伴很早就決定采用USB接口,因?yàn)檫@樣可以向系統(tǒng)添加各種外設(shè)。然而這需要一些形式的USB 協(xié)議棧——我們通過(guò)使用Petalinux版本的uclinux獲得,以及一個(gè)配有USB主機(jī)設(shè)備的子卡。
使用 Linux 還為我們提供了一種管理SPI閃存設(shè)備的簡(jiǎn)單方法,該系統(tǒng)可提供 FPGA 比特流和應(yīng)用代碼存儲(chǔ)。我們安裝了一個(gè)簡(jiǎn)單的 JFFS2 文件系統(tǒng),可以通過(guò)以太網(wǎng)(使用 FTP)或啟動(dòng)USB 記憶棒(包含一個(gè)腳本,用以將新代碼上載到內(nèi)部閃存上)來(lái)實(shí)現(xiàn)現(xiàn)場(chǎng)應(yīng)用升級(jí)。在傳統(tǒng)的嵌入式系統(tǒng)中,所有這些要求都需要軟件小組編寫(xiě)底層應(yīng)用代碼。不過(guò),在有了 Linux 之后,我們可以輕松地編寫(xiě)簡(jiǎn)單的 Bash 腳本來(lái)控制這些流程。
Foot-LITE 算法
Ricardo開(kāi)發(fā)出了用于評(píng)估駕駛員行為的核心算法,并將其應(yīng)用在自己的 rCube 快速原型設(shè)計(jì)系統(tǒng)上 (http://www.ricardo.com/en-gb/ Engineering-Consulting/AutomotiveExpertise/Controls--Electronics/ Embedded-Software/rCube/)。我們采用這種方法進(jìn)行了初步的仿真器測(cè)試,并在三輛測(cè)試車(chē)輛上進(jìn)行了試用。在測(cè)試車(chē)輛上,一個(gè)嵌入式視覺(jué)系統(tǒng)(基于現(xiàn)有的 TRW 產(chǎn)品——湊巧也有 FPGA)用于測(cè)量與前車(chē)之間的距離,并評(píng)估車(chē)輛在車(chē)道上的位置。測(cè)試車(chē)輛還可通過(guò)雷達(dá)系統(tǒng)提供距離信息。作為投產(chǎn)前的一個(gè)步驟,我們?cè)诟笠?guī)模的試驗(yàn)中取消了雷達(dá)系統(tǒng),因?yàn)橐曈X(jué)系統(tǒng)已經(jīng)能夠?yàn)閼?yīng)用提供足夠的信息。
我們?cè)谲?chē)輛上安裝了前視攝像頭和處理子系統(tǒng),兩者整合成一個(gè)小型設(shè)備,安裝在后視鏡的旁邊。子系統(tǒng)中的嵌入式算法可通過(guò)視頻圖像處理來(lái)測(cè)量車(chē)身和車(chē)道邊緣之間的距離。此外,并行算法還可檢測(cè)到 Foot-LITE 車(chē)輛前面的車(chē)輛,并測(cè)量車(chē)頭間距。該子系統(tǒng)使用汽車(chē)標(biāo)準(zhǔn)的控制器局域網(wǎng)(CAN) 總線將數(shù)據(jù)傳輸給Foot-LITE子系統(tǒng)單元。
我們?cè)?Foot-LITE單元中集成了三軸加速計(jì)和橫擺角速度傳感系統(tǒng),這可以給Foot-LITE算法提供在需要時(shí)訪問(wèn)高速率、低延時(shí)車(chē)輛動(dòng)態(tài)信息的可能。
Foot-LITE 算法把所有的數(shù)據(jù)整合在一起,為駕駛員提供一系列與他的(或她的)駕駛風(fēng)格相關(guān)的簡(jiǎn)潔信息。[!--empirenews.page--]
算法實(shí)施
起初,我們想提供一種單處理器系統(tǒng)。不過(guò)很快發(fā)現(xiàn),專(zhuān)用處理器可以簡(jiǎn)化算法開(kāi)發(fā)工作每次迭代所需的集成工作。我們把主處理器和 Foot-LITE 算法處理器隔離開(kāi)來(lái),中間用MicroBlaze? Fast Simplex Link (FSL) 總線系統(tǒng)來(lái)實(shí)現(xiàn)通信。這樣可以把兩個(gè)處理器的存儲(chǔ)完全隔離開(kāi)來(lái)(與常見(jiàn)的共享存儲(chǔ)的做法不同),可以大幅度簡(jiǎn)化集成工作,因?yàn)殄e(cuò)誤不會(huì)通過(guò)內(nèi)存損壞而從一個(gè)處理器遷移到另一個(gè)處理器上。
此外,這樣可以避免對(duì)處理器周期的競(jìng)相爭(zhēng)用。這就意味著我們的合作伙伴可以放心,我們對(duì)主機(jī)應(yīng)用所做的任何修改都不會(huì)影響他們的應(yīng)用性能。
圖 2 – 基于 Spartan 的處理模塊
我們開(kāi)發(fā)了一系列封裝功能,允許我們?cè)L問(wèn)Simulink? 編譯器生成的 C 語(yǔ)言程序,而無(wú)需對(duì)接口進(jìn)行大幅更改。我們可通過(guò) I2C 總線提供少量非易失板上緩存空間,用于存儲(chǔ)Foot-LITE 算法中的各種調(diào)節(jié)參數(shù) (tune parameter)。這就需要一個(gè)簡(jiǎn)單的封裝程序,以便算法在 Simulink 環(huán)境下實(shí)現(xiàn)輕松訪問(wèn),從而在啟動(dòng)時(shí)讀取該內(nèi)存,并在關(guān)斷時(shí)寫(xiě)回。
該系統(tǒng)需要測(cè)量加速度和橫擺角速度,并通過(guò)CAN總線與車(chē)道和車(chē)輛檢測(cè)系統(tǒng)通信。由于我們已經(jīng)有了底層CAN 驅(qū)動(dòng)程序,而且我們擔(dān)心Linux應(yīng)用在40毫秒的時(shí)間范圍內(nèi)測(cè)量車(chē)輛動(dòng)態(tài)信息的及時(shí)性,我們決定在系統(tǒng)中再增加一個(gè)MicroBlaze。這樣可以不必把 CAN 驅(qū)動(dòng)程序?qū)隠inux,而且可以通過(guò)另一個(gè)隔離的處理節(jié)點(diǎn)實(shí)現(xiàn)確定的性能。這對(duì)算法非常重要,因?yàn)樗惴ㄊ褂玫膭?dòng)態(tài)測(cè)量值。此外,這種方法還可以讓我們把編寫(xiě)軟件的工作拆開(kāi),進(jìn)行并行開(kāi)發(fā)。這里我們還是使用 FSL 作為動(dòng)態(tài)處理器和Foot-LITE 算法處理器之間的接口。
視頻捕獲與壓縮
系統(tǒng)的初步構(gòu)想是把視覺(jué)系統(tǒng)的數(shù)據(jù)通過(guò)CAN 總線傳輸給 Foot-LITE 算法單元,為車(chē)道寬度和偏移量、與前方車(chē)輛之間的距離等提供簡(jiǎn)單的測(cè)量。項(xiàng)目合作伙伴決定強(qiáng)化其設(shè)置,將捕獲到的視頻幀傳輸?shù)椒?wù)器,進(jìn)行離線環(huán)境分析,以轉(zhuǎn)譯系統(tǒng)提供的信息的含義。鑒于這項(xiàng)要求只針對(duì)“互聯(lián)網(wǎng)質(zhì)量”的視頻(頻率為5 Hz 時(shí),像素為 300x200),我們覺(jué)得我們可以再用一個(gè) MicroBlaze,把視頻流實(shí)時(shí)壓縮成一系列 JPEG 圖像。攝像頭捕獲的圖像是寬VGA(頻率為30Hz 時(shí),像素為 720 x 480,)視頻流。很明顯,圖像降采樣工作應(yīng)該交給硬件來(lái)做。
我們?cè)O(shè)計(jì)了一個(gè)簡(jiǎn)單的外設(shè),通過(guò)交替去掉像素和行來(lái)進(jìn)行降采樣操作,生成360 x 240的圖像。該外設(shè)還每 5 幀去掉 4 幀,以獲得所需的幀率。無(wú)需進(jìn)行更復(fù)雜的處理就可以獲得視覺(jué)上可以接受的結(jié)果,因?yàn)镴PEG 處理會(huì)讓走樣的人為效果不可見(jiàn)。我們使用系統(tǒng)生成器來(lái)開(kāi)發(fā)該外設(shè),因?yàn)樗梢灾苯訉?dǎo)出到 EDK,而且我們已經(jīng)有了使用系統(tǒng)生成器進(jìn)行更加復(fù)雜的圖像處理的經(jīng)驗(yàn)。
進(jìn)入連接到 JPEG 處理器的 SDRAM 的數(shù)據(jù)由降采樣外設(shè)的總線負(fù)責(zé)控制,數(shù)據(jù)隨即被逐幀壓縮,送入循環(huán)緩沖區(qū),直到Foot-LITE算法發(fā)出標(biāo)志。JPEG處理器將壓縮后的視頻幀(也是通過(guò) FSL)發(fā)送到主機(jī) MicroBlaze。我們使用獨(dú)立 JPEG 小組提供的代碼庫(kù),而且發(fā)現(xiàn)基本不需要優(yōu)化就可以工作在 5Hz 的條件下。
另外,通過(guò)隔離的處理器讓另一位軟件工程師(身處異地)在進(jìn)行系統(tǒng)相同部分開(kāi)發(fā)的時(shí)候,都可以并行不悖。[!--empirenews.page--]
用藍(lán)牙連接到智能電話和車(chē)載診斷系統(tǒng)
簡(jiǎn)便的安裝是這個(gè)項(xiàng)目的關(guān)鍵因素。減少系統(tǒng)使用的線纜數(shù)量也是需要考慮的重要方面。
我們選用藍(lán)牙做為連接到智能電話的接口。標(biāo)準(zhǔn)USB藍(lán)牙連接器的驅(qū)動(dòng)程序是ucLinux內(nèi)核的標(biāo)配,雖然我們不得不自己構(gòu)建用戶(hù)空間工具。以上這些工作跟其他代碼有著許多關(guān)聯(lián)性,而這些代碼也都是經(jīng)過(guò)Petlinux的工具包交叉編譯并添加到ucLinux的 文件系統(tǒng)中。
我們選定藍(lán)牙作為智能電話接口后,我們自然也選擇藍(lán)牙作為連接到板載診斷系統(tǒng)的接口。我們使用標(biāo)準(zhǔn)的現(xiàn)成藍(lán)牙-車(chē)載診斷系統(tǒng) (Bluetooth-OBD) 接口模塊,這樣從系統(tǒng)中省掉了又一個(gè)有線鏈接。
圖 3 — 顯示主要外部元件的FPGA框圖[!--empirenews.page--]
簡(jiǎn)便的調(diào)試
調(diào)試有多個(gè)并行執(zhí)行線程的系統(tǒng)往往難度較大。不過(guò)把系統(tǒng)劃分給多個(gè)處理器就可以使事情變得簡(jiǎn)單。我們不需要多線程調(diào)試器(比如在Linux環(huán)境中調(diào)試多個(gè)處理器時(shí)所需要的)。賽靈思調(diào)試器 (XMD) 可以連接到多個(gè)處理器上,而且通過(guò)使用TCL(XMD能理解的工具命令行語(yǔ)言),我們可以自動(dòng)完成設(shè)置,并將待測(cè)的代碼下載到多個(gè)處理器上。當(dāng)然,也可以使用采用 printf 聲明的常規(guī)嵌入式系統(tǒng)調(diào)試方法,因?yàn)槊總€(gè)處理器都有自己的串行端口。
在調(diào)試處理器間通信時(shí)具有重大價(jià)值的另一種工具是 ChipScope? Pro。該嵌入式邏輯分析器內(nèi)建在 FPGA 結(jié)構(gòu)中,讓我們可以捕獲通過(guò)FSL 鏈路的數(shù)據(jù),把隱藏較深的缺陷的漏洞排查到發(fā)送方或者接收方,然后進(jìn)行代碼的逐行排查。
使用四個(gè)處理器實(shí)現(xiàn)的隔離的意義在于,當(dāng)某個(gè)元件被調(diào)試過(guò)后,基本上不需要再調(diào)試。這樣可以避免在把不同來(lái)源的代碼集成到大型獨(dú)立應(yīng)用中,或者在單個(gè)處理器上運(yùn)行多個(gè)進(jìn)程時(shí),因奇奇怪怪的相互作用而產(chǎn)生的諸多問(wèn)題。
FPGA 實(shí)現(xiàn)
這個(gè)項(xiàng)目基本不涉及 HDL,只用高級(jí)封裝程序把基于 EDK 的設(shè)計(jì)與一小段看門(mén)狗代碼整合在一起,確保系統(tǒng)在駕駛?cè)藛T熄火后關(guān)閉。 EDK生成了FPGA的主體部分(MHS 文件長(zhǎng)度超過(guò)1,300 行!),而系統(tǒng)生成器負(fù)責(zé)生成視頻降采樣器。我們對(duì)四個(gè)微控制器都配置使用了高速緩存和浮點(diǎn)單元。在使用四個(gè)處理器、四個(gè) DDR 存儲(chǔ)接口以及一系列外設(shè)(包括以太網(wǎng)、SPI、IIC、CAN、UART、定時(shí)器和 GPIO)之后,器件約七成的查找表都被占用了(大約2.8萬(wàn)個(gè)查找表)。與基于微控制器的 FPGA 的通常情況一樣,塊存儲(chǔ)器的使用率非常高,超過(guò)了 90%,或者119 個(gè)BRAM,但 DSP 模塊使用率相對(duì)較低:只有每個(gè)處理器的浮點(diǎn)單元需要它們(每個(gè)處理器 8 個(gè),總計(jì) 32 個(gè))。
整合主微處理器從內(nèi)部閃存引導(dǎo) Linux 內(nèi)核,然后加載內(nèi)部文件系統(tǒng)。每個(gè)從處理器都有基于FSL的引導(dǎo)載入程序,可以接受標(biāo)準(zhǔn)的 S-record文件,對(duì)其進(jìn)行解析并將其拷貝到本地存儲(chǔ)中,然后執(zhí)行。Linux 處理器把 S-record文件從文件系統(tǒng)中直接發(fā)送到 FSL 偽文件(使用內(nèi)置的 dd 實(shí)用程序)。如上文所述,所有的處理器間通信都通過(guò)完全連接的 FSL 鏈路網(wǎng)格完成。FSL 鏈路網(wǎng)格的帶寬為 32 位,運(yùn)行頻率為60MHz,能夠提供大量的低時(shí)延通信帶寬。雖然避免使用共享存儲(chǔ)可能會(huì)帶來(lái)限制,但這樣做可以實(shí)現(xiàn)上文已經(jīng)探討過(guò)的隔離所帶來(lái)的優(yōu)勢(shì)。硬件架構(gòu)與應(yīng)用要求的劃分吻合良好,實(shí)現(xiàn)了直觀的軟件分區(qū)。
有需要時(shí),F(xiàn)oot-LITE 算法微處理器會(huì)向 JPEG 壓縮器發(fā)出觸發(fā)信號(hào),同時(shí)與智能電話顯示器通信。Linux 處理器在藍(lán)牙通信和系統(tǒng)其余部件之間充當(dāng)媒介作用(如圖3 所示)。除了向駕駛?cè)藛T發(fā)出即時(shí)信號(hào),它將有關(guān)車(chē)輛狀態(tài)的連續(xù)信息流以及偶發(fā)的視頻流通過(guò)智能電話上傳到中央服務(wù)器。
在旅途結(jié)束,駕駛?cè)藛T熄火時(shí),主處理器會(huì)通知從處理器,隨即從處理器啟動(dòng)各自的關(guān)閉流程(比如將更新的參數(shù)寫(xiě)入非易失調(diào)節(jié)存儲(chǔ)器),然后告知主處理器它們已經(jīng)可以安全地關(guān)閉了。此時(shí),主處理器向電源發(fā)出信號(hào),然后系統(tǒng)進(jìn)入極低功耗睡眠模式,等待下一次發(fā)動(dòng)。如果在熄火后兩分鐘軟件還沒(méi)有發(fā)出關(guān)閉信號(hào)(不過(guò)這種情況一般不太可能發(fā)生),F(xiàn)PGA 結(jié)構(gòu)中的硬件定時(shí)器會(huì)切斷電源,避免耗盡車(chē)輛的電池。
在項(xiàng)目收尾階段,來(lái)自由紐卡斯?fàn)柎髮W(xué)和南安普頓大學(xué)兩名學(xué)術(shù)界人士將分析在實(shí)際高速公路行駛狀態(tài)下車(chē)輛輸出數(shù)據(jù),以評(píng)估該系統(tǒng)引導(dǎo)駕駛?cè)藛T行為的效能。
FPGA 的優(yōu)勢(shì)
FPGA 提供了高度的靈活性,與固定硬件平臺(tái)相比,能夠更輕松地滿足日新月異的項(xiàng)目需求。另一大優(yōu)勢(shì)是,F(xiàn)PGA 能夠集成到定制化硬件中,滿足密集型應(yīng)用(比如視頻)需求。在使用 Linux 的情況下,可以方便地對(duì)諸如以太網(wǎng)這樣的外設(shè)進(jìn)行高級(jí)訪問(wèn),同時(shí)不會(huì)影響實(shí)時(shí)性能,這樣就可以把這些關(guān)鍵性的工作交給它們各自的微處理器來(lái)處理。最終,如果是由一個(gè)大型的、位于不同地理位置的團(tuán)隊(duì)在開(kāi)發(fā)該軟件,使用與功能劃分相匹配的硬件架構(gòu)有助于開(kāi)發(fā)和集成工作。