APP下载

一种基于CPLD的高速JTAG调试器的设计与实现

2014-08-07张红余建

常州信息职业技术学院学报 2014年3期
关键词:状态机命令嵌入式

张红余建

(常州信息职业技术学院电子与电气工程学院 江苏常州 213164)

0 引言

随着信息技术的发展,越来越广泛地用到嵌入式处理器。通常,嵌入式处理器上运行的操作系统都没有完善的调试软件,需要通过主机来控制才能进行调试。由于嵌入式处理器千差万别,这就导致每一个SOC芯片都需要移植操作系统。工程师通常使用JTAG接口来调式操作系统而使其能正常工作。

最初,设计JTAG作为芯片的边界扫描接口。后来有厂商开始在嵌入式处理器内部集成调试控制模块,该模块可以用来控制CPU的停止和单步执行,而JTAG接口就用来作为主机和这个调试控制模块的通信接口[1-2]。通常把这个调试控制模块称为OCD,而把JTAG接口控制模块称为TAP(TEST ACCESS PORT)。图1所示的是一个完整的基于JTAG的调试方案。

图1 JTAG调试方案

主机用来运行调试软件,调试软件通过USB等接口与JTAG协议转换器通信。JTAG协议转换器则用来将调试软件发送的调试命令转换为对TAP控制器的控制信号并控制OCD模块来调试CPU。

本文主要研究图1中的JTAG协议转换器,用来实现USB到JTAG的信号转换。主机软件则采用开源的GDB调试器。

1 系统设计

JTAG接口总共包括5个信号TCK,TMS,TDI,TDO和TRST:其中4个是输入信号,另外1个是输出信号接口。作用如下:

Test Clock Input(TCK):为TAP提供一个独立的时钟,TAP的所有操作都基于这个时钟。

Test Mode Select Input(TMS):TMS信号用来控制TAP状态机的转换,TMS信号在TCK的上升沿有效。

Test Data Input(TDI):TAP的数据输入接口,在TCK的上升沿有效。

Test Data Output(TDO):TAP的数据输出接口,在TCK的下降沿有效。

Test Reset Input(TRST):TAP复位控制输入。

JTAG协议转换器通过对TMS信号的控制,可实现

TAP状态机的转换[3],状态转换如图2所示:

图2 TAP状态机

图2中状态转换发生在TCK信号上升沿,根据TMS信号处于0或者1状态来进行相应的状态转换。

根据JTAG协议,TAP定义了2个寄存器,分别是数据寄存器和指令寄存器。当TAP处于Shift-DR和Shift-IR状态时,可分别实现对TAP数据寄存器和指令寄存器的编程。根据不同的TAP指令,可实现对OCD的控制,进而实现对CPU的控制。

为提高通信的效率,JTAG协议转换器需要实现宏指令到JTAG信号的转换。也就是,主机调试软件只发送一个状态切换或者移位等的高级操作命令,JTAG协议转换器负责将这个高级操作命令转换为一连串 TCK,TMS,TDI,TDO 等的信号。

本文采用FT245BM+MAX II EPM570 CPLD来实现USB接口到JTAG接口的信号转换。FT245BM用来实现USB接口到8bit并口的信号转换。CPLD则用来读取8bit并口给出的宏指令,解析宏指令产生JTAG控制信号,并将从JTAG接口读取到的数据通过8bit并口返回给主机。宏指令的格式定义如图3所示:

图3 宏指令格式

一条宏指令由8bit组成,低4bit为命令部分,高4bit为参数部分。即图3中,CCCC为命令部分,PPPP为参数部分。具体命令定义如下:

0000:设置时钟分频器,参数为0表示不分频,参数为1表示2分频,参数为3表示4分频。

0001:设置 TAP状态,参数部分为需要设置到的TAP状态值,如图2所示。

0010:得到当前的TAP状态

0011:TAP软复位

0100:TAP硬复位

0101:设置TAP移位的大小端模式

0110:读取n比特

根据以上需求,系统设计框图如图4所示:

当RXF#信号为低时,CPLD可以读取Data信号得到新的宏指令并产生JTAG信号。如果宏指令为移位指令,则CPLD需要将移出来的数据写回FT245BM。当TXE#为低时,CPLD将数据放到Data总线上并产生一个WR信号高到低的跳变来将数据写回FT245BM[4]。当主机软件查询到FT245BM有数据需要返回时,通过USB的读端点读取CPLD送回来的数据。

图4 系统设计框图

2 CPLD设计

CPLD逻辑设计采用状态机设计。状态机由6个状态组成,如图5,分别为:ReadByte,ProcessByte,ShiftOutNBits,WriteByte,WaitTapSM,SoftResetTap。ReadByte状态时,通过检查RXF#信号来判断是否有下一个1Byte的并口数据,如果有则读取这8bit数据,并根据当前是否是命令的处理的第2阶段来决定跳转到ProcessByte或者ShiftOutNBits状态。如果是前一个命令的第2阶段,则跳转到ShiftOutNBits状态。否则,跳到ProcessByte状态。

图5 顶层状态机

ProcessByte状态时,根据读取到的8bit宏指令的命令部分进行跳转,如果是复位指令,则跳转到ResetTAP状态。如果是设置TAP状态指令,则跳转到WaitTapSm状态。如果是得到当前TAP状态指令,则跳转到WriteByte状态。如果是读取n比特命令,则跳回ReadByte状态,并将命令状态设置成第二阶段。

ResetTap状态调用TAP状态机产生TAP信号,使得目标TAP转移到Reset状态。WaitTapSm状态则调用TAP状态机产生TAP信号,使得目标TAP转移到宏指令参数部分设置的状态[5]。

ShiftOutNBits首先调用TAP状态机将TAP目标状态设置为Shift-DR或者Shift-IR状态。然后继续调用TAP状态机将读取到8bit数据移出。结束之后将移回来的8bit数据暂存到寄存器中,并跳转到WriteByte状态,等候WriteByte状态将该8 bit数据写回主机。

3 实验结果

为验证CPLD设计的正确性,本文搭建了系统仿真测试平台,如图6所示:

图6 仿真平台

根据宏指令格式,FT245BFM产生一组测试序列,首先设置TAP状态到ShiftDR,然后发送读取

8bit命令,之后设置TAP状态到IDLE,宏指令序列如下:

0x41,0xf6,0x11

仿真波形见图7:

图7 仿真波形

从仿真波形可知,DUT正确执行了宏指令,并给出了正确的TAP信号。

db[7:0]给出了第一个0x41的命令,经过4个tck时钟,Tap的状态 tap_state[3:0]的变化为1,2,3,4。根据图2的TAP状态机可知状态变化是正确的。当前状态已经转移到Shit-DR。

db[7:0]给出了第二个0xF6的命令,根据宏指令设计格式,这个命令是读取8bit命令。然后db[7:0]给出8比特数据0x55。TAP信号出现了8个tck,并且tdi给出01010101的波形。由于TAP的工作模式是进一个比特就对应的移出来一个bit,所以进去的01010101就把TAP内部的初始值00000000给移出来,最后db[7:0]上就出现了移出来的0x0数据。在移出最后一个比特数据时,Tms信号被置高,tap_state[3:0]状态从 Shift-DR转移到 Exit1-DR,也就是状态5。

db[7:0]给出的第三个命令是0x11。根据图2状态机,从Exit1-DR状态可以经过4个tck时钟,从Parse-DR,Exit2-DR,Update-DR状态最后转移到Run-IDLE状态。因此,tap_state[3:0]的状态值序列为 6,7,8,1。

4 结束语

本文设计的JTAG调试器可应用于ASIC硬件验证以及嵌入式系统软件的调试。相比以往基于FT232芯片设计的调试器,速度可以提高10倍以上,可稳定工作于20 MHz的频率下。该解决方案的应用,必将为广大嵌入式工程师以及ASIC工程师提供更好的工具并提高效率。

[1] 周金,张景璐.一种嵌入式系统实现的JTAG调试器[J].电子技术应用,2006(11):69.

[2] 胡倩,杨景常.基于JTAG协议的ARM调试接口设计[J].西华大学学报:自然科学版,2007(2):39.

[3] 殷伟凤.基于JTAG的ARM嵌入式系统调试技术实现及应用[J].浙江万里学院学报,2009(2):17.

[4] 曾强,赵娟,魏林,等.基于FT245的Linux USB驱动的设计[J].光电技术应用,2011(1):70.

[5] 常志恒,尚铁军,史顺波.基于JTAG的片上调试器与调试系统的设计实现[J].计算机工程与应用,2012(30):78-82.

猜你喜欢

状态机命令嵌入式
只听主人的命令
基于有限状态机的交会对接飞行任务规划方法
移防命令下达后
搭建基于Qt的嵌入式开发平台
嵌入式软PLC在电镀生产流程控制系统中的应用
这是人民的命令
双口RAM读写正确性自动测试的有限状态机控制器设计方法
Altera加入嵌入式视觉联盟
倍福 CX8091嵌入式控制器
基于反熔丝FPGA的有限状态机加固设计