計(jì)算機(jī)技術(shù)的高速發(fā)展,存儲(chǔ)系統(tǒng)容量從過去的幾KB存儲(chǔ)空間,到現(xiàn)在的T8;乃至不久的將來要達(dá)到的PB存儲(chǔ)空間,其數(shù)據(jù)存取的能力在飛速擴(kuò)展。隨之而來產(chǎn)生的SCSI、FC、SAN、iSCSI、IPStorage和數(shù)據(jù)生命周期管理等嶄新的領(lǐng)域,更給計(jì)算機(jī)技術(shù)和網(wǎng)絡(luò)技術(shù)賦予了蓬勃的生命力。存數(shù)性能的提升通常是通過在基礎(chǔ)結(jié)構(gòu)上增加更多的物理磁盤驅(qū)動(dòng)數(shù)目或者采用更快轉(zhuǎn)速的磁盤驅(qū)動(dòng)器來完成。
機(jī)載存儲(chǔ)設(shè)備要求具有高的可靠性和高抗撞擊、抗震、防潮、耐高壓和承受高溫的特點(diǎn),而磁盤驅(qū)動(dòng)器存取數(shù)據(jù)時(shí)有機(jī)械轉(zhuǎn)動(dòng),其抗沖擊,抗震動(dòng)性不強(qiáng),所以不適用于航空航天等惡劣環(huán)境下使用?;诎雽?dǎo)體存儲(chǔ)芯片閃存的固態(tài)存儲(chǔ)器(SSD)的出現(xiàn)很好的解決了以上問題。SSD作為儲(chǔ)存介質(zhì),沒有機(jī)械轉(zhuǎn)動(dòng)部件、存儲(chǔ)密度高、可靠性高、體積小、重量輕,并且抗震動(dòng)、抗沖擊、溫度適應(yīng)范圍寬,具有很強(qiáng)的環(huán)境適應(yīng)性,可以滿足苛刻條件下的數(shù)據(jù)儲(chǔ)存要求,因此,高性能大容量固態(tài)存儲(chǔ)器已成為軍用重大項(xiàng)目中的只要數(shù)據(jù)儲(chǔ)存方式。
1 NAND FLASH Memory的控制要求
1.1 NAND FLASI-1存儲(chǔ)器結(jié)構(gòu)功能介紹
我們選用的是三星公司的K9K8G08UOM型FLASH芯片作為存儲(chǔ)系統(tǒng)的介質(zhì),該款NAND F1ash存儲(chǔ)容量為8448Mbit,其中主數(shù)據(jù)區(qū)為8192M bit,輔助數(shù)據(jù)區(qū)為256Mbit,工作電壓為2.7V~3.6V,I/O端口的寬度為8位。NAND FLASH不同于NOR FLASH,NOR FLASH在出廠時(shí)不容許芯片有壞塊存在,而NAND FLASH容許成品中存在壞塊,這是NAND技術(shù)所特有的現(xiàn)象。
芯片內(nèi)的8448M bit內(nèi)存是按塊和頁的概念來組織的,一個(gè)FLASH存儲(chǔ)器包含8192塊(block),每塊包含64頁(page),每頁有2112 Bytes。芯片內(nèi)具有一個(gè)容量為2112 Bytes的數(shù)據(jù)寄存器,稱為頁寄存器,用來在數(shù)據(jù)存取時(shí)作為緩沖區(qū),當(dāng)對(duì)芯片內(nèi)的某一頁進(jìn)行讀寫時(shí),其數(shù)據(jù)首選被轉(zhuǎn)移到此數(shù)據(jù)寄存器內(nèi),通過數(shù)據(jù)緩沖區(qū)和芯片外進(jìn)行數(shù)據(jù)交換,以完成讀寫功能。頁內(nèi)的2112Bytes被劃分為2048 Bytes的主數(shù)據(jù)區(qū)和164 Bytes的輔助數(shù)據(jù)區(qū),主數(shù)據(jù)區(qū)存放用戶數(shù)據(jù),輔助數(shù)據(jù)區(qū)被用來儲(chǔ)存ECC(Error correction Code,錯(cuò)誤校驗(yàn)碼)、壞塊信息和文件系統(tǒng)相關(guān)代碼。其組織關(guān)系如圖1所示:
K9K8GOSUOM地址是通過復(fù)用8個(gè)I/O口送入芯片的。這樣的設(shè)計(jì)顯著減少了芯片的管腳數(shù)目,并為系統(tǒng)升級(jí)帶來了方便。在CE和WP為低時(shí),把WE置低可以把K9K8G08UOM的命令、地址和數(shù)據(jù)通過I/O口寫進(jìn)去。數(shù)據(jù)在WE的上升沿寫入芯片。命令鎖存使能(CLE)和地址使能鎖存(ALE)用來區(qū)分I/O口的數(shù)據(jù)是命令還是地址。K9K8G08UOM有1G字節(jié)地址空間,需要30位的地址,所以字節(jié)的地址需要五個(gè)周期依次送入:行低地址、行高地址、列低地址、列中地址、列高地址。頁的讀操作和編程操作都需要同樣的五個(gè)地址周期緊跟在相應(yīng)的命令輸入之后。然而,在塊的擦除操作中,只要有三個(gè)地址周期。不同的操作通過往命令寄存器寫不同的命令來區(qū)分。
1.2 K9K8G08UOM控制器技術(shù)
本系統(tǒng)中采用FPGA作為K9K8G08UOM存儲(chǔ)器的控制器,可以在極少的軟件操作下獨(dú)立完成K9K8G08UOM的各種操作,從而降低系統(tǒng)對(duì)FLASH存儲(chǔ)器的額外支出,提高讀寫速度。FPGA的控制邏輯時(shí)序是通過硬件語言VHDL開發(fā)的,VHDL語言以其快捷、獨(dú)立、可讀性等優(yōu)點(diǎn)很好的完成FLASH基本操作的時(shí)序控制。下面是以VHDL語言以狀態(tài)機(jī)的形式開發(fā)的部分讀操作程序。
K9K8G08UOM儲(chǔ)存器的基本操作由三種類型:讀操作、頁編程操作、擦除操作,其流程圖如圖2所示。
進(jìn)行讀操作時(shí),首先通過FPGA的端口置低K9K8G08UJOM的片選信號(hào)/CS,然后置高CLE命令腳,并發(fā)送read1(0x00)命令,WE的上升沿發(fā)送,命令發(fā)送完畢后,置低CLE。在發(fā)送地址之前,置高ALE,在每一個(gè)WE上升沿依次寫入5個(gè)地址周期,之后置低ALE,完成地址的選定。接著發(fā)送read2(0x30h),開始讀取地址單元的數(shù)據(jù)。
數(shù)據(jù)頁編程操作和讀取操作流程類似。操作都是以頁為單位進(jìn)行的。當(dāng)R/Bur信號(hào)為低時(shí),說明正在對(duì)FALSH進(jìn)行寫入操作,當(dāng)為高時(shí),說明頁編程操作結(jié)束。
擦除操作是以塊為單位進(jìn)行的,即一次擦除塊內(nèi)的64頁,在發(fā)送地址時(shí)只需要3個(gè)地址周期。