国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種基于fpga的sata主控制器的制作方法

      文檔序號:6375293閱讀:375來源:國知局
      專利名稱:一種基于fpga的sata主控制器的制作方法
      技術(shù)領(lǐng)域
      本發(fā)明屬于電子信息領(lǐng)域,計(jì)算機(jī)外圍設(shè)備及關(guān)鍵部件方向,具體涉及一種計(jì)算機(jī)等產(chǎn)品使用的安全存儲設(shè)備的控制器。本發(fā)明使用現(xiàn)場可編程門陣列(FPGA,F(xiàn)ieldProgrammable Gate Array)芯片作為實(shí)現(xiàn)平臺,通過硬件描述語言(HDL, HardwareDescription Language)構(gòu)建邏輯,實(shí)現(xiàn)對符合 SATA (Serial AdvancedTechnologyAttachment)協(xié)議接口的存儲設(shè)備(例如SATA接口硬盤)的讀寫控制。
      背景技術(shù)
      隨著近年來高速串行數(shù)據(jù)傳輸技術(shù)的發(fā)展,計(jì)算機(jī)內(nèi)部的多種外圍設(shè)備的互聯(lián)形式都逐步從并行總線形式過渡到了串行化互聯(lián)。例如,PCI總線逐步被PCI Express取代。磁盤,包括傳統(tǒng)的機(jī)械磁盤和近年來快速發(fā)展固態(tài)盤(SSD),一直是計(jì)算機(jī)系統(tǒng)的主要存儲 設(shè)備,硬盤設(shè)備的互聯(lián)接口也從ATA并行規(guī)范過渡到了數(shù)據(jù)串行化傳輸?shù)腟ATA規(guī)范。SATA協(xié)議發(fā)展至今,經(jīng)歷了第一代I. 5Gbps速率,第二代3. OGbps速率,目前定型在第三代6Gbps速率,即接口的理論數(shù)據(jù)傳輸帶寬已達(dá)到600MBps。隨著半導(dǎo)體工藝的進(jìn)步,F(xiàn)PGA芯片發(fā)展迅速。FPGA器件在IC芯片原型設(shè)計(jì)、定制化數(shù)字邏輯芯片設(shè)計(jì)、數(shù)字信號處理、嵌入式等領(lǐng)域所扮演的角色日益重要。目前較高端的FPGA器件內(nèi)部集成了數(shù)據(jù)高速串行化傳輸所需的電路部件,例如美國Xilinx公司的Virtex5 LXT系列FPGA內(nèi)部集成的命名為GTP的電路部件。這些電路部件可實(shí)現(xiàn)高速串行數(shù)據(jù)傳輸所需的8B10B編解碼,數(shù)據(jù)時鐘恢復(fù),帶外信號(OOB)產(chǎn)生等功能。這樣,在FPGA內(nèi)部實(shí)現(xiàn)諸如SATA,PCIE等協(xié)議便成為了可能。由于FPGA器件本身具有邏輯可定制的特點(diǎn),使得在FPGA內(nèi)部實(shí)現(xiàn)的SATA控制器具備了很高的靈活性,能在可編程片上系統(tǒng)(SOPC)的構(gòu)建過程中充當(dāng)重要角色,因此具有廣闊的市場需求?,F(xiàn)有的基于FPGA實(shí)現(xiàn)的SATA協(xié)議主控制器IP核款型有限,并且一般只實(shí)現(xiàn)到SATA協(xié)議的傳輸層,留給用戶的使用接口仍然較為復(fù)雜,需要用戶對SATA協(xié)議以及磁盤相關(guān)技術(shù)規(guī)范進(jìn)行一定的學(xué)習(xí)后才能有效使用,這不利于普通用戶快速地使用FPGA實(shí)現(xiàn)對磁盤的讀寫控制。

      發(fā)明內(nèi)容
      本發(fā)明是為了提供一種基于FPGA實(shí)現(xiàn)的,用戶接口簡單友好而且邏輯結(jié)構(gòu)簡潔高效的SATA協(xié)議主控制器IP核,從而使得用戶能夠快速地使用FPGA器件實(shí)現(xiàn)對SATA接口磁盤的讀寫控制。本發(fā)明所涉及的一種基于FPGA的SATA主控制器,主要包括SATA應(yīng)用層實(shí)現(xiàn)模塊(I),SATA傳輸層實(shí)現(xiàn)模塊(2),SATA鏈路層實(shí)現(xiàn)模塊(3),SATA物理層實(shí)現(xiàn)模塊(4)。所述的SATA應(yīng)用層實(shí)現(xiàn)模塊(I)具有用戶使用接口,所述的用戶使用接口由用戶指令寄存器(101),用戶參數(shù)寄存器(102),用戶數(shù)據(jù)SRAM端口(103),用戶數(shù)據(jù)FIFO端口
      (104),應(yīng)用層狀態(tài)報(bào)告端口(107) 5個端口組成;SATA應(yīng)用層實(shí)現(xiàn)模塊(I)內(nèi)部還具有應(yīng)用層狀態(tài)機(jī)(105)和應(yīng)用層數(shù)據(jù)傳輸控制器(106)。所述的用戶指令寄存器(101):用于設(shè)置硬盤讀寫啟動等指令并查詢關(guān)鍵狀態(tài)。所述的用戶參數(shù)寄存器(102):用于參數(shù)設(shè)置,可設(shè)置的參數(shù)有讀寫指令類別、讀寫地址、讀寫數(shù)據(jù)數(shù)量、讀寫數(shù)據(jù)通過用戶數(shù)據(jù)SRAM端口(103)傳輸還是通過用戶數(shù)據(jù)FIFO端口 (104)傳輸?shù)鹊取K龅挠脩魯?shù)據(jù)SR AM端口(103):用于數(shù)據(jù)傳輸,其端口信號與常見的SRAM器件端口信號類似,能夠直接與FPGA內(nèi)部的SRAM連接。所述的用戶數(shù)據(jù)FIFO端口(104):用于數(shù)據(jù)傳輸,其端口信號與常見的FIFO器件端口信號類似,能夠直接與FPGA內(nèi)部的FIFO連接。所述的應(yīng)用層狀態(tài)報(bào)告端口(107):報(bào)告SATA應(yīng)用層實(shí)現(xiàn)模塊⑴的工作狀態(tài)。所述的應(yīng)用層狀態(tài)機(jī)(105):接收來自用戶指令寄存器(101)以及用戶參數(shù)寄存器(102)的指令參數(shù),并控制應(yīng)用層數(shù)據(jù)傳輸控制器(106)和SATA傳輸層實(shí)現(xiàn)模塊(2)的端口,從而控制用戶數(shù)據(jù)與SATA接口硬盤(5)之間的輸入輸出交互。所述的應(yīng)用層數(shù)據(jù)傳輸控制器(106):接收來自應(yīng)用層狀態(tài)機(jī)(105)的指令,起到數(shù)據(jù)傳輸流向選擇開關(guān)的作用,使數(shù)據(jù)流在用戶數(shù)據(jù)SRAM端口(103)與SATA接口硬盤(5)之間交互,或者使用戶數(shù)據(jù)在用戶數(shù)據(jù)FIFO端口(104)與SATA接口硬盤(5)之間交互。所述的SATA傳輸層實(shí)現(xiàn)模塊(2):內(nèi)部包含傳輸層指令寄存器(201),傳輸層參數(shù)寄存器(202),傳輸層狀態(tài)報(bào)告端口(207),傳輸層狀態(tài)機(jī)(206),數(shù)據(jù)幀參數(shù)存儲區(qū)(203),存盤數(shù)據(jù)寫出存儲區(qū)(204),存盤數(shù)據(jù)讀入存儲區(qū)(205);在寫硬盤時,傳輸層狀態(tài)機(jī)(206)根據(jù)傳輸層指令寄存器(201)和傳輸層參數(shù)寄存器(202)接收到的指令,將數(shù)據(jù)幀參數(shù)寫入數(shù)據(jù)幀參數(shù)存儲區(qū)(203),再命令SATA鏈路層實(shí)現(xiàn)模塊(3)啟動,將數(shù)據(jù)幀參數(shù)存儲區(qū)(203)和存盤數(shù)據(jù)寫出存儲區(qū)(204)中的數(shù)據(jù)整合后寫出到硬盤;在讀硬盤時,經(jīng)過SATA鏈路層實(shí)現(xiàn)模塊(3)處理后的幀參數(shù)存入數(shù)據(jù)幀參數(shù)存儲區(qū)(203),存盤內(nèi)容數(shù)據(jù)存入存盤數(shù)據(jù)讀入存儲區(qū)(205),同時傳輸層狀態(tài)機(jī)(206)得知數(shù)據(jù)幀被接收,繼而通過傳輸層指令寄存器(201)和傳輸層參數(shù)寄存器(202)告知SATA應(yīng)用層實(shí)現(xiàn)模塊(I)。所述的SATA鏈路層實(shí)現(xiàn)模塊(3):包括鏈路層指令狀態(tài)寄存器(301),鏈路層狀態(tài)機(jī)(302),SATA原語數(shù)據(jù)存儲區(qū)(303),數(shù)據(jù)選擇復(fù)選器(304),循環(huán)冗余校驗(yàn)值插入器(305),擾碼器(307),數(shù)據(jù)發(fā)送端口(310),數(shù)據(jù)接收端口(311),原語檢查器(308),解擾器(309),循環(huán)冗余校驗(yàn)檢查器(306),數(shù)據(jù)甄別器(312);在寫硬盤時,鏈路層狀態(tài)機(jī)(302)根據(jù)鏈路層指令狀態(tài)寄存器(301)接收到的指令,選擇SATA原語數(shù)據(jù)存儲區(qū)(303)中存儲的某些原語,并控制數(shù)據(jù)選擇復(fù)選器(304)選擇不同數(shù)據(jù)源,使數(shù)據(jù)經(jīng)過循環(huán)冗余校驗(yàn)值插入器(305)和擾碼器(307)的處理后,形成最終要發(fā)送到SATA接口硬盤(5)的數(shù)據(jù)幀;在讀硬盤時,數(shù)據(jù)幀首先經(jīng)過解擾器(309)進(jìn)行解擾處理,然后原語檢查器(308)將檢查到的原語告知鏈路層狀態(tài)機(jī)(302),循環(huán)冗余校驗(yàn)檢查器(306)對數(shù)據(jù)幀進(jìn)行循環(huán)冗余校驗(yàn)檢查,將檢查結(jié)果告知鏈路層狀態(tài)機(jī)(302);經(jīng)過檢查的數(shù)據(jù)再被數(shù)據(jù)甄別器(312)分別篩選出幀參數(shù)數(shù)據(jù)并存入數(shù)據(jù)幀參數(shù)存儲區(qū)(203),篩選出原始存盤數(shù)據(jù)并存入存盤數(shù)據(jù)讀入存儲區(qū)(205)。所述的SATA物理層實(shí)現(xiàn)模塊(4)基于FPGA芯片內(nèi)部集成的高速串行數(shù)據(jù)收發(fā)器設(shè)計(jì),通過數(shù)據(jù)發(fā)送端口(310)和數(shù)據(jù)接收端口(311)與SATA鏈路層實(shí)現(xiàn)模塊(3)連接,SATA物理層實(shí)現(xiàn)模塊(4)通過SATA協(xié)議規(guī)范定義的兩對高速串行差分?jǐn)?shù)據(jù)線與SATA接口硬盤(5)通信。所述的循環(huán)冗余校驗(yàn)值插入器(305)以及循環(huán)冗余校驗(yàn)檢查器(306)都采用了CRC-32位模式,計(jì)算公式符合SATA協(xié)議規(guī)范要求的CRC計(jì)算公式,即G(X)= X32+X26+X23+X22+X16+X12+Xn+X10+X8+X7+X5+X4+X2+X+1,并且計(jì)算初始值設(shè)定為 0x52325032。所述的擾碼器(307)以及解擾器(309)都采用了符合SATA協(xié)議規(guī)范要求的擾碼計(jì)算公式,即G(X) = X16+X15+X13+X4+l,并且計(jì)算初始值設(shè)定為0xR)F6。 本發(fā)明能夠達(dá)到的有益效果是 I、設(shè)計(jì)具有高度靈活性,可移植性。除了 SATA協(xié)議的物理層使用FPGA片內(nèi)專門電路實(shí)現(xiàn)外,該主控制器IP核的其余邏輯全部使用HDL代碼編寫,完全可綜合實(shí)現(xiàn),可實(shí)現(xiàn)在多種FPGA器件上,也可用于定制化IC的設(shè)計(jì)。2、本發(fā)明所提供給使用者的接口非常簡單,用戶只要控制SRAM和FIFO類型的接口,以及寄存器接口即可實(shí)現(xiàn)對磁盤的讀寫控制,這使得用戶在無需學(xué)習(xí)SATA協(xié)議的情況下即可使用本發(fā)明在FPGA器件上實(shí)現(xiàn)對SATA接口存儲設(shè)備的讀寫控制。3、本發(fā)明性能優(yōu)異,設(shè)計(jì)精巧,豐富了數(shù)字邏輯芯片IP庫,有利于用戶使用本發(fā)明搭建更高層次的存儲設(shè)備或相關(guān)專業(yè)設(shè)備,有利于進(jìn)一步提升我國在這一細(xì)分市場的競爭力。


      圖I是IP核功能模塊拓?fù)鋱D;圖2是IP核測試模型拓?fù)鋱D;圖3是IP核實(shí)現(xiàn)所需的FPGA資源消耗統(tǒng)計(jì)圖;圖4是用戶指令寄存器端口 101信號定義圖;圖5是用戶參數(shù)寄存器端口 102信號定義圖;圖6是用戶參數(shù)寄存器的具體使用定義圖;圖7是用戶指令類型定義圖;圖8是用戶數(shù)據(jù)SRAM端口 103信號定義圖;圖9是用戶數(shù)據(jù)FIFO端口 104信號定義圖;圖10是讀硬盤廠商信息并存入用戶數(shù)據(jù)SRAM流程圖;圖11是讀硬盤數(shù)據(jù)并存入用戶數(shù)據(jù)SRAM流程圖;圖12是用戶數(shù)據(jù)SRAM中的數(shù)據(jù)寫入硬盤流程圖;圖13是用戶數(shù)據(jù)FIFO中的數(shù)據(jù)寫入硬盤流程圖;圖14是讀硬盤數(shù)據(jù)并存入用戶數(shù)據(jù)FIFO流程圖;圖15是IP核測試程序串口指令主菜單示意16是IP核對西數(shù)WD1002FAEX的讀取速度測試圖附圖標(biāo)記說明如下99-SATA 主控制器,I-SATA應(yīng)用層實(shí)現(xiàn)模塊,
      2-SATA傳輸層實(shí)現(xiàn)模塊,3-SATA鏈路層實(shí)現(xiàn)模塊,4-SATA物理層實(shí)現(xiàn)模塊,5-SATA 接口硬盤,101-用戶指令寄存器,102-用戶參數(shù)寄存器,103-用戶數(shù)據(jù) SRAM 端口,
      104-用戶數(shù)據(jù) FIFO 端口,105-應(yīng)用層狀態(tài)機(jī),106-應(yīng)用層數(shù)據(jù)傳輸控制器,107-應(yīng)用層狀態(tài)報(bào)告端口,201-傳輸層指令寄存器,202-傳輸層參數(shù)寄存器,203-數(shù)據(jù)幀參數(shù)存儲區(qū),204-存盤數(shù)據(jù)寫出存儲區(qū),205-存盤數(shù)據(jù)讀入存儲區(qū),206-傳輸層狀態(tài)機(jī),207-傳輸層狀態(tài)報(bào)告端口,301-狀態(tài)寄存器,302-鏈路層狀態(tài)機(jī),303-SATA原語數(shù)據(jù)存儲區(qū),304-數(shù)據(jù)選擇復(fù)選器,305-循環(huán)冗余校驗(yàn)值插入器,306-循環(huán)冗余校驗(yàn)檢查器,307-擾碼器,308-原語檢查器,309-解擾器,310-數(shù)據(jù)發(fā)送端口,311-數(shù)據(jù)接收端口,312-數(shù)據(jù)甄別器。
      具體實(shí)施例方式本發(fā)明在設(shè)計(jì)時遵循的核心設(shè)計(jì)思想有兩條(I)、為使用者提供盡量簡潔的應(yīng)用接口,可以讓使用者感覺到讀寫磁盤和讀寫SRAM芯片一樣容易。(2)、結(jié)構(gòu)清晰地實(shí)現(xiàn)SATA協(xié)議,并且為了到達(dá)簡化用戶接口的目的,在SATA協(xié)議之外,對設(shè)計(jì)進(jìn)行更上一層封裝。即除了 SATA協(xié)議規(guī)范中說明的物理層、鏈路層,傳輸層之外、還封裝了一層邏輯,命名為應(yīng)用層。本發(fā)明以美國Xilinx公司的Virtex5系列FPGA器件(具體型號為XC5VLX110T-1FFG1136C)為開發(fā)平臺。其中,SATA物理層邏輯使用FPGA芯片內(nèi)部集成的名為GTP的高速串行數(shù)據(jù)收發(fā)器為基礎(chǔ)實(shí)現(xiàn);鏈路層、傳輸層、應(yīng)用層使用VHDL編碼,經(jīng)過邏輯綜合之后使用FPGA中的寄存器、查找表、塊存儲器等資源實(shí)現(xiàn)。最終SATA主控制器99經(jīng)過Xilinx公司開發(fā)軟件ISE 13. 2綜合后,其所耗資源統(tǒng)計(jì)如圖3。如圖I所示,本發(fā)明包括SATA應(yīng)用層實(shí)現(xiàn)模塊I,SATA傳輸層實(shí)現(xiàn)模塊2,SATA鏈路層實(shí)現(xiàn)模塊3,SATA物理層實(shí)現(xiàn)模塊4。SATA應(yīng)用層實(shí)現(xiàn)模塊I具有用戶使用接口,所述的用戶使用接口由用戶指令寄存器101,用戶參數(shù)寄存器102,用戶數(shù)據(jù)SRAM端口 103,用戶數(shù)據(jù)FIFO端口 104,應(yīng)用層狀態(tài)報(bào)告端口 107等5個端口組成;SATA應(yīng)用層實(shí)現(xiàn)模塊I內(nèi)部還具有應(yīng)用層狀態(tài)機(jī)105和應(yīng)用層數(shù)據(jù)傳輸控制器106。用戶指令寄存器101 :用于設(shè)置硬盤讀寫啟動等指令并查詢關(guān)鍵狀態(tài)。用戶參數(shù)寄存器102 :用于參數(shù)設(shè)置,可設(shè)置的參數(shù)有讀寫指令類別、讀寫地址、讀寫數(shù)據(jù)數(shù)量、讀寫數(shù)據(jù)通過用戶數(shù)據(jù)SRAM端口 103傳輸還是通過用戶數(shù)據(jù)FIFO端口 104 傳輸?shù)鹊?。用戶?shù)據(jù)SRAM端口 103 :用于數(shù)據(jù)傳輸,其端口信號與常見的SRAM器件端口信號類似,能夠直接與FPGA內(nèi)部的SRAM連接。用戶數(shù)據(jù)FIFO端口 104 :用于數(shù)據(jù)傳輸,其端口信號與常見的FIFO器件端口信號類似,能夠直接與FPGA內(nèi)部的FIFO連接。應(yīng)用層狀態(tài)報(bào)告端口 107 :報(bào)告SATA應(yīng)用層實(shí)現(xiàn)模塊I的工作狀態(tài)。應(yīng)用層狀態(tài)機(jī)105 :接收來自用戶指令寄存器101以及用戶參數(shù)寄存器102的指令參數(shù),并控制應(yīng)用層數(shù)據(jù)傳輸控制器106和SATA傳輸層實(shí)現(xiàn)模塊2的端口,從而控制用戶數(shù)據(jù)與SATA接口硬盤5之間的輸入輸出交互。應(yīng)用層數(shù)據(jù)傳輸控制器106 :接收來自應(yīng)用層狀態(tài)機(jī)105的指令,起到數(shù)據(jù)傳輸流向選擇開關(guān)的作用,使數(shù)據(jù)流在用戶數(shù)據(jù)SRAM端口 103與SATA接口硬盤5之間交互,或者使用戶數(shù)據(jù)在用戶數(shù)據(jù)FIFO端口 104與SATA接口硬盤5之間交互。用戶使用本發(fā)明對硬盤進(jìn)行讀寫控制時,基本的流程是I、使用用戶數(shù)據(jù)FIFO端口 104或者用戶數(shù)據(jù)SRAM端口 103,準(zhǔn)備好寫入磁盤的數(shù)據(jù)或者磁盤讀出數(shù)據(jù)的接收緩沖區(qū)。具體來講,將用于存儲數(shù)據(jù)的FIFO或者SRAM連接到上述兩種接口即可。2、向用戶參數(shù)寄存器102寫入指令參數(shù),例如寫入本次磁盤讀寫的扇區(qū)地址。3、向用戶指令寄存器101接口發(fā)出啟動信號,例如一個由O至I的脈沖信號。4、等待用戶指令寄存器101狀態(tài)標(biāo)識位提示操作完成。 本發(fā)明同時提供了 RAM形式和FIFO形式的兩套數(shù)據(jù)緩沖接口與硬盤交換數(shù)據(jù)。典型的應(yīng)用場景是I、RAM形式接口提供了可逐字節(jié)尋址的Cache模式緩沖,主要用于小塊的數(shù)據(jù)讀寫,例如存儲在磁盤上的文件系統(tǒng)信息的讀寫。2、FIF0接口為大批量流式數(shù)據(jù)的讀寫提供了便利,例如ADC或者DAC采樣數(shù)據(jù)流、視頻數(shù)據(jù)流的讀寫。用戶指令寄存器101的具體信號定義如圖4是用戶指令寄存器端口 101信號定義圖4所示。
      UsrCmd_Rst信號復(fù)位整個控制器,重新建立與磁盤的連接,并進(jìn)行相關(guān)初始化工作。UsrCmd_Req上產(chǎn)生一個由O變I的脈沖將啟動一次磁盤操作。UsrSts_DevReady表示磁盤就緒,物理層鏈路初始化成功,可以進(jìn)行操作了。UsrSts_Busy表示控制器繁忙,不能接受新的磁盤操作指令。UsrSts_Error磁盤操作有錯。啟動新的磁盤操作后,該標(biāo)志位自動清除。用戶參數(shù)寄存器102接口是一個FPGA片內(nèi)的RAM接口,該RAM的組織形式為8位數(shù)據(jù)寬度和16個地址深度。該RAM用來存儲指令參數(shù)。具體的信號定義如圖5所示。 CmdRAM_Usr_Addr 是地址總線信號。
      CmdRAM_Usr_Din是數(shù)據(jù)輸入端口,用戶設(shè)定的指令參數(shù)由此端口寫入。CmdRAM_Usr_Dout是數(shù)據(jù)輸出端口,用戶設(shè)定的指令參數(shù)由此端口讀出。CmdRAM_Usr_ffrEna是寫使能信號,高電平有效。CmdRAM_Usr_CLK是數(shù)據(jù)寫入時鐘信號,上升沿有效。具體的16個地址空間的參數(shù)功能如圖6所示。用戶參數(shù)寄存器102所定義的16個寄存器中,最后一個寄存器,即地址偏移等于15的寄存器用于定義指令類型,例如,是讀硬盤還是寫硬盤。具體的指令代碼定義如圖7。用戶數(shù)據(jù)SRAM端口 103用于對控制器外部的一個RAM進(jìn)行讀寫。磁盤數(shù)據(jù)可借由該RAM緩沖。例如,用戶寫磁盤時,可先將數(shù)據(jù)寫入到該RAM;用戶讀數(shù)據(jù)時,從磁盤讀出的數(shù)據(jù)可被存入該RAM。該RAM的數(shù)據(jù)讀出節(jié)拍延遲應(yīng)設(shè)定為1,具體的信號定義如圖8。UpRam_App_Addr 連接 RAM 的地址總線端口。UpRam_App_Din連接RAM的數(shù)據(jù)輸入端口。UpRam_App_Dout 連接 RAM 的數(shù)據(jù)輸出端口。UpRam_App_WrEna連接RAM的寫使能端口,高電平有效。UpRam_App_CLK連接RAM的時鐘端口,上升沿有效。用戶數(shù)據(jù)FIFO端口 104用于對控制器外部的兩個FIFO進(jìn)行讀寫。磁盤數(shù)據(jù)可借由這兩個FIFO緩沖。例如,用戶寫磁盤時,可先將數(shù)據(jù)寫入到用于數(shù)據(jù)輸出的FIFO;用戶讀數(shù)據(jù)時,從磁盤讀出的數(shù)據(jù)可被存入用于數(shù)據(jù)讀入的FIFO。FIFO的數(shù)據(jù)讀出節(jié)拍延遲應(yīng)設(shè)定為1,具體的信號定義如圖7。圖10至圖14分別給出了 5種用戶控制指令的執(zhí)行流程圖。為了簡化流程圖的表示,圖中用“Command RAM”表示用戶參數(shù)寄存器102,用“DPRAM”表示用戶數(shù)據(jù)SRAM端口103,用“FIFO”表示用戶數(shù)據(jù)FIFO端口 104。應(yīng)用層狀態(tài)機(jī)105根據(jù)用戶指令控制SATA傳輸層實(shí)現(xiàn)模塊2以及應(yīng)用層數(shù)據(jù)傳輸控制器106。因?yàn)镾ATA協(xié)議規(guī)定每次數(shù)據(jù)幀傳輸最多傳輸8K字節(jié)數(shù)據(jù),對于大批量硬盤數(shù)據(jù)讀寫的,應(yīng)用層狀態(tài)機(jī)105會對SATA傳輸層實(shí)現(xiàn)模塊2進(jìn)行多次控制以實(shí)現(xiàn)多于8KB的讀寫控制。應(yīng)用層數(shù)據(jù)傳輸控制器106在用戶數(shù)據(jù)SRAM端口 103和用戶數(shù)據(jù)FIFO端口 104之間進(jìn)行數(shù)據(jù)源導(dǎo)向選擇,并在數(shù)據(jù)源與存盤數(shù)據(jù)寫出存儲區(qū)204與存盤數(shù)據(jù)讀入存儲區(qū)205之間發(fā)起DMA數(shù)據(jù)傳輸。SATA傳輸層實(shí)現(xiàn)模塊2的主要功能是對數(shù)據(jù)進(jìn)行幀封裝以及幀解析處理。例如,SATA協(xié)議規(guī)定的數(shù)據(jù)傳輸幀由4個字節(jié)的幀信息部分和最多8192字節(jié)的數(shù)據(jù)部分組成,在向硬盤寫數(shù)據(jù)幀時,傳輸層狀態(tài)機(jī)206就需要在數(shù)據(jù)幀參數(shù)存儲區(qū)203里準(zhǔn)備好那4個字節(jié)的幀信息。SATA傳輸層實(shí)現(xiàn)模塊2 :內(nèi)部包含傳輸層指令寄存器201,傳輸層參數(shù)寄存器202,傳輸層狀態(tài)報(bào)告端口 207,傳輸層狀態(tài)機(jī)206,數(shù)據(jù)幀參數(shù)存儲區(qū)203,存盤數(shù)據(jù)寫出存儲區(qū)204,存盤數(shù)據(jù)讀入存儲區(qū)205 ;在寫硬盤時,傳輸層狀態(tài)機(jī)206根據(jù)傳輸層指令寄存器201和傳輸層參數(shù)寄存器202接收到的指令,將數(shù)據(jù)幀參數(shù)寫入數(shù)據(jù)幀參數(shù)存儲區(qū)203,再命令SATA鏈路層實(shí)現(xiàn)模塊3啟動,將數(shù)據(jù)幀參數(shù)存儲區(qū)203和存盤數(shù)據(jù)寫出存儲區(qū)204中的數(shù)據(jù)整合后寫出到硬盤;在讀硬盤時,經(jīng)過SATA鏈路層實(shí)現(xiàn)模塊3處理后的幀參數(shù)存入數(shù)據(jù)幀參數(shù)存儲區(qū)203,存盤內(nèi)容數(shù)據(jù)存入存盤數(shù)據(jù)讀入存儲區(qū)205,同時傳輸層狀態(tài)機(jī)206得知數(shù)據(jù)幀被接收,繼而通過傳輸層指令寄存器201和傳輸層參數(shù)寄存器202告知SATA應(yīng)用層實(shí)現(xiàn)模塊I。傳輸層指令寄存器201和傳輸層參數(shù)寄存器202的信號定義與應(yīng)用層的用戶指令 寄存器101和用戶參數(shù)寄存器102的信號定義基本相同,只是傳輸層不支持多于8K字節(jié)的數(shù)據(jù)傳輸指令。多余8K字節(jié)的讀寫操作是通過應(yīng)用層控制傳輸層進(jìn)行多次讀寫操作而實(shí)現(xiàn)的。數(shù)據(jù)幀參數(shù)存儲區(qū)203使用FPGA內(nèi)部的一塊RAM資源實(shí)現(xiàn),配置大小為1KB。存盤數(shù)據(jù)寫出存儲區(qū)204和存盤數(shù)據(jù)讀入存儲區(qū)205也使用FPGA內(nèi)部的RAM資源實(shí)現(xiàn),配置大小為16KB。SATA鏈路層實(shí)現(xiàn)模塊3的主要功能是對封裝好的數(shù)據(jù)幀進(jìn)行進(jìn)一步處理,處理內(nèi)容包括與硬盤進(jìn)行原語交互,例如發(fā)送幀起始S0F,幀結(jié)束E0F,幀接收成功,同步等原語信息;處理內(nèi)容也包括了對數(shù)據(jù)幀進(jìn)行CRC計(jì)算,數(shù)據(jù)擾碼等處理。SATA鏈路層實(shí)現(xiàn)模塊3 :包括鏈路層指令狀態(tài)寄存器301,鏈路層狀態(tài)機(jī)302,SATA原語數(shù)據(jù)存儲區(qū)303,數(shù)據(jù)選擇復(fù)選器304,循環(huán)冗余校驗(yàn)值插入器305,擾碼器307,數(shù)據(jù)發(fā)送端口 310,數(shù)據(jù)接收端口 311,原語檢查器308,解擾器309,循環(huán)冗余校驗(yàn)檢查器306,數(shù)據(jù)甄別器312 ;在寫硬盤時,鏈路層狀態(tài)機(jī)302根據(jù)鏈路層指令狀態(tài)寄存器301接收到的指令,選擇SATA原語數(shù)據(jù)存儲區(qū)303中存儲的某些原語,并控制數(shù)據(jù)選擇復(fù)選器304選擇不同數(shù)據(jù)源,使數(shù)據(jù)經(jīng)過循環(huán)冗余校驗(yàn)值插入器305和擾碼器307的處理后,形成最終要發(fā)送到SATA接口硬盤5的數(shù)據(jù)幀;在讀硬盤時,數(shù)據(jù)幀首先經(jīng)過解擾器309進(jìn)行解擾處理,然后原語檢查器308將檢查到的原語告知鏈路層狀態(tài)機(jī)302,循環(huán)冗余校驗(yàn)檢查器306對數(shù)據(jù)幀進(jìn)行循環(huán)冗余校驗(yàn)檢查,將檢查結(jié)果告知鏈路層狀態(tài)機(jī)302 ;經(jīng)過檢查的數(shù)據(jù)再被數(shù)據(jù)甄別器312分別篩選出幀參數(shù)數(shù)據(jù)并存入數(shù)據(jù)幀參數(shù)存儲區(qū)203,篩選出原始存盤數(shù)據(jù)并存入存盤數(shù)據(jù)讀入存儲區(qū)205。循環(huán)冗余校驗(yàn)值插入器305以及循環(huán)冗余校驗(yàn)檢查器306都采用了 CRC-32位模式,計(jì)算公式符合SATA協(xié)議規(guī)范要求的CRC計(jì)算公式,即G(X) = X32+X26+X23+X22+X16+X12+Xn+X10+X8+X7+X5+X4+X2+X+1,并且計(jì)算初始值設(shè)定為0x52325032。擾碼器307以及解擾器309都采用了符合SATA協(xié)議規(guī)范要求的擾碼計(jì)算公式,即G(X) = X16+X15+X13+X4+l,并且計(jì)算初始值設(shè)定為0xR)F6。
      SATA物理層實(shí)現(xiàn)模塊4基于FPGA芯片內(nèi)部集成的高速串行數(shù)據(jù)收發(fā)器設(shè)計(jì),通過數(shù)據(jù)發(fā)送端口 310和數(shù)據(jù)接收端口 311與SATA鏈路層實(shí)現(xiàn)模塊3連接,SATA物理層實(shí)現(xiàn)模塊4通過SATA協(xié)議規(guī)范定義的兩對高速串行差分?jǐn)?shù)據(jù)線與SATA接口硬盤5通信。為了方便測試驗(yàn)證如圖I所示的SATA主控制器99,搭建如圖2所示的IP核測試模型。如圖2所示,F(xiàn)PGA芯片999通過串口與串口終端77進(jìn)行連接,串口終端77可以使用一臺帶有串口的計(jì)算機(jī)和運(yùn)行在計(jì)算上的串口通信軟件實(shí)現(xiàn)。通過串口終端77的使用,SATA主控制器99的狀態(tài)信息可以得到顯示,測試指令可以通過串口向主控制器99發(fā)送。錯誤!未找到引用源。顯示了用于本發(fā)明測試的串口終端指令主菜單。如圖2所示,F(xiàn)PGA芯片999內(nèi)部,除了 SATA主控制器99還設(shè)計(jì)了兩大模塊處理器模塊66 以Xilinx公司提供的32位Microblaze軟核處理器605為核心,并為軟核處理器605配置了第I通用輸入輸出寄存器組604,第2通用輸入輸出寄存器組 602,雙口 RAM存儲器603,異步串口 601等幾個外設(shè)。通過上述幾個外設(shè)的使用,軟核處理器605就可以控制數(shù)據(jù)測試模塊88和SATA主控制器99,并且可以與串口終端77進(jìn)行通信了。數(shù)據(jù)測試模塊88 :包括數(shù)據(jù)生成器804,數(shù)據(jù)比較器803,測試數(shù)據(jù)輸出緩沖區(qū)801,測試數(shù)據(jù)輸入緩沖區(qū)802。測試數(shù)據(jù)輸出緩沖區(qū)801和測試數(shù)據(jù)輸入緩沖區(qū)802都使用FPGA片內(nèi)RAM構(gòu)成FIFO存儲器。在寫硬盤測試時,根據(jù)串口終端77的指令,處理器模塊66賦予數(shù)據(jù)生成器804初始值,命令它在測試數(shù)據(jù)輸出緩沖區(qū)801可寫的情況下連續(xù)計(jì)數(shù),并將計(jì)數(shù)值寫入測試數(shù)據(jù)輸出緩沖區(qū)801,處理器模塊66同時啟動SATA主控制器99,把來自用戶數(shù)據(jù)FIFO端口的數(shù)據(jù)連續(xù)不斷地寫入SATA接口硬盤5。在寫數(shù)據(jù)過程中,處理器模塊66可以讀取數(shù)據(jù)生成器804的計(jì)數(shù)值,通過參考兩次讀取操作之間的時間差和計(jì)數(shù)值之差,就可以得到SATA主控制器99寫磁盤的速度了。在讀硬盤測試時,根據(jù)串口終端77的指令,處理器模塊66賦予數(shù)據(jù)比較器803計(jì)數(shù)初始值,并命令SATA主控制器99把硬盤數(shù)據(jù)連續(xù)不斷地讀出到用戶數(shù)據(jù)FIFO端口。數(shù)據(jù)比較器803將自己的計(jì)數(shù)值與來自FIFO端口的讀出數(shù)值進(jìn)行比較,如果數(shù)值不一致,則設(shè)置標(biāo)志位告知處理器模塊66。處理器模塊66通過讀取數(shù)據(jù)比較器803就可以得到SATA主控制器99讀磁盤的速度,并且通過比較讀出的數(shù)據(jù)是否與事先寫入的數(shù)據(jù)一致,也就可以得知硬盤讀寫是否存在錯誤了。使用本發(fā)明對多塊固態(tài)盤以及普通磁盤進(jìn)行了測試,結(jié)果表明本發(fā)明性能優(yōu)異。固態(tài)盤的讀寫速度普遍能達(dá)到或超過固態(tài)盤產(chǎn)品手冊的標(biāo)稱值,例如典型的讀寫速度達(dá)到每秒200兆字節(jié)。磁盤由于其機(jī)械結(jié)構(gòu)特點(diǎn),在不同尋址地址上,讀寫速度不同。一般而言,在磁盤外圈(低地址)范圍讀寫時速度高,在磁盤內(nèi)圈讀寫時速度低。圖16顯示了對一塊ITB容量磁盤(產(chǎn)品型號為西數(shù)WD1002FAEX)的讀數(shù)據(jù)測試結(jié)果,圖中橫坐標(biāo)是磁盤地址,兆字節(jié)單位;縱坐標(biāo)是速度,兆字節(jié)每秒單位。
      權(quán)利要求
      1.一種基于FPGA的SATA主控制器(99),其特征在于包括SATA應(yīng)用層實(shí)現(xiàn)模塊(I),SATA傳輸層實(shí)現(xiàn)模塊(2),SATA鏈路層實(shí)現(xiàn)模塊(3),SATA物理層實(shí)現(xiàn)模塊(4); SATA應(yīng)用層實(shí)現(xiàn)模塊(I)具有用戶使用接口,所述的用戶使用接口由用戶指令寄存器(101),用戶參數(shù)寄存器(102),用戶數(shù)據(jù)SRAM端口(103),用戶數(shù)據(jù)FIFO端口(104),應(yīng)用層狀態(tài)報(bào)告端口(107) 5個端口組成;SATA應(yīng)用層實(shí)現(xiàn)模塊(I)內(nèi)部還具有應(yīng)用層狀態(tài)機(jī)(105)和應(yīng)用層數(shù)據(jù)傳輸控制器(106); 用戶指令寄存器(101):用于設(shè)置硬盤讀寫啟動等指令并查詢關(guān)鍵狀態(tài); 用戶參數(shù)寄存器(102):用于參數(shù)設(shè)置,可設(shè)置的參數(shù)有讀寫指令類別、讀寫地址、讀寫數(shù)據(jù)數(shù)量、讀寫數(shù)據(jù)通過用戶數(shù)據(jù)SRAM端口(103)傳輸還是通過用戶數(shù)據(jù)FIFO端口(104)傳輸?shù)鹊龋? 用戶數(shù)據(jù)SRAM端口(103):用于數(shù)據(jù)傳輸,其端口信號與常見的SRAM器件端口信號類似,能夠直接與FPGA內(nèi)部的SRAM連接; 用戶數(shù)據(jù)FIFO端口(104):用于數(shù)據(jù)傳輸,其端口信號與常見的FIFO器件端口信號類似,能夠直接與FPGA內(nèi)部的FIFO連接; 應(yīng)用層狀態(tài)報(bào)告端口(107):報(bào)告SATA應(yīng)用層實(shí)現(xiàn)模塊⑴的工作狀態(tài); 應(yīng)用層狀態(tài)機(jī)(105):接收來自用戶指令寄存器(101)以及用戶參數(shù)寄存器(102)的指令參數(shù),并控制應(yīng)用層數(shù)據(jù)傳輸控制器(106)和SATA傳輸層實(shí)現(xiàn)模塊(2)的端口,從而控制用戶數(shù)據(jù)與SATA接口硬盤(5)之間的輸入輸出交互; 應(yīng)用層數(shù)據(jù)傳輸控制器(106):接收來自應(yīng)用層狀態(tài)機(jī)(105)的指令,起到數(shù)據(jù)傳輸流向選擇開關(guān)的作用,使數(shù)據(jù)流在用戶數(shù)據(jù)SRAM端口(103)與SATA接口硬盤(5)之間交互,或者使用戶數(shù)據(jù)在用戶數(shù)據(jù)FIFO端口(104)與SATA接口硬盤(5)之間交互; SATA傳輸層實(shí)現(xiàn)模塊(2):內(nèi)部包含傳輸層指令寄存器(201),傳輸層參數(shù)寄存器(202),傳輸層狀態(tài)報(bào)告端口(207),傳輸層狀態(tài)機(jī)(206),數(shù)據(jù)幀參數(shù)存儲區(qū)(203),存盤數(shù)據(jù)寫出存儲區(qū)(204),存盤數(shù)據(jù)讀入存儲區(qū)(205);在寫硬盤時,傳輸層狀態(tài)機(jī)(206)根據(jù)傳輸層指令寄存器(201)和傳輸層參數(shù)寄存器(202)接收到的指令,將數(shù)據(jù)幀參數(shù)寫入數(shù)據(jù)幀參數(shù)存儲區(qū)(203),再命令SATA鏈路層實(shí)現(xiàn)模塊(3)啟動,將數(shù)據(jù)幀參數(shù)存儲區(qū)(203)和存盤數(shù)據(jù)寫出存儲區(qū)(204)中的數(shù)據(jù)整合后寫出到硬盤;在讀硬盤時,經(jīng)過SATA鏈路層實(shí)現(xiàn)模塊(3)處理后的幀參數(shù)存入數(shù)據(jù)幀參數(shù)存儲區(qū)(203), 存盤內(nèi)容數(shù)據(jù)存入存盤數(shù)據(jù)讀入存儲區(qū)(205),同時傳輸層狀態(tài)機(jī)(206)得知數(shù)據(jù)幀被接收,繼而通過傳輸層指令寄存器(201)和傳輸層參數(shù)寄存器(202)告知SATA應(yīng)用層實(shí)現(xiàn)模塊⑴; SATA鏈路層實(shí)現(xiàn)模塊(3):包括鏈路層指令狀態(tài)寄存器(301),鏈路層狀態(tài)機(jī)(302),SATA原語數(shù)據(jù)存儲區(qū)(303),數(shù)據(jù)選擇復(fù)選器(304),循環(huán)冗余校驗(yàn)值插入器(305),擾碼器(307),數(shù)據(jù)發(fā)送端口(310),數(shù)據(jù)接收端口(311),原語檢查器(308),解擾器(309),循環(huán)冗余校驗(yàn)檢查器(306),數(shù)據(jù)甄別器(312);在寫硬盤時,鏈路層狀態(tài)機(jī)(302)根據(jù)鏈路層指令狀態(tài)寄存器(301)接收到的指令,選擇SATA原語數(shù)據(jù)存儲區(qū)(303)中存儲的某些原語,并控制數(shù)據(jù)選擇復(fù)選器(304)選擇不同數(shù)據(jù)源,使數(shù)據(jù)經(jīng)過循環(huán)冗余校驗(yàn)值插入器(305)和擾碼器(307)的處理后,形成最終要發(fā)送到SATA接口硬盤(5)的數(shù)據(jù)幀;在讀硬盤時,數(shù)據(jù)幀首先經(jīng)過解擾器(309)進(jìn)行解擾處理,然后原語檢查器(308)將檢查到的原語告知鏈路層狀態(tài)機(jī)(302),循環(huán)冗余校驗(yàn)檢查器(306)對數(shù)據(jù)幀進(jìn)行循環(huán)冗余校驗(yàn)檢查,將檢查結(jié)果告知鏈路層狀態(tài)機(jī)(302);經(jīng)過檢查的數(shù)據(jù)再被數(shù)據(jù)甄別器(312)分別篩選出幀參數(shù)數(shù)據(jù)并存入數(shù)據(jù)幀參數(shù)存儲區(qū)(203),篩選出原始存盤數(shù)據(jù)并存入存盤數(shù)據(jù)讀入存儲區(qū)(205); SATA物理層實(shí)現(xiàn)模塊(4)基于FPGA芯片內(nèi)部集成的高速串行數(shù)據(jù)收發(fā)器設(shè)計(jì),通過數(shù)據(jù)發(fā)送端口(310)和數(shù)據(jù)接收端口(311)與SATA鏈路層實(shí)現(xiàn)模塊(3)連接,SATA物理層實(shí)現(xiàn)模塊(4)通過SATA協(xié)議規(guī)范定義的兩對高速串行差分?jǐn)?shù)據(jù)線與SATA接口硬盤(5)通信。
      2.如權(quán)利要求I所述的一種基于FPGA的SATA主控制器(99),其特征在于所述的循環(huán)冗余校驗(yàn)值插入器(305)以及循環(huán)冗余校驗(yàn)檢查器(306)都采用了 CRC-32位模式,計(jì)算公式符合SATA協(xié)議規(guī)范要求的CRC計(jì)算公式, 即G(X) = X32+X26+X23+X22+X16+X12+Xn+X1Q+X8+X7+X5+X4+X2+X+1,并且計(jì)算初始值設(shè)定為0x52325032。
      3.如權(quán)利要求I所述的一種基于FPGA的SATA主控制器(99),其特征在于所述的擾碼器(307)以及解擾器(309)都采用了符合SATA協(xié)議規(guī)范要求的擾碼計(jì)算公式, 即G(X) = X16+X15+X13+X4+l,并且計(jì)算初始值設(shè)定為0xR)F6。
      全文摘要
      本發(fā)明提供一種基于FPGA的SATA主控制器,為更高效更便利地使用FPGA器件實(shí)現(xiàn)對SATA接口硬盤的讀寫控制而設(shè)計(jì)。包括SATA物理層實(shí)現(xiàn)模塊、SATA鏈路層實(shí)現(xiàn)模塊、SATA傳輸層實(shí)現(xiàn)模塊和SATA應(yīng)用層實(shí)現(xiàn)模塊等部分。與現(xiàn)有設(shè)計(jì)相比,本發(fā)明實(shí)現(xiàn)了更高層次的邏輯封裝,為用戶提供了更簡便的操作接口,用戶通過操作本發(fā)明提供的FIFO、SRAM、寄存器等形式的簡單接口,即可實(shí)現(xiàn)對SATA接口硬盤的讀寫控制。
      文檔編號G06F3/06GK102880427SQ20121029474
      公開日2013年1月16日 申請日期2012年8月20日 優(yōu)先權(quán)日2012年8月20日
      發(fā)明者劉家偉 申請人:北京奇作電子有限公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
      1