摘 要 :SATA作為一種高速串行, 點(diǎn)對(duì)點(diǎn)傳輸?shù)挠脖P(pán)接口, 已取代了IDE 硬盤(pán)接口。 目前在硬盤(pán)中使用較為普遍的是 SATAII 和SATAIII, 其線速率分別達(dá)到了3Gbit?s -1和6 Gbit?s-1。文中對(duì) SATAII 協(xié)議進(jìn)行了全面的分析,并利用 Xilinx公司的ISE開(kāi)發(fā)工具和 ML507干估板完成了協(xié)議的軟 IP核編寫(xiě)與調(diào)試。 所用 FPGA 型號(hào)為XC5VFX70T, 利用其中硬核Rocket IO GTX 實(shí)現(xiàn)了高速鏈路的功能,并使用多級(jí)流水線技術(shù)進(jìn)行并行設(shè)計(jì)以提高整體速度。
SATA作為一種高速串行鏈路已取代了 IDE作為 硬盤(pán)的標(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 物理層功能
在發(fā)送過(guò)程中, 物理層從鏈路層接收并行的數(shù)據(jù)將其轉(zhuǎn)為串行數(shù)據(jù), 然后以3Gbit?s -1 的線速度向硬盤(pán)側(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)行硬盤(pá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)求。
2 OOB 信號(hào)
SATA 協(xié)議使用OOB信號(hào)來(lái)完成初始化過(guò)程和速 率協(xié)商過(guò)程。OOB信號(hào)不屬于數(shù)據(jù)信號(hào), 所以稱(chēng)之為 帶外信號(hào)。OOB是一種低頻信號(hào), 具體含有3 種模 式: COMRESET、COMINIT和COMWAKE。 COMRESET, 如圖2所示, 由主機(jī)端發(fā)送, 用來(lái)設(shè)備復(fù)位和鏈 路的初始化, 其由突發(fā)長(zhǎng)度為106.7ns 的Align 原語(yǔ) 和 320ns 的空閑共模電平分隔。COMINI, 如圖 2所 示, 格式與COMRESET相同, 與后者的區(qū)別在于, 其是 由設(shè)備側(cè)向主側(cè)發(fā)送的。COMWAKE, 如圖3 所示, 與 前兩者的區(qū)別在于其的空閑間隔為106.7ns, 且設(shè)備 側(cè)和主側(cè)均可以發(fā)送。
3 物理鏈路建立過(guò)程
在上電和硬件復(fù)位期間, 主機(jī)通過(guò)OOB信號(hào)來(lái)建 立通行鏈路, 其中包括速度協(xié)商、時(shí)鐘恢復(fù)、阻抗校準(zhǔn)和 自我診斷等。 具體上電過(guò)程如圖4所示, 由以下10個(gè)步驟組成:
( 1) 主側(cè)FPGA和設(shè)備側(cè)硬盤(pán)處于斷電狀態(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)硬盤(pán)檢測(cè)到COMRESET信號(hào),其開(kāi)始發(fā)送 COMINIT信號(hào)作為響應(yīng)。 硬盤(pán)可在任何時(shí)間點(diǎn)通過(guò)發(fā)送COMINIT 信號(hào)來(lái)建立新 的 通 信 連 接。
( 6 ) 主設(shè)備側(cè)進(jìn)行校準(zhǔn)且發(fā)送COMWAKE信號(hào)。
( 7) 當(dāng)硬盤(pán)在其的接收線上檢測(cè)到COMWAKE信號(hào)后, 其開(kāi)始校準(zhǔn)發(fā)送器。 完成校準(zhǔn)后, 硬盤(pá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), 而硬盤(pán)側(cè)則進(jìn)入錯(cuò)誤狀 態(tài)。
( 8) 當(dāng)主設(shè)備側(cè)檢測(cè)到COMWAKE信號(hào)后便以所 支持的最低速率開(kāi)始發(fā)送D10.2字符。 于此同時(shí), 主 設(shè)備側(cè)開(kāi)始鎖定Align原語(yǔ), 當(dāng)準(zhǔn)備好便以與接收到相 同的速度向硬盤(pán)側(cè)發(fā)送Align原語(yǔ)。 若在880μs內(nèi)主 設(shè)備未接收到Align原語(yǔ), 主設(shè)備便重新開(kāi)始復(fù)位。
( 9) 硬盤(pán)鎖存到 Align原語(yǔ)序列, 并在準(zhǔn)備就緒后, 發(fā)送SYNC原語(yǔ)表明可正常運(yùn)行。
( 10) 當(dāng)主機(jī)側(cè)接收到非Align原語(yǔ), 鏈路建立完成, 則可進(jìn)行正常的數(shù)據(jù)傳輸。
4 實(shí)現(xiàn)過(guò)程
SATA 協(xié)議物理層的實(shí)現(xiàn)由 3 部分組成, 分別是整體流程圖的設(shè)計(jì)、 時(shí)鐘部分和速率協(xié)商狀態(tài)轉(zhuǎn)移設(shè)計(jì)。
4.1 整體設(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)SRxstatus等于100時(shí), 再發(fā)送持續(xù)時(shí)間為1μs的COMWAKE信號(hào)。 在接收到COMWAKE信號(hào)后且線路處于 空閑的狀態(tài), 接著發(fā)送 D10.2字符。 若在 880μs 內(nèi)接收 到了Align原語(yǔ), 則發(fā)送Align原語(yǔ)且開(kāi)始等待SYNC原語(yǔ), 否則將重新開(kāi)始發(fā)送COMRESET 信號(hào)[ 4-7] 。
4.2 時(shí)鐘控制設(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í)鐘頻率為 150MHz, 其中 鎖 相 環(huán) 的PLL_DIVSEL_FB參 數(shù) 設(shè) 置 為2,PLL_DIVSEL_REF參數(shù)設(shè)置為1,INTDATAWIDTH參數(shù)設(shè) 置為 1, 在 這 種 設(shè) 置 條 件 下 鎖 相 環(huán) 輸 出 的 倍 頻 時(shí) 鐘PLLCLK為1.5GHz, 如圖7所示。 該倍頻時(shí)鐘分別提 供給發(fā)送器和接收器。 提供給發(fā)送器的參考時(shí)鐘由參 數(shù)PLL_TXDIVSEL_OUT設(shè)定, 接收器則由參數(shù)PLL_RXDIVSEL_OUT 決定。 參 數(shù)PL_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í)鐘。
整個(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í)開(kāi)始 發(fā)送 OOB信號(hào), 并將其置 1 時(shí)開(kāi)始發(fā)送OOB信號(hào), 置0不發(fā)送OOB信號(hào)。TXCOMTYPE用來(lái)指示發(fā)送OOB信號(hào)的種類(lèi)。TXCHARISK信號(hào)用來(lái)指示所發(fā)送的數(shù)據(jù)是否是K字符。 RXSTATUS 用來(lái)表示串行收發(fā)器的狀態(tài)。
REFCLKOUT時(shí)鐘信號(hào)由串行收發(fā)器模塊輸出, 經(jīng)全局時(shí)鐘緩沖器BUFG進(jìn)入FPGA的全局時(shí)鐘專(zhuān)用 網(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ā)送和接收。
4.3 速率協(xié)商設(shè)計(jì)
速率協(xié)商的狀態(tài)轉(zhuǎn)移過(guò)程如圖9所示。 該設(shè)計(jì)方 案可根據(jù)設(shè)備硬盤(pán)側(cè)掛載的硬盤(pán)型號(hào), 自動(dòng)的改變主FPGA這一側(cè)的線速率。 若硬盤(pán)支持I代接口, 則FPGA自動(dòng)調(diào)整GTX線速率到1.5Gbit?s-1 , 若硬盤(pán)支持II代接口, 則FPGA自動(dòng)調(diào)整線速率到 3Gbit?s-1 。
具體的調(diào)節(jié)過(guò)程如下:
( 1) 設(shè)備復(fù)位后, 改變接收器的線速率為3Gbit?s-1, 通過(guò)DRP動(dòng)態(tài)接口讀取并修改地址為0X46寄存器的 值為 1。 ( 2) 等待 16 個(gè)時(shí)鐘周期。 ( 3 ) 改變發(fā)送器的 線速率為3Gbit?s-1, 通過(guò)DRP動(dòng)態(tài)接口讀取并修改 地址為0X45 寄存器的值為1。 ( 4) 復(fù)位 OOB信號(hào)控 制模塊, 此時(shí)FPGA和硬盤(pán)進(jìn)行速率協(xié)商。 ( 5) 等待鏈 接建立, 若在3.5ms時(shí)間內(nèi)鏈接建立完成, 則物理層 準(zhǔn)備好, 此時(shí)給上層一個(gè)PHYRDY的信號(hào)。 ( 6 ) 若未 建立好, 則改變接收器的線速率為1.5Gbit?s-1 。 通過(guò)DRP動(dòng)態(tài)接口讀取并修改地址為0X46寄存器的值 為 0。 ( 7) 等待 16個(gè)時(shí)鐘周期。 ( 8 ) 改變發(fā)送器的線 速率為1.5Gbit?s-1 。 通過(guò) DRP動(dòng)態(tài)接口讀取并修 改地址為0X45寄存器的值為 0。 ( 9 ) 等待鏈接建立, 若3.5ms內(nèi)鏈接建立, 則硬盤(pán)和主FPGA協(xié)商的速率 為1.5Gbit?s-1, 向上層報(bào)告鏈路建立可進(jìn)行正常的 數(shù)據(jù)傳輸, 若未建立, 則從過(guò)程(1) 開(kāi)始重新循環(huán), 直 至速率協(xié)商好為止。
5 結(jié)束語(yǔ)
代碼調(diào)試完成后下載到Xilinx提供的ML507評(píng) 估板中, 利用 Chipscope工具抓取的波形如圖10和圖 11所示。 圖10中 speed信號(hào)為低, 表示速率協(xié)商到1.5Gbit?s-1 。 在圖11 中,SOF信號(hào)帶來(lái)一個(gè)高脈沖 后,RXDATA信號(hào)線上的數(shù)據(jù)是硬盤(pán)與FPGA建立連 接后由硬盤(pán)發(fā)送的一幀報(bào)告硬盤(pán)狀態(tài)信息的寄存器類(lèi) 型幀。 幀的有效長(zhǎng)度介于SOF的高脈沖和EOF的高 脈沖之間。 幀的長(zhǎng)度是6個(gè)雙字, 最后4Byte為CRC校驗(yàn)值, 其中所有的數(shù)據(jù)均經(jīng)擾碼加擾。 從圖中可看 出,物理層完成了速率協(xié)商和鏈接建立的過(guò)程。
評(píng)論
查看更多