找回密码
 立即注册

QQ登录

只需一步,快速开始

PCIe扫盲——PCIe总线事务层入门(一)

0
回复
1410
查看
[复制链接]

52

主题

58

帖子

1101

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1101

最佳新人活跃会员热心会员推广达人宣传达人灌水之王突出贡献优秀版主论坛元老

来源: 2020-4-19 10:06:24 显示全部楼层 |阅读模式
在介绍事务层之前,首先简单地了解一下PCIe总线的通信机制。假设某个设备要对另一个设备进行读取数据的操作,首先这个设备(称之为Requester)需要向另一个设备发送一个Request,然后另一个设备(称之为Completer)通过Completion Packet返回数据或者错误信息。在PCIe Spec中,规定了四种类型的请求(Request):Memory、IO、Configuration和Messages。其中,前三种都是从PCI/PCI-X总线中继承过来的,第四种Messages是PCIe新增加的类型。详细的信息如下表所示:
从表中我们可以发现,只有Memory Write和Message是Posted类型的,其他的都是Non-Posted类型的。所谓Non-posted,就是Requester发送了一个包含Request的包之后,必须要得到一个包含Completion的包的应答,这次传输才算结束,否则会进行等待。所谓Posted,就是Requester的请求并不需要Completer通过发送包含Completion的包进行应答,当然也就不需要进行等待了。很显然,Posted类型的操作对总线的利用率(效率)要远高于Non-Posted型。
那么为什么要分为Non-Posted和Posted两种类型呢?对于Memory Writes来说,对效率要求较高,因此采用了Posted的方式。但是这并不意味着Posted类型的操作完全不需要Completer进行应答,Completer仍然可采用另一种应答机制——Ack/Nak的机制(在数据链路层实现的)。
PCIe的TLP包共有一下几种类型:
TLP传输的示意图如下图所示:
TLP在整个PCIe包结构的位置如以下两张图所示:(第一张为发送端,第二张为接收端)


其中,TLP包的结构图如下图所示:
图中的TLP Digest即ECRC(End-to-End CRC),是可选项。此外,TLP的长度(包括其中的Header、Data和ECRC)是以DW(双字,即四个字节)为单位的。

您需要登录后才可以回帖 登录 | 立即注册
关闭

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

商业洽谈 文章投递 寻求报道
电话咨询: 173xxxxxxx
关注微信