计算机数字化仿真测试设计

时间:2022-06-04 05:53:00

计算机数字化仿真测试设计

1概述

目前,嵌入式计算机系统向着网络化、平台化和智能化发展,原由多个计算机分别完成的任务功能集由单一综合化、集成化的计算机系统来完成[1]。原各计算机完成的使命任务由综合化计算机上相应的硬件模块和软件来完成,模块之间的通信由综合化计算机的高速总线来完成,而且,许多模块还包括FPGA、DSP等。该类嵌入式计算机系统的大多数为强实时、具有关键或重要安全的等级,基于分区高安全可靠操作系统来开发,软件固化或动态加载到相应的模块上,基于总线消息驱动的执行。由于综合化嵌入式计算机系统各硬件模块上的软件基于高速总线自动交互以及各模块软件间的运行时序复杂,传统的测试方法已难以确保各模块软件间的交互和时序、功能协调性、一致性的验证,各种安全型故障模式难以实施充分性的测试,软件安全性测试要求的路径测试难以完成。为了确保综合化计算机系统的软件安全性、可靠性、互操作性和功能处理的正确性,本文提出相应的数字化仿真测试系统,以保证测试的充分性。

2系统框架

数字化仿真测试系统由嵌入式计算机数字化仿真系统、仿真测试支撑框架、仿真测试控制台及系统数据库组成,其系统框架如图1所示。其中,嵌入式计算机数字化仿真系统包括嵌入式系统硬件结构仿真、嵌入式仿真系统运行控制及嵌入式操作系统[2]。嵌入式系统硬件结构仿真以构件技术模拟硬件系统中的基本芯片单元,包括CPU、寄存器、存储器、定时器等,组装这些仿真构件形成有具体功能的模块;嵌入式仿真系统运行控制模块监控所有的仿真构件、构件接口及各个总线,动态维护整个系统的运行,实现信号路由,时钟管理及仿真构件的管理。通过仿真构件、仿真系统运行控制模块及嵌入式操作系统这个3个部分搭建起与真实硬件系统功能相同的仿真系统。下文以此测试框架为基础,重点研究数字化仿真运行环境相关模块的设计。

3数字化仿真环境的设计

3.1体系结构

数字化仿真环境由仿真运行控制器、仿真环境配置器、时钟管理模块、信号路由模块及仿真构件对象集组成,如图2所示。图2数字化仿真系统体系结构仿真环境启动后,仿真控制模块根据仿真环境配置器的配置结果,加载构件的DLL库文件,创建这些即将在仿真环境中运行的对象;同时实例化信号路由器对象及仿真时钟管理对象,信号路由器对象维护所有构件的引脚连接关系,动态地管理信号的传输。仿真时钟管理对象以仿真构件中最高的时钟精度为基本的仿真时钟周期,对所有监控的构件进行时钟同步。仿真控制模块以线程的方式启动构件对象、时钟管理对象及信号路由对象,使它们可以并发运行。

3.2芯片级仿真

嵌入式硬件系统在静态结构上由连接和逻辑功能部件组成[3]。逻辑功能部件包括微控制器芯片、存储器芯片、AD转换器及各种传感器,这些部件功能独立,运行时相互间的影响较小。因此,可以将硬件芯片设计为低耦合、高内聚的仿真构件。仿真构件是数字化仿真系统的基础,对整个系统的性能及扩展性影响较大。因此,采用构件化的技术实现,便于用户对构件库的扩充并且增加了仿真构件的复用性。仿真构件在逻辑结构上可以划分为属性集合功能集。属性集为芯片的GUI特性以及芯片的引脚特性。GUI特性用于支持仿真构件的可视化及模块化配置,引脚特性描述芯片的各引脚传输信号的类型。具有模拟和数字2种。功能集是对芯片的逻辑功能的仿真实现,这些功能的运行会对仿真构件的GUI特性及芯片引脚特性做出相应的改变。

3.3模块级仿真

在芯片级仿真的基础上,产生了用于搭建虚拟系统的各种仿真构件,包括微控制器构件、存储器构件、寄存器构件及串口通信构件等。而嵌入式是硬件系统由各个模块组成,因此需要对仿真构件进行模块化配置。本文设计了仿真环境配置器用于进行仿真构件的模块化配置,生成模块化的虚拟系统。仿真环境配置器图形配置模块和环境配置模块2个部分组成,如图3所示。其中,图形配置模块为用户提供可视化的仿真构件配置途径;环境配置模块生成模块化的配置文件,便于仿真环境动态运行时,对仿真构件的调度与配置。图3仿真环境配置器结构用户在进行虚拟系统的模块化配置时,根据目标硬件系统的蓝图,在仿真构件库中选择对应的仿真构件,将其拖至配置区。在配置区可以获取构件的基本信息,并根据设计需求,修改构件的部分外部特性及电气属性,得到与真实目标系统中硬件部件一致的仿真构件。得到需要的所有仿真构件后,可以用拖放的方式改变构件的图形外观大小及占用区域,使它们能合理的分布在配置区中。然后根据设计需求连接构件的引脚,搭建起数字化的目标系统硬件仿真平台。设计中采用事件驱动的方式,驱动配置器的运行,实现系统的配置功能,如图4所示。其中,箭头代表事件。

3.4仿真运行控制

仿真运行控制器是数字化仿真系统的核心部分,其性能决定了数字化仿真系统与真实硬件系统的逼真程度。仿真运行控制器协调仿真构件集的运行;根据用户的配置结果,在宿主机操作系统上对硬件系统进行虚拟化;为仿真环境中各模块的运行提供仿真时钟,保证运行时序的正确;另外仿真运行控制器为调试工具及测试工具与仿真硬件系统的交互提供支持。其体系结构如图5所示。仿真运行控制器信号路由模块仿真控制模块仿真构件对象时钟管理模块工具对象图5仿真运行控制器体系结构仿真环境启动后,仿真运行控制器创建运行控制器对象和仿真环境配置器对象。依次加载工具、构件的DLL库文件,创建这些即将在仿真环境中运行的对象。然后实例化维护仿真时钟的时钟管理对象及维护信号传输的信号路由对象,使它为环境运行提供服务。接着以线程的形式启动工具、仿真构件、时钟管理对象及信号路由器对象,进入它们的主工作流程。仿真运行控制器的设计采用面向对象的编程思想,所有功能都由对象完成,每个模块对应一个主对象,只能通过对象对外输出的方法访问模块的属性。控制模块是仿真运行控制器的主体,以对象形式管理内部属性和方法,但它主要操作外部对象获取信息或控制其运行,这些部分无法直接访问或操作它,只有在外部启动仿真运行环境时在主线程中创建和实例化。

3.5仿真时钟的实现

虚拟的仿真系统是基于仿真构件的集合,构件采用消息驱动的方式运行,为了保证系统运行时序的正确性,需要提供时钟同步机制[4]。本文设计时钟管理模块,为仿真运行环境中的各个构件提供仿真时钟,保证时序的正确性。仿真时钟的一个tick设定为仿真环境中最小的时钟周期。仿真运行开始,时钟管理模块向所有监控的构件传输仿真时钟t0,各个构件接收到时钟t0后启动构件运行单元,执行一个时钟周期的任务,任务完成后通知时钟管理模块;时钟管理模块接收到所有监控的构件任务完成消息后继续传输仿真时钟t1。整个虚拟的仿真环境以此方式顺序执行。另外,时钟管理模块要能够为系统其他部件提供定时功能。为了保证系统的效率,采用如下所述的Δ时间链算法:要提高查找效率需要良好的数据结构支持,算法中采用散列表来记录所有的构件的定时请求及定时到达请求,如图6所示。NULL指向定时消息列表NULL指向定时消息列表指向定时消息列表指向定时消息列表NULLNULL散列基倍数构件ID线程ID定时器IDNEXT散列基倍数构件ID线程ID定时器IDNULL散列指针图6定时消息散列表散列表的主链为循环链表,其每个节点可以挂接子链表,用于记录定时请求时刻同时到达的构件信息;主链表的长度为散列基数,当定时请求时间较长,超出散列基数时,则将其换算成散列基数的倍数与余数的和,倍数记录在链表节点中,按照余数将链表节点插入到对应的子链表中。这样所有的定时请求都可以记录在循环散列表中,处理定时请求的操作即为循环往复地访问散列表,每次循环中,将子链表节点中的倍数递减,若倍数递减至0,则对应的定时时刻到达,通知相应的构件。具体表述如下(为便于描述,使用了部分符号):Ticks指定时时间的长度;BaseSum代表散列基数;MultipleSum是散列基数的倍数;ComplimentSum代表在当前循环中时钟还要计数多少刻度才触发该定时事件;指针TimerInfPointer指向当前待唤醒的定时消息列表。若新定时请求到达,时钟管理模块记录构件的基本信息,然后计算其在散列表中的位置,计算过程为:MultipleSum=(Ticks+TimerInfPointer)/BaseSumComplimentSum=(Ticks+TimerInfPointer)modBaseSum按ComplimentSum将此节点插入到对应的子链表中,子链表中的各节点按照其MultipleSum的值进行排序。仿真时钟每计数一次,则检查当前散列指针指向的子链表,子链表节点中的MultipleSum为0,则定时时刻到达,通知相应的构件,然后将该子链表中剩余节点的MultipleSum减1,将散列指针TimerInfPointer移向下一个单元,继续处理下一个时刻到达的定时请求。

3.6信号路由的设计

目标板上的硬件部件通过发送和接收物理信号的方式,实现对外的控制和接收外来的触发事件。物理信号在硬件系统中靠电压驱动,其路径由导体(导线)引导[2]。在数字化仿真环境中信号传输通过消息驱动来实现,为了保证信号传输路径的正确性,本文设计路由模块来维护系统的通信。仿真系统动态运行时,仿真构件是一个独立的运行实体,它只需要关心如何把数据输送到自己的引脚上,实际的传输过程由信号路由器来实现。信号路由器要传送信号,首先要找到信号流向通路,即仿真构件之间的引脚连接关系,这些相互间的连接关系在配置硬件平台时已经确定,因此,信号路由器需要在系统配置完成后,根据构件间的引脚连接关建立起仿真系统的引脚信号路由表,当构件从引脚输出信号时,信号路由器查询路由表,找到与该引脚连接的所有构件引脚,将信号组装成消息发送到目标构件。具体设计中,路由表使用多级链表实现,如图7所示。

当构件发出传输信号请求时,信号路由器依次处理该构件的每个引脚,检查每个引脚的连接关系,如果连接对象合法,则针对该连接对象创建一个消息结构保存这个引脚上待传输的信号,把它挂接到连接对象的输入信号链表上,并且记录该结构地址;处理完所有引脚之后,依次向连接的对象发送消息,并通知连接的对象有信号需要接收。当构件接到通知有信号输入请求时,进入临界区,读取消息输入链表,依次取出保存引脚信号的数据结构,把信号填入自己的接收单元,取完信号后退出临界区,进入内部处理过程。

4结束语

针对综合化嵌入式软件测试,本文提出数字化仿真测试方案,论述硬件系统仿真技术,设计数字化仿真运行环境。数字化仿真运行环境提供时钟管理及信号路由服务,使仿真的数字化硬件系统能够动态运行,并且在逻辑和时序上与真实硬件系统保持一致,为嵌入式软件的仿真测试提供了保证。嵌入式系统越来越复杂和集成化,软件在整个系统中所占比重也日益增加,嵌入式软件的仿真测试显得尤为重要,因此,嵌入式系统数字化仿真测试环境有着良好的前景和市场需求。随着嵌入式软件数字化仿真测试环境的不断完善与发展,特别是仿真构件库的不断扩充,数字化仿真的建模速度和通用性都将得到改善。