文獻(xiàn)標(biāo)識(shí)碼: A
DOI:10.16157/j.issn.0258-7998.2016.06.017
中文引用格式: 周敬東,,沈飄海,王雷. 基于FPGA的線陣CCD圖像采集與顯示系統(tǒng)設(shè)計(jì)[J].電子技術(shù)應(yīng)用,,2016,,42(6):63-66.
英文引用格式: Zhou Jingdong,Shen Piaohai,,Wang Lei. Design of linear CCD image acquisition and display system based on FPGA[J].Application of Electronic Technique,,2016,42(6):63-66.
0 引言
伴隨著半導(dǎo)體制造工藝的進(jìn)步,,現(xiàn)場可編程門陣列(Field Programmable Gate Array,,FPGA)器件的設(shè)計(jì)技術(shù)也取得飛躍性的發(fā)展[1]。憑借日益豐富的片內(nèi)資源以及固有的并行處理能力,,F(xiàn)PGA的應(yīng)用范圍已經(jīng)超出通信行業(yè),,逐漸擴(kuò)大到數(shù)字信號(hào)處理、硬件加速[2-4],、汽車電子等領(lǐng)域,。色選機(jī)通過對(duì)被測物體的圖像進(jìn)行處理,判斷被測物體是否符合要求,,實(shí)現(xiàn)篩選[5],,其電子系統(tǒng)涉及圖像采集、信號(hào)處理,、圖像顯示,、串口通信等。FPGA可實(shí)現(xiàn)上述功能。與常見的FPGA+ARM/DSP+PC方案相比,,在FPGA內(nèi)實(shí)現(xiàn)圖像采集,、處理與顯示可簡化色選機(jī)系統(tǒng)結(jié)構(gòu),提高經(jīng)濟(jì)性,。本設(shè)計(jì)搭建了實(shí)現(xiàn)圖像采集,、圖像處理與圖像顯示的完整的硬件平臺(tái),完成了圖像采集與圖像顯示的邏輯設(shè)計(jì),,并預(yù)留了充裕的FPGA片內(nèi)資源,,留作圖像處理模塊使用,具有較高的實(shí)用性,。
1 系統(tǒng)設(shè)計(jì)
如圖1所示,,本系統(tǒng)由圖像采集子系統(tǒng)與圖像顯示子系統(tǒng)組成。圖1中大虛線框內(nèi)的各模塊均為FPGA內(nèi)部邏輯設(shè)計(jì)模塊,,細(xì)箭頭表示控制信號(hào)流向,,空心粗箭頭表示圖像信號(hào)流向。采集子系統(tǒng)包括RS232通信芯片,、總線緩沖器,、線陣電荷耦合器件(Charge Coupled Device,CCD)傳感器,、CCD緩沖放大器,、CCD模數(shù)轉(zhuǎn)換器、雙口隨機(jī)存取存儲(chǔ)器(Random-Access Memory,,RAM)模塊和圖像采集模塊,。顯示子系統(tǒng)包括同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器(Synchronous Dynamic Random Access Memory,SDRAM),、視頻解碼芯片,、視頻圖形陣列(Video Graphics Array,VGA)監(jiān)視器,、圖像緩存模塊和圖像顯示模塊,。頂層控制模塊統(tǒng)一控制圖像信號(hào)的采集、緩存與顯示,。下文分別就兩個(gè)子系統(tǒng)進(jìn)行闡述,。
1.1 圖像采集子系統(tǒng)設(shè)計(jì)
圖1中,CCD采用東芝公司生產(chǎn)的TCD2566BFG彩色線陣圖像傳感器,。該型傳感器靈敏度高,,暗電流小,采用兩相5 V時(shí)鐘脈沖驅(qū)動(dòng),,含有3行彩色光電二極管陣列與1行黑白光電二極管陣列,,每行陣列中光電二極管數(shù)量為5 340個(gè)[6],。FPGA采用Altera公司生產(chǎn)的Cyclone III型EP3C5E144C8芯片。該芯片內(nèi)含5 136個(gè)LE,、46個(gè)M9K Block,、23個(gè)乘法器,以及414K片內(nèi)RAM[7],。串口通信芯片為MAXIM公司生產(chǎn)的MAX3232,。
圖像采集模塊完成采集子系統(tǒng)的核心功能——驅(qū)動(dòng)CCD傳感器。該模塊接收外界指令,,配置CCD行頻及每英寸點(diǎn)數(shù)(Dots Per Inch,,DPI),產(chǎn)生CCD時(shí)鐘脈沖與控制信號(hào),。模塊由驅(qū)動(dòng)子模塊,、單口RAM子模塊以及RS232子模塊構(gòu)成。驅(qū)動(dòng)CCD傳感器前,,應(yīng)先在驅(qū)動(dòng)子模塊內(nèi)設(shè)置好CCD的行頻與DPI,。設(shè)置過程如下:單口RAM加載.mif文件進(jìn)行初始化,在不同的地址預(yù)存不同的配置信息,。用戶根據(jù)實(shí)際需要,,通過RS232子模塊,向單口RAM子模塊發(fā)送不同的讀取地址,。讀取出的不同配置信息傳輸至驅(qū)動(dòng)子模塊,,驅(qū)動(dòng)子模塊據(jù)此向CCD傳感器發(fā)送不同頻率的時(shí)鐘脈沖,達(dá)到改變行頻與DPI的目的,。參照CCD技術(shù)手冊(cè),,驅(qū)動(dòng)子模塊還產(chǎn)生CCD傳感器所需的控制信號(hào),經(jīng)過總線緩沖器傳輸給CCD傳感器,,實(shí)現(xiàn)驅(qū)動(dòng),。驅(qū)動(dòng)TCD2566BFG需要10路信號(hào),如圖2所示,。
圖2中,SW1為彩色模式與黑白模式選擇信號(hào),;SW2為時(shí)間延遲積分(Time Delay Integration,,TDI)功能選擇信號(hào);SCG為存儲(chǔ)清除柵(Storage Clear Gate)脈沖信號(hào),;SH為轉(zhuǎn)移柵(Shift Gate)脈沖信號(hào),,其為高電平時(shí),轉(zhuǎn)移柵下勢阱允許MOS電容中的信號(hào)電荷包轉(zhuǎn)移到模擬移位寄存器中,,為低電平時(shí),,二極管進(jìn)入光積分狀態(tài)[8],。時(shí)鐘Φ1A與Φ2A為三行彩色光電二極管陣列的驅(qū)動(dòng)時(shí)鐘,頻率均為35 MHz,,相位差為180°,。時(shí)鐘Φ1B與Φ2B為一行黑白光電二極管陣列的驅(qū)動(dòng)時(shí)鐘,CCD工作在彩色模式時(shí)維持低電平,。Φ1A,、SCG、SH,、RS,、CP可利用計(jì)數(shù)器產(chǎn)生其波形。對(duì)Φ1A取反可得Φ2A,。復(fù)位信號(hào)RS與電平鉗制信號(hào)CP的占空比為1:8,。關(guān)鍵源代碼如下(pixel_counter為140 MHz時(shí)鐘下的18位計(jì)數(shù)器):
always @ ( posedge clk_140m)
begin if (pixel_counter == 18’d0) scg <= 1'b1;
else if (pixel_counter == 18’d424) scg <= 1'b0;//scg高電平維持約3020ns(典型值)
if (pixel_counter == 18’d571) sh <= 1'b1;
else if (pixel_counter == 18’d1000) sh <= 1'b0;
end //sh高電平維持約3 020 ns,落后scg 1 050 ns
always @ ( posedge clk_140m)
begin if (pixel_counter[2:0] == 3'b111) rs <= 1'b1;
else rs <= 1'b0; //rs信號(hào)占空比1:8
if (pixel_counter[2:0]==3'b000) cp <= 1'b1;
else cp <=1'b0;
end //cp信號(hào)占空比1:8,,落后rs約8 ns
assign fai1A = !pixel_counter[1];//Φ1A時(shí)鐘頻率35 MHz
assign fai2A = pixel_counter[1];//與Φ1A時(shí)鐘反相
assign fai1B = 1’b0; assign fai2B = 1’b0;//在彩色模式下,,Φ1B、Φ2B維持低電平
assign sw1=1’b0; assign sw2=1’b0;//關(guān)閉TDI,打開彩色模式
CCD被正常驅(qū)動(dòng)后,,產(chǎn)生的模擬圖像信號(hào),,經(jīng)過緩沖放大器傳輸至CCD專用模數(shù)轉(zhuǎn)換器AD9945。AD9945完成圖像信號(hào)的模數(shù)轉(zhuǎn)換,,并將采集到的一行數(shù)字圖像信號(hào)寫入片內(nèi)雙口RAM中,。至此,采集子系統(tǒng)完成CCD圖像信號(hào)的采集,。
1.2 圖像顯示子系統(tǒng)設(shè)計(jì)
顯示子系統(tǒng)中,,圖像緩存模塊與圖像顯示模塊完成顯示子系統(tǒng)的核心功能,即緩存圖像與顯示圖像,。圖1中,,SDRAM采用Hynix公司生產(chǎn)的HY57V64820HG芯片,位寬8 bit,,內(nèi)含4 個(gè)Bank,,總存儲(chǔ)空間為64 MB,用于緩存雙口RAM輸出的圖像信號(hào)[9],。視頻解碼芯片采用Analog Devices公司生產(chǎn)的ADV7123KSTZ140,,最高數(shù)據(jù)吞吐率為330 MS/s[10],可將數(shù)字圖像信號(hào)轉(zhuǎn)換為VGA標(biāo)準(zhǔn)時(shí)序的模擬圖像信號(hào),。
1.2.1 圖像緩存模塊邏輯設(shè)計(jì)
當(dāng)CCD傳感器工作在300DPI模式下且行頻為3 500 Hz時(shí),,其每秒鐘產(chǎn)生的數(shù)據(jù)量為9.345 MB,小于VGA(1366×768@60Hz)每秒鐘顯示的數(shù)據(jù)量73.764 MB,,因此有必要對(duì)CCD圖像數(shù)據(jù)進(jìn)行緩存,,當(dāng)緩存的圖像數(shù)據(jù)達(dá)到VGA一幀的數(shù)據(jù)量時(shí),,再將數(shù)據(jù)發(fā)送至視頻解碼芯片進(jìn)行顯示。顯然,,F(xiàn)PGA片內(nèi)RAM無法提供足夠的存儲(chǔ)空間,,使用片外SDRAM很有必要。
圖像緩存模塊內(nèi)含圖像裁剪,、片內(nèi)FIFO以及SDRAM控制器3個(gè)子模塊,。
在緩存圖像之前,需要對(duì)圖像信號(hào)進(jìn)行裁剪,,使其符合VGA標(biāo)準(zhǔn)時(shí)序,。TCD2566BFG傳感器工作在300DPI模式下,輸出圖像一行像素點(diǎn)數(shù)量為2 670,,工作在600DPI模式下,,一行像素點(diǎn)數(shù)量則為5 340。對(duì)于1 366×768分辨率的監(jiān)視器,,每行能夠顯示的最大像素點(diǎn)數(shù)量為1 366點(diǎn),。為此,對(duì)雙口RAM輸出的圖像數(shù)據(jù)進(jìn)行了裁剪:即300DPI模式下,,每讀取雙口RAM數(shù)據(jù)一次,,讀取地址遞增2;600DPI模式下,,每讀取一次數(shù)據(jù),,讀取地址遞增4。經(jīng)過裁剪后,,實(shí)際顯示的圖像每行為1 335像素,,在首尾各添加15點(diǎn)空白像素后,圖像信號(hào)符合VGA顯示標(biāo)準(zhǔn)時(shí)序,。采用多監(jiān)視器或高分辨率監(jiān)視器顯示,,也可以解決CCD圖像與監(jiān)視器每行像素點(diǎn)數(shù)量不同的問題。
圖像信號(hào)從雙口RAM輸出的時(shí)鐘頻率是40 MHz,,而SDRAM讀寫數(shù)據(jù)的時(shí)鐘頻率為100 MHz,。因此,在SDRAM控制器兩端各例化一片異步先進(jìn)先出(First In First Out,,F(xiàn)IFO)存儲(chǔ)器,,實(shí)現(xiàn)圖像數(shù)據(jù)的異步讀寫。SDRAM工作在頁讀寫模式,,突發(fā)長度512 B,。讀寫FIFO位寬8 bit,,深度1 024 word,,利用其先入先出與可同時(shí)讀寫的特性,,可實(shí)現(xiàn)一幀圖像的持續(xù)寫入與讀出。圖像緩存模塊的工作流程如圖3所示,。
圖像經(jīng)過裁剪后,,即可傳輸進(jìn)SDRAM內(nèi)。SDRAM正常讀寫數(shù)據(jù)前必須進(jìn)行初始化,,以設(shè)置突發(fā)長度,、列地址控制器(Column Address Strobe,CAS)潛伏期和操作模式,。SDRAM初始化完畢后,,即拉高wrfifo的寫使能。圖像數(shù)據(jù)以40 MHz的頻率從雙口RAM向wrfifo寫入,,直到寫完一幀VGA圖像后才拉低wrfifo寫使能,。當(dāng)wrfifo內(nèi)部數(shù)據(jù)大于512 word(半滿)時(shí),則拉高wrfifo的讀使能,,讀出圖像數(shù)據(jù),,以100 MHz的頻率寫入SDRAM。SDRAM完成一頁(512 B)數(shù)據(jù)的寫入后,,暫時(shí)關(guān)閉wrfifo的讀使能以及SDRAM的寫使能,,當(dāng)wrfifo內(nèi)部數(shù)據(jù)量再次大于512 word時(shí),則再一次讀取數(shù)據(jù),,寫入SDRAM,。重復(fù)該過程,持續(xù)向SDRAM寫入圖像數(shù)據(jù),。SDRAM內(nèi)部寫滿一幀圖像后,,開始讀SDRAM過程。檢測rdfifo內(nèi)部數(shù)據(jù)量,,小于512 word時(shí),,拉高SDRAM讀使能,以100 MHz頻率向rdfifo寫入圖像數(shù)據(jù),。讀完SDRAM內(nèi)一頁數(shù)據(jù)時(shí),,暫時(shí)關(guān)閉SDRAM讀使能以及rdfifo寫使能,等待VGA顯示請(qǐng)求,。收到VGA模塊的顯示請(qǐng)求后,,拉高rdfifo的讀使能,數(shù)據(jù)以85.5 MHz的頻率傳輸至顯示模塊,。憑借FPGA的并行特性,,緩存模塊在每一個(gè)時(shí)鐘上升沿都可檢測rdfifo的內(nèi)部數(shù)據(jù)量。在rdfifo讀出數(shù)據(jù)到VGA過程中,,一旦檢測到rdfifo內(nèi)部數(shù)據(jù)量小于512 word,,即拉高rdfifo的寫使能,,在讀取數(shù)據(jù)的同時(shí),寫入數(shù)據(jù),。上述過程可實(shí)現(xiàn)一幀圖像數(shù)據(jù)的連續(xù)寫入和讀出,。由于系統(tǒng)采用的SDRAM無法同時(shí)進(jìn)行寫和讀兩種操作,因此本文采用了兩片HY57V64820HG進(jìn)行乒乓操作:SDRAM1進(jìn)行讀出操作,,向ADV7123KSTZ140輸出信號(hào)時(shí),,SDRAM2則從雙口RAM寫入數(shù)據(jù);反之亦然,。通過乒乓操作,,實(shí)現(xiàn)了圖像幀與幀之間的連續(xù)傳輸。
1.2.2 圖像顯示模塊邏輯設(shè)計(jì)
VGA是IBM公司于1987年提出的一個(gè)使用模擬信號(hào)的顯示標(biāo)準(zhǔn),。在1 366×768@60 Hz模式下,,掃描一幀圖像需要16.7 ms,其中實(shí)際顯示圖像的時(shí)間為12.3 ms,。圖像掃描過程從左往右,,從上往下。設(shè)置一個(gè)計(jì)數(shù)器記錄掃描的位置,。當(dāng)掃描至一行圖像的左端點(diǎn)時(shí),,則開始將一行圖像信號(hào)傳輸至視頻解碼芯片,掃描至右端點(diǎn)時(shí),,則停止圖像信號(hào)的傳輸,。縱向掃描的原理與此相似,。圖像顯示模塊還生成視頻解碼芯片需要的時(shí)鐘脈沖,、行場同步信號(hào)以及消隱信號(hào)。圖像顯示模塊關(guān)鍵源代碼如下:
always @ (posedge clk )//時(shí)鐘頻率為88.5 MHz
begin if (hcnt < H_TOTAL - 1'b1) hcnt <= hcnt + 1'b1;
else hcnt <= 11'd0;
end//H_TOTAL = 1792,,hcnt循環(huán)計(jì)數(shù)0~1791
assign lcd_hs = (hcnt <= H_SYNC - 1'b1) ? 1'b1 : 1'b0;//H_SYNC =143,,lcd_hs為行同步信號(hào)
always @ (posedge clk )
begin if(hcnt == H_TOTAL - 1'b1)
begin if(vcnt < V_TOTAL - 1'b1) vcnt <= vcnt + 1'b1;
else vcnt <= 11'd0; end
end// V_TOTAL = 798,vcnt循環(huán)計(jì)數(shù)0~797
assign lcd_vs = (vcnt <= V_SYNC - 1'b1) ? 1'b1 : 1'b0;//V_SYNC=3,,lcd_vs為場同步號(hào)維持3 行像素時(shí)間的高電平
assign lcd_blank = lcd_hs & lcd_vs;//lcd_blank為消隱信號(hào)
assign lcd_en = (hcnt >= H_SYNC + H_BACK
&& hcnt < H_SYNC + H_BACK + 11’d1366)
&& (vcnt >= V_SYNC + V_BACK&& vcnt < V_SYNC + V_BACK +11’d768 ) ? 1'b1 : 1'b0;//掃描至實(shí)際顯示區(qū)域
assign lcd_rgb = lcd_en ? lcd_data : 8'h00;//掃描至實(shí)際顯示區(qū)域?qū)D像數(shù)據(jù)送出
2 軟硬件綜合調(diào)試
利用FPGA集成開發(fā)環(huán)境QuartusII 11.0軟件自帶的Signal Tap工具,,可以檢測FPGA內(nèi)部信號(hào)的真實(shí)值。將邏輯設(shè)計(jì)的頂層模塊文件在QuartusII 11.0軟件中全編譯,,生成.sof文件,,利用JTAG接口將文件燒錄進(jìn)FPGA在線調(diào)試。驅(qū)動(dòng)模塊輸出的驅(qū)動(dòng)信號(hào)以及雙口RAM輸入的數(shù)字圖像信號(hào)如圖4所示,。對(duì)比技術(shù)手冊(cè)時(shí)序圖,,Signal Tap抓取的信號(hào)表明,驅(qū)動(dòng)線陣CCD所需的10路信號(hào)被正確地產(chǎn)生了。結(jié)果如圖4中的DATA_R,、DATA_G,、DATA_B信號(hào)所示,F(xiàn)PGA成功接收到了由線陣CCD產(chǎn)生的數(shù)字圖像信號(hào),。圖像采集子系統(tǒng)完成了設(shè)計(jì)目標(biāo)。圖像在監(jiān)視器上顯示結(jié)果如圖5所示,。線陣CCD傳感器需以特定速度掃描被測物體才能得到二維圖像,。測試中,被測物體油茶果勻速通過CCD傳感器下方,,CCD傳感器保持固定,。顯示設(shè)備為通用即插即用監(jiān)視器,分辨率1 366×768,。顯示畫面穩(wěn)定,,無失幀,無噪點(diǎn),。
3 結(jié)論
Signal Tap抓取的信號(hào)波形和監(jiān)視器顯示的畫面表明系統(tǒng)基本上實(shí)現(xiàn)了設(shè)計(jì)目標(biāo),,即使用FPGA芯片完成CCD圖像信號(hào)的采集和顯示,證明了系統(tǒng)軟硬件設(shè)計(jì)的正確性,。全編譯結(jié)果顯示,,F(xiàn)PGA內(nèi)部LE只使用了44%。利用剩余的資源,,可以對(duì)圖像信號(hào)進(jìn)行圖像處理,,處理結(jié)果通過串口傳輸至篩選執(zhí)行機(jī)構(gòu),執(zhí)行篩選動(dòng)作,。配合不同的CCD傳感器,,該系統(tǒng)可廣泛應(yīng)用于安檢、醫(yī)療影像,、遙感測繪等領(lǐng)域,,具有較高的實(shí)用價(jià)值。
參考文獻(xiàn)
[1] 楊海鋼,,孫嘉斌,,王慰.FPGA器件設(shè)計(jì)技術(shù)發(fā)展綜述[J].電子與信息學(xué)報(bào),2010,,32(3):714-727.
[2] RUBIN G,,OMIELJANOWICZ M,PETROVSKY A.Reconfigurable FPGA-based hardware accelerator for embedded DSP[C].14th International Conference on Mixed Design of Integrated Circuits and Systems,,2007:147-151.
[3] POSSA P,,SCHAILLIE D,VALDERRAMA C.FPGA-based hardware acceleration:A CPU/accelerator interface exploration[C].Electronics Circuits and Systems(ICECS),2011 18th IEEE International Conference on.IEEE,,2011:374-377.
[4] ZARIFI T,,MALEK M.FPGA implementation of image processing technique for blood samples characterization[J].Computers & Electrical Engineering,2014,,40(5):1750-1757.
[5] 溫強(qiáng),,胡明明,桑楠.基于彩色線陣CDD的大米色選算法[J].農(nóng)業(yè)機(jī)械學(xué)報(bào),,2008,,39(10):105-108.
[6] TOSHIBA.TCD2566BFG[Z].2012.
[7] ALTERA.Cyclone III Device Handbook[Z].2011.
[8] 王慶有.CCD應(yīng)用技術(shù)[M].天津:天津大學(xué)出版社,2000.
[9] HYNIX. HY57V64820HG[Z].2002.
[10] ANALOG DEVICES. ADV7123[Z].2010.