英文版 English Version:Taking the fear out of silicon debug
现代 SoC 可谓工程上的伟绩,不断地从有限的功率与面积中榨取更多性能。 然而,复杂性是可靠性的死敌。
“调试一段代码要比当初写这段代码难上两倍。 所以,你把代码写得无比聪明,你也必定不会聪明到能够对其进行调试。”
— Brian W.Kernighan 和 P. J. Plauger《The Elements of Programming Style》(编程风格之要素)
随着 SoC 复杂性继续以指数级加剧,只有将一些高级调试功能内建在在 SoC 中才是明智的做法。我们都熟悉这样的理念,“亡羊补牢,贵在及时”,对调试而言尤为如此;问题发现得越晚,解决起来就越费心费时,代价也会越高。 可见性是系统设计师的宝贵资源,因为它能给予他们机会,尽早查明错误并通过细微改变来修改 SoC,从而优化其性能。 芯片上可见性可充当识别障碍的筛选流程。
一部分 SoC 错误一般通过数据损坏或系统死锁体现出来,仅在一系列因素合力造成故障时显现。 因素可能多种多样,比如:超出了制造限度,引入了位错误,复杂的真实世界软件执行了未验证的全新空间,或者在多个无序事务之间出现争用状况等。
如果你的设计遇到了罕见的问题,特别难以重现和诊断,你就必须要部署一些工具,帮助你尽快找到问题的根源。 几乎显而易见,仅通过在你的设计部件模拟器上运行简单的测试案例不可能找到隐匿在芯片中的错误。
多核处理器和缓存一致互连的复杂性意味着,大部分过去通过 CoreSight 嵌入式跟踪宏单元 (ETM)显现的东西,基本上属于程序员的视图,现在已隐藏在 IP 块内部。
基于这样的想法,ARM 开发了一件全新的武器 CoreSight™ ELA-500 嵌入式逻辑分析器,添加到 CoreSight 片上调试与跟踪武器库中,为系统错误提供更加准确的诊断。 顾名思义,这是一款可嵌入在 SoC 中的类逻辑分析器 IP 块,能够监控最多 12 个包含 128 个信号的群组,通过类断言条件并利用小型嵌入式 SRAM 生成触发器,收集选定信号的最新跟踪记录。
第一步,查明你的系统陷入了怎样的状态,出现了什么非法或可疑的状况。 倘若从踪迹方面描述调试,这就如侦探通过 CCTV 摄像头进行破案一般。 为提供这方面的帮助,ELA-500 内含了一种设置复杂多状态条件触发器的机制。例如:
ELA-500 提供了多个用于发现任何恶意状况的工具:
图 1: ELA-500 中的触发器设置
第二步,开始查看围绕此可疑状态或状况发生的情况,这可通过将选定信号状态存储到 ELA-500 专用 SRAM 中(可在四到十亿以上跟踪数据条目间配置)完成,或者通过在 ELA-500 外部触发另一个操作来实现。
每个触发器状态可以触发最多 8 个可编程输出操作,例如: 停止时钟、进入调试状态、启动/停止信号跟踪、触发另一逻辑分析器或 ETM,或者断定 CPU 中断。
可以从收集的信息中设置新的触发条件,以便查看正在出现哪些其他的意外状况或状态,所以可通过重复 1 、2 两个步骤来确定导致错误状况的事件链。
对于特别极端的情形,甚至可能需要与触发条件相关的进一步可见性,只有通过扫描链转储才能看见。 所以,第三步是在 ELA-500 上编定停止时钟,然后使用扫描链转储和 SoC 扫描链方面的信息来提供确切的状态,或者扫描链中 SoC 内部的任何及所有寄存器。 ELA-500 在此提供了要分析的扫描链转储的精确度,所以并不需要进行许多这样的费时操作。
ELA-500 可以监控你与其输入端连接的任何信号。 SoC 设计师将从连接来自 ARM IP 和专有或第三方 IP 的信号中获益。 典型的设计可能包含部署多个 ELA-500 来监控 SoC 的不同领域的信号,如图 2 中所示,一个用于主处理器群集,一个用于缓存一致互连,另一个用于 SoC 设计师选择的其他信号。
图 2: 系统中部署 ELA-500 的示例
图 2 显示从各个 ELA 运行时钟控制器的时钟停止请求(红色),以及进/出 CoreSight 交叉触发器接口 (CTI) 和交叉触发器矩阵 (CTM) 的触发器连接(黑色)。 调试 APB 总线用于设置触发条件以及从 ELA 的 SRAM 读回内容,受调试工具(如 ARM® DS-5™ 调试工具)的控制.
为连接至 ARM IP,提供逻辑分析器 IP 套件 (LAK-500A),它带有针对该 IP 的一组预选信号。 它们中的第一个是近期发布的 Cortex®-A72 处理器,确保 ELA-500 能够以 Cortex-A72 的最高运行频率采样信号,同时不对处理器的运行产生影响。
LAK-500A 逻辑分析器 IP 套件包含以下所列:
观察接口信号提供如下所列的调试可见性: 各个核心至 L2 接口、电源管理接口,以及 L2 内存系统电源管理接口。 核心至 L2 接口提供 L1 至 L2 未命中物理地址的可见性,以及下列事务详情:
计划在未来支持新的 ARM Cortex-A 和 Mali™ 处理器,以及 CoreLink™ CCI 缓存一致互连,其中可以观察运行中的事务和侦听流量。
CoreSight ELA-500 提供导致死锁和数据损坏等的状态的可见性。 它提供对 CPU 负载、存储、投机提取、缓存活动和事务生命周期,以及通过现有 ETM 指令跟踪无法可见的属性。 这为查找极端错误的提供了更大的范围,不再因为发现过晚而带来潜在的灾难。
ELA-500 可以监控 SoC 范围的错误状态和危险状况,提供设计内部死锁的可见性,而不必重新排序至复杂的扫描链转储分析,也提供无效访问设备内存的案例的可见性。 ELA 可以提前定位数据损坏,而传统的超时则为时过晚,因果关系事件则通常会丢失/改写。 我在与芯片调试专家 Mark LaVine 的视频访谈中更加深入地探讨了 CoreSight ELA-500 的一些使用案例。
在你的 SoC 遭遇灾难性错误时,所有这一切均能确保你能利用到只有芯片恢复、设备上完整运行软件时才有的最快速调试途径。
如需 CoreSight ELA-500 的完整规格,请参见 ARM 信息中心。
更多信息请见 CoreSight ELA-500 页面