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