基于NiosII的視頻采集與傳輸系統(tǒng)
采用軟件編程實(shí)現(xiàn)傳統(tǒng)圖像的采集和處理,這需要占用大量的CPU資源,一方面CPU要提高系統(tǒng)工作頻率,使得整個(gè)系統(tǒng)的可靠性接受很大的挑戰(zhàn),另一方面這類系統(tǒng)難以處理實(shí)時(shí)、高分辨率的圖像。
1 引言
采用NiosII加上FPGA可解決這些問(wèn)題。Altera公司推出的NiosII是一種可配置的RISC嵌入式軟核處理器,它可與各種各樣的外設(shè)、定制指令和硬件加速單元相結(jié)合,根據(jù)用戶的需求進(jìn)行裁剪,構(gòu)成一個(gè)定制的SoPC。
本系統(tǒng)將視頻數(shù)據(jù)的采集和傳輸集成到單片F(xiàn)PGA上,采集部分使用硬件描述語(yǔ)言編寫成硬件模塊,作為外設(shè)掛到系統(tǒng)中,不占用CPU資源,提高了系統(tǒng)的運(yùn)革新行速度。在此基礎(chǔ)上,用戶還可方便地添加IP核等方式來(lái)擴(kuò)展系統(tǒng)的功能,比如將H.263視頻編碼的硬件模塊加載到NiosII系統(tǒng)中,大大縮短了開發(fā)周期。
2 NiosII處理器系統(tǒng)
一個(gè)NiosII處理器系統(tǒng)由NiosII CPU和一系列的外設(shè)組成。開發(fā)基于NiosII的嵌入式系統(tǒng),關(guān)鍵在于如何根據(jù)功能需求定制NiosII及設(shè)計(jì)自定義接口。在本系統(tǒng)中,由于要實(shí)現(xiàn)視頻數(shù)據(jù)的采集和網(wǎng)絡(luò)傳輸功能,而NiosII(version 6.0)標(biāo)準(zhǔn)接口組件中沒(méi)有視頻解碼芯片ADV7181B和網(wǎng)絡(luò)芯片DM9000A的接口,所以用戶要用硬件描述語(yǔ)言編寫ADV7181B和DM9000A的硬件模塊接口,然后在SOPC Builder中以用戶自定義的方式添加進(jìn)去,掛到avalon總線上。本系統(tǒng)主要包括以下部分:
EP2C35(CycloneII FPCA)包括NioslI軟核CPU、操作系統(tǒng)使用的定時(shí)器timer0、網(wǎng)絡(luò)協(xié)議棧使用的定時(shí)器timer1;Flash主要用來(lái)存放軟件代碼以及一些需要保存的參數(shù);SDRAM用來(lái)在系統(tǒng)運(yùn)行時(shí)的代碼和數(shù)據(jù)存儲(chǔ);LED和按鍵用來(lái)指示工作狀態(tài)和系統(tǒng)復(fù)位的按鍵;為了方便調(diào)試,異步串口UART通過(guò)串口終端觀察系統(tǒng)的運(yùn)行狀態(tài);自定義的視頻采集硬件模塊控制從視頻輸入口進(jìn)來(lái)的視頻數(shù)據(jù)經(jīng)視頻解碼芯片ADV7181解碼后正確的存放到存儲(chǔ)器中以供后續(xù)的處理;以太網(wǎng)利用TCP/IP協(xié)議傳輸視頻數(shù)據(jù)。整個(gè)系統(tǒng)的結(jié)構(gòu)如圖1。
3 視頻采集硬件模塊
DE2開發(fā)板上視頻A/D芯片選用的是ADV7181B,其輸出的數(shù)字視頻數(shù)據(jù)通過(guò)8位總線TD DATA [7:0]傳輸給FPGA,F(xiàn)PGA經(jīng)視頻解碼模塊在視頻數(shù)據(jù)中識(shí)別出有效數(shù)據(jù)。如圖2是視頻采集模塊的框圖。ADV7181B輸出標(biāo)準(zhǔn)的ITU656格式的數(shù)據(jù),Y:U:V,=4:2:2,分辨率為720×576,輸出像素時(shí)鐘為27 MHz,一行視頻數(shù)據(jù)的格式如表1所示。
本設(shè)計(jì)的視頻解碼模塊是通過(guò)分析視頻數(shù)據(jù)流中的“FF 00 00 SAV/EAV”,解碼得到一行的有效數(shù)據(jù)YCbCr以及場(chǎng)標(biāo)志和場(chǎng)消隱信號(hào)。數(shù)據(jù)流程如圖3所示。
4 μClinux操作系統(tǒng)移植
嵌入式μClinux操作系統(tǒng)主要由3個(gè)基本部分組成:引導(dǎo)程序、μClinux內(nèi)核和文件系統(tǒng)。μClinux的內(nèi)核定制高度靈活化,開發(fā)者可按設(shè)計(jì)需求對(duì)內(nèi)核進(jìn)行配置,在了解內(nèi)核原理后可增加各類驅(qū)動(dòng)。
1) 建立開發(fā)環(huán)境
μClinux系統(tǒng)的移植選用的主機(jī)平臺(tái)是。Fedora Core6,內(nèi)核版本為2.6.19。在進(jìn)行μClinux的移植之前,需要建立系統(tǒng)的交叉編譯環(huán)境。
2) 配置內(nèi)核
在編譯μClinux內(nèi)核之前,首先要對(duì)內(nèi)核進(jìn)行配置。針對(duì)本系統(tǒng),由于DE2開發(fā)平臺(tái)上只有4 Mbyte的Flash,根據(jù)系統(tǒng)的功能將必要的選項(xiàng)選中,將沒(méi)有必要的選項(xiàng)去掉,以減少內(nèi)核的大小。本系統(tǒng)中需要注意的兩點(diǎn)是:
(1) 選擇設(shè)備驅(qū)動(dòng)中的網(wǎng)絡(luò)支持選項(xiàng),在Ethernet(10 or 100 Mbit/s)下面選中DM9000A,因?yàn)镈E2開發(fā)板的網(wǎng)絡(luò)芯片是DM9000A。
(2) 選擇字符型設(shè)備驅(qū)動(dòng)Character devices這一步要選擇串行口驅(qū)動(dòng),進(jìn)入SeriaI drivers選項(xiàng),然后選定Nios serial port support,這樣在內(nèi)核中加入了對(duì)Nios口的支持,就可以通過(guò)串口將內(nèi)核打印的信息傳遞給主機(jī)。
(3) 配置μClinux的文件系統(tǒng)
在內(nèi)核啟動(dòng)之后,就會(huì)將romfs作為根文件系統(tǒng)。根文件系統(tǒng)中必須要有init和sh這兩個(gè)可執(zhí)行文件。這樣在內(nèi)核運(yùn)行的最后,將有一個(gè)簡(jiǎn)單的shell界面,同時(shí)用戶也可以將自己的應(yīng)用程序加入到根文件系統(tǒng)中。
4) 下載μClinux內(nèi)核映象
將內(nèi)核映象和根文件系統(tǒng)下載到的Flash中,然后上電。通過(guò)串口終端工具看到系統(tǒng)啟動(dòng)后的信息如圖4。說(shuō)明系統(tǒng)已經(jīng)正常運(yùn)行,以太網(wǎng)已經(jīng)連接上。進(jìn)行網(wǎng)絡(luò)測(cè)試,在開發(fā)板端,開啟網(wǎng)絡(luò)服務(wù)器程序boa,用Internet網(wǎng)絡(luò)中的另一臺(tái)主機(jī)訪問(wèn)該服務(wù)器,得到如下測(cè)試圖如圖5。
5 小結(jié)
由于本系統(tǒng)是直接對(duì)經(jīng)攝像頭采集的視頻數(shù)據(jù)打包發(fā)送,沒(méi)有對(duì)數(shù)據(jù)壓縮編碼,因而對(duì)帶寬的要求很大,尚且不能應(yīng)用到實(shí)際中,但這為下一步的開發(fā)提供了一個(gè)整體構(gòu)架,下一步的工作就是將視頻數(shù)據(jù)壓縮編/解碼添加到FPGA中,比如將H.263視頻編碼引入到本系統(tǒng)中,構(gòu)建一個(gè)視頻終端。