(57)【要約】【課題】負荷に応じてクロック周波数（および電源電圧）を制御する半導体装置で、チップ温度が上限温度を超えない範囲で、無駄なパフォーマンス低下を抑制する制御の実現。【解決手段】クロックに応じて動作する回路部と、回路部の温度を検出する温度センサと、温度センサで検出された温度が所定値を超えた場合に、回路部の消費電力の時間差分に基づいてクロックの周波数を制御する制御部13,21,22と、を有する半導体装置。【選択図】図４
2015130035.tif 000002
【特許請求の範囲】
【請求項１】
クロックに応じて動作する回路部と、
前記回路部の温度を検出する温度センサと、
前記温度センサで検出された温度が所定値を超えた場合に、前記回路部の消費電力の時間差分に基づいて前記クロックの周波数を制御する制御部と、を有する半導体装置。
【請求項２】
前記制御部は、取得した電力値から、現時点までの前記電力値の変動および現時点までの経過時間に基づいて電力の指数移動平均を算出し、算出した前記指数移動平均の時間差分に基づいて前記クロックの周波数を制御する請求項１に記載の半導体装置。
【請求項３】
前記制御部は、前記クロック周波数と共に電源電圧を制御し、前記温度センサで検出した温度が所定上限を上回った際に、前記指数移動平均の時間差分に基づいて前記クロック周波数および電源電圧を変更する請求項１または２に記載の半導体装置。
【請求項４】
前記半導体装置の消費電力が最大消費電力になっても温度限界を超えない範囲で最大になるように所定上限が設定される請求項１から３のいずれか１項に記載の半導体装置。
【請求項５】
前記制御部は、前記温度センサで検出した温度が所定下限を下回った際に、前記電力変動情報に基づいて前記クロック周波数を変更する請求項１から４のいずれか１項に記載の半導体装置。
【請求項６】
クロックに応じて動作する回路部を有する半導体装置のクロック周波数の制御方法であって、
前記回路部の温度を検出し、
前記回路部の消費電力をモニタし、
モニタした前記消費電力の時間差分を算出し、
検出した温度が所定上限を上回った際に、前記消費電力の時間差分に基づいて前記クロック周波数を変更する制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体装置およびその制御方法に関する。
【背景技術】
【０００２】
マイクロプロセッサの性能向上にともない消費電力は年々上昇する傾向にあり、電力供給能力の上限やチップ温度上限のために、プロセッサ等の半導体装置を仕様上実行可能とされている最大負荷で動作させることができないという問題が表面化してきている。以下、半導体装置として、プロセッサ（ＣＰＵ）を例とした場合を説明する。
【０００３】
プロセッサは、消費電力上限や温度上限を超えないように動作することが求められ、もしこれらの制約を超えた場合には、信号遅延などにより誤動作が発生する場合がある。そこで、プロセッサが通常動作時に消費電力上限や温度上限を超える可能性がある状況において、これら制約を超えないように負荷を調整することが行われる。負荷を調整する方法として、ＤＦＳ(Dynamic Frequency Scaling)や、ＤＶＦＳ(Dynamic Voltage and Frequency Scaling)といった手法が知られている。ＤＦＳは、クロック周波数を動的に変更することで負荷を変化させる手法である。ＤＶＦＳは、クロック周波数を下げることで生じるタイミング余裕の分だけ動作電圧を下げることで消費電力をさらに下げる手法である。
【０００４】
上記の手法を行う場合、負荷の上限を超えない範囲でなるべく高いクロック周波数で動作させることが、プロセッサの性能（パフォーマンス）の観点からは望ましい。負荷の上限を超えない範囲でなるべく高いクロック周波数で動作させる制御方法として、上限値の下に制御の閾値を設け、負荷がこの閾値を超えた時にクロック周波数や電源電圧を下げるという制御を開始する方法が一般的に行われる。これにより、クロック周波数または電源電圧が下がり、それに応じて負荷が下がる。プロセッサ（ＬＳＩ）の温度が動作制約となる場合には、制御用の温度閾値を設け、プロセッサの温度が温度閾値を超えた時にクロック周波数を下げるという処理になる。ただし、温度が温度閾値を超えた時にクロック周波数を下げた場合も、実際にクロック周波数が下がるまでには遅延があり、その間温度は上昇を続ける。
【０００５】
この制御において、温度閾値を下げるとプロセッサのパフォーマンスが定常的に下がることになるため、なるべく温度閾値は上限温度に近い値であることが望ましい。しかし、温度閾値が上限温度に近すぎるとプロセッサの温度が温度閾値を超えてからクロック周波数が下がるまでの間に温度が上限温度を超えてしまう場合があり得る。そのため、温度閾値を、周波数制御にかかる遅延時間における温度上昇分以上低くする必要がある。
【０００６】
上記の温度制御で想定される最大の温度上昇が発生するのは、負荷変動により消費電力がステップ的に最大値に変化する場合である。この場合、温度閾値を超えた時に、クロック周波数を、最大の消費電力でも温度が上限温度を下回るようなクロック周波数に下げる必要がある。
【０００７】
温度閾値を超えた時の電力が最大消費電力より小さい場合はクロック周波数を上記のように下げる必要はない。しかし、検出した温度のみに基づいて周波数制御を行う場合、温度閾値超えした時点で最終的にどこまで温度が上昇するかを判別することが困難なため、負荷変動が最大の場合でも温度が上限を超えないように常に上記の周波数まで下げることになる。そのため、このような制御は、プロセッサのパフォーマンス低下につながる。
【０００８】
この対策として、温度閾値を２点設けて温度がそれぞれの閾値を超えた時間差を測定するなどして間接的に温度変化を予測することはできるが、その場合実質的に閾値温度の低下や制御遅延の増大になり、定常的なプロセッサのパフォーマンスが低下してしまう。
【０００９】
逆に負荷が軽くなり温度に余裕が生じた場合に周波数を上げるために、上記と同様に周波数制御用の閾値を設けてその閾値を下回ったらクロック周波数を上げるという制御が考えられる。しかし、この場合も閾値を下回った時点でどこまで温度が下がるのかを温度のみで判定することが困難である。具体的には、クロック周波数を上げすぎて逆に温度上限を超えてしまう場合が起き得る。これを防止するためは、少しずつクロック周波数を上げていくことになる。しかし、このような制御では、適正なクロック周波数になるまでに時間がかかり、その間プロセッサのパフォーマンスが、無駄に低下した状態となる。
【００１０】
このような無駄なパフォーマンス低下を防ぐために温度の代わりに消費電力をモニタして消費電力の値に応じてクロック周波数を切り替えるという構成が考えられるが、以下のような問題がある。
【００１１】
（１）動作制約である温度制約をシステムの定格の熱抵抗値を用いて電力値に置き換えて制御を行うため、直接温度で制御するのと比較して実際の熱抵抗との差だけ変換誤差マージンが発生する。マージンを考慮する分、精密な制御が難しくなる。
【００１２】
（２）電力制御では上限温度に対応する上限電力を予め設定することになり、周囲温度が変わって温度余裕が変化しても、それに上限電力が追従できないため周囲温度の変化に伴う電力余裕の変化に追従できない。
【００１３】
以上の通り、消費電力に基づく制御は、様々な制御マージンよる定常パフォーマンスの低下につながる。また、温度モニタおよび電力モニタなどで観測したその時の温度および消費電力の両方を用いて制御することも考えられるが、制御が複雑になるという問題がある。
【先行技術文献】
【特許文献】
【００１４】
【特許文献１】特開２００４−３１０７８５号公報
【特許文献２】特開２０１２−２２１３０１号公報
【特許文献３】特開２００３−１４０７８２号公報
【発明の概要】
【発明が解決しようとする課題】
【００１５】
以上説明したように、電力供給能力には余裕があるがチップの動作保障温度条件が厳しく、チップのジャンクション温度の上限制約が、最大許容負荷を決定するような動作条件のマイクロプロセッサのような半導体装置がある。このような半導体装置において、チップ温度が上限温度を超えないように、クロック周波数、さらに必要に応じて電源電圧を制御し、パフォーマンス低下を低く抑えることが望まれている。
【００１６】
実施形態によれば、負荷に応じてクロック周波数（必要であれば電源電圧）を制御する半導体装置で、チップ温度が上限温度を超えない範囲で、無駄なパフォーマンス低下を抑制する制御が実現される。
【課題を解決するための手段】
【００１７】
発明の第１の観点によれば、半導体装置は、クロックに応じて動作する回路部と、回路部の温度を検出する温度センサと、温度センサで検出された温度が所定値を超えた場合に、回路部の消費電力の時間差分に基づいてクロックの周波数を制御する制御部と、を有する。
【００１８】
発明の第２の観点の制御方法は、クロックに応じて動作する回路部を有する半導体装置のクロック周波数の制御方法であって、回路部の温度を検出し、回路部の消費電力をモニタし、モニタした前記消費電力の時間差分を算出し、検出した温度が所定上限を上回った際に、消費電力の時間差分に基づいて前記クロック周波数を変更する。
【発明の効果】
【００１９】
実施形態によれば、負荷に応じてクロック周波数（必要であれば電源電圧）を制御する半導体装置で、チップ温度が上限温度を超えない範囲で最大のクロック周波数になるように制御され、無駄なパフォーマンス低下を抑制する。
【図面の簡単な説明】
【００２０】
【図１】図１は、ＤＶＦＳ制御を行う一般的な半導体装置（プロセッサ：ＣＰＵ）の構成例を示す図である。
【図２】図２は、電力増加によって温度が上昇して閾値を超える際の電力および温度の時間経過に応じた変化例を表した図である。
【図３】図３は、温度閾値超えした時にクロック周波数を、最悪でも温度が上限値を下回るようなクロック周波数まで下げる問題点を説明する図である。
【図４】図４は、ＤＶＦＳ制御を行う実施形態の半導体装置（チップ、ここではプロセッサ：ＣＰＵ）の構成を示す図である。
【図５】図５は、電力モニタの処理を行う回路例を示す図である。
【図６】図６は、同じ温度で異なるステップ状の電力変動量による温度の時間変化の例を示す図である。
【図７】図７は、異なる温度でステップ状の同じ電力変動量による温度の時間変化の例を示す図である。
【図８】図８は、電力の時系列サンプルの指数移動平均およびその時間差分を説明する図であり、（Ａ）は電力がステップ変化した場合の指数移動平均およびその時間差分の変化を、（Ｂ）は時系列データの指数重みづけを示す。
【図９】図９は、指数移動平均の時間差分を生成する回路の概略構成を示す図である。
【図１０】図１０は、指数移動平均の時間差分に対応する温度変化速度および温度変動量の例を示すテーブルである。
【図１１】図１１は、電圧・周波数制御部の制御手順を示すフローチャートである。
【図１２】図１２は、図１１の制御方法を実行した場合の温度変化の例を示す図である。
【図１３】図１３は、さらに別の温度閾値を設けた場合の電圧・周波数制御部１３の制御手順を示すフローチャートである。
【図１４】図１４は、図１３の制御方法を実行した場合の温度変化の例を示す図である。
【図１５】図１５は、最終的に調整されるＰＬＬのクロック周波数を導出するための表の例を示す図である。
【図１６】図１６は、電力値の差分ΔP/Pを計算する回路例を示す図である。
【図１７】図１７は、クロック周波数を下げる側の制御に用いる周波数変換テーブルを示す。
【図１８】図１８は、クロック周波数を上げる側の制御に用いるテーブルを示す。
【図１９】図１９は、急激に周波数を低下させるテーブルの例を示す。
【図２０】図２０は、対象プロセッサがパワーゲーティングを行う場合の電力モニタの構成を示す図である。
【図２１】図２１は、負荷の低い周波数領域はソフトウェア制御を行い、負荷の高い周波数領域はハードウェア制御を行う場合の、周波数コードと、周波数制御方式の種別（ハードウェアとソフトウェア）と、クロック周波数と、を対応づけたテーブルの例を示す。
【図２２】図２２は、温度が温度閾値を超えて上昇し、クロック周波数を下げる場合の実施形態の制御の効果を説明する図であり、（Ａ）温度のみで制御する場合の温度変化を、（Ｂ）が実施形態の制御の場合の温度変化を示す。
【図２３】図２３は、温度が温度閾値を超えて低下し、クロック周波数を上げる場合の実施形態の制御の効果を説明する図であり、（Ａ）温度のみで制御する場合の温度変化を、（Ｂ）が実施形態の制御の場合の温度変化を示す。
【図２４】図２４は、実施形態の制御方法を適用したマルチコアプロセッサの第１構成例を示す図である。
【図２５】図２５は、実施形態の制御方法を適用したマルチコアプロセッサの第２構成例を示す図である。
【図２６】図２６は、実施形態の制御方法を適用したマルチコアプロセッサの第３構成例を示す図である。
【発明を実施するための形態】
【００２１】
実施形態を説明する前に、チップ温度が限界温度を超えない範囲内で、半導体装置が高い処理性能を達成するようにクロック周波数、および必要に応じて電源電圧を調整する一般的な周波数・電圧制御技術について説明する。以下の説明では、半導体装置として、プロセッサ（ＣＰＵ）を例とした場合について説明する。
【００２２】
前述のように、プロセッサが通常動作時に消費電力上限や温度上限を超える可能性がある状況においてこれら制約を超えないように負荷を調整する方法として、クロック周波数を動的に変更するＤＦＳや、電源電圧も下げることでＤＶＦＳが知られている。以下、主としてクロック周波数の動的変更について説明するが、電源電圧についても同様に制御される。
【００２３】
温度の上限を超えない範囲でなるべく高いクロック周波数でプロセッサを動作させるように制御する方法として、上限値の下に制御の閾値を設け、温度がこの閾値を超えた時にクロック周波数や電源電圧を下げるという制御を開始する制御方法が知られている。クロック周波数や電源電圧の下げを指令しても、実際に負荷が下がるまで遅延があり、その間にも温度は増加する。そこで、温度が上限値より低い閾値を超えるとクロック周波数（および電源電圧）を下げて負荷の減少を開始すると、遅延があっても温度が上限値に達するまでの間にクロック周波数（および電源電圧）が下がり、負荷が減少する。
【００２４】
図１は、ＤＶＦＳ制御を行う一般的な半導体装置（プロセッサ：ＣＰＵ）の構成例を示す図である。
ＣＰＵ１０は、内部クロックを生成するＰＬＬ回路１１と、内部電源（図示せず）の発生する電圧を制御する電源制御部１２と、電圧・周波数制御部１３と、を有する。温度モニタがチップ内（オンチップ）またはチップ外（オフチップ）に設けられており、チップ（ＣＰＵ）の温度を検出し、検出した温度が温度閾値より高いか比較し、比較結果が電圧・周波数制御部１３に供給される。電圧・周波数制御部１３は、検出した温度が温度閾値より高いという比較結果を受けると、ＰＬＬ１１の生成するクロックの周波数を下げ、電源制御部１２に電源電圧を低下させる指令を出力する。
【００２５】
温度閾値を低くすると、ＣＰＵのパフォーマンスが定常的に下がることになるため、なるべく閾値温度は上限温度に近い値にすることが望ましい。しかし、閾値温度が上限温度に近すぎると温度が閾値を超えてから周波数（および電源電圧）が下がるまでの間に温度が上限温度を超えてしまうため、周波数制御（および電源電圧）に要する遅延における温度上昇分の余裕をみて温度閾値を設定する。
【００２６】
図２は、電力増加によって温度が上昇して閾値を超える際の電力および温度の時間経過に応じた変化例を表した図である。図２では、太い実線が消費電力を、太い破線が温度を、細い実線が温度の上限値および温度閾値を示す。
温度制御の最悪の場合（ワーストケース）は、図２に示すように、負荷変動により電力がステップ的に最悪値Ｐｍａｘに変化するケースである。この場合、クロック周波数をワーストの消費電力でも温度が上限値を下回るようなクロック周波数（Ｆｍｉｎとする）に下げる必要がある。そのため、温度が温度閾値を超えると、クロック周波数をＦｍｉｎに下げる指令を出すが、実際にクロック周波数が低下して負荷が減少し、実際に温度が低下するまでの制御遅延がある。そのために、温度は、温度閾値を超えた後も上昇する。そのため、周波数制御（および電源電圧）に要する遅延における温度上昇（Ｘで示す）分の余裕をみて温度閾値を設定する。
【００２７】
上記のケースで、温度が閾値超えした時の電力がＰｍａｘより小さい（ワーストケースでない）場合、クロック周波数をＦｍｉｎまで下げる必要はない。しかし、温度に基づいて周波数制御を行う場合、温度閾値超えした時点で最終的にどこまで温度が上昇するかを判別することが困難なため、負荷変動が最悪の場合でも温度が上限を超えないように常にＦｍｉｎまでクロック周波数を下げることになる。
【００２８】
そこで、温度閾値を２点設けて温度がそれぞれの閾値を超えた時間差を測定するなどして間接的に温度変化を予測することはできるが、その場合実質的に閾値温度の低下や制御遅延の増大になり定常的な性能が低下してしまうという問題がある。
【００２９】
逆に、負荷が軽くなり温度に余裕が生じた場合にクロック周波数を上げるために、クロック周波数を下げる制御と同様に、クロック周波数制御用の下側の温度閾値を設けてその下側の温度閾値を下回ったらクロック周波数を上げるという制御が考えられる。しかし、この場合も下側の温度閾値を下回った時点で、どこまで温度が下がるのかを温度のみで判定することが困難である。そのため、クロック周波数を上げすぎて逆に温度の上限値を超えてしまうのを防止するために、少しずつ周波数を上げていくことになり、適正なクロック周波数になるまでに時間がかかりその間無駄にパフォーマンスが低い状態となる。
【００３０】
図３は、上記の温度閾値超えした時にクロック周波数をＦｍｉｎまで下げる問題点を説明する図である。図３では、太い実線が消費電力を、太い破線が温度を、細い実線が温度の上限値を、細い破線がクロック周波数のｄｏｗｎ閾値およびｕｐ閾値を、示す。
【００３１】
図３に示すように、電力が大きく上昇すると、温度は温度閾値を超え、それに応じてクロック周波数をＦｍａｘからＦｍｉｎに変化させるので、温度は上限値近くまで上昇した後に低下に転じ、温度が温度閾値を下回る。そこで、クロック周波数をＦｍｉｎからＦｍａｘに変化させるが、電力上昇が小さくても、温度は温度閾値を超えるためクロック周波数をＦｍａｘからＦｍｉｎに変化させる。この場合、温度は、少し上昇した後、低下を開始する。クロック周波数のＦｍｉｎへの低下により電力は大幅に低下するため、温度は比較的低い温度からさらに低下する。そこで、クロック周波数を増加させ消費電力が段階的に増加するが、温度が温度閾値近くまで上昇するのに長い時間を要することになる。この間、プロセッサは、本来得られるパフォーマンスに比べて低いパフォーマンスで動作することになり、プロセッサのパフォーマンス低下につながる。
【００３２】
このような無駄なパフォーマンス低下を防ぐために、温度の代わりに消費電力をモニタして消費電力の値に応じてクロック周波数を切り替えるという構成も考えられるが、前述のような問題がある。そのため、様々な制御マージンなどによる定常性能の低下につながる。また、温度制御を行い温度が閾値を超えた時に電力モニタなどで観測したその時点の消費電力を用いて制御することも考えられるが、それだけでは問題を解決できず、良好な制御が行えない。
【００３３】
以下に説明する実施形態では、上記の温度による周波数制御において、負荷増加や負荷減少により温度が制御閾値（温度閾値）をまたいだ時の周波数制御で生じる無駄なパフォーマンス低下を抑え、温度制御における過渡的なパフォーマンスを向上する。
【００３４】
図４は、ＤＶＦＳ制御を行う実施形態の半導体装置（チップ、ここではプロセッサ：ＣＰＵ）の構成を示す図である。
【００３５】
実施形態のＣＰＵ１０は、ＰＬＬ回路１１と、電源制御部１２と、電圧・周波数制御部１３と、電力モニタ２１と、電力変動情報生成部２２と、を有する。ＰＬＬ回路１１は、内部クロックを生成し、図１の一般的なＣＰＵのＰＬＬと同じものである。電源制御部１２は、内部電源（図示せず）の発生する電圧を制御し、図１の一般的なＣＰＵの電源制御部と同じものである。実施形態でも、温度モニタがチップ内（オンチップ）またはチップ外（オフチップ）に設けられており、チップ（ＣＰＵ）の温度を検出し、検出した温度が温度閾値より高いか比較し、比較結果が電圧・周波数制御部１３に供給される。電力モニタ２１は、チップ各部の主要な動作情報のカウント値から動的電力値を概算するアクティビティカウンタベースのモジュールである。電力変動情報生成部２２は、電力モニタ２１から定期的に動的電力値を収集し、その時間変動の情報を元に周波数制御に使用する電力変動情報を生成して電圧・周波数制御部１３に送る。電圧・周波数制御部１３は、閾値比較結果（温度情報）を入力とし、温度が閾値を跨いだ時点の電力変動情報に基づいて最適な周波数を求め、それに基づいてＰＬＬ１１および電源制御部１２を制御し、クロックの周波数および電源電圧を制御する。
【００３６】
実施形態の半導体装置（ＣＰＵ）１０は、マイクロプロセッサで電力供給能力には余裕があるがチップの動作保障温度条件が厳しくチップのジャンクション温度の上限制約がプロセッサの最大許容負荷を決定するような動作条件のマイクロプロセッサである。このようなプロセッサにおいて、チップ温度が温度閾値を超えないようにクロック周波数を下げる場合やチップ温度が規定温度以上に下がった時にクロック周波数を上げる場合などの周波数制御における性能低下を低く抑えプロセッサの性能を向上する。
【００３７】
図５は、電力モニタ２１の処理を行う回路例を示す図である。
【００３８】
電力モニタ２１は、複数（ここではＮ個）のレジスタ２１Ａ−２１Ｎと、複数の乗算器２２Ａ−２２Ｎと、加算器２３と、を有する。電力モニタ２１は、チップ各部の消費電力と相関の高い信号の動作率情報Ａ−Ｎを取得し、乗算器２２Ａ−２２Ｎにより、動作率情報Ａ−Ｎにレジスタ２１Ａ−２１Ｎに記憶された適当な重み付係数を乗じ、さらに加算器２３で総和を取る。この総和は、チップの動的電力値にほぼ対応する。
【００３９】
次に、電力変動情報生成部２２の生成する電力変動情報について説明する。周囲温度の変動によって温度閾値や上限値に対応する電力値は変化するため、電力値自身は周波数調整には利用できない。そこで、閾値を超える直前の短期間の電力変動を示す情報を生成して電力変動情報として利用する。
【００４０】
図６および図７は、ステップ状の電力変動による温度の時間変化の例を示す図であり、図６は同じ温度で異なる電力変動量が発生した場合を示し、図７は異なる温度で同じ電力変動量が発生した場合を示す。
【００４１】
図６では、温度は、同じ温度から電力変動量ａ）−ｃ）に応じて上昇する。温度の上昇途中で負荷（クロック周波数）を下げると、実線のように温度が低下する。もし、温度の上昇途中で負荷（クロック周波数）を下げないと、破線のように温度が上昇する。これは図７でも同じである。変化前の温度が同じであるということは、消費電力は同じであったと考えられ、クロック周波数は、電力変動量が大きいほど増加量が大きく、電力変動量が小さいほど増加量が小さいと考えられる。温度が温度閾値を超えると、いずれの場合もクロック周波数を減少させるが、温度が高いほどクロック周波数（消費電力）の減少量を大きく、温度が低いほどクロック周波数（消費電力）の減少量を小さくすれば、近い温度に低下する。したがって、図６の場合は、時系列で、ある期間の電力サンプル間の電力変動量を電力変動情報として出力すれば良いように見える。
【００４２】
しかし、図７に示すように、電力変動開始時の温度が異なる場合は、電力変動幅が同じでも閾値を超えてからの温度変動が異なるため、同じ周波数調整量を指示したのでは、低温で開始した場合に無駄に温度が低下することになる。そのため、閾値を超えてからの温度変動に応じた周波数調整量を指示することが望ましい。具体的には、閾値を超えてからの温度変動が大きく、高い温度まで上昇した場合には、クロック周波数（消費電力）の減少量を大きく、閾値を超えてからの温度変動が小さく、低い温度まで上昇した場合には、クロック周波数（消費電力）の減少量を小さくする。したがって、単なるある固定期間の電力変動量では電力変動情報として不十分である。そこで、実施形態では、電力変動情報（周波数調整量）として、電力の時間差分、具体的には電力の時系列サンプルの指数移動平均の時間差分(隣接サンプルの差分)情報を利用する。
【００４３】
図８は、電力の時系列サンプルの指数移動平均およびその時間差分を説明する図であり、（Ａ）は電力がステップ変化した場合の指数移動平均およびその時間差分の変化を、（Ｂ）は時系列データの指数重みづけを示す。
【００４４】
指数移動平均は移動平均の一種で、図８の（Ｂ）に示すように、過去の一定期間の電力サンプルに時系列に沿ってα1、α2、α3…のような指数的な重みを付けて平均を取ったものである。例えば、図８の（Ａ）で示すように、P_startからP_endにステップ変化した電力値に対して指数移動平均を取ると、電力変化の一次遅れの特性を持つ((P_end-P_start)(1-e^(-t/τ)))というカーブが得られる。ここで、τは指数重みの基数で決まる時定数である。この式で温度閾値を超えた時の時間微分（つまり温度変化速度）を算出して整理すると(P_end-P_th)/τとなり、閾値温度に対応する電力P_thと変化後の定常電力P_endの差分ΔPに比例した値になる。つまりこの電力変動値ΔPと現在の消費電力Pおよび現状の周波数fを用いると消費電力をP_thに近づけるための現状の周波数fからの周波数調整量をΔf=-fΔP/Pとして求めることができる。
【００４５】
この式はP_start<P_endとP_start>P_endのどちらの場合でも成立するため、温度が上限側温度閾値を上回った場合と下限側温度閾値を下回った場合のどちらの制御にも用いることができる。
【００４６】
指数移動平均E(t)を漸化式で表すとある定数α(0<α<1)と消費電力P(t)を用いて次のように表せる。
E(t)=(1-α)P(t)Δt+αE(t-1)
ここで、αは指数移動平均の指数重みの基数となる。
【００４７】
この式は、内部の熱容量と放熱部への熱抵抗を持った系で電力P(t)を与えた時の温度を表す漸化式でもあるため、指数移動平均と言う処理で消費電力の時系列の情報から温度情報を概算していると考えられる。このため、ステップ応答でない電力変化についても温度変化に近い変動を示す指針となり、温度閾値におけるその微分値は温度が閾値超えした時点での温度変化速度とみなすことができる。
【００４８】
図９は、指数移動平均の時間差分を生成する回路の概略構成を示す図である。
【００４９】
この回路は、指数移動平均値E(t)に係数αを乗じる乗算器３１と、電力値P(t)に係数１−αを乗じる乗算器３２と、２つの乗算器出力の加算器３３と、E(t)を保持するレジスタ３４と、加算器３３とレジスタ３４の出力差を算出する減算器３５と、を有する。この回路では、乗算器３２は、定期的に更新される電力値P(t)を入力とし、その電力を(1-α)倍(0<α<1)し、乗算器３１は、その時点での指数移動平均値E(t)をα倍し、２つの乗算器３１および３２の出力を加算器３３で加算する。αは指数移動平均の時定数を決めるパラメータである。本実施形態では、ＬＳＩ１０およびＬＳＩとパッケージの間の熱伝導性材料などで決まる熱時定数と近い特性になるようにαを決めることによりチップ内の温度の急峻な変化に対応した特性を得ることができる。αや1-αを理想値にもっとも近い１／２のべき乗等に合わせることにより乗算回路３１および３２を簡単化できる。
【００５０】
図１０は、指数移動平均の時間差分に対応する温度変化速度および温度変動量の例を示すテーブルである。
図１０において、ΔP(t)/Δtは、図９の指数移動平均の差分回路の出力値の上位３ビットの値である。例えば、温度が閾値を超えた時点で得られた電力変動情報が５だった場合、その時の温度変化速度が0.141(℃/ms)付近の値であり、閾値に対応する電力から実際電力の差が約26Wであることを示す。指数移動平均を表現するビット数が有限であるため、電力が一定時間固定になると指数移動平均値はいずれ収束して差分値はゼロになる。差分値０が入力された場合には既定の微小変動幅で調整し続けることになる。
【００５１】
広い時間領域で有効な値を出力するためには指数移動平均を格納するレジスタのビット数を増やした上でαを調整して時定数を増やすといった対策が必要となる。測定したい遅延の範囲を複数の領域に分割してその領域ごとに指数移動平均取るといった方法でも対処することができる。
【００５２】
次に、電圧・周波数制御部１３での制御方法について説明する。電圧・周波数制御部１３は、温度センサと温度閾値との比較結果を常時観測し、以下に説明するような調整を温度が温度閾値を超える毎に実行する。前述のように、この制御方法は、周波数を上げる場合にも下げる場合にも使用できる。そのため、例えば温度を下げるための温度閾値T_downと温度を上げるための閾値T_upの2つの閾値を用意し、温度がT_downを超えた時と温度がT_upを下回った時に、以下の制御方法を用いて周波数調整を行う。T_downとT_upは同じ値であっても構わない。
【００５３】
図１１は、電圧・周波数制御部１３の上記の制御手順を示すフローチャートである。
ステップＳ１０では、検出した温度TjがT_downより大きいかを判定し、大きければステップＳ１１に進み、小さければステップＳ２０に進む。
【００５４】
ステップＳ２０では、検出した温度TjiがT_upより小さいかを判定し、小さければステップＳ２１に進み、大きければステップＳ３０に進む。
ステップＳ３０では、規定の時間経過するまで待機し、その後ステップＳ１０に戻る。
【００５５】
ステップＳ１１では、電力変動情報Ｐを読み取る。
ステップＳ１２では、電力変動情報Ｐに基づいてクロック周波数・電源電圧を制御する。
ステップＳ１３では、規定の時間経過するまで待機し、その後ステップＳ１４に進む。
【００５６】
ステップＳ１４では、新たに検出した温度TjがT_down以下であるか判定し、以下であればステップＳ１０に戻り、大きければステップＳ１５に進む。
ステップＳ１５では、一定時間温度閾値T_downを上回り続けているか判定し、一定時間温度閾値を上回り続けていればステップＳ１６に進み、一定時間は温度閾値を上回り続けていなければステップＳ１３に戻る。
【００５７】
ステップＳ１６では、強制的にクロック周波数を大幅に低減してステップＳ１０に戻る。これにより、負荷（消費電力）が大幅に削減され、温度が下がるように制御されるが、実際には時間遅延を持っているので、実際に温度が低下するまで、ステップＳ１０からＳ１６を繰り返すことになる。
【００５８】
ステップＳ２１では、電力変動情報Ｐを読み取る。
ステップＳ２２では、電力変動情報Ｐに基づいてクロック周波数・電源電圧を制御する。
ステップＳ２３では、規定の時間経過するまで待機し、その後ステップＳ２４に進む。
【００５９】
ステップＳ２４では、新たに検出した温度TjがT_up以上であるか判定し、以上であればステップＳ１０に戻り、小さければステップＳ２５に進む。
ステップＳ２５では、一定時間温度閾値T_upを下回り続けているか判定し、一定時間温度閾値を下回り続けていればステップＳ２６に進み、一定時間は温度閾値を上回り続けていなければステップＳ２３に戻る。
【００６０】
ステップＳ２６では、１段階クロック周波数を上げてステップＳ１０に戻る。これにより、負荷（消費電力）が１段階増加し、温度が上昇するように制御されるが、実際には時間遅延を持っているので、実際に温度が上昇するまで、ステップＳ１０、Ｓ２０からＳ２６を繰り返すことになる。
【００６１】
図１２は、図１１の制御方法を実行した場合の温度変化の例を示す図である。
図１２に示すように、温度が温度閾値T_downを超えて上昇すると、ステップＳ１６のクロック周波数の大幅な低減が行われるため、ある遅延時間後から温度が低下を開始する。また、温度が温度閾値T_upを超えて低下すると、ステップＳ２６のクロック周波数の１段階の増加が繰り返し行われるため、ある遅延時間後から温度が上昇を開始する。
【００６２】
なお、温度閾値T_downとT_upが同じ値の場合には、その温度閾値を中心に温度が上げ下げを繰り返すという処理になる。
【００６３】
なお、図１１の制御方法では、想定外の大きな電力が消費された場合やクロック周波数制御中にさらに大きな負荷変動が発生した場合に、温度の上限値を超えて誤動作が発生する可能性がある。そこで、温度閾値T_downとT_upに加えて、温度の上限値とT_downとの間にもう一段閾値を設け（仮にT_down2と呼ぶ）、温度が閾値T_down2を超えた場合は、高速な負荷低減を行い負荷（消費電力）を更に下げるといった２段階の電力制御が考えられる。高速な負荷低減は、クロックパルスの間引きや同時命令発行数の強制削減といった論理動作を用いる方法と、想定される最大の負荷でも対処可能な安全な十分低い周波数（通常は最低動作周波数）までクロック周波数を下げる方法があり、これらを併用する。
【００６４】
図１３は、さらに温度閾値T_down2を設けた場合の電圧・周波数制御部１３の制御手順を示すフローチャートである。
図１３の制御方法は、ステップＳ０、Ｓ４０およびＳ４１を設けたことが図１１の制御方法と異なる。
【００６５】
ステップＳ０は、ステップＳ１０の前に行われ、検出した温度TjがT_down2より大きいかを判定し、大きければステップＳ４０に進み、小さければステップＳ１０に進む。ステップＳ１０以降は、ステップＳ４１を設けた以外図１１と同じである。
【００６６】
ステップＳ４０では、上記の論理動作を用いる方法と、安全な周波数にクロック周波数を下げる方法と、を強制的に行う。これにより負荷（消費電力）は、急激に低下し、温度も低下する。ステップＳ４０の後はステップＳ０に戻る。
【００６７】
ステップＳ４１は、ステップＳ１３とＳ１４の間で行われ、検出した温度TjがT_down2より大きいかを判定し、大きければステップＳ４０に進み、小さければステップＳ１４に進む。
【００６８】
図１４は、図１３の制御方法を実行した場合の温度変化の例を示す図である。
図１４に示すように、温度が温度閾値T_downを超えて上昇すると、図１２の場合のように、クロック周波数の大幅な低減が行われ、温度が低下を開始する。さらに、温度が温度閾値T_downを超えて、さらにT_down2を超えて上昇した場合には、急激に負荷（消費電力）を下げ、これに応じて温度が急激に低下する。
【００６９】
図１５は、最終的に調整されるＰＬＬ１１のクロック周波数を導出するためのテーブルの例を示す図である。
【００７０】
最終的に調整されるＰＬＬ１１のクロック周波数は、新周波数=f+Δf=f(1-ΔP/P)で求める。そのため、例えば、図１５の（Ａ）および（Ｂ）に示すような周波数導出テーブルおよび周波数・電圧導出テーブルを用意して周波数を求める。図１５の（Ａ）は、周波数制御対象プロセッサのクロックが取りうる周波数およびそれに対応する内部使用上のコードの対応を表すとする。また、図１５の（Ｂ）は、プロセッサが電源制御部１２を介して電源電圧も制御する場合に使用するテーブルで、上記のコードに対応して周波数・電圧が対応づけられている。
【００７１】
図１６は、上の式のΔP/Pを計算する回路例を示す図である。
図１６の回路は、図９の回路に、減算器３５の出力とP(t)との比ΔP/Pを計算する除算器３６を追加したものである。ここでは、除算器３６の出力は、説明の都合上、演算値の大きさに応じた-6,-5, …. 5,6の数値で表されているとする。
【００７２】
図１７は、クロック周波数を下げる側の制御に用いる周波数変換テーブルを示す。
図１８は、クロック周波数を上げる側の制御に用いるテーブルを示す。
例えば、ある時点で、クロック周波数が４（コード値）の状態で負荷が上昇して温度がT_downを超えて上昇したとする。この時のΔP/Pの値が２だった場合、電圧・周波数制御部１３は図１７のテーブルをから新しい周波数を求める。図１７のテーブルのΔP/P=2、周波数コード=4の場所の値が１なので電圧・周波数制御部１３は周波数を１に下げる。また、クロック周波数が２（コード値）の状態で負荷が下がり温度がT_upを下回ったとする。この時のΔP/Pの値が-4だった場合、電圧・周波数制御部１３は図１８のテーブルから新しい周波数を求める。図１８のテーブルのΔP/P=-2,周波数コード=4の場所の値が７なので電圧・周波数制御部は周波数を７に上げる。
【００７３】
前述のように、温度が温度閾値T_down2を超えて上昇した場合や、過剰に負荷が上がった場合には、通常用いるより低い周波数にし、急激に負荷を低減することが望ましい。
図１９は、そのような急激に周波数を低下させるテーブルの例を示す。
図１９のテーブルは、図１８のテーブルに比べて周波数コードの値が小さい。使用方法は、図１８と同じなので、説明は省略する。
【００７４】
半導体装置では、半導体装置内を複数のブロックに分割し、ブロックごとに電源電圧の供給を制御し、ブロックごとにリーク電力を低減するパワーゲーティングが行われる。リーク電力は温度変化の後で変化するため、対象プロセッサがパワーゲーティングを行わない場合は、リーク電力を考慮する必要はない。そのため、電力モニタ２１は、図５のようにアクティビティカウンタで取得したチップの主要信号の動作率に適当な係数値をかけて加算して求める一般的な動的電力モニタで形成してもよい。しかし、対象プロセッサがパワーゲーティングを行い、一部のブロックへの電力供給を遮断できる場合はそのブロックのリーク電力が温度に依存せずに急激に変化することになる。その場合には、図５のような電力モニタでは電力を正確に検出できない。
【００７５】
図２０は、対象プロセッサがパワーゲーティングを行う場合の電力モニタ２１の構成を示す図である。
図２０に示すように、電力モニタ２１は、図５の構成に加えて、セレクタ２４Ａ−２４Ｎと、加算器２５と、加算器２６と、を有する。セレクタ２４Ａ−２４Ｎは、対応するブロックへの電源供給が行われる時にはゼロを選択し、対応するブロックへの電源供給が行われない時には各ブロックのリーク電力の見積もりを選択する。ブロックへの電源供給が行われる時には動作率情報によりブロックの消費電力のみが加算される。また、ブロックへの電源供給が行われない時には動作率情報はゼロになるが、リーク電力があるので、その分はセレクタによりリーク電力の見積もりを選択することにより考慮される。このように、図２０の電力モニタ２１は、パワーゲーティング対象となるモジュールのリーク電力の変動も加味した電力をモニタにする。
【００７６】
以上説明した実施形態の半導体装置（プロセッサ）の周波数制御方式は、ソフトウェアによる周波数制御と共に使用される場合がある。例えばソフトウェアが何らかのモードレジスタに動作モード情報を書き込むことでソフトウェアモードによる制御とハードウェア制御が切り替わることが考えられる。
【００７７】
図２１は、負荷の低い周波数領域はソフトウェア制御を行い、負荷の高い周波数領域はハードウェア制御を行う場合の、周波数コードと、周波数制御方式の種別（ハードウェアとソフトウェア）と、クロック周波数と、を対応づけたテーブルの例を示す。
図２１の使用方法は、図１８および図１９と同じなので、説明は省略する。
【００７８】
また、ソフトウェア制御で、モード０に設定したら自動的にハードウェア制御に切り替わるといった運用も考えられる。このようにソフトウェア制御と切替・連携する場合には、ソフトウェア制御のモードの時にはハードウェアによる制御の仕組みを無効化する機能を持たせる。ただし、ソフトウェア制御の場合でも温度上限を超えると誤動作するという状況は変わらないため、前述の強制負荷低減用の閾値を有効にし、温度上限を超える前に強制的に負荷が下がるようにしておくといった対策を取ることが望ましい。
【００７９】
以上説明したように、動作保障温度条件が最大許容負荷を決定するような動作条件の半導体装置で、温度上限と制御閾値の間のマージンを周波数制御遅延での最大温度変化程度にすることが行われる。実施形態によれば、このような場合にも、制御閾値超え時の無駄な周波数低下を抑え、パフォーマンスを向上することが可能となる。
【００８０】
図２２は、温度が温度閾値を超えて上昇し、クロック周波数を下げる場合の実施形態の制御の効果を説明する図であり、（Ａ）温度のみで制御する場合の温度変化を、（Ｂ）が実施形態の制御の場合の温度変化を示す。
【００８１】
クロック周波数が最高3GHz、最低1.3GHzで、その間のクロック周波数に調整可能なプロセッサがあり、このプロセッサで一番消費電力が大きい処理を実行した場合には周波数を1.3GHzまで落とさないと温度が動作上限値を超えてしまうと仮定する。ここで、クロック周波数を1.3GHzまで下げないと温度が上限を超える消費電力が大きい負荷ａ、2.0GHzまで下げないと温度が上限を超える中程度の負荷ｂ、2.6GHzまで下げれば温度が上限を超えない小さい負荷ｃの３つの負荷の処理を実行する場合を考える。
【００８２】
まず、温度のみで周波数を制御する場合、図２２の（Ａ）に示すように、ａ、ｂ、ｃのいずれの負荷でも温度閾値を超えた時点で、最悪ケースの負荷上昇でも温度が上限を超えないように一律に1.3GHzまで下げてしまう。この下げすぎたクロック周波数は、この後で例えば周波数を上げる側の閾値を別途設けて制御することなどにより徐々に適正な周波数に戻っていく。
【００８３】
これに対し、実施形態では、図２２の（Ｂ）に示すように、温度が温度閾値を超えた時点での電力変動量に応じてなるべく無駄な周波数低下がないように周波数を調整するため、負荷ｂでは2.0GHz付近に調整され、負荷ｃでは2.6GHz付近に調整される。このように実施形態では、過渡的な無駄なパフォーマンス低下を大きく抑制する。
【００８４】
図２３は、温度が温度閾値を超えて低下し、クロック周波数を上げる場合の実施形態の制御の効果を説明する図であり、（Ａ）温度のみで制御する場合の温度変化を、（Ｂ）が実施形態の制御の場合の温度変化を示す。
【００８５】
温度のみで周波数を制御する場合、図２３の（Ａ）に示すように、負荷が軽くなり温度が温度閾値を下回った時に、最終的に温度がどこまで下がるかわからないため、逆側に振りすぎて温度上限を超えることがないように少しずつ段階的に周波数を上げていく。
【００８６】
これに対して、実施形態では、図２３の（Ｂ）に示すように、温度が温度閾値を下回った時点で温度の下げ幅に応じてクロック周波数が上昇する。そのため、より高速に温度閾値付近まで温度が上昇することになり、温度閾値より大きく温度が下がる時間、言い換えれば無駄にパフォーマンスが低下する時間を短くすることができる。
【００８７】
上記の効果は、いずれも過渡性能の向上ではあるが、負荷変動が頻繁に起こるプログラムではこのような過渡的な性能向上が定常的な性能向上に繋がる。
【００８８】
以上説明した実施形態の半導体装置は、図４に示すように、チップに１個のプロセッサ（ＣＰＵ）を搭載したマイクロプロセッサであったが、近年、複数のコアプロセッサを登載したマルチコアプロセッサが広く使用されている。実施形態の制御方法は、マルチコアプロセッサにも適用可能であるが、適用する構成には複数の変形例があり得る。以下、変形例のいくつかを説明する。
【００８９】
図２４は、実施形態の制御方法を適用したマルチコアプロセッサの第１構成例を示す図である。
第１構成例のマルチコアプロセッサは、それぞれ電力モニタおよび温度センサを有する複数のコアプロセッサ５１Ａ−５１Ｍを有し、複数のコアプロセッサ５１Ａ−５１Ｍは、ＰＬＬ６４から供給される共通のクロックで動作する。従って、複数のコアプロセッサ５１Ａ−５１Ｍは、同期して動作する。
【００９０】
第１構成例のマルチコアプロセッサは、さらに、温度違反検知部５２Ａ−５２Ｍと、電力変動周波数指示生成部５３Ａ−５３Ｍと、チップ電力集計＆電力変動情報生成部６１と、ワースト周波数選択部６２と、ＤＶＦＳ制御部６３と、ＰＬＬ６４と、を有する。温度違反検知部と電力変動周波数指示生成部の組が、各コアプロセッサに対応して実施形態の制御方法を行い、各コアプロセッサ用のクロック周波数および電源電圧制御信号を生成する。
【００９１】
第１構成例のマルチコアプロセッサでは、各コアプロセッサ用のクロック周波数および電源電圧制御信号を勘案してチップ全体の制御を行う。ＰＬＬ６４から共通に供給するクロック周波数は、電力変動周波数指示生成部５３Ａ−５３Ｍが生成したクロック周波数の最悪（ワースト：最小周波数）のクロック周波数に合わせる。そのため、ワースト周波数選択部６２は、複数の電力変動周波数指示生成部５３Ａ−５３Ｍが出力するクロック周波数から最悪のクロック周波数を選択する。
【００９２】
第１構成例では、さらに、チップ全体の消費電力および電力変動を考慮して、ワースト周波数選択部６２における最悪のクロック周波数の選択を変更する。例えば、全体の消費電力が大きい場合には、複数の電力変動周波数指示生成部５３Ａ−５３Ｍが出力するクロック周波数の最悪のクロック周波数よりさらに低い最低クロック周波数を選択する。また、１つの電力変動周波数指示生成部の指示するクロック周波数が低く、最悪のクロック周波数としてそれが選択されるが、他のコアプロセッサの温度および消費電力が低い場合には、熱拡散の関係で少しクロック周波数を高くできる場合があり得る。このような場合には、ワースト周波数選択部６２は、最悪のクロック周波数より１段階大きいクロック周波数を選択する。
【００９３】
ＤＶＦＳ制御部６３は、ワースト周波数選択部６２の選択したクロック周波数を出力するように、ＰＬＬ６４を制御する。
【００９４】
図２５は、実施形態の制御方法を適用したマルチコアプロセッサの第２構成例を示す図である。
第２構成例のマルチコアプロセッサは、複数のＰＬＬ７１Ａ−７１Ｍと、それぞれ電力モニタおよび温度センサを有する複数のコアプロセッサ５１Ａ−５１Ｍと、温度違反検知部５２Ａ−５２Ｍと、電力変動検知周波数指示生成部５３Ａ−５３Ｍと、を有する。複数のＰＬＬ７１Ａ−７１Ｍは、共通に供給されるクロック信号を調整して、複数のコアプロセッサ５１Ａ−５１Ｍに供給する個別のクロックを生成する。従って、複数のコアプロセッサ５１Ａ−５１Ｍは、同期して動作することはできず、割り当てられた処理を独立して実行し、処理が完了すると完了情報をマスタプロセッサ（複数のコアプロセッサの１つ）に送る。
【００９５】
第２構成例のマルチコアプロセッサでは、温度違反検知部５２Ａ−５２Ｍと電力変動周波数指示生成部５３Ａ−５３Ｍのそれぞれの組が、実施形態と同様に対応するＰＬＬのクロック周波数を、対応するコアプロセッサの温度および電力変動に応じて制御する。
【００９６】
図２６は、実施形態の制御方法を適用したマルチコアプロセッサの第３構成例を示す図であり、（Ａ）が回路構成を示すブロック図で、（Ｂ）がコアプロセッサに供給されるクロックの例を示す。
第３構成例のマルチコアプロセッサは、ＡＮＤゲート８１Ａ−８１Ｍと、電力モニタおよび温度センサを有するコアプロセッサ５１Ａ−５１Ｍと、温度違反検知部５２Ａ−５２Ｍと、電力変動検知サイクル間引き指示生成部５３Ａ−５３Ｍと、を有する。
【００９７】
第２構成例では、複数のＰＬＬ７１Ａ−７１Ｍが共通に供給されるクロック信号を調整して、複数のコアプロセッサ５１Ａ−５１Ｍに供給する個別のクロックを生成した。しかし、ＰＬＬは回路構成が複雑であり、複数のＰＬＬを設けると回路規模が大きくなる。そこで、第３構成例では、ＡＮＤゲート８１Ａ−８１Ｍが、電力変動検知サイクル間引き指示生成部５３Ａ−５３Ｍからの周波数指示にしたがって、クロック信号のパルスを間引くことにより、実質的にクロック周波数を調整する。
【００９８】
なお、第１から第３構成例においても、クロック周波数だけでなく、電源電圧も合わせて制御することが可能である。
以上、実施形態および構成例を説明したが、制御は、クロック周波数についてのみ行うことも、クロック周波数および電源電圧の両方について行ってもよい。
【００９９】
以上、実施形態を説明したが、ここに記載したすべての例や条件は、発明および技術に適用する発明の概念の理解を助ける目的で記載されたものである。特に記載された例や条件は発明の範囲を制限することを意図するものではなく、明細書のそのような例の構成は発明の利点および欠点を示すものではない。発明の実施形態を詳細に記載したが、各種の変更、置き換え、変形が発明の精神および範囲を逸脱することなく行えることが理解されるべきである。
【符号の説明】
【０１００】
１０    プロセッサ（ＣＰＵ）
１１    ＰＬＬ
１２    電源制御部
１３    電源・周波数制御部
２１    電力モニタ
２２    電力変動情報生成部
７    電源制御回路(PMU: Power Management Unit)
８    ＰＬＬ
【図１】
2015130035.tif 000003
【図２】
2015130035.tif 000004
【図３】
2015130035.tif 000005
【図４】
2015130035.tif 000006
【図５】
2015130035.tif 000007
【図６】
2015130035.tif 000008
【図７】
2015130035.tif 000009
【図８】
2015130035.tif 000010
【図９】
2015130035.tif 000011
【図１０】
2015130035.tif 000012
【図１１】
2015130035.tif 000013
【図１２】
2015130035.tif 000014
【図１３】
2015130035.tif 000015
【図１４】
2015130035.tif 000016
【図１５】
2015130035.tif 000017
【図１６】
2015130035.tif 000018
【図１７】
2015130035.tif 000019
【図１８】
2015130035.tif 000020
【図１９】
2015130035.tif 000021
【図２０】
2015130035.tif 000022
【図２１】
2015130035.tif 000023
【図２２】
2015130035.tif 000024
【図２３】
2015130035.tif 000025
【図２４】
2015130035.tif 000026
【図２５】
2015130035.tif 000027
【図２６】
2015130035.tif 000028