Ignitarium-logo
Ignitarium-logo

  2021.05.26

ハードウェアプラットフォーム向けの OpenOCD を使用した費用対効果の高いデバッグソリューション

今日の世界ではハードウェアプラットフォームの複雑さが増しており、これらのプラットフォームの市場投入までの時間を短縮することが、マーケットセグメントを獲得するための鍵となります。ハードウェアが重要な部品と見なされていた時代は終わりました。 現在、顧客はボードが複雑なアプリケーションを実行するための、信頼性が高く堅牢なソフトウェアを備えた世界クラスのハードウェアインフラストラクチャを含むパッケージとして提供されることを期待しています。これらの課題に対応し効果的に作業を開始するために、エンジニアに適切なツールセットを提供する必要があります。

ソフトウェア開発は、リファレンスボードまたはFPGAプラットフォームを使用して、pre-silicon の段階で早期に開始されます。洗練されたデバッグインフラストラクチャを持つことは、これらのソフトウェアシステムの開発の重要な部分です。インフラストラクチャは2つの側面で役立ちます。1)ソフトウェアのテスト中に、他の方法では不可能だった可能性のあるいくつかのコーナーケースシナリオを再現する場合。そして、2)ソフトウェアで見られる問題はすべて再現して分離できるため、エンジニアはソフトウェアをすばやくデバッグできます。

デバッグフェーズで、多くのエンジニアが依存しよく知られたインターフェースはJTAGです。メーカーはJTAGを提供して、エンジニアが集積回路をテスト及びプログラムするための完全なアクセスを可能にします。

デバッグ用に、サードパーティベンダーが提供する強力なJTAGインターフェイスツールがいくつかあります。ただし、これらのデバイスは安価ではなく、複数のハードウェアプラットフォームでこのようなツールに投資することで、全体的なコストが飛躍的に増加することは間違いありません。そこで、わずかなコストで柔軟に対応する方法はありますか?このブログは、JTAGを介してのデバッグで OpenOCDソフトウェアを組み合わせることにより、エンジニアに低コストのソリューションを提供することを目的としています。

JTAG とは ?

​JTAGは、基板の製造上の問題を解決するために1980年代に開発されたIEEE標準(1149.1)です。これは主に、設計の検証と製造後のプリント回路基板のテストに使用されます。 つまり、ボード上のチップと直接通信するためのハードウェアインターフェイスです。

これまで、PCB(プリント回路基板)のテストは、bed-of-nails と呼ばれるシステムを介して行われていました。 PCBは、チェックを実行するためにこのテストボードに接続されるいくつかのテストポイントで設計されました。

以下はJATGの新しい使用例です。

  • ハードウェアデバイスに接続して、メモリから読み取り/書き込みを行う
  • RAMをダンプし、パスワードや暗号化キーなどの機密データにアクセスする
  • ターゲットチップのパイプラインに直接命令を挿入する
  • 周辺機器をアクティブにして、I / Oピンの設定やリセットなどの動作を変更する
  • フラッシュメモリにアクセスして、デバイスのファームウェアを更新または変更する

JTAGアーキテクチャ

JTAG回路の基本アーキテクチャは、Data Registers(DR)のセット、Instruction Registers(IR)のセット、finite state machine(FSM)、および4ピン シリアルインターフェイスで構成されています。 FSMの説明と詳細: FSM 

JTAG仕様IEEE1149.1は、信号だけでなく、デバイスのTAP(テストアクセスポート)コントローラに組み込まれた「ステートマシン」がどのように動作する必要があるかを指定します。 したがって、JTAGインターフェイスはチップと通信するために最低4つのピンを必要とします。 これらの信号、およびそれらを接続および制御するシリコンロジックは、まとめてテストアクセスポートまたはTAPコントローラーと呼ばれます。

  • TCK (Test Clock) –実際のクロック速度は、JTAG規格では指定されていません。TAPコントローラは、JTAGを制御する外部デバイスからその速度を受け入れます。
  • TMS(Test Mode Select) – TAPコントローラーへの入力として使用されます。
  • TDI (Test Data In) – データ入力。チップがそれらを使って何をするかは、JTAGとは無関係です。
  • TDO (Test Data Out) -データ出力。
  • [オプション]TRST(Test Reset)- このオプションの信号は、JTAGをリセットするために使用されます。

Note that 

  • ステートマシンがShift-IRまたはShift-DR状態の時、データはTDIピンとTDOピンに読み書きされます。
  • IR (Instruction Register) と DR (Data Register) は、ファンクションコールのようなものです。
  • IRの値は「関数」であり、DRの値は「引数」です。
  • JTAG仕様は、「ファンクション」がどうあるべきかを定義していません。それはメーカー次第です。

興味深いことに、TMSを5クロックサイクル以上ハイに保つと、ステートマシンは任意の状態からテストロジックのリセット状態に戻ります。したがって個別のTRSTピンはオプションであり必要ありません。


TAP(テストアクセスポート)
 

ANSI/IEEE Standard 1149.1-1990, (Standard Access Port and Boundary-Scan Architecture) は、コンポーネント自体またはプリント回路基板上のコンポーネント間の相互接続をテストするための標準化されたアプローチを提供するために、集積回路に含めることができるテストロジックを定義します。

テストロジックを使用すると、テスト命令とテストデータをコンポーネントに送信でき、命令の実行時に結果を読み取って監視できます。すべての命令、テストデータ、および結果は、シリアル形式で送信されます。この規格で定義されているテストロジックは、TAP入力を介してアクセスされる一連の バウンダリスキャン・セル と テストサポートロジック で構成されています。

Schematic Diagram of JTAG enabled Device

TAP(テストアクセスポート)は、さまざまな内部テストを開始し、割り当てられた命令レジスタに基づいて内部レジスタへのアクセスを提供するコントローラと見なすことができます。

すべてのTAPには、それを区別して認識するための一意のIDコードを保持するIDCodeレジスタが必要です。JTAGデバッグの主な手順は、インターフェイスに接続されているTAPを識別し、適切なIR / DR (Instruction / Data Registers) セットを使用して内部チップリソースにアクセスすることです。OpenOCDは、自動化によってこのインターフェースの真の可能性を解き放つために、JTAGと組み合わせることができる最も強力なツールの1つです。ここでは、さまざまなステーションへのリモートアクセスと組み合わせた自動化が重要な要件であり、OpenOCDはまさにそれを提供します。これは、ニーズやさまざまなSoCアーキテクチャに合わせて調整できる直感的なインターフェイスです。

OpenOCD (Open On-Chip Debugger)

OpenOCDは、さまざまなチップとインターフェイス用の唯一のオープンソースデバッグソフトウェアツール/リポジトリ(ナレッジベース)です。これにより、(JTAGインターフェイスデバイスとペアリングされている場合)ターゲットデバイス上のJTAGのTAPコントローラーを操作して、ビットを(上記のステートマシンを介して)送信し、チップが有効なコマンドとして解釈します。

OpenOCDのサポートには、通信用のJTAG信号を適切にシーケンスするためにデバイスに関する特定の情報が必要であるため、デバイスアーキテクチャをキャプチャする構成ファイルを作成する必要があります。 最も一般的なチップタイプの多くの構成ファイルはOpenOCDに含まれており、カスタムデザイナーチップ用に新しいファイルを作成する必要があります。

OpenOCDを使用すると、一時停止、操作のステップスルー、メモリの検査、メモリへの書き込み、ウォッチポイントの設定、ブレークポイントの追加、プロセスやプロセスメモリへのコードの挿入などの複雑な操作など、必要なすべての基本操作を実行できます。この手法は、従来のソフトウェアデバッグタスクを実行するためにハードウェアを操作しているため、「ハードウェアベースのソフトウェアデバッグ」と呼ばれます。 サポートされていない新しいコアの場合、これらの操作をサポート出来るようにするため、フレームワークの変更が必要です。

前述のように、このソフトウェアはオープンソースであり、必要に応じて誰でも使用できます。 イグニタリアム は、(さまざまなチップメーカーの)チップ設計/検証チームが非標準の複雑なJTAGデイジーチェーンを備えたチップで検証テストを実行するためのカスタムJTAG + OpenOCDソリューションを提供してきました。

マルチコアアーキテクチャを備えたASIC / SoCの主な課題の1つは、さまざまなブロックのデバッグです。ご存知の通り、新しいシリコンを立ち上げるために最初の信頼できるツールはJTAGです。これは、従来のCLI形式では操作に時間がかかり面倒な場合があります。OpenOCDをJTAGと組み合わせると、作業全体の時間を大幅に短縮できます。ただし、OpenOCDソフトウェアレイヤーに個別に統合するそれぞれのデバッグ構造を追加して、これらのチップの通常および複雑なデバッグセットアップを自動化できるようにする必要もあります。

イグニタリアムには、オープンソースソフトウェアの一部としてサポートされていないコアに対してこのサポートを追加する専門知識があります。 ある顧客は非標準のバスアーキテクチャと統合されたIPコアの複数のインスタンスを持っていました。 チップに実装されたバス規格を使用してこれらのコアと通信できるようにソフトウェアレイヤーを変更し、これらの複数のコアインスタンスのデバッグをサポートできるようにすることで、カスタムソリューションを提供しました。

参考文献

  1. JTAG Primer
  2. Coresight debug Architecture
  3. Technical guide to JTAG
  4. OpenOCD Source Repo
  5. JTAG Fundamentals

英語ページ

e-Book

eBookの無料ダウンロード

DNNモデルのハードウェア・アクセラレーションに
FPGAを選択する6つの理由