ETM 迹线和 STM 迹线
ETM traces and STM traces
需要了解 STM 迹线和 ETM 迹线之间的区别?还想了解 coresight 设备中的 source、sink、link 吗?
请分享这些查询的任何 links/blogs
有一个介绍性的“CoreSight Technical Introduction”,但这更旨在为 SoC 设计人员提供一些背景信息。但是,我可以尝试在此处提供一些以开发人员为中心的信息。
STM
或 ITM
都是软件驱动的跟踪源(实际上是 optimised/dedicated UART)。在 Cortex-M 中,有一个额外的硬件跟踪层,它以某种方式补偿较小部分中性能监控计数器的缺失。对 STM 的访问可以相当快,并且软件可以将原始有效载荷转储到特定通道。这比 UART 的开销更低(并且应该安排带宽以允许流式写入而不必担心握手。此跟踪的捕获通常内置于低端工具中。
ETM
要复杂得多。它实时提供程序执行流的非侵入式视图。除了 Cortex-R,这通常只是指令流,并且流被严重压缩。根据设备的不同,可以选择在流中包含时间信息。 ETM 跟踪用于分析、代码覆盖和诊断难题或竞争条件(因为采取异常的顺序等是明确的。)
ETM 还具有触发逻辑,可帮助将捕获范围缩小到感兴趣的特定序列。
CoreSight 是一个架构和一组用于实现 trace/debug 的组件。在这个术语中,STM
和 ETM
是跟踪源。它们以基于字节的协议在宽总线上流式传输跟踪数据。挑战在于从芯片中提取这些数据。数据可以存储在缓冲区中,稍后通过调试接口读出,或者实时流式传输。小型 Cortex-M 设备通常有一个 4 位跟踪端口,这需要 运行 至少核心频率的一半才能跟上。基本 4/8/16/32 位跟踪端口的捕获硬件非常重要,因为它们通常在高频下运行。
在 CoreSight 术语中,跟踪接收器是存储或导出跟踪数据的端点。外部跟踪端口、跟踪到内存桥接器或片上缓冲器。
迹线 link 是互连的一部分(并且大部分只对设计人员可见,除非存在可配置路由)。链接可以是 1:n 或 n:1 连接、clock/power 网桥或 fifos。
Trace/debug 设计用于外部(在工作台上)使用和自托管用例(前提是有软件可访问缓冲区)。如果需要,后者可以通过 OS 暴露给用户 space。
软件驱动跟踪源的目的是允许开发人员在他们的代码中嵌入 printf
类似的功能。当然,uart 的 printf 很昂贵,还有大量的库开销(在嵌入式应用程序中)、函数调用和格式化成本、uart 的异常处理程序等。STM 跟踪可能要简单得多。在代码的关键位置,对 STM 通道地址的一次存储就足以发送一条消息(因此开销大约为 2-3 条指令)。可以禁用通道,这允许消息传递对时间的影响是静态的(即使在生产代码中)。工具可以标记消息以获得更好的用户体验(我猜你的大部分调试 printf 将是静态消息)。像这样在 Cortex-M 中使用 ITM 有很好的支持,因为捕获硬件可以很容易地与调试探针集成。尽管此跟踪是实时的且开销较低,但粒度降低了,开发人员需要修改关键代码部分以包含检测跟踪。
需要了解 STM 迹线和 ETM 迹线之间的区别?还想了解 coresight 设备中的 source、sink、link 吗?
请分享这些查询的任何 links/blogs
有一个介绍性的“CoreSight Technical Introduction”,但这更旨在为 SoC 设计人员提供一些背景信息。但是,我可以尝试在此处提供一些以开发人员为中心的信息。
STM
或 ITM
都是软件驱动的跟踪源(实际上是 optimised/dedicated UART)。在 Cortex-M 中,有一个额外的硬件跟踪层,它以某种方式补偿较小部分中性能监控计数器的缺失。对 STM 的访问可以相当快,并且软件可以将原始有效载荷转储到特定通道。这比 UART 的开销更低(并且应该安排带宽以允许流式写入而不必担心握手。此跟踪的捕获通常内置于低端工具中。
ETM
要复杂得多。它实时提供程序执行流的非侵入式视图。除了 Cortex-R,这通常只是指令流,并且流被严重压缩。根据设备的不同,可以选择在流中包含时间信息。 ETM 跟踪用于分析、代码覆盖和诊断难题或竞争条件(因为采取异常的顺序等是明确的。)
ETM 还具有触发逻辑,可帮助将捕获范围缩小到感兴趣的特定序列。
CoreSight 是一个架构和一组用于实现 trace/debug 的组件。在这个术语中,STM
和 ETM
是跟踪源。它们以基于字节的协议在宽总线上流式传输跟踪数据。挑战在于从芯片中提取这些数据。数据可以存储在缓冲区中,稍后通过调试接口读出,或者实时流式传输。小型 Cortex-M 设备通常有一个 4 位跟踪端口,这需要 运行 至少核心频率的一半才能跟上。基本 4/8/16/32 位跟踪端口的捕获硬件非常重要,因为它们通常在高频下运行。
在 CoreSight 术语中,跟踪接收器是存储或导出跟踪数据的端点。外部跟踪端口、跟踪到内存桥接器或片上缓冲器。
迹线 link 是互连的一部分(并且大部分只对设计人员可见,除非存在可配置路由)。链接可以是 1:n 或 n:1 连接、clock/power 网桥或 fifos。
Trace/debug 设计用于外部(在工作台上)使用和自托管用例(前提是有软件可访问缓冲区)。如果需要,后者可以通过 OS 暴露给用户 space。
软件驱动跟踪源的目的是允许开发人员在他们的代码中嵌入 printf
类似的功能。当然,uart 的 printf 很昂贵,还有大量的库开销(在嵌入式应用程序中)、函数调用和格式化成本、uart 的异常处理程序等。STM 跟踪可能要简单得多。在代码的关键位置,对 STM 通道地址的一次存储就足以发送一条消息(因此开销大约为 2-3 条指令)。可以禁用通道,这允许消息传递对时间的影响是静态的(即使在生产代码中)。工具可以标记消息以获得更好的用户体验(我猜你的大部分调试 printf 将是静态消息)。像这样在 Cortex-M 中使用 ITM 有很好的支持,因为捕获硬件可以很容易地与调试探针集成。尽管此跟踪是实时的且开销较低,但粒度降低了,开发人员需要修改关键代码部分以包含检测跟踪。