<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Ack/Nak機制詳細介紹

SwM2_ChinaAET ? 來源:未知 ? 作者:胡薇 ? 2018-05-29 14:46 ? 次閱讀

Ack/Nak是一種由硬件實現的,完全自動的機制,目的是保證TLP有效可靠地傳輸。Ack DLLP用于確認TLP被成功接收,Nak DLLP則用于表明TLP傳輸中遇到了錯誤。

如上圖所示,發送方會對每一個TLP在Replay Buffer中做備份,直到其接收到來自接收方的Ack DLLP,確認該DLP已經成功的被接受,才會刪除這個備份。如果接收方發現TLP存在錯誤,則會向發送發發送Nak DLLP,然后發送方會從Replay Buffer中取出數據,重新發送該TLP。

Ack/Nak機制內部的詳細結構圖如下圖所示:

下面對圖中的各個Elements分別做一個簡單地介紹。

首先是發送端的Elements:

來個大圖特寫:

NEXT_TRANSMIT_SEQ Counter

NEXT_TRANSMIT_SEQ Counter,即NTS計數器,是一個12位的計數器。當數據鏈路層處于DL-Down狀態或者復位時,該計數器會被初始化為0。該計數器只會執行加一操作,也就是說當其到達最大值4095時,在進行加一操作則會變成0(Roll Over)。該計數器用于產生下一個待發送的TLP的序列號(Sequence Number)。每一個序列號都是與一個TLP所唯一對應的,可以說這個序列號正是整個Ack/Nak機制的關鍵。

LCRC Generator

LCRC產生器用于產生一個32位的CRC值,其作用于整個TLP和其對應的序列號。

Replay Buffer

Replay Buffer是Mindshare書中的叫法,在PCIe Spec中,這個Buffer的名稱叫做Retry Buffer。Replay Buffer中按照傳輸順序,存儲了整個TLP、序列號和LCRC,如下圖所示:

當發送端收到來自接收端的Ack DLLP時,會將Buffer中相應的TLP(包括對應的序列號和LCRC)移除;如果接收到的是Nak DLLP,則會將Buffer中響應的TLP(包括對應的序列號和LCRC)重新發送給接收端。

REPLAY_TIMER Count

REPLAY_TIMER是一種看門狗定時器,當該定時器溢出,則表明發送端已經發送了一個或者多個TLP,但是并未收到來自接收端的應答信號(Ack/Nak)。此時,發送端會將Replay Buffer中的TLP重新發送,并將看門狗定時器重啟。

只要發送端發送了任何TLP,該定時器便會啟動,在接收到來自接收端的應答信號之前都會持續地運行。當收到應答信號之后,定時器會立即被清零。此時如果Replay Buffer仍然有TLP(表明還有TLP被發送,但是仍未得到應答),定時器又會被立即被重新啟動。如果Buffer中是空的,則定時器不會被重新啟動,直到新的TLP被發送。

REPLAY_NUM Count

這是一個2位的計數器,用于記錄同一個TLP發送失敗的次數,當其值從11b變為00b時(溢出了,表示嘗試發送某個TLP失敗了4次),數據鏈路層會自動地強制物理層重新進行鏈路訓練(即LTSSM進入Recovery狀態)。當完成鏈路訓練之后,便會重新發送之前發送失敗的TLP。

當發送端接收到來自接收端的Nak DLLP或者發送端的看門狗定時器(REPLAY_TIMER)溢出時,該計數器都會被加一;當接收到Ack DLLP時,該計數器則會被清零。

ACKD_SEQ

ACKD_SEQ寄存器用于存儲最近接收到的Ack或者Nak DLLP中的序列號。當復位或者數據鏈路層處于無效狀態時,該寄存器會被初始化為全1。關于ACKD_SEQ寄存器的具體用法會在后續的文章中,用例子的形式詳細說明。

DLLP CRC Check

接收端在接收到來自發送端的DLLP后,首先會檢查其DLLP CRC,如果發現有錯誤,則會直接將其丟棄,認為其實無效的DLLP。

然后是接收端的Elements:

首先來一張大圖特寫:

LCRC Error Check

顧名思義,LCRC Error Check用于檢查接收到的TLP是否存在錯誤。如果存在錯誤,則將對應的TLP直接丟棄,然后產生一個Nak DLLP發送給發送端,讓其重新發送該TLP。

NEXT_RCV_SEQ

NEXT_RCV_SEQ是一個12位的計數器,即Next Receive Sequence Number,其值為已經成功接收的TLP的序列號加1。主要用于檢查當前接收到的TLP是不是應該接收到的TLP。

如果NEXT_RCV_SEQ和當前接收到的TLP中的序列號的值相等,則認為這是一個有效的TLP,但是接收端并不會立即向發送端發送Ack DLLP,而是等到AckNak_LATENCY_TIMER溢出時才向發送端發送Ack DLLP。也就是說,一個Ack DLLP可能會對應多個TLP,接收端不會每成功接收到一個TLP便向發送端發送Ack DLLP。

如果當前接收到的TLP中的序列號小于NEXT_RCV_SEQ(且差值不超過2048),則認為該TLP之前已經成功發送過了,此次是重復發送。需要注意的是,PCIe Spec認為重復發送并不是一個錯誤,只是直接將該TLP丟棄,并沒有Nak或者Error Reporting,但是會返回一個包含有上一次成功接收的TLP的序列號(NRS-1)的Ack DLLP給發送端。

如果當前接收到的TLP的序列號大于NEXT_RCV_SEQ,表明傳輸過程中漏掉了一些TLP。此時,接收端會返回Nak DLLP,并直接丟棄該TLP。

一個簡單的例子如下圖所示:

NAK_SCHEDULED Flag

NAK_SCHEDULED是一個標志位,當接收端產生Nak DLLP時,該標志位會被置位。當接收端成功接收到有效的TLP時,該標志位會被清零。需要特別注意的是,當該標志位處于置位狀態時,接收端不應產生其他的Nak DLLP。

AckNak_LATENCY_TIMER

AckNak_LATENCY_TIMER定時器會在接收端成功接收到有效的TLP,且并未向發送端返回Ack DLLP之前運行。當AckNak_LATENCY_TIMER定時器溢出時,接收端會立即向發送端返回Ack DLLP(攜帶的序列號為NRS-1,即一個Ack對應多個有效的TLP)。無論接收端返回Ack還是Nak,該定時器都會被復位,但是只有當接收端再次收到有效的TLP時,該定時器才會被重新啟動。

該定時器(REPLAY_TIMER)的值是由PCIe Spec規定的和Lane的數量與Max_Payload有關,Gen1的值如下圖所示:

Gen2(5GT/s)如下圖所示:

注:該定時器(REPLAY_TIMER)的值是AckNak_LATENCY_TIMER定時器值的三倍。

Ack/Nak Generator

顯然,Ack/Nak Generator的功能是產生Ack或者Nak DLLP。其格式如下:

最后,介紹一下PCIe Spec中推薦的包優先級順序。我們知道,PCIe總線通信中,存在多種類型的包,包括TLP、DLLP和Ordered Sets等。為了能夠是總線達到最優的傳輸效率,PCIe Spec推薦對這些包的優先級做如下的設置:(當然這只是推薦,并沒有強制廠商一定要這要去實現)。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • ACK
    ACK
    +關注

    關注

    0

    文章

    27

    瀏覽量

    11080
  • PCIe
    +關注

    關注

    13

    文章

    1083

    瀏覽量

    80867
  • NAK
    NAK
    +關注

    關注

    0

    文章

    4

    瀏覽量

    3695

原文標題:【博文連載】PCIe掃盲——Ack/Nak 機制詳解(一)

文章出處:【微信號:ChinaAET,微信公眾號:電子技術應用ChinaAET】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    BLE中的ACK機制

    ACK
    橙群微電子
    發布于 :2023年03月31日 09:52:36

    請問CC2530如何實現指定節點的ACK回復功能?

    ,節點和接收器都出在一個頻點下。CC2530的相關機制是否能實現這點呢?麻煩在于auto ack是自動回復的,似乎不能規定目標地址!
    發表于 04-24 08:58

    【每日一知識點】在STM32F4上OTG 主機庫在 BULK 傳輸上對 NAK 的處理

    數據后,不再回復 NAK 握手,而是回復主機要獲取的數據,然后主機硬件回復 ACK 來結束本次 transfer。BULK IN通道對 NAK的處理和 CTRL IN通道對 NAK的處
    發表于 06-02 15:22

    ACK電路圖

    ACK電路圖
    發表于 01-01 05:36 ?1291次閱讀
    <b class='flag-5'>ACK</b>電路圖

    什么是ACK (ACKnowledge Character)

    什么是ACK (ACKnowledge Character)  英文縮寫: ACK (ACKnowledge Character) 中文譯名: 確認字符 分  類: 傳輸與接入
    發表于 02-22 10:12 ?1611次閱讀

    PCIe總線的通信機制

    那么為什么要分為Non-Posted和Posted兩種類型呢?對于Memory Writes來說,對效率要求較高,因此采用了Posted的方式。但是這并不意味著Posted類型的操作不需要Completer進行應答,只是此時Completer采用了另一種應答機制——Ack
    的頭像 發表于 04-24 09:41 ?1.2w次閱讀
    PCIe總線的通信<b class='flag-5'>機制</b>

    簡單地分析幾個Ack/Nak機制的例子

    設備B接收到了TLP4095,但是該TLP并未通過CRC校檢(即存在錯誤)。此時無論AckNak_LATENCY_TIMER處于何種狀態,設備B都會立即向設備A返回Ack4094(注意返回的Ack
    的頭像 發表于 05-30 09:16 ?6063次閱讀
    簡單地分析幾個<b class='flag-5'>Ack</b>/<b class='flag-5'>Nak</b><b class='flag-5'>機制</b>的例子

    發動機制造工藝的詳細資料說明

    本文檔的主要內容詳細介紹的是拖拉機的發動機制造工藝詳細資料說明。
    發表于 04-09 08:00 ?0次下載
    發動<b class='flag-5'>機制</b>造工藝的<b class='flag-5'>詳細</b>資料說明

    使用單片機制作一個簡單的應用系統詳細資料說明

    本文檔的主要內容詳細介紹的是使用單片機制作一個簡單的應用系統詳細資料說明。
    發表于 09-22 17:09 ?10次下載
    使用單片<b class='flag-5'>機制</b>作一個簡單的應用系統<b class='flag-5'>詳細</b>資料說明

    C0603X5R226M6R3NAK 片式高容多層陶瓷電容器

    電子發燒友網為你提供EYANG(EYANG)C0603X5R226M6R3NAK相關產品參數、數據手冊,更有C0603X5R226M6R3NAK的引腳圖、接線圖、封裝手冊、中文資料、英文資料,C0603X5R226M6R3NAK
    發表于 01-29 11:04

    C0603X5R226X6R3NAK 片式高容多層陶瓷電容器

    電子發燒友網為你提供EYANG(EYANG)C0603X5R226X6R3NAK相關產品參數、數據手冊,更有C0603X5R226X6R3NAK的引腳圖、接線圖、封裝手冊、中文資料、英文資料,C0603X5R226X6R3NAK
    發表于 03-17 19:41

    ack文本查找工具

    ./oschina_soft/ack3.zip
    發表于 05-25 09:24 ?0次下載
    <b class='flag-5'>ack</b>文本查找工具

    PCIe鏈路層里的ACK/NAK介紹

    Spec洋洋灑灑數千頁,也不會從頭到尾去通讀整個協議。對于cocotbext-pcie里面牽涉到的鏈路層的ACK/NAK,牽涉到的PCIe背景,聊做記錄。 ????本文僅結合PCIe Spce
    的頭像 發表于 06-25 10:31 ?1649次閱讀
    PCIe鏈路層里的<b class='flag-5'>ACK</b>/<b class='flag-5'>NAK</b><b class='flag-5'>介紹</b>

    詳細介紹?注意力機制中的掩碼

    注意力機制的掩碼允許我們發送不同長度的批次數據一次性的發送到transformer中。在代碼中是通過將所有序列填充到相同的長度,然后使用“attention_mask”張量來識別哪些令牌是填充的來做到這一點,本文將詳細介紹這個掩
    的頭像 發表于 07-17 16:46 ?461次閱讀
    <b class='flag-5'>詳細</b><b class='flag-5'>介紹</b>?注意力<b class='flag-5'>機制</b>中的掩碼

    I2C子系統ACK error

    在應該收到 ACK 信號的時候沒有收到 ACK 信號,i2c controller 就會產生一個 ACK error 的中斷,告訴 i2cdriver 發生了 ACK error。通常
    的頭像 發表于 07-22 14:39 ?1036次閱讀
    I2C子系統<b class='flag-5'>ACK</b> error
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>