微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > pcie访问时事务包的拆分

pcie访问时事务包的拆分

时间:10-02 整理:3721RD 点击:
场景:处理器通过pcie接口访问FPGA。
现象:在访问过程中发现,如果通过处理器向BAR空间写奇数长度数据(例如19个),采用存储器写事务,FPGA接收到的事务包会拆分成两个,一个净荷长度为1,一个净荷长度为18。
问题:造成这个显现的原因是pcie作为RC端口时,存在这个拆包规则?还是说是由于处理器中采用DMA方式操作pcie的驱动为了方便DMA的操作进行的拆包。
读事务包同样存在这个问题。

哪位大神出来解惑一下呢...

这个可能原因是内部FIFO和RAM使用的是64bit,奇数位的访问不好处理,所以要拆包。


好像有点道理,在抓取的事务包中,只有两种事务包:
1. 净荷长度为1的事务包;
2. 净荷长度为偶数,起始地址也为偶数的事务包;
起始地址为奇数的事务包也会被拆分,拆成1长度事物包和偶数起始地址的事物包
这里的地址对应的数据位宽为:32bits
我测试的处理器是mpc8548

在AXI总线里我也经常见到类似的拆包行为,比如一次读16 bytes,如果地址是从0xc开始,那就分为两次,0xc size为1 byte的操作,0x10开始size为8bytes的操作。
对应的地址是32bits与这个没关系,你查看下代码,TLP层次的那个包数据位宽是不是64bit,或者用于RAM、FIFO是不是64bit,
话说回来,何必太纠结这个问题呢?这个是内部的处理机制,你作为应用层处理,作好相应的接收与发送即可,把任务完成就好。


只是想确认一下照成这个问题的原因。
TLP是64bit的,但是RC并不关心ep的TLP位宽啊,应该还是RC的FIFO或者RAM用的64bit。
也就是说如果RC的FIFO或者RAM用的32bit,就不会进行拆包了,对应64bit的TLP你就需要考虑地址的奇偶和长度的奇偶,和一些特殊处理,处理起来就相对麻烦一点了。

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

网站地图

Top