基于VTEST的TMS320C3x指令集模拟器设计

2013-09-08 10:18郭向英张西超
计算机工程与设计 2013年6期
关键词:穿线外设译码

郭向英,盛 庄,张西超

(北京控制工程研究所,北京100190)

0 引 言

VTEST是一个运行在X86宿主机上的嵌入式软件仿真测试开发平台[1,2],可用于构建虚拟的软件运行环境,目前主要应用于航天嵌入式软件的测试过程[3]。VTEST的核心是一个指令集模拟器[4,5],用于在软件层面对目标计算机的各个组成部分,包括目标处理器指令集、中断控制器、外设等进行全系统模拟,从而使得软件能够在不做任何修改前提下运行于不同体系结构的计算机。在嵌入式软件的开发过程中,以指令集模拟器为核心的仿真环境能够提供一个接近于真实目标机的运行环境,使软件开发能够与硬件开发同步进行[6]。TMS320C3x是RISC类型DSP处理器,可以在一个周期内完成整数或浮点数乘法和算术逻辑单元的并行操作,其家族成员包括:C30、C31/LC31、C32和VC33。本文第一部分针对TMS320C3x指令寻址模式较多的特点,提出了双线代码指令模拟技术,该技术能兼顾指令模拟效率与模拟器实现的复杂度;第二部分对中断处理机制进行了研究,给出了中断响应模拟策略;第三部分基于VTEST提供的定时机制设计了事件驱动外设模拟方法;第四部分验证了所设计模拟器的指令执行速度,并测试了模拟中断和外设时对模拟器性能的影响。

1 指令集模拟

1.1 纯字节解释与穿线代码

纯字节解释是一种比较简单的模拟器实现方法,其核心是一个循环,反复执行取指、译码和执行过程[7]。由于解释一条指令需要经历取指、译码和模拟执行3个阶段,因此尽管这种方法易于实现,但缺点是指令模拟的效率非常低。常见的改进方法是将译码和模拟分成两个阶段,译码时将目标码翻译成中间格式代码并进行缓存,模拟执行时直接读取中间码,因为目标码往往被设计成更适合机器使用,而中间码则被设计成更利于解释器使用[8]。

在这些改进方法中,运用较多的一种技术是穿线代码,其执行过程与硬件执行指令的特点类似,如图1所示,在译码阶段确定指令对应的模拟程序,一条指令的模拟程序执行结束后直接跳转到后继指令的模拟程序,节省了不必要的循环执行开销。与纯字节解释方法相比,前者是一次译码,一次执行,后者是一次译码,多次执行[9]。

图1 穿线代码

1.2 双线代码

TMS320C3x的指令共有四组寻址模式,每组模式可使用至少两种寻址类型,如图2所示,其中间接寻址又分为相对间接寻址、IR0索引或IR1索引间接寻址,以及两项特殊的间接寻址,共计26种子类型。针对这些指令特点,使用穿线代码技术开发指令集模拟器时,译码阶段一般会选择下面两种方案之一进行处理:

方案一:译码时不对组寻址模式和寻址类型进行解析,指令模拟执行时在模拟程序中进行相应地解析工作;

图2 指令寻址模式与寻址类型

方案二:对指令的每种寻址方式分别编写寻址解析程序,译码时解析出寻址方式并确定相应的指令模拟程序,模拟程序执行时不再进行寻址方式解析;

上述两种方案各有优缺点,第一种方案的优点是针对每条指令只编写一个指令模拟程序,模拟器开发的工作量小,缺点是每次执行时需要重复对指令进行寻址解析,模拟速度较低;第二种方案的优点是执行时不需要进行寻址方式解析,模拟速度较快,缺点是需要为一条指令编写30多个模拟程序,模拟器开发工作量较大。

综合考虑上述两种方案的优缺点,可以采用一种兼顾指令模拟效率和模拟器开发工作量的折中方案,即为每条指令编写一个模拟程序,但针对每种寻址类型分别编写寻址解析程序,在译码阶段解析出指令的寻址方式,并将寻址寻址方式对应的寻址解析程序地址与指令模拟程序地址一起缓存。模拟指令执行时,不必再进行指令寻址方式解析,而是直接进入相应的寻址解析程序序取出操作数,然后跳转到指令模拟程序,其执行过程如图3所示。

图3 双线代码

这里将这种方案称为双线代码,它是对穿线代码技术的一种改进。采用双线代码技术模拟指令时,缓存的中间码包含两条线,一条线指向寻址解析程序,另一条线指向模拟程序,指令模拟执行时须沿着这两条线先后执行。相对于第一种方案,编写模拟程序的工作量没有变化,只是在译码阶段增加了对寻址处理程序的缓存工作,模拟器的空间复杂度有所升高,但模拟执行效率却可获得较大提升;相对于第二种方案,双线代码多了一次跳转,指令模拟执行时会增加3条X86机器指令,速度会略有降低,但由于针对每条指令仅需编写一个模拟程序,因此,可节省90%以上的模拟程序开发工作量。

1.3 中间码格式

由于穿线代码将译码和调度执行服务程序分成两个独立的阶段,其中译码阶段对目标指令进行解析并缓存结果,调度执行阶段根据缓存的中间码直接进行模拟执行,因此要求中间码包含足够的信息以满足执行的需要。一般情况下,每个中间码都包含两个信息,一个是执行时应调用的模拟程序,另一个是调用时需要传递的参数。

对于双线代码,除了上述两个信息外,还需要一个指示寻址解析程序的信息。使用双线代码模拟时中间码的结构如图4所示,这个结构体主要包含3个参数,其中参数parms存放模拟指令时需要的输入参数,如源寄存器、目的寄存器等,参数routine1指示寻址解析程序地址,参数routine2指示指令模拟程序地址;执行阶段以param作为输入参数,沿着routine1、routine2两条线进行指令模拟。

1.4 特殊中间码

图4 双线中间码结构

TMS320C3x有一些特殊的指令,如延迟分支、RPTS等,它们的操作不是在一个机器周期内完成,后继指令执行时仍受其副作用影响。如果在每条指令模拟时逐项判断当前是否存在某种特殊情况需要处理,将对模拟器的性能产生较大影响。为避免这种情况,一种处理方式是在特殊指令所影响的位置插入特殊中间码,通过特殊中间码完成相应的后续操作。下面以延迟分支指令为例说明特殊中间码的设置方式及工作机理,如图5所示,指令 (1)是一条延迟分支指令,其执行时如果标志位Z没有置位,则顺序执行,否则跳转至寄存器R0所指向的目的地址,但跳转操作并不立即执行,而是在延迟3条指令之后,即在指令(4)执行之后,指令 (5)执行之前才跳转,所以将此位置的中间码替换成特殊中间码,在该处根据BZD指令执行时的判断情况控制程序顺序或跳转执行。

图5 延迟分支特殊中间码

2 中断模拟

2.1 中断识别

TMS320C3x包含多个外部和内部中断,外部中断有INT0INT3,内部中断包括DMA、定时器和串口中断,其中C30、C31中断向量地址是固定的,C32中断向量地址是可配置的。TMS320C3x通过3个寄存器来控制中断:状态寄存器ST、中断使能寄存器IE和中断标记寄存器IF。当中断产生时,中断标记寄存器IF标记位被置位,如果状态寄存器ST的全局中断控制位GIE处于使能状态,且中断使能寄存器IE相应的位被使能,则响应中断。

模拟器运行时,必须及时识别中断并模拟中断影响过程[10]。为了检查指令模拟执行后是否存在待响应的中断,需要在穿线代码层进行判断,但如果在穿线代码执行时每次均通过ST、IE、IF这3个寄存器来识别是否存在待响应的中断,需要增加下面操作:

在X86机器上,实现上述操作至少需要3条读内存指令、一条位运算指令、一条逻辑运算指令以及一条条件转移指令。由于模拟每条指令均要进行上述判断,所以使用这种中断识别方式会对模拟器性能产生较大的负面影响。一种更快的方式是定义一个中断变量,用于标记当前是否存在待响应的中断,只有在中断发生时才根据ST、IE和IF判断产生的中断是否需要响应,是则设置中断变量对应的标记位,否则等待中断响应条件满足后再进行设置。穿线代码执行时直接通过该中断变量来识别是否进行中断处理,这个过程只需要两条X86机器指令。

2.2 中断响应过程

中断响应模拟过程如图6所示,若执行至某个中间码时需要响应中断,在该指令执行结束后,首先进行中断现场保护,包括非使能全局中断控制位GIE、清除中断标记位、当前PC值压栈等,然后转到中断向量入口地址执行;模拟运行至服务程序出口时恢复现场,返回被中断位置继续执行。

图6 中断响应过程

3 外设模拟

外设模拟是模拟器开发中必不可少的部分,同时外设模拟机制的选择对模拟器性能有着重要的影响。TMS320C3x共有3种外设:定时器、串口和DMA[11],但不同型号的外设数量不同,具体情况见表1。

不同程序使用的外设可能不同,模拟器可根据VTEST提供的相关配置信息仅对程序实际使用的外设进行模拟。为降低外设模拟对模拟器性能的影响,设计TMS320C3x模拟器时采用了事件驱动方式来控制外设运行,即模拟器运行中需要外设响应时才触发外设模拟操作,而非每条指令执行后实时更新外设状态。

表1 TMS320C3x外设配置

3.1 定时器

定时器通过3个映射到内存的寄存器实现定时控制,它们分别是周期寄存器、计数寄存器和全局控制寄存器。周期寄存器用于设置定时周期,计数寄存器中是增量计数器的当前值,该值与周期寄存器的值相等时清零并触发定时中断。全局控制寄存器中有3个控制位:和GO,控制定时器运行在脉冲或时钟模式,控制定时器的使能位,该位在使能状态下定时器才运行,GO用于重置计数寄存器并启动定时器运行。如果定时器已经在运行,那么修改或GO控制位均会影响定时事件的到达时刻。定时器有两种基本工作模式:脉冲和时钟,两种模式下时钟周期的计算公式分别如下:

T脉冲模式= 周期寄存器/f(定时器时钟周期);

T时钟模式= (2*周期寄存器)/f(定时器时钟周期);

基于VTEST的模拟器定时机制如图7所示,模拟器根据VTEST设定的时序周期在执行过程中定期向VTEST发送当前的时序信息,定时器使能后,向VTEST发送定时启动请求,由VTEST计算并反馈定时到达时刻,虚拟定时器对到达的定时事件处理后再向模拟器发送相应的中断请求。为描述基于VTEST的定时机制的模拟过程,我们定义下面几个变量:

Tb:向VTEST发送定时请求时模拟器运行时刻;

Tc:当前模拟器运行时刻;

Tp:定时周期;

Te:定时事件到达时刻;

这几个变量之间的关系如图8所示,其中Te=Tb+Tp;模拟器向VTEST发送当前的Tc信息,当Tc等于Te时VTEST发送定时到达消息,并设置此时的Te为下一次定时周期的Tb,再次经过Tp后将到达下一次的Te,如此循环往复,直至定时器非使能或模拟器停止。

采用事件驱动方式进行定时模拟时,由于没有直接使用计数寄存器,所以未对其值进行实时更新,但有时需要使用该值 (如利用VTEST调试时),因此虚拟定时器还要求具备根据定时状态逆向计算计数寄存器值的能力,计算公式如下

3.2 串 口

TMS320C3x为每个串口提供了八个映射到内存的寄存器:全局控制寄存器、两个I/O引脚控制寄存器、3个发送/接收定时寄存器、数据发送寄存器和数据接收寄存器。在全局控制寄存器的控制下,串口按照发送/接收定时寄存器设定的频率通过接收和发送寄存器收发数据。串口发送/接收的定时原理与定时器相同,因此可用上节所述方法模拟串口;但与定时器不同的是,定时器的计数和周期寄存器是32位寄存器,串口收发定时用的是16位周期和计数寄存器。

3.3 DMA

TMS320C3x的DMA通道具有4个寄存器:控制寄存器、源地址寄存器、目的地址寄存器和传输计数寄存器。DMA的工作模式有4种:读同步、写同步、读写同步和无同步,可通过控制寄存器的SYNC(同步模式)位进行设置。对于前3种同步方式,DMA是在中断事件的驱动下进行某种操作,因此可在中断响应模拟时进行DMA模拟;对于无同步模式,可利用VTEST创建一个周期定时器,在每次定时事件到达时进行DMA模拟。

4 实 验

为验证模拟器的性能,使用航天某型号的测距软件对模拟器性能进行了测试,处理器主频为40MHz,内存等待周期为4。实验所用计算机的处理器主频为3.00GHz,型号是IntelCoreTM2Quad CPU Q9650,内存大小是4G,操作系统是 Windows XP。通过实验,测试了模拟器的速度,并先后设定了不同的定时周期来实验模拟中断和外设对模拟器性能的影响,结果如图9所示。

图9 模拟器性能的影响

从图中可以看出,随着定时周期的缩短,模拟器的仿真速度会逐步下降。在定时器非使能情况下,模拟器仿真速度可达234MHz,但在定时周期为10us时,仿真速度仅为36MHz,造成这种情况的原因有3个:一是定时周期越短,VTEST要求模拟器发送时序信息的周期也越短,导致模拟器向VTEST发送时序信息的开销大幅增加,对其性能产生了负面影响;二是由于虚拟定时器与模拟器工作在同一线程,定时事件频繁到达,CPU抢占现象明显;三是响应中断的次数增多,对模拟器性能产生了负面影响。

5 结束语

本文提出的双线代码指令模拟技术专门针对TMS320C3x指令寻址模式较多的特点,能够兼顾指令模拟效率与模拟器开发的复杂度。同时,在设计模拟器时,充分利用了VTEST的扩展功能,模拟器能够根据相关配置信息仅对程序实际使用的外设进行仿真,对于未使用的外设,其对模拟器性能的影响几乎为0。依据本文方法设计的TMS320C3x模拟器已经在航天型号软件的测试中有所应用,模拟器的速度能够很好地满足测试需求。但通过实验也发现在中断与外设触发频率较高情况下,模拟器性能会有所下降,因此中断与外设模拟机制还存在一定的改进空间。

[1]WANG Lize.Research on an execution framework of embedded software testing system [J].Measure & Control Technology,2010,29 (12):82-86 (in Chinese).[王立泽.嵌入式软件测试系统执行框架研究 [J].测控技术,2010,29 (12):82-86.]

[2]CHEN Lin,ZHANG Yuping.Research and implementation of an automatic embedded test harness [J].Avionics Technology,2011,42 (1):29-33 (in Chinese). [陈琳,张育平.嵌入式软件自动化测试平台的研究与实现 [J].航空电子技术,2011,42 (1):29-33.]

[3]YANG Fang,HE Hongwei.Research and design of embedded software object code simulation test platform [J].Computer Engineering and Design,2009,30 (19):4364-4367 (in Chinese).[杨芳,贺红卫.嵌入式软件目标码仿真测试平台的研究 与 设 计 [J]. 计 算 机 工 程 与 设 计,2009,30 (19):4364-4367.]

[4]ZHANG Youwei.Instruction-set simulator design and realization based on the virtual instruction [C]//Computer Science and Information Technology,2009:347-351.

[5]Tse Chen Yeh,Kaohsiung.A fast cycle-accurate instruction set simulator based on QEMU and SystemC for SoC development[C]//IEEE Mediterranean Electrotechnical Conference,2010:1033-1038.

[6]Almer O.Scalable multi-core simulation using parallel dynamic binary translation [C]//Embedded Computer Systems,2011:190-199.

[7]Brunthaler S.Virtual-machine abstraction and optimization techniques [J].Electronic Notes in Theoretical Computer Science,2009,253 (5):3-14.

[8]Ramsey D.Resourceable,retargetable,modular instruction selection using a machine-independent,type-based tiling of lowlevel intermediate code [C]//Proceedings of the 38th Annual ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages,2011,46 (1):575-586.

[9]Mehrdad R,Prabhat M,Nikil D.Instruction set compiled simulation:A technique for fast and flexible instruction set proceedings of simulation [C]//Design Automation Conference,2008:758-763.

[10]Brandner F.Precise simulation of interrupts using a rollback mechanism [C]//Proceedings of 12th International Workshop on Software and Compilers for Embedded Systems,2009:71-80.

[11]DANG Ruirong,GAO Guowang.TMS320C3xseries DSP principle and development technology [M].Xian:Xian Electronic and Science University Press,2011:11-13.

猜你喜欢
穿线外设译码
基于扩大候选码元范围的非二元LDPC加权迭代硬可靠度译码算法
分段CRC 辅助极化码SCL 比特翻转译码算法
基于校正搜索宽度的极化码译码算法研究
羽毛球大赛的穿线是什么样的?
2019苏杯尤尼克斯穿线团队成员工作随笔
简易手拉式擦窗器
简易手拉式擦窗器
LDPC 码改进高速译码算法
外设天地行情
外设天地行情