Address Routing
回顾一下,PCIe的设备有三种资源(ID、Memory、IO),前一篇讲了ID路由,本文我们讨论地址路由(Address Routing),即按照后两种资源(Memory和IO)的地址进行路由。
类似于网络OSI七层模型,PCIe协议架构上可以分为三个逻辑层次:事务层(Transaction Layer,)、数据链路层(Data Link Layer)和物理层(Physical Layer)。每一层都分为两个部分: 发送和接收,或者称之为outbound和inbound。Device Core是指这个PCIe设备具体功能的实现,比如以太网、显示、加密、HBA等等。
回顾一下,PCIe的设备有三种资源(ID、Memory、IO),前一篇讲了ID路由,本文我们讨论地址路由(Address Routing),即按照后两种资源(Memory和IO)的地址进行路由。
路由是指一个数据包(也叫报文)从源端经过各种路径,最终到达目的端的过程。这必然要求知道整条路径怎么走,那么,PCIe上的寻路方法有哪些呢?
ID、IO、Memory三种基本资源是PCIe设备的工作基础。在系统启动时,BIOS会给各个PCIe设备分配如上三种资源,这个过程就是我们常说的枚举(Enumeration)。
在一个系统中,除了CPU,还有大量的外部设备,这些设备通过各种总线连接,包括我们主要讲的PCIe。而每个外设都是通过读写其寄存器来控制使用,寄存器也称为I/O端口。
ID资源是一个PCIe设备的最基本资源,每一个ID号都是独一无二的。分析ID资源前,我们需要先了解Function(功能)的概念。对于一个PCIe设备,如果它只具有一个功能,我们称之为Single FunctionDevice;如果它有多个功能,则称之为Multi Function Device。
前面讲了树,理清了PCIe架构的大概框架;讲了链路,知道了框架中的路径。而对于树上的树叶/果实,即最终的PCIe设备,它们在系统中是是怎样存在的?
上上篇讲了8/10b编码,有朋友问我能否再稍微介绍一下编码的过程。这里把关键流程罗列一下。
事实上,关于带宽计算,看起来很简单,实际上很容易弄错,即使算对了其中的几个基本概念还是容易搞混淆。这里特别梳理一下
PCIe是采用差分信号传输的,而差分信号电气规范要求其发送端串接一个电容CTX,以进行AC耦合。该电容也被称为AC耦合电容。
Link的速率在初始化以后确定,所有lane的信号速率一样。如PCIe 3.0情况下,每条lane每秒每个方向都提供8G的带宽。假设是X4的Link,则链路每个方向的带宽为32GT/s(8.0X4)。