文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2014)11-0075-03
0 引言
隨著數(shù)據(jù)存儲(chǔ)設(shè)備被廣泛應(yīng)用于航空航天系統(tǒng),、醫(yī)療衛(wèi)生、工業(yè)自動(dòng)化等各行各業(yè),,對(duì)于圖像設(shè)備采集的控制及實(shí)時(shí)大容量高速存儲(chǔ)要求也越來越高,。本文以Micron Flash為存儲(chǔ)介質(zhì),通過FPGA控制實(shí)現(xiàn)Camera Link高速接口通信,,傳輸速率可達(dá)到100 MB/s,,并設(shè)計(jì)高速數(shù)據(jù)的流水線式存儲(chǔ)方式,實(shí)現(xiàn)大容量高速圖像存儲(chǔ)與實(shí)時(shí)顯示,。
1 總體設(shè)計(jì)
設(shè)計(jì)的實(shí)現(xiàn)過程如圖1所示,,上位機(jī)通過PCI總線下發(fā)圖像數(shù)據(jù)并將數(shù)據(jù)保存在Flash存儲(chǔ)陣列A中;上位機(jī)指令下發(fā)后,,F(xiàn)PGA控制Flash A讀出存儲(chǔ)的數(shù)據(jù)并通過CameraLink1輸出接口發(fā)送至信息處理器,;待信息處理器處理完數(shù)據(jù),再通過CameraLink輸入接口2將數(shù)據(jù)寫入到SDRAM顯存和Flash存儲(chǔ)陣列B中,,使能VGA顯示后,,顯示控制循環(huán)讀取SDRAM中的圖像數(shù)據(jù)進(jìn)行顯示,;最后,上位機(jī)通過DMA傳輸將Flash陣列B中保存的數(shù)據(jù)快速上傳至上位機(jī)中以作后續(xù)處理,。
2 高速數(shù)據(jù)存儲(chǔ)管理設(shè)計(jì)
2.1 Nand Flash
高速存儲(chǔ)陣列A/B單元的設(shè)計(jì)是分別以4片Micron Nand Flash芯片作為存儲(chǔ)介質(zhì),,通過FPGA完成Flash芯片讀寫時(shí)序的控制[1]。Micron Flash MT29F128G08AJAAA內(nèi)部含有兩個(gè)CE使能端,,每個(gè)使能各控制兩個(gè)相互獨(dú)立的LUN(4 GB),,總?cè)萘繛?6 GB。為便于地址管理,,提高數(shù)據(jù)處理速率,,單片MT29F128G08AJAAA內(nèi)部塊操作順序?yàn)?CE1)LUN0、(CE1)LUN1,、(CE2)LUN0,、(CE2)LUN1,當(dāng)無效塊檢測模塊檢測到壞塊時(shí),,當(dāng)前每行4塊均認(rèn)為是無效塊,,不對(duì)其進(jìn)行操作。
由于Flash芯片每次頁編程都需要350 s~560 s的頁編程時(shí)間,,在此期間,,不能對(duì)當(dāng)前模塊進(jìn)行操作,這嚴(yán)重制約著持續(xù)的數(shù)據(jù)寫入,。由此可充分利用每個(gè)LUN相互獨(dú)立操作,、互不影響的特點(diǎn),采用流水線操作方式來復(fù)用編程時(shí)間,,即當(dāng)前LUN進(jìn)入頁編程操作時(shí),,可以對(duì)剩下的3個(gè)LUN進(jìn)行寫入頁寄存器操作,從而提高數(shù)據(jù)吞吐量[2],。假設(shè)Flash的讀寫周期為20 ns,,將數(shù)據(jù)寫入到頁寄存器所需的時(shí)間為:8 192×20 ns=163.84 s,考慮端口復(fù)用寫入的地址,、命令等時(shí)間約為10 s,,因此對(duì)于單片F(xiàn)lash而言,連續(xù)寫完4個(gè)LUN共需時(shí)間為:4×(163.84+10) s=695.36 s,,完成一次32 KB數(shù)據(jù)寫入所需總時(shí)間最多為695.36 s+560 s=1 255.36 ,,即可粗略計(jì)算出單片F(xiàn)lash的平均寫入速率:32 KB/(1 024×1 255.36 s)=24.9 MB/s。該情況未考慮到第4個(gè)LUN寫完后,,LUN1已經(jīng)完成了頁編程操作,,可繼續(xù)寫入,也就是說其持續(xù)的寫入速度大于24.9 MB/s,。
2.2 高速數(shù)據(jù)的存儲(chǔ)
存儲(chǔ)器存儲(chǔ)的數(shù)據(jù)來源可分為兩類:一類是Camera-
Link2接口輸入的高速圖像數(shù)據(jù),,另一類是上位機(jī)通過PCI總線下發(fā)的圖像數(shù)據(jù),。兩類數(shù)據(jù)的存儲(chǔ)方式相同,PCI下發(fā)數(shù)據(jù)速率小于CameraLink2接口輸入的圖像數(shù)據(jù)速率,,時(shí)序上只需要保證CameraLink2輸入的數(shù)據(jù)能寫入到Flash B即可滿足需求,。
FPGA內(nèi)部采用兩級(jí)緩存結(jié)構(gòu),,通過流水線的操作方式實(shí)現(xiàn)100 MB/s 圖像數(shù)據(jù)的可靠存儲(chǔ)[3],。前一級(jí)采用一個(gè)16 KB大小FIFO構(gòu)成的緩存,F(xiàn)IFO為16位,,輸入時(shí)鐘為50 MHz,;第二級(jí)緩存由4個(gè)8 KB的雙口RAM組成,輸入時(shí)鐘60 MHz,,如圖2所示為緩存控制模塊圖,。當(dāng)一/二級(jí)緩存切換模塊通過flag標(biāo)志判斷16 KB FIFO滿足已寫入2 000個(gè)字,f_adr地址開始累加并以60 MB/s速度從16 KB FIFO連續(xù)取出4 096個(gè)字,,將數(shù)據(jù)賦給f_din,,并模擬產(chǎn)生60 MHz的8 KB RAM寫時(shí)鐘f_clk。而每取完一次4 096個(gè)字?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時(shí),,分別將f_din、f_clk,、f_adr賦給1_ram 8 kB,、2_ram 8 kB、3_ram 8 kB,、4_ram 8 kB這4個(gè)ram二級(jí)緩存,。當(dāng)Flash控制模塊判斷取數(shù)標(biāo)志1_start~4_start其中之一大于100時(shí),主控制模塊控制對(duì)應(yīng)的Flash進(jìn)入寫操作,。
由于一級(jí)緩存寫入速度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ù)取空時(shí)經(jīng)歷時(shí)間為t,,取數(shù)判斷標(biāo)志大小為flag,,則由公式50t+flag-60t=0可知flag=10t。為滿足連續(xù)取出4 096個(gè)字,,故t要大于4 096/60=68.26 s,,即flag滿足大于682.6就可以避免取空現(xiàn)象,考慮留取一定的裕量,,選取flag為2 000,。同理,當(dāng)flash1從ram8 kB取數(shù)時(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ù)性傳輸,一/二級(jí)緩存數(shù)據(jù)切換的有序配合顯得尤為重要,,如圖3所示為數(shù)據(jù)切換時(shí)序圖,,從16 KB FIFO到ram數(shù)據(jù)傳輸過程為:當(dāng)16 KB FIFO取數(shù)判斷標(biāo)志大于2 000時(shí),從16 KB FIFO以60 MB/s速度連續(xù)取出4 096數(shù)據(jù)存入1_ram 8 kB,,需時(shí)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個(gè)數(shù)據(jù),,16 KB FIFO剩余4 096+
2 000-4 096=2 000個(gè)數(shù)據(jù)量滿足取數(shù)要求,此時(shí)sw_flag自加1指向2_ram 8 kB,,以此類推,,4個(gè)ram循環(huán)地寫入數(shù)據(jù)。同理,,在ram寫入數(shù)據(jù)的過程中,,F(xiàn)lash1控制模塊判斷ram1取數(shù)標(biāo)志滿足100時(shí),連續(xù)取出4 096個(gè)字,,當(dāng)Flash1取走ram1中4 096個(gè)數(shù)據(jù)時(shí),,ram2已經(jīng)滿足取數(shù)標(biāo)志,F(xiàn)lash2開始從ram2中連續(xù)取出4 096個(gè)字,,以此類推,,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個(gè)8 KB的ram緩存,,當(dāng)接收到開始下發(fā)圖像指令后,F(xiàn)PGA控制4片F(xiàn)lash完成一次頁讀取操作,,并將數(shù)據(jù)保存在8 KB緩存中,然后以60 MB/s的時(shí)鐘讀取緩存1中的數(shù)據(jù)存入16 KB FIFO,。當(dāng)讀完緩存1中的8 192 B數(shù)據(jù)后,依次讀取緩存2,、3,、4中保存的數(shù)據(jù),同時(shí)以50 MB/s的時(shí)鐘讀取Flash中下一頁的數(shù)據(jù),。Flash以50 MB/s時(shí)鐘完成一次雙平面讀數(shù)過程所需時(shí)間為25 ns+8 192×20 ns+30×20 ns(命令,、地址下發(fā)時(shí)間)=164 885 ns。以100 MB/s的速度讀取32 KB數(shù)據(jù)所需的時(shí)間為32×1 024×10 ns=327 680 ns>164 885 ns,,也就是說在讀完剩下的3個(gè)緩存中的數(shù)據(jù)時(shí)候,第一個(gè)Flash已完成了一頁數(shù)據(jù)的讀取,,并將數(shù)據(jù)存放在緩存1中,。因此通過循環(huán)讀取4個(gè)緩存中的數(shù)據(jù),即可實(shí)現(xiàn)持續(xù)的100 MB速度發(fā)送圖像數(shù)據(jù),。
3 圖像的實(shí)時(shí)顯示
3.1 VGA時(shí)序信號(hào)產(chǎn)生
設(shè)計(jì)VGA圖像顯示控制需要注意時(shí)序的驅(qū)動(dòng),這是完成設(shè)計(jì)的關(guān)鍵,時(shí)序稍有偏差顯示必然不正常甚至?xí)p壞顯示器[4],。如表1所示為1 280×1 024×60 Hz圖像顯示控制各階段時(shí)鐘點(diǎn)數(shù),圖像時(shí)鐘頻率為108 MHz,,其中Hsync信號(hào)用來控制“列填充”,,可以分為a~d 4個(gè)階段,其中c段1 280點(diǎn)為有效顯示區(qū),a段由112個(gè)點(diǎn)組成的同步信號(hào)負(fù)脈沖以及兩段行消隱期,;Vsync信號(hào)用來控制“行掃描”,,同樣也分為o~r 4個(gè)階段,其中q段1 024行為圖像顯示行,,o段3個(gè)時(shí)鐘為場同步信號(hào)負(fù)脈沖以及兩段場消隱期[5-6],。
對(duì)于行同步信號(hào),每行實(shí)際像素?cái)?shù)為1 688,,故行同步信號(hào)頻率為108 MHz/1 688=63.98 kHz,同理,,場同步信號(hào)頻率為60.02 Hz[7]。如圖4所示為行/場掃描時(shí)序,,結(jié)合圖4和表1,,可以利用FPGA資源構(gòu)建VGA時(shí)序。選取108 MHz的晶振作為脈沖計(jì)數(shù)器時(shí)鐘,,當(dāng)像素脈沖計(jì)數(shù)在小于112脈沖間,,Hsync輸出低電平,其他時(shí)段輸出高電平,。同時(shí),,當(dāng)像素脈沖計(jì)數(shù)小于3時(shí),,Vsync輸出低電平,其他時(shí)段輸出高電平,,對(duì)行場同步為低電平的標(biāo)準(zhǔn),,SYNC設(shè)計(jì)為Hsync和Vsync相與的結(jié)果,BLANK信號(hào)可做的比SYNC略寬一些,。
3.2 顯示控制設(shè)計(jì)
如圖1所示,,設(shè)計(jì)中采用高速SDRAM實(shí)現(xiàn)對(duì)圖像數(shù)據(jù)的高速緩存,從CameraLink接收的圖像數(shù)據(jù)分別存入兩個(gè)緩存,,一個(gè)用于高速存儲(chǔ)于Flash B陣列中,,另一個(gè)暫存在SDRAM中,用于實(shí)時(shí)顯示圖像,。CameraLink接收的圖像數(shù)據(jù)以50 MHz×16 bit的速度存入FIFO1緩存中,,當(dāng)判斷FIFO1緩存數(shù)據(jù)量大于1 280個(gè)字時(shí),F(xiàn)PGA控制SDRAM模塊以100 MHz×16 bit的速度從FIFO中取出數(shù)據(jù)存入SDRAM,。當(dāng)接收實(shí)時(shí)顯示圖像命令時(shí),,SDRAM以165 MB/s速度更新FIFO2中數(shù)據(jù),VGA接口以108 MHz速度循環(huán)讀取SDRAM中所存儲(chǔ)的圖像數(shù)據(jù),,對(duì)顯示器的顯示內(nèi)容進(jìn)行更新,。由于SDRAM寫入1 280個(gè)字所需時(shí)間為12.8 ?滋s,考慮到SDRAM讀寫操作分時(shí)進(jìn)行,為保證SDRAM在寫數(shù)期間FIFO2數(shù)據(jù)不會(huì)被讀空,,F(xiàn)IFO2每次讀取1 080字,,所需時(shí)間20 s,滿足SDRAM讀寫轉(zhuǎn)換及刷新時(shí)間,,同時(shí)VGA顯示能以108 MHz速度持續(xù)從緩存中讀取數(shù)據(jù)并顯示[8],。
4 測試結(jié)果與結(jié)論
試驗(yàn)結(jié)果如圖5所示,采用圖像模擬器發(fā)送一幅1 280×1 024灰度圖像的方式對(duì)圖像存儲(chǔ)顯示的設(shè)計(jì)進(jìn)行驗(yàn)證,,并通過DMA方式讀取存儲(chǔ)在Flash B陣列中的圖像數(shù)據(jù)至上位機(jī)中進(jìn)行畫圖分析,。試驗(yàn)結(jié)果表明,高速圖像存儲(chǔ)卡能實(shí)時(shí)顯示圖像,,且經(jīng)過回讀數(shù)據(jù)分析,,完整地保存下高速輸入的圖像數(shù)據(jù)。利用FPGA控制整個(gè)系統(tǒng)的工作時(shí)序,,通過在內(nèi)部設(shè)置多級(jí)緩存結(jié)構(gòu)和流水線操作思想,,實(shí)現(xiàn)了圖像數(shù)據(jù)在不同時(shí)鐘域之間的轉(zhuǎn)換,完成了高速圖像數(shù)據(jù)的存儲(chǔ)與實(shí)時(shí)顯示功能,。本設(shè)計(jì)可實(shí)現(xiàn)持續(xù)的100 MB/s數(shù)據(jù)的實(shí)時(shí)存儲(chǔ),,滿足大多數(shù)光電設(shè)備中CameraLink數(shù)據(jù)的實(shí)時(shí)存儲(chǔ)要求。
參考文獻(xiàn)
[1] 楊柯,范海震.CameraLink接口的高速電子存儲(chǔ)系統(tǒng)設(shè)計(jì)[J].艦船電子工程,,2012,,32(5):110-118.
[2] 王熙.一個(gè)面向航空遙感高速的閃存存儲(chǔ)系統(tǒng)設(shè)計(jì)[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].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,,2011,11(8):37-41.
[5] 鄧春健,,王琦,,徐秀知,等.基于FPGA和ADV7123的VGA顯示接口的設(shè)計(jì)和應(yīng)用[J].電子器件,,2006,,29(4):37-41.
[6] 廖永清,丁旭昌,,付建國,等.基于FPGA的VGA圖像動(dòng)態(tài)顯示控制器的設(shè)計(jì)與實(shí)現(xiàn)[J].電視技術(shù),,2011,,35(17):52-54.
[7] 王亮,李正,,寧婷婷,,等.VGA漢字顯示的FPGA設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與設(shè)計(jì),2009,,30(2):275-281.
[8] 周卓然,,徐道連,呂鳳飛,,等.基于FPGA的VGA圖像顯示系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].儀表技術(shù)與傳感器,,2012(7):90-92.