【PCIe】First/Last DW Byte Enables 介绍

2023-10-27 18:50

本文主要是介绍【PCIe】First/Last DW Byte Enables 介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!



🔥点击查看精选 PCIe 系列文章🔥
🔥点击进入【芯片设计验证】社区,查看更多精彩内容🔥


📢 声明

  • 🥭 作者主页:【MangoPapa的CSDN主页】。
  • ⚠️ 本文首发于CSDN,转载或引用请注明出处【https://mangopapa.blog.csdn.net/article/details/129265044】。
  • ⚠️ 本文目的为 个人学习记录知识分享。因个人能力受限,存在协议解读不正确的可能。若您参考本文进行产品设计或进行其他事项并造成了不良后果,本人不承担相关法律责任。
  • ⚠️ 若本文所采用图片或相关引用侵犯了您的合法权益,请联系我进行删除。
  • 😄 欢迎大家指出文章错误,欢迎同行与我交流 ~
  • 📧 邮箱:mangopapa@yeah.net
  • 💬 直达博主:loveic_lovelife 。(搜索或点击扫码)

文章目录

  • 1. FBE & LBE 简介
  • 2. FBE & LBE 基本规则
    • 2.1 基本规则
    • 2.2 Zero-Read, Zero-Write
  • 3. FBE & LBE 在 TLP Header 中的位置
    • 3.1 Byte Enables @NFM
    • 3.2 Byte Enables @FM
  • 4. FBE 对 CplD 的影响:LA[1:0] 计算
  • 5. 参考




1. FBE & LBE 简介


  在 PCIe 中,Address 字段低 2b 无效(默认 00b),Data Payload 为 DW 地址对齐。在 Axi Bus 中有 Wstrb 来指示 Wdata 相关 Bytes 是否有效,PCIe TLP 中也有类似的机制。PCIe TLP 中提供了 First DW Byte Enable (FBE) 及 Last DW Byte Enable (LBE) 两个 4b 宽的字段分别来指示 TLP Data Payload 的第一个 DW 及最后一个 DW 中的数据 Byte 是否有效。

  FBE 及 LBE 适用于 Memory、IO 及 Configuration 读写请求,Completer 依据 FBE 及 LBE 来完成读写操作。若 FBE 或 LBE 某 bit 为 0,表示该 Byte 数据不能写入 Memory 或不可预取、不可读;若为 1,表示该 Byte 数据必须写入或读出。

  FBE[3:0]、LBE[3:0] 跟地址的对应关系如图 1 所示。

在这里插入图片描述

▲图 1: First/Last DW Byte Enable 位置对应关系


2. FBE & LBE 基本规则


2.1 基本规则

  无论 Flit Mode 还是 Non-Flit Mode,TLP 中的 FBE 及 LBE 应遵循以下规则:

  • 若 Length > 1 DW,FBE 不能为 0000b。
  • 若 Length = 1 DW,LBE 必须为 0000b。
  • 若 Length > 1 DW,LBE 不能为 0000b。
  • 若 Length = 1 DW,FBE 可以不连续。
  • 若 Length = 1 QW 且地址 QW 对齐,FBE 及 LBE 均可以不连续。(1 QW = 2 DW)
  • 若 Length = 1 QW 但地址非 QW 对齐,或 Length ≥ 3 DW,FBE 与 LBE 之间的 1 必须连续。比如 FBE=1100b & LBE=0011b,比如 FBE=1000b & LBE=0111b。

2.2 Zero-Read, Zero-Write

  Data Payload Length = 1 DW 时,PCIe 允许 FBE 及 LBE 均为 0,即 Zero-Length 读写,或称 Zero-Read、Zero-Write。
Zero-Write 和 Zero-Read 是指 PCIe 发送的数据载荷长度为 0 的内存读写请求,常用于 Flush 操作,以确保早前 Posted 发送的数据传输完成。对于 Zero-Write,Length = 1 但是实际不携带 Data Payload;对于 Zero-Read,其对应的 CplD 仍需携带 1 DW Data Payload(协议未指定,可为任意值)。

  注意: PCIe TLP 中不采用 Length = 0 来指示 Zero-Length,是因为 Length = 0 时代表 Data Payload Size 为 1024 DW。



3. FBE & LBE 在 TLP Header 中的位置


3.1 Byte Enables @NFM

  Non-Flit Mode 时, FBE 及 LBE 位于 TLP Header 的 Byte 7,如图 2 所示。

在这里插入图片描述

▲图 2:Location of Byte Enables in TLP Header - Non-Flit Mode

  对于 Memory Write,FBE 及 LBE 在 TLP Header 中的位置如图 3 所示。

  对于 Memory Read 及 DMWr,若 TH 被置一,TLP Header 中原 FBE、LBE 字段不用做 Byte Enbale,而是用来放 ST[7:0](图 4)。此时,若 Length = 1 DW,采用默认值 FBE = 1111b & LBE = 0000b;若 Length > 1 DW,采用默认值 FBE = 1111b & LBE=1111b。

在这里插入图片描述

▲图 3:Location of ST[7:0] in the Memory Write Request Header - Non-Flit Mode

在这里插入图片描述

▲图 4:Location of ST[7:0] in Memory Read, DMWr, and AtomicOp Request Headers - Non-Flit Mode

3.2 Byte Enables @FM

  PCIe 工作于 Flit Mode 时,对于不同的请求类型,FBE/LBE 位于不同类型的 OHC-A 中。Flit Mode 时,ST 字段为占用 FBE 及 LBE,而是在单独的 OHC-B 中。

  对于 Memory 请求,FBE 及 LBE 位于 OHC-A1 中(图 5)。实际情况中,若 Length ≥ 2 DW,允许不携带 OHC-A1,此时 FBE 及 LBE 均默认为 1111b。若 FBE 或 LBE 非全 1,必须携带 OHC-A1。

  对于 IO 请求,FBE 及 LBE 位于 OHC-A2 中,其 TLP Header 中必须携带 OHC-A2(图 6)。

  对于 Configuration 请求,FBE 及 LBE 位于 OHC-A3 中,其 TLP Header 中必须携带 OHC-A3(图 7)。

在这里插入图片描述

▲图 5:OHC-A1

在这里插入图片描述

▲图 6:OHC-A2

在这里插入图片描述

▲图 7:OHC-A3


4. FBE 对 CplD 的影响:LA[1:0] 计算


  在 Memory、IO 或 Configuration 请求中,有 FBE 及 LBE 来指示相关 Bytes 是否有效。对于 FBE 或 LBE 非全 1 的请求,其 CplD 中相关 Bytes 也并非全部有效。在 CplD 中,其 Header 中并不含有 FBE 或 LBE,该如何指示相关 Bytes 是否有效呢?当然,CplD 中可以不给任何指示,请求方自己知道哪些 Byte 是有效的,哪些能用哪些不能用完全由请求方自己保证。

  跟 FBE 相匹配的,PCIe Memory Read 的 CplD 提供了 Lower Address (LA[6:0]) 字段来标识 Data Payload 的起始地址。再说细一点,用以指明当前 Completion 所携带 Data Payload 的起始 Byte 地址,LA[1:0] 指示当前 CplD 第一有效 Byte 在当前 Address 上的地址偏移。对于 AtomicOp,LA[1:0] 预留,此外其他类型请求的 CplD LA[1:0] 为 0。下文 LA[1:0] 计算仅针对 Memory Read 请求的 CplD。

  若 FBE = xxx1b/0000b,LA[1:0] = 00b,地址偏移 0;若 FBE = xx10,LA[1:0] = 01b,地址偏移 1;若 FBE = x100,LA[1:0] = 10b,地址偏移 2;若 FBE = 1000,LA[1:0] = 11b,地址偏移 3。
对于 Non-Flit Mode,LA[6:0] 全部位于 Cpl Header 中 (图 8);对于 Flit Mode,LA[6:2] 位于 Header Base(图 9),LA[1:0] 位于 OHC-A5 中(图 10)。这也意味着,Flit Mode 时,对于 FBE 非全 1 的请求,其 CplD 需要添加 OHC-A5 来指示有效地址偏移。

在这里插入图片描述

▲图 8:Completion Header Format - Non-Flit Mode

在这里插入图片描述

▲图 9:Completion Header Base Format - Flit Mode

在这里插入图片描述

▲图 10:OHC-A5


5. 参考


  • PCI Express Base Spec 6.0


— END —


🔥 精选往期 PCIe 协议系列文章,请查看【 PCIe 专栏】🔥

⬆️ 返回顶部 ⬆️

这篇关于【PCIe】First/Last DW Byte Enables 介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/287661

相关文章

zookeeper端口说明及介绍

《zookeeper端口说明及介绍》:本文主要介绍zookeeper端口说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、zookeeper有三个端口(可以修改)aVNMqvZ二、3个端口的作用三、部署时注意总China编程结一、zookeeper有三个端口(可以

Python中win32包的安装及常见用途介绍

《Python中win32包的安装及常见用途介绍》在Windows环境下,PythonWin32模块通常随Python安装包一起安装,:本文主要介绍Python中win32包的安装及常见用途的相关... 目录前言主要组件安装方法常见用途1. 操作Windows注册表2. 操作Windows服务3. 窗口操作

c++中的set容器介绍及操作大全

《c++中的set容器介绍及操作大全》:本文主要介绍c++中的set容器介绍及操作大全,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录​​一、核心特性​​️ ​​二、基本操作​​​​1. 初始化与赋值​​​​2. 增删查操作​​​​3. 遍历方

HTML img标签和超链接标签详细介绍

《HTMLimg标签和超链接标签详细介绍》:本文主要介绍了HTML中img标签的使用,包括src属性(指定图片路径)、相对/绝对路径区别、alt替代文本、title提示、宽高控制及边框设置等,详细内容请阅读本文,希望能对你有所帮助... 目录img 标签src 属性alt 属性title 属性width/h

MybatisPlus service接口功能介绍

《MybatisPlusservice接口功能介绍》:本文主要介绍MybatisPlusservice接口功能介绍,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录Service接口基本用法进阶用法总结:Lambda方法Service接口基本用法MyBATisP

MySQL复杂SQL之多表联查/子查询详细介绍(最新整理)

《MySQL复杂SQL之多表联查/子查询详细介绍(最新整理)》掌握多表联查(INNERJOIN,LEFTJOIN,RIGHTJOIN,FULLJOIN)和子查询(标量、列、行、表子查询、相关/非相关、... 目录第一部分:多表联查 (JOIN Operations)1. 连接的类型 (JOIN Types)

java中BigDecimal里面的subtract函数介绍及实现方法

《java中BigDecimal里面的subtract函数介绍及实现方法》在Java中实现减法操作需要根据数据类型选择不同方法,主要分为数值型减法和字符串减法两种场景,本文给大家介绍java中BigD... 目录Java中BigDecimal里面的subtract函数的意思?一、数值型减法(高精度计算)1.

Pytorch介绍与安装过程

《Pytorch介绍与安装过程》PyTorch因其直观的设计、卓越的灵活性以及强大的动态计算图功能,迅速在学术界和工业界获得了广泛认可,成为当前深度学习研究和开发的主流工具之一,本文给大家介绍Pyto... 目录1、Pytorch介绍1.1、核心理念1.2、核心组件与功能1.3、适用场景与优势总结1.4、优

Java实现本地缓存的常用方案介绍

《Java实现本地缓存的常用方案介绍》本地缓存的代表技术主要有HashMap,GuavaCache,Caffeine和Encahche,这篇文章主要来和大家聊聊java利用这些技术分别实现本地缓存的方... 目录本地缓存实现方式HashMapConcurrentHashMapGuava CacheCaffe

Spring Security介绍及配置实现代码

《SpringSecurity介绍及配置实现代码》SpringSecurity是一个功能强大的Java安全框架,它提供了全面的安全认证(Authentication)和授权(Authorizatio... 目录简介Spring Security配置配置实现代码简介Spring Security是一个功能强