2022/8/15
製品
カテゴリー
タグ
7975 Views
ロジック信号を任意の関数や区間として認識させオーバーヘッドを抑える
DT+のロジック変換機能を用いて、高速な割り込み処理などのテストポイントのオーバーヘッドの影響が大きい処理に極力負荷やタイミングを変えずにトレースする方法についてご紹介します。
Contents
割り込み処理の可視化とその課題
DT+Traceで可視化したいもののひとつに、高速な割り込み処理を含む処理のトレース、パフォーマンス測定があります。割り込みの頻度の確認や複数の割り込みが発生する場合のスタック状況など、ICE/JTAG等ではbreakでのステップ実行でできない現象の解析で非常に力を発揮します。
しかしテストポイントを挿入する場合、以下の課題がありました。
・テストポイントのオーバーヘッドの影響でターゲットが正しく動作しない
・テストポイントの関数呼び出しのオーバーヘッド/スタック使用で現象が再現しない/タイミングが変化してしまう
・DTドライバ内で全体割り込み禁止をかけられないため、割り込み処理にテストポイントを挿入するとトレースできない
このような状況でも使える、関数呼び出しも割り込みも使わなくてもできる超高速なトレース手段を用意しました。
DBOX+Traceのロジック機能を利用した超・高速パルストレース
パルストレースを行う場合、DBOX+Traceのロジック取得機能を利用します。仕組みはシンプルで、計測区間の開始・終了位置にロジック信号の制御処理を組み込んでいただき、DBOX+TraceのロジックポートからポートのHI→LOのエッジを開始、LO→HIのエッジを終了として独自にデータを収集します。
どの程度早いかの参考として、GPIO4bitの接続の通常テストポイントのオーバーヘッドと比較したのが以下のグラフになります。
(※パルス以外の形式はデータ長が最短の場合を想定しております。実際はもっとオーバヘッドが大きくなります)
ターゲットなどによって差はありますが1回のポート制御だけで済むため、少なくとも通常のテストポイント処理に比べると非常に小さいオーバーヘッドでトレースできます。
⚠️ 制限/注意事項
・本機能はDBOX+Traceで取得する接続方式のみの対応となります。
・本機能を利用する場合、以下の機能が使用できません。
・[テストレポート収集設定]の[スタート、ストップトリガー]>[ロジックトリガーを使用する]
・[テストレポート収集設定]の[その他]>[コア情報を収集する]
・ロジックウェーブスコープ
・ロジックデータ解析レポート
・ラインモニタ
チュートリアル
以下の章では実際にパルストレースを行うための手順について説明します。
1. プロジェクトの設定の変更
1-1.ロジック信号の通過情報への関連付け
ロジック信号をどのように解釈するかの設定は「プロジェクトの設定」から行います。DT+Traceアプリケーションより「ファイルメニュー」から「プロジェクトの設定」を選択し、「プロジェクトのプロパティ」の「オプション」メニューを選択します。
ロジック信号の通過情報への関連付けの項目の「関連付ける対象」メニューから、「関数/区間」を選択します。
ロジック信号の立下りエッジから立ち上がりエッジまでを関数のFuncIn/Outまたは任意の区間の通過情報として解釈します。
HI→LO(立ち下がりエッジ)をFuncInまたは任意の区間の計測開始点
LO→HI(立ち上がりエッジ)をFuncOutまたは任意の区間の計測終了点
として認識します。ロジックChひとつに対し関数、または任意の区間ひとつが登録可能です。登録可能な関数区間は最大8Chまでとなります。
設定後に「完了」ドロップダウンリストから任意の項目を選択し完了します。なお、設定を切り替えた際はDTヘッダファイルの再生成が行われ、以下の表示が出力されます。
⚠️注意事項
本設定を変更前に既に「テストポイント」の関連付けをしたレポートを取得していた場合、そのレポートデータは元の設定では解析不能となります。既に現在のDT+プロジェクトファイルで「テストポイント」の関連付けを利用した解析データを保持したい場合は、プロジェクトをコピーしてデータを分けるかプロジェクトを新規に作成してください。
テスト実行の設定
通過情報の関連付け
ロジック信号の通過情報の関連付けの詳細設定はテスト実行メニュー」の「ロジックデータ設定」を選択します。
取得方法のドロップダウンリストから「通過情報の関連付け」を選択します。設定するロジックチャンネルの「ロジックの関連付け」欄をダブルクリックするとドロップダウンリストが表示されます。
関数/区間の設定
ドロップダウンリストから「関数」または「区間」を選択します。
「関数」を選択した場合は「関数の選択」ダイアログが表示されますので、リストから変換する関数を選択します。
「区間」を選択した場合はそのまま設定が反映されます。どの区間かわかるよう、同チャンネルの「関連付けの名前」に区間名を設定します。
テストレポート収集設定
ロジック信号を通過情報に関連付けして行う場合、「テスト実行メニュー」の「テストレポート収集条件設定」を実行します。「テストレポート収集設定」ダイアログの「その他」から、「ロジックデータを取得する」を有効にします。
計測区間にポートのHI/LOW処理を仕込む
関数、区間に関連付ける場合、該当の関数のFuncIn/Out、または区間計測の開始/終了位置に相当する箇所にポートのHi/Low処理を別途設定します。
ポートHI/LOWの処理は環境依存になりますが、APIではなく直接レジスタ制御する方法などを用いていただく事で関数スタックの消費を抑制する事も可能です。なお、「関数」を指定した場合該当関数のFuncIn/Outのテストポイントは無効設定になります。テストポイントの有効無効状態の更新をしてください。
ターゲットのリビルドと実行
関数/区間に割り当てたのち、ヘッダファイルをの再生成を行ってリビルドし、ターゲットにロードします。DBOX+TraceにLogic Boardを取り付け各関数/区間に割り当てたポートと接続します。
レポートデータ上での表示
ロジックてデータを関数/区間と関連付けた場合、テストレポート上では「Logic Data(Notify)」として表示され、「説明2」の項目に関数名または対象項目区間名を表示します。
レポート解析時にロジック変換レポートとして解析結果が表示されます。
また、ロジック変換レポートの結果をダブルクリックする事でロジック変換詳細リストが表示されます。リスト上の結果をダブルクリックする事で該当のテストレポートにジャンプする事が可能です。
「関数」として登録したテストポイントは関数遷移スコープ内で関数として認識させることが可能です。
上記の例ではportTASK_FUNCTIONが「関数」に割り当てた対象になります。プロセス解析を有効にした場合は下記の通りになります。
例としてTask_RGBLED関数内で割り込み処理のportTASK_FUNCTIONのタイミングや頻度が確認できます。該当範囲のトリミングなどを活用する事で割り込み回数や頻度なども解析できるため、関係する割り込み関数など割り当てることで、通常時と異常時の割り込みの頻度や回数の違いなどをロジック変換レポートなどから解析できます
以下はTask_RGBLEDのTaskMainのメインループ周期時間の最小、平均、最大値の各関数遷移スコープです。
・最小
・平均
・最大
上から、最小、平均、最大の時のロジック変換レポートと関数遷移スコープの結果になります。最小時は割り込みが発生せず、平均と最大では割り込み回数には大きな差はなく別要因が原因である、という分析ができます。
各図の下部にあるロジック変換レポートのportTASK_FUNCTIONの最小/最大時間は240/250nsです。同様の環境で関数のFuncIn/Outのみに挿入して計測した場合、GPIO2bitで24usec程度のオーバーヘッドが発生していました。仮にGPIO4bitにしたとしても12usec程度は必要となるため、パルストレースは非常に小さいオーバーヘッドで従来のトレースデータと同じレベルの解析が可能です。
このように従来では分析の難しかった高頻度、短周期の割り込みの解析が容易になります。