|
300资产
大家好,最近在PC上调试PCIe。我是在K7开发板KC705上用Xilinx的PCIe硬核实现了一个EP,DMA部分自己做的,在进行DMA读的时候发现这样一个问题,例如: 1,DMA读长度2KB;
2,Memory Read Request所能请求的最大长度Max_Read_Req_Size = 512B;
3,TLP包所能携带的最大数据长度Max_Payload_Size = 128B。
因此,一次DMA读操作需要发4个读请求(分别用Tag0~Tag3表示),一个读请求需要4个Completion完成报文(分别用Tagn_0~Tagn3,n=0~3,表示4个读请求)。
问题来了,在收Completion完成报文的时候,到达顺序是这样的:
Tag0_0,Tag1_0,Tag2_0,Tag3_0;
Tag0_1,Tag1_1,Tag2_1,Tag3_1;
Tag0_2,Tag1_2,Tag2_2,Tag3_2;
Tag0_3,Tag1_3,Tag2_3,Tag3_3;
而不是完全的顺序到达,有哪位大神碰见过类似的情况,请给个解释。
这里补充一下:跟PCIe序无关,本人将EP的Relax-ordering使能关闭,在TLP中也设置为0,结果都一样,跟EP连接的PCIe控制器的配置空间也没有使能Relaxed-ordering位。 |
|