Simple analysis of several Ack/Nak mechanism examples

This article briefly analyzes several examples of Ack/Nak mechanisms.

Example 1. Example of Ack

Step1 Device A prepares to send 5 TLPs to Device B in turn. The corresponding sequence numbers are 3, 4, 5, 6, and 7 respectively.

Step2 Device B successfully received TLP3 and added NEXT_RCV_SEQ from 3 to 4, but device B did not immediately return Ack to device A (at this time, AckNak_LATENCY_TIMER has not yet overflowed);

Step3 Device B successfully received TLP4 and TLP5.

Step4 Suppose AckNak_LATENCY_TIMER overflows at this time, then device B will return to device A an Ack DLLP with sequence number 5. At the same time, device B resets AckNak_LATENCY_TIMER but does not restart until device B successfully receives TLP6.

Step5 Device A receives Ack5, resets REPLAY_TIMER and REPLAY_NUM, and then removes the TLP backup from sequence number 5 (and before 5) in Buffer;

Step6 Once device B receives TLP6, AckNak_LATENCY_TIMER will be restarted.

Example 2. Ack with Sequence Number Rollover

Step 1 Device A prepares to send TLPs with sequence numbers 4094, 4095, 0, 1, and 2 to Device B in sequence. Note that the first one sent is TLP4094, and the last one is TLP2. In other words, the serial number Rollover;

Step2 After Device B successfully receives TLP4094~TLP1, assuming that AckNak_LATENCY_TIMER overflows at this time, Device B returns Ack1 DLLP to Device A;

Step3 Device A receives Ack1, and removes the TLP backup sequence number 1 (and previous TLP4094~TLP1) from the Buffer. At the same time, REPLAY_TIMER and REPLAY_NUM are reset.

Example 3. Example of Nak

Step1 Assume that device A prepares to send a TLP with sequence numbers 4094, 4095, 0, 1, and 2 to device B in turn;

Step2 Device B successfully accepted TLP4094 and added 1 to NEXT_RCV_SEQ to 4095;

Step 3 Device B received the TLP4095, but the TLP did not pass the CRC check (ie there is an error). At this point, regardless of the state of AckNak_LATENCY_TIMER, device B immediately returns Ack 4094 to device A (note that the serial number in the returned Ack DLLP is the serial number of the last successfully received TLP). At the same time device B will stop and reset AckNak_LATENCY_TIMER;

Step4 Device B will wait for device A to send TLP4095 to it, but device A does not know what happened. It will continue to send TLP0~TLP2 before receiving device B's Ack/Nak, but device B will ignore it directly. These TLPs.

Step5 When Device A receives Nak4094 DLLP from Device B, it removes the TLP4094 (and previous TLP) from the Buffer and sends it back from the TLP4095. At the same time, reset REPLAY_TIMER.

Note: In the Mindshare book, it says that REPLAY_NUM will be reset. This is incorrect.

Step6 Since device A received Nak instead of Ack, device A will restart REPLAY_TIMER and increase REPLAY_NUM by one.

Step7 Once Device B successfully receives the TLP4095, Device B clears the NAK_SCHEDULED flag, increments the NEXT_RCV_SEQ counter, and restarts AckNak_LATENCY_TIMER.

Example 4. Example of Lost TLPs

Step1 Assume that device A is ready to send TLP 4094,4095,0,1,2 to device B in sequence;

Step2 Device B successfully receives TLP4094~TLP0 and returns Ack0 to device A. At this time, device B's NEXT_RCV_SEQ is 1;

Step3 Device A receives the Ack0 returned by Device B and removes the corresponding TLP backup from the Buffer.

Step4 Device B received TLP2 (instead of TLP1), which means that TLP1 was lost during the transmission. At this point, device B will directly drop TLP2 and set the NAK_SCHEDULED flag, and return Nak0 DLLP to device A at the same time;

Step5 After Device A receives Nak0 DLLP, it removes the TLP0 (and previous, if any) from the Buffer. At the same time, from TLP1, send again to device B.

Example 5. Example of Bad Nak

Step1 Device A prepares to send TLP 4094,4095,0,1,2 to Device B in sequence;

Step2 Device B successfully received TLP4094~TLP0, but because AckNak_LATENCY_TIMER has not overflowed, Device B does not immediately return Ack DLLP to Device A;

Step3 Device B finds an error in TLP1 and returns Nak0 DLLP to Device A with the NAK_SCHEDULED flag set.

Step4 Device A finds that there is also an error in the Nak0 DLLP it receives (the CRC fails the check), so it discards Nak0 directly;

Step 5 However, device B has been waiting for device A to send TLP1 to it. Before it successfully receives TLP1, device B will not return any Ack or Nak, regardless of what device A sends to it (other than TLP1). The NAK_SCHEDULED flag of device B also remains set.

Step 6 is that Device A does not know that Device B wants to resend TLP1 (since Nak0 was not successfully received). Therefore, device A will continue to send the subsequent TLP to device B. However, because device B's Ack/Nak DLLP has not been received, device A's REPLAY_TIMER will overflow after a period of time.

Step7 After device A's REPLAY_TIMER overflows, device A will re-send all TLPs in the buffer and restart REPLAY_TIMER while incrementing the REPLAY_NUM counter.

Step 8 Device B will receive TLP4094~TLP0 again, but this has been successfully received before. So device B will drop it directly, and it will not return any Ack or Nak like device A

Step9 At this point, device B receives TLP1 again and no error is found (successful reception). Device B then clears the NAK_SCHEDULED flag and restarts AckNak_LATENCY_TIMER to increment NEXT_RCV_SEQ.

Nomex Braided Sleeving

Features of Nomex Braided Sleeving

long-term working temperature: -40 ° C -360 ° C


This braided expandable sleeving is lightweight, flexible and non-flammable, it will perform without deterioration in the most diverse and demanding environments.

Nomex braided sleeving is oil and water repellent and also offers excellent resistance to gamma and x-rays.

Nomex is designed for the protection of wires and cable bundles against flame, high temperatures and mechanical abrasion. It is used on a variety of applications in the military, railway, marine, aeronautical and electrical equipment industries.

1: 3 expansion ratio
• Thin Wall
• Lightweight
• Self-extinguishing
• Excellent abrasion protection


With a tensile strength of 90,000 psi and can withstand temperatures up to 700°F, the Nomex Braided Sleeving is known for its high flame resistance. Because of the smooth and soft material, Nomex is used to make fire resistant protective gear for individuals that work in extreme heat conditions.




Nomex Cable Sleeve,Armid Nomex Wire Braided Sleeve ,High Temperature Wire Sleeve,Heat Braided Sleeve For Wire

Shenzhen Huiyunhai Tech.Co.,Ltd , https://www.hyhbraidedsleeve.com