在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2823|回复: 5

[讨论] pcie访问时事务包的拆分

[复制链接]
发表于 2013-12-23 14:16:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

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

读事务包同样存在这个问题。
 楼主| 发表于 2013-12-23 15:13:49 | 显示全部楼层
哪位大神出来解惑一下呢...
发表于 2013-12-24 10:26:40 | 显示全部楼层
这个可能原因是内部FIFO和RAM使用的是64bit,奇数位的访问不好处理,所以要拆包。
 楼主| 发表于 2013-12-24 13:21:29 | 显示全部楼层
回复 3# eaglelsb
好像有点道理,在抓取的事务包中,只有两种事务包:
1. 净荷长度为1的事务包;
2. 净荷长度为偶数,起始地址也为偶数的事务包;
起始地址为奇数的事务包也会被拆分,拆成1长度事物包和偶数起始地址的事物包

这里的地址对应的数据位宽为:32bits
我测试的处理器是mpc8548
发表于 2013-12-25 10:41:38 | 显示全部楼层
在AXI总线里我也经常见到类似的拆包行为,比如一次读16 bytes,如果地址是从0xc开始,那就分为两次,0xc size为1 byte的操作,0x10开始size为8bytes的操作。

对应的地址是32bits与这个没关系,你查看下代码,TLP层次的那个包数据位宽是不是64bit,或者用于RAM、FIFO是不是64bit,

话说回来,何必太纠结这个问题呢?这个是内部的处理机制,你作为应用层处理,作好相应的接收与发送即可,把任务完成就好。
 楼主| 发表于 2013-12-26 09:22:56 | 显示全部楼层
回复 5# eaglelsb
只是想确认一下照成这个问题的原因。
TLP是64bit的,但是RC并不关心ep的TLP位宽啊,应该还是RC的FIFO或者RAM用的64bit。
也就是说如果RC的FIFO或者RAM用的32bit,就不会进行拆包了,对应64bit的TLP你就需要考虑地址的奇偶和长度的奇偶,和一些特殊处理,处理起来就相对麻烦一点了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

X

小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-6-22 18:59 , Processed in 0.026077 second(s), 9 queries , Gzip On, MemCached On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表