0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

【桃子同學(xué)筆記4】PCIE訓(xùn)練狀態(tài)機(jī)(LTSSM)基礎(chǔ)

【桃子同學(xué)筆記】 ? 來源:【桃子同學(xué)筆記】 ? 作者:【桃子同學(xué)筆記】 ? 2022-09-05 14:21 ? 次閱讀

首先,所謂LTSSM,即:Link Training and Status State Machine(鏈路訓(xùn)練及狀態(tài)機(jī))

下圖為 LTSSM 的狀態(tài)機(jī)及訓(xùn)練過程:

poYBAGMDrVmAL_fgAACkfb-bRc4659.png

LTSSM 包含 11 個(gè)頂層狀態(tài):Detect、Polling、Configuration、Recovery、L0、L0s、L1、L2、Hot Reset、Loopback 和 Disable。這些狀態(tài)可以分為 5 類:

Link Training states(鏈路訓(xùn)練狀態(tài))
Re-Training(Recovery)state(重訓(xùn)練狀態(tài))
Software driven Power Management State(由軟件控制的電源管理狀態(tài))
Active-State Power Management(ASPM)states(動(dòng)態(tài)電源管理狀態(tài))
Other states(其他狀態(tài))


①各種復(fù)位(Reset)之后,狀態(tài)機(jī)的改變?yōu)椋篋etect => Polling => Configuration => L0。在 L0 狀態(tài)下即可進(jìn)行標(biāo)準(zhǔn)數(shù)據(jù)交互。

②鏈路的 Re-Training 狀態(tài)也稱為 Recovery(恢復(fù))狀態(tài)。鏈路進(jìn)入 Re-Training 狀態(tài)的原因有多種,例如從低功耗鏈路狀態(tài)(如 L1)退出、改變帶寬(改變速率或者寬度)等。在該狀態(tài)下,鏈路會(huì)根據(jù)需要重新執(zhí)行一部分鏈路訓(xùn)練的流程,然后進(jìn)入 L0 狀態(tài)。

③電源管理軟件能將設(shè)備(Device)切換到低功耗設(shè)備狀態(tài)(D1,D2,D3Hot 或者 D3Cold),這會(huì)導(dǎo)致鏈路進(jìn)入對應(yīng)的低功耗鏈路狀態(tài)(L1 或者 L2)。

④在某一時(shí)刻,如果沒有數(shù)據(jù)在傳輸,那么 ASPM 硬件可以自動(dòng)將硬件切換到功耗較低的 ASPM 狀態(tài)(L0s 或者 ASPM L1)。

另外,軟件還可以將鏈路設(shè)置為其它的一些特殊狀態(tài):Disabled,Loopback 或者 Hot Reset。


1. Detect 狀態(tài)

當(dāng) PCIe 鏈路被復(fù)位或者數(shù)據(jù)鏈路層通過填寫某些寄存器之后,LTSSM 將進(jìn)入該狀態(tài)。
當(dāng) PCIe 鏈路進(jìn)入該狀態(tài)時(shí),發(fā)送邏輯 TX 并不知道對端接收邏輯 RX 的存在,因此需要使用 Receiver Detect 識(shí)別邏輯判斷對端接收邏輯 RX 是否可以正常共工作,之后才能進(jìn)入其他狀態(tài)。那么TX怎么去判斷對端設(shè)備呢?

如下圖,Detect狀態(tài)包含了兩個(gè)子狀態(tài):Detect.Quiet和Detect.Active

pYYBAGMDrVmAB66AAABWg7-KUB4846.png


2. Polling 狀態(tài)
當(dāng) PCIe 鏈路進(jìn)入該狀態(tài)時(shí),將向?qū)Χ税l(fā)送 TS1 和 TS2 Ordered Sets(2.5 GT/s),并接收對端的 TS1 和 TS2 Ordered Sets(2.5 GT/s)。

通過接收到的 TS1 和 TS2 序列,完成如下操作:

獲取 Bit Lock
獲取 Symbol Lock 或者 Block Lock
如果需要,糾正 lane polarity inversion(差分信號(hào)極性反轉(zhuǎn))
檢測支持的速率
PCIe 鏈路處于該狀態(tài)時(shí),將進(jìn)行 Loopback 測試,確定當(dāng)前使用的 PCIe 鏈路可以正常工作。


3. Configuration 狀態(tài)
發(fā)送邏輯 TX 和 接收邏輯 RX 繼續(xù)以 2.5 GT/s 的速度交換 TS1 和 TS2 Ordered Sets,完成如下任務(wù):

確定 Link Width
指定 Lane Number
根據(jù)需要,對 Lane reversal 進(jìn)行檢查并對其進(jìn)行糾正
處理 Lane-to-Lane 時(shí)序的偏差
Configuration 狀態(tài)下,scrambling 可以關(guān)閉,該狀態(tài)可以切換到 Disabled 狀態(tài)或者 Loopback 狀態(tài)。
在 TS1 和 TS2 中,還指定了 L0 狀態(tài)切換到 L0s 狀態(tài)所需要的 FTS Ordered Sets 的個(gè)數(shù)。


4. L0 狀態(tài)
L0 狀態(tài)是 PCIe 鏈路的正常工作狀態(tài)。該狀態(tài)下,PCIe 鏈路可以正常發(fā)送和接收 TLP、DLLP 和 Ordered Sets。如果需要切換到高于 2.5 GT/s 的速度傳輸,則需要進(jìn)入 Recovery 狀態(tài)進(jìn)行鏈路重訓(xùn)練(Re-Training)。


5. Recovery 狀態(tài)
PCIe 鏈路需要進(jìn)行重訓(xùn)練(Re-Training)時(shí)會(huì)進(jìn)入該狀態(tài),可能的原因有:

L0 狀態(tài)出現(xiàn)錯(cuò)誤
從 L1 狀態(tài)切換到了 L0 狀態(tài)
從 L0s 狀態(tài)切換到了 L0 狀態(tài),但是使用 FTS 流程并沒有將鏈路訓(xùn)練到可用狀態(tài)
在 Recovery 狀態(tài),重新建立 Bit Lock 和 Symbol/Block Lock 的過程與 Polling 狀態(tài)相似,但是要比 Polling 狀態(tài)花的時(shí)間更短。


6. L0s 狀態(tài)
L0s 是 ASPM(Active State Power Management)機(jī)制提供的第 1 級(jí)低功耗狀態(tài),該狀態(tài)可以在較短的時(shí)間內(nèi)切換到 L0 狀態(tài)。當(dāng)設(shè)備要從 L0 狀態(tài)切換到 L0s 狀態(tài)時(shí),需要向外發(fā)送 EIOS。當(dāng)設(shè)備要從 L0s 狀態(tài)切換到 L0 狀態(tài)時(shí),需要向外發(fā)送多個(gè) FTS,從而快速獲取 Bit Lock 和 Symbol/Block Lock。


7. L1 狀態(tài)
L1 是 ASPM(Active State Power Management)機(jī)制提供的第 2 級(jí)低功耗狀態(tài),它的功耗比 L0s 低,但是需要更長的時(shí)間才能切換到 L0 狀態(tài)。想要進(jìn)入 L1 狀態(tài),位于 PCIe 總線兩端的設(shè)備需要進(jìn)行協(xié)商,然后同時(shí)進(jìn)入 L1 狀態(tài)。兩種可能的方式如下:

ASPM 機(jī)制下硬件自動(dòng)切換。當(dāng) Upstream Port 的硬件發(fā)現(xiàn)沒有 TLP 或者 DLLP 需要再發(fā)送的時(shí)候,就會(huì)自動(dòng)和 Downstream Port 進(jìn)行協(xié)商進(jìn)入 L1 狀態(tài)。如果 Downstream Port 同意,則二者同時(shí)進(jìn)入 L1 狀態(tài);如果 Downstream Port 拒絕,則 Upstream Port 會(huì)進(jìn)入 L0s 狀態(tài)。
電源管理軟件通過命令將設(shè)備配置為低功耗狀態(tài)(D1,D2,D3hot)。此時(shí) Upstream Port 和 Downstream Port 上的設(shè)備同時(shí)進(jìn)入 L1 狀態(tài)。

8. L2 狀態(tài)
L2 狀態(tài)是ASPM(Active State Power Management)機(jī)制提供的第 3 級(jí)低功耗狀態(tài),此時(shí)設(shè)備的主電源被關(guān)閉,從而達(dá)到更低的功耗。該狀態(tài)下,幾乎所有的邏輯都被關(guān)閉,只有一小部分使用 Vaux 供電的邏輯在工作,該部分邏輯可以用來發(fā)送 wakeup 事件。

支持 wakeup 功能的 Upstream Port 能向外發(fā)送一個(gè)低頻信號(hào),該信號(hào)稱為 Beacon。Downstream Port 將 Beacon 信號(hào)轉(zhuǎn)發(fā)給 Root Complex。通過 Beacon 或者 WAKE# 引腳,設(shè)備可以要求系統(tǒng)恢復(fù)它的主電源供電。


9. Loopback 狀態(tài)
該狀態(tài)是用來測試的,但是協(xié)議并沒有明確規(guī)定 Receiver 在該狀態(tài)下做些什么?;镜牟僮骱芎唵危涸O(shè)備 A 作為 Loopback Master,連續(xù)對外發(fā)送兩個(gè) TS1 Ordered Sets,并且 TS1 的 Training Control 區(qū)域的 Loopback 位需要設(shè)置為 1。設(shè)備 B 接收到連續(xù)兩個(gè) Loopback 位為 1 的 TS1 之后,就會(huì)進(jìn)入 Loopback state,稱為 Loopback Slave。Loopback Slave 會(huì)將收到的所有內(nèi)容再發(fā)送給 Loopback Master,從而形成回環(huán),驗(yàn)證鏈路的完整性。


10. Disable 狀態(tài)
系統(tǒng)軟件可以通過設(shè)置寄存器,使 PCIe 鏈路進(jìn)入 Disabled 狀態(tài)。當(dāng) PCIe 鏈路的對端設(shè)備被拔出時(shí),LTSSM 也需要進(jìn)入該狀態(tài)。

該狀態(tài)下,發(fā)送端設(shè)備處于 Electrical Idle 狀態(tài),接收端設(shè)備處于低阻抗?fàn)顟B(tài)。對于鏈接已經(jīng)變得不可靠或者設(shè)備被意外移除時(shí),這種狀態(tài)很有必要。

系統(tǒng)軟件配置 Link Control register 的 Disable 位之后,該設(shè)備會(huì)對外發(fā)送 16 個(gè) TS1 Ordered Sets,這些 TS1 的 Training Control 區(qū)域的 Disable Link 位需要設(shè)置為 1。接收設(shè)備在收到這 16 個(gè) TS1 之后,進(jìn)入 Disabled 狀態(tài)。


11. Hot Reset 狀態(tài)
系統(tǒng)軟件將 Bridge Control register 的 Secondary Bus Reset 位設(shè)置為 1 之后,Bridge 的 downstream port 會(huì)對外發(fā)送多個(gè) TS1 Ordered Sets,這些 TS1 的 Training Control 區(qū)域 Hot Reset 位必須被設(shè)置為 1。接收設(shè)備收到連續(xù) 2 個(gè)這種 TS1 之后,必須對設(shè)備進(jìn)行復(fù)位。

當(dāng)處理器系統(tǒng)進(jìn)行 Hot Reset 操作時(shí),PCIe 鏈路將進(jìn)入 Recovery 狀態(tài),然后進(jìn)入 Hot Reset 狀態(tài)進(jìn)行 PCIe 鏈路的重訓(xùn)練。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • PCIe
    +關(guān)注

    關(guān)注

    15

    文章

    1247

    瀏覽量

    82906
  • 狀態(tài)機(jī)
    +關(guān)注

    關(guān)注

    2

    文章

    492

    瀏覽量

    27601
收藏 人收藏

    評論

    相關(guān)推薦

    Simulink中的狀態(tài)機(jī)建模方法 Simulink數(shù)據(jù)可視化與分析功能

    1. Simulink中的狀態(tài)機(jī)建模方法 1.1 理解狀態(tài)機(jī)的基本概念 在開始建模之前,了解狀態(tài)機(jī)的基本概念是必要的。狀態(tài)機(jī)由以下幾個(gè)部分組成:
    的頭像 發(fā)表于 12-12 09:27 ?666次閱讀

    基于Pytorch訓(xùn)練并部署ONNX模型在TDA4應(yīng)用筆記

    電子發(fā)燒友網(wǎng)站提供《基于Pytorch訓(xùn)練并部署ONNX模型在TDA4應(yīng)用筆記.pdf》資料免費(fèi)下載
    發(fā)表于 09-11 09:24 ?0次下載
    基于Pytorch<b class='flag-5'>訓(xùn)練</b>并部署ONNX模型在TDA<b class='flag-5'>4</b>應(yīng)用<b class='flag-5'>筆記</b>

    觸發(fā)器和狀態(tài)機(jī)的關(guān)系是什么

    觸發(fā)器和狀態(tài)機(jī)在數(shù)字電路設(shè)計(jì)中有著緊密的關(guān)系,它們共同構(gòu)成了時(shí)序邏輯電路的基礎(chǔ),用于實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ)、處理和傳輸。
    的頭像 發(fā)表于 08-12 11:24 ?508次閱讀

    如何在FPGA中實(shí)現(xiàn)狀態(tài)機(jī)

    在FPGA(現(xiàn)場可編程門陣列)中實(shí)現(xiàn)狀態(tài)機(jī)是一種常見的做法,用于控制復(fù)雜的數(shù)字系統(tǒng)行為。狀態(tài)機(jī)能夠根據(jù)當(dāng)前的輸入和系統(tǒng)狀態(tài),決定下一步的動(dòng)作和新的狀態(tài)。這里,我們將詳細(xì)探討如何在FPG
    的頭像 發(fā)表于 07-18 15:57 ?677次閱讀

    玩轉(zhuǎn)Spring狀態(tài)機(jī)

    說起Spring狀態(tài)機(jī),大家很容易聯(lián)想到這個(gè)狀態(tài)機(jī)和設(shè)計(jì)模式中狀態(tài)模式的區(qū)別是啥呢?沒錯(cuò),Spring狀態(tài)機(jī)就是狀態(tài)模式的一種實(shí)現(xiàn),在介紹S
    的頭像 發(fā)表于 06-25 14:21 ?987次閱讀
    玩轉(zhuǎn)Spring<b class='flag-5'>狀態(tài)機(jī)</b>

    關(guān)于SMU狀態(tài)機(jī)的問題求解

    我有一些關(guān)于 SMU 狀態(tài)機(jī)的問題。 假設(shè)由于某種原因,SMU 已進(jìn)入故障狀態(tài)。 手冊指出,要返回運(yùn)行狀態(tài)并將 FSP 恢復(fù)到無故障狀態(tài),應(yīng)調(diào)用IfxSmu_releaseFSP()。
    發(fā)表于 05-29 08:18

    使用系統(tǒng)滴答定時(shí)中斷,基于按鍵的狀態(tài)機(jī)怎么只能1個(gè)1個(gè)+,不能連+?

    使用系統(tǒng)滴答定時(shí)中斷,基于按鍵的狀態(tài)機(jī)怎么只能1個(gè)1個(gè)+,不能連+ #define KEY1_USERGPIO_ReadInputDataBit(GPIOC,GPIO_Pin_13
    發(fā)表于 05-16 06:27

    請問STM32F051用了操作系統(tǒng)RTX后還需要寫狀態(tài)機(jī)不?

    現(xiàn)在學(xué)會(huì)了rtx操作系統(tǒng)后,原來用狀態(tài)機(jī)的學(xué)的程序,可不可以不切割,直接單線程來執(zhí)行列?各位前前輩指點(diǎn)一下。多謝!
    發(fā)表于 05-08 06:11

    在Verilog中實(shí)現(xiàn)Moore型和Mealy型狀態(tài)機(jī)的方法簡析

    編寫能夠被綜合工具識(shí)別的狀態(tài)機(jī),首先需要理解狀態(tài)機(jī)的基本概念和分類。狀態(tài)機(jī)(FSM)是表示有限個(gè)狀態(tài)以及在這些狀態(tài)之間轉(zhuǎn)換的邏輯結(jié)構(gòu)。
    的頭像 發(fā)表于 05-01 11:38 ?1749次閱讀

    求助LabVIEW,狀態(tài)機(jī)里面反饋節(jié)點(diǎn)如何初始化問題

    求助labview,狀態(tài)機(jī)里面反饋節(jié)點(diǎn)如何初始化,下次執(zhí)行這個(gè)狀態(tài)的時(shí)候初始化一次!謝謝謝謝!
    發(fā)表于 03-25 18:17

    如何采用“狀態(tài)機(jī)”解析UART數(shù)據(jù)幀

    如果一個(gè)系統(tǒng)接收上述“不定長度”的協(xié)議幀,將會(huì)有一個(gè)挑戰(zhàn)--如何高效接收與解析。 為簡化系統(tǒng)設(shè)計(jì),我們強(qiáng)烈建議您采用“狀態(tài)機(jī)”來解析UART數(shù)據(jù)幀。
    的頭像 發(fā)表于 03-25 14:29 ?764次閱讀
    如何采用“<b class='flag-5'>狀態(tài)機(jī)</b>”解析UART數(shù)據(jù)幀

    關(guān)于FX3使用4個(gè)線程進(jìn)行FPGA到USB的數(shù)據(jù)傳輸-狀態(tài)機(jī)設(shè)置的問題求解

    狀態(tài)機(jī)進(jìn)行測試 其中WAIT到TH0的轉(zhuǎn)移條件Buffer_Ready是一個(gè)外部輸入信號(hào),TH0到TH3是4個(gè)線程,我在固件中為每個(gè)線程都設(shè)置了一個(gè)Bulk In endpoint,在測試時(shí)發(fā)現(xiàn)
    發(fā)表于 02-27 06:40

    請問GPIF狀態(tài)機(jī)的內(nèi)部信號(hào)需要延遲才能斷言嗎?

    dma_wm_thn 這樣的過渡觸發(fā)器需要一些周期的延遲才能斷言嗎? 在我的實(shí)踐中,DMA_WM_THN 觸發(fā)器似乎有 1 個(gè)時(shí)鐘周期延遲: ? 圖像是我的狀態(tài)機(jī)的一部分,數(shù)據(jù)總線是 32 位
    發(fā)表于 02-23 07:43

    什么是有限狀態(tài)機(jī)?如何解決傳統(tǒng)有限狀態(tài)機(jī)狀態(tài)爆炸」問題?

    有限狀態(tài)機(jī)(Finite State Machine,簡稱FSM)是一種用來進(jìn)行對象行為建模的工具,其作用主要是描述對象在它的生命周期內(nèi)所經(jīng)歷的狀態(tài)序列以及如何響應(yīng)來自外界的各種事件。
    的頭像 發(fā)表于 02-17 16:09 ?6309次閱讀
    什么是有限<b class='flag-5'>狀態(tài)機(jī)</b>?如何解決傳統(tǒng)有限<b class='flag-5'>狀態(tài)機(jī)</b>「<b class='flag-5'>狀態(tài)</b>爆炸」問題?

    Verilog狀態(tài)機(jī)+設(shè)計(jì)實(shí)例

    在verilog中狀態(tài)機(jī)的一種很常用的邏輯結(jié)構(gòu),學(xué)習(xí)和理解狀態(tài)機(jī)的運(yùn)行規(guī)律能夠幫助我們更好地書寫代碼,同時(shí)作為一種思想方法,在別的代碼設(shè)計(jì)中也會(huì)有所幫助。 一、簡介 在使用過程中我們常說
    的頭像 發(fā)表于 02-12 19:07 ?4271次閱讀
    Verilog<b class='flag-5'>狀態(tài)機(jī)</b>+設(shè)計(jì)實(shí)例