gpt4 book ai didi

linux - 为什么 PCIe TLP header 有 "Last DW BE"和 "First DW BE"?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:23:00 24 4
gpt4 key购买 nike

我遇到了一个与 PCIe 相关的问题。我用驱动把0x12345678写入BAR0+offset,用Xilinx Chipscope看波形。在我们的 Intel Rangeley 主板上,我们看到 TLP 有效载荷被分成两个 DW,即 00_00_00_78 56_34_12_00,而在戴尔 PC 上,我们在有效载荷中只看到一个 DW。我确定这两种情况都符合 PCIe 规范。

但我很奇怪,为什么PCIe规范要有这种设计,即TLP头的2nd DW中的“Last DW BE”和“First DW BE”?

最佳答案

您的问题涉及内存请求 PCI 传输,对于您的问题,可以将其缩减为 4 个参数:地址、长度、第一个双字字节启用和最后一个双字字节启用。

地址和长度是双字对齐的,即 PCI 规范的 address[1:0] = 0。那么如果你想写一个字节会发生什么?还是在非双字对齐地址(例如 0x3567)?您被迫至少写入 1 个双字,但您不想删除相邻的字节。这就是第一个 DW BE 发挥作用的地方。例如,要将 1 个字节写入地址 0x3567,您将:

  • 地址 = 0x3564,因为双字对齐
  • 长度 = 1 个双字,允许的最小大小
  • 第一个DW BE = 0b1000,只有第四个字节有效
  • 最后的 DW BE = 0b0000,无字节有效

同样,当您的传输未在双字边界结束时,最后一个 DW BE 开始发挥作用。例如,如果要在地址 6 处写入 27 个字节:

  • 地址 = 4,因为双字对齐
  • 长度= 7,因为它必须是双字倍数
  • 第一个 DW BE = 0b1100,因为在地址 4 只有高 2 字节有效(地址 4 和 5 无效)
  • 最后一个 DW BE = 0b0001,因为在地址 4+6*4 只有第一个字节有效(地址 4+6*4+1、4+6*4+2 和 4+6*4+3 无效)

关于linux - 为什么 PCIe TLP header 有 "Last DW BE"和 "First DW BE"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30065749/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com