2.3 JTAG IPcore的实现
JTAG IPcore是本调试器的核心,下面简单介绍一下该部分的实现。
IPcore的接口如图3所示。
该IPcore的对外接口由两部分组成:一是与Avalon总线通信的接口部分,即图中的左边部分;二是与被调试CPU通信的接口部分,即图中的右边部分。另外,在整个实现中,定义了一些重要的寄存器。
“reg[3000:O]tms,tdo"分别用来存放完成当前操作的tms序列和tdo序列。像访问存储器这样的操作需要很长的tms序列和tdo序列,因此用了3001位。IPcore每次从这2个寄存器读取1位后,就向对应的引脚发送数据。tdi寄存器只用了134位,因为不是每个tdi输入对JTAG调试都有用。parmreg寄存器用来存放总线上传来的参数。tdidata寄存器用来存放从tdi引脚读取的有效数据,将被发送到Avalon总线。
Avalon总线上来的指令发送到ins[31:0]端口。在调试器主程序里判断指令,做出相应的动作。当IPcore读取到某个指令后,根据命令代码查找对应的TMS命令序列,找到以后将命令序列送到tms寄存器。同时,通过parm[31:O]端口读取命令参数,根据命令参数生成对应的TDO序列,将其送到tdo寄存器。当两个寄存器的内容准备好后,在TCK时钟的控制下,通过TMS引脚和TD0引脚分别串行输出。在TDO引脚输出的同时检测TDI引脚,并在适当时机将TDI引脚上的数据读入IPcore,经过处理后发送回总线。
由于TMS序列长度较长且其对应于各个调试命令是固定不变的,因此在本设计中,将TMS序列作成一个表,存放在IPcore里,而不是通过总线发送。需要时,根据不同的命令代码来读取。
结 语
本文介绍了一个基于SOPC的通用调试器的设计方案与实现过程。在开发过程中,IP复用、软硬件协同设计等先进的嵌入式设计思想对缩短开发时间、降低开发风险起到了很好的作用。同时,自主开发的ARM7TDMIJTAG IPcore和C8051 JTAG IPcore体现了该调试器的通用性。
本文关键字:通用 嵌入式系统-技术,单片机-工控设备 - 嵌入式系统-技术