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