国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

一種反熔絲FPGA可實現(xiàn)的閃存壞塊管理算法

2019-01-17 02:44:52陳曉飛陸一波
中國電子科學研究院學報 2018年6期
關鍵詞:數(shù)據(jù)結(jié)構(gòu)指針頂層

莫 凡,陳曉飛,陸一波

(上海衛(wèi)星工程研究所,上海 200240)

0 引 言

Nand閃存(下稱“閃存”)的壞塊管理算法自其被廣泛應用以來一直是研究的熱點。這些算法大多是針對通用的應用需求設計,一般不采用順序存儲的存儲結(jié)構(gòu)。這些算法往往需要較高性能的元器件實現(xiàn),針對航天應用需求和空間運行環(huán)境的設計并不多[1-3]。在航天領域存在大容量數(shù)據(jù)緩沖器的應用需求,如:衛(wèi)星在接收站范圍外發(fā)生數(shù)據(jù),接收站范圍內(nèi)接收數(shù)據(jù)。在此應用背景下,采用順序循環(huán)存儲的存儲結(jié)構(gòu)具有控制邏輯簡單特點,對實現(xiàn)它的邏輯元器件的性能指標要求較低,具有高可靠低性能特點的適應空間環(huán)境的元器件較容易實現(xiàn)。與順序循環(huán)存儲的存儲結(jié)構(gòu)相對應得壞塊管理算法相對有著自身的特點。本文介紹了一種航天適用的基于順序循環(huán)存儲的存儲結(jié)構(gòu)的壞塊管理算法。本文簡述了與算法相關的閃存功能,概述了順序循環(huán)存儲的存儲結(jié)構(gòu),詳述了該算法的原理,給出了實現(xiàn)元器件和仿真。

1 閃存功能簡述

閃存的存儲空間由塊組成,塊由頁組成[4]。以一塊型號為K9F4G08U0A三星4Gbit的閃存為例,總共4096個塊,每塊有2048頁。閃存擦除以塊為單位,擦除后塊內(nèi)所有位都為1。寫入時,先寫入閃存中的緩存,緩存以頁為單位,閃存在收到確認命令后,閃存將緩存中的內(nèi)容寫入頁中,寫入的時候只能將1變?yōu)?,這一過程稱作頁編程。一次塊擦除后,每一頁的編程次數(shù)不能超過4次,塊內(nèi)相鄰兩次編程地址必須連續(xù)。一片4G 閃存有4096個塊,每個塊有2048個頁,每頁2112字節(jié)。每頁分為4個扇區(qū),同時又分為主區(qū)和冗余區(qū)。頁的結(jié)構(gòu)如表1所示。

表1 頁結(jié)構(gòu)

如表所示,每個扇區(qū)528個字節(jié),主區(qū)512個字節(jié),冗余區(qū)16字節(jié)。存儲在每個扇區(qū)中的數(shù)據(jù)發(fā)生1bit的錯誤是正常現(xiàn)象,因此存入閃存的原始數(shù)據(jù)需要與相應的校驗碼一起存儲。主區(qū)一般用來存儲輸入的原始數(shù)據(jù),冗余區(qū)一般用來存儲與主區(qū)數(shù)據(jù)對應的校驗碼和其他附加信息。

2 存儲結(jié)構(gòu)

數(shù)據(jù)存儲以塊為單位,0號塊存儲塊地址指針,一次數(shù)據(jù)存儲結(jié)束后,該指針指向下一次數(shù)據(jù)寫入的塊。除0號塊以外的塊用于數(shù)據(jù)存儲,數(shù)據(jù)存儲采用順序循環(huán)的方式。沒有壞塊管理存儲過程如圖1所示。

圖1 存儲結(jié)構(gòu)流程圖

如圖所示,接收到數(shù)據(jù)采集命令后,控制邏輯要讀取存儲在0號塊中的寫指針存入控制邏輯中的寄存器??刂七壿嬁偸菍⑤斎氲男枰鎯Φ臄?shù)據(jù)寫入寫指針指定的塊中。數(shù)據(jù)存滿一個塊即將要存入下一塊時,需要更新寄存器中的寫指針。當寫指針指向存儲區(qū)域最后一個塊時,更新后指向存儲區(qū)域的第一個塊。

3 算法原理

常見的閃存除了0號塊以外的其他塊,不保證無壞塊。所謂的“壞塊”,并非完全失效的塊,大多數(shù)情況下只是部分失效或不穩(wěn)定。確定某塊為壞塊主要有三種途徑:出廠時的標記;執(zhí)行擦除命令后來自于閃存的表明擦除成功與否的信號反饋;執(zhí)行頁編程命令后來自于閃存的頁編程成功與否的信號反饋。壞塊管理算法的思路如下:

(1)使用RAM作為緩存,如果塊寫入過程發(fā)生壞塊現(xiàn)象,跳過該塊,將原本存入該快的數(shù)據(jù)重新從RAM中讀出存入循環(huán)相鄰的下一個有效塊中。

(2)1代表壞塊,0代表有效塊??紤]到閃存存儲會發(fā)生1位的錯誤,采用三模冗余的糾錯算法,任取一個字節(jié)中的三位用作壞塊標記,這里取一個字節(jié)中的低3位。

有效的塊在頁的冗余區(qū)寫入標記,壞塊維持擦除后的狀態(tài)不變。頁編程失敗,該頁如果不是該塊的最后一頁, 跳過該塊,尋找循環(huán)相鄰的下一個有效塊。如果該頁是塊中的最后一頁,擦除該塊,然后跳過該快,尋找循環(huán)相鄰的下一個有效塊。

(3)檢測壞塊時檢測最后一頁的標記。雖然概率不大,但是仍然會發(fā)生未將最后一頁冗余區(qū)標志擦成1的情況。這種情況對于寫入的影響不大,因為在寫該塊時需要先擦除,擦除失敗將跳過該塊。但是這對讀數(shù)據(jù)影響較大,如果不作處理,壞塊中的無效數(shù)據(jù)會干擾到有效塊中有效數(shù)據(jù)的使用。解決辦法是采用循環(huán)流水編碼的方法,K9F4G08U0A共有4096個塊,0號塊用作記錄塊指針,用作循環(huán)存儲的塊有4095個,12比特長度即可標記。循環(huán)流水編碼并不一定需要標記每一個塊,循環(huán)流水編碼的碼長越長,沒有擦除成功的壞塊中的循環(huán)流水編碼與有效塊中的循環(huán)流水編碼連續(xù)的概率就越小,這里采用長度為兩個字節(jié)16位的循環(huán)流水編碼??紤]到1比特的存儲錯誤,采用三模冗余糾錯,實際存三份,占用6個字節(jié)。循環(huán)流水編碼、冗余碼均寫入每一頁第一扇區(qū)的冗余區(qū)。每一扇區(qū)主區(qū)512字節(jié),512字節(jié)的2位檢測1位糾錯漢明碼長度為3字節(jié)。第一扇區(qū)冗余區(qū)共使用10字節(jié)。第一扇區(qū)冗余區(qū)的結(jié)構(gòu)如圖2所示。

圖2 第一扇區(qū)冗余區(qū)結(jié)構(gòu)

圖3給出了試圖寫入n號塊的流程圖,是圖1中“將數(shù)據(jù)寫入寫指針寄存器指向的塊”和“寫指針寄存器以以存儲空間大小為模自增1”步驟的修改和細化。

圖3 壞塊管理算法

如圖中n+1指的是以存儲空間為模的自增1運算。如圖所示,最后一頁頁編程失敗后需要塊擦除,在擦除成功的情況下,能夠確保壞塊標記為1?;胤诺刂窌r,根據(jù)設置的回放地址上限和下限,將該段地址中的數(shù)據(jù)回放?;胤艛?shù)據(jù)的流程圖如圖4所示。

圖中的“自增1”和“增加到下一個塊的第1頁”是以存儲空間為模的自增1。閃存廠商在閃存出廠前會對閃存進行檢測,在壞塊的第1頁或第2頁的冗余區(qū)第1個字節(jié)寫入非零值,有效塊模塊處于擦除后的狀態(tài)。新出廠的閃存需要先進行初始化,然后才能用來適用本文描述的算法。初始化執(zhí)行的操作有:將指向第一有效塊的寫指針寫入0號塊;在有效塊的最后一頁的冗余區(qū)的響應位置寫入有效塊標記。

4 實現(xiàn)與仿真

4.1 選用元器件

選用適應空間環(huán)境的元器件實現(xiàn),主要元器件如表2所示。

表中的第一項是一個 常見的ACTEL公司的反熔絲7.2萬門的FPGA。常見的RAM型的FPGA容量動輒幾百萬門,但是較少有抗輻射指標,抗單粒子翻轉(zhuǎn)性能遠不如反熔絲型的FPGA。

4.2 選用依據(jù)

將本文的算法采用verilog硬件設計語言實現(xiàn),使用Synplify綜合工具綜合,結(jié)果如表3和表4所示。

從表中可以看出,本算法占用A54SX72A資源不多,采用16M時鐘,時序余量較大。

4.3 仿真

本算法涉及的糾錯設計有三處:壞塊標記、原始數(shù)據(jù)糾錯。前者采用三模冗余算法,后者采用漢明碼。圖5給出了一處檢測壞塊標記的仿真波形,仿真軟件采用的是modelsim。

如圖所示,Ale為地址鎖存信號;Cle為命令鎖存信號;FlashCeBar為片選信號,低電平有效;FlashReBar為讀使能信號;FlashWeBar為寫使能信號;FlashIo為8位閃存數(shù)據(jù)輸入輸出端口,詳細說明參見參考文獻[4]。圖中光標的停留位置為讀出壞塊標記的時刻,此時FlashIO上閃存送出的是0x01。有效塊的標記是0x00,送出0x01是仿真了發(fā)生1位錯誤的情況,經(jīng)三模冗余糾錯并進行判斷,該塊為有效塊,隨后的一組波形是塊擦除操作波形,擦除成功后該塊可進入寫入操作。

圖4 數(shù)據(jù)回放流程圖

表2 核心元器件

表3 FPGA資源使用

表4 靜態(tài)時序分析

5 結(jié) 語

本文提出的算法是以塊為單位基于循環(huán)順序存儲的存儲結(jié)構(gòu),在這種存儲結(jié)構(gòu)中,時間上順序存儲的塊在塊存儲空間上也順序。在沒有壞塊的情況下,時間上相鄰存儲的塊在存儲空間上也是循環(huán)相鄰的。存儲結(jié)構(gòu)實際上是頂層的數(shù)據(jù)結(jié)構(gòu),存儲結(jié)構(gòu)以下的層次是塊,塊中的數(shù)據(jù)結(jié)構(gòu)的維護采用RAM。

大量文獻研究的壞塊管理算法往往針對以塊為單位塊與塊之間的數(shù)據(jù)關系不確定的情況。一般情況下,這類壞塊管理算法需要維護一張塊存取表(Block Access Table, BAT)(以下稱這種方法為BAT法),BAT中不僅記錄壞塊信息而且記錄塊與塊之間的數(shù)據(jù)關系。存儲BAT表的存儲介質(zhì)往往是讀寫最為頻繁,BAT失效意味著整個存儲模塊的失效,BAT如果保存在閃存中,磨損均衡和壞塊管理的算法的邏輯復雜,往往需要較高性能的CPU實現(xiàn)。

本文描述的壞塊管理算法的應用范圍不局限于頂層數(shù)據(jù)結(jié)構(gòu)為以塊為單位循環(huán)存儲的情況,主要適用范圍分以下幾種類型:

圖5 壞塊標記讀取仿真

(1)頂層為連續(xù)多塊組合的循環(huán)順序存儲數(shù)據(jù)結(jié)構(gòu),次頂層為非順序存儲數(shù)據(jù)結(jié)構(gòu)。次頂層的數(shù)據(jù)模塊實現(xiàn)的方式有兩種:一種是將次頂層數(shù)據(jù)模塊作為一個整體讀入RAM中進行維護,維護完畢存入閃存;另一種是直接在閃存上進行維護。第一種方式需要足夠大的內(nèi)存,第二種方式增加了閃存控制邏輯的復雜度。

(2)頂層為獨立數(shù)據(jù)模塊,次頂層為循環(huán)順序存儲數(shù)據(jù)結(jié)構(gòu)。這種方式可采用分區(qū)的方法實現(xiàn)。

(3)頂層為非獨立且非循環(huán)順序存儲數(shù)據(jù)結(jié)構(gòu)。實現(xiàn)方法采用類型1的次頂層實現(xiàn)方法。

(4)上述幾種類型的嵌套。

類型1的第一種實現(xiàn)方法、類型2實現(xiàn)邏輯較為簡單,適合使用本文描述的算法。類型1的第二種方法以及類型3的實現(xiàn)邏輯的復雜程度與非獨立且非循環(huán)順序存儲的具體數(shù)據(jù)結(jié)構(gòu)有關,適用BAT法還是本文描述的算法視具體數(shù)據(jù)結(jié)構(gòu)而定。類型4根據(jù)嵌套的具體情況,在一定的嵌套層次中適用本文描述的算法。

航天器中存在的大規(guī)模存儲應用需求主要是用來實現(xiàn)數(shù)據(jù)緩沖和回放,多臺設備的緩沖回放可以采用類型2所對應的存儲結(jié)構(gòu)。另一方面,航天用的反熔絲FPGA具有防輻射指標高性能低,本文描述的算法控制邏輯簡單可在反熔絲FPGA上實現(xiàn)的特點更好的滿足了航天器安全性和可靠性的指標要求。

猜你喜歡
數(shù)據(jù)結(jié)構(gòu)指針頂層
汽車頂層上的乘客
文苑(2019年24期)2020-01-06 12:06:58
偷指針的人
娃娃畫報(2019年5期)2019-06-17 16:58:10
為什么表的指針都按照順時針方向轉(zhuǎn)動
“翻轉(zhuǎn)課堂”教學模式的探討——以《數(shù)據(jù)結(jié)構(gòu)》課程教學為例
頂層設計
高職高專數(shù)據(jù)結(jié)構(gòu)教學改革探討
中國市場(2016年45期)2016-05-17 05:15:48
加快頂層設計
基于改進Hough變換和BP網(wǎng)絡的指針儀表識別
電測與儀表(2015年5期)2015-04-09 11:30:42
健康卡“卡”在頂層沒聯(lián)網(wǎng)
ARM Cortex—MO/MO+單片機的指針變量替換方法
汝州市| 金沙县| 如皋市| 巢湖市| 正定县| 库车县| 平远县| 福鼎市| 咸宁市| 涞源县| 襄垣县| 神木县| 航空| 南昌县| 大邑县| 民丰县| 锡林郭勒盟| 饶平县| 瑞丽市| 华池县| 泾阳县| 克拉玛依市| 双辽市| 镇江市| 兴安盟| 宝鸡市| 岗巴县| 晴隆县| 上杭县| 宁蒗| 怀集县| 新绛县| 江达县| 财经| 文登市| 措勤县| 哈巴河县| 高平市| 海淀区| 怀仁县| 乡宁县|