了解PCI Express的Posted传输与Non-Posted传输

0.写在前面

本文首发于公众号【两猿社】,后续将在公众号内持续更新~

其实算下来接触PCIe很久了,但是由于之前换工作,一直没有系统的学习和练手项目,现在新项目买了Synopsys的PCIe IP,总算是有机会和时间来整理学习了~~~

目前PCI Express总线取代PCI总线成为PC局部总线的主流,且PCIe在很大程度上继承了PCI的设计思想,可以说PCI是PCIe的基础,本文所重点讲解的Posted和Non-Posted传输也是基于PCI总线讲解,但在PCIe总线中绝大部分是相同的,PCI中的HOST主桥可以看做RC,PCI桥可以看做Switch,PCI设备即EP。

1.简介

基于PCI总线的处理器系统

PCI规定了两种数据传输方式,分别是Posted传输Non-posted传输,也叫做Posted事务和Non-Posted事务。在PCIe数据传输中同样也使用这两种方式,但在PCI总线中,Non-Posted传输可以使用Delayed方式完成,而在PCIe总线中所有的 Non-Posted传输都使用Split方式完成,不再使用Delayed方式。

1.Posted传输

Posted总线事务是指PCI主设备向目标设备进行数据传输时,数据到达PCI桥后,由PCI桥接管来自上游总线的总线事务,并将其转发到下游总线,此时上游总线可释放。

使用这种数据传输方式,数据请求在通过PCI总线后,就可以逐级释放总线资源。

下面以DMA写操作为例,说明PCI的Posted传输(DMA操作即PCI设备主动对系统存储器进行操作)。

PCI设备11向主存储器写数据:


DMA写(Posted传输)
  1. 首先PC设备11将主存储器写请求发向PCI总线x1,注意这个写请求使用的地址是PCI总线域的地址。
  1. PCI总线x1上的所有设备监听这个请求,因为PCI设备11是向处理器的存储器写数据,所以PCI总线x1上的 PCI Agent都不会接收这个数据请求。
  1. PCI桥x1发现当前总线事务使用的PCI总线地址不是其下游设备使用的PCI总线地址,则接收这个请求,并结束来自PCI设备11的 Posted存储器写请求,将这个数据请求推到上游PCI总线上,即PCI总线x0。
  1. PCI总线x0上的所有设备包括HOST主桥将监听这个请求,PCI总线x0上的PCI设备也不会接收这个请求,此时这个数据请求由HOST主桥x接收,并结束PCI桥x1的Posted存储器写请求。
  1. HOST主桥x发现这个数据请求发向存储器,则将来自PCI总线x0的PCI总线地址转换为存储器域地址,通过存储器控制器将数据写入存储器,完成PCI设备11的DMA写操作(没有完成报文)。

2.Non-Posted传输

Non-Posted总线事务是指PCI主设备向目标设备进行数据传输时,数据必须到达最终目的地后才能结束当前事务总线的传输方式。

PCI总线在没有结束当前总线事务时必须等待传输完成,不会释放总线资源。这种等待将严重阻塞当前的PCI总线的其他数据传送。因此在PCI总线中使用Delayed方式完成Non-Posted,在PCIe总线中使用Split方式完成 Non-Posted总线事务。

PCI设备进行DMA读与DMA写过程类似,不过存储器读总线事务是使用Non-Posted总线事务。

PCI设备11向主存储器读数据:


DMA读(Non-Posted传输)
  1. 首先PCI设备11将存储器读请求发向PCI总线x1。
  1. PCI总线x1上的所有设备监听这个请求,因为PCI设备11是从存储器中读取数据,所以PCI总线x1上的设备不会接收这个请求。PCI桥x1发现下游PCI总线没有设备接收,则接收这个数据请求,并将它推到上游PCI总线上,即PCI总线x0上。
  1. PCI总线x0上的设备监听这个请求,也不会接受这个数据请求,最后这个数据请求被HOST主桥x接收。
  1. HOST主桥发现这个数据请求是发向主存储器的,则将PCI总线x0的PCI总线地址转为存储器地址,之后通过控制器将数据读出,带着读完成信息转发到HOST主桥x。
  1. HOST主桥x将这个带数据的读完成事务经由PCI桥x1传递到PCI设备11,设备11接收到这个数据后结束DMA读(有完成报文)。

在上述Non-Posted总线事务中,只有读完成依次通过PCI总线x1和x0后,存储器读总线事务才不继续占用PCI总线x1和x0的资源。可以发现这种传输并不合理,PCI总线为了解决这个总线拥塞问题,使用Delayed传输方式。

3.Split传输方式

在PCIe总线中,有以下几种传输:存储器读写、I/O读写和配置读写请求TLP,这些TLP由以下几类报文组成。

  • 存储器读请求TLP和读完成TLP

  • 存储器写请求TLP

  • 原子操作请求和完成报文

  • I/O读写请求TLP和读写完成TLP

  • 配置读写请求TLP和配置读写完成TLP

  • 消息报文(Messages)

以上几种类型中,除存储器写请求使用Posted总线事务外,其余的传输类型都使用Non-Posted总线事务,上面提到Non-Posted总线事务在PCI和PCIe中会转换为Delayed事务和Split事务进行。

PCI总线的Delayed传输使用Retry的方式进行,这里不再讲解,重点对PCIe总线中的Split总线事务进行讲解。

Split总线事务替代了PCI总线的Delayed数据传输方式,提高了Non-Posted总线事务的传输效率。Split总线事务是在PCI-X中提出,而PCIe也继承了这种传输方式。

下面以PCI-X中的Split传输为例。

PCI-X在进行存储器读总线事务时,总线事务的发起方(Requester)使用Split总线事务与总线事务的接收端(Completer)进行数据交换,步骤如下:

  1. Requester向 Completer发起存储器读请求总线事务;
  1. 这个请求事务在到达 Completer之前,可能会经过多级PCI桥。这些PCI桥使用 Split response周期结束当前总线事务,释放上游PC总线,之后继续转发这个存储器读请求,直到 Completer认领这个存储器读请求事务。
  1. completer认领存储器读请求总线事务后,会记录 Requester的D号,并使用 Split Response 周期结束存储器读请求总线事务。
  1. Completer准备好数据后,将重新申请总线,并使用存储器读完成总线事务主动将数据传送给 Requester。在这个报文中包含 Requester的号(完成报文使用的是ID路由)。
  1. 这些完成报文根据ID路由方式,最终到达 Requester。 Requester从完成报文中接收数据并完成整个存储器读请求。

Split传输可以看成是将请求和完成分开,分别使用Posted方式进行的传输。

Posted与Non-Posted总线事务是PCIe的基础,PCI Express相关知识总结会持续更新哦,有需要的关注公众号的后续文章,咱们一起学习~~

关注公众号【两猿社】,回复【PCIE】获取PCI-SIG原版PCI Express标准2.0~4.0

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,509评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,806评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,875评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,441评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,488评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,365评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,190评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,062评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,500评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,706评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,834评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,559评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,167评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,779评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,912评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,958评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,779评论 2 354

推荐阅读更多精彩内容