(57)【要約】【課題】  プログラムのサイズに拘わりなく、プログラム内の各サブルーチンの実行時間を計測する。【解決手段】  プログラムプロファイラ回路は、呼び出し命令が検出されたことに基づいて、演算処理装置から出力されるサブルーチンの先頭アドレスを第１の記憶領域にスタックし、復帰命令が検出されたことに基づいて、最後にスタックした先頭アドレスを第１の記憶領域からアンスタックするスタック処理部と、スタック処理部により最後にスタックされた先頭アドレスが複数の第２の記憶領域に登録された先頭アドレスのいずれかと一致している間、一致した先頭アドレスが登録された第２の記憶領域を示す領域情報を出力する一致判定部と、複数の第２の記憶領域にそれぞれ対応する複数の積算領域を有し、一致判定部から領域情報が出力されている間、領域情報に対応する積算領域に格納された値に所定値を加算する処理を繰り返す積算部とを有する。【選択図】    図１
2016162091.tif 000002
【特許請求の範囲】
【請求項１】
第１の記憶領域を有し、サブルーチンを呼び出す呼び出し命令が演算処理装置により検出されたことに基づいて、前記演算処理装置から出力されるサブルーチンの先頭アドレスを前記第１の記憶領域にスタックし、サブルーチンの呼び出し元に戻る復帰命令が前記演算処理装置により検出されたことに基づいて、最後にスタックした先頭アドレスを前記第１の記憶領域からアンスタックするスタック処理部と、
サブルーチンの先頭アドレスがそれぞれ登録される複数の第２の記憶領域を有し、前記スタック処理部により最後にスタックされた先頭アドレスが前記複数の第２の記憶領域に登録された先頭アドレスのいずれかと一致している間、一致した先頭アドレスが登録された第２の記憶領域を示す領域情報を出力する一致判定部と、
前記複数の第２の記憶領域にそれぞれ対応する複数の積算領域を有し、前記一致判定部から前記領域情報が出力されている間、前記領域情報に対応する積算領域に格納された値に所定値を加算する処理を繰り返す積算部と
を備えていることを特徴とするプログラムプロファイラ回路。
【請求項２】
前記一致判定部から前記領域情報が出力されている間、読み出し要求と書き込み要求とを繰り返し前記積算部に出力する制御部を備え、
前記積算部は、
前記複数の積算領域を有し、前記読み出し要求に基づいて、前記領域情報に対応する積算領域に保持されている第１の値が読み出され、前記書き込み要求に基づいて、前記領域情報に対応する積算領域に第２の値が書き込まれる記憶部と、
前記記憶部から読み出された前記第１の値が保持される保持部と、
前記保持部に保持された前記第１の値に前記所定値を加算し、加算により得られた前記第２の値を前記記憶部に出力する加算部と
を備えていることを特徴とする請求項１記載のプログラムプロファイラ回路。
【請求項３】
前記制御部は、前記一致判定部から前記領域情報が出力されている間、第１のクロックの立ち上がりエッジまたは立ち下がりエッジの一方に同期して前記読み出し要求を出力した後、前記第１のクロックの立ち上がりエッジまたは立ち下がりエッジの他方に同期して前記書き込み要求を出力すること
を特徴とする請求項２記載のプログラムプロファイラ回路。
【請求項４】
前記演算処理装置を動作させる第２のクロックの周波数を分周し、前記第１のクロックを生成する分周部を備えていること
を特徴とする請求項３記載のプログラムプロファイラ回路。
【請求項５】
プログラムを実行する演算処理装置と、前記演算処理装置が実行するサブルーチンの実行時間を計測するプログラムプロファイラ回路とを有するプロセッサにおいて、
前記プログラムプロファイラ回路は、
第１の記憶領域を有し、サブルーチンを呼び出す呼び出し命令が演算処理装置により検出されたことに基づいて、前記演算処理装置から出力されるサブルーチンの先頭アドレスを前記第１の記憶領域にスタックし、サブルーチンの呼び出し元に戻る復帰命令が前記演算処理装置により検出されたことに基づいて、最後にスタックした先頭アドレスを前記第１の記憶領域からアンスタックするスタック処理部と、
サブルーチンの先頭アドレスがそれぞれ登録される複数の第２の記憶領域を有し、前記スタック処理部により最後にスタックされた先頭アドレスが前記複数の第２の記憶領域に登録された先頭アドレスのいずれかと一致している間、一致した先頭アドレスが登録された第２の記憶領域を示す領域情報を出力する一致判定部と、
前記複数の第２の記憶領域にそれぞれ対応する複数の積算領域を有し、前記一致判定部から前記領域情報が出力されている間、前記領域情報に対応する積算領域に格納された値に所定値を加算する処理を繰り返す積算部と
を備えていることを特徴とするプロセッサ。
【請求項６】
前記演算処理装置は、
演算を実行する演算部と、
命令をデコードし、デコードした命令が前記呼び出し命令を示すとき呼び出し情報を出力し、デコードした命令が前記復帰命令を示すとき復帰情報を出力する命令デコーダと、
前記命令デコーダによりデコードされる命令が格納された領域を示すアドレスを出力するプログラムカウンタと、
前記プログラムカウンタから出力されるアドレスをインクリメントするインクリメンタと、
前記インクリメンタから出力されるアドレスまたは前記演算部から出力されるアドレスを選択し、選択したアドレスを前記プログラムカウンタに出力するセレクタと
を備え、
前記スタック処理部は、前記呼び出し情報に基づいて、前記演算部から前記セレクタに出力されるアドレスを前記先頭アドレスとして前記第１の記憶領域にスタックし、前記復帰情報に基づいて、最後にスタックした先頭アドレスを前記第１の記憶領域からアンスタックすること
を特徴とする請求項５記載のプロセッサ。
【請求項７】
プログラムプロファイラ回路に設けられるスタック処理部が、サブルーチンを呼び出す呼び出し命令が演算処理装置により検出されたことに基づいて、前記演算処理装置から出力されるサブルーチンの先頭アドレスを第１の記憶領域にスタックし、
前記スタック処理部が、サブルーチンの呼び出し元に戻る復帰命令が前記演算処理装置により検出されたことに基づいて、最後にスタックした先頭アドレスを前記第１の記憶領域からアンスタックし、
前記プログラムプロファイラ回路に設けられる一致判定部が、前記スタック処理部により最後にスタックされた先頭アドレスが複数の第２の記憶領域にそれぞれ登録された先頭アドレスのいずれかと一致している間、一致した先頭アドレスが登録された第２の記憶領域を示す領域情報を出力し、
前記プログラムプロファイラ回路に設けられる積算部が、前記一致判定部から前記領域情報が出力されている間、前記領域情報に対応する積算領域に格納された値に所定値を加算する処理を繰り返すこと
を特徴とするプログラムカウント方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムプロファイラ回路、プロセッサおよびプログラムカウント方法に関する。
【背景技術】
【０００２】
例えば、ＣＰＵ（Central Processing Unit）等のプロセッサが実行するプログラムの性能を解析するツールとして、プログラムが実行する各種のイベントの実行時間または実行回数を計測するプロファイラ装置が知られている。この種のプロファイラ装置は、プロセッサにより生成されるプログラムカウンタの値（アドレス）を受け、プログラムカウンタの値に対応する関数（サブルーチン）を示す関数番号を出力するインデックステーブルを有する。そして、プロファイラ装置は、インデックステーブルから関数番号が継続して出力されている時間に基づいて各関数の実行時間を計測し、関数番号の変化に基づいて各関数の実行回数を計測する。プロファイラ装置が計測した実行時間と実行回数とは、メモリに格納され、メモリに格納された情報に基づいてプログラムの性能が解析される（例えば、特許文献１参照）。
【０００３】
また、プロファイラ装置は、特定の命令などの発生回数等の情報をメモリに書き込む場合、メモリに保存されている重要度の低い情報を重要度の高い情報で上書きすることで、情報を書き込む領域が不足することを抑止する（例えば、特許文献２参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００４−３４８６３５号公報
【特許文献２】特開２００２−３４２１２５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上述したプロファイラ装置では、解析するプログラムを格納する記憶領域のアドレスサイズがインデックステーブルのアドレスサイズより大きい場合、インデックステーブルは、プログラムカウンタの値を誤った関数番号に変換するおそれがある。このため、プロファイラ装置は、インデックステーブルのアドレスサイズより広い記憶領域に格納されるプログラム内の各関数の実行時間を計測することは困難である。
【０００６】
１つの側面では、本件開示のプログラムプロファイラ回路、プロセッサおよびプログラムカウント方法は、プログラムのサイズに拘わりなく、プログラム内の各サブルーチンの実行時間を計測することを目的とする。
【課題を解決するための手段】
【０００７】
一つの観点によれば、プログラムプロファイラ回路は、第１の記憶領域を有し、サブルーチンを呼び出す呼び出し命令が演算処理装置により検出されたことに基づいて、演算処理装置から出力されるサブルーチンの先頭アドレスを第１の記憶領域にスタックし、サブルーチンの呼び出し元に戻る復帰命令が演算処理装置により検出されたことに基づいて、最後にスタックした先頭アドレスを第１の記憶領域からアンスタックするスタック処理部と、サブルーチンの先頭アドレスがそれぞれ登録される複数の第２の記憶領域を有し、スタック処理部により最後にスタックされた先頭アドレスが複数の第２の記憶領域に登録された先頭アドレスのいずれかと一致している間、一致した先頭アドレスが登録された第２の記憶領域を示す領域情報を出力する一致判定部と、複数の第２の記憶領域にそれぞれ対応する複数の積算領域を有し、一致判定部から領域情報が出力されている間、領域情報に対応する積算領域に格納された値に所定値を加算する処理を繰り返す積算部とを有する。
【０００８】
別の観点によれば、プログラムを実行する演算処理装置と、演算処理装置が実行するサブルーチンの実行時間を計測するプログラムプロファイラ回路とを有するプロセッサにおいて、プログラムプロファイラ回路は、第１の記憶領域を有し、サブルーチンを呼び出す呼び出し命令が演算処理装置により検出されたことに基づいて、演算処理装置から出力されるサブルーチンの先頭アドレスを第１の記憶領域にスタックし、サブルーチンの呼び出し元に戻る復帰命令が演算処理装置により検出されたことに基づいて、最後にスタックした先頭アドレスを第１の記憶領域からアンスタックするスタック処理部と、サブルーチンの先頭アドレスがそれぞれ登録される複数の第２の記憶領域を有し、スタック処理部により最後にスタックされた先頭アドレスが複数の第２の記憶領域に登録された先頭アドレスのいずれかと一致している間、一致した先頭アドレスが登録された第２の記憶領域を示す領域情報を出力する一致判定部と、複数の第２の記憶領域にそれぞれ対応する複数の積算領域を有し、一致判定部から領域情報が出力されている間、領域情報に対応する積算領域に格納された値に所定値を加算する処理を繰り返す積算部とを有する。
【０００９】
さらなる別の観点によれば、プログラムカウント方法は、プログラムプロファイラ回路に設けられるスタック処理部が、サブルーチンを呼び出す呼び出し命令が演算処理装置により検出されたことに基づいて、演算処理装置から出力されるサブルーチンの先頭アドレスを第１の記憶領域にスタックし、スタック処理部が、サブルーチンの呼び出し元に戻る復帰命令が演算処理装置により検出されたことに基づいて、最後にスタックした先頭アドレスを第１の記憶領域からアンスタックし、プログラムプロファイラ回路に設けられる一致判定部が、スタック処理部により最後にスタックされた先頭アドレスが複数の第２の記憶領域にそれぞれ登録された先頭アドレスのいずれかと一致している間、一致した先頭アドレスが登録された第２の記憶領域を示す領域情報を出力し、プログラムプロファイラ回路に設けられる積算部が、一致判定部から領域情報が出力されている間、領域情報に対応する積算領域に格納された値に所定値を加算する処理を繰り返す。
【発明の効果】
【００１０】
本件開示のプログラムプロファイラ回路、プロセッサおよびプログラムカウント方法は、プログラムのサイズに拘わりなく、プログラム内の各サブルーチンの実行時間を計測することができる。
【図面の簡単な説明】
【００１１】
【図１】プログラムプロファイラ回路、プロセッサおよびプログラムカウント方法の一実施形態を示す図である。
【図２】プログラムプロファイラ回路、プロセッサおよびプログラムカウント方法の別の実施形態を示す図である。
【図３】図２に示すＣＰＵの一例を示す図である。
【図４】図２に示すスタック処理部の一例を示す図である。
【図５】図２に示すＣＰＵが実行する評価対象のプログラムの一例を示す図である。
【図６】図２に示すＣＡＭに登録されるデータの一例を示す図である。
【図７】図２に示すＲＡＭの一例を示す図である。
【図８】評価モードおよび計測モードにおける図２に示すプログラムプロファイラ回路の動作の一例を示す図である。
【図９】図２に示すプログラムプロファイラ回路の計測モード中の動作の一例を示す図である。
【図１０】図２に示すプログラムプロファイラ回路の計測モード中の動作（図９の続き）の一例を示す図である。
【図１１】プログラムプロファイラ回路、プロセッサおよびプログラムカウント方法の別の実施形態を示す図である。
【発明を実施するための形態】
【００１２】
以下、図面を用いて実施形態を説明する。信号が伝達される信号線には、信号名と同じ符号を使用する。先頭に”／”の付いている信号は、負論理を示す。
【００１３】
図１は、プログラムプロファイラ回路、プロセッサおよびプログラムカウント方法の一実施形態を示す。図１に示すプロセッサ１００は、フェッチした命令に基づいて演算を実行する演算処理装置２００と、プログラム中に存在する複数のサブルーチンＳＲ（ＳＲＡ、ＳＲＢ、ＳＲＣ）の実行時間を計測するプログラムプロファイラ回路３００とを有する。
【００１４】
演算処理装置２００は、サブルーチンＳＲを呼び出す呼び出し命令を検出したことに基づいて呼び出し情報ＪＳＲを生成し、呼び出すサブルーチンＳＲの先頭アドレスＨＡＤＤを出力する。また、演算処理装置２００は、サブルーチンＳＲの呼び出し元に戻る復帰命令を検出したことに基づいて復帰情報ＲＴＳを生成する。
【００１５】
演算処理装置２００は、アドレスＡＤＤをメモリ４００に出力し、メモリ４００に格納されたプログラム中の命令をフェッチし、フェッチした命令を実行する。図１に示す例では、サブルーチンＳＲＡは、メインルーチンＭＲ中に記述された呼び出し命令に基づいて呼び出され、サブルーチンＳＲＢは、サブルーチンＳＲＡ中に記述された呼び出し命令に基づいて呼び出される。サブルーチンＳＲＣは、サブルーチンＳＲＢ中に記述された呼び出し命令に基づいて呼び出される。サブルーチンＳＲＡが格納されるメモリの先頭アドレスは”０２００ｈ”であり、サブルーチンＳＲＢが格納されるメモリの先頭アドレスは”０３００ｈ”であり、サブルーチンＳＲＣが格納されるメモリの先頭アドレスは”０４００ｈ”である。アドレスの末尾”ｈ”は、アドレスが１６進数で示されることを示す。
【００１６】
プログラムプロファイラ回路３００は、スタック処理部３１０、一致判定部３２０および積算部３３０を有する。スタック処理部３１０は、先頭アドレスＨＡＤＤを順次に保持する記憶領域３１２を有し、呼び出し情報ＪＳＲに基づいて、演算処理装置２００から出力されるサブルーチンの先頭アドレスＨＡＤＤを記憶領域３１２にスタックする。スタック処理部３１０は、最後にスタックした先頭アドレスＨＡＤＤを出力する。また、スタック処理部３１０は、復帰情報ＲＴＳに基づいて、最後にスタックした先頭アドレスＨＡＤＤを記憶領域３１２からアンスタックする。このように、スタック処理部３１０は、いわゆる先入れ後出し（First In Last Out）方式で動作する。
【００１７】
スタック処理部３１０は、演算処理装置２００が呼び出し命令および復帰命令を検出したときにそれぞれ生成する呼び出し情報ＪＳＲおよび復帰情報ＲＴＳに基づいて先頭アドレスＨＡＤＤのスタック動作および先頭アドレスＨＡＤＤのアンスタック動作を実行する。このため、演算処理装置２００に新たな回路を追加することなく、呼び出し情報ＪＳＲおよび復帰情報ＲＴＳを外部に伝達する信号線を追加することで、スタック処理部３１０のスタック動作およびアンスタック動作を実現することができる。
【００１８】
図１は、サブルーチンＳＲＢが実行されているときのスタック処理部３１０の状態を示しており、スタック処理部３１０は、記憶領域３１２に保持している最後にスタックした先頭アドレス”０３００ｈ”を一致判定部３２０に出力する。また、スタック処理部３１０は、サブルーチンＳＲＢが呼び出される前に実行されていたサブルーチンＳＲＡの先頭アドレス”０２００ｈ”を記憶領域３１２に保持している。スタック処理部３１０は、サブルーチンＳＲＢからサブルーチンＳＲＡに復帰する復帰命令に対応する復帰情報ＲＴＳを受けるまで、先頭アドレス”０３００ｈ”を出力する。そして、スタック処理部３１０は、サブルーチンＳＲＢからサブルーチンＳＲＡに復帰する復帰命令に対応する復帰情報ＲＴＳを受けたことに基づいて、先頭アドレス”０３００ｈ”を記憶領域３１２からアンスタックし、先頭アドレス”０２００ｈ”を出力する。
【００１９】
スタック処理部３１０に保持可能な先頭アドレスの数（スタック処理部３１０の記憶容量）は、プログラム内に記述されるサブルーチンのネスト（入れ子）の最大数に応じて設定される。例えば、ネストの最大数が”１６”の場合、スタック処理部３１０は、先頭アドレスを保持する１６個の領域を有すればよい。
【００２０】
一致判定部３２０は、サブルーチンの先頭アドレスがそれぞれ予め登録される複数の記憶領域３２２を有する。図１では、サブルーチンＳＲＡ、ＳＲＢ、ＳＲＣの先頭アドレス”０２００ｈ”、”０３００ｈ”、”０４００ｈ”が、３つの記憶領域３２２のそれぞれに格納されている。なお、サブルーチンＳＲＡ、ＳＲＢ、ＳＲＣの先頭アドレスが登録される記憶領域３２２は、連続せずに分散されていてもよい。一致判定部３２０は、スタック処理部３１０から出力される先頭アドレスＨＡＤＤと、各記憶領域３２２に登録された先頭アドレスとを比較する。そして、一致判定部３２０は、スタック処理部３１０から出力される先頭アドレスＨＡＤＤが、記憶領域３２２に登録された先頭アドレスのいずれかと一致している間、一致した先頭アドレスが登録された記憶領域３２２を示す領域情報ＡＩＮＦを出力する。
【００２１】
例えば、図１では、一致判定部３２０は、スタック処理部３１０から出力される先頭アドレス”０３００ｈ”が登録された記憶領域３２２に対応する信号線（太線で示される）をアサートし、他の記憶領域３２２に対応する信号線をネゲート状態に維持する。これにより、アドレス”０３００ｈ”が登録された記憶領域３２２を示す領域情報ＡＩＮＦが積算部３３０に出力される。領域情報ＡＩＮＦは、演算処理装置２００が実行中のサブルーチンＳＲを示す。なお、一致判定部３２０は、アドレス”０３００ｈ”が登録された記憶領域３２２の位置を示す領域情報（アドレス等）を、共通の信号線を介して積算部３３０に出力してもよい。
【００２２】
一致判定部３２０に設けられる記憶領域３２２の数は、プログラム内に記述されるサブルーチンの最大数に応じて設定される。このため、プログラムプロファイラ回路３００による測定対象のプログラムの全てのアドレスに対応する記憶領域３２２を一致判定部３２０に設ける場合に比べて、一致判定部３２０の記憶領域３２２の数を削減することができる。換言すれば、スタック処理部３１０を設けることで、測定対象のプログラムの全てのアドレスを供給する代わりにサブルーチンの先頭アドレスＨＡＤＤのみを一致判定部３２０に供給することができ、一致判定部３２０の回路規模を削減することができる。
【００２３】
積算部３３０は、一致判定部３２０の複数の記憶領域３２２にそれぞれ対応する複数の積算領域３３２を有する。すなわち、積算部３３０に設けられる積算領域３３２の数は、一致判定部３２０と同様に、プログラム内に記述されるサブルーチンの最大数に応じて設定される。積算部３３０は、一致判定部３２０から領域情報ＡＩＮＦが出力されている間、領域情報ＡＩＮＦに対応する積算領域３３２に格納された値に所定値を加算し、加算した値を領域情報ＡＩＮＦに対応する積算領域３３２に格納する積算処理を繰り返す。これにより、各サブルーチンＳＲが実行されている期間に対応する積算値が、各サブルーチンＳＲに対応する積算領域３３２に格納される。各サブルーチンＳＲの実行時間は、各積算領域３３２に格納された積算値と、積算領域３３２に格納された値に所定値を加算して積算領域３３２に格納する積算処理の周期との積により示される。換言すれば、各積算領域３３２に格納される積算値は、各サブルーチンＳＲの実行時間を示す。すなわち、プロファイラ回路３００により、各サブルーチンＳＲの実行時間を計測するプログラムカウント方法が実現される。
【００２４】
例えば、所定値を加算して積算領域３３２に格納する処理は、プログラムプロファイラ回路３００を動作させるクロックのクロックサイクル毎に実行される。この場合、積算部３３０が誤動作することなく加算処理を実行するために、プログラムプロファイラ回路３００を動作させるクロックの周波数は、演算処理装置２００を動作させるクロックの周波数より低いことが好ましい。所定値を加算して積算領域３３２に格納する処理がクロックサイクル毎に実行される場合、各サブルーチンＳＲの実行時間は、各積算領域３３２に格納された積算値とクロックの周期との積により示される。
【００２５】
以上、図１に示す実施形態では、スタック処理部３１０は、呼び出し情報ＪＳＲに基づいてサブルーチンＳＲの先頭アドレスＨＡＤＤをスタックし、次の呼び出し情報ＪＳＲまたは復帰情報ＲＴＳを受けるまで、スタックした先頭アドレスＨＡＤＤの出力を維持する。また、スタック処理部３１０は、復帰情報ＲＴＳに基づいて、最後にスタックされた先頭アドレスＨＡＤＤをアンスタックする。そして、スタック処理部３１０は、次の呼び出し情報ＪＳＲまたは復帰情報ＲＴＳを受けるまで、スタックされている先頭アドレスＨＡＤＤのうち最後にスタックされた先頭アドレスＨＡＤＤの出力を維持する。これにより、スタック処理部３１０が先頭アドレスＨＡＤＤを出力している期間を、対応するサブルーチンＳＲが実行されている期間に合わせることができる。この結果、プログラムのサイズに拘わりなく、プログラム内の各サブルーチンの実行時間を計測することができる。
【００２６】
また、演算処理装置２００により生成される呼び出し情報ＪＳＲおよび復帰情報ＲＴＳを利用することで、演算処理装置２００に新たな回路を追加することなく、スタック処理部３１０のスタック動作およびアンスタック動作を実現することができる。
【００２７】
さらに、プログラムプロファイラ回路３００によるサブルーチンの実行時間の計測は、プログラム内に計測用の割り込み処理ルーチン等を挿入することなく実行される。したがって、プログラムの実行効率を低下させることなく、サブルーチンの実行時間を計測することができる。
【００２８】
図２は、プログラムプロファイラ回路、プロセッサおよびプログラムカウント方法の別の実施形態を示す。図２に示すプロセッサ１００Ａ（例えば、半導体チップ）は、ＣＰＵ２００Ａ、プログラムプロファイラ回路３００ＡおよびレジスタＩＯＲＥＧを有する。プロセッサ１００Ａが複数のＣＰＵ２００Ａを有する場合、プログラムプロファイラ回路３００Ａは、ＣＰＵ２００Ａ毎に設けられる。プロセッサ１００Ａは、ＤＭＡＣ（Direct Memory Access Controller）、タイマおよび入出力回路等の周辺回路を有してもよい。
【００２９】
ＣＰＵ２００Ａは、クロックＣＬＫに同期して動作し、メインメモリまたはキャッシュメモリ等のメモリに格納されたプログラムを実行する。ＣＰＵ２００Ａが実行するプログラムは、オペレーティングシステム、サブルーチンの実行時間が計測される評価対象のプログラムおよび評価プログラムを含む。評価プログラムは、プログラムプロファイラ回路３００Ａを制御し、評価対象のプログラム（アプリケーションプログラム等）に含まれるサブルーチン（関数）の実行時間を計測するために実行される。キャッシュメモリは、プロセッサ１００Ａの内部に設けられてもよい。ＣＰＵ２００Ａは、演算処理装置の一例である。
【００３０】
プロセッサ１００Ａは、ＣＰＵ２００Ａが実行する評価プログラムに基づいて、レジスタＩＯＲＥＧに所定の情報を設定する機能を有する。また、プロセッサ１００Ａは、ＣＰＵ２００Ａが実行する評価プログラムに基づいて、アドレスＥＡＤ、ライトイネーブル信号ＥＷＥ、チップセレクト信号ＥＣＳ、データ入力信号ＥＤＩおよび制御信号ＣＡＭＷＲを生成する機能を有する。また、プロセッサ１００Ａは、ＣＰＵ２００Ａが実行する評価プログラムに基づいて、プログラムプロファイラ回路３００Ａからデータ出力信号ＥＤＯを受ける機能を有する。レジスタＩＯＲＥＧは、設定された情報に基づいてモード信号ＥＭＤおよびタスクラン信号ＴＲＵＮを出力する。
【００３１】
ＣＰＵ２００Ａは、サブルーチンを呼び出すＪＳＲ（Jump SubRoutine）命令をデコードしたことに基づいて、サブルーチンの先頭アドレスＣＡＤと、ＪＳＲ命令の実行を示す呼び出し情報ＪＳＲとをプログラムプロファイラ回路３００Ａに出力する。ＪＳＲ命令は、呼び出し命令の一例である。また、ＣＰＵ２００Ａは、サブルーチンの呼び出し元に戻るＲＴＳ（ReTurn Subroutine）命令をデコードしたことに基づいて、ＲＴＳ命令の実行を示す復帰情報ＲＴＳをプログラムプロファイラ回路３００Ａに出力する。ＲＴＳ命令は、復帰命令の一例である。ＣＰＵ２００Ａの例は、図３に示される。アドレスＣＡＤのビット数は、特に限定されないが、以下では、説明を分かりやすくするために、１６ビットとする。
【００３２】
プログラムプロファイラ回路３００Ａは、スタック処理部１０、フリップフロップ１１、ＣＡＭ（Content Addressable Memory）２０、セレクタ３０およびＲＡＭ（Random Access Memory）４０を有する。また、プログラムプロファイラ回路３００Ａは、レジスタ５０、インクリメンタ６０、分周部７０、メモリ制御部８０、デコーダ９０、スイッチＳＷ１、ＳＷ２およびオア回路ＯＲ１、ＯＲ２を有する。
【００３３】
プログラムプロファイラ回路３００Ａの状態は、第１論理レベルのモード信号ＥＭＤを受けている間、評価対象のプログラム（アプリケーションプログラム等）に含まれるサブルーチンの実行時間を計測する計測モードに遷移する。また、プログラムプロファイラ回路３００Ａは、第１レベルと異なる第２レベルのモード信号ＥＭＤを受けている間、ＣＡＭ２０およびＲＡＭ４０を初期設定し、計測モード中に計測した実行時間を示す情報をＲＡＭ４０から読み出す評価モードに遷移する。評価モードおよび計測モードの概要は、図８に示され、計測モード中のプログラムプロファイラ回路３００Ａの動作の例は、図９に示される。
【００３４】
オア回路ＯＲ１は、ＣＰＵ２００Ａから呼び出し情報ＪＳＲまたは復帰情報ＲＴＳを受けている間、イネーブル信号ＥＮを出力する。オア回路ＯＲ２は、タスクラン信号ＴＲＵＮまたはチップセレクト信号ＥＣＳをＲＡＭ４０のチップセレクト端子ＣＳに出力する。タスクラン信号ＴＲＵＮは、計測モードにおいて、評価対象のプログラムをＣＰＵ２００Ａに実行させるときにアサートされる。チップセレクト信号ＥＣＳは、評価プログラムの実行に基づいてプロセッサ１００Ａにより生成される。
【００３５】
スタック処理部１０は、ＣＰＵ２００Ａからの先頭アドレスＣＡＤをスタックする記憶領域（図４に示すフリップフロップＦＦ１−ＦＦ１６）を有する。スタック処理部１０は、計測モード中、イネーブル信号ＥＮを受け、復帰情報ＲＴＳを受けないとき（すなわち、呼び出し情報ＪＳＲを受けたとき）、アドレスＣＡＤを記憶領域にスタックする。また、スタック処理部１０は、計測モード中、イネーブル信号ＥＮおよび復帰情報ＲＴＳを受けたとき、アドレスＣＡＤを記憶領域からアンスタックする。スタック処理部１０は、スタックしたアドレスＣＡＤのうち、最後にスタックしたアドレスＣＡＤをアドレスＨＡＤとして出力する機能を有する。スタック処理部１０の例は、図４に示される。
【００３６】
フリップフロップ１１（Ｄ−ＦＦ）は、スタック処理部１０からのアドレスＨＡＤを分周クロックＤＣＬＫに同期してラッチし、ラッチしたアドレスをアドレスＨＡＤｄとしてＣＡＭ２０に出力する。
【００３７】
ＣＡＭ２０は、サブルーチンの先頭アドレスが予め登録される複数の記憶領域を有する。先頭アドレスが登録されたＣＡＭ２０の状態の例は、図６に示される。ＣＡＭ２０は、フリップフロップ１１から受けるアドレスＨＡＤｄが、記憶領域に登録されたアドレスのいずれかと一致している間、アドレスＨＡＤｄの値を保持している記憶領域に対応するデータ線ＤＴをアサートし、他のデータ線ＤＴをネゲートする。ＣＡＭ２０は、プログラム内に記述されるサブルーチンの最大数に応じた数の記憶領域を有すればよい。このため、測定対象のプログラムの全てのアドレスに対応する記憶領域をＲＡＭに設ける場合に比べて、ＣＡＭ２０の回路規模を削減することができる。ＣＡＭ２０は、一致判定部の一例である。
【００３８】
ＣＡＭ２０は、プロセッサ１００Ａが生成する制御信号ＣＡＭＷＲに基づいて、ＣＰＵ２００Ａが実行するプログラムに含まれるサブルーチンの先頭アドレスを示すデータを記憶領域に登録する。制御信号ＣＡＭＷＲは、ＣＡＭ２０の記憶領域を示すアドレス、記憶領域に書き込むデータの論理を示すデータ信号およびデータの書き込みを制御する信号を含む。制御信号ＣＡＭＷＲによるＣＡＭ２０へのデータの書き込みは、ＣＰＵ２００Ａが実行する評価プログラムにより、サブルーチンの実行時間の計測が開始される前に実行される。
【００３９】
デコーダ９０は、評価モード中にプロセッサ１００Ａ内で生成されるアドレスＥＡＤをデコードし、アドレスＥＡＤが示すワード線信号ＥＷＬのいずれかをアサートする。セレクタ３０は、評価モード中、デコーダ９０からのワード線信号ＥＷＬを、ワード線ＷＬを介してＲＡＭ４０に伝達する。セレクタ３０は、計測モード中、ＣＡＭ２０からのデータ信号ＤＴを、ワード線ＷＬを介してＲＡＭ４０に伝達する。
【００４０】
ＲＡＭ４０は、チップセレクト端子ＣＳでハイレベルの信号を受け、ライトイネーブル端子／ＷＥでロウレベルの信号を受けているときに書き込み動作を実行する。ＲＡＭ４０は、書き込み動作において、セレクタ３０を介して受けるハイレベルのワード線ＷＬに接続されたメモリセルにデータ入力端子ＤＩで受けるデータを書き込む。データ入力端子ＤＩは、評価モード中、スイッチＳＷ１を介してデータ入力信号ＥＤＩを受け、計測モード中、スイッチＳＷ１を介してインクリメンタ６０から出力される値を受ける。例えば、データ入力端子ＤＩは、３２ビットである。図２では、計測モード中のスイッチＳＷ１の状態が示される。
【００４１】
一方、ＲＡＭ４０は、チップセレクト端子ＣＳでハイレベルの信号を受け、ライトイネーブル端子／ＷＥでハイレベルの信号を受けているときに読み出し動作を実行する。ＲＡＭ４０は、読み出し動作において、ハイレベルのワード線ＷＬに接続されたメモリセルから読み出されるデータをデータ出力端子ＤＯに出力する。例えば、データ出力端子ＤＯは、３２ビットである。ＲＡＭ４０は、読み出し要求に基づいて、ハイレベルのワード線ＷＬに対応するメモリセルＭＣに保持されている値を読み出し、書き込み要求に基づいて、ハイレベルのワード線ＷＬに対応するメモリセルＭＣに値を書き込む記憶部の一例である。
【００４２】
なお、ＲＡＭ４０が動作するときのチップセレクト端子ＣＳ、ライトイネーブル端子／ＷＥおよびワード線ＷＬの論理レベルは、ＲＡＭ４０の回路に依存し、上記レベルに限定されない。ＲＡＭ４０の例は、図７に示される。なお、プログラムプロファイラ回路３００Ａは、読み出しサイクルと同等の時間で書き込みサイクルが実行される他のメモリ（強誘電体メモリ等）を、ＲＡＭ４０の代わりに有してもよい。
【００４３】
レジスタ５０は、ＲＡＭ４０のデータ出力端子ＤＯから出力されるデータをクロックＲＣＬＫに同期して保持し、保持したデータをインクリメンタ６０に出力する。レジスタ５０は、ＲＡＭ４０から読み出された値を保持する保持部の一例である。
【００４４】
インクリメンタ６０は、レジスタ５０から出力されるデータを受け、受けたデータの値を”１”増加させ、増加させたデータを、データ入力線ＤＩを介してＲＡＭ４０に出力する。インクリメンタ６０は、レジスタ５０に保持された値に所定値（”１”）を加算し、加算により得られた値をＲＡＭ４０に出力する加算部の一例である。ＲＡＭ４０、レジスタ５０およびインクリメンタ６０は、ＣＡＭ２０から領域情報が出力されている間、領域情報に対応する積算領域に格納された値に所定値を加算する処理を繰り返す積算部（カウンタ）の一例である。
【００４５】
分周部７０は、クロックＣＬＫの周波数を分周し、分周クロックＤＣＬＫを生成する。なお、分周部７０は、プログラムプロファイラ回路３００Ａの外部に設けられてもよい。プログラムプロファイラ回路３００Ａに分周部７０を設けることなく、クロックＣＬＫと別の系統のクロックがプロセッサ１００Ａの外部から供給されてもよい。分周クロックＤＣＬＫの周波数は、分周クロックＤＣＬＫの１周期内にＲＡＭ４０の読み出し動作と書き込み動作との両方を実行可能な周波数であればよい。
【００４６】
メモリ制御部８０は、分周クロックＤＣＬＫに同期してライトイネーブル信号ＤＷＥおよびクロックＲＣＬＫを生成する。ハイレベルのライトイネーブル信号ＤＷＥは、ＲＡＭ４０への読み出し要求を示し、ロウレベルのライトイネーブル信号ＤＷＥは、ＲＡＭ４０への書き込み要求を示す。メモリ制御部８０が生成するライトイネーブル信号ＤＷＥおよびクロックＲＣＬＫの波形の例は、図９および図１０に示される。
【００４７】
スイッチＳＷ２は、評価モード中、プロセッサ１００Ａにより生成されるライトイネーブル信号ＥＷＥをＲＡＭ４０のライトイネーブル端子／ＷＥに伝達する。また、スイッチＳＷ２は、計測モード中、メモリ制御部８０からのライトイネーブル信号ＤＷＥをＲＡＭ４０のライトイネーブル端子／ＷＥに伝達する。図２では、計測モード中のスイッチＳＷ２の状態が示される。
【００４８】
図３は、図２に示すＣＰＵ２００Ａの一例を示す。図３では、ＣＰＵ２００Ａのコア部分が示される。ＣＰＵ２００Ａは、演算部ＯＰＵ、データレジスタ部ＤＲＥＧ、アドレスレジスタ部ＡＲＥＧ、プログラムカウンタＰＣ、インクリメンタＩＮＣ、命令レジスタ部ＩＲＥＧ、命令デコーダ部ＤＥＣおよびセレクタＳ１、Ｓ２を有する。演算部ＯＰＵは、レジスタファイルＲＥＧ、および演算器ＥＸを有する。
【００４９】
プログラムカウンタＰＣは、セレクタＳ１から受けるアドレスをインクリメンタＩＮＣおよびセレクタＳ２に出力する。インクリメンタＩＮＣは、プログラムカウンタＰＣから受けるアドレスをインクリメントし、インクリメントしたアドレスＰＣ＋をセレクタＳ１に出力する。
【００５０】
セレクタＳ１は、命令デコーダ部ＤＥＣから出力される選択信号ＡＳＥＬが、命令をアドレス順にフェッチすることを示す場合、インクリメンタＩＮＣからのアドレスＰＣ＋を選択する。セレクタＳ１は、選択信号ＡＳＥＬが、ＪＳＲ命令、ＲＴＳ命令、分岐命令またはジャンプ命令等、アドレスがアドレスＰＣ＋以外に変化するアドレス変化命令の実行を示す場合、演算部ＯＰＵからのアドレスＣＡＤを選択する。そして、セレクタＳ１は、選択したアドレスをプログラムカウンタＰＣに出力する。セレクタＳ２は、命令を順次にフェッチする場合、プログラムカウンタＰＣから出力されるアドレスを選択する。セレクタＳ２は、アドレス変化命令が実行される場合、および、ロード命令またはストア命令等に基づいてデータを出力または入力する場合、アドレスレジスタ部ＡＲＥＧから出力されるアドレスを選択する。そして、セレクタＳ２は、選択したアドレスをメインメモリまたはキャッシュメモリ等のメモリに出力する。
【００５１】
ＣＰＵ２００Ａが命令をフェッチする場合、セレクタＳ２から出力されるアドレスに応じて、メモリから命令がリードデータとして読み出され、読み出された命令は命令レジスタ部ＩＲＥＧに格納される。ＣＰＵ２００Ａがロード命令を実行する場合、セレクタＳ２から出力されるアドレスに応じて、メモリからデータが読み出され、読み出されたデータはレジスタファイルＲＥＧに格納される。ＣＰＵ２００Ａがストア命令を実行する場合、セレクタＳ２から出力されるアドレスに応じて、データレジスタ部ＤＲＥＧから出力されるデータがライトデータとしてメモリに書き込まれる。
【００５２】
命令レジスタ部ＩＲＥＧは、メモリから受ける命令を保持する複数の領域を有し、保持している命令を命令デコーダ部ＤＥＣに順次に出力する。命令デコーダ部ＤＥＣは、命令レジスタ部ＩＲＥＧから受ける命令をデコードし、デコード結果に基づいて、演算部ＯＰＵおよびセレクタＳ１、Ｓ２等の動作を制御する複数の制御信号を生成する。複数の制御信号は、呼び出し情報ＪＳＲ、復帰情報ＲＴＳおよび選択信号ＡＳＥＬを含む。
【００５３】
データレジスタ部ＤＲＥＧは、ストア命令の実行時に演算部ＯＰＵから出力されるデータを保持する複数の領域を有する。アドレスレジスタ部ＡＲＥＧは、アドレス変化命令、ロード命令またはストア命令の実行時に演算部ＯＰＵから出力されるアドレスを保持する複数の領域を有する。
【００５４】
レジスタファイルＲＥＧは、メモリから読み出されるデータまたは演算器ＥＸから出力されるデータを保持する複数のレジスタを有する。レジスタファイルＲＥＧは、命令デコーダ部ＤＥＣからの制御信号に基づいて、レジスタファイルＲＥＧの複数のレジスタの少なくともいずれかに保持しているデータを演算器ＥＸに出力する。
【００５５】
演算器ＥＸは、命令デコーダ部ＤＥＣがデコードした命令にしたがって演算を実行し、演算結果をレジスタファイルＲＥＧ、データレジスタ部ＤＲＥＧ、アドレスレジスタ部ＡＲＥＧまたはセレクタＳ１に出力する。
【００５６】
図４は、図２に示すスタック処理部１０の一例を示す。スタック処理部１０は、ＣＰＵ２００Ａから受ける１６ビットのアドレスＣＡＤ［０：１５］をビット毎にスタックする複数の保持部ＨＬＤ（ＨＬＤ０−ＨＬＤ１５）を有する。保持部ＨＬＤの数は、保持するアドレスＣＡＤ［０：１５］のビット数に等しく、図４に示す例では、１６個である。保持部ＨＬＤ０−ＨＬＤ１５の構成は、互いに同じため、以下では、保持部ＨＬＤ１５の構成が説明される。
【００５７】
保持部ＨＬＤ１５は、１６個のアドレスＣＡＤ［１５］をそれぞれ保持する１６個のフリップフロップＦＦ（ＦＦ１−ＦＦ１６）を有する。フリップフロップＦＦ１−ＦＦ１６は、第１の記憶領域の一例である。また、保持部ＨＬＤ１５は、フリップフロップＦＦにアドレスＣＡＤ［１５］をスタックまたはアンスタックするための１６個のマルチプレクサＭＵＸ（ＭＵＸ１−ＭＵＸ１６）を有する。図４では、フリップフロップＦＦ３−ＦＦ１５およびマルチプレクサＭＵ３−ＭＵＸ１５は省略される。
【００５８】
フリップフロップＦＦの数およびマルチプレクサＭＵＸの数は、プログラムに含まれるサブルーチンのネスト（階層）の数以上に設定される。換言すれば、図４に示すスタック処理部１０を有するプログラムプロファイラ回路３００Ａは、ネストの数が１６個までのプログラムに含まれるサブルーチンの実行時間を計測することができる。
【００５９】
各フリップフロップＦＦは、モード信号ＥＭＤがロウレベルにネゲートされる計測モード中、イネーブル信号ＥＮがハイレベルの期間にクロック端子ＣＫで受けるクロックＣＬＫに同期して動作する。フリップフロップＦＦは、クロックＣＬＫに同期して入力端子ＩＮで受けるアドレスＣＡＤ［１５］の値をラッチし、ラッチした値を出力端子ＯＵＴから出力する。フリップフロップＦＦ１の出力端子ＯＵＴは、１６ビットのアドレスＨＡＤ［０：１５］のうちアドレスＨＡＤ［１５］が伝達されるアドレス線と、マルチプレクサＭＵＸ２の入力端子ＩＮ１とに接続される。
【００６０】
各フリップフロップＦＦ２−ＦＦ１６の出力端子ＯＵＴは、一段上（図の上側）のフリップフロップＦＦ１−ＦＦ１５に対応するマルチプレクサＭＵＸ１−ＭＵＸ１５の入力端子ＩＮ２に接続される。また、各フリップフロップＦＦ２−ＦＦ１５の出力端子ＯＵＴは、一段下（図の下側）のフリップフロップＦＦ３−ＦＦ１６に対応するマルチプレクサＭＵＸ３−ＭＵＸ１６の入力端子ＩＮ１に接続される。
【００６１】
マルチプレクサＭＵＸ１−ＭＵＸ１６は、ロウレベルの復帰情報ＲＴＳを選択端子ＳＥＬで受けている間、入力端子ＩＮ１で受けるアドレスＣＡＤ［１５］を出力端子ＯＵＴから出力する。また、マルチプレクサＭＵＸ１−ＭＵＸ１６は、ハイレベルの復帰情報ＲＴＳを選択端子ＳＥＬで受けている間、入力端子ＩＮ２で受けるアドレスＣＡＤ［１５］を出力端子ＯＵＴから出力する。マルチプレクサＭＵＸ１−ＭＵＸ１６の出力端子ＯＵＴは、フリップフロップＦＦ１−ＦＦ１６の入力端子ＩＮにそれぞれ接続される。マルチプレクサＭＵＸ１は、ＣＰＵ２００ＡからのアドレスＣＡＤ［１５］を入力端子ＩＮ１で受ける。なお、図４では、マルチプレクサＭＵＸ１６の入力端子ＩＮ２に論理”０”が供給されるが、論理”１”が供給されてもよい。
【００６２】
そして、保持部ＨＬＤ１５は、ハイレベルのイネーブル信号ＥＮとロウレベルの復帰情報ＲＴＳとを受けたとき、ＣＰＵ２００ＡからのアドレスＣＡＤ［１５］を保持するスタック動作を実行する。ここで、ハイレベルのイネーブル信号ＥＮおよびロウレベルの復帰情報ＲＴＳは、ＪＳＲ命令の実行を示す。スタック動作では、フリップフロップＦＦ１−ＦＦ１５に保持されているアドレスＣＡＤ［１５］は、一段下のフリップフロップＦＦ２−ＦＦ１６にそれぞれ転送される。そして、保持部ＨＬＤ１５は、新たにスタックされたアドレスＣＡＤ［１５］を、アドレスＨＡＤ［１５］として出力する。
【００６３】
保持部ＨＬＤ１５は、ハイレベルのイネーブル信号ＥＮとハイレベルの復帰情報ＲＴＳとを受けたとき、フリップフロップＦＦに保持しているアドレスＣＡＤ［１５］を一段上のフリップフロップＦＦに転送するアンスタック動作を実行する。ここで、ハイレベルのイネーブル信号ＥＮおよびハイレベルの復帰情報ＲＴＳは、ＲＴＳ命令の実行を示す。そして、保持部ＨＬＤ１５は、フリップフロップＦＦ２からフリップフロップＦＦ１に転送されたアドレスＣＡＤ［１５］を、アドレスＨＡＤ［１５］として出力する。保持部ＨＬＤ１−ＨＬＤ１４の動作は、保持されるアドレスＣＡＤのビットが異なることを除き、保持部ＨＬＤ１５の動作と同じである。
【００６４】
なお、モード信号ＥＭＤがハイレベルにアサートされる評価モード中、各フリップフロップＦＦは、データをラッチするラッチ動作を実行せず、スタック処理部１０は、アドレスＣＡＤのスタック動作およびアンスタック動作を停止する。
【００６５】
図５は、図２に示すＣＰＵ２００Ａが実行する評価対象のプログラムの一例を示す。評価対象のプログラムは、プログラムプロファイラ回路３００Ａにより実行時間が計測されるサブルーチンを含むプログラムである。図５に示す評価対象のプログラムは、メインメモリ等に格納されている。
【００６６】
評価対象のプログラムは、サブルーチンＡを呼び出す命令ＪＳＲ（Ａ）と、サブルーチンＢを呼び出すＪＳＲ（Ｂ）とを含むメインルーチンと、サブルーチンＡ、Ｂ、Ｃとを含む。サブルーチンＡは、サブルーチンＣを呼び出す命令ＪＳＲ（Ｃ）を含む。例えば、メインルーチンは、メインメモリのアドレス”０１００ｈ”から格納され、サブルーチンＡ、Ｂ、Ｃは、メインメモリのアドレス”０２００ｈ”、”０３００ｈ”、”０４００ｈ”からそれぞれ格納されている。
【００６７】
図６は、図２に示すＣＡＭ２０に登録されるデータの一例を示す。ＣＡＭ２０へのデータの登録は、評価モード中に、ＣＰＵ２００Ａが実行する評価プログラムにより実行される。
【００６８】
評価プログラムは、ＣＡＭ２０のデータ線ＤＴ０に対応する記憶領域に、図５に示すサブルーチンＡの先頭アドレスである”０２００ｈ”を書き込む。評価プログラムは、ＣＡＭ２０のデータ線ＤＴ１に対応する記憶領域に、図５に示すサブルーチンＢの先頭アドレスである”０３００ｈ”を書き込む。また、制御プログラムは、ＣＡＭ２０のデータ線ＤＴ２に対応する記憶領域に、図５に示すサブルーチンＣの先頭アドレスである”０４００ｈ”を書き込み、他のデータ線ＤＴ３−ＤＴ５１１に対応する記憶領域に”０”を書き込む。なお、他のデータ線ＤＴ３−ＤＴ５１１に対応する記憶領域には、評価対象のプログラムが格納されていないメインメモリのアドレス値が書き込まれればよい。
【００６９】
ＣＡＭ２０は、スタック処理部１０から受けるアドレスＨＡＤの値と複数の記憶領域にそれぞれ保持したアドレスの値とを比較し、値が一致する場合、対応するデータ線ＤＴをハイレベルにアサートする。なお、図９および図１０に示すように、スタック処理部１０は、サブルーチン（Ａ、Ｂ、Ｃのいずれか）が実行されている間、サブルーチンの先頭アドレスをアドレスＨＡＤとして出力する。このため、各データ線ＤＴのハイレベルの期間は、各サブルーチンが実行されている期間を示す。
【００７０】
ＣＡＭ２０は、スタック処理部１０から”０２００ｈ”のアドレスＨＡＤを受けている間、データ線ＤＴ０をハイレベルに設定し、スタック処理部１０から”０３００ｈ”のアドレスＨＡＤを受けている間、データ線ＤＴ１をハイレベルに設定する。ＣＡＭ２０は、スタック処理部１０から”０４００ｈ”のアドレスＨＡＤを受けている間、データ線ＤＴ２をハイレベルに設定する。
【００７１】
図７は、図２に示すＲＡＭ４０の一例を示す。ＲＡＭ４０は、５１２本のワード線ＷＬ（ＷＬ０−ＷＬ５１１）のいずれかと、３２本のビット線ＢＬ（ＢＬ０−ＢＬ３１）のいずれかとに接続された複数のメモリセルＭＣを有する。ハイレベルのワード線ＷＬに接続されたメモリセルＭＣの記憶ノードは、ビット線ＢＬに接続され、ロウレベルのワード線ＷＬに接続されたメモリセルＭＣの記憶ノードは、ビット線ＢＬとの接続が遮断される。各ワード線ＷＬに接続されたメモリセルＭＣは、ＣＡＭ２０の記憶領域に対応する積算領域の一例である。また、ＲＡＭ４０は、ビット線ＢＬ０−ＢＬ３１に接続されたライトアンプＷＡおよびリードアンプＲＡと、ライトアンプＷＡおよびリードアンプＲＡの動作を制御する制御回路ＣＮＴＬとを有する。
【００７２】
制御回路ＣＮＴＬは、チップセレクト端子ＣＳでハイレベルのタスクラン信号ＴＲＵＮを受け、ライトイネーブル端子／ＷＥでロウレベルの信号を受けているときに書き込み制御信号ＷＲを出力する。また、制御回路ＣＮＴＬは、チップセレクト端子ＣＳでハイレベルのタスクラン信号ＴＲＵＮを受け、ライトイネーブル端子／ＷＥでハイレベルの信号を受けているときに読み出し制御信号ＲＤを出力する。ライトイネーブル端子／ＷＥには、ライトイネーブル信号ＤＷＥ、ＥＷＥのいずれかが供給される。なお、制御回路ＣＮＴＬは、書き込み制御信号ＷＲのハイレベル期間と読み出し制御信号ＲＤのハイレベル期間とが重複することを回避する回路を含む。
【００７３】
ライトアンプＷＡは、書き込み制御信号ＷＲに基づいて、データ入力端子ＤＩ（ＤＩ０−ＤＩ３１）で受けるデータの信号量を増幅し、増幅したデータをビット線ＢＬ（ＢＬ０−ＢＬ３１）に出力する。リードアンプＲＡは、読み出し制御信号ＲＤに基づいて、ビット線ＢＬ（ＢＬ０−ＢＬ３１）上のデータの信号量を増幅し、増幅したデータをデータ出力端子ＤＯ（ＤＯ０−ＤＯ３１）から出力する。
【００７４】
図８は、評価モードおよび計測モードにおける図２に示すプログラムプロファイラ回路３００Ａの動作の一例を示す。ステップＳ１０、Ｓ２０、Ｓ３０、Ｓ６０、Ｓ７０は、評価モード中の動作を示し、ステップＳ４０、Ｓ５０は、計測モード中の動作を示す。
【００７５】
まず、ステップＳ１０において、ＣＰＵ２００Ａは、プロセッサ１００Ａに制御信号ＣＡＭＷＲを生成させ、評価対象のプログラムに含まれるサブルーチンの先頭アドレスをＣＡＭ２０に登録する。ＣＡＭ２０に登録する先頭アドレスは、評価対象のプログラムをコンパイルし、リンカーでロードモジュールに連結し、ローダーでメモリへロードする段階で生成される。評価対象のプログラムが、図５に示す３つのサブルーチンＡ、Ｂ、Ｃを含む場合、先頭アドレスが登録されたＣＡＭ２０の状態の例は、図６に示される。
【００７６】
次に、ステップＳ２０において、ＣＰＵ２００Ａは、プロセッサ１００ＡにアドレスＥＡＤ、ライトイネーブル信号ＥＷＥ、チップセレクト信号ＥＣＳ、データ入力信号ＥＤＩを生成させ、ＲＡＭ４０に書き込み動作を実行させる。そして、ＣＰＵ２００Ａは、ＲＡＭ４０の全てのメモリセルＭＣに”０”を書き込む。ステップＳ１０、Ｓ２０により、プログラムプロファイラ回路３００Ａの初期化が実行される。
【００７７】
次に、ステップＳ３０において、ＣＰＵ２００Ａは、プロセッサ１００Ａにタスクラン信号ＴＲＵＮをアサートさせ、評価モードから計測モードに遷移する。
【００７８】
次に、ステップＳ４０において、ＣＰＵ２００Ａは、評価対象のプログラムの実行を開始する。評価プログラムの実行が終了した後、ステップＳ５０において、ＣＰＵ２００Ａは、プロセッサ１００Ａにタスクラン信号ＴＲＵＮをネゲートさせ、計測モードから評価モードに遷移する。
【００７９】
次に、ステップＳ６０において、ＣＰＵ２００Ａは、プロセッサ１００ＡにアドレスＥＡＤ、ライトイネーブル信号ＥＷＥ、チップセレクト信号ＥＣＳを生成させ、ＲＡＭ４０に読み出し動作を実行させる。そして、ＣＰＵ２００Ａは、評価対象のプログラムに含まれる各サブルーチンＡ、Ｂ、Ｃの実行サイクル数を示すデータ出力信号ＥＤＯをＲＡＭ４０から読み出す。
【００８０】
次に、ステップＳ７０において、ＣＰＵ２００Ａは、ＲＡＭ４０から読み出した各サブルーチンＡ、Ｂ、Ｃの実行サイクル数と分周クロックＤＣＬＫの周期との積を算出する。算出した積は、各サブルーチンＡ、Ｂ、Ｃの実行時間を示す。ＣＰＵ２００Ａは、算出した積を出力する。そして、算出した積により示される各サブルーチンＡ、Ｂ、Ｃの実行時間の妥当性が、評価対象のプログラムの設計者等により検討される。
【００８１】
図９および図１０は、図２に示すプログラムプロファイラ回路３００Ａの計測モード中の動作の一例を示す。図１０は、図９の動作の続きを示す。図９および図１０は、図８のステップＳ４０における動作を示す。図９では、図５に示す評価対象のプログラムに含まれる各サブルーチンＡ、Ｂの実行サイクル数が計測され、図１０では、図５に示す評価対象のプログラムに含まれるサブルーチンＣの実行サイクル数が計測される。図９および図１０に示す例では、クロックＣＬＫに対する分周クロックＤＣＬＫの分周比は”４”である。なお、分周クロックＤＣＬＫの分周比は、”４”に限定されない。上述したように、分周クロックＤＣＬＫの周波数は、分周クロックＤＣＬＫの１周期内にＲＡＭ４０の読み出し動作と書き込み動作との両方を実行可能な周波数であればよい。
【００８２】
分周クロックＤＣＬＫは、モード信号ＥＭＤの論理に拘わりなく常に出力される（図９（ａ））。ＣＰＵ２００Ａの命令デコーダ部ＤＥＣは、命令ＪＳＲ（Ａ）をデコードし、呼び出し情報ＪＳＲ（Ａ）を出力する（図９（ｂ））。すなわち、図５に示す評価対象のプログラムは、メインルーチンからサブルーチンＡを呼び出す。図２に示すオア回路ＯＲ１は、呼び出し情報ＪＳＲ（Ａ）に応答してイネーブル信号ＥＮを出力する（図９（ｃ））。
【００８３】
図４に示すスタック処理部１０は、イネーブル信号ＥＮとロウレベルの復帰情報ＲＴＳに基づいて、スタック動作を実行する。すなわち、スタック処理部１０は、アドレスＣＡＤ（”０２００ｈ”）をフリップフロップＦＦ１にラッチし、フリップフロップＦＦ１にラッチした値をアドレスＨＡＤとして出力する（図９（ｄ））。アドレスＨＡＤは、分周クロックＤＣＬＫに同期して動作するフリップフロップ１１（Ｄ−ＦＦ）によりラッチされ、アドレスＨＡＤｄとしてＣＡＭ２０へ出力される。フリップフロップ１１は、クロックＣＬＫに基づいて動作するスタック処理部１０と、クロックＣＬＫを分周した分周クロックＤＣＬＫに基づいて動作するＣＡＭ２０以降の回路との同期を取るために設けられる。なお、命令デコーダ部ＤＥＣが命令ＪＳＲ（Ａ）をデコードする前、スタック処理部１０の全てのフリップフロップＦＦは、初期値”０”を保持し、”０”を示すアドレスＨＡＤを出力する。この場合、アドレスＨＡＤの値は、ＣＡＭ２０に保持されたデータと一致しないため、ＲＡＭ４０は、アクセスされない。
【００８４】
ＣＰＵ２００Ａは、プログラムカウンタＰＣの値を順次にインクリメントし、サブルーチンＡを実行する（図９（ｅ））。ＣＡＭ２０は、アドレスＨＡＤと同じ値（”０２００ｈ”）が格納されている記憶領域を検索し、値”０２００ｈ”が格納されている記憶領域に対応するデータ線ＤＴ０をハイレベルにアサートする（図９（ｆ））。スタック処理部１０から出力されるアドレスＨＡＤの値は、呼び出し情報ＪＳＲまたは復帰情報ＲＴＳが出力されるまで維持され、データ線ＤＴ０のハイレベルは、呼び出し情報ＪＳＲまたは復帰情報ＲＴＳが出力されてから所定の期間、維持される。なお、例えば、ＣＡＭ２０がアドレスＨＡＤｄの変化を受けた後、データ線ＤＴ０をアサートするまでのアクセス時間は、クロックＣＬＫの約２．５サイクルに相当すると仮定している。
【００８５】
図２に示すセレクタ３０は、モード信号ＥＭＤが論理”０”であるため（計測モード）、ＣＡＭ２０のデータ線ＤＴのレベルをＲＡＭ４０のワード線ＷＬに伝達する。このため、ワード線ＷＬ０は、データ線ＤＴ０のハイレベルへの変化とともにハイレベルに変化する。他のワード線ＷＬ１−ＷＬ５１１は、ロウレベル”Ｌ”に維持される。
【００８６】
メモリ制御部８０は、分周クロックＤＣＬＫに同期して所定の遅延時間と所定のパルス幅を持つライトイネーブル信号ＤＷＥを生成する（図９（ｇ））。また、メモリ制御部８０は、ＲＡＭ４０の出力をレジスタ５０によりラッチすることが可能なタイミングで、分周クロックＤＣＬＫに同期したクロックＲＣＬＫを出力する（図９（ｈ））。
【００８７】
フリップフロップ１１は、ＣＰＵ２００Ａを動作させるクロックＣＬＫの周波数を分周した分周クロックＤＣＬＫに同期してアドレスＨＡＤをラッチして、分周クロックＤＣＬＫに同期したアドレスＨＡＤｄを生成する。これにより、メモリ制御部８０は、ライトイネーブル信号ＤＷＥによる読み出し要求および書き込み要求を、分周クロックＤＣＬＫに同期して順次に生成することができる。したがって、ＲＡＭ４０に供給されるライトイネーブル信号／ＷＥ（読み出し要求）の出力を、アドレスＨＡＤｄに基づいてハイレベルに変化するワード線ＷＬのタイミングに合わせることができる。また、メモリ制御部８０により分周クロックＤＣＬＫに同期したクロックＲＣＬＫを生成するため、レジスタ５０は、読み出し要求から一定時間後に、ＲＡＭ４０からの出力をラッチすることができる。この結果、ＲＡＭ４０に対して正確な読み出し動作および書き込み動作を実行させることができる。
【００８８】
なお、メモリ制御部８０は、分周クロックＤＣＬＫの立ち下がりエッジに基づいてハイレベルのライトイネーブル信号ＤＷＥを生成し、分周クロックＤＣＬＫの立ち上がりエッジに基づいてロウレベルのライトイネーブル信号ＤＷＥを生成してもよい。この場合にも、メモリ制御部８０は、データ線ＤＴ０がアサート時に、ハイレベルのライトイネーブル信号ＤＷＥ（読み出し要求）とロウレベルのライトイネーブル信号ＤＷＥ（書き込み要求）とを順次に生成する。
【００８９】
図９では、モード信号ＥＭＤが論理”０”であるため（計測モード）、図２に示すスイッチＳＷ２は、ライトイネーブル信号ＤＷＥを選択し、ＲＡＭ４０のライトイネーブル端子／ＷＥに伝達する。論理”１”のタスクラン信号ＴＲＵＮがＲＡＭ４０のチップセレクト端子ＣＳに供給され、ＲＡＭ４０はアクティブ状態になる。そして、ＲＡＭ４０は、ライトイネーブル端子／ＷＥで受ける論理に応じて、読み出し動作または書き込み動作を実行する。
【００９０】
図７に示すＲＡＭ４０の制御回路ＣＮＴＬは、分周クロックＤＣＬＫに同期するライトイネーブル信号ＤＷＥの立ち上がりエッジに同期して読み出し制御信号ＲＤをアサートし、読み出し動作を実行する（図９（ｉ））。読み出し動作では、ハイレベルのワード線ＷＬ０に接続されたメモリセルＭＣからビット線ＢＬ０−ＢＬ６３にデータ”０”が読み出され、読み出されたデータは、データ出力信号ＤＯとして出力される（図９（ｊ））。レジスタ５０は、クロックＲＣＬＫに同期してＲＡＭ４０から出力されるデータをラッチし、ラッチしたデータをインクリメンタ６０に出力する。インクリメンタ６０は、レジスタから受けるデータに”１”を加えたデータを、スイッチＳＷ１を介してＲＡＭ４０のデータ入力端子ＤＩに出力する。
【００９１】
ＲＡＭ４０は、分周クロックＤＣＬＫの立ち下がりエッジに同期して書き込み制御信号ＷＲをアサートし、書き込み動作を実行する（図９（ｋ））。書き込み動作では、データ入力端子ＤＩで受けるインクリメンタ６０からのデータが、ビット線ＢＬ０−ＢＬ６３を介してハイレベルのワード線ＷＬ０に接続されたメモリセルＭＣに書き込まれる（図９（ｌ））。例えば、ＲＡＭ４０が読み出し動作と書き込み動作とを実行する時間と、レジスタ５０がデータを受けてからインクリメンタ６０が値を増加させたデータを出力するまでの時間との和は、分周クロックＤＣＬＫの１サイクル時間以下である。
【００９２】
この後、メモリ制御部８０は、ライトイネーブル信号ＤＷＥを繰り返し生成し、ＲＡＭ４０の制御回路ＣＮＴＬは、ライトイネーブル信号ＤＷＥに基づいて、読み出し制御信号ＲＤおよび書き込み制御信号ＷＲを交互に生成する。そして、読み出し動作および書き込み動作が交互に実行され、ワード線ＷＬ０に接続されたメモリセルＭＣに記憶されるデータが１ずつ増加される。図９に示す例では、書き込み動作が終了し、読み出し動作が開始される前にデータ線ＤＴ０がロウレベルに変化するため、サブルーチンＡの実行に基づいて値”５”がＲＡＭ４０に保持される（図９（ｍ））。
【００９３】
ＣＰＵ２００Ａの命令デコーダ部ＤＥＣは、命令ＪＳＲ（Ｃ）のデコードに基づいて呼び出し情報ＪＳＲ（Ｃ）を出力し（図９（ｎ））、オア回路ＯＲ１は、呼び出し情報ＪＳＲ（Ｃ）に応答してイネーブル信号ＥＮを出力する（図９（ｏ））。すなわち、図５に示す評価対象のプログラムは、サブルーチンＡからサブルーチンＣを呼び出す。スタック処理部１０は、イネーブル信号ＥＮとロウレベルの復帰情報ＲＴＳとに基づいて、スタック動作を実行する。すなわち、スタック処理部１０は、図４のフリップフロップＦＦ１に保持されているアドレスＣＡＤ（”０２００ｈ”）をフリップフロップＦＦ２に転送し、アドレスＣＡＤ（”０４００ｈ”）をフリップフロップＦＦ１にラッチする。そして、スタック処理部１０は、フリップフロップＦＦ１にラッチした値をアドレスＨＡＤとして出力する（図９（ｐ））。
【００９４】
ＣＡＭ２０は、アドレスＨＡＤの同じ値（”０４００ｈ”）が格納されている記憶領域に対応するデータ線ＤＴ２をハイレベルにアサートし、データ線ＤＴ０をロウレベルにネゲートする（図９（ｑ）、（ｒ））。ＣＡＭ２０のデータ線ＤＴ２、ＤＴ０のレベルは、ＲＡＭ４０のワード線ＷＬに伝達され、ワード線ＷＬ２はハイレベルに変化し、ワード線ＷＬ０はロウレベルに変化する。この後、プログラムプロファイラ回路３００Ａは、サブルーチンＡの実行時と同様に動作し、データ線ＤＴ２がアサートされている間、ＲＡＭ４０に読み出し動作と書き込み動作とを交互に実行させる（図９（ｓ））。そして、ワード線ＷＬ２に接続されたメモリセルＭＣに記憶されるデータが１ずつ増加される。
【００９５】
ＣＰＵ２００Ａの命令デコーダ部ＤＥＣは、命令ＲＴＳ（Ｃ）のデコードに基づいて復帰情報ＲＴＳ（Ｃ）を出力し（図９（ｔ））、オア回路ＯＲ１は、復帰情報ＲＴＳ（Ｃ）に応答してイネーブル信号ＥＮを出力する（図９（ｕ））。すなわち、図５に示す評価対象のプログラムは、サブルーチンＣからサブルーチンＡに戻る。
【００９６】
スタック処理部１０は、イネーブル信号ＥＮとハイレベルの復帰情報ＲＴＳとに基づいて、アンスタック動作を実行し、図４のフリップフロップＦＦ２に保持されているアドレスＣＡＤの値（”０２００ｈ”）をフリップフロップＦＦ１に転送する。そして、スタック処理部１０は、アドレスＨＡＤ（”０２００ｈ”）を出力する（図９（ｖ））。
【００９７】
この後、プログラムプロファイラ回路３００Ａは、サブルーチンＡの実行時と同様に動作し、ＲＡＭ４０におけるデータ線ＤＴ０に対応するワード線ＷＬ０に接続されたメモリセルＭＣに対して、読み出し動作と書き込み動作とを交互に実行する（図９（ｗ））。そして、ワード線ＷＬ０に接続されたメモリセルＭＣに記憶されるデータが１ずつ増加される。この際、ＣＡＭ２０から出力されるデータ信号ＤＴ０のタイミングをライトイネーブル信号ＤＷＥのハイレベル期間に合わせることで、ワード線ＷＬ０のアサート時に、ＲＡＭ４０の読み出し動作を書き込み動作よりも前に開始させることができる。この結果、ＲＡＭ４０に前回保持された値を順次に増加させることができ、ＲＡＭ４０に誤った値が書き込まれることを抑止することができる。これに対して、書き込み動作が読み出し動作より前に実行された場合、サブルーチンＡに対応してＲＡＭ４０に保持されている値は、サブルーチンＢに対応してインクリメンタ６０が出力している値”３”に書き換えられるおそれがある。
【００９８】
ＣＰＵ２００Ａの命令デコーダ部ＤＥＣは、命令ＲＴＳ（Ａ）のデコードに基づいて復帰情報ＲＴＳ（Ａ）を出力し（図９（ｘ））、オア回路ＯＲ１は、復帰情報ＲＴＳ（Ａ）に応答してイネーブル信号ＥＮを出力する（図９（ｙ））。すなわち、図５に示す評価対象のプログラムは、サブルーチンＡからメインルーチンに戻る。スタック処理部１０は、イネーブル信号ＥＮとハイレベルの復帰情報ＲＴＳとに基づいて、アンスタック動作を実行し、図４のフリップフロップＦＦ２に保持されている初期値”０”をフリップフロップＦＦ１に転送し、アドレスＨＡＤとして出力する。ＣＰＵ２００Ａがメインルーチンを実行している間、アドレスＨＡＤは”０”に維持され、ＣＡＭ２０に保持されたデータと一致しない。このため、ＲＡＭ４０は、アクセスされず、これまでに積算された値を保持する。
【００９９】
次に、図１０において、ＣＰＵ２００Ａの命令デコーダ部ＤＥＣは、命令ＪＳＲ（Ｂ）のデコードに基づいて呼び出し情報ＪＳＲ（Ｂ）を出力する（図１０（ａ））。オア回路ＯＲ１は、呼び出し情報ＪＳＲ（Ｂ）に応答してイネーブル信号ＥＮを出力する（図１０（ｂ））。すなわち、図５に示す評価対象のプログラムは、メインルーチンからサブルーチンＢを呼び出す。スタック処理部１０は、イネーブル信号ＥＮとロウレベルの復帰情報ＲＴＳとに基づいて、スタック動作を実行する。すなわち、スタック処理部１０は、アドレスＣＡＤ（”０３００ｈ”）をフリップフロップＦＦ１にラッチし、フリップフロップＦＦ１にラッチした値をアドレスＨＡＤとして出力する（図１０（ｃ））。
【０１００】
ＣＡＭ２０は、アドレスＨＡＤの同じ値（”０３００ｈ”）が格納されている記憶領域に対応するデータ線ＤＴ１をハイレベルにアサートする（図１０（ｄ））。ＣＡＭ２０のデータ線ＤＴのレベルは、ＲＡＭ４０のワード線ＷＬに伝達され、ワード線ＷＬ１はハイレベルに変化する。この後、プログラムプロファイラ回路３００Ａは、サブルーチンＡの実行時と同様に動作し、データ線ＤＴ１がアサートされている間、ＲＡＭ４０に読み出し動作と書き込み動作とを交互に実行させる（図１０（ｅ））。そして、ワード線ＷＬ１に接続されたメモリセルＭＣに記憶されるデータが１ずつ増加される。
【０１０１】
ＣＰＵ２００Ａの命令デコーダ部ＤＥＣは、命令ＲＴＳ（Ｂ）のデコードに基づいて復帰情報ＲＴＳ（Ｂ）を出力し（図１０（ｆ））、オア回路ＯＲ１は、復帰情報ＲＴＳ（Ｂ）に応答してイネーブル信号ＥＮを出力する（図１０（ｇ））。すなわち、図５に示す評価対象のプログラムは、サブルーチンＢからメインルーチンに戻る。
【０１０２】
スタック処理部１０は、イネーブル信号ＥＮとハイレベルの復帰情報ＲＴＳとに基づいて、アンスタック動作を実行し、図４のフリップフロップＦＦ２に保持されている初期値”０”をフリップフロップＦＦ１に転送し、アドレスＨＡＤとして出力する。
【０１０３】
以上の動作により、評価対象のプログラムが実行された後、ＲＡＭ４０内には、サブルーチンＡに対応するメモリセルＭＣに”７”が保持され、サブルーチンＢに対応するメモリセルＭＣに”５”が保持される。また、サブルーチンＣに対応するメモリセルＭＣに”３”が保持される。なお、実際のプログラムでは、各サブルーチンＡ、Ｂ、Ｃの実行サイクル数は、図９および図１０に示すサイクル数より多い。ＲＡＭ４０は、最大で”２の３２乗サイクル”をサブルーチン毎に保持可能である。
【０１０４】
以上、図２から図１０に示す実施形態においても、図１に示す実施形態と同様の効果を得ることができる。すなわち、呼び出し情報ＪＳＲに基づいて先頭アドレスをスタック処理部１０にスタックすることで、実行中のサブルーチンを識別するＣＡＭ２０の記憶容量を増加させることなく、サブルーチンの実行サイクル数をＲＡＭ４０に蓄積することができる。この結果、プログラムのサイズに拘わりなく、プログラム内の各サブルーチンの実行時間を計測することができる。
【０１０５】
さらに、図２から図１０に示す実施形態では、ワード線信号ＷＬのアサート中、読み出し要求と書き込み要求とが順次にＲＡＭ４０に供給され、ＲＡＭ４０から読み出されたデータをインクリメンタ６０で増加させた値をＲＡＭ４０に書き戻す処理が繰り返される。これにより、ＲＡＭ４０をカウンタとして動作させ、各サブルーチンの実行時間を示す値をＲＡＭ４０に保持することができる。
【０１０６】
メモリ制御部８０は、ライトイネーブル信号ＤＷＥによる読み出し要求を分周クロックＤＣＬＫに同期して生成し、フリップフロップ１１は、アドレスＨＡＤを分周クロックＤＣＬＫに同期してラッチし、ＣＡＭ２０に供給するアドレスＨＡＤｄを生成する。これにより、読み出し要求のタイミングを、ハイレベルに変化するワード線ＷＬのタイミングに合わせることが可能になる。この結果、ワード線ＷＬがハイレベルに変化する前に読み出し要求がＲＡＭ４０に供給されることを抑止することができ、ＲＡＭ４０が誤動作することを抑止することができる。
【０１０７】
図１１は、プログラムプロファイラ回路、プロセッサおよびプログラムカウント方法の別の実施形態を示す。図２に示した実施形態で説明した要素と同一または同様の要素については、同一の符号を付し、これ等については、詳細な説明は省略する。この実施形態のプロセッサ１００Ｂは、図２に示すプロファイラ回路３００Ａの代わりにプロファイラ回路３００Ｂを有する。プロファイラ回路３００Ｂは、図２に示すＣＡＭ２０、セレクタ３０、ＲＡＭ４０およびメモリ制御部８０の代わりにＣＡＭ２０Ｂ、セレクタ３０Ｂ、ＲＡＭ４０Ｂおよびメモリ制御部８０Ｂを有する。図１１に示すプロファイラ回路３００Ｂの動作は、図８から図１０と同様である。
【０１０８】
ＣＡＭ２０Ｂは、フリップフロップ１１を介してスタック処理部１０から受けるアドレスＨＡＤｄの値を保持している記憶領域を示すデータを共通のデータ線ＤＴに出力する点で、図２に示すＣＡＭ２０と相違する。ＣＡＭ２０Ｂには、図６に示す情報と同様の情報が書き込まれる。ＣＡＭ２０Ｂは、アドレスＨＡＤｄ（”０２００ｈ”）を受けたとき、”０”を示すデータＤＴを出力し、アドレスＨＡＤｄ（”０３００ｈ”）を受けたとき、”１”を示すデータＤＴを出力する。また、ＣＡＭ２０Ｂは、アドレスＨＡＤｄ（”０４００ｈ”）を受けたとき、”２”を示すデータＤＴを出力する。すなわち、ＣＡＭ２０Ｂは、図２に示すＣＡＭ２０にエンコーダを付加した構成を有する。またＣＡＭ２０Ｂは、アドレスＨＡＤｄの値が登録された記憶領域がない場合、アドレスＨＡＤｄの不一致を示す信号ＮＤＴをアサートとし、メモリ制御部８０Ｂへ出力する。メモリ制御部８０Ｂは、信号ＮＤＴがアサートされている間、ライトイネーブル信号ＤＷＥをネゲートし、ＲＡＭ４０Ｂが書き込み動作を実行することを禁止する。制御信号ＣＡＭＷＲによるＣＡＭ２０Ｂへのデータの登録は、ＣＰＵ２００Ａが実行する評価プログラムにより実行される。
【０１０９】
セレクタ３０Ｂは、モード信号ＥＭＤがアサートされている間（評価モード）、アドレスＥＡＤをアドレスＡＤとしてＲＡＭ４０Ｂに伝達する。また、セレクタ３０Ｂは、モード信号ＥＭＤがネゲートされている間（計測モード）、ＣＡＭ２０Ｂからのデータ信号ＤＴをアドレスＡＤとしてＲＡＭ４０Ｂに伝達する。
【０１１０】
ＲＡＭ４０Ｂは、図２に示すデコーダ９０に相当するアドレスデコーダを有する。アドレスデコーダは、セレクタ３０Ｂから供給されるアドレスＡＤをデコードし、アドレスＡＤが示すワード線ＷＬ（図７）をハイレベルに設定する。すなわち、ＲＡＭ４０Ｂは、汎用のＳＲＡＭ等と同じ入出力インタフェースを有する。ＲＡＭ４０Ｂは、アドレスデコーダを有することを除き、図７に示すＲＡＭ４０と同様の構成である。
【０１１１】
以上、図１１に示す実施形態においても、図１から図１０に示す実施形態と同様に、プログラムのサイズに拘わりなく、プログラム内の各サブルーチンの実行時間を計測することができる。さらに、図１１に示す実施形態では、汎用のＲＡＭを用いて、プログラムプロファイラ回路３００Ｂを構築することができる。
【０１１２】
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。
【符号の説明】
【０１１３】
１０…スタック処理部；１１…フリップフロップ；２０、２０Ｂ…ＣＡＭ；３０、３０Ｂ…セレクタ；４０、４０Ｂ…ＲＡＭ；５０…レジスタ；６０…インクリメンタ；７０…分周部；８０、８０Ｂ…メモリ制御部；９０…デコーダ；１００、１００Ａ、１００Ｂ…プロセッサ；２００…演算処理装置；２００Ａ…ＣＰＵ；３００、３００Ａ、３００Ｂ…プログラムプロファイラ回路；３１０…スタック処理部；３２０…一致判定部；３２２…記憶領域；３３０…積算部；３３２…積算領域；４００…メモリ；ＡＩＮＦ…領域情報；ＡＲＥＧ…アドレスレジスタ部；ＢＬ（ＢＬ０−ＢＬ３１）…ビット線；ＣＡＤ…アドレス；ＣＡＭＷＲ…制御信号；ＣＬＫ…クロック；ＣＮＴＬ…制御回路；ＤＣＬＫ…分周クロック；ＤＥＣ…命令デコーダ部；ＤＩ…データ入力端子；ＤＯ…データ出力端子；ＤＲＥＧ…データレジスタ部；ＤＴ…データ線；ＤＷＥ…ライトイネーブル信号；ＥＡＤ…アドレス；ＥＣＳ…チップセレクト信号；ＥＤＩ…データ入力信号；ＥＤＯ…データ出力信号；ＥＭＤ…モード信号；ＥＮ…イネーブル信号；ＥＷＥ…ライトイネーブル信号；ＥＷＬ…ワード線信号；ＥＸ…演算器；ＦＦ（ＦＦ１−ＦＦ１６）…フリップフロップ；ＨＡＤ…アドレス；ＨＡＤＤ…先頭アドレス；ＨＤＣ…ハードディスクコントローラ；ＨＤＤ…ハードディスク装置；ＨＬＤ（ＨＬＤ０−ＨＬＤ１５）…保持部；ＩＮＣ…インクリメンタ；ＩＮＤ…入力装置；ＩＮＩＦ…入力インタフェース；ＩＰＥ…情報処理装置；ＩＲＥＧ…命令レジスタ部；ＪＳＲ…呼び出し情報；ＭＢ…マザーボード；ＭＣ…メモリセル；ＭＭ…メインメモリ；ＭＵＸ（ＭＵＸ１−ＭＵＸ１６）…マルチプレクサ；ＮＷ…ネットワーク；ＮＷＩＦ…ネットワークインタフェース；ＯＤＣ…光学ドライブコントローラ；ＯＤＤ…光学ドライブ装置；ＯＰＵ…演算部；ＯＲ１、ＯＲ２…オア回路；ＯＵＴＤ…出力装置；ＯＵＴＩＦ…出力インタフェース；ＰＣ…プログラムカウンタ；ＲＡ…リードアンプ；ＲＤ…読み出し制御信号；ＲＥＧ…レジスタファイル；ＲＭ…記録媒体；ＲＴＳ…復帰情報；Ｓ１、Ｓ２…セレクタ；ＳＢＵＳ…システムバス；ＳＲ（ＳＲＡ、ＳＲＢ、ＳＲＣ）…サブルーチン；ＳＷ１、ＳＷ２…スイッチ；ＴＲＵＮ…タスクラン信号；ＷＡ…ライトアンプ；ＷＬ（ＷＬ０−ＷＬ５１１）…ワード線；ＷＲ…書き込み制御信号
【図１】
2016162091.tif 000003
【図２】
2016162091.tif 000004
【図３】
2016162091.tif 000005
【図４】
2016162091.tif 000006
【図５】
2016162091.tif 000007
【図６】
2016162091.tif 000008
【図７】
2016162091.tif 000009
【図８】
2016162091.tif 000010
【図９】
2016162091.tif 000011
【図１０】
2016162091.tif 000012
【図１１】
2016162091.tif 000013