PCIe Byte Enable 及与TPH关系
Byte Enable
PCIe Byte Enable 在mem/IO/Cfg TLP中被应用并且在各种不同TLP中的没有区别,PCIe中Byte Enable与AXI中wstrb类似起到mask的作用,但是PCIe不支持request数据全部字节的mask,只支持数据头和尾部各一个DWord的mask,因此PCIe只引入了First Byte Enable和Last Byte Enable。
Byte Enable 在TLP Header中位置:
Continue Byte Enable
Continue Byte Enable指的是byte enable 在1之间不可以有0。
- TLP length域为1DW
Last Byte Enable 必须为0; - TLP length域大于1DW
First Byte Enable 不可以为0;
Last Byte Enable 不可以为0; - TLP length域大于等于2DW
First Byte Enable和Last Byte Enable及之间的数据必须是连续的。
Example:
First Byte Enable: 1100b; Last Byte Enable 0011b;
First Byte Enable: 1000b; Last Byte Enable 0111b;
Non-Continue Byte Enable
Non-Continue Byte Enable指的时Byte Enable 在1之间有0。
Example:
1010b/0101b/1001b/1011b/1101b
- TLP length域为1DW
- First Byte Enable可以是任意的值;
- TLP length域大于2DW
- length 是4DW对齐的情况,First Byte Enable和Last Byte Enable才支持Non-Continue;
zero write & zero read
Zero write是length为1DW,并且First Byte Enable为all zero的写场景,这种场景在某些protocols下有应用场景,Spec中的Example 是LN protocol,详细协议参见Spec Section 6.21
Zero read是length为1DW,并且First Byte Enable为all zero的读场景,这种场景通常被用来flush target mem。
TPH
当requester本身知道数据的用法,可以在TLP中添加Hints来提高系统效率,为了实现该功能TLP Header中引入TH和PH两个域。
TH表示Requester是否知道数据的用法,也即PH域是否有效。
PH域encoding:
下面用Device Write to Host Read的例子来说明TPH是怎样提高系统效率的:
------------------------------------------未完待续---------------------------------------------
Byte Enable 与TPH的关系
当TLP Header中TH为1且length大于1 DW时,mem_read中First Byte Enable 和Last Byte Enable都要为1。