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