(57)【要約】【課題】複数のグループのそれぞれに複数のＣＰＵを含むシステムＬＳＩにおいて、簡易な手順で高い機能安全を得ることができるシステムＬＳＩを提供する。【解決手段】実施形態によれば、複数の第１ＣＰＵおよび第１モジュールを含む第１グループと、複数の第２ＣＰＵおよび第１モジュールと同じ構造の第２モジュールを含む第２グループと、第１グループおよび第２グループと接続される共有メモリと、を備える。共有メモリは、第１グループからアクセスされる第１領域、および第２グループからアクセスされる第２領域を含む。第１グループは、複数の第１ＣＰＵと第１モジュールとの間でキャッシュコヒーレンシを保つ第１バスと、第１バスと第１モジュールとを接続する第２バスと、を有する。第２グループは、複数の第２ＣＰＵと第２モジュールとの間でキャッシュコヒーレンシを保つ第３バスと、第３バスと第２モジュールとを接続する第４バスと、を有する。【選択図】図２
2019053617.tif 000002
【特許請求の範囲】
【請求項１】
複数の第１ＣＰＵおよび第１モジュールを含む第１グループと、
複数の第２ＣＰＵおよび前記第１モジュールと同じ構造の第２モジュールを含む第２グループと、
前記第１グループからのアクセスでキャッシュコヒーレンシが保たれる第１領域、および前記第２グループからのアクセスでキャッシュコヒーレンシが保たれる第２領域を含み、前記第１グループおよび前記第２グループと電気的に接続される共有メモリと、
を備え、
前記第１グループは、前記複数の第１ＣＰＵと前記第１モジュールとの間でキャッシュコヒーレンシを保つ第１バスと、前記第１バスと前記第１モジュールとを電気的に接続する第２バスと、を有し、
前記第２グループは、前記複数の第２ＣＰＵと前記第２モジュールとの間でキャッシュコヒーレンシを保つ第３バスと、前記第３バスと前記第２モジュールとを電気的に接続する第４バスと、を有することを特徴とするシステムＬＳＩ。
【請求項２】
前記第２バスと前記第４バスとは電気的に接続されていないことを特徴とする請求項１に記載のシステムＬＳＩ。
【請求項３】
前記第２バスと前記第４バスとは電気的に接続されていることを特徴とする請求項１に記載のシステムＬＳＩ。
【請求項４】
前記複数の第２ＣＰＵのそれぞれは、
前記第１バスに電気的に接続される第１経路と、
前記第３バスに電気的に接続される第２経路と、
前記第１経路と前記第２経路とのうちいずれかに切り替える切替回路と、
を有することを特徴とする請求項３に記載のシステムＬＳＩ。
【請求項５】
前記第１バスは、
前記第３バスを介した前記共有メモリへのアクセスを制御するマスタエージェントと、
前記第１バスでのデータの流れを監視するディレクトリキャッシュと、
を有し、
前記ディレクトリキャッシュは、第１制御回路と、前記データの流れの監視結果を記憶するメモリと、を有し、
前記マスタエージェントは、第２制御回路と、キャッシュメモリと、前記第２制御回路と前記ディレクトリキャッシュの前記メモリとを電気的に接続する第３経路と、をさらに有し、
前記第２制御回路は、前記切替回路で前記第２経路が選択された場合に、前記キャッシュメモリに加えて、前記第３経路を介して前記メモリをキャッシュとして使用することを特徴とする請求項４に記載のシステムＬＳＩ。
【請求項６】
前記複数の第１ＣＰＵおよび前記複数の第２ＣＰＵのそれぞれは、ＣＰＵコア、またはキャッシュコヒーレンシがとられた複数のＣＰＵコアを含むＣＰＵクラスタであることを特徴とする請求項１に記載のシステムＬＳＩ。
【請求項７】
前記第２バスは、前記第１モジュールとの接続位置に第１保護回路を有し、
前記第４バスは、前記第２モジュールとの接続位置に第２保護回路を有し、
前記第１保護回路は、前記第１モジュールからのアクセス要求が前記共有メモリの前記第１領域の場合に前記第１バスに前記アクセス要求を渡し、前記第２領域の場合にエラーを返し、
前記第２保護回路は、前記第２モジュールからのアクセス要求が前記共有メモリの前記第２領域の場合に前記第３バスに前記アクセス要求を渡し、前記第１領域の場合にエラーを返すことを特徴とする請求項２に記載のシステムＬＳＩ。
【請求項８】
前記第２バスは、前記第１モジュールとの接続位置に第１保護回路を有し、
前記第４バスは、前記第２モジュールとの接続位置に第２保護回路を有し、
前記第１保護回路および前記第２保護回路は、前記第１モジュールがアクセスできない領域と前記第２モジュールがアクセスできない領域とが重ならないようにそれぞれ設定されていることを特徴とする請求項３に記載のシステムＬＳＩ。
【請求項９】
前記第１グループは、前記第２グループにはない第３モジュールを有することを特徴とする請求項１に記載のシステムＬＳＩ。
【請求項１０】
複数の第３ＣＰＵおよび前記第１モジュールと同じ構造の第４モジュールを含む第３グループをさらに備え、
前記共有メモリは、前記第３グループと電気的に接続され、前記第３グループからのアクセスでキャッシュコヒーレンシが保たれる第３領域をさらに含み、
前記第３グループは、前記複数の第３ＣＰＵと前記第４モジュールとの間でキャッシュコヒーレンシを保つ第５バスと、前記第５バスと前記第４モジュールとを電気的に接続する第６バスと、を有することを特徴とする請求項１に記載のシステムＬＳＩ。
【請求項１１】
複数の第１ＣＰＵおよび第１モジュールを含む第１グループと、
複数の第２ＣＰＵおよび前記第１モジュールと同じ構造の第２モジュールを含む第２グループと、
前記第１グループからのアクセスでキャッシュコヒーレンシが保たれる第１領域、および前記第２グループからのアクセスでキャッシュコヒーレンシが保たれる第２領域を含み、前記第１グループおよび前記第２グループと電気的に接続される共有メモリと、
を備え、
前記第１グループは、前記複数の第１ＣＰＵと前記第１モジュールとの間でキャッシュコヒーレンシを保つ第１バスと、前記第１バスと前記第１モジュールとを電気的に接続する第２バスと、を有し、
前記第２グループは、前記複数の第２ＣＰＵと前記第２モジュールとの間でキャッシュコヒーレンシを保つ第３バスと、前記第３バスと前記第２モジュールとを電気的に接続する第４バスと、を有するシステムＬＳＩの故障検出方法であって、
前記第１モジュールの実行を含む第１プログラムを前記第１グループに実行させる第１プログラム実行工程と、
前記第２モジュールの実行を含み、前記第１プログラムと同じ第２プログラムを前記第２グループに実行させる第２プログラム実行工程と、
前記第１プログラムの第１実行結果と、前記第２プログラムの第２実行結果と、を取得する取得工程と、
前記第１実行結果と前記第２実行結果とに基づいて、前記システムＬＳＩでの故障の発生の有無を判定する判定工程と、
を含むことを特徴とするシステムＬＳＩの故障検出方法。
【請求項１２】
前記判定工程では、前記第１実行結果と前記第２実行結果とが同一の場合には、正常であると判定することを特徴とする請求項１１に記載のシステムＬＳＩの故障検出方法。
【請求項１３】
前記判定工程では、前記第１実行結果と前記第２実行結果とが異なる場合に、前記システムＬＳＩに故障が発生していると判定することを特徴とする請求項１１に記載のシステムＬＳＩの故障検出方法。
【請求項１４】
前記システムＬＳＩは、複数の第３ＣＰＵおよび前記第１モジュールと同じ構造の第３モジュールを含む第３グループをさらに備え、
前記共有メモリは、前記第３グループと電気的に接続され、前記第３グループからのアクセスでキャッシュコヒーレンシが保たれる第３領域をさらに含み、
前記第３グループは、前記複数の第３ＣＰＵと前記第３モジュールとの間でキャッシュコヒーレンシを保つ第５バスと、前記第５バスと前記第３モジュールとを電気的に接続する第６バスと、を有し、
前記第３モジュールの実行を含み、前記第１プログラムと同じ第３プログラムを前記第３グループに実行させる第３プログラム実行工程をさらに含み、
前記取得工程では、前記第３プログラムの第３実行結果をさらに含み、
前記判定工程では、前記第１実行結果、前記第２実行結果および前記第３実行結果に基づいて、前記システムＬＳＩでの故障の発生の有無を判定することを特徴とする請求項１１に記載のシステムＬＳＩの故障検出方法。
【請求項１５】
前記判定工程では、前記第１実行結果、前記第２実行結果および前記第３実行結果のうちいずれか１つが他と異なる場合に、異なる実行結果を出したグループが故障していると判定することを特徴とする請求項１４に記載のシステムＬＳＩの故障検出方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、システムＬＳＩおよびシステムＬＳＩの故障検出方法に関する。
【背景技術】
【０００２】
車載向けシステムＬＳＩ（Large  Scale  Integrated  circuit）では高い自動車の安全度水準（Automotive  Safety  Integrity  Level、以下、ＡＳＩＬという）が求められる。高い安全性を確保するためには、故障検出機構の実装が主機能とは別に必要となるが、これが大規模なシステムＬＳＩの実装を複雑化させる要因になっている。特に、大規模なシステムＬＳＩでは、ハードウェアによる単純な二重化あるいはアドホックな故障検出回路の実装は、回路面積や開発期間などの面でコストが非常に高くなる。さらに、キャッシュコヒーレンシを保つ必要があるマルチコアＬＳＩにおいては、ソフトウェアによる故障検出処理がより一層複雑になる。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平８−３２０８２７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本発明の一つの実施形態は、複数のグループのそれぞれに複数のＣＰＵを含むシステムＬＳＩにおいて、簡易な手順で高い機能安全を得ることができるシステムＬＳＩおよびシステムＬＳＩの故障検出方法を提供することを目的とする。
【課題を解決するための手段】
【０００５】
本発明の一つの実施形態によれば、複数の第１ＣＰＵおよび第１モジュールを含む第１グループと、複数の第２ＣＰＵおよび前記第１モジュールと同じ構造の第２モジュールを含む第２グループと、前記第１グループおよび前記第２グループと電気的に接続される共有メモリと、を備えるシステムＬＳＩが提供される。前記共有メモリは、前記第１グループからのアクセスでキャッシュコヒーレンシが保たれる第１領域、および前記第２グループからのアクセスでキャッシュコヒーレンシが保たれる第２領域を含む。前記第１グループは、前記複数の第１ＣＰＵと前記第１モジュールとの間でキャッシュコヒーレンシを保つ第１バスと、前記第１バスと前記第１モジュールとを電気的に接続する第２バスと、を有する。前記第２グループは、前記複数の第２ＣＰＵと前記第２モジュールとの間でキャッシュコヒーレンシを保つ第３バスと、前記第３バスと前記第２モジュールとを電気的に接続する第４バスと、を有する。
【図面の簡単な説明】
【０００６】
【図１】図１は、比較例によるシステムＬＳＩのハードウェア構成の一例を示す図である。
【図２】図２は、第１の実施形態によるシステムＬＳＩのハードウェア構成の一例を示す図である。
【図３】図３は、第１の実施形態による共有メモリのメモリ空間の一例を示す図である。
【図４】図４は、メインバスのハードウェア構成の一例を示す図である。
【図５】図５は、コヒーレントバスのハードウェア構成の一例を示す図である。
【図６】図６は、第１の実施形態によるシステムＬＳＩの故障検出処理の手順の一例を示すフローチャートである。
【図７】図７は、第１の実施形態によるシステムＬＳＩのハードウェア構成の他の例を示す図である。
【図８】図８は、図７の場合の共有メモリ空間の一例を示す図である。
【図９】図９は、第２の実施形態によるシステムＬＳＩのハードウェア構成の一例を示す図である。
【図１０】図１０は、メインバスのハードウェア構成の一例を示す図である。
【図１１】図１１は、第３の実施形態によるシステムＬＳＩのハードウェア構成の一例を示す図である。
【図１２】図１２は、第４の実施形態によるシステムＬＳＩで使用されるコヒーレントバスの構成の一例を示す図である。
【図１３】図１３は、第４の実施形態によるマスタエージェントとディレクトリキャッシュのキャッシュの結合例を示す図である。
【発明を実施するための形態】
【０００７】
以下に添付図面を参照して、実施形態にかかるシステムＬＳＩおよびシステムＬＳＩの故障検出方法を詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。また、以下では、比較例のシステムＬＳＩについて課題の概略を説明した後、実施形態を説明する。
【０００８】
図１は、比較例によるシステムＬＳＩのハードウェア構成の一例を示す図である。図１（ａ）は、複数のＣＰＵ間でキャッシュコヒーレンシを取る構成を有するシステムＬＳＩである。ここで、システムＬＳＩとは、従来独立したＬＳＩチップであったプロセッサまたは周辺回路をワンチップのＬＳＩ中に搭載したものである。従来は、プロセッサは１個または複数個のＬＳＩチップとして作られることが多かった。しかし、ＬＳＩの集積度の向上により、このようなシステムＬＳＩが実現されている。なお、システムＬＳＩは、ＳｏＣ（System  on  Chip）などとも呼ばれる。また、その中に実装されるプロセッサはプロセッサコアなどと呼ばれている。
【０００９】
システムＬＳＩ１は、モジュール群１０と、複数のＣＰＵ２１ａ，２１ｂと、メモリ４１と、を有し、これらが複数のバス３１〜３３を介して接続される。モジュール群１０は、所定の機能を実行するマスタモジュール（以下、モジュールという）を１以上含む。モジュールは、たとえばＣＰＵ（Central  Processing  Unit）、専用の画像処理回路などであり、プログラムによって処理が実行されるハードウェアである。モジュール群１０は、メインバス３１に接続される。ここでは、モジュールＡ０，Ｂ０，Ｃがモジュール群１０に含まれている。
【００１０】
このシステムＬＳＩ１では、キャッシュコヒーレンシを取りたいＣＰＵ２１ａ，２１ｂおよびモジュールＡ０，Ｂ０，Ｃが、コヒーレントバス３２を介して接続される。ただし、モジュールＡ０，Ｂ０，Ｃはメインバス３１を介してコヒーレントバス３２に接続される。コヒーレントバス３２のＣＰＵ２１ａ，２１ｂとメインバス３１との接続位置には、マスタエージェント３２１，３２２が設けられる。マスタエージェント３２１，３２２は、ＣＰＵ２１ａ，２１ｂ、モジュールＡ０，Ｂ０，Ｃおよびメモリ４１間で、キャッシュコヒーレンシを保つように、キャッシュコヒーレントプロトコルにしたがった通信を行う。なお、この図に示されるように、ＣＰＵ２１ａ，２１ｂは、メインバス３１とは直接接続されず、コヒーレントバス３２を介して接続されることになる。そのため、ＣＰＵ２１ａ，２１ｂ間でキャッシュコヒーレンシを保つためにやり取りする情報がメインバス３１を介して通信されない。つまり、メインバス３１で通信される情報によって、キャッシュコヒーレンシを保つための情報が影響を受けることがない。
【００１１】
ここで、ＣＰＵ２１ａ，２１ｂは、ＣＰＵコアでもよいし、複数のＣＰＵコアを含むＣＰＵクラスタでもよい。ＣＰＵクラスタである場合には、ＣＰＵクラスタを構成する複数のＣＰＵコア間でキャッシュコヒーレンシがとられており、クラスタ単位でコヒーレントバス３２に接続される。
【００１２】
メモリ４１は、ＣＰＵ２１ａ，２１ｂおよびモジュール群１０によってアクセスされる。メモリ４１は、バス３３に接続される。図示しないが、メモリ４１は、キャッシュコヒーレンシを取るデータが格納されるコヒーレント領域と、キャッシュコヒーレンシを取る必要がないデータが格納されるノンコヒーレント領域と、を有する。コヒーレント領域およびノンコヒーレント領域は、メモリ４１内の空間でそれぞれ境界アドレスによって分割されている。コヒーレント領域へは、経路５１またはコヒーレントバス３２を介してアクセスされ、ノンコヒーレント領域へは、経路５２を介してアクセスされる。
【００１３】
なお、メインバス３１のモジュールＡ０，Ｂ０，Ｃとの接続位置には、マスタエージェント３１１が配置される。マスタエージェント３１１は、モジュールＡ０，Ｂ０，Ｃからのメモリ４１のアクセス先アドレスがコヒーレント領域であるかノンコヒーレント領域であるかによって、メインバス３１内の経路を切り替える回路またはモジュールである。コヒーレント領域へのアクセスの場合には、経路５１を通るように切替が行われ、ノンコヒーレント領域へのアクセスの場合には、経路５２を通るように切替が行われる。
【００１４】
このシステムＬＳＩ１をＡＳＩＬに基づいて機能安全を高めるには、図１（ａ）のハードウェア構成を二重化することが考えられる。図１（ｂ）は、ハードウェアが二重化されたシステムＬＳＩの構成の一例である。この図に示されるように、図１（ａ）で示した構成を１つのグループとすると、同じハードウェア構成を有するグループ１５Ａ，１５Ｂが２つ設けられる構成となる。ここで、グループ１５Ａのモジュール群１０のモジュールＣ０は、モジュールＣと同じ機能を有し、グループ１５Ｂのモジュール群１０のモジュールＡ１，Ｂ１，Ｃ１は、それぞれモジュールＡ０，Ｂ０，Ｃと同じ機能を有する。このような構成における故障検出では、両方のグループ１５Ａ，１５Ｂの動作をチェックしなければならない。また、お互いのグループ１５Ａ，１５Ｂ間でデータのやり取りはできない。
【００１５】
このような構成では、回路面積が増大してしまい、コストも高くなる傾向にある。そして、故障検出機能を備えているので、ＡＳＩＬに基づいた高い機能安全の用途以外では、コスト高により受け入れられない。たとえば、高い機能安全を求めないユーザに対しては、二重化されたシステムＬＳＩ１ではない、別のシステムＬＳＩを提供しなければならない。
【００１６】
以下に示す実施形態では、複数のグループのそれぞれに複数のＣＰＵを含むシステムＬＳＩにおいて、各グループにおける複数のＣＰＵ間のキャッシュコヒーレンシを取ることができるとともに、高い機能安全を実現したい機能に関して故障検出を行うことができるシステムＬＳＩについて説明する。
【００１７】
（第１の実施形態）
図２は、第１の実施形態によるシステムＬＳＩのハードウェア構成の一例を示す図である。第１の実施形態によるシステムＬＳＩ１では、共有メモリ４３に、複数のグループ１５Ａ，１５Ｂがバス３３を介して接続される。ここでは、ＡＳＩＬに基づいた高い機能安全を実現するために、２つのグループ１５Ａ，１５Ｂが共有メモリ４３に接続されており、そのうち一方が所定の機能を実行する正規のグループ１５Ａであり、他方が故障検出機能を実行するグループ１５Ｂであるものとする。
【００１８】
グループ１５Ａは、モジュール群１０Ａと、モジュール群１０Ａ内の各モジュールＡ０，Ｂ０，Ｃ間を接続するメインバス３１Ａと、複数のＣＰＵ２１ａ，２１ｂと、複数のＣＰＵ２１ａ，２１ｂとメインバス３１Ａとの間を接続するコヒーレントバス３２Ａと、を有する。グループ１５Ａは、グループ１５Ａに属するＣＰＵ２１ａ，２１ｂとモジュールＡ０，Ｂ０，Ｃとがキャッシュコヒーレンシを取るコヒーレントグループである。
【００１９】
また、グループ１５Ｂは、モジュール群１０Ｂと、モジュール群１０Ｂ内の各モジュールＡ１，Ｂ１間を接続するメインバス３１Ｂと、複数のＣＰＵ２１ｃ，２１ｄと、複数のＣＰＵ２１ｃ，２１ｄとメインバス３１Ｂとの間を接続するコヒーレントバス３２Ｂと、を有する。グループ１５Ｂは、グループ１５Ｂに属するＣＰＵ２１ｃ，２１ｄとモジュールＡ１，Ｂ１とがキャッシュコヒーレンシを取るコヒーレントグループである。
【００２０】
第１の実施形態では、それぞれのグループ１５Ａ，１５Ｂには、同じ構成のモジュールが１以上共通に設けられる。すなわち、一方のグループに設けられる一部のモジュールは、他方のグループにも設けられる。図２の場合には、グループ１５Ａには、モジュールＡ０，Ｂ０，Ｃが設けられ、グループ１５Ｂには、モジュールＡ１，Ｂ１が設けられている。そして、グループ１５ＡのモジュールＡ０とグループ１５ＢのモジュールＡ１とは同じ機能を有し、グループ１５ＡのモジュールＢ０とグループ１５ＢのモジュールＢ１とは同じ機能を有する。一方、モジュールＣについては、グループ１５Ａにしか設けられていない。そのため、図２に示されるグループ１５Ｂは、グループ１５ＡのモジュールＡ０，Ｂ０を用いたアプリケーションの実行に関して故障検出を行うことになる。なお、各グループ１５Ａ，１５Ｂ内のモジュールＡ０，Ｂ０，Ｃ，Ａ１，Ｂ１、ＣＰＵ２１ａ〜２１ｄ、コヒーレントバス３２Ａ，３２Ｂおよびメインバス３１Ａ，３１Ｂについては、図１で説明したものと同様であるので、その説明を省略する。
【００２１】
共有メモリ４３は、システムＬＳＩ１で使用されるアプリケーションまたはデータを記憶する。共有メモリ４３は、バス３３を介してそれぞれのグループ１５Ａ，１５Ｂと接続され、システムＬＳＩ１内のＣＰＵ２１ａ〜２１ｄを含むすべてのマスタモジュールからアクセス可能である。共有メモリ４３は、たとえば、ＤＲＡＭ（Dynamic  Random  Access  Memory）またはＳＲＡＭ（Static  RAM）などの一般的なメモリ素子で構成される。また、この例では、システムＬＳＩ１内に１つの共有メモリ４３が設けられる場合が示されているが、複数の共有メモリ４３が設けられていてもよい。
【００２２】
本構成では、複数のコヒーレントバス３２Ａ，３２Ｂがそれぞれ共有メモリ４３と接続されている。したがって、システム全体のコヒーレンシを保つために、共有メモリ空間は各コヒーレントバス３２Ａ，３２Ｂがコヒーレンシを保つ空間にそれぞれ重なりなく論理的に分割される。図３は、第１の実施形態による共有メモリのメモリ空間の一例を示す図である。図３に示されるように、コヒーレンシを取るグループ単位で、共有メモリ４３の領域が分割される。たとえば、アドレスが０ｘ０〜０ｘ２ＦＦＦ＿ＦＦＦＦである領域はグループ１５ＡのＣＰＵ２１ａ，２１ｂを含むモジュールがアクセス可能なコヒーレント領域４３１である。アドレスが０ｘ３０００＿００００〜０ｘ５ＦＦＦ＿ＦＦＦＦである領域は、グループ１５ＢのＣＰＵ２１ｃ，２１ｄを含むモジュールがアクセス可能なコヒーレント領域４３２である。また、ここでは、アドレスが０ｘ６０００＿００００〜０ｘ７ＦＦＦ＿ＦＦＦＦの領域は、ノンコヒーレント領域４３３であり、コヒーレンシを取る必要がないプログラムまたはデータが格納される領域である。コヒーレント領域４３１には、グループ１５Ｂのモジュールはアクセスすることができず、またコヒーレント領域４３２には、グループ１５Ａのモジュールはアクセスすることができない。
【００２３】
図４は、メインバスのハードウェア構成の一例を示す図である。メインバス３１Ａ，３１Ｂのモジュールが接続される位置には、マスタエージェント３１１が設けられる。マスタエージェント３１１は、保護回路３１２を含む。保護回路３１２は、アクセス先アドレスに応じて、コヒーレントバス３２Ａへの経路５１Ａ、５１Ｂおよびバス３３への経路５２Ａ，５２Ｂのうちいずれかの経路を選択し、モジュールによる図３に示される共有メモリ４３のメモリ空間へのアクセスを制御する。具体的には、メインバス３１Ａ，３１Ｂが属するグループのモジュールによる共有メモリ４３のアクセス先アドレスが、図３に示される共有メモリ４３の対応するメモリ空間へのアクセスである場合には、アクセスを許可するとともにメモリ空間へのアドレスに応じた経路５１Ａ，５１Ｂ，５２Ａ，５２Ｂを選択し、対応しないものである場合には、アクセスを不許可とする。
【００２４】
たとえば、モジュールＡ０，Ｂ０，Ｃによる共有メモリ４３のアクセス先アドレスがコヒーレント領域４３１に対応するアドレスである場合には、グループ１５Ａの保護回路３１２は、経路５１Ａを通るように経路が選択される。また、アクセス先アドレスがコヒーレント領域４３２に対応するアドレスである場合には、グループ１５Ａの保護回路３１２は、モジュールＡ０，Ｂ０，Ｃにエラーを返し、アクセス先アドレスがノンコヒーレント領域４３３に対応するアドレスである場合には、グループ１５Ａの保護回路３１２は、経路５２Ａを通るように経路が選択される。
【００２５】
モジュールＡ１，Ｂ１による共有メモリ４３のアクセス先アドレスがコヒーレント領域４３２に対応するアドレスである場合には、グループ１５Ｂの保護回路３１２は、経路５１Ｂを通るように経路が選択される。また、アクセス先アドレスがコヒーレント領域４３１に対応するアドレスである場合には、グループ１５Ｂの保護回路３１２は、モジュールＡ１，Ｂ１にエラーを返し、アクセス先アドレスがノンコヒーレント領域４３３に対応するアドレスである場合には、グループ１５Ｂの保護回路３１２は、経路５２Ｂを通るように経路が選択される。
【００２６】
コヒーレントバス３２Ａ，３２Ｂには、種々のものを使用することができる。図５は、コヒーレントバスのハードウェア構成の一例を示す図である。図５（ａ）は、コヒーレントバス３２Ａ，３２Ｂに、ディレクトリキャッシュ３２４が設けられない構成である。ディレクトリキャッシュは、ＣＰＵ２１のキャッシュメモリ２１１にデータが保持されているか否かや、ＣＰＵのキャッシュメモリに格納されたデータの属性等を示す、所謂ＣＰＵのキャッシュタグ情報を複製して格納する。図５（ａ）の例では、たとえばＣＰＵ２１のキャッシュメモリ２１１のキャッシュタグの中にディレクトリキャッシュが保持すべき情報が含まれる。コヒーレントバス３２Ａ，３２Ｂは、ＣＰＵ２１との接続位置およびメインバス３１Ａ，３１Ｂとの接続位置に、マスタエージェント３２１，３２２を備え、バス３３との接続位置にスレーブエージェント３２３を備える。
【００２７】
マスタエージェント３２１，３２２は、キャッシュコヒーレントプロトコルにしたがってデータのやり取りを行う機能を有する。スレーブエージェント３２３は、マスタエージェント３２１，３２２からのコマンドにしたがって処理を行う。
【００２８】
マスタエージェント３２２は、制御回路３２２１とキャッシュメモリ３２２２とを備える。制御回路３２２１は、モジュールＡ０，Ｂ０，Ｃ，Ａ１，Ｂ１から共有メモリ４３へのアクセスを受け付け、アクセスに応じた処理を行う。共有メモリ４３へのアクセスは、キャッシュコヒーレントプロトコルにしたがって行われる。キャッシュメモリ３２２２は、各モジュールＡ０，Ｂ０，Ｃ，Ａ１，Ｂ１から共有メモリ４３へのアクセスの際に読み込んだ共有メモリ４３の内容の一部を記憶する。キャッシュメモリ３２２２は、たとえば２−ｗａｙセットアソシアティブの構成を有し、Valid  bit、タグ、データフィールドを有する。データフィールドには、アドレスに対応するデータが格納される。なお、キャッシュメモリ３２２２の構成は、これに限定されるものではなく、他の構成を有していてもよい。
【００２９】
このような構成のマスタエージェント３２２での処理の概要について説明する。モジュールＡ０，Ｂ０，Ｃ，Ａ１，Ｂ１から共有メモリ４３のデータへのアクセスを受けると、まず、制御回路３２２１は、マスタエージェント３２２内のキャッシュメモリ３２２２にアクセス先のデータがあるかを確認する。データがある場合には、制御回路３２２１は、キャッシュメモリ３２２２内のデータをメインバス３１Ａ，３１Ｂを介してモジュールＡ０，Ｂ０，Ｃ，Ａ１，Ｂ１へと返す。また、データがない場合には、制御回路３２２１は、キャッシュコヒーレントプロトコルにしたがって、コヒーレントバス３２Ａ，３２Ｂに接続されるＣＰＵ２１にデータをキャッシュしているかを尋ねる。制御回路３２２１は、ＣＰＵ２１のキャッシュメモリ２１１にデータが保持されている場合には、そのＣＰＵ２１のキャッシュメモリ２１１からデータを受け取り、ＣＰＵ２１のキャッシュメモリ２１１にデータが保持されていない場合には、共有メモリ４３から取得する。なお、ＣＰＵ２１のキャッシュメモリ２１１にデータが保持されているか否かについては、それぞれのキャッシュメモリ２１１中に含まれるディレクトリキャッシュで判断が行われる。また、ＣＰＵ２１のキャッシュメモリ２１１のデータが、共有メモリ４３内のデータから更新された状態のものである場合には、共有メモリ４３の対応するデータも更新される。
【００３０】
図５（ｂ）は、コヒーレントバス３２Ａ，３２Ｂに、ディレクトリキャッシュ３２４が設けられた構成である。ディレクトリキャッシュ３２４は、制御回路３２４１と、メモリ３２４２と、を備える。制御回路３２４１は、ＣＰＵ２１とコヒーレントバス３２Ａ，３２Ｂとの間のやり取りをすべて監視し、各ＣＰＵ２１がどのアドレスのデータをどういうステートで保持しているのかを示すディレクトリをメモリ３２４２に保存する。ディレクトリは、たとえば２−ｗａｙセットアソシアティブの構成を有し、Valid  bit、タグ、データフィールドを有する。データフィールドには、各キャッシュラインのオーナ情報、キャッシュラインが既に何処かにキャッシュされているかに関する情報が格納される。なお、メモリ３２４２の構成は、これに限定されるものではなく、他の構成を有していてもよい。ＣＰＵ２１による共有メモリ４３へのアクセスと、モジュールＡ０，Ｂ０，Ｃ，Ａ１，Ｂ１による共有メモリ４３へのアクセスは、ディレクトリキャッシュ３２４を介して行われる。なお、マスタエージェント３２２の構成は、図５（ａ）とほぼ同様である。
【００３１】
このような構成のマスタエージェント３２２およびディレクトリキャッシュ３２４での処理の概要について説明する。モジュールＡ０，Ｂ０，Ｃ，Ａ１，Ｂ１から共有メモリ４３のデータへのアクセスを受けると、マスタエージェント３２２の制御回路３２２１は、アクセス先アドレスに対応する最新のデータがキャッシュメモリ３２２２にあるかを確認する。データがキャッシュメモリ３２２２にある場合には、制御回路３２２１は、キャッシュメモリ３２２２内のデータをメインバス３１Ａ，３１Ｂを介してモジュールＡ０，Ｂ０，Ｃ，Ａ１，Ｂ１へと返す。データがキャッシュメモリ３２２２にない場合には、制御回路３２２１は、アクセス先アドレスをディレクトリキャッシュ３２４に渡す。ディレクトリキャッシュ３２４の制御回路３２４１は、メモリ３２４２のディレクトリを参照して、アクセス先アドレスに対応するデータを有するＣＰＵ２１のキャッシュメモリ２１１があるかを判定する。データを有するＣＰＵ２１のキャッシュメモリ２１１がある場合には、マスタエージェント３２２の制御回路３２２１は、アクセス先アドレスに対応するデータをＣＰＵ２１のキャッシュメモリ２１１から取得し、メインバス３１Ａ，３１Ｂを介してモジュールＡ０，Ｂ０，Ｃ，Ａ１，Ｂ１にデータを返す。データを有するＣＰＵ２１のキャッシュメモリ２１１がない場合には、ディレクトリキャッシュ３２４の制御回路３２４１は、対応するデータの取得要求を出し、スレーブエージェント３２３が共有メモリ４３からデータを取得してマスタエージェント３２２へと渡し、マスタエージェント３２２の制御回路３２２１は、データをモジュールＡ０，Ｂ０，Ｃ，Ａ１，Ｂ１に返す。
【００３２】
つぎに、図２に示されるシステムＬＳＩでの処理について説明する。図６は、第１の実施形態によるシステムＬＳＩの故障検出処理の手順の一例を示すフローチャートである。ここでは、モジュールＡ，Ｂを含めたグループでの故障検出を行う場合について説明する。共有メモリ４３のコヒーレント領域４３１には、アプリケーションＰ１が記憶され、コヒーレント領域４３２には、アプリケーションＰ１と同じアプリケーションＰ２が記憶される。アプリケーションＰ１，Ｐ２ともに、モジュールＡｉ，Ｂｉ（ｉ＝０，１）を使用するものである。また、ノンコヒーレント領域４３３には、故障検出アプリケーションＱが記憶される。さらに、ノンコヒーレント領域４３３の故障検出アプリケーションＱが、たとえばグループ１５ＢのＣＰＵ２１ｄによって実行されている状態にあるものとする。
【００３３】
まず、グループ１５Ａで、正規の処理であるアプリケーションＰ１が実行される（ステップＳ１１）。アプリケーションＰ１は、たとえばＣＰＵ２１ａによって実行され、その途中で共有メモリ４３からのデータの読み出し、およびデータの書き込みが行われる。また、モジュールＡ０，Ｂ０による処理も行われるが、モジュールＣによる処理は行われない。そして、ＣＰＵ２１ａは、アプリケーションＰ１の実行結果を共有メモリ４３のコヒーレント領域４３１に書き込む（ステップＳ１２）。
【００３４】
グループ１５ＡでのアプリケーションＰ１の実行と並行して、同じ内容のアプリケーションＰ２がグループ１５Ｂで実行される（ステップＳ１３）。このアプリケーションＰ２は故障検出用に実行されるものであり、正規の処理には使用されない。アプリケーションＰ２は、たとえばＣＰＵ２１ｃによって実行され、その途中で共有メモリ４３からのデータの読み出し、およびデータの書き込みが行われる。また、モジュールＡ１，Ｂ１による処理も行われる。そして、ＣＰＵ２１ｃは、アプリケーションＰ２の実行結果を共有メモリ４３のコヒーレント領域４３２に書き込む（ステップＳ１４）。
【００３５】
その後、故障検出アプリケーションＱは、アプリケーションＰ１，Ｐ２の実行結果を共有メモリ４３から取得し（ステップＳ１５）、両者が同じであるかを判定する（ステップＳ１６）。両者が同じである場合（ステップＳ１６でＹｅｓの場合）には、システムＬＳＩ１に故障はないと判定し、処理が終了する。また、両者が異なる場合（ステップＳ１６でＮｏの場合）には、システムＬＳＩ１は故障していると判定し（ステップＳ１７）、故障を通知する（ステップＳ１８）。故障の通知は、たとえばシステムＬＳＩ１に接続される図示しない表示部に故障が発生した旨を表示させたり、システムＬＳＩ１を含むパッケージに設けられた故障発生を示すインジケータを点灯させたりする方法によって行うことができる。また、ここでの故障の通知は、グループ１５Ａかグループ１５Ｂのいずれかで故障が発生していることを示すものであり、故障が発生しているグループを特定するものではない。そして、処理が終了する。
【００３６】
このように、第１の実施形態によるシステムＬＳＩ１では、２つのグループ１５Ａ，１５Ｂに同じアプリケーションＰ１，Ｐ２を実行させ、その結果を比較することで、システムＬＳＩ１の故障が検知される。
【００３７】
なお、上記したように、２つのグループ１５Ａ，１５Ｂは、完全に同じハードウェア構成としなくてもよい。故障を検知したい機能について、２つのグループ１５Ａ，１５Ｂに共通のモジュールを設ければよい。そのため、主機能を担うグループ１５Ａには、故障検知機能を担うグループ１５Ｂにはないモジュールを付加してもよい。この場合には、グループ１５Ｂにはないモジュールについての故障検出を行うことができない。また、上記した説明では、グループ１５Ｂで故障検出アプリケーションＱを実行していたが、グループ１５Ａで故障検出アプリケーションＱを実行してもよい。
【００３８】
また、図２の構成では、システムＬＳＩ１での故障発生については検知できるが、故障しているグループ１５Ａ，１５Ｂについては特定することができない。そのため、故障しているグループを特定することができるシステムＬＳＩ１について説明する。
【００３９】
図７は、第１の実施形態によるシステムＬＳＩのハードウェア構成の他の例を示す図である。共有メモリ４３に３つのグループ１５Ａ〜１５Ｃが接続される場合が示される。ここでは、図２のシステムＬＳＩ１に、グループ１５Ｂと同じ構成のグループ１５Ｃが、バス３３を介して共有メモリ４３に接続される。グループ１５Ｃは、モジュールＡ０と同じ構成のモジュールＡ２と、モジュールＢ０と同じ構成のモジュールＢ２と、を含むモジュール群１０Ｃを有する。モジュールＡ２，Ｂ２はメインバス３１Ｃに接続される。また、グループ１５Ａ，１５Ｂと同様に、２つのＣＰＵ２１ｅ，２１ｆを有し、コヒーレントバス３２Ｃに接続される。コヒーレントバス３２Ｃは、メインバス３１Ｃに接続される。メインバス３１Ｃは、コヒーレントバス３２Ｃと経路５１Ｃを介して接続され、バス３３と経路５２Ｃを介して接続される。なお、上記したものと同一の構成要素については、説明を省略する。
【００４０】
図８は、図７の場合の共有メモリ空間の一例を示す図である。図８に示されるように、共有メモリ４３は、グループ１５Ａで使用されるコヒーレント領域４３１と、グループ１５Ｂで使用されるコヒーレント領域４３２と、グループ１５Ｃで使用されるコヒーレント領域４３４と、ノンコヒーレント領域４３３と、を有する。これらは、境界アドレスによって分割されている。
【００４１】
このようなシステムＬＳＩ１で、モジュールＡｉ，Ｂｉ（ｉ＝０〜２）を使用するアプリケーションを、３つのグループ１５Ａ〜１５Ｃのそれぞれで実行させることで、故障を検知した場合に、実行結果を用いた多数決の方式によってどのグループが故障しているかを特定することができる。具体的には、３つのグループ１５Ａ〜１５Ｃでのアプリケーションの実行結果を取得し、それぞれの実行結果を比較する。比較の結果、３つの実行結果が同一であれば、故障していないと判断でき、１つが他の２つの実行結果と不一致であれば、実行結果が異なる１つのグループに故障の原因があると判断できる。なお、全ての実行結果が異なる場合には、システムＬＳＩ１全体に不具合が生じていると判断できる。なお、システムＬＳＩ１では、４以上のグループが共有メモリ４３に接続されていてもよい。この場合にも、各グループでの同一のアプリケーションの実行結果を比較し、多数決によって故障しているグループを特定することができる。
【００４２】
第１の実施形態では、複数のＣＰＵとモジュールとを有する複数のグループ１５Ａ，１５Ｂが、共有メモリ４３に接続される。各グループ１５Ａ，１５Ｂでは、それぞれメインバス３１Ａ，３１Ｂを有し、メインバス３１Ａ，３１Ｂには、モジュールＡｉ，Ｂｉ，Ｃと、コヒーレントバス３２Ａ，３２Ｂを介してＣＰＵ２１ａ〜２１ｄと、が接続される。故障検出を行いたいモジュールＡｉ，Ｂｉは、複数のグループ１５Ａ，１５Ｂに共通して設けられる。また、共有メモリ４３の共有メモリ空間は、各コヒーレントバス３２Ａ，３２Ｂがコヒーレンシを保つ空間にそれぞれ重なりなく論理的に分割される。そして、各グループ１５Ａ，１５Ｂで共通に存在するモジュールＡｉ，Ｂｉを使用したアプリケーションをそれぞれのグループ１５Ａ，１５Ｂで独立性を維持して実行させ、その結果を比較することで、高い機能安全を実現しながら、システムＬＳＩ１の故障検出を容易に実現することができるという効果を有する。また、本構成は、キャッシュコヒーレンシを確保する必要があるより大規模なシステムＬＳＩ１にも適用可能であり、キャッシュコヒーレンシを確保しながら高い機能安全が求められるアプリケーションが実現可能になる。
【００４３】
さらに、大規模なシステムＬＳＩ１では、全モジュールに対して、モジュール個別の故障検出機構の実装あるいは二重化などのハードウェアによる機能安全対策を行うと、非常にコストが高くなってしまう。しかし、第１の実施形態では、ハードウェア的にはグループ１５Ａ，１５Ｂを二重化しているが、アプリケーションの二重実行による故障検出を行うので、ハードウェアによる機能安全対策を施す場合に比して、コストを低減することができる。
【００４４】
（第２の実施形態）
図９は、第２の実施形態によるシステムＬＳＩのハードウェア構成の一例を示す図である。第２の実施形態では、メインバス３１が、各グループで共通化されている。すなわち、第１の実施形態では、図２に示されるようにグループ１５Ａ，１５Ｂごとにメインバス３１Ａ，３１Ｂが設けられていたが、第２の実施形態では、図９に示されるように、２つのグループ１５Ａ，１５Ｂに跨るメインバス３１を使用している。また、ノンコヒーレントなデータは、メインバス３１から経路５２、バス３３を介して共有メモリ４３にアクセスされる。なお、その他の構成は、第１の実施形態と同様であるので、その説明を省略する。
【００４５】
図１０は、メインバスのハードウェア構成の一例を示す図である。メインバス３１のモジュールＡｉ，Ｂｉ，Ｃ（ｉ＝０，１）が接続される位置には、マスタエージェント３１１が設けられる。マスタエージェント３１１は、保護回路３１２を含む。保護回路３１２は、モジュールＡｉ，Ｂｉ，Ｃによる図３に示される共有メモリ４３のメモリ空間へのアクセスを制御する。具体的には、保護回路３１２には、経路５１Ａ，５１Ｂ，５２のそれぞれに接続される経路３１３，３１４，３１５が接続されており、各保護回路３１２には、どの経路３１３〜３１５にアクセスできるか（あるいはどの経路３１３〜３１５にアクセスできないか）が設定されている。ここでは、モジュールＡ０，Ｂ０は経路３１４、すなわち共有メモリ４３のコヒーレント領域４３２にアクセスできないように設定されており、モジュールＣ，Ａ１，Ｂ１は経路３１３、すなわち共有メモリ４３のコヒーレント領域４３１にアクセスできないように設定されている。なお、各保護回路３１２がどの経路３１３〜３１５にアクセスできるか（あるいはどの経路３１３〜３１５にアクセスできないか）については、システムＬＳＩ１が起動する際に設定されている内容に従う。たとえば、設定内容は、可変であるが、その設定内容が反映されるのは、システムＬＳＩ１が再起動された後とすることができる。
【００４６】
第１の実施形態で説明したものと同様に、保護回路３１２は、この設定に基づいて、モジュールＡｉ，Ｂｉ，Ｃから共有メモリ４３へのアクセスを制御する。たとえば、モジュールＡ０に接続される保護回路３１２の場合には、共有メモリ４３のコヒーレント領域４３１へのアクセスである場合には、保護回路３１２は、アクセスを許可し、経路３１３，５１Ａを介して共有メモリ４３へのアクセスが行われる。また、共有メモリ４３のノンコヒーレント領域４３３へのアクセスである場合にも、保護回路３１２は、アクセスを許可し、経路３１５，５２を介して共有メモリ４３へのアクセスが行われる。一方、共有メモリ４３のコヒーレント領域４３２へのアクセスである場合には、保護回路３１２は、アクセスを不許可とし、モジュールＡ０にエラーを返す。
【００４７】
第１の実施形態では、メインバスを物理的に分断することでグループ１５Ａ，１５Ｂを形成していたが、第２の実施形態では、グループ１５Ａ，１５Ｂで共通に設けられるメインバス３１が存在するので、保護回路３１２の設定によってコヒーレントグループが分類される。図１０の例では、モジュールＡ０，Ｂ０は、経路３１４にアクセスできないように設定され、経路３１３，５１Ａに接続されるＣＰＵを含むモジュールとの間でキャッシュコヒーレンシを保つコヒーレントグループ１６Ａを構成する。また、モジュールＣ，Ａ１，Ｂ１は、経路３１３にアクセスできないように設定され、経路３１４，５１Ｂに接続されるＣＰＵを含むモジュールとの間でキャッシュコヒーレンシを保つコヒーレントグループ１６Ｂを構成する。その結果、図９に示される物理的なグループ１５Ａ，１５Ｂと、図１０に示される論理的なコヒーレントグループ１６Ａ，１６Ｂとの間で、相違が生じている。このように、第１の実施形態の図２に示されるような構成では、コヒーレントグループの変更を行うことはできないが、第２の実施形態では、メインバス３１の保護回路３１２の設定を変更することによって、いつでもコヒーレントグループ１６Ａ，１６Ｂの変更を行うことができる。
【００４８】
なお、第２の実施形態でも、第１の実施形態と同様に、故障検出処理を実行することが可能である。
【００４９】
第２の実施形態では、各グループ１５Ａ，１５Ｂに設けられるメインバス３１を、複数のグループ１５Ａ，１５Ｂで跨るように共通に接続した。そして、メインバス３１に設けられる保護回路３１２で、各モジュールＡｉ，Ｂｉ，Ｃが使用する経路、すなわち共有メモリ４３のアクセス先の領域を選択するようにした。これによって、共有メモリ４３のアクセス先の領域が共通するモジュールおよびＣＰＵでコヒーレントグループ１６Ａ，１６Ｂを構成することになる。その結果、第１の実施形態の場合と同様に、グループ間の独立性を維持しつつ、グループを構成するモジュールを柔軟に入れ替えることができるという効果を有する。
【００５０】
（第３の実施形態）
図１１は、第３の実施形態によるシステムＬＳＩのハードウェア構成の一例を示す図である。第３の実施形態では、一方のグループ１５ＢのＣＰＵ２１ｃ，２１ｄとコヒーレントバス３２Ｂとの間に、切替回路２２ａ，２２ｂが設けられる。切替回路２２ａ，２２ｂは、ＣＰＵ２１ｃ，２１ｄから、ＣＰＵ２１ｃ，２１ｄと同じグループ１５Ｂに属するコヒーレントバス３２Ｂに向かう第１経路２３１と、ＣＰＵ２１ｃ，２１ｄとは異なるグループ１５Ａに属するコヒーレントバス３２Ａに向かう第２経路２３２と、を切り替える。切替回路２２ａ，２２ｂとして、たとえばマルチプレクサが用いられる。
【００５１】
機能安全を考慮した使い方をする場合には、切替回路２２ａ，２２ｂは、第１経路２３１を選択する。これによって、第２の実施形態と同一の構成となる。
【００５２】
また、機能安全を考慮しない使い方をする場合には、切替回路２２ａ，２２ｂは、第２経路２３２を選択する。これによって、ＣＰＵ２１ｃ，２１ｄは、他のグループ１５ＡのＣＰＵ２１ａ，２１ｂとキャッシュコヒーレンシを取る動作を行う。たとえば、図１１の場合には、グループ１５Ｂの２つのＣＰＵ２１ｃ，２１ｄは、グループ１５ＡのＣＰＵ２１ａ，２１ｂと同じコヒーレントグループに属することになる。
【００５３】
また、切替回路２２ａ，２２ｂによって第２経路２３２が選択されている場合には、メインバス３１からのアクセスは、すべて経路５１Ａを通ってコヒーレントバス３２Ａ、共有メモリ４３へと伝達される。すなわち、経路５１Ｂは不通となるように保護回路３１２が設定される。
【００５４】
このような構成のシステムＬＳＩ１では、切替回路２２ａ，２２ｂによって第２経路２３２が選択されている場合に、４個のＣＰＵ２１ａ〜２１ｄでグループを構成するので、グループ内で、複数のアプリケーションを実行することができる。また、同じ構成のモジュールを使用して、別の計算をさせることも可能になる。その結果、システム全体での演算量を増やすことが可能になる。
【００５５】
なお、切替回路２２ａ，２２ｂの切り替えは、たとえばシステムＬＳＩ１が起動する前に固定される。たとえば、システムをリセットするときに切り替えたり、あるいはヒューズを使って切り替えたりする。
【００５６】
第３の実施形態では、一方のグループ１５ＢのＣＰＵ２１ｃ，２１ｄとコヒーレントバス３２Ｂとの間に切替回路２２ａ，２２ｂを設け、自ＣＰＵ２１ｃ，２１ｄが属するグループ１５Ｂのコヒーレントバス３２Ｂへの第１経路２３１と、他のグループ１５Ａのコヒーレントバス３２Ａへの第２経路２３２と、を切り替えるようにした。これによって、ソフトウェアによる故障検出を組み合わせて高い機能安全を達成する必要がない場合にも対応することができるという効果を有する。また、この場合には、システムＬＳＩ１は高い機能安全を実現するためには使用されず、すべてのモジュールＡｉ，Ｂｉ，Ｃを含めた全リソースを使って処理することができ、機能安全よりも性能を重視する用途に対応することができる。さらに、一方のコヒーレントバス３２Ａ側だけでコヒーレンシの管理が可能になるので、消費電力の削減と共有メモリ領域管理の単純化が可能になる。
【００５７】
（第４の実施形態）
図１２は、第４の実施形態によるシステムＬＳＩで使用されるコヒーレントバスの構成の一例を示す図である。第３の実施形態では、グループ１５ＢでＣＰＵ２１ｃ，２１ｄの経路を第２経路２３２に切り替えた場合には、一方のコヒーレントバス３２Ｂは使用されない。ところで、第１の実施形態の図５（ｂ）に示されるコヒーレントバス３２Ｂは、マスタエージェント３２２にキャッシュメモリ３２２２を有し、ディレクトリキャッシュ３２４にメモリ３２４２を有する。そして、コヒーレントバス３２Ｂが使用されない場合には、そのディレクトリキャッシュ３２４も使用されない状態となる。そこで、第４の実施形態では、使用されないコヒーレントバス３２Ｂのディレクトリキャッシュ３２４のメモリ３２４２を、ノンコヒーレントアクセスをキャッシュするＲＡＭとして再利用する。
【００５８】
図１２に示されるコヒーレントバス３２Ｂは、基本的に、図５（ｂ）で説明した構成と同じであるが、図５（ｂ）と異なる構成について、以下に説明する。ディレクトリキャッシュ３２４のメモリ３２４２とマスタエージェント３２２の制御回路３２２１とを接続する経路（配線）３２５と、経路３２５の使用の有無を切り替える選択回路３２６と、を有する。選択回路３２６は、切替回路２２ａ，２２ｂが経路２３１を選択しているときには、経路３２５を使用できないようにし、切替回路２２ａ，２２ｂが経路２３２を選択しているときに、経路３２５を使用できるように経路の選択を行う。
【００５９】
ディレクトリキャッシュ３２４のメモリ３２４２は、たとえば２−ｗａｙセットアソシアティブで、Valid  bit、タグ、データフィールドを有するキャッシュ構成となる。選択回路３２６で経路３２５が使用されない状態にある場合には、データフィールドには各キャッシュラインのオーナ情報、キャッシュラインが既に何処かにキャッシュされているかに関する情報が格納される。しかし、選択回路３２６で経路３２５が使用される状態にある場合には、データフィールドにはアドレスに対応するデータが格納されることになる。
【００６０】
図１３は、第４の実施形態によるマスタエージェントとディレクトリキャッシュのキャッシュの結合例を示す図である。メモリ３２４２をキャッシュメモリ３２２２と組み合わせ、制御回路３２２１が共有メモリ４３に対するアクセス時に参照するキャッシュメモリとしてメモリ３２４２を新たに対象に加えるような制御を行う。そのため、制御回路３２２１がメモリ３２４２に対してリードライトアクセスできるように、配線３２５を設け、それぞれ２−ｗａｙセットアソシアティブキャッシュとして使っていたキャッシュメモリ３２２２およびメモリ３２４２を、一つの４−ｗａｙセットアソシアティブキャッシュとして組み合わせるように構成する。
【００６１】
このとき、予めメモリ３２４２のデータフィールドは、キャッシュメモリ３２２２のデータフィールド分のｂｉｔ数を持つように構成しておく必要がある。場合によっては、本来のディレクトリキャッシュ３２４としての機能を実現するために必要なｂｉｔ数よりも冗長に持たせておく必要がある。また、有効なエントリ数は、両キャッシュのうち少ない方のエントリ数に制限される構成になる。
【００６２】
キャッシュメモリ３２２２に対してキャッシュしているデータを共有メモリ４３に書き戻したり、共有メモリ４３のデータをキャッシュメモリ３２２２に書き込んだりする制御は、制御回路３２２１で行う。したがって、メモリ３２４２に対しても同様の制御対象に入れられるよう、予め制御回路３２２１が構成される。
【００６３】
このような構成のコヒーレントバス３２Ｂのマスタエージェント３２２での処理の概要について説明する。切替回路２２ａ，２２ｂによって経路が第２経路２３２に切り替えられているとき、コヒーレントバス３２Ｂは、共有メモリ４３のノンコヒーレント領域４３３へのアクセス（ノンコヒーレントアクセス）の経路として使用される。コヒーレントバス３２Ｂでは、通常、共有メモリ４３へのアクセスはマスタエージェント３２２内の制御回路３２２１によって実行される。モジュールＡｉ，Ｂｉ，Ｃから共有メモリ４３へのノンコヒーレントアクセス時に、キャッシュデータがキャッシュメモリ３２２２またはメモリ３２４２に存在する場合には、制御回路３２２１は、共有メモリ４３へのアクセスは行わず、キャッシュメモリ３２２２またはメモリ３２４２内のデータをモジュールＡｉ，Ｂｉ，Ｃに返す。これによって、共有メモリ４３へのアクセスレイテンシが短縮される。なお、キャッシュデータがキャッシュメモリ３２２２またはメモリ３２４２に存在しない場合には、制御回路３２２１が共有メモリ４３のノンコヒーレント領域４３３へのアクセスを行うコマンドを生成し、スレーブエージェント３２３がコマンドにしたがって、共有メモリ４３からデータを取得する。
【００６４】
以上のように、第４の実施形態では、切替回路２２ａ，２２ｂで第２経路２３２が選択された場合に、コヒーレントバス３２Ｂのディレクトリキャッシュ３２４中のメモリ３２４２をマスタエージェント３２２のキャッシュメモリとして用いるようにした。これによって、ＣＰＵ２１ｃ，２１ｄでキャッシュコヒーレンシを取るために利用されないコヒーレントバス３２Ｂを、データキャッシュを有するノンコヒーレントアクセス用の経路として再利用することができ、アクセス効率の向上が可能になるという効果を有する。
【００６５】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００６６】
１  システムＬＳＩ、１０Ａ〜１０Ｃ  モジュール群、１５Ａ〜１５Ｃ  グループ、１６Ａ，１６Ｂ  コヒーレントグループ、２１ａ〜２１ｆ  ＣＰＵ、２２ａ，２２ｂ  切替回路、３１，３１Ａ〜３１Ｃ  メインバス、３２Ａ〜３２Ｃ  コヒーレントバス、３３  バス、４３  共有メモリ、５１Ａ，５１Ｂ，５２，５２Ａ，５２Ｂ，３１３〜３１５，３２５  経路、２１１  キャッシュメモリ、２１２，３２４  ディレクトリキャッシュ、２３１  第１経路、２３２  第２経路、３１１，３２１，３２２  マスタエージェント、３１２  保護回路、３２３  スレーブエージェント、３２６  選択回路、４３１，４３２，４３４  コヒーレント領域、４３３  ノンコヒーレント領域、３２２１，３２４１  制御回路、３２２２  キャッシュメモリ、３２４２  メモリ、Ａ０，Ａ１，Ａ２，Ｂ０，Ｂ１，Ｂ２，Ｃ  モジュール。
【図１】
2019053617.tif 000003
【図２】
2019053617.tif 000004
【図３】
2019053617.tif 000005
【図４】
2019053617.tif 000006
【図５】
2019053617.tif 000007
【図６】
2019053617.tif 000008
【図７】
2019053617.tif 000009
【図８】
2019053617.tif 000010
【図９】
2019053617.tif 000011
【図１０】
2019053617.tif 000012
【図１１】
2019053617.tif 000013
【図１２】
2019053617.tif 000014
【図１３】
2019053617.tif 000015