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