基于FPGA的MIMO視頻緩存器的設(shè)計(jì)與實(shí)現(xiàn)
隨著高速處理器的不斷發(fā)展,嵌入式系統(tǒng)應(yīng)用的領(lǐng)域越來越廣泛,高速大容量緩存器被廣泛應(yīng)用于音視頻系統(tǒng)中,然而專用的高速大容量緩存芯片價(jià)格過于昂貴,傳統(tǒng)SDRAM在帶寬上已經(jīng)逐漸無法滿足應(yīng)用要求,特別是對(duì)于多路數(shù)據(jù)多進(jìn)多出時(shí),兩者都無法很好的滿足要求,這里提出一種利用雙沿隨機(jī)動(dòng)態(tài)存儲(chǔ)器(DDR SDRAM)結(jié)合外加專用電路的設(shè)計(jì)方案。
本文引用地址:http://www.ex-cimer.com/article/272881.htm設(shè)計(jì)應(yīng)用在基于DVB-C的EOAM調(diào)制器系統(tǒng)中,該系統(tǒng)的基本要求能夠緩存集合多路視頻TS流的千兆IP數(shù)據(jù),并對(duì)IP數(shù)據(jù)進(jìn)行多路高速分發(fā);輸入為2個(gè)千兆網(wǎng)口,輸出至RF射頻接口的數(shù)百個(gè)數(shù)據(jù)分發(fā)通道。
在以往系統(tǒng)設(shè)計(jì)中,有人提出使用普通SDRAM芯片作為物理緩存單元,但是由于該類芯片工作速度限制,在基本位寬條件下,達(dá)不到上述系統(tǒng)的高帶寬要求。若不提高芯片速度,單純提高位寬,由于各位數(shù)據(jù)的延時(shí)不同,且SDRAM采用的3.3 V電壓的上升下降沿過渡較寬,將導(dǎo)致芯片數(shù)據(jù)采樣的穩(wěn)定時(shí)間窗變窄,數(shù)據(jù)傳輸可靠性下降;同時(shí)由于位寬增大,引腳變多,造成設(shè)計(jì)復(fù)雜度的直線上升。本文使用DDR SDRAM作為存儲(chǔ)單元,在不改變系統(tǒng)時(shí)鐘的情況下,利用時(shí)鐘雙沿傳輸數(shù)據(jù),將同頻率芯片的傳輸帶寬在SDRAM基礎(chǔ)上提高了一倍,很好地滿足了高帶寬緩存的需要。
1 DDR存儲(chǔ)器簡(jiǎn)介
DDR存儲(chǔ)器即雙數(shù)據(jù)率同步動(dòng)態(tài)隨機(jī)訪問存儲(chǔ)器,它和早期的單數(shù)據(jù)率同步動(dòng)態(tài)隨機(jī)訪問存儲(chǔ)器一樣,內(nèi)部存儲(chǔ)單元采用電容充電來保存數(shù)據(jù),因此必須不斷地對(duì)電容充電以保持?jǐn)?shù)據(jù),這就是所謂的“刷新”。SDRAM的數(shù)據(jù)總線在每個(gè)時(shí)鐘的上升沿存取數(shù)據(jù),而DDR SDRAM則在每個(gè)時(shí)鐘的上升沿和下降沿都存取數(shù)據(jù),這樣在數(shù)據(jù)總線寬度和時(shí)鐘頻率不變的條件下數(shù)據(jù)總線帶寬得到了一倍的提升。
2 系統(tǒng)設(shè)計(jì)
設(shè)計(jì)采用Xilinx公司的Sptan3a-dsp 1800a作為主控制器,使用Micron公司的MT64V32X16芯片作為存儲(chǔ)介質(zhì),最大存儲(chǔ)容量為512M。本系統(tǒng)的邏輯部分由仲裁模塊、輸入緩存模塊、調(diào)度判決模塊、地址轉(zhuǎn)換模塊和DDR接口控制模塊等部分組成,結(jié)構(gòu)框圖如圖1所示。
核心控制器中的仲裁模塊產(chǎn)生相應(yīng)的控制命令。完成上電后的初始化復(fù)位,并在系統(tǒng)運(yùn)行過程中,針對(duì)工作優(yōu)先級(jí),發(fā)出刷新指令、寫操作指令和讀操作指令;DDR接口控制模塊根據(jù)DDR芯片操作的基本時(shí)序,實(shí)現(xiàn)核心控制器指令的針對(duì)物理芯片的信息傳輸;南于DDR芯片具有不可實(shí)時(shí)操作特性,必須使用內(nèi)部輸入緩存RAM進(jìn)行基本的實(shí)時(shí)數(shù)據(jù)緩沖;而地址轉(zhuǎn)換模塊、調(diào)度判決模塊則和內(nèi)部輸入緩存RAM配合,完成對(duì)DDR芯片內(nèi)部存儲(chǔ)空間的映射工作。
3 DDR核心控制器設(shè)計(jì)
DDR存儲(chǔ)器是一種指令相對(duì)復(fù)雜的高速存儲(chǔ)芯片,它在上電后必須完成初始化才能進(jìn)行其它操作;而且不支持單周期讀寫操作,只支持周期為2、4、8突發(fā)讀寫操作。另外,DDR芯片由于其電容特性,數(shù)據(jù)保存在其中是不穩(wěn)定的,需要在一定時(shí)間周期內(nèi)對(duì)其進(jìn)行刷新操作,以保證數(shù)據(jù)不會(huì)丟失,因此,在DDR操作過程中有數(shù)十條指令。但在本設(shè)計(jì)中DDR接口控制器采用的是Xilinx提供的DDR IP,這樣核心控制器中的仲裁模塊只需要使用空閑、初始化、讀操作和寫操作等4個(gè)指令就可以完成對(duì)DDR-SDRAM的操作,大大降低了設(shè)計(jì)難度。由于設(shè)計(jì)目的在于消除來自網(wǎng)絡(luò)對(duì)IP數(shù)據(jù)的抖動(dòng),并且最終要將IP數(shù)據(jù)分發(fā)至512個(gè)通道,大大超出了以往設(shè)計(jì)對(duì)DDR的使用需求,因此本文在這里提出圖1所示設(shè)計(jì),即可完成DDR存儲(chǔ)器對(duì)高速大容量多通道的設(shè)計(jì)應(yīng)用:
(1)輸入緩存模塊
輸入緩存器由一個(gè)RAM加外部邏輯電路構(gòu)成,緩沖已輸入但還沒來得及寫到DDR中的TS分組凈荷。待仲裁模塊發(fā)出允許寫入的信號(hào)后,再將輸入緩存中的數(shù)據(jù)包傳遞給仲裁模塊,并且釋放相應(yīng)的存儲(chǔ)空間。根據(jù)DDR的工作模式和DVB-C特性,輸入緩存的數(shù)據(jù)傳輸以TS包為單位,實(shí)現(xiàn)192個(gè)字節(jié)連續(xù)突發(fā)傳輸。
(2)調(diào)度判決模塊
調(diào)度判決模塊接收讀請(qǐng)求隊(duì)列信息,實(shí)現(xiàn)讀數(shù)據(jù)時(shí)將同一個(gè)bank內(nèi)數(shù)據(jù)量最大的FIFO進(jìn)行調(diào)度出隊(duì)列的判決。該模塊保存各個(gè)通道FIFO當(dāng)前的數(shù)據(jù)包數(shù)量。
(3)地址轉(zhuǎn)換模塊
地址轉(zhuǎn)換模塊負(fù)責(zé)實(shí)現(xiàn)通道號(hào)和DDR SDRAM芯片內(nèi)部存儲(chǔ)空間的映射。該模塊中保存的變量包括各個(gè)通道在DDR SDRAM中的塊起始地址、塊終止地址、FIFO頭偏移量、FIFO尾偏移量。
(4)仲裁模塊
仲裁模塊產(chǎn)生相應(yīng)控制命令,針對(duì)工作優(yōu)先級(jí),發(fā)出空閑指令、初始化指令、寫操作指令和讀操作指令。
4 資源消耗結(jié)構(gòu)的改進(jìn)
4.1 標(biāo)準(zhǔn)的MIMO結(jié)構(gòu)的緩存器
針對(duì)多路數(shù)據(jù)的緩存,設(shè)計(jì)了多進(jìn)多出的緩存結(jié)構(gòu),對(duì)物理通道輸入的數(shù)據(jù)流首先進(jìn)行識(shí)別與分發(fā),給每一路節(jié)目流配置一個(gè)輸入緩存FIFO和一個(gè)輸出緩存FIFO,結(jié)構(gòu)如圖2所示。
這種結(jié)構(gòu)的優(yōu)點(diǎn)在于,對(duì)每一路節(jié)目,都有單獨(dú)的緩存空間對(duì)其進(jìn)行緩存,各路節(jié)目相對(duì)獨(dú)立,互不干擾;在節(jié)目路數(shù)較少的情況下,該結(jié)構(gòu)效率較高,便于擴(kuò)展。
但上述結(jié)構(gòu)存在的問題在于,如果節(jié)目路數(shù)過多,輸入數(shù)據(jù)流量過大,會(huì)導(dǎo)致FPGA內(nèi)部緩存數(shù)量成幾何上升,極大的消耗FPGA資源,降低運(yùn)行時(shí)鐘頻率,造成系統(tǒng)綜合后速度下降。
4.2 端口固定的MIMO結(jié)構(gòu)緩存器
由于標(biāo)準(zhǔn)的MIMO結(jié)構(gòu)存在的問題,難以達(dá)到本文所需的應(yīng)用要求,因此存這里提出的一種改進(jìn)型設(shè)計(jì)。這種設(shè)計(jì)不像標(biāo)準(zhǔn)的MIMO那樣對(duì)DDR進(jìn)行邏輯結(jié)構(gòu)上的緩存,而是通過固定DDR高位地址,采用物理結(jié)構(gòu)緩存的方式進(jìn)行快速存儲(chǔ),如圖3所示。
在這種結(jié)構(gòu)中,外部流處理模塊先將數(shù)據(jù)流與該數(shù)據(jù)流存儲(chǔ)的通道號(hào)分發(fā)至緩存RAM和地址轉(zhuǎn)換模塊,再由調(diào)度模塊調(diào)度轉(zhuǎn)換后的對(duì)應(yīng)地址指針,將其發(fā)送到DDR上對(duì)應(yīng)的物理存儲(chǔ)空間而在輸出端口也以同樣的方式只針對(duì)物理輸出端口,這就要求有一個(gè)讀請(qǐng)求隊(duì)列,以便將要讀的目的通道提前發(fā)送。在這里調(diào)度模塊能夠?qū)崟r(shí)檢測(cè)各個(gè)通道使用情況,并將數(shù)據(jù)流快速分發(fā)。這種結(jié)構(gòu)對(duì)于EQAM這種一個(gè)物理IP端口輸入幾百路流的設(shè)備,可以極大地降低FPGA內(nèi)部RAM的消耗,且對(duì)DDR影響也較小,不會(huì)過多降低系統(tǒng)性能。而且在前端數(shù)據(jù)緩存中直接使用RAM而不使用FIFO更有利于同步數(shù)據(jù)流和對(duì)應(yīng)地址。
5 系統(tǒng)測(cè)試
為了測(cè)試本設(shè)計(jì)止確性,將上述模塊嵌入EQAM系統(tǒng)后,接收來至網(wǎng)絡(luò)的IP視頻數(shù)據(jù),通過碼流分析儀檢測(cè)數(shù)據(jù)結(jié)果后發(fā)現(xiàn),經(jīng)DDR緩存后數(shù)據(jù)流包計(jì)數(shù)器沒有錯(cuò)誤,沒有出現(xiàn)丟包情況,碼流分析儀自帶播放器能夠清晰連續(xù)播放節(jié)日,如圖3所示。但在節(jié)目轉(zhuǎn)換過程中由于節(jié)目不同會(huì)產(chǎn)生PAT錯(cuò)誤,該錯(cuò)誤不影響節(jié)目正常播放。
6 結(jié)束語(yǔ)
本文在這里提出了一種改進(jìn)MIMO結(jié)構(gòu)DDR緩存器,并對(duì)核心控制模塊實(shí)現(xiàn)功能進(jìn)行了描述,討論了改進(jìn)后的設(shè)計(jì)對(duì)系統(tǒng)的影響。最終測(cè)試結(jié)果也表明,本設(shè)計(jì)完全可以應(yīng)用于多通道大容量的視頻設(shè)備的緩存中。
fpga相關(guān)文章:fpga是什么
存儲(chǔ)器相關(guān)文章:存儲(chǔ)器原理
塵埃粒子計(jì)數(shù)器相關(guān)文章:塵埃粒子計(jì)數(shù)器原理
評(píng)論