“随着摩尔定律的每转变,设计人员在开发过程的每个阶段都面临着新的复杂程度的挑战。芯片设计师不仅要在块硅片上获得正确的集成电路( IC) 逻辑、性能、功率和产量。
”随着摩尔定律的每转变,设计人员在开发过程的每个阶段都面临着新的复杂程度的挑战。芯片设计师不仅要在块硅片上获得正确的集成电路( IC) 逻辑、性能、功率和产量。
此外,系统开发人员必须将首次成功扩展到板级参考设计、引导代码、操作系统 (OS) 端口和应用软件,更不用说闪存编程、制造测试方法和现场支持了。同时,满足紧迫的期限和成本目标从未如此具有挑战性。
改变瓶颈随着硬件和软件开发技术的发展,系统测试和调试的性质也在不断发展。摩尔定律不仅影响了处理器和内存设计,而且在集成系统功能、将操作系统(或实时操作系统 (RTOS))集成到嵌入式系统以及捆绑到嵌入式系统的应用软件数量方面也发生了类似的变化。终产品。
让我们倒计时。在大规模集成 (LSI) 组件(至少 1000 个门)时代,中央处理器( CPU) 只是 CPU,受到当时半导体工艺技术、功耗和产量的限制。
调试在很大程度上仅限于集成硬件功能、调整芯片间时序和验证逻辑功能的过程。系统软件大约有数百 KB,并且受到预算内存空间中可容纳的代码量的限制。
时代变了。如今,内存空间和高CPU时钟频率“几乎”。设计、调试和测试挑战已经从硬件组件集成和调试发展到系统硬件设计的仿真,先于 SOC 流片,再到系统软件建模,然后是数百兆字节 (MB) 的集成) 系统软件。
在系统级,当今的大多数嵌入式设备都需要功能齐全的嵌入式操作系统,运行多个由内存管理单元 (MMU) 管理的应用程序,并且越来越多地提供某种网络功能,例如局域网 (LAN) 或无线网络连接用于控制或网络访问数据库或语音、数据和视频服务。
当代嵌入式解决方案的是具有数百万个门的片上系统 (SOC),将高速缓存、暂存器随机存取存储器 (RAM) 和外围功能集成到一个芯片上;许多组件接口被埋在芯片内,不再可用于系统测试/调试的引脚或板级。CPU 内核现在以数百兆赫兹(MHz) 的频率运行,并集成了许多硬件接口,因此历史测试方法已不复存在。
JTAG 的救援——边界扫描测试联合测试行动小组 (JTAG) 在 1990 年代开始通过标准化串行扫描链方法(JTAG;IEEE 1149.1)来访问片上资源和内置的额外移位寄存器来解决板级测试问题进入每个 IC 的I/O路径以进行边界扫描测试。
在边界扫描测试出现之前,很难调试芯片组件下方的潜在焊料凸点问题。在电路板组装之前,每个 IC 都经过测试以确保其完美运行。因此,如果组装好的印刷电路板PCB不能正常工作,则故障一定是由印刷电路板中的焊桥、间隙或缺陷引起的。但是,如果缺陷位于芯片组件下方,无法看到或不易修复怎么办?
边界扫描测试方法解决了这个问题。如图 1 所示,添加了一条通过 I/O 寄存器的串行扫描路径,并由每块板独有的复杂测试程序执行,以帮助识别有故障的芯片或其他设备,以便对它们进行返工或更换。在图 1 的图表中,每个灰色框代表一类设备功能,例如闪存、外围设备、I/O 端口等。
图 1. 用于边界扫描测试的 JTAG 连接JTAG 方法提供了一种测试非常复杂的系统的方法,同时保持较低的引脚数。具体来说,无论扫描链寄存器路径有多长,IEEE1149.1 规范只需要 5 个引脚用于 JTAG 连接。JTAG 测试访问端口的标准引脚功能包括:
TRST 测试复位(从 JTAG 探针输出到芯片以复位 JTAG 测试逻辑)TCK 测试时钟(从 JTAG 探针输出到芯片以设置 JTAG 扫描速率)TDI 测试数据输入(串行测试数据输入到芯片)TDO 测试数据输出(串行测试数据从芯片输出)TMS 测试模式选择(通过 TCK 上升沿的状态确定运行或调试模式)几家公司几乎完全专注于边界扫描测试,专注于 JTAG 硬件连接设备和基于主机的测试软件工具,以使测试程序适应每个电路板设计。
JTAG 的第二个角色——用于软件/硬件调试的 CPU 内核访问鉴于 CPU 处理器内核现在通过内核中的集成缓存、本地片上总线、动态分配内存的 MMU 以及其他 SOC 外设和 I/O 块,JTAG 路径提供了到 CPU 内部调试逻辑的直接连接。因此,我们现在有了一种观察和控制程序执行的方法。由于缓存和外围设备已移至芯片上,因此调试逻辑也必须移至芯片上(下图 2)。
图 2. 用于软件调试/开发的 JTAG 连接通过这种直接内核访问,基于主机的调试器软件现在可以断言“调试异常”,重定向处理器以从调试逻辑寄存器而不是程序计数器获取下一条指令,从而有效地控制处理器以执行软件调试操作:
* Run-control: Start, Stop, Single-Step, Step Into/Over (source or instruction)* 设置硬件和软件断点* 指定在断点处要满足的条件或要执行的脚本* 控制目标系统的复位和初始化*要调试的代码或要编程到闪存中的代码*执行闪存编程和其他半托管实用程序请注意,在上述两种应用中,边界扫描和软件调试,JTAG 的作用只是提供物理层通信接口,类似于ISO开放系统互连模型中的 PHY 层。
支持哪些调试功能的协议体现在调试逻辑中,设计到 CPU 内核和主机上运行的调试器软件功能中。
JTAG 调试优点使用具有 JTAG 访问权限的调试器的主要优点是:
* JTAG 连接提供对否则隐藏的 CPU 内核的直接访问* JTAG接口不占用系统 I/O 端口(串行、以太网)* JTAG 调试方法使用很少或没有系统内存分配(如在监视器中)* 没有监视器会随着系统崩溃而崩溃(在电路板启动时没有用)* JTAG 连接不需要目标系统电源(一些仅 USB 探头除外)* JTAG 调试器可以在不停止 CPU 的情况下“窃取周期”来读取寄存器/内存(假设 CPU 中内置的调试逻辑提供此功能)* JTAG 调试会话可以重置和/或初始化系统(注意:系统重置不是 JTAG 的一部分。相反,它是使用 JTAG 进行远程调试的附属物,可以通过网络远程重置 JTAG 探针和目标.) * JTAG 调试器可以在不干扰系统的情况下连接到调试逻辑JTAG 调试限制JTAG 调试连接并不能解决世界上所有的调试问题,因为存在一些严重的限制:
1) 通过 JTAG 代码并不是大型程序 (>20MB) 的快方式,尤其是对于依赖 10/100BaseT 以太网访问的目标系统。
2) 多核系统调试,其中多个 CPU 内核以菊花链方式连接在同一个扫描链上并且可以单独访问,但实现同步调试操作需要额外的片上硬件来避免与 JTAG 操作相关的打滑。
随后,在发出异步JTAG 停止命令后可能会经过数百个 CPU 周期。这些功能的示例现在开始出现,例如,Cavium Networks Octeon 系列中的全局处理器间控制逻辑,具有多达 16 个64 位cnMIPS 内核。
3)“Printf”仍然为提取各种调试状态提供了一个简单的补充。
其他调试功能并非所有调试功能本身都使用 JTAG 扫描链。例如,一些处理器包括收集跟踪信息的能力,这是一种非常有价值的调试工具,因为它可以通过分支和中断跟踪执行,通常可以节省数小时或数天的时间来寻找特别虚幻的错误。
在代跟踪实现中,第二个调试逻辑块以流水线时钟速率(片外和板外)卸载跟踪数据,以便在用于控制 JTAG 操作的同一调试探针中收集。
原始的 ARM 嵌入式跟踪宏单元 (ETM) 和 MIPS EJTAG 调试逻辑的 PCTrace 组件均未使用 JTAG 来上传跟踪数据。两者都使用 JTAG 来设置操作模式,但每个都有自己独立的并行总线、跟踪协议和时钟线,可在 CPU 运行时卸载跟踪数据。
这为三个限制奠定了基础:(1) 可靠地收集有效数据的频率,(2) 在芯片上添加多达 20 个额外焊盘、封装上的引脚以及使调试探针成本加倍的成本,以及 (3 ) 没有实用的方法来在具有多个 CPU 内核的 SOC 中实现跟踪收集。
片上跟踪缓冲器下一阶段的跟踪技术开发使用片上跟踪缓冲器来收集有关程序执行流的数据。这种方法带来双重好处。首先,它支持以CPU 时钟速率收集跟踪数据。同时,这种方法将成本降至,因为跟踪数据是通过用于正常“运行控制”调试的相同 JTAG 扫描链路径/引脚上传的。
ARM 的新嵌入式跟踪缓冲器 (ETB) 和 MIPS 使用跟踪控制块 (TCB) 的新 PDTrace 为后续主机处理提供了全面的跟踪信息,尽管芯片面积和成本有所增加。
英特尔 XScale 应用处理器(IOP、IXC、IXP 和 PXA)在其实现中使用了这一主题的创造性变体。分支数据和分支计数数据不是收集每条指令的大量跟踪状态信息,而是收集在一个小得多的片上跟踪缓冲区中。根据这些数据,可以重建执行流程,只是没有实时标记可用。
根据所使用的技术和片上缓冲区的大小,可以显示的跟踪数据量需要权衡取舍。因此,适用通常的成本与收益权衡。一定量的跟踪信息总比没有好,在典型的调试场景中,应该考虑多少才是真正足够的。
虽然大量的跟踪信息提供了一种无需“检测”代码(这可能会影响性能)就可以分析代码执行情况的方法,但与之相关的开发工具成本也会增加。
表 1:JTAG 在整个开发和产品生命周期中的适用性和优势其他 JTAG 应用除了硬件/软件调试和边界扫描测试,JTAG 连接还被各种工具供应商用于直接在线闪存编程、发送命令脚本以在目标板上执行、编程现场可编程逻辑器件( FPLD),并为数字信号处理器(DSP) 等其他功能块提供类似的专用调试功能。许多复杂的 IC 包括内置的自测功能,这些功能通过 JTAG 启动和后分析。
分享到:
猜你喜欢