PCIe协议学习之-Ack/Nak协议

本文详细介绍了PCIe数据链路层中的Ack/Nak协议,该协议确保TLP的可靠传输。当Tx发送TLP后,会将其存入Retrybuffer,Rx通过AckDLLP或NakDLLP确认接收状态。AckDLLP表示已成功接收,NakDLLP指示错误。RetryTimer、RetryNumCount和SEQ_NUM比较逻辑用于管理重传过程。在Rx端,NEXT_RCV_SEQ(NRS)跟踪预期接收的TLP序列号,并通过LCRC和SEQ_NUM检查来处理TLP。当收到错误TLP时,会发送NakDLLP,并使用AckNak_Latency_Timer来控制Ack的延迟发送。

Ack/Nak协议是PCIe Data Link layer中最重要的内容。它用来保证TLP的可靠传输。它是基于Retry buffer实现的,Tx发出TLP后,将原始的TLP存到Retry buffer里面,当RX通过Ack DLLP告知已经正确收到TLP后才会将TLP中相应的TLP移除。当Rx通过Nak DLLP告知Tx有TLP出现错误后,Tx可以将Retry buffer中的相应TLP resent出去。

Tx和Rx的逻辑框图如下:

TX端

1)SEQ Num分配

DL层从TL层收到TLP后,要为其分配SEQ Num, 这个SEQ Num来自一个12bits的NEXT_TRANSMIT_SEQ(NTS), NTS从0开始每次加1,到4095后又rollover到0.

2)Ack/Nak DLLP

在Ack DLLP中,AckNak_Seq_Num的含义是Rx成功接收的最后一个TLP的SEQ_NUM。在Nak DLLP的含义也是Rx成功接收的最后一个TLP的SEQ_NUM,而不是失败的TLP的SEQ_NUM. 也就是说,当Tx收到Ack/Nak后,等于或者小于SEQ_NUM的TLP都可以从Retry buffer中移除了。

2)AckD_SEQ(AS)

含义是最近一次被成功接收了的SEQ_NUM, AckD应该是Acknowledged的意思??

3)Retry Timer

当Tx方向发出了TLP而没有收到Ack/Nak,则这个timer就处于running. 当收到Ack后,reset timer, 将retry buffer里面等于或者小于SEQ_NUM的T

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值