(57)【要約】【課題】データを用いたソフトエラーの検出において、記憶内容が０の固定値となるソフトエラーの検出率と記憶内容が１の固定値となるソフトエラーの検出率の不均衡を抑制する。【解決手段】半導体装置１は、ビット演算部１００と記憶制御部１０２を有する。ビット演算部１００は、記憶対象のデータであるｎ（ｎは正整数）ビットの第１のデータと、ｎビットのビットパターンである第２のデータと、をビット演算して、１の個数と０の個数が略同数のビットパターンである第３のデータを生成する。記憶制御部１０２は、第３のデータを記憶部の第１の格納先に格納し、第３のデータ又は予め定められたビット演算を行うことにより第３のデータに変換されるデータのいずれかである第４のデータを記憶部の第２の格納先に格納する。【選択図】図１
2017111463.tif 000002
【特許請求の範囲】
【請求項１】
記憶対象のデータであるｎ（ｎは正整数）ビットの第１のデータと、ｎビットのビットパターンである第２のデータと、をビット演算して、１の個数と０の個数が略同数のビットパターンである第３のデータを生成するビット演算部と、
前記第３のデータを記憶部の第１の格納先に格納し、前記第３のデータ又は予め定められたビット演算を行うことにより前記第３のデータに変換されるデータのいずれかである第４のデータを前記記憶部の第２の格納先に格納する記憶制御部と
を有する
半導体装置。
【請求項２】
前記第４のデータとして、前記第３のデータの各ビットを反転させたデータを生成するビット反転部をさらに有し、
前記記憶制御部は、前記第３のデータと、前記ビット反転部により生成された前記第４のデータとをそれぞれ前記記憶部に格納する
請求項１に記載の半導体装置。
【請求項３】
前記ビット演算部は、複数の異なる前記第２のデータのうち前記第３のデータの格納先に応じて選択された前記第２のデータをビット演算に使用する
請求項１又は２に記載の半導体装置。
【請求項４】
前記第１の格納先に格納されているデータと、前記第２の格納先に格納されているデータの内容の一致を判定する判定部
をさらに有する請求項１に記載の半導体装置。
【請求項５】
前記記憶部は、前記半導体装置に内蔵された内蔵記憶部と、前記半導体装置に接続される外部記憶部とを含み、
前記記憶制御部は、前記第３のデータ及び前記第４のデータのうち一方について、前記内蔵記憶部に格納し、他方について、前記外部記憶部に格納する
請求項１に記載の半導体装置。
【請求項６】
前記第２のデータを更新するとともに、更新前の前記第２のデータに基づく前記第３のデータ及び前記第４のデータを、それぞれ、更新された前記第２のデータに基づく前記第３のデータ及び前記第４のデータに更新する更新部
をさらに有する請求項１に記載の半導体装置。
【請求項７】
前記更新部は、更新後の前記第３のデータ及び前記第４のデータの格納先を更新前の格納先と変えて、複数の前記第３のデータ及び複数の前記第４のデータを順に更新し、
前記記憶制御部は、前記記憶部に記憶されたデータの読み出しをさらに制御し、前記更新部による更新の進捗に応じて、前記第３のデータ及び前記第４のデータの読み出し先又は書き込み先を変更する
請求項６に記載の半導体装置。
【請求項８】
前記第２のデータは、ランダムデータであり、
前記ビット演算は、排他的論理和である
請求項１に記載の半導体装置。
【請求項９】
前記第２のデータは、連続する複数の値を昇順又は降順で並べて構成されるシーケンシャルデータであり、
前記ビット演算は、排他的論理和である
請求項１に記載の半導体装置。
【請求項１０】
前記第２のデータは、前記第１の格納先のアドレスの値を用いて生成された前記シーケンシャルデータである
請求項９に記載の半導体装置。
【請求項１１】
第１の半導体装置と、第２の半導体装置とを備え、
前記第１の半導体装置及び前記第２の半導体装置は、
記憶部と、
記憶対象のデータであるｎ（ｎは正整数）ビットの第１のデータと、ｎビットのビットパターンである第２のデータと、をビット演算して、１の個数と０の個数が略同数のビットパターンである第３のデータを生成するビット演算部と、
前記第３のデータを前記記憶部の第１の格納先に格納し、前記第３のデータ又は予め定められたビット演算を行うことにより前記第３のデータに変換されるデータのいずれかである第４のデータを前記記憶部の第２の格納先に格納する記憶制御部と、
前記記憶部に記憶されたデータを用いて、予め定められた処理を行う処理部と、
を有し、
少なくとも前記第１の半導体装置は、自装置の処理部による処理結果と、前記第２の半導体装置の処理部による処理結果とを比較する処理制御部をさらに有する
機能安全システム。
【請求項１２】
記憶対象のデータであるｎ（ｎは正整数）ビットの第１のデータと、ｎビットのビットパターンである第２のデータと、をビット演算して、１の個数と０の個数が略同数のビットパターンである第３のデータを生成するビット演算ステップと、
前記第３のデータを記憶部の第１の格納先に格納し、前記第３のデータ又は予め定められたビット演算を行うことにより前記第３のデータに変換されるデータのいずれかである第４のデータを前記記憶部の第２の格納先に格納する記憶制御ステップと
をコンピュータに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は半導体装置、機能安全システム及びプログラムに関し、例えばデータの記憶を行う半導体装置、機能安全システム及びプログラムに関する。
【背景技術】
【０００２】
近年、産業機器又は自動車製品などにおける機能安全では、α線や中性子線などに起因するメモリやフリップフロップのソフトエラー（一時的なデータ内容の破壊）が問題となっている。
【０００３】
特許文献１には、メモリのソフトエラー検出方法として、テストデータによる検出、ダブルＲＡＭ（Random Access Memory）アルゴリズム、ＥＣＣ（Error Check and Correct）による検出が挙げられている。ここで、テストデータによる検出では、所定のテストデータをＲＡＭに書き込み後、読み出したデータが元のテストデータと一致しない場合、ソフトエラーとして検出するという動作が定期的に繰り返される。ダブルＲＡＭアルゴリズムによる検出では、実際のデータアクセス時に、指定アドレスに実データを書き込むとともに実データの全ビットを反転したデータを、指定アドレスを反転したアドレスに書き込む。その後、読み出した実データと反転したデータを比較し、一致しなければソフトエラーとして検出する。また、ＥＣＣによる検出は、ＲＡＭモジュールに付属するＥＣＣ機能を用いたソフトエラーの検出である。
【０００４】
しかしながら、テストデータによる検出では、書き込み後、短期間で読み出して元のテストデータとの一致が確認されるので、放射線（２次宇宙線含む）の衝突の確率が低く、十分なソフトエラー検出率が期待できない。また、メモリ上の実データの退避と復帰、及びソフトエラー検出に時間を要し、システムの性能の劣化を招く。また、ＥＣＣによる検出では、ハードウェアとしてＥＣＣ機能を持たないＲＡＭには採用できず、また、ソフトウェアでは処理の負荷が高く、実装が困難という問題がある。
【０００５】
また、特許文献２では、ソフトエラーの検出及び修復を行うため、データ書き込み時に、所定のデータを３つの異なる形式でデータ領域へ書き込むことについて開示している。ここで１つ目のデータは、そのままのデータ（書き込み対象のデータ）であり、２つ目のデータは、書き込み対象のデータの反転データであり、３つ目のデータは、書き込み対象のデータと所定のデータとをビット演算したデータである。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１２−１０４０６４号公報
【特許文献２】特開２０１３−１０９５３２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
上述の通り、テストデータによる検出及びＥＣＣによる検出は、ソフトエラーの検出に必ずしも適していない。しかしながら、上記のダブルＲＡＭアルゴリズムによる検出においても、次のような問題がある。ソフトエラーの検出に際し、テストデータではなく、実データが使用されるため、データ内容に偏りがある。すなわち、データの内容は、０又は１のいずれかに偏っている。このため、記憶内容が０の固定値となるソフトエラーの検出率と記憶内容が１の固定値となるソフトエラーの検出率が不均衡となってしまう。
【０００８】
また、特許文献２に開示されたデータの記憶では、上述の通り３つ目のデータとして、書き込み対象のデータと所定のデータとをビット演算したデータが用いられるが、このデータも依然として偏りが残っている。このため、上記不均衡の問題が解決されない。
【０００９】
したがって、実データを用いたソフトエラーの検出において、記憶内容が０の固定値となるソフトエラーの検出率と記憶内容が１の固定値となるソフトエラーの検出率とを同等にすることが求められている。
【００１０】
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１１】
一実施の形態によれば、半導体装置は、記憶対象のデータから１の個数と０の個数が略同数のビットパターンであるデータを生成するビット演算部と、生成されたデータを第１の格納先に格納し、このデータ又は予め定められたビット演算を行うことによりこのデータに変換されるデータのいずれかを第２の格納先に格納する記憶制御部とを有する。
【発明の効果】
【００１２】
前記一実施の形態によれば、実データを用いたソフトエラーの検出において、記憶内容が０の固定値となるソフトエラーの検出率と記憶内容が１の固定値となるソフトエラーの検出率の不均衡を抑制することができる。
【図面の簡単な説明】
【００１３】
【図１】実施の形態１に係る半導体装置の概要構成例を示すブロック図である。
【図２】実施の形態１にかかる半導体装置のハードウェア構成を示す模式図である。
【図３】実施の形態１にかかる半導体装置の構成を示すブロック図である。
【図４】実施の形態１にかかる半導体装置の格納領域と、この半導体装置の動作との関連について示す模式図である。
【図５】演算用ビットパターンデータの格納動作の一例を示すフローチャートである。
【図６】ＲＡＭへのデータの書き込み動作の一例を示すフローチャートである。
【図７】ＲＡＭからのデータの読み出し動作の一例を示すフローチャートである。
【図８】実施の形態１にかかる半導体装置によりユーザアプリケーションのデータの偏りが改善する具体例について示す模式図である。
【図９】実施の形態２にかかる半導体装置の構成を示す模式図である。
【図１０】実施の形態３にかかる機能安全システムのハードウェア構成を示す模式図である。
【図１１】実施の形態３にかかる半導体装置の論理構成の一例を示すブロック図である。
【図１２】実施の形態３にかかる半導体装置の構成を示すブロック図である。
【図１３】実施の形態３にかかる半導体装置の動作の一例を示すフローチャートである。
【図１４】実施の形態４にかかる半導体装置の構成を示すブロック図である。
【図１５】実施の形態４にかかる半導体装置の格納領域と、この半導体装置の更新部の退避動作との関連について示す模式図である。
【図１６】実施の形態４にかかる半導体装置の格納領域と、半導体装置４の更新部の復帰動作との関連について示す模式図である。
【図１７】実施の形態４にかかる半導体装置における更新動作の一例を示すフローチャートである。
【図１８】実施の形態５にかかる半導体装置の格納領域と、この半導体装置の動作との関連について示す模式図である。
【発明を実施するための形態】
【００１４】
説明の明確化のため、以下の記載及び図面は、適宜、省略、及び簡略化がなされている。また、様々な処理を行う機能ブロックとして図面に記載される各要素は、ハードウェア的には、ＣＰＵ、メモリ、その他の回路で構成することができ、ソフトウェア的には、メモリにロードされたプログラムなどによって実現される。したがって、これらの機能ブロックがハードウェアのみ、ソフトウェアのみ、またはそれらの組合せによっていろいろな形で実現できることは当業者には理解されるところであり、いずれかに限定されるものではない。なお、各図面において、同一の要素には同一の符号が付されており、必要に応じて重複説明は省略されている。
【００１５】
また、上述したプログラムは、様々なタイプの非一時的なコンピュータ可読媒体（ｎｏｎ−ｔｒａｎｓｉｔｏｒｙ  ｃｏｍｐｕｔｅｒ  ｒｅａｄａｂｌｅ  ｍｅｄｉｕｍ）を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体（ｔａｎｇｉｂｌｅ  ｓｔｏｒａｇｅ  ｍｅｄｉｕｍ）を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体（例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ）、光磁気記録媒体（例えば光磁気ディスク）、ＣＤ−ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＣＤ−Ｒ、ＣＤ−Ｒ／Ｗ、半導体メモリ（例えば、マスクＲＯＭ、ＰＲＯＭ（Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）、ＥＰＲＯＭ（Ｅｒａｓａｂｌｅ  ＰＲＯＭ）、フラッシュＲＯＭ、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ））を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体（ｔｒａｎｓｉｔｏｒｙ  ｃｏｍｐｕｔｅｒ  ｒｅａｄａｂｌｅ  ｍｅｄｉｕｍ）によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【００１６】
＜実施の形態の概要＞
実施の形態の詳細を説明する前に、まず、概要について説明する。図１は、実施の形態１に係る半導体装置１の概要構成例を示すブロック図である。図１に示されるように、半導体装置１は、ビット演算部１００と記憶制御部１０２とを有している。
【００１７】
ビット演算部１００は、記憶対象のデータであるｎ（ｎは正整数）ビットの第１のデータと、ｎビットのビットパターンである第２のデータと、をビット演算して、１の個数と０の個数が略同数のビットパターンである第３のデータを生成する。なお、ここでいう１の個数とは、二進数における１の個数である。同様に、０の個数とは二進数における０の個数である。したがって、ビット演算部１００により、第１のデータは、たとえ第１のデータ内容に偏りが存在したとしても、偏りが抑制された第３のデータへと変換される。
【００１８】
また、記憶制御部１０２は、記憶部に対するデータの書き込み及び読み出しを制御する。ここで記憶部は、ＲＡＭ等の記憶装置である。特に、データの書き込みの際、記憶制御部１０２は、ビット演算部１００により生成された第３のデータを記憶部の第１の格納先に格納するととともに、第４のデータを記憶部の第２の格納先に格納する。ここで、第４のデータは、第３のデータ、又は予め定められたビット演算を行うことにより第３のデータに変換されるデータのいずれかである。すなわち、第４のデータは、第３のデータと同じであってもよいし、例えば、第３のデータの各ビットを反転したデータであってもよい。
【００１９】
したがって、半導体装置１によれば、記憶部には、データの内容に偏りが存在する恐れのある第１のデータではなく偏りが抑制された第３のデータが記憶されるとともに、第３のデータに変換可能な第４のデータが記憶される。このため、第１の格納先に格納されたデータと、第２の格納先に格納されたデータの内容が一致しているか否かによりソフトエラーの検出を行う場合において、記憶内容が０の固定値となるソフトエラーの検出率（以下、０固定検出率という。）と記憶内容が１の固定値となるソフトエラーの検出率（以下、１固定検出率という。）の不均衡が抑制される。なお、この判定における判定対象である第１の格納先に格納されたデータは、第３のデータ又は第３のデータにソフトエラーが生じたデータである。また、この判定における判定対象である第２の格納先に格納されたデータは、第４のデータ又は第４のデータにソフトエラーが生じたデータである。
【００２０】
＜実施の形態１＞
以下、実施の形態１の詳細について説明する。図２は、実施の形態１にかかる半導体装置１のハードウェア構成を示す模式図である。半導体装置１は、マイクロコンピュータとして構成されており、図２に示されるように、ＲＡＭ１０、ＲＯＭ（Read Only Memory）１１、フラッシュメモリであるデータフラッシュ１２、及びＣＰＵ（Central Processing Unit）１３を搭載している。
【００２１】
ＲＡＭ１０（内蔵ＲＡＭ）には、プログラム実行時の中間処理データなどであるワークデータに加え、後述するビット演算データ及びビット反転データが格納される。ＲＯＭ１１には、ソフトエラーの検出に関する処理を行うための後述するプログラム（以下、ソフトエラー検出プログラムと称することがある）が格納される。データフラッシュ１２には、後述するビット演算に用いられるビットパターンである演算用ビットパターンデータが格納される。ＣＰＵ１３はＲＯＭ１１から読み出した上述のプログラムに従い、ソフトエラー検出に関する後述する処理を実行する。そのため、ＣＰＵ１３は、ＲＯＭ１１からの上記プログラムの読み出し、ＲＡＭ１０への上記各種データの読み出し及び書き込み、並びにデータフラッシュ１２からの演算用ビットパターンデータの読み出しを行う。
【００２２】
図３は、ＣＰＵ１３がソフトエラー検出プログラムを実行することにより実現される、半導体装置１の構成を示すブロック図である。半導体装置１は、図３に示されるように、ビット演算部１００と、ビット反転部１０１と、記憶制御部１０２と、判定部１０３とを有している。
【００２３】
ビット演算部１００は、上述の通り、ＲＡＭ１０への記憶対象であるデータ（第１のデータ）と、データフラッシュ１２に格納されている演算用ビットパターンデータ（第２のデータ）と、をビット演算して、１の個数と０の個数が略同数のビットパターンであるビット演算データ（第３のデータ）を生成する。
【００２４】
ここで、本実施の形態では、演算用ビットパターンデータは、ランダムデータ又はシーケンシャルデータである。ランダムデータは、各ビットの値が０又は１にランダムに設定されたデータである。シーケンシャルデータは、連続する複数の値を昇順又は降順で並べて構成されるデータである。このため、ランダムデータ及びシーケンシャルデータのビットパターンにおいて、１の個数と０の個数は略同数である。また、ビット演算部１００は、ビット演算として、排他的論理和を使用する。すなわち、ビット演算部１００は、記憶対象のｎビットのデータと、ｎビットのランダムデータ又はシーケンシャルデータとの排他的論理和を演算し、１の個数と０の個数が略同数のビットパターンであるビット演算データを生成する。以下の説明では、排他的論理和演算について、ＸＯＲ演算と呼ぶことがある。
【００２５】
また、ビット演算部１００は、ＲＡＭ１０に記憶された、ビット演算後のデータをビット演算前のデータに戻すために、ＲＡＭ１０から読み出されたデータに対しＸＯＲ演算を行う。この際、当該データの記憶時に行われたＸＯＲ演算で用いられた演算用ビットパターンデータが再度用いられる。
【００２６】
ビット反転部１０１は、ビット演算部１００により生成されたビット演算データの各ビットを反転させたデータであるビット反転データ（第４のデータ）を生成する。このように、本実施の形態では、上記第４のデータとして、ビット反転することによりビット演算データに変換されるデータが用いられるが、上述の通り、第４のデータとしてビット演算データが用いられてもよく、その場合、ビット反転部１０１は省略されてもよい。また、ビット反転部１０１は、後述する判定部１０３による判定に際し、ＲＡＭ１０に格納された、ビット反転データ又はビット反転データにソフトエラーが生じたデータに対し、ビット反転させる。
【００２７】
記憶制御部１０２は、データフラッシュ１２及びＲＡＭ１０に対するデータの書き込み及び読み出しを制御する。記憶制御部１０２は、上述の通り、ビット演算部１００により生成されたビット演算データをＲＡＭ１０の第１の格納先に格納する。また、記憶制御部１０２は、ビット反転部１０１により生成されたビット反転データを、ＲＡＭ１０の第２の格納先に格納する。
【００２８】
したがって、ＲＡＭ１０には、データの内容に偏りが存在する恐れのある元データではなく、１の個数と０の個数は略同数であるビット演算データと、このビット演算データをビット反転したビット反転データが格納されることとなる。ここで、２重化したデータの一方のデータ（ビット反転データ）が、他方のデータ（ビット演算データ）をビット反転させたデータであるため、両者の格納条件を異なるものにすることができ、２重化したデータの両方にソフトエラーが同時に発生する確率が低くなる。このため、両方にソフトエラーが同時に発生することによる検出率の低下を抑制することができる。
【００２９】
判定部１０３は、ＲＡＭ１０の第１の格納先に格納されているデータと、第２の格納先に格納されているデータの内容の一致を判定する。具体的には、判定部１０３は、ＲＡＭ１０に格納されているビット演算データと、ＲＡＭ１０に格納されているビット反転データをビット反転したデータと、を比較して、両者が一致しているか否かを判定する。判定部１０３は、両者が一致していない場合、ソフトエラーが発生したと判定する。これによりソフトエラーの検知ができる。なお、ＲＡＭ１０に格納されているビット演算データには、ビット演算データにソフトエラーが生じたデータが含まれる。また、ＲＡＭ１０に格納されているビット反転データには、ビット反転データにソフトエラーが生じたデータが含まれる。以下の説明において、記憶されているビット演算データは、ビット演算データ及びビット演算データにソフトエラーが生じたデータを意味する。また、記憶されているビット反転データは、ビット反転データ及びビット反転データにソフトエラーが生じたデータを意味する。
【００３０】
したがって、１の個数と０の個数が略同数のビットパターンであるビット演算データに基づいて、ソフトエラーによるビットの固定の有無が判定されるので、半導体装置１における０固定検出率と１固定検出率とが略同等となる。
【００３１】
以下、図４を参照して、半導体装置１の更なる詳細について説明する。なお、以下の説明では、ソフトエラーの検出が必要されるデータを安全データと呼ぶ。図４は、半導体装置１の格納領域と、半導体装置１の動作との関連について示す模式図である。ここでは、ＲＡＭ１０の容量が６４Ｋバイト、データフラッシュ１２の容量が３２Ｋバイトであるものとして説明するが、これら容量は一例であり、他の容量のＲＡＭ１０及びデータフラッシュ１２が用いられてもよい。
【００３２】
データフラッシュ１２は、格納領域が４分割されている。具体的には、データフラッシュ１２は、４つのブロック５０（ブロック（１）〜ブロック（４））に分割されている。そして、これらブロック５０のうちブロック（４）が演算用ビットパターンデータの格納領域として使用される。このブロック（４）は、１Ｋバイト単位で８分割されている。具体的には、ブロック（４）は、８つのセグメント５１（セグメント（０）〜セグメント（７））に分割されている。ブロック５０は、データフラッシュ１２における消去単位である。すなわち、ここでは、消去単位は８Ｋバイトである。セグメント５１は、１バイト単位で管理される。ここで、データフラッシュ１２の書き込み最小単位は１バイトであるとする。
【００３３】
なお、ブロック５０のうちブロック（４）以外のブロックには、演算用ビットパターンデータ以外のデータが格納される。また、データフラッシュ１２は、演算用ビットパターンデータ用のブロックのみから構成されていてもよい。
【００３４】
本実施の形態において、ブロック（４）に書き込まれる演算用ビットパターンデータは、ランダムデータ又はシーケンシャルデータである。シーケンシャルデータの場合、具体的には、例えば、アドレス順に０ｘ００〜０ｘＦＦまでのデータを２５６バイト単位で繰り返したデータが用いられてもよい。なお、「０ｘ」は、後続の記載が１６進数表記であることを示す。すなわち、１６ビットの連続する複数の値を昇順に並べたビットパターンのデータが用いられてもよい。
【００３５】
ＲＡＭ１０は、格納領域が４分割されている。具体的には、ＲＡＭ１０は、１６Ｋバイトずつの４つの領域６０（領域（１）〜領域（４））に分割されている。そして、これら領域６０のうち領域（４）が安全データの格納領域として使用される。また、領域（４）は、８Ｋバイトずつの２つの領域に分割されており、一方は、ビット演算データ格納用の領域（ビット演算データ領域６１）であり、他方は、ビット反転データ格納用の領域（ビット反転データ領域６２）である。ビット演算データ領域６１は、８分割されており、１Ｋバイト単位のレコード６３（レコード（０）〜レコード（７））として１Ｋバイト単位で管理される。同様に、ビット反転データ領域６２も、８分割されており、１Ｋバイト単位の反転レコード６４（反転レコード（７）〜反転レコード（０））として１Ｋバイト単位で管理される。
【００３６】
なお、ＲＡＭ１０の領域のうち領域（１）〜領域（３）は、例えば、安全データ以外のデータである非安全データの格納領域として用いられる。なお、以下の説明において、領域（１）〜（３）について非安全データ領域と称され、領域（４）について安全データ領域と称されることがある。
【００３７】
記憶制御部１０２は、ビット反転データをビット反転データ領域６２に格納する際、アドレスの逆順により選択された格納先にビット反転データを格納する。すなわち、記憶制御部１０２は、第１のビット演算データを８Ｋバイトのビット演算データ領域６１の先頭アドレスに書き込み、第１のビット演算データをビット反転したビット反転データを８Ｋバイトのビット反転データ領域の最終アドレスに書き込む。また、記憶制御部１０２は、第２のビット演算データを８Ｋバイトのビット演算データ領域６１の先頭の次のアドレスに書き込み、第２のビット演算データをビット反転したビット反転データを８Ｋバイトのビット反転データ領域６２の最終アドレスから１バイト小さいアドレスに書き込む。以降、同様にして、記憶制御部１０２は、ビット演算データ及びビット反転データをＲＡＭ１０に格納する。
【００３８】
記憶制御部１０２が、安全データであるデータ（図４におけるデータＡ）を、図４に示すようにレコード（６）のＮ番目（Ｎ＝１，２，・・・，１０２４）の１バイトの領域に書き込む場合、ビット演算部１００は、データＡと、データフラッシュ１２のセグメント（６）のＮ番目にある演算用ビットパターンデータとをＸＯＲ演算し、記憶制御部１０２は、演算結果であるビット演算データをレコード（６）のＮ番目の領域に書き込む。このように、ビット演算部１００は、複数の異なる演算用ビットパターンデータのうちビット演算データの格納先に応じて選択された演算用ビットパターンデータをビット演算に使用する。このため、ビット演算データに用いられる演算用ビットパターンデータが固定化されない。このことは、０固定検出率と１固定検出率との不均衡をより抑制することに寄与する。ただし、ビット演算部１００は、格納先に関わらず、１種類の演算用ビットパターンデータのみを用いて、ビット演算データを生成してもよい。記憶制御部１０２は、ビット反転部１０１によりビット演算データをビット反転されたビット反転データを、逆順のアドレスである反転レコード（１）の１０２４−（Ｎ−１）番目の領域に書き込む。
【００３９】
ＲＡＭ１０に書き込まれたデータＡを読み出す場合、記憶制御部１０２は、レコード（６）のＮ番目の領域からビット演算データを読み出し、反転レコード（１）の１０２４−（Ｎ−１）番目の領域からビット反転データを読み出す。そして、ビット反転部１０１は、ビット反転データをビット反転させる。判定部１０３は、読み出されたビット演算データと、ビット反転部１０１により反転されたデータとを、比較する。そして、判定部１０３は、両者が一致していない場合、ソフトエラーが発生したと判定する。このようにして、ソフトエラーの検出が行われる。判定部１０３による判定において両者が一致している場合、ビット演算部１００は、読み出されたビット演算データと、データフラッシュ１２のセグメント（６）のＮ番目にある演算用ビットパターンデータとをＸＯＲ演算し、データを復元する。そして、復元されたデータは、ユーザアプリケーション等のデータ読み出し要求元に返される。このように、本実施の形態では、１の個数と０の個数が略同数のビットパターンを生成するために、ＸＯＲ演算を用いているため、元のデータに復元する際にも、再度、ＸＯＲ演算をかければよい。このため、構成を簡単化することができる。
【００４０】
次に、フローチャートに沿って、半導体装置１の動作について説明する。図５は、演算用ビットパターンデータの格納動作の一例を示すフローチャートである。図５に沿って、演算用ビットパターンデータの格納動作について説明する。
【００４１】
ステップ１００（Ｓ１００）において、演算用ビットパターンデータが生成される。ランダムデータの演算用ビットパターンデータは、例えば、Ｃ言語のＲａｎｄ関数を用いて生成される。シーケンシャルデータの演算用ビットパターンデータは、例えば、アドレス順に０ｘ００〜０ｘＦＦまでのデータを繰り返すことにより８Ｋバイトのデータを構成することにより生成される。
【００４２】
ステップ１０１（Ｓ１０１）において、記憶制御部１０２は、演算用ビットパターンデータの書き込み領域であるブロック（上記例ではブロック（４））が空きであるかを確認する。例えば、このブロックのブランクチェックが行われることにより確認される。ブランクチェックは、ＣＰＵ１３がデータフラッシュ１２にコマンドで要求することにより、データフラッシュ１２に設けられたハードウェアで行なわれる。例えば、ブランクチェックは、データフラッシュ１２に搭載されたＢＧＯ（Background Operations）機能により、ＣＰＵ１３と独立に処理することができる。ステップ１０１で、空きがないと判定された場合、処理はステップ１０２へ移行する。ステップ１０１で、空きがあると判定された場合、処理はステップ１０３へ移行する。
【００４３】
ステップ１０２（Ｓ１０２）において、記憶制御部１０２は、演算用ビットパターンデータの書き込み領域であるブロックの記憶内容を消去する。
【００４４】
ステップ１０３（Ｓ１０３）において、記憶制御部１０２は、ステップ１００で生成された演算用ビットパターンデータをブロックに書き込む。
【００４５】
次に、ＲＡＭ１０へのデータの書き込み動作について説明する。図６は、ＲＡＭ１０へのデータの書き込み動作の一例を示すフローチャートである。
【００４６】
ステップ２００（Ｓ２００）において、記憶制御部１０２は、書き込み対象のデータ、すなわち記憶対象のデータが、安全データであるか否かを判定する。安全データであるか否かは、例えば、書き込み要求元から通知される。記憶対象のデータが安全データである場合、処理はステップ２０１へ移行する。記憶対象のデータが安全データでない場合、処理はステップ２０７へ移行する。
【００４７】
ステップ２０１（Ｓ２０１）において、記憶制御部１０２は、ビット演算データ領域６１及びビット反転データ領域６２における書き込みアドレス（格納先のアドレス）を計算する。書き込みアドレスは、例えばＣ言語のＷｒａｐｐｅｒ関数を用いてアセンブラ化することにより計算される。
【００４８】
ステップ２０２（Ｓ２０２）において、記憶制御部１０２は、書き込み対象のデータに対応する演算用ビットパターンデータが格納されているブロック（上記例ではブロック（４））のアドレスを計算する。例えば、記憶制御部１０２は、書き込み対象のデータの格納先（すなわちビット演算データの格納先）を示す情報から、このデータに対応する演算用ビットパターンデータのデータフラッシュ１２における格納先を算出する。
【００４９】
ステップ２０３（Ｓ２０３）において、ビット演算部１００は、書き込み対象のデータと、ステップ２０２で計算されたアドレスで示される領域からロードした演算用ビットパターンデータとのビット演算を行う。具体的には、ビット演算部１００は、これらデータを用いて、ＸＯＲ演算を行う。
【００５０】
ステップ２０４（Ｓ２０４）において、記憶制御部１０２は、ステップ２０３で生成されたビット演算データを、ステップ２０１で計算されたアドレスで表されるビット演算データ領域６１に書き込む。
【００５１】
ステップ２０５（Ｓ２０５）において、ビット反転部１０１は、ステップ２０３で生成されたビット演算データの内容をビット反転する。
【００５２】
ステップ２０６（Ｓ２０６）において、記憶制御部１０２は、ステップ２０５で生成されたビット反転データを、ステップ２０１で計算されたアドレスで表されるビット反転データ領域６２に書き込む。これにより、書き込み処理が終了する。
【００５３】
これに対し、ステップ２０７（Ｓ２０７）では、記憶制御部１０２が、書き込み対象のデータの書き込みアドレスを計算する。そして、ステップ２０８（Ｓ２０８）において、記憶制御部１０２は、ステップ２０７で計算されたアドレスに基づいて、書き込み対象のデータを実データのまま、非安全データ領域に書き込む。これにより書き込み処理が終了する。
【００５４】
次に、ＲＡＭ１０からのデータの読み出し動作について説明する。図７は、ＲＡＭ１０からのデータの読み出し動作の一例を示すフローチャートである。
【００５５】
ステップ３００（Ｓ３００）において、記憶制御部１０２は、読み出し対象のデータが、安全データであるか否かを判定する。安全データであるか否かは、例えば、読み出し要求元から通知される。読み出し対象のデータが安全データである場合、処理はステップ３０１へ移行する。読み出し対象のデータが安全データでない場合、処理はステップ３０９へ移行する。
【００５６】
ステップ３０１（Ｓ３０１）において、記憶制御部１０２は、ビット演算データ領域６１及びビット反転データ領域６２における読み出しアドレスを計算する。読み出しアドレスは、例えばＣ言語のＷｒａｐｐｅｒ関数を用いてアセンブラ化することにより計算される。
【００５７】
ステップ３０２（Ｓ３０２）において、記憶制御部１０２は、読み出し対象のデータに対応する演算用ビットパターンデータが格納されているブロック（上記例ではブロック（４））のアドレスを計算する。例えば、記憶制御部１０２は、読み出し対象のデータの格納先（すなわちビット演算データの格納先）を示す情報から、このデータに対応する演算用ビットパターンデータのデータフラッシュ１２における格納先を算出する。
【００５８】
ステップ３０３（Ｓ３０３）において、記憶制御部１０２は、ステップ３０１で計算されたアドレスのビット演算データ領域６１から、ビット演算データを読み出す。
【００５９】
ステップ３０４（Ｓ３０４）において、記憶制御部１０２は、ステップ３０１で計算されたアドレスのビット反転データ領域６２から、ビット反転データを読み出す。
【００６０】
ステップ３０５（Ｓ３０５）において、ビット反転部１０１は、ステップ３０４で読み出されたデータの全ビットを反転する。
【００６１】
ステップ３０６（Ｓ３０６）において、判定部１０３は、ステップ３０３で読み出されたデータと、ステップ３０５で得られたデータとを比較して、両者が一致しているか否かを判定する。両者が一致していると判定された場合、処理は、ステップ３０７へ移行する。両者が一致していないと判定された場合、処理は、ステップ３０８へ移行する。
【００６２】
ステップ３０７（Ｓ３０７）において、ステップ３０２で得られたアドレスからロードした演算用ビットパターンデータを用いて、元のデータに戻す演算が行われる。具体的には、ビット演算部１００が、演算用ビットパターンデータを用いて、ＸＯＲ演算を行うことにより、元のデータが得られる。得られた元のデータは、読み出し要求元に渡される。これにより、読み出し処理が終了する。
【００６３】
ステップ３０８（Ｓ３０８）において、判定部１０３は、ソフトエラーを検出したとして、要求元のプログラムにソフトエラー検出を通知する。これにより、読み出し処理は終了する。
【００６４】
これに対し、ステップ３０９（Ｓ３０９）では、記憶制御部１０２が、読み出し対象のデータの読み出しアドレスを計算する。そして、ステップ３１０（Ｓ３１０）において、記憶制御部１０２は、ステップ３０９で計算されたアドレスに基づいて、読み出し対象の実データを非安全データ領域から読み出す。これにより、読み出し処理は終了する。
【００６５】
次に、上述の半導体装置１によりユーザアプリケーションのデータの偏りが改善する具体例について図８を参照して説明する。
【００６６】
データフラッシュ１２のセグメント（６）に、０ｘ００〜０ｘＦＦまでのデータを２５６バイト単位で繰り返したシーケンシャルな演算用ビットパターンデータが格納されているものとする。この場合、この演算用ビットパターンデータには、ｂ’０とｂ’１がそれぞれ４０９６個存在する。なお、ｂ’０は２進数表記の０を示し、ｂ’１は２進数表記の１を示す。この演算用ビットパターンデータを用いて、ユーザアプリケーションのデータである書き込みデータに対しＸＯＲ演算がなされる。書き込みデータの各ビットにおいて、ＸＯＲ演算後においても同じ値を保持する確率をＰＮとし、ＸＯＲ演算後にビットが反転する確率をＰＩとすると、近似的にはＰＮとＰＩは１／２になる。ユーザアプリケーションのデータは任意であるので、ｂ’０がＭ個、ｂ’１が（８１９２−Ｍ）個存在したとすると、ＸＯＲ演算後には、ｂ’０とｂ’１はともに近似的には４０９６個に近づく。このため、ユーザアプリケーションデータの偏りが改善する。なお、Ｍ＝０，１，２，・・・，８１９２であるとする。ユーザアプリケーションデータのサイズが大きくなると、一般にＰＮとＰＩの近似精度は良くなるので、さらに、偏りは改善することになる。図８に示す例では、使用する演算用ビットパターンデータがシーケンシャルデータである場合を示したが、ランダムデータでもｂ’０とｂ’１が均等に近くなる確率が高いので、シーケンシャルデータを用いる場合と同程度の結果となる。
【００６７】
以上述べたように、半導体装置１によれば、データの内容に偏りが存在する恐れのあるデータではなく偏りが抑制されたデータが記憶されるため、０固定検出率と１固定検出率の不均衡が抑制される。
【００６８】
＜実施の形態２＞
次に、実施の形態２について説明する。半導体装置１は、上述の第３のデータ（すなわちビット演算データ）及び第４のデータ（すなわち、第３のデータ、又は予め定められたビット演算を行うことにより第３のデータに変換されるデータ）をいずれも内蔵のＲＡＭ１０に記憶した。本実施の形態では、第３のデータ及び前記第４のデータのうち一方が、記憶制御部１０２により内蔵の記憶部に格納され、他方が記憶制御部１０２により外部記憶部に格納される点で、上記半導体装置１と異なる。以下、ビット反転データ、すなわち第４のデータが外部記憶部に格納される構成例について説明するが、ビット演算データが外部記憶部に格納されるように半導体装置が構成されてもよい。
【００６９】
図９は、実施の形態２にかかる半導体装置２の構成を示す模式図である。以下、半導体装置２について、半導体装置１と重複する説明は省略し、異なる点について説明する。半導体装置２は、マイクロコンピュータとして構成されており、図９に示されるように、ＲＡＭ１０、ＲＯＭ１１、データフラッシュ１２、ＣＰＵ１３、及び入出力インタフェース１４を搭載している。ここで、ＲＡＭ１０は、半導体装置２に内蔵された記憶部であり、入出力インタフェース１４は、半導体装置２に接続されるＳＤカード１５との入出力のためのインタフェースである。なお、ここでは、外部記憶部として、ＳＤカード１５を用いる場合を例に説明するが、外部記憶部は、ＵＳＢメモリなどの他の外部メモリであってもよい。
【００７０】
入出力インタフェース１４は、ハードウェアとして、ＳＤカード１５を制御するＳＤホストＩ／Ｆモジュールを備えている。また、ＲＯＭ１１には、このモジュールを制御してＳＤカード１５にアクセスするためのＳＤカードドライバ（ソフトウェア）、及びデータをファイルとして扱うファイルシステム（ソフトウェア）を記憶している。これらソフトウェアは、ＣＰＵ１３により実行される。本実施の形態にかかる記憶制御部１０２は、ビット演算データをＲＡＭ１０に格納し、ビット反転データをＳＤカード１５に格納する。その際、記憶制御部１０２は、ＳＤカード１５のユーザ領域７０にビット反転データの格納用のフォルダ７１（図９に示されるＩＮＶＥＲＴフォルダ）を作成し、ビット反転データを格納する。なお、セキュリティ機能であるＣＰＲＭ（Content Protection for Recordable Media）が使用されない場合には、空き領域となるＳＤカード１５におけるプロテクト領域７２にビット反転データの格納用のフォルダが作成されてもよい。ここで、プロテクト領域７２は、セキュリティ関連のプロトコルシーケンスが実行された後に、アクセス可能となる領域である。なお、本実施の形態にかかる記憶制御部１０２は、半導体装置１と同様、演算用ビットパターンデータについてはデータフラッシュ１２に格納する。
【００７１】
本実施の形態にかかる判定部１０３は、書き込まれたデータを読み出す際、ＳＤカード１５から読み出したビット反転データとＲＡＭ１０から読み出したビット演算データの内容の一致を判定する。具体的には、判定部１０３は、ＳＤカード１５から読み出したビット反転データの全ビットをビット反転部１０１によりビット反転したデータと、ＲＡＭ１０から読み出したビット演算データとが一致するか否かを判定する。判定部１０３は、両者が一致しなければソフトエラーとして検出する。
【００７２】
以上、実施の形態２について説明したが、ＳＤカード１５に格納するデータは、ＲＯＭ１１上に搭載したファイルシステムでファイルとして管理されてもよいが、論理アドレスを使用して管理されてもよい。また、ＳＤカード１５へのアクセスは、ＳＤホストＩ／Ｆモジュール及びＳＤカードドライバに代えて、シリアルモジュールにより簡易的に行われてもよい。
【００７３】
上述の通り、半導体装置２は、２重化したデータの一方を外部メモリに格納する。このため、内蔵のＲＡＭ１０の容量の削減、又は他アプリケーション用データの格納先としての容量の確保が可能となる。また、ビット演算データとビット反転データを物理的に離れた場所に格納するので、２重化したデータの両方にソフトエラーが同時に発生する確率が低くなる。このため、両方にソフトエラーが同時に発生することによる検出率の低下を抑制することができる。
【００７４】
＜実施の形態３＞
次に、実施の形態３について説明する。実施の形態３は、機能安全システムに上述の半導体装置を組み込んだ場合の構成例について説明する。図１０は、機能安全システム５００のハードウェア構成を示す模式図である。機能安全システム５００は、機能安全に対応した機器である機能安全機器５０１を含んでいる。機能安全機器５０１は、マイクロコンピュータとして構成された半導体装置３＿１、３＿２を備えており、図示しないネットワークを介して、ロボット、ＡＣサーボ、工作機械等の産業機器５０２又はネットワークサーバー、携帯電話、プリンタ等の通信機器５０３と接続し、これら機器の制御及びこれら機器との通信を行う。機能安全機器５０１は、ＩＥＣ６１５０８等の機能安全規格に準拠して構成されている。特に、本実施の形態では、機能安全機器５０１は、半導体装置３＿１、３＿２の２つのマイクロコンピュータを搭載しており、これらが相互に監視している。
【００７５】
半導体装置３＿１、３＿２は、同様の構成を備えている。このため、重複する説明を避けるため、以下、半導体装置３＿１の構成について説明する。半導体装置３＿１は、ＲＡＭ１０、ＲＯＭ１１、データフラッシュ１２、ＣＰＵ１３、及び入出力インタフェース１６を搭載している。ＲＯＭ１１には、制御や通信等の処理を行うためのプログラムに加え、ソフトエラーの検出に関する処理を行うための上述のプログラムが格納される。ＲＡＭ１０には、ワークデータに加え、ビット演算データ及びビット反転データが格納される。なお、機能安全規格に準拠して安全データを保護するため、メモリ管理ユニット（MMU：Memory Management Unit）及びメモリプロテクションユニット（MPU：Memory Protection Unit）により、ＲＡＭ１０及びＲＯＭ１１において、安全データを配置する領域と非安全データを配置する領域とは分離されている。データフラッシュ１２には、制御や通信等の処理で使用するパラメータに加え、演算用ビットパターンデータが格納される。ＣＰＵ１３はＲＯＭ１１から読み出したプログラムに従い、制御や通信等の演算に加え、ソフトエラー検出に関する上述の処理を実行する。ＣＰＵ１３は、処理部と称されることがある。入出力インタフェース１６は、周辺モジュールであり、Ｅｔｈｅｒｎｅｔ（登録商標）、ＵＳＢ、シリアル通信等の通信構成により産業機器又は通信機器等と接続するインタフェースである。
【００７６】
次に、半導体装置３＿１、３＿２の論理構成について説明する。図１１は、半導体装置３＿１、３＿２の論理構成の一例を示すブロック図である。半導体装置３＿１、３＿２は、機能安全規格に準拠すべく、処理、バス、及び配置するメモリをハードウェア的に互いに分離して構成されている。このため、半導体装置３＿１、３＿２は、安全データを扱うソフトウェアと、非安全データを扱うソフトウェアとをそれぞれ含んでいる。なお、以下に示す、ソフトウェアとハードウェアは一例であり、同等な機能を持つものであれば代替可能である。
【００７７】
半導体装置３＿１、３＿２は、それぞれ、アプリケーションとして、非安全データ用の通信アプリケーション３０１、安全データ用の通信アプリケーション３０２、非安全データ用の制御アプリケーション３１１、安全データ用の制御アプリケーション３１２、ソフトエラー検出プログラム３２０を含む。通信アプリケーション３０１、３０２は、産業用Ｅｔｈｅｒの通信アプリケーションである。代表的な産業用Ｅｔｈｅｒ規格としては、ＥｔｈｅｒＮｅｔ／ＩＰ、ＰＲＯＦＩＮＥＴ、ＥｔｈｅｒＣＡＴ等がある。制御アプリケーション３１１、３１２は、ＡＣサーボに組み込まれた産業用モータやロボットに組み込まれた産業用モータなどを制御する。
【００７８】
また、半導体装置３＿１、３＿２は、それぞれ、ミドルウェアとして、非安全データ用のＴＣＰ，ＵＤＰ／ＩＰ３３１及び安全データ用のＴＣＰ，ＵＤＰ／ＩＰ３３２を含む。ＴＣＰ，ＵＤＰ／ＩＰ３３１、３３２は、論理的な通信接続管理、ＴＣＰ又はＵＤＰのパケット送受信処理、及び接続機器情報の管理等を行う。
【００７９】
また、半導体装置３＿１、３＿２は、それぞれ、ドライバとして、非安全データ用のＥｔｈｅｒドライバ３４１、安全データ用のＥｔｈｅｒドライバ３４２、フラッシュドライバ３５０、非安全データ用のＭＴＵドライバ３６１、及び安全データ用のＭＴＵドライバ３６２を含む。Ｅｔｈｅｒドライバ３４１、３４２は、Ｉ／ＯモジュールであるＥｔｈｅｒコントローラ３７０を使用して、Ｅｔｈｅｒフレームの送受信処理、Ｅｔｈｅｒケーブルの接続検出等を行う。フラッシュドライバ３５０は、データフラッシュ１２に対する入出力を管理する。ＭＴＵドライバ３６１、３６２は、タイマモジュールであるＭＴＵ（Multi-Function Timer Pulse Unit）を使用して、産業用モータの制御信号であるＰＷＭ（Pulse Width Modulation）波形を生成する。
【００８０】
また、半導体装置３＿１、３＿２は、それぞれ、ハードウェアとして、上記ハードウェアに加え、Ｅｔｈｅｒコントローラ３７０及びＭＴＵ３８０を含む。Ｅｔｈｅｒコントローラ３７０は、ＭＡＣ層の処理をするＥＴＨＥＲＣ（Ethernet Controller）３７１と、ＣＰＵ１３とのデータの送受信を効率的に処理するＥＤＭＡＣ（DMA Controller for the Ethernet Controller）３７２とを有し、アナログ信号への変換を行うＰＨＹと、Ｅｔｈｅｒコネクタ（一般的にはＲＪ−４５）とを経由して、Ｅｔｈｅｒケーブルに対する入出力を行う。ＭＴＵ３８０は、ＰＷＭのタイミング信号を生成し、入出力インタフェース１６のＩ／Ｏポート経由でＰＷＭ波形を出力する。
【００８１】
ここで、本実施の形態におけるソフトエラー検出プログラム３２０について説明する。図１２は、ＣＰＵ１３がソフトエラー検出プログラム３２０を実行することにより実現される、半導体装置３＿１、３＿２の構成を示すブロック図である。半導体装置３＿１、３＿２は、図１２に示されるように、処理制御部１０４と、ビット演算部１００と、ビット反転部１０１と、記憶制御部１０２と、判定部１０３とを有している。ビット演算部１００、ビット反転部１０１、記憶制御部１０２、及び判定部１０３については、既に説明されているので、説明を省略する。処理制御部１０４は、ソフトエラーの通知及び相互監視を行う。なお、処理制御部１０４は、ミドルウェアなど、ソフトエラー検出プログラム３２０以外のプログラムにより実現されてもよい。
【００８２】
以下、半導体装置３＿１の動作を中心に、機能安全システム５００の動作について説明する。図１３は、半導体装置３＿１の動作の一例を示すフローチャートである。なお、一般的に、２個のマイクロコンピュータを用いて相互監視する機能安全機器では、次のような構成が考えられる。１つ目の構成は、２個のマイクロコンピュータで同等な動作を行う構成である。２つ目の構成は、一方のマイクロコンピュータで相互監視と安全アプリケーションに従った制御とを実施し、他方のマイクロコンピュータで相互監視のみを行う構成がある。いずれの構成に対しても、上述のソフトエラーの検出方法は適用可能であるが、ここでは、２個のマイクロコンピュータで同等な動作をし、相互監視の演算を行う場合を例に説明する。なお、相互監視の演算には演算時間の制限があるため、その制限時間内に終了する単位の演算が行われるものとする。
【００８３】
ステップ４００（Ｓ４００）において、処理制御部１０４は、演算に使用する安全データのＲＡＭ１０からの読み出しがあるかを判定する。演算に使用する安全データの読み出しがある場合、処理はステップ４０１に移行する。一方、演算に使用する安全データの読み出しがない場合、処理はステップ４０４に移行する。
【００８４】
ステップ４０１（Ｓ４０１）において、安全データのＲＡＭ１０からの読み出しが行われる。具体的には、図７に示したＳ３０１〜Ｓ３０８の処理が行われる。
【００８５】
ステップ４０２（Ｓ４０２）において、処理制御部１０４は、読み出しでソフトエラーが検出されたかを判定する。ソフトエラーが検出された場合、ステップ４０３（Ｓ４０３）において、処理制御部１０４は、通信又は制御を行う安全アプリケーションである通信アプリケーション３０２又は制御アプリケーション３１２にソフトエラーの検出を通知する。また、処理制御部１０４は、半導体装置３＿２にもソフトエラーの検出を通知する。その後、処理を終了する。ここで、半導体装置３＿２への通知は、例えば、各種シリアル通信又は外部割込み端子を使用し行われる。
【００８６】
ステップ４０４（Ｓ４０４）において、処理制御部１０４は、演算に使用する安全データのＲＡＭ１０への書き込みがあるかを判定する。演算に使用する安全データの書き込みがある場合、処理はステップ４０５に移行する。一方、演算に使用する安全データの書き込みがない場合、処理はステップ４０６に移行する。
【００８７】
ステップ４０５（Ｓ４０５）において、安全データのＲＡＭ１０への書き込みが行われる。具体的には、図６に示したＳ２０１〜Ｓ２０６の処理が行われる。ステップ４０５の後、処理はステップ４０６に移行する。
【００８８】
ステップ４０６（Ｓ４０６）において、処理制御部１０４は、通信アプリケーション３０２又は制御アプリケーション３１２に従った演算を実行する。
【００８９】
ステップ４０７（Ｓ４０７）において、処理制御部１０４は、所定単位の演算が終了したか否かを判定する。所定単位の演算が終了していない場合、処理は、ステップ４００に戻る。所定単位の演算が終了した場合には、処理は、ステップ４０８へ移行する。
【００９０】
ステップ４０８（Ｓ４０８）において、処理制御部１０４は、演算結果を半導体装置３＿２に送信するとともに、半導体装置３＿２から、同じ演算の演算結果を受信する。ここで、半導体装置３＿１と半導体装置３＿２の通信は、例えば、各種シリアル通信又は外部割込み端子を使用し行われる。
【００９１】
ステップ４０９（Ｓ４０９）において、処理制御部１０４は、自装置の演算結果（処理結果）と半導体装置３＿２から受信した演算結果（処理結果）とを比較し、両者が一致しているかを判定する。一致している場合、処理が終了する。一方、一致していない場合、ステップ４１０（Ｓ４１０）において、処理制御部１０４は、通信アプリケーション３０２又は制御アプリケーション３１２と半導体装置３＿２に演算結果の不一致の発生を通知し、処理を終了する。
【００９２】
以上、本実施の形態によれば、容易に、上述のソフトエラー検出方法を実現する機能安全機器を構成することができる。また、複数の半導体装置の処理結果を比較することにより、より安全な制御又は通信を実現することができる。なお、上記実施の形態２を、実施の形態３にかかる機能安全システム５００に適用してもよい。また、後述する実施の形態にかかる半導体装置が、機能安全システム５００に適用されてもよい。
【００９３】
＜実施の形態４＞
次に、実施の形態４について説明する。本実施の形態は、演算用ビットパターンデータが更新される点で、他の実施の形態と比べて特徴的である。図１４は、ＣＰＵ１３がソフトエラー検出プログラムを実行することに実現される、実施の形態４にかかる半導体装置４の構成を示すブロック図である。半導体装置４は、図１４に示されるように、ビット演算部１００と、ビット反転部１０１と、記憶制御部１０２と、判定部１０３と、更新部１０５を有している。ビット演算部１００、ビット反転部１０１、記憶制御部１０２、及び判定部１０３については、既に説明されているので、説明を省略する。なお、半導体装置４も、マイクロコンピュータとして構成されており、ＲＡＭ１０、ＲＯＭ１１、データフラッシュ１２、及びＣＰＵ１３を搭載している。
【００９４】
更新部１０５は、データフラッシュ１２に格納されている演算用ビットパターンデータ（上述の第２のデータ）を更新するとともに、更新前の第２のデータに基づく上述の第３のデータ（ビット演算データ）及び上述の第４のデータを、それぞれ、更新された第２のデータに基づく第３のデータ及び第４のデータに更新する。ここで、本実施の形態では、第４のデータとして、ビット演算データの各ビットが反転されたビット反転データを用いる場合の構成例が示されるが、第４のデータとして、第３のデータが用いられてもよいし、予め定められたビット演算を行うことにより第３のデータに変換されるデータが用いられてもよい。
【００９５】
更新部１０５は、データフラッシュ１２上において、演算用ビットパターンデータの更新を行うが、その際、更新部１０５は、更新後の演算用ビットパターンデータの格納先を更新前の演算用ビットパターンデータの格納先と変更して、更新を実施する。また、更新部１０５は、ＲＡＭ１０上において、ビット演算データの更新を行うが、その際、更新部１０５は、更新後のビット演算データの格納先を更新前のビット演算データの格納先と変更して、更新を実施する。同様に、更新部１０５は、ＲＡＭ１０上において、ビット反転データの更新を行うが、その際、更新部１０５は、更新後のビット反転データの格納先を更新前のビット反転データの格納先と変更して、更新を実施する。このようにして、更新部１０５は、更新前の演算用ビットパターンデータ、ビット演算データ、及びビット反転データを一旦退避後、更新後のデータを別の格納先へ復帰させる。
【００９６】
なお、更新部１０５による更新頻度は任意である。例えば、図示しない内蔵タイマによる周期的な更新が行われてもよいし、安全データの送受信回数を参照し、送受信回数に応じて更新が行われてもよい。
【００９７】
記憶制御部１０２は、データの読み出し又は書き込みを並行して行うことができるよう、更新部１０５による更新の進捗に応じて、ビット演算データ及びビット反転データの読み出し先又は書き込み先を変更する。なお、記憶制御部１０２によるこの動作の詳細については、フローチャートを用いて説明する。
【００９８】
以下、図１５及び図１６を参照して、半導体装置４の更なる詳細について説明する。図１５は、半導体装置４の格納領域と、半導体装置４の更新部１０５の退避動作との関連について示す模式図である。また、図１６は、半導体装置４の格納領域と、半導体装置４の更新部１０５の復帰動作との関連について示す模式図である。なお、以下において、データフラッシュ１２及びＲＡＭ１０の図４に示した構成と重複する部分についての説明は省略する。
【００９９】
本実施の形態では、データフラッシュ１２において、更新後の演算用ビットパターンデータである新たな演算用ビットパターンデータを格納するための格納領域に相当するブロック５０が確保される。具体的には、例えば、図１５及び図１６に示されるように、ブロック（３）が、更新後の演算用ビットパターンデータを格納するための格納領域として使用される。ブロック（４）には、更新前の演算用ビットパターンデータが格納されている。
【０１００】
同様に、ＲＡＭ１０において、更新後のビット演算データ及びビット反転データを格納するための格納領域に相当する領域６０が確保される。具体的には、例えば、図１５及び図１６に示されるように、領域（３）が、更新後の安全データ（ビット演算データ及びビット反転データ）を格納するための格納領域として使用される。なお、領域（４）の少なくとも一部には安全データであるビット演算データ及びビット反転データが格納されている。
【０１０１】
更新部１０５は、更新に際し、まず、新たな演算用ビットパターンデータを生成する。そして、更新部１０５は、新たな演算用ビットパターンデータをデータフラッシュ１２に書き込む。具体的には、更新部１０５は、ブロック（３）に新たな演算用ビットパターンデータを書き込む。
【０１０２】
その後、更新部１０５は退避処理を行う。すなわち、更新部１０５は、ＲＡＭ１０から安全データを読み出して退避するよう制御する（図１５参照）。具体的には、更新部１０５は、例えば、領域（４）のレコード（６）のＮ番目（Ｎ＝１，２，・・・，１０２４）に１バイトのビット演算データ（ここでは、データＢのビット演算データとする）が存在する場合、データＢのビット演算データを読み出す。そして、ビット演算部１００が、読み出されたデータＢのビット演算データと、ブロック（４）のセグメント（６）のＮ番目にある演算用ビットパターンデータとのビット演算を行い、データＢの元データに変換する。また、更新部１０５は、データＢのビット演算データの各ビットを反転したデータであるビット反転データを、逆順のアドレスである領域（４）の反転レコード（１）の（１０２４−（Ｎ−１））番目の格納領域から読み出す。そして、ビット演算部１００は、読み出されたビット反転データと、ブロック（４）のセグメント（６）のＮ番目にある演算用ビットパターンデータとのビット演算を行い、データＢの元データの各ビットを反転したデータに変換する。
【０１０３】
なお、安全データの退避の際、判定部１０３によるデータの判定により、ソフトエラーの発生の有無についての検知が行われてもよい。
【０１０４】
更新部１０５は、退避処理後、復帰処理を行う。すなわち、更新部１０５は、ＲＡＭ１０に安全データを書き込むことにより安全データの復帰を行うよう制御する（図１６参照）。具体的には、まず、ビット演算部１００が、退避処理で得られたデータＢの元データと、新たな演算用ビットパターンデータを格納するブロック（３）のセグメント（６）のＮ番目にある演算用ビットパターンデータとのビット演算（ＸＯＲ演算）を行う。そして、更新部１０５は、この演算結果のデータを領域（３）のレコード（６）のＮ番目に書き込む。また、ビット演算部１００は、退避処理で得られた、データＢの元データの各ビットを反転したデータと、ブロック（３）のセグメント（６）のＮ番目にある演算用ビットパターンデータとのビット演算（ＸＯＲ演算）を行う。そして、更新部１０５は、この演算結果のデータを、逆順のアドレスである領域（３）の反転レコード（１）の（１０２４−（Ｎ−１））番目に書き込む。
【０１０５】
更新部１０５は、退避処理及び復帰処理を、領域（４）に書き込まれたデータの数だけ繰り返す。その後、更新部１０５は、ブロック（４）の内容を消去し、更新前の演算用ビットパターンデータを消去する。
【０１０６】
なお、図１５及び図１６に示した例では、安全データの退避の際、ビット反転データ領域６２に格納されたビット反転データについても上述の退避処理が行われ、安全データの復帰の際、退避されたビット反転データに対しＸＯＲ演算が行われている。しかしながら、安全データの退避及び復帰は、更新前の演算用ビットパターンデータに基づくビット演算データ及びビット反転データが、更新後の演算用ビットパターンデータに基づくビット演算データ及びビット反転データに更新されればよく、他の方法が採用されてもよい。例えば、安全データの退避の際、ビット演算データ領域６１に格納されたビット演算データのみに対し上述の退避処理を行い、安全データの復帰の際には、上述の復帰処理がなされたビット演算データに対し、ビット反転を行うことで得られるビット反転データが格納されてもよい。
【０１０７】
次に、フローチャートに沿って、更新動作について説明する。図１７は、半導体装置４における更新動作の一例を示すフローチャートである。なお、ここでは、演算用ビットパターンデータの更新による安全データの退避及び復帰の動作中において、安全データの読み出し、または書き込みがある場合の動作フローを一例として示す。安全データの退避及び復帰中は、アプリケーションからの要求による読み出し及び書き込み、すなわち更新に伴う読み出し及び書き込み以外の安全データの読み出し及び書き込みを禁止してもよい。しかしながら、ここでは、アプリケーションからの要求による１バイト単位での安全データの読み出し及び書き込みを可能にする動作例を示す。
【０１０８】
ここで、upd_ptrを次に更新するアドレスを示す更新ポインタと定義する。すなわち、upd_ptrは、次に退避及び復帰を行う領域（４）に格納された安全データのアドレスを示す。b_addrを領域（４）のビット演算データ領域６１の先頭アドレスと定義する。また、e_addrを領域（４）のビット演算データ領域６１の最終アドレスと定義する。そして、r_addrを安全アプリケーションからの読み出し要求により指示される、領域（４）のビット演算データ領域６１の読み出しアドレスと定義する。また、w_addrを安全アプリケーションからの書き込み要求により指示される、領域（４）のビット演算データ領域６１の書き込みアドレスと定義する。
【０１０９】
ステップ５００（Ｓ５００）において、更新部１０５は、新たな演算用ビットパターンデータを生成する。
【０１１０】
ステップ５０１（Ｓ５０１）において、更新部１０５は、更新ポインタをビット演算データ領域６１の先頭アドレスに初期化する（upd_ptr ← b_addr）。
【０１１１】
ステップ５０２（Ｓ５０２）において、更新部１０５は、新たな演算用ビットパターンデータをデータフラッシュ１２に書き込む。具体的には、更新部１０５は、ブロック（３）に新たな演算用ビットパターンデータを書き込む。なお、演算用ビットパターンデータの書き込みに際し、図５に示したＳ１０１〜Ｓ１０３の処理が行われてもよい。
【０１１２】
ステップ５０３（Ｓ５０３）において、記憶制御部１０２は、安全データの読み出し要求があるかを判定する。安全データの読み出し要求がある場合、処理はステップ５０４へ移行する。安全データの読み出し要求がない場合、処理はステップ５０７へ移行する。
【０１１３】
ステップ５０４（Ｓ５０４）において、記憶制御部１０２は、読み出しアドレスが更新済み（退避及び復帰済み）のアドレスか判定する（r_addr < upd_ptr?）。読み出しアドレスが更新済みのアドレスである場合、ステップ５０５（Ｓ５０５）において、記憶制御部１０２は、更新後の領域である領域（３）から安全データの読み出しを行う。具体的には、図７に示したＳ３０１〜Ｓ３０８の処理が行われる。読み出しアドレスが更新前のアドレスである場合、ステップ５０６（Ｓ５０６）において、記憶制御部１０２は、更新前の領域である領域（４）から安全データの読み出しを行う。具体的には、図７に示したＳ３０１〜Ｓ３０８の処理が行われる。
【０１１４】
ステップ５０７（Ｓ５０７）において、記憶制御部１０２は、安全データの書き込み要求があるかを判定する。安全データの書き込み要求がある場合、処理はステップ５０８へ移行する。安全データの書き込み要求がない場合、処理はステップ５１１へ移行する。
【０１１５】
ステップ５０８（Ｓ５０８）において、記憶制御部１０２は、書き込みアドレスが更新済み（退避及び復帰済み）のアドレスか判定する（w_addr < upd_ptr?）。書き込みアドレスが更新済みのアドレスである場合、ステップ５０９（Ｓ５０９）において、記憶制御部１０２は、更新後の領域である領域（３）に安全データの書き込みを行う。具体的には、図６に示したＳ２０１〜Ｓ２０６の処理が行われる。書き込みアドレスが更新前のアドレスである場合、ステップ５１０（Ｓ５１０）において、記憶制御部１０２は、更新前の領域である領域（４）に安全データの書き込みを行う。具体的には、図６に示したＳ２０１〜Ｓ２０６の処理が行われる。
【０１１６】
ステップ５１１（Ｓ５１１）において、更新部１０５は、ビット演算データの更新を行う。すなわち、更新部１０５は、更新ポインタが示すアドレスのビット演算データの領域（４）からの退避、及び領域（３）への復帰を行う。また、ステップ５１２（Ｓ５１２）において、更新部１０５は、ビット反転データの更新を行う。すなわち、更新部１０５は、更新ポインタが示すアドレスのビット反転データの領域（４）からの退避、及び領域（３）への復帰を行う。
【０１１７】
ステップ５１３（Ｓ５１３）において、更新部１０５は、更新ポインタを１だけ増やす（upd_ptr = upd_ptr + 1）。
【０１１８】
ステップ５１４（Ｓ５１４）において、更新部１０５は、領域（４）の全データの更新が完了したか判定する（upd_ptr > e_addr?）。全データの更新が完了していない場合、処理はステップ５０３に戻る。全データの更新が完了した場合、ステップ５１５（Ｓ５１５）において、更新部１０５は、ブロック（４）にある更新前の演算用ビットパターンデータを消去する。
【０１１９】
このように、本実施の形態にかかる半導体装置４によれば、演算用ビットパターンデータを更新することが可能である。これにより、同じアドレスに同じ内容のデータが書き込まれる恐れがある場合であってもデータの偏りを抑えることができる。また、更新の進捗に応じて、安全データの読み出し先又は書き込み先が変更されるので、更新動作中であっても読み出し及び書き込みを実施することができる。なお、本実施の形態で示した更新処理は、上述の実施の形態２又は３に組み合わせることが可能である。
【０１２０】
＜実施の形態５＞
次に、実施の形態５について説明する。上述の各実施の形態では、ビット演算部１００は、データフラッシュ１２に格納された演算用ビットパターンデータを使用した。これに対し、本実施の形態では、安全データの格納先のＲＡＭ１０のアドレスが使用される。なお、その他の点については、半導体装置１と同じであるため、説明を省略する。
【０１２１】
本実施の形態では、ビット演算部１００は、演算用ビットパターンデータとして、ビット演算データの格納先のアドレスの値を用いて生成されたシーケンシャルデータを用いて、ビット演算を行う。
【０１２２】
以下、図１８を参照して、説明する。なお、ＲＡＭ１０の構成は、図４に示した構成と同じであるものとして説明する。よって、図１８に示す例においても、ＲＡＭ１０の領域（４）が、安全データが格納される安全データ領域である。ここで、ＲＡＭ１０のアドレスが０番地から始まるものとし、ＲＡＭ１０の領域（４）の先頭アドレスが０ｘ００００Ｃ０００であるものとする。
【０１２３】
記憶制御部１０２が、安全データであるデータ（図１８におけるデータＣ）を、図１８に示すように分割されたレコード（６）のＮ番目（Ｎ＝１，２，・・・，１０２４）の１バイトの領域に書き込む場合、ビット演算部１００は、データＣと、レコード（６）のＮ番目のアドレスの下位８ビットとをＸＯＲ演算し、記憶制御部１０２は、その演算結果であるビット演算データを書き込む。また、記憶制御部１０２は、ビット反転部１０１により生成されたビット反転データを、逆順のアドレスである反転レコード（１）の１０２４−（Ｎ−１）番目の領域に書き込む。
【０１２４】
領域（４）の先頭アドレスの下位８ビットが０ｘ００である場合、演算用ビットパターンデータは、０ｘ００から０ｘＦＦまでのデータを２５６バイト単位で繰り返すシーケンシャルなデータ内容となる。このため、ユーザアプリケーションデータの偏りが改善する。
【０１２５】
ＲＡＭ１０に書き込まれたデータＣを読み出す場合、記憶制御部１０２は、レコード（６）のＮ番目の領域からビット演算データを読み出し、反転レコード（１）の１０２４−（Ｎ−１）番目の領域からビット反転データを読み出す。そして、ビット反転部１０１は、ビット反転データをビット反転させる。判定部１０３は、読み出されたビット演算データと、ビット反転部１０１により反転されたデータとを、比較する。そして、判定部１０３は、両者が一致していない場合、ソフトエラーが発生したと判定する。判定部１０３による判定において両者が一致している場合、ビット演算部１００は、読み出されたビット演算データと、レコード（６）のＮ番目のアドレスの下位８ビットとをＸＯＲ演算し、データを復元する。
【０１２６】
なお、具体的な動作フローについては、なお、図６に示したステップ２０２及び図７のステップ３０２における演算用ビットパターンデータの格納先アドレスの計算に代えて、領域（４）の格納先アドレスから下位８ビットを抽出する処理が行われればよい。
【０１２７】
以上、本実施の形態によれば、データフラッシュを持たない半導体装置においても、１の個数と０の個数が略同数のデータへの変換が可能となるとともに、演算用ビットパターンデータの書き込み又は更新を不要とすることができる。なお、本実施の形態は、実施の形態２及び実施の形態３にも適用可能であることは言うまでもない。
【０１２８】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は既に述べた実施の形態に限定されるものではなく、その要旨を逸脱しない範囲において種々の変更が可能であることはいうまでもない。例えば、データフラッシュに代えて、ＥＥＰＲＯＭ（Electrically Erasable Programmable Read-Only Memory）などの不揮発性メモリが用いられてもよい。また、この不揮発性メモリが半導体装置に内蔵されず、外付けで設けられてもよい。また、ビット演算部１００は、１の個数と０の個数が略同数のビットパターンであるデータを生成すればよく、ＸＯＲ演算以外の任意のビット演算が用いられてもよい。
【符号の説明】
【０１２９】
１、２、３＿１、３＿２、４    半導体装置
１０    ＲＡＭ
１１    ＲＯＭ
１２    データフラッシュ
１３    ＣＰＵ
１４、１６    入出力インタフェース
１５    ＳＤカード
５０    ブロック
５１    セグメント
６０    領域
６１    ビット演算データ領域
６２    ビット反転データ領域
６３    レコード
６４    反転レコード
７０    ユーザ領域
７１    フォルダ
７２    プロテクト領域
１００    ビット演算部
１０１    ビット反転部
１０２    記憶制御部
１０３    判定部
１０４    処理制御部
１０５    更新部
３０１、３０２    通信アプリケーション
３１１、３１２    制御アプリケーション
３２０    ソフトエラー検出プログラム
３３１、３３２    ＴＣＰ，ＵＤＰ／ＩＰ
３４１、３４２    Ｅｔｈｅｒドライバ
３５０    フラッシュドライバ
３６１、３６２    ＭＴＵドライバ
３７０    Ｅｔｈｅｒコントローラ
３７１    ＥＴＨＥＲＣ
３７２    ＥＤＭＡＣ
３８０    ＭＴＵ
５００    機能安全システム
５０１    機能安全機器
５０２    産業機器
５０３    通信機器
【図１】
2017111463.tif 000003
【図２】
2017111463.tif 000004
【図３】
2017111463.tif 000005
【図４】
2017111463.tif 000006
【図５】
2017111463.tif 000007
【図６】
2017111463.tif 000008
【図７】
2017111463.tif 000009
【図８】
2017111463.tif 000010
【図９】
2017111463.tif 000011
【図１０】
2017111463.tif 000012
【図１１】
2017111463.tif 000013
【図１２】
2017111463.tif 000014
【図１３】
2017111463.tif 000015
【図１４】
2017111463.tif 000016
【図１５】
2017111463.tif 000017
【図１６】
2017111463.tif 000018
【図１７】
2017111463.tif 000019
【図１８】
2017111463.tif 000020