微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 关于PCIe完成报文乱序的问题

关于PCIe完成报文乱序的问题

时间:10-02 整理:3721RD 点击:
大家好,最近在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位。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top