基于FPGA/CPLD和USB技術(shù)的無(wú)損圖像采集卡 作者: 時(shí)間:2007-03-09 來(lái)源:網(wǎng)絡(luò) 加入技術(shù)交流群 掃碼加入和技術(shù)大咖面對(duì)面交流海量資料庫(kù)查詢 收藏 摘要:介紹了外置式USB無(wú)損圖像采集卡的設(shè)計(jì)和實(shí)現(xiàn)方案,它用于特殊場(chǎng)合的圖像處理及其相關(guān)領(lǐng)域。針對(duì)圖像傳輸?shù)奶攸c(diǎn),結(jié)合FPGA/CPLD和USB技術(shù),給出了硬件實(shí)現(xiàn)框圖,同時(shí)給出了FPGA/CPLD內(nèi)部時(shí)序控制圖和USB程序流程圖,結(jié)合框圖和部分程序源代碼,具體講述了課題中遇到的難點(diǎn)和相應(yīng)的解決方案。 關(guān)鍵詞:無(wú)損圖像采集 圖像處理 FPGA/CPLD USB SAA7111A 現(xiàn)場(chǎng)圖像采集技術(shù)發(fā)展迅速,各種基于ISA、PCI等總線的圖像采集卡已經(jīng)相當(dāng)成熟,結(jié)合課題設(shè)計(jì)了一款USB外置式圖像采集卡。該圖像采集卡已成功應(yīng)用于一個(gè)圖像處理和識(shí)別的項(xiàng)目中,由于圖像信號(hào)不經(jīng)過(guò)壓縮處理,對(duì)后續(xù)處理沒(méi)有任何影響,因此圖像處理和識(shí)別的效果比一般的圖像采集卡要好,滿足了特殊場(chǎng)合的特殊需要。 1 外置式無(wú)損圖像采集卡的系統(tǒng)構(gòu)成 整個(gè)無(wú)損圖像采集卡由圖像采集、圖像信號(hào)的處理和控制、USB傳輸和控制、PC機(jī)端的圖像還原和存儲(chǔ)等幾部分組成。 圖1 外置式圖像采集卡的硬件框圖 本文介紹的圖像采集卡采集的一幀圖像是720%26;#215;576象素,如果取彩色圖像,每象素用2個(gè)字節(jié)表示,每幀圖像是720%26;#215;576%26;#215;16=6480kbps,分成奇數(shù)場(chǎng)和偶數(shù)場(chǎng)分別存儲(chǔ)在兩片SRAM中,則每片的SRAM存儲(chǔ)3240kbps的圖像數(shù)據(jù),因此選用了256K%26;#215;16=4M位的靜態(tài)存儲(chǔ)器(SRAM)。在圖像處理領(lǐng)域,通常只需要黑白圖像,可以只取圖像的黑白部分,每象素用1個(gè)字節(jié)表示,每幀圖像是720%26;#215;576%26;#215;8=3240kbps,每片SRAM存儲(chǔ)1620kbps的圖像數(shù)據(jù)。所采用的EZ-USB芯片理論速率是12Mbps,實(shí)際測(cè)得的速率是8Mbps,因此圖像采集卡每秒傳輸約1幀彩色圖像或2幀黑白圖像。 當(dāng)插上圖像采集卡后,PC機(jī)會(huì)自動(dòng)識(shí)別它。在PC機(jī)上,應(yīng)用程序通過(guò)USB向FPGA/CPLD發(fā)送圖像采集命令,CCD攝像頭輸出的PAL制式或NTSC制式的模擬視頻信號(hào)通過(guò)A/D轉(zhuǎn)換芯片轉(zhuǎn)換成數(shù)字視頻信號(hào),用FPGA/CPLD作為采樣控制器,將數(shù)字信號(hào)存入靜態(tài)存儲(chǔ)器(SRAM)中,當(dāng)完成一幀圖像采集后,F(xiàn)PGA/CPLD向USB發(fā)送中斷信號(hào),要求USB進(jìn)行圖像數(shù)據(jù)的傳輸,在PC機(jī)端接收USB送來(lái)的一幀圖像數(shù)據(jù),并且顯示、存儲(chǔ)圖像。文本具體講述了用該采集卡進(jìn)行黑白圖像的傳輸,整個(gè)硬件框圖如圖1所示。 2 外置式無(wú)損圖像采集卡的研制 2.1 圖像采集部分 圖像采集部分選用了Philips公司的視頻A/D轉(zhuǎn)換芯片SAA7111A(EVIP),對(duì)SAA7111A的初始化是通過(guò)EZ-USB所提供的一對(duì)I2C引腳SDA和SCL進(jìn)行的,在USB固件程序(Firmware)中進(jìn)行I2C通信程序的編寫(xiě)。本系統(tǒng)中SAA7111A的初始設(shè)定為:一路模擬視頻信號(hào)輸入、自動(dòng)增益控制、625行50Hz PAL制式、YUV 422 16bits數(shù)字視頻信號(hào)輸出、設(shè)置默認(rèn)的圖像對(duì)比度、亮度及飽和度。SAA7111A芯片產(chǎn)生的數(shù)字視頻信號(hào)、控制信號(hào)和狀態(tài)信號(hào)送入控制芯片F(xiàn)PGA/CPLD中,即把場(chǎng)同步信號(hào)VREF、行同步信號(hào)HREF、奇偶場(chǎng)標(biāo)志信號(hào)RTS0、片選信號(hào)CE、垂直同步信號(hào)VS、象素時(shí)鐘信號(hào)LLC2以及數(shù)字視頻信號(hào)VPO[15:8]等管腳連接到FPGA/CPLD芯片LC4128V,以便LC4128V獲知各種采集信息。同時(shí),SRAM芯片的讀寫(xiě)信號(hào)、片選信號(hào)、高低字節(jié)信號(hào)、數(shù)據(jù)線IO[7:0]和地睛線A[17:0]連接到LC4128V,整個(gè)采集過(guò)程由FPGA/CPLD芯片LC4128V控制。 在PC機(jī)端,通過(guò)USB發(fā)出圖像采集命令后,F(xiàn)PGA/CPLD進(jìn)行圖像采集,由于CCD攝像頭輸出模擬信號(hào),需要經(jīng)過(guò)視頻A/D轉(zhuǎn)化睛,把模擬視頻信號(hào)轉(zhuǎn)化成數(shù)字視頻信號(hào),輸入進(jìn)FPGA/CPLD芯片,F(xiàn)PGA/CPLD根據(jù)狀態(tài)信號(hào)RTS0把奇偶場(chǎng)圖像信號(hào)分別存儲(chǔ)在SRAM(ODD)和SRAM(EVEN)中。 2.2 圖像信號(hào)的處理和控制 這部分是無(wú)損圖像采集卡的核心,需要對(duì)外圍的器件進(jìn)行集中控制和處理。FPGA/CPLD對(duì)圖像信號(hào)的采集、控制、存儲(chǔ)數(shù)據(jù)到SRAM以及從SRAM讀取數(shù)據(jù)都在這里實(shí)現(xiàn)。選用了Lattice公司的新一代產(chǎn)品ispMACH4000V-LC4128V,采用Verilog HDL作為硬件描述語(yǔ)言,但是所編寫(xiě)的Verilog源程序都適用于FPGA器件,又適用于CPLD器件。 FPGA/CPLD與USB接口部分由七個(gè)部分構(gòu)成(如圖1所示):Start線是拍攝線,它可以向FPGA/CPLD發(fā)出圖像采集命令,F(xiàn)PGA/CPLD把當(dāng)前的奇數(shù)場(chǎng)圖像存儲(chǔ)在SRAM(ODD)中,把當(dāng)前的偶數(shù)場(chǎng)圖像存儲(chǔ)在SRAM(EVEN)中;當(dāng)一幀數(shù)據(jù)全部存儲(chǔ)完后,發(fā)出中斷(Interrupt)信號(hào)通知USB芯片;同時(shí)用State線作為狀態(tài)線,當(dāng)State線為低電平時(shí),表明USB可以從SRAM讀數(shù)據(jù),當(dāng)State線為高電平時(shí),表明FPGA/CPLD正在向SRAM寫(xiě)數(shù)據(jù);RamOdd用來(lái)選擇從SRAM(ODD)中讀取奇數(shù)場(chǎng)的數(shù)字視頻信號(hào);RamEven用于選擇從SRAM(EVEN)中讀取偶數(shù)場(chǎng)的數(shù)字視頻信號(hào);FPGA/CLPD輸出的數(shù)據(jù)線連接至USB和SRAM芯片,再通過(guò)USB傳送到PC機(jī);FrdClk線是USB快速讀寫(xiě)方式輸出的讀選通信號(hào),作為SRAM的時(shí)鐘,每來(lái)一個(gè)時(shí)鐘脈沖,地址值就加1,然后將對(duì)應(yīng)地址單元中存儲(chǔ)的數(shù)據(jù)通過(guò)USB傳輸?shù)絇C機(jī)上。 下面具體描述FPGA/CPLD內(nèi)部時(shí)序控制(如圖2所示)。首先需要產(chǎn)生FPGA/CPLD內(nèi)部同步時(shí)鐘信號(hào)InClk,當(dāng)FPGA/CPLD向SRAM存儲(chǔ)數(shù)字視頻信號(hào)時(shí),用SAA7111A的LLC2作為內(nèi)部同步時(shí)鐘信號(hào);當(dāng)FPGA/CPLD傳輸數(shù)字視頻信號(hào)時(shí),用USB的讀選通信號(hào)FrdClk作為內(nèi)部同步時(shí)鐘信號(hào)。當(dāng)有VS上升沿時(shí),如果RTS0為低電平,則表明是奇數(shù)場(chǎng)即將到來(lái),產(chǎn)生LingPai高電平信號(hào),對(duì)LingPai取反作用作SRAM(ODD)的寫(xiě)信號(hào)WE1;如果RTS0為高電平,則表明偶數(shù)場(chǎng)即將到來(lái),產(chǎn)生LingPaiEven高電平信號(hào),對(duì)LingPaiEven取反后用作SRAM(Even)的寫(xiě)信號(hào)WE2,WE1和WE2經(jīng)過(guò)與門(mén)后產(chǎn)生圖2中的兩個(gè)SRAM的寫(xiě)選通信號(hào)WE。此外,由LingRai和LingPaiEven產(chǎn)生LingPaiAll信號(hào),作為選擇內(nèi)部同步時(shí)鐘的控制信號(hào)。由USB芯片產(chǎn)生的Ramodd(OE1)和RamEven(OE2)信號(hào),分別用作SRAM(ODD)和SRAM(EVEN)的讀信號(hào),OE1和OE2經(jīng)過(guò)與門(mén)后產(chǎn)生圖2中的兩個(gè)SRAM讀選通信號(hào)OE。當(dāng)LingPaiAll為高電平期間,表示FPGA/CPLD正在向SRAM存儲(chǔ)數(shù)據(jù),此時(shí)用WE1作為SRAM(ODD)的片選信號(hào)CE1,用WE2作為SRAM(EVEN)的片選信號(hào)CE2;當(dāng)LingPai為低電平期間,表示USB正在從SRAM讀取數(shù)據(jù),此時(shí)用OE1作為SRAM(ODD)的片選信號(hào)CE1,用OE2作為SRAM(EVEN)的片選信號(hào)CE2。 圖2 FPGA/CPLD內(nèi)部時(shí)序控制 下面闡述FPGA/CPLD如何對(duì)數(shù)據(jù)傳輸進(jìn)行控制,這部分是個(gè)難點(diǎn)(如圖2所示)。這里只討論如何對(duì)奇數(shù)場(chǎng)的數(shù)字視頻信號(hào)進(jìn)行控制,對(duì)偶數(shù)場(chǎng)的控制類似于對(duì)奇數(shù)場(chǎng)的控制,本文不再多述。當(dāng)LingPai為高電平時(shí),表示FPGA/CPLD向SRAM存儲(chǔ)奇數(shù)場(chǎng)圖像數(shù)據(jù),此時(shí)時(shí)鐘為L(zhǎng)LC2。當(dāng)場(chǎng)同步信號(hào)VREF、行同步信號(hào)HREF、奇偶場(chǎng)標(biāo)志信號(hào)RTS0為高電平時(shí),改變相應(yīng)SRAM的地址信號(hào),并且把數(shù)字視頻信號(hào)輸出以內(nèi)部的緩沖器VI,當(dāng)LingPai為低電平時(shí),表示USB正在從SRAM讀取奇數(shù)場(chǎng)圖像數(shù)據(jù),此時(shí)時(shí)鐘為FrdClk。FPGA/CPLD內(nèi)部用AddressChange記錄LingPai的變化,當(dāng)發(fā)現(xiàn)有LingPai變化時(shí),表示讀取數(shù)據(jù)變成了存儲(chǔ)數(shù)據(jù)或者存儲(chǔ)數(shù)字變成了讀取數(shù)據(jù),此時(shí)需要把SRAM的地址值變成0。成Verilog中靈活運(yùn)用了非阻塞型過(guò)程賦值(參見(jiàn)下面的源程序),解決了這個(gè)技術(shù)難點(diǎn)。此外,需要把從SAA711A輸出的數(shù)字視頻信號(hào)先放在緩沖器VI[7:0]中,在LingPaiAll為高電平時(shí),通過(guò)VO[7:0]輸出到SRAM,保證存儲(chǔ)數(shù)據(jù)的可靠同步性。這部分Verilog源程序如下: always @(posedge InCLK) begin AddressChange=LingPai; if(VREF %26;amp;%26;amp; HREF %26;amp;%26;amp; RTS0 %26;amp;%26;amp; LingPai) begin VI=VPO;A=A +1;end if(!LingPai %26;amp;%26;amp; !OE1) begin A =A +1; end if(LingPai!=AddressChange) begin A =0; end end 2.3 USB的開(kāi)發(fā)和數(shù)據(jù)傳輸 Cypress公司推出的帶有USB接口的EZ-USB系列處理器,實(shí)現(xiàn)了外圍設(shè)備通過(guò)USB接口與PC機(jī)進(jìn)行數(shù)據(jù)通信。它通過(guò)內(nèi)部RAM編程和數(shù)據(jù)存儲(chǔ),使得芯片具有軟特性。USB主機(jī)通過(guò)USB總線下載8051程序代碼和設(shè)備特征到RAM中,然后EZ-USB芯片作為一個(gè)由代碼定義的外圍設(shè)備重新連接到主機(jī)上(重枚舉)。 USB規(guī)范1.1版本定義了USB的四種數(shù)據(jù)傳輸模式:控制傳輸、同步傳輸、中斷傳輸和塊傳輸,以適應(yīng)不同應(yīng)用場(chǎng)合的需求。其中塊傳輸方式提供數(shù)據(jù)校驗(yàn),適用于無(wú)誤傳輸大指數(shù)據(jù)的場(chǎng)合。本課題選用USB的塊傳輸方式,同時(shí)采用了EZ-USB的快速傳輸模式,理論速率為12Mbps,實(shí)際最高速率能達(dá)到8Mbps。 當(dāng)PC機(jī)檢測(cè)到USB圖像采集卡已經(jīng)插上后,PC機(jī)可自動(dòng)地將圖像采集卡的驅(qū)動(dòng)程序裝入操作系統(tǒng),同時(shí)PC機(jī)通過(guò)USB總線下載8051程序代碼和設(shè)備特片到USB的RAM中。 USB的開(kāi)發(fā)包括USB的固件程序、Windows設(shè)備驅(qū)動(dòng)程序和Windows主機(jī)應(yīng)用程序的編制,限于篇幅,這里只簡(jiǎn)單介紹一下USB固件程序(Firmware)的編制。USB固件程序的具體流程如圖3所示,在源程序的TD_Poll()中加入了對(duì)比度、亮度及飽和度的調(diào)節(jié),以做到在硬件上對(duì)圖像處理中的上述重要參數(shù)的調(diào)節(jié),在外部中斷1中完成一幀數(shù)據(jù)的快速傳輸。 由于采用了外部中斷1,為了避免與USB中斷的沖突,需要在工程中自己編寫(xiě)一個(gè)匯編文件,內(nèi)容如下: cseg at 43h ljmp 1800h end 此外,在編寫(xiě)的Keil C源程序中需要加兩句話,以解決USB中斷和外部中斷的地址重疊問(wèn)題。 #pragma intvector (0x17FD) #pragma interval(4) 為了增加USB傳輸數(shù)字視頻信號(hào)的速度,采用USB的快速讀寫(xiě)模式,在Keil C源程序中內(nèi)嵌對(duì)USB進(jìn)行寄存器設(shè)置的匯編代碼。配置了USB的時(shí)鐘控制寄存器,采用全速訪問(wèn)數(shù)據(jù)存儲(chǔ)器,MOVX指令在兩個(gè)機(jī)器周期內(nèi)實(shí)行,時(shí)鐘頻率為24MHz,因此USB產(chǎn)生的讀選通寬度為83.3ns。配置端口A,使能PORTACFG(16進(jìn)制地址為7F93H)寄存器中的快速讀FRD。配置快速傳輸控制寄存器FASTXFR(16進(jìn)制地址為7FE2 H),采用快速塊傳輸,使能快速讀寫(xiě)信號(hào)。為了將端點(diǎn)2緩沖匹配置成FIFO,增加讀寫(xiě)速度,8051將端點(diǎn)2緩沖區(qū)(IN2)的首地址7E00H裝入自動(dòng)指針AUTOPTRH(16進(jìn)制地址為7FE3H)和AUTOPTRL(16進(jìn)制地址為7FE4H),并且dptr指向AUTODATA(16進(jìn)制地址為7FE5H),也就是指向了FIFO寄存器,這樣8051可以完全像FIFO一樣訪問(wèn)端點(diǎn)2緩沖區(qū)。 2.4 PC機(jī)端的圖像還原 在PC機(jī)端,用Visual C++ 6.0編寫(xiě)客戶應(yīng)用程序,應(yīng)用程序通過(guò)USB接收原始的奇數(shù)場(chǎng)和偶數(shù)場(chǎng)圖像數(shù)據(jù),待接收完奇數(shù)場(chǎng)和偶數(shù)場(chǎng)圖像數(shù)據(jù)后,應(yīng)用程序把它們組成完整的一幀圖像,并且把該幀圖像數(shù)據(jù)存儲(chǔ)到硬盤(pán)上,然后把這幀圖像轉(zhuǎn)化成BMP格式的圖像,以BMP格式再次在硬盤(pán)上存儲(chǔ)圖像數(shù)據(jù),同時(shí)以BMP的形式顯示圖像。 3 應(yīng)用前景 該無(wú)損圖像采集卡雖然是針對(duì)特殊的圖像處理應(yīng)用而研發(fā)的,但它的作用很廣,能應(yīng)用于嵌入式系統(tǒng)中的圖像傳輸、集成電路和精密機(jī)械領(lǐng)域中的器件定位等。此外,如果用USB2.0代替USB1.1,則能實(shí)時(shí)傳輸圖像數(shù)據(jù)到PC機(jī)或嵌入式系統(tǒng),用軟件進(jìn)行圖像數(shù)據(jù)的壓縮處理,這塊外置式圖像采集卡可以作為一個(gè)很好的實(shí)時(shí)監(jiān)控設(shè)備,以降低硬件成本。
評(píng)論