标签:
JTAG FPGA
最近学习了Altera的Virtual JTAG工具的使用。下面是我的使用心得。 riple
Altera在Quartus II 6.0中加入了一个sld_virtual_jtag 参数化宏单元模块,并提供了相应的Tcl程序包。有了这套工具,使用sld_virtual_jtag 和相应的Tcl命令,我们就可以构建自己的虚拟JTAG链路,并进行自定义的JTAG调试了。 riple
一、 相关文件 riple
后面的链接是Quartus帮助文件中的内容,前两个是我从Help里拷出来用Word保存的html文件,由于里面的一些链接指向本地文件,会被当作危险代码,不理就是了,不是病毒。 riple
- sld_virtual_jtag 的说明:
。只给出了VHDL的例化方式,对于各个选项的配置给了说明。 riple
- ::quartus::jtag Tcl命令包的说明:
。每个命令都给了使用的例子,拷到一个空Tcl文件中,保存后用Quartus的Tcl scripts工具运行即可。
- Altera提供的用户指南:太大了传不上来,给个链接,自己下吧。里面有JTAG协议的讲解和两个示例。 riple
二、 Virtual JTAG要点解析 riple
澄清一个概念:所谓虚拟JTAG,是Altera用PLD上的硬件JTAG电路和可编程逻辑资源搭建的一个IP core。这个IP core实现了JTAG接口电路的功能,但本身不是硬件JTAG电路的一部分,是用可编程逻辑“虚拟”出来的。 riple
这个IP core有两个接口:一个接口在布局布线时连接到硬件JTAG电路上,用户不可见;一个接口由用户通过电路图或者HDL例化到代码中,并通过这个接口自定义JTAG操作。 riple
这个IP core的功能 = JTAG信号hub + JTAG TAP控制器 + IR/DR IO。 riple
用户看到的是虚拟JTAG电路对内的接口,看不到硬件JTAG电路接口;并且这个接口是从JTAG TAP控制器引出的,信号方向和大家通常从外部对JTAG电路的理解不一样,所以容易引起混淆,理解上会有一定的困难。 riple
用户看到(可以利用)的接口有四组: riple
- JTAG协议中的接口(TDI、TDO、TCK)。TDI是IP core的输出;TDO是IP core的输入;没有TMS,这个引脚的功能被另一组接口解析并代替了;TCK是唯一没有变化的引脚。 riple
- 命令寄存器接口(IR_IN[]、IR_OUT[])。这组接口是Tcl命令和用户逻辑交互的接口,很有用。也可用来简单地传递数据。 riple
- 虚拟JTAG TAP控制器状态接口(virtual_state_...)。这组接口是虚拟JTAG的状态机输出,一个状态对应一个输出,可以看作状态信号灯。这组信号就是TMS的解析。如果需要实现复杂地数据传递功能,一定要理解这组信号的功能。 riple
- 硬件JTAG TAP控制器状态接口(jtag_state_...)。这组接口是硬件JTAG的状态机输出。这些功能暂时不会用,可能是用来实现更高级控制和数据传递功能的。 riple
理解虚拟JTAG概念的关键有以下两点: riple
- 在IP core的背后有四根看不见的JTAG信号,这四根信号才是我们通常从外部理解的JTAG。 riple
- 看得见的TDI和TDO是两根等待连接的信号(就像墙上插座里的两根线),我们通过在这两根线之间或串接或并接或简单或复杂的逻辑,实现我们的JTAG链路。 riple
理解了这些概念,看懂用户指南应该不成问题了。然后再看示例程序的verilog代码。 riple
我的一个空想:如果Altera能够把用户不可见的硬件JTAG电路接口开放出来(用户可见),那么用户就可以把这个接口上的标准JTAG接口连接到PLD的引脚上,再把这组引脚连接到外部JTAG电路上,那么这个IP core就不再是“虚拟”的了。 riple
相关链接:Actel Application Note:How to Use UJTAG riple
系统分类:
CPLD/FPGA | 用户分类:
Virtual JTAG | 来源:
原创 | 【推荐给朋友】 | 【添加到收藏夹】