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