PCIE TLP包解析
说明:本文摘自 V3学院 尤老师的培训班笔记,仅用于个人学习,不用于任何商业用途。
满足个人在公交车上或者其他需要不得不等待的时间段内学习的需要。
-
TLP包的公共部分
-
Memory read/write TLP(Mwr/Mrd包)
Length的单位是DW,应该填除以4后的结果,如果不能整除,需要加一 -
Completion/Completion with Data TLPs (CPLD包)
=============== -
Length一共10bit,其中0表示1024DW, 1~1023则正常理解。(1DW=4Byte=32bit)
一个包不能跨越4KB的寻址边界。
DW BE 每一bit代表1个Byte,类似于DDR中的掩码。
0<数据量<=4Byte(1DW), First DW BE每一bit位不能全为0,
Last DW BE必须每一bit位必须为0,
数据量>4Byte(1DW), Last DW BE每一bit位不能全为0,
数据量=0, First DW BE = Last DW BE = 4’b0000
=============== -
Mrd和Mwr的不同点在于,Mrd是Non_posted,需要独立的反馈事务来反馈读取的数据,而写不用,直接写即可。
通过包头fmt控制3DW还是4DW来选择地址的空间大小
=============== -
注意cpld包中的Byte Count 是字节数目,并不是DW的数目。其他所有的单位都是DW,只有这里的单位是Byte.
Byte Count的数值必须凑成4的整数倍。Byte Count的数值包括当前包要送的数量,而不是除去当前包所剩余的数量。
当剩余字节(Byte count)等于当前包的lenth*4(换算成Byte数量)时,表示这是最后一个包,数据发送完成。
=============== -
address 和 Length不能跨越RCB(Read Completion Boundary),可以是RCB的整数倍。RCB是在Root Complex中设置的。
MPS是一个包最大承载数据数量。
要注意发包的时候,既不能跨RCB,又不能超过MPS。
Lower address是第一个有效字节地址的低7位。如果第一个数据First DW BE为4‘b1110,需要往后面顺延一个地址,即地址加一。
=============== -
TLP包是怎么发送的呢?
虽然协议里最大长度为10bit(DW),即最大4K byte。
但是ip里有个参数:MPS和RCB.
决定了最大只能发MPS个byte,而且发的时候地址不能跨RCB的倍数边界。所以发包的长度会有限制。===============
-
一定长度的MemR/Wr TLP包是如何发送的?
例1:
0x1000f8%0x80(128)=0x78(120)。所以还差8个就到达RCB(128).
所以第一个包只能发8个。地址往往不是RCB的整数倍,所以第一个包需要控制数量对到RCB的整数倍上。
还剩下272-8=264个bytes.再发2个128(RCB),即264-256=8个bytes。所以还剩下8个bytes.
==> 所以一共四个包。(8+128+128+8)
或者第2个包发两倍的RCB,即256个。即(8+256+8)
=====
例2:
同理第一个包需要控制数量对到RCB的整数倍上。
0x0040_0130%0x40(64) = 0x30(48)。还差16个满RCB(64个)。所以第一个包发16个。
而first BE=1110。所以第一个包的第一个DW中的第一个BYTE是不考虑的,实际只有15个BYTE。
1234-16=1218。而1218-1289=66;66-64=2.
16+1289+64+4(最小发一个dw),一共12个包。
应该是如下的图。
注意:
因为first BE=1110,所以第一个byte是无效的,(注意是1110,而不是0111)而low address是第一个有效字节的低7bit地址,并不是像往常一样直接取address的低7bit。故这里容易错,这里需要加一,保证改地址上的数据是有效的。
② Byte count的长度应该是4的倍数,这里如果不是4的倍数,需要向上取4的倍数,比如这里的数为1234,取值为1236。
③ Byte count 包含当前包的长度,并没有把当前包去掉。
1).First packet to align to the next RCB;
2).Next 9 packets cover 1152 bytes;
3).Not enough for a full packet,stay aligned with RCS===============
Message TLP
XILINX IP并没有开放message tlp封包的权利给用户,我们只需要拉高拉低中断信号。