PCIE TLP包解析

说明:本文摘自 V3学院 尤老师的培训班笔记,仅用于个人学习,不用于任何商业用途。
满足个人在公交车上或者其他需要不得不等待的时间段内学习的需要。

  1. TLP包的公共部分

  2. Memory read/write TLP(Mwr/Mrd包)

    Length的单位是DW,应该填除以4后的结果,如果不能整除,需要加一

  3. Completion/Completion with Data TLPs (CPLD包)

    ===============

  4. Length一共10bit,其中0表示1024DW, 1~1023则正常理解。(1DW=4Byte=32bit)
    一个包不能跨越4KB的寻址边界
    DW BE 每一bit代表1个Byte,类似于DDR中的掩码。
    0<数据量<=4Byte(1DW), First DW BE每一bit位不能全为0,
    Last DW BE必须每一bit位必须为0,
    数据量>4Byte(1DW), Last DW BE每一bit位不能全为0,
    数据量=0, First DW BE = Last DW BE = 4’b0000
    ===============

  5. Mrd和Mwr的不同点在于,Mrd是Non_posted,需要独立的反馈事务来反馈读取的数据,而写不用,直接写即可。
    通过包头fmt控制3DW还是4DW来选择地址的空间大小
    ===============

  6. 注意cpld包中的Byte Count字节数目,并不是DW的数目。其他所有的单位都是DW,只有这里的单位是Byte.
    Byte Count的数值必须凑成4的整数倍。Byte Count的数值包括当前包要送的数量,而不是除去当前包所剩余的数量。
    当剩余字节(Byte count)等于当前包的lenth*4(换算成Byte数量)时,表示这是最后一个包,数据发送完成。
    ===============

  7. address 和 Length不能跨越RCB(Read Completion Boundary),可以是RCB的整数倍。RCB是在Root Complex中设置的。
    MPS是一个包最大承载数据数量。
    要注意发包的时候,既不能跨RCB,又不能超过MPS
    Lower address是第一个有效字节地址低7位。如果第一个数据First DW BE为4‘b1110,需要往后面顺延一个地址,即地址加一。
    ===============

  8. TLP包是怎么发送的呢?
    虽然协议里最大长度为10bit(DW),即最大4K byte。
    但是ip里有个参数:MPS和RCB.
    决定了最大只能发MPS个byte,而且发的时候地址不能跨RCB的倍数边界。所以发包的长度会有限制。

    ===============

  9. 一定长度的MemR/Wr TLP包是如何发送的?

    例1:

    0x1000f8%0x80(128)=0x78(120)。所以还差8个就到达RCB(128).
    所以第一个包只能发8个。地址往往不是RCB的整数倍,所以第一个包需要控制数量对到RCB的整数倍上
    还剩下272-8=264个bytes.再发2个128(RCB),即264-256=8个bytes。所以还剩下8个bytes.
    ==> 所以一共四个包。(8+128+128+8)

    或者第2个包发两倍的RCB,即256个。即(8+256+8)

    =====
    例2:

    同理第一个包需要控制数量对到RCB的整数倍上。
    0x0040_0130%0x40(64) = 0x30(48)。还差16个RCB(64个)。所以第一个包发16个。
    而first BE=1110。所以第一个包的第一个DW中的第一个BYTE是不考虑的,实际只有15个BYTE。
    1234-16=1218。而1218-1289=66;66-64=2.
    16+128
    9+64+4(最小发一个dw),一共12个包。

    应该是如下的图。

    注意:
    因为first BE=1110,所以第一个byte是无效的,(注意是1110,而不是0111)而low address是第一个有效字节低7bit地址,并不是像往常一样直接取address的低7bit。故这里容易错,这里需要加一,保证改地址上的数据是有效的
    Byte count的长度应该是4的倍数,这里如果不是4的倍数需要向上取4的倍数,比如这里的数为1234,取值为1236。
    Byte count 包含当前包的长度,并没有把当前包去掉。

    1).First packet to align to the next RCB;
    2).Next 9 packets cover 1152 bytes;
    3).Not enough for a full packet,stay aligned with RCS

    ===============
    Message TLP
    XILINX IP并没有开放message tlp封包的权利给用户,我们只需要拉高拉低中断信号。

【PCIE】PCIE TLP包解析相关推荐

  1. PCIe(二)——TLP包构成

    1 简介   TLP包是由PCIe的Endpoint或者Root Complex发送的数据包.在PCIe体系中的事务层生成.   深蓝色部分是物理层添加的开始和结束字段,浅蓝色部分是链路层添加的.这些 ...

  2. PCIe学习笔记(一)-------1.5 一个TLP包的传输过程

    1,MRd包的传输 以MRd TLP包的传输为例,说明一个Non-Posted事务的TLP是如何在PCIe系统层次中处理的. 1)Requester的软件层发送需要传送的信息给事务层. 2)事务层将数 ...

  3. 6.PCIe协议分析3-PCIe TLP包详解2

    1.回顾 上一篇博文我们讲解了TLP简介以及TLP Header结构,并列出了TLP的所有类型,如下图.本篇博文讲解核心几个TLP类型的具体结构(下图标注红色的),这些核心的TLP包结构,就是我们下章 ...

  4. PCIe系列专题之二:2.3 TLP结构解析

    一.故事前传 之前我们讲了对PCIe的一些基础概念作了一个宏观的介绍,了解了PCIe是一种封装分层协议(packet-based layered protocol),主要包括事务层(Transacti ...

  5. FPGA基础----TLP包格式以及组包方法(1)

    1. TLP包的包头 在PCIe的系统中,TLP包的包头的结构有许多部分是相似的,通过掌握这些常规的包头,能够帮助我理解在PCIe总线上各个设备之间是如何来进行数据的收发的. 下面的这个图在前面也见到 ...

  6. 关于vivo 8.0和miui新系统android studio调试出现“包解析错误”的bug的解决办法

    最近在工作中遇到了调试的时候将app安装到vivo 手机上,出现了包解析错误的问题.一般来说这种问题只会出现在手机版本 小于 app所要求的最低版本的手机上.但是此vivo手机的版本是8.0,很显然不 ...

  7. SSL加密包解析的几个概念梳理

    1.DPI技术初识 DPI(Deep PacketInspection)深度包检测技术是在传统IP数据包检测技术(OSI L2-L4之间包含的数据包元素的检测分析)之上增加了对应用层数据的应用协议识别 ...

  8. 使用Golang flag包解析字符串

    本篇文章主要介绍如何使用flag包解析字符串,没有介绍flag包的详细使用,需要学习flag包如何使用的同学可以参考如下这篇文章: Go语言中使用flag包对命令行进行参数解析的方法 https:// ...

  9. 蓝牙4.0BLE抓包(二) – 广播包解析

    转自: http://www.cnblogs.com/aikm/p/5022502.html 版权声明:本文为博主原创文章,转载请注明作者和出处.    作者:强光手电[艾克姆科技-无线事业部] 在使 ...

最新文章

  1. cmake编译安装完成后 执行cmake --version报错 bash: /usr/bin/cmake: 没有那个文件或目录
  2. 只用半小时,只用半小时,只用半小时,给自己一个机会,看完保你web开发一期末不挂科,老师看了都说好
  3. SCons: A software construction tool
  4. Python 单元测试详解
  5. iOS底层探索之多线程(二)—线程和锁
  6. 微信公众号用到的网站
  7. java后台管理项目策划书_12款适合做Java后台管理系统的项目
  8. 这一周CSDN人都看了些什么?(5.14-5.20)
  9. mbedtls | 09 - 数字签名算法的配置与使用(RSA数字签名算法、ECDSA数字签名算法)
  10. 外星人跑深度学习_外星人带你搞基?这部12年的动画绝了
  11. winform 窗体无法显示报错“未声明或从未赋值“解决办法
  12. 工作室多wifi软路由指南
  13. 应届生拿到offer之后的流程_应届生求职的一般流程和手续
  14. Stata:时间虚拟变量还是时间趋势项?
  15. C#进行MapX二次开发之MapX基础知识
  16. 2022年Q3白酒销量排行榜
  17. 视觉SLAM十四讲--罗德里格斯公式(Rodrigues’s Formula)推导
  18. 乘法运算加法表示,单片机软件乘法运算
  19. 宾夕法尼亚大学计算机双硕士,宾夕法尼亚大学双学位专业研究生申请要求_排名_学费_课程_就业_语言要求_几何留学...
  20. condarc怎么修改_怎么修改pip源和conda源

热门文章

  1. 技术分享 | 无人机仿真教程-Prometheus平台 -转自阿木实验室
  2. PostgreSQL扫描方法综述
  3. 机器学习 python
  4. cacti 监控mysql 无数据_cacti无图无数据等常见问题排查
  5. 日常快捷键、代码快捷键
  6. 【进程间通信】进程间通信方式汇总
  7. 扩展欧几里得算法及贝祖定理的证明
  8. Java可视化动态画图
  9. 容器编排工具与 Kuberneters
  10. Java进行图像缩放