基于FPGA和USB的圖像采集系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
張莉1 李敬文 1 陳永祿2
(1.蘭州交通大學(xué) 電子與信息工程學(xué)院,甘肅 蘭州 730070;2. 西北工業(yè)大學(xué) 自動(dòng)化學(xué)院,陜西 西安 710072 )
摘 要 介紹了基于FPGA及USB的高速圖像采集系統(tǒng)的實(shí)現(xiàn)方法。通過介紹Altera公司的現(xiàn)場可編程門陣列(FPGA)以及USB通用接口芯片CY7C68013的性能特點(diǎn),提出了基于FPGA的數(shù)據(jù)采集系統(tǒng)硬件平臺設(shè)計(jì)方案;討論并給出了軟件設(shè)計(jì)方法,包括FPGA內(nèi)部功能模塊程序設(shè)計(jì)、驅(qū)動(dòng)程序設(shè)計(jì)以及應(yīng)用程序設(shè)計(jì)等。
關(guān)鍵字 FPGA;USB;數(shù)據(jù)采集
1 引言
隨著圖像處理技術(shù)迅猛發(fā)展,對圖像采集設(shè)備要求也越來越高。USB接口設(shè)備支持即插即用,安裝方便,易于擴(kuò)展,且USB 2.0能達(dá)到480 Mb/s的理論傳輸速度,非常適合在類似于圖像采集的高速數(shù)據(jù)采集系統(tǒng)中應(yīng)用,本文采用USB接口總線實(shí)現(xiàn)了高速的數(shù)據(jù)傳輸。
在超高速數(shù)據(jù)采集方面,F(xiàn)PGA(現(xiàn)場可編程門陣列)有著單片機(jī)和DSP所無法比擬的優(yōu)勢。新一代的FPGA甚至集成了中央處理器(CPU)或數(shù)字信號處理器(DSP)的內(nèi)核,在一片F(xiàn)PGA上進(jìn)行軟硬件協(xié)同設(shè)計(jì),為實(shí)現(xiàn)片上可編程系統(tǒng)(SOPC)提供了強(qiáng)大的硬件支持。 FPGA時(shí)鐘頻率高,內(nèi)部延時(shí)小,現(xiàn)在器件的最高工作頻率可達(dá)300MHz;硬件資源豐富,單片集成的可用門數(shù)達(dá)1000萬門;全部控制邏輯由硬件資源完成,速度快,效率高;組成形式靈活,可以集成外圍控制、譯碼和接口電路[1]。因此,本系統(tǒng)中用FPGA來控制A/D和USB控制芯片的運(yùn)行。
2 圖像采集系統(tǒng)設(shè)計(jì)方案
本系統(tǒng)主要由主機(jī)(能支持USB2.0協(xié)議的PC機(jī))、USB微處理器、FPGA邏輯控制器和A/D轉(zhuǎn)換模塊組成,如圖1所示。主機(jī)是系統(tǒng)的終端,主要完成數(shù)據(jù)接收、數(shù)據(jù)處理、數(shù)據(jù)顯示以及數(shù)據(jù)保存等功能;USB微處理器主要完成數(shù)據(jù)采集、數(shù)據(jù)通信及控制等功能;FPGA器件作為本系統(tǒng)的控制核心,用來控制處理A/D、D/A,進(jìn)行實(shí)時(shí)信號采集和傳輸控制;A/D轉(zhuǎn)換電路實(shí)現(xiàn)模擬信號的數(shù)字化。其數(shù)據(jù)傳輸分兩部分:控制信號傳輸和采集數(shù)據(jù)傳輸。
系統(tǒng)工作時(shí),通過用戶界面的采集開始按鈕發(fā)出圖像采集命令,USB微處理器接收到主機(jī)采樣控制信號后,通過在FPGA芯片中的邏輯控制電路控制圖像采集,向數(shù)據(jù)轉(zhuǎn)換電路送出相應(yīng)的控制信號即采樣模式控制字,之后數(shù)據(jù)采集分系統(tǒng)自主控制轉(zhuǎn)換,把模擬視頻信號轉(zhuǎn)化成數(shù)字視頻值號,同時(shí)分離出同步信號和狀態(tài)信號。這些信號進(jìn)入邏輯控制芯片F(xiàn)PGA中,用FPGA作為采樣控制器,將數(shù)字視頻信號實(shí)時(shí)存入微控制器的可配置端點(diǎn)緩沖區(qū)FIFO中。當(dāng)FIFO容量達(dá)到指定程度后,自動(dòng)將數(shù)據(jù)打包傳送給USB總線,USB微處理器依次取走批量數(shù)據(jù),傳輸給主機(jī),在采樣數(shù)據(jù)傳輸給主機(jī)時(shí),USB微處理器持續(xù)讀取采樣的結(jié)果,保證了連續(xù)高速采集數(shù)據(jù)的實(shí)時(shí)性。同時(shí)在主機(jī)端可以進(jìn)行圖像的實(shí)時(shí)顯示、保存等功能。
3 系統(tǒng)硬件設(shè)計(jì)
3.1 FPGA的設(shè)計(jì)流程
FPGA的開發(fā)采用后的是一種“自頂向下”的方法,首先從系統(tǒng)設(shè)計(jì)入手,在頂層進(jìn)行功能方框的劃分和結(jié)構(gòu)設(shè)計(jì),在方框圖一級進(jìn)行仿真、糾錯(cuò),并用硬件描述語言對高層次的系統(tǒng)進(jìn)行描述,在系統(tǒng)一級進(jìn)行驗(yàn)證。然后用綜合優(yōu)化工具生成具體門電路的網(wǎng)表,其對應(yīng)的物理實(shí)現(xiàn)級可以是印刷電路板或?qū)S眉呻娐贰S捎谠O(shè)計(jì)的主要仿真和調(diào)試過程是在高層次上完成的,這不僅有利于早期發(fā)現(xiàn)結(jié)構(gòu)設(shè)計(jì)上的錯(cuò)誤,避免設(shè)計(jì)工作的浪費(fèi),而且也減少了邏輯功能仿真的工作量,提高了設(shè)計(jì)的一次成功率[2]。
3.2 USB接口設(shè)計(jì)
USB 接口芯片選用Cypress公司EZ-USB FX2芯片CY7C68013A。EZ-USB芯片可以將固件儲存在主機(jī)上,而不必裝入芯片內(nèi)。在開機(jī)或是連接時(shí),再將固件加載到芯片內(nèi)。此芯片使用每個(gè)指令周期4個(gè)脈沖周期,每一個(gè)指令需要1到5個(gè)指令周期,CPU是以24MHz來驅(qū)動(dòng)。
大部分的EZ-USB芯片支持最大數(shù)目的端點(diǎn):一個(gè)控制端點(diǎn),30個(gè)額外的端點(diǎn)地址以及所有的4種傳輸類型。EZ-USB的固件有兩個(gè)來源:外部的EEPROM的初始化字節(jié)的內(nèi)容,以及芯片的EA輸入狀態(tài)[3]。
該芯片的內(nèi)部結(jié)構(gòu)如圖2所示。
圖2 CY7C68103(EZ-USB-FX2)的邏輯區(qū)塊圖
4 系統(tǒng)軟件設(shè)計(jì)
4.1 固體程序設(shè)計(jì)

圖3 固件流程圖
設(shè)備固件是設(shè)備運(yùn)行的核心,可采用匯編語言或單片機(jī)C語言設(shè)計(jì)。只有在該程序運(yùn)行時(shí),外設(shè)才能被稱為具有給定功能的外部設(shè)備。固件程序負(fù)責(zé)初始化各硬件單元,重新配置設(shè)備及A/D采樣控制。其主要功能是控制CY7C68013接收并處理USB驅(qū)動(dòng)程序的請求,控制芯片CY7C68013接收應(yīng)用程序的控制指令,控制A/D模塊的數(shù)據(jù)采集與存儲,通過CY7C68013緩存數(shù)據(jù)并傳輸至主機(jī)等。利用EZ-USB FX2系列提供的固件結(jié)構(gòu),可以簡化固件開發(fā)。用戶僅需提供其USB描述符,以及實(shí)現(xiàn)外圍功能的程序代碼,即可完成完全兼容的USB設(shè)備設(shè)置。
固件程序框圖如圖3所示。
4.2 驅(qū)動(dòng)程序設(shè)計(jì)
在Windows內(nèi)執(zhí)行的USB設(shè)備驅(qū)動(dòng)程序,必須符合Microsoft定義的Win32驅(qū)動(dòng)程序模型(WDM)規(guī)格。在USB通信中使用的分層式驅(qū)動(dòng)程序模型,每一層的驅(qū)動(dòng)程序分別處理USB通信的某一部分。使用分層式的模型結(jié)構(gòu)會(huì)比較有規(guī)律,因?yàn)橄嗤墓ぷ骺梢允褂脝我或?qū)動(dòng)程序來做即可,不需要包含在每一個(gè)驅(qū)動(dòng)程序內(nèi)。按照下面步驟,可以實(shí)現(xiàn)對USB設(shè)備的配置[4]:
(1)USB設(shè)備的驅(qū)動(dòng)程序模型必須是WDM驅(qū)動(dòng)程序,這說明驅(qū)動(dòng)程序中必須有AddDevice這個(gè)成員函數(shù),而且function.h文件中必須有下列定義:
#define DRIVER_FUNCTION_ADD_DEVICE
#define DRIVER_FUNCTION_PNP
#define DRIVER_FUNCTION_POWER
(2)USB設(shè)備是即插即用設(shè)備,因此在驅(qū)動(dòng)程序中要聲明以下的類的成員函數(shù)。
KPnPDevice,KUSBLowerDevice,KUSBInterface
在驅(qū)動(dòng)程序結(jié)束處還要聲明一個(gè)數(shù)據(jù)類型:KUSBPipe
(3)在設(shè)備對象類中,必須重載OnStartDevice和OnStopDevice函數(shù)。
(4)在設(shè)備類構(gòu)造體中,首先調(diào)用類KUSBLowerDevice中的成員函數(shù)來初始化其實(shí)例,然后調(diào)用類KUSBInterface中的成員函數(shù)來初始化其實(shí)例,最后再調(diào)用類KUSBPipe中的成員函數(shù)來初始化其例程。
(5)在成員函數(shù)OnStartDevice中,調(diào)用函數(shù)。
KUSBLowerDevice::ActivateConfiguration配置設(shè)備,這個(gè)函數(shù)把類KUSBPipe和KUSBInterface對象聯(lián)系在一起,以及USB管道和它的接口鏈接起來。
(6)在成員函數(shù)OnStopDevice中,調(diào)用KUSBLowerDevice::DeActivateConfiguration。
應(yīng)用程序與驅(qū)動(dòng)程序完成USB通信的結(jié)構(gòu)圖如圖4所示。
圖4 應(yīng)用程序與驅(qū)動(dòng)程序完成USB通信的結(jié)構(gòu)
4.3 用戶應(yīng)用程序設(shè)計(jì)
使用VC6.0作為應(yīng)用程序的開發(fā)環(huán)境。由于通用驅(qū)動(dòng)程序GPD即ezusb.sys提供了基本USB設(shè)備請求和數(shù)據(jù)傳輸?shù)挠脩裟J浇涌?,用戶模式?yīng)用程序通過Win32函數(shù)DeviceIo Control0給設(shè)備驅(qū)動(dòng)器發(fā)送請求。Ezusb.sys提供了基本設(shè)備請求、批量讀寫、同步讀寫等一系列IOCTL函數(shù)。通過調(diào)用這些函數(shù),可以打開設(shè)備句柄、進(jìn)行讀寫操作、關(guān)閉設(shè)備句柄,從而對USB設(shè)備進(jìn)行相應(yīng)操作。同時(shí)應(yīng)用程序還需對接收的圖像數(shù)據(jù)進(jìn)行整合、處理,實(shí)現(xiàn)圖像顯示以及保存功能。
5 結(jié)束語
本文的創(chuàng)新點(diǎn)是充分發(fā)揮了CY7C68013的優(yōu)勢,利用FX2的內(nèi)部可編程狀態(tài)機(jī)GPIF實(shí)現(xiàn)了與FPGA的連接,系統(tǒng)升級方便。待系統(tǒng)的硬件和軟件逐步完善以后,再實(shí)現(xiàn)對實(shí)時(shí)的視頻信號采集與傳輸,并將進(jìn)一步把DSP引入該系統(tǒng),利用DSP在數(shù)字信號處理方面的優(yōu)勢(一般計(jì)算機(jī)完成一次乘累加運(yùn)算需要11個(gè)機(jī)器周期,而DSP完成同樣的運(yùn)算只需要1個(gè)機(jī)器周期),在PC外部對采集的數(shù)據(jù)進(jìn)行預(yù)處理,然后再通過USB總線送入主機(jī)進(jìn)一步處理,DSP與USB2.0技術(shù)的結(jié)合將大大改善大容量數(shù)據(jù)傳輸?shù)乃俣绕款i問題,在圖像和視頻傳輸?shù)葦?shù)據(jù)量較大且對實(shí)時(shí)性要求較高的領(lǐng)域必將有廣闊的應(yīng)用前景。隨著USB口的進(jìn)一步普及和計(jì)算機(jī)的發(fā)展,本文設(shè)計(jì)的這種USB圖像采集系統(tǒng)必將得到更加廣泛的應(yīng)用。
參考文獻(xiàn)
[1] 李洪偉,袁斯華編著. 基于Quartus II的FPGA/CPLD設(shè)計(jì). 北京:電子工業(yè)出版社 2006
[2] 劉皖,何道君,譚明編著. FPGA設(shè)計(jì)與應(yīng)用. 北京:清華大學(xué)出版社 2006
[3] 蕭世文編著. USB2.0硬件設(shè)計(jì). 北京:清華大學(xué)出版社. 2002
[4] 張惠娟,周利華,翟鴻鳴編著. Windows環(huán)境下的設(shè)備驅(qū)動(dòng)程序設(shè)計(jì). 西安:西安電子科技大學(xué)出版社 2002
基金項(xiàng)目:圖的染色理論研究 基金項(xiàng)目批準(zhǔn)號:10771091
收稿日期:4月15日 修改日期:4月22日
作者簡介:張莉:(1982-)女,籍貫:甘肅,在讀研究生,研究方向:計(jì)算機(jī)測量與控制;李敬文:(1965-)男,籍貫:遼寧,碩士生導(dǎo)師,研究方向:計(jì)算機(jī)應(yīng)用,圖染色。
|