高速串行技术(二)之(PCIe中的基本概念)
写在前面的话:
预备了前面的并行串行传输的基础知识,就是为了一个PCIe的项目,搞得头疼,一个例子都跑了一下,看到能够识别心里高兴了一把,但是打开代码一看 完全不懂 查找资料 很多 但是也很凌乱 比清晰,不适合小白(如我!!!!!) 下定决心 整理一下 参考两本书籍。《PCI_Express_Base_Specification_Revision》,《PCI Express System Architecture》。第一个文档是将PCIe设备,通信时包的格式,以及设备中的寄存器的含义和使用方法等,一本工具书而已啦(说的很轻巧,还是很有用的,毕竟是协议Specification),开发的时侯关于接口,包格式,寄存器问题是随时可以查阅的文档。第二个是非常有必要去读的一个文档,可以帮你大致了解,很快入门。
扫盲完毕 会做个实际的例程,仅供参考。。。。。。。。。。。。
一、PCIe的简介
1 、PCIe初识
电脑中的显卡 网卡 硬盘等、都是基于PCIe总线的,PCIe是一种串行通信协议, 是一种高速串行计算机扩展总线标准,它原来的名称为“3GIO”,是由英特尔在2001年提出的,旨在替代旧的PCI,PCI-X和AGP总线标准。 它属于高速串行点对点双通道高带宽传输,所连接的设备分配独享通道带宽,不共享总线带宽,主要支持主动电源管理,错误报告,端对端的可靠性传输,热插拔以及服务质量(QOS)等功能。
PCI Express 2.0规范的主要在数据传输速度上做出了重大升级,即从以前的2.5GT/s总线频率翻倍至5GT/s,这也就是说以前PCI Express 2.0 x16接口能够翻番达到惊人的8GB/s总线带宽(1GB/s=8Gbps)。
目前最新的版本为PCI-E 3.0,是生产中可用于主流个人电脑的扩展卡的最新标准。也有还未退市的PCI-E(即1.0版)。而在2009年的第二季度发布的AMD RD890芯片组将率先支持PCI-E 3.0版本。2.0比1.0带宽提高一倍,而3.0比2.0版带宽又提升一倍,为5GHz x 4。
正如上节所说,在低速情况下,并行结构的传输无疑是非常高效的传输方式,但是当传输速率非常高i的时候,并行传输的致命缺点暴露就很明显了,在这种高速的情形下,每一位在传输线到达目的地的时间不可能一致(类比PCB Layout要求等长,就是为了比如一个字节的为一位到达接收端的时间是一样的),那么怎么解决这种问题呢,用串行,因为串行传输是一位一位的进行传输的,不会出现并行传输所带类的不能同时到达的问题,这就是串行的优势,它可以在很高的频率下进行数据的传输,用高频率掩盖它的劣势。
PCIe是使用一对差分信号来传输每一位数据的,当D+比D-信号高,是传输的逻辑1,否则为0,当相同时,不工作(PCIe系统没有时钟线)
PCIe拓扑结构:
Switch部分:
在拓扑结构中,CPU连接到根聚合体(Root Complex),Root Complex(RC)负责完成从CPU总线域到外设域的转换,并且实现各种总线的聚合。将一部分CPU地址映射到内存,一部分地址映射到相应的设备终端(比如板卡)。
pcie设备有两大类,一种是root port,另一种Endpoint。从字面意思可以了解这两类的作用,root port相当于一个根节点,将多个endpoint设备连接在一个节点,同时它完成数据的路由。上图中的Switch就是一个root port设备。而endpoint就是最终数据的接受者,命令的执行者。
2 、PCIe设备的数据传输
这里我们就对pcie总线在计算机结构中的位置有一个大致的了解,下面我们对pcie数据的传输方式进行一个简单的介绍。pcie数据的传输方式类似于TCP/IP的方式,将数据按数据包的格式进行传输,同时对结构进行分层。
1、分层模型如下:
PCIe Device Layers分层模型(一)
PCIe Device Layers分层模型(二)
2 简单说下硬件(PCIe-Express Slot物理接口简介)
数据线(TXn,TXp;RXn,RXp),控制线(Wake#),电源和复位。介绍一下控制线和电源之间的关系,电源由两种电源都是3.3V(Vcc和Vaux),PCIe设备可以控制wake#信号可以唤醒(唤醒之前Vcc已经断电,Vaux仍然有点,这样也保证了PCIe设备中必要的寄存器和特殊的寄存器可以操作的基础),当某个设备需要被唤醒时,该设备首先将wake#信号置位,然后经过一段延时,处理器开始供电Vcc,并使用RESET#信号对设备进行复位操作。****此时wake#信号始终保持为低,当Vcc上电完成后,RESET#信号置为无效(高)结束复位,wake#信号也随之为无效(高),结束整个唤醒过程。****一般情况下,wake#悬空或者上拉。
3 、通信
PCIE的设备都具有这几个结构,每个结构的作用不同。我们首先说明数据传输时候的流程,PCIE协议传输数据是以数据包的形式传输。
首先说明在发送端,设备核或者应用软件产生数据信息,交由PCI Express Core Logic Interface将数据格式转换TL层可以接受的格式,TL层产生相应的数据包。然后数据包被存储在缓冲buffer中,准备传输给下一层数据链层(Data Link Layer)。数据链层将上一层传来的数据包添加一些额外的数据用来给接收端进行一些必要的数据正确性检查。然后物理层将数据包编码,通过多条链路使用模拟信号进行传输。
在接收端,接收端设备在物理层解码传输的数据,并将数据传输至上一层数据链层,数据链层将入站数据包进行正确性检查,如果没有错误就将数据传输至TL层,TL层将数据包缓冲buffer,之后PCI Express Core Logic Interface将数据包转换成设备核或者软件能够处理的数据。
我们使用IP核进行开发时,这三个层都已经写好了。所以我们的主要的任务,记住我们的任务是什么 记住啦记住啦 啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦就是写出中PCI Express Core Logic Interface,从他的字面我们就可以明白他的作用,就是一个接口**,将数据从Device Core输出的数据格式转换IP核TL层接受的数据格式。(参见分层模型一)
解释几个名词
PCIe总线的层次组成结构与网络中的层次结构有类似之处,但是PCIe总线的各个层次都是使用硬件逻辑实现的。在PCIe体系结构中,数据报文首先在设备的核心层(Device Core)中产生,然后再经过该设备的事务层(Transaction Layer)、数据链路层(Data Link Layer)和物理层(Physical Layer),最终发送出去。而接收端的数据也需要通过物理层、数据链路和事务层,并最终到达Device Core。
1 事务层
事务层定义了PCIe总线使用总线事务,其中多数总线事务与PCI总线兼容。这些总线事务可以通过Switch等设备传送到其他PCIe设备或者RC。RC也可以使用这些总线事务访问PCIe设备。
事务层接收来自PCIe设备核心层的数据,并将其封装为TLP(Transaction Layer Packet)后,发向数据链路层。此外事务层还可以从数据链路层中接收数据报文,然后转发至PCIe设备的核心层。
事务层的一个重要工作是处理PCIe总线的“序”。在PCIe总线中,“序”的概念非常重要,也较难理解。在PCIe总线中,事务层传递报文时可以乱序,这为PCIe设备的设计制造了不小的麻烦。事务层还使用流量控制机制保证PCIe链路的使用效率。
2 数据链路层
数据链路层保证来自发送端事务层的报文可以可靠、完整地发送到接收端的数据链路层。来自事务层的报文在通过数据链路层时,将被添加Sequence Number前缀和CRC后缀。数据链路层使用ACK/NAK协议保证报文的可靠传递。
PCIe总线的数据链路层还定义了多种DLLP(Data Link Layer Packet),DLLP产生于数据链路层,终止于数据链路层。值得注意的是,TLP与DLLP并不相同,DLLP并不是由TLP加上Sequence Number前缀和CRC后缀组成的。
3 物理层
物理层是PCIe总线的最底层,将PCIe设备连接在一起。PCIe总线的物理电气特性决定了PCIe链路只能使用端到端的连接方式。PCIe总线的物理层为PCIe设备间的数据通信提供传送介质,为数据传送提供可靠的物理环境。
物理层是PCIe体系结构最重要,也是最难以实现的组成部分。PCIe总线的物理层定义了LTSSM(Link Training and Status State Machine)状态机,PCIe链路使用该状态机管理链路状态,并进行链路训练、链路恢复和电源管理。
PCIe总线的物理层还定义了一些专门的“序列”,有的书籍将物理层这些“序列”称为PLP(Phsical Layer Packer),这些序列用于同步PCIe链路,并进行链路管理。值得注意的是PCIe设备发送PLP与发送TLP的过程有所不同。对于系统软件而言,物理层几乎不可见,但是系统程序员仍有必要较为深入地理解物理层的工作原理。
以上只是增进了解,一笔带过 接下来来电
先贴个图吧
在TLP包传输的过程中会发生数据包的组装和拆解。
TLP包的组装
当数据从软件层或者设备核传来之后,TL层添加ECRC,
在DLL层在前段添加序列数字,在后面添加DLL(Data Link Layer)层的CRC,
在物理层添加帧头和帧未。
事务包TLP的拆解是个反过程
好了上面分别介绍了PCIe基础知识(包括差分信号的传输),分层模型和数据传输。后面的工作主要进行应用软件的开发(应用层)/(或者Device core)
下面介绍Xilnx PCIe IP核,在介绍的同时会对本节的知识做个回顾及深入(稍微深入哈)的了解与应用。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。待续