實(shí)時(shí)視頻處理系統(tǒng)中乒乓緩存控制器的設(shè)計(jì)
引言
緩存技術(shù)是分布式計(jì)算環(huán)境中的重要技術(shù),它可以改善系統(tǒng)的整體性能(如吞吐量、查詢響應(yīng)時(shí)間等),構(gòu)建大規(guī)模視頻服務(wù)系統(tǒng)時(shí),可以減少對(duì)磁盤的訪問,提高系統(tǒng)性能。在高速數(shù)據(jù)采集系統(tǒng)中,通常在存儲(chǔ)設(shè)備的前端加一級(jí)緩存,可以使低速存儲(chǔ)設(shè)備無丟失地記錄高速數(shù)據(jù)[1]。不僅如此,現(xiàn)在,在比較高速cpu的性能參數(shù)時(shí),一個(gè)重要的指標(biāo)就是看其是否具有高速緩存。
隨著數(shù)字多媒體技術(shù)的不斷發(fā)展,實(shí)時(shí)視頻數(shù)據(jù)處理的一個(gè)突出的問題就是數(shù)據(jù)量龐大,特別是在圖像幀率及分辨率要求比較高的場(chǎng)合,僅用專用的視頻壓縮芯片(video asic)、專用的視頻信號(hào)處理器(video dsp)或通用的高性能數(shù)字信號(hào)處理芯片(dsp),均無法獲得令人滿意的效果,為此,人們提出了多種解決方案,其中比較有代表性的方案有以下兩種:一是在中央控制器的調(diào)度下,兩片或多片視頻處理芯片并行對(duì)實(shí)時(shí)視頻進(jìn)行處理。二是整個(gè)實(shí)時(shí)視頻處理系統(tǒng)由視頻采集系統(tǒng)和視頻壓縮系統(tǒng)組成,其中視頻采集系統(tǒng)負(fù)責(zé)接收原始的視頻數(shù)據(jù)并對(duì)其進(jìn)行一定的預(yù)處理;視頻壓縮系統(tǒng)負(fù)責(zé)接收視頻采集系統(tǒng)預(yù)處理后的數(shù)據(jù)并進(jìn)行壓縮[2]。本文將采用第二種方法,并在此方法中應(yīng)用fpga設(shè)計(jì)乒乓緩存控制器,從而實(shí)現(xiàn)實(shí)時(shí)視頻數(shù)據(jù)流的無縫緩沖和處理。
常用數(shù)據(jù)緩存結(jié)構(gòu)的比較
實(shí)時(shí)視頻處理系統(tǒng)中,輸入緩沖和輸出緩沖電路的作用主要是為恒速的視頻編解碼與變速的dsp圖像處理過程之間提供適應(yīng)通道,輸入和輸出緩沖電路一般有三種結(jié)構(gòu)形式:
(1)雙口ram結(jié)構(gòu)
雙口ram是在一個(gè)sram存儲(chǔ)器上具有兩套完全獨(dú)立的數(shù)據(jù)線、地址線、讀寫控制線、并允許兩個(gè)獨(dú)立的系統(tǒng)同時(shí)對(duì)該存儲(chǔ)器進(jìn)行隨機(jī)訪問。
(2)fifo結(jié)構(gòu)
fifo可以進(jìn)行雙端操作,但是數(shù)據(jù)必須先進(jìn)先出,不能進(jìn)行隨機(jī)性的訪問,從容量大小來看,雙口ram比fifo要大一些,但總的來說,這兩種緩沖結(jié)構(gòu)的存儲(chǔ)容量還是相對(duì)較小,對(duì)高速圖像處理系統(tǒng)而言,還不是特別適合。
(3)乒乓緩存結(jié)構(gòu)
這種結(jié)構(gòu)是將輸入數(shù)據(jù)流通過輸入數(shù)據(jù)選擇單元等時(shí)地將數(shù)據(jù)流分配到兩個(gè)數(shù)據(jù)緩沖區(qū)。在第1個(gè)緩沖周期,將輸入的數(shù)據(jù)流緩存到數(shù)據(jù)緩沖模塊1上,在第2個(gè)緩沖周期,通過輸入數(shù)據(jù)選擇單元的切換,將輸入的數(shù)據(jù)流緩存到數(shù)據(jù)緩沖模塊2,同時(shí),將數(shù)據(jù)緩沖模塊1緩存的第1個(gè)周期的數(shù)據(jù)通過輸出數(shù)據(jù)選擇單元的選擇,送到運(yùn)算處理單元進(jìn)行處理,第3個(gè)緩沖周期,再次切換數(shù)據(jù)的輸入與輸出緩沖模塊。如此循環(huán),周而復(fù)始。
綜上所述,乒乓緩存結(jié)構(gòu)實(shí)際上相當(dāng)于一個(gè)雙口ram,但它與普通的雙口ram又有所不同,主要表現(xiàn)在以下幾方面:
◆普通雙口ram是單個(gè)存儲(chǔ)體構(gòu)成的ic,乒乓緩存結(jié)構(gòu)則由包含兩個(gè)相互獨(dú)立存儲(chǔ)體的多片ic構(gòu)成,從而使其在結(jié)構(gòu)、速度、容量等方面具有更大的靈活性;
◆若雙口在訪問同一地址時(shí),普通雙口sam指向的必定是存儲(chǔ)體內(nèi)的同一存儲(chǔ)單元,而乒乓緩存結(jié)構(gòu)則分別指向?qū)儆趕ram1和sram2的兩個(gè)不同的存儲(chǔ)單元;
◆乒乓緩存結(jié)構(gòu)的雙口指向的存儲(chǔ)區(qū)(sram1還是sram2)可以由外部信號(hào)來控制,而普通雙口ram則必須由地址線來控制。
乒乓緩存結(jié)構(gòu)的上述特點(diǎn)決定了可以相對(duì)較便宜的高速大容量sram、外圍邏輯器件構(gòu)成比雙口ram以及高速fifo更適合視頻處理的系統(tǒng)所需要的緩沖存儲(chǔ)器。
實(shí)時(shí)視頻處理系統(tǒng)結(jié)構(gòu)
數(shù)字視頻處理系統(tǒng)的突出特點(diǎn)是視頻數(shù)據(jù)的流量非常大,且對(duì)系統(tǒng)處理的實(shí)時(shí)性要求也比較高,因此,系統(tǒng)必須建立快速、有序的視頻數(shù)據(jù)輸入、輸出機(jī)制、盡可能采用高速的fpga,在此基礎(chǔ)上,采用適應(yīng)于高速dsp和fpga處理系統(tǒng)的乒乓緩存結(jié)構(gòu)。
雖然視頻信號(hào)處理的需求多種多樣,但數(shù)據(jù)處理的流程都遵循數(shù)據(jù)采集、格式轉(zhuǎn)換、數(shù)據(jù)接收、數(shù)據(jù)計(jì)算、數(shù)據(jù)通信的步驟,圖1所示是基于fpga和dsp的實(shí)時(shí)視頻信號(hào)處理框架。
視頻信號(hào)轉(zhuǎn)換模塊由視頻信號(hào)處理器完成視頻信號(hào)從模擬信號(hào)到數(shù)字信號(hào)的轉(zhuǎn)換、圖像信號(hào)與其他信號(hào)的分離、視頻信號(hào)的格式轉(zhuǎn)換等,最終提供供給后端可以處理的數(shù)字視頻數(shù)據(jù);視頻數(shù)據(jù)計(jì)算模塊首先接受來自前一個(gè)模塊的數(shù)字視頻數(shù)據(jù),然后完成對(duì)數(shù)字視頻數(shù)據(jù)的計(jì)算,數(shù)據(jù)接收由fpga完成,數(shù)據(jù)計(jì)算由dsp完成,通信模塊則實(shí)現(xiàn)與外界的數(shù)據(jù)交換。
本文重點(diǎn)介紹的是視頻數(shù)據(jù)計(jì)算模塊中的輸入乒乓緩存結(jié)構(gòu)(如果經(jīng)dsp編碼的信號(hào)需要輸出并解碼的話,同樣可以設(shè)計(jì)輸出乒乓緩存結(jié)構(gòu),原理一樣。)
乒乓緩存控制器分析
由上文可知,實(shí)現(xiàn)乒乓緩存結(jié)構(gòu)的關(guān)鍵是sram的選擇以及控制器的設(shè)計(jì),下面對(duì)這兩個(gè)問題進(jìn)行探討:
一般情況下,sram1和sram2需選用兩個(gè)速度、容量以及其他特性完全相同的靜態(tài)存儲(chǔ)器,這是由乒乓緩存結(jié)構(gòu)實(shí)際工作時(shí),電路狀態(tài)轉(zhuǎn)換的對(duì)稱性決定的,sram器件的速度應(yīng)高于外部電路所要求的數(shù)據(jù)輸入、輸出速度,其容量應(yīng)不小于需要緩存的數(shù)據(jù)量,對(duì)于一個(gè)圖像處理系統(tǒng)而言,假如需要緩存的數(shù)據(jù)量是一幀256×256的圖像,那么所需單片sram的容量應(yīng)大于或等于64k字節(jié)。
實(shí)現(xiàn)乒乓緩存結(jié)構(gòu)的外部邏輯一般較復(fù)雜,故常用高速fpga來實(shí)現(xiàn)其控制,這種方式的優(yōu)點(diǎn)是:
(1)將所有的控制邏輯集成在一塊芯片上,減小了控制器的體積;
(2)根據(jù)外部信號(hào)處理電路的特點(diǎn),可以靈活設(shè)計(jì)雙口p1、p2以及控制信號(hào)vs的輸入形式這種普通雙口ram所不具備的一個(gè)重要特點(diǎn);
(3)sram存儲(chǔ)器接口sr1、sr2的信號(hào)位置也可以根據(jù)電路板的實(shí)際需要來設(shè)計(jì)。
實(shí)際上,若系統(tǒng)電路所決定的乒乓緩存結(jié)構(gòu)雙口p1和p2是包含地址、數(shù)據(jù)、以及控制線在內(nèi)的普通并行口,那么控制器實(shí)際上就是一組“單刀雙擲開關(guān)”。具體方式如圖2所示。
乒乓緩存控制器接口
在圖2中,輸入緩沖電路的上游接視頻解碼器saa7113,下游接dsp(需要解碼時(shí),輸出緩沖電路上游接dsp,下游接視頻編碼器)。對(duì)于大多數(shù)a/d轉(zhuǎn)換器,由于其僅具有并行數(shù)據(jù)輸入輸出端口,而沒有地址和控制信號(hào)輸出口,故它無法直接對(duì)普通sram進(jìn)行讀/寫操作,因而要求乒乓緩存控制器本身具有地址產(chǎn)生功能,故必須增加地址產(chǎn)生邏輯,其中,clk為ad(或da)轉(zhuǎn)換時(shí)鐘,它作為計(jì)數(shù)器的脈沖源,而計(jì)數(shù)器的輸出端則提供了sram尋址線。該圖中,db1接ad轉(zhuǎn)換器saa7113的數(shù)據(jù)輸出端(或da轉(zhuǎn)換器的數(shù)據(jù)輸入端),cb1為讀寫使能信號(hào),而對(duì)ad轉(zhuǎn)換器而言,因其是恒定輸出器件,故p1口cb1的/re應(yīng)恒接高,/we恒接低(對(duì)da轉(zhuǎn)換器而言,因其是恒定輸入器件,故p1口cb1的/re應(yīng)恒接低,/we恒接高),p2口接dsp外存接口(emif)之ce0空間,db2接dsp的數(shù)據(jù)總線ed,ab2接dsp的地址總線ad。工作時(shí),數(shù)據(jù)從視頻解碼器輸出到乒乓緩沖器,經(jīng)緩沖之后輸入到dsp的emif外存空間,以備處理。其中,ad轉(zhuǎn)換時(shí)鐘saa7113 clk作為計(jì)數(shù)器的計(jì)數(shù)脈沖,以產(chǎn)生地址線ab1;場(chǎng)同步信號(hào)vs用于復(fù)位計(jì)數(shù)器,這意味著乒乓緩存的容量(亦即sr1、sr2的容量)為一場(chǎng)的視頻數(shù)據(jù)。
這樣,從saa7113過來的數(shù)字信號(hào)就可以在乒乓緩存控制器的控制下,像單刀雙擲開關(guān)一樣交替接通,從而將數(shù)據(jù)寫入sdram以便dsp進(jìn)行處理,這樣就很好地解決了對(duì)高速數(shù)據(jù)的緩沖。
仿真流程與結(jié)果
乒乓緩存控制器程序可采用verilog hdl編寫,并可在modelsim下實(shí)現(xiàn)邏輯仿真,仿真程序包括3部分:一是處于top的主體程序,用于控制其他各個(gè)部分程序的運(yùn)行;二是視頻圖像采集程序,用于從saa7113獲得數(shù)據(jù)圖像數(shù)據(jù)并保存到sram中,三是乒乓緩存控制器,用于實(shí)現(xiàn)對(duì)sram數(shù)據(jù)讀寫的切換,限于篇幅,這是只列出整體控制過程流程圖,見圖3。
圖4是其仿真波形。在控制信號(hào)toggle=1時(shí),dsp的emif連接到sr1,以從sram1中讀取視頻數(shù)據(jù),同時(shí)saa7113將數(shù)據(jù)寫到sram2,在控制信號(hào)toggle=0時(shí),dsp的emif連接到sr2,以從sram2中讀取視頻數(shù)據(jù),同時(shí)saa7113寫數(shù)據(jù)到sram1,此過程如此循環(huán),便可實(shí)現(xiàn)大量高速視頻數(shù)據(jù)流的無縫緩沖和處理。
結(jié)論
本文討論了乒乓緩存控制器的實(shí)現(xiàn)方法,實(shí)踐證明,乒乓操作的最大特點(diǎn)是可通過輸入數(shù)據(jù)選擇單元和輸出數(shù)據(jù)選擇單元按節(jié)拍相互配合切換,從而將經(jīng)過緩沖的數(shù)據(jù)流停頓地送到運(yùn)算處理單元,以進(jìn)行運(yùn)算和處理,如果把乒乓操作模塊當(dāng)做一個(gè)整體,站在這個(gè)模塊的兩端看數(shù)據(jù),那么,輸入數(shù)據(jù)流和輸出數(shù)據(jù)流都是連續(xù)不斷的,沒有任何停頓,因此非常適合對(duì)數(shù)據(jù)流進(jìn)行流水線式處理,以高效完成大量事實(shí)時(shí)頻數(shù)據(jù)的無縫緩沖和處理。
評(píng)論