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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
EETOP诚邀模拟IC相关培训讲师 创芯人才网--重磅上线啦!
查看: 2170|回复: 2

[求助] PCIE TLP

[复制链接]
发表于 2021-11-10 10:13:30 | 显示全部楼层 |阅读模式

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

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

x
PCIe的Memory Read requst 是 Non-posted请求,该请求要求目标设备返回CPLD包(带有数据)。对于一个MRd 请求可能对应多个CPLD包,CPLD中的Tag对应相应的MRd请求。
那设备怎么知道我的Mrd请求的CPLD包全部返回了,tag自由可以再次利用了呢?
意思是我怎么知道我要的数据全部回来了,这个tag释放了?

如  MRd的tag 为1      对应有4个cpld包 ,其对应的tag为1

这个请求怎么知道会有四个cpld包,而且在接受了4个cpld包后就释放了 tag  = 1这个tag资源
发表于 2021-11-11 09:54:55 | 显示全部楼层
"这个请求怎么知道会有四个cpld包,而且在接受了4个cpld包后就释放了 tag  = 1这个tag资源"

首先,当你发出 MRd 请求时,你无法知道将返回多少个 CPLd TLP。 唯一的保证是
1)PCIe Root Port Complex 可以分解成 RCB(Root Completion Boundary),通常为 64B。
2)PCIe最大读取大小可以达到Max Read Req Size(通常为256B 但可以达到 4096B)。
3)数据终按地址递增顺序排列(并且在 Tag 内永远不会出现乱序)。

例如说 如果你从地址 32 读取 384B,
你可以获得 32,64,64,64,64,64,32 CPLd(共 7 个)
或者你可以获得 128, 256(共 2 个)。

这一切都取决于 CPU 的缓存中是否有数据以及是否必须从 DDR 内存中获取数据(以及数据的对齐)

"意思是我怎么知道我要的数据全部回来了,这个tag释放了?"

您可以通过将 CPLd Length 与 CPLd Byte Count 进行比较来检测 CPLd 中的最后一个数据包

所以如果你的字节数是 4 的倍数

CPLd is Last Packet = (Length == ByteCount >> 2)

所以如果你的字节数不是 4 的倍数

CPLd is Last Packet = Length == (((LowerAddress & 3) + ByteCount + 3) >> 2)

我强烈建议你阅读
1. http://xillybus.com/tutorials/pc ... er-tutorial-guide-1
2. http://xillybus.com/tutorials/pc ... er-tutorial-guide-2
3. http://www.xillybus.com/tutorial ... equests-completions
 楼主| 发表于 2021-12-28 13:47:43 | 显示全部楼层
非常感谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-11-23 04:46 , Processed in 0.016197 second(s), 7 queries , Gzip On, Redis On.

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