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

    文章

    342

    浏览量

    39626
  • PCIe
    +关注

    关注

    13

    文章

    1115

    浏览量

    81325
  • TLP
    TLP
    +关注

    关注

    0

    文章

    30

    浏览量

    15536

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

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

收藏 人收藏

    评论

    相关推荐

    labview的例子使用

    labview的串口通讯小例子
    发表于 02-20 22:56

    易语言,简单例子

    易语言简单例子
    发表于 08-20 09:24

    请教大虾简单的问题!!

    ) ******************************************************************************* RESTRICTED VERSION WITH 0800H BYTE CODE SIZE LIMIT; USED: 0926H
    发表于 11-16 15:33

    ucos的个例子

    ucos的个例子,希望对大家有用。
    发表于 04-14 21:41

    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

    求分享关于PSRAM简单的读写例子

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

    VHDL “Cheat” Code (To Enable B

    VHDL “Cheat” Code To Enable Basic CPU ROM Communication
    发表于 03-28 15:32 22次下载

    简单的窗口及菜单的例子

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

    bit和byte的关系及区别

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

    labview与access操作简单例子

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

    各种简单例子源码

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

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

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

    python最简单for循环例子

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