賈效玲,張剛,張博
(太原理工大學(xué)信息工程學(xué)院,太原030024)
SATA硬盤控制器的FPGA實(shí)現(xiàn)
賈效玲,張剛,張博
(太原理工大學(xué)信息工程學(xué)院,太原030024)
設(shè)計(jì)一款高性能的SATA硬盤控制器IP核?;赬ilinx公司的Virtex-5系列FPGA,參考SATA2.5協(xié)議,運(yùn)用VHDL硬件描述語言,采用模塊化的設(shè)計(jì)理念,完成IP核的設(shè)計(jì)。搭建了驗(yàn)證平臺(tái),對(duì)IP核的性能進(jìn)行了測(cè)試,經(jīng)測(cè)試該控制器IP核能正確地完成讀、寫、設(shè)備復(fù)位、設(shè)備識(shí)別等操作,且穩(wěn)定性良好。同時(shí)編寫了PetaLinux操作系統(tǒng)下的驅(qū)動(dòng)程序,便于嵌入式系統(tǒng)的應(yīng)用。
SATA2.5,控制器,F(xiàn)PGA,VHDL
隨著嵌入式技術(shù)的發(fā)展,嵌入式系統(tǒng)對(duì)存儲(chǔ)器容量的要求越來越高,特別是圖像采集、視屏監(jiān)控等系統(tǒng)。硬盤容量大、價(jià)格便宜非常適合需要大容量存儲(chǔ)的嵌入式系統(tǒng),而目前很少有成熟的硬盤嵌入式接入方案。本文詳細(xì)分析了SATA協(xié)議結(jié)構(gòu),設(shè)計(jì)了相應(yīng)的SATA控制器,并在FPGA上進(jìn)行了驗(yàn)證,基于PetaLinux設(shè)計(jì)實(shí)現(xiàn)了文件系統(tǒng)接口,為硬盤的嵌入式系統(tǒng)應(yīng)用提供了良好解決方案。
2001年Intel等廠商組成的Serial ATA委員會(huì)提出速度為150MB/s的SATA總線接口,高于并行ATA的最高理論速度133 MB/s,SATA2.0和SATA3.0更是分別達(dá)到了300MB/s和600MB/s[1]。
SATA接口由電源和上行、下行兩個(gè)數(shù)據(jù)通道組成,數(shù)據(jù)通道由3根地線將兩對(duì)差分信號(hào)線隔開,形成SATA獨(dú)占通道帶寬的點(diǎn)對(duì)點(diǎn)連接方式[2]。按功能SATA協(xié)議分為物理層、鏈路層、傳輸層和命令層,協(xié)議的層次結(jié)構(gòu)如圖1所示。主機(jī)和設(shè)備之間,除了物理層,其他各層均通過消息虛擬連接。物理層是協(xié)議的最底層主要負(fù)責(zé)碼流的收發(fā)及串并并串轉(zhuǎn)換;鏈路層主要負(fù)責(zé)消息的無差錯(cuò)傳輸,包括8B/10B編解碼、加解擾、CRC校驗(yàn)等;傳輸層主要負(fù)責(zé)生成與解析幀信息結(jié)構(gòu)(Frame Information Structures,F(xiàn)IS);命令層主要負(fù)責(zé)生成和解析訪問SATA硬盤的操作命令[3]。
2.1總體設(shè)計(jì)
設(shè)計(jì)按照SATA協(xié)議分為4層,各層內(nèi)部通過控制模塊和數(shù)據(jù)通路實(shí)現(xiàn)相應(yīng)功能,各層之間相對(duì)獨(dú)立,發(fā)生錯(cuò)誤時(shí)只需修改該層的模塊,而不會(huì)對(duì)其他層造成影響。
控制模塊通過有限狀態(tài)機(jī)實(shí)現(xiàn)協(xié)議的時(shí)序控制功能,相鄰層的狀態(tài)機(jī)相互配合實(shí)現(xiàn)數(shù)據(jù)的傳輸控制。狀態(tài)機(jī)用VHDL硬件語言描述,控制各層有條不紊地處理數(shù)據(jù)。數(shù)據(jù)通路分為發(fā)送和接收兩個(gè)通道,采用FIFO方式存儲(chǔ)。
發(fā)送數(shù)據(jù)時(shí),命令層將傳來的數(shù)據(jù)和命令按照SATA協(xié)議要求傳給傳輸層,傳輸層接收數(shù)據(jù)并封裝成FIS,存放于FIFO中;數(shù)據(jù)鏈路層對(duì)接收到的FIS進(jìn)行CRC校驗(yàn)和加擾,并且加上幀頭幀尾送到物理層;物理層由RocketIOGTP來實(shí)現(xiàn),由于GTP具有8B/10B編解碼功能,所以鏈路層的8B/10B編解碼功能可以省略[4]。物理層的OOB信號(hào)用于完成初始化,速度協(xié)調(diào)模塊自動(dòng)識(shí)別硬盤速率。GTP能夠?qū)邮盏降南M(jìn)行8B/10B編碼,然后經(jīng)過并串轉(zhuǎn)換按照差分的方式發(fā)送出去。接收過程正好相反。物理層差分信號(hào)RX和TX分別與硬盤的差分收發(fā)信號(hào)線相接。系統(tǒng)結(jié)構(gòu)框圖如圖2所示。
2.2物理層
主機(jī)與設(shè)備之間的通信基礎(chǔ)是物理層,通過SATA接口連接。其主要功能包括:①接收高速串行差分信號(hào)并轉(zhuǎn)換成并行數(shù)據(jù);②將并行數(shù)據(jù)轉(zhuǎn)換成高速串行差分信號(hào)發(fā)送;③實(shí)現(xiàn)主機(jī)與設(shè)備的初始化連接。
Xilinx Virtex5芯片內(nèi)嵌RocketIO GTP高速串行收發(fā)器可直接來實(shí)現(xiàn)SATA物理層[5]。接收數(shù)據(jù)時(shí)它將3Gb/s的串行碼流轉(zhuǎn)換成并行數(shù)據(jù)流,發(fā)送時(shí)把并行數(shù)據(jù)串行化發(fā)送[6],同時(shí)還能產(chǎn)生用于初始化的帶外信號(hào)(OutOfBand,OOB)。物理層協(xié)議定義了COMRESET、
COMINIT、COMWAKE 3種帶外信號(hào),均表現(xiàn)為在連續(xù)的Align原語簇間插入時(shí)間長(zhǎng)度不同的空閑[7]。
初始化連接的目的是建立鏈路層數(shù)據(jù)傳輸?shù)耐?,其過程為:首先主機(jī)發(fā)送信號(hào)COMRESET,設(shè)備檢測(cè)到COMRESET信號(hào)后發(fā)送信號(hào)COMINIT響應(yīng),主機(jī)確認(rèn)收到信號(hào)COMINIT后發(fā)送信號(hào)COMWAKE確認(rèn),然后設(shè)備以信號(hào)COMWAKE響應(yīng),接著主機(jī)與設(shè)備進(jìn)行速率匹配,匹配成功后主機(jī)發(fā)送SYNC原語,當(dāng)主機(jī)端接收3個(gè)連續(xù)的非ALIGN原語時(shí)表示連接建立成功。物理層的測(cè)試結(jié)果如圖3所示,rxstatus0表示的是接收到OOB信號(hào)的類型,‘4’表示COMINIT信號(hào),‘2’表示COMWAKE信號(hào)。
圖2 系統(tǒng)架構(gòu)圖
圖3 物理層測(cè)試結(jié)果
2.3鏈路層
鏈路層接收傳輸層的FIS,插入原語封裝成幀后交給物理層發(fā)送,并從物理層得到的數(shù)據(jù)中提取出FIS后送到傳輸層,同時(shí)進(jìn)行CRC值的計(jì)算和對(duì)除原語以外的所有數(shù)據(jù)(包括CRC值)進(jìn)行加解擾操作[8]。擾碼的目的是減少數(shù)據(jù)中連續(xù)‘0’或‘1’的長(zhǎng)度,以便于提取定時(shí)信息,使碼流更適合基帶傳輸[9]。擾碼建立在線性反饋移位寄存器的基礎(chǔ)之上,其特征方程為:
SATA協(xié)議采用CRC32校驗(yàn)作為差錯(cuò)檢測(cè),并規(guī)定初始的CRC值為0X52325032。擾碼和CRC值計(jì)算的仿真結(jié)果如圖4所示,由圖可知第1個(gè)原始數(shù)據(jù)是0X00308027,計(jì)算的CRC值為0X11E353FD,擾碼器的輸出為0XC2D2768D,加擾后數(shù)據(jù)輸出0XC2E2F6AA。
圖4 擾碼和CRC仿真
2.4傳輸層
傳輸層的核心是FIS,它只需生成與解析幀信息的結(jié)構(gòu),而不關(guān)心幀數(shù)據(jù)接收和發(fā)送過程。協(xié)議定義了8種FIS,它們長(zhǎng)度不等但結(jié)構(gòu)類似,第一個(gè)雙字的低8位標(biāo)志了類型號(hào),各種FIS的基本信息列在表1。常用的3種FIS:Command/Control FIS,用于主機(jī)向設(shè)備發(fā)送命令、參數(shù)等;Response FIS,用于設(shè)備向主機(jī)返回狀態(tài);Data FIS,用于數(shù)據(jù)傳送。
用緩存7個(gè)雙字(非數(shù)據(jù)FIS的最大長(zhǎng)度)實(shí)現(xiàn)非數(shù)據(jù)FIS的封裝,根據(jù)FIS的類型決定緩存的內(nèi)容和長(zhǎng)度,然后由鏈路層發(fā)送。對(duì)于數(shù)據(jù)FIS,先發(fā)送用于表示類型的第1個(gè)雙字后,直接將命令層的消息交給鏈路層發(fā)送[10]。
表1 幀信息結(jié)構(gòu)
2.5命令層
命令層主要解析命令,SATA協(xié)議完全兼容傳統(tǒng)ATA命令。協(xié)議定義了兩組操作寄存器實(shí)現(xiàn)命令操作,分別為命令寄存器組和控制寄存器組。命令寄存器組包括命令和參數(shù)寄存器,錯(cuò)誤寄存器等;控制寄存器組主要用于對(duì)設(shè)備的控制,包括控制寄存器和輔助狀態(tài)寄存器。
在XILINX的EDK環(huán)境下,把設(shè)計(jì)當(dāng)作一個(gè)定制IP核,掛載到PLB總線上來對(duì)IP核進(jìn)行測(cè)試。如圖5所示是讀取SATA硬盤的主引導(dǎo)扇區(qū)(硬盤的0號(hào)扇區(qū))中的數(shù)據(jù),從超級(jí)終端打印的結(jié)果。主引導(dǎo)扇區(qū)的最后兩個(gè)字節(jié)是其簽名值55AA,圖中讀出的數(shù)據(jù)的后兩個(gè)字節(jié)也是55AA,說明控制器能夠正確地完成讀硬盤操作。同時(shí)對(duì)寫硬盤、設(shè)備識(shí)別、硬盤復(fù)位等功能進(jìn)行了測(cè)試,結(jié)果證明控制器能很好地完成這些操作。
圖5 讀操作測(cè)試結(jié)果
為了方便嵌入式的應(yīng)用,并進(jìn)一步測(cè)試硬盤控制器的性能,在XILINX公司的EDK環(huán)境下,把所設(shè)計(jì)的SATA硬盤控制器封裝成一個(gè)定制IP核,掛載到FPGA內(nèi)嵌MicroBlaze處理器的PLB總線上,當(dāng)作處理器的一個(gè)設(shè)備,移植Petalinux操作系統(tǒng)到MicroB-laze,在Petalinux操作系統(tǒng)下設(shè)計(jì)獨(dú)立的FAT32文件系統(tǒng),通過文件系統(tǒng)來實(shí)現(xiàn)控制器IP核的通信測(cè)試。測(cè)試中文件系統(tǒng)能很好地調(diào)用設(shè)計(jì)控制器完成讀,寫,刪除等文件操作,說明硬盤控制器性能良好。圖6是讀取硬盤根目錄下一個(gè)文件并顯示的結(jié)果,由圖可知硬盤的根目錄下一共有6個(gè)文件,當(dāng)前讀取的文件路徑為/sata_test.vhd,其大小為34724個(gè)字節(jié)。
圖6 控制器測(cè)試結(jié)果
本文設(shè)計(jì)了一個(gè)集成度高、可擴(kuò)展性強(qiáng)、運(yùn)用靈活方便的SATA硬盤控制器,同時(shí)基于Xilinx公司的軟硬件協(xié)同設(shè)計(jì)平臺(tái),開發(fā)了控制器的文件系統(tǒng)接口程序,特別適合需要大容量存儲(chǔ)(如視屏采集)的嵌入式系統(tǒng),具有良好嵌入式應(yīng)用前景。
[1]陳杰,張偉,張順生.SATA2.0控制器的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用,2011,31(2):25-26+32.
[2]申濟(jì)菘.SATA IP的設(shè)計(jì)與優(yōu)化[D].南京:南京大學(xué),2013.
[3]Serial ATA Revision 2.5[S].USA:Serial ATA International Organization,2005.
[4]JOSE S.Virtex-5 FPGA RocketIO GTP Transceiver User Guide[R].Xilinx Coporation,2008.
[5]SAWYERN.Source-Synchronous Serialization and Deserialization[R].Xilinx Corporation:Application Note XAPP1064(v1.1),2010.
[6]孫志雄,謝海霞.基于FPGA的高速串并/并串轉(zhuǎn)換器設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2014,37(8):151-152.
[7]楊佳朋,張剛,郝敏.基于RocketIO的SATA物理層實(shí)現(xiàn)[J].電視技術(shù),2013,37(3):70-72.
[8]王超,劉偉,張德聰.基于SATA的嵌入式直接存儲(chǔ)系統(tǒng)[J].計(jì)算機(jī)工程,2012,38(12):232-235.
[9]璩澤旭.高速大容量存儲(chǔ)系統(tǒng)關(guān)鍵技術(shù)研究與實(shí)現(xiàn)[D].西安:西安電子科技大學(xué),2013.
[10]荊旭.基于FPGA的SATA協(xié)議分析及收發(fā)控制器設(shè)計(jì)[D].西安:西安電子科技大學(xué),2014.
FPGA Im p lementation of SATA Hard Disk Controller
JIA Xiao-ling,ZHANGGang,ZHANGBo
(School of Information Engineering,Taiyuan University of Technology,Taiyuan 030024,China)
The paper designs a high-performance SATA controller IP core.It takes SATA 2.5 protocol for reference and is implemented on the basis of FPGA of Virtex-5 family of Xilinx with modular design concept in VHDL language.A platform for IP core performance verification is built. The test results indicate that the controller IP can realize many operations,such as reading,writing,device reset,identification and so on.And it has good stability.Meanwhile,it also finishes the operating system drivers of PetaLinux.It can facilitate the application of embedded systems.
SATA2.5,controller,F(xiàn)PGA,VHDL
TP333.2
A
1002-0640(2016)09-0182-03
2015-07-05
2015-08-07
賈效玲(1990-),女,山西汾陽人,碩士研究生。研究方向:嵌入式。