一、總覽
鏈路初始化和訓練,由物理層進行控制,是一個基于硬件的過程。初始化設備的鏈路和端口,使得設備能夠收發報文,在鏈路上正常通信。
在reset后由硬件自動啟動完整的訓練過程,并由LTSSM管理。
1 位鎖定
訓練開始,接收端時鐘和發送端時鐘不同步,接收端無法可靠采樣輸入信號的數據bit
訓練期間,接收端的時鐘和數據恢復(CDR,clock and data recovery)邏輯,通過使用數據bit流作為時鐘的參考信號,來重建發送端的時鐘,一旦從數據流中恢復了時鐘,表示接收端完成位鎖定。
2 符號鎖定
編碼8b/10b來說,下一步訓練進行符號鎖定,接收端可以接收單個bit,但是不知道10bit組成符號的邊界,收發端交換有序集TS1和TS2時候,接收端接收可識別的pattern,如COM符號,因為COM符號獨特編碼導致它容易被識別找到,識別到COM后,接收方不但定位到兩個符號的邊界,還可以定位到兩個有序集邊界(TS1 TS2以COM作為開端,可區分)。
3 塊鎖定
和符號鎖定不太一樣,沒有編碼方案的支持,但是還是需要區分塊邊界。解決方式就是在有序訓練集中包含更多的EIEOS(電氣空閑退出有序集),用于定位邊界。特定是00h和FFh交替的pattern。
4 鏈路寬度
PCIE可以使用不同的鏈路寬度,如X2和X4的端口設備連接,鏈路訓練過程中, 兩臺設備會設置為兩者能接受的最大值(交集)。
5 通道翻轉
通常設備端口在多通道情況下,從0開始依次遞增;端口對端口也是0對0,1對1這樣;
這個功能主要是簡化PCB布線,當支持通道翻轉時候,如4通道情況下,默認是0-0,1-1,...這樣的,但是某種原因,需要0-3 1-2 2-1 3-0這樣交叉進行對接,如有通道翻轉,開啟后,效果和默認一樣;這是可選項。
6? 極性翻轉
兩個設備間D+和D-是支持反接的,目的也是為了簡化PCB布局布線。任意的接收端都需要單獨檢測查分信號的連接情況,如發生極性翻轉,訓練期間自動糾正。這是必選項。
?7 數據鏈路速率
reset后,鏈路初始化和訓練狀態機總是會將速率設置為默認的2.5Gbit/s,實現向后兼容(第一代就是2.5)。若是要實現更高的速率,完成訓練后,LSTTM再重新進行一次過程更短的訓練,以改變雙方都支持的最高速率;
8 多lane信號去偏移
通道間的傳輸線長度有差異,導致多通道鏈路中同時并行傳輸的bit,到達接收端有差距,稱為信號偏斜;接收方需要延遲到達早的通道,對齊所有通道的信號時間,補償通道之間的信號傳輸快慢的差異;
6~8可以很大程度上簡化PCIE PCB設計。
二、鏈路訓練的有序集
鏈路訓練過程設計的有序集TS1和TS2
?LTSSM在輪詢、配置以及恢復狀態中,收發端都會交換TS1 TS2有序集。
symbol | description |
0 | gen1/gen2:COM(k28.5)符號;GEN3: 1Eh->TS1有序集 |
1 | Link Number鏈路編號:
|
2 | Lane Number鏈路編號:
|
3 | N_FTS 有序集數量:從L0s返回L0時,接收方收到快速FTS有序訓練集數量。 |
4 | data rate identitifer(數據速率標識符) bit 0:reserved; bit 1:必須置1,支持2.5GT/s bit 2: 若bit3為1,那么bit2必須為1,支持5GT/s bit 3:支持8GT/s bit 5:4::reserved; bit 6:LTSSM一些特定狀態下使用,其他狀態reserved; bit 7:speed change,只在recovery和rcvLock LTSSM狀態設置,其余狀態reserved; |
5 | training controller(訓練控制)
|
6 | Gen1/Gen2:
? ? ? ? ? bit0~bit2:receiver present hint ? ? ? ? ? bit3~bit6:transmitter present ? ? ? ? ? bit7:set 1 GEN3: bit0~bit1:equalization control(僅在recovery equalization 以及loopback狀態使用) bit2:reset EIEOS interval Count(僅在recovery equalization 以及loopback狀態使用) bit3~bit6:transmitter preset bit 7: use preset(僅在recovery equalization 以及loopback狀態使用) |
7 | GEN1/GEN2 TS1標識符:4Ah(D10.2) GEN3: bit0~bit5:FS(Full Swing value) bit6~bit7:reserved |
8 | GEN1/GEN2 TS1(4Ah):D10.2 GEN3: bit0~bit5:LF(Low Frequency value),需要符號6的EC=01b bit6~bit7:reserved |
9? ? ? ? ? ? ? ? ? ?? | GEN1/GEN2 TS1(4Ah):D10.2 GEN3: bit0~bit5:post-cursor coefficient bit6: reject coefficient values bit 7:parity(P)---該校驗碼覆蓋范圍:6 7 8 以及符號9[6:0],接收方需要重新計算校驗碼并且與之比較,通過后TS1才算有效 |
10~13 | Gen1/Gen2: |
14~15 | Gen1/Gen2: ? TS1 標識符(4Ah) ,即 D10.2 Gen3: ? TS1 標識符(4Ah),或者DC-balance符號 |
?TS2:
symbol | description |
0 | gen1/gen2:COM(k28.5)符號;GEN3: 2Dh->TS1有序集 |
1 | Link Number鏈路編號:
|
2 | Lane Number鏈路編號:
|
3 | N_FTS 有序集數量:從L0s返回L0時,接收方收到快速FTS有序訓練集數量。 L0s:0~255 |
4 | data rate identitifer(數據速率標識符) bit 0:reserved; bit 1:必須置1,支持2.5GT/s bit 2: 若bit3為1,那么bit2必須為1,支持5GT/s bit 3:支持8GT/s bit 5:4::reserved; bit 6:LTSSM一些特定狀態下使用,其他狀態reserved; bit 7:speed change,只在recovery和rcvLock LTSSM狀態設置,其余狀態reserved; |
5 | training controller(訓練控制)
|
6 | Gen1/Gen2:
? ? ? ? ? bit0~bit2:receiver present hint ? ? ? ? ? bit3~bit6:transmitter present ? ? ? ? ? bit7:equalization command GEN3: bit0~bit5:reserved(僅在recovery equalization 以及loopback狀態使用) bit6:Quiesce Guarantee(僅在recovery revrCfg狀態使用) bit 7:request equalization(僅在recovery revrCfg狀態使用) |
7~13 | GEN1/GEN2 TS2(45h):D5.2 GEN3: TS2(45h) |
14~15 | Gen1/Gen2: ? TS1 標識符(4Ah) ,即 D10.2 Gen3: ? TS1 標識符(4Ah),或者DC-balance符號 |
每個字段的詳細含義:
1 symbol 0:
? GEN1/GEN2:所有有序集的首個符號都是K28.5(COM)字符。
接收方通過接收COM字符,鎖定符號,確定邊界。COM字符需要同時出現在所有通道上,因此可以用于信號去偏移。
? GEN3:有序集所在的block前面是2bit的同步頭,后面的首個符號標識有序集類型(TS1是1Eh,TS2=2Dh)。
2 Symbol 1(Link #):鏈路編號;poll狀態使用填充字符填充,其他狀態為分配的鏈路編號;
3 Symbol 2(Lane #):通道編號,poll狀態使用填充字符填充,其他狀態為分配的鏈路編號;
4 Symbol 3(N_FTS):接收方,從L0s(電源狀態)退出,返回L0,接收到快速訓練序列(FTS)數量。
? ?退出L0s狀態時,發送方至少會發送N_FTS個FTS。取決于需要FTS的數量和當前鏈路速率。
5 Symbol 4(Rate ID):設備報告所支持的數據速率,和一些給由硬件發起的帶寬改變功能信息。
? 所有信息都必須支持2.5GT/s速率,且復位后始終被訓練為2.5GT的速率,任何新設備都需要后向兼容(如支持8GT,那么必須支持5GT/s)
? Autonomous change:
? ? 若為1,任何帶寬改變請求都是基于電源管理方面原因發起的;
? ?若發起帶寬請求時候,未置1,那么代表設備在較高速率或者較寬鏈路檢測到工作不穩定的情況時候,需要改變帶寬設置(如降低速率或減小鏈路寬度)來解決這些問題。
Selectable De-emphasis
? ? 上游端口:5GT速率下期望的去加重水平設置,具體設置取決于實現。
? ? 下游端口/根節點端口:在polling.Compliance狀態中,接收該bit數據設置select_deemphasis變量。
?Link Upconfigure Capability:表示一個較寬的鏈路減少寬度后,是否有能力重新恢復原來的鏈路寬度。
Symbol 5(training control):鏈路雙方一些特殊情況交流(或者說通信)。如一次熱復位,使能回環或者關閉加擾。
Symbol6~9:
GEN2/GEN1:符號7~9表示TS1和TS2的標識符。符號6的bit7若是0,那么也表示標識符。
若bit7為1,表示當前有序集面向一個下游端口,發送的是EQ TS1或者EQ TS2,發送EQ TS意味著鏈路速率達到8GT,上游端口是需要知道當前使用的均衡參數。信息包括發送端的預設集選擇,接收預設集選擇提示。
GEN3:6~9符號提供均衡過程所需的預設集選擇數值及參數。
Symbol10~13:TS1或者TS2標識符
Symbol 14~15:
GEN1/GEN2:表示TS1或者TS2標識符;
GEN3:表示基于本通道DC均衡的需要。DC均衡指的是目前發送的0和1的數量差值。
三、數據訓練與狀態控制機
?LTSSM包含11個頂層狀態:
detect、polling、configuration、recovery、L0、L0s、 L1、 L2、Hot Reset、Loopback、DIsable;
可分五大類:
鏈路訓練狀態;
重訓練狀態;
軟件驅動電源管理狀態;
主動電源管理;
任意復位釋放后,LTSSM進入訓練類狀態,一切正常情況下,順序如下:
detect->polling->configuration->L0,進入L0狀態后,便可以正常收發報文。
進入鏈路重訓練(recovery)狀態的原因很多,如L1重恢復或者鏈路帶寬切換。在此狀態下,鏈路重復類似訓練操作的狀態,來解決鏈路問題,并最終回到L0(正常工作狀態)。
設備進入低功耗狀態下,會強制鏈路進入低功耗軟件管理鏈路狀態,如L1 L2;
如果鏈路上很長時間沒有報文需要傳輸,ASPM硬件邏輯會使得鏈路進入低功耗ASPM狀態,如L0s或者ASPM L1。
其他狀態:禁用狀態(disable)、回環狀態(loopback)、熱復位(hot reset)狀態。
檢測狀態(detect):復位釋放后進入的初始狀態,用于檢測鏈路對端設備是否存在。其他LTSSM的狀態也可轉移到detect狀態。
輪詢polling:發送端將以2.5Gbps的速率向對端發送TS1和TS2序列,使用協議最低速率以實現對早期協議的后向兼容。接收端接收到序列后,完成如下功能:
? ? 位鎖定;
? ? 符號鎖定或者塊鎖定;
? ? 必要情況下校正通道極性翻轉;
? ? 獲取通道支持的鏈路數據速率 ;
? ?測試條件下,發起兼容性測試(主要是快速驗證鏈路的電壓 BER 時序以及其他指標都在鏈路可容范圍內);
配置狀態(configuration):上游或者下游器件,按照2.5速率,交換TS1和TS2序列,實現如下目標:
協商鏈路寬度;
為各個通道指派編號;
檢測通道是否順序或者極性交換,在本地恢復這些交換;
補償各個通道之間的時序偏斜;
這個狀態可以關閉加擾,進入disable或者loopback狀態,還會記錄TS1和TS2序列交換時候的N_FTS,即L0s狀態進入L0狀態所需的FTS序列數量。
L0狀態:L0是一個鏈路全功能正常的狀態,鏈路上可以正常進行TLP DLLP和有序集的交換。L0狀態下,鏈路速率可以比2.5GT/s更高,但只能在進入recovery狀態,經歷一次速率切換后,才能達到更高的速率。
恢復狀態recovery:當鏈路需要重訓練時,進入recovery狀態。可能原因:L0狀態中發生了錯誤、從L1低功耗狀態恢復到L0狀態、從L0s狀態恢復到L0時,無法通過FTS序列重新完成訓練。該狀態下會重新進行bit和字符/塊鎖定,方法是和polling時候一樣,一般來說,此次更快。
L0s狀態:L0s是一個由硬件控制的ASPM低功耗狀態,L0s狀態的目標是在節約一定功耗的同時,能夠快速地恢復到L0狀態。進入方式:L0狀態下,鏈路一方發送EIOS。退出L0s:會通過FTS序列重新完成bit和字符/塊鎖定。
L1狀態:L1狀態能夠比L0s狀態降低更多的功耗,代價在于需要更長時間恢復到L0狀態。進入L1狀態需要鏈路雙方進行協商,并一起進入。進入L1方式:
其一,ASPM控制下,自動進入L1。如上游端口沒有DLLP或者TLP包時候,硬件自動與下游端口協商,鏈路一起轉向L1狀態。如果下游同意,那么鏈路進入L1狀態,否則上游端口將單方面進入L0s狀態。
其二,功耗管理軟件命令設備進入低功耗狀態。上游端口通知下游端口,下游端口響應通知,鏈路進入L1。
對比L0s和L1:
L1需要雙方協商,鏈路狀態才能到達L1,但是L0s可以單方面進入;
L0s快速恢復,L1恢復相對較慢;
L1功耗更低;
L2狀態:更顯著功耗節約狀態;
回環狀態loopback:測試狀態;目的是驗證鏈路完整性。
禁用狀態(disable):鏈路配置為禁用狀態;發送邏輯為電氣空閑,接收邏輯為低阻狀態。
熱復位狀態(hot reset):橋控制寄存器配置次級總線復位bit,復位鏈路。
四、詳細次狀態
(一)detect
?
(二)polling
?(三)configuration
本狀態目標主要是弄清楚設備端口(port)和各個通道(lane)的連接情況,以及為連接的通道分配編號。
端口在此狀態下分面向上游端口和面向下游端口,這是兩個不同的端口。配置過程也會根據上游端口和下游端口行為進行討論。
DSP(downstream Port)端口在鏈路中是扮演“領導者”,USP(upstream port)端口是跟隨者。
configuration狀態訓練過程分析
具體分析見下圖:?
(四)L0
L0狀態介紹可以參考此處。?
?總結L0狀態:
鏈路的全功能正常工作狀態。實際使用時候,判斷鏈路正常與否就是看進入L0狀態。L0進入L0s和L1、L2,進入低功耗狀態。L0若進入recovery,可能是切換速率或者鏈路寬度(lane)。
(五)recovery
比較常見進入recovery狀態場景:
1 切換速率
2 切換鏈路寬度
3 鏈路需要重新EQ
具體可以參考此文,介紹比較詳細。