系統設計是一個復雜的過程,不僅僅是有IC拿來用就可以了,還有很多細節需要考慮。本文以高保真音樂重放系統為例介紹如何進行芯片選型,以構建符合市場需求的系統。
現代集成電路產業一直嚴格遵循著“摩爾定律”高速發展,芯片發展得越快、速度越高,對軟件系統的要求就越低。現在速度就是一切,無論是芯片運行速度、軟件開發速度,還是產品上市速度。但是有了芯片是否就足夠了呢?下面我們試著從一個相對比較簡單的高保真音樂重放設備入手,看看我們需要怎么利用市面流通的IC實現一個這樣的系統。
從信號處理和芯片設計的角度上看,音頻系統原理并不復雜,因此很多半導體廠商似乎都看不上音頻產品,而去追逐一些量大或者像高清視頻處理等高技術含量有技術門檻的產品。筆者在設計這個高保真音樂重放系統的時候曾經和不同的國內IC設計公司的設計部門溝通過,結果得到的答復都是以“很簡單沒問題”之類的回復搪塞過去,然而事實上到系統做出來后卻往往發現效果不盡如人意。可以說我們在開發這個系統的幾年時間里面由于芯片選型的問題,在硬件性能瓶頸上吃盡了苦頭。
以下是我們對處理器芯片的具體要求:1. 速度要在400MHz以上,最好能解碼APE C4000的碼率;2. 需要能支持USB 2.0 Host/SATA/SD卡;3. 需要支持網絡;4. 具有128MB以上的RAM,越大越好;5. 具有256MB或以上的NAND Flash;6. 支持I2S多路輸出并可以支持Slave時鐘,支持最高768KHz采樣率,以及最高32位輸出;7. 最好有音頻數據后期處理能力;8. 有性能優異的時鐘電路和DAC。
芯片能運行的核心速度對解碼效率有至關重要的影響,比如音頻無損壓縮APE C5000解碼方式對處理器的要求就很高,以英特爾ATOM 1.6G上網本為例,其解碼192k/C5000兩聲道音樂尚且無法連續播放,何況普通嵌入式系統?因此只能處理較低的碼率。無損壓縮和MP3不一樣,需要還原完全一致的數據流,處理器性能決定了解碼的效率,所以太低的核心頻率無法勝任此工作。
USB 2.0對硬件的要求相當高,PHY兼容性是一個很大的問題,數據流的效率還是其次。同樣,SD卡接口兼容性也是目前國產芯片一個很頭疼的問題。SATA的需求把處理器周邊外設速度提到了一個較高的位置,畢竟不是誰都能夠做1.5G/3G PHY的。
系統運行要依存于NAND Flash中存儲的程序,但是NAND Flash發展速度卻比處理器發展的速度快。當年定義NAND Flash的時候把ECC設計在外面,讓處理器永遠落后NAND Flash一段時間,因此NAND Flash轉型的時候廠商會因為市場上購買不到芯片而無法出貨或者需要高價搶貨。另一方面,隨著RAM的改進其成本越來越低,致使高成本SDRAM逐漸減產,因此使用老內存的處理器先天不足,其系統BOM成本比使用新RAM的系統成本高。所以處理器需要支持多種啟動方式而不僅限于NAND Flash,同時RAM應順應目前電腦主流,使用DDR2/DDR3等內存,這樣的話更能達到低成本高收益。
最后一個最重要的問題就是音頻系統的出口I2S。不管什么數據流從哪里流入,都需要從I2S輸出,而這個數據流在任何情況下都不允許有任何數據的錯誤和流失,除非是處理器速度不夠。同時,處理器內部的PLL無法產生我們所需要的I2S時鐘,因此外置時鐘成為必然,Slave I2S接口也是必不可少的。事實上,I2S在我們開發過程中碰到的問題最多,比如同步不準確、開始播放時左右聲道反轉、播放過程中不定期左右聲道反轉、數據輸出丟幀等情況,都嚴重影響輸出的技術參數,以致無法達到設計要求。
我們在這幾年產品設計過程中,走的彎路就是因為芯片細節了解不到位而造成的。因為任何廠家的開發系統都沒有直接說明是否能支持高清音樂格式,最高支持多少采樣率的音樂輸出,也無法直接評估其平臺是否能夠達到我們所需的性能指標,所以都必須根據我們的需求對I2S輸出電路進行調整。為評估系統,我們不得不做了大量的設計工作(包括軟硬件)之后才能開展評估工作。
芯片選擇需衡量多項性能參數
在設計過程中我們選擇過三星的芯片,也選擇過國產芯片,但是都因為種種問題不得不放棄,最后才定了目前的方案。三星的芯片I2S輸出位數不夠,支持的NAND Flash種類有限,SDRAM單位成本較高,USB host直到其ARM11產品都無法跟上所要求的速度,因此我們在第一批選型之后就放棄了。后來選擇了國產平臺,也是因為I2S FIFO深度不夠,造成了丟幀,另外由于USB PHY的問題,對閃存盤兼容性很差,其升級平臺也沒有解決,SD卡因為軟件的問題兼容性也不好,更致命的問題是因為系統不穩定,處理器無法正常復位,或者運行一段時間之后出現NAND Flash無故丟失數據等問題,最后也無法使用。
產品最終贏在細節,嘗試了種種帶硬傷的產品之后,我們最后不得不放棄了國產芯片,選擇了國外A廠家的產品。從A廠家的硬件系統看,可以得出的結果就是其硬件細節做得相當好。我們測試其芯片發現,其一致性很高,同時系統余量設計得很好。標稱375MHz的芯片,在非最高核心電壓情況下基本都可以穩定超頻到572MHz,高出標稱頻率的50%,同時DDR2時鐘超頻60%,性能不俗。從寄存器設計來說,不少都是根據Linux系統的數據結構設計的,因此只要熟悉軟件就很容易熟悉其硬件。
在大規模數據吞吐的部分,A廠家使用了鏈接DMA,這個細節完美保證輸出數據流的連續,最大限度保證了最重要的I2S數據輸出不會丟幀。我們測試的時候一邊解碼一邊通過SD卡進行本地數據解壓,在CPU滿負荷的情況下都沒有出現丟幀,可見A廠家硬件的功力之強。
在此我們分析一下,為什么會丟幀。其實大部分系統都是完成數據流的一個傳輸,音頻解碼的數據流向就是從SD卡等媒體讀出原始碼流,然后經CPU解碼之后送I2S輸出,這個過程有涉及到重要數據傳輸的就是媒體到RAM,再從RAM到I2S的過程,這些數據流都是DMA完成的,而瓶頸就在DMA切換的過程。Linux的文件系統由系統進行緩存,對時序的要求不高,而I2S要求連續的數據,就和I2S的FIFO有密切的關系,如果不是系統自動切換緩沖區的話,就要求CPU介入切換,而CPU的中斷響應時間就會嚴重影響數據的連續性。比如I2S的FIFO是32個數據,如果I2S的LRCK是192kHz,那么能夠給CPU的中斷時間最長就是32/2/192kHz=83μs,而且根據中斷機制,一般是FIFO剩下一半的時候申請中斷,那么時間就只有不到50μs,這個速度在普通Linux系統基本無法滿足需求,因此丟幀就是必然。IC廠家設計的時候指標都是按96kHz的硬件指標來設計,當然無法滿足高端系統的要求了。A廠家的自動DMA鏈不需要CPU進行數據的切換,而通過軟件劃分2塊或以上的數據(Ping pong buffer)讓DMA自動切換,如此就完美保證了輸出數據的連續性。對音響系統而言,只要I2S出現丟幀馬上就會被察覺,更無法通過儀器的檢測,所以這個細節如果做不到位是無法走向市場的。
另外A廠家的硬件包含了SATA接口以及兼容性和速度都無可挑剔的USB 2.0 host/SD卡支持,更出色的地方是,小小一個ARM9芯片還帶了EMAC,同時帶了兩個小單片機,每個的速度是系統時鐘速度的一半,這個小單片機可以實現的功能遠比普通MCU的功能多。如果嫌CPU速度不夠,還可以選擇引腳兼容的帶浮點DSP的片子,這個DSP的運算能力相當于同等ARM9在2G以上的運算速度,這對數據后端處理有著至關重要的性能提升。A廠家的片子還提供TF卡啟動功能,這樣的話可以完美地避開NAND發展所帶來的問題,同時解決Linux在NAND建立的文件系統的啟動速度問題。
這里再說說時鐘電路。由于需要支持32K~192K采樣率,因此必須能夠生成對應的時鐘,同時要求jitter低于50ps(處理器內置PLL時鐘一般在200ps以上)。而對于DAC,很多國產芯片都因為集成的成本低而將DAC集成到CPU里面,但這樣做使得性能無法提高,比如THD+N最高只能到90dB左右,而目前世界頂級的DAC其THD+N達到驚人的-120dB,同時提供135dB的動態范圍。這樣高的性能對整個系統設計都有極其嚴格的要求,因此國外同類產品售價都不低于4,000美元。另外硬件系統設計最后的一個關鍵點就是PCB走線。
在軟件方面,系統需要覆蓋數十種優化過的音頻解碼器,解碼輸出數字信號要經過DSP后處理,另外還涉及到FPGA Verilog軟件編程、網絡UPNP協議控制、文件共享、遠程播放/控制等多種協議,涵蓋范圍相當廣泛,目前國內基本上還沒有供應商能進行相關的設計和制作。
小結
音頻系統屬于典型的低頻模擬信號和高頻數字信號結合的系統,因此能做好的廠家國際上都是屈指可數,國內更是罕見。經過我們三年多的研發,系統終于達到了國際中上游水平,產品聽感和國際一線品牌Linn Akurate DS相當,由于系統設計合理得當,在嚴格的聽音環境通過監聽音箱和與市場價格在12,000元左右某知名歐洲品牌的DAC A/B對比,聽感更勝一籌。
評論
查看更多