樊 博,王延杰,孫宏海
(1.中國科學(xué)院 長春光學(xué)精密機(jī)械與物理研究所,吉林 長春130033;2.中國科學(xué)院大學(xué),北京100049)
一些高速實(shí)時(shí)圖像處理的圖像數(shù)據(jù)為一些特殊場景的高速圖像數(shù)據(jù),例如導(dǎo)彈飛行爆炸圖像、飛機(jī)起飛著陸圖像、航天器發(fā)射運(yùn)行圖像等,這些圖像處理系統(tǒng)開發(fā)過程中往往需要有真實(shí)場景驗(yàn)證階段。且不說這些場景可不可以隨意創(chuàng)造,單是每次試驗(yàn)的成本就已經(jīng)足夠驚人。為了解決這個(gè)問題,常用仿真的方式模擬這些場景。但是這些模擬的場景與真實(shí)的場景還是會有很大的差別。在改進(jìn)過程中提出了兩種仿真方式可以一定程度克服上述不足,一種為半實(shí)物仿真,另一種為數(shù)字圖像直接注入式仿真[1]。其中,半實(shí)物仿真的靈活性不高,而且花費(fèi)較大;而數(shù)字圖像直接注入式仿真可以克服上述缺點(diǎn)?,F(xiàn)階段的數(shù)字圖像注入式仿真平臺大多數(shù)采用USB或者PCI總線傳輸圖像數(shù)據(jù)[2],這些系統(tǒng)的傳輸帶寬有限,很難適應(yīng)高分辨率高幀頻數(shù)字圖像仿真需求。
隨著處理器技術(shù)的不斷發(fā)展,互連領(lǐng)域中,高速差分總線技術(shù)代替并行總線技術(shù)是大勢所趨。PCIe(PCI express)于2001年正式發(fā)布,是Intel公司開發(fā)的第三代IO總線標(biāo)準(zhǔn)。PCIe總線是串行總線技術(shù),可以在很高的頻率上傳輸數(shù)據(jù),所以在保證數(shù)據(jù)完整性的同時(shí)有很高的帶寬。其中PCIe Gen1 標(biāo)準(zhǔn)x1通道單向傳輸速率為2.5Gb/s,PCIe Gen2標(biāo)準(zhǔn)x1通道為5Gb/s,最新的PCIe Gen3 在相同的條件下傳輸速率為8Gb/s。
鑒于此,本文設(shè)計(jì)了基于PCIe的高速圖像注入式仿真系統(tǒng),利用Xilinx高性能可編程邏輯器件Virtex-6FPGA(field programmable gate array)實(shí)現(xiàn)PCIe接口、DDR3控制器、DMA 引擎、Cameralink和DVI等接口控制邏輯。同時(shí)編寫PCIe DMA傳輸?shù)尿?qū)動和上位機(jī)程序,實(shí)現(xiàn)真實(shí)場景高速圖像實(shí)時(shí)輸出功能,并且輸出的圖像數(shù)據(jù)時(shí)鐘和分辨率可以在上位機(jī)中隨時(shí)調(diào)整,可以適應(yīng)不同系統(tǒng)的仿真需求。
PICe設(shè)備可以分為兩種,一種為根聯(lián)合體(root complex,RC),另一種為端點(diǎn)設(shè)備(endpoint,EP)。如圖1 所示,RC包括PCIe總線端口、存儲器控制器等一系列與外部設(shè)備有關(guān)的接口。在PCIe總線規(guī)范中,EP 也就是基于PCIe總線的設(shè)備。本文設(shè)計(jì)的PCIe系統(tǒng)為EP,計(jì)算機(jī)系統(tǒng)為RC,二者通過PCIe接口連接到一起,并且通過計(jì)算機(jī)將真實(shí)場景視頻傳送到板卡并經(jīng)過板卡的Cameralink和DVI接口將圖像輸出,作為其它需要高速圖像的處理系統(tǒng)的數(shù)據(jù)源。
圖1 PCIe系統(tǒng)拓?fù)浣Y(jié)構(gòu)
PCIe總線規(guī)范定義了數(shù)據(jù)報(bào)文發(fā)送接收過程中需要通過的3個(gè)層次,分別為:事物層、數(shù)據(jù)鏈路層和物理層。實(shí)際數(shù)據(jù)傳輸?shù)倪^程為,數(shù)據(jù)報(bào)文在設(shè)備的核心層產(chǎn)生,經(jīng)過傳輸層打包為傳輸層包(transaction layer packet,TLP),再經(jīng)過數(shù)據(jù)鏈路層打包為數(shù)據(jù)鏈路層包(data link layer packet,DLLP),最后經(jīng)過物理層打包為物理層包(physical layer packet,PLP),最終發(fā)送出去。接收端的過程為發(fā)送端的逆過程。
PCIe協(xié)議層次結(jié)構(gòu)如圖2所示。
實(shí)現(xiàn)PCIe接口主要有兩種方式,一種為橋接芯片,將PCIe總線轉(zhuǎn)接到本地總線,這種方式PCIe的傳輸速度不會特別高,主要受到本地總線傳輸速度的限制和總線轉(zhuǎn)換的帶寬損失;另一種為FPGA 實(shí)現(xiàn),主流FPGA 廠商都將PCIe功能集成到其FPGA 產(chǎn)品中,可以快速開發(fā)基于PCIe的各種應(yīng)用。FPGA 廠商Xilinx推出的高、中、低檔FPGA都集成有PCIe硬核IP。本文采用第二種方式實(shí)現(xiàn)PCIe接口,選擇Xilinx Virtex-6系列FPGA 作為主芯片,這樣可以充分利用PCIe的高帶寬來傳輸高速圖像,同時(shí)可以方便地實(shí)現(xiàn)圖像輸入輸出接口與PCIe接口的功能對接。
圖2 PCIe協(xié)議層次結(jié)構(gòu)
PCIe總線接口提供了一個(gè)高速傳輸?shù)耐ǖ?,傳輸?shù)據(jù)還需要有符合PCIe協(xié)議的傳輸邏輯模塊。對于簡單的數(shù)據(jù)傳輸PCIe IP Core在生成的同時(shí)會有一個(gè)參考的PIO(programmable input-output)設(shè)計(jì)[3],但是該設(shè)計(jì)傳輸?shù)臄?shù)據(jù)僅是單個(gè)數(shù)據(jù)包傳輸,對于連續(xù)大量的高速圖像數(shù)據(jù)顯得無能為力。因此,本文在FPGA 端設(shè)計(jì)一個(gè)DMA 傳輸引擎,該引擎符合PCIe協(xié)議規(guī)范,并可以滿足高速圖像傳輸需求,同時(shí)在PC端開發(fā)對應(yīng)的驅(qū)動程序和上位機(jī)應(yīng)用。
本文設(shè)計(jì)的系統(tǒng)組成如圖3所示,主要有兩大部分組成,即硬件部分和軟件部分。其中硬件部分包括PCIe接口、Cameralink 輸入和輸出接口、DVI輸出接口、DDR3 SODIMM 接口以及這些接口的FPGA 控制邏輯;軟件部分包括PCIe接口驅(qū)動、DMA 驅(qū)動和上位機(jī)程序。
圖3 系統(tǒng)框架
FPGA 邏輯模塊設(shè)計(jì)是本文硬件設(shè)計(jì)的核心,包括Cameralink輸入輸出模塊、DVI輸出模塊、DDR3讀寫控制模塊、PCIe模塊、圖像算法模塊和全局仲裁控制模塊。仲裁控制邏輯模塊起到控制中心的作用,用以協(xié)調(diào)整個(gè)硬件系統(tǒng)的工作。
由于這些模塊單一FPGA 中實(shí)現(xiàn),因此這些模塊之間的數(shù)據(jù)傳輸就十分方便,這也能充分提高系統(tǒng)傳輸帶寬。下面主要介紹DDR3 讀寫控制模塊、PCIe DMA 模塊和全局控制模塊。
FPGA 模塊結(jié)構(gòu)如圖4所示。
圖4 FPGA 模塊結(jié)構(gòu)
2.1.1 DDR3讀寫控制模塊
對存儲設(shè)備的控制和訪問是一個(gè)系統(tǒng)數(shù)據(jù)穩(wěn)定和高速的首要任務(wù)。本文采用Xilinx MIG (memory interface generator)IP Core來實(shí)現(xiàn)對所設(shè)計(jì)的DDR3SDRAM 的控制。該IP Core傳輸穩(wěn)定且?guī)捓寐瘦^高,為本系統(tǒng)提供穩(wěn)定、高速、大容量的圖像緩存空間。
讀寫控制模塊直接控制的是MIG,而MIG 對讀寫操作有嚴(yán)格的時(shí)序要求。MIG 提供3種與用戶邏輯的接口,分別為AXI4Slave接口,Native接口和UI接口[4]。3種接口的特點(diǎn)對比見表1。AXI4(高級可擴(kuò)展接口4)是ARM 推出的第四代AMBA 接口規(guī)范,使用者需對這個(gè)規(guī)范有一定了解,比較復(fù)雜,使用難度較大;Native接口沒有包含buffers,所以數(shù)據(jù)傳輸快,但是數(shù)據(jù)可能會亂序,需要用戶自己組織數(shù)據(jù),增加了難度;UI接口是Native接口的簡化,增加了buffers以使數(shù)據(jù)和讀寫請求同步,不用自己組織數(shù)據(jù),相對容易操作。因此,本文選擇通過UI接口連接DDR3讀寫控制模塊和MIG 控制器。
表1 MIG 的3種接口對比
DDR3讀寫速率和位寬與各個(gè)接口模塊的速率和位寬不同,這就需要二者之間有一個(gè)數(shù)據(jù)緩存設(shè)備。FPGA 設(shè)計(jì)中常用的緩存設(shè)備包括FIFO 和雙端口RAM,本文采用FPGA 內(nèi)部Block RAM 綜合而成的雙端口RAM 作為緩存設(shè)備。而對這些緩存RAM 讀寫時(shí)采用高位地址 “乒乓”的策略,這樣可以保證數(shù)據(jù)不會被非法覆蓋或者丟失。
2.1.2 PCIe DMA 模塊
如上所述,為了傳送大塊圖像數(shù)據(jù),本文設(shè)計(jì)了如圖5所示的DMA 傳輸結(jié)構(gòu)[5,6],并將其與PCIe硬核IP Core相連接,組成高速圖像傳輸?shù)囊妗?/p>
圖5 DMA 結(jié)構(gòu)框架
在DMA 模塊中Target Logic模塊用于捕捉PC 設(shè)備發(fā)出的單次MWr(存儲器寫操作)和MRd(存儲器讀操作)。如果是MWr TLP,那么根據(jù)收到的寫入地址和內(nèi)容來改變Control/Status Registers中相應(yīng)的寄存器值;如果是MRd TLP,那么模塊將首先讀取Control/Status Registers中相關(guān)寄存器,然后根據(jù)MRd 的地址返回相應(yīng)的Cpld TLP;Control/Status Registers模塊包含了DMA 控制器的所有寄存器,這些寄存器都映射到BAR(基址寄存器)空間中[4-6]。PC通過對BAR 空間的讀寫實(shí)現(xiàn)對相關(guān)寄存器的讀寫,以此控制DMA的操作;Initiator Logic用于產(chǎn)生MWr 和MRd包,以及解析PC 傳回的Cpld包,是完成DMA 讀寫操作的主要部分[7]。
2.1.3 全局控制模塊
全局控制模塊是整個(gè)系統(tǒng)能夠正常工作的 “指揮中心”,負(fù)責(zé)各個(gè)模塊訪問DDR3的仲裁以及數(shù)據(jù)流走向的選擇,充分保證了本系統(tǒng)高速圖像數(shù)據(jù)的穩(wěn)定傳輸。
當(dāng)某一設(shè)備發(fā)起對DDR3的讀/寫請求時(shí),控制模塊首先判斷此時(shí)DDR3 是否正在進(jìn)行讀/寫操作,如果DDR3忙,則此請求被掛起。當(dāng)另一設(shè)備占用DDR3 讀/寫結(jié)束時(shí),該命令會被響應(yīng)。這樣可以保證多個(gè)設(shè)備訪問DDR3的穩(wěn)定性。假設(shè)所有設(shè)備同時(shí)發(fā)起訪問DDR3的請求,這時(shí)DDR3首先應(yīng)該響應(yīng)哪個(gè)設(shè)備呢?這就需要一個(gè)優(yōu)先級來規(guī)定DDR3首先響應(yīng)哪個(gè)請求。圖像數(shù)據(jù)來源于Cameralink輸入或者PCIe輸入,因此本文將這兩個(gè)設(shè)備的請求分別設(shè)置為優(yōu)先級最高和次高,這樣可以充分保證數(shù)據(jù)在開始端不會出錯(cuò)。
圖像數(shù)據(jù)流走向的選擇主要是通過將DDR3存儲區(qū)劃分為分別對應(yīng)Cameralink輸入和PCIe輸入的兩塊來實(shí)現(xiàn)的。在PCIe DMA 中定義一個(gè)數(shù)據(jù)流向選擇寄存器,通過判斷此寄存器的值來決定輸出設(shè)備選擇哪個(gè)輸入源的圖像數(shù)據(jù)輸出。而數(shù)據(jù)流向選擇寄存器的值可以在上位機(jī)中更改,這樣就實(shí)現(xiàn)了上位機(jī)控制圖像數(shù)據(jù)的流向。
PCIe與PCI最大的不同在于物理傳輸上采用更加先進(jìn)的串行數(shù)據(jù)傳輸,是點(diǎn)對點(diǎn)的總線技術(shù),多設(shè)備互連需要使用交換器。但是PCIe總線是在PCI總線的基礎(chǔ)上發(fā)展起來的,繼承了許多PCI總線的概念和標(biāo)準(zhǔn)。尤其在驅(qū)動和軟件方面,PCIe協(xié)議規(guī)定其向下兼容[8]。PCIe的BAR 空間的定義與PCI的定義沒有本質(zhì)區(qū)別,只是PCIe擴(kuò)展了BAR空間的定義。因此可以參照PCI設(shè)備驅(qū)動的開發(fā)方法來開發(fā)PCIe設(shè)備的驅(qū)動。
2.2.1 開發(fā)工具選擇
Microsoft公司開發(fā)的DDK(device development kit)驅(qū)動開發(fā)工具,代碼較簡單,結(jié)構(gòu)較清晰,效率較高,但是開發(fā)難度較大,現(xiàn)已停止更新,被同一公司的WDK(windows development kit)所取代。
DriverStudio是CompuWare公司開發(fā)的驅(qū)動開發(fā)工具,將編寫驅(qū)動程序所需要的內(nèi)核訪問函數(shù)和硬件訪問函數(shù)封裝成類,所以是面向?qū)ο蟮拈_發(fā)方式[9]。使用該工具開發(fā)驅(qū)動難度較小,驅(qū)動效率較高。但是該軟件已停止更新。
還有一種是Jungo公司出品的WinDriver,它將驅(qū)動的開發(fā)做了最大程度的簡化,為開發(fā)人員提供了豐富全面的接口函數(shù)。利用這些函數(shù),開發(fā)人員不必掌握操作系統(tǒng)的知識就可以在短時(shí)間內(nèi)開發(fā)出不同總線的驅(qū)動程序。它還有一個(gè)重要特點(diǎn)就是跨平臺性,在Windows XP 下開發(fā)的驅(qū)動程序不需要任何修改就可以應(yīng)用于WindowsCE 和Linux等系統(tǒng)中,具有非常好的可移植性。
所以本文選擇WinDriver作為驅(qū)動程序的開發(fā)工具,既可以保證一定的傳輸速度,又可以保證驅(qū)動程序?qū)Σ煌僮飨到y(tǒng)平臺的兼容性。
2.2.2 驅(qū)動程序開發(fā)
WinDriver中的Driver Wizard工具可以快速檢測到插入PC機(jī)的PCIe設(shè)備,并且可以對PCIe即插即用設(shè)備的I/O,存儲和中斷進(jìn)行檢測。當(dāng)檢測設(shè)備的各種資源沒有問題時(shí),可以生成該設(shè)備的驅(qū)動程序代碼。這些程序代碼包括操作硬件內(nèi)核級API函數(shù)、用這些API函數(shù)操作硬件的樣本程序以及各種工程文件。
到此,驅(qū)動程序的框架就生成了。但是一些具體的功能如DMA 操作還需要用編譯工具打開生成的樣本程序,并作具體修改。
本文DMA 驅(qū)動程序設(shè)計(jì)時(shí)充分考慮了系統(tǒng)的具體需求,采用增加PCIe單個(gè)數(shù)據(jù)包有效載荷和減少單次DMA數(shù)據(jù)包個(gè)數(shù)的技巧來增大傳輸效率,改善DMA 傳輸高速圖像數(shù)據(jù)的效果。另外,為高速圖像傳輸專門定義一些寄存器,如幀起始標(biāo)志寄存器和幀傳輸結(jié)束寄存器等,這些寄存器為高速圖像傳輸帶來很大便利性,也是本文針對高速圖像傳輸應(yīng)用場合的改進(jìn)DMA 引擎設(shè)計(jì),在實(shí)際應(yīng)用中具有很好的效果。
2.2.3 上位機(jī)開發(fā)
本文設(shè)計(jì)的上位機(jī)程序采用VC++6.0和MFC 編寫,目的為驗(yàn)證PCIe硬件設(shè)計(jì)和驅(qū)動程序的可靠性,以及注入式仿真平臺各項(xiàng)功能的正確性,并驗(yàn)證了本文設(shè)計(jì)的DMA引擎?zhèn)鬏敻咚賵D像的正確性,同時(shí)測試了PCIe傳輸高速圖像的速率。其中,DMA 傳輸?shù)牟僮髁鞒倘鐖D6所示,上位機(jī)截圖如圖7所示。上位機(jī)可以控制圖像輸出的分辨率和幀頻,并且可以在真實(shí)場景圖像中疊加一些信息。
本文所設(shè)計(jì)的基于PCIe的高速圖像注入式仿真系統(tǒng)與PC機(jī)通過PCIe延長線相連,通過PC機(jī)的上位機(jī)程序控制真實(shí)場景圖像處理和輸出[10]。
3.1.1 實(shí)驗(yàn)效果
如圖8所示為本文設(shè)計(jì)的高速圖像注入式仿真系統(tǒng)的實(shí)驗(yàn)結(jié)果,圖中左側(cè)屏幕顯示的是Cameralink 輸出圖像,中間屏幕顯示的是上位機(jī)存儲的圖像,右側(cè)屏幕顯示的是DVI輸出的圖像。其中上位機(jī)存儲的圖像可以為Cameralink輸入的圖像,也可以為存儲在本地硬盤的真實(shí)場景視頻圖像。而Cameralink和DVI輸出的圖像為上位機(jī)傳輸?shù)紽PGA 中的圖像。如上所述,這些圖像數(shù)據(jù)在FPGA 硬件板上都是存儲于DDR3SDRAM 中的。
3.1.2 性能測試
圖6 DMA 操作流程
圖7 上位機(jī)截圖
圖8 實(shí)驗(yàn)結(jié)果
在上述實(shí)驗(yàn)條件下,對本文設(shè)計(jì)的PCIe接口的傳輸帶寬進(jìn)行了測試。讀寫操作的帶寬測試結(jié)果見表2,這里的寫操作是指PCIe板卡傳輸圖像到上位機(jī),讀操作是指PCIe板卡讀取上位機(jī)圖像。
表2 帶寬測試結(jié)果
本文實(shí)驗(yàn)條件中計(jì)算機(jī)的處理器主頻和內(nèi)存容量會對本文系統(tǒng)的傳輸速度有一點(diǎn)影響,在實(shí)際使用時(shí),系統(tǒng)的傳輸速度可能會因計(jì)算機(jī)配置的不同有所區(qū)別。而且PCIe采用延長線的方式會在一定程度上降低PCIe傳輸速度,所以本文測試傳輸速度在沒有PCIe延長線的情況下會有所提升。本文實(shí)驗(yàn)主要測試系統(tǒng)的穩(wěn)定性,相機(jī)參數(shù)為1280x1024分辨率,60 幀/s,未達(dá)到系統(tǒng)設(shè)計(jì)時(shí)的需求,但是測試速度時(shí)采用多次讀取相同幀的方式提高數(shù)據(jù)速率來測試PCIe的傳輸速率。所以本文實(shí)驗(yàn)和性能測試都是真實(shí)可靠的。
本文設(shè)計(jì)的基于PCIe的高速圖像注入式仿真系統(tǒng)利用了PCIe的高速傳輸特性將硬件與計(jì)算機(jī)軟件結(jié)合,硬件可以控制各個(gè)接口的圖像數(shù)據(jù)傳輸,軟件可以將真實(shí)的場景圖像傳輸給硬件,并且控制硬件輸出圖像的分辨率和幀頻。同時(shí)PCIe的高速傳輸特點(diǎn)降低了圖像傳輸?shù)难訒r(shí),保證仿真圖像的實(shí)時(shí)性;FPGA 控制的DDR3 可以緩存大量的圖像數(shù)據(jù),保證仿真圖像輸出的穩(wěn)定性。另外該系統(tǒng)的硬件設(shè)計(jì)是基于單片Virtex-6FPGA 實(shí)現(xiàn)的,所以該系統(tǒng)具有數(shù)據(jù)真實(shí)、實(shí)時(shí)性好、適應(yīng)性廣、集成度高、功耗低等特點(diǎn),在高清晰度高速圖像注入式仿真領(lǐng)域有重要應(yīng)用價(jià)值。
[1]LI Xiangchun,DU Xiaochun,LIU Yang,et al.Real-time image acquisition and semi physical simulation system design[J].Computer Simulation,2012,29 (11):38-41 (in Chinese).[李向春,杜曉春,劉揚(yáng),等.高動態(tài)實(shí)時(shí)圖像采集與半實(shí)物仿真系統(tǒng)設(shè)計(jì) [J].計(jì)算機(jī)仿真,2012,29 (11):38-41.]
[2]HUANG Yongshun.A infrared-sensor simulator based on USB2.0[J].Infrared Technology,2009,31(2):77-80(in Chinese).[黃永順.基于USB2.0數(shù)字圖像注入式紅外探測器仿真器設(shè)計(jì)[J].紅外技術(shù),2009,31(2):77-80.]
[3]Xilinx,Inc.Virtex-6FPGA integrated block for PCI express user guide,UG517(v5.1)[EB/OL].[2010-09-21].http://www.xilinx.com.
[4]Xilinx,Inc.Virtex-6 FPGA memory interface solutions user guide,UG406(v1.10)[DB/OL].[2012-01-18].http://www.xilinx.com.
[5]LI Muguo,HUANG Ying,LIU Yuzhi.Design of DMA transmission with PCIe bus interface based on FPGA [J].Computer Measurement & Control,2013,21 (1):233-235 (in Chinese).[李木國,黃影,劉于之.基于FPGA 的PCIe總線接口的DMA 傳輸設(shè)計(jì) [J].計(jì)算機(jī)測量與控制,2013,21 (1):233-235.]
[6]WANG Jinghua,HU Shanqing,LONG Teng.The implementation of DMA reading and writing module on FPGA based on PCI express protocol[J].Microcomputer Information,2010,26 (10-2):7-9 (in Chinese).[汪精華,胡善清,龍騰.基于FPGA 實(shí)現(xiàn)的PCIE 協(xié)議的DMA 讀寫模塊 [J].微計(jì)算機(jī)信息,2010,26 (10-2):7-9.]
[7]Xilinx,Inc.Bus master performance demonstration reference design for the Xilinx endpoint PCI express solutions[EB/OL].[2011-09-29].http://www.xilinx.com.
[8]LIANG Guolong,HE Xin,WEI Zhonghui,et al.Driver development of PCIE data acquisition card [J].Computer Engineering and Applications,2009,45 (31):63-65(in Chinese).[梁國龍,何昕,魏仲慧,等.PCIE數(shù)據(jù)采集系統(tǒng)的驅(qū)動程序開發(fā) [J].計(jì)算機(jī)工程與應(yīng)用,2009,45 (31):63-65.]
[9]YING Sancong,WANG Mingyin,ZHANG Xing.Key technologies of high-performance PCI driver [J].Computer Engineering and Design,2012,33 (6):2208-2212 (in Chinese).[應(yīng)三叢,汪明寅,張行.高性能PCI驅(qū)動程序的關(guān)鍵技術(shù)[J].計(jì)算機(jī)工程與設(shè)計(jì),2012,33 (6):2208-2212.]
[10]WANG Ke,MA Li,SHU Weiqun,et al.Real-time simulation platform for airborne image processing engine[J].Journal of System Simulation,2011,23 (9):1832-1836 (in Chinese).[王科,馬麗,殳偉群.機(jī)載圖像處理引擎實(shí)時(shí)仿真平臺 [J].系統(tǒng)仿真學(xué)報(bào),2011,23 (9):1832-1836.]