mipsEJTAGプロファイル



Mips Ejtag Profile



EJTAG MIPS拡張 JTAGの。 IEEE 1149.1 JTAGテストアクセスポート(TAP)標準によって提供されるインフラストラクチャを活用して外部インターフェイスを提供し、MIPS命令セットと特権リソースアーキテクチャを拡張して、統合システムデバッグ用の標準ソフトウェアアーキテクチャを提供します。 Mips 公式リファレンスドキュメント: http://www.t-es-t.hu/download/mips/md00047f.pdf その他の参考資料: http://www.loongnix.org/ftp/embed/ls1b/ejtag/ejtag.pdf mipsの実行を参照してください
この記事を読む前に、以下をお読みください。 jtag インターフェイス規格 .docx

「EJTAG」 サポートをデバッグする前 --- ブレークポイント命令と CP0 観測点 Mips のアーキテクチャ EJTAG 試運転前は、ユニットは長年存在していたように見えたため、次のような従来のデバッグ機能がいくつかあります。 ブレーク 単に例外につながる指令、 CPU しかし、最大4つの観測点、いくつかのハードウェアを実現するためにも CP0 制御レジスタ、各観測点は仮想アドレスを指定し、各フェッチ、ストア、およびロード操作をチェックするために、アドレスが一致した場合に例外をトリガーし、 EJTAG もちろん、ファジーアドレスマッチングではなく、オブザベーションポイントと比較すると、オブザベーションポイントが一般的なトリガーの異常を引き起こした後は、例外処理のデバッグには使用できません。

EJTAGのコンポーネントとオプション EJTAGハードウェアサポートは、MIPSプロセッサコアの拡張、EJTAGテストアクセスポート、デバッグ制御レジスタ、およびハードウェアブレークポイントユニットなど、いくつかの異なるコンポーネントで構成されています。
  1. EJTAGプロセッサコア拡張
EJTAGをサポートするMIPSプロセッサまたはコア サポートする必要があります: •デバッグモード、関連する例外、および専用のデバッグベクトル •命令セットの拡張:SDBBP(ソフトウェアデバッグブレークポイント)およびDERET(デバッグ例外リターン) •CP0レジスタ:デバッグ、DEPC、およびDESAVE 次の実装に依存 オプション •メモリマップドデバッグセグメント(dseg)(オプション) •シングルステップ実行機能はオプションです。シングルステップ実行機能の有無は、CP0デバッグレジスタを介してソフトウェアをデバッグするために示されます。 •DINTプローブ信号または実装に依存する内部信号を介したTAPからのデバッグ割り込み要求はオプションです。 •• テストアクセスポート(TAP)はオプションです •ハードウェアブレークポイントユニット(HBU)はオプションです。 CBTを実装する場合は必須であることに注意してください。 •ComplexBreak and Trigger(CBT)ブロックはオプションです。 •• デバッグ制御レジスタ(DCR)はオプションです 。 HBUまたはCBTのいずれかが実装されている場合は必須であることに注意してください。 •EJTAGのPCサンプリング機能はオプションです。 •EJTAGの高速デバッグチャネル機能はオプションです。
  • デバッグ例外とデバッグモード
デバッグモードは、デバッグ例外を介してのみ開始されます。 DERET命令の実行、またはリセットまたはソフトリセットの適用の結果として終了します。 プロセッサがデバッグモードで動作している場合、カーネルモードと同じリソース、命令、およびCP0レジスタにアクセスできます。カーネルモードアクセスの制限(ゼロ以外のコプロセッサー参照、UX、SX、KXなどによって制御される拡張アドレス指定へのアクセス)はデバッグモードにも同様に適用されますが、デバッグモードはこの章で説明するいくつかの追加機能を提供します。 その他のプロセッサモード(カーネルモード、スーパーバイザモード、ユーザーモード)は、まとめて非デバッグモードと見なされます。デバッグソフトウェアは、デバッグレジスタのDMビットを介して、プロセッサが非デバッグモードかデバッグモードかを判断できます。 引き金 デバッグ 異常な状態は次のとおりです。命令の実行( ブレーク SDBBP )、ハードウェアブレークポイント、外部 DINT 割り込み デバッグ 例外処理プロセス

デバッグモードのアドレス空間 マップされていないアドレス空間へのデバッグモードアクセスは、カーネルモードのアクセスと同じです。マップされたアドレスは、カーネルモードと同様にアクセスできます。 さらに、オプションのキャッシュおよびマップされていないデバッグセグメントdseg(EJTAGエリア)がアドレス範囲0xFFFF FFFF FF20000から0xFFFFFFFF FF3FFFFFに表示されます。これにより、dsegセグメントは互換性セグメントのkseg部分に表示されます。 デバッグレジスタのNoDCRビットの実装に依存する値は、dsegセグメントの存在を示します。dsegセグメントが存在しない場合、デバッグモードのプロセッサからのすべてのトランザクションはカーネルモードのアドレス空間に送られます。デバッグソフトウェアは、dsegセグメントにアクセスする前に、DebugNoDCRビットをチェックする必要があります。
dsegセグメントは、dmseg(EJTAGメモリ)セグメントとdrseg(EJTAGレジスタ)セグメントに細分されます。 dmsegセグメントは、プローブがメモリセグメントにサービスを提供するときに使用されます。 drsegセグメントは、メモリマップドデバッグレジスタにアクセスするときに使用されます。

dmseg(EJTAGメモリ)アドレス範囲へのアクセス
dmsegセグメントアクセスでProbEnが0に等しい場合、デバッグソフトウェアがdmsegセグメントにアクセスしました ProbEnビットが0の場合、要求を処理するために使用できるプローブがないことを示します。デバッグソフトウェアは、dmsegセグメントを参照する前に、DCRレジスタのProbEnビットの状態を読み取る必要があります。ただし、ProbEnが0のときにdmsegセグメントにアクセスすると、ProbEnビットを1としてサンプリングするデバッグソフトウェアとプローブが0にクリアする間に固有の競合が発生する可能性があります。したがって、プローブは、dmsegセグメントへの参照が決してProbEnビットが動的に0にクリアされた場合に発生します。ProbEnが0のときにデバッグソフトウェアがdmsegセグメントを参照すると、プローブが満たされるまで参照がハングします。 drseg(EJTAGレジスタ)アドレス範囲へのアクセス
drsegからの命令フェッチは許可されていません。プロセッサがdrsegセグメントからの命令フェッチを試行した場合、プロセッサの動作は未定義です。 デバッグレジスタのNoDCRビットが0の場合、プロセッサがdrsegセグメント全体へのアクセスを許可されていることを示しているため、drsegセグメント内のすべてのトランザクションに対して応答が発生します。 drsegセグメントのオフセット0x0000にあるDCRレジスタは、dsegセグメントが存在する場合は常に使用可能です。デバッグソフトウェアは、DCRレジスタを読み取って、drsegに存在する他のメモリマップドレジスタを判別することが期待されています。 デバッグモードで発生する例外 リセットとソフトリセット以外のデバッグモードで生成された例外の処理は、デバッグレジスタとDEPCレジスタのみが更新されるという点で、非デバッグモードで生成された例外とは異なります。他のすべてのCP0レジスタは、デバッグモードで発生した例外によって変更されません。例外ベクトルは、デバッグ例外ベクトルと同じです(を参照)。 44ページのセクション2.3.2 )、プロセッサはデバッグモードのままです。 一部の非デバッグモード例外イベントのみが、デバッグモードで例外を引き起こします。残りのイベントはブロックされます。 デバッグ例外ベクトルでハンドラーにネストされたエントリが発生する前に、Debug、DEPC、およびDESAVEレジスタの内容を保存するのはデバッグハンドラーの責任です。ハンドラーは、プロセッサーをデバッグモードに保つために、DERETではなくジャンプ命令によってデバッグ例外ハンドラーに戻ります。 不正確なエラーの例外 デバッグモードでは、命令フェッチまたはデータアクセスのバスエラー、キャッシュエラー、またはマシンチェックが原因で、不正確なエラーの例外が発生する可能性があります。 デバッグレジスタのIECIビットは、デバッグモードへのエントリまたは再エントリ時に不正確なエラー例外をブロックします。デバッグモードとデバッグハンドラーに安全に再入力できるように十分なコンテキストが保存された後、デバッグ例外ハンドラーによって再度有効にすることができます。 命令フェッチバスエラー、データアクセスバスエラー、キャッシュエラー、およびマシンチェックによる保留中の例外は、デバッグレジスタのIBusEP、DBusEP、CacheEP、およびMCheckPビットによって示され制御されます。
  • ブレークポイント命令のデバッグ
EJTAGは、新しいブレークポイント命令SDBBPを導入します。これは、MIPS32およびMIPS64 BREAK命令とは異なり、以下で説明するシングルステップおよびハードウェアブレークポイントデバッグ例外のように、プロセッサをデバッグモードにし、関連するハンドラコードをフェッチできます。 EJTAGメモリから。
  • EJTAGコプロセッサー0レジスタ
デバッグ - - 構成ビットと制御ビットには DEPC -----デバッグ例外 の差出人住所の終了後 使用説明書 DSAVE ---- ために デバッグ 一時レジスタとしての例外ハンドラサービスは、メモリの他の汎用レジスタを保持するため、他の汎用レジスタを使用できるようになります。 以下はいくつかを強調しています デバッグ 登録簿: デバッグレジスタは、デバッグ例外を制御し、デバッグの原因に関する情報を提供するために使用されます 例外。 非デバッグモードから読み取った場合、DMビットとEJTAGverフィールドのみが有効であり、他のすべてのビットとフィールドの値は予測できません。デバッグレジスタが非デバッグから書き込まれる場合、プロセッサの動作は未定義です。 モード。 以下に示すように、一部のビットとフィールドは、デバッグ例外および/またはデバッグモードの例外でのみ更新されます。 •DSS、DBp、DDBL、DDBS、DIB、DINTは、デバッグ例外とデバッグモードの例外の両方で更新されます。 •DExcCodeは、デバッグモードの例外で更新され、デバッグ例外の後で未定義になります •HaltとDozeはデバッグ例外で更新され、デバッグモードでの例外後には未定義です。 •DBDは、デバッグモードとデバッグモードの例外の両方で更新されます。

NoDCR: 読み取り専用 ビット 示す dseg それは存在しますか LSMN :お望みならば dseg 消えた、設定 ビット ために 1 、たとえ デバッグ モードも、カバーされるメモリ領域にアクセスするために、 EJTAG ほとんどの制御システムは使用できないため、特定の場所でのみ使用できます ロード/ストア 使用前後の説明 IEXI : この ビット プット 1 不正確な例外が遅れた場合。デフォルトでデバッグモードに入るように設定されている場合。 1 クリア、去る 0 、しかし、あなたはそれが明らかになれば、延期された例外が自宅ですぐに発生することを書くことができます 1 異常異常により遅れる場合 ペンドビット 表示先:
DSS、DBp、DDBL、DDBS、DIB、DINT 原因 デバッグ 異常の原因、読み取り専用 ビット 、原因を記録します デバッグ 異常な
DExcCode : 記録 デバッグ その他の異常の発生なし デバッグ 例外の原因は、通常の状況では、に記録されています 原因 登録 ExcCode フィールド、最初に入力 デバッグ 異常、未定義のフィールド
  1. EJTAGテストアクセスポート
EJTAG その白は JTAG 増加命令と追加のデバッグ機能に対応するレジスタに基づいて、 TAP TAP制御 同じだ:
ここでいくつかの用語を選択してください データレジスタ(TAP命令DATA、ALL、またはFASTDATA) 読み取り/書き込みデータレジスタは、プロセッサアクセス中のオペコードおよびデータ転送に使用されます。データレジスタの幅は、32ビットプロセッサの場合は32ビット、64ビットプロセッサの場合は64ビットです。 データレジスタで読み取られた値は、書き込みのためのプロセッサアクセスが保留中の場合にのみ有効です。この場合、データレジスタはストア値を保持します。データレジスタに書き込まれた値は、保留中の読み取りに対するプロセッサアクセスが後で終了した場合にのみ使用されます。この場合、書き込まれたデータ値はフェッチまたはロードの値です。この動作は、データレジスタが、以前に書き込まれた値を後で読み取ることができるメモリ位置ではないことを意味します。 アドレスレジスタ(TAP命令ADDRESSまたはALL) 読み取り専用アドレスレジスタは、プロセッサアクセス用のアドレスを提供します。レジスタの幅は、プロセッサ実装の物理アドレスのサイズ(32〜64ビット)に対応します。特定の長さは、他の場所では示されていないため、アドレスレジスタをシフトすることによって決定されます。 レジスタに読み込まれた値は、プロセッサアクセスが保留中の場合は有効です。それ以外の場合、値は未定義です。 レジスタの2つまたは3つのLSBは、EJTAG制御レジスタからのPszフィールドとともに使用され、保留中のプロセッサアクセス転送のサイズとデータ位置を示します。これらのビットは、ロード/ストアによって参照されるアドレスから直接取得されません。 EJTAG制御レジスタ(ECR)(TAP命令制御またはALL) 32ビットEJTAG制御レジスタ(ECR)は、プロセッサリセットとソフトリセットの表示、デバッグモードの表示、アクセスの開始、終了、サイズ、および読み取り/書き込みの表示を処理します。 ECRも: •デバッグベクトルの場所とサービスプロセッサアクセスの表示を制御します。 •デバッグ割り込み要求を許可します。 •プロセッサの低電力モードを示し、および •実装に依存するプロセッサと周辺機器のリセットを可能にします。 Rocc(ビット31)であるリセットがすでに0であるか、同時に0に書き込まれない限り、EJTAG制御レジスタはUpdate-DR状態で更新/書き込みされません。この条件により、リセット後のプロセッサアクセスの適切な処理が保証されます。









  1. デバッグ制御レジスタ
デバッグ制御レジスタ(DCR)は、プロセッサコアまたは外部ロジックブロックの一部として実装できるメモリマップドレジスタです。 EJTAG機能の可用性とステータスを示します。 DCRを含むメモリマップ領域は、デバッグモードでのみソフトウェアで使用できます。 DCRの有無は、CP0デバッグレジスタに示されます。
  1. ハードウェアブレークポイントユニット
ハードウェアブレークポイントユニットは、命令およびデータハードウェアブレークポイントを制御するメモリマップドレジスタを実装します。ハードウェアブレークポイントレジスタを含むメモリマップ領域は、デバッグモードでのみソフトウェアにアクセスできます。 ハードウェアブレークポイント機能の有無は、DCR内のソフトウェアをデバッグするために示されます。
  • ハードウェアブレークポイント
命令のハードウェアブレークは、任意のアドレス領域に設定できるという点で、ソフトウェアデバッグブレークよりも優れています。さらに、SDBBPコードを挿入してメモリを変更できない場合でも、ハードウェアブレークを使用できます。ハードウェアデータブレークポイントにより、ロード/ストア操作の中断が可能になります。 EJTAGは、次の2種類の単純なブレークを実装します。 •命令ブレーク。特定の仮想アドレスからの命令フェッチにブレークを設定できます。 •データブレーク。特定の仮想アドレスからのロード/ストア参照にブレークを設定できます。さらに、データ値で修飾できます。 各タイプの最大15のブレークチャネルが実装され、各ブレークチャネルは、アドレス、アドレスマスク、ASID、および参照タイプでプログラムできます。 EJTAG仕様4.00以降でも、複雑なブレークポイントが定義されています。複雑なブレークの章を定義する複雑なブレークポイントには、さまざまな種類があります。単純なブレークと同様に、複雑なブレークは、MIPSPDtraceアーキテクチャを介したトレースを有効または無効にするために使用できるトリガー信号を引き起こす可能性があります。
  1. 高速デバッグチャネル
EJTAGバージョン5.0は、デバッグホスト/プローブとターゲット間のデータ転送のためのオプションの高速デバッグチャネル(FDC)メカニズムを追加します。 FDCメカニズムにより、ユーザーはデータ転送を設定してから、通常の操作を再開できます。データ転送はバックグラウンドで行われ、ターゲットCPUは、転送のステータスを定期的にチェックするか、転送の終了時に中断するかを選択できます。 FDCメカニズムは、ターゲットCPUの物理アドレスマップにマップされる2つの先入れ先出し(FIFO)構造を追加します。プローブは新しいFDCTAP命令を使用してこれらのFIFOにアクセスし、CPU自体はメモリアクセスを使用してFIFOにアクセスします。 既存のFASTDATAメカニズムと比較した場合(を参照) セクション4.4.3「FASTDATA命令」 )、FDCの主な利点は、プローブがデータ転送FIFOの読み取りまたは書き込みを行うときにCPUをブロックする必要がないことです。これにより、CPUのオーバーヘッドが大幅に削減され、CPUで実行されるコードへのデータ転送の煩わしさが大幅に軽減されます。
  1. 複雑なブレークポイントとトリガー(CBT)ブロック
このオプションのブロックの有無は、DCRレジスタのビット(10)で示されます。このブロックのリストされている各機能はオプションであり、この機能の有無は、アドレス0x8000のdrsegアドレスマップレジスタであるCBTcontrolレジスタのビットによって示されます。
  1. PCサンプル
PC サンプリングは、実行中の統計情報システムを収集するためのアクティビティの通常の実行に影響を与えない方法を提供します。 PC 現在のビューの定期的なサンプリング pc 値。この値は、レコードを取得して所定の位置にプローブすることができます。これにより、プログラマーは、サンプリングヒストグラムソフトウェア構成内の統一感をしばらくの間確認できます。 CPU クロックサイクルのほとんどで起こったこと。この機能は便利であるだけでなく、非常によく知られています。過去数年間は割り込みベースのシステムです PC サンプリング、インパクトを実行するこの方法。サンプリング周波数による DCR 制御する番号フィールドを登録します。
  1. PDtrace
PDtrace プログラムの実行を追跡できます。 PCサンプル 記録された実行のみ pc 、だが PDtrace トラッキングデータは、アドレス値の読み取りと書き込みでも読み取ることができます。 バイナリコード分析プログラムがプログラムを追跡していると仮定すると、実装の追跡には多くのデータは必要ありません。したがって、実行順序を知る必要があるのはいつですか。 CPU 条件分岐に直面したときの距離の順序は、条件が満たされているかどうかを知るだけで済みますが、クラスのジャンプ命令レジスタ、実績には完全なアドレスが必要です。 情報を小さなオンチップメモリ​​にしばらくトレースしますが、シンプルで高速ですが、オンチップキャッシュが非常に小さいため、通常はレコードの実行のみです。ローカルプローブへのトレース情報が取得される可能性がある場合は、記録されている可能性があります。
  1. シングルステップ実行
EJTAGは、コードがRAMに常駐していなくても、プログラムとオペレーティングシステムのシングルステップ実行をサポートします。
  1. EJTAG 制御する方法 CPU
1.1。 プローブを使用します JTAG セットアップ ECR トンボ( ProbTrap )、デバッグ例外への入り口 0XFF20 0200 ----- 寝転ぶ dmseg 次に、プローブを提供することができます ECR (( EjtagBrk )デバッグ例外が発生したときに、デバッグ例外要求、デバッグブレークポイントセット、またはウォッチポイントデバッグ例外にトリガーされたハードウェアを入力する dmseg 命令フェッチが開始され、プローブの制御が取得されます。 二。 プローブを送ることができます EJTAGBOOT コマンドを実行し、次のコマンドを待ちます CPU リセット後、 CPU 私たちはから行きました dmseg 指示を読んでください。
  1. どのように 調査 (( dmseg )コードを実行する
1個 機械側、読むことによって ejtag ECR 制御レジスタ (ir = 10) 、Attentionは文字列を新しい値に読み込み、読み返して確認します DM(ビット3) かどうか 1、 すでにシステムにあるショーです デバッグ モード ,goto 3, そうでなければ goto 2 二。 書く ECR(ir = 10)、 セットアップ ProbTrap(bit14)1、 作る デバッグ 例外ベクトル点 FF20 0200 (寝転ぶ dmseg )、次に設定します EjtagBrk ために (ビット12) 1、システムへのリクエスト デバッグ 異常な、 goto 1 3.3。 見る ECR 登録 PrAcc(ビット18) の場合は1です 1 それは示しています CPU ejtag dmseg アドレスはアクセスを発行します 、ECR 登録 PRnW(ビット19) 読み取りまたは書き込みを示し、 Psz(ビット30:29) アクセスの幅を示します , goto 4, そうでなければ goto 1 四。 読んだ ejtag アドレスreg(ir = 8) addr 変数、取得 CPU 訪問したい住所 書き込み操作の場合 goto 5, それ以外の場合は読む goto 6 5.5。 読んだ ejtag 日付登録(ir = 9)、 私への書き込みの内容を読む アドレスがより大きい場合 0xff200200、(addr-0xff200200)/ 4 はい codebuf オフセット オフ、 その後 codebuf [offs] = data、 アドレスがより小さい場合 0xff200200、param、stack = data 待つ ,goto 7 6.6。 アドレスがより大きい場合 0xff200200、(addr-0xff200200)/ 4 はい codebuf オフセット オフ、 その後 data = codebuf [offs]、 アドレスがより小さい場合 0xff200200、data = param、stack 待つ 意志 データ 書く ejtag data reg(ir = 10)、goto 7 7。 書く ECR レジスターがクリアされました PrAcc ビット、そう CPU メモリアクセス操作が完了しました。