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