數(shù)字網(wǎng)絡(luò)視頻監(jiān)控器中的多路轉(zhuǎn)接邏輯的設(shè)計(jì)與實(shí)現(xiàn)
摘要:本文主要介紹在視頻監(jiān)控板中多路視頻信號(hào)輸入情況下的數(shù)據(jù)緩存、信號(hào)格式轉(zhuǎn)換的設(shè)計(jì),并用altera的cyclone器件實(shí)現(xiàn)的整個(gè)過程。包括簡(jiǎn)單介紹視頻監(jiān)控器電路板的原理,此轉(zhuǎn)接邏輯在系統(tǒng)中的作用和地位,并詳細(xì)介紹了此邏輯用fpga設(shè)計(jì)實(shí)現(xiàn)的過程。
隨著科技的日新月異,視頻監(jiān)控市場(chǎng)也得到了飛速發(fā)展。視頻監(jiān)控以其直觀、方便、信息內(nèi)容豐富而廣泛應(yīng)用于許多場(chǎng)合。近年來,隨著互聯(lián)網(wǎng)的大范圍普及,以及計(jì)算機(jī)、網(wǎng)絡(luò)以及圖象處理、傳輸技術(shù)的飛速發(fā)展,視頻監(jiān)控技術(shù)也有長(zhǎng)足的發(fā)展。視頻監(jiān)控已經(jīng)滲透到教育、政府、娛樂場(chǎng)所、醫(yī)院、酒店、運(yùn)動(dòng)場(chǎng)館、城市治安等多種領(lǐng)域,視頻監(jiān)控服務(wù)器被稱為及手機(jī)以后另外一個(gè)極具市場(chǎng)開發(fā)前景的消費(fèi)電子產(chǎn)品。
數(shù)字網(wǎng)絡(luò)視頻監(jiān)控服務(wù)器主要完成從攝像頭獲取的模擬信號(hào)到數(shù)字化壓縮后送到網(wǎng)絡(luò)的功能,其原理框圖如圖1所示。
由圖1所示,監(jiān)控器電路板主要由A/D芯片,F(xiàn)PGA多路轉(zhuǎn)接芯片,壓縮芯片,CPU等組成。其中本文要介紹的多路轉(zhuǎn)接邏輯的FPGA實(shí)現(xiàn)位于A/D芯片和壓縮芯片之間,由于FPGA內(nèi)部含有PLL模塊,所以跟FPGA連接的TW2804芯片的27m輸入時(shí)鐘可以由FPGA產(chǎn)生。
這里選用altera的cyclone系列的EP1C6Q240C8,其內(nèi)部有90k的存儲(chǔ)容量,6kLEBS,2個(gè)PLL,在后面的設(shè)計(jì)介紹中,將會(huì)講到整個(gè)設(shè)計(jì)用到了64k的存儲(chǔ)容量,1個(gè)PLL,大約4—5k左右的LEBS,所以選用此低成本的FPGA,可以完成此設(shè)計(jì),而且基本上充分用到了內(nèi)部的大多數(shù)資源,加上此芯片的引腳有240個(gè),能滿足外面的引腳連接,所以altera的EP1C6Q240C8成為此邏輯設(shè)計(jì)中最佳的選擇器件。
如圖1所示,A/D芯片接受來自四個(gè)攝像頭的四路模擬視頻信號(hào),這里采用Techwell公司的TW2804芯片,此芯片支持四路視頻模擬信號(hào)的輸入,輸出是數(shù)字ITU-R BT.656格式的信號(hào),時(shí)鐘是27m。。D1、D2、D3、D4信號(hào)的時(shí)序圖如圖2所示。
圖2
其中EAV和SAV分別為行尾和行頭標(biāo)志信號(hào),他們中間是行與行之間的空白信號(hào),SAV后面的VALID有效時(shí)的信號(hào)為1440bytes的d1格式的有效視頻信號(hào),總的這些信號(hào)加起來是視頻信號(hào)的一行信號(hào),一幀視頻信號(hào)包括576行這樣的行信號(hào),也就是有效的這種格式的一幀輸出視頻信號(hào)為1440*576bytes的信號(hào),由于每一行信號(hào)中由兩個(gè)bytes來表示一個(gè)像素,所以這種d1格式一幀的像素為720*576分辨率。
FPGA轉(zhuǎn)接邏輯要實(shí)現(xiàn)的功能是要在顯示終端上同時(shí)顯示四路的視頻信號(hào),也就是要顯示如圖3所示的視頻信號(hào)。
圖3
由于要在一個(gè)顯示終端上同時(shí)顯示四路信號(hào),所以原來每一路信號(hào)的720*576分辨率要轉(zhuǎn)換為原來1/4的分辨率,即cif的格式,cif格式是352*288的分辨率,這樣四路cif格式的信號(hào)組合成如圖3所示的一個(gè)幀輸出到終端顯示出來。
因?yàn)樵诮K端顯示上是要求四路視頻信號(hào)同步輸出的,也就是不允許出現(xiàn)其中一路信號(hào)已經(jīng)在顯示其上顯示出來了,但另外一路信號(hào)還沒有顯示出來也就是出現(xiàn)畫面上一部分是黑屏的情況,所以在這種情況下,需要把四路不同的視頻信號(hào)先用FPGA在sdram中緩存起來,當(dāng)每一路信號(hào)都在sdram中都至少存滿一幀時(shí)就可以同步讀出,并通過FPGA內(nèi)部緩存組成如圖3所示的幀格式,然后輸出給壓縮芯片壓縮后由處理器控制輸出至網(wǎng)絡(luò),這里的壓縮芯片選的是VWEB公司的VW2010。
至此,F(xiàn)PGA要實(shí)現(xiàn)的功能已經(jīng)非常清晰,首先把輸入的四路d1格式的信號(hào)分別轉(zhuǎn)換成四路cif格式的信號(hào),然后把這四路信號(hào)分別緩存在sdram中,當(dāng)sdram中每一路信號(hào)都至少存滿一幀時(shí),同步讀出,讀出sdram到FPGA中后,經(jīng)過格式的重新組合,最后組成如圖3所示的信號(hào)格式輸出。其中數(shù)據(jù)在sdram中的緩存控制是最重要也是最復(fù)雜的環(huán)節(jié)。下面詳細(xì)介紹此FPGA的邏輯設(shè)計(jì)與實(shí)現(xiàn)。
由上面的介紹可知,此FPGA主要有三方面的接口,與TW2804的輸入接口,與sdram的緩存接口,與VW2010的輸出接口。所以FPGA的內(nèi)部邏輯大致可以設(shè)計(jì)為如圖4所示。
圖4
下面對(duì)各個(gè)模塊分別進(jìn)行介紹。
輸入格式轉(zhuǎn)換模塊的主要是完成四路信號(hào)從d1到cif格式的轉(zhuǎn)換,即從原來的720*576像素的分辨率轉(zhuǎn)換為352*288像素的分辨率。其轉(zhuǎn)換過程是把一幀中偶數(shù)行的數(shù)據(jù)全部去掉,把奇數(shù)行中的數(shù)據(jù),按奇數(shù)列的順序一個(gè)隔一個(gè)的去掉,最后保留的數(shù)據(jù)就是原來1/4的數(shù)據(jù)。這個(gè)過程比較簡(jiǎn)單,通過設(shè)計(jì)兩個(gè)行列計(jì)數(shù)器就能實(shí)現(xiàn)。其仿真圖如圖5所示。
圖5
圖5所示為在奇數(shù)行時(shí)數(shù)據(jù)一個(gè)空一個(gè)的有效,在一行讀完后,下一行就都設(shè)為無效。
接下來是內(nèi)部輸入緩沖模塊,此模塊式用來控制與sdram控制相連接和進(jìn)行數(shù)據(jù)緩存控制的模塊。其內(nèi)部邏輯圖如圖6所示。
如圖6所示,此模塊主要設(shè)置了四個(gè)FIFO。因?yàn)閟dram只有一個(gè)數(shù)據(jù)通道,所以四路信號(hào)輸入時(shí)必須先進(jìn)行內(nèi)部緩存才能無丟失的存儲(chǔ)于sdram中。所以此時(shí)要把FIFO的讀時(shí)鐘至少設(shè)為寫時(shí)鐘的四倍,這樣才能在FIFO沒有存滿時(shí)就能把每一路的信號(hào)從FIFO緩存中讀出到sdram中。
由于sdram的數(shù)據(jù)是32位的,這里把四個(gè)FIFO也設(shè)為32位,所以在四路cif格式的信號(hào)進(jìn)入FIFO之前要先用四個(gè)寄存器進(jìn)行8/32的轉(zhuǎn)換。只要設(shè)置四個(gè)移位寄存器就可實(shí)現(xiàn)。
如圖5所示,cif格式的信號(hào)的輸入時(shí)鐘是27/2m的,由于FIFO是32位的,所以FIFO的讀時(shí)鐘要至少設(shè)成(8/32)*(27/2)*4=13.5m。
對(duì)于這里的FIFO的數(shù)據(jù)容量,把每個(gè)FIFO都設(shè)為256個(gè)深度,這樣就需要256*32=8k的容量,四個(gè)FIFO就需要8*4=32k的容量。所以在輸入緩沖中用到了FPGA中32k的存儲(chǔ)資源。
由于四路cif格式的信號(hào)是每隔704(352*2)bytes就會(huì)出現(xiàn)704個(gè)無效的數(shù)據(jù),即數(shù)據(jù)是一行隔一行的有效的,而sdram需要讀寫兩個(gè)獨(dú)立的帶寬,所以可以把sdram的讀寫周期分別設(shè)為704個(gè)bytes的長(zhǎng)度,這樣在704個(gè)有效數(shù)據(jù)到來的時(shí)候就給sdram控制器寫數(shù)據(jù),而在704個(gè)無效數(shù)據(jù)到來時(shí),就對(duì)sdram控制器讀數(shù),這樣就解決了sdram只有一個(gè)數(shù)據(jù)通道的問題。
但是,由于sdram還有自刷新周期,而且對(duì)其控制的命令是有一定延時(shí)的,所以這里把sdram對(duì)數(shù)據(jù)的讀寫時(shí)鐘頻率再提高一倍,即由上面算得的13.5m提高到27m,對(duì)于cyclone系列的FPGA來說,這樣的邏輯是很容易跑到27m的時(shí)鐘頻率的。
數(shù)據(jù)從FIFO中讀出后,就要送入到sdram控制器中,sdram控制器可以由quartus的megacore產(chǎn)生,也可以根據(jù)需要自己設(shè)計(jì),這里是自己設(shè)計(jì)的,sdram控制器的輸入輸出接口如圖7所示。
如圖7所示,sdram控制器的左面為用戶接口,右面為sdram接口,用戶給sdram發(fā)出請(qǐng)求命令(cmd),當(dāng)收到回應(yīng)信號(hào)(cmdack)時(shí),sdram給用戶端發(fā)送或讀取數(shù)據(jù)。
這里用到的是64m的sdram,因?yàn)槊恳宦穋if格式的信號(hào)每幀數(shù)據(jù)是352*288個(gè)像素,即704*288=202752bytes,這里給每一路信號(hào)分配兩幀的地址空間。由于sdram有突發(fā)數(shù)據(jù)長(zhǎng)度(burst length)和整頁(yè)(full page)兩種數(shù)據(jù)操作方式,而這里因?yàn)閿?shù)據(jù)比較大,所以采用了full page的方式,這種方式是在讀寫命令有效后,即在時(shí)鐘控制下讀出整頁(yè)256個(gè)32bits的數(shù)據(jù),這樣讀寫數(shù)據(jù)的效率就可以提高很多。
因?yàn)閟dram中數(shù)據(jù)的寬度是32位的,而cif格式的信號(hào)是8位的,所以只需要給每路信號(hào)分配2*704*288/4=101376的地址空間。
如圖8所示為sdram控制器的讀寫時(shí)候的控制信號(hào)圖。
a
b
圖8
圖8中a為對(duì)sdram寫數(shù)據(jù)的命令,b為對(duì)sdram讀數(shù)據(jù)的命令,由圖可以看出,通過sdram控制器的轉(zhuǎn)換,在接收到回應(yīng)信號(hào)(cmdack)后,把讀寫命令分別轉(zhuǎn)換成了rasn,casn,wen控制指令。其中讀寫指令分別對(duì)應(yīng)如下。
寫數(shù)據(jù) :rasn=1 ;casn=0 ;wen=0 ;
讀數(shù)據(jù) :rasn=1 ;casn=0 ;wen=1 ;
數(shù)據(jù)從sdram讀出時(shí),應(yīng)滿足每一路信號(hào)都至少在sdram中存滿一幀的條件。當(dāng)可以同步讀出時(shí),由于還是要四路讀出,所以在讀出端口還要設(shè)置四個(gè)FIFO,用來緩存數(shù)據(jù),以進(jìn)行信號(hào)的組幀。
這里把四個(gè)FIFO同樣設(shè)為32位寬度,256長(zhǎng)度,所以這里總共也是用到了32k的存儲(chǔ)容量。加上上面sdram控制器輸入端用到的32k存儲(chǔ)容量,在整個(gè)FPGA中用到了64k的存儲(chǔ)容量,對(duì)于EP1C6Q240C8的90k存儲(chǔ)容量來說是足夠的而且利用率也是比較高的了。
輸出FIFO緩存后,就要把四路信號(hào)按照每一幀如圖3的格式輸出,也就是第一行的前一半的704bytes輸出第一路信號(hào),后一半704個(gè)bytes輸出第二路信號(hào),然后直到第289行開始,前一半的704bytes輸出第三路信號(hào),后一半704個(gè)bytes輸出第四路信號(hào),這樣最后在網(wǎng)絡(luò)顯示終端就可以在一個(gè)屏幕上看到如圖3所示的四幅圖像。
如圖9所示為在前兩行的數(shù)據(jù)輸出波形圖。
由圖可知,第一和第二路的輸出FIFO分別在兩個(gè)rden信號(hào)下控制數(shù)據(jù)的讀出,而這兩個(gè)rden信號(hào)就是由計(jì)數(shù)器計(jì)數(shù)至704產(chǎn)生的,再另外設(shè)置一個(gè)行計(jì)數(shù)器,當(dāng)此計(jì)數(shù)器計(jì)數(shù)至289時(shí),輸出dout就換為第三和第四路信號(hào)的輸出FIFO。
到此為止,整個(gè)FPGA的設(shè)計(jì)大致完成。下面給出對(duì)此次設(shè)計(jì)以后可以擴(kuò)展和改進(jìn)的功能。
首先,因?yàn)檫@是四路的多路轉(zhuǎn)換緩沖,所以直接把它們固定組合起來送至網(wǎng)絡(luò)顯示于終端。如果需要支持更多路的視頻信號(hào)輸入進(jìn)行多路轉(zhuǎn)換,例如輸入信號(hào)時(shí)8路或16路,那么送入網(wǎng)絡(luò)的時(shí)候就有一個(gè)組合的問題,即在顯示器上四幅圖像最終顯示視頻輸入的哪四幅。這在實(shí)際情況下也是經(jīng)常出現(xiàn)的情況,例如在某個(gè)建筑物中安裝了8個(gè)攝像頭,在白天的情況下可能要監(jiān)視樓道內(nèi)的情況,而到晚上可能要監(jiān)視樓外門口的情況,這就需要在FPGA中進(jìn)行一個(gè)選擇,所以,此時(shí)可以在FPGA中加入一個(gè)I2C從模塊,通過此模塊可以與處理器通信,在FPGA中設(shè)置一些寄存器,通過由I2C送來的不同的寄存器配置指令,就可以實(shí)現(xiàn)顯示器上圖像的實(shí)時(shí)切換。
其次,由于cyclone系列的產(chǎn)品存儲(chǔ)容量比較有限,如果要增加到16路這樣的規(guī)模,輸入輸出緩沖的存儲(chǔ)容量必將不夠,所以此時(shí)可以考慮用cyclone2系列的產(chǎn)品。
另外,如果以后要完成路數(shù)比較多的轉(zhuǎn)接,可以在監(jiān)控器板上多加幾塊TW2804和VW2010芯片,這樣就需要FPGA的輸入輸出引腳要足夠多,而EP1C6Q240C8這樣的FPGA芯片有240個(gè)引腳,足夠擴(kuò)展需要。
總之,在這樣的轉(zhuǎn)接邏輯中用到altera的cyclone系列低成本的FPGA產(chǎn)品,充分利用了其現(xiàn)有的內(nèi)部資源,而且價(jià)格也是非常的易于接受,是非常理想的選擇。
評(píng)論