基于閃存的星載大容量存儲(chǔ)器的研究和實(shí)現(xiàn)
1.2 無(wú)效塊的管理本文引用地址:http://m.butianyuan.cn/article/202575.htm
三星閃存芯片在使用過(guò)程中會(huì)出現(xiàn)無(wú)效塊。無(wú)效塊是指一個(gè)塊中存在一個(gè)或多個(gè)無(wú)效位,其可靠性不能得到保證,必須加以標(biāo)識(shí)和旁路(當(dāng)然無(wú)效塊不會(huì)影響到其它塊的有效性)4并進(jìn)行數(shù)據(jù)備份。為了對(duì)無(wú)效塊實(shí)現(xiàn)管理,可以建立一張無(wú)效塊到冗余區(qū)有效塊的映射表。映射表結(jié)構(gòu)如圖2所示。映射原理如下: 開(kāi)始是一張初始無(wú)效塊映射表,這張表可以根據(jù)三星公司技術(shù)手冊(cè)給出的算法建立起來(lái)。按照?qǐng)D示的映射數(shù)據(jù)結(jié)構(gòu)對(duì)整個(gè)存儲(chǔ)區(qū)進(jìn)行編號(hào),并根據(jù)這個(gè)編號(hào)對(duì)映射表進(jìn)行排序。進(jìn)行寫(xiě)操作時(shí),按照上述的映射結(jié)構(gòu)將寫(xiě)地址與映射表進(jìn)行比較,比較到塊級(jí)即可。如果是無(wú)效塊,將待寫(xiě)入的數(shù)據(jù)寫(xiě)到被映射到的塊;如果不是,則直接寫(xiě)入該塊。如果在寫(xiě)某塊的某頁(yè)時(shí)出現(xiàn)編程錯(cuò)誤,則將該塊添加進(jìn)無(wú)效塊映射表(當(dāng)編程出錯(cuò)時(shí)就表明出錯(cuò)頁(yè)對(duì)應(yīng)的塊無(wú)效),同時(shí)從該出錯(cuò)頁(yè)開(kāi)始,將該塊后面的頁(yè)數(shù)據(jù)都寫(xiě)入到對(duì)應(yīng)的映射塊。這樣,在數(shù)據(jù)讀出時(shí),可將讀地址與映射表比較,并且需要比較到頁(yè)級(jí)以確定每一頁(yè)的確切存放位置。如果該頁(yè)編程正確,則直接讀出;如果錯(cuò)誤,則到被映射的塊的對(duì)應(yīng)頁(yè)讀數(shù)據(jù),并且該頁(yè)之后的頁(yè)也從被映射塊中讀數(shù)據(jù)。根據(jù)三星的技術(shù)資料,對(duì)無(wú)效塊進(jìn)行讀操作是允許的,即對(duì)于編程出錯(cuò)頁(yè)前面的那些編程正確的頁(yè)是可以正確讀出的,而對(duì)無(wú)效塊進(jìn)行編程和擦除的操作是不推薦的,因?yàn)橛袝r(shí)這些操作會(huì)使鄰近的塊也失效4。所以讀操作要查找到每一頁(yè)的對(duì)應(yīng)存放位置,而寫(xiě)操作只要查找到塊就行。查找時(shí)采用二分查找算法。擦除完后,將擦除出錯(cuò)的塊也添加進(jìn)無(wú)效塊映射表。無(wú)效塊映射表需要不斷維護(hù)和更新。
2 閃存構(gòu)成星載大容量存儲(chǔ)器的系統(tǒng)實(shí)現(xiàn)方案2.1 系統(tǒng)的組成
該實(shí)現(xiàn)方案將上述關(guān)鍵問(wèn)題的解決方法融合進(jìn)來(lái),系統(tǒng)由存儲(chǔ)區(qū)模塊、接口模塊、數(shù)據(jù)緩沖模塊及主控模塊四部分組成,系統(tǒng)原理圖如圖3所示。
2.1.1 存儲(chǔ)區(qū)模塊
為了實(shí)現(xiàn)并行和流水技術(shù),整個(gè)存儲(chǔ)區(qū)模塊按如下方式構(gòu)成:由4片K9K1G08U0M型三星閃存芯片組成一個(gè)子模塊,8?jìng)€(gè)子模塊組成8級(jí)流水的大模塊,而這個(gè)大模塊即是整個(gè)存儲(chǔ)區(qū),其總?cè)萘繛椋常玻牵猓椋?。無(wú)效塊備份的冗余區(qū)可以設(shè)在每個(gè)子模塊內(nèi)部,即從子模塊的每塊芯片中預(yù)留出一部分空間。這種模塊化管理的方式既便于系統(tǒng)擴(kuò)展,又可以在不影響系統(tǒng)正常工作的情況下旁路已損壞的存儲(chǔ)塊。
2.1.2 接口模塊
系統(tǒng)與外部的接口有兩個(gè)。一是與CPU的接口,主要完成系統(tǒng)的初始化、外部命令和地址的輸入以及內(nèi)部狀態(tài)參數(shù)的輸出,同時(shí)CPU 還要對(duì)存儲(chǔ)區(qū)完成管理:無(wú)效塊的管理、地址的譯碼和映射等;二是與外部高速數(shù)據(jù)源的接口,主要完成外部高速數(shù)據(jù)的接收和發(fā)送。這里選用了1394高速總線作為數(shù)據(jù)源總線。
2.1.3 數(shù)據(jù)緩沖模塊
這一模塊包括數(shù)據(jù)輸入FIFO、數(shù)據(jù)輸出FIFO和一個(gè)作為數(shù)據(jù)備份的SRAM。由于閃存的寫(xiě)入速度比較慢,如果沒(méi)有數(shù)據(jù)緩沖區(qū),外部的高速數(shù)據(jù)很有可能會(huì)丟失,而且數(shù)據(jù)回放時(shí)也需要一個(gè)緩沖區(qū)使內(nèi)外的數(shù)據(jù)率匹配??紤]到編程出錯(cuò)時(shí)需要重新加載數(shù)據(jù),按照流水線的工作方式,如果不進(jìn)行數(shù)據(jù)備份,可能會(huì)出現(xiàn)出錯(cuò)時(shí)的數(shù)據(jù)丟失,因此選用了一個(gè)SRAM進(jìn)行數(shù)據(jù)備份。當(dāng)將輸入FIFO的數(shù)據(jù)寫(xiě)入FLASH時(shí),同時(shí)也將數(shù)據(jù)寫(xiě)入到SRAM進(jìn)行備份;當(dāng)需要重新編程時(shí),再?gòu)模樱遥粒椭袑⑾鄳?yīng)的備份數(shù)據(jù)重新寫(xiě)入FLASH。
2.1.4 主控模塊
這一模塊完成整個(gè)存儲(chǔ)器系統(tǒng)的內(nèi)部控制,是核心控制機(jī)構(gòu),連接著存儲(chǔ)區(qū)、數(shù)據(jù)緩沖以及外部接口三個(gè)模塊,完成它們之間的數(shù)據(jù)、命令、地址、狀態(tài)的相互傳遞、轉(zhuǎn)換和處理。主控模塊又分為三個(gè)子模塊,即存儲(chǔ)區(qū)控制子模塊、存儲(chǔ)區(qū)數(shù)據(jù)子模塊和1394接口控制子模塊,分別由三片FPGA(現(xiàn)場(chǎng)可編程邏輯陣列)完成。
評(píng)論