バックナンバーはこちら

today&tomorrow

Technology Update

  • T&T HOME
  • Technology Update
  • インプリメンテーションIPベース・デザインおよびSoCを簡単にデバッグする方法:Verdi Transaction Debug Platform

2019 vol.112

インプリメンテーションIPベース・デザインおよびSoCを簡単にデバッグする方法:Verdi Transaction Debug Platform

概要

開発サイクルの終盤に見つかる設計不具合は原因の究明とデバッグが極めて困難で、プロジェクトのスケジュール遅れを招きます。重大な設計不具合と思われたものが、検証テストを実行してみると単なるシミュレーション・データの問題であったと判明することも珍しくありません。従来のデバッグ手法は、問題の特定には必ずしも役立っていませんでした。本稿では、プロトコル・アナライザ、波形ビューア、ソースコード・ブラウザを統合したVerdi Transaction Debug Platformで「リアルタイム・シミュレーション・データ」を用いて一般的なUSBプロトコルの問題をデバッグする方法をご紹介します。この方法でデバッグを行うことにより、設計不具合の原因を突き止めるのにかかる時間が大幅に短縮されるなど、多くの利点が得られます。また、信号とソースコードの同期や対話型モードの利用など、Transaction and Protocol Analyzerのその他の利点についてもご紹介します。

はじめに

ケンブリッジ大学の調査[1]によると、ソフトウェア開発者は約50%の時間をコードのデバッグに費やしており、そのコストは開発者の人件費および間接費に換算すると年間で総額3120億ドルに達しています。インプリメンテーションIP(IIP)デザインのデバッグはそれだけでも非常に複雑なタスクですが、クロス・プロトコルあるいはSoCレベルのデバッグはリアルタイム実行が難しいこと、ターゲット・ソースへの可視性がないこと、そして他のプロトコルへの依存性があることなどの理由により、その難易度は飛躍的に高くなります。このため、どれほど困難なバグでも短時間で解決できる強力なデバッグ・ツールが求められています。従来のツールでこうしたデザインをデバッグするには、まず「printf」を使用した後、ログ・ファイルでメッセージを検索するのが一般的でした。しかしこのような方法は、時間と精度の面で問題があります。本稿では、一般的なUSBプロトコルの問題をいくつか取り上げ、これらをVerdi Transaction Debug Platformで簡単に解決する方法をご説明します。ここでは、従来のアプローチに比べ問題解決の効率がどれだけ向上するのかについて全体像を示すことに主眼を置いているため、あまり複雑な問題については取り上げません。

問題1:USB 3転送(トランスファー)をトランザクションとパケットに分解する

転送(トランスファー)は1つまたは複数のバス・トランザクションで構成され、トランザクション単位でソフトウェア・クライアントとそのファンクションの間で情報を移動します。つまり、転送を複数のトランザクションに分割してから、USBバス上でデータを送信します。

画像

図1.1:バルクINトランザクションの構造(方向:左から右)

画像

図1.2:バルクOUTトランザクションの構造(方向:左から右)

上述のようにUSB転送は複数のトランザクションに分割されますが、トランザクションは更に複数のパケットに分割されます。このようにいくつもの抽象度にまたがる問題を解決するには、それぞれの転送とパケットの関係を見つける必要があります。ここでは、ホストとデバイスの間で数GBのデータ転送を実行するテスト・ケースにおいて、転送の1つでエラーが発生し、どのパケットでエラーが発生したのかを突き止める場合について考えてみます。これはごく単純な問題ですが、信号FSDBのみに頼ってこの問題を解決しようとすると、非常に長い時間がかかります。ログを使用する場合も、ログ・ファイルのメッセージを取得するには何度もシミュレーションを実行する必要があり、やはり時間がかかります。

Verdi Protocol Analyzerなら、この問題をワンクリックで解決できます(図1.3)。

画像

図1.3:Verdi Protocol Analyzerの画面(グラフ領域は左ほど抽象度が高い)

上図のように、バルクIN転送をクリックして選択すると、対応するトランザクションとパケットが選択されます。この選択は他のトランザクション/転送にも拡張でき、中央のアクティビティ・エリアに表示されたすべてのオブジェクトに適用できます。トランザクション間の関係はFSDBに記録されており、VIPともネイティブに統合されています。Transaction and Protocol Analyzerは実行時にこの情報をFSDBから抽出し、階層を表示します。

問題2:USBの各エンドポイントのIN/OUTトランザクションの数を求める

USBでは、ホスト・ソフトウェアとデバイス上の特定のエンドポイントの間でデータ転送が行われます。各エンドポイントには、デバイスのファンクションの1つが一意に関連付けられます。1つのUSBデバイスは最大31のエンドポイントを持つことができます。エンドポイントの属性(最大パケット・サイズ、バースト・サイズ、方向など)はエンドポイント・ディスクリプタおよびSuperSpeedエンドポイント・コンパニオン・ディスクリプタから読み出すことができます。

エンドポイントには以下の4種類があります。

  • コントロール・エンドポイント
  • バルク・エンドポイント
  • インタラプト・エンドポイント
  • アイソクロナス・エンドポイント

カテゴリートップ