用NiosII搭建的固態(tài)盤(pán)設備系統
所用的這些控制器中,除了NAND型閃存控制器和ATA控制器需要自定義開(kāi)發(fā)外,都可以使用標準的IP模塊。NAND型閃存控制器和ATA控制器在自定義開(kāi)發(fā)完成后也被集成到開(kāi)發(fā)系統之中,可以方便地調用。
本文引用地址:http://dyxdggzs.com/article/85542.htmATA控制器負責ATA接口的實(shí)現。它是系統中最復雜的組件,所有與主機間的交互均通過(guò)ATA接口完成。為了滿(mǎn)足各種需求,ATA控制器除了實(shí)現基本的ATA傳輸協(xié)議之外,開(kāi)發(fā)中還增加了如下功能:
?、?自帶DMA控制器。ATA控制器中自帶一個(gè)DMA控制器,只需給定源地址或目的地址,ATA控制器自帶的DMA控制器就可以自動(dòng)完成與緩存之間的數據交換。
?、?帶有中斷信號源。ATA控制器帶有一個(gè)中斷源,當接收到主機端讀/寫(xiě)傳輸請求時(shí),即可發(fā)起一個(gè)中斷提示處理器優(yōu)先處理該事件。
?、?采用與系統異步的時(shí)鐘。為了達到最優(yōu)性能,ATA控制器可以使用與系統異步的時(shí)鐘信號,而使用異步時(shí)鐘橋與系統總線(xiàn)連接。例如在該系統實(shí)現中,主系統運行在65MHz,而ATA控制器運行在100 MHz。
NAND型閃存控制器則做成通用的接口控制器,提供基本的NAND型閃存讀/寫(xiě)/擦除等操作即可。
3 系統軟件設計
基于NiosII的SOPC平臺搭建完成之后,需要在NiosII上設計適當的軟件以調度整個(gè)系統,實(shí)現數據的緩存策略和存儲策略。在軟件設計中,采用了一種流程控制與策略控制弱耦合的結構,使得緩存策略和存儲策略可以獨立開(kāi)發(fā)。
3.1 系統流程
考慮到所有事務(wù)中最頻繁和最重要的事務(wù)都是與ATA控制器相關(guān)的,因此在系統算法中做如下設計:在A(yíng)TA控制器和NiosII之間連接中斷信號,使用中斷服務(wù)來(lái)處理相關(guān)事務(wù),而其他事務(wù)則采用軟件輪詢(xún)的方式處理。一個(gè)典型的處理流程如圖3所示。
圖3 軟件基本流程設計
圖3并非完整的軟件流程(未涉及調試、錯誤處理以及其他輔助流程),僅僅標示出了系統最為重要的幾個(gè)處理環(huán)節:緩存檢查與維護、ATA讀/寫(xiě)請求的處理。從該系統流程設計中可以看到,系統在運行過(guò)程中將在一個(gè)軟件主循環(huán)中不斷進(jìn)行數據檢查與維護,而當ATA中斷來(lái)到時(shí)則轉入ATA中斷處理。數據維護模塊和ATA處理模塊是系統流程控制的主要部分。
數據維護模塊主要負責檢查緩存塊是否老化/失效,緩存空間的碎片狀態(tài),并根據實(shí)際情況對緩存數據進(jìn)行清理。而其中緩存片和緩存段所有的檢查、判斷、處理操作,都是直接調用緩存管理模塊的相關(guān)函數,即直接依賴(lài)于緩存策略。該模塊流程如圖4所示。
圖4 數據維護模塊流程
ATA中斷處理模塊是在A(yíng)TA控制器發(fā)起中斷時(shí)進(jìn)入處理模塊的。ATA中斷模塊的主要任務(wù)包括查詢(xún)ATA控制器的事務(wù)狀態(tài)及參數,獲取所需數據區域在NAND型閃存中的信息,申請緩存片,完成數據交換并清ATA中斷。其中數據區信息由存儲管理模塊提供,而緩存的申請則是調用緩存管理模塊的接口函數完成。該模塊流程如圖5所示。
圖5 數據維護模塊流程
軟件控制流程中還包含一些輔助性的模塊,以保證系統的魯棒性。這些輔助性的模塊包括獨立的系統初始化模塊、系統軟復位模塊和調試模式模塊等,以便在系統出現錯誤時(shí)及時(shí)復位整套系統,維持系統正常的工作,或者供開(kāi)發(fā)人員了解系統的錯誤所在。
3.2 存儲管理模塊
存儲管理模塊主要實(shí)現了數據在NAND型閃存中的存儲策略。存儲管理模塊主要管理的信息包括:邏輯地址到物理塊地址的映射信息、物理塊磨損程度信息以及壞塊映射信息。其主要作用是確保系統工作的魯棒性以及盡量平均閃存塊的磨損程度。當系統接收到主機的數據讀/寫(xiě)請求時(shí),首先須通過(guò)存儲管理模塊定位其物理位置信息,然后才能根據該信息創(chuàng )建緩存片,完成數據交換。
當系統需要將某格緩存片排空刪除時(shí),對數據的回寫(xiě)是需要根據緩存片內保留的相關(guān)信息來(lái)完成具體操作的。
存儲管理模塊的對外接口設計只有一個(gè)函數,即地址轉換,輸入操作的各種參數,返回一個(gè)確定的物理塊描述結構,如表1所列。
表1 存儲管理模塊對外接口函數
在該函數內,將進(jìn)行邏輯地址到物理地址的轉換以及壞塊再映射等操作,確保最終給出的數據信息是真正正確的物理信息。在返回提供的數據信息中,包括了應讀取區域和應寫(xiě)入區域兩個(gè)部分,這兩個(gè)部分可以不相同,這樣可以方便均衡磨損算法的設計。例如,如果一個(gè)塊的寫(xiě)入次數已經(jīng)達到一定程度,那么當出現對該塊的寫(xiě)請求時(shí),可以將應讀取區域指定為該區域,而應寫(xiě)入區域指向另一個(gè)物理塊,同時(shí)修改邏輯地址到物理地址的映射信息,那么當相應緩存片被銷(xiāo)毀時(shí),數據被寫(xiě)入新塊,即在保證映射關(guān)系的同時(shí)避免了對該塊的過(guò)度擦寫(xiě)。
評論