低功耗的系統設計不僅已經成為手持行動裝置的必要條件,車載資訊娛樂(IVI)系統同樣要求低功率系統設計。此外,汽車系統必須能夠將家庭和辦公室的用戶體驗帶到車上。對於巨量運算、高品質和低功耗解決方案的不斷成長需求,迫使嵌入式運算訴求多核心系統。因此,基於多核心平台的嵌入式解決方案已經普及於行動、汽車、醫療和工業等領域的遊戲、視訊和影像處理等許多應用。

多核心系統設計面臨的挑戰在於:利用基於多核心的系統和可用的媒體架構,提供開放原始碼存取和可攜式的可擴展性,以滿足對於低功耗、高性能嵌入式應用的需求。隨著強大的軟、硬體可編程系統單晶片(SoC) FPGA元件的出現,嵌入式系統設計人員能夠根據客戶的需要設計出精確滿足形狀、功能和性能要求的解決方案。這些解決方案能滿足客戶對於最佳化、高效且具成本效益的要求。例如賽靈思(Xilinx)的Zynq SoC系列FPGA元件。

本文介紹如何使用低成本、低密度的Zynq FPGA,為載客車輛(如汽車、公車、火車、飛機和船舶)的資訊娛樂系統建立運算平台。這種平台的其它應用包括用於私人和公共場所(例如旅館、醫院、加油站或售貨亭等場所)的數位看板和資訊顯示器,以及用於消費市場的數位相框等。

多核心的AV播放機設計

車載資訊娛樂體驗面臨著雙重要求,一方面必須配合家庭或辦公室的用戶體驗,同時還要滿足汽車產業的能效要求。以此處的車載資訊娛樂系統設計案例來看,具體要求是打造一款極低成本、低功耗、720p/30fps的影音(AV)播放機解決方案,它具有視訊-音訊同步功能,並能連接至客戶在可編程結構上實現的硬體模組。這一目標在於開發與硬體即時加速緊密耦合的多核心軟體,同時著眼於大幅降低材料成本(BOM)、非經常性工程(NRE)費用、設計風險,以及極其重要的是——更快的上市時間。

首先對於Atria Logic AL-AVPLR-IPC影音播放機的基本元素進行分解,它包括:檔案讀取器、解多工器、具有色彩空間轉換器的H.264 Baseline Profile HD解碼器,以及AAC-LC立體聲解碼器。同時還包括內建GUI的影音播放機應用,以實現基本的播放機操作,諸如播放、暫停、停止以及快轉等模式。它支援Ubuntu LTS作業系統(OS),因為該OS提供極高效核心利用率的多核心使用。該影音播放機應用完全以Linux GTK為基礎,而解碼器本身則完全由Linux GStreamer開放原始碼多媒體架構實現。該影音播放機的方塊圖如圖1所示。

20170315 Atria TA31P1 圖1:Atria Logic 影音播放機方塊圖 (來源:Atria Logic)

在此選擇採用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非常適合低功耗、低成本的汽車資訊娛樂應用。

視訊解碼能以30f/s的速率處理高達1,280×720解析度的高解析(HD)影像,並以48kHz實現立體聲音訊解碼。音訊和視訊保持了完美同步,避免了影音不同步的問題。

實際設計時所面臨的挑戰是:如何盡可能地留下更多可用於實現其它功能的可編程邏輯,同時保持低功耗。這意味著該設計建置需要充份利用可用的ARM核心和Neon DSP,同時最佳化韌體,以盡可能高效地運作。這是透過充份利用Ubuntu中的多執行緒和對稱多處理(SMP)功能實現的。

多執行緒雙核心播放機

該影音播放機將音訊和視訊指定為在獨立執行緒上執行的一部份流水管線,用於在兩個ARM Cortex-A9核心上平行執行。AAC-LC音訊解碼器的負載比H.264視訊解碼器更小得多。因此,視訊解碼器被分為兩個執行緒,以充份利用兩個核心,每個核心均以667MHz執行。在圖2中,視訊執行緒2(Video Thread2)產生一個新的執行緒——Thread4,這兩個視訊執行緒分別在兩個不同的核心上執行。

20170315 Atria TA31P2 圖2:多執行緒視訊和音訊解碼執行 (來源:Atria Logic)

影音播放機GUI應用程式在單執行緒Thread1上啟動。壓縮的音訊資料和視訊資料分別在Thread2和Thread3佇列,以保持堆疊溢位限制。在這兩個執行緒中解多工處理音訊和視訊資料,將去耦處理不同音訊和視訊執行緒中的輸出資料(sink data)。

Ubuntu作業系統需要估算每個執行緒所需的最大堆疊空間。每個執行緒或分支的多佇列或單佇列元素用於平行或管線執行任務。作業系統互斥量(mutex)的所有必要鎖止被啟動。在記憶體子系統堆疊空間正確鎖定和解鎖的情況下,可在特定核心上產生新的視訊執行緒或保持音訊執行緒。而在返回執行緒時,這一過程被破壞。但Linux準系統(bare bone)執行緒無法自動解除配置的本地堆疊記憶體。因此,父處理程序(parent process)將堆疊空間添加到malloc()自由列表,從而回收記憶體空間作為執行緒清除。用於影音播放機的程式碼記憶體是16KB,而資料記憶體則被限制為4KB。用於完整架構的整個系統記憶體限制為512MB。可以透過僅保留Gstreamer架構的已用特性並剔除未用特性,從而在更大程度上實施最佳化。

多執行緒途徑實現的音訊和視訊解碼,最高效率地利用了兩個核心。Gstreamer最初執行的播放機的效率低,CPU1的利用率只有66%,CPU2的利用率只有81%。執行緒管線實現了近100%的核心利用率,使效率提高了29~34%。

Neon DSP發揮的效率和性能

然而,將近100%的核心利用率仍不足以滿足播放機的性能要求。選擇之一是在SoC的可編程邏輯部份實現色彩空間轉換。雖然這將減少可用於其它系統邏輯的可編程邏輯存量,導致使用定點邏輯的視訊品質較差一些。

因此,我們選擇在Neon DSP引擎上實現色彩空間轉換模組。Cortex-A9 Neon MPE使用ARM v7先進SIMD和向量浮點指令集擴展了CPU核心的功能。充份利用Neon DSP的能力,利用32位元、64位元和128位元的四相暫存器執行浮點運算,明顯加速了YUV420到RGB444的色彩空間轉換,並且利用SIMD操作的平行向量資料排列,得以將兩個Neon DSP引擎的使用減少到一個。

表1列出使用Neon DSP引擎的色彩空間轉換常規的樣本程式碼清單。Neon DSP還能以即時資料解交錯的方式支援多個暫存器的平行載入和儲存。

20170315 Atria TA31T1 表1:由Neon DSP引擎實現的YUV到RGB色彩空間轉換常式 (來源:Atria Logic)

色彩空間轉換結果

Neon DSP程式碼最佳化實現的色彩空間轉換矩陣常式為1.4×至1.64×。表1列出了具有不同位元速率、大小和複雜度的不同串流結果與詳細資訊。

20170315 Atria TA31T2 表2:由Neon DSP色彩空間轉換程式碼實現的H.264+AAC播放機性能結果 (來源:Atria Logic)

將去模組化濾波器執行轉移到一個Neon DSP引擎,是降低負載的另一種可能方式。

該方案建置在ARM Cortex-A9核心(執行速度為667MHz)的Z-7010 SoC FPGA,能以將近100%的性能利用率以及30f/s的速率實現1,280×720的視訊解碼以及AAC-LC立體聲音訊。在圖3中,CPU1核心和CPU2核心的利用率分別顯示為99.3%和100%。

20170315 Atria TA31P3 圖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成本並提高了系統可靠性。該方法並為諸如載客車輛的資訊娛樂系統、具有視訊功能的資訊娛樂系統、數位看板和資訊以及數位相框等多種應用的影音播放提供了高效解決方案。