用NiosII搭建的固態(tài)盤設(shè)備系統(tǒng)
所用的這些控制器中,除了NAND型閃存控制器和ATA控制器需要自定義開發(fā)外,都可以使用標(biāo)準(zhǔn)的IP模塊。NAND型閃存控制器和ATA控制器在自定義開發(fā)完成后也被集成到開發(fā)系統(tǒng)之中,可以方便地調(diào)用。
本文引用地址:http://www.ex-cimer.com/article/85542.htmATA控制器負(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ī)端讀/寫傳輸請求時(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)行在65MHz,而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 軟件基本流程設(shè)計(jì)
圖3并非完整的軟件流程(未涉及調(diào)試、錯(cuò)誤處理以及其他輔助流程),僅僅標(biāo)示出了系統(tǒng)最為重要的幾個(gè)處理環(huán)節(jié):緩存檢查與維護(hù)、ATA讀/寫請求的處理。從該系統(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í)際情況對緩存數(shù)據(jù)進(jìn)行清理。而其中緩存片和緩存段所有的檢查、判斷、處理操作,都是直接調(diào)用緩存管理模塊的相關(guān)函數(shù),即直接依賴于緩存策略。該模塊流程如圖4所示。
圖4 數(shù)據(jù)維護(hù)模塊流程
ATA中斷處理模塊是在ATA控制器發(fā)起中斷時(shí)進(jìn)入處理模塊的。ATA中斷模塊的主要任務(wù)包括查詢ATA控制器的事務(wù)狀態(tài)及參數(shù),獲取所需數(shù)據(jù)區(qū)域在NAND型閃存中的信息,申請緩存片,完成數(shù)據(jù)交換并清ATA中斷。其中數(shù)據(jù)區(qū)信息由存儲(chǔ)管理模塊提供,而緩存的申請則是調(diào)用緩存管理模塊的接口函數(shù)完成。該模塊流程如圖5所示。
圖5 數(shù)據(jù)維護(hù)模塊流程
軟件控制流程中還包含一些輔助性的模塊,以保證系統(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ù)讀/寫請求時(shí),首先須通過存儲(chǔ)管理模塊定位其物理位置信息,然后才能根據(jù)該信息創(chuàng)建緩存片,完成數(shù)據(jù)交換。
當(dāng)系統(tǒng)需要將某格緩存片排空刪除時(shí),對數(shù)據(jù)的回寫是需要根據(jù)緩存片內(nèi)保留的相關(guān)信息來完成具體操作的。
存儲(chǔ)管理模塊的對外接口設(shè)計(jì)只有一個(gè)函數(shù),即地址轉(zhuǎn)換,輸入操作的各種參數(shù),返回一個(gè)確定的物理塊描述結(jié)構(gòu),如表1所列。
表1 存儲(chǔ)管理模塊對外接口函數(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)對該塊的寫請求時(shí),可以將應(yīng)讀取區(qū)域指定為該區(qū)域,而應(yīng)寫入?yún)^(qū)域指向另一個(gè)物理塊,同時(shí)修改邏輯地址到物理地址的映射信息,那么當(dāng)相應(yīng)緩存片被銷毀時(shí),數(shù)據(jù)被寫入新塊,即在保證映射關(guān)系的同時(shí)避免了對該塊的過度擦寫。
評論