别人的域名解析到了我的网站上,福田欧辉官网,珠海柏泰教育官方网站建设,百度如何推广网站接前一篇文章#xff1a;《PCI Express体系结构导读》随记 —— 第I篇 第3章 PCI总线的数据交换#xff08;4#xff09; 3.2 PCI设备的数据传递
PCI设备的数据传递使用地址译码方式#xff0c;当一个存储器读写总线事务到达PCI总线时#xff0c;在这条总线上的所有PCI设…接前一篇文章《PCI Express体系结构导读》随记 —— 第I篇 第3章 PCI总线的数据交换4 3.2 PCI设备的数据传递
PCI设备的数据传递使用地址译码方式当一个存储器读写总线事务到达PCI总线时在这条总线上的所有PCI设备将进行地址译码如果当前总线事务使用的地址在某个PCI设备的BAR空间中时该PCI设备将使能DEVSEL#信号认领这个总线事务。
如果PCI总线上的所有设备都不能通过地址译码认领这个总线事务则这条总线的“负向译码”设备将认领这个总线事务如果在这条PCI总线上没有“负向译码”设备该总线事务的发起者将使用Master Abort总线周期结束当前PCI总线事务。
3.2.1 PCI设备的正向译码与负向译码
PCI桥使用的正向译码方式与PCI设备使用的正向译码方式有所不同。如图3-4所示当一个总线事务是从PCI桥的Primary Bus到Secondary Bus时PCI桥使用的正向译码方式与PCI设备使用的方式类似。如果该总线事务使用的地址在PCI桥任意一个Memory Base窗口PCI桥除了具有Memory Base窗口外还有I/O Base窗口和Prefetchable Memory Base窗口命中时该PCI桥将使用正向译码方式接收该总线事务并根据实际情况决定是否将这个总线事务转发到Secondary Bus。 当一个总线事务是从PCI桥的Secondary Bus到Primary Bus时如果该总线事务使用的地址没有在PCI桥所有的Memory Base窗口命中时表明当前总线事务不是访问该PCI桥管理的PCI子树中的设备因此PCI桥将接收当前总线事务并根据实际情况决定是否将这个总线事务转发到Primary Bus。
仍以图3-2为例 当PCI设备11访问主存储器空间时首先将存储器读写总线事务发送到PCI总线1上而这个存储器地址显然不会在PCI总线1的任何PCI设备的BAR空间中此时PCI桥1将认领这个PCI总线的数据请求并将这个总线事务转发到PCI总线0上。最后HOST主桥将接收这个总线事务并将PCI总线地址转换为存储器域的地址与主存储器进行读写操作。
值得注意的是PCI总线并没有规定HOST主桥使用正向还是负向译码方式接收这个存储器读写总线事务但是绝大多数HOST主桥使用正向译码方式接收来自下游的存储器读写总线事务。在PowerPC处理器中如果当前存储器读写总线事务使用的地址在Inbound窗口内时HOST主桥将接收这个总线事务并将其转换为存储器域的读写总线事务与主存储器进行数据交换。 3.2.2 处理器到PCI设备的数据传送
下文以图3-2所示的处理器系统为例说明处理器向PCI设备11进行存储器写的数据传送过程。处理器向PCI设备进行读过程与写过程略有区别因为存储器写使用Posted方式而存储器读使用Non-Posted方式但是存储器读使用的地址译码方式与存储器写类似因此本节对处理器向PCI设备进行存储器读的过程不做进一步介绍。 PCI设备11在PCI总线域的地址范围是0x73000000~0x73FFFFFF。这段空间在存储器域中对应的地址范围是0xF3000000~0xF3FFFFFF。下文我们假设处理器使用存储器写指令访问0xF300-0008这个存储器地址其步骤如下
1存储器域将0xF3000008这个地址发向HOST主桥0xF0000000~0xF7FFFFFF这段地址已经由HOST主桥映射到PCI总线域地址空间所以HOST主桥认为这是一个对PCI设备的访问。因此HOST主桥将首先接管这个存储器写请求
2HOST主桥将存储器域的地址0xF3000008转换为PCI总线域的地址0x73000008并通过总线仲裁获得PCI总线0的使用权启动PCI存储器写周期并将这个存储器写总线事务发送到PCI总线0上。值得注意的是这个存储器读写总线事务使用的地址为0x73000008而不是0xF3000008
3PCI总线0的PCI桥1发现0x73000008在自己管理的地址范围内于是接管这个存储器写请求并通过总线仲裁逻辑获得PCI总线1的使用权并将这个请求转发到PCI总线1上
4PCI总线1的PCI设备11发现0x73000008在自己的BAR0寄存器中命中于是接收这个PCI写请求并完成存储器写总线事务。 至此“3.2.2 处理器到PCI设备的数据传送”就全部讲解完了。