Hello,
现在我的 MPC5777CEVB 已经有了一个稳定的双核执行环境(顺便说一句,感谢您在之前帖子中的回答!),我正在尝试了解更精细的细节,以便获得该 MCU 的最佳性能和可预测性。在我的实验过程中,我思考了许多问题:
- 让 cpu0 从一个 PFLASH 库运行代码,让 cpu1 从另一个 PFLASH 库运行代码,这是否有益(就减少资源争用而言)?在这种情况下,将 PFLASH 分成几个 TLB 条目是否有用?
- 对于 SRAM 也有同样的问题:考虑到它分为三个组,有没有将其分成核心的最佳方法?我正在考虑为具有直写缓存策略和平台一致性的共享 64KB 空间设置一个 TLB 条目,然后为 cpu1 设置 192KB,为 cpu0 设置 256KB,但我不知道将一个核心绑定到 XBAR 从属端口 2 并将另一个核心绑定到 XBAR 从属端口 4 是否有任何好处,也不知道是否需要特别注意 XBAR 从属端口 2,因为(如果我理解正确的话)那里有多个存储库。
- 尽管 EVB 带有 MMO3 部件编号,但我打算在实际开发中使用 MMO4 芯片。EVB 能与 MMO4 芯片配合良好吗?我可以以最大频率运行它吗?说到这,一些文档部分指出最大频率为 300MHz,而其他部分则指出最大频率为 306MHz。哪一个是正确的?
- 对于 MMO4 部件号,最大 EBI CLKOUT 是否仍保持在 66MHz?在这种情况下,我是否应该将平台时钟除以 3 并使用 50(51?)MHz 作为 CLKOUT?
- 我使用 PIT0 作为触发器在两个核心中同时运行代码(以估计一个核心受到另一个核心的干扰)。如何确保两个内核在其中一个设置 PIT_TFLG0[TIF] 之前都接收到中断?
- 当在两个核心上运行一些代码时(都从相同的 Flash 地址读取,一些从相同的 RAM 地址读取,一些读取(以及所有写入)到不同的 RAM 地址),使用循环 XBAR 仲裁策略,cpu0 比 cpu1 更快(~743us vs. ~799us)。当我将其更改为基于优先级时,时间保持大致相同,但两个核心的速度都稍慢一些(~748us 对比 ~805us)。在所有情况下,我都使用每个核心自己的 TBL/TBU 寄存器来测量时间,以最大限度地减少资源争用。为什么循环对两个核心都更好?
-最后,在S32DS环境中是否有SDA使用的示例或文档?
谢谢!
Ricardo
也许您需要按如下方式启用它:
https://www.nxp.com.cn/docs/en/release-note/S32SDK_Power_Architecture-RN.pdf
关于中断:
两个核心的中断请求在同一周期内触发。然而,ISR 处理是特定于应用程序的。
Hi David,
感谢大家的回答!我将重点讨论那些我可能不理解的内容:
- 我使用 PIT0 作为触发器在两个核心中同时运行代码(以估计一个核心受到另一个核心的干扰)。如何确保两个内核在其中一个设置 PIT_TFLG0[TIF] 之前都接收到中断?
我不确定我是否完全理解这一点,但 INTC 能够向两个核心发送中断请求(INTC_PSRn[PRC_SELn] = 0b)。
确实,我正在向两个核心发送中断。查看 S32DS 知识库中提供的示例时,只有一个核心服务于中断,并且必须设置 PIT_TFLG0[TIF](显然,要重置中断,直到 PIT0 再次设置它)。我想知道中断是否在同一个时钟周期内发送到两个内核,这样如果其中一个内核在 ISR 功能启动时立即设置 PIT_TFLG0[TIF],则不会存在另一个内核“看不到”中断的风险,因为其中一个内核已清除该中断。
-最后,在S32DS环境中是否有SDA使用的示例或文档?
“SDA”缩写是什么意思?
我的错!我指的是小数据区。虽然我可以让它们在 GHS 环境中工作,但我不明白 gcc 如何处理它们......它正在创建 .sdata和 .sbss部分并默认在那里分配东西,但它看起来并不像在执行由 r13 索引的访问。
嵌入的答案:
- 让 cpu0 从一个 PFLASH 库运行代码,让 cpu1 从另一个 PFLASH 库运行代码,这是否有益(就减少资源争用而言)?在这种情况下,将 PFLASH 分成几个 TLB 条目是否有用?
有两个专用闪存端口,它们不根据地址分割,因此不需要创建多个 TLB 条目。
- 对于 SRAM 也有同样的问题:考虑到它分为三个组,有没有将其分成核心的最佳方法?我正在考虑为具有直写缓存策略和平台一致性的共享 64KB 空间设置一个 TLB 条目,然后为 cpu1 设置 192KB,为 cpu0 设置 256KB,但我不知道将一个核心绑定到 XBAR 从属端口 2 并将另一个核心绑定到 XBAR 从属端口 4 是否有任何好处,也不知道是否需要特别注意 XBAR 从属端口 2,因为(如果我理解正确的话)那里有多个存储库。
SRAM 根据地址线 18 分为两半(见表 9-2)。XBAR 从属端口分配)。如果一个核心访问从属端口 2,而第二个核心访问从属端口 4(或其他),则可能会很有益,因为两个访问是并行进行的。
- 尽管 EVB 带有 MMO3 部件编号,但我打算在实际开发中使用 MMO4 芯片。EVB 能与 MMO4 芯片配合良好吗?我可以以最大频率运行它吗?说到这,一些文档部分指出最大频率为 300MHz,而其他部分则指出最大频率为 306MHz。哪一个是正确的?
300MHz 为最大未调制频率,306MHz 为包含频率调制。
- 对于 MMO4 部件号,最大 EBI CLKOUT 是否仍保持在 66MHz?在这种情况下,我是否应该将平台时钟除以 3 并使用 50(51?)MHz 作为 CLKOUT?
EBI 最大频率保持不变,这实际上意味着 300MHz 版本必须使用比 264MHz 版本更低的 EBI 频率,因为 CLKOUT 分频器没有提供更多选项。
- 我使用 PIT0 作为触发器在两个核心中同时运行代码(以估计一个核心受到另一个核心的干扰)。如何确保两个内核在其中一个设置 PIT_TFLG0[TIF] 之前都接收到中断?
我不确定我是否完全理解这一点,但 INTC 能够向两个核心发送中断请求(INTC_PSRn[PRC_SELn] = 0b)。
- 当在两个核心上运行一些代码时(都从相同的 Flash 地址读取,一些从相同的 RAM 地址读取,一些读取(以及所有写入)到不同的 RAM 地址),使用循环 XBAR 仲裁策略,cpu0 比 cpu1 更快(~743us vs. ~799us)。当我将其更改为基于优先级时,时间保持大致相同,但两个核心的速度都稍慢一些(~748us 对比 ~805us)。在所有情况下,我都使用每个核心自己的 TBL/TBU 寄存器来测量时间,以最大限度地减少资源争用。为什么循环对两个核心都更好?
您可能还要注意停车管制。理想情况下,我已经回答过,每个核心访问不同的 SRAM 一半,每个核心访问不同的闪存地址(有内部预取缓冲区,但访问同一地址不会同时运行,可能会导致等待状态)。
-最后,在S32DS环境中是否有SDA使用的示例或文档?
“SDA”缩写是什么意思?