1.什么是 byte enable
PCIe 协议规定 TLP 中的 data payload 是 1DW(特殊情况此处不介绍)对齐的,因此在使用 addr 的 TLP 中省略了 addr[1:0],为了指示 DW 中的有效字节,PCIe TLP header 使用 First/Last DW Byte Enables 表示 data payload 的首个/最后一个 DW 中的哪些 byte 是有效的。对应字节的 byte enable 为 1 则表示字节有效。
Memory, I/O, and Configuration Requests 的 TLP header 需要用到 Byte Enable.如图 2-32 所示,First/Last DW Byte Enables 位于 TLP header 的 byte 7。如表 2-10 所示,First DW BE[0]位于 TLP byte7 的 bit 0,表示 data payload 的 byte 0。First DW BE[1]位于 TLP byte7 的 bit 1,表示 data payload 的 byte 1。Last DW BE[3]位于 TLP byte7 的 bit 7,表示 data payload 的最后一个 byte。
2.Byte Enables rules
- 如果 request 的 length 表示 data 长度大于 1DW,则当前 TLP header 中的 First DW BE[3:0] f 字段不能等于 0000b
- 如果 request 的 length 表示 data 长度等于 1DW,则当前 TLP header 中的 last DW BE[3:0] f 字段必须等于 0000b
- 如果 request 的 length 表示 data 长度大于 1DW,则当前 TLP header 中的 last DW BE[3:0] f 字段不能等于 0000b
- length 为 1DW 的请求中,允许出现非连续的 First DW BE,例如 1DW 的请求中 First DW BE[3:0]为 1010b, 0101b, 1001b, 1011b, 1101b 都是允许的。
- 在 2DW 对齐的 memory 请求中,如果请求的 length 为 2DW,则 last DW BE[3:0] 和 First DW BE[3:0]均允许出现非连续。
- 长度为 2DW 的非 2DW 对齐的 memory Requests 和 长度大等于 3DW 的 memory Requests ,其 First DW BE[3:0] 和 First DW BE[3:0] 设置必须要保证有效字节连续,例如
First DW BE: 1100b, Last DW BE: 0011b
First DW BE: 1000b, Last DW BE: 0111b
- zero-length Write:是 length 为 1DW 且所有字节都是无效的(即 First DW BE[3:0] 和 last DW BE[3:0] 均为的 0000b)Write Request,除非特殊说明,否则此请求不应该对 Completer 造成任何影响(即不会在 Completer 产生写操作)。
- zero-length Write 常常用作 flush 请求。例如,为了确认之前发起的 Post write 已被目标设备完成,发送一个 zero-length read 且读地址和 Post write 的写地址保持一致,当收到 zero-length read 的 completion 时就能确保 Post write 已被目标设备完成。
- zero-length Read:长度为 1DW 且所有字节都是无效的(即 First DW BE[3:0] 和 last DW BE[3:0] 均为的 0000b)read Request,其对应的 Completion 必须指明长度为 1DW,且包含长度为 1DW 的 data payload
- 如果接收到的 TLP header 中的 First DW BE[3:0]和 last DW BE[3:0]违背了本章节的规定,协议并没有规定 Receiver/Completer 的行为
- Receiver 可以选择检查 Byte Enables rules,一旦进行检查且分析 TLP 违背了 Byte Enables rules,则把 TLP 当做畸形 TLP 处理
3.参考文档
PCI Express Base Specification Revision 6.2, section 2.2.5, p. 182.
END
作者:IC小鸽
文章来源:IC小鸽
推荐阅读
更多 IC 设计干货请关注IC 设计专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。