您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 存储随笔《PCIe科普教程》
微信公众号【存储随笔】荣誉出品《PCIe科普教程》2017.6PCIe科普教程古猫著更多精彩内容,敬请关注微信公众号存储随笔,ID:Memory-logger2/81目录1.0PCIe概述_______________________________________________________42.0Transactionlayer事务层概述____________________________________72.1TLP的前世今生__________________________________________________92.2TLP事务处理方式_______________________________________________122.3TLP结构解析___________________________________________________162.4FlowControl机制概述__________________________________________212.5FlowControl缓存架构及信用积分________________________________222.6FlowControl初始化____________________________________________232.7FlowControl的实现过程________________________________________282.8事务排序机制___________________________________________________323.0数据链路层概述_________________________________________________353.1数据链路层DLLP结构及类型______________________________________363.2数据链路层Ack/Nak机制_________________________________________404.0物理层结构解析_________________________________________________544.1物理层数据流解析_______________________________________________595.0PCIe总线电源管理______________________________________________656.0PCIe系统复位方式______________________________________________727.0PCIe热插拔____________________________________________________78更多精彩内容,敬请关注微信公众号存储随笔,ID:Memory-logger3/81微信公众号平台:PCIe专题文章列表(点击即可跳转)PCIe系列专题之一:PCIe技术概述PCIe系列专题之二:2.0Transactionlayer事务层概述PCIe系列专题之二:2.1TLP的前世今生PCIe系列专题之二:2.2TLP事务处理方式解析PCIe系列专题之二:2.3TLP结构解析PCIe系列专题之二:2.4FlowControl机制概述PCIe系列专题之二:2.5FlowControl缓存架构及信用积分PCIe系列专题之二:2.6FlowControl初始化PCIe系列专题之二:2.7FlowControl的实现过程PCIe系列专题之二:2.8事务排序机制PCIe系列专题之三:3.0数据链路层概述PCIe系列专题之三:3.1数据链路层DLLP结构及类型PCIe系列专题之三:3.2数据链路层Ack/Nak机制解析PCIe系列专题之四:4.0物理层结构解析PCIe系列专题之四:4.1物理层数据流解析PCIe系列专题之五:PCIe总线电源管理PCIe系列专题之六:PCIe系统复位方式PCIe系列专题之七:PCIe热插拔更多精彩内容,敬请关注微信公众号存储随笔,ID:Memory-logger4/811.0PCIe概述SSD的协议标准除了SATA,还有一个更先进的协议标准,就是PCIe。PCIe总线使用了高速差分总线,并采用了端到端的连接方式。两个设备之间的的传输通道,称为Link,由1,2,4,8,16,32个Lane组成。Lane的数目代表Link的传输宽度(x1,x2,x4,x8,x16,x32)。Lane又是何方神圣呢?Lane是发送端与接收端之间的一个传输回路。由两组差分信号组成。如下图,扩展:PCIe链路使用差分信号进行数据传送,一个差分信号由D+和D-两根信号组成,信号接收端通过比较这两个信号的差值,判断发送端发送的是逻辑“1”还是逻辑“0”。与单端信号相比,差分信号抗干扰的能力更强,能有效抑制电磁干扰EMI(ElectroMagneticInterference)。更多精彩内容,敬请关注微信公众号存储随笔,ID:Memory-logger5/81目前正式发布的最新是仍是第三代PCIe技术。不过,第四代PCIe协议预计在今年6月会的PCIe开发者大会上正式发布,相信很快也会跟大家见面了。我们这里就先列出PCIeGen1/2/3的传输速率对比如下表:这里需要提一下:Gen1/Gen2采用是8b/10b的编码,而Gen3则采用的是128b/130b的编码。PCIe总线物理链路间的数据传送使用基于时钟的同步传送机制,但是在物理链路上并没有时钟线,PCIe总线的接收端含通过PLL锁相环从接收报文中提取接收时钟,从而进行同步数据传递。PCIe是一种封装分层协议,主要包括事务层(Transactionlayer),数据链路层(Datalinklayer)和物理层(Physicallayer)。在PCIe体系结构中,数据报文首先在设备的核心层(DeviceCore)中产生,然后再经过该设备的事务层(TransactionLayer)、数据链路层(DataLinkLayer)和物理层(PhysicalLayer),最终发送出去。而接收端的数据也需要通过物理层、数据链路和事务层,并最终到达DeviceCore。更多精彩内容,敬请关注微信公众号存储随笔,ID:Memory-logger6/81在一条PCIe链路中,这两个端口是完全对等的,分别连接发送与接收设备,而且一个PCIe链路的一端只能连接一个发送设备或者接收设备。因此PCIe链路必须使用Switch扩展PCIe链路后,才能连接多个设备。更多精彩内容,敬请关注微信公众号存储随笔,ID:Memory-logger7/812.0Transactionlayer事务层概述在PCIe体系结构中,数据报文首先在设备的核心层(DeviceCore)中产生,然后再经过该设备的事务层(TransactionLayer)、数据链路层(DataLinkLayer)和物理层(PhysicalLayer),最终发送出去。而接收端的数据也需要通过物理层、数据链路和事务层,并最终到达DeviceCore。事务层的主要职责可以概述为:事务层是PCIe总线层次结构的最高层,该层次将接收PCIe设备核心层的数据请求,并将其转换为PCIe总线事务,PCIe总线使用的这些总线事务在TLP头中定义。PCIe总线继承了PCI/PCI-X总线的大多数总线事务,如存储器读写(MemoryRead/Write)、I/O读写、配置读写总线事务,并增加了Message总线事务和原子操作等总线事务。更多精彩内容,敬请关注微信公众号存储随笔,ID:Memory-logger8/81扩展:PCIe中有两大类总线事务:Non-Posted和Posted:a,Non-Posted:需要completion返回响应包;b,Posted:不需要completion返回响应包.在PCIe总线中,Non-Posted总线事务分两部分进行,首先是发送端向接收端提交总线读写请求,之后接收端再向发送端发送完成(Completion)报文。PCIe总线使用Split传送方式处理所有Non-Posted总线事务,存储器读、I/O读写和配置读写这些Non-Posted总线事务都使用Split传送方式。PCIe的事务层还支持流量控制(Flowcontrol)和虚通路管理(VirtualChannelManagement)等一系列特性,而PCI总线并不支持这些新的特性。在PCIe总线中,不同的总线事务采用的路由方式不相同。PCIe总线使用的数据报文首先在事务层中形成,这个数据报文也被称之为事务层数据报文,即TLP,TLP在经过数据链路层时被加上SequenceNumber前缀和CRC后缀,然后发向物理层。更多精彩内容,敬请关注微信公众号存储随笔,ID:Memory-logger9/812.1TLP的前世今生PCIe总线使用的数据报文首先在事务层中形成,这个数据报文也被称之为事务层数据报文,即TLP(TransactionLayerPacket),TLP在经过数据链路层时被加上SequenceNumber前缀和CRC后缀,然后发向物理层。生活中,有时,我们会陷入一个哲学性的思考:我们来自哪里,终归何方?同样,TLP也有这个命题的解答。TLP来自发送设备的事务层,历经“磨难”,终归接收端的事务层。那么,在TLP传递的过程中到底经历哪些“磨难”呢?请看下图~更多精彩内容,敬请关注微信公众号存储随笔,ID:Memory-logger10/81我们逐层解析一下这些“磨难”:1.发送端DeviceCore发送事务请求:数据读写,完成反馈(Completions),信息(Message)等;2.事务层根据DeviceCore的请求,生成TLPHeader,加上DeviceCore提供的data,最后加上ECRC(EndtoEndCRC)。此时TLP会放入事务层缓存(VirtualChannelBuffer)之中;3.当TLP传递至数据链路层时,会被加上SqueezeNumber以及LCRC(LinkCRC)。此时,生成加强版TLP,并放入数据链路层的Retrybuffer;4.当TLP传至物理层时,被加上头和尾,到这里,TLP在发送端就组装完毕咯;更多精彩内容,敬请关注微信公众号存储随笔,ID:Memory-logger11/815.在接收端就跟发送端做的事情相反了,在物理层需要掐头去尾,然后传输至数据链路层;6.数据链路层收到传入的TLP后,通过计算LCRC验证传输是否正确,正确的话就去掉SequenceNumber和LCRC,将TLP传输至事务层;7.事务层接收到TLP之后,解析其内容,并将信息传给接收端DeviceCore,至此,发送端传过来的组装TLP已拆解完毕。更多精彩内容,敬请关注微信公众号存储随笔,ID:Memory-logger12/812.2TLP事务处理方式看过前面TLP的前世今生精彩大剧之后,想必大家应该都知道TLP(TransactionLayerPacket)在事务层的角色。如果不知道,就默默翻一下前面的文章哈~TLP很重要,也有很多种类。我们先来个全局的认识,看看PCIe到底定义了多少TLP种类呢?瞅下面的表格~这么多TLP啊,每个都是什么含义,到底是干什么的呢?不急,我们慢慢的揭开他们神秘的面纱~之前的介绍中,我们提到过PCIe中总线事务有两大类:Non-Posted和Posted:(1)Non-Posted:需要completion返回响应包;(2)Posted:不需要completion返回响应包更多精彩内容,敬请关注微信公众号存储随笔,ID:Memory-logger13/81注:MemoryReadLock只适用在兼容PCI/PCI-X的陈旧设备中,在这里就先忽略了。我们先从Non-Posted和Posted阵营中的各挑选一些代表介绍一下TLP事务的具体作用。Non-PostedMemoryRead:步骤
本文标题:存储随笔《PCIe科普教程》
链接地址:https://www.777doc.com/doc-4289181 .html