riple

Stay Hungry, Stay Foolish.

虚拟JTAG工具在FPGA调试中的应用(待续)

0
阅读(12550)

最近学习了Altera的Virtual JTAG工具的使用。下面是我的使用心得。

Altera在Quartus II 6.0中加入了一个sld_virtual_jtag 参数化宏单元模块,并提供了相应的Tcl程序包。有了这套工具,使用sld_virtual_jtag 和相应的Tcl命令,我们就可以构建自己的虚拟JTAG链路,并进行自定义的JTAG调试了。

一、 相关文件

后面的链接是Quartus帮助文件中的内容,前两个是我从Help里拷出来用Word保存的html文件,由于里面的一些链接指向本地文件,会被当作危险代码,不理就是了,不是病毒。

1. sld_virtual_jtag 的说明:rar。只给出了VHDL的例化方式,对于各个选项的配置给了说明。
2. ::quartus::jtag Tcl命令包的说明:rar。每个命令都给了使用的例子,拷到一个空Tcl文件中,保存后用Quartus的Tcl scripts工具运行即可。
3. Altera提供的用户指南:太大了传不上来,给个链接,自己下吧。里面有JTAG协议的讲解和两个示例。

二、 Virtual JTAG要点解析

澄清一个概念:所谓虚拟JTAG,是Altera用PLD上的硬件JTAG电路和可编程逻辑资源搭建的一个IP core。这个IP core实现了JTAG接口电路的功能,但本身不是硬件JTAG电路的一部分,是用可编程逻辑“虚拟”出来的。

这个IP core有两个接口:一个接口在布局布线时连接到硬件JTAG电路上,用户不可见;一个接口由用户通过电路图或者HDL例化到代码中,并通过这个接口自定义JTAG操作。

这个IP core的功能 = JTAG信号hub + JTAG TAP控制器 + IR/DR IO。

用户看到的是虚拟JTAG电路对内的接口,看不到硬件JTAG电路接口;并且这个接口是从JTAG TAP控制器引出的,信号方向和大家通常从外部对JTAG电路的理解不一样,所以容易引起混淆,理解上会有一定的困难。

用户看到(可以利用)的接口有四组:

1. JTAG协议中的接口(TDI、TDO、TCK)。TDI是IP core的输出;TDO是IP core的输入;没有TMS,这个引脚的功能被另一组接口解析并代替了;TCK是唯一没有变化的引脚。
2. 命令寄存器接口(IR_IN[]、IR_OUT[])。这组接口是Tcl命令和用户逻辑交互的接口,很有用。也可用来简单地传递数据。
3. 虚拟JTAG TAP控制器状态接口(virtual_state_...)。这组接口是虚拟JTAG的状态机输出,一个状态对应一个输出,可以看作状态信号灯。这组信号就是TMS的解析。如果需要实现复杂地数据传递功能,一定要理解这组信号的功能。 riple
4. 硬件JTAG TAP控制器状态接口(jtag_state_...)。这组接口是硬件JTAG的状态机输出。这些功能暂时不会用,可能是用来实现更高级控制和数据传递功能的。

理解虚拟JTAG概念的关键有以下两点:

1. 在IP core的背后有四根看不见的JTAG信号,这四根信号才是我们通常从外部理解的JTAG。
2. 看得见的TDI和TDO是两根等待连接的信号(就像墙上插座里的两根线),我们通过在这两根线之间或串接或并接或简单或复杂的逻辑,实现我们的JTAG链路。

理解了这些概念,看懂用户指南应该不成问题了。然后再看示例程序的verilog代码。

我的一个空想:如果Altera能够把用户不可见的硬件JTAG电路接口开放出来(用户可见),那么用户就可以把这个接口上的标准JTAG接口连接到 PLD的引脚上,再把这组引脚连接到外部JTAG电路上,那么这个IP core就不再是“虚拟”的了。

Baidu
map