素材来源:FPGA资源侠客在FPGA研发及学习过程中,有一个关键步骤就是下板实现,做硬件“硬现”很重要,一般来说用JTAG口比较常见一些,因此相信肯定有些大侠遇到过JTAG口失灵或者损坏无法使用的事情。最近我就遇到了这类事情,FPGA的JTAG口突然就不能下载程序了,而且这种事情已经不是第一次了,之前在做项目的时候也出现过,而且出现的形式也极其相似,之前还用的好好的,第二天就不行了,真是让人郁闷。为此,本人也是去尝试了很多解决办法,一开始也没有去设想是JTAG口坏了,于是乎,本人换了usb-blaster,可一点反应也没有。难道真的是JTAG口坏了?于是,本人就去查阅相关资料去搞清楚问题的本质在哪里,下面就是本人的一些收获,分享出来,仅供各位大侠参考,一起交流学习。

至于JTAG口是什么,这里我们也来探讨一下,JTAG英文全称是 Joint Test Action Group,翻译过来中文就是联合测试工作组。JTAG是一种IEEE标准用来解决板级问题,诞生于20世纪80年代。今天JTAG被用来烧录、debug、探查端口。当然,最原始的使用是边界测试。
1、边界测试
举个例子,你有两个芯片,这两个芯片之间连接了很多很多的线,怎么确保这些线之间的连接是OK的呢,用JTAG,它可以控制所有IC的引脚。这叫做芯片边界测试。
2、JTAG引脚
JTAG发展到现在已经有脚了,通常四个脚:TDI,TDO,TMS,TCK,当然还有个复位脚TRST。对于芯片上的JTAG的脚实际上是专用的。- TDI:测试数据输入,数据通过TDI输入JTAG口;
- TDO:测试数据输出,数据通过TDO从JTAG口输出;
- TMS:测试模式选择,用来设置JTAG口处于某种特定的测试模式;
- TCK:测试时钟输入;
- TRST:测试复位。

3、JTAG如何工作
PC控制JTAG:用JTAG电缆连接PC的打印端口或者USB或者网口。最简单的是连接打印端口。TMS:在每个含有JTAG的芯片内部,会有个JTAG TAP控制器。TAP控制器是一个有16个状态的状态机,而TMS就是这玩意的控制信号。当TMS把各个芯片都连接在一起的时候,所有的芯片的TAP状态跳转是一致的。下面是TAP控制器的示意图:
IR:命令寄存器,你可以写值到这个寄存器中通知JTAG干某件事。每个TAP只有一个IR寄存器而且长度是一定的。DR:TAP可以有多个DR寄存器,与IR寄存器相似,每个IR值会选择不同的DR寄存器。(很迷)
4、JTAG链相关疑问
计算JTAG链中的IC数目:一个重要的应用是IR值是全一值,表示BYPASS命令,在BYPASS模式中,TAP控制器中的DR寄存器总是单bit的,从输入TDI到输出TDO,通常一个周期,啥也不干。可用BYPASS模式计算IC数目。如果每个IC的TDI-TDO链的延迟是一个时钟,我们可以发送一些数据并检测它延迟了多久,那么久可以推算出JTAG链中的IC数目。得到JTAG链中的器件ID:大多数的JTAG IC都支持IDCODE命令。在IDCODE命令中,DR寄存器会装载一个32bit的代表器件ID的值。不同于BYPASS指令,在IDCODE模式下IR的值没有标准。不过每次TAP控制器跳转到Test-Logic-Reset态,它会进入IDCODE模式,并装载IDCODE到DR。5、边界扫描:


如果JTAG口已经损坏了,那只能“节哀顺变”了,但是也不要只顾着伤心,最重要的是分析其中的原因,做其他事情也是一样的道理。那我们就来分析分析,我们在使用的过程中,可能经常为了方便,随意插拔JTAG下载口,在大多数情况下不会发生问题。但是仍然会有很小的机率发生下面的问题,因为热插拔而产生的JTAG口的静电和浪涌,最终导致FPGA管脚的击穿。至此,也有人怀疑是否是盗版的USB Blaster或者ByteBlasterII设计简化,去除了保护电路导致的。但经过很多实际情况的反馈,事实证明原装的USB Blaster 也会发生同样的问题。也有人提出质疑是否是ALTERA的低端芯片为了降低成本,FPGA的IO单元没有加二极管钳位保护电路。这类质疑其实都不是解决问题的本质,最重要的是我们要规范操作,尽可能的去减少因为实际操作不当导致一些硬件设备、接口等提前结束寿命或“英年早逝”,那重点来了,关于JTAG下载口的使用,我们需要如何去规范操作呢。上电时的操作流程顺序:
- 1.在FPGA开发板及相关设备断电的前提下,插上JTAG下载线接口;
- 2.插上USB Blaster或者ByteBlasterII的电缆;
- 3.接通FPGA开发板的电源。
- 1.断开FPGA开发板及相关设备的电源;
- 2.断开USB Blaster或者ByteBlasterII的电缆;
- 3.拔下JTAG下载线接口,并放置适宜地方存储。