RealviewMDK软件仿真器的测试技术研究

更新时间:2023-04-20 18:23:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

RealviewMDK软件仿真器的测试技术研究

■武汉理工大学  库少平 徐良平

常规的嵌入式系统开发过程中,软件的开发和测试都是在目标硬件平台初步开发完成后进行的。Real2

viewMDK的出现,可以使嵌入式系统的软硬件协同开发、同步进行。为了使RealviewMDK的软件仿真器尽可能地接近真实的硬件环境,必须对其进行严格的测试。本文以S3C2410软件仿真器的PWM接口模块和NANDFlash接口模块为例,深入地探讨其测试技术。

RealviewMDK S3C2410 PWM NANDFlash控制器 软件仿真器测试

 摘 要

 关键词

引 言

RealviewMDK(RealviewMicrocontrollerKit)是由ARM公司于2007,ARM公司Keil公司uVision3体[1],能多地仿真市面上流行的ARM芯片,RealviewMDK的设备数据库成员也在与日俱增。为了保证这些加入到设备数据库中的软件仿真器的可靠性,必须对其进行严格的测试。

软件可靠性测试是为了达到或验证用户对软件的可靠性要求而对软件进行的测试,通过测试发现并克服软件中的缺陷,提高其可靠性水平,并验证它是否达到了用户的可靠性要求[2]。可靠性仿真测试是指通过软件和硬件的方法,模拟被测软件的交联系统,仿真一个被测软件运行的真实环境,并在该环境下进行的可靠性测试[3]。这样的测试不仅需要特定的硬件环境,还要考虑在规定的时间是否进行了输入/输出,以及这些输入/输出的结果是否正

确[4],,正确驱动被测软件[5]。

本文以笔者参加的RealviewMDKS3C2410软件仿真器开发项目为基础,具体地结合它的PWM(PulseWidthModulation,脉冲宽度调制)和NANDFlash接口模块,全面深入地研究其软件仿真器测试技术。

1 RealviewMDK的软件仿真器

当前多数基于ARM的开发工具都有仿真功能,但是大多仅仅局限于对内核指令集的仿真,而RealviewMDK的软件仿真器不但可以仿真ARM的指令集,还能仿真包括外部通信与I/O、中断以及片上外设(如ADC、DAC、EBI、

2[6]

Timer、IC、UART、CAN等)在内的整个目标硬件。不仅如此,其强大之处还体现在它的各种调试工具上,例如外围接口寄存器观察窗口、逻辑分析仪、代码覆盖率窗口、执行剖析器与性能分析仪窗口等。通过与这些调试工具进行交互,RealviewMDK的软件仿真器可以精确地仿真各种片上外围接口,以及这些接口与外部芯片通信的过程。

pleGaborFiltersforSegmentingMultipleTextures[J].IEEETransactionsonImageProcessing,2006(10):1219.

[2]李鹏,杨康.Gabor滤波器算法在指纹识别中的应用[J].沈

阳工业学院学报,2004,23(9):628.[3]潘松,黄继业,曾疏,等.SOPC技术实用教程[M].北京:清华

结 论

本文研究并实现了利用Gabor滤波器对指纹图像进行增强的方法。初步的实验结果表明,此算法不但起到了去除噪声的作用,而且增强后的图像几乎无损地保留了原始图像中的特征信息。通过FPGA技术对该滤波器进行硬件加速,大大缩短了系统处理时间,使系统能够满足实时性的要求。

参考文献

[1]WeldonThomasP,HigginsWiliamE.TheDesignofMulti2

大学出版社,2005.

吴良(硕士研究生),主要研究方向为信号与信息处理;何伟(副教授),主要研究方向为现代信号处理

;张玲(副教授),主要研究方向为现代信号处理和数字图像处理。

(收稿日期:2008203210)

18 

2008年第8期

adv@(广告专用) 

S3C2410软件仿真器是最近加入RealviewMDK中

22

的,包括如下一些仿真模块:RTC、PWM、UART、IC、IS、SPI、LCD、DMA、ADC、NANDFlash控制器、看门狗定时器等。其中,每一个仿真模块都对应一个对话框,该对话框包含了相应接口的所有寄存器。当使用S3C2410软件仿真器调试程序时,可以在这些外围接口对话框中观察到每一个寄存器值的状态及其改变的情况;同时,还可以通过修改这些寄存器的值来达到控制程序运行的目的。S3C2410软件仿真器的每一个接口模块都提供了引脚寄存器VTREG,用于记录CPU引脚的状态。这些引脚寄存器的值可以通过逻辑分析仪、调试脚本显示和修改,使得嵌入式软件的调试变得更加简单易行。图1就是通过调试脚本,向S3C2410软件仿真器的ADC模块的引脚ADC2和ADC4分别输入一个锯齿波和方波信号,然后通过逻辑分析仪将这两个引脚寄存器的状态显示出来的仿

真图。

S3C2410软件仿真器的各个仿真模块都包含了大量

图1ADC2和

2 S3C2410软件仿真器的测试方法

软件测试是软件工程中必不可少的一个环节,是软件

质量的一个重要保证,而软件测试方法的好坏又直接影响软件测试的成功与否,进而决定软件的可靠性。同样,S3C2410软件仿真器作为一种仿真软件,也必须用行之有效的方法对其进行测试。下面就来研究这种测试技术。

本质上讲,S3C2410软件仿真器的测试是一种白盒测试技术。由于S3C2410软件仿真器是对整个S3C2410芯片的一种软件模拟,所以测试程序的主要目的是检查该软件仿真器是否能正确地模拟相应的片上外围接口。这就要求测试人员在编写测试程序之前,必须认真仔细地研读S3C2410的数据手册,充分了解和挖掘所测试接口模块的功能特性,从而有针对性地编写测试程序。在软件仿真器的测试过程中,测试环境的搭建是相当重要的,它直接影响着软件仿真器测试的成败;特别是测试通信模块时更是如此,因为这些模块常常需要正确的反馈信号才能正常地工作。为了保证S3C2410软件仿真器测试的可靠性,笔者利用RealviewMDK中提供的逻辑分析仪、信号函数等功能模拟出被测试模块的输入、输出及控制信号,从而仿真出一个接近真实情况的测试环境,然后利用所设计的测试程序对被测试模块进行测试。

 paper@(投稿专用) 

的寄存器、多种功能特性及工作模式,这就决定了每一个

接口模块的测试都必须从寄存器测试和功能测试2个方面进行。

(1)S3C2410软件仿真器各模块的寄存器测试

S3C2410软件仿真器的寄存器可以分为2类:可读写寄存器和只读寄存器。对这2种不同的寄存器应采取不同的测试方法。

首先研究可读写寄存器的测试方法。可读写寄存器的测试应该包含以下3个方面:

①程序读/写寄存器的一致性测试;②程序写入、模拟器界面读出的一致性测试;③模拟器界面写入、程序读出的一致性测试。

程序读/寄存器编写一个函数,,,然后观察模拟器中对应的寄,看写入、读出的数据是否一致。程序读出的一致性测试正好相反,是指向模拟器界面中的某一寄存器文本框中输入某一数据,然后通过程序读取出来进行比较,看写入、读出的数据是否一致。通过这3个方面的测试,可读写寄存器的测试就完成了。

接下来研究只读寄存器的测试方法。只读寄存器的测试不能像可读写寄存器那样简单地进行,必须有针对性地设计一个测试程序,通过该程序的运行将只读寄存器带入某一状态,然后在模拟寄存器窗口中观察只读寄存器值的变化情况。

(2)S3C2410软件仿真器各模块的功能测试

S3C2410的每一个接口模块都有许多的功能点,应将每一个功能点一一拆分出来,然后针对单一的功能点进行测试。在测试功能点时,要适当地结合RealviewMDK中的逻辑分析仪、代码覆盖率窗口、执行剖析器与性能分析仪等仿真工具,观察测试的结果。在模块功能测试的过程中,往往需要有反馈信号,特别是在测试通信模块时,这一需求更为突出。为了解决这个问题,可以通过编写一个信号函数来模拟外部芯片的时序给出反馈信号。还有一点应该注意的是:用于测试各个模块的所有例程必须先在相应的硬件上正确地运行;否则,当测试出错时,就不能确定是软件仿真器的问题。

在明确了测试方法后,接下来以S3C2410的PWM和NANDFlash模块为例,进一步地探讨其测试方法。

3 PWM接口模块的测试

S3C2410软件仿真器的PWM接口模块共有5个

16

2008年第8期

Microcontrollers&EmbeddedSystems 

19 

位定时器,其中前4个定时器具有脉宽调制功能,而最后一个仅用于内部定时器。这些PWM接口模块输出波形的占空比是可以编程控制的,而且它既可以工作在自动重载模式下,也可以工作在单次脉冲模式下。除此之外,第一个定时器还具有死区产生功能。测试过程中,必须对这5个定时器进行全面的测试。

在控制寄存器TCON中开启PWM定时器1的自动重载功能,关闭倒相功能;当测试程序运行后,将会在逻辑分析仪中产生图3所示的占空比为25%

的仿真图。

3.1 PWM接口模块的寄存器测试

PWM接口模块共包括5个只读寄存器和12个可读

图3 S3C2410中占空比为25%的逻辑分析仪仿真图

写寄存器,对每一个寄存器的测试都应该按照第2节所述的可读写寄存器测试方法进行。例如,PWM接口模块定时器1的计数缓冲寄存器TCNTB1的全面测试包括以下3个步骤:

①通过TCNTB1_Test测试函数向PWM软件仿真器的计数缓冲寄存器TCNTB1中写入某一值,然后读出来进行比较。

#definerTCNTB1(3(volatileUINT8T3)0x5100001C)voidTCNTB1_Test(intparam){

rTCNTB1=param;if(rTCNTB1==param)

printf("TCNTB1Read()else

printf("(fail!");

}

PWM接口模块的第5个定时器为内部定时器,它只

有一个功能点,就是产生内部中断。测试这个定时器时,只需编写一个测试函数,判断是否在规定的时间产生一个内部中断。

4 NANDFlashS3C2410NAND/写的过程中

,即每读/写一页的数据时,ECC校验码,Flash控制器还可以利用S3C2410的内部4KBSDRAM支持自动启动模式。S3C2410软件仿真器的NANDFlash接口模块共有6个特殊功能寄存器,其中可读写寄存器有配置寄存器NFCONF、命令寄存器NFC2

MD、地址寄存器NFADDR、数据寄存器NFDATA,只读

②通过测试函数向TCNTB1中写入0x300,然后在

模拟器的对应文本框中观察写入的结果。图2中,椭圆框

内的十六进制数即模拟器的输出结果。

寄存器有状态寄存器NFSTAT、ECC寄存器NFECC。这些寄存器的测试和PWM寄存器的测试完全相同,不再赘述。下面着重研究NANDFlash控制器的功能测试。

NANDFlash控制器的功能测试方法和PWM的功

能测试方法有很大的差别,因为PWM功能模块的测试不涉及从模块,而NANDFlash控制器的功能测试必须使用

RealviewMDK提供的信号函数模拟出一块NANDFlash

芯片。为了进行NANDFlash控制器的功能测试,笔者使

图2 PWM定时器1的计数缓冲寄存器测试结果

用信号函数模拟出一片三星公司的NANDFlash芯片

K9F1208U0B。K9F1208U0B是一个64M×8位NANDFlash存储器,使用内部26位地址寻址方式,即从第0位

③向PWM软件仿真器的TCNTB1文本框中输入某

一值,然后从程序中读出进行比较。

只有经过上述3个步骤,计数缓冲寄存器TCNTB1的测试才算完成,其他可读写寄存器的测试类似。

开始,分4次通过8个I/O引脚进行传送这26位的片内地址。该NANDFlash芯片在写入之前必须被擦除,而且擦除只能以块(1块=32页)为单位,即使只修改一个字节的数据,也需要擦除整个块的内容。而它的读/写操作则是以页(1页=(512+16)×8位=528字节)为单位进行

)的,1页528个字节中,最后的16个字节(又称为“OOB”

3.2 PWM接口模块的功能测试

针对PWM接口模块4个PWM定时器的特性,可以

将其拆分为下面4个不同的功能点:①自动重载和双缓冲功能;②倒相功能;③PWM功能;④死区产生功能。必须对每一个PWM定时器的每一个功能点都进行测试。

例如,PWM定时器1的PWM功能测试方法为:首先设置PWM定时器1的计数缓存寄存器TCNTB1的值为0x400,比较缓存寄存器TCMPB1的值为0x300;然后

用于NANDFlash命令执行完后设置各种状态,另外的

512个字节才真正用于存储数据,且被分成前半部分和后

半部分。可以通过NANDFlash命令00h/01h/50h分别对前半部、后半部以及OOB进行定位,这是通过

NAND

adv@(广告专用) 

20 

2008年第8期

Flash内置的指针指向各个区域的首地址来实现的。

在模拟NANDFlash芯片K9F1208U0B的信号函数中,首先映射出64MB的存储空间,用于存放数据;然后通过RealviewMDK模拟器提供的引脚寄存器VTREG,检测发送给K9F1208U0B的命令,并根据不同的命令调用相应的命令处理函数。整个信号函数的处理过程见下面的程序。

//模拟Nand_K9F1208U0BNANDFlash

MAPV:0,V:0X4000000    //映射用户存储区64MBDEFINEint

CMD

//命令//置准备好状态//延时直到有写操作

signalvoidNand_K9F1208U0B(void){

NF_STAT|=0X01;while(1){

wwatch(NF_CMD);switch(NF_CMD){

case0x00:

Read_Page(Page_ADDR); //读页命令

5 总 结

除了上述的PWM和NANDFlash模块,笔者还完成

了S3C2410的I2S、ADC、RTC以及LCD等模块的仿真测试工作。所有模块的测试都是从寄存器测试和功能测试两个方面进行的,寄存器测试中的可读写寄存器和只读寄存器的测试都分别予以对待,而在测试各个接口模块的功能时,尽量将其拆分成单独的功能点进行测试。只有搭建出一个良好的测试环境,各功能模块测试结果的可靠性才会有保证,所以在功能点的测试过程中,适当地使用了RealviewMDK提供的信号函数机制模拟出相应的外设,同时结合各种调试工具观察测试结果。然而,尽管S3C2410的软件仿真器经过了严格的测试,但是还不能完全取代硬件,更适合于项目开发前期的初步调试工作。

[1].到[J].今日电子,2007(7):

]R.HandbookofSoftwareReliabilityEngineer2

M].McGrawHillandIEEEComputerSocietyPress,1996.

[3]阮镰,刘斌,陈雪松.软件可靠性测试及其环境[J].测控技

case0x60:

Erase_Block(Block_ADDR);//…

  }  }

}

术,2000(2):9212.

[4]刘斌,高小鹏,陆民燕,等.嵌入式软件可靠性仿真测试系统

在测试程序运行的过程中,注意在模拟器窗口中观察

只读寄存器值的变化,同时用代码读出该只读寄存器的值进行比较,以便实现只读寄存器的测试。另外,测试S3C2410软件仿真器的NANDFlash控制器模块的硬件ECC功能应该包括2个方面:

①向模拟的K9F1208U0B芯片中写入1页数据,然后检查ECC寄存器中自动生成的ECC校验码是否正确;

②从模拟的K9F1208U0B芯片中读出1页数据,然后检查ECC寄存器中自动生成的ECC校验码是否正确。

研究[J].北京航空航天大学学报,2000,26(4):4902493.

[5]崔小乐,刘斌,杨顺昆,等.嵌入式软件仿真测试平台的建模

环境设计[J].测控技术,2004,23(2):53255.

[6]ARM公司.RealviewMDK———引领ARM开发工具新潮流

[J].电子产品世界,2007(11):1252127.

库少平(博士、副教授),徐良平(硕士):主要研究方向为单片机与嵌入式系统应用。

(收稿日期:2008204208)

基于GNU为MIPS内核优化的工具链已面市

MIPS科技公司(MIPSTechnologiesInc.)宣布,为MIPS优化的一种基于GNU工具链和EclipseIDE的完整C/C++开发环

境SourceryG++,现已由CodeSourcery,Inc.开始推出。该开发环境可支持所有MIPS内核,包括性能增强的MIPS3224K内核

和超标量体系结构MIPS3274K内核,以及其他优化。它还为Linux应用增加了对非位置无关代码(non2positionindependent

code)的支持,提高了Linux系统的性能。

专门为MIPS设计的SourceryG++是一个基于GNU工具链的完整的软件开发环境。SourceryG++包括GNUC/C++编译器、GNU汇编程序和链接器、运行时间库、源码级和汇编级调试器、支持微处理器调试接口(MicroprocessorDebugInterface,

MDI)与MIPS系统Navigator探针和MIPSsim仿真器的连接,另外还有可选的Eclipse2basedIDE。SourceryG++可以在Win2dows和Linux主机上运行,可用于采用Lite、个人和专业版的bare2iron和GNU/Linux的开发

。专业版本的用户可获得来自CodeSourcery的终身支持。

 paper@(投稿专用) 

2008年第8期

Microcontrollers&EmbeddedSystems 

21 

本文来源:https://www.bwwdw.com/article/yqiq.html

Top