文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2015)02-0042-03
0 引言
隨著圖像傳感器的快速發(fā)展,成像質(zhì)量和圖像幀率得到快速提升,高分辨率的圖像給人們的生活帶來了極大的便利。但與此同時(shí),快速、實(shí)時(shí)的傳輸圖像數(shù)據(jù)成了難題。傳統(tǒng)的顯微鏡系統(tǒng)主要使用人工操作,對(duì)操作人員的經(jīng)驗(yàn)和知識(shí)量要求比較高,并且存在很多不定因素。采用自動(dòng)對(duì)焦則大大解決了以上問題,目前國(guó)內(nèi)外顯微鏡自動(dòng)對(duì)焦在算法上都比較成熟,但圖像的分辨率并不是很高[1]。而提高圖像分辨率不僅提高了自動(dòng)對(duì)焦的精準(zhǔn)度,并且可以采集到樣品更多的細(xì)節(jié),給研究者提供更多的信息。鑒于以往顯微鏡圖像采集系統(tǒng)的不足,針對(duì)高分辨率圖像的數(shù)據(jù)采集,本文選擇了基于PCI Express(PCIe)總線的圖像采集系統(tǒng)實(shí)現(xiàn)顯微鏡圖像的采集。
目前計(jì)算機(jī)使用最為廣泛的PCI總線接口最高工作頻率能達(dá)到66 MHz,峰值帶寬理論上可以達(dá)到532 MB/s,但這種并行總線的傳輸速度和帶寬已逐漸滿足不了高速傳輸?shù)囊蟆O啾葌鹘y(tǒng)的PCI總線,21世紀(jì)初提出的高速差分總線PCIe采用點(diǎn)對(duì)點(diǎn)串行連接、全雙工的傳輸方式大大提升了傳輸速度和帶寬。本文實(shí)現(xiàn)的1.0版本x4規(guī)格通道理論帶寬可達(dá)到2 GB/s,比USB3.0快,更是千兆以太網(wǎng)傳輸速度的8倍。
1 系統(tǒng)總體設(shè)計(jì)
設(shè)計(jì)的整體結(jié)構(gòu)如圖1所示,系統(tǒng)給PCIe采集系統(tǒng)提供5 V電源,F(xiàn)PGA正常工作后開始執(zhí)行芯片的固化程序。首先通過IIC對(duì)CMOS傳感器進(jìn)行初始化,CMOS傳感器開始拍攝細(xì)胞的圖像,同時(shí)通過Cameralink接口將圖像數(shù)據(jù)送至系統(tǒng)數(shù)據(jù)緩存。FPGA將接收到的4對(duì)差分?jǐn)?shù)據(jù)解析得到圖像數(shù)據(jù),接著以鏈?zhǔn)紻MA傳輸方式將數(shù)據(jù)直接送至IP硬核,然后將數(shù)據(jù)打包送至上位機(jī),上位機(jī)通過應(yīng)用軟件將圖像顯示并保存。
2 系統(tǒng)硬件設(shè)計(jì)
2.1 CMOS成像模塊
本系統(tǒng)的圖像傳感器采用Aptina公司生成的MT9-F002I12STCU芯片。FPGA通過IIC協(xié)議對(duì)CMOS芯片進(jìn)行初始化,配置相關(guān)寄存器。初始化之后,圖像尺寸為4 096H×3 072V,每幀圖像大小為12 MB,每秒可生成15幀圖像。該模塊固定在顯微鏡上,單獨(dú)為其提供5 V電源,模塊內(nèi)部可轉(zhuǎn)換2.8 V和1.8 V電壓為傳感器供電。CMOS傳感器的初始化程序以及圖像數(shù)據(jù)都是通過Cameralink傳輸。
2.2 PCIe總線接口
PCIe總線采用串行連接的方式,并使用數(shù)據(jù)包進(jìn)行數(shù)據(jù)傳輸。數(shù)據(jù)報(bào)文首先在設(shè)備的核心層中產(chǎn)生,然后再經(jīng)過設(shè)備的事務(wù)層、數(shù)據(jù)鏈路層和物理層,最終發(fā)送出去,接收端的數(shù)據(jù)也需要通過物理層、物理鏈路層和事務(wù)層,并最終到達(dá)核心層。目前主流的PCIe總線接口方法有兩種,方法1:用PEX8311芯片,該方法實(shí)現(xiàn)了物理層、數(shù)據(jù)鏈路層和事務(wù)層的控制邏輯,簡(jiǎn)單易實(shí)現(xiàn),但是缺乏靈活性和可配置性[2]。方法2:利用FPGA芯片內(nèi)部集成IP硬核,IP硬核完成了物理層和數(shù)據(jù)鏈路層的協(xié)議,用戶需自行設(shè)計(jì)PCIe的應(yīng)用層協(xié)議和TLP,開發(fā)難度較大,但可以根據(jù)需求合理配置[3]。本系統(tǒng)采用方法2,選用Altera公司的EP4CGX30CF23C8芯片,該芯片內(nèi)部集成了IP硬核模塊,可以實(shí)現(xiàn)x4通道的PCIe接口。
3 系統(tǒng)軟件設(shè)計(jì)
3.1 鏈?zhǔn)紻MA傳輸設(shè)計(jì)
圖像數(shù)據(jù)傳輸采用DMA技術(shù)保證其實(shí)時(shí)性[4],利用鏈?zhǔn)紻MA技術(shù)提高DMA執(zhí)行效率并配合SGDMA技術(shù)解決計(jì)算機(jī)離散物理頁的DMA傳輸問題[5]。鏈?zhǔn)紻MA區(qū)別于普通DMA的最大特點(diǎn)就是可以一次執(zhí)行多次DMA,因此執(zhí)行效率非常高,非常適合于上位機(jī)上物理分頁地址不連續(xù)的DMA數(shù)據(jù)傳輸。本系統(tǒng)中僅用到DMA寫模塊,數(shù)據(jù)由FPGA流向計(jì)算機(jī)。具體實(shí)現(xiàn)的方法是:在主機(jī)端開辟一塊內(nèi)存區(qū)域,用來存儲(chǔ)描述符表。描述符表是用來描述在主機(jī)與外設(shè)之間數(shù)據(jù)傳輸有關(guān)的地址與長(zhǎng)度信息的,它由一個(gè)表頭和多個(gè)描述符組成。數(shù)據(jù)傳輸前,用戶將控制參數(shù)、端點(diǎn)地址、內(nèi)存物理地址寫入并啟功傳輸。鏈?zhǔn)紻MA控制器會(huì)及時(shí)從內(nèi)存中讀取描述符表來指揮DMA的傳輸過程。
3.2 驅(qū)動(dòng)程序設(shè)計(jì)
驅(qū)動(dòng)程序采用Jungo公司開發(fā)的Windriver軟件,并利用其特有的KernelPlugln(KP)技術(shù)實(shí)現(xiàn)高效的中斷數(shù)據(jù)采集服務(wù)。主要依靠3個(gè)函數(shù):KP_IntAtIrqt、KP_IntAtDpc、KP_Call。
KP_IntAtIrqt:高優(yōu)先級(jí)中斷服務(wù)程序,硬件中斷產(chǎn)生時(shí),該函數(shù)被調(diào)用。當(dāng)返回值大于零時(shí)繼續(xù)調(diào)用KP_IntAtDpc。本項(xiàng)目中,數(shù)據(jù)采集的全部工作都在該函數(shù)里面完成。當(dāng)一幅圖像采集完成后返回1以便繼續(xù)調(diào)用IntAtDpc低優(yōu)先級(jí)中斷。
KP_IntAtDpc:低優(yōu)先級(jí)中斷服務(wù)程序,KP_IntAtIrqt返回值大于零時(shí)被調(diào)用,本項(xiàng)目中不做任何處理,返回值永遠(yuǎn)大于零以調(diào)用用戶模式下的中斷服務(wù)程序。
KP_Call:主要用于用戶模式與KP通信,本項(xiàng)目中用來傳遞數(shù)據(jù)緩沖區(qū)以及描述符表的地址,需要注意的是用戶應(yīng)用程序與KP驅(qū)動(dòng)程序擁有不同的虛擬地址系統(tǒng),因此應(yīng)用程序的地址在驅(qū)動(dòng)程序里不能直接使用,需要經(jīng)過地址轉(zhuǎn)換才能使用。
圖2是中斷數(shù)據(jù)采集的流程圖。為提高數(shù)據(jù)采集效率,采用兩片緩沖區(qū)交替緩沖機(jī)制,應(yīng)用程序首先申請(qǐng)兩片數(shù)據(jù)緩沖區(qū),并且對(duì)其初始化。然后通過KP_Call函數(shù)將緩沖區(qū)的地址及其頁表信息等傳入驅(qū)動(dòng)程序內(nèi)核模式下的KernelPlugln,用于鏈?zhǔn)紻MA描述符表的更新。圖像采集卡每采集到3行圖像數(shù)據(jù)發(fā)送一次中斷,中斷服務(wù)程序立刻響應(yīng)中斷。首先讀取BAR2空間偏移地址0x40處的32 bit狀態(tài)寄存器,根據(jù)其值判斷當(dāng)前數(shù)據(jù)位于圖像的奇數(shù)行或偶數(shù)行。中斷程序維護(hù)兩個(gè)鏈?zhǔn)紻MA描述符表,然后根據(jù)狀態(tài)寄存器的值判斷啟動(dòng)對(duì)應(yīng)的鏈?zhǔn)紻MA以及更新下次將要使用的鏈?zhǔn)紻MA描述符表,圖像采集卡將根據(jù)描述符表將數(shù)據(jù)寫入相應(yīng)數(shù)據(jù)緩沖區(qū)的對(duì)應(yīng)地址。最后,再次根據(jù)狀態(tài)寄存器的值判斷一幅圖像是否采集完成,若完成則通知應(yīng)用程序并繼續(xù)等待下一次中斷,否則直接等待下一次中斷。
4 實(shí)驗(yàn)結(jié)果分析
采集圖像之前先通過Altera公司設(shè)計(jì)的PCIe測(cè)速軟件在1小時(shí)內(nèi)對(duì)采集系統(tǒng)進(jìn)行了6次測(cè)試,測(cè)試得到的結(jié)果如表1所示。
由表1的測(cè)試結(jié)果可以看出,DMA寫的速度已經(jīng)達(dá)到理論帶寬的80%以上,DMA讀的速度大約為580 MB/s。經(jīng)過分析,測(cè)試速度較理論速度偏低大致有以下3個(gè)原因:(1)DMA讀取為非轉(zhuǎn)發(fā)事務(wù),所以讀的速度比寫的要慢;(2)中斷響應(yīng)和配置DMA寄存器延時(shí)造成速度降低;(3)計(jì)算機(jī)本身硬件條件導(dǎo)致傳輸速度偏低。相比于成像模塊每秒產(chǎn)生15幀12 MB的圖像,采集系統(tǒng)能夠很好地完成實(shí)時(shí)采集成像模塊生成的圖像。
將采集系統(tǒng)應(yīng)用于顯微鏡自動(dòng)對(duì)焦圖像采集,經(jīng)過長(zhǎng)時(shí)間的采集測(cè)試,未出現(xiàn)丟幀現(xiàn)象,采集系統(tǒng)正常工作。圖3是采集的未經(jīng)解碼的原始圖像數(shù)據(jù)。圖4是通過快速插值解碼之后的彩色的圖像。兩幅圖中的黑點(diǎn)是鏡頭未清潔干凈導(dǎo)致。實(shí)驗(yàn)結(jié)果表明,本系統(tǒng)能夠很好地采集顯微鏡自動(dòng)對(duì)焦成像模塊生成的高分辨率圖像,性能穩(wěn)定,適用于大數(shù)據(jù)量的實(shí)時(shí)快速采集。
5 結(jié)束語
本文詳細(xì)介紹了基于PCI Express的圖像采集系統(tǒng),為大數(shù)據(jù)量的實(shí)時(shí)快速傳輸提供了有效的方案。并通過測(cè)試證明了該系統(tǒng)能很好地應(yīng)用于顯微鏡自動(dòng)對(duì)焦成像模塊的圖像采集,實(shí)現(xiàn)了高分辨率圖像的實(shí)時(shí)顯示。相對(duì)于熱門的USB3.0以及千兆以太網(wǎng),本設(shè)計(jì)在傳輸速度上有明顯的優(yōu)勢(shì),并且當(dāng)傳輸速度有更高的要求時(shí),還可以將x4通道擴(kuò)展成x8或x16通道,得到更高的傳輸速度。
參考文獻(xiàn)
[1] 張磊.顯微鏡用數(shù)碼相機(jī)硬件結(jié)構(gòu)及其視頻流算法實(shí)現(xiàn)與應(yīng)用[D].杭州:浙江大學(xué),2011.
[2] 安駿.基于橋接芯片PEX8111的PCIE總線接口設(shè)計(jì)[J].科技資訊,2010(3):23-24.
[3] 沈輝,張萍.FPGA在PCI Express總線接口中的應(yīng)用[J].計(jì)算機(jī)應(yīng)用技術(shù),2010,33(14):109-111.
[4] 李木國(guó),黃影,劉于之.基于PCIe總線的高速數(shù)據(jù)采集卡設(shè)計(jì)與實(shí)現(xiàn)[J].測(cè)控技術(shù),2013,32(7):19-22.
[5] 黃世中,金志剛.利用WinDriver實(shí)現(xiàn)鏈?zhǔn)紻MA[J].電子設(shè)計(jì)工程,2013,21(8):6-9.