Type字段 Byte 0 bit7:0:表明该DLLP是ACK还是NAK,对于ACK DLLP 该字节为0000 0000。对于NAK DLLP该字节为0001 0000。 AckNak_Seq_Num字段: 该字段主要是提供给发送端来表明那些TLP发送成功或者失败。AckNak_Seq_Num=NEXT_RCV_SEQ(After Incrementing) -1 这里有一个需要注意的细节!!!在上一篇我们说到一...
其中,AckNak_Seq_Num表示当前已经收到的最新的消息序号,所以和TCP类似,PCIe的Ack和Nak可以进行批量操作:无论是Ack还是Nak,当发送方收到这个消息之后,就可以将Retry Buffer中比这个序号老的消息全部移除了,所以Ack/Nak时只需要将最新的序号带上即可。Ack/Nak的差别在于:如果是Nak,那么发送方在移除之后,需要对Retry ...
其中,AckNak_Seq_Num表示当前已经收到的最新的消息序号,所以和TCP类似,PCIe的Ack和Nak可以进行批量操作:无论是Ack还是Nak,当发送方收到这个消息之后,就可以将Retry Buffer中比这个序号老的消息全部移除了,所以Ack/Nak时只需要将最新的序号带上即可。Ack/Nak的差别在于:如果是Nak,那么发送方在移除之后,需要对Retry ...
(3) TLP 4095第二个被成功接收,返回Ack DLLP给Device A, 同时Next_RCV_SEQ加1(也就是=0,因为4095+1超过了Next_RCV_SEQ的最大取值4095,从0开始记)。 (4) TLP 4094第三个被成功接收,返回Ack DLLP给Device A, 同时Next_RCV_SEQ加1(也就是=1)。 (5) 在TLP 0被成功接收之后,AckNak_LATENCY_TIMER...
ACK NAK 电源管理DLLP 流控DLLP Vendor-defined DLLP ACK/NAK应答机制 参考《PCIE体系结构导读》7.2章节。 发送端和接收端通过sequence number来标记报文。 接收端不会为每个报文回复应答。如果发送端发送了3-5 sequence number报文,接收端NAK应答中的AckNak_Seq_Num是4,说明报文3-4已经被成功接受。
Step6 由于设备A接收到的是Nak,而不是Ack,因此设备A会重新启动REPLAY_TIMER并将REPLAY_NUM加一; Step7 一旦设备B成功地接收到TLP4095,设备B便会清除NAK_SCHEDULED标志位,并将NEXT_RCV_SEQ计数器加一,同时重启AckNak_LATENCY_TIMER。 Example 4. Example of Lost TLPs ...
Step6 由于设备A接收到的是Nak,而不是Ack,因此设备A会重新启动REPLAY_TIMER并将REPLAY_NUM加一; Step7 一旦设备B成功地接收到TLP4095,设备B便会清除NAK_SCHEDULED标志位,并将NEXT_RCV_SEQ计数器加一,同时重启AckNak_LATENCY_TIMER。 Example 4. Example...
Ack、Nak:AckNak_Seq_Num域表明那些TLP包受影响,详细介绍后续。InitFC1、InitFC2、UpdateFC DLLP:HdrFC包含P、NP、Cpl的包头Header的credit值,DataFC包含P、NP、Cpl有效数据负荷的credit值。PM DLLP:电源管理链路数据包。Vendor Specific:接下来就讨论数据的完整性了,在数据链路层,使用TLP sequen 10、ce Number...
Ack/Nak机制内部的详细结构图如下图所示: 下面对图中的各个Elements分别做一个简单地介绍。 首先是发送端的Elements: 来个大图特写: · NEXT_TRANSMIT_SEQ Counter NEXT_TRANSMIT_SEQ Counter,即NTS计数器,是一个12位的计数器。当数据链路层处于DL-Down状态或者复位时,该计数器会被初始化为0。该计数器只会执行...
发送端为了处理来自接收端的ACK/NAK DLLPs,设置了一个ACKD_SEQ,该计数器记录ACK/NAK DLLP中的AckNack_Seq_Num字段,该计数器的初始值为全1,数据链路层为Inactive状态时,保持为全1,在接收到接收方的ACK/NAK DLLP时,将使用ACK/NACK DLLP中的AckNak_Seq_Num字段更新ACKD_SEQ计数器。