核在链路上发射用户请求的顺序与其请求器接口上接收这些请求的顺序相同。如果用户逻辑想要精确控制请求器请求接口和完成器完成接口上的传输事务的发送顺序(通常目的是在使用严格排序时,禁止完成包传递转发请求),那么核会为用户逻辑提供相应的机制,以便监控转发传输事务通过其流水线的整个过程,从而判定何时需在完成器完成接口上调度完成包,同时可以避免传递从请求器请求接口发射的特定转发请求。
在跨请求器请求接口传输转发请求(存储器写入传输事务或报文)时,用户逻辑会在其第一拍内向
PCIe®
核提供可选 6 位序列号。s_axis_rq_tuser
中的序列号字段 seq_num0[5:0]
用于为此拍中开始的第 1 个 TLP 发送序列号,field seq_num1[5:0]
则用于为此拍中开始的第 2 个 TLP(如果存在)发送序列号。随后,用户逻辑即可监控核的 pcie_rq_seq_num0[5:0]
和 pcie_rq_seq_num1[5:0]
输出,以确认何时出现这些序列号。当传输事务到达核的内部发射流水线中的相应阶段,且在此阶段中完成包无法传递该传输事务时,核会断言 pcie_rq_seq_num_vld0
有效并保持 1 个周期,并在 pcie_rq_seq_num0[5:0]
输出上提供转发请求的序列号。如果同一周期内该流水线中存在第二个转发请求,那么核还会在同一周期内断言 pcie_rq_seq_num_vld1
有效,并在 pcie_rq_seq_num1[5:0]
输出上提供第二个转发请求的序列号。因此,用户逻辑必须监控这两组序列号输出,以检查特定 TLP 是否已到达相应的流水线阶段。在 pcie_rq_seq_num0[5:0]
或 pcie_rq_seq_num1[5:0]
上出现序列号之后,由该核发射的任何完成包均可确保在核的内部发射流水线中无法传递对应的转发请求。