(57)【要約】［課題］レジスタ毎にＥＣＣ回路を設けると回路規模が増大し、面積コストだけでなく消費電力も増加する。動作周波数低下を抑制しつつ全てのレジスタに対して誤り訂正が行われるようにすること。［解決手段］  不揮発性素子を有する不揮発性論理要素回路を複数用いて構成される機能モデュールと、機能モデュールに対応して設けられたＥＣＣモデュールと、機能モデュールとＥＣＣモデュールを制御するＣＰＵとを有する不揮発性論理集積回路。
2013132806.tif 000002
【特許請求の範囲】
【請求項１】
不揮発性素子を有する不揮発性論理要素回路を複数用いられて構成される機能モデュールと、前記機能モデュールに対応して設けられたECCモデュールと、前記機能モデュールと前記ECCモデュールを制御するCPUとを有する不揮発性論理集積回路であって、
前記機能モデュールは前記CPUからの第１の制御信号が活性化することに応答して前記複数の不揮発性論理要素回路のうち対応する不揮発性論理要素回路が保持する保持データを前記ECCモデュールに転送し、
前記ECCモデュールは前記機能モデュールから転送された保持データの誤りビットのチェックを行い、誤りビットを検出すると第２の制御信号を活性化すると共に誤り訂正したデータに対して符号化を行い、
前記CPUは前記第２の制御信号が活性化したのを受けて次のサイクルで前記データを読み出した不揮発性論理要素回路に対して訂正データを書き戻す処理を行うと共に、同じサイクルで前記第１及び第２の制御信号を非活性化することを特徴とする不揮発性論理集積回路。
【請求項２】
前記不揮発性論理要素回路は第３の制御信号受け、前記第３の制御信号が活性化されると前記不揮発性論理要素回路が保持するデータを前記不揮発性素子へ転送し、
前期書き戻しサイクルにおいて、前記第３の制御信号を活性化させることを特徴とする請求項１記載の不揮発性論理集積回路。
【請求項３】
前記ＥＣＣモデュールは、データバスから入力される第１のデータと、前記論理要素回路を含む機能モデュールから入力される第２のデータとを入力データとし、
前記第２の制御信号が非活性状態の時に第１のデータと、第１のデータから符号化されるパリティビットを前記機能モデュールへ出力し、
前記第２の制御信号が活性状態の時に第２のデータと、第２のデータから符号化されるパリティビットとを機能モデュールへ出力することを特徴とする請求項１記載の不揮発性論理集積回路。
【請求項４】
前記ＥＣＣモデュールに入力される前記第２のデータのビット幅が、前記第１のデータのビット幅よりも大きく、
前記第２のデータの一部のビットを前記第１のデータに置き換えた第３のデータと、前記第３のデータから符号化されるパリティビットとを機能モデュールに出力することを特徴とする請求項３記載の不揮発性論理集積回路。
【請求項５】
前記第１の制御信号が活性化されるサイクルを含まない一連の命令サイクルにおいては、前記ＥＣＣモデュールの誤り検出動作は行わないことを特徴とする請求項１記載の不揮発性論理集積回路。
【請求項６】
前記論理要素回路が、クロックに同期して入力データを一定時間だけ保持する一時保持回路の機能を有し、ｎビット（ｎは２以上）の論理要素回路からなる不揮発性レジスタを構成していることを特徴とする請求項１記載の不揮発性論理集積回路。
【請求項７】
前記不揮発性素子が、強誘電体素子、あるいは、磁気抵抗素子、相変化素子等の抵抗変化素子を用いて構成されていることを特徴とする請求項１記載の不揮発性論理集積回路。
【請求項８】
不揮発性素子を有する論理要素回路から構成される不揮発性レジスタの誤りビットの訂正方法であって、
任意の不揮発レジスタのリストア命令取得と、当該レジスタ番地を取得する第１のステップと、
不揮発性素子が保持するデータを論理要素回路へ呼び出すリストア動作、及び、呼び出されたデータの誤りチェックと訂正動作を行う第２のステップと、
誤り訂正されたデータを当該レジスタに書き戻し、さらに、不揮発性素子にも訂正データを書き戻す第３のステップとを有することを特徴とする不揮発性レジスタの誤り訂正方法。
【請求項９】
前記不揮発性レジスタの保持データを不揮発性素子に書くセーブ命令を実行した後に、当該レジスタのリストア命令を実行し、誤り訂正を行ってから電源を切断することを特徴とする請求項８記載の不揮発性レジスタの誤り訂正方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、不揮発性論理集積回路に関し、特に不揮発レジスタ回路の誤り訂正に関係した不揮発性論理集積回路及び訂正方法に関する。
【背景技術】
【０００２】
これまで電子機器の高性能化や高機能化は集積回路の微細化技術の進展によって支えられてきた。集積回路に用いられるＣＭＯＳトランジスタを微細化することで、集積度を向上できるためより多くの機能を集積化してきた。また、この微細化により寄生容量が減少することで高速化と低消費電力化を実現してきた。しかしながら、近年はこの微細化技術の進展も物理限界が見え始めてきている。例えば、６５ｎｍ世代以降はトランジスタの漏れ電流が動作電流に匹敵するほどに大きくなり無視できなくなってきている。この漏れ電流は微細化の世代が進むほど増大し、当然、回路規模が大きくなるほど増大する。即ち、微細化すればするほど漏れ電流による消費電力の増加が問題視されている。【０００３】
現在の集積回路では、演算処理を必要としないスタンバイ状態の時でも、レジスタやメモリに一時保存されている内部情報を保持するために電源を入れ続ける必要がある。従って、微細化が進むほどスタンバイ時においても漏れ電流に起因する電力を消費してしまい、無駄な待機電力の増大を招いている。【０００４】
この待機電力を削減する試みとして、スタンバイ時において、電源電圧を内部情報の保持に最低限必要な電圧まで下げる技術が実用化されている。この技術により、待機電力をある程度削減することが可能であるが、完全にゼロにすることはできない。電源を切断すれば待機電力をゼロにできるが、内部情報を失ってしまうために、電源遮断前にレジスタや内部メモリの情報をストレージ・デバイスに退避させる必要がある。当然、電源投入後は退避させたデータを呼び出す必要があるため、使用開始まで待ち時間が発生する。このデータ転送にかかる時間（待ち時間）は少なくとも秒単位以上も必要であることが多く、システムの利便性を考慮すると頻繁に電源を切断することは事実上されていないことが多い。【０００５】
システムの利便性を損うことなく待機電力をゼロにできる技術として、不揮発性素子をＣＭＯＳ回路内に組み込むことで集積回路の内部情報を不揮発化しようという試みがある。例えば、従来のＳＲＡＭに不揮発性素子を組み込むことでワーキングメモリを不揮発化できる。さらに、フリップフロップ回路に不揮発性素子を組み込めば、クロックに同期して動作する論理回路を事実上不揮発化することができる。【０００６】
この不揮発性素子に求められる性能で重要なのは書き換え回数であり、１０の１２乗回以上の書き換え耐性が必要である。現在、市場の主流であるフラッシュメモリの書き換え回数は１０の４乗から５乗程度しかなく、集積回路の論理回路やワーキングメモリに適用することはできない。【０００７】
近年、この不揮発性素子として強誘電体素子や抵抗変化素子の利用が注目されている。強誘電体素子の書き換え回数は１０の１２乗回以上である。また、抵抗変化素子の代表とされる磁気抵抗変化素子にいたっては書き換え回数に制限がない。【０００８】
図１は、不揮発性素子を組み込んだフリップフロップ（不揮発Ｆ／Ｆ）の基本構成を示している。本回路は、従来のフリップフロップと同様にクロック（ＣＬＫ）に同期して入力された１ビットデータ（Ｄ）を次のクロックサイクルまで一時保持して出力する機能として動作する。さらに、１ビットのデータ出力Ｑを内部に組み込まれた不揮発性素子に保存する機能（セーブ機能）と、不揮発性素子に蓄えられた１ビットの情報をＱに出力させる機能（リストア機能）を備えている。例えば、非特許文献１には、磁気抵抗素子を組み込んだ不揮発フリップフロップが開示されている。【０００９】
これによれば、図２に示す動作タイミングチャートの様に、セーブ・イネーブル信号ＷＢをローレベルに下げてアクティブにすると、Ｑの値を不揮発性素子に保存される。一方、リストア・イネーブル信号ＬＢをロー・レベルに下げてアクティブにすると、不揮発性素子に保存されていたデータをＱに呼び出すことができる。【００１０】
この不揮発化されたフリップフロップをＣＭＯＳ論理回路に適用することで、電源を切断しても演算結果や設定情報を消失しない不揮発性論理回路、及び、機能モデュールを実現できるようになる。電源切断時におけるデータ退避、及び、電源再投入時におけるデータ呼び出しに関るデータ転送も不要になるのでシステムの電源を頻繁に落としても利便性が損なわれることはない。また、近年増加の一途をたどる待機電力をカットできる技術として期待できる。【００１１】
先述した新興の不揮発性素子において、それら素子への書き込み動作の条件が安定しない課題がある。例えば、強誘電体素子においては同じデータを継続して書き続けた場合、同じ電圧と書き込み時間では逆のデータを書きにくくなることが知られている。また、磁気抵抗素子においては、書き込み電流値や時間によって磁化反転確率が変化するため外乱ノイズ等によって書き込みが失敗したり、あるいは逆のデータが書き込まれるといった誤書き込みが低確率で発生する可能性がある。【００１２】
このような誤書き込みのソフトエラーに対処する技術として誤り訂正符号を用いて誤りビットを検出し、検出された誤りビットを訂正する誤り訂正技術（ＥＣＣ：Ｅｒｒｏｒ  Ｃｈｅｃｋ  ａｎｄ  Ｃｏｒｒｅｃｔｉｏｎ）が広く知られている。これは、パリティビットと呼ばれる冗長ビットを追加してパリティビットを含む符号のハミング距離を３以上にすることで誤りビットを検出、訂正する符号技術である。【００１３】
ｐビットのパリティビットは符号化器（エンコーダ）によって、ｎビットのデータパターンから生成される。任意の１ビットの誤り訂正を可能にするハミング符号の場合は、ｎ≦２＾ｐ−１の式から必要なパリティビットのビット数ｐが決まる。例えば、ｎ＝１６ビットの場合に必要なパリティビットはｐ＝５ビットとなる。【００１４】
復号化器（デコーダ）は、誤りビットが存在するかをチェックし、存在する場合は誤りビットを訂正する機能を有する。一般的に、誤りチェックする論理演算では誤りビットを１、正常ビットを０としたシンドロームと呼ばれるデータパターンを生成する。次に、誤りを含むデータとシンドロームの各々のビットに対して、排他的論理和をとることで誤り訂正を実行できる。【００１５】
不揮発素子への書き込み時におけるソフトエラーは、この誤り訂正技術を活用することで解決可能である。しかし、論理回路に用いられる全てのレジスタ（演算結果や設定値を格納するｎビットのフリップフロップで構成されたデータ保持回路）に誤り訂正技術を用いると回路規模が爆発的に増大する。【００１６】
図３は、一般的な機能モデュールの基本構成の概略図である。主に組み合わせ論理ゲートで構成される論理演算の結果や論理演算に関る設定値はレジスタに一時保持される。また、これらレジスタに保持されている情報はデータバスを介してＣＰＵからアクセスすることが可能である。【００１７】
誤り訂正技術を取り入れた不揮発レジスタの回路構成の一例を図４に示す。この不揮発レジスタは、ｎビットの不揮発Ｆ／Ｆとｐビットの不揮発Ｆ／Ｆが用いられ、さらに、パリティを生成するＥＣＣエンコーダと誤りチェックと訂正を行うＥＣＣデコーダを含んでいる。各不揮発Ｆ／Ｆは、データバスからのデータ（Ｄｉｎ）と論理演算部からのデータ（ＲＥＧｉｎ）のどちらかを書き込むことができる。もし、論理演算結果を書き込む必要が無い場合は、ＲＥＧｉｎからの入力とそれを選択するマルチプレクサは省略できる。ＥＣＣエンコーダは、これら入力データからパリティビットを生成してパリティの不揮発Ｆ／Ｆへ入力する。ＥＣＣデコーダは、ｐ＋ｎビットの不揮発Ｆ／Ｆの出力値を誤り訂正する（誤りが無い場合は訂正しない）。ｎビットのレジスタの出力（ＲＥＧｏｕｔ）はＥＣＣデコーダの出力である。【００１８】
ここで、各不揮発Ｆ／Ｆは、当該レジスタが選択された場合のみ動作するように制御信号（ＣＬＫ、ＬＢ、ＷＢ）を生成するためのゲーテッドセルが設けられている。このゲーテッドセルの具体例を図５に示す。レジスタへのアクセスが許可されると、信号ＥＮがアクティブ（ハイ・レベル）になる。不揮発Ｆ／Ｆへ入力されるクロック（ＧＣＬＫ）は、ＬＢがディセーブル（ハイ・レベル）の時にＣＬＫが通過され、それ以外の時はローレベルに固定される。不揮発Ｆ／Ｆへ入力されるリストア・イネーブル信号（ＧＬＢ）とセーブ・イネーブル信号（ＧＷＢ）は、信号ＥＮがアクティブの時にＬＢ、ＷＢが通過され、それ以外の時はディセーブル（ハイ・レベル）である。【００１９】
図６は、各レジスタのビット幅ｎ＝１６ビットの場合におけるビット構成例を示している。誤り訂正機能のオーバヘッドは、５ビットのパリティビット分のＦ／ＦとＥＣＣエンコーダ、デコーダ回路である。
【先行技術文献】
【非特許文献】
【００２０】
【非特許文献１】“Ｎｏｎｖｏｌａｔｉｌｅ  Ｍａｇｎｅｔｉｃ  Ｆｌｉｐ−Ｆｌｏｐ  ｆｏｒ  Ｓｔａｎｄｂｙ−Ｐｏｗｅｒ−Ｆｒｅｅ  ＳｏＣｓ”ＩＥＥＥ  Ｊｏｕｒｎａｌ  Ｓｏｌｉｄ−Ｓｔａｔｅ  Ｃｉｒｃｕｉｔｓ，  ｖｏｌ．４４，  ｐ．２２４４，  ２００９．
【発明の概要】
【発明が解決しようとする課題】
【００２１】
上述した論理集積回路においては、レジスタの個数は数１００から１，０００以上にも及ぶ。図４に示すように、単純にレジスタ毎にＥＣＣ回路を追加すると回路規模が爆発的に増大し、面積コストだけでなく消費電力の観点からも望ましくない。特に、ＥＣＣデコーダは回路規模が大きくなり、全てのレジスタに備えるのは現実的ではない。例えば、ｎ＝１６ビットの場合、エンコーダは３０ゲート程度で済むのに対し、デコーダは２００ゲート以上必要である。即ち、ＥＣＣに関るオーバヘッドはゲート数で５〜１０倍程度にも達する。また、ＥＣＣデコーダの論理遅延は数ｎｓであり、レジスタが書き換える度に誤り訂正をするので動作周波数が低下する原因になる。【００２２】
本発明の目的は、面積コストの増大、消費電力の増加、動作周波数低下を抑制しつつ全てのレジスタに対して誤り訂正が行われるようにする不揮発性論理集積回路を提供することにある。
【課題を解決するための手段】
【００２３】
本発明の不揮発性論理集積回路は、不揮発性素子を有する不揮発性論理要素回路を複数用いられて構成される機能モデュールと、前記機能モデュールに対応して設けられたECCモデュールと、前記機能モデュールと前記ECCモデュールを制御するCPUとを有する不揮発性論理集積回路であって、前記機能モデュールは前記CPUからの第１の制御信号が活性化することに応答して前記複数の不揮発性論理要素回路のうち対応する不揮発性論理要素回路が保持する保持データを前記ECCモデュールに転送し、前記ECCモデュールは前記機能モデュールから転送された保持データの誤りビットのチェックを行い、誤りビットを検出すると第２の制御信号を活性化すると共に誤り訂正したデータに対して符号化を行い、前記CPUは前記第２の制御信号が活性化したのを受けて次のサイクルで前記データを読み出した不揮発性論理要素回路に対して訂正データを書き戻す処理を行うと共に、同じサイクルで前記第１及び第２の制御信号を非活性化することを特徴とする。
【発明の効果】
【００２４】
本発明によれば、不揮発性フリップフロップを内蔵する論理集積回路の信頼性を向上させる技術であって、不揮発性フリップフロップの誤りビットを訂正する手段の面積オーバヘッドを最低限にし、且つ、電源投入時における不揮発性フリップフロップのリストア動作と誤り訂正動作を少ないクロックサイクル数で実現することが可能となる。
【図面の簡単な説明】
【００２５】
【図１】一般的な不揮発性素子を組み込んだ不揮発フリップフロップの基本構成を示す図
【図２】一般的な不揮発性フリップフロップの動作タイミングの一例を示す図
【図３】一般的な論理集積回路のハードウェア構成図
【図４】一般的な誤り訂正機能を有する不揮発レジスタ回路の構成図
【図５】図４に記載のゲーテッドセルの一例を示す図
【図６】一般的なパリティビットが不揮発レジスタに付与された誤り訂正符号を示す図
【図７】本発明の不揮発性論理集積回路の第１実施例を示す図
【図８】図７の不揮発レジスタの回路構成図
【図９】本発明における不揮発レジスタのリストア動作を示す図
【図１０】本発明における不揮発レジスタのリストア動作を示す図
【図１１】本発明における不揮発レジスタのリストア動作を示す図
【図１２】本発明における不揮発レジスタのリストア動作のパイプライン処理を示す図
【図１３】本発明の不揮発性論理集積回路の第２実施例を示す図
【図１４】図１３の不揮発レジスタの回路構成図
【図１５】パリティビットが４ワードの不揮発レジスタで共有される場合の誤り訂正符号を示す図
【図１６】本発明の第３実施例におけるＥＣＣモデュール構成図
【図１７】本発明の第３実施例における不揮発性論理集積回路を示す図
【発明を実施するための最良の形態】
【００２６】
第一の実施の形態）
以下、具体的に本発明の実施の形態について詳述する。【００２７】
図７は、機能モデュールが有する不揮発レジスタの誤り訂正動作を可能とする本発明の第１の実施形態におけるハードウェア構成の基本構成図である。また、図８は、図７に記載の不揮発レジスタの具体的な回路構成例を示している。図９〜図１２は第１の実施形態における不揮発レジスタのリストア動作のタイミング・チャートを示している。以下、これらの図面を用いて本発明の第１の実施形態について詳述する。【００２８】
本発明の第１の実施形態によれば、図７に示すようにＣＰＵコアと機能モデュール間に、ＥＣＣモデュールが配置されている。ＥＣＣモデュールは、パリティビットを符号化するエンコーダと、誤りビットのチェックと訂正を行うデコーダを含んでいる。デコーダにより誤りビットを検出された場合には、１ビットのフラグ信号ＥＣＣ＿ＦＬＧをアクティブ（本の実施形態ではハイ・レベル）にして、ＣＰＵコアにフィードバックされる。エンコーダは、データバスからのデータ入力（Ｄｉｎ）とデコーダが出力する訂正データ（Ｄｏｕｔ）のどちらかに対して符号化を行う。【００２９】
例えば、デコーダが誤りビットを検出しない場合はＥＣＣ＿ＦＬＧはローレベルとなり、エンコーダはＤｉｎに対してパリティビットの符号化を行う。一方、誤りビットが検出された場合はＥＣＣ＿ＦＬＧはハイレベルになって、エンコーダはＤｏｕｔに対してパリティビットの符号化を行う。ＥＣＣモデュールは、ｎビットの入力データ（Ｄｉｎ＿Ｍ）とｐビットのパリティデータ（Ｐｉｎ＿Ｍ）を機能モデュールに供給する。【００３０】
ここで、Ｄｉｎ＿Ｍは、ＥＣＣ＿ＦＬＧがローレベルのクロックサイクルでは、データバスからのＤｉｎをそのまま機能モデュールに供給し、ＥＣＣ＿ＦＬＧがハイレベルのサイクルでは、デコーダからの出力データ（Ｄｏｕｔ）を機能モデュールに供給する。また、ＥＣＣモデュールは、機能モデュールからのデータ出力（Ｄｏｕｔ＿Ｍ）の誤り訂正データ（Ｄｏｕｔ）をデータバスに供給する。【００３１】
図８に示すように、機能モデュール内の不揮発レジスタは、ｎビットの不揮発性Ｆ／Ｆとｐビットの不揮発性Ｆ／Ｆと、これら不揮発性Ｆ／Ｆを制御するゲーテッドセルから構成される。ここで、ゲーテッドセルの具体例は、図５に示す回路と同じである。このように、不揮発レジスタは誤り訂正のためのＥＣＣエンコーダやデコーダは備えられていない。図７に示すように、機能モデュール内には複数の不揮発レジスタが備えられている。各々の不揮発レジスタのうち、選択状態にある任意の一つの不揮発レジスタのデータ出力（ＲＥＧｏｕｔ）を選択してＥＣＣモデュールへ供給される。【００３２】
本発明によれば、不揮発レジスタの誤りチェック、及び訂正動作は、その構成要素である不揮発Ｆ／Ｆのリストア動作、すなわち不揮発性素子の保持データを呼び出す場合のみ実行される。この誤りチェックを同時に行うリストア動作のタイミングチャートを図９〜１１に示す。本リストア動作は、以下の３つのステップを経て動作を完了する。
ステップ１：リストア命令のフェッチ、及び、リストア対象のレジスタの番地取得
ステップ２：対象レジスタのリストア動作、及び、誤りチェックと訂正
ステップ３：ステップ２で誤りビットが検出される場合、訂正データの書き戻し、及び、不揮発素子へのセーブ動作
図９は、ステップ２で誤りビットが検出されなかった場合の動作タイミング・チャートを示しており、ステップ３の動作は省略されている。この実施形態における説明では、ｎ＝１６ビットと仮定し、命令コードとレジスタ番地は２命令ワードに分割されていると仮定する。また、命令メモリとデータメモリ／レジスタのアドレスバス、データバスは物理的に分離されておらず共通であると仮定する。【００３３】
従って、上記ステップ１は２つのサイクルにまたがって実行される。即ち、図９の第１サイクル（時刻ｔ０−ｔ１）において、ＣＰＵコアは命令フェッチと命令デコードを行い、リストア命令であることを判断する（メモリアクセス）。次に、第２サイクル（時刻ｔ１−ｔ２）において、リストア動作対象のレジスタ番地（Ａ＿ｒｅｇ）を取得する（メモリアクセス）。第３サイクル（時刻ｔ２−ｔ３）において、上記ステップ２の動作を行う。【００３４】
具体的には、アドレスバスには第２サイクルで取得したレジスタ番地Ａ＿ｒｅｇが供給され、その番地に割り付けられた不揮発レジスタが選択状態となる。また、リストアイネーブル信号ＬＢがローレベルに活性される。図９の例では、ＬＢはクロックの半周期、ＣＬＫがＨレベルの時間に同期して活性化されている。この時、選択された不揮発レジスタのＣＬＫはゲーテッドセル（図５）によりローレベル固定（ディセーブル）になっている。ＬＢ信号の立ち上がりエッジのタイミングでリストア動作が完了（図２を参照）、即ち、不揮発レジスタの出力ＲＥＧｏｕｔは不揮発素子が保持するデータＱ＿ｒｅｇがリストアされる。ＥＣＣモデュールのデコーダは、Ｑ＿ｒｅｇの誤りチェックを行い、誤りビットが検出されなかったのでＥＣＣ＿ＦＬＧ信号はローレベル（非活性）のままである。以上、３サイクルで任意の不揮発レジスタのリストア動作が完了する。【００３５】
図１０は、ステップ２（第３サイクル）で誤りビットが検出された場合の動作タイミング・チャートを示している。ステップ１の第１、第２サイクルの動作は図９で説明したのと同じであるから説明を省略する。【００３６】
第３サイクルにおいて、ＥＣＣモデュールのデコーダはＱ＿ｒｅｇに誤りビットを検出すると、ＥＣＣ＿ＦＬＧ信号をハイレベルに活性化する。ここで、不揮発レジスタの出力ＲＥＧｏｕｔは誤りビットを含むデータＱ＿ｒｅｇ＿ｅｒｒデータパターンを出力している。ＣＰＵコアは活性化されたＥＣＣ＿ＦＬＧ信号を受けて、次のクロックサイクルでステップ３の動作を実行するように制御する。この時、ＥＣＣモデュールは、第３サイクル内で誤り訂正されたデータＱ＿ｒｅｇをデータバスＤｏｕｔに出力している。ステップ３を実行する第４サイクル（時刻ｔ３−ｔ４）では、アドレスバスには対象レジスタの番地が出力し続ける。ＥＣＣモデュールは、誤り訂正後のデータＱ＿ｒｅｇに対して符号化を行い、生成されたパリティビットと訂正データＱ＿ｒｅｇを不揮発レジスタに出力する。第４サイクルにおいては、リストア・イネーブル信号ＬＢはハイレベルのままであるから、不揮発レジスタはＥＣＣモデュールから入力された訂正データＱ＿ｒｅｇと、そのパリティビットを書き込むことで誤り訂正が完了する。【００３７】
第４サイクルにおいて、の訂正データの書き戻しによって不揮発レジスタは誤りビットが削除されたデータパターンＱ＿ｒｅｇを出力できるようになるが、不揮発性素子は未だ誤りビットを含むＱ＿ｒｅｇ＿ｅｒｒを保持している。図１１のように、このサイクルでセーブ・イネーブル信号ＷＢをローレベルに活性化すれば、不揮発性素子の誤りビットを正しく訂正することができる。【００３８】
本発明の第１の実施形態による不揮発レジスタのリストア命令長は、誤り訂正が無い場合は３サイクル、誤り訂正がある場合は４サイクルである。リストア動作対象のレジスタがＣＰＵコアのレジスタファイルの場合、リストア命令コードに直接レジスタ番地を指定できる。この場合はレジスタ番地取得の第２サイクルが省略できるため、リストア命令長はさらに１サイクルづつ短縮される。【００３９】
以上の説明では、命令系とデータ系のバスが共通である場合を仮定した。命令系とデータ系のバスを分離することで、命令メモリとデータメモリ／レジスタへの同時アクセスが可能となる。この同時アクセスが可能になることを利用してパイプライン処理を行った例を図１２に示す。この例では、レジスタ０〜４に対してリストア命令を続けて実行した場合において、レジスタ１のリストア動作において誤りビットが検出された場合を例示している。【００４０】
ここで、レジスタ０〜４のレジスタ番地は既にＣＰＵコア内のレジスタファイルに一時的に格納されていると仮定している。例えば、レジスタ０のリストア動作命令を受けて、第２サイクルではレジスタファイル（ＲＦ）にアクセスしてレジスタ０の番地を読み出しているが、同時に命令メモリ（ＩＭ）にアクセスして次の命令をフェッチしてくることが可能である。【００４１】
同様に、第３サイクルでは、レジスタ０（ＲＥＧ０）にアクセスしてリストア動作を実行すると同時に、レジスタファイルＲＦにアクセスしてレジスタ１の番地を読み出し、さらに命令メモリＩＭにアクセスして次の命令をフェッチしている。第４サイクルでは、レジスタ１（ＲＥＧ１）のリストア動作において誤りビットが検出され、第５サイクルでは訂正データをレジスタ１に書き戻している。この時、第５サイクルでは、アドレスバスはレジスタ１の番地を続けて保持されなければならないため、ＣＰＵコアは１サイクルだけストールされている。即ち、本来第５サイクルで処理するはずだったレジスタ２のリストア動作とレジスタ３の番地取得は第６サイクルに先送りされる。このように、パイプライン処理を行うことでレジスタのリストア動作と誤り訂正をさらに短縮することができる。
第２の実施形態
図１３は、本発明の第２の実施形態におけるハードウェア構成の基本構成図を示している。第２の実施形態では、各々のレジスタにパリティビットを付与するのではなく、複数（ｋ個）の不揮発レジスタ間でパリティビットを共有するレジスタ・セットを形成する。従って、図１４に示すように各々の不揮発レジスタにはパリティビット分の不揮発Ｆ／Ｆは含まれず、誤り訂正のためのオーバヘッドを第１の実施形態よりも低減できる。一方で、パリティビットを複数のレジスタで共有するために、誤り訂正可能なビット数は共有するレジスタの数だけ低下する。【００４２】
図１５は、第２の実施形態における誤り訂正符号の構成例を示している。また、図１６は、第２の実施形態におけるＥＣＣモデュールの回路構成例を示している。ここで、パリティビットはｋワードのレジスタで一のパリティセットを形成し、ｍ＝ｋ×ｎビットのレジスタセットのデータに対してパリティビットが割り付けられる。図１５の誤り訂正符号の例は、ｋ＝４ワード、ｎ＝１６ビット、即ち、ｍ＝６４ビットのデータパターンによってｐ＝７ビットのパリティビットが割り付けられる場合を示している。【００４３】
第２の実施形態においても、不揮発レジスタのリストア動作、及び、誤り訂正方法は第１の実施形態で説明した図９〜１２の方法と基本的に同じ手法で実行される。ＥＣＣモデュールにおけるパリティビットの符号化、及び、誤りチェック、訂正は、ｍビットのレジスタセット単位で実行される。パリティビットの符号化は、ＥＣＣ＿ＦＬＧ信号の活性／非活性状態によって対象のデータ元が異なる。【００４４】
以下、これについて図１６を参照しながら説明する。ＥＣＣ＿ＦＬＧが非活性状態の場合は、アクセス対象（書き換え対象）のレジスタを有するレジスタセットからのデータ（Ｄｏｕｔ＿Ｍ）を誤り訂正したデータ（Ｄｏｕｔ＿ＥＣＣ）のから、対象レジスタのデータビットに位置するビットをデータバスからの入力データ（Ｄｉｎ）に置き換えたデータ（このデータはＤｉｎ＿Ｍとして機能モデュールへ出力される）に対してパリティビットの符号化を行う。【００４５】
一方、ＥＣＣ＿ＦＬＧが活性状態の場合は、アクセス対象のレジスタを有するレジスタ・セットのデータ（Ｄｏｕｔ＿Ｍ）を誤り訂正したデータ（Ｄｏｕｔ＿ＥＣＣ）に対してパリティビットの符号化を行う。ここで、信号ＡＳは、レジスタセットのうち、アクセス対象の一つのレジスタの番地から生成される選択信号である。もし、４つのレジスタでレジスタセットを形成する場合は２ビットの信号となり、０〜３の値をとる。このＡＳの値によって、ＥＣＣ＿ＦＬＧが非活性状態の時に、Ｄｏｕｔ＿ＥＣＣからどのビットをＤｉｎに置き換えるかの制御を行う。また、ＥＣＣモデュールで誤り訂正されたデータ（Ｄｏｕｔ＿ＥＣＣ）は、対象レジスタのｎビットのデータ（Ｄｏｕｔ）をＡＳの値によって選択し、データバスへ出力される。【００４６】
以上の動作を、図１５に示す様に符号が割り付けられ、即ち、レジスタセットが４個の１６ビット・レジスタから構成される場合について、例えば、レジスタ０〜３から形成されるレジスタセットのレジスタ１へアクセスする場合の動作を例について詳述する。【００４７】
ＣＰＵがレジスタ１の内容を書き換える命令をフェッチすると、レジスタ１の番地と書き込みデータをバスに出力する。バスに出力された書き込みデータをＤ＿ｒｅｇ１とする。また、レジスタ０〜３が保持しているデータをそれぞれ、Ｑ＿ｒｅｇ０、Ｑｒｅｇ１、Ｑ＿ｒｅｇ２、Ｑ＿ｒｅｇ３とし、６４ビットのレジスタセットの値をＱｒｅｇｓｅｔ＝｛Ｑ＿ｒｅｇ３，Ｑ＿ｒｅｇ２，Ｑ＿ｒｅｇ１，Ｑ＿ｒｅｇ０｝とする。【００４８】
この時、レジスタ１を含むレジスタセットのＱｒｅｇｓｅｔの値は、ＥＣＣモデュールに入力され、デコーダ回路によって誤りチェックと訂正が行われる。（ここで、Ｑｒｅｇｓｅｔの値は先に実行されるリストア動作により既に誤り訂正済みであるため、誤りは検出されない。よって、ＥＣＣ＿ＦＬＧ信号は非活性状態である。）このデコーダ出力Ｑｒｅｇｓｅｔは、レジスタ１に該当するビットのみが書き込みデータＤ＿ｒｅｇ１に置き換えられる。即ち、６４ビットのＤｒｅｇｓｅｔ＝｛Ｑ＿ｒｅｇ３，Ｑ＿ｒｅｇ２，Ｄ＿ｒｅｇ１，Ｑ＿ｒｅｇ０｝の値が対象のレジスタセットへの入力データとして出力される。エンコーダは、このＤｒｅｇｓｅｔの値を元に７ビットのパリティを生成する。この場合において、信号ＡＳの値は“１”となり、Ｑ＿ｒｅｇ１が選択されてデータバスへ出力される。【００４９】
ＣＰＵがレジスタ１のリストア命令をフェッチした場合について詳述する。レジスタ１の番地をバスに出力し、リストアイネーブル信号ＬＢをローレベルに活性化されるのは第１の実施形態と同様である。この時、レジスタ１だけでなく、それが属するレジスタセットの全てのレジスタ、即ち、レジスタ０、レジスタ２、レジスタ３も同時にリストア動作を行う。この時、呼び出された６４ビットのデータＱｒｅｇｓｅｔ＝｛Ｑ＿ｒｅｇ３，Ｑ＿ｒｅｇ２，Ｑ＿ｒｅｇ１，Ｑ＿ｒｅｇ０｝がＥＣＣモデュールに入力され、デコーダによって誤りチェックと誤り訂正が実行される。【００５０】
もし、誤りビットが検出されない場合は、ＥＣＣ＿ＦＬＧ信号は活性化されず、レジスタ１が属するレジスタセットのリストア動作を終了する。ここで、レジスタ０、レジスタ２、レジスタ３のリストア命令はプログラム上、省略可能であることは言及するまでもない。
一方、誤りビットが検出されると、ＥＣＣ＿ＦＬＧ信号が活性化（ハイレベル）される。デコーダで誤り訂正された後の値をＱｒｅｇｓｅｔ＿ｃ＝｛Ｑ＿ｒｅｇ３＿ｃ，Ｑ＿ｒｅｇ２＿ｃ，Q ＿ｒｅｇ１＿ｃ，Ｑ＿ｒｅｇ０＿ｃ｝とする。この時、対象レジスタセットへの入力データは、デコーダ出力が選択される。即ち、レジスタセットへ出力される６４ビットのＤｉｎ＿Ｍの値（Ｄｒｅｇｓｅｔ）は、誤り訂正されたＱｒｅｇｓｅｔ＿ｃと等しい。エンコーダは、Ｑｒｅｇｓｅｔ＿ｃの値を元に７ビットのパリティを生成する。【００５１】
以上説明した実施形態においては、４ワードで構成されるレジスタセット単位でリストア動作する場合であったので、ＥＣＣモデュールが機能モデュールに供給するデータ（Ｄｉｎ＿Ｍ）のビット幅はｍ（＝４×ｎ）ビット必要であった。もし、リストア動作が１ワードのレジスタ単位で実行される場合は、Ｄｉｎ＿Ｍのビット幅はｎビットで良い。この場合は、リストア対象となるレジスタセット全てのレジスタの値を一時保存するレジスタがＥＣＣモデュール内に必要である。【００５２】
一般的なマイクロコンピュータにおいては、ワード単位で演算処理を行うワードモードの他に、バイト単位で演算処理を行うバイトモードを備えていることが多い。図１６に示したＥＣＣモデュールは、このバイトモードにカスタマイズすることも可能である。例えば、レジスタ番地の下位ビットが割り付けられるＡＳ信号に、上位バイトと下位バイトのビットを追加してビット操作の制御を行えばよい。
例えば、先述の例においてＡＳ信号は２ビットから３ビットに増やし、上位２ビットがレジスタ番地、最下位ビットが１の時上位バイト、０の時下位バイトを示すとする。ＡＳ信号の最下位ビットが０であれば、レジスタ１のデータＱ＿ｒｅｇ１（あるいはＱ＿ｒｅｇ１＿ｃ）の下位８ビットをＤ＿ｒｅｇ１の下位８ビットに置き換えれば良い。同様に、ＡＳ信号の最下位ビットが１であれば、レジスタ１のデータＱ＿ｒｅｇ１（あるいはＱ＿ｒｅｇ１＿ｃ）の上位８ビットをＤ＿ｒｅｇ１の上位８ビットに置き換えれば良い。【００５３】
また、以上説明した実施形態において、以下のように変更することが可能である。ＣＭＯＳトランジスタに起因するソフトエラー率が無視できるほど低いのであれば、レジスタの値を誤りチェックするのは不揮発性素子からリストア動作する時のみで良いはずである。先述の実施形態においては、レジスタ値の書き換え命令においても書き換え前のレジスタの値を誤りチェックしていた。この誤りチェックの動作は明らかに冗長である。従って、図７、及び、図１６のＥＣＣモデュールにおいて、リストア命令の処理を実行している時以外は、デコーダ回路を短絡する回路に変更しても構わない。【００５４】
不揮発性論理集積回路の電源を切断する前の一般的な手続きにおいて、不揮発性フリップフロップが保持するデータを、当該フリップフロップに組み込まれた不揮発性素子にセーブする動作を電源切断前に実行することを含む。また、不揮発性論理集積回路の電源を投入した後の一般的な手続きにおいて、不揮発性素子が保持するデータを不揮発性フリップフロップに呼び出すリストア動作を実行することを含む。このリストア動作の方法については実施形態を用いて詳述した。この本発明によるリストア動作、及び、誤りビットの検出と訂正においては、電源投入時のみの実行に留まらない。例えば、電源切断前のセーブ動作実行後に、セーブ動作対象の不揮発性フリップフロップのリストア動作と誤り訂正動作を実行した後に電源を切断しても構わない。これにより、電源投入時のリストア動作における誤りビット検出の確率を下げることができる。【００５５】
本発明による効果を以下に説明する。【００５６】
例えば、１，０２４ワードの不揮発レジスタが集積回路内に有する場合を考える。図３の従来技術によれば、ＥＣＣ回路（エンコーダとデコーダ）が１，０２４台必要であった。一方、全ての不揮発レジスタを一度にリストアさせて誤り訂正することが可能なので、リストア動作と誤り訂正に必要なクロックサイクル数は３〜４サイクルである。しかし、全ての不揮発レジスタを一度にリストアさせるのは現実的ではない。例えば、ピーク電流が著しく増加し、電源電圧の思わぬ電圧降下等によって誤動作の原因になりかねないからである。よって、不揮発レジスタをいくつかのグループに分けて、グループ毎にリストア動作させることが現実的である。【００５７】
例えば、本発明の第２の実施形態によれば、１，０２４ワードの不揮発レジスタの誤り訂正に必要なＥＣＣ回路は１台あれば十分である。４ワードの不揮発レジスタから構成されるレジスタセット単位でリストア動作させることで、リストア動作と誤り訂正に必要なクロックサイクルは２５８サイクルとなる。本発明は、図１７に示すように、ＥＣＣを多重化して複数のＥＣＣモデュールを並列動作させる変更を加えることができる。例えば、ＥＣＣモデュールを１６個配置した場合を考えると、全ての不揮発レジスタをリストア、誤り訂正するのに要するクロック数は１８サイクルに削減可能である。ＥＣＣモデュールは１６個に増加するが、従来例に比べると面積オーバヘッドは１／６４に削減されており、このオーバヘッドは実用上問題のないレベルである。
この出願は、２０１２年３月６日に出願された日本出願特願２０１２−４９４５９を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【符号の説明】
【００５８】
ＥＣＣ＿ＦＬＧ    １ビットのフラグ信号
Ｄｉｎ    データバスからのデータ入力
Ｄｏｕｔ    デコーダが出力する訂正データ
ＲＥＧｏｕｔ    不揮発レジスタのデータ出力
ＬＢ    リストアイネーブル信号
【図１】
2013132806.tif 000003
【図２】
2013132806.tif 000004
【図３】
2013132806.tif 000005
【図４】
2013132806.tif 000006
【図５】
2013132806.tif 000007
【図６】
2013132806.tif 000008
【図７】
2013132806.tif 000009
【図８】
2013132806.tif 000010
【図９】
2013132806.tif 000011
【図１０】
2013132806.tif 000012
【図１１】
2013132806.tif 000013
【図１２】
2013132806.tif 000014
【図１３】
2013132806.tif 000015
【図１４】
2013132806.tif 000016
【図１５】
2013132806.tif 000017
【図１６】
2013132806.tif 000018
【図１７】
2013132806.tif 000019
【国際調査報告】
2013132806.tif 000020
2013132806.tif 000021
2013132806.tif 000022
2013132806.tif 000023
2013132806.tif 000024