【PCIe】First/Last DW Byte Enables 介绍

news/2025/4/2 6:27:32/


🔥点击查看精选 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 专栏】🔥

⬆️ 返回顶部 ⬆️


http://www.ppmy.cn/news/476961.html

相关文章

NVDLA uvm验证环境深度解析

1.nvdla hw master github https://github.com/nvdla/hw/tree/masterNVDLA Environment Setup GuideNVDLA Verification Suite User Guide 首先checkout nvdla hw master breach,然后按照第2,3步,完成build和health check,当nvdla tree bui…

dw做html电邮,DreamWeaver中表单的使用和电子邮件表单的制作

DreamWeaver中表单的使用和电子邮件表单的制作 http://www.tongyi.net 首先,看一下你将要做的电子邮件表单的最后界面,当然,这只是一个简单的例子,旨在抛砖引玉而已,相信您将做得更加漂亮或设计得更加有条理。 接下来,就开始制作这个电子邮件表单: 第一步:插入表单,用“…

dw注册页面html,在 Dreamweaver 中生成注册页 - Dreamweaver 用户指南

注意:用户界面已经在 Dreamweaver CC 和更高版本中做了简化。因此,您可能在 Dreamweaver CC 和更高版本中找不到本文中描述的一些选项。有关详细信息,请参阅此文章。 关于注册页 Web 应用程序可以包含要求用户在首次访问站点时进行注册的页。 注册页由以下构造块组成: 存储有…

I2C虚拟项目验证结构

文章目录 前言一、验证结构二、各组件功能1.lvc_apb_master_agent1.1 driver功能1.2 monitor功能1.3 sequencer功能 2.lvc_i2c_slave_agent2.1 driver功能2.2 monitor功能2.3 sequencer功能 3. Scoreboard功能4. Predictor功能5. Virtual sequencer功能 总结 前言 I2C项目验证…

DW模型搭建和评估

DW模型搭建和评估 特征工程缺失值填充(清洗)编码分类变量(重构) 模型搭建train_test_split模型创建逻辑回归随机森林输出模型预测结果 模型评估交叉验证混淆矩阵ROC曲线 经过前面的探索性数据分析、数据清洗重构可视化后&#xff…

I2C驱动框架分析(3):DW_I2C驱动分析

I2C驱动框架分析(1):I2C重要概念与数据结构 I2C驱动框架分析(2):I2C框架源码分析 I2C驱动框架分析(3):DW_I2C驱动分析 第三章:DW_I2C驱动 其驱动文件在driv…

DW_apb_i2c 使用介绍1

项目使用的到Synopsys的DW_apb_i2c,本文作为个人学习心得和使用记录,仅作参考。 1.i2c 介绍 I2C(Inter-Integrated Circuit)是一种简单、双向二线制同步串行总线,使用多主从架构,由飞利浦公司在1980年为了…

DW_apb_uart(1)

文章目录 第一章 总体概述1.1 IP产品说明1.2 DW_apb_uart功能描述1.2.1 发送和接收数据FIFO1.2.2 DMA控制器接口1.2.3 异步时钟支持1.2.4 自动流量控制1.2.5 可编程发送保持寄存器空(THRE)中断1.2.6 串口红外支持1.2.7 增加内置诊断功能1.2.8 1级和2级调…