PCIe的事务传输层的处理(TLP)
主要从以下几个方面解决:
1.TLP基本的概念:
2.寻址定位与路由导向
3.请求和响应机制
4.虚拟通道机制
5.数据完整性
6.i/o,memory,configuration,message request、completion
1.
上文提到,传输层transaction Layer specification是用来接受请求和发送响应的,有四种地址空间,三种处理类型:
- 一类是对IO和memary操作的读写包,其中memary读请求包和响应包,写请求包,写不需要响应包,,IO的读写都需要请求和响应包。
- 一类是对配置寄存器操作的读写包,读写都请求和响应包,其中的请求包按属性分为NP-non posted和posted(不需要响应和需要响应)
- 数据包,用于描述通信状态并且把状态作为事件信号告知用户。
每个类型的包都有包头(TLP header),有效数据负荷(Data Payload),以及开销块(Tlp Digest)。
有数据的TLP包的传递规则是:按照指定DW长度单位传递数据,发送端的数据承载量不得超过“Device Control Register”中的“Max_Payload_Size”数值,接收端中,所接收到的数据量也不能超过接收端“Device Control Register”中的“Max_Payload_Size”数值。TLp Digest域是32位的ECRC校验。
对于包头,具体的 组成部分
2
寻址定位和路由导向:
三种寻址方式:地址路由(address)、ID识别路由、间接路由(implicit)
- 地址寻址主要用于IO和memary的请求包寻址,对于memary而言,读写请求包支持的地址位是64位(TLP header是4DW)也可以是32位(TLP header是3DW),而IO的只支持32位。
- ID寻址主要用于confignation请求包,部分message包,响应包,ID包括Bus number、Divce number、function number为TLP定位目标接收器。ID寻址的TLP包头长度也有4DW和3DW两种,ID在TLP中位置见下图
处理层描述符(transaction Descriptor (TD)),用于请求器件和应答器件间转送处理层信息,包括三部分,Transaciton ID、Attributes、Traffic class(TC)。如下图。
其中Transaction ID包括: Requester ID、Tag,如图。
Tag[7:0]是由产生请求包的器件生成的,如果请求器件需要应答,则每个Tag[7:0]和Function Number是独一无二的。Transaction ID是一个全局标识符用于响应包寻址请求器件。
TC的规定如下,描述服务的层次和用于映射虚拟通道:处理层描述符在请求包中第二个DW:中图中看出,描述字符放在第二个DW的前三个字节中。
3.请求和应答机制
该机制的作用就是:对从DLL接到的已经经过数据完整性的TPL进行处理。抛弃无效的包,并且将保留字忽略。
- 对所有的包分request handling和completion handling,按不同的规范处理。
- Request Handling Rules:
- 请求是一个不支持的请求包,并且需要响应,则Completion Status=UR,即不支持的请求
- 2请求包是一个Message 包则按Message包处理规则处理,否则对这个request进行处理
- 如果请求违反器件编程定义则给出ca响应,即响应器件放弃该请求,否则做出正确应答
completion handling: 如果接收到一个completion包的Transaction ID和requester的Transaction ID不一致则这个应答包是非预期包。合法的应答包将按Compl.Status域处理并提取有效数据负荷。
4
虚拟通道机制:
- 在总线中用TC域来区分的虚拟信息通路,即某一传输通路,有不同的流程控制机制(Flow Control)。当某流程控制出现拥塞时,其他通路依然畅通。VC有自己的独立流控制,是实现Qos的秘诀。VC通道是解决拥塞的基础。
- 每个TLP包并不包含具体的VC信息,VC是由TC映射得到的。每个器件的TC/VC映射是不同的,TC0/VC0是固定的。一个或多个TC映射到一个VC,同一个TC不能映射到不同的VC上,连接双方的映射机制一致。除了TC0外,其他的可以软件设置。链路两端的映射方案要一致,
每个虚拟通道有独立的流程控制的缓冲空间。流程控制能分辨三种包:posted requests(p)、non-posted requests(Np)、completions(cpl)。还可以分辨三种包的包头Header和数据Data,可以这样说,每个虚拟通道(VC)对应的特定流程控制包含6种不同的流程控制信息:1、PH=posted Request Header;2、PD=posted request Data Payload;3、NPH=non-posted request Header;4、NPD=non-posted request Data Payload;5、CPLH=completion Header;6、CPLD=completion Data Payload。
5
数据完整性
保证数据完整性的方式有:Data Link Layer中的crc(LCRC)。为了确保数据端对端的可靠性在Transaction层的TLp Digest域还选择性的做一ECRC校验
ECRC的初值是FFFF FFFF
PCIe的事务传输层的处理(TLP)的更多相关文章
- OSI模型第四层传输层--UDP协议
1.udp协议 UDP是OSI参考模型中一种无连接的传输层协议,它主要用于不要求分组顺序到达的传输中,分组传输顺序的检查与排序由应用层完成[2] ,提供面向事务的简单不可靠信息传送服务.UDP 协议 ...
- 从HTTP 2.0想到的关于传输层协议的一些事
0.HTTP协议的历史 我也不知道... 1.关于HTTP 2.0 收到了订阅的邮件,头版是说HTTP 2.0的内容,我本人不是非常关注HTTP这一块儿.可是闲得无聊时也会瞟两眼的.HTTP 2.0的 ...
- 传输层上的TCP和UDP
参考: 知乎 传输层概述 “三次握手,四次挥手”你真的懂吗? 传输层上的TCP和UDP TCP/IP协议是一个协议簇.里面包括很多协议的,UDP只是其中的一个, 之所以命名为TCP/IP协议,因为TC ...
- 传输层协议TCP和UDP
本文力图简洁,让读者对TCP和UDP有个初步的认知.闲话少说,现在开始吧.TCP和UDP都是传输层的协议.TCP通过三次握手建立可靠连接,对未送达的消息重新进行发送.UDP不建立连接而直接发送,对未送 ...
- ASP.NET知识总结(1.网络传输层)
1.网络传输层 1应用层(HTTP.FTP.SMTP)报文Message 2传输层(TCP.UDP)报文段Segment,为运行在不同主机上的应用程序进程间提供数据 传输服务.通过套接字(Socket ...
- 网络层、传输层、应用层、端口通信协议编程接口 - http,socket,tcp/ip 网络传输与通讯知识总结
引: http://coach.iteye.com/blog/2024511 什么是TCP和UDP,以及二者区别是什么? TCP的全称为传输控制协议.这种协议可以提供面向连接的.可靠的.点到点的通信. ...
- TCP/IP入门(3) --传输层
原文:http://blog.csdn.net/zjf280441589/article/category/1854365 传输层的主要功能 1)传输层为应用进程之间提供端到端的逻辑通信(网络层是为主 ...
- Linux内核--网络栈实现分析(九)--传输层之UDP协议(下)
本文分析基于Linux Kernel 1.2.13 原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7549340 更多请查看专栏,地 ...
- Linux内核--网络栈实现分析(五)--传输层之UDP协议(上)
本文分析基于Linux Kernel 1.2.13 原创作品,转载请标明出处http://blog.csdn.net/yming0221/article/details/7532512 更多请看专栏, ...
随机推荐
- 2020/1/29 PHP代码审计之进一步学习XSS【持续更新】
0x00 上午学习了XSS漏洞,中午吃饭想了想,还是思考的太浅层了,这种老生常谈的东西对于现在的我意义不大.现在我需要的是思考.于是就有了这个随笔.在本文中,我会持续更新一些XSS的深入思考,payl ...
- MySQL--mysql中You can’t specify target table for update in FROM clause错误解决方法
参考:http://www.jb51.net/article/60926.htm mysql中You can't specify target table for update in FROM cla ...
- C语言获取本机ip
一.参考网址 1.c语言获取本机IP 二.源码 #include <stdio.h> #include <stdint.h> #include <stdlib.h> ...
- Exchange 2016 CU3 安装失败解决方法
Exchange 2016 CU3 安装失败解决方法 1. 问题: 由于前期安装过Exchange 2010 ,服务器非正常删除,后期人员无法跟进,在新安装Exchange 2016时准备工作正常完成 ...
- 01 语言基础+高级:1-2 面向对象和封装_day06【类与对象、封装、构造方法】
day06[类与对象.封装.构造方法] 面向对象类与对象三大特征——封装构造方法 能够理解面向对象的思想能够明确类与对象关系能够掌握类的定义格式能够掌握创建对象格式,并访问类中的成员能够完成手机类的练 ...
- Python—使用Json序列化Datetime类型
import json from datetime import datetime, date """ str,int,list,tuple,dict,bool,None ...
- cassandra 系统分析 架构
cassandra cassandra是无中心节点的列式数据库 集群管理: 使用gossip算法,最终每个节点都知道集群中的所有节点信息,新增一个节点,新节点发送上线消息, 其他节点 ...
- Linux 安装python3.x步骤
本文转发自博客园非真的文章,内容略有改动 本文已收录至博客专栏linux安装各种软件及配置环境教程中 linux系统本身默认安装有2.x版本的python,版本x根据不同版本系统有所不同,通过pyth ...
- c++语法(3)
子类覆盖父类的成员函数: #include "stdafx.h" #include "iostream" class CAnimal { protected: ...
- 微信小程序java8 java7 java6 encryptedData 解密 异常处理
使用java8 java7 java6 解密微信小程序encryptedData可以回遇到一些错误 1.java.security.NoSuchAlgorithmException: Cannot ...