《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 設(shè)計應(yīng)用 > 基于FPGA高速圖像數(shù)據(jù)的存儲及顯示設(shè)計
基于FPGA高速圖像數(shù)據(jù)的存儲及顯示設(shè)計
2014年電子技術(shù)應(yīng)用第11期
郭柳柳1,甄國涌1,劉東海2
(1.中北大學(xué) 電子測試技術(shù)國家重點(diǎn)實(shí)驗(yàn)室,山西 太原030051; 2.太原市華納方盛科技有限公司,山西 太原030051)
摘要: 設(shè)計了一種基于FPGA控制Nand Flash陣列實(shí)現(xiàn)高速流水線式存儲的方案。設(shè)計利用FPGA作為主控制器,通過CameraLink輸入通信接口將圖像數(shù)據(jù)經(jīng)過一/二級緩存寫入Flash存儲陣列中,并采用DMA傳輸技術(shù)將存儲后的圖像數(shù)據(jù)上傳至計算機(jī)硬盤中作進(jìn)一步處理;同時,利用SDRAM顯存實(shí)時刷新數(shù)據(jù),F(xiàn)PGA構(gòu)造相應(yīng)的VGA信號,最終實(shí)現(xiàn)100 MB/s圖像數(shù)據(jù)的實(shí)時顯示。
中圖分類號: TP274
文獻(xiàn)標(biāo)識碼: A
文章編號: 0258-7998(2014)11-0075-03
High-speed image data storage and display based on FPGA
Guo Liuliu1,Zhen Guoyong1,Liu Donghai2
1.National Key Laboratory for Electronic Measurement Technology,North University of China,Taiyuan 030051,China;2.Taiyuanshi Huana Fangsheng Technology Co.,Ltd.,Taiyuan 030051,China
Abstract: This paper uses FPGA to control NAND Flash array to achieve high-speed pipelined storage. This design adoptes FPGA as main controller to write image data into the Flash storage arrays through first/second butter,and uses DMA technology to upload image-data to computer hard disk for further processing. SDRAM is utilized to refresh data in real time and FPGA is used to construct corresponding VGA signal to realize 100 MB/s image data real-time display.
Key words : high-speed storage;real-time display;Flash;FPGA;DMA;DRAM

0 引言

  隨著數(shù)據(jù)存儲設(shè)備被廣泛應(yīng)用于航空航天系統(tǒng)、醫(yī)療衛(wèi)生、工業(yè)自動化等各行各業(yè),對于圖像設(shè)備采集的控制及實(shí)時大容量高速存儲要求也越來越高。本文以Micron Flash為存儲介質(zhì),通過FPGA控制實(shí)現(xiàn)Camera Link高速接口通信,傳輸速率可達(dá)到100 MB/s,并設(shè)計高速數(shù)據(jù)的流水線式存儲方式,實(shí)現(xiàn)大容量高速圖像存儲與實(shí)時顯示。

1 總體設(shè)計


001.jpg

  設(shè)計的實(shí)現(xiàn)過程如圖1所示,上位機(jī)通過PCI總線下發(fā)圖像數(shù)據(jù)并將數(shù)據(jù)保存在Flash存儲陣列A中;上位機(jī)指令下發(fā)后,F(xiàn)PGA控制Flash A讀出存儲的數(shù)據(jù)并通過CameraLink1輸出接口發(fā)送至信息處理器;待信息處理器處理完數(shù)據(jù),再通過CameraLink輸入接口2將數(shù)據(jù)寫入到SDRAM顯存和Flash存儲陣列B中,使能VGA顯示后,顯示控制循環(huán)讀取SDRAM中的圖像數(shù)據(jù)進(jìn)行顯示;最后,上位機(jī)通過DMA傳輸將Flash陣列B中保存的數(shù)據(jù)快速上傳至上位機(jī)中以作后續(xù)處理。

2 高速數(shù)據(jù)存儲管理設(shè)計

  2.1 Nand Flash

  高速存儲陣列A/B單元的設(shè)計是分別以4片Micron Nand Flash芯片作為存儲介質(zhì),通過FPGA完成Flash芯片讀寫時序的控制[1]。Micron Flash MT29F128G08AJAAA內(nèi)部含有兩個CE使能端,每個使能各控制兩個相互獨(dú)立的LUN(4 GB),總?cè)萘繛?6 GB。為便于地址管理,提高數(shù)據(jù)處理速率,單片MT29F128G08AJAAA內(nèi)部塊操作順序?yàn)?CE1)LUN0、(CE1)LUN1、(CE2)LUN0、(CE2)LUN1,當(dāng)無效塊檢測模塊檢測到壞塊時,當(dāng)前每行4塊均認(rèn)為是無效塊,不對其進(jìn)行操作。

002.jpg

  由于Flash芯片每次頁編程都需要350 s~560 s的頁編程時間,在此期間,不能對當(dāng)前模塊進(jìn)行操作,這嚴(yán)重制約著持續(xù)的數(shù)據(jù)寫入。由此可充分利用每個LUN相互獨(dú)立操作、互不影響的特點(diǎn),采用流水線操作方式來復(fù)用編程時間,即當(dāng)前LUN進(jìn)入頁編程操作時,可以對剩下的3個LUN進(jìn)行寫入頁寄存器操作,從而提高數(shù)據(jù)吞吐量[2]。假設(shè)Flash的讀寫周期為20 ns,將數(shù)據(jù)寫入到頁寄存器所需的時間為:8 192×20 ns=163.84 s,考慮端口復(fù)用寫入的地址、命令等時間約為10 s,因此對于單片F(xiàn)lash而言,連續(xù)寫完4個LUN共需時間為:4×(163.84+10) s=695.36 s,完成一次32 KB數(shù)據(jù)寫入所需總時間最多為695.36 s+560 s=1 255.36 ,即可粗略計算出單片F(xiàn)lash的平均寫入速率:32 KB/(1 024×1 255.36 s)=24.9 MB/s。該情況未考慮到第4個LUN寫完后,LUN1已經(jīng)完成了頁編程操作,可繼續(xù)寫入,也就是說其持續(xù)的寫入速度大于24.9 MB/s。

  2.2 高速數(shù)據(jù)的存儲

  存儲器存儲的數(shù)據(jù)來源可分為兩類:一類是Camera-

  Link2接口輸入的高速圖像數(shù)據(jù),另一類是上位機(jī)通過PCI總線下發(fā)的圖像數(shù)據(jù)。兩類數(shù)據(jù)的存儲方式相同,PCI下發(fā)數(shù)據(jù)速率小于CameraLink2接口輸入的圖像數(shù)據(jù)速率,時序上只需要保證CameraLink2輸入的數(shù)據(jù)能寫入到Flash B即可滿足需求。

  FPGA內(nèi)部采用兩級緩存結(jié)構(gòu),通過流水線的操作方式實(shí)現(xiàn)100 MB/s 圖像數(shù)據(jù)的可靠存儲[3]。前一級采用一個16 KB大小FIFO構(gòu)成的緩存,F(xiàn)IFO為16位,輸入時鐘為50 MHz;第二級緩存由4個8 KB的雙口RAM組成,輸入時鐘60 MHz,如圖2所示為緩存控制模塊圖。當(dāng)一/二級緩存切換模塊通過flag標(biāo)志判斷16 KB FIFO滿足已寫入2 000個字,f_adr地址開始累加并以60 MB/s速度從16 KB FIFO連續(xù)取出4 096個字,將數(shù)據(jù)賦給f_din,并模擬產(chǎn)生60 MHz的8 KB RAM寫時鐘f_clk。而每取完一次4 096個字?jǐn)?shù)據(jù)量,f_fifo_adr清零,數(shù)據(jù)切換標(biāo)志sw_flag自加1。數(shù)據(jù)流的方向就是通過sw_flag控制的,當(dāng)sw_flag為00,01,10,11時,分別將f_din、f_clk、f_adr賦給1_ram 8 kB、2_ram 8 kB、3_ram 8 kB、4_ram 8 kB這4個ram二級緩存。當(dāng)Flash控制模塊判斷取數(shù)標(biāo)志1_start~4_start其中之一大于100時,主控制模塊控制對應(yīng)的Flash進(jìn)入寫操作。

003.jpg

  由于一級緩存寫入速度50 MB/s,讀數(shù)速度60 MB/s,寫速度小于讀速度,不用當(dāng)心溢出問題??紤]到取數(shù)據(jù)連續(xù)性,避免讀空現(xiàn)象出現(xiàn),合理地選取取數(shù)判斷標(biāo)志的大小是關(guān)鍵,而判斷標(biāo)志的大小取決于連續(xù)取數(shù)的數(shù)量大小及寫/讀數(shù)速度。假設(shè)數(shù)據(jù)取空時經(jīng)歷時間為t,取數(shù)判斷標(biāo)志大小為flag,則由公式50t+flag-60t=0可知flag=10t。為滿足連續(xù)取出4 096個字,故t要大于4 096/60=68.26 s,即flag滿足大于682.6就可以避免取空現(xiàn)象,考慮留取一定的裕量,選取flag為2 000。同理,當(dāng)flash1從ram8 kB取數(shù)時,由于取數(shù)速度50 MB/s小于寫數(shù)速度60 MB/s,有可能出現(xiàn)溢出現(xiàn)象,通過1_start標(biāo)志判斷1_ram 8 kB滿足大于100,F(xiàn)lash1控制模塊連續(xù)從ram 8 kB中取走4 096字。為保證數(shù)據(jù)可靠高效的連續(xù)性傳輸,一/二級緩存數(shù)據(jù)切換的有序配合顯得尤為重要,如圖3所示為數(shù)據(jù)切換時序圖,從16 KB FIFO到ram數(shù)據(jù)傳輸過程為:當(dāng)16 KB FIFO取數(shù)判斷標(biāo)志大于2 000時,從16 KB FIFO以60 MB/s速度連續(xù)取出4 096數(shù)據(jù)存入1_ram 8 kB,需時68.26 s,ram平均取數(shù)速度取決于16 KB FIFO寫入速度(為50 MB/s,即81.92 s),在ram取數(shù)的過程中16 KB FIFO經(jīng)過81.92 ?滋s之后已經(jīng)再次寫入4 096個數(shù)據(jù),16 KB FIFO剩余4 096+

  2 000-4 096=2 000個數(shù)據(jù)量滿足取數(shù)要求,此時sw_flag自加1指向2_ram 8 kB,以此類推,4個ram循環(huán)地寫入數(shù)據(jù)。同理,在ram寫入數(shù)據(jù)的過程中,F(xiàn)lash1控制模塊判斷ram1取數(shù)標(biāo)志滿足100時,連續(xù)取出4 096個字,當(dāng)Flash1取走ram1中4 096個數(shù)據(jù)時,ram2已經(jīng)滿足取數(shù)標(biāo)志,F(xiàn)lash2開始從ram2中連續(xù)取出4 096個字,以此類推,F(xiàn)lash控制單元連續(xù)讀取4 096字寫入到Flash中進(jìn)行頁編程操作,這樣就可實(shí)現(xiàn)連續(xù)的100 MB/s數(shù)據(jù)寫入。

  2.3 圖像數(shù)據(jù)的發(fā)送

  從PCI總線下發(fā)存入Flash A的圖像數(shù)據(jù)通過CameraLink1輸出接口發(fā)送至信息處理器,從Flash取數(shù)的過程和寫數(shù)的方式類似。設(shè)置4個8 KB的ram緩存,當(dāng)接收到開始下發(fā)圖像指令后,F(xiàn)PGA控制4片F(xiàn)lash完成一次頁讀取操作,并將數(shù)據(jù)保存在8 KB緩存中,然后以60 MB/s的時鐘讀取緩存1中的數(shù)據(jù)存入16 KB FIFO。當(dāng)讀完緩存1中的8 192 B數(shù)據(jù)后,依次讀取緩存2、3、4中保存的數(shù)據(jù),同時以50 MB/s的時鐘讀取Flash中下一頁的數(shù)據(jù)。Flash以50 MB/s時鐘完成一次雙平面讀數(shù)過程所需時間為25 ns+8 192×20 ns+30×20 ns(命令、地址下發(fā)時間)=164 885 ns。以100 MB/s的速度讀取32 KB數(shù)據(jù)所需的時間為32×1 024×10 ns=327 680 ns>164 885 ns,也就是說在讀完剩下的3個緩存中的數(shù)據(jù)時候,第一個Flash已完成了一頁數(shù)據(jù)的讀取,并將數(shù)據(jù)存放在緩存1中。因此通過循環(huán)讀取4個緩存中的數(shù)據(jù),即可實(shí)現(xiàn)持續(xù)的100 MB速度發(fā)送圖像數(shù)據(jù)。

3 圖像的實(shí)時顯示

  3.1 VGA時序信號產(chǎn)生

  設(shè)計VGA圖像顯示控制需要注意時序的驅(qū)動,這是完成設(shè)計的關(guān)鍵,時序稍有偏差顯示必然不正常甚至?xí)p壞顯示器[4]。如表1所示為1 280×1 024×60 Hz圖像顯示控制各階段時鐘點(diǎn)數(shù),圖像時鐘頻率為108 MHz,其中Hsync信號用來控制“列填充”,可以分為a~d 4個階段,其中c段1 280點(diǎn)為有效顯示區(qū),a段由112個點(diǎn)組成的同步信號負(fù)脈沖以及兩段行消隱期;Vsync信號用來控制“行掃描”,同樣也分為o~r 4個階段,其中q段1 024行為圖像顯示行,o段3個時鐘為場同步信號負(fù)脈沖以及兩段場消隱期[5-6]。

004.jpg

  對于行同步信號,每行實(shí)際像素數(shù)為1 688,故行同步信號頻率為108 MHz/1 688=63.98 kHz,同理,場同步信號頻率為60.02 Hz[7]。如圖4所示為行/場掃描時序,結(jié)合圖4和表1,可以利用FPGA資源構(gòu)建VGA時序。選取108 MHz的晶振作為脈沖計數(shù)器時鐘,當(dāng)像素脈沖計數(shù)在小于112脈沖間,Hsync輸出低電平,其他時段輸出高電平。同時,當(dāng)像素脈沖計數(shù)小于3時,Vsync輸出低電平,其他時段輸出高電平,對行場同步為低電平的標(biāo)準(zhǔn),SYNC設(shè)計為Hsync和Vsync相與的結(jié)果,BLANK信號可做的比SYNC略寬一些。

  3.2 顯示控制設(shè)計

  如圖1所示,設(shè)計中采用高速SDRAM實(shí)現(xiàn)對圖像數(shù)據(jù)的高速緩存,從CameraLink接收的圖像數(shù)據(jù)分別存入兩個緩存,一個用于高速存儲于Flash B陣列中,另一個暫存在SDRAM中,用于實(shí)時顯示圖像。CameraLink接收的圖像數(shù)據(jù)以50 MHz×16 bit的速度存入FIFO1緩存中,當(dāng)判斷FIFO1緩存數(shù)據(jù)量大于1 280個字時,F(xiàn)PGA控制SDRAM模塊以100 MHz×16 bit的速度從FIFO中取出數(shù)據(jù)存入SDRAM。當(dāng)接收實(shí)時顯示圖像命令時,SDRAM以165 MB/s速度更新FIFO2中數(shù)據(jù),VGA接口以108 MHz速度循環(huán)讀取SDRAM中所存儲的圖像數(shù)據(jù),對顯示器的顯示內(nèi)容進(jìn)行更新。由于SDRAM寫入1 280個字所需時間為12.8 ?滋s,考慮到SDRAM讀寫操作分時進(jìn)行,為保證SDRAM在寫數(shù)期間FIFO2數(shù)據(jù)不會被讀空,F(xiàn)IFO2每次讀取1 080字,所需時間20 s,滿足SDRAM讀寫轉(zhuǎn)換及刷新時間,同時VGA顯示能以108 MHz速度持續(xù)從緩存中讀取數(shù)據(jù)并顯示[8]。

4 測試結(jié)果與結(jié)論


005.jpg

  試驗(yàn)結(jié)果如圖5所示,采用圖像模擬器發(fā)送一幅1 280×1 024灰度圖像的方式對圖像存儲顯示的設(shè)計進(jìn)行驗(yàn)證,并通過DMA方式讀取存儲在Flash B陣列中的圖像數(shù)據(jù)至上位機(jī)中進(jìn)行畫圖分析。試驗(yàn)結(jié)果表明,高速圖像存儲卡能實(shí)時顯示圖像,且經(jīng)過回讀數(shù)據(jù)分析,完整地保存下高速輸入的圖像數(shù)據(jù)。利用FPGA控制整個系統(tǒng)的工作時序,通過在內(nèi)部設(shè)置多級緩存結(jié)構(gòu)和流水線操作思想,實(shí)現(xiàn)了圖像數(shù)據(jù)在不同時鐘域之間的轉(zhuǎn)換,完成了高速圖像數(shù)據(jù)的存儲與實(shí)時顯示功能。本設(shè)計可實(shí)現(xiàn)持續(xù)的100 MB/s數(shù)據(jù)的實(shí)時存儲,滿足大多數(shù)光電設(shè)備中CameraLink數(shù)據(jù)的實(shí)時存儲要求。

參考文獻(xiàn)

  [1] 楊柯,范海震.CameraLink接口的高速電子存儲系統(tǒng)設(shè)計[J].艦船電子工程,2012,32(5):110-118.

  [2] 王熙.一個面向航空遙感高速的閃存存儲系統(tǒng)設(shè)計[D].合肥:中國科學(xué)技術(shù)大學(xué),2012.

  [3] 張海龍,馬鐵華,謝銳,等.基于雙閃存的大容量沖擊波超壓測試系統(tǒng)[J].電子技術(shù)應(yīng)用,2013,39(11):85-88.

  [4] 鄭佃好,張紅雨,張洪斌.基于ADV7125的嵌入式系統(tǒng)VGA接口設(shè)計[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2011,11(8):37-41.

  [5] 鄧春健,王琦,徐秀知,等.基于FPGA和ADV7123的VGA顯示接口的設(shè)計和應(yīng)用[J].電子器件,2006,29(4):37-41.

  [6] 廖永清,丁旭昌,付建國,等.基于FPGA的VGA圖像動態(tài)顯示控制器的設(shè)計與實(shí)現(xiàn)[J].電視技術(shù),2011,35(17):52-54.

  [7] 王亮,李正,寧婷婷,等.VGA漢字顯示的FPGA設(shè)計與實(shí)現(xiàn)[J].計算機(jī)工程與設(shè)計,2009,30(2):275-281.

  [8] 周卓然,徐道連,呂鳳飛,等.基于FPGA的VGA圖像顯示系統(tǒng)的設(shè)計與實(shí)現(xiàn)[J].儀表技術(shù)與傳感器,2012(7):90-92.


此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。