我理解JTAG曾经被用作边界扫描器(http://www.fpga4fun.com/JTAG1.html处的非常简洁的解释)。但是我现在看不出JTAG如何用作硬件级调试器(有点类似于在线仿真器)。
1。可以解释一下JTAG如何用作硬件级调试器吗?
我的假设是片上必须有一些额外的硬件,这有助于调试,而JTAG只是驱动硬件获取调试信息。如果我的理解是正确的 -
2a上。什么是硬件?
2B。它有标准吗?
我很怀疑标准部分,因为我看到的基于JTAG的硬件级调试器的所有实现都各不相同。
最后将JTAG称为硬件级调试器确实令人困惑,而JTAG标准没有定义任何类型。当JTAG用于此时有不同的名称吗?
答案 0 :(得分:3)
JTAG只是一种与芯片内部接口的方法,与“通常”芯片功能一起工作。它基本上是一个多模(同步)串口。
这允许的一个方面是通过直接访问引脚进行边界扫描。
正如你猜测的那样,另一个是访问芯片内部的额外硬件。该硬件可以设置为提供(例如)硬件断点,读取寄存器和任意存储器位置的能力,编程内部闪存等。这些是调试器应用程序可以使用的东西。
JTAG标准为器件特定扩展提供了空间,这些扩展始终供芯片设计人员用于提供这些类型的功能。尝试标准化接口,其中包括JTAG以及调试硬件的更高速率连接,称为Nexus。但是,我从未见过飞思卡尔实现它,所以它似乎没有人们希望的标准那么有用!
关于术语,是的,在自己的硬件调试器上调用“JTAG”可能是错误的。我不完全确定“JTAG”是什么(在问题标题中使用) - 也许“JTAG pod”或“JTAG接口模块”会更好?
然而,诸如“JTAG调试访问”或甚至“JTAG调试器”(以及那些仅用于编程闪存的用户的“JTAG编程器”)这样的短语是常用的(至少在英国!)和在我看来,他们不会混淆,因为他们使用接口方法和提供的功能。
答案 1 :(得分:1)
fyi:我不确定我是否理解你,你可能已经知道/理解我在下面写的所有内容,也许比我更好。给我留言,我会删除答案。
1 / 2a:使用的硬件“只是”一些额外的寄存器和逻辑电路,它们将额外的(正交!)状态形成/注入标准JTAG状态机。
如果您了解JTAG协议如何执行边界扫描以及如何从设备推送/拉出比特流,您应该能够想象它是如何用于编程片上存储体的。想象一下典型的菊花链,不是芯片之间,而是芯片内部。
假设设备具有一些可编程的持久性内存。通过更多的触发器和门,器件在实际存储器的JTAG链之前或之后形成一个额外的缓冲器:
输入 - > xflops - >记忆 - > yflops - >输出
假设x / mem / y = 16/1024/0。现在,该链具有1040位。前面的xflops不直接影响内存,反之亦然。 xflops现在可能与内置内部编程器的控制线相关联,后者驱动内存。
input -> progcmd -> memory -> output
芯片内部的逻辑电路现在可以对某些16位“幻数”a.k.a.“写命令”作出反应,该命令将触发写入/擦除持久存储器的过程。忽略任何其他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:不幸的是,我不能多说,因为我在这个问题上太绿了;)我知道很多制造商都有自己的内部标准,'控制器只是在模型之间共享,有时是芯片系列,但是我没有听说过制造商之间存在任何'全球'标准。答案 2 :(得分:0)
JTAG具有独特的接口,使您可以轻松实时调试硬件。它可以通过软件直接控制所提供控制器的时钟周期。因此,您可以在代码执行中放置硬件断点。您可以根据需要在硬件中启动,暂停,停止执行代码。
每当JTAG控制设置为1
时,振荡器时钟将连接到CPU,否则CPU将不会接收时钟并且无法执行任何指令。这样您就可以控制硬件中指令的执行。