利用NiosII搭建的固態(tài)盤設(shè)備系統(tǒng)
?使用NAND型閃存(Flash)作為存儲介質(zhì),而使用與硬盤完全一致的ATA接口作為設(shè)備接口的固態(tài)盤(SolidState Disk, SSD)是一種全新的存儲設(shè)備。本文介紹一種基于NiosII的SOPC系統(tǒng)的固態(tài)盤設(shè)備系統(tǒng)實現(xiàn)方法,給出一種可行的系統(tǒng)結(jié)構(gòu),包括硬件系統(tǒng)以及軟件中內(nèi)部數(shù)據(jù)緩存策略、閃存擦寫/存儲策略的模塊化實現(xiàn)方式,并給出具體的實現(xiàn)細節(jié)。
關(guān)鍵詞? 固態(tài)盤? SSD? 閃存? ATA? NiosII
引言
隨著電子技術(shù)的發(fā)展,人們不斷地追求更好的新型存儲設(shè)備。目前海量存儲領(lǐng)域中的主流產(chǎn)品非硬盤莫屬,而固態(tài)盤則被認為是一種最有可能取代硬盤的全新解決方案。與硬盤相比,其主要的優(yōu)勢在于能夠達到更高速度、更小體積、更低功耗、更小噪聲、更高可靠性,同時與硬盤一樣使用方便。
廣義上講,固態(tài)盤設(shè)備包括所有使用半導體芯片作為存儲介質(zhì)的存儲設(shè)備,例如使用動態(tài)RAM存儲數(shù)據(jù)的某些特定設(shè)備,或是CF/SD/MMC卡等同樣使用閃存存儲數(shù)據(jù)但使用了其他接口的存儲設(shè)備;但狹義上講,固態(tài)盤僅指使用NAND型閃存存儲數(shù)據(jù),使用ATA/SATA/SCSI等接口,在行為上與硬盤完全一致的存儲器。在下文中,固態(tài)盤一詞僅指狹義上的固態(tài)盤。本文介紹的是一種使用ATA接口的固態(tài)盤的實現(xiàn)方法。
1? 系統(tǒng)設(shè)計
系統(tǒng)對外的主要功能是通過ATA接口完成數(shù)據(jù)的讀/寫,與NAND型閃存芯片間的數(shù)據(jù)交換是通過緩存來完成的,對閃存芯片的讀/寫操作由系統(tǒng)內(nèi)部完成。
ATA協(xié)議中含有專門針對閃存而設(shè)計的CFA指令部分,包含了閃存擦寫等指令內(nèi)容,CF(Compact Flash)卡即使用了該命令集;而普通硬盤使用的ATA接口一般不使用該命令集,操作中只涉及數(shù)據(jù)的讀/寫操作和一些輔助特性的設(shè)置。因此在固態(tài)盤設(shè)計中不能利用CFA指令將ATA接口直接轉(zhuǎn)接至閃存接口,必須在系統(tǒng)內(nèi)部自動處理與閃存相關(guān)的操作,即通過系統(tǒng)的內(nèi)部處理向上隱藏這一操作細節(jié)。
可以在系統(tǒng)中通過數(shù)據(jù)緩存來把ATA端操作和閃存端操作分離開來,這樣就可以方便地解決傳輸協(xié)議的轉(zhuǎn)換和管理問題?;谶@種設(shè)計思路,綜合考慮閃存的管理、與ATA協(xié)議的銜接等問題,可以將實現(xiàn)系統(tǒng)時的主要問題歸結(jié)為如下兩個方面:
?、??數(shù)據(jù)緩存管理,主要面對與主機端數(shù)據(jù)交換如何發(fā)生的問題,包括緩存數(shù)據(jù)的建立、查詢、維護、失效、銷毀等問題。
?、? 數(shù)據(jù)存儲管理,主要面對數(shù)據(jù)在閃存中的物理存儲問題,包括均衡磨損、壞塊映射等問題。
由此得到的系統(tǒng)邏輯結(jié)構(gòu)框圖如圖1所示。
圖1? 固態(tài)盤設(shè)備系統(tǒng)邏輯結(jié)構(gòu)框圖
在具體的實現(xiàn)中,系統(tǒng)使用獨立的硬件接口完成ATA接口控制和NAND型閃存控制;使用大容量SDRAM芯片作為數(shù)據(jù)緩存,由Nios處理器負責調(diào)度數(shù)據(jù)流;使用Avalon總線連接所有模塊,提供快速響應的控制連接和高帶寬的數(shù)據(jù)連接。
在Nios上運行的軟件負責所有組件的控制。由于需要確保響應時間,軟件中不使用包括實時操作系統(tǒng)在內(nèi)的任何嵌入式操作系統(tǒng),所有軟件直接貼近硬件事件設(shè)計,重要事件采用中斷響應,普通事件采用輪詢響應。
2? 系統(tǒng)硬件設(shè)計
系統(tǒng)采用SOPC的設(shè)計方式,使得硬件系統(tǒng)獲得相當高的靈活度;而將所有控制邏輯集成在一個FPGA內(nèi)部的設(shè)計方法,在增強了系統(tǒng)可靠性的同時,也降低了對外部板級電路的設(shè)計要求。系統(tǒng)除FPGA芯片以外,還使用了數(shù)據(jù)存儲用NAND型閃存芯片、緩存用SDRAM、ATA接口連線以及Nios程序的代碼存儲/運行的相關(guān)芯片。
2.1? Nios系統(tǒng)簡介
一個基于Nios的SOPC系統(tǒng)主要包括Nios處理器、Avalon總線結(jié)構(gòu)和其他通過總線互連的組件模塊。
Nios處理器主要分為兩代,即Nios處理器和NiosII處理器?,F(xiàn)在廣泛使用的是NiosII處理器,下文均是針對NiosII處理器。最新的Avalon總線標準是一套擁有AvalonMM和AvalonST兩套分支標準的SOPC總線規(guī)范。下文中Avalon總線一詞泛指這兩套規(guī)范。在Altera提出的SOPC設(shè)計概念當中,兩者將分別用于不同的數(shù)據(jù)應用,因此兩者的基本結(jié)構(gòu)差異很大:AvalonMM接口是一套互聯(lián)式總線接口,主要用于多節(jié)點的互聯(lián);而AvalonST接口是一種單向點對點的接口,主要用于單向高速數(shù)據(jù)流的傳輸。在SOPC設(shè)計中,可以針對不同需求將二者結(jié)合起來使用,以提高設(shè)計的工作性能。由于AvalonST接口是最近剛剛提出的,目前廣泛使用的是AvalonMM接口,在一般設(shè)計中,完全能夠提供足夠的傳輸帶寬。
2.2? 硬件平臺結(jié)構(gòu)
硬件系統(tǒng)即FPGA內(nèi)部基于NiosII處理器的SOPC系統(tǒng),包括ATA控制器、NAND型閃存控制器、DMA控制器、2個SDRAM控制器、CFI接口閃存控制器以及其他輔助組件等,其結(jié)構(gòu)框圖如圖2所示。
圖2? 固態(tài)盤設(shè)備硬件系統(tǒng)結(jié)構(gòu)
在該結(jié)構(gòu)中,使用一塊SDRAM作為NiosII處理器的程序運行空間,使用一塊CFI接口的閃存作為NiosII處理器的軟件代碼的存儲空間,其他I/O和其他組件包括了定時器、調(diào)試端口以及用于顯示系統(tǒng)狀態(tài)的PIO端口等??偩€DMA控制器用于完成NAND型閃存與緩存空間之間的數(shù)據(jù)交換。ATA控制器則負責ATA接口的實現(xiàn),并根據(jù)配置參數(shù)利用自帶的DMA控制器直接完成與緩存之間的數(shù)據(jù)交換。NiosII處理器通過控制總線DMA控制器和ATA控制器來管理整個系統(tǒng)的數(shù)據(jù)流,實現(xiàn)靈活的管理策略。
所用的這些控制器中,除了NAND型閃存控制器和ATA控制器需要自定義開發(fā)外,都可以使用標準的IP模塊。NAND型閃存控制器和ATA控制器在自定義開發(fā)完成后也被集成到開發(fā)系統(tǒng)之中,可以方便地調(diào)用。
ATA控制器負責ATA接口的實現(xiàn)。它是系統(tǒng)中最復雜的組件,所有與主機間的交互均通過ATA接口完成。為了滿足各種需求,ATA控制器除了實現(xiàn)基本的ATA傳輸協(xié)議之外,開發(fā)中還增加了如下功能:
?、? 自帶DMA控制器。ATA控制器中自帶一個DMA控制器,只需給定源地址或目的地址,ATA控制器自帶的DMA控制器就可以自動完成與緩存之間的數(shù)據(jù)交換。
②? 帶有中斷信號源。ATA控制器帶有一個中斷源,當接收到主機端讀/寫傳輸請求時,即可發(fā)起一個中斷提示處理器優(yōu)先處理該事件。
?、? 采用與系統(tǒng)異步的時鐘。為了達到最優(yōu)性能,ATA控制器可以使用與系統(tǒng)異步的時鐘信號,而使用異步時鐘橋與系統(tǒng)總線連接。例如在該系統(tǒng)實現(xiàn)中,主系統(tǒng)運行在65 MHz,而ATA控制器運行在100 MHz。
NAND型閃存控制器則做成通用的接口控制器,提供基本的NAND型閃存讀/寫/擦除等操作即可。
3? 系統(tǒng)軟件設(shè)計
基于NiosII的SOPC平臺搭建完成之后,需要在NiosII上設(shè)計適當?shù)能浖哉{(diào)度整個系統(tǒng),實現(xiàn)數(shù)據(jù)的緩存策略和存儲策略。在軟件設(shè)計中,采用了一種流程控制與策略控制弱耦合的結(jié)構(gòu),使得緩存策略和存儲策略可以獨立開發(fā)。
3.1? 系統(tǒng)流程
考慮到所有事務中最頻繁和最重要的事務都是與ATA控制器相關(guān)的,因此在系統(tǒng)算法中做如下設(shè)計:在ATA控制器和NiosII之間連接中斷信號,使用中斷服務來處理相關(guān)事務,而其他事務則采用軟件輪詢的方式處理。一個典型的處理流程如圖3所示。
圖3并非完整的軟件流程(未涉及調(diào)試、錯誤處理以及其他輔助流程),僅僅標示出了系統(tǒng)最為重要的幾個處理環(huán)節(jié):緩存檢查與維護、ATA讀/寫請求的處理。從該系統(tǒng)流程設(shè)計中可以看到,系統(tǒng)在運行過程中將在一個軟件主循環(huán)中不斷進行數(shù)據(jù)檢查與維護,而當ATA中斷來到時則轉(zhuǎn)入ATA中斷處理。數(shù)據(jù)維護模塊和ATA處理模塊是系統(tǒng)流程控制的主要部分。
數(shù)據(jù)維護模塊主要負責檢查緩存塊是否老化/失效,緩存空間的碎片狀態(tài),并根據(jù)實際情況對緩存數(shù)據(jù)進行清理。而其中緩存片和緩存段所有的檢查、判斷、處理操作,都是直接調(diào)用緩存管理模塊的相關(guān)函數(shù),即直接依賴于緩存策略。該模塊流程如圖4所示。
ATA中斷處理模塊是在ATA控制器發(fā)起中斷時進入處理模塊的。ATA中斷模塊的主要任務包括查詢ATA控制器的事務狀態(tài)及參數(shù),獲取所需數(shù)據(jù)區(qū)域在NAND型閃存中的信息,申請緩存片,完成數(shù)據(jù)交換并清ATA中斷。其中數(shù)據(jù)區(qū)信息由存儲管理模塊提供,而緩存的申請則是調(diào)用緩存管理模塊的接口函數(shù)完成。該模塊流程如圖5所示。
軟件控制流程中還包含一些輔助性的模塊,以保證系統(tǒng)的魯棒性。這些輔助性的模塊包括獨立的系統(tǒng)初始化模塊、系統(tǒng)軟復位模塊和調(diào)試模式模塊等,以便在系統(tǒng)出現(xiàn)錯誤時及時復位整套系統(tǒng),維持系統(tǒng)正常的工作,或者供開發(fā)人員了解系統(tǒng)的錯誤所在。
3.2? 存儲管理模塊
存儲管理模塊主要實現(xiàn)了數(shù)據(jù)在NAND型閃存中的存儲策略。存儲管理模塊主要管理的信息包括:邏輯地址到物理塊地址的映射信息、物理塊磨損程度信息以及壞塊映射信息。其主要作用是確保系統(tǒng)工作的魯棒性以及盡量平均閃存塊的磨損程度。當系統(tǒng)接收到主機的數(shù)據(jù)讀/寫請求時,首先須通過存儲管理模塊定位其物理位置信息,然后才能根據(jù)該信息創(chuàng)建緩存片,完成數(shù)據(jù)交換。
當系統(tǒng)需要將某格緩存片排空刪除時,對數(shù)據(jù)的回寫是需要根據(jù)緩存片內(nèi)保留的相關(guān)信息來完成具體操作的。
存儲管理模塊的對外接口設(shè)計只有一個函數(shù),即地址轉(zhuǎn)換,輸入操作的各種參數(shù),返回一個確定的物理塊描述結(jié)構(gòu),如表1所列。
在該函數(shù)內(nèi),將進行邏輯地址到物理地址的轉(zhuǎn)換以及壞塊再映射等操作,確保最終給出的數(shù)據(jù)信息是真正正確的物理信息。在返回提供的數(shù)據(jù)信息中,包括了應讀取區(qū)域和應寫入?yún)^(qū)域兩個部分,這兩個部分可以不相同,這樣可以方便均衡磨損算法的設(shè)計。例如,如果一個塊的寫入次數(shù)已經(jīng)達到一定程度,那么當出現(xiàn)對該塊的寫請求時,可以將應讀取區(qū)域指定為該區(qū)域,而應寫入?yún)^(qū)域指向另一個物理塊,同時修改邏輯地址到物理地址的映射信息,那么當相應緩存片被銷毀時,數(shù)據(jù)被寫入新塊,即在保證映射關(guān)系的同時避免了對該塊的過度擦寫。
3.3? 緩存管理模塊
緩存管理模塊主要負責緩存的管理,所有與緩存相關(guān)的操作均須通過緩存管理模塊提供的接口函數(shù)來完成。緩存管理模塊管理的基本單元是緩存片(buffer clip),對每次傳輸請求,緩存管理將根據(jù)給定信息在緩存空間中開辟一個緩存片,用于該傳輸?shù)臄?shù)據(jù)交換。根據(jù)緩存片可能的繁忙程度,可以給予其不同的駐留時間,一種可行的方法是將物理緩存空間分成若干段,每段對應不同的駐留時間,開辟緩存片之前可以首先定位到某個段再進行操作。這樣可以有效地提高緩存片碎片整理和維護的工作效率。
緩存管理模塊對外接口非常簡單,這樣可以有效地隱藏緩存策略,使用段/片兩級管理策略的緩存管理模塊對外接口如表2所列。
其中申請緩存片的操作是唯一一個必須對外開放的接口,其他3個對緩存段的操作接口屬于可選式開放,即如果外部不需要的話,可以由緩存管理模塊自行進行緩存段的整理工作。
申請緩存片是緩存操作中最常用的操作。在具體過程中,需要判斷數(shù)據(jù)段是否已經(jīng)被緩存,以及當前緩存空間是否有足夠的空間開辟新的緩存片,并在必要時對緩存空間進行一些整理以獲取相關(guān)資源等。一種可行的操作流程如圖6所示。
在上述操作中,需要用到很多與緩存相關(guān)的操作,例如,查詢狀態(tài)、創(chuàng)建片、調(diào)整片、刪除片等。這些操作都封裝成通用的處理函數(shù)集成在緩存管理模塊內(nèi)部,供上層策略調(diào)用,但對外并不開放。
結(jié)語
基于NiosII搭建的固態(tài)盤設(shè)備系統(tǒng)完整地實現(xiàn)了固態(tài)盤應有的功能。通過使用靈活的SOPC系統(tǒng),配合弱耦合的軟件結(jié)構(gòu),使得核心算法的開發(fā)與系統(tǒng)的相關(guān)程度降到了最低,極大地方便了核心算法的獨立開發(fā)。這就使系統(tǒng)能夠在保證基本功能的同時,擁有了足夠的靈活性來面對各種可能的需求。
固態(tài)盤是近幾年最有希望替代硬盤成為主流存儲設(shè)備的新型存儲設(shè)備,各種系統(tǒng)結(jié)構(gòu)設(shè)計和相關(guān)算法等技術(shù)都在不斷的更新。面對各種實際問題,研究固態(tài)盤的系統(tǒng)結(jié)構(gòu)和各種關(guān)鍵算法不僅具有重要的學術(shù)意義,同時還有廣闊的應用前景。
評論
查看更多