13

我了解 JTAG 过去是如何用作边界扫描仪的(在http://www.fpga4fun.com/JTAG1.html上有非常清晰的解释)。但是,我看不出这些天 JTAG 是如何用作硬件级调试器的(有点类似于在线仿真器)。

1. 谁能解释一下 JTAG 如何用作硬件级调试器?

我的假设是必须有一些额外的片上硬件有助于调试,而 JTAG 仅驱动该硬件以获取调试信息。如果我的理解是正确的——

2a。那是什么硬件?

2b。有标准吗?

我相当怀疑标准部分,因为我看到的基于 JTAG 的硬件级调试器的所有实现都各不相同。

最后,将 JTAG 称为硬件级调试器确实令人困惑,而 JTAG 标准并未定义任何此类内容。那么 JTAG 用于此时是否有不同的名称?

4

3 回答 3

5

JTAG 只是一种与“通常”芯片功能一起工作的芯片内部接口的方法。它基本上是一个多模式(同步)串行端口。

这允许的一件事是边界扫描,通过直接访问引脚。

正如您推测的那样,另一个是访问芯片内部的额外硬件。该硬件可以设置为提供(例如)硬件断点、读取寄存器和任意内存位置的能力、编程内部闪存等。这些是调试器应用程序可以使用的东西。

JTAG 标准为设备特定的扩展提供了空间,这些扩展始终旨在供芯片设计人员用来提供这些类型的功能。尝试标准化接口,包括 JTAG 以及与调试硬件的更高速率连接,称为Nexus。然而,我只见过飞思卡尔实施它,所以它似乎不像人们希望的那样有用!

关于术语,是的,将“JTAG”单独称为硬件调试器可能是错误的。我不完全确定什么是“JTAG”(如问题标题中所用)-也许“JTAG pod”或“JTAG 接口模块”会更好?

然而,像“JTAG 调试访问”甚至“JTAG 调试器”(对于那些只是使用它来编程闪存的用户来说,实际上是“JTAG 程序员”)这样的短语是常用的(至少在英国!)在我看来为了不混淆,将接口的方法和提供的功能结合起来。

于 2014-01-17T09:09:17.607 回答
3

仅供参考:我不确定我是否理解你,你可能已经知道/理解我在下面写的所有内容,也许比我更好。给我留言,我会删除答案。

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:不幸的是,我不能说更多,因为我对这个主题太陌生了;)我知道许多制造商形成了自己的内部标准,“控制器”只是在模型之间共享,有时在芯片系列之间共享,但我没有听说过制造商之间通用的任何“全球”标准。

于 2014-01-17T11:42:35.473 回答
2

JTAG 具有独特的接口,使您能够轻松地实时调试硬件。它可以通过软件直接控制所提供控制器的时钟周期。因此,您可以在代码执行中放置硬件断点。您可以根据需要开始、暂停、停止硬件中代码的执行。

每当 JTAG 控制设置为1振荡器时,时钟将连接到 CPU,否则 CPU 将不会接收时钟并且无法执行任何指令。这样您可以在硬件中控制指令的执行。

于 2017-03-22T10:21:56.087 回答