基于SOA架構(gòu)的網(wǎng)絡(luò)硬盤控制器的設(shè)計(jì)
摘要:
項(xiàng)目設(shè)計(jì)一種采用“流程+引擎+構(gòu)件”的SOA三層架構(gòu)的網(wǎng)絡(luò)硬盤控制器。系統(tǒng)采用FPGA作為系統(tǒng)控制器,在FPGA內(nèi)部MicroBlaze軟核處理器上移植PetaLinux操作系統(tǒng),加載NFS網(wǎng)絡(luò)文件系統(tǒng),將擴(kuò)展Int 13H規(guī)范中定義的基本硬盤操作指令封裝成原子構(gòu)件,并采用VHDL硬件描述語(yǔ)言實(shí)現(xiàn)各原子構(gòu)件,實(shí)現(xiàn)對(duì)硬盤的基本操作。設(shè)計(jì)引擎模塊,根據(jù)NFS文件系統(tǒng)操作指令,調(diào)用相關(guān)原子操作,實(shí)現(xiàn)硬盤存儲(chǔ)空間管理、文件存儲(chǔ)操作、用戶管理等功能。本文設(shè)計(jì)網(wǎng)絡(luò)硬盤控制器可作為個(gè)人存儲(chǔ)服務(wù)器連接到以太網(wǎng),用戶可通過(guò)連接網(wǎng)絡(luò)的任意主機(jī)實(shí)現(xiàn)對(duì)服務(wù)器硬盤的訪問(wèn)管理。
1 引言
隨著電子郵箱及網(wǎng)絡(luò)硬盤的普及,用戶可不用攜帶存儲(chǔ)設(shè)備,而直接通過(guò)網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)的上傳和下載,實(shí)現(xiàn)個(gè)人數(shù)據(jù)的管理。然而,使用網(wǎng)絡(luò)運(yùn)營(yíng)商提供的網(wǎng)絡(luò)硬盤可用空間有限,且數(shù)據(jù)保密性不強(qiáng)。本項(xiàng)目旨在研究一種適合于個(gè)人應(yīng)用的網(wǎng)絡(luò)硬盤存儲(chǔ)裝置,該網(wǎng)絡(luò)硬盤使用RJ45接口連接到以太網(wǎng),通過(guò)以太網(wǎng)以TCP/IP協(xié)議,用戶可用以太網(wǎng)上任意主機(jī)實(shí)現(xiàn)對(duì)網(wǎng)絡(luò)硬盤的管理操作,與電子郵箱及網(wǎng)絡(luò)運(yùn)營(yíng)商提供的網(wǎng)絡(luò)硬盤相比,此項(xiàng)目設(shè)計(jì)的個(gè)人網(wǎng)絡(luò)存儲(chǔ)硬盤有著存儲(chǔ)空間容量大、使用安全、可靠性較高等優(yōu)點(diǎn)。
2 系統(tǒng)原理與特點(diǎn)
系統(tǒng)結(jié)構(gòu)如圖2-1所示。
圖2-1 系統(tǒng)結(jié)構(gòu)
用戶通過(guò)連接網(wǎng)絡(luò)的客戶端PC機(jī)采用TCP/IP協(xié)議實(shí)現(xiàn)文件的上傳和下載,上傳文件時(shí),用戶通過(guò)客戶端PC機(jī)向網(wǎng)絡(luò)硬盤控制器發(fā)送上傳文件指令,并發(fā)送文件數(shù)據(jù),F(xiàn)PGA內(nèi)以太網(wǎng)控制器模塊接收數(shù)據(jù)并由DDR2控制器模塊寫入到DDR2中緩存,然后根據(jù)NFS協(xié)議將數(shù)據(jù)從DDR2中讀出經(jīng)硬盤控制器模塊寫入到硬盤中保存;客戶端下載文件時(shí),用戶通過(guò)客戶端PC機(jī)向硬盤控制器發(fā)送下載文件指令,F(xiàn)PGA內(nèi)以太網(wǎng)控制器模塊接收指令后,根據(jù)NFS協(xié)議將文件數(shù)據(jù)通過(guò)硬盤控制器模塊讀出并寫入到DDR2緩存中,然后將數(shù)據(jù)由DDR2中讀出并由以太網(wǎng)控制器模塊,加載網(wǎng)絡(luò)協(xié)議棧,將數(shù)據(jù)由網(wǎng)絡(luò)發(fā)送到客戶端PC。
FPGA內(nèi)部調(diào)用MicroBlaze處理器,移植PetaLinux操作系統(tǒng),配置TCP/IP協(xié)議棧,加載NFS網(wǎng)絡(luò)文件系統(tǒng),利用VHDL語(yǔ)言設(shè)計(jì)Int13H規(guī)范中定義的對(duì)硬盤操作的原子構(gòu)件,并設(shè)計(jì)對(duì)原子構(gòu)件調(diào)用的引擎管理模塊,將原子構(gòu)件與引擎管理模塊以用戶IP核形式添加到與MicroBlaze處理器互聯(lián)的PLB片內(nèi)總線,F(xiàn)PGA內(nèi)部系統(tǒng)模塊框圖如圖2-2所示。
圖2-2 FPGA內(nèi)功能模塊
3 硬盤引擎管理模塊設(shè)計(jì)
借鑒互聯(lián)網(wǎng)分布式計(jì)算領(lǐng)域中網(wǎng)格計(jì)算、云計(jì)算技術(shù)廣泛采用的SOA架構(gòu)為核心設(shè)計(jì)思想,首先進(jìn)行業(yè)務(wù)需求分析、根據(jù)業(yè)務(wù)用例、用例場(chǎng)景、業(yè)務(wù)步驟的分析過(guò)程找出對(duì)應(yīng)的原子業(yè)務(wù)。根據(jù)業(yè)務(wù)原子業(yè)務(wù)映射到相應(yīng)的系統(tǒng)需求進(jìn)行系統(tǒng)建模,通過(guò)形式語(yǔ)義將場(chǎng)景步驟序列描述為由一系列原子構(gòu)件的組合。完成“流程+引擎+構(gòu)件”的三層SOA結(jié)構(gòu)的文件系統(tǒng)設(shè)計(jì)。
3.1 文件系統(tǒng)業(yè)務(wù)單元
文件系統(tǒng)是操作系統(tǒng)中負(fù)責(zé)管理和存儲(chǔ)文件信息的軟件系統(tǒng)。主要負(fù)責(zé)對(duì)文件存儲(chǔ)器空間進(jìn)行組織和分配,文件的存儲(chǔ)以及對(duì)存入的文件進(jìn)行保護(hù)和檢索。文件系統(tǒng)主要包括存儲(chǔ)空間管理、文件存儲(chǔ)操作、用戶管理這三個(gè)業(yè)務(wù)單元。
存儲(chǔ)實(shí)間管理主要包括對(duì)存儲(chǔ)空間的組織、分配和回收。文件存儲(chǔ)操作主要包括用戶對(duì)存儲(chǔ)空間文件的基本操作,包含文件的生成、刪除、打開、關(guān)閉、文件讀、文件寫等。用戶管理主要包括用戶的注冊(cè)、登錄以及用戶權(quán)限管理等。
3.2 提取業(yè)務(wù)用例
在提取文件系統(tǒng)的業(yè)務(wù)用例時(shí),主要是從業(yè)務(wù)主角——用戶的角度出發(fā),對(duì)文件系統(tǒng)的每一個(gè)業(yè)務(wù)單元進(jìn)行分析提取業(yè)務(wù)用例。
3.2.1 存儲(chǔ)空間管理
存儲(chǔ)空間管理業(yè)務(wù)單元的用例視圖如圖3-1所示。
圖3-1 存儲(chǔ)空間管理用例視圖
存儲(chǔ)空間管理該業(yè)務(wù)單元主要包括如下業(yè)務(wù)用例:初始化存儲(chǔ)空間、分配存儲(chǔ)空間、追加存儲(chǔ)空間、回收存儲(chǔ)空間、查詢剩余存儲(chǔ)空間。
3.2.2 文件存取操作
文件存取操作業(yè)務(wù)單元的業(yè)務(wù)用例視圖如圖3-2所示。
圖3-2 文件存取操作用例視圖
文件存取操作業(yè)務(wù)單元包括如下業(yè)務(wù)用例:建立文件、打開文件、讀文件、寫文件、關(guān)閉文件、保存文件、刪除文件、保存文件、列舉文件、檢索文件、復(fù)制文件等。
3.2.3 用戶管理
用戶管理用例視圖如圖3-3所示。
圖3-3 用戶管理用例視圖
用戶管理該業(yè)務(wù)單元包括的業(yè)務(wù)用例主要有填加用戶、刪除用戶、用戶登錄、用戶退出、設(shè)置用戶權(quán)限、修改用戶權(quán)限等。
3.3業(yè)務(wù)用例場(chǎng)景
3.3.1 劃分業(yè)務(wù)用例場(chǎng)景
業(yè)務(wù)用例在實(shí)際執(zhí)行的進(jìn)程中可能會(huì)有多種不同的情況發(fā)生,每一種情況都稱為該業(yè)務(wù)用例的一個(gè)業(yè)務(wù)用例場(chǎng)景,也可以說(shuō)業(yè)務(wù)用例場(chǎng)景是指實(shí)例化的用例。通過(guò)對(duì)文件系統(tǒng)的業(yè)務(wù)用例進(jìn)行分析,劃分出文件系統(tǒng)的業(yè)務(wù)用例場(chǎng)景如表1所示。
表3-1 文件系統(tǒng)業(yè)務(wù)用例場(chǎng)景
業(yè)務(wù)用例 | 業(yè)務(wù)用例場(chǎng)景 | 說(shuō)明 |
初始化存儲(chǔ)空間 | 初始化存儲(chǔ)空間 | 對(duì)未進(jìn)行初始化設(shè)置的空間進(jìn)行初始化。 |
分配存儲(chǔ)空間 | 分配存儲(chǔ)空間 | 為新創(chuàng)建的文件分配存儲(chǔ)空間。 |
追加存儲(chǔ)空間 | 追加存儲(chǔ)空間 | 對(duì)現(xiàn)有存儲(chǔ)空間已滿的文件追加新的存儲(chǔ)空間 |
回收存儲(chǔ)空間 | 回收存儲(chǔ)空間 | 文件被刪除后,回收不用的存儲(chǔ)空間 |
建立文件 | 創(chuàng)建文檔文件 | 創(chuàng)建一個(gè)新的文件并存檔 |
創(chuàng)建文件夾 | 建立文件的組織單元 | |
打開文件 | 打開文檔文件 | 打開一個(gè)已經(jīng)存在的文件 |
打開文件夾 | 打開一個(gè)已經(jīng)存在的文件夾 | |
讀文件 | 順序讀文件 | 從文件頭順序讀取文件內(nèi)容 |
隨機(jī)讀文件 | 從指定位置處讀取指定長(zhǎng)度的文件內(nèi)容 | |
寫文件 | 寫文件 | 從指定位置處向已創(chuàng)建文件中寫入內(nèi)容 |
關(guān)閉文件 | 關(guān)閉文檔文件 | 關(guān)閉已經(jīng)打開的文件 |
關(guān)閉文件夾 | 關(guān)閉已經(jīng)打開的文件夾 | |
保存文件 | 保存文件 | 對(duì)文件內(nèi)容或?qū)傩杂羞^(guò)更改的文件進(jìn)行存檔 |
刪除文件 | 刪除文件內(nèi)容 | 刪除指定位置處指定長(zhǎng)度的文件內(nèi)容 |
刪除文件 | 刪除已經(jīng)存在的文檔性質(zhì)的文件 | |
刪除文件夾 | 刪除已經(jīng)存在的存放文檔的文件夾 | |
列舉文件 | 列舉當(dāng)前文件夾下文件 | 列舉當(dāng)前文件夾目錄中的所有文件,包括文件夾和文檔文件。 |
列舉存儲(chǔ)空間的所有文件 | 列舉存儲(chǔ)空間中的所有文件夾和文件 | |
檢索文件 | 在當(dāng)前文件夾檢索 | 在當(dāng)前文件夾中查找指定名稱的文件或文件夾 |
在整個(gè)存儲(chǔ)空間檢索 | 從整個(gè)存儲(chǔ)空間查找指定名稱的文件或文件夾 | |
改變目錄 | 進(jìn)入子目錄 | 進(jìn)入當(dāng)前目錄的下級(jí)目錄 |
返回父目錄 | 返回當(dāng)前目錄的上級(jí)目錄 | |
填加用戶 | 注冊(cè)用戶 | 登記允許對(duì)存儲(chǔ)空間內(nèi)文件進(jìn)行操作的用戶信息 |
刪除用戶 | 刪除用戶 | 刪除已登記的文件系統(tǒng)的用戶信息 |
用戶登錄 | 用戶登錄 | 用戶進(jìn)入文件存儲(chǔ)空間 |
用戶退出 | 用戶退出 | 用戶退出文件存儲(chǔ)空間 |
修改用戶信息 | 修改用戶信息 | 修改已登記的用戶信息 |
設(shè)置用戶權(quán)限 | 設(shè)置用戶權(quán)限 | 對(duì)進(jìn)入文件存儲(chǔ)空間用戶的文件操作權(quán)限進(jìn)行設(shè)置 |
3.3.2 描述業(yè)務(wù)用例
本文對(duì)文件系統(tǒng)業(yè)務(wù)用例描述采用的是用例文檔和UML的活動(dòng)圖,通過(guò)畫出文件系統(tǒng)業(yè)務(wù)用例場(chǎng)景的活動(dòng)圖,按照所用例文檔模板的格式對(duì)活動(dòng)圖進(jìn)行描述,建立文件系統(tǒng)的業(yè)務(wù)用例模型,得到文件系統(tǒng)的業(yè)務(wù)需求文檔。
3.4 提取原子業(yè)務(wù)
前面對(duì)文件系統(tǒng)進(jìn)行了業(yè)務(wù)建模,分析了文件系統(tǒng)的業(yè)務(wù)參與者、業(yè)務(wù)用例和業(yè)務(wù)場(chǎng)景,在此小結(jié)中將分析提取文件系統(tǒng)的原子業(yè)務(wù)。主要通過(guò)分析業(yè)務(wù)場(chǎng)景的主干流程來(lái)進(jìn)行原子業(yè)務(wù)的提取。
3.4.1 存儲(chǔ)空間管理原子業(yè)務(wù)分析
以追加存儲(chǔ)空間為例分析業(yè)務(wù)流程。
前置條件:文件當(dāng)前存儲(chǔ)空間不足,文件剩余存儲(chǔ)空間中有足夠的空閑空間。
后置條件:成功為文件追加空閑存儲(chǔ)空間。
該業(yè)務(wù)流程由如下業(yè)務(wù)步驟組成:
1>.文件存儲(chǔ)空間不足,申請(qǐng)新的存儲(chǔ)空間;
2>.文件定位;
3>.追加新的存儲(chǔ)空間。
分析上述業(yè)務(wù)步驟,畫出追加存儲(chǔ)空間業(yè)務(wù)用例場(chǎng)景的業(yè)務(wù)流程圖如圖3-4所示。
圖3-4 追加存儲(chǔ)空間活動(dòng)圖
經(jīng)分析追加存儲(chǔ)空間該業(yè)務(wù)用例中可提取出兩個(gè)原子業(yè)務(wù):文件定位、追加存儲(chǔ)空間。分析存儲(chǔ)空間管理業(yè)務(wù)單元其它業(yè)務(wù)用例場(chǎng)景的業(yè)務(wù)流程后,得出該業(yè)務(wù)單元原子業(yè)務(wù)樹狀結(jié)構(gòu)圖如圖3-5所示。
圖3-5 存儲(chǔ)空間管理原子業(yè)務(wù)模型結(jié)構(gòu)圖
3.4.2 文件存取操作原子業(yè)務(wù)分析
以順序讀文件為例分析業(yè)務(wù)流程。
前置條件:文件存在并且可讀。
后置條件:從文件指定位置處順序讀取指定長(zhǎng)度內(nèi)容。
該業(yè)務(wù)流程由如下業(yè)務(wù)步驟組成:
1>.確定文件所在存儲(chǔ)空間;
2>.打開目標(biāo)文件;
3>.讀取指定長(zhǎng)度的文件內(nèi)容;
4>.關(guān)閉文件。
分析上述業(yè)務(wù)步驟,畫出順序讀文件業(yè)務(wù)用例場(chǎng)景的業(yè)務(wù)流程圖如圖3-6所示。
經(jīng)分析順序讀取文件該業(yè)務(wù)用例中可提取出四個(gè)原子業(yè)務(wù):文件定位、打開文件、順序讀文件、關(guān)閉文件。
分析文件存取操作業(yè)務(wù)單元其它業(yè)務(wù)用例場(chǎng)景的業(yè)務(wù)流程后,提取出該業(yè)務(wù)單元原子業(yè)務(wù)樹狀結(jié)構(gòu)圖如圖3-7所示。
圖3-6 順序讀取文件業(yè)務(wù)活動(dòng)圖
3.4.3 用戶管理原子業(yè)務(wù)分析
以注冊(cè)用戶為例分析業(yè)務(wù)流程。
前置條件:有權(quán)限成為文件系統(tǒng)用戶。
后置條件:注冊(cè)成功,分配用戶名。
該業(yè)務(wù)流程由如下業(yè)務(wù)步驟組成:
1>.管理員進(jìn)入存儲(chǔ)空間;
2>.登記用戶信息。
分析上述業(yè)務(wù)步驟,畫出注冊(cè)用戶業(yè)務(wù)用例場(chǎng)景的業(yè)務(wù)流程圖如圖3-8所示。經(jīng)分析注冊(cè)用戶該業(yè)務(wù)用例中可提取出兩個(gè)原子業(yè)務(wù):用戶登錄、登記用戶信息。
分析用戶管理業(yè)務(wù)單元其它業(yè)務(wù)用例場(chǎng)景的業(yè)務(wù)流程后,得出該業(yè)務(wù)單元原子業(yè)務(wù)部分樹狀結(jié)構(gòu)圖如圖3-9所示。
圖3-9 用戶管理原子業(yè)務(wù)模型結(jié)構(gòu)圖
通過(guò)以上對(duì)文件系統(tǒng)各業(yè)務(wù)單元的分析,提取文件系統(tǒng)完整的原子業(yè)務(wù)及其描述如表3-2所示。
表3-2 文件系統(tǒng)原子業(yè)務(wù)及其描述
序號(hào) | 原子業(yè)務(wù) | 描述 |
1 | 初始化空間(Initialize_Space) | 對(duì)文件系統(tǒng)的存儲(chǔ)空間容量大小和分區(qū)容量進(jìn)行初始化設(shè)置。 |
2 | 分配空間(Allocate_Space) | 為新建文件或文件夾分配存儲(chǔ)空間 |
3 | 文件定位(Locate_File) | 確定文件所在存儲(chǔ)空間地址。 |
4 | 追加空間(Supplement_Space) | 文件存儲(chǔ)空間不足紿文件追加新的存儲(chǔ)空間。 |
5 | 釋放空間(Free_Space) | 將存儲(chǔ)空間改為未用。 |
6 | 查詢分區(qū)容量(Inquiry_Space) | 查詢分區(qū)空閑存儲(chǔ)空間大小。 |
7 | 設(shè)置文件為打開狀態(tài)(Set_File_Open) | 更改文件為“打開”狀態(tài) |
8 | 設(shè)置文件夾為打狀態(tài)(Set_Folder_Open) | 更改文件夾為“打開”狀態(tài) |
9 | 設(shè)置文件為關(guān)閉狀態(tài)(Set_File_Open) | 更改文件為“關(guān)閉”狀態(tài) |
10 | 設(shè)置文件夾為關(guān)閉狀態(tài)(Set_Folder_Open) | 更改文件夾為“關(guān)閉”狀態(tài) |
11 | 順序讀文件(Sequence_Read_File) | 按順序讀取指定長(zhǎng)度的文件內(nèi)容 |
12 | 隨機(jī)讀文件(Random_Read_File) | 隨機(jī)讀取指定長(zhǎng)度的文件內(nèi)容 |
13 | 寫文件(Write_File) | 向文件內(nèi)寫入指定長(zhǎng)度文件內(nèi)容 |
14 | 更新文件(Update_File) | 文件進(jìn)行讀寫后更改文年屬性和內(nèi)容 |
15 | 查找文件(Find_File) | 在指定空間查找指定文件名的文件 |
16 | 列舉文件(File_Enumeration) | 列舉指定空間的所有文件 |
17 | 登記用戶信息(Rsgister_User_Information) | 登記文件系統(tǒng)用戶信息。 |
18 | 修改用戶信息(Modify_User_Information) | 修改已登記的用戶信息 |
19 | 刪除用戶信息 (Delete_User_Information) | 刪除已登記的文件系統(tǒng)用戶信息 |
20 | 用戶進(jìn)入 (User_Enter) | 用戶進(jìn)入文件存儲(chǔ)空間,查看空間內(nèi)文件 |
21 | 用戶退出 (User_Exit) | 用戶退出存儲(chǔ)空間 |
22 | 設(shè)置用戶權(quán)限(Set_Premissions) | 設(shè)置用戶訪問(wèn)文件的權(quán)限。 |
4 Petalinux及NFS網(wǎng)絡(luò)文件系統(tǒng)的移植
Petalinux的移植主要工作為硬件平臺(tái)搭建,以及內(nèi)核的裁剪與移植,其中硬件平臺(tái)的搭建在windows操作系統(tǒng)上安裝的Xilinx EDK環(huán)境中完成,選擇Virtex5-lx110t開發(fā)板,由于網(wǎng)絡(luò)文件服務(wù)器的需要選擇以太網(wǎng)的IP核,DDR,串口,定時(shí)器等并添加相應(yīng)的中斷,成功建立工程的block diagram 如圖4-1所示。
圖4-1 搭建工程框圖
然后進(jìn)行基于Petalinux軟件平臺(tái)的配置,操作系統(tǒng)和庫(kù)選項(xiàng)選擇Petalinux,修改主要存儲(chǔ)空間和輸入輸出的當(dāng)前值,軟件平臺(tái)搭建完畢,最后生成庫(kù)和板級(jí)支持包,然后生成比特流文件下載至目標(biāo)板測(cè)試工程的正確性。
Petalinux是一套開發(fā)環(huán)境,linux內(nèi)核的裁剪以及移植在安裝centos 5.6 操作系統(tǒng)的主機(jī)完成首先利用Petalinux自帶的工具創(chuàng)建嵌入式平臺(tái),將在windows下完成的工程拷貝到Linux系統(tǒng),轉(zhuǎn)換到Linux系統(tǒng)格式,根據(jù)開發(fā)板選擇新的平臺(tái),然后用make menuconfig 命令進(jìn)入內(nèi)核裁剪的圖形化界面,合理的裁剪之后進(jìn)行編譯將生成的image.bin文件通過(guò)下載線下載至開發(fā)板的DDR SDRAM中,在串口終端可以看到系統(tǒng)啟動(dòng)信息,如圖4-2所示。
圖4-2 系統(tǒng)啟動(dòng)信息
網(wǎng)絡(luò)文件系統(tǒng)支持以應(yīng)用程序在客戶端通過(guò)網(wǎng)絡(luò)存取位于服務(wù)器磁盤中數(shù)據(jù)的一種文件系統(tǒng)協(xié)議,大多數(shù)網(wǎng)絡(luò)文件系統(tǒng)都分成客戶端和文件服務(wù)器兩部分??蛻舳艘赃壿嬑募K的方式存取數(shù)據(jù),文件服務(wù)器使用塊映射存取真正的磁盤塊,并完成磁盤格式和元數(shù)據(jù)(如目錄)的管理,對(duì)客戶端完全屏蔽,一般客戶端和文件服務(wù)器以TCP/IP方式通信。NFS是網(wǎng)絡(luò)文件系統(tǒng)(Network File System)的簡(jiǎn)稱,是分布式計(jì)算機(jī)系統(tǒng)的一個(gè)組成部分,可實(shí)現(xiàn)在異種網(wǎng)絡(luò)上共享和裝配遠(yuǎn)程文件系統(tǒng),可讓不同操作系統(tǒng)的計(jì)算機(jī)共享數(shù)據(jù)。
NFS服務(wù)器的移植:nfs服務(wù)器的實(shí)現(xiàn)需要內(nèi)核nfsd的支持外加兩個(gè)應(yīng)用程序套件 portmap 和nfs-utils ,Petalinux中移植此應(yīng)用程序,下載此應(yīng)用程序的源碼,添加到petalinux的usr目錄下,修改makefile 和config.in 文件,重新配置內(nèi)核加入nfs服務(wù)器端的支持,同時(shí)交叉編譯此應(yīng)用程序,將生成的可執(zhí)行文件復(fù)制到 romfs 的bin 目錄下,再在etc 目錄下添加exports 文件用來(lái)設(shè)置可掛載目錄,使得Petalinux 系統(tǒng)具有nfs服務(wù)器端的功能。
5 IDE硬盤控制器的設(shè)計(jì)
IDE(Integrated Drive Electronics,集成驅(qū)動(dòng)電子設(shè)備)是由Compaq開發(fā)并由Western Digital公司生產(chǎn)的硬盤驅(qū)動(dòng)器。IDE是在早期的ST506硬盤基礎(chǔ)上改進(jìn)而成的,采用40線的單組電纜進(jìn)行連接,數(shù)據(jù)傳輸?shù)目煽啃缘玫搅嗽鰪?qiáng),硬盤制造起來(lái)變得容易,因?yàn)閺S商不需要再擔(dān)心自己的硬盤是否與其他廠商生產(chǎn)的控制器兼容,對(duì)用戶而言,硬盤安裝起來(lái)也更為方便。因此IDE接口實(shí)際上是系統(tǒng)級(jí)接口,故也稱為ATA(Advanced Technology Attachment)接口,(ATA更接近于接口的協(xié)議層標(biāo)準(zhǔn),而IDE多用于描述接口的物理結(jié)構(gòu))。其傳輸方式主要有PIO和DMA兩種。ATA接口規(guī)范從最初的ATA-1版本已發(fā)展到ATA-7版本。
5.1 硬盤接口信號(hào)
ATA/ATAPI-6標(biāo)準(zhǔn)中定義的主機(jī)和設(shè)備端之間的通信連接信號(hào)如表5-1所示。其中,左邊是對(duì)信號(hào)的描述,中間表示信號(hào)的傳輸方向(由主機(jī)到設(shè)備還是由設(shè)備到主機(jī)),右邊表示信號(hào)的名稱。
- CS(1:0)-:主機(jī)發(fā)送給硬盤的片選信號(hào),實(shí)現(xiàn)對(duì)寄存器的選擇;
- DA(2:0):主機(jī)發(fā)送給硬盤的地址信號(hào),用來(lái)實(shí)現(xiàn)對(duì)硬盤寄存器的尋址;
- DD(15:0):主機(jī)與硬盤之間的數(shù)據(jù)連接線,當(dāng)主機(jī)對(duì)硬盤寄存器進(jìn)行讀寫時(shí),使用該數(shù)據(jù)總線的低八位進(jìn)行數(shù)據(jù)傳輸,當(dāng)對(duì)數(shù)據(jù)寄存器進(jìn)行讀寫時(shí),用該總線的16位進(jìn)行數(shù)據(jù)傳輸;
- DIOR-:HDMARDY-:HSTROBE:復(fù)用信號(hào),表示對(duì)寄存器讀信號(hào)/Ultra DMA就緒/Ultra DMA數(shù)據(jù)輸出同步信號(hào),DIOR-表示主機(jī)對(duì)硬盤寄存器的讀信號(hào),HDMARDY-表示Ultra DMA數(shù)據(jù)輸入時(shí),主機(jī)發(fā)出的就緒信號(hào),HSTROBE表示Ultra DMA數(shù)據(jù)輸出時(shí)主機(jī)發(fā)出的時(shí)鐘同步信號(hào),雙沿有效,即在該信號(hào)的上升沿和下降沿,主機(jī)將數(shù)據(jù)輸出;
- DIOW-:STOP:復(fù)用信號(hào),表示主機(jī)寫寄存器命令/主機(jī)終止Ultra DMA突發(fā)傳輸信號(hào),DIOW-表示主機(jī)發(fā)出的對(duì)硬盤寄存器的寫命令信號(hào)。在Ultra DMA突發(fā)傳輸時(shí),主機(jī)可通過(guò)使能STOP信號(hào)來(lái)終止Ultra DMA突發(fā)傳輸。
- DMACK-:在DMA開始傳輸時(shí),主機(jī)對(duì)硬盤發(fā)出的DMA傳輸請(qǐng)求的應(yīng)答信號(hào);
- DMARQ:當(dāng)硬盤準(zhǔn)備好數(shù)據(jù)收發(fā)時(shí),給主機(jī)發(fā)出的DMA傳輸請(qǐng)求信號(hào);
- INTRQ:硬盤發(fā)出的中斷請(qǐng)求信號(hào);
- IORDY:DDMARDY-:DSTROBE:硬盤發(fā)出的I/O通道就緒/Ultra DMA硬盤就緒/Ultra DMA數(shù)據(jù)輸入同步信號(hào)。IORDY表示在PIO數(shù)據(jù)傳輸中,當(dāng)硬盤沒(méi)有準(zhǔn)備好數(shù)據(jù)傳輸時(shí),使能該信號(hào)無(wú)效以延長(zhǎng)主機(jī)對(duì)硬盤的訪問(wèn)時(shí)間。DDMARDY-表示在Ultra DMA數(shù)據(jù)傳輸中硬盤發(fā)出的流量控制信號(hào),該數(shù)據(jù)有效時(shí),表示硬盤已準(zhǔn)備好接收Ultra DMA傳輸數(shù)據(jù),硬盤使能該信號(hào)無(wú)效可暫停Ultra DMA數(shù)據(jù)傳輸。DSTROBE表示在Ultra DMA數(shù)據(jù)傳輸時(shí),硬盤發(fā)出的數(shù)據(jù)鎖存信號(hào),主機(jī)可在該信號(hào)的上升沿和下降沿接收數(shù)據(jù);
- RESET-:主機(jī)發(fā)出的硬盤復(fù)位信號(hào),低電平有效。
表5-1 硬盤接口信號(hào)
5.2 硬盤接口寄存器
主機(jī)對(duì)硬盤的訪問(wèn)是通過(guò)對(duì)接口寄存器的訪問(wèn)來(lái)實(shí)現(xiàn)的。ATA-6標(biāo)準(zhǔn)規(guī)定的硬盤接口寄存器如表5-2所示。這些寄存器按照功能劃分為命令寄存器(Command block registers)和控制寄存器(Control block registers)。命令寄存器用來(lái)接收主機(jī)發(fā)出的各種命令和傳送數(shù)據(jù),包括數(shù)據(jù)寄存器、扇區(qū)計(jì)數(shù)寄存器等。控制寄存器用作控制硬盤操作,如使能硬盤中斷、選擇硬盤等。
表5-2 硬盤端接口寄存器
5.3 硬盤控制器模塊設(shè)計(jì)
硬盤控制器模塊內(nèi)部結(jié)構(gòu)如圖5-1所示。
圖5-1 硬盤控制器模塊內(nèi)部結(jié)構(gòu)
5.3.1 總線接口模塊
總線接口模塊是硬盤控制器與PLB總線的連接模塊,接收處理器通過(guò)PLB總線發(fā)來(lái)的操作命令及讀寫數(shù)據(jù)。
5.3.2 硬盤復(fù)位模塊
硬盤上電后需要完成一個(gè)復(fù)位過(guò)程,即ATA/ATAPI-6標(biāo)準(zhǔn)中描述的上電及硬件復(fù)位協(xié)議。復(fù)位過(guò)程既可以通過(guò)軟件編程實(shí)現(xiàn)也可以通過(guò)在硬盤控制器內(nèi)部設(shè)計(jì)專用的邏輯來(lái)實(shí)現(xiàn)。系統(tǒng)上電后,硬盤控制器通過(guò)硬盤復(fù)位模塊生成一個(gè)寬帶大于25us的低電平復(fù)位信號(hào),復(fù)位信號(hào)回到高電平2ms后,即復(fù)位操作完成。復(fù)位信號(hào)波形如圖5-2所示。
圖5-2 復(fù)位信號(hào)波形
5.3.3 PIO模塊
該模塊的功能是產(chǎn)生讀寫硬盤內(nèi)部寄存器的時(shí)序,該模塊產(chǎn)生待訪問(wèn)的硬盤寄存器的地址線,并輸出讀寫信號(hào),根據(jù)數(shù)據(jù)傳輸方向,發(fā)送數(shù)據(jù)到數(shù)據(jù)線或從數(shù)據(jù)線上讀取數(shù)據(jù),操作完成后,釋放地址、數(shù)據(jù)線。
根據(jù)PIO讀寫時(shí)序,該模塊應(yīng)實(shí)現(xiàn)以下功能:
- 產(chǎn)生訪問(wèn)硬盤寄存器的地址信號(hào),并具有一定有效寬帶。
- 產(chǎn)生相應(yīng)的讀寫信號(hào)DIOR-/DIOW-,當(dāng)為寫操作時(shí),使數(shù)據(jù)具有規(guī)定的建立和保持時(shí)間;當(dāng)為讀操作時(shí),給出讀數(shù)據(jù)的時(shí)機(jī)。
- 處理硬盤輸入的IORDY信號(hào),當(dāng)IORDY無(wú)效時(shí),應(yīng)延長(zhǎng)對(duì)硬盤的讀寫周期。
5.3.4 Ultra DMA模塊
Ultra DMA模塊是硬盤控制器的關(guān)鍵模塊,其主要功能是實(shí)現(xiàn)Ultra DMA突發(fā)數(shù)據(jù)輸出時(shí)序的控制。Ultra DMA操作可分為三個(gè)階段,分別是初始階段、數(shù)據(jù)傳輸階段、傳輸中止階段。
初始階段的時(shí)序描述為:當(dāng)硬盤發(fā)出DMA請(qǐng)求信號(hào)DMARQ,控制器通過(guò)DMACK-進(jìn)行應(yīng)答,等到硬盤發(fā)出的DDMARDY-信號(hào)有效后,控制器開始輸出HSTROBE信號(hào)。
數(shù)據(jù)傳輸階段的時(shí)序描述為:HSTROBE時(shí)鐘的上升沿和下降沿都觸發(fā)數(shù)據(jù)輸出,在數(shù)據(jù)傳輸過(guò)程中,控制器可通過(guò)停止產(chǎn)生HSTROBE信號(hào)來(lái)暫停數(shù)據(jù)的輸出,硬盤可以通過(guò)使DDMARDY-信號(hào)無(wú)效來(lái)暫停數(shù)據(jù)的接收。
傳輸終止階段,控制器和硬盤都可終止數(shù)據(jù)傳輸,終止數(shù)據(jù)傳輸可分為四個(gè)過(guò)程:停止請(qǐng)求、停止檢查、HSTROBE返回高電平、發(fā)送CRC校驗(yàn)值。對(duì)于控制器停止數(shù)據(jù)傳輸,首先停止產(chǎn)生HSTROBE時(shí)鐘信號(hào),發(fā)出STOP命令信號(hào),控制器檢查硬盤的DDMARDY和DMARQ均無(wú)效后,使HSTROBE返回高電平,使DMACK-無(wú)效,并在DMACK-信號(hào)跳變沿處輸出CRC校驗(yàn)值到數(shù)據(jù)線DD(15:0),如圖5-3所示。對(duì)于硬盤停止數(shù)據(jù)傳輸,通過(guò)使DDMARDY和DMARQ均無(wú)效來(lái)停止數(shù)據(jù)傳輸,控制器需要在tL1時(shí)間內(nèi)發(fā)出STOP信號(hào),使HSTROBE返回高電平,使DMACK-無(wú)效,并輸出CRC校驗(yàn)值至DD(15:0),如圖5-4所示。
圖5-3 控制器終止Ultra DMA數(shù)據(jù)傳輸時(shí)序
圖5-4 硬盤終止Ultra DMA數(shù)據(jù)傳輸時(shí)序
5.3.5 控制器模塊
控制模塊是硬盤控制器的核心,該模塊的主要功能是實(shí)現(xiàn)CPU對(duì)硬盤控制器中寄存器的配置,并根據(jù)相關(guān)寄存器的寫入信息實(shí)現(xiàn)對(duì)應(yīng)的控制操作。
6 總結(jié)
項(xiàng)目設(shè)計(jì)一種基于“流程+引擎+構(gòu)件”SOA三層架構(gòu)的網(wǎng)絡(luò)硬盤控制器。采用FPGA作為系統(tǒng)控制器,在MicroBlaze軟核處理器上移植PetaLinux操作系統(tǒng),加載NFS網(wǎng)絡(luò)文件系統(tǒng),將擴(kuò)展Int 13H規(guī)范中定義的基本硬盤操作指令封裝成原子構(gòu)件,采用VHDL硬件描述語(yǔ)言實(shí)現(xiàn)各原子構(gòu)件操作。設(shè)計(jì)引擎管理模塊,根據(jù)NFS文件系統(tǒng)操作指令,調(diào)用相關(guān)原子操作,實(shí)現(xiàn)硬盤存儲(chǔ)空間管理、文件存儲(chǔ)操作、用戶管理等功能。
評(píng)論