Renesas



Section1
Section2
Section3
Section4
Section5
Section6




まず、RXファミリ用エミュレータのラインアップをご紹介します。オンチップデバッギングエミュレータとしてはE1とE20の2つがあります。E1は低価格版でE8aエミュレータの後継機種、E20は高機能版でE10A-USBエミュレータの後継機種になります。E1エミュレータは、E8aの価格はそのままに、デバッグ機能にパフォーマンス計測機能が追加されます。E20エミュレータは、E1の機能に加え大容量リアルタイムトレースやリアルタイムRAMモニタ機能を備えており、価格は従来のE10A-USBよりも抑えています。さらに本格開発用のフルスペックエミュレータとしてE100を用意しており、今後RX600シリーズ、RX200シリーズに対応します。

続きまして、オンチップデバッガE1とE20の特徴について説明します。まずE1、E20共通機能として、すでにE100で採用されている“使いやすいGUI”を踏襲しています。ホストPCとの接続にはUSB2.0を採用し、高速データ転送にも対応しています。E1においては、ターゲットボードとの接続に従来のSCIだけでなく、JTAG接続方式も可能です。また、自己復帰型ヒューズを採用しており、エミュレータ接続時に仮にヒューズが切れても、その後の再接続が可能となりました。さらにホットプラグイン機能を新たに加え、システムを動かしたままエミュレータの挿抜が可能です。詳細については後の章で紹介します。なお、E1、E20ではこれまでE10A-USBで採用されていたデバイスライセンスを廃止しましたので、シリーズごとにライセンスを新たに購入することなく、各シリーズ共通で使用することができます。

次にE1とE20の機能差を簡単に説明します。ユーザインタフェースについては、E20でAUDトレース機能付きE10A-USBと同様、38ピンコネクタを採用しています。またE8aやAUDトレース機能なしのE10A-USBで使用していたボードにも接続できるよう、38ピン-14ピン変換コネクタも同梱しています。トレース機能ではエミュレータに内蔵したメモリにより、最小でも2M分岐またはサイクル分のトレースが可能です。内蔵メモリは最大で32MBまで指定できます。RAMモニタ機能ではトレース信号を使用してデータのモニタリングを行っており、オンチップデバッガでありながら、CPUの動きを止めずにリアルタイムRAMモニタを実現しています。

次にE20の機能仕様について説明します。仕様はデバイスに内蔵されているデバッグ回路に依存しますので、ここではRX610を例に解説します。ブレークやトレース、パフォーマンス計測で指定できるイベントは、アドレスフェッチで8箇所、データアクセスで4箇所設定することができます。また組み合わせブレークとして状態遷移が指定できるのが特長です。トレース機能ではバス表示だけでなく、逆アセンブル表示やCソース表示も可能です。リアルタイムRAMモニタは最大4Kバイトの領域をモニタできます。パフォーマンス計測は最大2区間を計測できます。なお、トレース機能、パフォーマンス計測機能、リアルタイムRAMモニタ機能については後の章で詳しく解説します。

次にE1/E20エミュレータで追加された新機能について説明します。デバッグコンソール機能は、エミュレータを接続している状態でprintf関数などの標準ライブラリを使用してコンソールウィンドウに出力できる機能です。通常、標準入出力関数を使用した場合、マイコンのシリアルポートなどに出力されますが、コンソールウィンドウに入出力する低水準関数を提供することで従来シミュレータでのみサポートしていたコンソールウィンドウ機能をエミュレータ接続時でも使用できるようになりました。

次にホットプラグ機能について説明します。ホットプラグ機能とはユーザシステム動作中にマイコンをリセットすることなくエミュレータを接続できる機能です。これにより、不具合が発生している状態でエミュレータを接続することができ、不具合動作中のデータのモニタリングやバッファリングなどが可能となります。ホットプラグ接続を行う場合は①から④の手順で接続を行います。また、マイコンの専用端子をホットプラグ接続できる状態にしておく必要がありますので製品量産前の段階でのみ使用します。

ここでは新オンチップデバッギングエミュレータE20の接続手順と特長的な機能であるトレース機能、パフォーマンス解析機能、RAMモニタ機能について紹介していきます。まず、E20の起動方法について説明します。E20とユーザシステムの接続後、E20の電源を投入します。その後ユーザシステムの電源を投入し、“High-performance Embedded Workshop”を起動してE20との接続を行います。ワークスペースを開いた後「デバッガ起動設定ダイアログ」が開かない場合は「セッション」を切り替えます。「セッション」を切り替えてもダイアログが表示しない場合は接続ボタンで接続します。

「起動設定ダイアログ」では接続するユーザシステムに実装されているCPUグループや発振周波数、CPUの動作モードなどを設定します。「デバイス」タブでは、使用するMCUグループ、デバイス名を設定します。通信タブでは、E20内で使用するJTAGクロックを設定します。設定後「OK」ボタンを押します。

次に「コンフィグレーションプロパティダイアログ」が開きますので「MCU」タブでCPUの動作モード、ユーザシステムに実装されている発振周波数設定などを行います。「エンディアン」にはMCUの「MDE端子」で設定されている「エンディアン」が表示されます。「ワークRAM開始アドレス」にはデバッガが使用するワークRAM領域の先頭アドレスを指定します。ユーザシステムと重ならないエリアに設定してください。「システム」タブでは、トレース用信号をトレース機能に使用するか、リアルタイムRAMモニタに使用するかを選択します。「内蔵フラッシュメモリの上書き」タブでは、プログラムダウンロード時のフラッシュの扱いを設定できます。チェックしない領域は内蔵フラッシュを消去して書き込み、チェックした領域は消去せずに上書きで書き込まれます。全ての設定が終わったら「OK」ボタンを押して完了です。

次にトレース情報の取得方法について説明します。左上にあるボタンが表示モードを変更するボタンでバスモード、逆アセンブルモード、ソースモードの3種類です。また、これらの表示は混在させることができます。ソース表示モード時はCソース1ライン単位で実行履歴をステップすることができ、バックステップも可能です。トレース動作は分岐命令実行時およびデータアクセス時の実行履歴のみをトレースするため、バス表示モード時は実行履歴が分かりにくくなってしまいます。E20エミュレータではこれを補うため逆アセンブルモードおよびソースモード時にトレースした分岐命令のアドレス情報およびメモリアクセスした命令のアドレス情報などから実行履歴を補間し、トレースウィンドウに表示を行います。

次にトレース取得条件の設定方法について説明します。「このボタン」を押すと「トレース条件設定ダイアログ」が開きます。「条件と組み合わせ設定」ではトレースの取得開始条件、取得停止条件およびトレース抽出条件を設定します。取得開始条件の詳細につきましては後ほど説明します。次に「トレース取得条件設定」の「取得モード」ではトレースメモリへの記録方法を選択します。「フリー」の場合はプログラムが停止するか、取得停止ポイントが成立するまで記録します。「フル」の場合はトレースバッファが一杯になるまで記録するモードです。「出力モード」ではトレースデータの取り方を指定します。「CPU実行優先」にするとトレースデータの取りこぼしが発生する場合があります。「トレース優先」にした場合は取りこぼしがおきない代わりにCPUのストールが発生する可能性があり、リアルタイム性が損なわれます。「外部出力しない」を選択した場合は、エミュレータのメモリを使用せずMCUに内蔵されているトレースバッファのみにデータを保存します。「データ種別」はトレースデータとして分岐命令実行時のトレースをするか、データアクセス命令実行時のトレースを行うか、あるいは両方を行うかを選択します。「トレース容量」ではE20に内蔵されているトレースメモリにトレース結果を何バイト分記録するかを選択します。

トレース取得開始条件をチェックすると、AND、OR、シーケンシャルの何れかがドロップダウンリストから選択できます。イベントが複数設定してあれば、イベントのAND条件、イベントのOR条件でそれぞれトレースを開始します。シーケンシャルを選択した場合は、「トレース開始条件」タブで指定した順番でイベントが一致するとトレースを開始します。

最後にトレース条件設定ダイアログで指定する「条件と組み合わせ」の「取得開始」および「取得停止」の条件と「取得モード」の関係について解説します。まず、トレースの取得開始、停止ポイントが設定されておらず、取得モードが「フリー」の場合はプログラムが停止した時点が最新のトレース情報となり、そこからさかのぼってトレース容量で指定したサイズ分が履歴として残ります。取得モードが「フル」の場合はプログラムを開始したところから記録を開始し、メモリがフルになった時点でトレースを停止します。

取得開始ポイントだけを設定した場合は、取得モードが「フリー」であれば指定したポイントからトレースを開始しますが、あくまでプログラムが停止した時点が最新のトレース情報として残りますので停止した時点からさかのぼってトレース容量で指定したサイズ分が履歴として残ります。逆に取得モードが「フル」であれば、指定した開始ポイントからトレースを開始し、メモリが一杯になったところで停止するまでの履歴が残ります。

取得停止ポイントだけが設定されている場合は、取得モードが「フリー」であれば、停止ポイントからさかのぼって、トレース容量で指定したサイズ分が履歴として残ります。取得モードが「フル」だった場合はメモリが一杯になった時点でトレースが停止してしまいますのでメモリが一杯になる前に停止ポイントの条件を満たす必要があります。

取得開始、停止ポイント共に設定した場合は、開始ポイントから停止ポイントまでを実行履歴として残します。ただし、トレースを開始してからトレース停止ポイントの条件がなかなか成立しない場合、取得モードが「フリー」であれば、トレース開始ポイント側の履歴から情報が失われていき、「フルモード」であればメモリが一杯になった時点でトレースが停止します。

次に区間計測機能について説明します。区間計測機能はユーザが設定した区間の経過サイクルや区間内の割り込みの占める割り合い、区間内で発生した例外や割り込みの回数など、様々なパフォーマンス解析ができる機能です。測定は「パフォーマンス解析ウィンドウ」で行います。計測は最大2区間を指定できます。計測条件の設定は「設定ボタン」あるいは表示行のダブルクリックで「パフォーマンス条件設定ダイアログ」を開いて行います。計測項目はドロップダウンリストから選択します。

次に計測条件の設定方法について説明します。まず計測項目を選択します。続いてカウント開始イベントとカウント終了イベントを追加ボタンで新規に追加します。追加できるイベントは命令フェッチとデータアクセスの2種類です。命令フェッチやデータアクセスのアドレス値入力については、ドロップダウンリストからグローバル関数や大域変数などのラベルを指定して行うことも可能です。

次に設定例と測定結果を見てみましょう。1区間目の測定は、設定した区間内の「割り込み受付回数」を測定する例です。開始/停止イベントは610グループの場合、命令フェッチが8点、データアクセスが4点まで設定できます。2区間目の測定は、指定した区間の経過サイクルを設定している例です。経過サイクルを測定する場合は「サイクルを時間情報で表示」をチェックし、ユーザシステムで使用しているICLKの周波数を設定することでCPUサイクルだけでなく時間表示も可能です。なお「1度だけ計測」をチェックしていない場合は、設定した区間内の測定をプログラムが停止するまで行いますので仮に関数の処理時間を測定するような場合は、関数コールごとに処理時間が累積されていきます。このような場合は「1度だけ計測」をチェックしてください。これにより、1回計測が終わった時点で測定が終了します。

E1/E20エミュレータでは、トレース機能やパフォーマンス解析などの条件設定ダイアログで設定したイベントを他の機能のウィンドウでも再利用できるようファイルに登録して保存することができます。例えば「パフォーマンス条件設定ダイアログ」の「カウント開始イベント」を保存したい場合は、「登録イベント一覧」ボタンにより「登録イベント一覧」ウィンドウを開きます。あとは設定した条件をドラッグ&ドロップすれば登録完了です。一度登録したイベントは他の機能でも使用できますので、例えば「トレース条件設定ダイアログ」で再利用する場合は「登録イベント一覧」ウィンドウからドラッグ&ドロップすれば設定完了となります。

それでは次にRAMモニタ機能について解説します。ユーザプログラム実行中にメモリの変化を参照する機能として「RAMモニタ機能」があります。実現方法としてはモニタプログラムを使う方法、専用DMACを使う方法など幾つかありますが、E20ではトレース機能を活用したRAMモニタ機能を実現しています。トレース端子から出力されたデータをエミュレータ内のメモリに格納することでRAMモニタ機能を実現していますので、ユーザプログラムをまったく止めない真のリアルタイムRAMモニタをオンチップデバッガで提供することができます。

次にRAMモニタウィンドウを有効にする手順について説明します。RAMモニタ機能はトレース機能を使用して行いますので、E20エミュレータ接続時に出力される「コンフィグレーションプロパティ」ウィンドウの「排他機能」で「リアルタイムRAMモニタ」をチェックします。排他機能はトレースデータをトレース機能で使用するか、リアルタイムRAMモニタ機能で使用するかを選択するためのチェックボックスです。

エミュレータ接続後、表示メニューの「CPU」、「RAMモニタ」を選択します。デフォルトの表示開始アドレスを入力するウィンドウが開きますので、参照したい番地を設定してください。RAMモニタウィンドウが表示されます。

最初に起動したRAMモニタウィンドウにはメモリ内容が表示されていませんので「RAMモニタ領域の設定」ボタンでモニタしたい領域を設定します。「RAMモニタ領域設定ウィンドウ」が開きますので「追加」ボタンでモニタしたい領域を設定します。1ブロックで最大1kバイトまでの領域を指定でき、合計4ブロックの4kバイトを指定できます。一度設定した領域は、High-performasnce Embedded Workshopを起動している間は残ります。High-performasnce Embedded Workshopを閉じ、再起動した場合はモニタ領域を再設定する必要がありますので、「保存」ボタンでファイルに保存しておくことで次回起動時も簡単に領域を設定できます。

プログラム実行中にモニタしている領域の値が変化すればウィンドウ内の表示も変化します。表示更新間隔は最小10msまで指定できます。なお、ウィンドウ中の緑色でハイライトしている部分がリードアクセスした番地、赤色でハイライトしている部分がライトアクセスした番地であることを表します。