(57)【要約】  本発明の半導体集積回路は、第１クロックで動作するシステムバスと、前記システムバスに接続され、第２クロックで動作する第１演算処理装置を含む複数の演算処理装置と、前記システムバス及び前記演算処理装置を制御する制御回路とを有し、前記制御回路は、前記演算処理装置から前記システムバスへのアクセスが発生していないことを確認した後に、前記第１クロック又は第２クロックの周波数を変更する。
2014006722.tif 000002
【特許請求の範囲】
【請求項１】
第１クロックで動作するシステムバスと、  前記システムバスに接続され、第２クロックで動作する第１演算処理装置を含む複数の演算処理装置と、  前記システムバスおよび前記演算処理装置を制御する制御回路と、を有し、  前記制御回路は、前記演算処理装置から前記システムバスへのアクセスが発生していないことを確認した後に、前記第１クロックまたは前記第２クロックの周波数を変更する、  ことを特徴とする半導体集積回路。
【請求項２】
前記各演算処理装置、該演算処理装置に対応して設けられたスルー回路、および、当該演算処理装置に対応して設けられたスヌープ回路は、それぞれ演算ブロックに設けられ、  前記各演算処理装置のクロック信号は、当該演算処理装置が設けられた演算ブロックに含まれる回路に対して与えられる、  ことを特徴とする請求項１に記載の半導体集積回路。
【請求項３】
前記スルー回路は、  前記演算処理装置および前記システムバスにおいて、送信側の信号のクロック周波数を、受信側の信号のクロック周波数に同期させる同期化回路と、  前記送信側の信号、または、前記同期化回路により前記受信側の信号のクロック周波数に同期された信号のいずれかを選択するセレクタと、を有する、  ことを特徴とする請求項２に記載の半導体集積回路。
【請求項４】
前記セレクタは、  前記演算処理装置のクロック周波数と前記システムバスのクロック周波数が異なる場合、前記同期化回路により前記受信側の信号のクロック周波数に同期された信号を選択して出力し、  前記演算処理装置のクロック周波数と前記システムバスのクロック周波数が等しい場合、前記送信側の信号を選択して出力する、  ことを特徴とする請求項３に記載の半導体集積回路。
【請求項５】
前記制御回路は、  前記第１クロックの周波数を変更する際、前記複数の演算処理装置からの全てのアクセスが発生していないことを確認してから実行する、  ことを特徴とする請求項２乃至請求項４のいずれか一項に記載の半導体集積回路。
【請求項６】
前記制御回路は、  前記スヌープ回路により検出した前記演算処理装置の全てのアクセスリクエストが発生していないことを確認した後、前記システムバスのクロック周波数を変更する、  ことを特徴とする請求項５に記載の半導体集積回路。
【請求項７】
前記制御回路は、  前記第２クロックの周波数を変更する際、前記第１演算処理装置からのアクセスが発生していないことを確認してから実行する、  ことを特徴とする請求項２乃至請求項４のいずれか一項に記載の半導体集積回路。
【請求項８】
前記制御回路は、  前記スヌープ回路により検出した前記第１演算処理装置からのアクセスリクエストが発生していないことを確認した後、前記第１演算処理装置のクロック周波数を変更する、  ことを特徴とする請求項７に記載の半導体集積回路。
【請求項９】
前記各スルー回路は、さらに、  前記各演算処理装置からのアクセスリクエストに従うことなく、クロック周波数の変更中、前記演算処理装置からのアクセスリクエストを遮断するアクセスセレクタを有する、  ことを特徴とする請求項２乃至請求項８のいずれか一項に記載の半導体集積回路。
【請求項１０】
前記制御回路は、  前記複数の演算処理装置における第２演算処理装置が前記システムバスに対するアクセスを実行中に、前記複数の演算処理装置における第３演算処理装置が前記システムバスのクロック周波数を変更する際、前記システムバスに対する前記第２演算処理装置のアクセスが完了したのを確認した後、前記システムバスのクロック周波数を変更する、  ことを特徴とする請求項１乃至請求項９のいずれか一項に記載の半導体集積回路。
【請求項１１】
前記複数の演算処理装置および前記システムバスは、それぞれ電源電圧およびクロック周波数が独立に制御される、  ことを特徴とする請求項１乃至請求項１０のいずれか一項に記載の半導体集積回路。
【請求項１２】
システムバスおよび該システムバスに接続された複数の演算処理装置を有する半導体集積回路の制御方法であって、  前記複数の演算処理装置および前記システムバスは、それぞれ電源電圧およびクロック周波数が独立に制御され、  前記演算処理装置から前記システムバスへのアクセスが発生していないことを確認した後に、前記第１クロックまたは前記第２クロックの周波数を変更する、  ことを特徴とする半導体集積回路の制御方法。
【請求項１３】
システムバスおよび該システムバスに接続された複数の演算処理装置を有する半導体集積回路の制御方法であって、  前記複数の演算処理装置および前記システムバスは、それぞれ電源電圧およびクロック周波数が独立に制御され、  前記演算処理装置における第１演算処理装置のクロック周波数を変更する際、該第１演算処理装置からのアクセスが発生していないことを確認してから実行する、  ことを特徴とする半導体集積回路の制御方法。
【請求項１４】
前記システムバスのクロック周波数に等しいクロック周波数で動作する演算処理装置は、当該演算処理装置および前記システムバスにおける送信側の信号を、そのまま受信側の信号として出力し、  前記システムバスのクロック周波数とは異なるクロック周波数で動作する演算処理装置は、当該演算処理装置および前記システムバスにおける送信側の信号を、受信側の信号のクロック周波数に同期させて出力する、  ことを特徴とする請求項１２または請求項１３に記載の半導体集積回路の制御方法。
【請求項１５】
前記複数の演算処理装置における、前記システムバスに対するアクセスを行っていない演算処理装置は、  前記クロック周波数の変更を行っている間、当該演算処理装置で実行中の処理を継続する、  ことを特徴とする請求項１２乃至請求項１４のいずれか一項に記載の半導体集積回路の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】  この出願で言及する実施例は、半導体集積回路およびその制御方法に関する。
【背景技術】
【０００２】  近年、半導体集積回路に対して、低消費電力化が強く求められており、その低消費電力化を実現するものとして、例えば、ＤＶＦＳ(Dynamic Voltage Frequency Scaling)と呼ばれる技術が注目されている。【０００３】  従来、ＤＶＦＳとして、演算処理装置(ＣＰＵ)のクロック周波数と電源電圧を、システムに求められる処理負荷に応じて制御することで、ＣＰＵが消費する電力を最適化する技術が提案されている(例えば、特許文献１および特許文献２参照)。【０００４】  また、従来、システムバスのクロック周波数と電源電圧を、システムバスを介して転送されるデータ量に応じて制御することで、システムバスが消費する電力を最適化する技術も提案されている(例えば、特許文献３参照)。【０００５】  さらに、従来、ＣＰＵにクロックの供給を続けたまま、そのクロック周波数を切り替えたときのＣＰＵの不安定動作を低減する技術も提案されている(例えば、特許文献４参照)。【０００６】  また、近年、半導体集積回路の製造技術の向上に伴って、複数のプロセッサコアＩＰ(Intellectual property)を１つのＬＳＩチップ内に集積した製品が実用化されている(例えば、特許文献５参照)。そのような製品では、１つのシステムバス(内部バス)に複数のＣＰＵコアが接続されることになる。【０００７】  さらに、従来、異なるクロック周波数で動作している２つの回路の間で信号を遣り取りする際、受信側回路が正しい値の信号を受信できるように，フリップフロップ(ＦＦ)を用いた同期化回路を適用する技術も提案されている(例えば、特許文献６参照)。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００３−３２４７３５号公報
【特許文献２】特開２００５−２１０５２５号公報
【特許文献３】特開２０１１−１０１３７２号公報
【特許文献４】特開２００８−０９２０１０号公報
【特許文献５】特開２００６−２６０５６８号公報
【特許文献６】特開２０００−０７８１２２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】  ところで、例えば、同期化回路を適用して異なるクロック周波数で動作している２つの回路の間、例えば、ＣＰＵとシステムバスの間で信号を遣り取りするシステムが考えられる。また、近年、システムバスに対して複数のＣＰＵコア(ＣＰＵ)を接続し、処理を高速化するＬＳＩも提供されている。【００１０】  このような複数のＣＰＵおよびシステムバスに対してＤＶＦＳ技術を適用する場合、例えば、システムバスのクロック周波数を変化させると、各ＣＰＵの同期化回路を制御し、或いは、全てのＣＰＵの動作を停止するといった性能低下を招く処理を行うことになる。【００１１】  本発明の目的は、半導体集積回路の性能低下を抑えつつ、消費電力の低減を図ることである。
【課題を解決するための手段】
【００１２】  一実施形態によれば、第１クロックで動作するシステムバスと、複数の演算処理装置と、前記システムバスおよび前記演算処理装置を制御する制御回路と、を有する半導体集積回路が提供される。【００１３】  前記複数の演算処理装置は、前記システムバスに接続され、第２クロックで動作する第１演算処理装置を含む。前記制御回路は、前記演算処理装置から前記システムバスへのアクセスが発生していないことを確認した後に、前記第１クロックまたは前記第２クロックの周波数を変更する。
【発明の効果】
【００１４】  開示の半導体集積回路およびその制御方法は、半導体集積回路の性能低下を抑えつつ、ＤＶＦＳ技術による消費電力の低減を図ることができるという効果を奏する。
【図面の簡単な説明】
【００１５】
【図１】図１は、半導体集積回路の一実施例の全体構成を示すブロック図である。
【図２】図２は、図１に示す半導体集積回路におけるクロック生成器の一例を示すブロック図である。
【図３】図３は、図１に示す半導体集積回路におけるスルー回路の一例をより詳細に示すブロック図である。
【図４】図４は、図３に示すスルー回路において、ＣＰＵとシステムバスのクロック周波数が同一の場合のデータ読み出し動作を説明するためのタイミング図である。
【図５】図５は、図３に示すスルー回路において、ＣＰＵとシステムバスのクロック周波数が同一の場合のデータ書き込み動作を説明するためのタイミング図である。
【図６】図６は、図３に示すスルー回路において、ＣＰＵとシステムバスのクロック周波数が異なる場合のデータ書き込み動作を説明するためのタイミング図である。
【図７】図７は、クロック周波数および電源電圧の変更処理の一例を説明するためのフローチャートである。
【図８】図８は、ＣＰＵがシステムバスのクロック周波数を変更する動作の一例を説明するための図である。
【図９】図９は、ＣＰＵがシステムバスのクロック周波数を変更する動作の他の例を説明するための図である。
【図１０】図１０は、ＣＰＵがシステムバスのクロック周波数を変更した後の動作の一例を説明するための図である。
【図１１】図１１は、制御回路の状態遷移マシンの一例を示す図である。
【発明を実施するための形態】
【００１６】  以下、半導体集積回路およびその制御方法の実施例を、添付図面を参照して詳述する。図１は、半導体集積回路の一実施例の全体構成を示すブロック図である。
【００１７】  図１において、参照符号１は半導体集積回路(ＬＳＩ)、２はシステムバス(内部バス)、３は制御回路、４はクロック生成器、５はＤＣ−ＤＣコンバータ、６１〜６ｎは周辺回路、そして、101〜10mは演算ブロックを示す。
【００１８】  各演算ブロック101〜10mは、それぞれＣＰＵコア111〜11m(ＣＰＵ１〜ＣＰＵｍ)、スルー回路121〜12m、および、スヌープ回路131〜13mを含む。
【００１９】  ここで、スルー回路121〜12mは、後に詳述するが、ＣＰＵコア111〜11mおよびシステムバス２において、送信側の信号、または、送信側の信号のクロック周波数を受信側の信号のクロック周波数に同期させた信号のいずれかを選択して出力する。
【００２０】  また、スヌープ回路131〜13mは、各ローカルキャッシュの内容を一致させるためのものではなく、後に詳述するように、対応するＣＰＵコア111〜11mからのリクエスト信号をスヌープするための回路である。すなわち、スヌープ回路131〜13mは、例えば、ＣＰＵコア111〜11mの全てのアクセスリクエストが発生していないことを確認(探索：スヌープ)するための回路である。
【００２１】  なお、ＣＰＵコア111〜11mのアクセスリクエストとは、例えば、あるＣＰＵコアがシステムバス２に対し、或いは、システムバス２を介して他のＣＰＵコアまたはクロック生成器４や周辺回路６１〜６ｎに対するアクセスの要求である。
【００２２】  図１に示されるように、演算ブロック101(102〜10mも同様)において、ＣＰＵコア111(プロセッサコアＩＰ)からシステムバス２への信号は、スルー回路121およびスヌープ回路131を介して入力される。また、システムバス２からＣＰＵコア111への信号は、スルー回路121を介して入力される。ここで、システムバス２には、例えば、クロック生成器４、n個の周辺回路６１〜６ｎ、および、ＤＣ−ＤＣコンバータ５が接続されている。
【００２３】  クロック生成器４は、ＬＳＩ１の外部から基準クロック信号となるクロックＦｉを受け取り、ＣＰＵコア111〜11mに供給するクロックＦ１〜Ｆｍ、および、クロックＦｓを生成して出力する。なお、クロックＦｓは、例えば、システムバス２、周辺回路６１〜６ｎ、および、ＤＣ−ＤＣコンバータ５に入力される。
【００２４】  ＤＣ−ＤＣコンバータ５は、ＬＳＩ１の外部から供給される電源電圧Ｖｉを受け取り、ＣＰＵコア111〜11mに供給する電源電圧Vdd1〜Vddm、並びに、システムバス２および周辺回路６１〜６ｎに供給する電源電圧Vddsを生成して出力する。なお、Vdd1〜VddmおよびVddsの電圧レベルは、例えば、ＤＣ−ＤＣコンバータ５が内部に持つ設定レジスタに書き込まれた値に応じて制御される。
【００２５】  ここで、各演算ブロック101〜10mに対しては、それぞれ専用のクロックＦ１〜Ｆｍおよび電源電圧Vdd1〜Vddmが与えられている。すなわち、各ＣＰＵコア111〜11mのクロックＦ１〜Ｆｍと電源電圧Vdd1〜Vddmは、ＤＶＦＳ技術により、システム(ＬＳＩ１)に求められる処理負荷に応じて制御されるようになっている。
【００２６】  具体的に、演算ブロック101は、ＣＰＵコア111，スルー回路121およびスヌープ回路131を含み、これらの回路に対しては、クロック生成器４からのクロックＦ１およびＤＣ−ＤＣコンバータ５からの電源電圧Vdd1が供給される。
【００２７】  また、演算ブロック102は、ＣＰＵコア112，スルー回路122およびスヌープ回路132を含み、これらの回路に対しては、クロック生成器４からのクロックＦ２およびＤＣ−ＤＣコンバータ５からの電源電圧Vdd2が供給される。
【００２８】  さらに、演算ブロック10mは、ＣＰＵコア11m，スルー回路12mおよびスヌープ回路13mを含み、これらの回路に対しては、クロック生成器４からのクロックＦｍおよびＤＣ−ＤＣコンバータ５からの電源電圧Vddmが供給される。
【００２９】  そして、他の回路、すなわち、システムバス２、制御回路３、クロック生成器４、および、周辺回路６１〜６ｎに対しては、ＤＣ−ＤＣコンバータ５からの電源電圧Vddsが供給される。また、システムバス２、制御回路３、ＤＣ−ＤＣコンバータ５、および、周辺回路６１〜６ｎに対しては、クロック生成器４からのクロックＦｓが供給される。
【００３０】  制御回路３は、クロック生成器４からの変更完了信号ＣＣＳ、並びに、スヌープ回路131〜13mからのスヌープ信号１〜ｍ("SNOOP DONE1〜SNOOP DONEm")を受け取る。そして、制御回路３は、スルー回路121〜12mに対して制御信号CNT1〜CNTmおよび選択信号SEL1〜SELmを出力する。
【００３１】  以上において、システムバス２としては、例えば、ＡＨＢ(Advanced High performance Bus：登録商標)およびＡＰＢ(Advanced. Peripheral Bus)等を適用することができる。また、システムバス２は、例えば、ＡＸＩ(Advanced eXtensible Interface)、ＯＣＰ(Open Core Protocol)およびＮＩＦ(Native Application Interface)などの標準化されたプロトコルに基づいて動作するバスであってもよい。さらに、ＬＳＩ設計者が独自に設計したプロトコルに基づいて動作するバスを、システムバス２として適用することもできる。
【００３２】  なお、各周辺回路６１〜６ｎとしては、例えば、システムタイマー、ＤＭＡ(Direct Memory Access)コントローラ、ＡＤ(Analog-to-digital)コンバータ、および、ＤＡ(Digita-to-analog)コンバータなどである。
【００３３】  また、各周辺回路６１〜６ｎとしては、例えば、ＳＰＩ(Serial Peripheral Interface Bus)インターフェースやＰＷＭ(Pulse width modulation)インターフェースなどを適用することができる。さらに、各周辺回路６１〜６ｎとしては、例えば、ＵＡＲＴ(Universal Asynchronous Receiver/Transmitter)インターフェース、および、ＧＰＩＯ(General Purpose Input/Output)インターフェースなどであってもよい。
【００３４】  このように、図１に示すＬＳＩ(半導体集積回路)１は、各演算ブロック101〜10mのクロックＦ１〜Ｆｍの周波数および電源電圧Vdd1〜Vddm、並びに、システムバス２や周辺回路６１〜６ｎのクロックＦｓの周波数および電源電圧Vddsが独立に制御可能となっている。
【００３５】  図２は、図１に示す半導体集積回路におけるクロック生成器の一例を示すブロック図である。図２に示されるように、クロック生成器４は、それぞれがＰＬＬ(Phase Locked Loop)回路および分周回路を有するｐ個のクロック生成ブロック401〜40p、制御レジスタ４１、並びに、ｍ＋１個のセレクタ42sおよび421〜42mを含む。
【００３６】  ここで、ＰＬＬ回路は、それぞれ入力するクロックＦｉを元にフィードバック制御を行って位相同期した信号を出力し、また、分周回路は、ＰＬＬ回路の出力信号の周波数を整数分の１に分周した信号(クロック)を出力する。
【００３７】  なお、各クロック生成ブロック401〜40pにおけるＰＬＬ回路は、制御レジスタ４１からの逓倍率制御信号MR1〜MRpによりそれぞれの逓倍率が制御される。また、各クロック生成ブロック401〜40pにおける分周回路は、制御レジスタ４１からの分周率制御信号DR1〜DRpによりそれぞれの分周率(分周比)が制御される。
【００３８】  これにより、クロック生成ブロック401〜40pは、入力クロック信号Ｆｉが、制御レジスタ４１からの逓倍率制御信号MR1〜MRpおよび分周率制御信号DR1〜DRpに従って制御されたクロックｆ１〜ｆｐを出力する。ここで、クロックｆ１〜ｆｐは、例えば、それぞれの周波数(クロック周波数)が異なっている。
【００３９】  クロックｆ１〜ｆｐは、セレクタ４２ｓおよび421〜42mに入力され、制御レジスタ４１からの選択信号sel sおよびsel 1〜sel mに従ったクロックが選択され、セレクタ４２ｓおよび421〜42mからクロックＦｓおよびＦ１〜Ｆｍとして出力される。
【００４０】  なお、制御レジスタ４１は、システムバス２に接続され、例えば、後述するＣＰＵ１(ＣＰＵコア111)に従って各制御信号(MR1〜MRp，DR1〜DRp，sel s，sel 1〜sel m)を保持する。
【００４１】  図３は、図１に示す半導体集積回路におけるスルー回路の一例をより詳細に示すブロック図である。なお、図３では、１つの演算ブロック101およびシステムバス２のみが描かれているが、他の演算ブロック102〜10mも同様である。
【００４２】  ＣＰＵコア111(ＣＰＵ１)とシステムバス２の間では、アクセスリクエストを示す信号ＲＥＱ、書き込みアクセスか読み出しアクセスかを区別する信号ＷＲＩＴＥ、および、アクセス先アドレスを示す信号ＡＤＤＲが遣り取りされる。
【００４３】  さらに、ＣＰＵコア111とシステムバス２の間では、書き込みアクセス時の書き込み値を示す信号ＷＤＡＴＡ、読み出しアクセス時の読み出し値を示す信号ＲＤＡＴＡ、および、アクセスが成立したことを示す信号ＡＣＫが遣り取りされる。
【００４４】  ここで、それぞれ送信元が出力する信号を、ＲＥＱ１，ＷＲＩＴＥ１，ＡＤＤＲ１，ＷＤＡＴＡ１，ＲＤＡＴＡ１およびＡＣＫ１と記載する。また、同期化回路221〜226やセレクタ211〜216を通過して実際に受信先に入力される信号を、ＲＥＱ２，ＷＲＩＴＥ２，ＡＤＤＲ２，ＷＤＡＴＡ２，ＲＤＡＴＡ２およびＡＣＫ２と記載する。
【００４５】  なお、同期化回路221〜226は、後に詳述するが、ＣＰＵコア111およびシステムバス２において、送信側の信号のクロック周波数を、受信側の信号のクロック周波数に同期させるための回路である。
【００４６】  図３に示されるように、ＲＥＱ１とＲＥＱ２の間には、セレクタ(アクセスセレクタ)210，同期化回路221およびセレクタ211が設けられ、ＷＲＩＴＥ１とＷＲＩＴＥ２の間には、同期化回路222およびセレクタ212が設けられている。
【００４７】  さらに、ＡＤＤＲ１とＡＤＤＲ２の間には、同期化回路223およびセレクタ213が設けられ、ＷＤＡＴＡ１とＷＤＡＴＡ２の間には、同期化回路224およびセレクタ214が設けられている。
【００４８】  ここで、同期化回路221〜224は、システムバス２と同じクロックＦｓによりデータの取り込みが制御される２段のフリップフロップ(ＦＦ)を有し、ＣＰＵコア111からの信号を、システムバス２に同期させて出力する。
【００４９】  また、ＲＤＡＴＡ１とＲＤＡＴＡ２の間には、同期化回路225およびセレクタ215が設けられ、ＡＣＫ１とＡＣＫ２の間には、同期化回路226およびセレクタ216が設けられている。
【００５０】  ここで、同期化回路225および226は、ＣＰＵコア111と同じクロックＦ１によりデータの取り込みが制御される２段のＦＦを有し、システムバス２からの信号を、ＣＰＵコア111に同期させて出力する。
【００５１】  なお、セレクタ210は、制御回路３からの選択信号SEL1により制御され、SEL1が『０：低レベル”Ｌ”』のときは、ＣＰＵコア111からのＲＥＱ１を選択して出力し、SEL1が『１：高レベル”Ｈ”』のときは、常に『０』を出力する。
【００５２】  ところで、システムバス２のクロックＦｓの周波数(クロック周波数Ｆｓ)を変更する際、システムバス２との間で信号を遣り取りしていないＣＰＵコアに対してはクロックの供給を継続し、そのＣＰＵコア上でのプログラムの実行を継続させるのが好ましい。すなわち、システムバス２との間で信号の送受信(遣り取り)をしていないＣＰＵコアは、そのＣＰＵコア上でのプログラムの実行を継続させることで、システムの性能低下を低減することができる。
【００５３】  また、ＣＰＵコアのクロック周波数とシステムバス２のクロック周波数Ｆｓが異なる場合、信号の遣り取りは、同期化回路(221〜226)を介して行う。これに対して、ＣＰＵコアおよびシステムバス２の両者のクロック周波数が同じ場合、同期化回路を介さずに信号の遣り取りをして同期化回路による遅延を回避するのが好ましい。
【００５４】  図４および図５は、図３に示すスルー回路において、ＣＰＵとシステムバスのクロック周波数が同一の場合におけるデータ読み出し動作およびデータ書き込み動作を説明するためのタイミング図である。
【００５５】  まず、図４および図５を参照して、演算ブロック101におけるＣＰＵコア111(ＣＰＵ１)のクロックＦ１の周波数(クロック周波数Ｆ１)と、システムバス２のクロックＦｓの周波数が同一の場合におけるアクセスの動作を説明する。
【００５６】  ＣＰＵコア111のクロック周波数Ｆ１とシステムバス２のクロック周波数Ｆｓが同一の場合、制御回路３が出力する制御信号CNT1(CNT1〜CNTm)の値は『１』に保持され、セレクタ211〜214は、入力『１』を選択して出力する。すなわち、信号ＲＥＱ１，ＷＲＩＴＥ１，ＡＤＤＲ１およびＷＤＡＴＡ１は、同期化回路221〜224を通ることなく、そのままＲＥＱ２，ＷＲＩＴＥ２，ＡＤＤＲ２およびＷＤＡＴＡ２として出力される。
【００５７】  同様に、セレクタ215および216も、入力『１』を選択して出力する。すなわち、信号ＲＤＡＴＡ１およびＡＣＫ１は、同期化回路225および226を通ることなく、そのままＲＤＡＴＡ２およびＡＣＫ２として出力される。
【００５８】  従って、信号ＲＥＱ２，ＷＲＩＴＥ２，ＡＤＤＲ２，ＷＤＡＴＡ２，ＲＤＡＴＡ２およびＡＣＫ２は、信号ＲＥＱ１，ＷＲＩＴＥ１，ＡＤＤＲ１，ＷＤＡＴＡ１，ＲＤＡＴＡ１およびＡＣＫ１と同じ値になる。
【００５９】  その結果、ＣＰＵコア111からの出力信号は、遅延なくシステムバス２に入力され、また、システムバス２からの出力信号は、遅延なくＣＰＵコア111に入力されることになる。すなわち、ＣＰＵコアおよびシステムバスの両者のクロック周波数が同じ場合、同期化回路を介さずに信号の遣り取りすることで、同期化回路による遅延を回避するようになっている。
【００６０】  ここで、ＣＰＵコアまたはシステムバスのクロック周波数の変更を指示するマスタ回路は、ＣＰＵｉ(ｉ＝１〜ｍ：ＣＰＵコア111〜11m)であり、また、スレーブ回路は、制御回路３，クロック生成器４，ＤＣ−ＤＣコンバータ５および周辺回路６１〜６ｎである。
【００６１】  従って、例えば、マスタ回路であるＣＰＵコア111(ＣＰＵ１)がスレーブ回路にアクセスしたいとき、ＲＥＱ１を『０』から『１』に変更することで通知を行う。同時に、ＣＰＵコア111は、アクセス先のアドレスをＡＤＤＲ１で送信し、書き込みアクセスか読み出しアクセスかをＷＲＩＴＥ１で送信し、そして、書き込みアクセスの場合の書き込みたい値をＷＲＩＴＥ１で送信する。
【００６２】  システムバス２は、ＡＤＤＲ１のアドレスを元にアクセス先のスレーブ回路を判定し、アクセス先のスレーブ回路に対するアクセスを行う。そして、アクセスが受け付けられた場合、アクセスが受け付けられたことをＡＣＫ１で送信し、さらに、読み出しアクセスの場合の読み出し値をＲＤＡＴＡ１で送信する。
【００６３】  具体的に、図４に示すＣＰＵコア111とシステムバス２のクロック周波数が同一の場合におけるデータ読み出し動作の例では、期間Ｔ２で読み出しアクセスが発生している。すなわち、期間Ｔ２において、ＲＥＱ１が『０』から『１』に変化し、同時に、アクセス先アドレスがＡＤＤＲ１により送信され、また、読み出しアクセスであることがＷＲＩＴＥ１により送信されている。
【００６４】  さらに、期間Ｔ５において、ＡＣＫ１が『０』から『１』に変化することで読み出しアクセスが成立したことが送信され、そして、読み出し値がＲＤＡＴＡ１により送信されている。なお、ＣＰＵコア111は、読み出し値を受け取ってアクセスが完了したので、期間Ｔ６において、ＲＥＱ１を『１』から『０』に変更してアクセスを終了する。
【００６５】  また、図５に示すＣＰＵコア111とシステムバス２のクロック周波数が同一の場合におけるデータ書き込み動作の例では、期間Ｔ１２で書き込みアクセスが発生している。すなわち、期間Ｔ１２において、ＲＥＱ１が『０』から『１』に変化し、同時に、アクセス先アドレスがＡＤＤＲ１により送信され、また、書き込みアクセスであることがＷＲＩＴＥ１により送信されている。
【００６６】  さらに、期間Ｔ１５において、ＡＣＫ１が『０』から『１』に変化することで書き込みアクセスが成立したことが送信され、そして、書き込み値がＷＤＡＴＡ２により送信されている。なお、ＣＰＵコア111は、書き込みアクセスが完了したので、期間Ｔ１６において、ＲＥＱ１を『１』から『０』に変更してアクセスを終了する。
【００６７】  図６は、図３に示すスルー回路において、ＣＰＵとシステムバスのクロック周波数が異なる場合のデータ書き込み動作を説明するためのタイミング図である。すなわち、図６において、演算ブロック101におけるＣＰＵコア111(ＣＰＵ１)のクロックＦ１の周波数とシステムバスのクロックＦｓの周波数は異なっている。
【００６８】  なお、図６において、参照符号Ｔ２１〜Ｔ２９は、ＣＰＵコア111のクロックＦ１に同期したタイミングの期間を示し、また、Ｔ３１〜Ｔ４３は、ステムバスのクロックＦｓに同期したタイミングの期間を示す。
【００６９】  ＣＰＵコア111のクロック周波数Ｆ１とシステムバス２のクロック周波数Ｆｓが異なる場合、制御回路３が出力する制御信号CNT1(CNT1〜CNTm)の値は、『０』に保持され、セレクタ２１２〜２１６は、入力『０』を選択して出力する。
【００７０】  すなわち、信号ＷＲＩＴＥ２，ＡＤＤＲ２，ＷＤＡＴＡ２，ＲＤＡＴＡ２およびＡＣＫ２は、それぞれ信号ＲＥＱ１，ＷＲＩＴＥ１，ＡＤＤＲ１，ＷＤＡＴＡ１，ＲＤＡＴＡ１およびＡＣＫ１が同期化回路221〜226を通った後の値になる。
【００７１】  ここで、同期化回路221〜224は、システムバス２と同じクロックＦｓによりデータの取り込みタイミングが制御される２段のＦＦを有し、ＣＰＵコア111からの信号を、システムバス２に同期させて出力する。
【００７２】  また、同期化回路225および226は、ＣＰＵコア111と同じクロックＦ１によりデータの取り込みタイミングが制御される２段のＦＦを有し、システムバス２からの信号を、ＣＰＵコア111に同期させて出力する。すなわち、各同期化回路221〜226は、受信側の回路のクロック信号で値(同期タイミング)が変化する２段のＦＦを有している。
【００７３】  具体的に、図６に示すＣＰＵコア111とシステムバス２のクロック周波数が異なる場合におけるデータ読み出し動作の例では、期間Ｔ３２において、ＲＥＱ１が『０』から『１』に変化すると、ＲＥＱ２は期間Ｔ２３で『０』から『１』に変化する。すなわち、ＲＥＱ２は、システムバス２のクロックＦｓで信号遷移する２段のＦＦを有する同期化回路221が介在するため、期間Ｔ２３で『０』から『１』に変化する。
【００７４】  同様に、期間Ｔ３２で変化するＷＲＩＴＥ１およびＡＤＤＲ１(ＷＤＡＴＡ１)も、同期化回路222および223(224)を介して、期間Ｔ２３で変化する。また、期間Ｔ２５において、ＡＣＫ１が『０』から『１』に変化すると、ＡＣＫ３は、同期化回路226を介して、期間Ｔ３９で『０』から『１』に変化する。同様に、期間Ｔ２５で変化するＲＤＡＴＡ１も、同期化回路２２５を介して、期間Ｔ３９で変化する。
【００７５】  このように、同期化回路221〜224を介して信号を遣り取りすることにより、システムバス２が受信するＲＥＧ２，ＷＲＩＴＥ２およびＡＤＤＲ２(ＷＤＡＴＡ２)は、システムバス２のクロックＦｓに同期して値が変化する。さらに、同期化回路225および226を介して信号を遣り取りすることにより、ＣＰＵコア111が受信するＡＣＫ２およびＲＤＡＴＡ２は、ＣＰＵコア111のクロック信号Ｆ１に同期して値が変化する。
【００７６】  このように、ＣＰＵコア111とシステムバス２のクロック周波数が異なる場合には、同期化回路221〜226を介在させることによって、それぞれ正しく信号を遣り取りすることができる。
【００７７】  以上のように、任意のＣＰＵｉとシステムバスのクロック信号の切り替えを行わない間は、制御信号CNTiが『１』または『０』を保持し続けることで、上述した動作によって正しく信号の送受信を行うことができる。なお、ＣＰＵｉのクロック周波数とシステムバスのクロック周波数が同じ場合には、図４および図５を参照して説明したように、同期化回路を介在させないことで、遅延が生じない経路での信号の送受信が可能になる。
【００７８】  図７は、クロック周波数および電源電圧の変更処理の一例を説明するためのフローチャートである。なお、図７に示す処理は、ＣＰＵ(ＣＰＵコア111〜11m)のクロック周波数および電源電圧の変更と、システムバス２のクロック周波数および電源電圧の変更の両方とも同様である。
【００７９】  図７に示されるように、クロック周波数および電源電圧の変更処理を開始すると、ステップＳＴ１において、レジスタを読み出して現在のクロック周波数を取得し、そして、ステップＳＴ２に進む。
【００８０】  ステップＳＴ２では、設定したいクロック周波数が現在の値より大きいかどうかを判定し、設定したいクロック周波数が現在の値より大きいと判定すると、ステップＳＴ３に進む。
【００８１】  ステップＳＴ３では、ＤＣ−ＤＣコンバータ５のレジスタに書き込みアクセスして電源電圧を変更する。さらに、ステップＳＴ４に進んで、クロック生成器４のレジスタ(制御レジスタ４１)に書き込みアクセスし、クロック周波数を変更して処理を完了(終了)する。すなわち、設定したいクロック周波数が現在の値より大きい場合には、まず、電源電圧を変更し、その後、クロック周波数を変更する。
【００８２】  一方、ステップＳＴ２において、設定したいクロック周波数が現在の値より大きくないと判定すると、ステップＳＴ５に進む。ステップＳＴ５では、設定したいクロック周波数が現在の値より小さいかどうかを判定し、設定したいクロック周波数が現在の値より小さいと判定すると、ステップＳＴ６に進む。
【００８３】  ステップＳＴ６では、クロック生成器４のレジスタに書き込みアクセスしてクロック周波数を変更する。さらに、ステップＳＴ７に進んで、ＤＣ−ＤＣコンバータ５のレジスタに書き込みアクセスし、電源電圧を変更して処理を完了する。すなわち、設定したいクロック周波数が現在の値より小さい場合には、まず、クロック周波数を変更し、その後、電源電圧を変更する。
【００８４】  なお、ステップＳＴ５において、設定したいクロック周波数が現在の値より小さくない、すなわち、設定したいクロック周波数が現在のクロック周波数と同じであると判定すると、そのまま処理を完了する。
【００８５】  図８は、ＣＰＵがシステムバスのクロック周波数を変更する動作の一例を説明するための図である。図８において、動作Ａは、例えば、図７におけるステップＳＴ３の処理に対応し、また、動作Ｂは、例えば、図７におけるステップＳＴ４の処理に対応する。
【００８６】  すなわち、図８の動作Ｂは、システムバス２のクロックの周波数Ｆｓを変更する処理を行う動作を示す。また、図８の動作Ａは、システムバス２および周辺回路６１〜６ｎの電源電圧Vddsを上げる処理を行う動作を示し、図８の動作Ｃは、システムバス２および周辺回路６１〜６ｎの電源電圧Vddsを上げる処理を行う動作を示す。
【００８７】  ところで、半導体集積回路(ＬＳＩ)１を高いクロック周波数で動かすためには、高い電源電圧で動作させるため、ＤＶＦＳによってクロック周波数を上げる場合、先に高い電源電圧に変更してからクロック周波数を上げる。逆に、ＤＶＦＳによってクロック周波数を下げる場合、先に低いクロック周波数に変更してから電源電圧を下げる。
【００８８】  従って、図８において、動作Ｂによりクロック周波数を上げる場合、先に動作Ａにより電源電圧を上げる処理を行い、その後、動作Ｂによりクロック周波数を上げる処理を行う。このとき、動作Ｃは実行しない。
【００８９】  逆に、動作Ｂによりクロック周波数を下げる場合には、動作Ａは実行せずに、動作Ｂによりクロック周波数を下げる処理を行い、その後、動作Ｃにより電源電圧を下げる処理を行う。
【００９０】  図８は、ＬＳＩ１に集積されている複数のＣＰＵコア111〜11mにおける１つのＣＰＵコア111(ＣＰＵ１)がシステムバス２のクロック周波数Ｆｓの変更の指示を出し、そのクロック周波数が変更される様子を示している。なお、システムバス２のクロック周波数Ｆｓが変更される間、他のＣＰＵコア112〜11mは、それぞれプログラムの実行を継続する。
【００９１】  信号"vdd change start"は、ＣＰＵコア111からＤＣ−ＤＣコンバータ５に対するシステムバス２の電源電圧Vddsを変更する指示を表し、信号"vdd change done"は、ＤＣ−ＤＣコンバータ５からＣＰＵコア111に対する電源電圧の変更が完了したことを表す。
【００９２】  具体的に、ＣＰＵコア111は、スルー回路121(スルー回路１:ＳＴ１０１)およびシステムバス２(ＳＴ１０２)を介し、"vdd change start"をＤＣ−ＤＣコンバータ５内に設けられた電源電圧設定レジスタに対して書き込みアクセスする(ＳＴ１０３)。
【００９３】  これを受けて、ＤＣ−ＤＣコンバータ５は、レジスタに書き込まれた電源電圧の変更指示に従ってシステムバス２の電源電圧Vddsを変更し、その電源電圧Vddsの変更が完了したことを表す指示("vdd change done")をＣＰＵコア111へ戻す(ＳＴ１０４)。
【００９４】  これは、例えば、ＤＣ−ＤＣコンバータ５内に電源電圧の変更が完了したかどうかによって値が変化するレジスタを設け、そのレジスタの値を、ＣＰＵコア111からシステムバス２を介してポーリングする。そして、ポーリングの結果、変化した後の値が読み出せた場合には、ＣＰＵコア111が電源電圧の変更が完了したと判断する。
【００９５】  信号"req clock change"は、ＣＰＵコア111からクロック生成器４に対してシステムバス２のクロック周波数Ｆｓを変更する指示を出力していることを表す。例えば、ＣＰＵコア111からスルー回路121(ＳＴ１０５)およびシステムバス２(ＳＴ１０６)を介し、クロック生成器４内に設けられたクロック周波数設定レジスタに対して設定したいクロック周波数を書き込む(ＳＴ１０７)。
【００９６】  クロック生成器４は、指示を受け取ったら、制御回路３に対して信号"clk change start(図１における信号ＣＣＳに対応)"を送信する(ＳＴ１０８)。"clk change start"を受け取った制御回路３は、スヌープ回路131に対する信号"req snoop"を『１』にし(ＳＴ１０９)、スルー回路121に対する信号"req stop"を『１』にする(ＳＴ１１０)。
【００９７】  制御回路３は、スヌープ回路131からの信号"snoop done"が『１』になる(ＳＴ１１１)のと、スルー回路121からの信号"req snoop"が『１』になる(ＳＴ１１３)のを待って、クロック生成器４に対する信号"all req stop done"を『１』にする(ＳＴ１１４)。
【００９８】  ここで、"req snoop"は、スヌープ回路131〜13mへの"REQ SNOOP1〜REQ SNOOPm"に対応し、また、"req stop"は、スルー回路121〜12mへの"REQ STOP1〜REQ STOPm"に対応する。さらに、"snoop done"は、スヌープ回路131〜13mからの"SNOOP DONE1〜SNOOP DONEm"に対応する。
【００９９】  例えば、ＣＰＵコア111がシステムバス２のクロック周波数Ｆｓを変更する場合(ＳＴ１１５)、このシステムバス２のクロック周波数Ｆｓと、全ての演算ブロック101〜10mにおけるクロック周波数Ｆ１〜Ｆｍの一致を確認する(ＳＴ１１６)。
【０１００】  すなわち、システムバス２のクロック周波数Ｆｓが変更されることで新たにクロック周波数が異なることになったＣＰＵコア(演算ブロック)は、同期化回路を介して信号を送受信する。なお、システムバス２のクロック周波数Ｆｓが変更される前にクロック周波数が異なっていたＣＰＵコアであっても、変更された後のシステムバス２のクロック周波数Ｆｓと同じであれば、同期化回路は介在させない。
【０１０１】  一方、例えば、ＣＰＵコア111が、ＣＰＵコア113(第１演算処理装置)のクロック周波数Ｆ３(第２クロック)を変更する場合を考える。このとき、ＣＰＵコア113(演算ブロック103)以外のＣＰＵコアのクロック周波数Ｆ１，Ｆ２およびＦ４〜Ｆｍとシステムバス２のクロック周波数Ｆｓの関係は変化しない。従って。この場合、ＣＰＵコア113のクロック周波数Ｆ３とシステムバス２のクロック周波数Ｆｓの一致を確認するのみでよいことになる。
【０１０２】  以下の説明は、ＣＰＵコア111がシステムバス２のクロック周波数Ｆｓを変更する場合を想定し、図８におけるＳＴ１０９以降の処理を、各信号を一般化して説明する。すなわち、各演算ブロック101〜10m、ＣＰＵｉ(ＣＰＵ１〜ＣＰＵｍ：ＣＰＵコア111〜11m)、スルー回路ｉ(121〜12m)、スヌープ回路ｉ(131〜13m)、並びに、一般化された信号を用いて説明する。
【０１０３】  REQ SNOOPi＝『１』(ｉは、１以上ｍ以下の整数)を受け取った(ＳＴ１０９)スヌープ回路ｉは、ＣＰＵｉからシステムバス２へのアクセスが実行中で無いことを確認した後、制御回路３(ＳＴ１１１)とスルー回路ｉ(ＳＴ１１２)への"SNOOP DONEi"を『１』にする。なお、アクセスが実行中で無いことは、スルー回路ｉからのＲＥＱ２信号が『１』であることを確認することで判定できる。
【０１０４】  REQ STOPi＝『１』を受け取った(ＳＴ１１０)スルー回路ｉは、スヌープ回路ｉからSNOOP DONEi＝『１』を受信した(ＳＴ１１２)後、ＣＰＵｉからシステムバスへの新規のアクセスを遮断する。そして、この新規のアクセスを遮断した後、制御回路３への信号"REQ STOP DONEi"を『１』にする(ＳＴ１１３)。
【０１０５】  ここで、図３に示す演算ブロック１０１では、例えば、制御回路３がSNOOP DONEi＝『１』を受信した(ＳＴ１１１)後、選択信号SEL1を『１』にすることで、スルー回路121におけるセレクタ210が、ＲＥＱ１の値によらず常に『０』を選択して出力する。スルー回路121は、選択信号SEL1を『１』にした後、制御回路３への信号"REQ STOP DONE1"を『１』にする(ＳＴ１１３)。
【０１０６】  再び、一般化した説明に戻すと、制御回路３は、スルー回路ｉからの信号"REQ STOP DONE1〜m"が全て『１』になったことを確認して、クロック生成器４への信号"ALL REQ STOP DONE"を『１』にする(ＳＴ１１４)。
【０１０７】  "ALL REQ STOP DONE"＝『１』を受信した(ＳＴ１１４)クロック生成器４は、システムバス２のクロック周波数Ｆｓを変更する(ＳＴ１１５)。クロック周波数Ｆｓの変更が完了したら、制御回路３への信号"CLK CHANGE DONE"を『１』にする(ＳＴ１１６)。
【０１０８】  "CKL CHANGE DONE"＝『１』を受信した(ＳＴ１１６)制御回路３は、クロック生成器４内のクロック設定レジスタの値を読み出し、スルー回路ｉに対する信号"PATH CHANGE"制御する(ＳＴ１１７)。
【０１０９】  すなわち、制御回路３は、ＣＰＵｉのクロックＦｉがシステムバス２のクロックＦｓと同一の場合には、スルー回路ｉへの信号ＣＮＴｉを『１』にし、違う場合には、ＣＮＴｉを『０』にする。
【０１１０】  ＣＮＴｉ＝『１』を受信したスルー回路ｉのセレクタ211〜216は、入力『１』側の値(同期化回路221〜226を介さないそのままの値)を選択して出力する。一方、ＣＮＴｉ＝『０』を受信したスルー回路ｉのセレクタ211〜216は、入力『０』側の値(同期化回路221〜226を介して送信側の回路に同期化された値)を選択して出力する。
【０１１１】  なお、動作Ｃは、動作Ａに対応し、その説明は省略する。すなわち、動作ＣにおけるステップＳＴ１１８〜ＳＴ１２１は、動作ＡにおけるステップＳＴ１０１〜ＳＴ１０４に対応する。
【０１１２】  上述した図８の説明は、ＣＰＵコア111がシステムバス２のクロック周波数を変更した結果、ＣＰＵコア111〜11m(ＣＰＵ１〜ｍ)のいずれかのクロック周波数とシステムバス２のクロック周波数が異なる場合を想定している。しかしながら、結果的に、ＣＰＵのクロック周波数とシステムバスのクロック周波数が異なる場合も同様である。
【０１１３】  すなわち、例えば、ＣＰＵコア111がＣＰＵコア113(演算ブロック103)のクロック周波数Ｆ３を変更した結果、ＣＰＵコア113のクロック周波数Ｆ３とシステムバス２のクロック周波数Ｆｓが異なる場合も同様である。この場合、制御回路３は、全てのスヌープ回路１〜ｍからの"SNOOP DONE1〜SNOOP DONEm"を確認するのではなく、演算ブロック103におけるスヌープ回路３からの"SNOOP DONE3"のみを確認すればよいことになる。
【０１１４】  上述したように、スヌープ回路ｉは、ＣＰＵｉがシステムバスにアクセス中で無いことを通知する信号"SNOOP DONEi"を送信し、制御回路３は、全てのスヌープ回路ｉからアクセス中で無いことを受信する。
【０１１５】  そして、制御回路３は、全てのスヌープ回路ｉからアクセス中で無いことを確認した後、クロック生成器４に対してシステムバス２のクロックＦｓの切り替えを指示する信号"ALL REQ STOP DONE"を送信する。
【０１１６】  従って、システムバス２のクロックＦｓの切り替えは、全てのＣＰＵｉからシステムバス２へのアクセスがないタイミングで行うことができ、クロック変更中にアクセスを実行することによって誤った信号が伝送されるのを防ぐことができる。
【０１１７】  ここで、例えば、図３において、ＣＰＵコア111のクロック周波数Ｆ１とシステムバス２のクロック信号Ｆｓが同じになる場合、スルー回路121は、同期化回路(２段のＦＦ)221〜226を介さない経路でＣＰＵコア111とシステムバス２の間を繋ぐことになる。
【０１１８】  すなわち、ＣＰＵとシステムバスに対して、異なる周波数のクロックが供給される場合、同期化回路を介した経路で信号の送受信を行うが、同じ周波数のクロックが供給される場合には、同期化回路を介さずに直接信号の送受信を行うことができる。このように、同期化回路を介さずに直接信号の送受信を行うと、例えば、同期化回路によるＦＦ２段分の遅延を無くすことが可能になる。
【０１１９】  さらに、例えば、図３において、システムバス２のクロック切り替え中は、スルー回路101のセレクタ210は常に『０』を出力してＣＰＵコア111からシステムバス２へのアクセスを遮断することができる。
【０１２０】  すなわち、図１０を参照して後に詳述するが、システムバスのクロック切り替え中であっても、各ＣＰＵで実行中のプログラムがシステムバスにアクセスするかしないかに関わらず、安全にプログラムの実行を継続させることができる。
【０１２１】  このように、本実施例によれば、例えば、システムバスのクロック周波数を変更する場合、システムバスとの間で信号を遣り取りしていないＣＰＵに対しては、クロック供給を継続してＣＰＵ上でのプログラムの実行を継続させることができる。これにより、システムの性能低下を最小限に抑えることが可能になる。
【０１２２】  これは、システムバスのクロック周波数を変更した場合に限定されるものではなく、例えば、いずれか１つのＣＰＵのクロック周波数を変更してシステムバスのクロック周波数と異なるようになった場合でも、システムの性能低下を抑えることが可能になる。この場合、クロック周波数を変更しない残りのＣＰＵに対しては、それまでの動作を継続させることができる。
【０１２３】  また、ＣＰＵとシステムバスのクロック周波数が異なる場合、信号の遣り取りは、例えば、同期化回路を介して行うことになるが、ＣＰＵとシステムバスのクロック周波数が同じ場合には、同期化回路を介さずに信号の遣り取りすることができる。これにより、同期化回路による遅延を回避することが可能になる。
【０１２４】  ここで、ＣＰＵとシステムバスのクロック周波数が同じ場合とは、例えば、ＣＰＵまたはシステムバスの一方のクロック周波数を変更した結果、ＣＰＵとシステムバスのクロック周波数が同じになった場合も含むのはいうまでもない。
【０１２５】  図９は、ＣＰＵがシステムバスのクロック周波数を変更する動作の他の例を説明するための図であり、ＣＰＵ２がシステムバスにアクセスしている間に、ＣＰＵ１がシステムバスのクロック周波数変更指示を出す場合の動作を示すものである。
【０１２６】  図９は、図８の動作Ｂにおいて、ＣＰＵコア112(第２演算処理装置)がリクエスト信号"req"をスルー回路122(ＳＴ２０１)およびシステムバス２(ＳＴ２０２)を介して周辺回路(例えば、周辺回路61)に出力した状態で、図８の動作Ｂを処理する場合を示している。この場合、その周辺回路61からのアクノリッジ信号"ack"は、システムバス２からスルー回路122を介して(ＳＴ２１４)、ＣＰＵコア112に戻される(ＳＴ２１５)。
【０１２７】  このように、図９では、ＣＰＵコア112が出力した信号"req (REQ1)"＝『１』がスルー回路122を経由して(ＳＴ２０１)システムバス２に転送される(ＳＴ２０２)。このアクセスに対するアクノリッジ信号"ack"がシステムバス２から出力される(ＳＴ２１４)前に、ＣＰＵ111(第３演算処理装置)から信号"req clock change"が出力される(ＳＴ２０３)。さらに、制御回路３からスヌープ回路131および132に対して信号"req snoop (REQ SNOOP1, REQ SNOOP2)"が出力される(ＳＴ２０７，ＳＴ２０８)。
【０１２８】  スヌープ回路132は、スルー回路122からの信号"req (REQ1)"が『０』に変化したのを確認して"snoop done (SNOOP DONE2)"＝『１』を出力する(ＳＴ２１６)。制御回路３は、全てのスヌープ回路(131,132)からの信号"snoop done (SNOOP DONE1, SNOOP DONE2)"の受信(ＳＴ２１１，ＳＴ２１６)を待って、"all req stop done"＝『１』を出力する(ＳＴ２１８)。
【０１２９】  なお、図９における他の処理は、ＣＰＵコア112(演算ブロック101)に関する処理(ＳＴ２０８，ＳＴ２１０，ＳＴ２１４〜ＳＴ２１７)を除き、実質的に図８と同様であり、その説明は省略する。
【０１３０】  すなわち、図９のステップＳＴ２０３〜ＳＴ２０７，ＳＴ２０９，ＳＴ２１１〜ＳＴ２１３およびＳＴ２１８〜ＳＴ２２１は、図８のステップＳＴ１０５〜ＳＴ１０９，ＳＴ１１０，ＳＴ１１１〜ＳＴ１１３およびＳＴ１１４〜ＳＴ１１７に対応する。
【０１３１】  図１０は、ＣＰＵがシステムバスのクロック周波数を変更した後の動作の一例を説明するための図であり、システムバス２のクロック周波数Ｆｓを変更している間に、ＣＰＵコア112からシステムバス２へのアクセスが発生した場合の動作を示している。
【０１３２】  システムバス２のクロック周波数Ｆｓの変更中(ＳＴ３０１)に、ＣＰＵコア112からスルー回路122に対してリクエスト信号"req"が出力される(ＳＴ３０２)。すなわち、ＣＰＵコア112からスルー回路122に対するＲＥＱ１が『１』に変化する。ここで、システムバス２のクロック周波数変更中、スルー回路122のセレクタ(アクセスセレクタ)210は『０』を出力し続け、ＲＥＱ２が『１』になるのを抑制する。
【０１３３】  システムバス２のクロック周波数Ｆｓの変更が完了すると、クロック生成器４から制御回路３に対して信号"clk change done"を出力する(ＳＴ３０３)。制御回路３は、システムバス２のクロック周波数Ｆｓの変更が完了したのを確認して信号"path change"をスルー回路122に出力する(ＳＴ３０４)。
【０１３４】  すなわち、システムバス２のクロック周波数Ｆｓの変更が完了すると、制御回路３からのSEL2＝『０』を受信した後、ＣＰＵコア112からのＲＥＱ１を選択して出力する。これにより、スルー回路122からシステムバス２に対してリクエスト信号"req"が出力される(ＳＴ３０５)。
【０１３５】  なお、システムバス２に転送されたリクエスト信号"req"は、例えば、システムバス２に接続された周辺回路61に出力され、その周辺回路からのアクノリッジ信号"ack"がシステムバス２からスルー回路122を介して(ＳＴ３０６)、ＣＰＵコア112に戻される(ＳＴ３０７)。
【０１３６】  これにより、システムバスのクロック切り替え中であっても、各ＣＰＵで実行中のプログラムがシステムバスにアクセスするかしないかに関わらず、安全にプログラムの実行を継続させることができる。
【０１３７】  このように、本実施例によれば、例えば、システムバスのクロック周波数を変更する場合、システムバスとの間で信号を遣り取りしていないＣＰＵに対しては、クロック供給を継続してＣＰＵ上でのプログラムの実行を継続させることができる。これにより、システムの性能低下を最小限に抑えることが可能になる。
【０１３８】  図１１は、制御回路の状態遷移マシンの一例を示す図である。図１１に示されるように、制御回路３の状態としては、アイドル("idle")，待ち("wait")および変更("change")の３つが存在する。
【０１３９】  アイドル状態は、システムバスのクロック変更を行っておらず、一定のクロック信号で動作している定常状態である。このアイドル状態において、クロック生成器から"clk change start"＝『１』を受信すると、待ち状態に遷移する。
【０１４０】  待ち状態では、"req snoop (REQ SNOOP1〜REQ SNOOPm)"＝『１』、および、"req stop (REQ STOP1〜REQ STOPm)"＝『１』を出力し、"SNOOP DONE1〜SNOOP DONEm"と"REQ STOP DONE1〜REQ STOP DONEm"の全てが『１』になるのを待って、変更状態に遷移する。
【０１４１】  以上、詳述したように、本実施例によれば、半導体集積回路に含まれる複数のＣＰＵにおいて、システムバス或いはいずれかのＣＰＵのクロック周波数を変更する場合、動作可能なＣＰＵはそのまま処理を継続させることができる。
【０１４２】  さらに、クロック周波数の変更により、システムバスのクロック周波数と異なる動作周波数のＣＰＵは、同期化回路を介在させ、また、同じ動作周波数のＣＰＵは直接信号の送受信を行うことで、同期化回路の遅延による性能の低下を最小限に抑えることができる。
【０１４３】  変更状態では、"all req stop done"＝『１』を出力し、クロック生成器内の制御レジスタの各ＣＰＵのクロック設定値とシステムバスのクロック設定値を読み出す。さらに、ＣＰＵｉとシステムバスのクロックが同一の場合はＣＮＴｉ＝『１』、また、異なる場合はＣＮＴｉ＝『０』を設定して出力する。そして、"clk change done"が『１』になるのを待ってアイドル状態に遷移する。
【０１４４】  ここに記載されている全ての例および条件的な用語は、読者が、本発明と技術の進展のために発明者により与えられる概念とを理解する際の助けとなるように、教育的な目的を意図したものである。
【０１４５】  また、具体的に記載されている上記の例および条件、並びに、本発明の優位性および劣等性を示すことに関する本明細書における例の構成に限定されることなく、解釈されるべきものである。
【０１４６】  さらに、本発明の実施例は詳細に説明されているが、本発明の精神および範囲から外れることなく、様々な変更、置換および修正をこれに加えることが可能であると解すべきである。
【符号の説明】
【０１４７】  １    半導体集積回路(ＬＳＩ)  ２    システムバス(内部バス)  ３    制御回路  ４    クロック生成器  ５    ＤＣ−ＤＣコンバータ  ４１    制御レジスタ  42s，421〜42m    セレクタ  ６１〜６ｎ    周辺回路  101〜10m    演算ブロック  111〜11m    ＣＰＵコア(演算処理装置、ＣＰＵｉ：ＣＰＵ１〜ＣＰＵｍ)  121〜12m    スルー回路  131〜13m    スヌープ回路  210    セレクタ(アクセスセレクタ)  211〜216    セレクタ  221〜226    同期化回路  401〜40p    クロック生成ブロック
【図１】
2014006722.tif 000003
【図２】
2014006722.tif 000004
【図３】
2014006722.tif 000005
【図４】
2014006722.tif 000006
【図５】
2014006722.tif 000007
【図６】
2014006722.tif 000008
【図７】
2014006722.tif 000009
【図８】
2014006722.tif 000010
【図９】
2014006722.tif 000011
【図１０】
2014006722.tif 000012
【図１１】
2014006722.tif 000013
【手続補正書】
【提出日】平成26年12月17日(2014.12.17)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
この出願で言及する実施例は、半導体集積回路およびその制御方法に関する。
【背景技術】
【０００２】
近年、半導体集積回路に対して、低消費電力化が強く求められており、その低消費電力化を実現するものとして、例えば、ＤＶＦＳ(Dynamic Voltage Frequency Scaling)と呼ばれる技術が注目されている。
【０００３】
従来、ＤＶＦＳとして、演算処理装置(ＣＰＵ)のクロック周波数と電源電圧を、システムに求められる処理負荷に応じて制御することで、ＣＰＵが消費する電力を最適化する技術が提案されている(例えば、特許文献１および特許文献２参照)。
【０００４】
また、従来、システムバスのクロック周波数と電源電圧を、システムバスを介して転送されるデータ量に応じて制御することで、システムバスが消費する電力を最適化する技術も提案されている(例えば、特許文献３参照)。
【０００５】
さらに、従来、ＣＰＵにクロックの供給を続けたまま、そのクロック周波数を切り替えたときのＣＰＵの不安定動作を低減する技術も提案されている(例えば、特許文献４参照)。
【０００６】
また、近年、半導体集積回路の製造技術の向上に伴って、複数のプロセッサコアＩＰ(Intellectual property)を１つのＬＳＩチップ内に集積した製品が実用化されている(例えば、特許文献５参照)。そのような製品では、１つのシステムバス(内部バス)に複数のＣＰＵコアが接続されることになる。
【０００７】
さらに、従来、異なるクロック周波数で動作している２つの回路の間で信号を遣り取りする際、受信側回路が正しい値の信号を受信できるように，フリップフロップ(ＦＦ)を用いた同期化回路を適用する技術も提案されている(例えば、特許文献６参照)。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００３−３２４７３５号公報
【特許文献２】特開２００５−２１０５２５号公報
【特許文献３】特開２０１１−１０１３７２号公報
【特許文献４】特開２００８−０９２０１０号公報
【特許文献５】特開２００６−２６０５６８号公報
【特許文献６】特開２０００−０７８１２２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
ところで、例えば、同期化回路を適用して異なるクロック周波数で動作している２つの回路の間、例えば、ＣＰＵとシステムバスの間で信号を遣り取りするシステムが考えられる。また、近年、システムバスに対して複数のＣＰＵコア(ＣＰＵ)を接続し、処理を高速化するＬＳＩも提供されている。
【００１０】
このような複数のＣＰＵおよびシステムバスに対してＤＶＦＳ技術を適用する場合、例えば、システムバスのクロック周波数を変化させると、各ＣＰＵの同期化回路を制御し、或いは、全てのＣＰＵの動作を停止するといった性能低下を招く処理を行うことになる。
【００１１】
本発明の目的は、半導体集積回路の性能低下を抑えつつ、消費電力の低減を図ることである。
【課題を解決するための手段】
【００１２】
一実施形態によれば、第１クロックで動作するシステムバスと、複数の演算処理装置と、前記システムバスおよび前記演算処理装置を制御する制御回路と、を有する半導体集積回路が提供される。
【００１３】
前記複数の演算処理装置は、前記システムバスに接続され、第２クロックで動作する第１演算処理装置を含む。前記制御回路は、前記演算処理装置から前記システムバスへのアクセスが発生していないことを確認した後に、前記第１クロックまたは前記第２クロックの周波数を変更する。
【発明の効果】
【００１４】
開示の半導体集積回路およびその制御方法は、半導体集積回路の性能低下を抑えつつ、ＤＶＦＳ技術による消費電力の低減を図ることができるという効果を奏する。
【図面の簡単な説明】
【００１５】
【図１】図１は、半導体集積回路の一実施例の全体構成を示すブロック図である。
【図２】図２は、図１に示す半導体集積回路におけるクロック生成器の一例を示すブロック図である。
【図３】図３は、図１に示す半導体集積回路におけるスルー回路の一例をより詳細に示すブロック図である。
【図４】図４は、図３に示すスルー回路において、ＣＰＵとシステムバスのクロック周波数が同一の場合のデータ読み出し動作を説明するためのタイミング図である。
【図５】図５は、図３に示すスルー回路において、ＣＰＵとシステムバスのクロック周波数が同一の場合のデータ書き込み動作を説明するためのタイミング図である。
【図６】図６は、図３に示すスルー回路において、ＣＰＵとシステムバスのクロック周波数が異なる場合のデータ書き込み動作を説明するためのタイミング図である。
【図７】図７は、クロック周波数および電源電圧の変更処理の一例を説明するためのフローチャートである。
【図８】図８は、ＣＰＵがシステムバスのクロック周波数を変更する動作の一例を説明するための図である。
【図９】図９は、ＣＰＵがシステムバスのクロック周波数を変更する動作の他の例を説明するための図である。
【図１０】図１０は、ＣＰＵがシステムバスのクロック周波数を変更した後の動作の一例を説明するための図である。
【図１１】図１１は、制御回路の状態遷移マシンの一例を示す図である。
【発明を実施するための形態】
【００１６】
以下、半導体集積回路およびその制御方法の実施例を、添付図面を参照して詳述する。図１は、半導体集積回路の一実施例の全体構成を示すブロック図である。
【００１７】
図１において、参照符号１は半導体集積回路(ＬＳＩ)、２はシステムバス(内部バス)、３は制御回路、４はクロック生成器、５はＤＣ−ＤＣコンバータ、６１〜６ｎは周辺回路、そして、101〜10mは演算ブロックを示す。
【００１８】
各演算ブロック101〜10mは、それぞれＣＰＵコア111〜11m(ＣＰＵ１〜ＣＰＵｍ)、スルー回路121〜12m、および、スヌープ回路131〜13mを含む。
【００１９】
ここで、スルー回路121〜12mは、後に詳述するが、ＣＰＵコア111〜11mおよびシステムバス２において、送信側の信号、または、送信側の信号のクロック周波数を受信側の信号のクロック周波数に同期させた信号のいずれかを選択して出力する。
【００２０】
また、スヌープ回路131〜13mは、各ローカルキャッシュの内容を一致させるためのものではなく、後に詳述するように、対応するＣＰＵコア111〜11mからのリクエスト信号をスヌープするための回路である。すなわち、スヌープ回路131〜13mは、例えば、ＣＰＵコア111〜11mの全てのアクセスリクエストが発生していないことを確認(探索：スヌープ)するための回路である。
【００２１】
なお、ＣＰＵコア111〜11mのアクセスリクエストとは、例えば、あるＣＰＵコアがシステムバス２に対し、或いは、システムバス２を介して他のＣＰＵコアまたはクロック生成器４や周辺回路６１〜６ｎに対するアクセスの要求である。
【００２２】
図１に示されるように、演算ブロック101(102〜10mも同様)において、ＣＰＵコア111(プロセッサコアＩＰ)からシステムバス２への信号は、スルー回路121およびスヌープ回路131を介して入力される。また、システムバス２からＣＰＵコア111への信号は、スルー回路121を介して入力される。ここで、システムバス２には、例えば、クロック生成器４、n個の周辺回路６１〜６ｎ、および、ＤＣ−ＤＣコンバータ５が接続されている。
【００２３】
クロック生成器４は、ＬＳＩ１の外部から基準クロック信号となるクロックＦｉを受け取り、ＣＰＵコア111〜11mに供給するクロックＦ１〜Ｆｍ、および、クロックＦｓを生成して出力する。なお、クロックＦｓは、例えば、システムバス２、周辺回路６１〜６ｎ、および、ＤＣ−ＤＣコンバータ５に入力される。
【００２４】
ＤＣ−ＤＣコンバータ５は、ＬＳＩ１の外部から供給される電源電圧Ｖｉを受け取り、ＣＰＵコア111〜11mに供給する電源電圧Vdd1〜Vddm、並びに、システムバス２および周辺回路６１〜６ｎに供給する電源電圧Vddsを生成して出力する。なお、Vdd1〜VddmおよびVddsの電圧レベルは、例えば、ＤＣ−ＤＣコンバータ５が内部に持つ設定レジスタに書き込まれた値に応じて制御される。
【００２５】
ここで、各演算ブロック101〜10mに対しては、それぞれ専用のクロックＦ１〜Ｆｍおよび電源電圧Vdd1〜Vddmが与えられている。すなわち、各ＣＰＵコア111〜11mのクロックＦ１〜Ｆｍと電源電圧Vdd1〜Vddmは、ＤＶＦＳ技術により、システム(ＬＳＩ１)に求められる処理負荷に応じて制御されるようになっている。
【００２６】
具体的に、演算ブロック101は、ＣＰＵコア111，スルー回路121およびスヌープ回路131を含み、これらの回路に対しては、クロック生成器４からのクロックＦ１およびＤＣ−ＤＣコンバータ５からの電源電圧Vdd1が供給される。
【００２７】
また、演算ブロック102は、ＣＰＵコア112，スルー回路122およびスヌープ回路132を含み、これらの回路に対しては、クロック生成器４からのクロックＦ２およびＤＣ−ＤＣコンバータ５からの電源電圧Vdd2が供給される。
【００２８】
さらに、演算ブロック10mは、ＣＰＵコア11m，スルー回路12mおよびスヌープ回路13mを含み、これらの回路に対しては、クロック生成器４からのクロックＦｍおよびＤＣ−ＤＣコンバータ５からの電源電圧Vddmが供給される。
【００２９】
そして、他の回路、すなわち、システムバス２、制御回路３、クロック生成器４、および、周辺回路６１〜６ｎに対しては、ＤＣ−ＤＣコンバータ５からの電源電圧Vddsが供給される。また、システムバス２、制御回路３、ＤＣ−ＤＣコンバータ５、および、周辺回路６１〜６ｎに対しては、クロック生成器４からのクロックＦｓが供給される。
【００３０】
制御回路３は、クロック生成器４からの変更完了信号ＣＣＳ、並びに、スヌープ回路131〜13mからのスヌープ信号１〜ｍ("SNOOP DONE1〜SNOOP DONEm")を受け取る。そして、制御回路３は、スルー回路121〜12mに対して制御信号CNT1〜CNTmおよび選択信号SEL1〜SELmを出力する。
【００３１】
以上において、システムバス２としては、例えば、ＡＨＢ(Advanced High performance Bus：登録商標)およびＡＰＢ(Advanced. Peripheral Bus)等を適用することができる。また、システムバス２は、例えば、ＡＸＩ(Advanced eXtensible Interface)、ＯＣＰ(Open Core Protocol)およびＮＩＦ(Native Application Interface)などの標準化されたプロトコルに基づいて動作するバスであってもよい。さらに、ＬＳＩ設計者が独自に設計したプロトコルに基づいて動作するバスを、システムバス２として適用することもできる。
【００３２】
なお、各周辺回路６１〜６ｎとしては、例えば、システムタイマー、ＤＭＡ(Direct Memory Access)コントローラ、ＡＤ(Analog-to-digital)コンバータ、および、ＤＡ(Digita-to-analog)コンバータなどである。
【００３３】
また、各周辺回路６１〜６ｎとしては、例えば、ＳＰＩ(Serial Peripheral Interface Bus)インターフェースやＰＷＭ(Pulse width modulation)インターフェースなどを適用することができる。さらに、各周辺回路６１〜６ｎとしては、例えば、ＵＡＲＴ(Universal Asynchronous Receiver/Transmitter)インターフェース、および、ＧＰＩＯ(General Purpose Input/Output)インターフェースなどであってもよい。
【００３４】
このように、図１に示すＬＳＩ(半導体集積回路)１は、各演算ブロック101〜10mのクロックＦ１〜Ｆｍの周波数および電源電圧Vdd1〜Vddm、並びに、システムバス２や周辺回路６１〜６ｎのクロックＦｓの周波数および電源電圧Vddsが独立に制御可能となっている。
【００３５】
図２は、図１に示す半導体集積回路におけるクロック生成器の一例を示すブロック図である。図２に示されるように、クロック生成器４は、それぞれがＰＬＬ(Phase Locked Loop)回路および分周回路を有するｐ個のクロック生成ブロック401〜40p、制御レジスタ４１、並びに、ｍ＋１個のセレクタ42sおよび421〜42mを含む。
【００３６】
ここで、ＰＬＬ回路は、それぞれ入力するクロックＦｉを元にフィードバック制御を行って位相同期した信号を出力し、また、分周回路は、ＰＬＬ回路の出力信号の周波数を整数分の１に分周した信号(クロック)を出力する。
【００３７】
なお、各クロック生成ブロック401〜40pにおけるＰＬＬ回路は、制御レジスタ４１からの逓倍率制御信号MR1〜MRpによりそれぞれの逓倍率が制御される。また、各クロック生成ブロック401〜40pにおける分周回路は、制御レジスタ４１からの分周率制御信号DR1〜DRpによりそれぞれの分周率(分周比)が制御される。
【００３８】
これにより、クロック生成ブロック401〜40pは、入力クロック信号Ｆｉが、制御レジスタ４１からの逓倍率制御信号MR1〜MRpおよび分周率制御信号DR1〜DRpに従って制御されたクロックｆ１〜ｆｐを出力する。ここで、クロックｆ１〜ｆｐは、例えば、それぞれの周波数(クロック周波数)が異なっている。
【００３９】
クロックｆ１〜ｆｐは、セレクタ４２ｓおよび421〜42mに入力され、制御レジスタ４１からの選択信号sel sおよびsel 1〜sel mに従ったクロックが選択され、セレクタ４２ｓおよび421〜42mからクロックＦｓおよびＦ１〜Ｆｍとして出力される。
【００４０】
なお、制御レジスタ４１は、システムバス２に接続され、例えば、後述するＣＰＵ１(ＣＰＵコア111)に従って各制御信号(MR1〜MRp，DR1〜DRp，sel s，sel 1〜sel m)を保持する。
【００４１】
図３は、図１に示す半導体集積回路におけるスルー回路の一例をより詳細に示すブロック図である。なお、図３では、１つの演算ブロック101およびシステムバス２のみが描かれているが、他の演算ブロック102〜10mも同様である。
【００４２】
ＣＰＵコア111(ＣＰＵ１)とシステムバス２の間では、アクセスリクエストを示す信号ＲＥＱ、書き込みアクセスか読み出しアクセスかを区別する信号ＷＲＩＴＥ、および、アクセス先アドレスを示す信号ＡＤＤＲが遣り取りされる。
【００４３】
さらに、ＣＰＵコア111とシステムバス２の間では、書き込みアクセス時の書き込み値を示す信号ＷＤＡＴＡ、読み出しアクセス時の読み出し値を示す信号ＲＤＡＴＡ、および、アクセスが成立したことを示す信号ＡＣＫが遣り取りされる。
【００４４】
ここで、それぞれ送信元が出力する信号を、ＲＥＱ１，ＷＲＩＴＥ１，ＡＤＤＲ１，ＷＤＡＴＡ１，ＲＤＡＴＡ１およびＡＣＫ１と記載する。また、同期化回路221〜226やセレクタ211〜216を通過して実際に受信先に入力される信号を、ＲＥＱ２，ＷＲＩＴＥ２，ＡＤＤＲ２，ＷＤＡＴＡ２，ＲＤＡＴＡ２およびＡＣＫ２と記載する。
【００４５】
なお、同期化回路221〜226は、後に詳述するが、ＣＰＵコア111およびシステムバス２において、送信側の信号のクロック周波数を、受信側の信号のクロック周波数に同期させるための回路である。
【００４６】
図３に示されるように、ＲＥＱ１とＲＥＱ２の間には、セレクタ(アクセスセレクタ)210，同期化回路221およびセレクタ211が設けられ、ＷＲＩＴＥ１とＷＲＩＴＥ２の間には、同期化回路222およびセレクタ212が設けられている。
【００４７】
さらに、ＡＤＤＲ１とＡＤＤＲ２の間には、同期化回路223およびセレクタ213が設けられ、ＷＤＡＴＡ１とＷＤＡＴＡ２の間には、同期化回路224およびセレクタ214が設けられている。
【００４８】
ここで、同期化回路221〜224は、システムバス２と同じクロックＦｓによりデータの取り込みが制御される２段のフリップフロップ(ＦＦ)を有し、ＣＰＵコア111からの信号を、システムバス２に同期させて出力する。
【００４９】
また、ＲＤＡＴＡ１とＲＤＡＴＡ２の間には、同期化回路225およびセレクタ215が設けられ、ＡＣＫ１とＡＣＫ２の間には、同期化回路226およびセレクタ216が設けられている。
【００５０】
ここで、同期化回路225および226は、ＣＰＵコア111と同じクロックＦ１によりデータの取り込みが制御される２段のＦＦを有し、システムバス２からの信号を、ＣＰＵコア111に同期させて出力する。
【００５１】
なお、セレクタ210は、制御回路３からの選択信号SEL1により制御され、SEL1が『０：低レベル”Ｌ”』のときは、ＣＰＵコア111からのＲＥＱ１を選択して出力し、SEL1が『１：高レベル”Ｈ”』のときは、常に『０』を出力する。
【００５２】
ところで、システムバス２のクロックＦｓの周波数(クロック周波数Ｆｓ)を変更する際、システムバス２との間で信号を遣り取りしていないＣＰＵコアに対してはクロックの供給を継続し、そのＣＰＵコア上でのプログラムの実行を継続させるのが好ましい。すなわち、システムバス２との間で信号の送受信(遣り取り)をしていないＣＰＵコアは、そのＣＰＵコア上でのプログラムの実行を継続させることで、システムの性能低下を低減することができる。
【００５３】
また、ＣＰＵコアのクロック周波数とシステムバス２のクロック周波数Ｆｓが異なる場合、信号の遣り取りは、同期化回路(221〜226)を介して行う。これに対して、ＣＰＵコアおよびシステムバス２の両者のクロック周波数が同じ場合、同期化回路を介さずに信号の遣り取りをして同期化回路による遅延を回避するのが好ましい。
【００５４】
図４および図５は、図３に示すスルー回路において、ＣＰＵとシステムバスのクロック周波数が同一の場合におけるデータ読み出し動作およびデータ書き込み動作を説明するためのタイミング図である。
【００５５】
まず、図４および図５を参照して、演算ブロック101におけるＣＰＵコア111(ＣＰＵ１)のクロックＦ１の周波数(クロック周波数Ｆ１)と、システムバス２のクロックＦｓの周波数が同一の場合におけるアクセスの動作を説明する。
【００５６】
ＣＰＵコア111のクロック周波数Ｆ１とシステムバス２のクロック周波数Ｆｓが同一の場合、制御回路３が出力する制御信号CNT1(CNT1〜CNTm)の値は『１』に保持され、セレクタ211〜214は、入力『１』を選択して出力する。すなわち、信号ＲＥＱ１，ＷＲＩＴＥ１，ＡＤＤＲ１およびＷＤＡＴＡ１は、同期化回路221〜224を通ることなく、そのままＲＥＱ２，ＷＲＩＴＥ２，ＡＤＤＲ２およびＷＤＡＴＡ２として出力される。
【００５７】
同様に、セレクタ215および216も、入力『１』を選択して出力する。すなわち、信号ＲＤＡＴＡ１およびＡＣＫ１は、同期化回路225および226を通ることなく、そのままＲＤＡＴＡ２およびＡＣＫ２として出力される。
【００５８】
従って、信号ＲＥＱ２，ＷＲＩＴＥ２，ＡＤＤＲ２，ＷＤＡＴＡ２，ＲＤＡＴＡ２およびＡＣＫ２は、信号ＲＥＱ１，ＷＲＩＴＥ１，ＡＤＤＲ１，ＷＤＡＴＡ１，ＲＤＡＴＡ１およびＡＣＫ１と同じ値になる。
【００５９】
その結果、ＣＰＵコア111からの出力信号は、遅延なくシステムバス２に入力され、また、システムバス２からの出力信号は、遅延なくＣＰＵコア111に入力されることになる。すなわち、ＣＰＵコアおよびシステムバスの両者のクロック周波数が同じ場合、同期化回路を介さずに信号の遣り取りすることで、同期化回路による遅延を回避するようになっている。
【００６０】
ここで、ＣＰＵコアまたはシステムバスのクロック周波数の変更を指示するマスタ回路は、ＣＰＵｉ(ｉ＝１〜ｍ：ＣＰＵコア111〜11m)であり、また、スレーブ回路は、制御回路３，クロック生成器４，ＤＣ−ＤＣコンバータ５および周辺回路６１〜６ｎである。
【００６１】
従って、例えば、マスタ回路であるＣＰＵコア111(ＣＰＵ１)がスレーブ回路にアクセスしたいとき、ＲＥＱ１を『０』から『１』に変更することで通知を行う。同時に、ＣＰＵコア111は、アクセス先のアドレスをＡＤＤＲ１で送信し、書き込みアクセスか読み出しアクセスかをＷＲＩＴＥ１で送信し、そして、書き込みアクセスの場合の書き込みたい値をＷＲＩＴＥ１で送信する。
【００６２】
システムバス２は、ＡＤＤＲ１のアドレスを元にアクセス先のスレーブ回路を判定し、アクセス先のスレーブ回路に対するアクセスを行う。そして、アクセスが受け付けられた場合、アクセスが受け付けられたことをＡＣＫ１で送信し、さらに、読み出しアクセスの場合の読み出し値をＲＤＡＴＡ１で送信する。
【００６３】
具体的に、図４に示すＣＰＵコア111とシステムバス２のクロック周波数が同一の場合におけるデータ読み出し動作の例では、期間Ｔ２で読み出しアクセスが発生している。すなわち、期間Ｔ２において、ＲＥＱ１が『０』から『１』に変化し、同時に、アクセス先アドレスがＡＤＤＲ１により送信され、また、読み出しアクセスであることがＷＲＩＴＥ１により送信されている。
【００６４】
さらに、期間Ｔ５において、ＡＣＫ１が『０』から『１』に変化することで読み出しアクセスが成立したことが送信され、そして、読み出し値がＲＤＡＴＡ１により送信されている。なお、ＣＰＵコア111は、読み出し値を受け取ってアクセスが完了したので、期間Ｔ６において、ＲＥＱ１を『１』から『０』に変更してアクセスを終了する。
【００６５】
また、図５に示すＣＰＵコア111とシステムバス２のクロック周波数が同一の場合におけるデータ書き込み動作の例では、期間Ｔ１２で書き込みアクセスが発生している。すなわち、期間Ｔ１２において、ＲＥＱ１が『０』から『１』に変化し、同時に、アクセス先アドレスがＡＤＤＲ１により送信され、また、書き込みアクセスであることがＷＲＩＴＥ１により送信されている。
【００６６】
さらに、期間Ｔ１５において、ＡＣＫ１が『０』から『１』に変化することで書き込みアクセスが成立したことが送信され、そして、書き込み値がＷＤＡＴＡ２により送信されている。なお、ＣＰＵコア111は、書き込みアクセスが完了したので、期間Ｔ１６において、ＲＥＱ１を『１』から『０』に変更してアクセスを終了する。
【００６７】
図６は、図３に示すスルー回路において、ＣＰＵとシステムバスのクロック周波数が異なる場合のデータ書き込み動作を説明するためのタイミング図である。すなわち、図６において、演算ブロック101におけるＣＰＵコア111(ＣＰＵ１)のクロックＦ１の周波数とシステムバスのクロックＦｓの周波数は異なっている。
【００６８】
なお、図６において、参照符号Ｔ２１〜Ｔ２９は、ＣＰＵコア111のクロックＦ１に同期したタイミングの期間を示し、また、Ｔ３１〜Ｔ４３は、システムバスのクロックＦｓに同期したタイミングの期間を示す。
【００６９】
ＣＰＵコア111のクロック周波数Ｆ１とシステムバス２のクロック周波数Ｆｓが異なる場合、制御回路３が出力する制御信号CNT1(CNT1〜CNTm)の値は、『０』に保持され、セレクタ２１２〜２１６は、入力『０』を選択して出力する。
【００７０】
すなわち、信号ＲＥＱ２，ＷＲＩＴＥ２，ＡＤＤＲ２，ＷＤＡＴＡ２，ＲＤＡＴＡ２およびＡＣＫ２は、それぞれ信号ＲＥＱ１，ＷＲＩＴＥ１，ＡＤＤＲ１，ＷＤＡＴＡ１，ＲＤＡＴＡ１およびＡＣＫ１が同期化回路221〜226を通った後の値になる。
【００７１】
ここで、同期化回路221〜224は、システムバス２と同じクロックＦｓによりデータの取り込みタイミングが制御される２段のＦＦを有し、ＣＰＵコア111からの信号を、システムバス２に同期させて出力する。
【００７２】
また、同期化回路225および226は、ＣＰＵコア111と同じクロックＦ１によりデータの取り込みタイミングが制御される２段のＦＦを有し、システムバス２からの信号を、ＣＰＵコア111に同期させて出力する。すなわち、各同期化回路221〜226は、受信側の回路のクロック信号で値(同期タイミング)が変化する２段のＦＦを有している。
【００７３】
具体的に、図６に示すＣＰＵコア111とシステムバス２のクロック周波数が異なる場合におけるデータ読み出し動作の例では、期間Ｔ３２において、ＲＥＱ１が『０』から『１』に変化すると、ＲＥＱ２は期間Ｔ２３で『０』から『１』に変化する。すなわち、ＲＥＱ２は、システムバス２のクロックＦｓで信号遷移する２段のＦＦを有する同期化回路221が介在するため、期間Ｔ２３で『０』から『１』に変化する。
【００７４】
同様に、期間Ｔ３２で変化するＷＲＩＴＥ１およびＡＤＤＲ１(ＷＤＡＴＡ１)も、同期化回路222および223(224)を介して、期間Ｔ２３で変化する。また、期間Ｔ２５において、ＡＣＫ１が『０』から『１』に変化すると、ＡＣＫ３は、同期化回路226を介して、期間Ｔ３９で『０』から『１』に変化する。同様に、期間Ｔ２５で変化するＲＤＡＴＡ１も、同期化回路２２５を介して、期間Ｔ３９で変化する。
【００７５】
このように、同期化回路221〜224を介して信号を遣り取りすることにより、システムバス２が受信するＲＥＧ２，ＷＲＩＴＥ２およびＡＤＤＲ２(ＷＤＡＴＡ２)は、システムバス２のクロックＦｓに同期して値が変化する。さらに、同期化回路225および226を介して信号を遣り取りすることにより、ＣＰＵコア111が受信するＡＣＫ２およびＲＤＡＴＡ２は、ＣＰＵコア111のクロック信号Ｆ１に同期して値が変化する。
【００７６】
このように、ＣＰＵコア111とシステムバス２のクロック周波数が異なる場合には、同期化回路221〜226を介在させることによって、それぞれ正しく信号を遣り取りすることができる。
【００７７】
以上のように、任意のＣＰＵｉとシステムバスのクロック信号の切り替えを行わない間は、制御信号CNTiが『１』または『０』を保持し続けることで、上述した動作によって正しく信号の送受信を行うことができる。なお、ＣＰＵｉのクロック周波数とシステムバスのクロック周波数が同じ場合には、図４および図５を参照して説明したように、同期化回路を介在させないことで、遅延が生じない経路での信号の送受信が可能になる。
【００７８】
図７は、クロック周波数および電源電圧の変更処理の一例を説明するためのフローチャートである。なお、図７に示す処理は、ＣＰＵ(ＣＰＵコア111〜11m)のクロック周波数および電源電圧の変更と、システムバス２のクロック周波数および電源電圧の変更の両方とも同様である。
【００７９】
図７に示されるように、クロック周波数および電源電圧の変更処理を開始すると、ステップＳＴ１において、レジスタを読み出して現在のクロック周波数を取得し、そして、ステップＳＴ２に進む。
【００８０】
ステップＳＴ２では、設定したいクロック周波数が現在の値より大きいかどうかを判定し、設定したいクロック周波数が現在の値より大きいと判定すると、ステップＳＴ３に進む。
【００８１】
ステップＳＴ３では、ＤＣ−ＤＣコンバータ５のレジスタに書き込みアクセスして電源電圧を変更する。さらに、ステップＳＴ４に進んで、クロック生成器４のレジスタ(制御レジスタ４１)に書き込みアクセスし、クロック周波数を変更して処理を完了(終了)する。すなわち、設定したいクロック周波数が現在の値より大きい場合には、まず、電源電圧を変更し、その後、クロック周波数を変更する。
【００８２】
一方、ステップＳＴ２において、設定したいクロック周波数が現在の値より大きくないと判定すると、ステップＳＴ５に進む。ステップＳＴ５では、設定したいクロック周波数が現在の値より小さいかどうかを判定し、設定したいクロック周波数が現在の値より小さいと判定すると、ステップＳＴ６に進む。
【００８３】
ステップＳＴ６では、クロック生成器４のレジスタに書き込みアクセスしてクロック周波数を変更する。さらに、ステップＳＴ７に進んで、ＤＣ−ＤＣコンバータ５のレジスタに書き込みアクセスし、電源電圧を変更して処理を完了する。すなわち、設定したいクロック周波数が現在の値より小さい場合には、まず、クロック周波数を変更し、その後、電源電圧を変更する。
【００８４】
なお、ステップＳＴ５において、設定したいクロック周波数が現在の値より小さくない、すなわち、設定したいクロック周波数が現在のクロック周波数と同じであると判定すると、そのまま処理を完了する。
【００８５】
図８は、ＣＰＵがシステムバスのクロック周波数を変更する動作の一例を説明するための図である。図８において、動作Ａは、例えば、図７におけるステップＳＴ３の処理に対応し、また、動作Ｂは、例えば、図７におけるステップＳＴ４の処理に対応する。
【００８６】
すなわち、図８の動作Ｂは、システムバス２のクロックの周波数Ｆｓを変更する処理を行う動作を示す。また、図８の動作Ａは、システムバス２および周辺回路６１〜６ｎの電源電圧Vddsを上げる処理を行う動作を示し、図８の動作Ｃは、システムバス２および周辺回路６１〜６ｎの電源電圧Vddsを上げる処理を行う動作を示す。
【００８７】
ところで、半導体集積回路(ＬＳＩ)１を高いクロック周波数で動かすためには、高い電源電圧で動作させるため、ＤＶＦＳによってクロック周波数を上げる場合、先に高い電源電圧に変更してからクロック周波数を上げる。逆に、ＤＶＦＳによってクロック周波数を下げる場合、先に低いクロック周波数に変更してから電源電圧を下げる。
【００８８】
従って、図８において、動作Ｂによりクロック周波数を上げる場合、先に動作Ａにより電源電圧を上げる処理を行い、その後、動作Ｂによりクロック周波数を上げる処理を行う。このとき、動作Ｃは実行しない。
【００８９】
逆に、動作Ｂによりクロック周波数を下げる場合には、動作Ａは実行せずに、動作Ｂによりクロック周波数を下げる処理を行い、その後、動作Ｃにより電源電圧を下げる処理を行う。
【００９０】
図８は、ＬＳＩ１に集積されている複数のＣＰＵコア111〜11mにおける１つのＣＰＵコア111(ＣＰＵ１)がシステムバス２のクロック周波数Ｆｓの変更の指示を出し、そのクロック周波数が変更される様子を示している。なお、システムバス２のクロック周波数Ｆｓが変更される間、他のＣＰＵコア112〜11mは、それぞれプログラムの実行を継続する。
【００９１】
信号"vdd change start"は、ＣＰＵコア111からＤＣ−ＤＣコンバータ５に対するシステムバス２の電源電圧Vddsを変更する指示を表し、信号"vdd change done"は、ＤＣ−ＤＣコンバータ５からＣＰＵコア111に対する電源電圧の変更が完了したことを表す。
【００９２】
具体的に、ＣＰＵコア111は、スルー回路121(スルー回路１:ＳＴ１０１)およびシステムバス２(ＳＴ１０２)を介し、"vdd change start"をＤＣ−ＤＣコンバータ５内に設けられた電源電圧設定レジスタに対して書き込みアクセスする(ＳＴ１０３)。
【００９３】
これを受けて、ＤＣ−ＤＣコンバータ５は、レジスタに書き込まれた電源電圧の変更指示に従ってシステムバス２の電源電圧Vddsを変更し、その電源電圧Vddsの変更が完了したことを表す指示("vdd change done")をＣＰＵコア111へ戻す(ＳＴ１０４)。
【００９４】
これは、例えば、ＤＣ−ＤＣコンバータ５内に電源電圧の変更が完了したかどうかによって値が変化するレジスタを設け、そのレジスタの値を、ＣＰＵコア111からシステムバス２を介してポーリングする。そして、ポーリングの結果、変化した後の値が読み出せた場合には、ＣＰＵコア111が電源電圧の変更が完了したと判断する。
【００９５】
信号"req clock change"は、ＣＰＵコア111からクロック生成器４に対してシステムバス２のクロック周波数Ｆｓを変更する指示を出力していることを表す。例えば、ＣＰＵコア111からスルー回路121(ＳＴ１０５)およびシステムバス２(ＳＴ１０６)を介し、クロック生成器４内に設けられたクロック周波数設定レジスタに対して設定したいクロック周波数を書き込む(ＳＴ１０７)。
【００９６】
クロック生成器４は、指示を受け取ったら、制御回路３に対して信号"clk change start(図１における信号ＣＣＳに対応)"を送信する(ＳＴ１０８)。"clk change start"を受け取った制御回路３は、スヌープ回路131に対する信号"req snoop"を『１』にし(ＳＴ１０９)、スルー回路121に対する信号"req stop"を『１』にする(ＳＴ１１０)。
【００９７】
制御回路３は、スヌープ回路131からの信号"snoop done"が『１』になる(ＳＴ１１１)のと、スルー回路121からの信号"req snoop"が『１』になる(ＳＴ１１３)のを待って、クロック生成器４に対する信号"all req stop done"を『１』にする(ＳＴ１１４)。
【００９８】
ここで、"req snoop"は、スヌープ回路131〜13mへの"REQ SNOOP1〜REQ SNOOPm"に対応し、また、"req stop"は、スルー回路121〜12mへの"REQ STOP1〜REQ STOPm"に対応する。さらに、"snoop done"は、スヌープ回路131〜13mからの"SNOOP DONE1〜SNOOP DONEm"に対応する。
【００９９】
例えば、ＣＰＵコア111がシステムバス２のクロック周波数Ｆｓを変更する場合(ＳＴ１１５)、このシステムバス２のクロック周波数Ｆｓと、全ての演算ブロック101〜10mにおけるクロック周波数Ｆ１〜Ｆｍの一致を確認する(ＳＴ１１６)。
【０１００】
すなわち、システムバス２のクロック周波数Ｆｓが変更されることで新たにクロック周波数が異なることになったＣＰＵコア(演算ブロック)は、同期化回路を介して信号を送受信する。なお、システムバス２のクロック周波数Ｆｓが変更される前にクロック周波数が異なっていたＣＰＵコアであっても、変更された後のシステムバス２のクロック周波数Ｆｓと同じであれば、同期化回路は介在させない。
【０１０１】
一方、例えば、ＣＰＵコア111が、ＣＰＵコア113(第１演算処理装置)のクロック周波数Ｆ３(第２クロック)を変更する場合を考える。このとき、ＣＰＵコア113(演算ブロック103)以外のＣＰＵコアのクロック周波数Ｆ１，Ｆ２およびＦ４〜Ｆｍとシステムバス２のクロック周波数Ｆｓの関係は変化しない。従って。この場合、ＣＰＵコア113のクロック周波数Ｆ３とシステムバス２のクロック周波数Ｆｓの一致を確認するのみでよいことになる。
【０１０２】
以下の説明は、ＣＰＵコア111がシステムバス２のクロック周波数Ｆｓを変更する場合を想定し、図８におけるＳＴ１０９以降の処理を、各信号を一般化して説明する。すなわち、各演算ブロック101〜10m、ＣＰＵｉ(ＣＰＵ１〜ＣＰＵｍ：ＣＰＵコア111〜11m)、スルー回路ｉ(121〜12m)、スヌープ回路ｉ(131〜13m)、並びに、一般化された信号を用いて説明する。
【０１０３】
REQ SNOOPi＝『１』(ｉは、１以上ｍ以下の整数)を受け取った(ＳＴ１０９)スヌープ回路ｉは、ＣＰＵｉからシステムバス２へのアクセスが実行中で無いことを確認した後、制御回路３(ＳＴ１１１)とスルー回路ｉ(ＳＴ１１２)への"SNOOP DONEi"を『１』にする。なお、アクセスが実行中で無いことは、スルー回路ｉからのＲＥＱ２信号が『１』であることを確認することで判定できる。
【０１０４】
REQ STOPi＝『１』を受け取った(ＳＴ１１０)スルー回路ｉは、スヌープ回路ｉからSNOOP DONEi＝『１』を受信した(ＳＴ１１２)後、ＣＰＵｉからシステムバスへの新規のアクセスを遮断する。そして、この新規のアクセスを遮断した後、制御回路３への信号"REQ STOP DONEi"を『１』にする(ＳＴ１１３)。
【０１０５】
ここで、図３に示す演算ブロック１０１では、例えば、制御回路３がSNOOP DONEi＝『１』を受信した(ＳＴ１１１)後、選択信号SEL1を『１』にすることで、スルー回路121におけるセレクタ210が、ＲＥＱ１の値によらず常に『０』を選択して出力する。スルー回路121は、選択信号SEL1を『１』にした後、制御回路３への信号"REQ STOP DONE1"を『１』にする(ＳＴ１１３)。
【０１０６】
再び、一般化した説明に戻すと、制御回路３は、スルー回路ｉからの信号"REQ STOP DONE1〜m"が全て『１』になったことを確認して、クロック生成器４への信号"ALL REQ STOP DONE"を『１』にする(ＳＴ１１４)。
【０１０７】
"ALL REQ STOP DONE"＝『１』を受信した(ＳＴ１１４)クロック生成器４は、システムバス２のクロック周波数Ｆｓを変更する(ＳＴ１１５)。クロック周波数Ｆｓの変更が完了したら、制御回路３への信号"CLK CHANGE DONE"を『１』にする(ＳＴ１１６)。
【０１０８】
"CKL CHANGE DONE"＝『１』を受信した(ＳＴ１１６)制御回路３は、クロック生成器４内のクロック設定レジスタの値を読み出し、スルー回路ｉに対する信号"PATH CHANGE"制御する(ＳＴ１１７)。
【０１０９】
すなわち、制御回路３は、ＣＰＵｉのクロックＦｉがシステムバス２のクロックＦｓと同一の場合には、スルー回路ｉへの信号ＣＮＴｉを『１』にし、違う場合には、ＣＮＴｉを『０』にする。
【０１１０】
ＣＮＴｉ＝『１』を受信したスルー回路ｉのセレクタ211〜216は、入力『１』側の値(同期化回路221〜226を介さないそのままの値)を選択して出力する。一方、ＣＮＴｉ＝『０』を受信したスルー回路ｉのセレクタ211〜216は、入力『０』側の値(同期化回路221〜226を介して送信側の回路に同期化された値)を選択して出力する。
【０１１１】
なお、動作Ｃは、動作Ａに対応し、その説明は省略する。すなわち、動作ＣにおけるステップＳＴ１１８〜ＳＴ１２１は、動作ＡにおけるステップＳＴ１０１〜ＳＴ１０４に対応する。
【０１１２】
上述した図８の説明は、ＣＰＵコア111がシステムバス２のクロック周波数を変更した結果、ＣＰＵコア111〜11m(ＣＰＵ１〜ｍ)のいずれかのクロック周波数とシステムバス２のクロック周波数が異なる場合を想定している。しかしながら、結果的に、ＣＰＵのクロック周波数とシステムバスのクロック周波数が異なる場合も同様である。
【０１１３】
すなわち、例えば、ＣＰＵコア111がＣＰＵコア113(演算ブロック103)のクロック周波数Ｆ３を変更した結果、ＣＰＵコア113のクロック周波数Ｆ３とシステムバス２のクロック周波数Ｆｓが異なる場合も同様である。この場合、制御回路３は、全てのスヌープ回路１〜ｍからの"SNOOP DONE1〜SNOOP DONEm"を確認するのではなく、演算ブロック103におけるスヌープ回路３からの"SNOOP DONE3"のみを確認すればよいことになる。
【０１１４】
上述したように、スヌープ回路ｉは、ＣＰＵｉがシステムバスにアクセス中で無いことを通知する信号"SNOOP DONEi"を送信し、制御回路３は、全てのスヌープ回路ｉからアクセス中で無いことを受信する。
【０１１５】
そして、制御回路３は、全てのスヌープ回路ｉからアクセス中で無いことを確認した後、クロック生成器４に対してシステムバス２のクロックＦｓの切り替えを指示する信号"ALL REQ STOP DONE"を送信する。
【０１１６】
従って、システムバス２のクロックＦｓの切り替えは、全てのＣＰＵｉからシステムバス２へのアクセスがないタイミングで行うことができ、クロック変更中にアクセスを実行することによって誤った信号が伝送されるのを防ぐことができる。
【０１１７】
ここで、例えば、図３において、ＣＰＵコア111のクロック周波数Ｆ１とシステムバス２のクロック信号Ｆｓが同じになる場合、スルー回路121は、同期化回路(２段のＦＦ)221〜226を介さない経路でＣＰＵコア111とシステムバス２の間を繋ぐことになる。
【０１１８】
すなわち、ＣＰＵとシステムバスに対して、異なる周波数のクロックが供給される場合、同期化回路を介した経路で信号の送受信を行うが、同じ周波数のクロックが供給される場合には、同期化回路を介さずに直接信号の送受信を行うことができる。このように、同期化回路を介さずに直接信号の送受信を行うと、例えば、同期化回路によるＦＦ２段分の遅延を無くすことが可能になる。
【０１１９】
さらに、例えば、図３において、システムバス２のクロック切り替え中は、スルー回路101のセレクタ210は常に『０』を出力してＣＰＵコア111からシステムバス２へのアクセスを遮断することができる。
【０１２０】
すなわち、図１０を参照して後に詳述するが、システムバスのクロック切り替え中であっても、各ＣＰＵで実行中のプログラムがシステムバスにアクセスするかしないかに関わらず、安全にプログラムの実行を継続させることができる。
【０１２１】
このように、本実施例によれば、例えば、システムバスのクロック周波数を変更する場合、システムバスとの間で信号を遣り取りしていないＣＰＵに対しては、クロック供給を継続してＣＰＵ上でのプログラムの実行を継続させることができる。これにより、システムの性能低下を最小限に抑えることが可能になる。
【０１２２】
これは、システムバスのクロック周波数を変更した場合に限定されるものではなく、例えば、いずれか１つのＣＰＵのクロック周波数を変更してシステムバスのクロック周波数と異なるようになった場合でも、システムの性能低下を抑えることが可能になる。この場合、クロック周波数を変更しない残りのＣＰＵに対しては、それまでの動作を継続させることができる。
【０１２３】
また、ＣＰＵとシステムバスのクロック周波数が異なる場合、信号の遣り取りは、例えば、同期化回路を介して行うことになるが、ＣＰＵとシステムバスのクロック周波数が同じ場合には、同期化回路を介さずに信号の遣り取りすることができる。これにより、同期化回路による遅延を回避することが可能になる。
【０１２４】
ここで、ＣＰＵとシステムバスのクロック周波数が同じ場合とは、例えば、ＣＰＵまたはシステムバスの一方のクロック周波数を変更した結果、ＣＰＵとシステムバスのクロック周波数が同じになった場合も含むのはいうまでもない。
【０１２５】
図９は、ＣＰＵがシステムバスのクロック周波数を変更する動作の他の例を説明するための図であり、ＣＰＵ２がシステムバスにアクセスしている間に、ＣＰＵ１がシステムバスのクロック周波数変更指示を出す場合の動作を示すものである。
【０１２６】
図９は、図８の動作Ｂにおいて、ＣＰＵコア112(第２演算処理装置)がリクエスト信号"req"をスルー回路122(ＳＴ２０１)およびシステムバス２(ＳＴ２０２)を介して周辺回路(例えば、周辺回路61)に出力した状態で、図８の動作Ｂを処理する場合を示している。この場合、その周辺回路61からのアクノリッジ信号"ack"は、システムバス２からスルー回路122を介して(ＳＴ２１４)、ＣＰＵコア112に戻される(ＳＴ２１５)。
【０１２７】
このように、図９では、ＣＰＵコア112が出力した信号"req (REQ1)"＝『１』がスルー回路122を経由して(ＳＴ２０１)システムバス２に転送される(ＳＴ２０２)。このアクセスに対するアクノリッジ信号"ack"がシステムバス２から出力される(ＳＴ２１４)前に、ＣＰＵ111(第３演算処理装置)から信号"req clock change"が出力される(ＳＴ２０３)。さらに、制御回路３からスヌープ回路131および132に対して信号"req snoop (REQ SNOOP1, REQ SNOOP2)"が出力される(ＳＴ２０７，ＳＴ２０８)。
【０１２８】
スヌープ回路132は、スルー回路122からの信号"req (REQ1)"が『０』に変化したのを確認して"snoop done (SNOOP DONE2)"＝『１』を出力する(ＳＴ２１６)。制御回路３は、全てのスヌープ回路(131,132)からの信号"snoop done (SNOOP DONE1, SNOOP DONE2)"の受信(ＳＴ２１１，ＳＴ２１６)を待って、"all req stop done"＝『１』を出力する(ＳＴ２１８)。
【０１２９】
なお、図９における他の処理は、ＣＰＵコア112(演算ブロック101)に関する処理(ＳＴ２０８，ＳＴ２１０，ＳＴ２１４〜ＳＴ２１７)を除き、実質的に図８と同様であり、その説明は省略する。
【０１３０】
すなわち、図９のステップＳＴ２０３〜ＳＴ２０７，ＳＴ２０９，ＳＴ２１１〜ＳＴ２１３およびＳＴ２１８〜ＳＴ２２１は、図８のステップＳＴ１０５〜ＳＴ１０９，ＳＴ１１０，ＳＴ１１１〜ＳＴ１１３およびＳＴ１１４〜ＳＴ１１７に対応する。
【０１３１】
図１０は、ＣＰＵがシステムバスのクロック周波数を変更した後の動作の一例を説明するための図であり、システムバス２のクロック周波数Ｆｓを変更している間に、ＣＰＵコア112からシステムバス２へのアクセスが発生した場合の動作を示している。
【０１３２】
システムバス２のクロック周波数Ｆｓの変更中(ＳＴ３０１)に、ＣＰＵコア112からスルー回路122に対してリクエスト信号"req"が出力される(ＳＴ３０２)。すなわち、ＣＰＵコア112からスルー回路122に対するＲＥＱ１が『１』に変化する。ここで、システムバス２のクロック周波数変更中、スルー回路122のセレクタ(アクセスセレクタ)210は『０』を出力し続け、ＲＥＱ２が『１』になるのを抑制する。
【０１３３】
システムバス２のクロック周波数Ｆｓの変更が完了すると、クロック生成器４から制御回路３に対して信号"clk change done"を出力する(ＳＴ３０３)。制御回路３は、システムバス２のクロック周波数Ｆｓの変更が完了したのを確認して信号"path change"をスルー回路122に出力する(ＳＴ３０４)。
【０１３４】
すなわち、システムバス２のクロック周波数Ｆｓの変更が完了すると、制御回路３からのSEL2＝『０』を受信した後、ＣＰＵコア112からのＲＥＱ１を選択して出力する。これにより、スルー回路122からシステムバス２に対してリクエスト信号"req"が出力される(ＳＴ３０５)。
【０１３５】
なお、システムバス２に転送されたリクエスト信号"req"は、例えば、システムバス２に接続された周辺回路61に出力され、その周辺回路からのアクノリッジ信号"ack"がシステムバス２からスルー回路122を介して(ＳＴ３０６)、ＣＰＵコア112に戻される(ＳＴ３０７)。
【０１３６】
これにより、システムバスのクロック切り替え中であっても、各ＣＰＵで実行中のプログラムがシステムバスにアクセスするかしないかに関わらず、安全にプログラムの実行を継続させることができる。
【０１３７】
このように、本実施例によれば、例えば、システムバスのクロック周波数を変更する場合、システムバスとの間で信号を遣り取りしていないＣＰＵに対しては、クロック供給を継続してＣＰＵ上でのプログラムの実行を継続させることができる。これにより、システムの性能低下を最小限に抑えることが可能になる。
【０１３８】
図１１は、制御回路の状態遷移マシンの一例を示す図である。図１１に示されるように、制御回路３の状態としては、アイドル("idle")，待ち("wait")および変更("change")の３つが存在する。
【０１３９】
アイドル状態は、システムバスのクロック変更を行っておらず、一定のクロック信号で動作している定常状態である。このアイドル状態において、クロック生成器から"clk change start"＝『１』を受信すると、待ち状態に遷移する。
【０１４０】
待ち状態では、"req snoop (REQ SNOOP1〜REQ SNOOPm)"＝『１』、および、"req stop (REQ STOP1〜REQ STOPm)"＝『１』を出力し、"SNOOP DONE1〜SNOOP DONEm"と"REQ STOP DONE1〜REQ STOP DONEm"の全てが『１』になるのを待って、変更状態に遷移する。
【０１４１】
以上、詳述したように、本実施例によれば、半導体集積回路に含まれる複数のＣＰＵにおいて、システムバス或いはいずれかのＣＰＵのクロック周波数を変更する場合、動作可能なＣＰＵはそのまま処理を継続させることができる。
【０１４２】
さらに、クロック周波数の変更により、システムバスのクロック周波数と異なる動作周波数のＣＰＵは、同期化回路を介在させ、また、同じ動作周波数のＣＰＵは直接信号の送受信を行うことで、同期化回路の遅延による性能の低下を最小限に抑えることができる。
【０１４３】
変更状態では、"all req stop done"＝『１』を出力し、クロック生成器内の制御レジスタの各ＣＰＵのクロック設定値とシステムバスのクロック設定値を読み出す。さらに、ＣＰＵｉとシステムバスのクロックが同一の場合はＣＮＴｉ＝『１』、また、異なる場合はＣＮＴｉ＝『０』を設定して出力する。そして、"clk change done"が『１』になるのを待ってアイドル状態に遷移する。
【０１４４】
ここに記載されている全ての例および条件的な用語は、読者が、本発明と技術の進展のために発明者により与えられる概念とを理解する際の助けとなるように、教育的な目的を意図したものである。
【０１４５】
また、具体的に記載されている上記の例および条件、並びに、本発明の優位性および劣等性を示すことに関する本明細書における例の構成に限定されることなく、解釈されるべきものである。
【０１４６】
さらに、本発明の実施例は詳細に説明されているが、本発明の精神および範囲から外れることなく、様々な変更、置換および修正をこれに加えることが可能であると解すべきである。
【０１４７】
以上の実施例を含む実施形態に関し、さらに、以下の付記を開示する。
（付記１）
第１クロックで動作するシステムバスと、
前記システムバスに接続され、第２クロックで動作する第１演算処理装置を含む複数の演算処理装置と、
前記システムバスおよび前記演算処理装置を制御する制御回路と、を有し、
前記制御回路は、前記演算処理装置から前記システムバスへのアクセスが発生していないことを確認した後に、前記第１クロックまたは前記第２クロックの周波数を変更する、
ことを特徴とする半導体集積回路。
【０１４８】
（付記２）
前記各演算処理装置、該演算処理装置に対応して設けられたスルー回路、および、当該演算処理装置に対応して設けられたスヌープ回路は、それぞれ演算ブロックに設けられ、
前記各演算処理装置のクロック信号は、当該演算処理装置が設けられた演算ブロックに含まれる回路に対して与えられる、
ことを特徴とする付記１に記載の半導体集積回路。
【０１４９】
（付記３）
前記スルー回路は、
前記演算処理装置および前記システムバスにおいて、送信側の信号のクロック周波数を、受信側の信号のクロック周波数に同期させる同期化回路と、
前記送信側の信号、または、前記同期化回路により前記受信側の信号のクロック周波数に同期された信号のいずれかを選択するセレクタと、を有する、
ことを特徴とする付記２に記載の半導体集積回路。
【０１５０】
（付記４）
前記セレクタは、
前記演算処理装置のクロック周波数と前記システムバスのクロック周波数が異なる場合、前記同期化回路により前記受信側の信号のクロック周波数に同期された信号を選択して出力し、
前記演算処理装置のクロック周波数と前記システムバスのクロック周波数が等しい場合、前記送信側の信号を選択して出力する、
ことを特徴とする付記３に記載の半導体集積回路。
【０１５１】
（付記５）
前記制御回路は、
前記第１クロックの周波数を変更する際、前記複数の演算処理装置からの全てのアクセスが発生していないことを確認してから実行する、
ことを特徴とする付記２乃至付記４のいずれか一項に記載の半導体集積回路。
【０１５２】
（付記６）
前記制御回路は、
前記スヌープ回路により検出した前記演算処理装置の全てのアクセスリクエストが発生していないことを確認した後、前記システムバスのクロック周波数を変更する、
ことを特徴とする付記５に記載の半導体集積回路。
【０１５３】
（付記７）
前記制御回路は、
前記第２クロックの周波数を変更する際、前記第１演算処理装置からのアクセスが発生していないことを確認してから実行する、
ことを特徴とする付記２乃至付記４のいずれか一項に記載の半導体集積回路。
【０１５４】
（付記８）
前記制御回路は、
前記スヌープ回路により検出した前記第１演算処理装置からのアクセスリクエストが発生していないことを確認した後、前記第１演算処理装置のクロック周波数を変更する、
ことを特徴とする付記７に記載の半導体集積回路。
【０１５５】
（付記９）
前記各スルー回路は、さらに、
前記各演算処理装置からのアクセスリクエストに従うことなく、クロック周波数の変更中、前記演算処理装置からのアクセスリクエストを遮断するアクセスセレクタを有する、
ことを特徴とする付記２乃至付記８のいずれか一項に記載の半導体集積回路。
【０１５６】
（付記１０）
前記制御回路は、
前記複数の演算処理装置における第２演算処理装置が前記システムバスに対するアクセスを実行中に、前記複数の演算処理装置における第３演算処理装置が前記システムバスのクロック周波数を変更する際、前記システムバスに対する前記第２演算処理装置のアクセスが完了したのを確認した後、前記システムバスのクロック周波数を変更する、
ことを特徴とする付記１乃至付記９のいずれか一項に記載の半導体集積回路。
【０１５７】
（付記１１）
前記複数の演算処理装置および前記システムバスは、それぞれ電源電圧およびクロック周波数が独立に制御される、
ことを特徴とする付記１乃至付記１０のいずれか一項に記載の半導体集積回路。
【０１５８】
（付記１２）
システムバスおよび該システムバスに接続された複数の演算処理装置を有する半導体集積回路の制御方法であって、
前記複数の演算処理装置および前記システムバスは、それぞれ電源電圧およびクロック周波数が独立に制御され、
前記演算処理装置から前記システムバスへのアクセスが発生していないことを確認した後に、前記第１クロックまたは前記第２クロックの周波数を変更する、
ことを特徴とする半導体集積回路の制御方法。
【０１５９】
（付記１３）
システムバスおよび該システムバスに接続された複数の演算処理装置を有する半導体集積回路の制御方法であって、
前記複数の演算処理装置および前記システムバスは、それぞれ電源電圧およびクロック周波数が独立に制御され、
前記演算処理装置における第１演算処理装置のクロック周波数を変更する際、該第１演算処理装置からのアクセスが発生していないことを確認してから実行する、
ことを特徴とする半導体集積回路の制御方法。
【０１６０】
（付記１４）
前記システムバスのクロック周波数に等しいクロック周波数で動作する演算処理装置は、当該演算処理装置および前記システムバスにおける送信側の信号を、そのまま受信側の信号として出力し、
前記システムバスのクロック周波数とは異なるクロック周波数で動作する演算処理装置は、当該演算処理装置および前記システムバスにおける送信側の信号を、受信側の信号のクロック周波数に同期させて出力する、
ことを特徴とする付記１２または付記１３に記載の半導体集積回路の制御方法。
【０１６１】
（付記１５）
前記複数の演算処理装置における、前記システムバスに対するアクセスを行っていない演算処理装置は、
前記クロック周波数の変更を行っている間、当該演算処理装置で実行中の処理を継続する、
ことを特徴とする付記１２乃至付記１４のいずれか一項に記載の半導体集積回路の制御方法。
【符号の説明】
【０１６２】
１    半導体集積回路(ＬＳＩ)
２    システムバス(内部バス)
３    制御回路
４    クロック生成器
５    ＤＣ−ＤＣコンバータ
４１    制御レジスタ
42s，421〜42m    セレクタ
６１〜６ｎ    周辺回路
101〜10m    演算ブロック
111〜11m    ＣＰＵコア(演算処理装置、ＣＰＵｉ：ＣＰＵ１〜ＣＰＵｍ)
121〜12m    スルー回路
131〜13m    スヌープ回路
210    セレクタ(アクセスセレクタ)
211〜216    セレクタ
221〜226    同期化回路
401〜40p    クロック生成ブロック
【手続補正２】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
第１クロックで動作するシステムバスと、
前記システムバスに接続され、第２クロックで動作する第１演算処理装置を含む複数の演算処理装置と、
前記システムバスおよび前記演算処理装置を制御する制御回路と、を有し、
前記制御回路は、前記演算処理装置から前記システムバスへのアクセスが発生していないことを確認した後に、前記第１クロックまたは前記第２クロックの周波数を変更する、
ことを特徴とする半導体集積回路。
【請求項２】
前記各演算処理装置、該演算処理装置に対応して設けられたスルー回路、および、当該演算処理装置に対応して設けられたスヌープ回路は、それぞれ演算ブロックに設けられ、
前記各演算処理装置のクロック信号は、当該演算処理装置が設けられた演算ブロックに含まれる回路に対して与えられる、
ことを特徴とする請求項１に記載の半導体集積回路。
【請求項３】
前記スルー回路は、
前記演算処理装置および前記システムバスにおいて、送信側の信号のクロック周波数を、受信側の信号のクロック周波数に同期させる同期化回路と、
前記送信側の信号、または、前記同期化回路により前記受信側の信号のクロック周波数に同期された信号のいずれかを選択するセレクタと、を有する、
ことを特徴とする請求項２に記載の半導体集積回路。
【請求項４】
前記制御回路は、
前記第１クロックの周波数を変更する際、前記複数の演算処理装置からの全てのアクセスが発生していないことを確認してから実行する、
ことを特徴とする請求項２または請求項３に記載の半導体集積回路。
【請求項５】
前記制御回路は、
前記第２クロックの周波数を変更する際、前記第１演算処理装置からのアクセスが発生していないことを確認してから実行する、
ことを特徴とする請求項２または請求項３に記載の半導体集積回路。
【請求項６】
前記各スルー回路は、さらに、
前記各演算処理装置からのアクセスリクエストに従うことなく、クロック周波数の変更中、前記演算処理装置からのアクセスリクエストを遮断するアクセスセレクタを有する、
ことを特徴とする請求項２乃至請求項５のいずれか一項に記載の半導体集積回路。
【請求項７】
システムバスおよび該システムバスに接続された複数の演算処理装置を有する半導体集積回路の制御方法であって、
前記複数の演算処理装置および前記システムバスは、それぞれ電源電圧およびクロック周波数が独立に制御され、
前記演算処理装置から前記システムバスへのアクセスが発生していないことを確認した後に、前記第１クロックまたは前記第２クロックの周波数を変更する、
ことを特徴とする半導体集積回路の制御方法。
【請求項８】
システムバスおよび該システムバスに接続された複数の演算処理装置を有する半導体集積回路の制御方法であって、
前記複数の演算処理装置および前記システムバスは、それぞれ電源電圧およびクロック周波数が独立に制御され、
前記演算処理装置における第１演算処理装置のクロック周波数を変更する際、該第１演算処理装置からのアクセスが発生していないことを確認してから実行する、
ことを特徴とする半導体集積回路の制御方法。
【請求項９】
前記システムバスのクロック周波数に等しいクロック周波数で動作する演算処理装置は、当該演算処理装置および前記システムバスにおける送信側の信号を、そのまま受信側の信号として出力し、
前記システムバスのクロック周波数とは異なるクロック周波数で動作する演算処理装置は、当該演算処理装置および前記システムバスにおける送信側の信号を、受信側の信号のクロック周波数に同期させて出力する、
ことを特徴とする請求項７または請求項８に記載の半導体集積回路の制御方法。
【請求項１０】
前記複数の演算処理装置における、前記システムバスに対するアクセスを行っていない演算処理装置は、
前記クロック周波数の変更を行っている間、当該演算処理装置で実行中の処理を継続する、
ことを特徴とする請求項７乃至請求項９のいずれか一項に記載の半導体集積回路の制御方法。
【国際調査報告】
2014006722.tif 000014
2014006722.tif 000015
2014006722.tif 000016
2014006722.tif 000017