葉勃宏
(西安電子科技大學(xué)CAD研究所,陜西西安710071)
SATA作為一種高速串行鏈路已取代了IDE作為硬盤的標(biāo)準(zhǔn)接口。該高速差分鏈路使用吉比特傳輸和8B/10B編碼技術(shù),其相比于IDE、PATA接口具有傳輸速度更高、設(shè)備升級(jí)更簡(jiǎn)單和配置使用更便捷等優(yōu)勢(shì)[1]。首先,作為一種高速點(diǎn)對(duì)點(diǎn)的傳輸方式,SATA解決了直流偏置、信號(hào)偏移、碼間干擾等問(wèn)題,并提高了傳輸?shù)膸?。同時(shí)具備了更完善的查錯(cuò)和糾錯(cuò)能力,傳輸質(zhì)量和傳輸可靠性得到了大幅提升。其次,SATA接口相比于傳統(tǒng)的并行接口具有更少的引腳數(shù)目,更利于PCB板級(jí)的設(shè)計(jì)、裝配和散熱。最終,SATA總線還支持熱插拔并具有更低的功耗。SATA接口協(xié)議具有層次化的結(jié)構(gòu)[2-3],如圖1所示,從下到上分別是物理層、數(shù)據(jù)鏈路層、傳輸層和應(yīng)用層。其中物理層負(fù)責(zé)低壓差分信號(hào)的發(fā)送和接收,并實(shí)現(xiàn)接口的初始化過(guò)程和速率的自動(dòng)協(xié)商。
圖1 SATA協(xié)議層次結(jié)構(gòu)
在發(fā)送過(guò)程中,物理層從鏈路層接收并行的數(shù)據(jù)將其轉(zhuǎn)為串行數(shù)據(jù),然后以3 Gbit·s-1的線速度向硬盤側(cè)發(fā)送LVDS NRZ高速比特流。在接收過(guò)程中,將串行數(shù)據(jù)轉(zhuǎn)化成并行數(shù)據(jù),在串行數(shù)據(jù)流中檢測(cè)其中的K28.5字符,使得輸出的并行數(shù)據(jù)對(duì)齊[4]。物理層提供的具體功能如下:(1)發(fā)送側(cè)和接收側(cè)提供100 Ω電阻進(jìn)行內(nèi)部端接,以此來(lái)消除反射,保證信號(hào)的完整性。(2)向鏈路層提供不同位寬的接口。(3)用CDR技術(shù)從高速的串行比特流內(nèi)恢復(fù)出時(shí)鐘和數(shù)據(jù)。(4)K28.5字符檢測(cè),以此來(lái)對(duì)齊接收到的數(shù)據(jù)。(5)發(fā)送和檢測(cè)OOB(Out-Of-Band)信號(hào),進(jìn)行硬盤和FPGA的同步和協(xié)商。(6)向上層報(bào)告物理層的工作狀態(tài)。(7)提供電源管理功能,以此降低功耗。(8)支持接收和發(fā)送阻抗匹配。(9)解決擴(kuò)散頻譜時(shí)鐘引起的輸入數(shù)據(jù)頻率波動(dòng)。(10)響應(yīng)遠(yuǎn)端發(fā)出的測(cè)試請(qǐng)求。
SATA協(xié)議使用OOB信號(hào)來(lái)完成初始化過(guò)程和速率協(xié)商過(guò)程。OOB信號(hào)不屬于數(shù)據(jù)信號(hào),所以稱之為帶外信號(hào)。OOB是一種低頻信號(hào),具體含有3種模式:COMRESET、COMINIT和COMWAKE。COMRESET,如圖2所示,由主機(jī)端發(fā)送,用來(lái)設(shè)備復(fù)位和鏈路的初始化,其由突發(fā)長(zhǎng)度為106.7 ns的Align原語(yǔ)和320 ns的空閑共模電平分隔。COMINT,如圖2所示,格式與COMRESET相同,與后者的區(qū)別在于,其是由設(shè)備側(cè)向主側(cè)發(fā)送的。COMWAKE,如圖3所示,與前兩者的區(qū)別在于其的空閑間隔為106.7 ns,且設(shè)備側(cè)和主側(cè)均可以發(fā)送。
圖2 COMRESET/COMINIT信號(hào)
圖3 COMWAKE信號(hào)
在上電和硬件復(fù)位期間,主機(jī)通過(guò)OOB信號(hào)來(lái)建立通行鏈路,其中包括速度協(xié)商、時(shí)鐘恢復(fù)、阻抗校準(zhǔn)和自我診斷等。具體上電過(guò)程如圖4所示,由以下10個(gè)步驟組成:(1)主側(cè)FPGA和設(shè)備側(cè)硬盤處于斷電狀態(tài)。(2)系統(tǒng)上電,主設(shè)備側(cè)將發(fā)送和接收差分對(duì)拉到共模電壓。(3)主設(shè)備側(cè)發(fā)送COMRESET信號(hào)。(4)當(dāng)上電復(fù)位結(jié)束后,主設(shè)備側(cè)停止發(fā)送COMRESET信號(hào)并將串行總線置于空閑狀態(tài)。(5)當(dāng)硬盤檢測(cè)到COMRESET信號(hào),其開始發(fā)送COMINIT信號(hào)作為響應(yīng)。硬盤可在任何時(shí)間點(diǎn)通過(guò)發(fā)送COMINIT信號(hào)來(lái)建立新的通信連接。(6)主設(shè)備側(cè)進(jìn)行校準(zhǔn)且發(fā)送COMWAKE信號(hào)。(7)當(dāng)硬盤在其的接收線上檢測(cè)到COMWAKE信號(hào)后,其開始校準(zhǔn)發(fā)送器。完成校準(zhǔn)后,硬盤發(fā)送突發(fā)長(zhǎng)度為6的COMWAKE信號(hào)然后連續(xù)發(fā)送Align原語(yǔ)。當(dāng)連續(xù)發(fā)送54.6 μs的Align原語(yǔ)后還未收到來(lái)自主設(shè)備側(cè)的回應(yīng),而硬盤側(cè)則進(jìn)入錯(cuò)誤狀態(tài)。(8)當(dāng)主設(shè)備側(cè)檢測(cè)到COMWAKE信號(hào)后便以所支持的最低速率開始發(fā)送D10.2字符。于此同時(shí),主設(shè)備側(cè)開始鎖定Align原語(yǔ),當(dāng)準(zhǔn)備好便以與接收到相同的速度向硬盤側(cè)發(fā)送Align原語(yǔ)。若在880 μs內(nèi)主設(shè)備未接收到Align原語(yǔ),主設(shè)備便重新開始復(fù)位。(9)硬盤鎖存到Align原語(yǔ)序列,并在準(zhǔn)備就緒后,發(fā)送SYNC原語(yǔ)表明可正常運(yùn)行。(10)當(dāng)主機(jī)側(cè)接收到非Align原語(yǔ),鏈路建立完成,則可進(jìn)行正常的數(shù)據(jù)傳輸。
圖4 鏈路建立過(guò)程圖
SATA協(xié)議物理層的實(shí)現(xiàn)由3部分組成,分別是整體流程圖的設(shè)計(jì)、時(shí)鐘部分和速率協(xié)商狀態(tài)轉(zhuǎn)移設(shè)計(jì)。
初始化的過(guò)程嚴(yán)格按照SATA協(xié)議的規(guī)定。整個(gè)過(guò)程流程如圖5所示。主機(jī)端上電后首先發(fā)送持續(xù)時(shí)間為1 μs的COMRESET信號(hào),然后等待COMINIT信號(hào),當(dāng)Rxstatus等于100時(shí),再發(fā)送持續(xù)時(shí)間為1 μs的COMMWAKE信號(hào)。在接收到COMMWAKE信號(hào)后且線路處于空閑的狀態(tài),接著發(fā)送D10.2字符。若在880 μs內(nèi)接收到了Align原語(yǔ),則發(fā)送Align原語(yǔ)且開始等待SYNC原語(yǔ),否則將重新開始發(fā)送COMRESET信號(hào)[4-7]。
圖5 設(shè)計(jì)整體流程圖
SATA協(xié)議物理層的實(shí)現(xiàn)是基于Xilinx公司的FPGA,利用FPGA內(nèi)部提供的高速Serdes接口實(shí)現(xiàn)高速比特流的發(fā)送、接收和串并轉(zhuǎn)換。其中一個(gè)高速串行收發(fā)器GTX由兩個(gè)TILE組成,為節(jié)省功耗,兩個(gè)TILE由一個(gè)鎖相環(huán),如圖6所示提供時(shí)鐘。由外部提供給GTX中鎖相環(huán)的參考時(shí)鐘頻率為150 MHz,其中鎖相環(huán)的PLL_DIVSEL_FB參數(shù)設(shè)置為2,PLL_DIVSEL_REF參數(shù)設(shè)置為1,INTDATAWIDTH參數(shù)設(shè)置為1,在這種設(shè)置條件下鎖相環(huán)輸出的倍頻時(shí)鐘PLLCLK為1.5 GHz,如圖7所示。該倍頻時(shí)鐘分別提供給發(fā)送器和接收器。提供給發(fā)送器的參考時(shí)鐘由參數(shù)PLL_TXDIVSEL_OUT設(shè)定,接收器則由參數(shù)PLL_RXDIVSEL_OUT決定。參數(shù)PLL_TXDIVSEL_OUT、PLL_RXDIVSEL_OUT的可能取值為1和2。參數(shù)取值由協(xié)商的速率決定,可在協(xié)商的過(guò)程中通過(guò)DRP接口動(dòng)態(tài)地改變。提供給FPGA邏輯部分的時(shí)鐘由GTX提供給鏈路層的數(shù)據(jù)位寬決定[8-11]。鎖相環(huán)模塊對(duì)外提供的接口信號(hào)如下:(1)CLKIN信號(hào)用來(lái)向模塊提供參考信號(hào)。(2)INTDATAWIDTH信號(hào)用來(lái)決定GTX串行收發(fā)器內(nèi)部的數(shù)據(jù)寬度。(3)PLLDET信號(hào)用來(lái)表示鎖相環(huán)內(nèi)部的VCO壓控振蕩器的輸出范圍是否在可接受的有效范圍內(nèi)。(4)PLLDETEN信號(hào)用來(lái)使能內(nèi)部的鎖定功能。(5)REFCLKOUT頻率等于CLKIN,其可為上層的邏輯電路提供參考時(shí)鐘。
圖6 鎖相環(huán)結(jié)構(gòu)圖
圖7 鎖相環(huán)輸出時(shí)鐘圖
整個(gè)SATA物理的時(shí)鐘網(wǎng)絡(luò)結(jié)構(gòu),如圖8所示,由4部分組成[8],分別是高速串行收發(fā)器部分、OOB信號(hào)控制部分、DCM數(shù)字時(shí)鐘控制部分和SNC同步控制部分,其中高速串行收發(fā)器向邏輯控制部分提供DRP動(dòng)態(tài)控制接口。GTPRESET信號(hào)用來(lái)對(duì)整個(gè)收發(fā)器進(jìn)行全局的復(fù)位。TXDATA接口用來(lái)接收將要發(fā)送的并行數(shù)據(jù)。RXDATA接口用來(lái)將串并轉(zhuǎn)化后的并行數(shù)據(jù)提供給上層。TXCOMSTART用來(lái)指示收發(fā)器何時(shí)開始發(fā)送OOB信號(hào),并將其置1時(shí)開始發(fā)送OOB信號(hào),置0不發(fā)送OOB信號(hào)。TXCOMTYPE用來(lái)指示發(fā)送OOB信號(hào)的種類。TXCHARISK信號(hào)用來(lái)指示所發(fā)送的數(shù)據(jù)是否是K字符。RXSTATUS用來(lái)表示串行收發(fā)器的狀態(tài)。
圖8 FPGA內(nèi)部時(shí)鐘結(jié)構(gòu)圖
REFCLKOUT時(shí)鐘信號(hào)由串行收發(fā)器模塊輸出,經(jīng)全局時(shí)鐘緩沖器BUFG進(jìn)入FPGA的全局時(shí)鐘專用網(wǎng)絡(luò),最后進(jìn)入DCM和SNC模塊。從DCM輸出CLK0時(shí)鐘和CLK2X時(shí)鐘,分別通過(guò)BUFG后向收發(fā)器提供并行的收發(fā)時(shí)鐘。SNC模塊可通過(guò)動(dòng)態(tài)地改變收發(fā)器的狀態(tài)達(dá)到速率自動(dòng)協(xié)商的功能。OOB模塊用來(lái)控制帶外信號(hào)的發(fā)送和接收。
速率協(xié)商的狀態(tài)轉(zhuǎn)移過(guò)程如圖9所示。該設(shè)計(jì)方案可根據(jù)設(shè)備硬盤側(cè)掛載的硬盤型號(hào),自動(dòng)的改變主FPGA這一側(cè)的線速率。若硬盤支持I代接口,則FPGA自動(dòng)調(diào)整GTX線速率到1.5 Gbit·s-1,若硬盤支持II代接口,則FPGA自動(dòng)調(diào)整線速率到3 Gbit·s-1。
具體的調(diào)節(jié)過(guò)程如下:
(1)設(shè)備復(fù)位后,改變接收器的線速率為3 Gbit·s-1,通過(guò)DRP動(dòng)態(tài)接口讀取并修改地址為0X46寄存器的值為1。(2)等待16個(gè)時(shí)鐘周期。(3)改變發(fā)送器的線速率為3 Gbit·s-1,通過(guò)DRP動(dòng)態(tài)接口讀取并修改地址為0X45寄存器的值為1。(4)復(fù)位OOB信號(hào)控制模塊,此時(shí)FPGA和硬盤進(jìn)行速率協(xié)商。(5)等待鏈接建立,若在3.5 ms時(shí)間內(nèi)鏈接建立完成,則物理層準(zhǔn)備好,此時(shí)給上層一個(gè)PHYRDY的信號(hào)。(6)若未建立好,則改變接收器的線速率為1.5 Gbit·s-1。通過(guò)DRP動(dòng)態(tài)接口讀取并修改地址為0X46寄存器的值為0。(7)等待16個(gè)時(shí)鐘周期。(8)改變發(fā)送器的線速率為1.5 Gbit·s-1。通過(guò)DRP動(dòng)態(tài)接口讀取并修改地址為0X45寄存器的值為0。(9)等待鏈接建立,若3.5 ms內(nèi)鏈接建立,則硬盤和主FPGA協(xié)商的速率為1.5 Gbit·s-1,向上層報(bào)告鏈路建立可進(jìn)行正常的數(shù)據(jù)傳輸,若未建立,則從過(guò)程(1)開始重新循環(huán),直至速率協(xié)商好為止。
圖9 速率協(xié)商過(guò)程圖
代碼調(diào)試完成后下載到Xilinx提供的ML507評(píng)估板中,利用Chipscope工具抓取的波形如圖10和圖11所示。圖10中speed信號(hào)為低,表示速率協(xié)商到1.5 Gbit·s-1。在圖11中,SOF信號(hào)帶來(lái)一個(gè)高脈沖后,RXDATA信號(hào)線上的數(shù)據(jù)是硬盤與FPGA建立連接后由硬盤發(fā)送的一幀報(bào)告硬盤狀態(tài)信息的寄存器類型幀。幀的有效長(zhǎng)度介于SOF的高脈沖和EOF的高脈沖之間。幀的長(zhǎng)度是6個(gè)雙字,最后4 Byte為CRC校驗(yàn)值,其中所有的數(shù)據(jù)均經(jīng)擾碼加擾。從圖中可看出,物理層完成了速率協(xié)商和鏈接建立的過(guò)程。
圖10 協(xié)商速率結(jié)果圖
圖11 幀信息
[1] 羅彬.硬盤的接口方式及技術(shù)指標(biāo)解析[J].計(jì)算機(jī)與網(wǎng)絡(luò),2007(z1):37-39.
[2] IntelliProp Inc.IntelliProp serial ata device interface core[M].USA:IntelliProp Inc,2009.
[3] 歐陽(yáng)干.PCI Express物理層的設(shè)計(jì)與實(shí)現(xiàn)[D].長(zhǎng)沙:國(guó)防科學(xué)技術(shù)大學(xué),2006.
[4] Xilinx.Virtex-5 FPGA rocketIO GTX transceiver user guide[M].MA USA:Xilinx Conpration,2008.
[5] 趙崢嶸,蘭巨龍.RocketIO幾個(gè)關(guān)鍵問(wèn)題的解決方案[J].電子技術(shù)應(yīng)用,2005(12):51-53.
[6] 歐陽(yáng)科文,黎福海,唐純杰.基于RocketIO的SATA物理層高速串行傳輸實(shí)現(xiàn)[J].計(jì)算機(jī)測(cè)量與控制,2009(5):937-939.
[7] 高世杰,吳志勇.基于RocketIO的多路相機(jī)數(shù)據(jù)傳輸系統(tǒng)的設(shè)計(jì)[J].光通行技術(shù),2008(5):46-48.
[8] 唐純杰.SATA協(xié)議分析及其FPGA實(shí)現(xiàn)[D].長(zhǎng)沙:湖南大學(xué),2009.
[9] 李江濤.RocketIO高速串行傳輸原理與實(shí)現(xiàn)[J].雷達(dá)與對(duì)抗,2004(4):48-50.
[10] SATA-IO.Serial ATA Revision 2.5:serial ATA international organization[S].USA:SATA-IO,2009.
[11] Xilinx.Xilinx xapp870(v1.0)[M].MA USA:Xilinx Conpration,2008.