1. 程式人生 > >SATA主機協議的FPGA實現之準備工作

SATA主機協議的FPGA實現之準備工作

信號線 span 次數 blog 協議 希望 load 版本 存儲

  從2月中旬準備開始,經過3個月的奮戰,我的又一個項目--基於FPGA的固態硬盤讀寫控制電路,已經基本實現。由於實用資料的匱乏,以及項目本身頗具挑戰性,這個過程充滿艱辛,這裏也是希望寫下一些經驗,供後來的有心人參考,少走一些彎路。因為這個項目比較大,不是三言兩語能說清楚的,可能接下來我會用5至6篇文章來講這個東西,陸續的碼文章也會耗時較久,希望先看到的看官耐心,同時由於完整的SATA協議實在是有點龐大,我的理解也不能盡善盡美,中間有不恰當之處也希望走過路過的指出。

  言歸正傳,這裏先普及一下硬盤的兩個基本知識,一個是關於硬盤的存儲介質,另一個則是關於硬盤的接口技術。首先說說這個存儲介質,目前市場上主流的硬盤存儲介質有兩種,一種是我們最常用的移動硬盤采用的光碟,另一種則是現在興起的固態硬盤采用的flash存儲介質。這兩種介質的具體細節這裏不追究,只簡單說明一下固態硬盤的優勢在於速度快,輕,聲音小,不足在於價格貴,讀寫次數有限。然後說說這個接口技術,目前市場上主流的硬盤接口技術有SATA、SAS以及較久的IDE等,我們日常最常接觸到的就是SATA。SATA是由IDE發展而來的,它突破了IDE很多極限,比如速度上、抗幹擾上等。對於做硬盤主機控制器來說,我們跟關心的是接口協議,而對存儲介質這些可以放到次要位置。

  這個項目開發的前期工作是一定要多研讀相關的資料,包括SATA協議文檔、ATA協議文檔等。這裏給出一個下載鏈接,裏面是自己整理的相關資料,包括SATA3.0協議原版文檔和一些有用的論文、中文文檔等,需要的可以去下載。http://download.csdn.net/detail/dianshe12345/7571557。除此之外,因為要用到StratixIV器件,還需要看看StratixIV的器件手冊,器件手冊可以到ALTERA官網上去下載,有英文版也有中文版的。當然如果你用到的是其他的器件,那就去找相關的器件手冊,貌似ALTERA的EP4 GX序列也有高速收發器,不過好像只能實現SATA1.0的傳輸速率。如果用ALTERA的器件做SATA協議,有兩篇文檔是推薦大家看看的,一篇是“理解SATA-SAS 40nm FPGA解決方案”,還有一篇是“實現Altera器件中的SATA與SAS協議”。這兩篇文檔告訴了我們怎麽用ALTERA公司的器件去實現SATA協議,特別是第二篇,還是很有價值的,大家可以網上搜一下。

  下面大致說一下自己理解的SATA協議。SATA協議目前有三個版本--SATA1.0、SATA2.0以及SATA3.0,三個版本之間最大的區別就是傳輸速率,分別為1.5Gbps、3.0Gbps和6.0Gbps。SATA物理接口由7針信號線和15針電源線組成,其中7針信號線中由3根地線,2根差分輸入線和2根差分輸出線組成。SATA數據傳輸采用的是模擬的串行差分信號,這使它從根本上改變了IDE硬盤中的碼間串擾問題。也是因為這個原因,我們采用FPGA在做SATA協議時,必須選用那些有專用物理器件支持的芯片--SATA協議傳輸速率高,而且最終需要將數字信號轉化為模擬差分信號傳輸,一般的低端FPGA芯片並不能勝任,現在一些中高端FPGA芯片是采用內部集成高速收發器硬件的方式解決這個問題的,比如ALTERA公司的ALTGX收發器、XILINX公司的RocketIO MGT等,這也是為什麽前文提到需要采用StratixIV這種FPGA芯片的原因,我采用的是DE4開發板。

  SATA協議分為4個協議層,分別是物理層、鏈路層、傳輸層和應用層。其中應用層提供寄存器接口,並對所有ATA命令進行解析,完成寄存器的更新;傳輸層位於鏈路層和應用層之間,負責處理控制信息,並將主機和設備之間需要交換的數據封裝成數據幀,即幀信息結構FIS(Frame Information Structure);鏈路層負責控制傳輸控制原語和數據,從數據幀中提取數據進行8B/10B編解碼。同時,為保證數據可靠傳輸,鏈路層還引入CRC-32校驗方式,並對數據進行加解擾;物理層負責設備識別和初始化,實現高速串行數據鏈路,在傳輸線上發送和接收已編碼的串行數據流,對數據進行串並/並串轉換,並從數據流中分離出時鐘信息。接下來的幾篇文章將分別從這幾個協議層的實現出發講解整個項目的實現過程。

轉:https://www.cnblogs.com/lwybky/p/3684247.html#undefined

SATA主機協議的FPGA實現之準備工作