PCIe扫盲——TLP Header详解(一)

news/2025/2/4 12:03:38/文章来源:https://www.cnblogs.com/linhaostudy/p/18698077

事务层包(TLP)的一般格式如下图所示:

image

前面的文章介绍过,TLP Header为3DW或者4DW,Data Payload为1-1024DW,最后的TLP Digest(ECRC)是可选的,为1DW。

TLP Header在整个TLP的位置如下图所示,需要注意的是,TLP Header的格式和内容都会随着TLP的类型和路由方式的改变而改变。

image

TLP的类型和路由方式由Fmt和Type所决定,这在前面关于TLP路由的文章中已经详细的介绍过。上图显示的是各种不同格式的TLP Header的相同的部分。

每一个Field的作用与意义如下表所示:

image
image
image

下面分别详细地介绍一下Byte Enable,在PCIe中Data Payload的单位是DW,也就是说数据大小(地址)需要以DW作为对齐。但是很多情况下,数据的大小并不是DW的整数倍,因此PCIe引入了Byte Enable来解决这一问题。使用Byte Enable需要遵循一下原则:

  • Byte Enable为高电平有效,低电平(0)表示Data Payload的对应Byte将被认为是无效的,即不被Completer使用。
  • 如果有效数据小于1DW,则Last DW Byte Enable应全部为0。
  • 如果Data Payload大于1DW,则First DW Byte Enable至少有一位是有效的。
  • 如果Data Payload大于或等于3DW,则First DW Byte Enable和Last DW Byte Enable当中的有效位必须是连续的。即这种情况下,Byte Enable只能用于调整起始地址和结束地址。
  • 如果Data Payload等于1DW,则First DW Byte Enable中的有效位可以是不连续的。
  • 如果Data Payload等于2DW,则First DW Byte Enable和Last DW Byte Enable中的有效位都可以是不连续的。
  • 写请求中的DW等于1,但是First DW Byte Enable中没有任何一位是有效的,也是允许的,但是这样的请求对于Completer没有任何作用。
  • 如果读请求DW等于1,但是First DW Byte Enable中没有任何一位是有效的,此时Completer会返回1DW的Data Payload,只是其中的数据都是无效的。这一方式常备用于Flush Mechanism。
  • 一个简单的Byte Enable使用的例子,如下图所示:

image

关于TLP的Data Payload有:

  • Data Payload的大小由TLP Header中的Length决定。
  • Data Payload的数据采用的是Little Endian,即低字节存放于低地址中。
  • Data Payload的大小并不是有效的数据的大小,有效数据的大小是由Data Payload和Byte Enable共同决定的。
  • 当TLP类型为Message时,Length一般是保留的(Reserved),除非该Message是带有数据的(MsgD)。
  • TLP的Data Payload大小不得超过Max_Payload_Size的值,该值位于Device Control Register中。对于比较大的数据量,因此只能分多次进行发送。对于读请求来说,并没有Data Payload,也就是说该规则并不适用于读请求。
  • 需要特别注意的是,起始地址和结束地址之间不能够跨越4KB的地址边界。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/878517.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

龙哥量化:deepseek写技术指标,deepseek写选股公式,通达信deepseek写公式太牛了

龙哥微信:Long622889代写通达信技术指标、选股公式(通达信,同花顺,东方财富,大智慧,文华,博易,飞狐)代写期货量化策略(TB交易开拓者,文华8,金字塔) 2025的deepseek火出天际了,用来写技术指标,量化策略岂不是爽歪歪,哈哈 先说使用体验, 第一:写代码确实很强,…

这个记录一下,困扰了很久,usb网卡被隐藏。

这个问题困扰了很久,直到今天用了这个搜索。才发现问题,照做之后,usb网卡回来了。终于笔记本不用在连网线了,只连typtc扩展坞就可以了。没想到禁用之后,还被隐藏!!! 解决的链接。 https://blog.csdn.net/ljason1993/article/details/85884992

docker中提示permission denied

docker中使用mount命令报错:mount: permission denied使用docker exec -it dokcerID bash进入docker容器中,显示的是root,权限应该是足够,但是使用mount命令一直提示permission denie,很明显是权限不足造成的查看docker历史版本文档,发现docker在0.6之后引入了privileged…

使用Chainlit快速构建一个对话式人工智能应用体验DeepSeek-R1

Chainlit是一个开源的 Python 包,用于构建可用于生产的对话式人工智能。 DeepSeek-R1 是一款强化学习(RL)驱动的推理模型,解决了模型中的重复性和可读性问题。在 RL 之前,DeepSeek-R1 引入了冷启动数据,进一步优化了推理性能。它在数学、代码和推理任务中与 OpenAI-o1 表…

Mybatis-plus -2025/1/27

MyBatisPlus(简称MP)是基于MyBatis框架基础上开发的增强型工具,旨在简化开发、提高效率DQL编程控制 // 创建 LambdaQueryWrapper 对象,用于构建查询条件LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<>();// 1. 等值查询// 添加等于条件,查询 usern…

springboot -2025/1/26

配置文件优先级: application.properties > application.yml > application.yaml YAML格式 YAML(YAML Aint Markup Language),一种数据序列化格式。 优点:容易阅读 yaml 类型的配置文件比 xml 类型的配置文件更容易阅读,结构更加清晰容易与脚本语言交互以数据为…

manim边学边做--局部变换

本次介绍的两个用于变换的动画类:TransformMatchingShapes和TransformMatchingTex。 它们的主要特点是对一组对象或一段文本进行局部变换,适用于复杂的图形或者文本的变换场景。 其中:TransformMatchingShapes:用于不同形状的 VMobject 间转换,能自动匹配相似形状并创建平…

读算法简史:从美索不达米亚到人工智能时代06人工智能现身

读算法简史:从美索不达米亚到人工智能时代06人工智能现身1. 人工智能现身 1.1. 在20世纪四五十年代,计算机在本质上被看成一种快速计算器1.1.1. 主机一个接一个地运行大量的数据处理作业(job),不与用户发生交互1.1.2. 最终的大量打印结果由操作员按批次(batch)展示给他们心怀…

2025 大盘

调整的差不多了 年后看3065附近

Qt展厅播放器/多媒体播放器/中控播放器/帧同步播放器/硬解播放器/监控播放器

一、前言说明 音视频开发除了应用在安防监控、视频网站、各种流媒体app开发之外,还有一个小众的市场,那就是多媒体展厅场景,这个场景目前处于垄断地位的软件是HirenderS3,做的非常早而且非常全面,都是通用的需求,这个场景需求,在播放这块,有几个明显的需求是,播放的视…

FFT+NTT入门

这是一个题图真的只是入门。 可能会接着更 分治FFT 或者 任意模数NTT? 前置知识 复数 也可以参考高中数学课本,这里只会介绍 fft 需要的(默认已经入门复数)。 多项式的相关概念。 点值表示法:假设 \(f(x)\) 是一个 \(n-1\) 次多项式,那么将 \(n\) 个 不同的 \(x\) 代入,…

Traefik新一代反代服务器,兼容所有主要的集群技术(二)

简介 笔记将记录如何使用docker配置traefik,代理一个gitea,自动申请tls证书,cloudflare反代80,443端口一系列实操。 daemon.json配置如下,主要是为了IPv6能访问,以及更改了主存储位置,配置了docker代理。{"data-root": "/storage/docker","ipv6…