面向自主可控DSP的调试系统软硬件设计
马强 周乐
摘要:本文首先介绍了面向自主可控DSP的调试系统总体设计方案,对其硬件架构进行了阐述,并分析了其工作原理。随后给出了固件程序开发、驱动程序开发,同时对调试代理程序的通信协议实现过程及实现流程进行描述。利用该调试系统,上位机工具链可以实现对目标DSP的在线调试和在线编程。
关键词:调试系统;驱动程序;目标DSP
中图分类号:TP393文献标识码:A
文章编号:1009-3044(2021)18-0236-03
开放科学(资源服务)标识码(OSID):
Hardware and Software Design of Debug System for DSP
MA Qiang, ZHOU Le
(No.38th Research Institute,China Electronic Technology Group Corporation/AnHui Sliliepoch Technology Co.,Ltd,Hefei,230031,China)
Abstract:Firstly, this paper introduces the overall design of DSP-oriented debugging system, describes its hardware architecture and analyzes its working principle. Then the firmware development and driver development are given, and the communication protocol implementation process and implementation flow of debugging agent are described. Using this debugging system, the upper computer tool chain can realize the on-line debugging and on-line programming of the target DSP.
Key word:Debug system; Driver; TargetDSP
1 DSP简介
魂芯DSP是我国的一款全自主架构设计的32位浮点数字信号处理器。本款处理器主要针对环境要求苛刻的应用领域设计,如弹载、机载领域雷达、对抗、SAR成像等,目的是有效保障高性能信息处理器装备的自主可控。该DSP考虑到性能与资源功耗的平衡性,集成了1个新一代处理器内核eC104E。
2调试系统硬件架构
DSP在线仿真器是连接上位机开发环境到目标调试DUT的关键路径,它能实时控制目标处理器,同时也能不断更新实时状态。图1就是简单的逻辑示意图。
上位机主要通过集成开发环境里的调试功能软件对DSP进行各种调试操作:包括强制启动/停止、单步调试、断点调试、观察点调试等。每次调试操作的信息通过以太网口发送给ICE[1]。该款DSP在线调试资源如下:
(1)硬件断点
在线调试逻辑电路为用户提供了丰富的硬件断点资源,可以同时设置64个断点。当DSP程序运行过程中碰到硬件断点时,会自动终止程序运行,并停留在当前状态,程序员可以访问当前时刻DSP的所有可见地址空间的资源,并对其中可写的资源进行修改。
(2)观察点
在线调试逻辑为用户提供了32个观察点资源,这些观察点对DSP数据存储器的读写操作以及通用寄存器的写操作敏感。当用户定义的读写存储器操作或写通用寄存器发生时,会自动中止DSP运行,方便程序员观察当前DSP的状态。
(3)单步调试
在线调试功能为用户提供了指令单步调试功能。
指令单步是指DSP处理完设定的指令个数之后自动停止运行。指令单步的步长可调,最小为1,最大为216-1。启动了指令单步调试功能后,如果在100个DSP处理器主时钟周期内还没有执行完1条指令,则自动结束当前的指令单步功能。
其工作原理是:在线仿真器是负责接收主机调试器的各种调试指令,并且将各种调试指令转换成JTAG串行数据流,数据流主要完成串并、并串的转换。
其工作原理是:在线仿真器是连接主机调试器和目标处理器的软硬件调试单元,负责主机软件和底层硬件之间的通信。在线调试器由一个可编程的NIOS嵌入式处理器来完成,该处理器主要完成上位机数据的接收、处理、发送。调试器接收由以太网接口完成,以太网驱动完成了串行数据流到buffer中的缓存,然后缓存中的数据包会根据提前约定好的调试通信协议解析成一组基本的目标处理器能够识别的数据地址队列,分别存放在date ram、addr ram中,这些数据地址队进而进入下一级驱动器模块,驱动器模块实现了JTAG的标准IEEE1194.1,完成数据的并串转换,提交给目标处理器。
该在线仿真器的代码运行硬件平台资源是ALTERA处理器的NIOS软核,配置的片外程序存储器是EPCS64(8Mbyte),片外数据存储器是CY7C1368(16Mbyte)。
3 HX1041调试系统软件设计
3.1软件总体结构
该DSP调试系统的软件开发中,采用“宿主机——目标机”的分布式结构。要完成开发调试,上位机与DUT之间必须能进行有效的通信。该通信协议是建立在以太网通信协议基础之上的纯应用层面的一种协议,该通信协议要保证数据传送的高可靠性、高效率、可扩展性。
该通信协议规定,采用“一应——一答”的方式,该方式的执行顺序是仿真器接收到上位机的调试命令,并且根据通信协议进行解析,将解析出来的数据经过并串转换变成JTAG数据码流进入目标处理器。应答包一般由仿真器直接返回上位機,有些命令比如读等操作,需要获得目标处理器的反馈,接收到反馈后,可以将获得数据返回上位机,并满足一定的通信标准实现。实际通信包中,目标机需要告诉上位机一些信息,比如是否停止,停止原因、异常原因等。因此,协议规范了目标机向上位机反馈的通知信息,目标机可以向宿主机发送通知信息,但宿主机接收到后不必再做确认应答。通信信息包是由约定的十六进制数据形成的具有开始、结束标志的字节序列[3]。
3.2通信接口软件设计
根据TCP/IP协议,数据链路层和物理层相关逻辑由LAN91C111完成,网络层uc/TCP-IP和传输层(应用层)的协议解析等通信功能由NIOS II中的嵌入式LwIP协议栈实现。具有很好的可移植性,能够不同于CPU、需要RTOS的支持[2]。
在底层驱动程序设计完毕以及以太网协议栈加载完毕后,通信应用程序的设计主要通过C语言编写程序调用以太网库函数来实现的,开机后,以太网通信接口首先进行初始化操作包括MAC地址,IP参数等。从层次化结构中可以看出,以太网Plugs函数库是类似于windows上的Sockets函数库。主要用到以下几个库函数作为数据的接收发送到开辟到空间的队列上,例如:
①LAN91C111_enable();? ? ? ? ? ? ? ?//lan91c111使能
②LAN91C111_reset();? ? ? ? ? ? ? //lan91c111复位
③LAN91C111_init_phy();? ? ? ? ? ? ?//初始化PHY
④alt_u32? IP4_ADDR( a,b,c,d){
alt_u32? ipadr;
ipadr=(a&0xff)<<24;
ipadr=ipadr+((b&0xff)<<16);
ipadr=ipadr+((c&0xff)<<8);
ipadr=ipadr+(d&0xff);
returnhtonl(ipadr);
}? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//ip地址的设置
⑤OSTaskCreateExt ( TcpSearchGatwayTask,
NULL,
(void *)&TCP_SERVER_STK1[2048-1],
INIT_PRIORITY,
INIT_PRIORITY,
TCP_SERVER_STK1,
2048,
NULL,
0 );? ? ? ? ? ? ? ? ? ? ? //Tcp任务的建立
⑥recv_data_num = recvfrom(serveSocket, (char * )recv_buff, 256, 0,(structsockaddr* )&clientAddr, &sockAddrSize);? ? ? ? ? ? ? //接收socket的建立
⑦sendto(sendsocket,send_buffer,13,0,(structsockaddr*)&sendClientAddr,
sizeof(sendClientAddr));? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//发送socket的建立
3.3通信协议格式
本协议称系统中传输的一段有实际含义的数据信息为数据包。数据包是有明确起始和结束的一段字符流。每个数据包的总长度不超过4096字节。调试命令标识区分为各种命令,如单步、运行、读写寄存器等。调试命令标识占1个字节。序号包标识每个包,命令包和其应答包的包序号相同,包序号定义为0递增,占1个字节,附加信息表示包的一些额外信息,便于扩展,占一个字节。信息传输采用四字符同步结构,同步字符(字头)由四个十六进制字节:“0x5A”“0xA5”“0x7B”“0XB7”组成。搜索到正确同步字符,表示可以开始接收一个完整数据包。下表1/2是一对典型的读寄存器的通信请求和应答包。
3.4调试代理程序设计流程
3.3章节介绍了基于该DSP调试通信协议的基本规范,在该部分中将代理程序的整体程序框架进行描述。
首先上电建立网络连接,调试代理程序开始查询从上位机发送来的数据包,若数据包没有来,一直循环查询直到数据包的到来;将收到的数据包缓存到接收队列中,对接收到数据包进行帧头帧尾解析,若正确将该数据包寄存至下一级缓存队列中。后续代理程序会按照接收到的命令指示,翻译成不同的操作DSP的命令组合,比如读写DSP寄存器、存储器、复DSP等。
有一类特殊的命令是上位机指令发下去后,需要调试代理程序一直查询DSP的工作状态直到触发某一flag,如断点触发、观察点触发,单步结束,暂停执行。为此,在代码中单独设计了一个独立于主函数的轮询函数,可以在运行命令下发完后,将flag设置成1,轮询函数会进入状态查询并以符合通信包的方式反馈给上位机,此轮询函数对上位机来说是主动发送的,反映的是DSP的内部状态,包括停止原因寄存器,观察点状态寄存器,执行PC。
4结束语
基于嵌入式系统搭建的硬件仿真器调试系统经后期用户的使用,能实现包括停止、运行、周期单步、指令单步、读写寄存器、读写内存、读写DDR、读写片外空间、查询等。同时也表现出了较好的稳定性,实际测试加载速度稳定在100-200 KB/s左右,满足了调试开发所有的设计需求。图3是用在线调试系统正在调试DSP的开发环境。
网口作为通信接口可以实现远程通信,但是它也有局限性,比如PC一般只有一个网络接口,当接口用作其他使用时,就无法实现网络调式,目前正在开发基于USB3.0接口和以太网接口合一的在线仿真器,可以既实现远程调试,也可解决接口不被占用的问题。
参考文献:
[1] 荊涛,赵宏智,王沁.嵌入式微处理器JTAG接口中TAP控制器的设计[J].微计算机信息,2007,23(17):8-9,14.
[2]SMSC公司,LAN91C111 datasheet[EB/OL].http://www.smsc.com
[3]黄光红.嵌入式软件开发环境中远程调试器的研究与设计[D].合肥:合肥工业大学硕士论文, 2007.
【通联编辑:梁书】