PCIe点对点通信

4

根据PCIe规范,两个独立设备(端点)可以在没有Root Complex参与的情况下进行通信,但是具体如何实现呢?

在内存和IO事务中,一个端点如何知道另一个端点的地址?

交换机如何在两个下游端口之间路由数据包?

谢谢并致以问候。


可以在软件中完成,CPU 可以扮演根复合器的角色。 - dtech
在这张图中,PCIe端点如何直接与另一个PCIe端点通信,而不需要将数据包路由到根复合物? - Ap.padole
http://electronics.stackexchange.com/questions/167154/can-two-pcie-endpoints-communicate-with-each-other-through-pcie-switch - Gil Hamilton
@GilHamilton,还不清楚一个端点如何获取另一个端点的地址。 - Ap.padole
我认为你必须通过在根复杂性后运行的软件来告知。我不知道你如何独立地发现另一个端点的地址范围。根复杂性负责枚举设备,设置逻辑总线层次结构并为每个端点分配地址范围,而将大多数事务路由到端点的唯一方法是通过地址范围。除了您自己(或下属)之外,您的端点将无法观察任何其他指派。 - Gil Hamilton
1个回答

5

是的,这是可能的。

正如您所说,内存写入事务需要收件人的“有效”地址和数据,而内存读取事务需要“有效”地址和数据“大小”,以创建写入或读取请求。

对于来自下游端口的请求,交换机通过与其“基址和限制”寄存器进行比较来负责路由到任何上游(根)或下游(点对点)。

交换机路由:

  1. 首先检查其自己的条上的地址,如果匹配,则会消耗。每个交换机都有两个条可用。

  2. 如果不匹配,则根据请求类型检查其IO/P-MMIO/NP-MMIO基址和限制寄存器对。

  3. 如果TLP前往上游端口并且与其基址和限制寄存器匹配,则在次要接口上处理为“不支持的请求”。(再次将其传递到下游端口,除了它接收到的那个端口之外,因为它可能是点对点通信)。

  4. 如果在任何接口上都没有匹配,则将其转发到其主要接口,因为它不符合桥梁和该桥梁以下的任何功能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接