分析数字信号处理(DSP )系统测试与调试

时间:2011-06-12

  在软件开发领域,关键但也是无法预料的阶段是调试阶段。在软件调试的过程中有很多要素都举足轻重,而其中重要的则是时间。设置和调试软件所需的时间对于软件的上市时间以及是否满足客户期望都有着巨大的影响,同时还影响着一个在市场取得成功的产品的销售业绩。一个应用的集成必须经过一个由构建、加载、调试/调谐到更改等多个阶段构成的过程。

  嵌入式实时系统的调试既是一门艺术,又是一门科学。用于调试和集成这些系统的工具和技术对于在调试、集成和测试阶段上所需时间的长度有着重要影响。对运行中的系统越了解,我们就能越快发现并修正缺陷。

  要了解系统有一个传统也是简单的方法,即在软件中的某些点添加消息,以便输出有关系统状态的信息。这些消息可以是输出到显示器的“打印”指令,也可以通过LED 或者LED 组闪烁的形式来系统状态和健康度。每个功能或任务都可以通过输出一个状态信息来开始指示是系统将之安排到程序中的某个点。如果系统在某个点出现故障,对于这一输出信息的诊断就可以帮助工程师了解到系统正常状态点的所在,从而确认问题所在。当然,这种方式会导致系统过载,进而影响系统性能。因此,工程师必须在测试完系统后清除这些数据并在销售之前对系统重新验证,或者将系统和系统中测得的代码一起销售。他们必须确保所工程师可以利用更先进的调试方法来减少集成和测试阶段的时间。其中一个方法就是利用“调试监视器(debug monitor)”。调试监视器是一种嵌入到目标应用或集成到微控制器或DSP 内核的相对较小的代码,通过一个串行接口和主机进行通信。调试监视器可以代码、读写DSP 存储器和计数器、设置简单和复杂的断点、单步执行程序并绘制源代码概图。

  仿真的基本原理

  仿真是一种被用在嵌入式系统开发领域的技术。它可以给系统开发者带来集成硬件和软件所需的可控制性和可视性,有效地模仿DSP 处理器的电气特征和性能,同时让工程师更清晰地了解处理器的活动并加以控制。

  仿真器包含了硬件和软件技术。仿真硬件方面由DSP 芯片上的功能构成,它可以采集数据。该数据提供了有关系统活动状态和其它可视性的信息。硬件还需要从DSP 设备上高速获取此类信息,并将数据格式化。仿真器软件则提供了更别的控制,以及一个和主机相连的接口- 一般是一个调试器。调试器让开发工程师可以轻松地从编辑过程(编译、汇编并为某个应用建立链接)过渡到执行环境。

  它从编辑过程中输出数据,并将图象导入到目标系统中。接下来,工程师可以通过调试器和仿真器互动,来控制并执行应用,同时找到并解决问题。这些问题可能是硬件问题,也可能会是软件上的问题。仿真器被设计成一个完整的集成和测试环境。

  仿真器系统组件

  所有的仿真器系统都是由以下三个部分构成的:

  ◆ 片上调试装置

  ◆ 仿真控制器

  ◆ 运行在主机上的调试器应用程序

  图1 一个基本的仿真系统

  图1展示了这三部分的连接。其中主机和一个仿真控制器相连,仿真控制器也连接到目标系统。用户通过IDE 中的调试器来控制目标应用。

  从处理器、仿真器到主机平台的整个开发环境,都会使用DSP 仿真技术。

  在DSP 设备本身,要实现更高的时钟率,就要求仿真逻辑必须是在芯片上,这样它才能够全速运行,并跟上处理器的速率。集成度更高的芯片,总线会被隐藏起来,让工程师无法通过管脚看到。这也使得仿真逻辑必须在芯片上,这样才能接入到系统总线。为此,DSP 厂商都一直在积极地将高端仿真功能集成到它们的DSP产品上。

  下一个组件是仿真器,它用来将目标板连接到主机平台上,并在主机和目标处理器之间传输数据。

  第三个组件也是一个组件是调试器和仿真软件。该软件可以自动配置以匹配DSP 设备,并作为用户接口,让片上系统(SoC)设备的调试变得尽可能简单。

  这些IDE 还支持“插入式”应用的开发,此类应用不仅能控制处理器,还能通过一个高速数据接口显示来自处理器的仿真数据。

  主机可以决定设备到主机之间的数据带宽。主机和仿真器之间的通信决定着数据传输协议的持续数据带宽。产生数据的主机和接收数据的客户端必须拥有足够的MIP 和/或磁盘带宽,来准备、传输、处理和/或存储来自DSP 的数据。

  仿真器的物理特征

  大多数仿真控制器都位于主机外部。仿真器分为通信和仿真两个部分。通信部分负责和主机通信,而仿真部分则和目标连接,控制目标调试功能和设备调试端口。

  仿真器/目标通信

  仿真控制器通过连接线和目标相连。调试、跟踪、触发和实时传输可以通过同一根目标连接线来完成,有时也可以采用同样的设备管脚。当一根连接线无法满足目标系统的跟踪带宽时,就需要多根连接线。所有跟踪、实时数据传输和调试通信可以通过这个链路来完成。仿真器允许目标和仿真器之间可以至少分开2 英尺,以方便DSP 开发者能在各种环境下应用。

  片上仿真

  由于当前精密的DSP 处理器的可视性日益下降,调试功能也被集成到了芯片上-即我们常说的片上调试。片上调试实际上硬件和软件的结合。要在芯片和调试器之间进行通信,DSP 上必须有额外的管脚。要进行片上调试,还要求主系统必须和调试部分以及数据抽取通信并对之加以控制。主软件运行调试器软件,并通过专用接口头信息与片上调试寄存器连接。主调试器以图画形式显示源代码、处理器资源、存储器位置和外围设备状态等。

  片上调试的一些主要功能包括:

  ◆ 中断或插入程序和/或数据存储地址上的调试模式

  ◆ 中断或插入外围设备上的调试模式

  ◆ 通过1 个DSP 微处理器指令进入调试模式

  ◆ 读/写DSP 内核寄存器

  ◆ 读/写外围存储器映射的寄存器

  ◆ 读/写程序或数据存储器

  ◆ 执行1 个或多个指令

  ◆ 跟踪1 个或多个指令

  ◆ 读实时指令跟踪缓冲器

  图2 DSP 上的仿真逻辑可以实现有效系统集成所需的可视性

  图2展示了一个高性能DSP 上的仿真硬件。该逻辑位于DSP 上,可以执行以下功能:

  ◆ 观测-采用总线事件探测器来观测系统中的事件。用户可以通过调试器界面编程选择需要观测的特定事件或情况;

  ◆ 保存-采用计数器和状态机来保存系统中发生的事件;

  ◆ 导向和控制-采用触发器来发送计数器和状态机获取的有用数据;

  ◆ 导出-采用导出功能从系统导出数据。例如,以跟踪逻辑来导出原始程序寄存器和数据跟踪信息;

  ◆ 加速-采用本地振荡器来提高以高时钟速率运行的设备的数据传输率;

  ◆ 导入-以导入逻辑来从主机导入数据,让开发者可以输入用来调试和集成系统的数据文件;

  ◆ 这个仿真系统里还包括一个主通信控制器(host communications controller)。

  它可以连接到控制整个过程的主调试器。调试器可以位于电脑上或者工作站中,也可以集成到一个集成度更高的开发环境中,或者独立运行。电脑或工作站中构建的代码通过一个通信链路导入到目标中。

  仿真控制器(以及调试器)是一种带有两组不同功能特征的调试工具。其中的一组特征可以提供简单的运行控制,让DSP 开发者能控制DSP 处理器的运行。运行控制的例子有启动、暂停、步进和运行至断点。

  调试器是在主系统上执行的一个软件组件。它可以监控和控制整个仿真过程,有以下一些常见功能:

  启动/运行(Go/Run)- 这个命令将启动目标CPU 的执行。执行是从当前程序计数器的位置和寄存器数值开始的。

  停止/暂停(Stop/Halt)- 这一命令用来通知仿真器停止目标CPU 并暂停执行。当执行这一命令时,目标CPU 和寄存器的当前上下文会被保存,以便当处理器再次开始运行时,执行可以继续从原停止点处继续进行。

  单步执行(Single-Step)- 这一命令是启动或运行指令的一个特殊形式,但在下一个指令处有一个断点组。它让用户可以连续步进。在每一步,用户都可以观察寄存器、执行堆栈和其它关于系统状态的重要信息。这可能是寻找软件或固件模块的问题时应用为普遍的命令。

  运行至(Run To)- 这个命令可以在程序某个被认为有用的地方设置一个断点,然后运行直到达到该断点。它可以让用户不必多次单步执行便可达到同样的位置。

  仿真器是直接和DSP 处理器连接的。电气信号被发送到仿真器,仿真器可以接入到处理器,而标准软件调试器则不能。硬件信号发送还可以带来更好的实时控制。仿真器还能实时记录处理器的活动,如果发生问题,开发者就可以有一个系统活动的历史记录来进行分析。

  仿真器相比于标准软件调试器的另一个优势在于它可以调试系统的启动代码。在系统初始化过程中,这是不能实现的。而仿真器可以提供自己的通信接口,能接入到系统的任何部分,达到和CPU 一样的可视性。

  仿真器的另一个优势是可以调试已经损坏的系统。如果目标系统因为某个原因而被损坏,它的操作系统一般会停止运行。此时软件调试器根本排不上用场。仿真器可以保留重要的跟踪信息和寄存器数值等DSP 处理器状态信息,并对该数据进行分析,以确定导致系统损坏的原因。

  基本仿真组件

  当采用一个DSP 调试器来在硬件平台上进行软件调试时,必须执行一些设置程序,以确保目标处理器能够和调试器兼容。仿真的设置包含了两个工具:一个是仿真器本身(例如TI XDS510 或XDS560)-它控制到达目标和来自目标的信息流,另一个是调试器-它是这一信息的用户接口。在仿真设置之后是目标处理器。

  硬件的调试是通过停止DSP 内核来进行的,这样才可以使信息通过JTAG 信息头被扫描进设备并从设备中扫描出来。该信息是通过符合IEEE 1149.1 JTAG 规格的JTAG 接口来串行传输的。在处理器内部有多种可以扫描信息进出的串行扫描链。这个“扫描管理器”的任务是在信息被扫描进出各种处理器的过程中控制该信息,并将之引导在各个调试器窗口之间。

  仿真器主机可以作为扫描管理器,因为它控制着扫描信息在目标和调试器窗口之间的传输。比如,操作系统可以是一台电脑,而JTAG 连接则通过一张ISA 卡来完成,其它配置也可以实现。当主CPU 或一个独立的处理器控制JTAG 扫描信息时,主机需要有关扫描链中包含的设备的信息。


  
上一篇:嵌入式DSP方案中的功耗优化
下一篇:浅谈便携系统的功耗优化政策

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料