(57)【要約】【課題】従来の半導体装置では、ライブロック状態が継続する時間のワーストケースを補償することが出来ない問題がある。【解決手段】一実施の形態によれば、半導体装置、データ処理装置及びこれらのデータ処理方法は、複数の演算部の一の演算部が処理対象データのコヒーレンシを維持しながら処理対象データに対する他の演算部の処理の影響を排除するロック取得処理を行う場合に、一の演算部は所定のウェイト期間の間、処理対象データに対するロック状態を解除した後の次命令の実行を待ち状態とする。【選択図】図１
2014067072.tif 000002
【特許請求の範囲】
【請求項１】
各々が、共有リソースに格納された処理対象データに対して操作を行う第１の演算部及び第２の演算部と、を有し、
前記第１の演算部は、
前記処理対象データを前記第２の演算部による前記処理対象データに対する操作を禁止するロック状態とした状態で前記処理対象データに対する操作を実行し、操作後に前記ロック状態を解除し、
前記第１の演算部は、所定のウェイト期間の間は前記ロック状態の解除後の次命令に基づく処理を待ち状態とする半導体装置。
【請求項２】
前記ウェイト期間は、少なくとも、前記処理対象データに対する操作を実施する演算部の数と、前記第１の演算部に供給される第１のクロック信号のクロックパルスのうち前記第１の演算部が前記ロック状態の取得に要したクロックパルスの数と、前記第１のクロック信号と前記第２の演算部に供給される第２のクロック信号との周波数比と、を含む計算式により算出される請求項１に記載の半導体装置。
【請求項３】
前記第１の演算部は、前記第１のクロック信号のクロックパルスが入力される毎に前記演算部の数と前記周波数比との乗算値の２倍の大きさを有する単位加算値を積算した積算値に１を加えて、前記ウェイト期間に対応するウェイトカウント値を生成する第１のカウンタを有し、前記第１のカウンタは、前記第１の演算部が前記ロック状態の取得処理の開始から前記ロック状態の取得が完了するまでの間、前記ウェイトカウント値を増加させる請求項２に記載の半導体装置。
【請求項４】
前記第１のクロック信号のクロックパルスの数が前記ウェイトカウント値に達するまで前記第１のクロック信号のクロックパルスを計数する第２のカウンタを有し、
前記第１の演算部は、前記第２のカウンタにより生成されるカウント値がゼロに達するまで前記次命令に基づく処理を待ち状態とする請求項３に記載の半導体装置。
【請求項５】
前記第２の演算部は、さらに複数の演算部を含み、
前記周波数比は、前記第２の演算部に含まれる複数の演算部に供給される複数の前記第２のクロック信号のうち前記第１のクロック信号の周波数との差が最も大きなクロック信号の周波数と、前記第１のクロック信号の周波数と、に基づき算出される請求項２に記載の半導体装置。
【請求項６】
前記第１の演算部及び前記第２の演算部は、それぞれ前記処理対象データのコピーをキャッシュデータとして格納するキャッシュメモリを有し、前記キャッシュデータに対して操作を行った後に操作後の前記キャッシュデータにより前記処理対象データを上書きし、
前記半導体装置は、前記第１の演算部による自演算部内の前記キャッシュデータに対する操作に応じて、前記第１の演算部が操作の対象とする前記処理対象データと同一の前記処理対象データから生成した前記第２の演算部内の前記キャッシュデータを無効とするインバリデーション処理を行うスヌープコントローラを有する請求項１に記載の半導体装置。
【請求項７】
それぞれが処理対象データに対して操作を行う複数の演算部と、
前記処理対象データとプログラムとを前記複数の演算部からの求めに応じて前記複数の演算部に送信する共有リソースと、を有し、
前記プログラムは、前記処理対象データの状態を一の演算部以外の他の演算部による前記処理対象データに対する操作を禁止するロック状態とする第１の命令コードと、前記処理対象データに対する前記ロック状態を解除する第２の命令コードと、前記一の演算部をウェイト期間の間、次命令に基づく処理を待ち状態とする第３の命令コードと、を含む命令セットにより構成され、
前記複数の演算部は、前記プログラムに基づき前記処理対象データに対する操作を行う情報処理装置。
【請求項８】
前記プログラムは、前記共有リソースに含まれるメモリインタフェース回路を介して前記複数の演算部を含む回路が形成される第１の半導体基板とは別に設けられる第２の半導体基板上に形成されたメモリに格納される請求項７に記載の情報処理装置。
【請求項９】
前記ウェイト期間は、少なくとも、前記処理対象データに対する操作を実施する演算部の数と、前記第１の命令コードの実行開始から前記第１の命令コードの実行完了までに要した前記一の演算部に供給される第１のクロック信号のクロックパルスの数と、前記第１のクロック信号と前記他の演算部に供給される第２のクロック信号との周波数比と、を含む計算式により算出される請求項７に記載の情報処理装置。
【請求項１０】
前記一の演算部は、前記第１のクロック信号のクロックパルスが入力される毎に前記演算部の数と前記周波数比との乗算値の２倍の大きさを有する単位加算値を積算した積算値に１を加えて、前記ウェイト期間に対応するウェイトカウント値を生成する第１のカウンタを有し、前記第１のカウンタは、前記一の演算部の前記第１の命令コードの実行開始から前記第１の命令コードの実行完了までの期間、前記ウェイトカウント値を増加させる請求項９に記載の情報処理装置。
【請求項１１】
前記一の演算部は、
前記第１のクロック信号のクロックパルスの数が前記ウェイトカウント値に達するまで前記第１のクロック信号のクロックパルスを計数する第２のカウンタを有し、
前記第２のカウンタにより生成されるカウント値がゼロに達するまで前記次命令に基づく処理を待ち状態とする請求項１０に記載の情報処理装置。
【請求項１２】
前記第３の命令コードは、前記ウェイト期間を指定する値を繰り返し減算処理する命令コードを含む請求項７に記載の情報処理装置。
【請求項１３】
共有リソースをアクセス可能とし、各々命令を実行する複数の演算部を有する半導体装置であって、
前記複数の演算部の各々は、
各演算部の実行する命令により指定される処理を行う命令実行ユニットと、
前記命令実行ユニットにより行われる処理に利用される複数のレジスタと、
第１のカウンタと、を有し、
複数の演算部の各々は、前記共有リソースに記憶されたデータを前記複数のレジスタのいずれかにロードするとともに前記第１のカウンタのカウント動作を開始させるロード命令を実行する半導体装置。
【請求項１４】
前記複数の演算部の各々は、前記共有リソースにデータをストアするストア命令を実行し、前記ストア命令が実行されることをトリガにして前記第１のカウンタのカウント動作を停止させる請求項１３に記載の半導体装置。
【請求項１５】
前記複数の演算部の各々は、前記第１のカウンタのカウント値に基づき前記命令実行ユニットによる処理を停止させる期間を決定し、当該処理を停止させる停止命令を実行する請求項１３に記載の半導体装置。
【請求項１６】
前記複数の演算部の各々は、さらに第２のカウンタを有し、前記第１のカウンタのカウント値を前記第２のカウンタに転送した後、前記第２のカウンタのカウント値が所定の値になるまでカウント動作をさせる停止命令を実行する請求項１３記載の半導体装置。
【請求項１７】
前記複数の演算部の各々は、前記第１のカウンタのカウント値を前記複数のレジスタのいずれかに転送することを指示する転送命令を実行する請求項１３記載の半導体装置。
【請求項１８】
前記複数の演算部の各々は、前記転送命令によって前記第１のカウンタのカウント値が転送されるレジスタを指定し、当該指定されたレジスタに保持された値に基づき前記命令実行ユニットによる処理を停止させる停止命令を実行する請求項１７記載の半導体装置。
【請求項１９】
前記複数の演算部の各々は、前記転送命令によって前記第１のカウンタのカウント値が転送されるレジスタを指定し、当該指定されたレジスタに保持された値に関して前記命令実行ユニットに所定の演算をさせる演算命令を実行する請求項１７記載の半導体装置。
【請求項２０】
前記複数の演算部の各々は、それぞれ処理対象データのコピーをキャッシュデータとして格納するキャッシュメモリを有し、前記キャッシュデータに対して操作を行った後に操作後の前記キャッシュデータにより前記処理対象データを上書きし、
前記半導体装置は、さらに、前記複数の演算部の各々による自演算部内の前記キャッシュデータに対する操作に応じて、前記自演算部が操作の対象とする前記処理対象データと同一の前記処理対象データから生成した他の演算部内の前記キャッシュデータを無効とするインバリデーション処理を行うスヌープコントローラを有する請求項１３に記載の半導体装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は半導体装置、情報処理装置及びこれら装置におけるデータ処理に関し、例えば、複数の演算部を有し、それぞれの演算部がアトミック処理を実行する半導体装置、情報処理装置及びこれら装置におけるデータ処理に関する。
【背景技術】
【０００２】
近年、プロセッサでは、複数の演算部（例えば、ＣＰＵコア）を搭載し、複数のＣＰＵにより並列演算処理を行うことで演算能力を向上させるマルチコアプロセッサが多く提案されている。
【０００３】
このマルチコアプロセッサは、複数のＣＰＵコアからのアクセスが許容される共有リソースに処理対象データを格納する。そして、マルチコアプロセッサでは、複数のＣＰＵコアが１つの処理対象データに対して処理を行うことがある。このとき１つの処理対象データに対する処理が複数のＣＰＵコアの間で同時期に行われると、処理対象データの一貫性が失われ、処理が正しく行われない問題がある。
【０００４】
そこで、マルチコアプロセッサでは、処理対象データを一のＣＰＵコアが処理する場合には、一のＣＰＵコアが操作する処理対象データに対する他のＣＰＵコアからの操作を禁止する排他制御処理を行う。このような排他処理を行う技術が、特許文献１、２及び非特許文献１に開示されている。
【０００５】
特許文献１は、マルチプロセッサシステムに関するものである。特許文献１では、複数のプロセッサに共通に結合されリソースの排他的使用のためのロック／ロック解除を示すロックフラグを有する排他制御機構を含む。また、特許文献１の複数のプロセッサの各々は、排他制御機構に結合される特殊用途レジスタ・インタフェースを含む。そして、特許文献１は、特殊用途レジスタ・インタフェースを介した特殊用途レジスタアクセスによりロックフラグにアクセスする。これにより、特許文献１に記載のマルチプロセッサシステムでは、排他制御に必要な処理時間を短縮する。
【０００６】
特許文献２は、データ処理装置におけるライブロック状態からの脱出方法を開示する。ライブロック状態とは、プロセッサが同じ一組の命令を反復して実行しているにも関わらず、実際には処理が進行しない状態である。特許文献２では、ライブロック状態を検出するステップと、ライブロック状態を引き続き検出しながら、処理サイクルの回数を増大することによりデータ処理装置で命令の処理を徐々に減速するステップと、ライブロック状態から抜け出したことを検出した場合に、データ処理装置を全速モード動作に戻すステップとを実行する。これにより、特許文献２では、ライブロック状態により滞っている処理をライブロック状態から抜け出させることができる。
【０００７】
非特許文献１では、排他制御を行う場合に、一のＣＰＵコアが実行する排他制御処理の完了後にウェイト処理を挿入し、排他制御処理が実行される毎にウェイト処理の時間を長くする処理を行う。これにより、非特許文献１においても、特許文献２と同様に、ライブロック状態により滞っている処理をライブロック状態から抜け出させることができる。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００６−１８５３４８号公報
【特許文献２】特開２００７−２８７１４１号公報
【非特許文献】
【０００９】
【非特許文献１】"Computer Architecture A Quantatium Approach the 3rd edition", J.L.Henessey, D.A.Patterson
【発明の概要】
【発明が解決しようとする課題】
【００１０】
マルチコアプロセッサでは、１つの処理対象データに対する操作がＣＯＵコア間で競合した場合、他のＣＰＵコアの排他制御処理が滞るライブロック状態が発生する。上記した先行技術では、排他制御処理に必要な処理時間の削減又はライブロック状態からの脱出方法を開示する。しかしながら、先行技術では、ライブロック状態が継続する時間のワーストケースを補償することが出来ない問題がある。
【００１１】
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１２】
一実施の形態によれば、半導体装置、データ処理装置及びこれらのデータ処理方法は、複数の演算部の一の演算部が処理対象データのコヒーレンシを維持しながら処理対象データに対する他の演算部の処理の影響を排除するロック取得処理を行う場合に、一の演算部は所定のウェイト期間の間、一の演算部が処理対象データに対するロック状態を解除した後の次命令の実行を待ち状態とする。
【発明の効果】
【００１３】
一実施の形態によれば、半導体装置又はデータ処理装置における排他制御処理の処理時間のワーストケースを補償することができる。
【図面の簡単な説明】
【００１４】
【図１】実施の形態１にかかるデータ処理装置のブロック図である。
【図２】実施の形態１にかかる半導体装置のブロック図である。
【図３】実施の形態１にかかるアトミック処理を実現するプログラムの一例を示す図である。
【図４】実施の形態１にかかる半導体装置の処理を示す状態遷移図である。
【図５】実施の形態１にかかる半導体装置の動作を示すタイミングチャートである。
【図６】ライブロック状態が発生する状況を説明するための図である。
【図７】ライブロック状態の発生の有無を検証する第１のシミュレーション結果を示す図である。
【図８】ライブロック状態の発生の有無を検証する第２のシミュレーション結果を示す図である。
【図９】ライブロック状態の発生の有無を検証する第３のシミュレーション結果を示す図である。
【図１０】ライブロック状態の発生の有無を検証する第４のシミュレーション結果を示す図である。
【図１１】実施の形態１にかかる半導体装置においてアトミック処理に参加する演算部が２つであった場合の２つのＣＰＵ間の動作を説明するための図である。
【図１２】実施の形態１にかかる半導体装置においてアトミック処理に参加する演算部が２つであった場合の２つのＣＰＵ間の動作を説明するための図である。
【図１３】実施の形態１にかかる半導体装置においてアトミック処理に参加する演算部が３つであった場合の３つのＣＰＵ間の動作を説明するための図である。
【図１４】実施の形態１にかかる半導体装置においてアトミック処理に参加する演算部が２つであった場合の３つのＣＰＵ間の動作を説明するための図である。
【図１５】実施の形態２にかかる半導体装置のブロック図である。
【図１６】実施の形態２にかかる半導体装置においてアトミック処理後のウェイト期間を設定するプログラムの一例を示す図である。
【図１７】実施の形態２にかかる半導体装置においてアトミック処理後のウェイト期間を設定するプログラムの別の例を示す図である。
【図１８】実施の形態３にかかる半導体装置のブロック図である。
【発明を実施するための形態】
【００１５】
実施の形態１
以下、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。ただし、本発明が以下の実施の形態に限定される訳ではない。また、説明を明確にするため、以下の記載及び図面は、適宜、簡略化されている。
【００１６】
まず、本実施の形態にかかる半導体装置は、複数の演算部を含むものであり、各演算部は、半導体装置内又は半導体装置とは別に設けられた記憶装置に格納されたプログラムを実行する。そして、半導体装置は、実行するプログラムに応じて種々の処理を行う。本実施の形態にかかる半導体装置は、例えば、無線通信端末、自動車或いは家電製品等の様々な機器に搭載することができる。ここでは、本実施の形態にかかる半導体装置が適用される電子機器の一例として無線通信端末の概要について説明する。なお、無線通信端末は、フィーチャーフォン(例えば、折り畳み式の携帯電話端末)、携帯ゲーム端末、タブレットＰＣ(Personal Computer)、ノートＰＣ等のその他の無線通信端末であってもよい。
【００１７】
図１を参照して、実施の形態１にかかる半導体装置が搭載される電子機器の一例として携帯通信端末１００の構成について説明する。図１は、実施の形態１にかかる携帯通信端末１００の構成例を示すブロック図である。図１に示すように、携帯通信端末１００は、アプリケーションプロセッサ１０１、ベースバンドプロセッサ１０２、ＲＦ（Radio Frequency）サブシステム１０３、メモリ１０４、バッテリ１０５、パワーマネジメントＩＣ（ＰＭＩＣ：Power Management Integrated Circuit）１０６、表示部１０７、カメラ部１０８、操作入力部１０９、オーディオＩＣ１１０、マイクＭＩＣ、スピーカＳＰを含む。
【００１８】
アプリケーションプロセッサ１０１は、メモリ１０４に格納されたプログラムを読み出して、携帯通信端末１００の各種機能を実現するための処理を行う。例えば、アプリケーションプロセッサ１０１は、メモリ１０４からＯＳ（Operating System）プログラムを実行すると共に、このＯＳプログラムを動作基板とするアプリケーションプログラムを実行する。
【００１９】
ベースバンドプロセッサ１０２は、携帯通信端末が送受信するデータに対して符号化（例えば、畳み込み符号やターボ符号等の誤り訂正符号化）処理又は復号化処理等を含むベースバンド処理を行う。より具体的には、ベースバンドプロセッサ１０２は、送信データをアプリケーションプロセッサ１０１から受け取り、受け取った送信データに対して符号化処理を施して、ＲＦサブシステム１０３に送信する。また、ベースバンドプロセッサ１０２は、ＲＦサブシステム１０３から受信データを受け取り、受け取った受信データに対して復号化処理を施してアプリケーションプロセッサ１０１に送信する。
【００２０】
ＲＦサブシステム１０３は、携帯通信端末１００が送受信するデータに対する変調処理又は復調処理を行う。より具体的には、ＲＦサブシステム１０３は、ベースバンドプロセッサ１０２から受け取った送信データを搬送波により変調処理して送信信号を生成し、アンテナを介して送信信号を出力する。また、ＲＦサブシステム１０３は、アンテナを介して受信信号を受信し、受信信号を搬送波により復調処理して受信データを生成し、当該受信データをベースバンドプロセッサ１０２に送信する。
【００２１】
メモリ１０４は、アプリケーションプロセッサ１０１により利用されるプログラム及びデータを格納する。また、メモリ１０４は、電源が遮断されても記憶したデータを保持する不揮発性メモリと、電源が遮断された場合に記憶したデータがクリアされる揮発性メモリを含む。なお、プログラム及びデータは、アプリケーションプロセッサ１０１或いはベースバンドプロセッサ１０２内のメモリに格納されていても良い。
【００２２】
バッテリ１０５は、電池であり、携帯通信端末１００が外部電源によらずに動作する場合に利用される。なお、携帯通信端末１００は、外部電源が接続されている場合においてもバッテリ１０５の電源を利用してもよい。また、バッテリ１０５としては、二次電池を利用することが好ましい。
【００２３】
パワーマネジメントＩＣ１０６は、バッテリ１０５又は外部電源から内部電源を生成する。この内部電源は、携帯通信端末１００の各ブロックに与えられる。このとき、パワーマネジメントＩＣ１０６は、内部電源の供給を受けるブロック毎に内部電源の電圧を制御する。パワーマネジメントＩＣ１０６は、アプリケーションプロセッサ１０１からの指示に基づき内部電源の電圧制御を行う。さらに、パワーマネジメントＩＣ１０６は、ブロック毎に内部電源の供給と遮断とを制御することもできる。また、パワーマネジメントＩＣ１０６は、外部電源の供給がある場合、バッテリ１０５への充電制御も行う。
【００２４】
表示部１０７は、例えば、液晶表示装置（例えば、ＬＣＤ(Liquid Crystal Display)やＯＬＥＤ(Organic Light-Emitting Diode)ディスプレイ等）であって、アプリケーションプロセッサ１０１における処理に従い様々な画像を表示する。表示部１０７において表示される画像には、ユーザーが携帯通信端末１００に動作指示を与えるユーザーインタフェース画像、カメラ画像、動画等が表される。
【００２５】
カメラ部１０８は、アプリケーションプロセッサからの指示に従い、画像を取得する。操作入力部１０９は、ユーザーが操作して携帯通信端末１００に操作指示を与えるユーザーインタフェースである。オーディオＩＣ１１０は、アプリケーションプロセッサ１０１から送信される音声データをデコードしてスピーカＳＰを駆動すると共に、マイクＭＩＣから得た音声情報をエンコードして音声データを生成し、当該音声データをアプリケーションプロセッサ１０１に出力する。
【００２６】
実施の形態１にかかる半導体装置は、図１に示した携帯通信端末１００のベースバンドプロセッサ、アプリケーションプロセッサ等の複雑な処理を行うブロックへの適用が好適なものである。以下の説明では、図１のアプリケーションプロセッサに実施の形態１にかかる半導体装置を適用する例について説明する。
【００２７】
図２に実施の形態１にかかる半導体装置１のブロック図を示す。半導体装置１は単一の半導体基板上にトランジスタなどの素子が集積された回路により実現される。図２に示すように、半導体装置１は、複数の演算部（例えば、ＣＰＵコア１０〜１２）、スヌープコントローラ２０、メモリ２１、２２、タイマ２３、ＤＭＡＣ（Direct Memory Access Controller）２４、ＳＰＩ（Serial Parallel Interface）２５、スヌープバスＳＮＢ、ローカルバスＬＢｕｓを有する。半導体装置１では、メモリ２１、２２、タイマ２３、ＤＭＡＣ２４、ＳＰＩ２５がＣＰＵコア１０〜１２により共有される共有リソースに該当する。
【００２８】
なお、共有リソースは半導体装置１の外部の記憶装置等であっても良い。例えば、メモリ２１としては、フラッシュメモリ等の主にプログラム等の予め準備されるコードが格納されるメモリを用いることができ、メモリ２１はＳＤＲＡＭ（Synchronous Dynamic Random Aaccess Memory）、ＳＲＡＭ（Static Random Access Memory）等の高速アクセスが可能なメモリを用いることができる。この場合、メモリ２１を半導体装置１とは別に設けられる第２の半導体基板上にトランジスタ等を形成した半導体装置として半導体装置１の外部に設けることができる。このように、記憶装置の一部又は全部を別に設けられる半導体装置として設けることで、記憶容量の大きな記憶装置を用いることが容易になる。
【００２９】
半導体装置１では、スヌープバスＳＮＢを介してスヌープコントローラ２０と、ＣＰＵコア１０〜１２が接続される。また、半導体装置１では、ローカルバスＬＢｕｓを介して複数のＣＰＵコアと共有リソースとが接続される。なお、半導体装置１は、図２に示した回路ブロック以外の他の回路ブロックも含む。例えば、半導体装置１は、アナログデジタル変換器、ＰＷＭ生成回路、発振回路等を含む。また、図２では、半導体装置１のＣＰＵコアとして、３つのＣＰＵコアを示したが、半導体装置１に内蔵されるＣＰＵコアの個数は、製品使用に応じて増減する。
【００３０】
ＣＰＵコア１０〜１２は、それぞれ、共有リソースに格納される処理対象データに対して操作を行う。ＣＰＵコア１０にはクロック信号ＣＬＫ０が与えられ、ＣＰＵコア１１にはクロック信号ＣＬＫ０が与えられ、ＣＰＵコア１２にはクロック信号ＣＬＫ２が与えられている。クロック信号ＣＬＫ０〜ＣＬＫ１２は、同じ周波数でも良く、また異なる周波数であっても良い。また、半導体装置１では消費電力を低減するためにクロック信の周波数及びクロック信号の供給と遮断とが動的に切り替えられる。このＣＰＵコア１０〜１２は、それぞれが異なる構成を有していても良いが、図２に示す例では、ＣＰＵコア１０〜１２は、それぞれ同じ構成を有するものとした。そこで、ＣＰＵコアの構成について、ＣＰＵコア１０を例に説明する。
【００３１】
ＣＰＵコア１０は、レジスタファイル１１１、プログラムカウンタ１２１、命令実行ユニット１３１、第１のカウンタ（例えば、ＡＩカウンタ１４１）、第２のカウンタ（例えば、ダウンカウンタ１５１）、キャッシュメモリ１６１を有する。なお、ＣＰＵコア１０は、図示しない他の回路ブロックを含む。例えば、ＣＰＵコア１０は、フェッチユニット、命令デコーダ、キャッシュコントローラ等のＣＰＵコア１０の処理に必要な種々の回路ブロックを含む。
【００３２】
キャッシュファイル１６１は、命令キャッシュとデータキャッシュとを含むメモリである。命令キャッシュには、ＣＰＵコア１０が実行するプログラムに関する命令コードが格納される。データキャッシュには、ＣＰＵコア１０が操作するキャッシュデータを格納する。ここで、キャッシュデータは、メモリ２２等の共有リソースに格納された処理対象データのコピーである。
【００３３】
また、データキャッシュには、キャッシュデータと共にキャッシュデータに対応するバリッドビット、ダーティービット、共有ビット等が格納される。バリッドビットは、対応するキャッシュデータの有効性を示すフラグ値である。ダーティービットは、対応するキャッシュデータがコピー元データと同じ値であるか否かを示すフラグ値である。共有ビットは、対応するキャッシュデータが他のＣＰＵと共有されるものであるか排他的に利用できるものであるかを示すフラグ値である。
【００３４】
プログラムカウンタ１２１は、次に命令キャッシュから読み出す命令コードの命令キャッシュアドレスを示すプログラムカウント値を生成する。このプログラムカウント値は、命令実行ユニット１３１における演算結果に応じてプログラムカウンタ１２１が更新する。
【００３５】
命令実行ユニット１３１は、図示しない命令デコーダが命令コードをデコードして生成した演算命令に従って処理を行う。この演算には、加算、減算等の算術演算に加えて、ロード・ストア処理、命令分岐処理等の種々の処理が含まれるものとする。
【００３６】
レジスタファイル１１１は、１６本の汎用レジスタＲ０〜Ｒ１５を有し、各レジスタは、命令実行ユニット１３１がオペランドとして、命令の処理に使用するデータ及び処理結果となるデータを保持する。各レジスタは、例えば、３２ビット幅である。レジスタファイル１１１に格納されるデータは、ロード及びストアといったメモリアクセスに関する転送命令の実行においてメモリのアクセス先を示すアドレス番地も含む。
【００３７】
ＡＩカウンタ１４１は、ＣＰＵコア１０が後述するロック取得処理を実行している間のクロックパルスの数に応じてダウンカウンタ１５１のカウント数を示すＡＩカウント値ＡＩＣＮＴを生成する。また、ＡＩカウンタ１４１は、リンクビットＬＢを備える。このリンクビットＬＢは、ＣＰＵコア１０で実行されるプログラムによる所有権フラグである。例えば、ＣＰＵコア１０において実行されるプログラムがＡＩカウンタ１４１を利用する場合に、このリンクビットＬＢが１とされる。また、ＣＰＵコア１０において、複数のプログラムが実行されている場合、一のプログラムがリンクビットＬＢを１（占有状態）とすることで、他のプログラムと一のプログラムとの間でＡＩカウンタ１４１が重複利用されることを防止することができる。なお、ＡＩカウンタ１４１の動作についての詳細は後述する。
【００３８】
ダウンカウンタ１５１は、第１のクロック信号のクロックパルスの数がウェイトカウント値（例えば、ＡＩカウント値ＡＩＣＮＴ）に達するまで第１のクロック信号のクロックパルスを計数する。より具体的には、ダウンカウンタ１５１は、ＡＩカウンタ１４１において生成されたＡＩカウント値ＡＮＣＮＴをカウント値の初期値として、第１のクロック信号のクロックパルスが入力される毎にカウント値を減少させる。実施の形態１にかかる半導体装置１では、ダウンカウンタ１５１は、命令実行ユニット１３１において特定の命令（例えば、ＡＩＷＡＩＴ）が実行されたことに応じて、ダウンカウント処理を実行する。また、命令実行ユニット１３１は、ダウンカウンタ１５１のカウント値が予め決められた規定値（例えばゼロ）に達するまで次命令の実行を待つ。また、実施の形態１にかかる半導体装置１では、ＣＰＵコア１０は、ダウンカウンタ１５１により生成されるカウント値がゼロに達するまで次命令に基づく処理を待ち状態とする。
【００３９】
スヌープコントローラ２０は、複数のＣＰＵコアに含まれる第１のＣＰＵコアが自ＣＰＵコアのキャッシュデータに対して操作を行った場合に、第１のＣＰＵコアが操作するキャッシュデータのコピー元の処理対象データの一貫性を保持するスヌープ処理を行う。より具体的には、スヌープコントローラ２０は、複数のＣＰＵコアに含まれる第１のＣＰＵコアによる自ＣＰＵコア内のキャッシュデータに対する操作に応じて、スヌープ処理を行う。このスヌープ処理では、第１のＣＰＵコアが操作の対象とするキャッシュデータのコピー元の処理対象データから生成した他のＣＰＵコア（例えば、第２のＣＰＵコア）内のキャッシュデータを無効とするインバリデーション処理を行う。
【００４０】
このスヌープコントローラ２０のスヌープ処理により、１つのコピー元データから生成されたキャッシュデータに対して操作を行うＣＰＵコアは１つに限定される。そして、スヌープコントローラ２０のスヌープ処理により、一のＣＰＵコアでの処理結果がコピー元データに反映される前に他のＣＰＵコアが処理結果の反映前のコピー元データに基づき誤った処理を実行することを防止することができる。
【００４１】
共有リソースは、複数のＣＰＵコアによりアクセスされるものである。共有リソースには、ＣＰＵコアで処理される処理対象データが格納される。また、共有リソースには、ＣＰＵコアで実行されるプログラムが格納される。そして、共有リソースは、処理対象データとプログラムとを複数のＣＰＵコアからの求めに応じて複数のＣＰＵコアに送信する。複数のＣＰＵコアは、共有リソースから読み出したプログラムに基づき処理対象データに対する操作を行う。なお、図２に示す例では、供給リソースとして、メモリ２１、２２、タイマ２３、ＤＭＡＣ２４、ＳＰＩ２５を示した。
【００４２】
メモリ２１は、例えば、フラッシュメモリ、ＰＲＯＭ（Programable ROM）等の不揮発性メモリである。このメモリ２１には、主にプログラムが格納される。メモリ２２は、ＤＲＡＭ（Dynamic Random Access Memory）、ＳＲＡＭ（Static Random Access Memory）等の揮発性メモリである。このメモリ２２には、主に処理対象データと、外部に設けられたメモリから読み出されたプログラムと、が格納される。
【００４３】
タイマ２３は、プログラムの実行時間、所定期間の長さ等の時間を計測するものである。このタイマ２３は、例えば、動作形態を規定する設定値が格納される設定レジスタと、測定結果を格納する結果レジスタと、を有する。そして、タイマ２３は、設定レジスタの設定値に応じて時間の計測動作を行い、測定結果を結果レジスタに格納する。そして、ＣＰＵコア等のバスマスタ装置からの求めに応じて当該測定結果を出力する。
【００４４】
ＤＭＡＣ２４は、メモリインタフェース回路である。ＤＭＡＣ２４は、ＣＰＵコア等のバスマスタ装置からの求めに応じて外部に設けられた外部メモリとの通信を行う。例えば、ＤＭＡＣ２４は、バスマスタ装置からリード指示があった場合には外部メモリから読み出したプログラム或いは処理対象データを出力し、バスマスタ装置からライト指示があった場合にはバスマスタ装置が出力するデータを外部メモリに格納する。
【００４５】
ＳＰＩ２５は、パラレル信号、或いは、シリアル信号を用いて外部の装置と半導体装置１との間の通信を行う。ＳＰＩ２５は、ＣＰＵコア等のバスマスタ装置からの求めに応じて外部の装置の通信を行う。
【００４６】
上記説明より、実施の形態１にかかる半導体装置１は、共有リソースをアクセス可能とし、各々命令を実行する複数の演算部（例えば、ＣＰＵコア１０〜１２）を有する半導体装置であって、複数のＣＰＵコアの各々が、各演算部の実行する命令により指定される処理を行う命令実行ユニットと、命令実行ユニットにより行われる処理に利用される複数のレジスタと、第１のカウンタと、を有する。そして、実施の形態１にかかる半導体装置１は、以下のような動作を行うことで、スヌープコントローラ２０による排他制御処理の処理時間のワーストケースを補償する。
【００４７】
実施の形態１にかかる半導体装置１では、複数のＣＰＵコアの各々が、共有リソースに記憶されたデータを複数のレジスタのいずれかにロードするとともに第１のカウンタ（例えば、ＡＩカウンタ）のカウント動作を開始させるロード命令を実行する。また、複数のＣＰＵコアの各々が、共有リソースにデータをストアするストア命令を実行し、ストア命令が実行されることをトリガにしてＡＩカウンタのカウント動作を停止させる。これにより、複数のＣＰＵコアの各々は、ＡＩカウンタのＡＩカウント値ＡＩＣＮＴに基づき命令実行ユニットによる処理を停止させる期間を決定し、その後、当該処理を停止させる停止命令を実行する。そして、複数のＣＰＵコアの各々は、さらにダウンカウンタを有し、ＡＩカウンタのＡＩカウント値ＡＩＣＮＴをダウンカウンタに転送した後、ダウンカウンタのカウント値が所定の値になるまでカウント動作をさせる停止命令（例えば、ＡＩＷＡＩＴ命令）を実行する。以下では、実施の形態１にかかる半導体装置１の上記動作をより詳細に説明する。
【００４８】
続いて、実施の形態１にかかる半導体装置１の動作について説明する。まず、１つの処理対象データに対して操作を行うＣＰＵの数が１つ（例えば、ＣＰＵコア１０）である場合の半導体装置１の動作について説明する。
【００４９】
この場合、ＣＰＵコア１０は、メモリ２２等の共有リソースから処理対象データをコピーしてキャッシュデータを生成する。そして、ＣＰＵコア１０は、キャッシュデータをキャッシュメモリ１６１のデータキャッシュに格納する。その後、ＣＰＵコア１０は、キャッシュデータをレジスタファイル１１１に所定の操作を加えて、再度キャッシュメモリに書き戻す。これにより、ＣＰＵコア１０では、キャッシュメモリ１６１上のキャッシュデータが更新される。そして、ＣＰＵコア１０は、共有リソース上のコピー元データを操作後のキャッシュデータにより上書きする。
【００５０】
このように、半導体装置１では、共有リソース上の処理対象データをコピーしたキャッシュデータに対して操作を行う。そのため、１つの処理対象データに対する操作を複数のＣＰＵコアで同時期に行うことも可能である。しかし、複数のＣＰＵコアが同時期に同一の処理対象データに対して処理を行った場合、第１のＣＰＵコアによる処理が未反映な状態で、同じ処理対象データに対する処理を第２のＣＰＵコアが進めるため、処理対象データの一貫性が保持できなくなる問題が生じる。このような処理対象データの一貫性を確保するために、半導体装置１では、スヌープ処理とアトミック処理とを用いて、共有リソース上の処理対象データに対して処理を行う。
【００５１】
そこで、まず、スヌープ処理について説明する。実施の形態１にかかる半導体装置１では、スヌープ処理は、主にスヌープコントローラ２０によるハードウェア処理により行われる。ＣＰＵコア１０〜１２は、それぞれキャッシュデータを有し、それぞれがキャッシュデータに対して操作を行う。なお、以下の説明では、複数のＣＰＵコアの１つを第１のＣＰＵコアと称し、他のＣＰＵコアを第２ＣＰＵコアと称す。
【００５２】
半導体装置１では、第１のＣＰＵコアが共有リソース上の処理対象データに対して処理を行う場合、まず、処理対象データをコピーして、データキャッシュ上にキャッシュデータを格納する。そして、第１のＣＰＵコアは、キャッシュデータに対応するバリッドビット、ダーティービット、共有ビットを参照してキャッシュデータを占有可能であると判断できた場合に当該キャッシュデータに対する操作を行う。より具体的には、バリッドビットがキャッシュデータの有効を示す場合に第１のＣＰＵコアは、キャッシュデータに対する操作を行う。
【００５３】
そして、半導体装置１では、第１のＣＰＵコアがキャッシュデータに対して操作を開始することに応じて、スヌープコントローラ２０によるスヌープ処理を行う。このスヌープ処理では、第２のＣＰＵコア内のキャッシュデータのうち第１のＣＰＵコアが操作するキャッシュデータと同一の処理対象データから生成されたキャッシュデータに対応付けられたバリッドビットを無効状態とする。これにより、第２のＣＰＵコアは、第１のＣＰＵコアが操作するキャッシュデータと同一の処理対象データから生成されたキャッシュデータへの操作が禁止される。この第２のＣＰＵコア内のキャッシュデータに対する操作を禁止する処理がインバリデーション処理である。
【００５４】
その後、第１のＣＰＵコアは、操作後のキャッシュデータによりコピー元の処理対象データを上書きする。また、第１のＣＰＵコアは、コピー元データをキャッシュデータにより上書きした後に、ダーティービットをコピー元データとキャッシュデータとが不一致状態であることを示す値（例えば、１）からコピー元データとキャッシュデータとが一致状態であることを示す値（例えば、０）に書き換える。また、第２のＣＰＵコアは、バリッドビットが無効状態とされたキャッシュデータを操作する場合、コピー元データから新たにキャッシュデータを生成し、当該新たなキャッシュデータに対して操作を行う。
【００５５】
続いて、半導体装置１で行われるアトミック処理について説明する。スヌープ処理は、複数のＣＰＵコアの間の処理を行うものであるのに対して、アトミック処理は複数のＣＰＵコアのそれぞれで実行されるソフトウェアにおける排他制御処理である。このアトミック処理では、上記スヌープ処理の結果を参照して行われるものである。
【００５６】
このアトミック処理では、ＣＰＵコアは、処理対象データを第２のＣＰＵコアによる処理対象データに対する操作を禁止するロック状態とした状態とし、その後、処理対象データに対する操作を実行し、操作後にロック状態を解除する。また、実施の形態１にかかる半導体装置１では、ＣＰＵコアは、第１のＣＰＵコアを、所定のウェイト期間の間、アトミック処理の後の次命令に基づく処理を待ち状態とする。本実施の形態では、所定のウェイト期間は、第１のＣＰＵコアが動作状態に応じて設定する。ＣＰＵコアは、共有リソース等のプログラム格納領域からプログラムを読み出し、読み出したプログラムに基づきアトミック処理等の処理を実行する。
【００５７】
そこで、ＣＰＵコアにアトミック処理を指示するプログラムの一例を図３に示す。図３に示すように、当該プログラムは、第１の命令コードから第３の命令コードを含む命令セットにより構成される。第１の命令コードは、処理対象データの状態を一の演算部（例えば、第１のＣＰＵコア）以外の他の演算部（例えば、第２のＣＰＵコア）による処理対象データに対する操作を禁止するロック状態とする。第２の命令コードは、処理対象データに対するロック状態を解除する。第３の命令コードは、一の演算部（例えば、第１のＣＰＵコア）を、所定のウェイト期間の間、次命令に基づく処理を待ち状態とする。
【００５８】
第１の命令コードは、複数の命令コードを含む。図３に示す例では、ＭＯＶＬＩ命令からＭＯＶＣＯ命令の後の分岐命令ＢＬが第１の命令コードに相当する。図３に示す第１の命令コードでは、ＭＯＶＬＩ命令により、レジスタＲ４に格納されたアドレスで特定されるメモリ領域に格納されたデータをレジスタＲ０にロードする。このメモリ領域は、例えば、メモリ２２内にある。また、ＭＯＶＬＩ命令では、第１のＣＰＵコア内のリンクビットＬＢを１に設定する。ＣＭＰ／ＰＬ命令では、レジスタＲ０に格納されたデータが０より大きい値であるか否かを判断する。大きい値である場合にはＴビットに１がセットされ、小さい値である場合はＴビットが０にセットされる。Ｔビットとは、第１のＣＰＵコアの図示しない３２ビット幅のステータスレジスタ（制御用レジスタ）のうちの１ビットに割り当てられたビットをさす。そして、ＣＭＰ／ＰＬ命令に続く分岐命令ＢＦは、ＣＭＰ／ＰＬ命令による判断結果が真、すなわちＴビットが０である場合にはその後に続く命令の実行を許可する。一方、分岐命令ＢＦは、判断結果が偽、すなわちＴビットが０である場合には、Ｌ１で示される処理ルーチンの最初の処理を行うようにプログラムカウンタを操作する。レジスタＲ４により指定されるメモリ領域は、複数のＣＰＵコアのいずれもが共有リソースを利用できるときには０を格納する領域として割り当てられている。ＭＯＶＬＩ．Ｌ命令から１回目の分岐命令ＢＦまでがリソースの占有チェックフローであり、他のＣＰＵコアがリソースを占有しているときは再びＭＯＶＬＩ命令を実行することになる。
【００５９】
続くＭＯＶ命令では、即値０をレジスタＲ０に転送する。続いて、ＭＯＶＣＯ．Ｌ命令では、レジスタＲ０の値をレジスタＲ４で示されるアドレスにより特定されるメモリ領域にストアする。しかし、ＭＯＶＣＯ．Ｌ命令では、そのストア処理を行うに当たり第１のＣＰＵコア内のリンクビットＬＢを参照する。そして、ＭＯＶＣＯ．Ｌ命令は、そのリンクビットＬＢの値をＴビットにコピーし、Ｔビットの値が１であればストア処理を実行し、Ｔビットが０であればストア処理を実施しない。このリンクビットＬＢは、ＭＯＶＬＩ命令の処理からＭＯＶＣＯ命令の処理の間に０にクリアされることがある。それは、ＭＯＶＬＩ命令からＭＯＶＣＯ命令の間に割り込み処理が行われた場合、アトミック処理に利用される命令の指定するアドレス（ＭＯＶＬＩ命令により指定されるレジスタＲ４に格納されたアドレス、又は、ＭＯＶＣＯ．Ｌ命令により指定されるレジスタＲ４に格納されたアドレス、等）を含むキャッシュラインが、他のＣＰＵコアのキャッシュラインとコヒーレントが維持できずスヌープコントローラ２０によって無効化された場合、ＭＯＶＣＯ命令実行時に指定したアドレスがＭＯＶＬＩ命令実行時に指定したアドレスを含むキャッシュラインに含まれていなかった場合、キャッシュリプレースによりＭＯＶＬＩ命令を実行したときに確保したキャッシュラインが存在しなくなった場合、等である。よって、これらが生じた場合にはＭＯＶＣＯ命令のストア処理は実行されない。ＭＯＶＣＯ命令の後の分岐命令ＢＦは、ＭＯＶＣＯ命令によるストア処理が成功した、すなわちＴビットが１である場合には後続の命令の実行を許可し、ＭＯＶＣＯ命令によるストア処理が失敗した、すなわちＴビットが０である場合にはＬ１で示される処理ルーチンの最初の処理を行うようにプログラムカウンタを操作する。
【００６０】
また、詳細は後述するが、ＡＩカウンタ１４１は、ＭＯＶＬＩ．Ｌ命令が実行されることによりカウント動作を開始する。ＭＯＶＣＯ．Ｌ命令が実行されるとことをトリガとし、その後に実行される分岐命令ＢＦによる処理が完了したことによりＡＩカウンタ１４１はカウント動作を停止しその時点のカウント値ＡＩＣＮＴを保持する。よって、ＡＩカウンタ１４１は、ＭＯＶＬＩ．Ｌ命令の実行開始から、ＭＯＶＣＯ．Ｌ命令後の分岐命令ＢＦの分岐処理が完了するまでのクロック信号のクロックパルス数に応じてＡＩカウント値ＡＩＣＮＴを生成する。なお、分岐命令ＢＦはＭＯＶＣＯ．Ｌ命令に連続している必要はない。さらに、図３に示す例では詳細を省略したが、ＭＯＶＣＯ．Ｌ命令の後の分岐命令ＢＦにより分岐がなされなかった場合、後続命令によって処理対象データをロック状態とした上で行われる任意の処理が行われる。
【００６１】
第２の命令コードは、複数の命令コードを含む。図３に示す例では、第２の命令コードは、ＭＯＶ命令とＭＯＶ．Ｌ命令とを含む。ＭＯＶ命令では、即値１のレジスタＲ０に転送する。ＭＯＶ．Ｌ命令では、レジスタＲ０の値をレジスタＲ４に格納されたアドレスにより特定されるメモリ領域にストアする。これにより、ＣＰＵコアは、リソースの占有状態を解除する。
【００６２】
実施の形態１にかかる半導体装置１では、第３の命令コードは１つの命令により構成される。第３の命令コードは、ＡＩＷＡＩＴ命令である。このＡＩＷＡＩＴ命令は、ＡＩカウンタ１４１で生成されたＡＩカウント値ＡＩＣＮＴと同数のクロックパルスが入力されるまでの期間、ＣＰＵコアによる次命令の実行を待ち状態とする。
【００６３】
上記したように、実施の形態１にかかる半導体装置１では、アトミック処理の最後にウェイト期間を設ける。実施の形態１にかかる半導体装置１では、このウェイト期間を設けることによりアトミック処理においてライブロック状態を回避する。そこで、このウェイト期間について説明する。
【００６４】
まず、実施の形態１にかかる半導体装置１では（１）式より示されるウェイト期間（ＡＩカウント値ＡＩＣＮＴ）を設定する。
ＡＩＣＮＴ＝（２＊Ｍ＊Ｎ＊Ｌ）＋１  ・・・  （１）
【００６５】
（１）式において、Ｍは、ＣＰＵコア間のクロック信号の周波数比である。このクロックの周波数比は、自ＣＰＵコア（例えば、第１のＣＰＵコア）に供給される第１のクロック信号と他のＣＰＵコア（例えば、第２のＣＰＵコア）に供給される第２のクロック信号との周波数比である。また、この周波数比は、第２のＣＰＵコアに含まれる複数のＣＰＵコアに供給される複数の第２のクロック信号のうち第１のクロック信号の周波数との差が最も大きなクロック信号の周波数と、第１のクロック信号の周波数と、に基づき算出されるものである。
【００６６】
（１）式において、Ｎは、アトミック処理に参加する、つまり、共有リソース上の処理対象データにアクセスする可能性のあるＣＰＵコアの数である。
【００６７】
（１）式において、Ｌは、第１のＣＰＵコアが処理対象データに対するロック状態の取得開始から取得完了まで（第１の命令コードの実行開始から第１の命令コードの実行完了まで）に自ＣＰＵコアに供給される第１のクロック信号のクロックパルスの数である。
【００６８】
実施の形態１にかかる半導体装置１では、ＡＩカウンタ１４１により、上記ＡＩカウント値ＡＩＣＮＴを生成する。そこで、ＡＩカウンタ１４１の動作を示す状態遷移を図４に示す。
【００６９】
図４に示すように、ＡＩカウンタ１４１は、まず、初期値として０を設定する（状態Ｓ０）。そして、ＡＩカウンタ１４１は、自ＣＰＵコアにおいてＭＯＶＬＩ命令が実行されるまで、ＡＩカウント値ＡＩＣＮＴの値を維持する（状態Ｓ１）。続いて、ＡＩカウンタ１４１は、ＭＯＶＬＩ命令が自ＣＰＵコアで実行されたことに応じてＡＩカウント値ＡＩＣＮＴに１を設定する（状態Ｓ２）。続いて、ＡＩカウンタ１４１は、自ＣＰＵコアにクロック信号が入力される毎に演算部の数と周波数比との乗算値の２倍の大きさを有する単位加算値（２＊Ｍ＊Ｎ）を積算した値によりＡＩカウント値ＡＩＣＮＴを更新する（状態Ｓ３）。周波数比Ｍ及びコア数Ｎは、例えばメモリ（ＲＯＭ）２１に予め記憶する。半導体装置１の電源投入時又はリセット起動時に各ＣＰＵコアがメモリ２１から周波数比Ｍ及びコア数Ｎをロードし、単位加算値（２＊Ｍ＊Ｎ）を演算し、その後、ＡＩカウンタ１４１に転送する。ＡＩカウンタ１４１内の図示しないレジスタが単位加算値を保持し、ＡＩカウンタ１４１はその保持された単位加算値を用いて積算する。または、単位加算値（２＊Ｍ＊Ｎ）をメモリ２１に記憶し、この単位加算値を直接ＡＩカウンタ１４１に転送するようにしてもよい。
【００７０】
この状態Ｓ３において、ＭＯＶＬＩ命令が自ＣＰＵコアにおいて実行された場合、ＡＩカウンタ１４１は、ＡＩカウント値ＡＩＣＮＴを１とし（状態Ｓ２）、ＡＩカウント値ＡＩＣＮＴを再度再開する。また、状態Ｓ３において、ＭＯＶＣＯ命令が実行された場合、ＡＩカウンタ１４１は、単位加算値（２＊Ｍ＊Ｎ）の積算を継続しながら次の状態に遷移する（状態Ｓ４）。
【００７１】
状態Ｓ４において、ＭＯＶＬＩ命令が自ＣＰＵコアにおいて実行された場合、ＡＩカウンタ１４１は、ＡＩカウント値ＡＩＣＮＴを１とし（状態Ｓ２）、ＡＩカウント値ＡＩＣＮＴを再度再開する。また、状態Ｓ４において、分岐命令ＢＦが実行された場合、状態Ｓ５に状態を遷移させる。状態Ｓ５では、ＡＩカウンタ１４１は、当該分岐命令が完了するまで単位加算値（２＊Ｍ＊Ｎ）の積算を継続する。また、状態Ｓ５では、ＡＩカウンタ１４１は、分岐命令が完了したことに応じてその時点でのＡＩカウント値ＡＩＣＮＴを保持する状態Ｓ１に遷移する。これにより、ＡＩカウンタ１４１は、ＣＰＵコアの数と周波数比との乗算値の２倍の大きさを有する単位加算値を積算した積算値に、ロック取得に要したクロックパルスの数を乗じた値に１を加えたウェイト期間に対応するウェイトカウント値を生成する。
【００７２】
実施の形態１にかかる半導体装置１では、ＡＩＷＡＩＴ命令に応じて、ダウンカウンタ１５１がＡＩカウンタ１４１により生成されたＡＩカウント値ＡＩＣＮＴと同数のクロックパル数をカウントする。そして、実施の形態１にかかる半導体装置１は、ダウンカウンタ１５１のカウント値がゼロに達するまでの間、自ＣＰＵコアにおける次命令の実行を待ち状態とする。そこで、このウェイト処理を含む実施の形態１にかかる半導体装置１の動作を示すタイミングチャートを図５に示す。
【００７３】
図５に示したタイミングチャートでは、複数のＣＰＵコアのうちアトミック処理を実施する１つのＣＰＵコア（例えば、第１のＣＰＵコア）の動作を示す。図５に示すように、ＭＯＶＬＩ命令の実行によりアトミック処理が実行された場合、第１のＣＰＵＩコアは、ＡＩカウンタ１４１によりウェイト期間の長さを設定するＡＩカウント値の計算を開始する。図５に示す例では、ＭＯＶＬＩの実行に伴って、ＡＩカウンタ１４１にはＡＩカウント値ＡＩＣＮＴとして１が設定されると共にカウント動作がイネーブルとなる。そして、ＡＩカウンタ１４１は、クロック信号が入力される毎にＡＩカウント値ＡＩＣＮＴに単位加算値（２＊Ｍ＋Ｎ）を積算する。そして、図５に示す例では、第１のＣＰＵコアが、最初のアトミック処理においてロック取得に失敗する。そのため、第１のＣＰＵコアは、再度、ＭＯＶＬＩ命令を実行する。これにより、ＡＩカウンタ１４１は、ＡＩカウント値ＡＩＣＮＴの生成を再度実行する。そして、第１のＣＰＵコアにおいてロック取得処理の最後の分岐命令（図３のＭＯＶＣＯ命令後の分岐命令ＢＦ）が成功し、分岐命令ＢＦ後の最初の命令が実行されたことに応じてＡＩカウント値ＡＩＣＮＴの積算を停止する。図示する値ＹはＡＩＣＮＴ値＝（２＊Ｍ＊Ｎ＊Ｌ）＋１である。なお一つの命令は必ずしもクロックパルスの１サイクルで実行するとは限らない。例えば図５において、ＭＯＶＣＯ命令は１サイクルで実行完了するが、ＭＯＶＬＩ命令、及び分岐命令ＢＦは複数サイクルで実行完了する場合を示している。
【００７４】
そして、ＭＯＶ命令及びＭＯＶ．Ｌ命令により処理対象データに対するロック状態が解除されると、第１のＣＰＵコアにおいてＡＩＷＡＩＴ命令が実行される。そして、当該ＡＩＷＡＩＴＥ命令の実行に応じてダウンカウンタ１５１は、クロック信号のクロックパルスの数がウェイトカウント値（例えば、ＡＩカウント値ＡＩＣＮＴ）に達するまでクロック信号のクロックパルスを計数する。つまり、ダウンカウンタ１５１は、ＡＩカウント値ＡＩＣＮＴの値と同数のクロックパルスをカウントする。このとき、ダウンカウンタ１５１は、クロック信号のクロックパルスが入力される毎に１つずつカウント値を減少させる（ダウンカウンタ１５１は、単位加算値が−１のカウンタといえる）。そして、ダウンカウンタ１５１のカウント値が０に達したことに応じて、ＡＩカウンタ１４１はゼロにリセットされ、ＣＰＵコアは次命令の実行を再開する。
【００７５】
上記したように、実施の形態１にかかる半導体装置１では、処理対象データに対するロック状態の取得とロック状態の解除処理を行うことで、１つの処理対象データに対する処理が競合することを防止する。また、実施の形態１にかかる半導体装置１では、処理対象データに対するロック状態を解除した後にウェイト処理を行うことで、処理対象データをロック状態とした第１のＣＰＵコア以外の第２のＣＰＵコアにライブロックの発生時間のワースト条件を補償することを可能にする。
【００７６】
そこで、半導体装置１におけるライブロック状態と、ウェイト処理によるライブロックの継続期間のワースト条件とについてより詳細に説明する。まず、図６にライブロック状態が発生する状況を説明する図を示す。
【００７７】
図６に示す例では、ＣＰＵコア１０（例えば、第１のＣＰＵコア）と、ＣＰＵコア１１（例えば、第２のＣＰＵコア）とが、それぞれアトミック処理によって処理対象データに対するロック状態の取得を行うものである。このとき、第１のＣＰＵコアが処理対象データに対するロックを取得完了からロックの解放処理完了まで期間と、第２のＣＰＵコアにおける占有状態チェックを行うタイミングとが重なってしまった場合、第２のＣＰＵコアは処理対象データに対するロックを取得できない。これにより、第２のＣＰＵコアにおいて、処理対象データをロック状態とした上で処理を行うルーチンがルーチンの処理にエラーが発生していないにも関わらず実行されないライブロック状態が発生する。
【００７８】
上記ライブロックは、第１のＣＰＵコアが処理対象データに対するロックを取得することに応じて第２のＣＰＵコアの処理対象データに対応するキャッシュラインが無効化されることに起因して発生するものである。
【００７９】
ライブロックは、処理対象データに対するロックを取得できないことに起因して発生するが、このロック取得の失敗は、ＭＯＶＬＩ命令を実行してからＭＯＶＣＯ命令を実行するまでの間に割り込み処理（例えば、インバリデーション処理）が行われた場合にも発生する。そこで、割り込み処理の発生タイミングとアトミック処理の実行タイミングとの関係によるライブロック状態の発生の有無を検証するシミュレーション結果を図７〜図１０に示す。
【００８０】
このシミュレーションは、７つのＣＰＵコアを有するシステムを想定したものである。また、シミュレーションでは、ＣＰＵ０とＣＰＵ１とがキャッシュコヒーレントを維持している状態を想定している。さらに、シミュレーションでは、ＣＰＵ０がキャッシャブル領域の変数に対してＭＯＶＬＩ命令とＭＯＶＣＯ命令を実行（アトミック処理を実行）し、ＣＰＵ０が処理対象とする変数に対してＣＰＵ１が定期的に書き込みを実施することでキャッシュコヒーレントの対象となっている共有キャッシュを無効化する状態を想定している。また、当該シミュレーションは、ＣＰＵ２〜ＣＰＵ６は、ＣＰＵ０及びＣＰＵ１が処理対象とする変数が格納されている共有リソース上のアドレスにタイ対してライトトランザクションを非キャッシュで発行するという条件を有するものとする。
【００８１】
図７に示すシミュレーション結果は、ＣＰＵ１からのインバリデーション処理がＣＰＵ０のアトミック処理のロック取得処理期間よりも短い周期で発行されるものである。図７に示すように、この場合、全てのＣＰＵの全期間でライブロックが発生する。
【００８２】
次いで、図８に示すシミュレーション結果は、ＣＰＵ１からのインバリデーション処理がＣＰＵ０のアトミック処理のロック取得処理期間を跨ぐ間隔で発行されるものである。図８に示すように、この場合は、ＣＰＵ０のロック取得処理が阻害されないため、ライブロックは発生しない。
【００８３】
次いで、図９に示すシミュレーション結果は、ＣＰＵ１からのインバリデーション処理がアトミック処理のロック取得処理の１ループ期間よりも長い間隔で発生するものの、発生タイミングがＣＰＵ０のロック取得処理を遮るタイミングで発生するものである。図９に示すように、この場合、ライブロックは不定期ではあるものの高い確率で発生する。
【００８４】
次いで、図１０にシミュレーション結果は、ＣＰＵ１からのインバリデーション処理の発生間隔がアトミック処理のロック取得処理の２回分よりも長い間隔するものである。図１０に示すように、この場合、ライブロックは発生しない。
【００８５】
上記図７〜図１０に示したシミュレーション結果から、２つのＣＰＵコアがキャッシュコヒーレントの関係にある場合、インバリデーション処理の発生間隔がアトミック処理中のロック取得処理に要する時間の２倍以上の時間があれば、相手方ＣＰＵコアにおいてライブロック状態が継続することを防止できることがわかる。アトミック処理中のロック取得処理に要する時間の２倍の時間以上があれば、相手方ＣＰＵコアにおけるロック取得処理の１回の失敗と当該取得失敗に対応するリトライ処理とが実行されるためである。
【００８６】
従って、Ｌをロック取得処理中にＣＰＵコアに供給されるクロック信号のクロックパルス数とした場合、アトミック処理が終了後に、２Ｌの長さを有するウェイト期間を設けることで相手方ＣＰＵコアのライブロック状態が継続することを防止することができる。
【００８７】
また、実施の形態１にかかる半導体装置１では、複数のＣＰＵコアがそれぞれ独立した周波数のクロック信号で動作することがある。このとき、アトミック処理を行う２つのＣＰＵコアに供給されるクロック信号の周波数比が１：１である場合は、相手方ＣＰＵコアがロック取得に要する時間は、自ＣＰＵコアのロック取得に要する時間と同じである。しかし、アトミック処理を行う２つのＣＰＵコアに供給されるクロック信号の周波数比が１：Ｍである場合は、相手方ＣＰＵコアがロック取得に要する時間は、自ＣＰＵコアのロック取得に要する時間のＭ倍となる。
【００８８】
従って、自ＣＰＵコアと相手方ＣＰＵコアのクロック周波数比が１：Ｍである場合、２ＭＬの長さを有するウェイト期間を設けることでクロック周波数に違いを有する相手方ＣＰＵコアのライブロック状態が継続することを防止することができる。
【００８９】
なお、３つ以上のＣＰＵコアがアトミック処理を行う可能性がある場合は、クロック周波数比は、自ＣＰＵコアに供給されるクロック信号の周波数と、自ＣＰＵコアに供給されるクロック信号の周波数との差が最も大きなクロック信号の周波数と、に基づき設定する。これにより、全てのＣＰＵコアにおいてライブロックが継続することを防止することができる。
【００９０】
また、実施の形態１にかかる半導体装置１では、複数のＣＰＵコアのそれぞれがアトミック処理によるロック取得処理を実行することがある。そこで、以下では、複数のＣＰＵコアが互いにインバリデーションを発行する場合のワースト条件について説明する。
【００９１】
まず、図１１及び図１２に実施の形態１にかかる半導体装置１においてアトミック処理に参加するＣＰＵコアが２つであった場合の２つのＣＰＵ間の動作を説明するための図を示す。図１１に示す例は、ロック取得処理を行うループ処理２回分の時間間隔で２つのＣＰＵコアが交互にインバリデーションを発行する場合の動作を示すものである。また、図１２に示す例は、ＣＰＵコア１０がインバリデーションを発行するタイミングとＣＰＵコア１１がインバリデーションを発行するタイミングとの間隔がロック取得処理を行うループ処理２回分の時間間隔よりも短い間隔である場合の動作を示すものである。
【００９２】
この図１１及び図１２より、２つのＣＰＵコアがそれぞれアトミック処理を行う場合、２つのＣＰＵコアのインバリデーション発行間隔がロック取得処理の２回分となった場合がもっとも制約が厳しくなる（図１１の例）。しかしながら、図１１に示すように、１つのＣＰＵコアのインバリデーション発行間隔をロック取得処理のループ処理の２回分の２倍の間隔に設定することで、２つのＣＰＵコアいずれにおいてもライブロックの継続を防止可能であることが分かる。また、１つのＣＰＵコアのインバリデーション発行間隔をロック取得処理のループ処理の２回分の２倍の間隔に設定した場合、図１２に示す例においてもライブロックを防止可能なことが分かる。
【００９３】
次いで、図１３及び図１４に実施の形態１にかかる半導体装置１においてアトミック処理に参加するＣＰＵコアが３つであった場合の３つのＣＰＵ間の動作を説明するための図を示す。図１３に示す例は、ロック取得処理を行うループ処理２回分の時間間隔で３つのＣＰＵコアが順にインバリデーションを発行する場合の動作を示すものである。また、図１４に示す例は、ＣＰＵコア１０がインバリデーションを発行するタイミングとＣＰＵコア１１がインバリデーションを発行するタイミングとの間隔がロック取得処理を行うループ処理２回分の時間間隔よりも短い間隔である場合の動作を示すものである。なお、図１４においても、ＣＰＵコア１０がインバリデーションを発行するタイミングとＣＰＵコア１２がインバリデーションを発行するタイミングとの間隔がロック取得処理を行うループ処理４回分の時間間隔であって、図１３に示した関係と同じである。
【００９４】
この図１３及び図１４より、３つのＣＰＵコアがそれぞれアトミック処理を行う場合、３つのＣＰＵコアのインバリデーション発行間隔がロック取得処理のループ処理の２回分となった場合がもっとも制約が厳しくなる（図１３の例）。しかしながら、図１３に示すように、１つのＣＰＵコアのインバリデーション発行間隔をロック取得処理のループ処理の２回分の３倍の間隔に設定することで、３つのＣＰＵコアいずれにおいてもライブロックの継続を防止可能であることが分かる。また、１つのＣＰＵコアのインバリデーション発行間隔をロック取得処理のループ処理の２回分の３倍の間隔に設定した場合、図１４に示す例においてもライブロックを防止可能なことが分かる。
【００９５】
上記図１１〜図１４に示すように、アトミック処理を実行するＣＰＵコアの数をＮとした場合、２ＭＮＬの長さを有するウェイト期間を設けることでアトミック処理を実行するいずれに対してもライブロック状態が継続することを防止することができる。
【００９６】
上記説明より、実施の形態１にかかる半導体装置１では、第１のＣＰＵコア以外の他のＣＰＵコアによる１つの処理対象データに対する操作制限し、第１のＣＰＵコアに１つの処理対象データに占有させるアトミック処理を実施する。このとき、実施の形態１にかかる半導体装置では、第１のＣＰＵコアによる当該アトミック処理の完了後に、第１のＣＰＵコアを所定のウェイト期間の間、第１のＣＰＵコアによる次命令の実行を待ち状態とする。この所定のウェイト期間は、例えば、第１のＣＰＵコアが動作状態に応じて設定するものである。また、ウェイト期間は、ＭをＣＰＵコア間のクロック信号の周波数比、Ｎをアトミック処理を実行するＣＰＵコア数、Ｌをアトミック処理中のロック取得処理に要したクロックパルス数とした場合に（２＊Ｍ＊Ｎ＊Ｌ）＋１の大きさを有する。
【００９７】
実施の形態１にかかる半導体装置１では、アトミック処理の実行後にウェイト期間を設けることで、アトミック処理に基づくロック取得に成功した第１のＣＰＵ以外の他のＣＰＵコアにおいてロック取得処理に続く処理が実行されないライブロックが発生することを防止することができる。
【００９８】
また、実施の形態１にかかる半導体装置１では、ウェイト期間が（２＊Ｍ＊Ｎ＊Ｌ）＋１の大きさに設定される。つまり、実施の形態１にかかる半導体装置１では、ライブロックの継続期間は最大でもウェイト期間である。このようなことから、実施の形態１にかかる半導体装置１では、ライブロックの継続期間のワースト値を補償することができる。
【００９９】
また、実施の形態１にかかる半導体装置１では、アトミック処理を実行するＣＰＵコアがその動作状況に応じてウェイト期間を算出する。これにより、実施の形態１にかかる半導体装置１では、ＣＰＵコアの数、ＣＰＵコアに供給されるクロック信号の周波数等の動作条件が変更された場合であっても、プログラムを変更する必要がない。
【０１００】
また、半導体装置１では、アトミック処理を実行するＣＰＵコアの数（例えば、アクティブ状態のＣＰＵコアの数）に関する情報、クロック信号の周波数の情報等は半導体装置１の動作情報として半導体装置１の内部に格納され、動作状態が変更される毎に更新される。そのため、ウェイト期間を算出するＣＰＵコアは、半導体装置内に格納されたこれら情報を参照して、現在の半導体装置の動作状態に応じて（１）式のＭ、Ｎ等の計数を変更することができる。つまり、実施の形態１にかかる半導体装置１では、半導体装置１が動的に動作条件を変更した場合であっても、プログラムを変更することなくウェイト期間を最適な値に維持することができる。つまり、半導体装置１では、半導体装置の動作条件が変更された場合においても、プログラムを変更することなく、ウェイト期間が無駄に長くなる、或いは、ウェイト期間が不足することを防止することができる。
【０１０１】
また、実施の形態１にかかる半導体装置１は、第１の命令コード（図３のＭＯＶＬＩ命令、及び、ＭＯＶＣＯ命令）と、第２の命令コード（図３のＭＯＶ命令、ＭＯＶ．Ｌ命令）と、第３の命令コード（例えば、図３のＡＩＷＩＡＴ）とを含むプログラムを実行することでアトミック処理を実行する。このとき、このプログラムにおいてアトミック処理のみを指示するプログラムコードの最後に第３の命令コードを追加するのみで実施の形態１にかかる半導体装置１にアトミック処理後に実施の形態１のウェイト期間を設定することができる。つまり、実施の形態１にかかる半導体装置１では、プログラムの変更を最小限にとどめながら、ライブロック状態の継続期間のワースト条件を補償することができる。
【０１０２】
また、実施の形態１にかかる半導体装置１は、ＡＩカウンタ１４１及びダウンカウンタ１５１をＣＰＵコア内に有するが、ＣＰＵコアに供給されるクロック信号をカウントするものであり、簡易な構成を有するため、回路面積の増加はごくわずかでよい。なお、ＡＩカウンタ１４１は、より好適には、ウェイト期間を示すＡＩカウント値ＡＩＣＮＴの算出に用いる係数（例えば、Ｍ、Ｎ、Ｌ）を格納するレジスタを備えていることが好ましい。このようなレジスタを有することで、係数を容易に変更可能になるためである。
【０１０３】
また、実施の形態１にかかる半導体装置１では、他のＣＰＵコアで実行される処理の影響を排除する排他制御処理をＭＯＶＬＩ命令とＭＯＶＣＯ命令とを用いたアトミック処理により実行する。一般的な排他制御処理では、排他制御処理中に他のＣＰＵコアの処理を一端停止する必要がある。しかし、排他制御処理を、処理中に割り込み処理（例えば、他のＣＰＵコアからのインバリデーション処理）を許可するアトミック処理により実行することで、他のＣＰＵコアの処理を停止させることなく排他制御処理を実行できる。これにより、実施の形態１にかかる半導体装置１は、処理能力を向上させることができる。
【０１０４】
実施の形態２
実施の形態２では、ウェイト期間の実現方法の別の例について説明する。実施の形態１にかかる半導体装置１では、ダウンカウンタ１５１によってウェイト期間を実現したが、実施の形態２にかかる半導体装置２では、プログラムを構成する命令セット中に定義される命令を用いてウェイト期間を実現する。なお、実施の形態２の説明において、実施の形態１においてすでに説明した構成要素については、実施の形態１と同一の符号を付して説明を省略する。
【０１０５】
そこで、実施の形態２にかかる半導体装置２のブロック図を図１５に示す。図１５に示すように、半導体装置２は、ＣＰＵコア１０〜１２に代えて、ＣＰＵコア１０〜１２からダウンカウンタ１５１〜１５３を除いたＣＰＵコア１０ａ〜１２ａを有する。実施の形態２にかかる半導体装置２では、実施の形態１にかかる半導体装置１と同様にＡＩカウンタ１４１〜１４３を用いてウェイト期間の長さを設定するＡＩカウント値ＡＩＣＮＴを生成する。
【０１０６】
そして、実施の形態２にかかる半導体装置２では、図３のＡＩＷＡＩＴ命令に代えて、他の命令により、ＡＩカウント値ＡＩＣＮＴを参照して、ＡＩカウント値ＡＩＣＮＴに相当する長さのウェイト期間を実現する。より具体的には、実施の形態２にかかる半導体装置２では、複数のＣＰＵコアの各々は、指定されたメモリ領域から複数のレジスタのいずれかにデータ転送を行う転送命令（例えば、転送元としてメモリ領域に割り付けられたＡＩカウンタを指定でき、転送先としてレジスタファイル１１１のうちいずれか１つのを指定できるＭＯＶ命令）を実行する。また、複数のＣＰＵコアの各々は、レジスタファイル内の複数のレジスタのうちのいずれかを指定し、当該指定されたレジスタに保持された値に基づき命令実行ユニットによる処理を停止させる停止命令（例えば、ＰＡＵＳＥ命令）を実行する。そして、複数のＣＰＵコアの各々は、ＡＩカウンタのカウント値を保持するレジスタを指定し、当該指定されたレジスタに保持された値に関して命令実行ユニットに所定の演算をさせる演算命令（例えば、後述するＳＨＬＲ命令及びＤＴ命令等）を実行する。そこで、実施の形態２にかかる半導体装置２にウェイト期間を含むアトミック処理を実行させるプログラムの例を図１６、図１７に示す。
【０１０７】
図１６は、実施の形態２にかかる半導体装置においてアトミック処理後のウェイト期間を設定するプログラムの一例を示す図である。図１６に示す例では、"ＭＯＶＬＩ．Ｌ  ＠Ｒ４，Ｒ０"から"ＭＯＶ．Ｌ  Ｒ０，＠Ｒ４"までの命令例は図３のものと同一である。そのリソースの占有状態を解除するＭＯＶ．Ｌ命令の後に、ＭＯＶ命令が記載される。このＭＯＶ命令は、当該ＭＯＶ命令を実行するＣＰＵコアに含まれるＡＩカウンタ１４１（１４２、１４３）が算出したＡＩカウント値ＡＩＣＮＴをレジスタＲ３に格納する命令である。そして、このＭＯＶ命令の後にＰＡＵＳＥ命令が記述される。このＰＡＵＳＥ命令は、レジスタＲ３に格納された値に応じたクロックパルス数が入力されるまでの期間命令実行ユニットによる処理を停止させるものである。これにより、図１６に示すプログラムでは、ＰＡＵＳＥ命令が実行されることで、ＡＩカウント値ＡＩＣＮＴに相当する期間のウェイト期間を実現することができる。なお、ＰＡＵＳＥ命令がＡＩカウンタを直接指定できる命令としてもよい。その場合、その直前の命令"ＭＯＶ  ＠ＡＩＣＮＴ  Ｒ３"は不要となる。
【０１０８】
また、図１７は、実施の形態２にかかる半導体装置においてアトミック処理後のウェイト期間を設定するプログラムの別の例を示す図である。図１７に示す例では、リソースの占有状態を解除するＭＯＶ．Ｌ命令の後に、ＭＯＶ命令、ＳＨＬＲ命令、ＤＴ命令、分岐命令ＢＦが記載される。また、図１７に示す例では、Ｌ３で示されるルーチンにＤＴ命令と分岐命令ＢＦが記述される。
【０１０９】
ＭＯＶ命令は、当該ＭＯＶ命令を実行するＣＰＵコアに含まれるＡＩカウンタ１４１（１４２、１４３）が算出したＡＩカウント値ＡＩＣＮＴをレジスタＲ３に格納する命令である。ＳＨＬＲ命令は、右シフト命令であって、レジスタＲ３に格納された値を１ビット右にシフトさせ、ＡＩカウント値ＡＩＣＮＴの２分の１の値を生成する。ＤＴ命令は、レジスタＲ３に格納された値を１つ減算した値で更新する命令である。分岐命令ＢＦは、レジスタＲ３の値が０に達するまでＬ３のルーチンを繰り返す命令である。このようなプログラムを構成することで、図１７に示すプログラム例においてもＡＩカウント値ＡＩＣＮＴに相当する期間の間ＤＴ命令によって減算処理が繰り返されるため、ＡＩカウント値ＡＩＣＮＴに相当する期間は実質的に他の命令が実行されず実施の形態１と同様のウェイト期間を実現することができる。ＳＨＬＲ命令によりレジスタＲ３の値を２分の１にする理由は、ＤＴ命令及び分岐命令ＢＦの実行に２サイクル必要とするからである。なお、この命令列を実行する限りにおいては、各ＣＰＵコアの実行可能な命令として必ずしもＰＡＵＳＥ命令を要するものではない。
【０１１０】
上記説明より、実施の形態２にかかる半導体装置１では、ＡＩカウンタ１４１〜１４３により生成されるＡＩカウント値ＡＩＣＮＴに応じたウェイト期間をダウンカウンタ１５１〜１５３を用いることなく実現することができる。
【０１１１】
また、実施の形態２にかかる半導体装置２では、ウェイト処理を指示する第３の命令コードを新たに設定するＡＩＷＡＩＴ命令を用いることなく、すでに命令セット中に定義された命令の組み合わせにより実現する。これにより、半導体装置２を動作させる命令セットに新たな命令を追加することなく、実施の形態１と同様にライブロック状態の継続時間のワースト値を補償することができる。
【０１１２】
実施の形態３
実施の形態３では、ウェイト期間の実現方法の別の例について説明する。実施の形態１にかかる半導体装置１では、ＡＩカウンタ１４１によりウェイト期間の長さを算出し、ダウンカウンタ１５１によってウェイト期間を実現したが、実施の形態３にかかる半導体装置３では、プログラムを構成する命令セット中に定義される命令を用いてウェイト期間の算出を行うと共にウェイト期間を実現する。なお、実施の形態３の説明において、実施の形態１においてすでに説明した構成要素については、実施の形態１と同一の符号を付して説明を省略する。
【０１１３】
そこで、実施の形態３にかかる半導体装置３のブロック図を図１８に示す。図１８に示すように、半導体装置３は、ＣＰＵコア１０〜１２に代えて、ＣＰＵコア１０〜１２からＡＩカウンタ１４１〜１４３及びダウンカウンタ１５１〜１５３を除いたＣＰＵコア１０ｂ〜１２ｂを有する。実施の形態３にかかる半導体装置３では、命令セット中の命令を利用してＡＩカウント値ＡＩＣＮＴと同様の値を算出する。例えば、ＭＯＶＬＩ命令からＭＯＶＣＯ命令の成功失敗判断を行う分岐命令ＢＦまでのクロック数が予め分かっている場合は、例えばメモリ２１に記憶された半導体装置３のシステム情報から、ＣＰＵコア数Ｎ及びクロック信号の周波数比Ｍを取得することでＡＩカウント値ＡＩＮＣＴに相当する値を算出することができる。そして、実施の形態２と同様のプログラムを構成することで、実施の形態１と同様のウェイト期間をアトミック処理の後に挿入することができる。
【０１１４】
上記説明より、実施の形態３にかかる半導体装置３では、ＡＩカウンタ１４１〜１４３及びダウンカウンタ１５１〜１５３を用いることなくアトミック処理後に動作状態に応じたウェイト期間を設定することができる。つまり、半導体装置３では、ハードウェアの構成を追加することなく実施の形態１と同様のウェイト期間を設定することができる。ＭＯＶＬＩ．Ｌ命令及びＭＯＶＣＯ．Ｌ命令の処理に基づきＡＩカウンタのカウント開始及び終了を制御するためのハードウェア機構も不要となる。
【０１１５】
また、実施の形態３にかかる半導体装置３が実行するプログラムにおいても、ウェイト期間は（１）式に基づき算出されるため、ライブロック状態の継続時間のワースト値を補償することができる。また、実施の形態３にかかる半導体装置３においても、システム情報からＣＰＵコア数Ｎ及びクロック信号の周波数比Ｍを取得することで半導体装置３の動作条件の変化にウェイト期間の長さを柔軟に対応させることができる。
【０１１６】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は既に述べた実施の形態に限定されるものではなく、その要旨を逸脱しない範囲において種々の変更が可能であることはいうまでもない。
【符号の説明】
【０１１７】
１  半導体装置
１０〜１２  ＣＰＵコア
１０ａ〜１２ａ  ＣＰＵコア
１０ｂ〜１２ｂ  ＣＰＵコア
２０  スヌープコントローラ
２１  メモリ
２２  メモリ
２３  タイマ
２４  ＤＭＡＣ
２５  ＳＰＩ
１００  携帯通信端末
１０１  アプリケーションプロセッサ
１０２  ベースバンドプロセッサ
１０３  ＲＦサブシステム
１０４  メモリ
１０５  バッテリ
１０６  パワーマネジメントＩＣ
１０７  表示部
１０８  カメラ部
１０９  操作入力部
１１０  オーディオＩＣ
ＭＩＣ  マイク
ＳＰ  スピーカ
１１１〜１１３  レジスタファイル
１２１〜１２３  プログラムカウンタ
１３１〜１３３  命令実行ユニット
１４１〜１４３  ＡＩカウンタ
１５１〜１５３  ダウンカウンタ
１６１〜１６３  キャッシュメモリ
ＬＢｕｓ  ローカルバス
ＳＮＢ  スヌープバス
【図１】
2014067072.tif 000003
【図２】
2014067072.tif 000004
【図３】
2014067072.tif 000005
【図４】
2014067072.tif 000006
【図５】
2014067072.tif 000007
【図６】
2014067072.tif 000008
【図７】
2014067072.tif 000009
【図８】
2014067072.tif 000010
【図９】
2014067072.tif 000011
【図１０】
2014067072.tif 000012
【図１１】
2014067072.tif 000013
【図１２】
2014067072.tif 000014
【図１３】
2014067072.tif 000015
【図１４】
2014067072.tif 000016
【図１５】
2014067072.tif 000017
【図１６】
2014067072.tif 000018
【図１７】
2014067072.tif 000019
【図１８】
2014067072.tif 000020