?

一種使用Flash 陣列存儲數據的方法研究

2024-04-13 06:53翟成瑞林天鵬張彥軍
電子設計工程 2024年7期
關鍵詞:存儲容量單片寄存器

翟成瑞,林天鵬,張彥軍

(中北大學省部共建動態測試技術國家重點實驗室,山西太原 030051)

在航空航天領域裝備的不斷發展中,Flash 以其體積小,掉電數據不丟失,工作可靠等優點在航空航天設備的研制試驗過程中備受歡迎。隨著所需存儲數據量的增加和存儲數據速度的提高,單片Flash 的存儲容量和速度已經不能滿足要求,如果使用其他大容量存儲介質會存在掉電丟失,存儲介質體積大,不利于布局,以及部分存儲介質存在工作不可靠等缺點[1-2]。因此,針對高速大容量數據存儲的要求,對Flash陣列式存儲展開了研究,針對Flash工作特性進行了流水線管理,無效塊檢測等高效使用存儲陣列的方法研究。

1 存儲陣列

由于Flash 芯片的特性,在數據寫入時會有兩個基本操作,先是將數據寫到頁寄存器中,然后再從頁寄存器中將數據寫入對應地址的Flash 存儲頁中,這個過程稱為頁編程[3]。頁編程過程是由芯片自主完成的,在一片Flash 進行頁編程的時候,此片Flash 不能進行其他操作,要等到完成頁編程之后才可以,頁編程的時間相對于其他操作時間較長,這對數據存儲速度將會產生影響。而在Flash進行自動頁編程時是可以進行其他芯片的操作。所以在一個數據記錄模塊中同時控制多片Flash作為存儲載體不僅可以提高存儲系統的存儲容量,還可以提高數據的存儲速度[4]。

1.1 并行排列

多片Flash 組合方式的不同也將對存儲速度產生不同的影響,將Flash 并行排列以后,可以同時對多片Flash 進行存儲操作,增加了存儲容量[5],在一定程度上數據寫入速度也得到了提升,但是并行排列的方式依然存在頁編程時間等待,資源浪費等問題,沒有充分發揮出組合的優點。并行組合示意圖如圖1 所示。

圖1 并行組合

1.2 串行排列

將Flash 串行排列以后,可以在一片Flash 進行頁編程的時候對通道內其他的Flash 操作來進行數據寫入,這種排列方式充分利用了在一片Flash 頁編程期間自身不能進行其他操作而需要等待的時間,提高了數據存儲的速度和資源利用率[6]。但是串行排列的方式不能同時對多片Flash 同時進行數據加載,也沒有充分發揮出組合的優點。串行組合示意圖如圖2 所示。

圖2 串行組合

1.3 矩陣式排列

基于上述優缺點,提出了通道間并行排列加通道內串行排列的矩陣式組合方式,在通道間可以同時對多片Flash 進行操作,在通道內,當一片Flash 頁編程操作時,可以對其他Flash進行操作。這種組合方式不僅充分利用了FPGA 的邏輯資源,也充分利用了Flash的存儲特性進行存儲,很大程度上提高了數據存儲速度及數據存儲容量。該組合示意圖如圖3所示。

圖3 矩陣式組合

2 流水線管理

Flash 的內部寫入數據和讀取數據以頁為單位,每一頁中都包含有數據空間和緩存空間。許多個頁組成一個塊,數據擦除一般以塊為單位[7]。許多個塊組合組成一個存儲單元。以單片容量為8 Gb的Flash為例將陣列式存儲單元與單片存儲單元的存儲效率做以對比[8]。該Flash 的邏輯結構圖如圖4 所示。

圖4 Flash邏輯結構圖

選用的Flash 每頁的容量為2 kB,在時鐘周期50 MHz,即系統在時鐘周期為20 ns 下工作。Flash寫入數據的流程為首先寫入一個字節的命令加五個字節將要存放數據的地址,然后將數據加載到頁寄存器中,最后將頁寄存器中的數據加載到Flash 對應的存儲單元中,即頁編程[9]。

寫入指令加地址的時間為t1,一共需要六個時鐘周期;查閱數據手冊得知地址到數據加載時間需要t2=70 ns;將2 kB 的數據加載到頁寄存器中需要的時間為t3,共2 048 個時鐘周期;寫使能從高狀態到忙信號的拉低時間需要t4=100 ns;而自動頁編程時間t5平均需要200 μs,最大需要700 μs,以平均頁編程時間計算寫入一頁數據總共需要的時間。該時間為T=t1+t2+t3+t4+t5=241.25 μs。單片Flash 的寫入速度為V=2 kB÷241.25 μs=8.1 MB/s。

當Flash 組成陣列式存儲單元后,通道間可以同時對多片Flash 進行數據加載及頁編程,通道內可以在一片Flash 進行自動頁編程時對通道內其他的Flash 進行數據加載操作。以此可以大幅提高數據存儲速度和存儲模塊的存儲容量[10]。

通道間Flash為獨立存在,互不影響,可以同時進行頁編程操作,即同時可以將數據寫入多個通道的第一片Flash。通道內的Flash只能同時對一個芯片進行頁編程。因此在通道內,當數據加載到第一片Flash中的頁寄存器中后,利用第一片進行自動頁編程的時間可以繼續將需要存儲的數據緩存到通道內下一片Flash的頁寄存器,第一片頁編程時間足夠對通道內后面的好幾片Flash進行數據加載至頁寄存器中的操作[11]。

該芯片數據加載到頁寄存器的時間為41.25 μs,頁編程時間200 μs,第一片進行頁編程時,其余幾片頁加載時間總和大于頁編程時間200 μs 就可以對頁編程的時間進行充分利用,因此單個通道Flash 大于六片即可。所以單個通道串行排列的數據存儲速度最大可以達到V=2 kB÷41.25 μs=47.35 MB/s。單個通道內為了節省資源和便于控制,FPGA 與存儲芯片的數據傳輸接口、命令、地址、讀寫接口均為公用的傳輸線,只有片選信號和忙閑信號為單獨的傳輸線。單個通道內串行排列的方式,其最大數據存儲速度就是單頁的存儲容量除以數據加載到頁寄存器的時間,這個速度相對于單片Flash的存儲速度已經有了很大提升,但是在某些高速數據的存儲需求下,該速度還是不能滿足要求,所以在通道內串行排列的基礎上再進行通道間的并行排列,這可以使數據存儲速度比串行排列數據存儲速度成倍增加,并且依靠FPGA 強大的數據處理能力和并行運行的特點,該存儲陣列也是比較容易實現的[12]。如上述單個通道串行排列時的數據傳輸速度最快可以達到47.35 MB/s,通道間N倍并行排列后,存儲速度將會為N×47.35 MB/s。通道間并行,通道內串行的流水線控制如圖5所示。

圖5 流水線控制

3 壞塊檢測及突發塊處理

3.1 單片檢測

由于受nand Flash 生產工藝的影響,不能保證在整個使用周期中都是可靠的,或多或少的都會產生壞塊,并且Flash 在出廠時有的就會存在壞塊[13]。Flash 在全部擦除后,沒有數據寫入前,正常狀態所有的位都為高位,而出現壞塊后,將會在擦除或者寫入數據時不能將某些位拉高,如果不對這些壞塊加以處理,將會導致數據存儲出現錯誤,達不到預期的存儲效果[14]。

Flash 每頁都會有備用區,而壞塊的信息將在每塊第一頁的備用區做以標記。單片Flash 的檢測方式為每次對Flash 進行擦除或者數據寫入等操作時,都對存放壞塊信息的頁空閑區進行遍歷性檢查,如果為壞塊,將會做壞塊標記,后續操作對該塊不再進行數據寫入,如果為正常的存儲塊,則地址加一,繼續檢查下一塊,直到所有的塊狀態信息都檢查結束。這種壞塊檢查方法雖然實現起來較簡單,但是所需時間較長,不適合高速數據的存儲。

3.2 陣列檢測

將Flash 陣列組合是為了滿足高速數據存儲的要求。如果壞塊檢測還是使用遍歷性檢查的方法,那將會對存儲系統的存儲速度產生很大影響,為此將使用一種提高壞塊檢測效率的方法進行陣列式Flash 的壞塊檢測。

Flash 中塊的好壞只有兩種狀態,這兩種狀態可以用0、1 來表示,該設計所選的Flash 有8 192 個塊,8 kB 的RAM 可以將這些Flash 的所有塊信息寫入,這個操作只需在上電后將塊信息進行讀取寫入RAM中,后續操作需要進行壞塊檢測時只需讀取RAM 中的信息即可。這種壞塊檢測方式相對于遍歷性檢測大大節省了檢測時間,提升了系統的存儲速度。當遇到陣列式Flash時,如果每片都映射到一個RAM中,那所需的時間也相對較長,也會造成資源的浪費。通道內的Flash 每個芯片的存儲塊數是相同的,地址也是相同的,因此設計了一種將一個通道內地址相同的塊看成一個大塊的檢測方法,這個大塊中如果有一個塊是壞塊,就判定這一整個大塊為壞塊,如圖6所示。

圖6 組合塊檢測

這種壞塊檢測方式一定程度上浪費了一些好的存儲塊,但是相對系統總體來說,提高了系統的數據存儲速度,所浪費的存儲容量相對總容量來說也是很少的一部分[15]。查閱芯片手冊可知,該芯片最少有8 032個有效塊,即最多每塊中有160個壞塊,以每個通道串行6片,且每塊Flash的壞塊地址都不相同,每個通道最多可達3 600個壞塊,這也就導致可能會有最多3 000個有效塊被浪費。經計算得知,在每個通道最多浪費3 000個有效塊的情況下,該通道的Flash 存儲利用率為93.9%,而實際使用下,每片的壞塊不會那么多,無效組合塊也就不會那么多,實際的存儲容量利用率也會高于93.9%,對存儲空間不會造成太多的浪費。

3.3 壞塊替換

在Flash 使用過程中,也會不可避免的產生一些突發的壞塊,在數據寫入時如果不做相應的處理,就會使數據存儲產生錯誤,導致數據存儲失敗,降低數據存儲裝置的可靠性[16]。

在數據存儲過程中,當數據寫入到塊A 的第n頁時,如果發現返回錯誤信息,不能正常寫入數據,將該塊和該頁的地址記錄下來,并將該塊第n頁到最后一頁的數據寫入到下一個能正常存儲數據的塊B對應頁中,并對上述塊A 做壞塊標記。當全部數據都寫入完成以后,對照之前記錄的壞塊和頁地址,將已經寫入壞塊A 中的前n-1 頁的數據以頁為單位讀出后重新寫入到其下個正常塊B 的對應頁中完成數據的完整寫入。滯后重寫如圖7 所示。

圖7 滯后重寫

4 測試與驗證

將模擬信號源產生的數據存入矩陣式存儲陣列中,對存儲系統存儲容量,存儲速度以及存儲陣列的利用率等進行測試。結果顯示矩陣式存儲陣列存儲容量和數據存儲速度相較單片存儲有成倍的提高,單個通道的有效塊使用效率達到了99%以上,遠高于理論最低使用率的93.9%,且數據存儲可靠,滿足數據存儲系統的各項要求。圖8 為矩陣式存儲陣列存儲的數據。

圖8 存儲數據

5 結束語

針對單片Flash 存儲容量有限,存儲速度較低的現狀,結合Flash 的存儲特性,提出了一種使用Flash陣列存儲數據的方法,通過布置存儲陣列,RAM 映射進行壞塊檢測,滯后重寫等設計大大提升了數據存儲容量和數據存儲速度,經過理論分析及試驗驗證,該方法可行性高,技術實現難度適中,為高速數據存儲提供了可行性方案和技術路線。

猜你喜歡
存儲容量單片寄存器
基于織物單片集成的無線表皮生物傳感腕帶實現高兼容性集成互連
Lite寄存器模型的設計與實現
分簇結構向量寄存器分配策略研究*
高溫低濕單片燃料電池城市工況循環測試
燃料電池堆單片電壓一致性研究進展
1000kV耐張絕緣子串單片絕緣子的帶電更換技術
淺析云盤技術及存儲原理
高速數模轉換器AD9779/AD9788的應用
一種可重構線性反饋移位寄存器設計
Buffalo推出四硬盤網絡存儲器 主打Soho一族
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合