次に、本発明の実施の形態について、図面を参照しつつ説明する。
図1は、本発明の一実施形態に係る半導体集積回路の概略構成の一例を示す図である。同図に示すように、本実施形態に係る半導体集積回路1は、例えば、プロセッサモジュール10と、メモリモジュール20と、チップセット30と、性能評価モジュール40とを含んで構成される。半導体集積回路1は、典型的には、図示しない所定のI/Oインターフェースを介して、ストレージデバイス50や入出力装置60等を接続し、コンピュータシステムを構成する。なお、半導体集積回路1は、性能評価モジュール40のみによって構成され、プロセッサモジュール等によって構成される他の半導体集積回路と一体的に動作するようにものであっても良い。
プロセッサモジュール10は、例えば、プロセッサコア、マイクロコントローラ、デジタル信号プロセッサ及び/又はこれらの組合せを含む。本実施形態のプロセッサモジュール10は、パイプライン方式で命令を実行可能に構成される。したがって、プロセッサモジュール10は、メモリモジュール20に記憶されるプログラムを構成する命令群をパイプライン処理することによって、コンピュータシステムに所定の機能を実現させる。本実施形態では、プロセッサモジュール10は、プログラムの実行中、プログラムカウンタの値を性能評価モジュール40に出力する。
メモリモジュール20は、典型的には、揮発性メモリ(例えばRAM)、不揮発性メモリ(例えばROMやフラッシュメモリ等)及び/又はこれらの組合せからなる1次記憶装置である。本例では、メモリモジュール20は、性能評価に供されるプログラム及びその実行に必要な各種のプログラム等を記憶する。
また、メモリモジュール20は、性能評価モジュール40から出力されるカウント値を記憶する。
チップセット30は、プロセッサモジュール10、メモリモジュール20、性能評価モジュール40、ストレージデバイス50及び入出力装置60等を接続するバスとのブリッジや、コンピューティングデバイスを構成するために必要な他のコンポーネントを集積した回路からなる。
性能評価モジュール40は、プロセッサモジュール10が実行するプログラム中の所定の命令が何サイクル分実行されたか(すなわち、命令の実行数)をカウントする。具体的には、性能評価モジュール40は、プログラムの実行に伴ってプロセッサモジュール10から逐次出力されるプログラムカウンタ(PC)の値が、PCテーブル(図2を参照)に記憶された所定の値と一致するか否かを判断し、一致する度にカウントを行う。カウント結果は、チップセット30を介して、例えばメモリモジュール20やストレージデバイス50に記憶され、プログラムの解析に供される。
なお、ストレージデバイス50は、典型的には、ハードディスクドライブ(HDD)や光学式ディスクドライブ、ソリッドステートデバイス(SSD)等からなる。ストレージデバイス50は、プロセッサモジュール10の2次記憶装置として機能する。また、入出力装置60は、各種のペリフェラルインターフェースであり、例えば、キーボードや、マウス、ディスプレイ、印刷装置、通信装置などである。
以上のように構成される半導体集積回路1は、プロセッサモジュール10によって、メモリモジュール20に記憶されるプログラム中の命令を実行し、また、該実行の間、性能評価モジュール40によって所定の命令が何サイクル分実行されたかをカウントし、該カウント値をメモリモジュール20等に記憶する。これにより、半導体集積回路1は、イベントベースよりも粒度の小さい命令のクロックサイクルベースで命令の実行数をカウントすることができ、したがって、プログラム開発者は、その実行経過を解析することができるようになる。
図2は、本発明の一実施形態に係る半導体集積回路のプロセッサモジュールの構成の一例を示す図である。同図に示すように、本実施形態に係るプロセッサモジュール10は、例えば、命令フェッチ部11と、レジスタリード部12と、実行部13と、メモリアクセス部14と、ライトバック部15とを含んで構成される。本実施形態では、プロセッサモジュール10は、これら5つのコンポーネントにより5ステージのパイプライン処理で命令を処理するものとして構成されるが、これに限られるものではない。
命令フェッチ部11は、プログラムカウンタ(図3を参照)に記憶された実行アドレスに従って命令キャッシュ(図3を参照)から命令をフェッチし、出力する。これに伴い、プログラムカウンタの値は、後述する実行部13から出力される制御信号CNTに従って更新される。命令フェッチ部11は、レジスタリード部12に対する読み出しレジスタアドレスを示すリードレジスタ信号RREG1及びRREG2並びに書き込みレジスタアドレスを示すライトレジスタ信号WREGと、命令に従う制御内容を示す制御信号CNTとを生成し、これらをプログラムカウンタの値を示すプログラムカウンタ信号PCとともにレジスタリード部12に出力する。また、命令フェッチ部11は、プログラムカウンタ信号PCを性能評価モジュール40に出力する。
レジスタリード部12は、プログラムの実行に供される各種の値を記憶するレジスタファイル(図3を参照)を有し、命令フェッチ部11でフェッチされた命令に従って、該レジスタファイルに対する読み出しを実行するとともに、後述するライトバック部15から出力される信号に従いレジスタファイルに対する書き込みを実行する。具体的には、レジスタリード部12は、命令フェッチ部11から出力されるプログラムカウンタ信号PCと、制御信号CNTと、リードレジスタ信号RREG1及びRREG2と、ライトレジスタ信号WREGとをラッチし、リードレジスタ信号RREG1及びRREG2を性能評価モジュール40に出力する。また、レジスタリード部12は、プログラムカウンタ信号PCと、制御信号CNTと、ライトレジスタ信号WREGとを実行部13に出力する。また、レジスタリード部12は、該ラッチしたリードレジスタ信号RREG1及びRREG2に従うレジスタファイルのアドレスから値を読み出し、該読み出した値をリードデータ信号RDATA1及びRDATA2として実行部13に出力する。さらに、レジスタリード部12は、後述するライトバック部15から出力されるライトバックレジスタ信号WBREGに従うレジスタファイルのアドレスに、ライトバック部15から出力されるライトデータ信号WDATAが示す値を書き込む。
実行部13は、レジスタリード部12によって読み出された各種の値を用いて、命令フェッチ部11によってフェッチされた命令を解釈し、該解釈に従って演算を実行する。具体的には、実行部13は、レジスタリード部12から出力されるプログラムカウンタ信号PCと、ライトレジスタ信号WREGと、リードデータ信号RDATA1及びRDATA2と、制御信号CNTとをラッチし、ラッチしたプログラムカウンタ信号PCをプログラムカウンタ信号PC2として性能評価モジュール40に出力する。また、実行部13は、ラッチした制御信号CNTを性能評価モジュール40と命令フェッチ部11とメモリアクセス部14とに出力する。また、実行部13は、ラッチしたライトレジスタ信号WREGをメモリアクセス部14と性能評価モジュール40とに出力するとともに、ラッチしたリードデータ信号RDATA2をライト信号WRITEとしてメモリアクセス部14に出力する。さらに、実行部13は、レジスタリード部12から出力されるリードデータ信号RDATA1及びRDATA2の値を使用して、ラッチした制御信号CNTに従う演算を実行する。さらにまた、実行部13は、該演算の結果を結果信号RESULTとしてメモリアクセス部14と性能評価モジュール40とに出力する。
メモリアクセス部14は、メモリモジュール20に対する1次キャッシュの役割を有するデータキャッシュ(図4を参照)を有し、命令フェッチ部11でフェッチされた命令に従って、レジスタリード部12によって読み出された各種の値を用いて、データキャッシュに対する書き込み及び/又は読み出しを実行する。具体的には、メモリアクセス部14は、実行部13から出力される制御信号CNTと、結果信号RESLUTと、ライトレジスタWREGとをラッチし、該ラッチした3つの信号をライトバック部15に出力する。メモリアクセス部14は、ラッチした制御信号CNTに従って、ラッチした結果信号RESULTが示すデータキャッシュのアドレスに、ラッチしたライト信号WRITEが示す値を書き込むか、又は、結果信号RESULTが示すデータキャッシュのアドレスから値を読み出して、該読み出した値をリード信号READとしてライトバック部15に出力する。また、メモリアクセス部14は、データキャッシュの内容をメモリモジュール20に送信し、メモリモジュール20を更新する。
ライトバック部15は、命令フェッチ部11によってフェッチされた命令の実行結果(すなわち、実行部13による演算実行の結果、及びメモリアクセス部14によって読み出された値)をレジスタリード部12のレジスタファイルに書き込む。具体的には、ライトバック部15は、メモリアクセス部14から出力されるライトレジスタ信号WREGをラッチし、ライトバックレジスタ信号WBREGとして、レジスタリード部12に出力する。また、ライトバック部15はメモリアクセス部14から出力される制御信号CNTに従って、結果信号RESULT又はリード信号READのいずれかを選択し、該選択の結果をライトデータ信号WDATAとしてレジスタリード部12に出力する。
以上のように構成されるプロセッサモジュール10において、命令フェッチ部11は、メモリモジュール20から出力されるプログラムの実行アドレスに従う命令をフェッチし、次に、レジスタリード部12は、レジスタファイルから命令の実行に必要な値を読み出してこれを実行部13に渡し、実行部13は、命令に従う演算を実行する。また、命令フェッチ部11によりフェッチされた命令に従って、メモリアクセス部14は、データキャッシュに対する書き込み又は読み出しを実行する。また、ライトバック部15は、実行部13による演算結果又はメモリアクセス部14によるデータキャッシュの読み出し結果をレジスタリード部12のレジスタファイルに書き込む。このようにして、プロセッサモジュール10は、メモリモジュール20から出力されるプログラムを実行することができる。
図3は、図2に示したIII−III線で囲まれたプロセッサモジュールにおける各コンポーネントの構成の一例を示す図であって、具体的には、プロセッサモジュール10における命令フェッチ部11、レジスタリード部12及び実行部13の構成の詳細を示している。同図に示すように、命令フェッチ部11は、プログラムカウンタ111と、命令キャッシュ112とを含んで構成される。
プログラムカウンタ111は、命令の実行アドレスの値を保持し、所定のクロックに基づいて、保持した実行アドレスの値を出力する。プログラムカウンタ111の実行アドレスの値は、実行部13から出力される制御信号CNTが実行アドレスの値を示す場合、該制御信号CNTに従って更新され制御信号CNTが実行アドレスの値を示さない場合、単にカウントアップされる。また、プログラムカウンタ111は、実行アドレスの値をプログラムカウンタ信号PCとして、命令キャッシュ112と、レジスタリード部12とに出力する。
命令キャッシュ112は、メモリモジュール20に対する1次キャッシュの役割を有し、メモリモジュール20から出力されるプロセッサモジュール10で実行されるプログラムの命令と、該命令に対応する実行アドレスとを記憶する。また、命令キャッシュ112は、プログラムカウンタ111から出力されるプログラムカウンタ信号PCに基づいて、該信号に従う命令を読み出し、読み出した該命令に従うライトレジスタ信号WREGと、リードレジスタ信号RREG1及びRREG2と、制御信号CNTとを生成し、該生成した信号をレジスタリード部12に出力する。ライトレジスタ信号WREGは、命令の実行結果を記憶するレジスタファイルのアドレスを示し、リードレジスタ信号RREG1及びRREG2は、命令の実行にあたって値を読み出すレジスタファイルの値を示し、制御信号CNTは命令の内容を示す。
レジスタリード部12は、複数のレジスタ121(本例では、レジスタ121(1)乃至121(5))と、レジスタファイル122とを含んで構成される。レジスタ121(1)乃至121(5)のそれぞれは、命令フェッチ部11から出力されるライトレジスタ信号WREGと、リードレジスタ信号RREG1及びRREG2と、制御信号CNTと、プログラムカウンタ信号PCとをラッチする。また、レジスタ121(2)及び121(3)は、ラッチしたリードレジスタ信号RREG1及びRREG2をレジスタファイル122と性能評価モジュール40とにそれぞれ出力する。
レジスタファイル122は、上述したように、実行部13の実行に供される各種の値を記憶する。レジスタファイル122は、レジスタ121(2)及び121(3)から出力されるリードレジスタ信号RREG1及びRREG2が示すアドレスから値を読み出し、該読み出した値をそれぞれリードデータ信号RDATA1及びRDATA2として実行部13に出力する。また、レジスタファイル122は、ライトバック部15から出力されるライトバックレジスタ信号WBREGに従うアドレスに、ライトバック部15から出力されるライトデータ信号WDATAが示す値を書き込む。
実行部13は、レジスタ131(1)乃至131(5)と、演算部132とを含んで構成される。レジスタ131(1)乃至131(5)のそれぞれは、レジスタリード部12から出力されるライトレジスタ信号WREGと、リードデータ信号RDATA1及びRDATA2と、制御信号CNTと、プログラムカウンタPCとをラッチする。レジスタ131(2)乃至131(4)は、ラッチしたリードデータ信号RDATA1及びRDATA2と制御信号CNTとを演算部132に出力する。また、レジスタ131(3)は、ラッチしたリードデータ信号RDATA2をライト信号WRITEとして、メモリアクセス部14に出力する。また、レジスタ131(4)は、ラッチした制御信号CNTを命令フェッチ部11と、性能評価モジュール40と、メモリアクセス部14とに出力する。
演算部132は、例えばALU(Arithmetic Logic Unit)であり、命令を解釈、該解釈に従った演算処理を行う。演算部132はレジスタ131(2)及び131(3)から出力されるリードデータ信号RDATA1及びRDATA2が示す値を用いて、レジスタ131(4)から出力される制御信号CNTが示す命令に従う演算を実行する。演算部132は演算の結果を結果信号RESULTとして、該信号を性能評価モジュール40とメモリアクセス部14とに出力する。
図4は、図2に示したIV−IV線で囲まれたプロセッサモジュールの各コンポーネントの構成の一例を示す図であって、具体的には、プロセッサモジュール10におけるメモリアクセス部14及びライトバック部15の構成の詳細を示している。同図に示すように、本実施形態に係るメモリアクセス部14は、例えば、レジスタ141(1)乃至141(4)と、データキャッシュ142とを含んで構成される。
レジスタ141(1)乃至141(4)のそれぞれは、実行部13から出力されるライトレジスタ信号WREGと、結果信号RESULTと、ライト信号WRITEと、制御信号CNTとをラッチする。レジスタ141(2)及び141(3)は、ラッチした結果信号RESULT及びライト信号WRITEをデータキャッシュ142に出力する。また、レジスタ141(1)、141(2)及び141(4)は、ラッチしたライトレジスタ信号WREG、結果信号RESULT及び制御信号CNTをそれぞれライトバック部15に出力する。
データキャッシュ142は、上述したように、メモリモジュール20の1次キャッシュとしての役割を有し、メモリモジュール20に対するデータの書き込み又は読み出しの命令が発行された場合に、メモリモジュール20に代わってデータの書き込み又は読み出しに供される。データキャッシュ142は、レジスタ141(4)から出力される制御信号CNTがメモリモジュール20に対する読み出しの処理を示す場合、レジスタ141(2)から出力される結果信号RESULTに従うアドレスから値を読み出し、該読み出したデータをリード信号READとしてライトバック部15に出力する。また、データキャッシュ142は、レジスタ141(4)から出力される制御信号CNTがメモリモジュール20に対する書き込みの処理を示す場合、レジスタ141(2)から出力される結果信号RESULTが示すアドレスに、レジスタ141(3)から出力されるライト信号WRITEが示す値を書き込む。また、データキャッシュ142は、所定のアルゴリズムに従って、メモリモジュール20に記憶内容をメモリ信号MEMとして送信する。
ライトバック部15は、例えば、レジスタ151(1)乃至151(4)と、選択回路152とを含んで構成される。レジスタ151(1)乃至151(4)のそれぞれは、メモリアクセス部14から出力されるライトレジスタ信号WREGと、結果信号RESULTと、リード信号READと、制御信号CNTとをラッチする。また、レジスタ151(1)は、ラッチしたライトレジスタ信号WREGをライトバックレジスタ信号WBREGとして、該信号をレジスタリード部12に出力する。また、レジスタ151(2)及び151(3)は、ラッチした結果信号RESULT及びリード信号READを選択回路152に出力する。
選択回路152は、例えばマルチプレクサであるがこれに限られず、データセレクタや信号切替器などであっても良い。選択回路152は、レジスタ151(4)から出力される制御信号CNTに従って、レジスタ151(2)から出力される結果信号RESULT、又はレジスタ151(3)から出力されるリード信号READのいずれかを選択し、該選択の結果をライトデータ信号WDATAとして出力する。具体的には、制御信号CNTがメモリモジュール20に対するデータの書き込み及び読み出しの処理を示す場合、リード信号READを選択する一方で、制御信号CNTがメモリモジュール20に対するデータの書き込み及び読み出し以外の処理を示す場合、結果信号RESULTを選択し、該選択の結果をライトデータ信号WDATAとして、レジスタリード部12に出力する。
図5は、本発明の一実施形態に係る性能評価モジュールの構成の一例を示す図である。本実施形態に係る性能評価モジュール40は、例えば、プログラムカウンタ選択部(以下「PC選択部」という。)21と、プログラムカウンタ比較部(以下「PC比較部」という。)22と、カウント制御部23と、プログラムカウンタテーブル(以下「PCテーブル」という。)24とを含んで構成される。
PC選択部21は、プロセッサモジュール10から出力される各種の信号に従って、プロセッサモジュール10の命令フェッチ部11から出力されるプログラムカウンタ信号PC、又はプロセッサモジュール10の実行部13から出力されるプログラムカウンタ信号PC2のいずれかを選択し、該選択の結果をPC比較部22に出力する。PC選択部21は、例えば、比較器211(1)及び211(2)と、論理和回路212と、信号判断部213と、論理積回路214と、選択回路215とを含んで構成される。
比較器211は、入力される2つの信号を比較し、該比較の結果を論理和回路212に出力する。具体的には、比較器211(1)は、プロセッサモジュール10のレジスタリード部12から出力されるリードレジスタ信号RREG1とプロセッサモジュール10の実行部13から出力されるライトレジスタ信号WREGとを比較し、該2つの信号が示す値が一致している場合、例えば“1”を出力し、該2つの信号が示す値が一致していない場合、例えば“0”を出力する。また、比較器211(2)は、プロセッサモジュール10のレジスタリード部12から出力されるリードレジスタ信号RREG2と、プロセッサモジュール10の実行部13から出力されるライトレジスタ信号WREGとを比較し、該比較の結果を論理和回路212に出力する。
論理和回路212は、比較器211(1)及び211(2)の比較結果に対して論理和を行い、該論理和の結果を論理積回路214に出力する。
信号判断部213は、プロセッサモジュール10の実行部13から出力される制御信号CNTが示す命令の内容がメモリモジュール20に対する読み出しであるか否かを判断する。信号判断部213は、制御信号CNTが示す命令の内容がメモリモジュール20に対する読み出しであると判断する場合、“1”の状態を示す信号を論理積回路214に出力する一方で、制御信号CNTが示す命令の内容がメモリモジュール20に対する読み出しでないと判断する場合、“0”の状態を示す信号を論理積回路214に出力する。
論理積回路214は、信号判断部213から出力される判断の結果と論理和回路212から出力される論理和の結果とに対して論理積を行い、該論理積の結果を選択回路215の選択端子SLに出力する。
選択回路215は、例えばマルチプレクサであるがこれに限られず、データセレクタや信号切替器であっても良い。選択回路215は、論理積回路214から出力される論理積の結果に従って、プロセッサモジュール10の命令フェッチ部11から出力されるプログラムカウンタ信号PC又はプロセッサモジュール10の実行部13から出力されるプログラムカウンタ信号PC2のいずれかを選択し、該選択の結果をPC比較部22に出力する。選択回路215は、論理積回路214の論理積の結果が“1”である場合、プログラムカウンタ信号PC2を選択する一方で、論理積回路214の論理積の結果が“0”である場合、プログラムカウンタ信号PCを選択する。
以上のように構成されるPC選択部21は、実行部13から出力される制御信号CNTがメモリモジュール20に対する読み出しを示し、かつ、プロセッサモジュール10のレジスタリード部12から出力されるリードレジスタ信号RREG1又はRREG2とプロセッサモジュール10の実行部13から出力されるライトレジスタ信号WREGとが一致する場合に、実行部13から出力されるプログラムカウンタ信号PC2を選択し、出力する。一方、PC選択部21は、制御信号CNTがメモリモジュール20に対する読み出しを示さないか、又は、リードレジスタ信号RREG1又はRREG2とライトレジスタ信号WREGとが一致しない場合、命令フェッチ部11から出力されるプログラムカウンタ信号PCを選択し、出力する。
これにより、PC選択部21は、メモリモジュール20に対する読み出し命令を行った直後に、該読み出しの結果を参照する命令が発行された場合には、命令フェッチ部11のプログラムカウンタ111に保持されている値ではなく、実行部13のレジスタ131(5)に保持されている値を選択する。よって、PC選択部21は、メモリモジュール20に対する読み出し命令を行った直後に、該読み出しの結果を参照する命令が発行された場合に発生し得るデータハザードに対しても、正しく個々の命令の実行数をカウントすることができるようにプログラムカウンタ信号を選択することができる。
PCテーブル24は、プログラム中の特定の実行アドレスを記憶する。特定の実行アドレスは、例えば、開発者等が命令の種類や特性に基づいて判断することにより決定される。PCテーブル24に記憶された所定の実行アドレスは、PC比較部22に出力される。なお、PCテーブル24は、典型的には、所定の実行アドレスの値を複数記憶し、PC比較部22の比較器221(1)乃至221(n)にそれぞれ異なる実行アドレスの値を示す信号を出力する。なお、本例では、PCテーブル24は、性能評価モジュ−ル40の一部として設けられているがこれに限られるものでなく、PCテーブル24は、メモリモジュール20に記憶されるものであっても良い。
PC比較部22は、PC選択部21によって選択されたプログラムカウンタ信号が示す値と、PCテーブル24に記憶された特定の実行アドレスの値とを比較し、該比較の結果を一致信号ACCORDとしてカウント制御部23に出力する。PC比較部22は、例えば、比較器221(1)乃至221(n)と、論理和回路222とを含んで構成される。
比較器221(1)乃至221(n)は、PC選択部21から出力されるプログラムカウンタ信号の値とPCテーブル24から出力される実行アドレスの値とを比較し、該比較の結果を論理和回路222に出力する。比較器221(1)乃至221(n)は、プログラムカウンタ信号の値と実行アドレスの値とが一致すると判断する場合、“1”の状態を示す信号を出力する一方で、プログラムカウンタ信号の値と実行アドレスの値とが一致しないと判断する場合、“0”の状態を示す信号を出力する。
論理和回路222は、比較器221(1)乃至221(n)から出力される比較の結果に対して論理和を行い、該論理和の結果を一致信号ACCORDとしてカウント制御部23に出力する。
カウント制御部23は、PC比較部22から出力される一致信号ACCORDをラッチして、カウンタ235に出力する。また、カウント制御部23は、プロセッサモジュール10の実行部13から出力される結果信号RESULTの状態に従って、カウンタ235に出力する信号の状態を制御する。カウント制御部23は、例えば、信号判断部231と、選択回路232(1)及び232(2)と、順序回路233(1)及び233(2)と論理積回路234とを含んで構成される。
信号判断部231は、プロセッサモジュール10の実行部13から出力される結果信号RESULTが示す内容が“分岐条件成立”であるか否かを判断する。信号判断部231は、結果信号RESULTが示す内容が“分岐条件成立”である場合、例えば“1”の状態を示す信号を選択回路232(1)及び232(2)の選択端子SLと論理積回路234とに出力する。これに対して、結果信号RESULTが示す内容が“分岐条件不成立”である場合、信号判断部231は、例えば“0”の状態を示す信号を選択回路232(1)及び232(2)の選択端子SLと論理積回路234とに出力する。
選択回路232は、例えばマルチプレクサであるがこれに限られず、データセレクタや信号切替器であっても良い。選択回路232は、選択端子SLに入力される信号に従って、入力端子A0又はA1に入力される信号のいずれかを選択し出力端子Yから出力する。具体的には、選択回路232(1)は、信号判断部231から出力される信号が例えば“0”を示す場合、PC比較部22から出力される一致信号ACCORDを選択する。また、信号判断部231から出力される信号が例えば“1”を示す場合、選択回路232(1)は、論理積回路234から出力される信号を選択し、該選択の結果を順序回路233(1)のデータ入力端子Dに出力する。また、選択回路232(2)は、信号判断部231から出力される信号が例えば“0”を示す場合、順序回路233(1)から出力される信号を選択する。また、信号判断部231から出力される信号が例えば“1”を示す場合、選択回路232(2)は、論理積回路234から出力される信号を選択し、該選択の結果を順序回路233(2)のデータ入力端子Dに出力する。
順序回路233は、例えば、D型フリップフロップであるがこれに限られない。順序回路233は、クロック端子CKに入力されるクロックに基づいて、データ入力端子Dに入力される信号をデータ出力端子Qから出力する。具体的には、順序回路233(1)は、所定のクロックCLKに基づいて、選択回路232(1)から出力される信号を選択回路232(2)の入力端子A1に出力する。また、順序回路233(2)は、所定のクロックCLKに基づいて、選択回路232(2)から出力される信号を論理積回路234とカウンタ235とに出力する。
論理積回路234は、信号判断部231から出力される信号と順序回路233(2)から出力される信号とに対して論理積を行い、該論理積の結果を選択回路232(1)の入力端子A0及び選択回路232(2)の入力端子A0に出力する。
カウンタ235は、順序回路233(2)から出力される信号を受信する。カウンタ235は、順序回路233(2)から出力される信号が例えば“1”を示す場合、カウントを行ってカウント値を更新する。カウンタ235は、該カウントの結果をカウント信号COUNTとしてチップセット30を介してメモリモジュール20に出力する。
以上のように構成されるカウント制御部23は、実行部13から出力される結果信号RESULTが“分岐条件不成立”を示す場合、PC比較部22から出力される一致信号ACCORDを順序回路233(1)及び233(2)によってラッチし、該ラッチした結果をカウンタ235に出力する。これに対して、カウント制御部23は、結果信号RESULTが“分岐条件成立”を示す場合、順序回路233(1)及び233(2)の状態を順序回路233(2)の出力の状態に設定し、該順序回路の状態に基づいてカウンタ235によってカウントを行う。
これにより、カウント制御部23は、結果信号RESULTが“分岐命令成立”を示す場合、順序回路233(1)及び233(2)の入力を順序回路233(2)の出力に設定するので、分岐命令が発行されてから2回分の命令のカウント値を、分岐条件が成立しなかった場合のそれぞれの命令のカウント値ではなく、該分岐命令のカウント値とする。よって、カウント制御部23は、分岐条件が成立した場合に発生する制御ハザードに対しても、正しく個々の命令の実行数をカウントすることができるように、カウント値を制御することができる。
以上のように構成される性能評価モジュール40は、PC選択部21によって選択されたプログラムカウンタ信号に対して、PC比較部22によって所定の実行アドレスと一致するか否かを判断し、該判断の結果をカウント制御部23によってラッチし、該ラッチした信号に対して分岐条件が成立する場合の制御を行った後に、カウンタ235によってカウントを行う。これにより、性能評価モジュール40は、プロセッサモジュール10で行われる命令のうち所定の実行アドレスに対応する個々の命令の実行数をカウントすることができる。
なお、本例では、性能評価モジュール40は、1つのPCテーブル24を含むが、これに限られるものではない。性能評価モジュール40は、複数のPCテーブル24を含み、性能評価モジュール40が実行される度に、該複数のPCテーブル24のうちから1つのPCテーブル24を選択し、該選択したPCテーブル24に記憶された所定のアドレスとPC選択部21によって選択されたプログラムカウンタが示す値とを比較しても良い。
また、本例では、性能評価モジュール40は、PC選択部21、PC比較部22及びカウント制御部23をそれぞれ1つずつ含むが、これに限られるものではない。性能評価モジュール40は、PC選択部21、PC比較部22及びカウント制御部23をそれぞれ複数含んでも良い。かかる性能評価モジュール40は、各PC比較部22のPCテーブル24でそれぞれ異なる命令の実行アドレスを記憶することによって、一度の処理で、それぞれ異なる命令の実行数を個別にカウントすることができる。
図6は、本発明の一実施形態に係る性能評価モジュールの動作の一例を示すフローチャートである。同図において、性能評価モジュール40は、まず、プロセッサモジュール10から各種の信号を受信する。具体的には、性能評価モジュール40は、プロセッサモジュール10の命令フェッチ部11からプログラムカウンタ信号PCと、レジスタリード部12からリードレジスタ信号RREG1及びRREG2と、実行部13からプログラムカウンタ信号PC2、ライトレジスタ信号WREG、及び制御信号CNTとを受信する(S601)。性能評価モジュール40は、受信したリードレジスタ信号RREG1及びRREG2とライトレジスタ信号WREGとを比較する(S602)。
次に、性能評価モジュール40は、制御信号CNTがメモリモジュール20に対する読み出し命令を示し、かつ、リードレジスタ信号RREG1又はRREG2とライトレジスタ信号WREGとが一致するか否かを判断する(S603)。性能評価モジュール40は、制御信号CNTがメモリモジュール20に対する読み出し命令を示し、かつ、リードレジスタ信号RREG1又はRREG2とライトレジスタ信号WREGとが一致すると判断する場合(S603のYes)、実行部13から出力されるプログラムカウンタ信号PC2を選択する(S604)。これに対して、性能評価モジュール40は、制御信号CNTがメモリモジュール20に対する読み出し命令を示さないか、又は、リードレジスタ信号RREG1又はRREG2とライトレジスタ信号WREGとが一致しないと判断する場合(S603のNo)、命令フェッチ部11から出力されるプログラムカウンタ信号PCを選択する(S605)。
性能評価モジュール40は、続いて、選択したプログラムカウンタ信号に従って、命令の実行数をカウントする(S606)。なお、ステップS606の処理の詳細に関しては、図7を参照して説明される。
図7は、本発明の一実施形態に係る性能評価モジュールの動作の一例を示すフローチャートであり、図6のステップS606の処理の詳細を示している。同図に示すように、まず、性能評価モジュール40は、図6のステップS604又はS605の処理で選択したプログラムカウンタ信号の値と、PCテーブル24に記憶された値とを比較する(S701)。
次に、性能評価モジュール40は、プロセッサモジュール10の実行部13から出力される結果信号RESULTが“分岐条件命令成立”を示すか否かを判断する(S702)。性能評価モジュール40は、結果信号RESULTが“分岐条件成立”を示す場合(S702のYes)、順序回路233(1)及び233(2)の入力を順序回路233(2)の出力に設定する(S703)。一方、性能評価モジュール40は、結果信号RESULTが“分岐条件成立”を示さない場合(S702のNo)、順序回路233(1)の入力をステップS701の処理における比較結果に、順序回路233(2)の入力を順序回路233(1)の出力にそれぞれ設定する(S704)。
性能評価モジュール40は、次に、順序回路233(2)の出力が“1”であるか否かを判断する(S705)。性能評価モジュール40は、順序回路233(2)の出力が“1”である場合(S705のYes)、カウンタ235をカウントアップさせ(S706)、ステップS707の処理に進む。これに対して、性能評価モジュール40は、順序回路233(2)の出力が“1”でない場合(S705のNo)、ステップS707の処理に進む。
性能評価モジュール40は、順序回路233(1)及び233(2)の出力を自身の入力にそれぞれ更新し(S707)、処理を終了する。
上述したように、性能評価モジュール40は、命令フェッチ部11から出力されるプログラムカウンタの値をPCテーブル24に記憶された値と比較して、該比較の結果に従ってカウントを行うため、PCテーブル24に記憶された実行アドレスに対応する命令の実行数をカウントすることができる。また、性能評価モジュール40は、分岐条件が成立すると判断される場合、順序回路233(1)及び233(2)の入力を順序回路233(2)の出力(すなわち、分岐命令のプログラムカウンタの値)に設定するため、分岐命令によって制御ハザードが発生する場合でも、正しく命令の実行数をカウントすることができる。また、性能評価モジュール40は、メモリモジュール20に対する読み出し命令の直後に、該読み出し命令の結果を参照する命令が発行された場合、実行部13から出力されるプログラムカウンタの値を用いるため、該読み出し命令の結果を直後に参照することによって発生するデータハザードに対しても、正しく命令の実行数をカウントすることができる。
次に、性能評価モジュール40が異なる命令ごとに実行数をカウントする例を図8乃至図10を参照しつつ説明する。ここでは、性能評価モジュール40は、特定の1以上の命令ごとに割り当てられた識別子(ID)に従って識別される命令グループごとに実行数をカウントする。したがって、異なるIDごとにその命令の実行アドレスの値を記憶するPCテーブル24が用意され、性能評価モジュール40は、複数のPCテーブル24のそれぞれに対応した、PC選択部21、PC比較部22、及びカウント制御部23からなる構成を複数含む。
図8は、本発明の一実施形態に係る半導体集積回路のプロセッサモジュールによるパイプライン処理における性能評価モジュールのカウントの動作を説明するための概念図である。同図において、プロセッサモジュール10が所定の動作クロックに従い動作するタイミングをt801乃至t809として示している。すなわち、同図は、ある一連の命令(命令1乃至命令5)のそれぞれが、ある時刻tにおいて、プロセッサモジュール10のどのコンポーネントによって処理されているかを示している。ここで、“IF”、“RR”、“EX”、“MA”及び“WB”は、それぞれ、命令フェッチ部11、レジスタリード部12、実行部13、メモリアクセス部14、及びライトバック部15を指す。また、命令1、命令3及び命令5にはID#0が割り当てられ、命令2及び命令4にはID#1が割り当てられている。本例では、第1のPCテーブル24aには、ID#0が割り当てられた命令の実行アドレスが記憶され、第2のPCテーブル24bには、ID#1が割り当てられた命令の実行アドレスが記憶され、第3のPCテーブル24cにはID#0及びID#1が割り当てられた命令の実行アドレスが記憶されているものとする。
時刻t801で、プロセッサモジュール10の命令フェッチ部11は、メモリモジュール20から命令1をフェッチし、命令1に対するプログラムカウンタの値を性能評価モジュール40に出力する。性能評価モジュール40は、上述したように、2クロック分にわたってラッチしたプログラムカウンタの値と、PCテーブル24に記憶された所定の実行アドレスの値とを比較し、これらが一致していると判断する場合に、対応する命令の実行数をカウントアップするが、命令1に対するプログラムカウンタの値は、まだ2クロック分ラッチされていないため、性能評価モジュール40は、カウントアップを行わない。したがって、ID#0及びID#1に対応する命令の実行数は、0のままである。
時刻t802では、命令フェッチ部11は、命令2をフェッチし、命令2に対するプログラムカウンタの値を性能評価モジュール40に出力する。また、プロセッサモジュール10は、レジスタリード部12によって命令1を処理する。命令1及び命令2に対するプログラムカウンタの値は、まだ2クロック分ラッチされていないため、性能評価モジュール40は、ID#0及びID#1に対応する命令の実行数をカウントアップせず、したがって、その実行数及び全体の命令の実行数は0のままである。
時刻t803で、命令フェッチ部11は、命令3をフェッチし、命令3に対するプログラムカウンタの値を性能評価モジュール40に出力する。また、レジスタリード部12は、命令2を処理する一方、実行部13は、命令1を処理する。時刻t803で命令1に対するプログラムカウンタの値が2クロック分ラッチされるため、性能評価モジュール40は、ID#0に対応する命令の実行数を1つカウントアップし、1とする。一方、命令2に対するプログラムカウンタの値は、まだ2クロック分ラッチされていないため、ID#1に対応する命令の実行数は、0のままである。時刻t803で、全体の命令の実行数は、ID#0及びID#1に対応する命令の実行数の合計であるため、1となる。
時刻t804で、命令フェッチ部11は、命令4をフェッチし、命令4に対するプログラムカウンタの値を性能評価モジュール40に出力する。また、レジスタリード部12は、命令3を処理し、実行部13は、命令2を処理し、メモリアクセス部14は、命令1を処理する。時刻t804で、命令2に対するプログラムカウンタの値が2クロック分ラッチされるため、性能評価モジュール40は、ID#1に対応する命令の実行数を1つカウントアップし、1とする。時刻t804で、全体の命令の実行数は、2となる。
時刻t805で、命令フェッチ部11は、命令5をフェッチし、命令5を示すプログラムカウンタの値を性能評価モジュール40に出力する。また、レジスタリード部12、実行部13、メモリアクセス部14、及びライトバック部15は、それぞれ、命令4、命令3、命令2、及び命令1を処理する。時刻t804で、命令3に対するプログラムカウンタの値が2クロック分ラッチされているため、性能評価モジュール40は、ID#0に対応する命令の実行数を1つカウントアップし、2とする。時刻t805で、全体の命令の実行数は、3となる。
時刻t806以降においても、プロセッサモジュール10の各コンポーネントは、上述したように、一連の命令をパイプライン処理する。性能評価モジュール40は、プロセッサモジュール10から受信するプログラムカウンタの値を2クロック分ラッチしたプログラムカウンタの値について、該プログラムカウンタの値がPCテーブル24に記憶された所定の実行アドレスの値と一致する場合、該プログラムカウンタに1つカウントアップする。
上述したように、プロセッサモジュール10の各コンポーネントは、一連の命令を順次にパイプライン処理する一方で、性能評価モジュール40が、命令フェッチ部11から送られるプログラムカウンタの値を2クロック分ラッチしながら、プログラムカウンタの値がPCテーブル24に記憶された所定の実行アドレスの値と一致している場合に、カウントを行う。これにより、性能評価モジュール40は、クロックサイクルベースで、特定の命令の実行数をカウントすることができる。
次に、一連の命令に分岐命令が含まれている場合の、性能評価モジュール40による実行数のカウントについて説明する。図9は、本発明の一実施形態に係る半導体集積回路のプロセッサモジュールによるパイプライン処理における性能評価モジュールのカウントの動作を説明するための概念図である。同図において、プロセッサモジュール10が所定の動作クロックに従い動作するタイミングをt901乃至t909として示している。本例では、命令1及び命令4にはID#0が割り当てられ、命令2、命令3及び命令5にはID#1が割り当てられている。また、第1のPCテーブル24aには、ID#0が割り当てられた命令の実行アドレスが記憶され、第2のPCテーブル24bには、ID#1が割り当てられた命令の実行アドレスが記憶され、第3のPCテーブル24cには、ID#0及びID#1に割り当てられた命令の実行アドレスが記憶されているものとする。また、命令1は、分岐条件が成立する場合に、命令4に分岐する一方で、分岐条件が成立しない場合に命令2に続く命令であるものとする。
時刻t901で、命令フェッチ部11は、同様に、命令1をフェッチし、命令1に対するプログラムカウンタの値を性能評価モジュール40に出力する。命令1に対するプログラムカウンタの値は、まだ2クロック分ラッチされていないため、性能評価モジュール40は、カウントアップを行わない。したがって、ID#0及びID#1に対応する命令と全体の命令の実行数は、0のままである。なお、命令1は、実行部13によって処理が行われるまで分岐条件が成立するか否かは不明である。プロセッサモジュール10の各コンポーネントは、命令1の分岐条件が成立するか否かが判明するまで、上述したような、命令に対する所与の処理を遂行する。
時刻t902で、命令フェッチ部11は、命令2をフェッチし、命令2に対するプログラムカウンタの値を性能評価モジュール40に出力する。また、レジスタリード部12は、命令1を処理する。時刻t902で、命令1に対するプログラムカウンタの値は、まだ2クロック分ラッチされていないため、ID#0及びID#1に対応する命令の実行数と全体の命令の実行数は、0のままである。
時刻t903で、命令フェッチ部11は、命令3をフェッチし、命令3に対するプログラムカウンタの値を性能評価モジュール40に出力する。また、実行部13は、命令1を処理する。本例では、実行部13は、処理の結果、分岐条件が成立すると判断し、“分岐条件成立”を示す制御信号CNTを性能評価モジュール40に出力する。性能評価モジュール40は、制御信号CNTに従って、ラッチしている2クロック分の(すなわち、命令1及び命令2に対する)プログラムカウンタの値の全てを命令1に対するプログラムカウンタの値に変更する。性能評価モジュール40は、命令1に対するプログラムカウンタの値をカウントするため、ID#0に対応する命令の実行数を、1とする。一方、命令2に対するプログラムカウンタの値は、命令1に対するプログラムカウンタの値に変更されたためカウントされず、ID#1に対応する命令の実行数は、0のままである。時刻t903で、全体の命令の実行数は1となる。
時刻t904で、命令フェッチ部11は、命令4をフェッチし、命令4に対するプログラムカウンタの値を性能評価モジュール40に出力する。また、メモリアクセス部14は、命令1を処理するが、実行部13において分岐条件が成立したため、レジスタリード部12による命令3に対する処理及び実行部13による命令2に対する処理は中止される。時刻t904で、命令1に対するプログラムカウンタの値が2回ラッチされるため、性能評価モジュール40は、ID#0に対応する命令の実行数をカウントアップし、2とする。時刻t904で、全体の命令の実行数は2となる。
時刻t905で、命令フェッチ部11は、命令5をフェッチし、命令5に対するプログラムカウンタの値を性能評価モジュール40に出力する。また、レジスタリード部12は、命令4を処理するとともに、ライトバック部15は、命令1を処理する。命令1に対するプログラムカウンタの値が2回ラッチされるため、性能評価モジュール40は、ID#0に対応する命令の実行数をカウントアップし、3とする。一方、時刻t905で、命令5に対するプログラムカウンタの値は2回ラッチされていないため、ID#1に対応する命令の実行数は、0のままである。時刻t905で、全体の命令の実行数は3となる。
時刻t906で、レジスタリード部12は、命令5を処理し、また、実行部13によって命令4を処理する。命令4に対するプログラムカウンタの値が2回ラッチされるため、性能評価モジュール40は、ID#0に対応する命令の実行数をカウントアップし、4とする。一方、時刻t906で、命令5に対するプログラムカウンタの値は2回ラッチされていないため、ID#1に対応する命令の実行数は、0のままである。時刻t905で、全体の命令の実行数は4となる。
時刻t907で、実行部13は、命令5を処理し、また、メモリアクセス部14は、命令4を処理する。時刻t907で、命令5に対するプログラムカウンタの値は2回ラッチされるため、性能評価モジュール40は、ID#1に対応する命令の実行数をカウントアップし、1とする。時刻t907で、全体の命令の実行数は5となる。
上述したように、プロセッサモジュール10の各コンポーネントは、一連の命令に分岐命令が含まれる場合に、分岐条件が成立するか否かが判明するまで、命令に対する所与の処理を進めるが、分岐条件が成立すると判断されるとこれまでの処理を中止して、分岐条件が成立したことを示す制御信号CNTを性能評価モジュール40に出力する。性能評価モジュール40は、制御信号CNTに従って、2クロック分ラッチしているプログラムカウンタの値を分岐命令に対応するプログラムカウンタの値に変更する。これにより、性能評価モジュール40は、分岐命令の実行により発生する制御ハザードによる遅延を分岐命令による遅延としてカウントするため、個々の命令の実行数をクロックサイクルベースで正しくカウントすることができる。
図10は、本発明の一実施形態に係る半導体集積回路のプロセッサモジュールによるパイプライン処理における性能評価モジュールのカウントの動作を説明するための概念図である。同図において、プロセッサモジュール10の各構成要素が各命令を処理する時刻を時刻t1001乃至t1008とする。また、同図において、命令1乃至命令3にはID#0が割り振られ、命令4にはID#1が割り振られる。第1のPCテーブル24aには、ID#0が割り当てられた命令の実行アドレスが記憶され、第2のPCテーブル24bには、ID#1が割り当てられた命令の実行アドレスが記憶され、第3のPCテーブル24cには、ID#0及びID#1が割り当てられた命令の実行アドレスが記憶されているものとする。
時刻t1001で、プロセッサモジュール10は、メモリモジュール20から命令1を受信し、命令フェッチ部11によって命令1を処理する。また命令フェッチ部11は、命令1を示すプログラムカウンタの値を性能評価モジュール40に出力する。命令1に対するプログラムカウンタの値は、まだ2クロック分ラッチされていないため、性能評価モジュール40は、カウントアップを行わない。したがって、ID#0及びID#1に対応する命令と全体の命令の実行数は、0のままである。
時刻t1002で、プロセッサモジュール10は、メモリモジュール20からメモリモジュール20に対する読み出しを示す命令2を受信し、命令フェッチ部11によって命令2を処理する。また、命令フェッチ部11は、命令2を示すプログラムカウンタの値を性能評価モジュール40に出力する。また、プロセッサモジュール10は、レジスタリード部12によって、命令1を処理する。時刻t1002で、命令1に対するプログラムカウンタの値は2回分ラッチされていないため、ID#0に対応する命令の実行数はまだ0である。時刻t1002で、全体の命令の実行数は、0のままである。
時刻t1003で、プロセッサモジュール10は、メモリモジュール20から命令2の結果を参照する命令3を受信し、命令フェッチ部11によって命令3を処理する。また、命令フェッチ部11は、命令3を示すプログラムカウンタの値を性能評価モジュール40に出力する。また、プロセッサモジュール10は、レジスタリード部12によって命令2を処理するとともに、実行部13によって命令1を処理する。時刻t1003で、命令1のプログラムカウンタの値が2回分ラッチされるため、性能評価モジュール40は、ID#0に対応する命令の実行数をカウントアップし、1とする。時刻t1003で、全体の命令の実行数は1となる。
時刻t1004で、プロセッサモジュール10は、メモリモジュール20から命令4を受信し、命令フェッチ部11によって命令4を処理する。プロセッサモジュール10は、実行部13によって命令2を処理するとともに、メモリアクセス部14によって命令1を処理する。また、プロセッサモジュール10は、命令3が命令2の結果を参照する命令であること、命令2がメモリモジュール20に対する読み出し命令であること、及び命令2がメモリアクセス14による処理ステージに至っていないこととから、レジスタリード部12による命令3の処理を行わずに待機させる。
時刻t1004で、性能評価モジュール40は、レジスタリード部12のリードレジスタ信号RREG1又はRREG2と、実行部13のライトレジスタ信号WREGが一致して、かつ、実行部13の制御信号CNTがメモリモジュール20に対する読み出し命令であると判断する。性能評価モジュール40は、該判断の結果に従って、実行部13の命令2のプログラムカウンタの値をラッチする。時刻t1004で、命令2のプログラムカウンタの値が2回ラッチされるため、性能評価モジュール40は、ID#0に対応する命令の実行数をカウントアップし、2とする。時刻t1004で、全体の命令の実行数は2となる。
時刻t1005で、プロセッサモジュール10は、レジスタリード部12による命令3の処理が終わっていないことから、再び命令フェッチ部11によって命令4を処理する。また、命令フェッチ部11は、命令4を示すプログラムカウンタの値を性能評価モジュール40に出力する。プロセッサモジュール10は、レジスタリード部12によって命令3を処理するとともに、メモリアクセス部14によって命令2を処理し、ライトバック部15によって命令1を処理する。時刻t1005で、命令3のプログラムカウンタの値が2回ラッチされるため、性能評価モジュール40は、ID#0に対応する命令の実行数をカウントアップし、3とする。時刻t1005で、全体の命令の実行数は3となる。
時刻t1006で、プロセッサモジュール10は、レジスタリード部12によって命令4を処理するとともに、実行部13によって命令3を処理し、ライトバック部15によって命令2を処理する。時刻t1006で、命令3のプログラムカウンタの値が2回ラッチされるため、性能評価モジュール40は、ID#0に対応する命令の実行数をカウントアップし4とする。時刻t1006で、全体の命令の実行数は4となる。
時刻t1007で、プロセッサモジュール10は、実行部13によって命令4を処理するとともに、メモリアクセス部14によって命令3を処理する。時刻t1007で命令4のプログラムカウンタの値が2回ラッチされるため、性能評価モジュール40は、ID#1に対応する命令の実行数をカウントアップし、1とする。時刻t1007で、全体の命令の実行数は5となる。
上述したように、プロセッサモジュール10は、メモリモジュール20に対する読み出し命令を行った直後に、該命令の結果を参照する命令を受信した場合、命令の結果を参照する命令をレジスタリード部12のステージで1ステージ分待機させる。また、性能評価モジュール40は、メモリモジュール20に対する読み出し命令を行った直後に、該命令の結果を参照する命令が発せられた場合、実行部13のプログラムカウンタの値をラッチするため、待機による遅延時間をメモリモジュール20に対する読み出し命令のプログラムカウンタの値としてカウントする。
これにより、性能評価モジュール40は、メモリモジュール20に対する読み出し命令を行った直後に、該読み出しの結果を参照する命令が発せられた場合に発生するデータハザードに対しても、正しく個々の命令の実行数をカウントすることができる。なお、本実施形態では、読み出し命令を例にして説明したが、例えば、書き込み命令についても同様に適用することができる。
図11は、本発明の一実施形態に係る半導体集積回路の概略構成の他の例を示す図である。同図に示すように、本実施形態に係る半導体集積回路1’は、複数の性能評価モジュール40(1)乃至40(m)を含んで構成される。
性能評価モジュール40(1)乃至40(m)の回路構成自体は同じであるが、それぞれのPCテーブル24に記憶される内容(すなわち、実行アドレスの値)が異なっている。つまり、各PCテーブル24には、それぞれ異なるIDが割り当てられた命令の実行アドレスの値が記憶される。性能評価モジュール40(1)乃至40(m)は、それぞれのカウントの結果をカウント信号COUNT(1)乃至COUNT(m)としてチップセット30を介してメモリモジュール20に出力する。これにより、半導体集積回路1’は、一度のプログラムの実行で、性能評価モジュール40の数に応じた異なる命令の実行数をカウントすることができる。
上記各実施形態は、本発明を説明するための例示であり、本発明をこれらの実施形態にのみ限定する趣旨ではない。本発明は、その要旨を逸脱しない限り、さまざまな形態で実施することができる。
例えば、本明細書に開示される方法においては、その結果に矛盾が生じない限り、ステップ、動作又は機能を並行して又は異なる順に実施しても良い。説明されたステップ、動作及び機能は、単なる例として提供されており、ステップ、動作及び機能のうちのいくつかは、発明の要旨を逸脱しない範囲で、省略でき、また、互いに結合させることで一つのものとしてもよく、また、他のステップ、動作又は機能を追加してもよい。
また、本明細書では、さまざまな実施形態が開示されているが、一の実施形態における特定のフィーチャ(技術的事項)を適宜改良しながら、他の実施形態に追加し、又は該他の実施形態における特定のフィーチャと置換することができ、そのような形態も本発明の要旨に含まれる。