CCD系統(tǒng)下基于FPGA的PCI圖像采集卡設(shè)計與實現(xiàn)
摘要:文章設(shè)計了一種基于FPGA的CCD圖像數(shù)據(jù)采集卡。以FPGA作為圖像數(shù)據(jù)采集卡的核心,通過LVDS傳輸技術(shù),異步FIFO,異步塊RAM,SRAM緩存乒乓操作等技術(shù),在PCI核的基礎(chǔ)上實現(xiàn)了Initiator下的DMA傳輸;并基于VxWorks平臺編寫PCI圖像采集卡的驅(qū)動程序。經(jīng)測試和驗證,PCI圖像采集卡穩(wěn)定可靠,能夠?qū)崿F(xiàn)數(shù)據(jù)流為60Mb/s的CCD系統(tǒng)圖像數(shù)據(jù)的高速傳輸。
關(guān)鍵詞:圖像采集;PCI總線;FIFO;DMA傳輸;VxWorks
0 引言
CCD是一種高性能光電轉(zhuǎn)換式圖像傳感器。由于其幾何精度高、穩(wěn)定性好、噪聲小,廣泛用于遙感遙測,天文測量等領(lǐng)域。現(xiàn)實中許多利用單片機作為控制核心,并配備其他一些外圍電路實現(xiàn)CCD的數(shù)據(jù)采集,這種方式速度慢、集成度低。
由于CCD相機的精度和分辨率的不斷提高,以及對CCD成像系統(tǒng)本身可靠性要求的不斷提高,對數(shù)據(jù)采集系統(tǒng)采集速度、可靠性,以及易用性提出了更高的要求。本文設(shè)計的基于FPGA的PCI數(shù)據(jù)采集及回放系統(tǒng),系統(tǒng)設(shè)計以Xilinx的FPGA為核心,以LVDS芯片傳輸過來的CCD數(shù)據(jù)為源頭,運用成熟的PCI總線傳輸技術(shù),實現(xiàn)了高速數(shù)據(jù)采集的功能。在VxWorks平臺下編寫了相應(yīng)的驅(qū)動程序。經(jīng)測試和驗證,該系統(tǒng)穩(wěn)定可靠,傳輸速率高,滿足應(yīng)用的要求。
1 系統(tǒng)的總體結(jié)構(gòu)以及原理
整個系統(tǒng)由模擬前端和采集后端組成,如圖1所示。前端主要由CCD鏡頭,CCD傳感器、垂直驅(qū)動器、A/D轉(zhuǎn)換器、FPGA、電源管理電路以及高速串行總線接口LVDS組成。CCD鏡頭把光線聚焦在CCD傳感器的感光面上,CCD傳感器完成光信號到電信號的轉(zhuǎn)換。在驅(qū)動器的控制下完成像素電荷的轉(zhuǎn)移,輸出模擬信號,再經(jīng)過A/D轉(zhuǎn)換芯片把模擬信號轉(zhuǎn)換成數(shù)字信號,經(jīng)LVDS輸出到后端。
采集后端的硬件主要由LVDS芯片、用作緩存圖像數(shù)據(jù)的SRAM芯片、電源管理模塊、FPGA組成。FPGA是整個后端采集模塊的核心模塊,F(xiàn)P GA不僅要完成數(shù)據(jù)的采集、組織、傳輸,還要根據(jù)PCI規(guī)范配置成標(biāo)準(zhǔn)的PCI設(shè)備,進行數(shù)據(jù)與主機之前的傳送。由于數(shù)據(jù)傳輸要求60Mb/s的速度,所以簡單的單次傳輸不能滿足系統(tǒng)的整體需求。FPGA必須能支持DMA方式的數(shù)據(jù)傳送。為了使PCI圖像采集卡有更大的通用性,在修改最小的驅(qū)動代碼的情況下跨平臺地使用,須把FPGA配置成能作為主動發(fā)起DMA請求的PCI設(shè)備,從而屏蔽不同的橋芯片之間的差異。
本文主要關(guān)注采集后端,即PCI圖像采集卡的硬件、邏輯、以及軟件的設(shè)計與實現(xiàn)。
2 PCI圖像采集卡回放系統(tǒng)硬件設(shè)計
為了提高數(shù)據(jù)傳輸?shù)目煽啃裕档痛當(dāng)_、輻射等在高速傳輸數(shù)據(jù)中常見的問題,PCI圖像采集卡采用INDS(低壓差分信號技術(shù))進行圖像數(shù)據(jù)的接收和控制數(shù)據(jù)的發(fā)送。在實際應(yīng)用中,我們選擇了國家半導(dǎo)體的DS92LV16芯片作為接收和發(fā)送數(shù)據(jù)芯片。功能框圖如圖2所示。
該芯片利用內(nèi)部時鐘把16位的并行數(shù)據(jù)轉(zhuǎn)換成LVDS數(shù)據(jù)進行傳輸;同時可以把LVDS數(shù)據(jù)轉(zhuǎn)換成16位并行數(shù)據(jù)供芯片或者可編程邏輯器件進行處理。該芯片最大傳輸速率可達2.56Gbps;單一的3.3V供電即可使用;較低的EMI;發(fā)送端和接收端有單獨的時鐘和省電管腳。
采用Xilinx公司的一片XC4VLX25-11FF668I可編程邏輯芯片,F(xiàn)PGA被配置成PCI接口。LX25邏輯單元可達24192個,最大分布式RAM是168 k,最大塊RAM可達1296kb,并且有8個DCM供編程人員使用,LX25功耗較低,易于使用。選擇FLASH芯片為XCF08P。
需要外部存儲器對圖像處理中的大量數(shù)據(jù)進行緩存,要求存儲器存取速度快、讀取時間短、實時性匹配強。選擇CYPRESS公司的SRAMCY7 C1470BV33的SRAM作為數(shù)據(jù)緩存芯片。CY7C1470BV33的速度可以達到250MHz,滿足系統(tǒng)時鐘頻率要求。
3 FPGA邏輯設(shè)計
3.1 總體設(shè)計
邏輯的整體設(shè)計如圖3所示,當(dāng)圖像數(shù)據(jù)進入FPGA后,通過異步FIFO進行異步時鐘域的轉(zhuǎn)換。在第一個緩沖周期通過數(shù)據(jù)流選擇電路將圖像數(shù)據(jù)緩存到SRAM1中;在第二個緩沖周期,通過數(shù)據(jù)流選擇電路將圖像數(shù)據(jù)緩存到SRAM2中,同時將SRAM1中的數(shù)據(jù)經(jīng)后端FIFO、PCI接口發(fā)送給主機。在第三個緩沖周期內(nèi)再次通過輸入數(shù)據(jù)流選擇電路,把圖像數(shù)據(jù)緩存到SRAM1中,同時將SRAM2中的數(shù)據(jù)經(jīng)后端FIFO、PCI接口發(fā)送給主機,如此循環(huán)。由于乒乓操作的FPGA邏輯實現(xiàn)比較簡單,這里不再贅述。下面主要來設(shè)計PCI接口的邏輯。
3.2 PCI接口的設(shè)計
PCI圖像采集卡的接口設(shè)計非常重要。由于PCI總線規(guī)范復(fù)雜,設(shè)計復(fù)雜,為了加快開發(fā)周期,采用Xilinx提供的PCI core來完成PCI總線控制器的設(shè)計。PCI控制器核logic core的內(nèi)部框圖如圖4所示。
PCI控制核主要完成用戶設(shè)備和PCI總線之間的數(shù)據(jù)傳輸。PCI核可工作在Target傳輸模式和Initiator傳輸模式。每種傳輸模式又可以分單次傳輸和突發(fā)傳輸。由于單次傳輸速度達不到要求,我們選擇突發(fā)傳輸模式以便提高傳輸速度。
Target模式下的突發(fā)傳輸模式相對Initiator下的突發(fā)傳輸模式的控制邏輯簡單,但是考慮到PCI圖像采集卡的可移植性,故采用Initia tor突發(fā)傳輸模式。在Initiator突發(fā)傳輸模式下,PCI圖像采集卡主動向橋芯片申請PCI總線控制權(quán),并主動傳送數(shù)據(jù);在Target模式下,必須用軟件對橋芯片進行配置,也就是說PCI圖像采集卡作為一個PCI從設(shè)備等待橋芯片的配置、數(shù)據(jù)讀取等。所以采用Initiator下的突發(fā)傳輸模式邏輯控制復(fù)雜,但是移植性好。
3.3 PCI圖像采集卡地址空間配置
PCI的地址空間可分為三種,分別是PCI配置空間、PCI I/O空間和PCI內(nèi)存空間。
我們需要對PCI核進行配置。
Xilinx提供的PCI核提供了BAR0、BAR1、BAR2三個地址空間。這三個地址空間可以配置成內(nèi)存地址空間或I/O地址空間。為了PCI圖像采集卡在不同橋芯片下和不同的操作系統(tǒng)下工作。我們把所有的地址空間都配置成了內(nèi)存空間,因為不是所有處理器都支持I/O操作。在我們的設(shè)計中,使用了BAR0和BAR1兩個地址空間,配置成了內(nèi)存空間,并全部配置成可以預(yù)取模式。以配制BAR0為例說明配置方法。
3.4 地址指針的設(shè)計
對于Initiator下的突發(fā)模式傳輸,因為從設(shè)備可以在任何時刻結(jié)束數(shù)據(jù)的傳輸,應(yīng)用程序必須始終對地址進行跟蹤,以便在Initiator再次發(fā)起傳輸時能得到正確的地址進行重新傳送。
我們在設(shè)計的時候用了一個32bit的寄存器對地址進行跟蹤,其中低2位始終為0,高30位用來保存數(shù)據(jù)。利用M_DATA_VLD信號來控制地址的增加。當(dāng)M_ADDR_N有效的時候把地址輸送到地址總線上。
3.5 Initiator突發(fā)數(shù)據(jù)傳輸狀態(tài)機的實現(xiàn)
狀態(tài)機用來控制突發(fā)模式的讀寫時序。整個狀態(tài)機由六個狀態(tài)組成,分別是IDLES、REOS、WRITES、READS、RSTS、OOPS。下面分對這六
個狀態(tài)的功能進行描述。
IDLES:狀態(tài)機處于空閑狀態(tài),狀態(tài)機等待用戶發(fā)起讀或者寫請求。
REOS:用戶發(fā)起了傳送請求。當(dāng)是讀請求時,狀態(tài)機進入READS狀態(tài)。當(dāng)是寫請求時,狀態(tài)機進入WRITES狀態(tài)。
READS:狀態(tài)機一直處于數(shù)據(jù)讀取狀態(tài)直到傳輸完成,或者在傳輸過程中發(fā)生了不可恢復(fù)的錯誤。當(dāng)數(shù)據(jù)正常傳輸完成時,狀態(tài)機會跳到OOPS_S狀態(tài);當(dāng)發(fā)生致命錯誤時,狀態(tài)機會處于RSTS。
WRITES:狀態(tài)WRITES和READS基本類似。不同的是數(shù)據(jù)傳輸方向不同。
RSTS:當(dāng)狀態(tài)機處于RSTS時說明整個系統(tǒng)發(fā)生了不可恢復(fù)的錯誤,必須重新復(fù)位讓軟硬件。
OOPS:當(dāng)狀態(tài)機處于OOPS狀態(tài),如果需要對前端的FIFO進行回滾操作,狀態(tài)機就一直處于OOPS。如果前端FIFO檢測傳輸完成信號,完成則進入IDLES狀態(tài),否則進入申請總線狀態(tài)REQS。
3.6 異步存儲器的實現(xiàn)
由于PCI讀存儲器的時鐘頻率和數(shù)據(jù)寬度與收發(fā)器寫存儲器的時鐘頻率和數(shù)據(jù)寬度不一致,所以要設(shè)計在兩個異步時鐘之間傳輸數(shù)據(jù)的接口電路。Xilinx自帶的FIFO IP核是一種解決方案。但是由于異步FIFO沒有Initiator突發(fā)數(shù)據(jù)傳輸下的需要的back_up信號,所以利用Xilinx自帶的塊RAM作為數(shù)據(jù)寬度可以控制的存儲器。
4 VxWorks下驅(qū)動軟件的編寫
VxWorks是一種高可靠、微內(nèi)核、可裁剪的實時嵌入式操作系統(tǒng),由于它具有高效的實時任務(wù)調(diào)度、中斷管理等優(yōu)點,成為了航空、航天、醫(yī)療、通信等領(lǐng)域首選的實時操作系統(tǒng)。PCI圖像采集卡的驅(qū)動就是基于VxWorks實時操作系統(tǒng)進行開發(fā)的。
4.1 PCI設(shè)備驅(qū)動開發(fā)
每個PCI設(shè)備都有一容量為256字節(jié)并具有特定結(jié)構(gòu)的地址空間,前64個字節(jié)包含PCI接口的信息,也成為PCI配置頭。其余的192個字節(jié)可以由板卡的設(shè)計自己定義。為了讓VxWorks支持PCI驅(qū)動,需要對BSP中的sysLib.c文件進行修改,使得系統(tǒng)支持初始化配置支持庫和中斷支持庫,以提供對PCI設(shè)備配置空間的訪問租PCI中斷復(fù)用功能的支持。
設(shè)備驅(qū)動程序初始化PCI圖像采集卡的流程一般如下:根據(jù)PCI設(shè)備的廠商ID和設(shè)備ID號來找到PCI設(shè)備的總線號、設(shè)備號和功能號;根據(jù)總線號、設(shè)備號和功能號來映射PCI設(shè)備的地址空間;并且配置中斷線性寄存器;最后使能PCI內(nèi)存空間。其他寄存器要根據(jù)具體應(yīng)用來配置。
4.2 數(shù)據(jù)采集方式
由于前端數(shù)據(jù)量很大,所以簡單的單次傳輸不能滿足系統(tǒng)的整體需求。必須用DMA方式進行傳送。通知數(shù)據(jù)可以讀取通常有兩種模式,查詢模式和中斷模式。由于查詢模式要大量消耗CPU資源,所以采用DMA結(jié)合中斷模式進行數(shù)據(jù)采集。
對數(shù)據(jù)的采集使用乒乓操作。當(dāng)寫滿一片SRAM中就發(fā)中斷給CPU,通知數(shù)據(jù)已經(jīng)準(zhǔn)備好,這個時候驅(qū)動程序就開始讀取數(shù)據(jù),同時前端數(shù)據(jù)繼續(xù)寫入另一片SRAM,寫滿后再次發(fā)送中斷。如此反復(fù),直到PCI圖像采集卡接收到應(yīng)用程序的停止傳送數(shù)據(jù)命令。
4.3 中斷的運用和管理
在VxWorks中,中斷的響應(yīng)速度非???。經(jīng)測量,在我們的系統(tǒng)中PCI圖像采集卡從發(fā)出中斷到進入中斷處理函數(shù)的時間為7 μs。通過函數(shù)intConnect把中斷處理函數(shù)和中斷向量掛接起來。
在VxWorks中,中斷服務(wù)程序擁有獨立于各種任務(wù)的程序上下文,所以中斷服務(wù)程序不能執(zhí)行需要任務(wù)上下文的函數(shù)。
5 結(jié)果驗證
我們對整個系統(tǒng)進行了驗證,CCD成像系統(tǒng)把采集的圖像數(shù)據(jù)經(jīng)變化,如加上校驗和傳送給PCI圖像采集卡。用邏輯分析儀對PCI的一些關(guān)鍵信號進行了測量。如圖5所示。
從圖中不難看出,PCI圖像采集卡一直處于數(shù)據(jù)傳輸狀態(tài),經(jīng)測試,傳輸速度完全滿足系統(tǒng)的要求。在應(yīng)用程序中對圖像數(shù)據(jù)進行了存盤,并計算校驗和,發(fā)現(xiàn)校驗和正確。
6 結(jié)論
本文設(shè)計的PCI圖像采集卡以FPGA為核心,在PCI核的基礎(chǔ)上用邏輯實現(xiàn)了PCI圖像采集卡Initiator下的突發(fā)模式傳輸,從而實現(xiàn)了視頻數(shù)據(jù)的高速傳輸。為了傳輸?shù)姆€(wěn)定性和可靠性,使用低壓差分信號技術(shù)進行圖像數(shù)據(jù)的接收和控制數(shù)據(jù)的發(fā)送。最后在VxWorks平臺上實現(xiàn)了PCI圖像采集模塊的驅(qū)動編寫。經(jīng)過測試,圖像數(shù)據(jù)傳輸穩(wěn)定可靠,傳輸速率也能滿足系統(tǒng)的整體需求。