PCIe鏈路初始化和訓(xùn)練是由物理層控制的,是基于硬件 (而非軟件) 的過程。鏈路訓(xùn)練過程在復(fù)位后由硬件自動啟動,并由LTSSM管理。
1. LTSSM總體介紹
下圖是LTSSM(鏈路訓(xùn)練狀態(tài)機)的狀態(tài)跳轉(zhuǎn)圖。LTSSM的每個狀態(tài)又劃分為若干子狀態(tài)。在冷復(fù)位、暖復(fù)位、或者熱復(fù)位(Hot Reset)釋放后,進入的第一個狀態(tài)是Detect狀態(tài)。
LTSSM共有11個頂層狀態(tài):Detect、Polling、Configuration、Recovery、L0、L0s、L1、L2、Hot Reset、Loopback和Disable。
這11個狀態(tài)可劃分為五大類:
1. 鏈路訓(xùn)練狀態(tài)。
2. 重訓(xùn)練狀態(tài)(Recovery)。
3. 軟件驅(qū)動的電源管理狀態(tài)。
4.?ASPM(Active-State Power Management)狀態(tài),即硬件驅(qū)動的電源管理狀態(tài)。
5. 其他狀態(tài)。
LTSSM (Link Training and Status State Machine)
在復(fù)位釋放后,LTSSM進入鏈路訓(xùn)練狀態(tài),正常會按照Detect → Polling → Configuration → L0的順序跳轉(zhuǎn)。在L0狀態(tài),可以進行正常的數(shù)據(jù)收發(fā)操作。
進入鏈路重訓(xùn)練狀態(tài)(即Recovery)的原因有很多,例如從L1這樣的低功耗鏈路狀態(tài)中恢復(fù),或者進行鏈路帶寬切換(速率或者鏈路寬度切換)。在鏈路重訓(xùn)練狀態(tài)中,鏈路會重復(fù)類似于訓(xùn)練狀態(tài)的操作,來解決鏈路中的問題,并最終回到L0(正常工作)狀態(tài)。
功耗管理軟件可以使設(shè)備進入低功耗設(shè)備狀態(tài)(D1、D2、D3Hot或D3Cold),并強制鏈路進入低功耗管理鏈路狀態(tài)(L1或L2)。
如果鏈路上長時間沒有報文發(fā)送,ASPM硬件會使鏈路自動進入低功耗ASPM狀態(tài)(L0s或者ASPM L1)。
此外,軟件可以使鏈路進入一些其他狀態(tài),如Disabled、Loopback或熱復(fù)位狀態(tài),這些狀態(tài)統(tǒng)稱為其他狀態(tài)。
2. LTSSM各狀態(tài)介紹
以下是對11個LTSSM狀態(tài)的基本介紹。
1. 檢測狀態(tài)(Detect):復(fù)位釋放后進入的初始狀態(tài),目的是檢測鏈路對端設(shè)備是否存在。串行傳輸一般不需要檢測對端設(shè)備是否存在,設(shè)置Detect狀態(tài)是為了便于測試,在Polling狀態(tài)會有具體說明。除了復(fù)位之外,還可能從其他LTSSM狀態(tài)進入Detect。
2. 輪詢狀態(tài)(Polling):在此狀態(tài),發(fā)送方以2.5Gbps的速率向?qū)Χ税l(fā)送TS1以及TS2序列,使用協(xié)議最低速率以實現(xiàn)對早期協(xié)議的兼容。接收端可以使用接收的TS1/2序列實現(xiàn)以下功能:
完成位鎖定(Bit Lock)。鏈路訓(xùn)練開始時,接收端的時鐘與發(fā)送端時鐘不同步,無法可靠地采樣輸入數(shù)據(jù)。在鏈路訓(xùn)練期間,接收端的時鐘和數(shù)據(jù)恢復(fù)邏輯(CDR,Clock and Data Recovery)通過使用數(shù)據(jù)比特流作為時鐘的參考信號,來重建發(fā)送端的時鐘。一旦從數(shù)據(jù)流中恢復(fù)了時鐘,接收端就完成了位鎖定,可以正確采樣輸入數(shù)據(jù)。
完成Symbol鎖定或者Block鎖定(Gen3)
如有必要,校正通道極性翻轉(zhuǎn)
得知通道支持的鏈路數(shù)據(jù)速率
在測試條件下,發(fā)起兼容性測試序列:能夠進入兼容性測試是因為,如果在Detect狀態(tài)能識別到接收方,但是沒有收到輸入信號,這表明可以將對端識別為一個測試負載。在識別對端為測試負載后,發(fā)送方會發(fā)送特定的兼容測試Pattern,以方便測試。這項特性能夠使測試設(shè)備快速地驗證鏈路的電壓、BER(Bit Error Ratio)、時序以及其他指標在鏈路容忍范圍之內(nèi)。
3. 配置狀態(tài)(Configuration)
上游和下游組件將以2.5Gbps速率來交換TS1和TS2序列,完成以下的目標:
協(xié)商鏈路寬度
為各通道(lane)指定編號
檢測是否需要lane reversal,并校正
補償各個通道之間的時序偏斜(Deskew Lane-to-Lane timing differences)。從這個狀態(tài)開始,可以關(guān)閉加擾,并可進入Disable或Loopback狀態(tài)。此外,會記錄在TS1和TS2序列交換時達成的從L0s進入L0狀態(tài)所需的FTS序列數(shù)量。
4. L0狀態(tài):鏈路功能正常運行的狀態(tài),鏈路上會進行正常的TLP、DLLP 報文和有序集的交換。L0狀態(tài)下,鏈路速率可以比2.5GT/s更高,但只能在進入Recovery狀態(tài),經(jīng)歷鏈路速率變化程序之后,才能切換到更高速率。
5. 恢復(fù)狀態(tài)(Recovery):當鏈路需要重訓(xùn)練時,會進入Recovery狀態(tài),可能有以下原因:L0狀態(tài)中發(fā)生錯誤、從L1狀態(tài)恢復(fù)到L0狀態(tài)、從L0s狀態(tài)恢復(fù)到L0時,無法通過FTS序列重新完成訓(xùn)練。
在Recovery狀態(tài),會重新進行比特鎖定和字符/塊鎖定,鎖定的過程和Polling狀態(tài)中的相似,但是一般會更快些。
6. L0s狀態(tài):L0s是由硬件控制的ASPM低功耗狀態(tài),可以節(jié)約一些功耗,并且能快速恢復(fù)到L0狀態(tài)。在L0狀態(tài)下,當發(fā)送方發(fā)送EIOS序列后會進入L0s狀態(tài)。退出L0s狀態(tài)時,會通過發(fā)送FTS序列來重新快速完成比特和字符/塊鎖定。
7. L1狀態(tài):比L0s狀態(tài)節(jié)省更多的功耗,但需要更長時間恢復(fù)到L0。進入L1需要鏈路雙方協(xié)商,并一起進入L1狀態(tài)。進入L1狀態(tài)有兩種方式:
第一種是在ASPM控制下,自動進入L1。當上行端口沒有調(diào)度發(fā)送的TLP或者DLLP報文時,硬件將自動協(xié)商進入L1。如果下行端口同意,那么鏈路進入L1狀態(tài)。否則,上行端口將進入L0s狀態(tài)(如果使能的話)。
第二種是功耗管理軟件命令設(shè)備進入低功耗狀態(tài)(D1、D2或D3Hot)。因此,上行端口通知下行端口必須一起進入L1狀態(tài),下行端口會響應(yīng)通知,進入L1狀態(tài)。
8. L2狀態(tài):更顯著的低功耗狀態(tài),此時設(shè)備的主電源將被關(guān)閉。大部分的邏輯會由于沒有電源供應(yīng)而關(guān)閉,只是少部分涉及喚醒事件的邏輯會依靠輔助電源Vaux繼續(xù)工作。支持喚醒能力的上游端口會發(fā)送低頻的Beacon 信號,下游端口能夠?qū)⑵滢D(zhuǎn)發(fā)給RC,告知上層系統(tǒng)。通過Beacon信號或者邊帶信號WAKE#,設(shè)備能夠觸發(fā)系統(tǒng)喚醒事件,使主電源恢復(fù)。
(另外還有L3狀態(tài),不過L3狀態(tài)和LTSSM沒有關(guān)系。L3狀態(tài)下所有電源都會關(guān)閉,包括輔助電源,因此L3狀態(tài)下不會響應(yīng)喚醒事件。)
9.?Loopback狀態(tài):是一種測試狀態(tài),協(xié)議中沒有詳細定義接收方的行為(比如接收方哪些邏輯會參與回環(huán)測試)。Loopback狀態(tài)中基本的行為很簡單:回環(huán)發(fā)起方(Loopback Master)發(fā)送TS1有序集給回環(huán)接收方(Slave),并置位TS1訓(xùn)練控制字段(Training Control)中的Loopback比特。當接收方連續(xù)接收2個回環(huán)比特置起的TS1序列后,進入回環(huán)狀態(tài),將接收到的任何內(nèi)容都重新發(fā)送給發(fā)起方。發(fā)起方會檢查接收到的內(nèi)容,和先前發(fā)送的內(nèi)容進行比較,如果內(nèi)容經(jīng)過雙方的8b/10b編碼(解碼)后校驗一致,說明鏈路可以通過環(huán)路驗證,完整性沒有問題。
10. 禁用狀態(tài)(Disable):Disable狀態(tài)允許將鏈路配置為禁用狀態(tài),該狀態(tài)下發(fā)送邏輯為電氣空閑狀態(tài),接收邏輯為低阻狀態(tài)。在某些情況下,比如鏈路狀態(tài)變得不可靠,或者對端設(shè)備被意外移除,此時 Disable 是表示這些意外情況的必要狀態(tài)。另外,軟件也可以通過鏈路控制寄存器中的Disable bit,將設(shè)備配置為禁用狀態(tài)。設(shè)備被禁用后,會連續(xù)發(fā)送16個Disable Link bit置位的TS1序列,位于TS1的訓(xùn)練控制域(Traning Control Field),通知接收方進入禁用狀態(tài)。
11. 熱復(fù)位狀態(tài)(Hot Reset):軟件可以通過置位Bridge Control寄存器的配置次級總線復(fù)位(Secondary Bus Reset)bit,復(fù)位鏈路。軟件配置后,橋的下游端口會發(fā)送訓(xùn)練控制域(Traning Control Field)熱復(fù)位比特置位的TS1序列。當接收方接收到兩個TS1序列后,必須復(fù)位自身設(shè)備。