基于SOPC的M8051嵌入式调试器设计

2012-03-20 02:32王海光林平分
单片机与嵌入式系统应用 2012年6期
关键词:时序命令调试

王海光,林平分

(北京工业大学电控学院,北京100124)

引 言

在嵌入式系统开发过程中,上位机通过调试器完成对目标机软件的开发、下载、调试。早期的调试器与上位机之间通过串口或并口通信,存在速度慢、通用性差等缺陷。相比之下,USB接口优势明显,具备速度快、易插拔、支持多个调试器同时工作等优势。但目前的USB接口调试器一般采用USB芯片和可编程器件结合的实现方式,成本和复杂度较高。

M8051是Mentor公司的嵌入式8051处理器,凭借良好的性能和功耗控制,占据了大量的SoC(System on a Chip)市场。该处理器集成了OCI(On-Chip Instrumentation,片上调试单元)来完成程序的调试。FS2公司设计的System Navigator是一款针对M8051的调试器,但该产品价格过于昂贵。本文通过研究M8051的调试结构,设计一款基于SOPC(System on a Programmable Chip)的M8051调试器,实现对M8051核心的高效、低成本的开发。

1 M8051片上调试技术的研究

1.1 典型的OCD调试系统

目前,嵌入式调试领域的趋势是在MCU上集成一个专门用于调试的功能模块,并且提供一个专用接口开放给用户。用户通过该调试控制模块来实现停止/继续CPU的运行,并访问目标机上的各种资源,这就是OCD(On-Chip Debug,片上调试)技术[1]。同时,JTAG作为应用最广泛的系统级测试技术,控制逻辑简单、实现方便,常作为片上调试模块的测试接口。

一个完整的OCD调试系统通常包括调试主机、调试协议转换器(或调试器)、目标机三个部分。调试主机运行调试软件,并通过调试器与目标机相连;调试器将主机发出的调试命令和数据转换为基于目标机OCD模块和JTAG接口的调试数据;目标机的OCD模块接收到调试器发来的JTAG数据,完成对CPU的逻辑控制[2]。典型的OCD调试系统如图1所示。

图1 典型的OCD调试系统

1.2 M8051的片上调试结构

M8051核心的调试功能由其片上的OCI模块完成。OCI模块通过JTAG口与外部通信,其实现完全符合IEEE-1149.1[3]。具体来说,TAP控制器接收一系列的JTAG边界扫描链读写时序,完成对扫描链上的IR和DR的读写[4]。OCI模块内部的Trace模块、Trigger模块和Debug模块根据IR和DR的内容,产生相应的控制信号给处理器,达到控制M8051处理器的运行或者读取处理器信息的目的。以上就是OCI模块的基本调试原理[5]。M8051OCI模块的体系结构如图2所示。

图2 M8051OCI模块的体系结构

2 基于SOPC的M8051调试器的设计

2.1 调试系统的总体设计

在研究了OCD调试技术和M8051片上调试结构OCI的基础上,本文提出了M8051调试系统的总体设计方案。该方案通过USB接口与上位机通信,调试器主体由一个FPGA芯片实现。其总体结构图如图3所示。

图3 M8051调试系统总体结构图

上位机运行调试软件,将编译器的各种调试操作,通过调试接口函数转化为各种调试协议数据;再将这些调试协议数据通过底层通信模块发送给M8051调试器。本设计的底层通信接口是USB接口。编译器选择应用最为广泛的且具备开放调试接口函数AGDI的Keil C51编译器。

M8051调试器本身主要由USB控制器模块、8051处理器和JTAG控制器模块组成。USB控制器在8051处理器的控制下接收来自上位机的调试协议数据;JTAG控制器模块负责将这些调试协议数据转化为基于OCI结构的底层调试命令集,并以JTAG边界扫描链读写时序发送出来。

M8051目标机通过OCI模块的JTAG接口,接收M8051调试器发送的底层调试命令,完成对M8051目标机的调试,并将返回值通过JTAG接口送回M8051调试器。

2.2 调试器的硬件设计

目前,市场上流行的基于USB接口的调试器,硬件一般以一个USB2.0控制芯片为核心,完成数据通信和调试协议数据解析,同时配置一个可编程器件实现JTAG边界扫描链读写时序[6]。本文出于成本和系统复杂度的考虑,并结合FPGA的优势,创新地使用单独的FPGA芯片实现调试器的全部功能,简化电路板和系统设计,降低系统成本。硬件结构如图4所示。

图4 调试器的硬件设计

调试器的主要硬件包括:Xilinx公司高性价比的Spartan-6FPGA,Flash配置芯片XCF04S,缓冲器芯片74LCX245作为JTAG接口的电气隔离及电源转换芯片。USB控制器、8051处理器、片内SRAM和JTAG控制器等功能模块均以IP核的形式在FPGA上实现。USB控制器采用Mentor公司的MUSB全速(12Mbps)控制器IP核,8051处理器采用Mentor公司的M8051EW IP核。系统上电后,配置芯片自动完成对FPGA的配置,保证系统的非易失性。

JTAG控制器模块是本系统硬件部分的核心模块。本文中JTAG控制器是基于M8051的OCI模块实现的,主要任务接收调试固件发送过来的调试协议数据,转化为OCI模块可识别的底层调试命令集,具体说就是一系列对于OCI模块的IR和DR的读写操作;再使用JTAG边界扫描链读写时序将这些底层命令发送给目标机。所以JTAG控制器模块分为两个部分:调试命令解析模块和JTAG边界扫描时序生成模块。JTAG控制器的结构如图5所示。

图5 JTAG控制器的结构

以系统运行控制操作中的Halt8051操作为例,由OCI的结构可知,该操作由向OCI模块的IR中写入0x69来实现。在上位机中该操作的调试协议数据为0x0069。调试器固件在接收到来自上位机的调试协议数据后,将0x00和0x69分别写入调试命令解析模块的命令寄存器和数据寄存器。调试命令解析模块将该调试协议数据解析为向OCI的IR中写入0x69,即JTAG_CMD=IR,JTAG_Din=0x69;再由JTAG边界扫描时序生成模块产生向IR写入0x69的JTAG时序。

与传统的软件方法相比,由FPGA硬件实现调试命令解析和JTAG边界扫描时序生成,不但减轻了调试器上的8051处理器的负担,而且有效提高了JTAG调试速度。

2.3 调试系统的软件设计

本文中的软件设计分为两部分:PC端调试软件和调试器固件。两部分通过USB接口进行交互。具体的软件构架如图6所示。

图6 调试器的软件构架

2.3.1 PC端软件设计

PC端调试软件由Keil C51编译器、AGDI调试接口函数和USB驱动程序三部分组成。通用的AGDI调试接口函数是独立于处理器体系结构的函数集,它将上层调试操作分别转化为独立于处理器的调试命令。一般来说,AGDI调试接口函数实现的调试操作有以下几类:系统运行控制、寄存器读写、存储器读写操作以及断点操作。

AGDI调试接口函数设计是PC端软件设计的重点。主要工作是在通用AGDI接口函数的基础上,实现针对M8051处理器的调试接口,将来自编译器的调试操作转换为针对M8051的调试协议数据。本文中调试协议数据采用调试命令加上调试数据的形式。以系统运行控制操作中的Halt8051操作为例:AGDI调试接口函数将Halt8051操作转化为基于M8051处理器的调试协议数据0x0069,即调试命令0x00和调试数据0x69。最后由USB驱动层将调试协议数据0x0069打包发送给调试器。

2.3.2 调试器固件设计

调试器固件的功能分成两个方面:一方面是下行数据发送,在完成USB设备的枚举过程[7]后,接收USB接口的调试协议数据,解析得到的调试命令和调试数据,再将调试命令和调试数据分别写入JTAG控制器模块的命令寄存器和数据寄存器;另一方面监控目标机的返回信息,并将返回信息通过USB接口发送给调试主机。

本文中的软件部分主要负责调试协议数据的生成和传送,具体的调试命令解析和JTAG边界扫描时序的产生,全部由硬件实现,保证了调试效率的最大化。

3 M8051调试系统的测试

3.1 测试环境

测试环境包括软件环境和硬件环境。软件环境包括Keil C51编译器和Xilinx ISE Design Suite;硬件环境包括PC机、本文开发的调试器电路板和基于M8051处理器的目标板。测试环境如图7所示。

图7 调试系统的测试环境

3.2 调试系统的功能测试

功能测试的项目主要包括:调试开始/停止、单步运行、断点、读写寄存器、读写存储器等。经测试,以上调试操作稳定可靠。以断点操作为例,断点操作是软件调试过程中最重要的手段之一,本文断点功能经测试完全可靠。测试结果如图8所示。CPU从PC指针为零处开始执行,到达断点地址0x0006处停止执行,并将处理器的最新状态更新到用户界面上。

3.3 调试器的主要参数

图8 断点功能测试图

本调试器采用USB2.0全速(12Mbps)接口,调试器内部M8051处理器主频为48MHz,JTAG协议数据收发速度达到8Mbps。采用Spartan-6xc6slx16FPGA芯片实现,FPGA资源使用情况如下:可配置逻辑单元Slice 1439个,占该资源总数的63%;嵌入式存储模块BLOCKRAM 144KB,占该资源总数的14%;I/O接口数24个,占该资源总数的13%;时钟管理模块DCM 1个,占该资源总数的25%。

结 语

本文给出的基于USB接口、以单一FPGA芯片实现的M8051嵌入式调试器系统,不仅突破了传统调试器的速度瓶颈,而且大大简化了系统的复杂度。经测试,本调试器系统能够高效地完成M8051处理器的软件开发,是一种易于被开发者接受的高性价比、实用的调试器方案。

[1]Claran M N,Donal H.Emerging on-chip debugging technique for real-time embedded system[J].Computer &Control Engineering Journal,2000,11(6):295-303.

[2]虞致国,魏敬和.基于USB接口的ARM嵌入式仿真器的设计[J].电子器件,2008,31(4):1293.

[3]IEEE Computer Society.IEEE Std 1149.1 1990IEEE Standard Test Access Port and Boundary-Scan Architecture[S].New York,2001.

[4]Harry Bleeker,Peter van den Eijnden,Frans de Jong.Boundary-Scan Test:A Practical Approach[M].Dordrecht:Kluwer Academic Publishers,2002:30-43.

[5]Mentor Graphics.M8051EW Fast 8-bit Microcontroller with On-Chip Debug[EB/OL].[2012-03-05].http://www.mentor.com/ip.

[6]余时帆,潘子升.基于CY7C68013的USB2JTAG仿真器设计[J].新特器件应用,2008,10(12):25-26.

[7]李英伟,王成儒,连秋生,等.USB2.0原理与工程开发[M].北京:国防工业出版社,2007.

猜你喜欢
时序命令调试
只听主人的命令
清明
基于不同建设时序的地铁互联互通方案分析
基于航拍无人机的设计与调试
移防命令下达后
FOCAS功能在机床调试中的开发与应用
基于FPGA 的时序信号光纤传输系统
无线通信中频线路窄带临界调试法及其应用
一种毫米波放大器时序直流电源的设计
调压柜的调试与试运行探讨