Trimedia DSP芯片JTAG接口的仿真器设计_DSP论文
关键词:trimedia dsp的jtag接口 epp模式的并行口 硬件仿真器
trimedia集成电路是philips公司新近推出的针对多媒体应用的一种高性能dsp。它能够进行高质量的视频和音频处理,可以通过在线调试工具——jtag来开发trimedia dsp的各种资源和调试各种应用程序。为了能够满足研发、生产上对系统编程及工程上对现场调试的需要,开发了使用方便、成本低的仿真器。
1 仿真器硬件电路组成
图1为系统的组成框图。整个仿真器的功能可以由1片可编程逻辑器件来完成。图1中有两个接口:一个与trimedia dsp的jtag接口相连,另一个连接到计算机的并行接口。
之所以采用计算机的增强型并行接口,是因为现在一般的计算机都有如下几种端口:串行接口、并行接口、usb接口。串行接口速度不高,无法满足jtag仿真器快速下载的要求;普通的并行接口,数据传输速率限制在50~150kbps,也无法满足jtag仿真器快速下载的要求;usb接口是种快速的计算机接口,最高速率可以达到12mbps,但由于该接口速度是在数据以块方式传输时实现的,无法满足快速读写转换的要求,所以,也无法达到我们要求的数据传输速率。而且一般的pc上都安装了具有epp和ecp功能的i/o控制器,在epp模式下,可以只用1个in或out指令来向i/o控制器传输1个字节的数据,然后i/o控制器将会处理握手信号并产生选通信号。显然,在这种机器上的数据传输速度受到指令执行速率的限制。通常在同时代的机器上很容易获得1~1.75mbps的数据传输速率。可见,增强型并行接口能够满足我们的需求,而且用epp模式的并行接口进行开发的难度较小。
图1 系统的组成框图
图2为仿真器硬件线路图。
tck:测试时钟,为tap的控制器和寄存器提供测试参考时钟,在tck的同步作用下通过tdi和tdo引脚串行移入或同数据及指令。
tms:模式输入信号,在tck的上升沿时刻tms的状态决定了tap控制器即将进入的工作状态。
tdi:指令和数据寄存器的串行输入端,tap的控制器的当前状态以及保存在指令寄存器的具体指令,决定了对于一个特定的操作由tdi装入哪个寄存器。在tck的上升沿时刻,tdi引脚的数据被采样,结果送到jtag寄存器中。
tdo:和tdi具有相同操作模式,只是在tck的下降沿处改变状态。
tap:测试访问端口。
从图2中知道,仿真器的设计主要是可编程逻辑器件cpld的设计,它将8位并行数据和串行数据进行相互转换。也就是说,在jtag端cpld将产生tdi和tdo串行发送和接收时序,实现仿真器和trimedia dsp芯片jtag控制器的相互通信。在编程中可设置发送(tdi)和接收(tdo)的8位数据寄存器,接收tms的8位数据寄存器,4位(十六进制)计数器。发送和接收数据都以字节方式进行,不足8位数据的用0补齐。
data_reg和addr_reg分别表示发送的8位数据和指令寄存器,data_flag表示数据是否发送或接收完毕,data_tms_counter为串行发送数据时的计数器,oscnm为外接的tck时钟。ndatastb、nwrite、naddrstb、nreset为epp模式的并行接口控制信号,data为并行口的d0~d7数据总线,tmsjtag、tdijtag为连接到tap控制器的tms、tdi引脚线。
下面为数据和指令写入相应的寄存器的vhdl例程:
data_instruction_write:process(ndatastb,nwrite)
begin
if(ndatastb'event and ndatastb='1')then
if(nwrite='1')then
data_reg<=data;
else
data_reg<=data_reg;
end if;
end if;
end process;
tms_write:process(naddrstb,nwrite)
begin
if(naddrstb'event and naddrstb='1')then
if(nwrite='1')then
addr_reg<=data;
else
addr_reg<=addr_reg;
end if;
end if;
end process;
下面为发送数据的vhdl例程:(由于接收例程类似发送例程,故省略。)
tms_tdi_write:process(data_flag,oscnm_true)
begin
if(oscnm_true'event and oscnm_true='1')then
if(nreset='1')then
tmsjtag<=';
end if;
if(data_flag='1')then
if(data_tms_counter="0001")then
tmsjtag<=addr_reg(0);
tdijtag<data_reg(0);
elsif(data_tms_counter="0010")then
tmsjtag<=addr_reg(1);
tdijtag<=data_reg(1);
elsif(data_tms_counter="0011")then
tmsjtag<=addr_reg(2);
tdijtag<=data_reg(2);
elsif(data_tms_counter="0100")then
tmsjtag<=addr_reg(3);
tdijtag<=data_reg(3);
elsif(data_tms_counter="0101")then
tmsjtag<=addr_reg(4);
tdijtag<=data_reg(4);
elsif(data_tms_counter="0110")then
tmsjtag<=addr_reg(5);
tdijtag<=data_reg(5);
elsif(data_tms_counter="0111")then
tmsjtag<=addr_reg(6);
tdijtag<=data_reg(6);
elsif(data_tms_counter="1000")then
tmsjtag<=addr_reg(7);
tdijtag<=data_reg(7);
end if;
end if;
end if;
end process;
图3 仿真器的dll
2 epp接口控制软件
仿真器在windows98操作系统中的dll(动态连接库)如图3所示。图3中trimedia turbo jtag仿真板和corelis isa 100f jtag仿真板是第三方厂商提供的仿真板,而other jtag board就是要自行设计的仿真板。选择何种仿真板,用户在使用调试软件时,可自行选择。自行开发的仿真板需要有相应的动态链接库和驱动程序,它们需要命名如下:newjtagboard.dll和newjtagboard.vxd。在windows98操作系统下,由于可以直接使用epp端口操纵,所以在windows98操作系统下不需要相应的低层驱动——newjtagboard.vxd文件。在newjtagboard.dll中至少包含以下4个函数:
void tmjtagreset(long pindx/*processor index*/) ;对dsp芯片进行复位
void tmjtaginitboard(long pindx,unsigned short base) ;对dsp芯片的tap控制器进行初始化
void tmjtagscaninstructionregister(long pindx,unsigned long bus_no,unsigned char *out_buf,unsigned long length,unsigned void tmjtagscandataregister(long pindx,unsigned long bus_no,unsigned char *out_buf,unsigned long length,unsigned char *in_buf) ;传送给数据寄存器dr数据的函数
采用epp端口的0x37bh和0x37ch地址,分别产生互锁的地址读或写周期和互锁的数据读或写周期。dll通过epp模式端口查询nwait信号,以确定nwrite信号,进行发送或接收并行8位数据。用ndatastb引脚锁定data数据(数据寄存器dr内数据)和instruction指令(指令寄存器ir内数据),用naddrstb引脚锁定tms数据,以实现数据寄存器dr和指令寄存器ir的切换。data数据放在32位的数据寄存器dr中,instruction指令放在5位指令寄存器ir中。芯片提供的jtag指令包括:
reset(10000)对设备进行复位;
sel_data_in(10001)选择数据输入寄存器;
sel_data_out(10010)选择数据输出寄存器;
sel_ifull_in(10011)选择输入数据满的标志寄存器;
sel_ifull_out(10100)选择输出数据满的标志寄存器;
sel_jtag_ctrl(10101)选择控制寄存器;
macro(11110)硬件测试模式的选择。
括号中的内容是指令的操作码,它们通过tdi引脚串行地移入指令寄存器ir。dll被上层应用程序调用,进行data数据和instruction指令的传送;同时,dll会发送相应的tms数据。
结语
trimedia dsp芯片的广泛应用,开发出了使用方便、成本低的仿真器,对于减少产品的研发和生产周期,保证产品的顺利上市是非常有利的。