0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一个简单的Byte Enable使用的例子

SwM2_ChinaAET 来源:未知 作者:李倩 2018-05-17 09:10 次阅读

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

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

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

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

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

下面分别详细地介绍一下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使用的例子,如下图所示:

关于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的地址边界。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 电平
    +关注

    关注

    5

    文章

    360

    浏览量

    39883
  • PCIe
    +关注

    关注

    15

    文章

    1234

    浏览量

    82575
  • TLP
    TLP
    +关注

    关注

    0

    文章

    32

    浏览量

    15625

原文标题:【博文连载】PCIe扫盲——TLP Header详解(一)

文章出处:【微信号:ChinaAET,微信公众号:电子技术应用ChinaAET】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    简单的pipeline是如何构建起来的?

    书接上文,简单的流水线例子,这里对data_in打两拍做输出
    的头像 发表于 08-12 11:18 1765次阅读
    <b class='flag-5'>一</b><b class='flag-5'>个</b><b class='flag-5'>简单</b>的pipeline是如何构建起来的?

    AD7214 enable DATA_STATUS后,status byte没有append 在3data后面,请问怎样才能正确读出来呢?

    数据手册只是说enable DATA_STATUS后, status byte会append 在3data后面, 我要怎样才能正确读出来呢?
    发表于 08-07 09:08

    介绍些MOV与ADD指令的简单例子

    因为嵌入式系统学习需要,开始学习汇编语言学习资料是B站的视频:汇编语言程序 P9目录简单的指令例子二、
    发表于 01-07 06:39

    PSRAM简单的读写例子

    下 esp32-s3-devkitc-1 N16R8 上面有 8M PSRAM 是用 SPI 控制的,似乎是满足我需要的。但是,我怎么就找不到 PSRAM 简单的 读写例子,有的是
    发表于 03-03 08:12

    简单的窗口及菜单的例子

    简单的窗口及菜单的例子:  Dos汇编,Win32汇编,硬件资料,丰富的汇编、C 源代码,编程例子详解。
    发表于 05-06 16:36 9次下载

    bit和byte的关系及区别

    bit和byte的关系:byte等于8bit bit意为“位”或“比特”,是计算机运算的基础,属于二进制的范筹; Byte意为“字节”,是计算机文件大小的基本计算单位
    发表于 11-21 09:54 5217次阅读

    labview与access操作简单例子

    做的labview与access操作简单例子,互相学习吧
    发表于 03-15 16:00 89次下载

    各种简单例子源码

    关于单片机开发 基于IAR平台 各种简单例子源码 入门级别
    发表于 06-20 16:09 1次下载

    STM32第一个例子

    STM32第一个例子是学习RAM单片机非常好的开始
    发表于 07-14 18:14 0次下载

    简单的事件驱动的IO libevent编程例子

    本文演示简单的基于libevent编程的例子。libevent是事件驱动的IO,适用于“好莱坞原则”。
    的头像 发表于 03-23 09:54 6395次阅读
    <b class='flag-5'>一</b><b class='flag-5'>个</b>最<b class='flag-5'>简单</b>的事件驱动的IO libevent编程<b class='flag-5'>例子</b>

    RMW操作的例子

    次RMW操作对于总线来说,本质上是两次子操作,次读,次写,只不过这两次子操作必须由同一个主设备的完成,且读数据和写数据的地址相同。"改"是不发生在总线上的,它发生在主设备内部。
    的头像 发表于 07-20 08:41 5111次阅读
    <b class='flag-5'>一</b><b class='flag-5'>个</b>RMW操作的<b class='flag-5'>例子</b>

    简单例子讲清楚指针的应用

    很多人遇到指针就糊涂,搞不清到底指向什么,其实是你没搞清楚 * 修饰谁,还有些关键字修饰谁。   看下面的例子,定义无符号字符变量x,然后同时定义
    的头像 发表于 02-10 17:54 2203次阅读
    <b class='flag-5'>一</b><b class='flag-5'>个</b><b class='flag-5'>简单</b><b class='flag-5'>例子</b>讲清楚指针的应用

    shell编程100实用例子分享

    shell编程100实用例子分享
    发表于 01-25 15:39 4次下载

    模拟解像力图表的例子

    实现本节介绍了模拟解像力图表的例子。作为个例子,我们将使用
    的头像 发表于 09-21 10:47 1097次阅读

    python最简单for循环例子

    Python是简单而又强大的编程语言,通过其清晰的语法和丰富的功能库,我们可以实现各种各样的任务。其中最基本的语法结构就是for循环,让我们来看
    的头像 发表于 11-21 14:53 1074次阅读