tin*_*ast 10 hardware debugging jtag
我理解JTAG曾经被用作边界扫描器(非常简洁的解释,请访问http://www.fpga4fun.com/JTAG1.html).但是,我无法看到如今将JTAG用作硬件级调试器(有点类似于在线仿真器).
1.有人可以解释JTAG如何用作硬件级调试器吗?
我的假设是片上必须有一些额外的硬件,这有助于调试,而JTAG只是驱动硬件获取调试信息.如果我的理解是正确的 -
2A.什么是硬件?
2B.它有标准吗?
我很怀疑标准部分,因为我看到的基于JTAG的硬件级调试器的所有实现都各不相同.
最后,将JTAG称为硬件级调试器确实令人困惑,而JTAG标准没有定义任何类型.那么JTAG用于此时会有不同的名称吗?
JTAG 只是一种与芯片内部接口的方法,它与“通常的”芯片功能一起工作。它基本上是一个多模式(同步)串口。
这允许的一件事是边界扫描,通过直接访问引脚。
正如您猜测的那样,另一个是访问芯片内部的额外硬件。该硬件可以设置为提供(例如)硬件断点、读取寄存器和任意内存位置的能力、编程内部闪存等。这些都是调试器应用程序可以使用的东西。
JTAG 标准为设备特定的扩展提供了空间,这些扩展总是供芯片设计人员用来提供这些类型的功能。有尝试标准化接口,其中包括 JTAG 和更高速率的调试硬件连接,称为Nexus。然而,我只见过飞思卡尔实现它,所以它似乎不像人们希望的那样有用!
关于术语,是的,将“JTAG”本身称为硬件调试器可能是错误的。我不完全确定“JTAG”是什么(如问题标题中所用)-也许“JTAG pod”或“JTAG 接口模块”会更好?
然而,像“JTAG 调试访问”甚至“JTAG 调试器”(对于那些只是用它来编程闪存的用户来说实际上是“JTAG 编程器”)这样的短语很常见(至少在英国!),在我看来不混淆,结合他们做的接口方法和提供的功能。
仅供参考:我不确定我是否很好地理解了您,您可能已经知道/理解我在下面写的所有内容,也许比我更好。给我留言,我会删除答案。
1/2a:使用的硬件“只是”一些额外的寄存器和逻辑电路,它们形成/注入额外的(正交!)状态到标准 JTAG 状态机中。
如果您了解 JTAG 协议如何执行边界扫描以及如何从器件推/拉比特流,您应该能够想象它如何用于对片上存储体进行编程。想象一下典型的菊花链,不是在芯片之间,而是在芯片内部。
假设该设备有一些可编程持久内存。通过更多的触发器和门,该器件在实际内存的 JTAG 链之前或之后形成了一个额外的缓冲区:
输入 -> xflops -> 内存 -> yflops -> 输出
假设 x/mem/y = 16/1024/0。现在,该链有 1040 位。前面的 xflops 不会直接影响内存,反之亦然。xflops 现在可能链接到驱动存储器的内置内部编程器的控制线。
input -> progcmd -> memory -> output
芯片内部的逻辑电路现在可以对一些 16 位“幻数”(又名“写入命令”)做出反应,这将触发持久存储器的写入/擦除过程。任何其他 16 位值都将被忽略,设备的行为类似于 1024 r/o 数据,后跟 16 位回显或零。
好的,我们有一个简单的设备上“控制器”,可以在“真实设备”上执行操作。如果您将这个想法扩展为具有可以动态控制哪些子设备连接到链的状态的控制器:
default chain after reset is:
   input -> progcmd -> output 
if now the controller gets ENABLE_WRITE it attaches MEM to chain
   input -> progcmd -> memory -> output
then controller reacts to WRITE and ABORTs on everything else
   input -> progcmd -> output
controller ges VERIFY, it reattaches MEM again but in READONLY mode
   input -> progcmd -> memory -> output
etc
它当然只是一个额外的状态机。以类似的方式,您几乎可以执行任何奇特的操作,包括诸如冻结、步进、读/写寄存器等调试。但所有这些都需要在相关芯片中内置大量额外的逻辑。实际上,它在一个芯片上集成了多个设备。
2b:不幸的是,我不能说更多,因为我对这个主题太陌生;)我知道许多制造商形成了自己的内部标准,“控制器”只是在模型之间共享,有时在芯片系列之间共享,但我没有听说过制造商之间通用的“全球”标准。