
在FPGA的研发和学习过程中,很关键的一步就是下层板的实现。把硬件做“硬”很重要。一般来说JTAG港比较常见,所以我相信一定有英雄遇到过JTAG港失灵或者损坏无法使用的事情。最近就遇到了这种事情。FPGA的JTAG端口突然无法下载程序,这种事情已经不是第一次了。之前做项目的时候也发生过,形式很像。之前用的好好的,第二天就不管用了。真的很压抑。为此我也尝试了很多解决方法。起初,我不认为JTAG坏了,所以我换了usb-blaster,但没有任何反应。真的是JTAG港坏了吗?于是,我去查阅相关资料,想搞清楚问题的本质。以下是我的一些收获,分享给大家参考,一起交流学习。
根据参考资料和我的实践经验,使用时请不要插拔JTAG接口,否则会损坏FPGA芯片的JTAG接口信号引脚。那么如何确认JTAG港已经受损呢?首先你要排除几个基本因素。第一,是否匹配连接,有很多设备对应很多接口,实际情况下要匹配正确,否则也会出现上述情况;二是消除下载线问题。如果下载线坏了,可以使用多条下载线尝试排除此类问题。如果你仍然不能访问FPGA的JTAG端口,很有可能你的FPGA芯片的JTAG端口已经损坏。此时请用万用表检查TCK、TMS、TDO、Tdi是否与GND短路。如果有信号对地短路,说明JTAG信号引脚已经损坏。至于JTAG港是什么,我们也在这里讨论一下。JTAG的英文全称是联合测试行动小组,翻译成中文就是联合测试工作组。JTAG是解决板级问题的IEEE标准,诞生于20世纪80年代。如今,JTAG被用于烧录、调试和探测端口。当然,最原始的用途是边界测试。
1、边界测试
比如你有两个芯片,这两个芯片之间有很多电线连接。如何保证这些线之间的连接是OK的?有了JTAG,它可以控制所有的IC引脚。这被称为芯片边界测试。
2、JTAG引脚
JTAG已经发展成一只脚,通常是四只脚:TDI,TDO,TMS,TCK,当然还有一只重置脚TRST。芯片上JTAG的引脚实际上是专用的。
TDI:测试数据输入,数据通过TDI输入到JTAG口;
TDO:测试数据输出,数据通过TDO从JTAG港输出;
TMS:测试模式选择,用于将JTAG端口设置为特定的测试模式;
TCK:测试时钟输入;
TRST:测试重置。
CPU和FPGA厂商允许JTAG用于端口调试;FPGA制造商可以通过JTAG配置FPGA,并使用JTAG信号访问FPGA内核。
3、 JTAG的工作方式
PC控制JTAG:用JTAG线连接PC的打印端口或USB或网络端口。最简单的就是连接打印口。TMS:在每个包含JTAG的芯片里,都会有一个JTAG TAP控制器。TAP控制器是16态的状态机,TMS是这个东西的控制信号。当TMS将所有芯片连接在一起时,所有芯片的TAP状态跳变是一致的。以下是TAP控制器的示意图:
改变TMS的值,状态就会跳变。如果您保持高电平5个周期,您将跳回测试-逻辑-休息,这通常用于同步TAP控制器。最常用的两种状态是Shift-DR和Shift-IR,它们与TDI和TDO一起使用。IR:命令寄存器。你可以在这个寄存器中写一个值来告诉JTAG做一些事情。每个抽头只有一个IR寄存器,长度是确定的。DR: TAP可以有多个DR寄存器。与IR寄存器类似,每个IR值选择不同的DR寄存器。(非常着迷)
4、JTAG链相关问题
计算JTAG链中IC的数量:一个重要的应用是IR值是全一值,表示旁路命令。在旁路模式下,TAP控制器中的DR寄存器始终是单比特的,从TDI的输入到TDO的输出,通常是一个周期,什么都不做。IC的数量可以在旁路模式下计算。如果每个IC的TDI-TDO链的延迟是一个时钟,我们可以发送一些数据,检测它延迟了多长时间,这样就可以计算出JTAG链中IC的数量。获取JTAG链中的设备ID:大多数JTAG IC支持IDCODE命令。在IDCODE命令中,DR寄存器将加载一个代表器件ID的32位值。与BYPASS指令不同,IDCODE模式下的IR值没有标准。然而,每次TAP控制器跳转到测试逻辑复位状态时,它将进入IDCODE模式并将IDCODE加载到DR。
5、边界扫描:
当TAP控制器进入边界扫描模式时,DR链可以遍历每个IO模块,或者读取或拦截每个引脚。在FPGA上使用JTAG,可以知道FPGA运行时每个管脚的状态。你可以使用JTAG的命令样本,当然,不同的IC可能不同。
如果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下载线接口,并将其存放在合适的地方。
虽然上述操作步骤有点繁琐,有时使用时我们并不认同,但为了保证芯片不被损坏,还是建议大家公平地按照上述步骤操作。经过测试,我上面提到的问题是TCK与GND短路。虽然发生的概率不大,但是为了更合理更长久的使用硬件相关设备,我建议大家不要担心琐碎,公平操作,换个角度思考。“多磨多练”对自己也有好处。最后,送你一句唠叨的话。最好不要在JTAG下载端口上使用热插拔。至少它可以让JTAG港“活”很长时间。毕竟长期陪伴也挺好的。不要等到失去了才知道后悔。林恩










