在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 模擬技術(shù) > 設(shè)計(jì)應(yīng)用 > 低成本的MP3播放機(jī)系統(tǒng)集成技術(shù)

            低成本的MP3播放機(jī)系統(tǒng)集成技術(shù)

            作者: 時(shí)間:2011-10-07 來(lái)源:網(wǎng)絡(luò) 收藏

            雖然是可攜式多媒體(PMP)裝置中,集成技術(shù)比較單純的一種。但是,這種單純性是來(lái)自于SoC處理器的強(qiáng)大功能,簡(jiǎn)化了工程師原本繁復(fù)的工作。本文將介紹成本低、功能簡(jiǎn)單的技術(shù)。

            雖然是可攜式多媒體(PMP)裝置中,集成技術(shù)比較單純的一種。但是,這種單純性是來(lái)自于SoC處理器的強(qiáng)大功能,簡(jiǎn)化了工程師原本繁復(fù)的工作。當(dāng)然要獲得這樣的單純性和便利性,是要付出代價(jià)的──須支付SoC處理器和操作系統(tǒng)軟件的授權(quán)金和權(quán)利金。這就像Wintel集團(tuán)的PC解決方案一樣,雖然開(kāi)發(fā)方便,可以及早量產(chǎn),但是其核心的技術(shù)知識(shí)(know-how)是近似于封閉和不可探知的。

             


            功能單元

            成本低、功能簡(jiǎn)單的MP3播放機(jī)至少需要以下的基本單元:處理器/微控制器、MP3譯碼器、DMA、內(nèi)存、硬盤、電源電路、DAC或I2S,LCD和鍵盤則是選項(xiàng)。當(dāng)然還需要外接揚(yáng)聲器。為了減少組件的數(shù)量、提高設(shè)計(jì)的彈性、縮小體積,可以使用FPGA來(lái)設(shè)計(jì)DMA、內(nèi)存控制器、IDE控制器。如附(圖一)所示。

             


            FPGA電路

            在附圖一的FPGA電路中,列舉其中功能比較重要者說(shuō)明如下:
            ●主電路:這是完整的數(shù)據(jù)路徑----從微控制器總線到可共享的參數(shù)/地址映像內(nèi)存、到DRAM/IDE總線。它包含了微控制器能夠存取的所有外部緩存器、事件偵測(cè)(event detection)和移動(dòng)請(qǐng)求位(action request bits)。外部緩存器組是位于DRAM內(nèi),執(zhí)行各種特定的任務(wù);當(dāng)關(guān)機(jī)時(shí),這些緩存器將會(huì)消失。事件偵測(cè)、移動(dòng)請(qǐng)求位都是為了讓微控制器得知目前的狀態(tài),并采取適當(dāng)?shù)囊苿?dòng)、或執(zhí)行特定的韌體程序。

            ●控制用的狀態(tài)機(jī):負(fù)責(zé)接收各種移動(dòng)請(qǐng)求位,并使所有的控制線生效(assert),最后導(dǎo)致數(shù)據(jù)移動(dòng)。它是一種簡(jiǎn)單的,但大型的狀態(tài)機(jī);平時(shí)它處于閑置和等待的狀態(tài),直到要采取移動(dòng)。所有的狀態(tài)是采用S_state_#的方式命名的。OR閘在適當(dāng)?shù)臓顟B(tài)下,會(huì)使正確的控制訊號(hào)生效,如附圖二所示。這個(gè)電路也包含了「優(yōu)先級(jí)編碼器(priority encoder)」。在閑置狀態(tài)時(shí),若擱置了許多個(gè)請(qǐng)求,則優(yōu)先級(jí)編碼器可以決定哪一個(gè)要先執(zhí)行。這種電路雖然有點(diǎn)復(fù)雜,但是它使用「一熱(one-hot)」的簡(jiǎn)單概念。所謂「一熱」是指每一個(gè)狀態(tài)是使用一個(gè)正反器(flip-flop)實(shí)現(xiàn)的,在每一個(gè)狀態(tài)下,只有一個(gè)正反器是處于高值,其余都是低值,而且「熱位(hot bit)」會(huì)一直移動(dòng),直到回到閑置狀態(tài)。在DMA路徑上,具有一個(gè)正反器(也可以省略不用),當(dāng)結(jié)束DMA作業(yè)的條件成立時(shí)(ISZERO),此正反器會(huì)收到「熱位」。所有的控制訊號(hào)是由OR閘產(chǎn)生的,只要輸入的狀態(tài)訊號(hào)群組中有一個(gè)是高值,OR閘就會(huì)輸出高值(使控制訊號(hào)生效)。例如:若(圖二)的OR2的S_RD_IDE_1或S_WR_IDE_1為高值,則IDE_ADDR的輸出也會(huì)是高值,因此IDE_ADDR生效了。不過(guò),有一些對(duì)時(shí)間要求很嚴(yán)格的(timing critical)訊號(hào),并不是使用OR閘產(chǎn)生的,它們是使用建立/重置(set/reset)緩存器產(chǎn)生的。建立/重置緩存器的功效和OR閘一樣,但是沒(méi)有延遲。
             

            微控制器總線MOVX偵測(cè)
            傾聽(tīng)微控制器總線,當(dāng)沒(méi)有MOVX指令要執(zhí)行時(shí),使DMA_OK訊號(hào)生效。當(dāng)DMA_OK未生效時(shí),優(yōu)先級(jí)編碼器不會(huì)讓任何非CPU的硬件單元存取DRAM。所以,它對(duì)微控制器的讀取和寫入請(qǐng)求是立即響應(yīng)的,不會(huì)有延遲發(fā)生。這對(duì)8051微控制器而言,是很重要的,因?yàn)?051沒(méi)有等待狀態(tài)。如果有偵測(cè)到一個(gè)MOVX作業(yè)碼,但是MOVX沒(méi)有被執(zhí)行,一個(gè)31周期的定時(shí)器可以使DMA_OK再次生效。

            ■微控制器的地址譯碼
            這些訊號(hào)生效后,可以使外部緩存器在微控制器的內(nèi)存映像區(qū)域內(nèi)使用。通常,這是將地址排線和REG_RD訊號(hào)或REG_WR訊號(hào)AND在一起;REG_RD和REG_WR訊號(hào)是由狀態(tài)機(jī)產(chǎn)生的。

            ■DRAM/IDE地址多任務(wù)器(mux)
            在DRAM的行列式地址位(address bits)、IDE的地址位(來(lái)自于微控制器)之間,做DRAM/IDE地址腳位的切換;或?yàn)榱?,?dāng)執(zhí)行IDE DMA的直接傳輸作業(yè)時(shí)(類似PIO)。

            ■MP3輸出位移緩存器(shift register)
            這是16位的位移緩存器,它從IDE接口得到一個(gè)16位的字組(word),并以位移的方式將此字組送至 MP3譯碼器。

            ■MP3位計(jì)數(shù)器
            計(jì)算位移緩存器送至MP3譯碼器的位數(shù)目。當(dāng)所有的16位都被移出時(shí),會(huì)產(chǎn)生一個(gè)訊號(hào),此時(shí),位移緩存器準(zhǔn)備供給STA013 DMA使用,以繼續(xù)從DRAM中讀取和傳送下一個(gè)字組。

            ■DRAM的重清(refresh)時(shí)脈
            這個(gè)電路會(huì)每15.2 ?s 產(chǎn)生一個(gè)脈沖,要求狀態(tài)機(jī)執(zhí)行一個(gè)DRAM重清周期。此脈沖會(huì)在主電路內(nèi),建立一個(gè)請(qǐng)求旗標(biāo),當(dāng)總線可以使用時(shí),狀態(tài)機(jī)會(huì)開(kāi)始執(zhí)行重清作業(yè),而且優(yōu)先等級(jí)比較高的請(qǐng)求不會(huì)被擱置。

            ■DRAM/IDE地址緩沖器(buffer)
            保存地址,這些地址是用來(lái)驅(qū)動(dòng)DRAM和IDE接口。

            ■32-byte的SRAM內(nèi)存
            使用兩個(gè)16×16寬度的DRAM內(nèi)存,將它們虛擬成具有地址或數(shù)據(jù)鎖定(latch)功能的SRAM。其中一個(gè)保存DRAM的分頁(yè)(page)號(hào)碼,這些分頁(yè)是映像至微控制器的地址空間0xFF00至0xFF1F的區(qū)域(DRAM_PAGE_CFG緩存器),它們和微控制器的12個(gè)地址位一起被送至DRAM/IDE地址多任務(wù)器,最后可以為DRAM的讀寫作業(yè),產(chǎn)生一個(gè)唯一的地址。第二個(gè)SRAM負(fù)責(zé)保存DMA的參數(shù)值(在0xFF20至0xFF3F的區(qū)域內(nèi))。微控制器的外部?jī)?nèi)存(DRAM)空間映像如附(表一)所示。
             

            ■地址映像內(nèi)存的寫入功能生效
            允許對(duì)地址映像內(nèi)存進(jìn)行寫入作業(yè)。不過(guò),它只允許微控制器在0xFF00至0xFF1F的內(nèi)存區(qū)域?qū)懭霐?shù)據(jù)。

            ■DMA參數(shù)內(nèi)存的寫入功能生效
            允許對(duì)DMA參數(shù)內(nèi)存進(jìn)行寫入作業(yè)。微控制器能寫入這些參數(shù),而且,這些參數(shù)也可以被狀態(tài)機(jī)更新,例如:在進(jìn)行DMA傳輸作業(yè)時(shí),狀態(tài)機(jī)可以改變它們。

            ■16位的遞增/遞減電路
            在進(jìn)行DMA傳輸作業(yè)時(shí),16位的遞增/遞減可以用來(lái)更新參數(shù)值。遞增電路是為了計(jì)算DRAM的目標(biāo)地址,遞減電路是為了計(jì)算字組。DMA參數(shù)內(nèi)存的輸出值會(huì)被送至此電路中,而且也會(huì)被送至16個(gè)多任務(wù)器中,以允許DMA參數(shù)被轉(zhuǎn)譯成地址,就好像它們來(lái)自于微控制器的地址總線(address bus)一樣。

            ■零、壹和奇數(shù)值檢測(cè)器
            當(dāng)DMA參數(shù)值被改變時(shí),這個(gè)電路能夠立即得知;如果DMA參數(shù)值是零、壹或奇數(shù)地址,這個(gè)電路也能夠通知狀態(tài)機(jī)。當(dāng)DMA參數(shù)值是零時(shí),狀態(tài)機(jī)會(huì)清除DMA的請(qǐng)求旗標(biāo),以終止DMA作業(yè),并將「完成DMA傳輸」的中斷旗標(biāo)設(shè)為1。

            ■微控制器的「地址鎖定致能(address latch enable;ALE)」訊號(hào)之同步
            能使微控制器的ALE訊號(hào)和FPGA 的時(shí)脈同步。微控制器的其它控制訊號(hào)也是采用類似的同步機(jī)制,但是它們位于主電路中。

            ■2:1多任務(wù)器/4位
            此電路允許在每32 byte內(nèi)存內(nèi)的地址,可以被內(nèi)存的一般功能控制,或被微控制器的總線控制(當(dāng)韌體從這些緩存器中讀出或?qū)懭?,?lái)改變地址映像或建立DMA傳輸時(shí))。

            ■2:1多任務(wù)器/8位
            它被使用在IDE區(qū)塊內(nèi)。它允許從微控制器的數(shù)據(jù)區(qū)域中,將數(shù)據(jù)加載至輸出緩沖器內(nèi)。

            ■2:1多任務(wù)器/16位
            當(dāng)執(zhí)行一個(gè)DMA周期時(shí),利用這個(gè)電路,可以從微控制器的地址總線(一般作業(yè)),切換成DMA參數(shù)內(nèi)存的地址總線。

            ■2:1多任務(wù)器/16位
            利用這個(gè)電路可以選擇DMA參數(shù)內(nèi)存的輸入值;它是在更新的DMA參數(shù)(在一個(gè)DMA周期內(nèi))和微控制器的數(shù)據(jù)總線(當(dāng)微控制器寫入DMA設(shè)定值)之間做切換。單獨(dú)設(shè)計(jì)這個(gè)16位的多任務(wù)器,是因?yàn)镕PGA開(kāi)發(fā)工具的「可設(shè)定的邏輯區(qū)塊(configurable logic block;CLB)」之映像,無(wú)法將額外的邏輯閘納入上列的那些2:1多任務(wù)器內(nèi)(如此會(huì)浪費(fèi)8個(gè)CLB,并在重要的時(shí)序路徑上,增加額外的延遲時(shí)間),除非邏輯閘是在同一個(gè)電路設(shè)計(jì)圖內(nèi)。

            ■16至8位總線,三態(tài)(tri-state)緩沖器
            此三態(tài)緩沖器允許一個(gè)16位總線的任一半字節(jié)(8 bit)去驅(qū)動(dòng)一個(gè)8位總線。它可以讓微控制器從寬16位的內(nèi)存中讀取數(shù)據(jù)。

            ■8至16位總線緩沖器
            連接兩個(gè)8位的總線成為一個(gè)16位總線(但FPGA開(kāi)發(fā)工具并不會(huì)因此混淆)。

            ■8至16位總線緩沖器
            連接一個(gè)8位的總線兩次,成為一個(gè)16位總線(但FPGA開(kāi)發(fā)工具并不會(huì)因此混淆)。此16位總線的任一半字節(jié)都是來(lái)自于此8位總線,如附(圖三)。
             


            ■8位緩存器
            一個(gè)8位緩存器,用來(lái)收集微控制器的地址位。

            此外,由于不同的FPGA開(kāi)發(fā)工具的性能差異,可能還需要:
            ●數(shù)個(gè)具有不同位數(shù)(例如:5至9位)的位移緩存器:它們?cè)跔顟B(tài)機(jī)中使用??梢员苊庖?yàn)樵谕浑娐吩O(shè)計(jì)圖內(nèi)具有太多的符號(hào),而使FPGA開(kāi)發(fā)工具當(dāng)機(jī)。
            ●正反器(在CLB中):這是唯一的CLB正反器,以一個(gè)比在FPGA開(kāi)發(fā)鏈接庫(kù)(library)中還要小的符號(hào)來(lái)重設(shè)計(jì)。
            ●正反器(在IOB中):這是唯一的「I/O區(qū)塊(IOB)」正反器,以一個(gè)比在FPGA開(kāi)發(fā)鏈接庫(kù)(library)中還要小的符號(hào)來(lái)重設(shè)計(jì)。

            FPGA電路算是此MP3播放機(jī)系統(tǒng)中,比較復(fù)雜的一部份,一般的OEM/ODM可以指定規(guī)格委外設(shè)計(jì)。另一個(gè)OEM/ODM廠商必須注意的是韌體的設(shè)計(jì);或許韌體也可以委外設(shè)計(jì),但是他們必須懂得如何使用底層韌體(匯編語(yǔ)言)所提供的應(yīng)用程序接口(API),來(lái)設(shè)計(jì)上層的使用者程序(C語(yǔ)言程序)。

             


            應(yīng)用程序接口

            應(yīng)用程序接口至少包含:動(dòng)態(tài)配置內(nèi)存(memory allocation)、檔案/目錄的讀取、MP3音樂(lè)的播放、與其它外圍的通訊(包括:可當(dāng)作除錯(cuò)用途的串行端口、LCD顯示器…..等)。這里僅介紹動(dòng)態(tài)配置內(nèi)存的應(yīng)用程序接口如下:

            ■動(dòng)態(tài)配置內(nèi)存
            對(duì)使用者程序而言,一定需要配置內(nèi)存來(lái)儲(chǔ)存字符串、結(jié)構(gòu)、或其它項(xiàng)目。它的功能就像C語(yǔ)言里的malloc( )一樣。這里使用的是simm_malloc( ),它的原式如下所示:

            ●simm_id simm_malloc (unsigned int num_bytes):
            分配num_bytes的DRAM內(nèi)存空間,并傳回simm_id代表這個(gè)空間。simm_id不是一個(gè)指標(biāo)(pointer),而是一個(gè)號(hào)碼。想要得到配置好的實(shí)際的內(nèi)存空間地址,必須透過(guò)addrX函式,如下所示:
            ●xdata void * addr5 (simm_id addr32):映射至0x5000~0x5FFF
            ●xdata void * addr6 (simm_id addr32):映射至0x6000~0x6FFF
            ●xdata void * addr7 (simm_id addr32):映射至0x7000~0x7FFF

            將simm_id所代表的內(nèi)存空間映像至微控制器的地址空間,并傳回一個(gè)指標(biāo)。這些函式的回傳值幾乎是使用「類型轉(zhuǎn)換(typecast)」,例如:(xdata char *)addr5(string_id)。每一個(gè)函式會(huì)分別映像至一個(gè)屬于微控制器地址空間的特殊區(qū)段。如果有任何一個(gè)指標(biāo)已經(jīng)被使用了,這個(gè)特殊區(qū)段就不是有效的;因此,對(duì)同一個(gè)simm_id而言,只能透過(guò)上列的3個(gè)函式,獲得3個(gè)不同的指標(biāo),而且它們不能被使用,這樣的地址空間才是有效的。

            想要釋放simm_malloc( )先前配置的內(nèi)存空間,必須使用下列的函式:
            void simm_free (simm_id addr32)

            在表一中,從0x0000至0xEFFF的區(qū)域是儲(chǔ)存數(shù)據(jù)用的分頁(yè)(page),其余都是緩存器。每一個(gè)分頁(yè)(或區(qū)塊)大小是4K(Bytes)。所支持的DRAM模塊大小,是從1024(4MBytes)至8192(32MBytes)個(gè)區(qū)塊。系統(tǒng)初始化后,這些4K大的區(qū)塊會(huì)被配置且閑置著(free)。當(dāng)一組區(qū)塊被配置時(shí),通常第一個(gè)區(qū)塊的號(hào)碼會(huì)先被用掉,后面的區(qū)塊是透過(guò)呼叫next_block( )函式來(lái)依序存取。DRAM控制器允許任何15個(gè)區(qū)塊能映像至微控制器的地址空間中,從0x0000至0xEFFF。下面條列出與分頁(yè)管理相關(guān)的函式(是以匯編語(yǔ)言寫成的):

            ●init_memory_mgr:將「內(nèi)存管理者(memory manager)」初始化。它會(huì)檢測(cè)出DRAM模塊的大小,少部份的內(nèi)存區(qū)塊會(huì)被保留下來(lái),供作設(shè)計(jì)所有區(qū)塊的鏈接串行(linked list)之用。此鏈接串行可以追蹤哪些區(qū)塊是閑置的,哪些是被使用的。當(dāng)應(yīng)用程序需要一組區(qū)塊時(shí),這個(gè)被保留的內(nèi)存區(qū)塊就會(huì)儲(chǔ)存那組區(qū)塊的串行。在使用其它函式之前,必須先呼叫此函式。
            ●malloc_blocks:配置1個(gè)或更多個(gè)區(qū)塊(4K大的分頁(yè)),并傳回第一個(gè)區(qū)塊的號(hào)碼。若要配置一個(gè)以上的區(qū)塊,須配合使用next_block函式來(lái)擷取其它區(qū)塊。請(qǐng)注意,它和simm_malloc( )一樣,這些區(qū)塊并不會(huì)自動(dòng)映射至微控制器的尋址空間。
            ●map_block:將一個(gè)區(qū)塊映射至微控制器的尋址空間。輸入分頁(yè)號(hào)碼(0~14)和區(qū)塊數(shù)量。
            ●free_blocks:將配置好的區(qū)塊釋放。釋放后的區(qū)塊之映射并不會(huì)自動(dòng)消失。輸入第一個(gè)區(qū)塊的號(hào)碼,與它同一組的區(qū)塊都會(huì)被釋放。
            ●next_block:擷取一個(gè)以上的區(qū)塊時(shí),配合malloc_blocks使用。輸入目前的區(qū)塊的號(hào)碼,它會(huì)傳回下一個(gè)區(qū)塊的號(hào)碼。

             


            結(jié)語(yǔ)

            許多中小型電子公司而言,使用SoC處理器和操作系統(tǒng)軟件來(lái)開(kāi)發(fā)PMP產(chǎn)品,其成本是偏高的?!傅统杀尽顾坪踔皇且环N理想而已,因?yàn)楫?dāng)組件成本降低時(shí),集成技術(shù)的成本可能會(huì)上升。集成技術(shù)需要許多種不同的技術(shù)和知識(shí),這就像設(shè)計(jì)SoC處理器一樣,若要找到專精于各種技術(shù)領(lǐng)域的人才,就難免要增加人事成本了。(本文原載于零組件雜志第164期)



            評(píng)論


            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉