(57)【要約】【課題】回路電流の変動に伴って発生する電源ノイズを効果的に抑制する。【解決手段】半導体装置は、入力されたデータについて演算を行う演算部と、供給される命令列に演算命令が含まれている場合、当該演算命令の演算対象である第１のデータについて演算部に演算を行わせ、命令列に演算命令が含まれておらず、命令列が特定の状態にある場合、第１のデータとは異なる第２のデータについて前記演算部に演算を行わせる制御部と、を含む。【選択図】図４
2019212101.tif 000002
【特許請求の範囲】
【請求項１】
入力されたデータについて演算を行う演算部と、
供給される命令列に演算命令が含まれている場合、当該演算命令の演算対象である第１のデータについて前記演算部に演算を行わせ、前記命令列に演算命令が含まれておらず、前記命令列が特定の状態にある場合、前記第１のデータとは異なる第２のデータについて前記演算部に演算を行わせる制御部と、
を含む半導体装置。
【請求項２】
前記第１のデータ及び前記第２のデータのうちのいずれか一方を選択して、前記演算部に供給する選択部を更に含む
請求項１に記載の半導体装置。
【請求項３】
前記第２のデータは、複数のデータパターンを含み、
前記制御部は、前記演算部に前記複数のデータパターンを順次供給する
請求項１または請求項２に記載の半導体装置。
【請求項４】
前記複数のデータパターンは、前記演算部の出力ビットの少なくとも１ビットの値が反転している
請求項３に記載の半導体装置。
【請求項５】
複数の演算部を含み、
前記制御部は、前記第２のデータについて演算を行わせる制御を、前記複数の演算部に対して段階的に行う
請求項１から請求項４のいずれか１項に記載の半導体装置。
【請求項６】
半導体装置の制御方法において、
前記半導体装置が有する演算部が、入力されたデータについて演算を行い、
供給される命令列に演算命令が含まれている場合、前記半導体装置が有する制御部が、当該演算命令の演算対象である第１のデータについて前記演算部に演算を行わせ、前記命令列に演算命令が含まれておらず、前記命令列が特定の状態にある場合、前記制御部が、前記第１のデータとは異なる第２のデータについて前記演算部に演算を行わせる、
半導体装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
開示の技術は、半導体装置及び演算器の制御方法に関する。
【背景技術】
【０００２】
演算器を備えたプロセッサ等の半導体装置において、回路電流の変動に伴って発生する電源ノイズを抑制する技術として、以下の技術が知られている。
【０００３】
例えば、クロック生成回路と、命令を実行する命令実行状態と命令を停止する命令停止状態との間で状態遷移可能な命令実行回路と、を備えた演算処理装置が知られている。この演算処理装置は、第１のクロック抑止指示が入力された場合、内蔵する第１の内部回路へのクロックの印加を抑止する第１の回路と、第２のクロック抑止指示が入力された場合、内蔵する第２の内部回路へのクロックの印加を抑止する第２の回路とを含む。演算処理装置は、命令実行回路が命令実行状態から命令停止状態に遷移した場合、第１の回路に第１のクロック抑止指示を出力した後に第２の回路に第２のクロック抑止指示を出力する制御回路を含む（特許文献１参照）。
【０００４】
また、演算命令に対応するプリアクセス命令を受けて演算部が有する回路資源に対する省電力制御を段階的に無効化して演算部の回路資源の一部を動作させる電力制御命令制御部と、演算部に演算処理を実行させる制御部と、を備えた半導体集積回路が知られている（特許文献２参照）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１３−２０５９０５号公報
【特許文献２】特開２０１４−５９７６１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
プロセッサ等の演算器を備えた半導体装置において、演算器が演算処理を行うと回路電流が増加し、演算処理が停止すると回路電流が低下する。このような回路電流の増減に伴って電源電圧のレベルが一次的に上昇したり、下降したりする（図１参照）。この回路電流の変動に伴う電源電圧のレベルの変動を電源ノイズと呼ぶ。電源ノイズによって電源電圧のレベルが動作保証電圧範囲から外れると、回路が誤動作するおそれがある。
【０００７】
例えば、電力が１５０Ｗ、そのうち回路動作に使用される電流成分であるダイナミック成分が６０Ｗ、回路動作とは関係のない漏れ電流の電流成分であるリーク成分が９０Ｗ、動作電圧が０．８Ｖである、過去のテクノロジを用いた８コアのプロセッサとして、を想定する。このプロセッサにおいて、全てのコアの演算器が、一斉に停止状態から稼働状態または稼働状態から停止状態に移行すると、７５Ａ（６０Ｗ÷０．８Ｖ）の電流変動が生じる。
【０００８】
次に、電力が１２０Ｗ、そのうちダイナミック成分が１１０Ｗ、リーク成分が１０Ｗ、動作電圧が０．７Ｖである、最近のテクノロジを用いた６４コアのプロセッサを想定する。近年のテクノロジでは、トランジスタサイズが小さくなり、リーク成分がダイナミック成分よりも小さくなってきている。このプロセッサにおいて、全てのコアの演算器が、一斉に停止状態から稼働状態または稼働状態から停止状態に移行すると、１５７Ａ（１１０Ｗ÷０．７Ｖ）もの電流変動が生じる。このように、テクノロジの進歩によるトランジスタサイズの微細化、及びプロセッサ内のコア数の増加に伴って、動作状態の移行時における電流変動量が増大してきている。
【０００９】
電源ノイズを抑制する方法として、回路の省電力化を実現するためにクロック信号の制御を行うクロックゲーティング技術によるクロック信号の無効化を解除し、一定量の回路電流を増加させる方法が考えられる。しかしながら、クロック信号の無効化を解除したことによる電流増加量だけでは十分な電流量を獲得することが困難な場合があり、電源ノイズを許容範囲にまで抑えることができない場合がある。
【００１０】
また、電源ノイズを抑制する他の方法として、演算回路をプリアクセス命令やアクセスエンド命令を用いて制御する方法も考えられる。プリアクセス命令とは、回路資源の一部をダミーで動作させることにより、その回路資源に対する省電力制御を段階的に無効化する命令である。アクセスエンド命令とは、回路資源に対する省電力制御を段階的に有効化する命令である。演算器をプリアクセス命令やアクセスエンド命令を用いて制御する方法によれば、回路電流の大きさは、そのときに演算器に入力されるデータに依存することとなり、電源ノイズを許容範囲にまで抑えることができない場合がある。例えば、演算器が０＋０＝０を繰り返し演算しても回路電流は殆ど増加しない。
【００１１】
開示の技術は、一つの側面として、回路電流の変動に伴って発生する電源ノイズを効果的に抑制することを目的とする。
【課題を解決するための手段】
【００１２】
開示の技術に係る半導体装置は、入力されたデータについて演算を行う演算部と、制御部とを含む。前記制御部は、供給される命令列に演算命令が含まれている場合、当該演算命令の演算対象である第１のデータについて前記演算部に演算を行わせる。前記制御部は、前記命令列に演算命令が含まれておらず、前記命令列が特定の状態にある場合、前記第１のデータとは異なる第２のデータについて前記演算部に演算を行わせる。
【発明の効果】
【００１３】
開示の技術は、一つの側面として、回路電流の変動に伴って発生する電源ノイズを効果的に抑制する、という効果を奏する。
【図面の簡単な説明】
【００１４】
【図１】回路電流の変動に伴って発生する電源ノイズを示す図である。
【図２】開示の技術の実施形態に係るプロセッサの構成を示す図である。
【図３】開示の技術の実施形態に係るコアの構成を示す図である。
【図４】開示の技術の実施形態に係る演算回路２０の詳細な構成を示すブロック図である。
【図５】開示の技術の実施形態に係る電流底上げ動作の効果の一例を示す図である。
【図６】開示の技術の実施形態に係る演算回路の制御態様の一例を示すフローチャートである。
【図７】開示の技術の実施形態に係る演算回路の制御態様の一例を示すタイムチャートである。
【図８】比較例に係る演算回路の構成を示す回路ブロック図である。
【図９】比較例に係る演算回路の制御態様の一例を示すフローチャートである。
【図１０】比較例に係る演算回路の制御態様の他の例を示すフローチャートである。
【図１１】比較例に係る演算回路の制御態様の他の例を示すフローチャートである。
【図１２】開示の技術の第２の実施形態に係る演算回路の制御態様の一例を示すタイムチャートである。
【発明を実施するための形態】
【００１５】
以下、開示の技術の実施形態の一例について図面を参照しつつ説明する。なお、各図面において同一または等価な構成要素および部分には同一の参照符号を付与している。
【００１６】
[第１の実施形態]
図２は、開示の技術の実施形態に係る半導体装置の一例であるプロセッサ１の構成を示す図である。プロセッサ１は、マトリックス状に配置された複数（例えば６４個）のコア１００を含んで構成されている。
【００１７】
図３は、コア１００の構成の一例を示す図である。コア１００の各々は、複数（例えば８個）の演算回路２０と、主制御回路１０とを含んで構成されている。演算回路２０の各々は、演算器２２を備えている。主制御回路１０は、各種制御信号（［PW_DATA[7:0]］、［RS］、［PR_ENB］、［B2_VALID］、［X_VALID］、［LX_VALID］）及びクロックイネーブル信号（［B2_CLK_ENB］、［X_CLK_ENB_1］、［LX_CLK_ENB_1］、［RR_CLK_ENB］）を用いて、演算回路２０の各々を制御する。
【００１８】
図４は、演算回路２０の詳細な構成を示すブロック図である。演算回路２０は、演算器２２、保持回路２３Ａ、２３Ｂ、２３Ｃ、２３Ｄ、セレクタ２４Ａ、２４Ｂ、ＯＲゲート２５Ａ、２５Ｂ及び副制御回路２１を含んで構成されている。
【００１９】
保持回路２３Ａの各々は、主制御回路１０から供給されるクロックイネーブル信号［B2_CLK_ENB］に応じて有効化されたクロック信号ＣＬＫに同期して入力されたデータを取り込んで保持する。保持回路２３Ａは、保持しているデータを出力する。保持回路２３Ａの各々から出力されるデータＤ１は、セレクタ２４Ａの各々の一方の入力端子に入力される。保持回路２３Ａの各々は、例えばフリップフロップであってもよい。
【００２０】
セレクタ２４Ａの各々は、保持回路２３Ａから供給されるデータＤ１、及び副制御回路２１から供給されるダミーデータ［B2_DATA］のいずれか一方を、副制御回路２１から供給される選択信号［B2_SEL］に基づいて選択し、選択したデータを出力する。セレクタ２４Ａの各々から出力されたデータは、保持回路２３Ｂの各々に入力される。
【００２１】
保持回路２３Ｂの各々は、クロックイネーブル信号［X_CLK_ENB_1］または［X_CLK_ENB_2］に応じて有効化されたクロック信号ＣＬＫに同期して、入力されたデータを取り込んで保持する。保持回路２３Ｂは、保持しているデータを出力する。保持回路２３Ｂの各々から出力されるデータＤ２は、セレクタ２４Ｂの各々の一方の入力端子に入力される。保持回路２３Ｂの各々は、例えばフリップフロップであってもよい。
【００２２】
セレクタ２４Ｂの各々は、保持回路２３Ｂから供給されるデータＤ２、及び副制御回路２１から供給されるダミーデータ［X_DATA］のいずれか一方を、副制御回路２１から供給される選択信号［X_SEL］に基づいて選択し、選択したデータを出力する。セレクタ２４Ｂの各々から出力されたデータは、演算器２２の各々に入力される。
【００２３】
演算器２２は、セレクタ２４Ｂから供給されるデータについて演算を行って、演算結果をデータＤ３として出力する。演算器２２から出力されるデータＤ３は、保持回路２３Ｃに入力される。
【００２４】
保持回路２３Ｃは、クロックイネーブル信号［LX_CLK_ENB_1］または［LX_CLK_ENB_2］に応じて有効化されたクロック信号ＣＬＫに同期して、入力されたデータを取り込んで保持する。保持回路２３Ｃは、保持しているデータを出力する。保持回路２３Ｃから出力されるデータＤ３は、保持回路２３Ｄに入力される。保持回路２３Ｃは、例えばフリップフロップであってもよい。
【００２５】
保持回路２３Ｄは、主制御回路１０から供給されるクロックイネーブル信号［RR_CLK_ENB］に応じて有効化されたクロック信号ＣＬＫに同期して入力されたデータを取り込んで保持する。保持回路２３Ｄは保持しているデータを出力する。保持回路２３Ｄは、例えばフリップフロップであってもよい。
【００２６】
副制御回路２１は、主制御回路１０から供給される、各種制御信号（［PW_DATA[7:0]］、［RS］、［PR_ENB］、［B2_VALID］、［X_VALID］、［LX_VALID］）に応じて、ダミーデータ［B2_DATA］、［X_DATA］、選択信号［B2_SEL］、［X_SEL］、クロックイネーブル信号［X_CLK_ENB_2］、［LX_CLK_ENB_2］を出力する。
【００２７】
制御信号［PW_DATA[7:0]］は、電流底上げ動作を、各演算回路２０に行わせる場合に“１”とされ、電流底上げ動作の実行を禁止する場合に“０”とされる。電流底上げ動作とは、演算命令に基づく本来の演算を行わない演算器２２が、ダミーデータ［B2_DATA］、［X_DATA］を用いて演算を行う動作である。演算命令とは、当該命令の実行に演算器２２を使用する命令である。
【００２８】
演算回路２０において、電流底上げ動作が実行されることで、演算回路２０の基底状態における回路電流が底上げされる。これにより、演算回路２０において、回路電流が最も大きくなるピーク状態における回路電流の大きさと、基底状態における回路電流の大きさとの差が小さくなり、電源ノイズが抑制される。
【００２９】
制御信号［PW_DATA[7:0]］は、例えば、演算回路２０が停止状態から稼働状態に移行するタイミングに応じて“０”から“１”に遷移し、演算回路２０が稼働状態から停止状態に移行するタイミングに応じて“１”から“０”に遷移する。制御信号［PW_DATA[7:0]］は、コア１００を構成する８つの演算回路２０の各々に対応する８ビットの信号であり、各ビット値が対応する演算回路２０に供給される。
【００３０】
制御信号［RS］は、演算回路２０を停止状態（リテンションステート）にする場合“１”とされ、演算回路２０を稼働状態にする場合に“０”とされる。
【００３１】
制御信号［PR_ENB］は、上位システムから主制御回路１０に供給される命令列が、電源ノイズを発生し得る特定の状態であると主制御回路１０が判定した場合に“１”とされる。主制御回路１０は、例えば、複数の演算回路２０が一斉に停止状態から稼働状態または稼働状態から停止状態に移行にすることが命令列によって示されている場合、当該命令列が電源ノイズを発生し得る特定の状態であると判定する。すなわち、主制御回路１０は、回路電流の変動幅が所定値よりも大きくなるおそれがあることを命令列から検出した場合に、制御信号［PR_ENB］を“１”とする。
【００３２】
制御信号［B2_VALID］は、演算命令に基づいて演算回路２０において行われるパイプライン処理のＢ２サイクルに演算器２２を起動する場合に“１”とされる。制御信号［X_VALID］は、演算命令に基づいて演算回路２０において行われるパイプライン処理のＸサイクルに演算器２２を起動する場合に“１”とされる。制御信号［LX_VALID］は、演算命令に基づいて演算回路２０において行われるパイプライン処理のＬＸサイクルに演算器２２を起動する場合に“１”とされる。
【００３３】
主制御回路１０は、上記の各種制御信号（［PW_DATA[7:0]］、［RS］、［PR_ENB］、［B2_VALID］、［X_VALID］、［LX_VALID］）を副制御回路２１に供給することで、電流底上げ動作の実行／非実行を制御する。下記の表１は、各種制御信号と電流底上げ動作の実行／非実行との関係を示す表である。表１において、丸印は電流底上げ動作の実行を示し、バツ印は電流底上げ動作の非実行を示す。
【００３４】
【表１】
2019212101.tif 000003
【００３５】
制御信号［PW_DATA[7:0]］が“０”のとき、その他の制御信号（［RS］、［PR_ENB］、［B2_VALID］、［X_VALID］、［LX_VALID］）にかかわらず、演算回路２０において電流底上げ動作は実行されない。すなわち、制御信号［PW_DATA[7:0]］が“０”のとき電流底上げ動作が禁止される。制御信号［PW_DATA[7:0]］が“１”のとき、その他の制御信号（［RS］、［PR_ENB］、［B2_VALID］、［X_VALID］、［LX_VALID］）の状態に応じて、電流底上げ動作の実行／非実行が定められる。
【００３６】
クロックイネーブル信号［B2_CLK_ENB］は、パイプライン処理のＢ２サイクルにおいて、保持回路２３Ａのクロック信号ＣＬＫの有効化／無効化を制御するための信号である。クロックイネーブル信号［B2_CLK_ENB］が“１”となることで、クロック信号ＣＬＫが有効化され、クロックイネーブル信号［B2_CLK_ENB］が“０”となることで、クロック信号ＣＬＫが無効化される。
【００３７】
クロックイネーブル信号［X_CLK_ENB_1］は、パイプライン処理のＸサイクルにおいて、保持回路２３Ｂのクロック信号ＣＬＫの有効化／無効化を制御するための信号である。クロックイネーブル信号［X_CLK_ENB_1］が“１”となることで、クロック信号ＣＬＫが有効化され、クロックイネーブル信号［X_CLK_ENB_1］が“０”となることで、クロック信号ＣＬＫが無効化される。
【００３８】
クロックイネーブル信号［LX_CLK_ENB_1］は、パイプライン処理のＬＸサイクルにおいて、保持回路２３Ｃのクロック信号ＣＬＫの有効化／無効化を制御するための信号である。クロックイネーブル信号［LX_CLK_ENB_1］が“１”となることで、クロック信号ＣＬＫが有効化され、クロックイネーブル信号［LX_CLK_ENB_1］が“０”となることで、クロック信号ＣＬＫが無有効化される。
【００３９】
クロックイネーブル信号［RR_CLK_ENB］は、パイプライン処理のＲＲサイクルにおいて、保持回路２３Ｄのクロック信号ＣＬＫの有効化／無効化を制御するための信号である。クロックイネーブル信号［RR_CLK_ENB_1］が“１”となることで、クロック信号ＣＬＫが有効化され、クロックイネーブル信号［RR_CLK_ENB_1］が“０”となることで、クロック信号ＣＬＫが無有効化される。
【００４０】
副制御回路２１は、主制御回路１０から供給される各種制御信号（［PW_DATA[7:0]］、［RS］、［PR_ENB］、［B2_VALID］、［X_VALID］、［LX_VALID］）に基づいて、電流底上げ動作を実行する場合、以下の処理を行う。
【００４１】
電流底上げ動作を実行する副制御回路２１は、ダミーデータ［B2_DATA］をセレクタ２４Ａに供給する。また、電流底上げ動作を実行する副制御回路２１は、データＤ１及びダミーデータ［B2_DATA］のうち、ダミーデータ［B2_DATA］を選択すべきことを示す選択信号［B2_SEL］をセレクタ２４Ａに供給する。また、電流底上げ動作を実行する副制御回路２１は、保持回路２３Ｂのクロック信号ＣＬＫを有効化させるクロックイネーブル信号［X_CLK_ENB_2］を保持回路２３Ｂに供給する。また、電流底上げ動作を実行する副制御回路２１は、ダミーデータ［X_DATA］をセレクタ２４Ｂに供給する。また、電流底上げ動作を実行する副制御回路２１は、データＤ２及びダミーデータ［X_DATA］のうち、ダミーデータ［X_DATA］を選択すべきことを示す選択信号［X_SEL］をセレクタ２４Ｂに供給する。また、電流底上げ動作を実行する副制御回路２１は、保持回路２３Ｃのクロック信号ＣＬＫを有効化させるクロックイネーブル信号［LX_CLK_ENB_2］を保持回路２３Ｃに供給する。
【００４２】
電流底上げ動作を実行する副制御回路２１が上記の処理を行うことで、ダミーデータ［B2_DATA］がセレクタ２４Ａから出力され、保持回路２３Ｂにおいてダミーデータ［B2_DATA］が保持される。また、ダミーデータ［B2_DATA］または［X_DATA］がセレクタ２４Ｂから出力され、演算器２２に供給される。
【００４３】
演算回路２０において電流底上げ動作が実行されることで、演算器２２は、ダミーデータ［B2_DATA］または［X_DATA］について演算を行い、演算結果をデータＤ３として出力する。保持回路２３Ｃは、クロックイネーブル信号［LX_CLK_ENB_2］に基づいてクロック信号ＣＬＫが有効化されることで、データＤ３を保持する。演算器２２がダミーデータ［B2_DATA］または［X_DATA］ついて演算することによって得られたデータＤ３は、保持回路２３Ｄに取り込まれることなく破棄される。
【００４４】
図５は、電流底上げ動作の効果の一例を示す図である。図５の上段は、回路電流の時間推移を示すグラフであり、実線が電流底上げ動作を実行した場合に対応し、点線が電流底上げ動作を実行しない場合に対応する。図５の下段は、電源電圧の時間推移を示すグラフであり、実線が電流底上げ動作を実行した場合に対応し、点線が電流底上げ動作を実行しない場合に対応する。電流底上げ動作が実行されると、演算命令に基づく本来の演算を行わない演算器２２が、ダミーデータ［B2_DATA］または［X_DATA］について演算を行う。これにより、図５の上段に示すように、演算回路２０の基底状態における回路電流が底上げされ、ピーク状態における回路電流の大きさと、基底状態における回路電流の大きさとの差が小さくなる。その結果、電源ノイズが抑制される。
【００４５】
ここで、例えば、演算器２２に「０＋０＝０」の演算を繰り返し実行させたとしても、回路電流の底上げ効果は期待できない。一方、演算器２２の演算結果であるデータＤ３の各ビットの値が“０”から“１”または“１”から“０”に反転するような演算を演算器２２に行わせることで回路電流を効果的に底上げすることが可能である。副制御回路２１は、ダミーデータ［B2_DATA］、［X_DATA］として、演算器２２の入力ビットの各々に対応したビット列を含む、互いに異なる複数のデータパターンを保持している。副制御回路２１は、ダミーデータを構成する複数のデータパターンを順次演算器２２に入力する。これにより、演算器２２の演算結果であるデータＤ３の少なくとも１つのビットの値が“０”から“１”または“１”から“０”に反転するような演算を演算器２２に行わせる。すなわち、ダミーデータ［B2_DATA］、［X_DATA］をそれぞれ構成する複数のデータパターンは、これらが演算器２２に順次供給されることにより、演算器２２の出力ビットの少なくとも１ビットの値が反転するように構成されている。これにより、回路電流を効果的に底上げすることが可能となる。
【００４６】
また、演算器２２の演算結果であるデータＤ３の各ビットのうち、“０”から“１”または“１”から“０”に反転するビットの数（以下、反転ビット数という）制御することで、回路電流の底上げ量を調整することも可能である。例えば、６４ビットの演算器２２から出力されるデータＤ３の６４個の全てのビットの値が反転する場合の回路電流の底上げ量を１００とした場合、データＤ３の３２個のビットの値が反転する場合の回路電流の底上げ量は約５０である。プロセッサ１において、ダミーデータ［B2_DATA］、［X_DATA］として演算器２２に順次入力するデータパターンの組み合わせを適宜選択することで、演算器２２の出力における反転ビット数を制御して回路電流の底上げ量を調整してもよい。
【００４７】
図６は、開示の技術の実施形態に係る演算回路２０の制御態様の一例を示すフローチャートである。この例では、演算回路２０が稼働状態（制御信号[PW_DATA[7:0]]が“１”且つ制御信号［RS］が“０”）にある場合を想定している。
【００４８】
ステップＳ１において、主制御回路１０は、上位システムから供給される命令列に実行すべき命令が存在するか否かを判定する。主制御回路１０は、命令列に実行すべき命令が含まれていると判定した場合、処理をステップＳ２に移行し、命令列に実行すべき命令が含まれていないと判定した場合、処理をステップＳ１３に移行する。
【００４９】
ステップＳ２において、主制御回路１０は、命令列に含まれる命令を解釈する。ステップＳ３において、主制御回路１０は、実行すべき命令が演算命令であるか否かを判定する。主制御回路１０は、実行すべき命令が演算命令であると判定した場合、処理をステップＳ４に移行し、実行すべき命令が演算命令ではないと判定した場合、処理をステップＳ６に移行する。
【００５０】
ステップＳ４において、主制御回路１０は、クロックイネーブル信号［B2_CLK_ENB］、［X_CLK_ENB_1］、［LX_CLK_ENB_1］、［RR_CLK_ENB］を順次“１”とすることで、保持回路２３Ａ、２３Ｂ、２３Ｃ、２３Ｄのクロック信号ＣＬＫを順次有効化させる。
【００５１】
ステップＳ５において、演算器２２は、演算命令に基づく演算を実行する。すなわち、演算器２２は、演算命令に係るデータ（保持回路２３Ｂから供給されるデータＤ２）について演算を行う。その後、処理は、ステップＳ１に戻される。
【００５２】
ステップＳ６において、主制御回路１０は、命令列が、電源ノイズを発生し得る特定の状態であるか否かを判定する。主制御回路１０は、例えば、複数の演算回路２０が一斉に停止状態から稼働状態または稼働状態から停止状態に移行にすることを命令列が示している場合、当該命令列が電源ノイズを発生し得る特定の状態であると判定する。主制御回路１０は、命令列が、電源ノイズを発生し得る特定の状態ではないと判定した場合、処理をステップＳ７に移行し、命令列が、電源ノイズを発生し得る特定の状態であると判定した場合、処理をステップＳ９に移行する。
【００５３】
ステップＳ７において、主制御回路１０は、クロックイネーブル信号［B2_CLK_ENB］、［X_CLK_ENB_1］、［LX_CLK_ENB_1］、［RR_CLK_ENB］を“０”とすることで、保持回路２３Ａ、２３Ｂ、２３Ｃ、２３Ｄのクロック信号ＣＬＫを無効化させる。
【００５４】
ステップＳ８において、主制御回路１０は、演算命令ではない命令（例えばロード命令等）を実行する。その後、処理はステップＳ１に戻される。
【００５５】
ステップＳ９において、主制御回路１０は、制御信号［PR_ENB］を“１”とすることで、演算回路２０に電流底上げ動作を実行させる。これに応じて、副制御回路２１は、クロックイネーブル信号［X_CLK_ENB_2］、［LX_CLK_ENB_2］を“１”とすることで、保持回路２３Ｂ、２３Ｃのクロック信号ＣＬＫを有効化させる。
【００５６】
ステップＳ１０において、副制御回路２１は、ダミーデータ［B2_DATA］をセレクタ２４Ａに供給するとともにダミーデータ［B2_DATA］を選択すべきことを示す選択信号［B2_SEL］をセレクタ２４Ａに供給する。また、副制御回路２１は、ダミーデータ［X_DATA］をセレクタ２４Ｂに供給するとともにダミーデータ［X_DATA］を選択すべきことを示す選択信号［X_SEL］をセレクタ２４Ｂに供給する。
【００５７】
ステップＳ１１において、演算器２２は、ダミーデータ［B2_DATA］、［X_DATA］について演算を実行する。このように演算命令に基づく演算を実行しない演算器２２に、ダミーデータ［B2_DATA］、［X_DATA］について演算を実行させることで、電流底上げ動作が実現される。その後、処理は、ステップＳ１に戻される。
【００５８】
ステップＳ１２において、主制御回路１０は、演算器２２によるダミーデータ［B2_DATA］、［X_DATA］についての演算と並行して、演算命令ではない命令を実行する。その後、処理はステップＳ１に戻される。
【００５９】
命令列に実行すべき命令が含まれていない場合、ステップＳ１３において、主制御回路１０は、命令列が、電源ノイズを発生し得る特定の状態であるか否かを判定する。主制御回路１０は、例えば、複数の演算回路２０が一斉に停止状態から稼働状態または稼働状態から停止状態に移行にすることを命令列が示している場合、当該命令列が電源ノイズを発生し得る特定の状態であると判定する。主制御回路１０は、命令列が、電源ノイズを発生し得る特定の状態であると判定した場合、処理をステップＳ１４に移行し、命令列が、電源ノイズを発生し得る特定の状態ではないと判定した場合、処理を終了させる。
【００６０】
ステップＳ１４において、主制御回路１０は、制御信号［PR_ENB］を“１”とすることで、演算回路２０に電流底上げ動作を実行させる。これに応じて、副制御回路２１は、クロックイネーブル信号［X_CLK_ENB_2］、［LX_CLK_ENB_2］を“１”とすることで、保持回路２３Ｂ、２３Ｃのクロック信号ＣＬＫを有効化させる。
【００６１】
ステップＳ１５において、副制御回路２１は、ダミーデータ［B2_DATA］をセレクタ２４Ａに供給するとともにダミーデータ［B2_DATA］を選択すべきことを示す選択信号［B2_SEL］をセレクタ２４Ａに供給する。また、副制御回路２１は、ダミーデータ［X_DATA］をセレクタ２４Ｂに供給するとともにダミーデータ［X_DATA］を選択すべきことを示す選択信号［X_SEL］をセレクタ２４Ｂに供給する。
【００６２】
ステップＳ１６において、演算器２２は、ダミーデータ［B2_DATA］、［X_DATA］について演算を実行する。このように、演算命令に基づく演算を実行しない演算器２２に、ダミーデータ［B2_DATA］、［X_DATA］について演算を実行させることで、電流底上げ動作が実現される。
【００６３】
以上のように、開示の技術の実施形態に係るプロセッサ１によれば、供給される命令列に演算命令が含まれている場合、演算器２２は、当該演算命令に係るデータ（保持回路２３Ｂから供給されるデータＤ２）について演算を行う。一方、命令列に実行すべき命令が含まれていないか、命令列に演算命令が含まれていない場合には、命令列が、電源ノイズを発生し得る特定の状態である場合に、演算器２２は、ダミーデータ［B2_DATA］、［X_DATA］について演算を実行する。演算器２２が、ダミーデータ［B2_DATA］、［X_DATA］について演算を実行することで、演算回路２０の基底状態における回路電流が底上げされる。これにより、ピーク状態における回路電流の大きさと、基底状態における回路電流の大きさとの差が小さくなり、電源ノイズが抑制される。
【００６４】
図７は、開示の技術の実施形態に係る演算回路２０の制御態様の一例を示すタイムチャートである。演算回路２０が停止状態（リテンションステート）にある場合、制御信号[RS]が“１”とされる。この状態において、命令列が電源ノイズを発生し得る特定の状態にあることを主制御回路１０が検出すると、主制御回路１０は、制御信号［PR_ENB］を“１”に遷移させる（時刻ｔ１）。これに応じて副制御回路２１は、クロックイネーブル信号［X_CLK_ENB_2］、［LX_CLK_ENB_2］及び選択信号［B2_SEL］、［X_SEL］を“１”に遷移させる。これにより、演算回路２０において電流底上げ動作が開始される。電流底上げ動作時において、演算器２２は、ダミーデータ[B2_DATA]、［X_DATA］について演算を行う。
【００６５】
時刻ｔ２において、主制御回路１０が制御信号［RS］を“０”に遷移させると、演算回路２０が稼働状態に移行する。演算回路２０が稼働状態にある間、［B2_VALID］、［X_VALID］、［LX_VALID］が“１”となると、クロックイネーブル信号［X_CLK_ENB_2］、［LX_CLK_ENB_2］及び選択信号［B2_SEL］、［X_SEL］は“０”となる。すなわち、演算回路２０が演算命令を実行する場合、電流底上げ動作が停止され、演算器２２は、演算命令に基づく演算を行う。一方、演算回路２０が演算命令を実行せず且つ制御信号［PR_ENB］が“１”とされている場合、演算回路２０において電流底上げ動作が実行される。電流底上げ動作時において、演算器２２は、ダミーデータ[B2_DATA]、［X_DATA］について演算を行う。
【００６６】
時刻ｔ３において、主制御回路１０が制御信号［RS］を“１”に遷移させると、演算回路２０が停止状態（リテンションステート）に移行する。その後、命令列が電源ノイズを発生し得る特定の状態ではない状態となると、主制御回路１０は、制御信号［PR_ENB］を“０”に遷移させる（時刻ｔ４）。これにより、クロックイネーブル信号［X_CLK_ENB_2］、［LX_CLK_ENB_2］及び選択信号［B2_SEL］、［X_SEL］は“０”となり、演算回路２０において、電流底上げ動作が停止する。
【００６７】
図８は、比較例に係る演算回路２０Ｘの構成を示す回路ブロック図である。比較例に係る演算回路２０Ｘは、開示の技術の実施形態に係る演算回路２０（図４参照）が有する、副制御回路２１、セレクタ２４Ａ、２４Ｂ、ＯＲゲート２５Ａ、２５Ｂを備えていない。
【００６８】
図９は、比較例に係る演算回路２０Ｘの制御態様の一例を示すフローチャートである。この例では、開示の技術の実施形態に係るフローチャート（図６）におけるステップＳ６、Ｓ９〜Ｓ１６において実施される各処理が省略されている。すなわち、この比較例に係る制御態様によれば、演算命令が存在する場合には、保持回路２３Ａ〜２３Ｄの各クロック信号ＣＬＫが有効化され、演算命令が存在しない場合には、保持回路２３Ａ〜２３Ｄのクロック信号ＣＬＫが無効化される。この態様によれば、演算回路２０Ｘの基底状態における回路電流の大きさと、ピーク状態における回路電流の大きさとの差が大きくなり、電源ノイズが大きくなる。
【００６９】
図１０は、比較例に係る演算回路２０Ｘの制御態様の他の例を示すフローチャートである。この例では、図９に示すフローチャートに対して、ステップＳ２１〜Ｓ２３が追加されている。すなわち、この比較例に係る制御態様によれば、実行すべき命令が存在しない場合、ステップＳ２１において、命令列が、電源ノイズを発生し得る特定の状態であるか否が判定される。命令列が、電源ノイズを発生し得る特定の状態ではないと判定された場合、ステップＳ２２において、保持回路２３Ａ〜２３Ｄの各クロック信号ＣＬＫが無効化される。一方、命令列が、電源ノイズを発生し得る特定の状態であると判定された場合、ステップＳ２３において、保持回路２３Ａ〜２３Ｄの各クロック信号ＣＬＫが有効化される。この比較例に係る制御態様によれば、実行すべき命令が存在せず、電源ノイズが発生し得る場合に、省電力制御を実現するためのクロックゲーティング技術によるクロック信号の無効化が解除され、これによって回路電流が増加する。しかしながら、クロック信号の無効化を解除したことによる電流増加量だけでは十分な電流量を獲得することは困難な場合があり、電源ノイズを許容範囲にまで抑えることができない場合がある。
【００７０】
図１１は、比較例に係る演算回路２０Ｘの制御態様の他の例を示すフローチャートである。この例では、図９に示すフローチャートに対して、ステップＳ３１、Ｓ３２が追加されている。すなわち、この比較例に係る制御態様によれば、演算命令が存在する場合に、ステップＳ３１において、命令列が、電源ノイズを発生し得る特定の状態であるか否が判定される。命令列が、電源ノイズを発生し得る特定の状態であると判定された場合、ステップＳ３２において、プリアクセス命令及びアクセスエンド命令が実行される。プリアクセス命令とは、回路資源の一部をダミーで動作させることにより、その回路資源に対する省電力制御を段階的に無効化する命令である。アクセスエンド命令とは、回路資源に対する省電力制御を段階的に有効化する命令である。この比較例に係る制御態様によれば、プリアクセス命令によって回路電流が増加する。しかしながら、回路電流の大きさは、そのときに演算器２２に入力されるデータに依存することとなり、電源ノイズを許容範囲にまで抑えることが困難な場合がある。
【００７１】
一方、開示の技術の実施形態に係る演算回路２０の制御態様によれば、電源ノイズが発生し得る場合に、演算命令に基づく本来の演算を行わない演算器２２が、ダミーデータ［B2_DATA］、［X_DATA］を用いて演算を行う。回路電流の底上げにダミーデータ［B2_DATA］、［X_DATA］を用いることで、演算器２２の演算結果であるデータＤ３の各ビットの値が例えば、“０”から“１”または“１”から“０”に反転するような演算を演算器２２に繰り返し行わせることが可能となる。これにより、回路電流の底上げを効果的に行うことが可能である。また、ダミーデータ［B2_DATA］、［X_DATA］を構成するデータパターンを適宜選択することで、回路電流の底上げ量を調整することも可能である。従って、開示の技術の実施形態に係るプロセッサ１によれば、回路電流の変動に伴う電源ノイズを効果的に抑制することが可能となる。
【００７２】
［第２の実施形態］
図１２は、開示の技術の第２の実施形態に係る演算回路２０の制御態様の一例を示すタイムチャートである。本実施形態において、主制御回路１０は、コア１００が備える８つの演算回路２０の各々に対応する８つの制御信号［PW_DATA[0]］〜［PW_DATA[7]］を、対応する演算回路２０に個別に供給する。
【００７３】
主制御回路１０は、制御信号［RS］が“１”から“０”に遷移するタイミング（すなわち、演算回路２０が停止状態（リテンションステート）から稼働状態に移行するタイミング）に合わせて、制御信号［PW_DATA[0]］〜［PW_DATA[7]］を段階的に“０”から“１”に遷移させる。これにより、各演算回路２０が停止状態（リテンションステート）から稼働状態に移行する際に、各演算回路２０において、電流底上げ動作が段階的に実行される。
【００７４】
また、主制御回路１０は、制御信号［RS］が“０”から“１”に遷移するタイミング（すなわち、演算回路２０が稼働状態から停止状態（リテンションステート）に移行するタイミング）に合わせて、制御信号［PW_DATA[0]］〜［PW_DATA[7]］を段階的に“１”から“０”に遷移させる。これにより、各演算回路２０が稼働状態から停止状態（リテンションステート）に移行する際に、各演算回路２０において、電流底上げ動作が段階的に解除される。
【００７５】
例えば、ＳＩＭＤ（Single Instruction Multiple Data）動作の切り替え時のように、稼働／停止がコア単位で生じる場合、電流底上げ動作の実行及び解除を、コア１００を構成する複数の演算回路２０に対して一括して行うと、電源ノイズが発生するおそれがある。開示の技術の第２の実施形態に係る演算回路２０の制御態様によれば、制御信号［PW_DATA[0]］〜［PW_DATA[7]］が段階的に遷移するので、電流底上げ動作の実行及び解除を、コア１００を構成する複数の演算回路２０に対して段階的に行うことが可能となる。従って、ＳＩＭＤ動作の切り替え時のように、稼働／停止がコア単位で生じる場合でも電源ノイズの発生を抑制することが可能となる。
【００７６】
なお、コア１００は、開示の技術における半導体装置の一例である。演算器２２は、開示の技術における演算部の一例である。主制御回路１０及び副制御回路２１は、開示の技術における制御部の一例である。データＤ１、Ｄ２は、開示の技術における第１のデータの一例である。ダミーデータ［B2_DATA］、［X_DATA］は、開示の技術における第２のデータの一例である。セレクタ２４Ａ、２４Ｂは、開示の技術における選択部の一例である。
【００７７】
以上の実施形態に関し、更に以下の付記を開示する。
【００７８】
（付記１）
入力されたデータについて演算を行う演算部と、
供給される命令列に演算命令が含まれている場合、当該演算命令の演算対象である第１のデータについて前記演算部に演算を行わせ、前記命令列に演算命令が含まれておらず、前記命令列が特定の状態にある場合、前記第１のデータとは異なる第２のデータについて前記演算部に演算を行わせる制御部と、
を含む半導体装置。
【００７９】
（付記２）
前記第１のデータ及び前記第２のデータのうちのいずれか一方を選択して、前記演算部に供給する選択部を更に含む
付記１に記載の半導体装置。
【００８０】
（付記３）
前記第２のデータは、互いに異なる複数のデータパターンを含み、
前記制御部は、前記演算部に前記複数のデータパターンを順次供給する
付記１または付記２に記載の半導体装置。
【００８１】
（付記４）
前記複数のデータパターンは、前記演算部の出力ビットの少なくとも１つの値が反転している
付記３に記載の半導体装置。
【００８２】
（付記５）
複数の演算部を含み、
前記制御部は、前記第２のデータについて演算を行わせる制御を、前記複数の演算部に対して段階的に行う
付記１から付記４のいずれか１つに記載の半導体装置。
【００８３】
（付記６）
前記制御部は、
前記命令列が前記特定の状態にあることを示す制御信号を出力する主制御回路と、
前記制御信号に基づいて、前記第１のデータ及び前記第２のデータのうち前記第２のデータを選択すべき選択信号を前記選択部に供給する副制御回路と、を含む
付記２に記載の半導体装置。
【００８４】
（付記７）
半導体装置の制御方法において、
前記半導体装置が有する演算部が、入力されたデータについて演算を行い、
供給される命令列に演算命令が含まれている場合、前記半導体装置が有する制御部が、当該演算命令の演算対象である第１のデータについて前記演算部に演算を行わせ、前記命令列に演算命令が含まれておらず、前記命令列が特定の状態にある場合、前記制御部が、前記第１のデータとは異なる第２のデータについて前記演算部に演算を行わせる、
半導体装置の制御方法。
【００８５】
（付記８）
前記半導体装置が有する選択部が、前記第１のデータ及び前記第２のデータのうちのいずれか一方を選択して、前記演算部に供給する
付記７に記載の制御方法。
【００８６】
（付記９）
前記第２のデータは、互いに異なる複数のデータパターンを含み、
前記制御部が、前記演算部に前記複数のデータパターンを順次供給する
付記７または付記８に記載の制御方法。
【００８７】
（付記１０）
前記複数のデータパターンは、前記演算部の出力ビットの少なくとも１ビットの値が反転している
付記９に記載の制御方法。
【００８８】
（付記１１）
前記制御部が、前記第２のデータについて演算を行わせる制御を、複数の演算部に対して段階的に行う
付記７から付記１０のいずれか１つに記載の制御方法。
【符号の説明】
【００８９】
１  プロセッサ
１０  主制御回路
２０  演算回路
２１  副制御回路
２２  演算器
２３Ａ、２３Ｂ、２３Ｃ、２３Ｄ  保持回路
２４Ａ、２４Ｂ  セレクタ
１００  コア
【図１】
2019212101.tif 000004
【図２】
2019212101.tif 000005
【図３】
2019212101.tif 000006
【図４】
2019212101.tif 000007
【図５】
2019212101.tif 000008
【図６】
2019212101.tif 000009
【図７】
2019212101.tif 000010
【図８】
2019212101.tif 000011
【図９】
2019212101.tif 000012
【図１０】
2019212101.tif 000013
【図１１】
2019212101.tif 000014
【図１２】
2019212101.tif 000015