其中,AckNak_Seq_Num表示当前已经收到的最新的消息序号,所以和TCP类似,PCIe的Ack和Nak可以进行批量操作:无论是Ack还是Nak,当发送方收到这个消息之后,就可以将Retry Buffer中比这个序号老的消息全部移除了,所以Ack/Nak时只需要将最新的序号带上即可。Ack/Nak的差别在于:如果是Nak,那么发送方在移除之后,需要对Retry ...
上面这个过程,暗示了我们实现ack机制link层需要哪些部件:1.seq num计数器 ack需要回复第几个tlp是ACK/NAK的;2.LCRC校验器;3.RETRY buffer,也就是说portA发送一个TLP后,在收到ACK前需要保存该TLP,方便重发;4.计时器,如果发了TLP,迟迟收不到ACK/NAK,就需要报警了。 OK,明白这个机制就行了,现在你大脑里要知...
这两个包的格式如下: 其中,AckNak_Seq_Num表示当前已经收到的最新的消息序号,所以和TCP类似,PCIe的Ack和Nak可以进行批量操作:无论是Ack还是Nak,当发送方收到这个消息之后,就可以将Retry Buffer中比这个序号老的消息全部移除了,所以Ack/Nak时只需要将最新的序号带上即可。Ack/Nak的差别在于:如果是Nak,那么发送方...
发送端为了处理来自接收端的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计数器。 4.6 接收端如何使用ACK/...
接收端不会为每个报文回复应答。如果发送端发送了3-5 sequence number报文,接收端NAK应答中的AckNak_Seq_Num是4,说明报文3-4已经被成功接受。 链路层发送报文的顺序 TLP、DLLP和物理层报文PLP都会使用同一个物理link发送报文,他们之间的顺序是有要求的,一般发送中的报文优先级最高,越是底层的报文优先级越高。
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...
如果当前接收到的TLP中的序列号小于NEXT_RCV_SEQ(且差值不超过2048),则认为该TLP之前已经成功发送过了,此次是重复发送。需要注意的是,PCIe Spec认为重复发送并不是一个错误,只是直接将该TLP丢弃,并没有Nak或者Error Reporting,但是会返回一个包含有上一次成功接收的TLP的序列号(NRS-1)的Ack DLLP给发送端。
这里有一个新的参数:Acknowledged Sequence Numbers, 简化标记为AckD_SEQ, 缩写为AS。AckD_SEQ是一个12位的计数器,用于记载最近收到的Ack/Nak DLLP中的Sequence ID。 当发送端收到的Ack/Nak DLLP中的Sequence ID大于AS时,代表TLPs传输正在进行中。
1. 除了按照规范正确实现 IMPLICIT_RX_FLIT_SEQ_NUM 计数器之外,我们还发现,将隐式 FLIT 序列号记录在状态寄存器中或显示在调试日志中,能够更方便地进行比较和调试。 2. 确保您的监视器可以存储所有的 FLIT,将保存的 FLIT 与每个符号上的已退役 FLIT 进行比较,并报告相应的错误。
Step6 由于设备A接收到的是Nak,而不是Ack,因此设备A会重新启动REPLAY_TIMER并将REPLAY_NUM加一; Step7 一旦设备B成功地接收到TLP4095,设备B便会清除NAK_SCHEDULED标志位,并将NEXT_RCV_SEQ计数器加一,同时重启AckNak_LATENCY_TIMER。 Example 4. Example...