web-dev-qa-db-ja.com

JTAGはデバッガーとしてどのように使用されますか?

JTAGが境界スキャナーとしてどのように使用されていたかを理解しています( http://www.fpga4fun.com/JTAG1.html で非常にわかりやすい説明)。ただし、最近のJTAGがハードウェアレベルのデバッガーとしてどのように使用されているかはわかりません(インサーキットエミュレーターに多少似ています)。

1。 JTAGがハードウェアレベルのデバッガとしてどのように使用されているかを誰かが説明できますか?

私の仮定では、JTAGがデバッグ情報を取得するためにそのハードウェアを駆動するだけであるのに対し、デバッグに役立つ追加のハードウェアがオンチ​​ップに必要です。私の理解が正しければ-

2a。そのハードウェアは何ですか?

2b。そのための基準はありますか?

JTAGベースのハードウェアレベルデバッガーの実装はすべて互いに異なるため、標準的な部分には疑問があります。

最後に、JTAGをハードウェアレベルのデバッガと呼ぶのは本当に混乱しますが、JTAG標準はそのようなものを何も定義していません。では、これにJTAGが使用される場合の別の名前はありますか?

12
tinkerbeast

fyi:私があなたをよく理解しているかどうかはわかりません。あなたは私が以下に書いたすべてをすでに知っている/理解しているかもしれません、多分私よりも良いでしょう。私にメモを送ってください、そして私は答えを削除します。

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

もちろん、これは単なる追加のステートマシンです。同様の方法で、フリーズ、ステッピング、レジスタの読み取り/書き込みなどのデバッグを含む、ほぼすべての高度な操作を実行できます。ただし、これにはすべて、トンの追加ロジックを組み込む必要があります。問題のチップ。実際には、1つのチップに複数のデバイスがあります。

2b:残念ながら、私はこの件に関してあまりにも環境に配慮しているため、これ以上言うことはできません;)多くのメーカーが独自の内部標準を形成していることを知っています。メーカー間で共通の「グローバル」規格について聞いたことがあります。

1
quetzalcoatl

JTAGは、「通常の」チップ機能と並行して機能する、チップ内部に接続するための単なる方法です。これは基本的にマルチモード(同期)シリアルポートです。

これにより可能になることの1つは、ピンに直接アクセスすることによるバウンダリスキャンです。

ご想像のとおり、もう1つは、チップ内の追加のハードウェアにアクセスすることです。そのハードウェアは、(たとえば)ハードウェアブレークポイント、レジスタと任意のメモリ位置を読み取る機能、内部フラッシュのプログラミングなどを提供するように設定できます。これらは、デバッガアプリケーションが使用できる種類のものです。

JTAG標準は、チップ設計者がこれらの種類の機能を提供するために常に使用することを目的としたデバイス固有の拡張機能のためのスペースを提供します。 JTAGと、ハードウェアをデバッグするためのより高速な接続をカバーするインターフェースを標準化する試みがあります。これは Nexus と呼ばれます。ただし、Freescaleが実装しているのを見たことがないので、標準としてはあまり役に立たないようです。

用語に関しては、はい、ハードウェアデバッガー自体で「JTAG」と呼ぶのはおそらく間違っています。 「JTAG」が何であるか(質問のタイトルで使用されているように)完全にはわかりません。「JTAGポッド」または「JTAGインターフェイスモジュール」の方が良いでしょうか。

ただし、「JTAGデバッグアクセス」や「JTAGデバッガー」(実際、フラッシュのプログラミングに使用しているユーザーの場合は「JTAGプログラマー」)などのフレーズが一般的に使用されており(少なくとも英国では!)、私には思えます。混乱しないように、インターフェースの方法と提供される機能を組み合わせます。

3
Martin Thompson

JTAGには、ハードウェアをリアルタイムで簡単にデバッグできる独自のインターフェイスがあります。ソフトウェアを介して、提供されたコントローラーのクロックサイクルを直接制御できます。したがって、コード実行にハードウェアブレークポイントを設定できます。必要に応じて、ハードウェアでのコードの実行を開始、一時停止、停止できます。

JTAG制御が1に設定されている場合は常に、オシレータクロックがCPUに接続されます。そうでない場合、CPUはクロックを受信せず、命令を実行できません。これにより、ハードウェアで命令の実行を制御できます。

0