低功率系統設計不僅已成為手持移動設備的強制要求,汽車信息娛樂系統同樣要求低功率系統設計。此外,汽車系統需要能夠將在家庭和辦公室的用戶體驗帶到車上。對海量計算、高質量和低功耗解決方案的不斷增長的需求迫使嵌入式計算訴求多核系統。因此,基于多核平臺的嵌入式解決方案已經在移動、汽車、醫療和工業等應用領域中的游戲、視頻和圖像處理等許多應用中普及開來。
多核系統設計面臨的挑戰在于:利用基于多核的系統和可用的媒體框架,提供開放源代碼訪問和可移植性的可擴展性,以實現對低功耗、高性能嵌入式應用的需求。隨著強大的軟硬件可編程片上系統(SoC)FPGA器件的出現,嵌入式系統設計人員能夠根據客戶的需要設計出精確滿足形狀、功能和性能要求的解決方案。這些解決方案是滿足最終客戶要求的最佳、高效、具成本效益的方案。賽靈思的Zynq SoC系列FPGA就是這樣的器件。
本文介紹了使用低成本、低密度的Zynq FPGA為載客工具(小汽車、公交車、火車、飛機和船舶)的信息娛樂系統創建一個計算平臺。這種平臺的其它應用包括用于私人和公共場所的數字標牌和信息顯示器,如在旅館、醫院、加油站或售貨亭等場所;以及用于消費市場的數字相框。
車載信息娛樂體驗面臨著匹配家庭或辦公室的用戶體驗的雙重要求,同時還要滿足汽車行業的能效要求。在我們的案例中,具體要求是構建極低成本、低功耗,720p/30fps的影音播放器方案,它要具有視頻-音頻同步功能、能夠與客戶在可編程結構上實現的硬件模塊連接。這一目標是通過開發與硬件實時加速緊密耦合的多核軟件來實現的,且同時著眼于大大降低BOM、一次性工程(NRE)費用、設計風險,以及極其重要的更快的上市時間。
客戶要求多?通用SoC無法滿足?自己來Design Start設計一顆
我們對Atria Logic AL-AVPLR-IPC 影音播放器的要求進行了分解,它包括:文件讀取器、解復用器、具有色彩空間轉換器的H.264 Baseline Profile HD解碼器和AAC-LC立體聲解碼器。還包括具有用于基本播放器操作的內置GUI的影音播放器應用,諸如播放、暫停、停止和快進特技模式等。由Ubuntu LTS提供操作系統支持,因為它提供了極高效核利用率的多核使用。影音播放器應用完全基于Linux GTK,而解碼器本身則完全由Linux GStreamer開源多媒體框架實現。播放器的框圖如下圖1所示。
圖1:Atria Logic 影音播放器框圖。(來源:Atria Logic Inc)
我們覺得賽靈思Zynq-7000系列的Z-7010器件為最佳選擇,它滿足所有要求。該基于ARM的可編程SoC提供最高的CPU性能和最佳的熱性能。同時,該器件為那些需要用邏輯陣列實現加速器引擎的需求提供了足夠的可編程構造資源,從而確保即使對于這種低功耗平臺也具有足夠的性能。我們選用該器件的另一個原因是其提供了現成的小巧Zybo開發板,可加快我們的開發進度、盡快出成果。
除了可定制實現膠合邏輯、RAM和DSP功能的可編程邏輯外,Zynq架構還包括一個帶有Neon DSP引擎的雙核ARM Cortex-A9 CPU、一個完整的串行I/O陣列、USB和PCIe接口、加密/解密引擎、GbE和存儲器控制器。低功耗、集成的CAN總線接口和擴展的溫度選項使Zynq系列的這款完全硬件和軟件可編程的SoC非常適合低功耗、低成本的汽車信息娛樂應用。
視頻解碼可以30幀/秒的速率處理高達1280×720分辨率的HD圖像,立體聲音頻解碼為48kHz。音頻和視頻保持了完美同步,避免了對白不同步的問題。
設計實現面臨的挑戰是:盡可能多地留下可用于實現其它功能的可編程邏輯,且同時保持低功耗。這意味著該實現需要充分利用可用的ARM核和Neon DSP,同時優化固件以盡可能高效地運行。這是通過充分利用Ubuntu中的多線程和對稱多處理(SMP)功能實現的。
播放器將音頻和視頻指定為在獨立線程上運行的流水線的一部分,用于在兩個ARM Cortex-A9內核上并行執行。AAC-LC音頻解碼器的負荷比H.264視頻解碼器小得多。因此,視頻解碼器分為兩個線程,以充分利用兩個核,每個核運行在667MHz。在圖2中,視頻線程2生成一個新線程,線程4,這兩個視頻線程在兩個不同的核上運行。
圖2:多線程視頻和音頻解碼執行。(來源:Atria Logic公司)
影音播放器GUI應用程序在單線程、線程1上啟動。壓縮的音頻數據和視頻數據分別在線程2和線程3中排隊,以保持堆棧溢出限制。對這兩個線程中音頻和視頻數據的解復用(De-multiplexing)將解耦在兩個獨立的音頻和視頻處理線程中的數據接收器(sink data)中處理。
Ubuntu操作系統需要估算每個線程所需的最大堆棧空間。每個線程或分支的多隊列或單隊列元素用于并行或流水線執行任務。操作系統互斥器(mutexes)的所有必需的鎖止被啟動。在存儲器子系統棧空間被正確鎖定和解鎖的情況下,產生新的視頻線程或保持在特定核上的小負荷(small hold)的音頻線程。在返回線程時,進程被破壞。但Linux準系統(bare bone)線程無法自動解除分配的本地堆棧存儲器。因此,父進程通過將堆棧空間添加到malloc()自由列表來回收存儲器空間作為線程清除。用于影音播放器的代碼存儲器是16KB,而數據存儲器被限制為4KB。用于完整框架的整個系統存儲器限制為512MB。可以通過僅保留Gstreamer框架的已用特性并剔除未用特性以在很大程度上實施優化。
多線程方法實現的音頻和視頻解碼,最高效地利用了兩個核。Gstreamer最初運行的播放器的效率低下,CPU1的利用率只有66%,CPU2的利用率只有81%。線程流水線實現了近100%的核利用率,效率提高了29~34%。
但幾乎100%的核利用率仍不足以滿足播放器的性能要求。一個選擇是在SoC的可編程邏輯部分實現色彩空間轉換。雖然這將減少可能需要的可用于其它系統邏輯的可編程邏輯的存量,視頻質量與使用定點邏輯相比差一些。
因此,我們選擇在Neon DSP引擎上實現色彩空間轉換模塊。 Cortex-A9 Neon MPE使用ARM v7高級SIMD和向量浮點指令集擴展了CPU核的功能。充分利用Neon DSP的能力利用32位、64位和128位四元寄存器執行浮點計算明顯加速了YUV420到RGB444的色彩空間轉換,并且通過利用用于SIMD操作的并行向量數據排列,設法將兩個Neon DSP引擎的使用減少到一個。
下面的列表顯示了使用Neon DSP引擎的色彩空間轉換例程的示例代碼列表。Neon DSP還以實時數據解交織的方式支持了多個寄存器的并行加載和存儲。
列表:由Neon DSP引擎實現的YUV到RGB色彩空間轉換例程(來源:Atria Logic公司)
用于色彩空間轉換矩陣例程的Neon DSP代碼優化率為1.4×至1.64×。 表1列出了具有不同比特率、大小和復雜性的不同流的結果的詳細信息。
表1:由Neon DSP色彩空間轉換代碼實現的H.264 + AAC播放器的性能結果。(來源:Atria Logic Inc)
將去模塊化濾波器執行轉移到一個Neon DSP引擎是降低負荷的另一種可能方式。
在帶有ARM Cortex-A9 @667MHz核的賽靈思Z-7010 SoC FPGA上,該方案以近100%的性能利用率、以30幀/秒的速率實現了1280×720的視頻解碼和AAC-LC立體聲音頻。在圖3中,CPU1核和CPU2核的利用率分別顯示為99.3%和100%。
圖3:影音播放器多核加載。(來源:Atria Logic公司)
用Zynq Z-7010實現的AV 播放器完全符合MISRA 2000合規性C代碼編碼準則、完全通過了靜態QAC檢查。該實現也符合ISO26262安全標準ASIL B準則。
隨著對用于各種應用的低功耗、低成本解決方案的不斷增長的需求,可編程SoC計算平臺以其價值主張提供了獨特的解決方案。完全的價值利用來自于在需要時充分利用可用的CPU核和DSP引擎(例如圖像色彩空間及其動態范圍質量或音頻后處理增強或視覺計算質量和精度)或可編程資源以進行必要的硬件加速或性能改進處理(用于視頻和/或視覺)。這一本具優勢、加之借力最新的多核處理技術,可為針對這樣的應用提供堅實的設計基礎。
Atria Logic AL-AVPLR-IPC 影音播放器就是這樣一種汽車信息娛樂方案,它在賽靈思Zynq Z-7010上實現了性能、密度和性能的最佳平衡,通過將該器件所有剩余的可用可編程邏輯與其它板邏輯的整合,最小化了BOM成本并提高了系統可靠性。該方法為多種應用(諸如:載客車輛的信息娛樂系統,具有視頻能力的信息娛樂系統、數字標牌和信息以及數字相框等)的影音回放提供了高效解決方案。