TLP Format
今天我们来看一看Transaction Layer的TLP报文的具体组成。回顾一下前面我们讲到的Transaction Layer的报文。分为三个部分:Header、Data和ECRC。
今天我们来看一看Transaction Layer的TLP报文的具体组成。回顾一下前面我们讲到的Transaction Layer的报文。分为三个部分:Header、Data和ECRC。
昨天我们讲了PCIe系统里的报文顺序规则,其实在整条报文的传递路径上,对于报文顺序影响最大的就是PCIe Switch(再回忆一下,PCIe Switch内部可以看作是多个PCI-PCI的桥组成的)。事实上,PCI系统里的顺序规则主要就是针对PCI桥的。
前面我们学习了PCIe系统中的几种类型的事务,在一个系统中,时刻都有海量的不同类型的事务。如何安排这些事务有序合理的通过总线?访问设备? 谁先谁后?这就是我们要说的“序”。
与Posted事务的关键差异是,Non-Posted 事务的发起者是需要收到从目标设备返回的完成报文后,事务才算结束。如果目标设备由于某种原因并未返回完成,那将会导致发起者接收完成超时CO(Completion Timeout)。Configuration read and write, IO read and write, and Memory read都属于Non-Posted事务。
我们开始讨论一下有关于PCIe错误相关的内容。每种协议都有各自定义的错误。每种硬件也会有各种错误。从某种意义上来说,开发人员存在的价值不仅在于实现各种协议的实现,更多的是去解决这些千奇百怪的错误。错误的相关内容包括:错误分类、错误检测、错误记录、错误通知、错误报告、错误处理等等。
在学习Non-Posted Transaction之前,我们首先来了解一下什么是Completion(完成)。
所谓Posted Transaction,意思是指当数据发送到接收端的设备后,当前事务就完成了,发起事务的Requester就可以继续做下一件事了。因此,Posted Transaction不会导致Requester hang住。
Transaction Layer是三层模型里最上的一层,我们从这层开始学习。
类似于网络OSI七层模型,PCIe协议架构上可以分为三个逻辑层次:事务层(Transaction Layer,)、数据链路层(Data Link Layer)和物理层(Physical Layer)。
既然有了前面我们讲的基于三种资源(ID、Memory、IO)的两种路由方式ID路由和地址路由,为什么还要有个隐式路由(Implicit Routing,也叫模糊路由)呢?