\\\插播一条:我自己在今年年初录制了一套还比较系统的入门单片机教程,想要的同学找我(禾厶-亻言-手戈)免費的。最近比较闲,带做毕设,带学生参加省级以上比赛///
想必玩过单片机或者 FPGA开发板的同鞋对 jtag接口并不陌生。在需要烧录程序的时候,对着板子的接口接“跟”线,完事儿。不过今天想和各位聊聊的问题是,jtag究竟是如何实现的。事先声明,我只是个缝合怪!接下来的内容来自网络+博客+IEEE官方文档+其它。最后我会列出相关参考。
言归正传,Jtag作为一个国际化的标准,目前我们可以用它来做程序烧录,debug,电路检测等操作。在数字电路设计中,大多作为电路故障诊断的一种手段。图1展示了对电路功能的两种检测方案。现假设我们利用 verilog实现了一个性能非常 nice的加法器,吊打各大公司的 IP,然后功能仿真也没有任何问题。但是我们并不确定加工生产(原谅我着拙劣的用词)出来的电路到底是个什么情况?哎,这个时候 jtag就可以发挥作用了。在图1(A)中那个粉红色的单元就是我们写的超级 nice的加法器,左右两侧的黄色单元是其与外部的引脚连线。我通过 jtag在左侧灌入激励(Driver),然后从右侧查看与之对应的响应(Sensor),从而判断这个加法器的实际电路有没有缺陷。图1(B)呢大家可以思考一下,我们后面以这个为例做具体的讲解。
图1简单的功能示意图[1]
当然,在具体的实现过程中,也不是我们想检测就可以检测的,不然也不会劳烦IEEE专门搞了一个叫 Joint Test Action Group。你猜的没错,这就是 Jtag的简称了。下面我们将从整体结构依次介绍JTAG。
图2展示了一个较完完整的 JTAG整体架构设计。它主要包含了一下几点内容。
.一组关键的控制信号 TMS, TDI, TDO, TCLK。有些结构还包括 TRST(图2中含有这个信号)
.指令寄存器
.数据寄存器,其中包括边界扫描寄存器,旁路寄存器,设备识别寄存器以及其它用户自定义的寄存器
.解码器
.TAP(Test Acess Port)控制器(核心控制组件)
下面就以上五点内容做具体的介绍。
图2 JTAG整体构造设计[