This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] AM5748:AM5748:访问共享资源/外设的核心优先级(续)

Guru**** 2867080 points

Other Parts Discussed in Thread: AM5748

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1627156/am5748-am5748-core-priorities-accessing-shared-resources-peripherals-continued

部件号: AM5748

你好 Josue、

此线程与以下(已阻止)一相关。 对延迟感到抱歉、不得不切换到紧急优先级。
https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1592309/am5748-core-priorities-accessing-shared-resources/6196365

关于您上一个主题中的最后一个问题:我尚未了解如何使用基于优先级的 CoS(带 TRM 和 QoS 旋钮)、但在此期间、我再次尝试使用基于 ConnID 的 CoS。 这是我所做的:

1.emif_read_write_execution_threshold 寄存器。  

  • 设置为 1 位 31 (MFLAG_OVERRIDE) 以禁用 MFlag、因此启用 CoS。 这是:将 0x80000305 写入寄存器 0x4C000120。 WR_THRSH 和 RD_THRSH 保持复位默认值

2. CONNECTION_ID_TO_CLASS_OF_SERVICE_1_MAPING 寄存器。  

  • 设置为 1 位 31 (CONNID_COS_1_MAP_EN) 以启用与服务类别 1 映射的连接 ID、将 b00001111 设置为 CONNID_1_COS_1 并将“3"设置“设置为 MSK_1_COS_1、以屏蔽 001XXX 的所有连接。 它应包括 DSP1 MDMA、DSP1 CFG、DSP1 DMA、DSP2 DMA、DSP2 CFG、 DSP2 MDMA 和 IVA ICONT1(我们不使用 IVA,因此我们不介意最后一个具有优先级)
  • 将 b00011111 设置为 CONNID_2_COS_1、将“3"设置“设置为 MSK_2_COS_1、以便屏蔽 011XXX 的所有连接器。 这应包括 IPU1、IPU2、DMA_SYSTEM RD、DMA_SYSTEM WR、EDMA_TC1 WR 和 EDMA_TC1 RD、EDMA_TC2 WR 和 EDMA_TC2 RD、关于表 35-32。

已针对表 35-32 选择了此连接器。 STM 消息软件主设备 35.10.10.1 和表 35-16。 35.10.4.1 的主 ID 映射(调试视图)、均位于 AM5748 TRM 中。


实际上、我刚刚尝试了 CONNID_1_COS_1 + MSK_1_COS_1 和 CONNID_1_COS_1 + MSK_1_COS_1 + CONNID_2_COS_1 + MSK_2_COS_1 。


3. EMIF_COS_CONFIG 寄存器。 我已经尝试了几种值组合、没有一个值在通过 McASP-EDMA 接收样本的 DSP 确定性方面有明显改进、但其中一些值使行为更糟。  

例如、将 COS_COUNT_1 设置为 1 或 0 会使 EDMA 回调(恒定采样,连续回调之间的标称值为 309us)接收的抖动直方图变得比不触摸它更宽、也不可取。

image.pngimage.png

如果我将 COS_COUNT_1 设置为 8 并将 PR_OLD_COUNT 设置为 4、我可能会得到类似的抖动、就像让它们在两个字段中复位默认值 0xFF 一样。

关键是—只是刷新上下文—我们希望 DSP1 在其对 L3(外设和存储器)和 DDR 的访问中具有尽可能高的优先级(高于其余内核)、以便 DSP 回调之间的时间间隔尽可能保持稳定。 如果增加过多、在最坏的情况下可能会丢失样本、或者在“较差“的情况下只剩下很少的时间来处理以下样本。

每当 DSP 需要访问某些内容时、可能没有必要中断正在进行的访问(例如来自 A15)、但它应该放在 L3 和 DDR 访问队列中的优先级下。 这应该会显著降低抖动。  

或者、如果我们的目标过高、或许可以指导我们在访问 L3/DDR 的不同内核的仲裁中取得什么成果。

因为我们不仅希望 DSP1 具有更高的优先级、我们真正需要的是 DSP1 > IPU1 > IPU2 > 2×A15。 但如果我们能够实现 DSP1、我希望我们可以在以后推断出 IPU 和 DSP2 的方法。 不仅涉及 CoS、还涉及带宽调节器/限制器、SDRAM 发起方优先级、L3_MAIN 发起方优先级、PEG 优先级以及我们在原始线程中讨论的 DSP NOC 仲裁。

如果您认为“重新组合“我已经测试过的内容会有所帮助、请告诉我。

感谢您的支持
BR
RO

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Ro、

    我需要了解此主题的最新信息。 我将努力在本周结束前作出回应。

    -Josue

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Ro、

    好的、我正在研究如何进行设置。

    明天我应该为你准备一些东西。

    -Josue

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    RO、

    请参阅以下配置:

    EMIF QoS/CoS 配置命令

     Priority Hierarchy: DSP1 > IPU1/IPU2 > MPU                                                                                                                       
      ---                                                                                                                                                                EMIF1 Configuration (Base: 0x4C000000)
    
      Step 1: Enable Class of Service Mode
    
      # EMIF_READ_WRITE_EXECUTION_THRESHOLD (offset 0x0120)
      # Bit 31: MFLAG_OVERRIDE = 1 (Enable Class of Service mode, disable MFlag)
      # Bits 12-8: WR_THRSH = 5 (Write threshold - after 6 write bursts, switch to reads)
      # Bits 4-0: RD_THRSH = 5 (Read threshold - after 6 read bursts, switch to writes)
      devmem2 0x4C000120 w 0x80000505
    
      ---
      Step 2: Map DSP1 and DSP2 to Class of Service 1 (Highest Priority)
    
      # EMIF_CONNECTION_ID_TO_CLASS_OF_SERVICE_1_MAPPING (offset 0x0104)
      # Bit 31: CONNID_COS_1_MAP_EN = 1 (Enable CoS 1 mapping)
      #
      # CONNID_1 Configuration:
      #   Bits 30-23: CONNID_1 = 0x20 (DSP1 MDMA base address)
      #   Bits 22-20: MSK_1 = 4 (Mask bits 3:0, covers ConnID 0x20-0x2F)
      #   This captures: DSP1 MDMA (0x20), DSP1 CFG (0x24), DSP1 DMA (0x28), DSP2 DMA (0x2C)
      #
      # CONNID_2 Configuration:
      #   Bits 19-12: CONNID_2 = 0x30 (DSP2 CFG)
      #   Bits 11-10: MSK_2 = 2 (Mask bits 1:0, covers ConnID 0x30-0x33)
      #   This captures: DSP2 CFG (0x30)
      #
      # CONNID_3 Configuration:
      #   Bits 9-2: CONNID_3 = 0x34 (DSP2 MDMA)
      #   Bits 1-0: MSK_3 = 0 (Exact match, no masking)
      #   This captures: DSP2 MDMA (0x34)
      #
      # Result: ALL DSP1 and DSP2 initiators mapped to CoS 1
      devmem2 0x4C000104 w 0x90308D0
    
      ---
      Step 3: Map IPU1, IPU2, DMA_SYSTEM, and EDMA to Class of Service 2 (Medium Priority)
    
      # EMIF_CONNECTION_ID_TO_CLASS_OF_SERVICE_2_MAPPING (offset 0x0108)
      # Bit 31: CONNID_COS_2_MAP_EN = 1 (Enable CoS 2 mapping)
      #
      # CONNID_1 Configuration:
      #   Bits 30-23: CONNID_1 = 0x60 (IPU1 base)
      #   Bits 22-20: MSK_1 = 4 (Mask bits 3:0, covers ConnID 0x60-0x6F)
      #   This captures: IPU1 (0x60), IPU2 (0x64), DMA_SYSTEM RD (0x68), DMA_SYSTEM WR (0x6A)
      #
      # CONNID_2 Configuration:
      #   Bits 19-12: CONNID_2 = 0x70 (EDMA TC1 base)
      #   Bits 11-10: MSK_2 = 3 (Mask bits 2:0, covers ConnID 0x70-0x77)
      #   This captures: TC1_EDMA_WR (0x70), TC1_EDMA_RD (0x72),
      #                  TC2_EDMA_WR (0x74), TC2_EDMA_RD (0x76)
      #
      # CONNID_3 Configuration:
      #   Bits 9-2: CONNID_3 = 0x00 (Not used)
      #   Bits 1-0: MSK_3 = 0 (Disabled)
      #
      # Result: IPU1, IPU2, and all EDMA Transfer Controllers mapped to CoS 2
      devmem2 0x4C000108 w 0xB0470C00
    
      ---
      Step 4: Configure Class of Service Latency Counters
    
      # EMIF_COS_CONFIG (offset 0x0124)
      #
      # Bits 23-16: COS_COUNT_1 = 0x08 (8 × 16 = 128 EMIF cycles)
      #             DSP commands become URGENT after 128 cycles (~481ns @ 266MHz)
      #             Lower value = more aggressive priority = lower latency for DSP
      #
      # Bits 15-8: COS_COUNT_2 = 0x40 (64 × 16 = 1024 EMIF cycles)
      #            IPU commands become URGENT after 1024 cycles (~3.85µs @ 266MHz)
      #            Higher value = less aggressive = DSP gets served before IPU
      #
      # Bits 7-0: PR_OLD_COUNT = 0x80 (128 × 16 = 2048 EMIF cycles)
      #           ANY command (including MPU) becomes URGENT after 2048 cycles (~7.7µs)
      #           Prevents complete starvation of MPU (CoS 3 default)
      #
      # Priority escalation timeline:
      #   128 cycles:  DSP jumps to front of queue
      #   1024 cycles: IPU jumps to front of queue
      #   2048 cycles: Oldest command OVERRIDES everything (prevents starvation)
      devmem2 0x4C000124 w 0x00084080
    
      ---
      EMIF2 Configuration (Base: 0x4D000000) - Same Values
    
      devmem2 0x4D000120 w 0x80000505  # Enable CoS mode
      devmem2 0x4D000104 w 0x90308D0   # DSP1/DSP2 → CoS 1
      devmem2 0x4D000108 w 0xB0470C00  # IPU1/IPU2/EDMA → CoS 2
      devmem2 0x4D000124 w 0x00084080  # Latency counters

    这是基于理论的、我对此没有做过比设置寄存器并确认寄存器已写入更深入的测试。

    请查看此内容、如果有用、请告知我。

    -Josue

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好 Josue、

    我已经进行了一些初步测试、我们看到了改进。 如果我将待机情况与(C 列)或不与(A+B 列)您的设置进行比较、会非常清楚。 此外、如果我将压力情况与 (col D) 或不与您的设置 (col F) 进行比较:

    注:在 245.7600–259.4133 和 259.4133–273.0667 范围内显示的分布是正常的。 在这些测试中、标称时间为 258.2645 微秒、非常接近 259.4133 阈值。

    正如我们所预期的那样、直方图不能像仅运行 Uboot 的 A15 内核那样窄、但这是一个改进。 我们希望在 4 个范围内获得 D 列的所有结果、如 C 列、所以我想:CoS 和其他 QoS 旋钮可以实现的限制是什么? 是否可以使 DSP 相对于其他内核访问 L3 和 EMIF?  

    现在、为了理解、我看到要填充 connection_ID_to_class_of_service_X_mapping 记录的 ConnID 字段(宽度为 8 位)、您使用的是表 35-32 中的完整 MReqMstId(8 位)。 但是、在同一表中、ConnID 列对应于 MReqMstId 的 6 个最高有效位、也匹配表 35-16(主 ID 映射)指定的 ConnID。 从结果来看、您看起来是对的、但这有点令人困惑—我们是否应该使用 8 位 MReqMstId 或 6 位 ConnID、即使 connection_ID_to_class_of_service_X_mapping 的 ConnID 字段为 8 位宽?

    我将离开办公室,直到 4 月 13 日,我将尝试更多的测试,然后尝试更好的性能.

    感谢您的支持

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我今天也不在办公室。 我下周还会回来。

    Josue

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Ro、

    我希望你的缺席是一个假期和彻底享受。

    使用 CoS 和其他 QoS Knobs 可以实现的限制是什么? 是否可以使 DSP 相对于其他内核访问 L3 和 EMIF?

    您可以随时提高优先级、但最终可能会导致主 A 核心崩溃。 因此、限制取决于您的设置。

    查看结果、您看起来很正确、但有点令人困惑—我们应该使用 8 位 MReqMstId 还是 6 位 ConnID、即使 connection_ID_to_class_of_service_X_mapping 的 ConnID 字段为 8 位宽?

    正确答案是  MReqMstId。 您可以使用 表 35-32 中所示的完整 8 位版本

    推理:  

    1. 连接 ID 位字段为 8 位宽

    2. 掩码选项也使用 8 位值  MSK_1_COS_1 掩码多达 7 位更有意义。

    希望这有所帮助。

    -Josue

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好 Josue、  


    非常感谢您的回答。 使用 connid 而不是 MReqMstId 可能是导致我获得不良 结果的原因。

    是的、我很享受假期、但我也遇到了重新进入的情况Joy、因此请给我一些时间、根据您的配置建议、将我的初始优先级设置调整为 MReqMstId(恐怕在某些情况下我可能会耗尽掩码位)、并尝试几种 COS_COUNT 组合。

    此致
    RO

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    听起来不错。  

    此致、

    Josue