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