高速大容量存儲系統(tǒng)設(shè)計
0 引言
在測量技術(shù)中,高速數(shù)字攝像機所拍攝到的大量數(shù)字圖像需要高速、大容量的圖像存儲設(shè)備來實時快速地存儲。用傳統(tǒng)的磁帶方式來記錄數(shù)據(jù),其效率和安全性不高;靜態(tài)存儲器讀寫方便,但是存儲的數(shù)據(jù)會因斷電而丟失,所以不利于數(shù)據(jù)的長時間保存。而近幾年問世的閃存以其存儲容量大、體積小、可靠性高等優(yōu)點,逐步向存儲系統(tǒng)進軍。
1 設(shè)計原理
設(shè)計中相機輸出LVDS串行數(shù)據(jù)通過接收電平轉(zhuǎn)換和串并轉(zhuǎn)換后得到10路×8 bit的并行數(shù)據(jù)流,其數(shù)據(jù)流速率最大為66 MHz。之后根據(jù)相機MC1311的性能指標可計算出Camera Link高速接口與數(shù)據(jù)存儲系統(tǒng)的存儲容量要求與存儲速度要求,即:單幀數(shù)據(jù)量為1280×1024×8 bit;每秒最大數(shù)據(jù)量為500×1280×1024×8 bit;Camera Link高速接口單路數(shù)據(jù)速率為65.536 MByte,如果需要連續(xù)存儲60秒的視頻數(shù)據(jù),則需要40 G Byte存儲器容量。100 GByte的存儲容量最多大約可存儲2.5分鐘視頻數(shù)據(jù)。圖1為系統(tǒng)結(jié)構(gòu)圖。
2 核心器件選擇
設(shè)計中的存儲芯片采用SAMSUNG公司的NAND FLASH芯片K9 K8G08UOI,它的外部接口最高速度為40 MHz,接口寬度8位。每個芯片有8192塊,每塊有64頁,每頁大小為(2K+64)Bytes,其中64 Bytes為空閑區(qū),存儲容量為8Gbit。它以頁為單位進行讀寫,以塊為單位進行擦除??刂坪诵腇PGA采用ALTERA公司STRATIXⅡ系列的EP2S30F672I4,它有著豐富的觸發(fā)器和LUT,非常適合復(fù)雜時序邏輯的設(shè)計,具有1.3Mbit的內(nèi)置存儲RAM,可以緩存一定量的數(shù)據(jù)。
3 系統(tǒng)設(shè)計
NAND Flash的數(shù)據(jù)存儲采用頁編程方式寫入,K9K8G08UOI的頁寫入時序如圖2所示。
根據(jù)圖2的時序可以估算出單片K9K8G08UOI的數(shù)據(jù)存儲速率,其中tWC最小為25 ns,tADL為75ns,tWB為100 ns,tPROG為200μs。因此,寫入一頁所需時間大約為:200μs+100 ns+(2048+64) ×25ns+75 ns=252.975μs,由于一頁數(shù)據(jù)為(2K+64)B,所以單片K9K8G08UOI每Byte的數(shù)據(jù)存儲速率為:1/(252.975μs/(2048+64)B)=8.4152 MHz。可見單片K9K8G08UOI的寫入速度不能滿足Camera,Link的接口要求,故需用多片進行數(shù)據(jù)位擴展。為了解決NAND Hash存取數(shù)據(jù)速度較慢向題,可將相鄰10個8 bit視頻數(shù)據(jù)在FPGA內(nèi)展寬為80 bit進行存取。而NAND Flash每Byte的存儲速率要求可降為6.6 MHz,故可滿足單片K9K8G08UOI的存儲速度要求。系統(tǒng)中每10片K9K8G08UOI組成一個1 G×80 bit的Flash模塊,共10個Flash模塊。每個Hash模塊共用一套控制線,數(shù)據(jù)線分別與FPGA相連。單Flash模塊的組成原理如圖3所示。
電路中Flash1~10的連接一致,即數(shù)據(jù)總線獨立連接到FPGA共用控制總線(帶驅(qū)動)。由圖3可見,若需要進一步降低單片F(xiàn)lash存儲速率,可進一步擴展Flash存儲器芯片數(shù)量。由于單片F(xiàn)PGA的I/O數(shù)有限,可將10個Flash模塊安排到5塊擴展存儲器板上,分別對應(yīng)Camera Link串并轉(zhuǎn)換得到的一路數(shù)據(jù)(66 MHz×8 bit)。每個存儲器板與1片F(xiàn)PGA和2個Flash模塊相連后再分別與控制電路板上的FPGA相連來進行數(shù)據(jù)傳輸。其中的5塊擴展存儲器板采用相同結(jié)構(gòu)。
4 FPGA邏輯設(shè)計
FLASH的基本操作分為兩個階段:加載時間和編程時間,寫入的時間瓶頸并不在加載時間,而是FLASH的編程時間。為了解決高速數(shù)據(jù)與低速FLASH之間的矛盾,可采用數(shù)據(jù)流串并轉(zhuǎn)換、多個模塊并行處理的方法??稍贔PGA內(nèi)部構(gòu)建10個雙口RAM用來緩存數(shù)據(jù),每個雙口RAM對應(yīng)一個FLASH,相機過來的數(shù)據(jù)先緩存到RAM里,然后再寫到FLASH。數(shù)據(jù)寫到RAM可采用流水操作,數(shù)據(jù)寫滿第一個雙口RAM,接著寫第二個RAM,依次進行,當寫滿第十個RAM時,將十個RAM緩存的數(shù)據(jù)寫到對應(yīng)的FLASH里。FLASH操作按最高速度40MB進行,加載時間為51.2μs,之后進入編程時間,再來的數(shù)據(jù)繼續(xù)緩存在第一個RAM里。相機的時鐘是66 MHz,每個RAM的深度為2048 Bytes,那么寫10個RAM的時間是310μs,即FALSH編程時間可以達到310-51.2=258.8μs,可以滿足FLASH的典型編程時間200μs。其FLASH流水操作見圖4。
5 FLASH壞區(qū)管理
對FLASH的壞區(qū)實行動態(tài)管理,在每個存儲電路板的FPGA內(nèi)開辟1 K×8 bit的壞區(qū)地址存儲。所有存儲電路板的壞區(qū)地址一致。在FLASH進行寫操作前比對當前區(qū)是否為壞區(qū),如果是壞區(qū)則跳過此區(qū)進入下一區(qū)。
可采用寫入特定數(shù)后讀出校驗的方式來檢測壞區(qū)。存儲電路板根據(jù)命令全區(qū)寫入8 bit數(shù)據(jù)。寫入時序按系統(tǒng)設(shè)計的最高速率進行。然后將它們順序讀出并進行校驗,如果出現(xiàn)數(shù)據(jù)錯誤則登記該壓為壞區(qū)。圖5為壞區(qū)檢測管理的工作流程。
6 結(jié)束語
本文采用多級流水線與并行處理相結(jié)合的方式,同時利用FPGA內(nèi)部的緩存來使多個FLASH存儲器并行工作,從而極大地提高了存儲速率。100片F(xiàn)LASH存儲器同時工作可滿足660 MB/S的速度要求。經(jīng)過測試,本系統(tǒng)可以可靠地存儲數(shù)字圖像,并可屏蔽壞區(qū)。