1 系統(tǒng)組成
如圖l所示,系統(tǒng)主要由4部分組成:嵌入式處理器、CPLD、FPGA及視頻圖像壓縮輸入部分。
(1)嵌入式處理器
采用Sigma Design生產(chǎn)的雙核結(jié)構(gòu)的數(shù)字圖像處理芯片EM8560。它內(nèi)嵌ARM7 TDMI內(nèi)核和一個MEPG RJSC解碼引擎,支持許多音/視頻解碼標準,如VCD、DVD-Video、AC-3.AAC以及MP3;支持AVI.IS0 MPEG-4、DivX格式以及靜態(tài)JPEG圖像;內(nèi)置8KB指令Cache和8KB數(shù)據(jù)Cache及8KB SRAM,片外最大支持32位16 M B SDRAM系統(tǒng)內(nèi)存和最大16 32位8MB F1ash;I/O接口部分支持標準IDE (ATA/ATAPI-4/Ultra DMA)接口,支持16位地址/數(shù)據(jù)LocalBus總線。該總線采用異步方式進行數(shù)據(jù)傳輸,因此數(shù)據(jù)傳輸速率低,可靠傳輸1KB數(shù)據(jù)一般需用時100 us左右。
(2)FPGA與CPLD
采用Lattice的CPLD和A1tera的Cyclone FPGA,要求CPLD的引腳到引腳延時盡量小,來滿足兩片SDRAM數(shù)據(jù)切換的要求。
(3)視頻圖像壓縮輸入部分
視頻A/D及編碼部分采用Philips公司的SAA7114芯片,將輸入模擬信號轉(zhuǎn)換為ITU 656格式數(shù)字圖像數(shù)據(jù)。MPEG.4編碼壓縮部分采用Intime公司的IME6400編碼芯片,將數(shù)字圖像數(shù)據(jù)壓縮為MPEG-4的圖像數(shù)據(jù)輸出。其中IME6400輸出接口有1KB的壓縮數(shù)據(jù)輸出緩沖區(qū)。該緩沖區(qū)數(shù)據(jù)最大保持時間為400 u s,即若在400 u s內(nèi)不取完緩沖區(qū)數(shù)據(jù),后來的壓縮編碼數(shù)據(jù)就會沖掉前面壓縮的數(shù)據(jù),造成視頻數(shù)據(jù)的丟失。
2 系統(tǒng)原理與實現(xiàn)
為了說明本設(shè)計如何利用FPGA和CPLD來解決慢速總線Local Bus對擴充系統(tǒng)性能的瓶頸限制,下面將分兩部分來說明。
(1)Local Bus總線速度對系統(tǒng)性能的影響
由圖1中虛線處所示,本系統(tǒng)的設(shè)計思想是將多路輸入視頻數(shù)據(jù)經(jīng)過壓縮編碼后通過Local Bus總線輸入到嵌入式處理器EM8560的內(nèi)存中,再從內(nèi)存寫入IDE硬盤上進行存儲。這也是EM8560設(shè)計的一個主要功能。但是,這種設(shè)計由于受到Local Bus總線速度的制約,一般只能輸入兩路分辨率為D1的數(shù)字視頻圖像,要如框圖中增加為4路、8路或更多路數(shù)據(jù)輸入是不可能的。首先,MPEG-4編碼芯片IME6400的1KB輸出數(shù)據(jù)緩沖區(qū)的數(shù)據(jù)最多只能保持400 u s時間。400 us時間一到,IME6400將會向緩沖區(qū)寫入新的數(shù)據(jù);如果舊數(shù)據(jù)讀不完,就會丟失數(shù)據(jù)。其次,Local Bus數(shù)據(jù)傳輸率低,IME6400通過向EM8560發(fā)中斷到EM8560,通過Local Bus將IME6400 1KB輸出緩沖區(qū)的數(shù)據(jù)讀入需要100 us時間。最后,由于Local Bus總線接口內(nèi)部不具有真正的DMA控制器,所以數(shù)據(jù)的傳輸需要占用處理器CPU的時間。如果EM8560正在將內(nèi)存中數(shù)據(jù)向硬盤中寫操作,IME6400中斷到來,這時處理器要停止當(dāng)前的寫硬盤工作,執(zhí)行中斷處理程序,花100 us左右時間讀入IME6400的編碼數(shù)據(jù);如果在這100 us內(nèi),又有一片IME6400的編碼數(shù)據(jù)滿發(fā)出中斷,則處理器讀完當(dāng)前片的數(shù)據(jù)后又要去讀另一片的數(shù)據(jù);如果另一片IME6400在內(nèi)存中的數(shù)據(jù)還沒有寫入硬盤,則新數(shù)據(jù)將會覆蓋原來的數(shù)據(jù),造成視頻數(shù)據(jù)的丟失。同時,如果輸入超過2片,那CPU幾乎都在中斷的觸發(fā)下讀數(shù)據(jù),無時間寫硬盤,造成視頻數(shù)據(jù)的丟失,也無時間去做其它的事情,這顯然是不行的。因此,要想用這種設(shè)計在400 u s內(nèi)傳輸4路圖像或更多路圖像數(shù)據(jù)到EM8560內(nèi)存中是不能實現(xiàn)的。
(2)解決LocaI Bus總線速度對系統(tǒng)性能的影響
在嵌入式系統(tǒng)中,處理器外部總線的主要目的是將外部的數(shù)據(jù)塊輸入到處理器內(nèi)部緩存中,外部總線速度一般是不會超過處理器訪問它的外存(如SDRAM)的速度,否則會引起數(shù)據(jù)內(nèi)部擁塞而丟失數(shù)據(jù)。因此,在一些需要傳輸大量數(shù)據(jù)到處理器內(nèi)存的嵌入式系統(tǒng)中,能否使從外部輸入到內(nèi)存的數(shù)據(jù)以處理器訪問內(nèi)存的速率在處理器外部直接放入外存呢?答案是肯定的。我們可以通過CPLD和FPGA來實現(xiàn),如系統(tǒng)框圖中所示。下面說明這樣實現(xiàn)的方法。 首先,就處理器內(nèi)部來講,一般嵌入式處理器將它的片外物理存儲空間映射到內(nèi)存地址空間的高端。EM8560處理器就是這樣映射的,如圖2所示。
當(dāng)系統(tǒng)啟動時,引導(dǎo)程序?qū)⒉僮飨到y(tǒng)從Flash中引入SDRAM中的低2M×32位內(nèi)存中, 即操作系統(tǒng)獲得系統(tǒng)控制權(quán)后只在sDRAM的兩個低BANK內(nèi)運行。這時不訪問兩個高BANK。因為將兩個高BANK作為輸入視頻數(shù)據(jù)緩沖區(qū),只有當(dāng)緩沖區(qū)滿要將數(shù)據(jù)寫入硬盤時才訪問兩個高BANK,因此,用兩片SDRAM分別作為一片SDRAM的兩個高BANK和兩個低BANK使用。高片SDRAM用來存放輸入視頻數(shù)據(jù),由FPGA直接寫入;低片sDRAM運行操作系統(tǒng)和系統(tǒng)程序。這樣可以把外部輸入的視頻數(shù)據(jù)不通過Local Bus總線直接輸入到內(nèi)存。在輸入到內(nèi)存的過程中,CPU是不參與傳輸數(shù)據(jù)的。值的注意的是:高片中只用了兩個高BANK,低片中只用了兩個低BANK。
其次,我們已經(jīng)把一片SDRAM用兩片來代替,分別為外部輸入數(shù)據(jù)緩存和系統(tǒng)程序運行空間;可是對CPU來講,它認為它的外存只有一片,它從兩個高BANK取數(shù)時認為是從同一片SDRAM的兩個高BANK取數(shù),因此,需要在CPU訪問兩個高BANK時將數(shù)據(jù)線、地址線和控制線切換到高片SDRAM;反之,在CPU訪問兩個低BANK時,將數(shù)據(jù)線、地址線及控制線切換到低片SDRAM。這個切換是無法用EM8500的CS來完成的。因為它只有一個CS信號,只允許掛一片SDRAM。所以,我們用CPLD來完成這個切換工作。CPLD根據(jù)輸入到它的SDRAM地址線和控制線,在CPU發(fā)布ACTTIVE命令時,根據(jù)地址線中的兩位BANK地址線確定是訪問兩個高BANK還是訪問兩個低BANK,如果是訪問兩個低BANK,CPLD輸出控制信號,關(guān)斷連到高片SDRAM數(shù)據(jù)線和地址命令線的兩個高速數(shù)據(jù)開關(guān),同時打開連到低片SDRAM的高速數(shù)據(jù)開關(guān),這樣CPU就訪問低片SDRAM;反之,如果CPU要訪問兩個高BANK,則CPLD輸出控制信號,關(guān)斷低片數(shù)據(jù)線上的開關(guān),同時打開高片SDRAM數(shù)據(jù)線和地址命令線上的開關(guān),這時CPU訪問高片SDRAM;如果CPU要訪問FPGA中映射的寄存器,則所有的開關(guān)都關(guān)斷,這時CPU可以從FPGA中讀入數(shù)據(jù)。因此,通過CPLD就完成了CPU訪問FPGA以及兩片SDRAM之間的數(shù)據(jù)切換。
第三,我們來看看FPGA如何將外部輸入視頻數(shù)據(jù)直接輸入到處理器內(nèi)存中兩個高BANK的數(shù)據(jù)緩沖區(qū)中。當(dāng)IME6400輸出緩沖區(qū)的編碼壓縮數(shù)據(jù)滿時,它向FPGA發(fā)中斷,而不是向CPU發(fā)中斷。FPGA收到中斷后,將IME6400來的數(shù)據(jù)放入它自己的緩沖區(qū)。由于FPGA內(nèi)部嵌入的存儲空間小,要緩沖多路視頻數(shù)據(jù)流是不夠的,所以外加一片SDRAM作為FPGA自己的緩存。新加這片緩存最大的好處是可以緩存更多路的視頻數(shù)據(jù),并且每路視頻數(shù)據(jù)的緩存大小可以自己指定,相當(dāng)于擴展了IME6400輸出BUFFER的空間,因此減少了向CPU發(fā)中斷的次數(shù)。當(dāng)FPGA緩存中存儲的某一路數(shù)據(jù)滿時,F(xiàn)PGA向CPU發(fā)中斷,CPU進入中斷服務(wù)程序。在中斷服務(wù)程序中,CPU是不訪問高片SDRAM的。這時CPU會讀FPGA中特定的寄存器,根據(jù)寄存器的值判斷FPGA是否已經(jīng)把它的緩存中的視頻數(shù)據(jù)輸入到高片SDRAM中。如果輸入結(jié)束,F(xiàn)PGA修改寄存器的值,通知CPU數(shù)據(jù)輸入完畢,然后CPU退出中斷處理程序,執(zhí)行其它操作。這樣,F(xiàn)PGA就將多路視頻數(shù)據(jù)經(jīng)過緩存后以內(nèi)存總線的速度轉(zhuǎn)入處理器內(nèi)部緩存的地址空間中。值得說明的是:FPGA與IME6400輸入視頻部分的傳輸速度是比較低的,而FPGA從它的緩存中將數(shù)據(jù)傳到高片sDRAM中的速度是比較高的,是以內(nèi)存總線接口的同步時鐘傳輸?shù)摹?BR>
3 改進的系統(tǒng)性能分析
首先,對于CPU所要訪問的外部設(shè)備,通過加入FPGA的緩存,等價于增大了外部設(shè)備輸出數(shù)據(jù)緩沖區(qū)的空間,并且該空間的大小可以通過改變FPGA的緩存來任意改變,大大減小了頻繁地向CPU發(fā)中斷的次數(shù)。例如,一片IME6400的1KB輸出數(shù)據(jù)緩沖區(qū)滿,就要發(fā)出中斷信號,要求主機在400 us內(nèi)讀空緩沖區(qū)中的數(shù)據(jù)。如果中斷信號發(fā)往CPU,則IME6400滿1KB就中斷CPU一次;如果將中斷信號發(fā)往FPGA,則FPGA會將這1KB數(shù)據(jù)先放到自己的緩存中,等到積累到一定大小,比如16KB、32KB時,再由FPGA向CPU發(fā)中斷,進行高速數(shù)據(jù)拷貝,大大減小了系統(tǒng)中斷次數(shù)。其次,由于數(shù)據(jù)的輸入由Local Bus總線改為由FPGA緩存以后再高速輸入,這就大大增加了輸入視頻數(shù)據(jù)的通道數(shù),即能掛更多的IME6400。原來用Local Bus從IME6400中讀lKB數(shù)據(jù)需要100 u s左右時間,現(xiàn)在通過FPGA讀只用不到25 u s的時間,相當(dāng)于原來所用時間的1/5。這就允許在400 us內(nèi)增加更多的通道數(shù),由原來最大的兩路可以擴充到四路、八路、十路等等,大大改善了系統(tǒng)性能。
值得注意的是:以上系統(tǒng)性能的改進是犧牲了兩片SDRAM部分空間換得的。在低片sDRAM中只用了兩個低BANK,在高片SDRAM中只用了兩個高BANK。當(dāng)然這種劃分也可以不相等,視具體情況而定。
綜上所述,對于那些由于受到總線速度制約的嵌入式系統(tǒng)來講,上述方案具有一定的參考價值。