基于FPGA和FLASH ROM的圖像信號(hào)發(fā)生器設(shè)計(jì)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
摘要:以XC2V1500-FPGA為硬件架構(gòu),設(shè)計(jì)了一種圖像信號(hào)發(fā)生器,作為自適應(yīng)光學(xué)系統(tǒng)波前處理機(jī)的信號(hào)源,為波前處理機(jī)的調(diào)試和算法驗(yàn)證提供支持。系統(tǒng)采用大容量的NAND型FLASH存儲(chǔ)數(shù)據(jù),存儲(chǔ)容量為1 GB。圖像數(shù)據(jù)通過USB總線預(yù)存入FLASH ROM,在FPGA控制邏輯作用下循環(huán)讀出,并通過Camera Link接口輸出。該Camera Link接口支持base,medium,full三種模式,輸出像素時(shí)鐘頻率可以達(dá)到70 MHz。
關(guān)鍵詞:FPGA;FLASH ROM;圖像信號(hào)發(fā)生器;USB;Camera Link
0 引言
在自適應(yīng)光學(xué)系統(tǒng)中,哈特曼波前傳感器檢測到的波前信息通過高速CCD相機(jī)采集輸出,然后由波前處理機(jī)完成斜率計(jì)算、波前復(fù)原運(yùn)算和控制運(yùn)算。自適應(yīng)光學(xué)系統(tǒng)研制時(shí),為了縮短研制周期,哈特曼傳感器和波前處理機(jī)需要同步進(jìn)行設(shè)計(jì)和研制,以便同步完成后進(jìn)行系統(tǒng)集成調(diào)試。
然而,通常都要等到哈特曼傳感器研制完成,并且配合必要的光學(xué)系統(tǒng)之后,才能輸出子光斑圖像給波前處理機(jī)進(jìn)行調(diào)試。這樣給波前處理機(jī)的研制周期帶來了很大壓力。因此,如果可以建立一個(gè)模擬前端系統(tǒng)哈特曼傳感器作為子光斑圖像輸出的信號(hào)源,則可以簡化波前處理機(jī)對(duì)調(diào)試環(huán)境的要求、縮短其研制周期。本文以XC2V1500-FPGA和K9F1G16UOM-FLASH ROM為載體,設(shè)計(jì)了一種模擬哈特曼傳感器中CCD相機(jī)圖像輸出的信號(hào)發(fā)生器。該系統(tǒng)不僅能為波前處理機(jī)的調(diào)試提供信號(hào)源,而且還可以為已經(jīng)研制完成的波前處理機(jī)提供算法驗(yàn)證的支持。
1 系統(tǒng)原理及組成
該圖像信號(hào)發(fā)生器的基本原理如下:通過模擬產(chǎn)生CCD相機(jī)輸出控制時(shí)序,將特定圖像進(jìn)行循環(huán)播放輸出。目標(biāo)圖像數(shù)據(jù)可通過PC機(jī)進(jìn)行加載,并且需要進(jìn)行非易失性存儲(chǔ)。這樣在完成圖像加載之后,系統(tǒng)一經(jīng)啟動(dòng)就能夠?qū)D像數(shù)據(jù)按照要求進(jìn)行輸出。目標(biāo)圖像按要求均是灰度圖像,可以是單幀、也可以是多幀,可以是從相機(jī)采集而來,也可以是通過Matlab仿真模擬得到的。選擇載入不同的目標(biāo)圖像序列,則系統(tǒng)可以完成不同的需求任務(wù)。
系統(tǒng)組成如圖1所示,主要由主控模塊、USB接口模塊、數(shù)據(jù)存儲(chǔ)模塊和Camera Link接口模塊組成。
主控模塊由一片XC2V1500-FPGA來實(shí)現(xiàn)。CY7C68013A芯片組成USB接口模塊,實(shí)現(xiàn)PC機(jī)與系統(tǒng)的通信功能。8片并行K9F1G16UOM-FLASHROM芯片組成數(shù)據(jù)存儲(chǔ)模塊,可提供1 GB的存儲(chǔ)空間、良好的讀寫速度。對(duì)于Camera Link接口模塊,采用3片DS90CR287、1片DS90LV019和1片DS90LV048A來實(shí)現(xiàn),可以支持Carnera Link接口的初級(jí)配置(Base)、中級(jí)配置(Medium)和高級(jí)配置(Full)。Camera Link接口是一種應(yīng)用最廣泛的高幀頻相機(jī)接口,具有差分傳輸、傳輸速率高的特點(diǎn)。
系統(tǒng)的任務(wù)可以分為兩個(gè)過程:首先PC機(jī)通過USB總線和FPGA將目標(biāo)圖像序列寫入FLASH;然后由于FLASH是一種非易失存儲(chǔ)器,接下來系統(tǒng)一旦啟動(dòng)后FPGA就能夠模擬產(chǎn)生CCD相機(jī)時(shí)序、將FLASH中的數(shù)據(jù)進(jìn)行循環(huán)輸出。這兩個(gè)過程的實(shí)現(xiàn)可加載不同的FPGA程序來完成。
2 系統(tǒng)實(shí)現(xiàn)
2.1 USB接口模塊
USB接口具有傳輸速度快、即插即用等優(yōu)點(diǎn),所以使用USB來實(shí)現(xiàn)PC機(jī)與系統(tǒng)的通信。CY7C68013A作為USB 2.0控制器,有3種接口工作模式:Ports,Slave FIFO和GPIF。根據(jù)系統(tǒng)構(gòu)成和實(shí)際要求,選用Slave FIFO模式的數(shù)據(jù)傳輸方案。具體的硬件連接如圖2所示。
CY7C68013A通過固件編程來配置具體的功能。應(yīng)用程序通過USB驅(qū)動(dòng)程序建立與USB外部設(shè)備的聯(lián)系。本文采用了Cypress公司提供的通用驅(qū)動(dòng)CyUsb.sys,該驅(qū)動(dòng)程序完全滿足本系統(tǒng)設(shè)計(jì)的要求。應(yīng)用程序可以通過兩種方式來訪問CyUsb.sys:
(1)使用Windows API如SetupDiXxxx和Deviceio Control;
(2)使用Cypress公司提供的CyAPI.lib。
本文采用CyAPI.lib來訪問USB驅(qū)動(dòng),CyAPI.lib提供了簡單高效的與Cyusb.sys通信的方法,方便掌握、可有效縮短USB設(shè)備的開發(fā)周期。
在完成圖像數(shù)據(jù)寫入功能時(shí),F(xiàn)PGA接收到圖像數(shù)據(jù)寫入的命令后,使faddr地址指向用于下傳數(shù)據(jù)的端點(diǎn)FIFO,然后開始獲取來自USB控制器的數(shù)據(jù),F(xiàn)PGA內(nèi)部USB通信模塊工作情況如圖3所示。IFCLK是由FPGA提供的40MHz時(shí)鐘,CY7C68013A的端點(diǎn)FIFO被配置為同步工作。
2.2 FLASH ROM無效塊管理
選取 SAMSUNG 公司的 NAND 型的K9F1G16UOM-FLASH作為存儲(chǔ)芯片,單片容量為1 Gb、數(shù)據(jù)寬度為16 b。大容量的FLASH器件一般都是按塊(block)管理其存儲(chǔ)空間。FLASH芯片可能有包含一個(gè)或多個(gè)無效位的無效塊,這在NAND型FLASH中是不可避免的。無效塊出現(xiàn)的幾率很小,但影響很大。如果對(duì)FLASH中的無效塊進(jìn)行操作,無效塊會(huì)在數(shù)據(jù)記錄的過程中造成數(shù)據(jù)的丟失和誤碼,影響數(shù)據(jù)的有效性和完整性。由于無效塊和有效塊相互隔離,無效塊并不會(huì)影響有效塊的操作,因此只要在數(shù)據(jù)存儲(chǔ)前將FLASH中的無效塊剔除,就可有效避免數(shù)據(jù)的丟失和誤碼。
FLASH在出廠時(shí)會(huì)對(duì)無效塊進(jìn)行檢查,并將信息標(biāo)注在FLASH每一塊的第一頁和第二頁的第1 024個(gè)字,0xFFFF表示塊有效。非0xFFFF則表示無效塊。為避免破壞這些標(biāo)注信息,在對(duì)FLASH進(jìn)行任何擦除或?qū)懭氩僮髑?,要首先建立無效塊信息表。SAMSUNG公司保證其FLASH的第一塊一定是有效塊,并且在對(duì)其擦寫1 000次以內(nèi)不會(huì)出任何錯(cuò)。所以本文使用該塊來保存整片F(xiàn)LASH的無效塊信息。FPGA遍歷訪問FLASH中的每個(gè)塊的第一頁和第二頁,判斷該塊是否滿足有效塊的要求,若不滿足則將其塊地址緩存到FPGA的RAM中;接下來,將FLASH的無效塊數(shù)量和無效塊地址存入該片F(xiàn)LASH的第一塊的第一頁內(nèi)。在FLASH的使用過程中,仍然有可能產(chǎn)生新的無效塊,當(dāng)出現(xiàn)這種情況時(shí),則需要更新無效塊信息表。無效塊信息表用來供讀寫地址產(chǎn)生器查詢時(shí)使用,這樣就可以避開壞塊的影響。
2.3 數(shù)據(jù)寫入管理
圖像數(shù)據(jù)寫入時(shí),F(xiàn)PGA接收來自USB控制器的數(shù)據(jù),并產(chǎn)生控制時(shí)序?qū)?shù)據(jù)寫入FLASH。由于高幀頻相機(jī)一般是多通道輸出,所以在模擬這類相機(jī)的時(shí)候要注意這個(gè)因素。對(duì)于某一幅目標(biāo)圖像,圖像數(shù)據(jù)寫入首先是應(yīng)用程序獲取圖像數(shù)據(jù);然后將各個(gè)通道對(duì)應(yīng)位置的像素?cái)?shù)據(jù)按次序調(diào)整在一起;接著通過USB將數(shù)據(jù)傳輸至FPGA,F(xiàn)PGA將數(shù)據(jù)截?cái)喑? KB大小并依次將各分段數(shù)據(jù)塊寫入8片F(xiàn)LASH中,數(shù)據(jù)分流如圖4所示。圖像數(shù)據(jù)按通道進(jìn)行調(diào)整可以使得系統(tǒng)輕松地實(shí)現(xiàn)多通道輸出。對(duì)數(shù)據(jù)的分流處理,使得系統(tǒng)的8片F(xiàn)LASH在讀出時(shí)可以真正實(shí)現(xiàn)并行讀取數(shù)據(jù)。
FLASH的一頁(page)的大小為2 KB,也是它的基本瀆寫單元。要想連續(xù)寫入2 KB的數(shù)據(jù),需要將訪問FLASH的頁地址都設(shè)為00H。當(dāng)FPGA需要向某一片F(xiàn)LASH寫入數(shù)據(jù)時(shí),首先要查看該片F(xiàn)LASH的FPGA寫入管理模塊是否處于ready狀態(tài);若處于busy狀態(tài),則應(yīng)用程序進(jìn)入傳輸?shù)却?,?dāng)寫入管理進(jìn)入ready狀態(tài)后,則應(yīng)用程序發(fā)送數(shù)據(jù),一共2 KB數(shù)據(jù)緩沖到FLASH在FPGA中對(duì)應(yīng)的RAM;數(shù)據(jù)緩沖完成之后,該FLASH的寫入管理模塊進(jìn)入busy狀態(tài)并開始將RAM中的數(shù)據(jù)寫入FLASH ROM的某一頁(page),同時(shí)FPGA轉(zhuǎn)向?qū)ο乱黄現(xiàn)LASH進(jìn)行傳輸訪問。
2.4 數(shù)據(jù)讀出管理
數(shù)據(jù)讀取輸出是指FPGA模擬CCD相機(jī)輸出時(shí)序,將FLASH中的數(shù)據(jù)通過Camera Link接口進(jìn)行循環(huán)輸出。所選的FLASH的單片最大讀出速率可達(dá)25 MB/s,由于8片F(xiàn)LASH可以并行讀出,所以整個(gè)系統(tǒng)的數(shù)據(jù)讀出率可以達(dá)到200 MB/s。這樣有利于模擬出較高幀頻的CCD相機(jī)輸出。當(dāng)系統(tǒng)進(jìn)行圖像數(shù)據(jù)瀆取輸出時(shí),F(xiàn)PGA中設(shè)置了FIFO來緩沖數(shù)據(jù)。Camera Link輸出管理模塊產(chǎn)生相機(jī)時(shí)序,將FIFO中的數(shù)據(jù)按要求送到Cam era Link接口。對(duì)于從FLASH向FIFO轉(zhuǎn)移數(shù)據(jù),首先將各FLASH中的2 KB數(shù)據(jù)被讀入其在FPGA中對(duì)應(yīng)的RAM中;然后控制各RAM中的數(shù)據(jù)被按順序轉(zhuǎn)移至FIFO中,控制器通過FIFO的數(shù)據(jù)深度來判斷是否需要繼續(xù)讀入數(shù)據(jù),當(dāng)判斷FIFO中的數(shù)據(jù)快滿時(shí)暫停讀取,這時(shí)由于數(shù)據(jù)繼續(xù)被讀出,隨著FIFO中的數(shù)據(jù)減少到一定程度時(shí),啟動(dòng)將RAM中的數(shù)據(jù)繼續(xù)讀入FIFO;一旦一個(gè)RAM中的數(shù)據(jù)被轉(zhuǎn)移,則FLASH讀取管理模塊繼續(xù)將該FLASH中的后續(xù)數(shù)據(jù)寫入該RAM。
在加載某種8位數(shù)據(jù)寬度、雙通道輸出的目標(biāo)圖像時(shí),使用Chipscope得到的Camera Link信號(hào)如圖5所示。其中,strobe為時(shí)鐘信號(hào),dval,lval,fval分別是數(shù)據(jù)有效、行有效、幀有效信號(hào)。觀測結(jié)果說明輸出的數(shù)據(jù)與加載的數(shù)據(jù)保持一致,輸出控制時(shí)序也符合要求。
為了模擬出不同類型的CCD相機(jī),只需要修改FPGA程序中設(shè)定的strobe時(shí)鐘頻率、Line blanking時(shí)間、Frame blanking時(shí)間等必要參數(shù)即可。
3 實(shí)驗(yàn)結(jié)果與分析
系統(tǒng)實(shí)物圖如圖6所示。
為了檢測該信號(hào)發(fā)生器的性能,將其輸出接入圖像采集卡進(jìn)行驗(yàn)證。經(jīng)過試驗(yàn)驗(yàn)證,F(xiàn)LASH ROM中存儲(chǔ)的圖像數(shù)據(jù)與從PC機(jī)載入的數(shù)據(jù)完全一致、控制時(shí)序符合設(shè)計(jì)要求。通過改變Strobe的頻率大小,驗(yàn)證得到Camera Link輸出的像素時(shí)鐘頻率最大可以達(dá)到70 MHz。對(duì)于尺寸為128×128、位寬為8 b的目標(biāo)圖像,在采用40 MHz的Strobe時(shí)鐘進(jìn)行單通道輸出時(shí),幀頻可以達(dá)到1 876 f/s。對(duì)于尺寸為512×512、位寬為8 b的目標(biāo)圖像,當(dāng)Strobe時(shí)鐘為70 MHz,單通道輸出時(shí),幀頻可以達(dá)到252 f/s;雙通道輸出時(shí),幀頻可以達(dá)到476 f/s。該信號(hào)發(fā)生器可以模擬目前大部分波前處理機(jī)所需的信號(hào)源。在進(jìn)行單通道或雙通道輸出時(shí),系統(tǒng)可以充分利用Camera Link接口的輸出能力。但是當(dāng)進(jìn)行更多通道的輸出時(shí),由于受限于FLASH的讀出速率,該系統(tǒng)不能充分應(yīng)用Camera Link接口的輸出能力。對(duì)于這個(gè)缺陷,在對(duì)系統(tǒng)進(jìn)行改進(jìn)時(shí)可以通過使用FLASH ROM和高速大容量RAM共同組成數(shù)據(jù)存儲(chǔ)模塊來解決。
4 結(jié)論
根據(jù)本文介紹的設(shè)計(jì)方案,采用FPGA技術(shù)設(shè)計(jì)的圖像信號(hào)發(fā)生器結(jié)構(gòu)簡單,實(shí)現(xiàn)方便,易于修改。FLASH ROM提供了較高的數(shù)據(jù)讀出速率,支持系統(tǒng)能夠模擬出較高幀頻的CCD相機(jī)輸出。經(jīng)過試驗(yàn)驗(yàn)證,系統(tǒng)工作穩(wěn)定,達(dá)到了設(shè)計(jì)要求。