论文部分内容阅读
数字信号处理器(DSP)性能的增强,给了其更多的用武之地。与此同时,DSP应用代码的复杂性也增加了。为了开发具有鲁棒性的基于DSP的系统,工程师必须考虑软件的易测性,从对单个模块的测试到对整个系统的测试。
基于DSP的系统给工程师提出了几项挑战:
高数据速率:基于DSP的嵌入式系统通常要处理大量数据,通过DSP的流式视频/音频信号的速率可能超过100Mb/s(兆字节/秒)。
随机事件:由于随机与周期中断的合并作用控制着系统,开发人员会发现对实时操作进行仿真比较困难。
编码技术混合:DSP软件集合了C/C++控制代码和手动优化的汇编语言代码,汇编语言代码能够处理数据值,并“紧缩”循环。为了减轻基于DSP系统的测试任务,工程师必须制定连贯的测试策略将其作为全部设计的一部分。从草拟第一幅结构图起,工程师就应思考:“我们如何测试定义好的模块或单元,以及如何包括测试需要的“hook”(见注)?
从模块开始
工程师可以轻松地识别单个信号处理模块——执行特殊信号处理功能的代码——因此这些模块提供了一个良好的出发点。可以在目标嵌入式系统之外分别测试单个模块。工程师可以给一个模块编写C/C++“外套”,这样就可以从标准的I/O设备读取输出向量、调用模块内的功能并将结果写进文件,如图1。
非实时仿真器可以执行一个模块,而单个硬件可以独立于较大目标系统来执行模块。在这类情况下,测试时,将已知向量加到模块,该模块为后面的调试产生数据并报告错误。性能数据,即量度,包括用于处理向量的处理器周期及“进出”模块所需的处理器周期数。量度还可以反映内存的使用量。起码,可靠的测试要用一致性的向量来执行信号处理功能。该向量可以来自国际标准化实体(可以考虑手机和MPEG标准)。或者,工程师可以采用模拟或设计软件来生成测试向量。
为弄清楚处理问题,测试应该包括可导致饱和或翻转状态的输入向量。当大的数值超过寄存器的容纳能力时,产生饱和状态。当寄存器内的数值从1111…11112增大到0000…00002,发生翻转并设置错误标记。
校验控制代码
一般地,信号处理模块或外部事件的输出影响一个系统的关键性的控制软件。这就意味着测试控制代码比测试信号处理模块要涉及更多的操作技巧。
当工程师校验信号处理模块操作正确以后,就可以进行控制代码的测试——也称为集成测试。当控制代码管理系统时,硬件将有效的输入向量输入到系统,系统处理该向量并产生输出向量,该输出向量与公认是正确的向量进行对比。集成测试通常在一个平台仿真器上或应用的硬件内开始,二者均不是实时运行。在确信系统满足设计规范后,工程师将应用系统移植到实时硬件上进行附加测试。
根据系统是否依赖于时实操作系统(RTOS),控制代码测试和校验的技术有所不同。某些RTOS包含有“测试hook(见注)”,工程师可以利用它来确定已经运行了什么线程,何时运行的线程,线程执行的时间等等。此外,RTOS生成的执行指令可以提供数据来帮助工程师校验基于DSP的系统操作的正确性。
有时工程师可以采用一个实时的“遥测数据”通道来进一步了解DSP芯片状态或系统状况。这种类型的通道可以存在干硬件或软件内。保存处理器状态和程序流程变化的片上跟踪缓冲器为软件开发中的调试提供了有价值的信息。
基于软件的系统在开发过程中同样可以良好地工作并且有助于测试实时系统。在系统测试过程中,一种软件遥测系统的环形缓冲区不断用通过以下步骤刷新自身:
·控制代码的监视点数据,
·性能度量数据(MIPS和内存使用数据),
·中间信号处理向量
例如,监视点让开发者知道处理器已经开始执行一个特定程序。环形缓冲区的大小取决于开发者选择记录信息的多少和他们从基于DSP的系统内提取信息的速度。工程师获取了缓冲区的内容,用一个短程序就可以将其内容译成可读的格式。
系统开发者必须确保软件定期将缓冲区的遥测数据通过足够宽的带宽通道输送到外部世界。这种操作可能包括从直接存储器存取(DMA)传递到外部总线或者通过时钟数据恢复(CDR)、LVDS、PCI或其它端口发送。一般地,DSP芯片包括了用于这些通讯的I/0端口。测试脚本可以监视实时遥测数据来确定系统是否满足其设计要求。基于软件的遥测缓冲区需要一些内存和CPU周期,因此它们对性能会产生小的影响。但工程师可以根据他们对系统的详细分析来平衡这种损失。工程师可能觉得发售系统之前减少或消除遥测代码有诱惑力。但是这么做会在校验和使用之间改变软件,并因此违反整个测试进程的原则。
组合
建立实时遥测通道、测试控制代码以及校验信号处理模块需要花费时间和精力。但是一旦完成,工程师可以将单个程序段合并成一个强大的测试套件,它可以整个用于基于DSP的系统。在确信自动校验系统将从模块级开始测试并且在目标系统上进行完全的实时测试以发现错误之后,工程师就可以将重点放在编写代码上。如果开发工程师运用了一套可靠的测试程序,他们可以制定一个时间表来定期校验代码,或许就像每天的日常工作一样。注:hook是一种编程技术,在设计标准计算机绘图系统时,为了提高系统的效率,允许程序员往原有的程序中插入新代码。有挂钩的程序可执行任何附加代码。挂钩功能使建立在该系统上的其他高级模块能提取该系统的内部特征。
基于DSP的系统给工程师提出了几项挑战:
高数据速率:基于DSP的嵌入式系统通常要处理大量数据,通过DSP的流式视频/音频信号的速率可能超过100Mb/s(兆字节/秒)。
随机事件:由于随机与周期中断的合并作用控制着系统,开发人员会发现对实时操作进行仿真比较困难。
编码技术混合:DSP软件集合了C/C++控制代码和手动优化的汇编语言代码,汇编语言代码能够处理数据值,并“紧缩”循环。为了减轻基于DSP系统的测试任务,工程师必须制定连贯的测试策略将其作为全部设计的一部分。从草拟第一幅结构图起,工程师就应思考:“我们如何测试定义好的模块或单元,以及如何包括测试需要的“hook”(见注)?
从模块开始
工程师可以轻松地识别单个信号处理模块——执行特殊信号处理功能的代码——因此这些模块提供了一个良好的出发点。可以在目标嵌入式系统之外分别测试单个模块。工程师可以给一个模块编写C/C++“外套”,这样就可以从标准的I/O设备读取输出向量、调用模块内的功能并将结果写进文件,如图1。
非实时仿真器可以执行一个模块,而单个硬件可以独立于较大目标系统来执行模块。在这类情况下,测试时,将已知向量加到模块,该模块为后面的调试产生数据并报告错误。性能数据,即量度,包括用于处理向量的处理器周期及“进出”模块所需的处理器周期数。量度还可以反映内存的使用量。起码,可靠的测试要用一致性的向量来执行信号处理功能。该向量可以来自国际标准化实体(可以考虑手机和MPEG标准)。或者,工程师可以采用模拟或设计软件来生成测试向量。
为弄清楚处理问题,测试应该包括可导致饱和或翻转状态的输入向量。当大的数值超过寄存器的容纳能力时,产生饱和状态。当寄存器内的数值从1111…11112增大到0000…00002,发生翻转并设置错误标记。
校验控制代码
一般地,信号处理模块或外部事件的输出影响一个系统的关键性的控制软件。这就意味着测试控制代码比测试信号处理模块要涉及更多的操作技巧。
当工程师校验信号处理模块操作正确以后,就可以进行控制代码的测试——也称为集成测试。当控制代码管理系统时,硬件将有效的输入向量输入到系统,系统处理该向量并产生输出向量,该输出向量与公认是正确的向量进行对比。集成测试通常在一个平台仿真器上或应用的硬件内开始,二者均不是实时运行。在确信系统满足设计规范后,工程师将应用系统移植到实时硬件上进行附加测试。
根据系统是否依赖于时实操作系统(RTOS),控制代码测试和校验的技术有所不同。某些RTOS包含有“测试hook(见注)”,工程师可以利用它来确定已经运行了什么线程,何时运行的线程,线程执行的时间等等。此外,RTOS生成的执行指令可以提供数据来帮助工程师校验基于DSP的系统操作的正确性。
有时工程师可以采用一个实时的“遥测数据”通道来进一步了解DSP芯片状态或系统状况。这种类型的通道可以存在干硬件或软件内。保存处理器状态和程序流程变化的片上跟踪缓冲器为软件开发中的调试提供了有价值的信息。
基于软件的系统在开发过程中同样可以良好地工作并且有助于测试实时系统。在系统测试过程中,一种软件遥测系统的环形缓冲区不断用通过以下步骤刷新自身:
·控制代码的监视点数据,
·性能度量数据(MIPS和内存使用数据),
·中间信号处理向量
例如,监视点让开发者知道处理器已经开始执行一个特定程序。环形缓冲区的大小取决于开发者选择记录信息的多少和他们从基于DSP的系统内提取信息的速度。工程师获取了缓冲区的内容,用一个短程序就可以将其内容译成可读的格式。
系统开发者必须确保软件定期将缓冲区的遥测数据通过足够宽的带宽通道输送到外部世界。这种操作可能包括从直接存储器存取(DMA)传递到外部总线或者通过时钟数据恢复(CDR)、LVDS、PCI或其它端口发送。一般地,DSP芯片包括了用于这些通讯的I/0端口。测试脚本可以监视实时遥测数据来确定系统是否满足其设计要求。基于软件的遥测缓冲区需要一些内存和CPU周期,因此它们对性能会产生小的影响。但工程师可以根据他们对系统的详细分析来平衡这种损失。工程师可能觉得发售系统之前减少或消除遥测代码有诱惑力。但是这么做会在校验和使用之间改变软件,并因此违反整个测试进程的原则。
组合
建立实时遥测通道、测试控制代码以及校验信号处理模块需要花费时间和精力。但是一旦完成,工程师可以将单个程序段合并成一个强大的测试套件,它可以整个用于基于DSP的系统。在确信自动校验系统将从模块级开始测试并且在目标系统上进行完全的实时测试以发现错误之后,工程师就可以将重点放在编写代码上。如果开发工程师运用了一套可靠的测试程序,他们可以制定一个时间表来定期校验代码,或许就像每天的日常工作一样。注:hook是一种编程技术,在设计标准计算机绘图系统时,为了提高系统的效率,允许程序员往原有的程序中插入新代码。有挂钩的程序可执行任何附加代码。挂钩功能使建立在该系统上的其他高级模块能提取该系统的内部特征。