(57)【特許請求の範囲】
【請求項１】
記憶装置から読み出した命令を解釈する命令デコーダと、
データを揮発的に保持する保持回路と、データを不揮発的に保持する不揮発素子と、を含むフリップフロップを少なくとも１つ備えた不揮発レジスタであって、各々に、アドレスが与えられた１つ又は複数の不揮発レジスタと、
前記１つ又は複数の不揮発レジスタを制御する不揮発レジスタ制御回路と、
を備え、
前記命令デコーダでデコードされる命令セットとして、
前記不揮発レジスタのアドレスを指定する情報と、前記不揮発レジスタの前記保持回路から前記不揮発素子へのデータの書き込みを指定する情報を含む書き込み命令と、
前記不揮発レジスタのアドレスを指定する情報と、前記不揮発レジスタの前記不揮発素子から前記保持回路へのロードを指定する情報を含むロード命令と、
を少なくとも含み、
前記不揮発レジスタ制御回路は、
前記命令デコーダで解釈した命令が前記書き込み命令の場合、前記書き込み命令で指定されたアドレスの前記不揮発レジスタにおいて、前記保持回路に保持されるデータを転送して前記不揮発素子への書き込みを行い、
前記命令デコーダで解釈した命令が前記ロード命令の場合、前記ロード命令で指定されたアドレスの前記不揮発レジスタにおいて、前記不揮発素子に保持されるデータを転送して前記保持回路に保持させる、
制御を行う、半導体装置。
【請求項２】
前記不揮発レジスタとして、複数の不揮発レジスタを備え、
前記不揮発レジスタの前記保持回路から前記不揮発素子への書き込みを指定する不揮発素子書き込みモードビット情報を、前記命令内の所定のビットフィールドに備えるか、又は、前記不揮発素子書き込みモードビット情報を保持するレジスタを備え、
前記複数の不揮発レジスタのアドレスは複数のグループに分割され、
それぞれのグループは、前記不揮発素子書き込みモードビット情報のうちの一つと１対１に対応付けされているか、又は、前記グループに対応する不揮発素子書き込みモードビット情報が設けられていないかの、いずれかであり、
あるグループに属するアドレスの前記不揮発レジスタの前記保持回路へデータを書き込む際に、
前記不揮発レジスタ制御回路は、
前記グループに対応付けられた前記不揮発素子書き込みモードビット情報の値が活性の場合、前記指定されたアドレスの前記不揮発レジスタの前記保持回路への書き込みデータを、前記指定されたアドレスの前記不揮発レジスタの前記不揮発素子へ書き込み、
前記グループに対応付けられた前記不揮発素子書き込みモードビット情報の値が非活性の場合、前記指定されたアドレスの前記不揮発レジスタの前記保持回路への書き込みデータの、前記指定されたアドレスの前記不揮発レジスタの前記不揮発素子への書き込みは行わず、
前記グループに対応付けられた前記不揮発素子書き込みモードビット情報が存在しない場合、前記指定されたアドレスの前記不揮発レジスタの前記保持回路への書き込みデータの、前記指定されたアドレスの不揮発レジスタの前記不揮発素子への書き込みは行わないように制御する、請求項１記載の半導体装置。
【請求項３】
前記不揮発レジスタの前記保持回路と前記不揮発素子の内容が異なることを示すフラグビットを保持するレジスタを含み、
前記不揮発レジスタのアドレスは複数のグループに分割され、それぞれのグループは、前記フラグビットのうちの一つのビットと１対１に対応付けされているか、又は、前記グループに対応するフラグビットが配設されていないか、のいずれかであり、
１つのグループに属する全ての前記不揮発レジスタの各々において前記保持回路のデータと前記不揮発素子のデータとが一致している場合に、前記１つのグループに対応付けられた前記フラグビットが存在していれば、前記フラグビットを第１の値にセットし、
一致していない可能性がある場合に、前記フラグビットが存在していれば前記フラグビットを第２の値にセットし、
前記不揮発レジスタ制御回路は、
前記命令デコーダで解釈された命令が、前記命令で指定されるアドレスの不揮発レジスタにおける不揮発素子への書き込み命令であるとき、
前記アドレスの前記不揮発レジスタの属するグループに対応した前記フラグビットが存在する場合、前記フラグビットが前記第２の値の場合には、
前記アドレスの前記不揮発レジスタの前記保持回路のデータの前記不揮発レジスタの前記不揮発素子への書き込みを行い、
前記フラグビットが前記第１の値の場合には、前記アドレスの前記不揮発レジスタの前記保持回路のデータの前記不揮発素子への書き込みを行わない、
ように制御する、請求項１記載の半導体装置。
【請求項４】
前記グループに属するアドレスの前記不揮発レジスタの前記保持回路には、電源オンに伴って、あらかじめ設定されている初期値が設定され、
前記グループに対応したフラグビットが存在するとき、前記フラグビットを前記第２の値に設定し、
前記不揮発レジスタ制御回路は、
前記アドレスの不揮発レジスタの保持回路へ揮発データを書き込んだ際に、
前記グループに対応するフラグビットが存在するとき、前記フラグビットを前記第２の値に設定し、
前記グループに属する全ての前記不揮発レジスタの前記保持回路へ、前記不揮発素子のデータをロードした際に、前記グループに対応するフラグビットが存在するとき、前記グループに対応するフラグビットを第１の値に設定し、
前記グループに属する全ての前記不揮発レジスタの前記不揮発素子へ、前記保持回路のデータを書き込んだ際には、前記グループに対応するフラグビットが存在するとき、前記グループに対応するフラグビットを前記第１の値に設定し、
前記命令デコーダで解釈された命令が、前記命令で指定されるアドレスの前記不揮レジスタの前記不揮発素子への書き込み命令の時、前記アドレスの前記不揮発レジスタの属するグループに対応する前記フラグビットが存在するとき、
前記フラグビットが前記第２の値の場合、前記アドレスの前記不揮発レジスタの前記不揮発素子へ、前記不揮発レジスタの前記保持回路のデータを書き込み、
前記フラグビットが前記第１の値の場合、前記アドレスの前記不揮発レジスタの前記不揮発素子へ、前記不揮発レジスタの前記保持回路のデータを書き込まない、
ように制御する請求項３記載の半導体装置。
【請求項５】
前記複数の不揮発レジスタのアドレスは、複数のグループに分割され、
前記命令は、グループに属する一つのアドレスを指定し、
前記不揮発レジスタ制御回路は、
前記命令デコーダで解釈した命令が前記不揮発レジスタの前記不揮発素子への書き込み命令の場合、
前記グループに属する全ての前記不揮発レジスタの各々において、前記保持回路のデータの前記不揮発素子への書き込みを行い、
前記命令デコーダで解釈した命令が、前記不揮発レジスタの前記不揮発素子から前記保持回路へのロード命令の場合、
前記グループに属する全ての前記不揮発レジスタにおいて前記不揮発素子のデータを前記保持回路へロードする制御を行う、請求項１乃至４のいずれか１項に記載の半導体装置。
【請求項６】
第１サイクルで、前記書き込み命令を前記記憶装置から読み出し、
前記第１サイクルの次の第２サイクルで、前記書き込み命令で指定されたアドレスの前記不揮発レジスタの前記不揮発素子への書き込みを行い、前記第２サイクルで、次の命令を、前記記憶装置から読み出す、パイプライン動作を行う、請求項１記載の半導体装置。
【請求項７】
前記フリップフロップは、
前記保持回路として、第１と第２のノードに入力と出力がそれぞれ接続された第１の反転回路と、前記第１と第２のノードに出力と入力が接続された第２の反転回路とを備え、前記第１の反転回路は第１の電源と第３のノード間に配設され、前記第２の反転回路は前記第１の電源と第４のノード間に配設され、
前記フリップフロップは、さらに、入力されたロード信号が活性状態のとき、前記第１と第２のノードを前記第１の電源の電源電圧にイコライズする回路を備え、
前記フリップフロップは、
前記不揮発素子として、
前記第３と第４のノードに第１端がそれぞれ接続され、第５と第６のノードに第２端子がそれぞれ接続され、第３端子同士が接続された第１と第２の磁気抵抗素子を備え、
前記第５及び第６のノードは、書き込み制御信号でオン・オフされる第１のスイッチを介して第２の電源に接続され、
前記保持回路の前記第１と第２のノードの信号を、前記不揮発素子に書き込むとき、前記書き込み制御信号により前記第１のスイッチはオフとされ、前記第１と第２のノードがそれぞれ第１と第２の値のとき、前記第２の磁気抵抗素子の前記第２端を前記第１の電源電位とし、前記第１の磁気抵抗素子の前記第２端を前記第２の電源電位として前記第１と第２の磁気抵抗素子に第１の向きで電流を流し、
前記第１と第２のノードがそれぞれ前記第２と第１の値のとき、前記第１の磁気抵抗素子の前記第２端を前記第１の電源電位とし、前記第２の磁気抵抗素子の前記第２端を前記第２の電源電位とし、前記第１と第２の磁気抵抗素子に第１の向きと逆の第２の向きに電流を流す書き込み回路を備え、
前記第１と第２のノードは、前記保持回路の保持されるデータの前記不揮発素子への書き込み時、及び、前記不揮発素子に保持されるデータの前記保持回路へ転送するロード時に、オフされる第２と第３のスイッチにより入力データから遮断される、請求項１記載の半導体装置。
【請求項８】
前記フリップフロップにおいて、前記保持回路は、マスタラッチとスレーブラッチを備えたマスタ・スレーブ方式のラッチを含み、
前記不揮発素子は、磁気抵抗素子を含み、
前記スレーブ・ラッチに保持されるデータを前記不揮発素子へ書き込み、前記不揮発素子から前記スレーブ・ラッチへデータをロードする機能、
前記マスタ・ラッチに保持されるデータを前記不揮発素子へ書き込み、前記不揮発素子から前記マスタ・ラッチへデータをロードする機能、
前記スレーブ・ラッチに保持されるデータを前記不揮発素子へ書き込み、前記不揮発素子から前記マスタ・ラッチへデータをロードする機能、
前記マスタ・ラッチに保持されるデータを前記不揮発素子へ書き込み、前記不揮発素子から前記スレーブ・ラッチへデータをロードする機能、
のうちのいずれか一の機能を有する、請求項１記載の半導体装置。
【請求項９】
データを揮発的に保持する保持回路と、データを不揮発的に保持する不揮発素子とを含むフリップフロップを少なくとも１つ備えた不揮発レジスタであって、各々に、アドレスが与えられた、１つ又は複数の不揮発レジスタを備えた半導体装置の制御方法であって、
命令セットとして、
前記不揮発レジスタのアドレスを指定する情報と、前記不揮発レジスタの前記保持回路から前記不揮発素子へのデータの書き込みを指定する情報を含む書き込み命令と、
前記不揮発レジスタのアドレスを指定する情報と、前記不揮発レジスタの前記不揮発素子から前記保持回路へのロードを指定する情報を含むロード命令と、
を用意し、
命令デコーダで解釈した命令が、前記書き込み命令の場合、前記書き込み命令で指定されたアドレスの前記不揮発レジスタにおいて、前記保持回路に保持されるデータを転送して前記不揮発素子への書き込みを行い、
前記命令デコーダで解釈した命令が前記ロード命令の場合、前記ロード命令で指定されたアドレスの前記不揮発レジスタにおいて、前記不揮発素子に保持されるデータを転送して前記保持回路に保持させる、半導体装置の制御方法。
【請求項１０】
データを揮発的に保持する保持回路と、データを不揮発的に保持する不揮発素子と、を含むフリップフロップを少なくとも１つ備えた不揮発レジスタであって、各々に、アドレスが与えられた１つ又は複数の不揮発レジスタと、
前記１つ又は複数の不揮発レジスタを制御する不揮発レジスタ制御回路と、
を備え、
命令セットとして、
前記不揮発レジスタのアドレスを指定する情報と、前記不揮発レジスタの前記保持回路から前記不揮発素子へのデータの書き込みを指定する情報を含む書き込み命令と、
前記不揮発レジスタのアドレスを指定する情報と、前記不揮発レジスタの前記不揮発素子から前記保持回路へのロードを指定する情報を含むロード命令と、
を少なくとも含み、
前記書き込み命令の実行にあたり、前記不揮発レジスタ制御回路では、前記書き込み命令で指定されたアドレスの前記不揮発レジスタにおいて、前記保持回路に保持されるデータを転送して前記不揮発素子への書き込みを行うように制御し、
前記ロード命令の実行にあたり、前記不揮発レジスタ制御回路では、前記ロード命令で指定されたアドレスの前記不揮発レジスタにおいて、前記不揮発素子に保持されるデータを転送して前記保持回路に保持させる制御を行う、中央処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
［関連出願についての記載］
本発明は、日本国特許出願：特願２０１１−１９７５１７号（２０１１年９月９日出願）の優先権主張に基づくものであり、同出願の全記載内容は引用をもって本書に組み込み記載されているものとする。
本発明は、半導体装置とその制御方法に関し、特に、例えば不揮発なレジスタ等の記憶手段を備えた半導体装置とその制御方法に関する。
【背景技術】
【０００２】
近年、半導体デバイスの集積度が向上するにつれ、トランジスタのリーク電流による、回路が動作していない時の電力消費の増大等が問題になっている。そこで、半導体集積回路を利用していないときに、当該回路（回路ブロック）の電源供給又はＬＳＩ（Large Scale Integrated Circuit）全体への電源供給を停止してリーク電流を低減する、低消費電力モードを備えた半導体集積回路が開発されている。【０００３】
しかしながら、フリップフロップやラッチ等、あるいは容量にデータを蓄積するダイナミックメモリ等の揮発性メモリでは、電源オフで記憶情報は失われる。すなわち、揮発性メモリを備えた半導体集積回路は電源供給が停止されると、不揮発性メモリを除いて、その内部状態（記憶情報）は消去されてしまう。そのため、半導体集積回路は、電源供給停止に先立って、保持しておきたいデータを外部記憶等（例えば不揮発性のストレージデバイス）に退避する必要がある。【０００４】
特許文献１には、コンピュータ・システム構成要素の状態を保存する方法および装置が開示されている。特許文献１では、バッテリ式コンピュータ・システム内の集積回路が完全に遮断された後のコンピュータ・システムの再開機能を提供するための構成として、内部状態をコンピュータシステム構成要素内の走査ラッチを使用して読み取り、読み取った内部状態は退避憶域に保存され、電源が遮断される。【０００５】
特許文献１のように、内部状態を保持している回路部分から分離して配置されたメモリ素子を利用する場合、データ転送に伴う時間遅延と消費電力が発生する。特に、電源のオン／オフを高い頻度で行った場合には、データ転送に伴う時間遅延や消費電力が増大する可能性がある。【０００６】
特許文献２には、内部情報を保持しつつ、消費電力が低減された待機モードに高速に移行できる半導体装置が開示されている。特許文献２において、電源制御部は、待機状態にする該当回路ブロックの電源オフまたはチップ全体の電源オフに先だって、該当回路ブロックに対して制御信号を活性化し、該当回路ブロックがデータを処理した演算結果をメモリ部に退避させる。電源制御部は、待機状態にしていた該当回路ブロックに再び電源を供給するときには、電源供給開始後制御信号を活性化して前記メモリ部に退避させていたデータを該当回路ブロックにリストアする。該当回路ブロック中のフリップフロップは、データの退避、リストアを行なうときは直列接続されて、通常時とは異なる経路で、データ転送を行なう構成とされる。特許文献２に記載の半導体装置は、不揮発メモリセルを付加することにより、複雑な転送動作が不要となり、高速にデータを退避できる。【０００７】
しかしながら、特許文献２に記載の半導体装置は、モジュール毎に備えられた電源スイッチをオン・オフする度にそのモジュールに含まれる全ての揮発性のラッチの保持データを不揮発性のメモリ部に退避・復帰するため、不必要な書き込みやロードが発生し、消費電力の増大する、という問題がある。特に、不揮発メモリとして、例えば磁性素子を用いた場合、データを書き換えるのに必要な書き込み電流は１ビット当たり典型的には数１００ｕＡから数ｍＡと大きい。このため、電源オフの度に、全ての不揮発メモリを書き換えると、書き換えに要する消費電力が大きくなる。また、障害等による予期せぬ電源停止に際して、上記特許文献１、２のコンピュータシステムでは、内部状態を保存する時間を確保することができない場合が生じる可能性がある。【０００８】
なお、特許文献３には、ラッチ回路と第１、第２の磁気抵抗素子を備え、書き込み時、電流供給部はラッチ回路の状態に応じて第１、第２の磁気抵抗素子の磁化状態を相補に変化させ、読み出し時、第１、第２の磁気抵抗素子（例示：ＭＴＪ（Magnetic Tunnel Junction）素子）の磁化状態に対応するデータをラッチ回路が保持するデータとする不揮発性ラッチ回路を備えた構成が開示されている。特許文献４には、データを記憶する双安定回路と、双安定回路に記憶されたデータを強磁性電極フリー層の磁化方向に応じて不揮発的にストアする強磁性トンネル接合素子（ＭＴＪ１、ＭＴＪ２）を有し、強磁性トンネル接合素子（ＭＴＪ１、ＭＴＪ２）に不揮発的に記憶されたデータを双安定回路にリストア可能な記憶回路が開示されている。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２００２−１８２８０３号公報
【特許文献２】特開２００４−１３３９６９号公報
【特許文献３】国際公開第２００９／０７８２４２号
【特許文献４】国際公開第２００９／０２８２９８号
【発明の概要】
【発明が解決しようとする課題】
【００１０】
なお、上記特許文献１乃至４の全開示内容はその引用をもって本書に繰込み記載する。以下の分析は本発明によって与えられる。関連技術の半導体装置（半導体集積回路）は、メモリ素子とロジック素子が分離して配置されることに起因するデータ転送の遅延や、データを転送する配線や回路の消費電力の増加が問題となっている。【００１１】
そこで、本発明の目的は、データの退避と復帰に要する時間の短縮と消費電力の低減を可能とする半導体装置とその制御方法を提供することにある。【００１２】
また、本発明は、上記目的を達成するとともに、不揮発メモリの書き換え回数、ロード回数を低減可能とし、書き換えやロードを行う不揮発素子の素子数を縮減可能とする半導体装置とその制御方法を提供することにある。【００１３】
さらに本発明の目的は、電源障害等に対する耐性を高めることを可能とする半導体装置とその制御方法を提供することにある。
【課題を解決するための手段】
【００１４】
本発明によれば、記憶装置から読み出した命令を解釈する命令デコーダと、
データを揮発的に保持する保持回路と、データを不揮発的に保持する不揮発素子と、を含むフリップフロップを少なくとも１つ備えた不揮発レジスタであって、各々に、アドレスが与えられた１つ又は複数の不揮発レジスタと、
前記１つ又は複数の不揮発レジスタを制御する不揮発レジスタ制御回路と、
を備え、
命令セットとして、
前記不揮発レジスタのアドレスを指定する情報と、前記不揮発レジスタの前記保持回路から前記不揮発素子へのデータの書き込みを指定する情報を含む書き込み命令と、
前記不揮発レジスタのアドレスを指定する情報と、前記不揮発レジスタの前記不揮発素子から前記保持回路へのロードを指定する情報を含むロード命令と、
を含み、
前記不揮発レジスタ制御回路は、
前記命令デコーダで解釈した命令が前記書き込み命令の場合、前記書き込み命令で指定されたアドレスの前記不揮発レジスタにおいて、前記保持回路に保持されるデータを転送して前記不揮発素子への書き込みを行い、
前記命令デコーダで解釈した命令が前記ロード命令の場合、前記ロード命令で指定されたアドレスの前記不揮発レジスタにおいて、前記不揮発素子に保持されるデータを転送して前記保持回路に保持させる、制御を行う、半導体装置が提供される。【００１５】
本発明によれば、データを揮発的に保持する保持回路と、データを不揮発的に保持する不揮発素子とを含むフリップフロップを少なくとも１つ備えた不揮発レジスタであって、各々に、アドレスが与えられた、１つ又は複数の不揮発レジスタを備えた半導体装置の制御方法であって、
命令セットとして、
前記不揮発レジスタのアドレスを指定する情報と、前記不揮発レジスタの前記保持回路から前記不揮発素子へのデータの書き込みを指定する情報を含む書き込み命令と、
前記不揮発レジスタのアドレスを指定する情報と、前記不揮発レジスタの前記不揮発素子から前記保持回路へのロードを指定する情報を含むロード命令と、
を用意し、
命令デコーダで解釈した命令が、前記書き込み命令の場合、前記書き込み命令で指定されたアドレスの前記不揮発レジスタにおいて、前記保持回路に保持されるデータを転送して前記不揮発素子への書き込みを行い、
前記命令デコーダで解釈した命令が前記ロード命令の場合、前記ロード命令で指定されたアドレスの前記不揮発レジスタにおいて、前記不揮発素子に保持されるデータを転送して前記保持回路に保持させる、半導体装置の制御方法が提供される。
【発明の効果】
【００１６】
本発明によれば、データの退避と復帰に要する時間の短縮と消費電力の低減を図ることができる。また、本発明によれば、不揮発メモリの書き換え回数、ロード回数を低減可能とし、書き換えやロードを行う不揮発素子の素子数を縮減可能としている。さらに、本発明によれば、電源障害等に対する耐性を高める、ことを可能としている。
【図面の簡単な説明】
【００１７】
【図１】本発明の例示的な第１実施形態の構成を例示する図である。
【図２】本発明の例示的な第１実施形態における命令形式の一例を例示する図である。
【図３】本発明の例示的な第１実施形態における不揮発レジスタのフリップフロップの構成を例示する図である。
【図４】本発明の例示的な第１実施形態における不揮発素子の断面構成を模式的に示す図である。
【図５】本発明の例示的な第１実施形態における不揮発レジスタと不揮発レジスタ制御回路の接続構成を例示する図である。
【図６】本発明の例示的な第１実施形態における不揮発素子への書き込み時の動作波形の一例を例示する図である。
【図７】本発明の例示的な第１実施形態における不揮発素子からのロード時の動作波形の一例を例示する図である。
【図８】本発明の例示的な第１実施形態における不揮発素子への書き込み時の動作波形の別の例を例示する図である。
【図９】本発明の例示的な第１実施形態における不揮発素子からロード時の動作波形の別の例を例示する図である。
【図１０】本発明の例示的な第１実施形態における不揮発素子からロード時の動作波形の別の例を例示する図である。
【図１１】本発明の例示的な第２実施形態の構成を例示する図である。
【図１２】本発明の例示的な第２実施形態における命令形式の一例を例示する図である。
【図１３】本発明の例示的な第２実施形態における不揮発素子への書き込み時の動作波形の一例を例示する図である。
【図１４】本発明の例示的な第３実施形態の構成を例示する図である。
【図１５】本発明の例示的な第３実施形態における命令形式の一例の一例を示す図である。
【図１６】本発明の例示的な第４実施形態の構成を例示する図である。
【図１７】本発明の例示的な第４実施形態におけるダーティビットの状態遷移を例示する図である。
【発明を実施するための形態】
【００１８】
本発明の実施形態の半導体装置によれば、ｍ個の不揮発レジスタ（１０３：１０３１〜１０３ｍ）と、命令デコーダ（１０１）と、不揮発レジスタ制御回路（１０２）を備えている。ｍ個の不揮発レジスタ（１０３１〜１０３ｍ）にはＡ１からＡｍまでのアドレスが与えられている。前記不揮発レジスタ（１０３）は、データを揮発的に保持する保持回路と、データを不揮発的に保持する不揮発素子を含むフリップフロップ（１０４：１０４１〜１０４ｎ）を備えている。
【００１９】
命令デコーダ（１０１）は、命令を保持する記憶装置（１００）から読み出した命令を解釈する。
【００２０】
前記命令は、一つの不揮発レジスタ（１０３ｘ）のアドレスＡｘ（１≦ｘ≦ｍ）を指定するビット（オペランド）や書き込み／ロードを指定するビット（オペコード）を含む。
【００２１】
命令デコーダ（１０１）で解釈した命令が、不揮発レジスタの不揮発素子への書き込み命令の場合、不揮発レジスタ制御回路（１０２）は、当該命令で指定されたアドレスＡｘの不揮発レジスタ（１０３ｘ）において、保持回路のデータの不揮発素子への書き込みを行うように制御する。命令デコーダ（１０１）で解釈した命令が、不揮発素子からのロード命令の場合、不揮発レジスタ制御回路（１０２）は、当該命令で指定されたアドレスＡｘの不揮発レジスタ（１０３ｘ）において、不揮発素子のデータの保持回路へのロードを行うように制御する。
【００２２】
本発明のいくつかの実施形態によれば、ｐ個の不揮発素子書き込みモードビット（ＷＭＢ１〜ＷＭＢｐ）を、命令内の所定のビットフィールドに備えている。あるいは、半導体装置は、不揮発素子書き込みモードビット（ＷＭＢ１〜ＷＭＢｐ）を保持するレジスタ（１０６）を備えた構成としてもよい。ｍ個の不揮発レジスタ（１０３１〜１０３ｍ）のアドレスＡ１からＡｍは、ｑ個のグループＧ１からＧｑに分けられる。それぞれのグループＧｙは、不揮発素子書き込みモードビットＷＭＢ１からＷＭＢｐのうちの一つＷＭＢｚと１対１に対応付けられるか、もしくは、対応する不揮発素子書き込みモードビットが存在しない。グループＧｙに属するアドレスＡｘの不揮発レジスタ（１０３ｘ）の保持回路へ書き込みを行う際に、前記対応付けられた不揮発素子書き込みモードビットＷＭＢｚが活性状態（例えば論理値１）の場合、前記保持回路への書き込みデータを、前記指定されたアドレスＡｘの不揮発レジスタの不揮発素子へ書き込むようにしてもよい。前記対応付けられた不揮発素子書き込みモードビットＷＭＢｚが非活性状態（例えば論理値０）の場合、前記保持回路への書き込みデータは、前記指定されたアドレスＡｘの不揮発レジスタの不揮発素子への書き込みは行わない。前記対応付けられた不揮発素子書き込みモードビットＷＭＢｚが存在しない場合には、前記保持回路への書き込みデータの前記指定されたアドレスＡｘの不揮発レジスタの不揮発素子への書き込みは行わない。
【００２３】
本発明の別の実施形態によれば、半導体装置は、さらに、前記不揮発レジスタの前記保持回路と前記不揮発素子の内容が異なることを示すｒ個のフラグビット（ダーティビット）ＤＴＹ１〜ＤＴＹｒを保持するレジスタ（１０７）に備えた構成としてもよい。前記ｍ個の不揮発レジスタのアドレスＡ１からＡｍは、ｓ個のグループＧ１からＧｓに分割されている。それぞれのグループＧｙは、ダーティビットＤＴＹ１〜ＤＴＹｒまでのうちの一つＤＴＹｚと１対１に対応付けられるか、もしくは、対応するダーティビットが存在しない。
不揮発レジスタ制御回路（１０２）は、グループＧｙに属する全ての不揮発レジスタの保持回路のデータと不揮発素子のデータが一致している場合に、グループＧｙに対応付けられた前記ダーティビットＤＴＹｚが存在していれば、前記ダーティビットＤＴＹｚを第１の値（例えば論理０）にセットする。グループＧｙに属する全ての不揮発レジスタの保持回路のデータと不揮発素子のデータが一致していない可能性がある場合に、前記ダーティビットＤＴＹｚが存在していれば、前記ダーティビットＤＴＹｚを第２の値（例えば論理１）にセットする。
前記デコーダが解釈した命令がアドレスＡｘの不揮発レジスタにおける不揮発素子への書き込み命令の時、アドレスＡｘの不揮発レジスタの属するグループＧｙに対応した前記ダーティビットＤＴＹｚが存在する場合、前記ダーティビットＤＴＹｚが第２の値（論理１）の場合は、前記アドレスＡｘの不揮発レジスタの不揮発素子へ、前記保持回路のデータを書き込み、前記ダーティビットＤＴＹｚが第１の値（論理０）の場合は、前記アドレスＡｘの不揮発レジスタの不揮発素子へ、前記保持回路のデータを書き込まない。
【００２４】
本発明の実施形態によれば、前記グループＧｙに属するアドレスＡｘの不揮発レジスタの保持回路は、電源オンに伴って、予め設定されている初期値に設定するようにしてもよい。不揮発レジスタ制御回路（１０２）は、前記グループＧｙに対応したダーティビットＤＴＹｚが存在するとき、ダーティビットＤＴＹｚを第２の値（論理１）に設定する、ようにしてもよい。不揮発レジスタ制御回路（１０２）は、グループＧｙに属するアドレスＡｘの不揮発レジスタの保持回路へ揮発データを書き込んだ際には、前記グループＧｙに対応したダーティビットＤＴＹｚが存在するとき、ダーティビットＤＴＹｚを第２の値（論理１）に設定する、ようにしてもよい。前記グループＧｙに属する全ての不揮発レジスタの保持回路へ、前記不揮発素子のデータをロードした際には、前記グループＧｙに対応したダーティビットＤＴＹｚが存在するとき、ダーティビットＤＴＹｚを第１の値（論理０）に設定する、ようにしてもよい。前記グループＧｙに属する全ての不揮発レジスタの不揮発素子へ、前記保持回路のデータを書き込んだ際には、前記グループＧｙに対応したダーティビットＤＴＹｚが存在するとき、ダーティビットＤＴＹｚを第２の値（論理１）に設定する、ようにしてもよい。
前記デコーダが解釈した命令がアドレスＡｘの不揮レジスタの不揮発素子への書き込み命令の時、アドレスＡｘの不揮発レジスタの属するグループＧｙに対応した前記ダーティビットＤＴＹｚが存在したとき、前記ダーティビットＤＴＹｚが第２の値（論理１）の場合は、前記アドレスＡｘの不揮発レジスタの不揮発素子へ、前記保持回路のデータを書き込み、前記ダーティビットＤＴＹｚが第１の値（論理０）の場合は、前記アドレスＡｘの不揮発レジスタの不揮発素子へ、前記保持回路のデータを書き込まない、ようにしてもよい。
【００２５】
本発明の実施形態によれば、さらに、前記ｍ個の不揮発レジスタのアドレスＡ１からＡｍは、ｔ個のグループＧ１からＧｔに分割され、前記命令は、グループＧｙ（1≦ｙ≦ｔ)に属するひとつのアドレスＡｘを指定し、前記解釈した命令が不揮発素子への書き込み命令の場合、
前記不揮発レジスタ制御回路は前記グループＧｙに属する全ての不揮発レジスタにおいて、前記保持回路のデータを前記不揮発素子へ書き込みを行い、
前記解釈した命令が不揮発素子からのロード命令の場合、
前記不揮発レジスタ制御回路は前記グループＧｙに属する全ての不揮発レジスタにおいて、前記不揮発素子のデータを前記保持回路へロードを行う、ようにしてもよい。
【００２６】
本発明の実施形態によれば、第１サイクルで前記不揮発素子の書き込み命令を前記記憶装置から読み出し、前記第１サイクルの次の第２サイクルで、不揮発素子の書き込みを行うために書き込み電流を流すとともに、前記第２サイクルで、次の命令を前記記憶装置から読み出すパイプライン的な動作をする。
【００２７】
以下、図面を参照して本発明の例示的な実施形態について説明する。
【００２８】
（第１実施形態）
図１は、本発明の例示的な第１実施形態の構成を示す図である。図１を参照すると、第１の実施形態において、半導体集積回路（ＬＳＩ）は、記憶装置１００と、命令デコーダ１０１と、不揮発レジスタ制御回路１０２と、複数（ｍ個）の不揮発レジスタ１０３１〜１０３ｍとを含む。
【００２９】
複数の不揮発レジスタ１０３１〜１０３ｍの各々は、複数（ｎ個）の不揮発フリップフロップ１０４１〜１０４ｎを備えている。不揮発フリップフロップ１０４１〜１０４ｎは同一構成とされ、不揮発フリップフロップ１０４１〜１０４ｎの各単体は「不揮発フリップフロップ１０４」とも記載される。
【００３０】
不揮発フリップフロップ１０４は、データを揮発的に保持する保持回路（電源オフで保持データは消失する）と、データを不揮発的に保持する不揮発素子（電源オフでも保持データは保持される）と、を含む。
【００３１】
不揮発フリップフロップ１０４は、該不揮発フリップフロップ１０４内の保持回路と不揮発素子との間で、データを転送する機能を備える。
【００３２】
不揮発フリップフロップ１０４において、保持回路のデータを不揮発素子へ転送することを、不揮発素子の「書き込み」という。
【００３３】
不揮発フリップフロップ１０４において、不揮発素子のデータを保持回路へ転送することを不揮発素子の「ロード」という。
【００３４】
図１において、各不揮発レジスタ１０３１〜１０３ｍは、ｎ個の不揮発フリップフロップ１０４１〜１０４ｎから構成されている。ただし、ｎの値は、各不揮発レジスタ１０３においてそれぞれ互いに異なっていてもよい。ただし、多くの場合、ｎの値は、各不揮発レジスタ１０３１〜１０３ｍで同じである。
【００３５】
ｍ個の不揮発レジスタ１０３１〜１０３ｍには、アドレスＡ１からＡｍがそれぞれ与えられている。特に制限されるものでないが、図１では、例えば、アドレスＡ１、Ａ２、Ａ３の不揮発レジスタ１０３１〜１０３３として、
プログラムカウンタ（ＰＣ： Program Counter）、
スタックポイント（ＳＰ: Stack Pointer）、
ステータスレジスタ（ＳＲ: Status Register）
が示されている。図示した以外に、不揮発レジスタ１０３は、汎用レジスタや、周辺モジュール内のレジスタも含む。これらの不揮発レジスタ１０３１〜１０３ｍの値は、例えば半導体集積回路の内部状態を表す。
【００３６】
つまり、不揮発レジスタ１０３の保持回路の値を、不揮発素子に退避させ、電源を落とし、しばらく後に電源を投入し、それらのデータを元に戻すことで、半導体集積回路の動作を中断前の状態に戻すことができる。
【００３７】
なお、関連技術の揮発性のフリップフロップのみを使用した半導体集積回路では、
・書き込みや読み出しを指定して行えるようにアドレスが割り振られているフリップフロップと、
・アドレスが割り振られていないフリップフロップと、
が存在する。
【００３８】
本実施形態において、アドレスが割り振られていないフリップフロップに対しても、電源投入後にデータを復帰したい場合、アドレスを割り振るようにしてもよい。
【００３９】
これらのフリップフロップは、例えばソフトウェアからアドレスを指定し、不揮発素子への書き込み、または、ロードを行える機能を備えているが、ソフトウェアから、直接、保持回路の書き込み、または、読み出しを行える機能は、必ずしも必要ない。
【００４０】
半導体集積回路における命令セット（半導体集積回路で実行できる命令の集合）は、不揮発レジスタを制御する不揮発レジスタ制御命令を含む。命令の読み出しから不揮発レジスタの制御までの過程を簡単に説明する。なお、詳細の動作説明は後述する。はじめに、中央処理装置は、プログラムカウンタＰＣ（不揮発レジスタ１０３１）で指定されるアドレスを出力し、そのアドレスに記憶されている命令を記憶装置１００から読み出す。記憶装置１００は、半導体集積回路内に設けられるが、半導体集積回路外部に設ける構成としてもよい。例えばＤＲＡＭ（ダイナミックランダムアクセスメモリ）等からなるメモリモジュール等（例えばＤＩＭＭ（Ｄｕａｌ  Ｉｎｌｉｎｅ  Ｍｅｍｏｒｙ  Ｍｏｄｕｌｅ）モジュール）であってもよく、あるいは、ＳＲＡＭ（スタティックランダムアクセスメモリ）等からなるキャッシュメモリ、あるいは半導体集積回路内に設けられ、先読みされた命令を格納する命令キャッシュ等であってもよい。あるいは、半導体集積回路内又は外付けで設けられるＲＯＭ（リードオンリメモリ）等であってもよく、さらに、命令を格納しアドレスを与えて読み出し可能なものであれば、他の任意のストレージデバイスであってもよい。
【００４１】
命令デコーダ１０１は、記憶装置１００から読み出した命令を解読する。
【００４２】
命令デコーダ１０１で解読した命令が、不揮発素子の書き込み命令の場合、不揮発レジスタ制御回路１０２は、当該命令で指定された不揮発レジスタ１０３の不揮発フリップフロップ１０４内の保持回路のデータを不揮発素子に書き込む。
【００４３】
命令デコーダ１０１で解読した命令が、不揮発素子のロード命令の場合、不揮発レジスタ制御回路１０２は、該命令で指定された不揮発レジスタ１０３の不揮発フリップフロップ１０４内の不揮発素子のデータを保持回路にロードする。
【００４４】
不揮発レジスタの制御命令は、例えば、シングルオペランド（単一のオペランド）の命令形式を利用してもよい。図２に、シングルオペランドの命令形式の一例を示す。
【００４５】
（ａ＋ｂ＋ｃ）ビットからなる命令のうち、ＬＳＢ（Ｌｅａｓｔ  Ｓｉｇｎｉｆｉｃａｎｔ  Ｂｉｔ）からａビットは、レジスタ指定に利用される。
【００４６】
（ａ＋１）ビットからａ＋ｂビットまでのｂビットは、アドレッシングモードの指定に利用される。
【００４７】
ａ＋ｂ＋１ビットからａ＋ｂ＋ｃビットまでのｃビットは、命令コードの指定に利用される。
【００４８】
本実施形態によれば、命令コードに、不揮発レジスタの制御命令を追加することで、既存のアーキテクチャを大きく変更することなく、不揮発レジスタ１０３を制御することができる。
【００４９】
例えば、レジスタ番号４の不揮発レジスタの書き込みを行う場合には、
レジスタの指定ビットを、レジスタ番号４を指すように設定し、
アドレッシングモードは、通常用意されているレジスタを操作するモードに設定し、
命令コードは、新規に追加した不揮発レジスタの書き込み命令
に設定すればよい。なお、アドレッシングモードは、他のアドレッシングモードを利用することもできる。
【００５０】
また、本実施形態の変形例として、アドレスＡ１からＡｍまでのｍ個の不揮発レジスタ１０３１〜１０３ｍを複数のグループに分ける構成としてもよい。例えば、命令である不揮発アドレスを指定すると、そのアドレスの不揮発レジスタが属するグループの複数の不揮発レジスタを同時に制御できるようにしてもよい。
【００５１】
例えば、同一グループに属する連続するレジスタ番号４と５の２つの不揮発レジスタの書き込みを行う場合には、命令において、図２のレジスタを指定するビットフィールドは、レジスタ番号４を指すように設定し、アドレッシングモードは、通常用意されているレジスタを操作するモードに設定し、命令コードは、新規に追加した不揮発レジスタの書き込み命令に設定すればよい。
【００５２】
さらに、不揮発レジスタ制御回路１０２は、アドレスの例えば最下位ビット（ＬＳＢ：Least Significant Bit）は無視して、アドレスのデコードをするように構成すればよい。この場合、レジスタ番号４の指定ビットである“100”とレジスタ番号５の指定ビットである“101”は同時に選択される。このように、複数の不揮発レジスタを同時に操作することは、不揮発レジスタ制御回路１０２において、不揮発レジスタを制御する時間の節約（縮減）につながる。
【００５３】
上記した特許文献２においては、モジュール内の全てのレジスタを書き込み、ロードするため、書き込む必要のない不揮発素子への書き込み、ロードする必要のない不揮発素子からのロード動作が発生し、無駄な電力の消費されることになる。
【００５４】
これに対して、本実施形態によれば、指定したレジスタの属するグループに対して書き込み、ロードすることにより、データ退避・復帰に要する時間的なオーバーヘッドを抑えつつ、データ退避・復帰に要する無駄な電力を削減できる。
【００５５】
図３は、本発明の第１実施形態における揮発フリップフロップ１０４の構成の一例を示す図である。
【００５６】
図３を参照すると、不揮発フリップフロップ１０４は、不揮発素子（Ｒ１、Ｒ２）と、マスタラッチ（Ｔ１−Ｔ４、ＩＮＶ１、２、Ｔ５−Ｔ８）と、スレーブラッチ（Ｔ１１、Ｔ１２、Ｔ１３、Ｔ１４）とを含む。
【００５７】
本実施形態では、スレーブラッチと不揮発素子の間でデータをやり取りする。具体的には、不揮発フリップフロップ１０４は、スレーブラッチのデータを不揮発素子へ書き込む機能と、不揮発素子からスレーブラッチへデータをロードする機能を備えている。
【００５８】
また、不揮発フリップフロップ１０４は、以下のような他の形態として構成するようにしてもよい。他の形態の不揮発フリップフロップでは、マスタラッチの保持データを不揮発素子へ書き込む機能と、不揮発素子からマスタラッチへデータをロードする機能を備えていてもよい。あるいは、他の形態の不揮発フリップフロップでは、マスタラッチの保持データを不揮発素子へ書き込む機能と、不揮発素子からスレーブラッチへデータをロードする機能を備えていてもよい。あるいは、他の形態の不揮発フリップフロップでは、スレーブラッチの保持データを不揮発素子へ書き込む機能と、不揮発素子からマスタラッチへデータをロードする機能を備えていてもよい。
【００５９】
図３に示すように、マスタラッチは、第１のクロックドインバータ（Ｔ１−Ｔ４）、第１のインバータＩＮＶ１、第２のクロックドインバータ（Ｔ５−Ｔ８）、第２のインバータＩＮＶ２を備えている。第１のクロックドインバータは、
・電源（ＶＤＤ）にソースが接続され、データ端子Ｄにゲートが接続されたＰＭＯＳトランジスタＴ１と、
・ＰＭＯＳトランジスタＴ１のドレインにソースが接続され、Ｐ２（クロック信号ＣＬＫを反転させるインバータＩＮＶ５、ＩＮＶ６の出力でありクロック信号ＣＬＫと同相）にゲートが接続されたＰＭＯＳトランジスタＴ２と、
・ＰＭＯＳトランジスタＴ２のドレインにドレインが接続され、Ｐ１（クロック信号ＣＬＫを反転させるインバータＩＮＶ５の出力）にゲートが接続されたＮＭＯＳトランジスタＴ３と、
・ＮＭＯＳトランジスタＴ３のソースにドレインが接続され、グランド（ＧＮＤ）にソースが接続され、データ入力端子Ｄにゲートが接続されたＮＭＯＳトランジスタＴ４からなる。
第１のインバータＩＮＶ１は、第１のクロックドインバータの出力（トランジスタＴ２、Ｔ３のドレインの接続点）に入力が接続されている。
第２のクロックドインバータは、
・電源にソースが接続され、第１のインバータＩＮＶ１の出力にゲートが接続されたＰＭＯＳトランジスタＴ５と、
・ＰＭＯＳトランジスタＴ５のドレインにソースが接続され、Ｐ１にゲートが接続されたＰＭＯＳトランジスタＴ６と、
・ＰＭＯＳトランジスタＴ６のドレインにドレインが接続され、Ｐ２にゲートが接続されたＮＭＯＳトランジスタＴ７と、
・ＮＭＯＳトランジスタＴ７のソースにドレインが接続され、グランド（ＧＮＤ）にソースが接続され、第１のインバータＩＮＶ１の出力にゲートが接続されたＮＭＯＳトランジスタＴ８からなる。
第２のインバータＩＮＶ２は、第１のインバータＩＮＶ１の出力に入力が接続されている。第１のインバータＩＮＶ１と、第２のクロックドインバータ（Ｔ５−Ｔ８）は、保持回路（双安定回路）を構成する。すなわち、クロック信号ＣＬＫがＨｉｇｈで、Ｐ１がＬｏｗ、Ｐ２がＨｉｇｈのとき、第２のクロックドインバータ（トランジスタＴ５−Ｔ８）は活性化して（オンして）インバータとして作動し、第１のインバータＩＮＶ１とともにフリップフロップを構成する。
【００６０】
クロック信号ＣＬＫがＬｏｗで、Ｐ１がＨｉｇｈ、Ｐ２がＬｏｗのとき、データ入力端子Ｄの信号は、第１のクロックドインバータ（Ｔ１−Ｔ４）で反転され、第１のインバータＩＮＶ１に入力されて反転される。このとき、第２のクロックドインバータ（Ｔ５−Ｔ８）はオフ状態とされる。
【００６１】
Ｐ１がＬｏｗ、Ｐ２がＨｉｇｈのとき、第１のクロックドインバータ（Ｔ１−Ｔ４）はオフとされ（データ入力端子Ｄの信号は第１のインバータＩＮＶ１へ伝達されない）、第２のクロックドインバータ（Ｔ５−Ｔ８）がオンとされ、第１のインバータＩＮＶ１とオン状態の第２のクロックドインバータ（Ｔ５−Ｔ８）とがフリップフロップ（双安定回路）を構成する。マスタラッチのデータはノードＮ１で保持される。また、第２のインバータインバータＩＮＶ２で反転されたデータは、ノードＮ２で保持される。
【００６２】
ノードＮ１、Ｎ２に保持されるデータは、Ｐ２がＨｉｇｈのとき（クロック信号ＣＬＫがＨｉｇｈのとき）、オン状態とされるトランジスタ（パストランジスタ）Ｔ９とＴ１０を介してスレーブラッチの保持ノードＮ３とＮ４にそれぞれ入力される。Ｐ２がＬｏｗのとき（クロック信号ＣＬＫがＬｏｗのとき）、トランジスタＴ９とＴ１０はオフし、ノードＮ１とＮ２とスレーブラッチのノードＮ３とＮ４とは、それぞれ電気的に非接続とされる。
【００６３】
スレーブラッチは、
・電源（ＶＤＤ）にソースが接続されたＰＭＯＳトランジスタＴ１１、Ｔ１３と、
・ＰＭＯＳトランジスタＴ１１、Ｔ１３のドレインにドレインがそれぞれ接続されたＮＭＯＳトランジスタＴ１２、Ｔ１４と、
を備えている。トランジスタＴ１１、Ｔ１２（第１のＣＭＯＳインバータ）の共通接続されたゲート（第１のＣＭＯＳインバータの入力ノード）はノードＮ４に接続されている。
トランジスタＴ１１、Ｔ１２の共通接続されたドレイン（第１のＣＭＯＳインバータの出力ノード）はノードＮ３に接続されている。
トランジスタＴ１３、Ｔ１４（第２のＣＭＯＳインバータ）の共通接続されたゲート（第２のＣＭＯＳインバータの入力ノード）はノードＮ３に接続されている。
トランジスタＴ１３、Ｔ１４の共通接続されたドレイン（第２のＣＭＯＳインバータの出力ノード）はノードＮ４に接続されている。トランジスタＴ１１、Ｔ１３、Ｔ１２、Ｔ１４は保持回路を構成する。
【００６４】
スレーブラッチは、さらに、
・第１端子がトランジスタＴ１２のソースに接続され、第２端子が、トランジスタＴ１５、Ｔ１６の接続ノードＮ５に接続される不揮発素子Ｒ１と、
・第１端子がトランジスタＴ１４のソースに接続され、第２端子がトランジスタＴ１５、Ｔ１６の接続ノードＮ５とトランジスタＴ１７、Ｔ１８の接続ノードＮ６に接続された不揮発素子Ｒ２を備えている。なお、不揮発素子Ｒ１、Ｒ２を強磁性トンネル接合素子（ＭＴＪ）で構成する場合、第３端子同士は接続される。
【００６５】
スレーブラッチは、さらに、
・電源にドレインが接続されたＮＭＯＳトランジスタＴ１５、Ｔ１７と、
・ＮＭＯＳトランジスタＴ１５、Ｔ１７のソースにドレインそれぞれ接続され、グランド（ＧＮＤ）にソースが接続されたＮＭＯＳトランジスタＴ１６、Ｔ１８と、を備えている。
トランジスタＴ１５とＴ１６の共通接続されたドレイン（Ｎ５）と、トランジスタＴ１７とＴ１８の共通接続されたドレイン（Ｎ６）は、互いに接続されている（後述される図４に示すように、不揮発素子のハード層を接続するメタル層を介して接続される）。
スレーブラッチは、さらに、
・ノードＮ５とＮ６の接続ノード（後述される図４のメタル層１（２０７））にドレインが接続され、ソースがＧＮＤに接続され、制御信号ＷＢ（書き込み時にＬｏｗ）をゲートに入力するＮＭＯトランジスタＴ１９をさらに備えている。トランジスタＴ１９は、ＷＢがＨｉｇｈのとき、すなわち、書き込み時以外は、オンし、トランジスタＴ１２とＴ１４のソースを不揮発素子Ｒ１、Ｒ２を介してＧＮＤに接続する。トランジスタＴ１５−１８は、書き込み用トランジスタを構成している。
スレーブラッチは、さらに、
・トランジスタＴ１６、Ｔ１７のゲートに出力が接続された、書き込み用の２入力ＮＯＲ回路ＮＯＲ１と、
・トランジスタＴ１８、Ｔ１５のゲートに出力が接続された、書き込み用の２入力ＮＯＲ回路ＮＯＲ２と、を備えている。
２入力ＮＯＲ回路ＮＯＲ１の入力は、ノードＮ３とＷＢに接続されている。
２入力ＮＯＲ回路ＮＯＲ２の入力は、ノードＮ４とＷＢに接続されている。
ＷＢがＬｏｗのとき、２入力ＮＯＲ回路ＮＯＲ１、ＮＯＲ２は、ノードＮ３、Ｎ４を反転した信号を、それぞれ出力する。
【００６６】
スレーブラッチは、さらに、
・電源とノードＮ３間に接続されたＰＭＯＳトランジスタＴ２１と、
・電源とノードＮ４間に接続されたＰＭＯＳトランジスタＴ２２と、
・ノードＮ３、Ｎ４間に接続されたＰＭＯＳトランジスタＴ２０と、を備えている。
トランジスタＴ２０〜Ｔ２２のゲートは、制御信号ＬＢに共通接続されている。
トランジスタＴ２０〜Ｔ２２は、プリチャージ・イコライズ回路を構成しており、ＬＢがＬｏｗのとき、ノードＮ３、Ｎ４を電源電位にプリチャージ・イコライズする。
スレーブラッチは、さらに、
・ノードＮ３、Ｎ４に入力端子が接続された出力用のインバータ（反転バッファ）ＩＮＶ３、ＩＮＶ４を備えている。
【００６７】
スレーブラッチにおいて、トランジスタＴ１１−Ｔ１４からなる保持回路にラッチされた相補のデータ（ノードＮ３、Ｎ４のデータ）は、２入力ＮＯＲ回路ＮＯＲ１、ＮＯＲ２の第１の入力にそれぞれ入力される。書き込み制御信号ＷＢは、トランジスタＴ１９のゲートとＮＯＲ回路ＮＯＲ１、ＮＯＲ２の第２の入力に入力される。ＮＯＲ回路ＮＯＲ１、ＮＯＲ２の出力は、トランジスタＴ１７、Ｔ１５のゲートにそれぞれ接続されている。
【００６８】
ロード信号ＬＢは、トランジスタＴ２０−２２のゲートに入力される。ロード信号ＬＢがＬｏｗのとき、ノードＮ３、Ｎ４は電源電位にプリチャージ・イコライズされる。
【００６９】
出力信号Ｑは、ノードＮ３に入力が接続されたインバータＩＮＶ４から出力される。出力信号ＱＢは、ノードＮ４に入力が接続されたインバータＩＮＶ３から出力される。
【００７０】
クロック信号ＣＬＫは、縦続接続されたインバータＩＮＶ５とインバータＩＮＶ６に入力され、インバータＩＮＶ５とインバータＩＮＶ６でそれぞれ生成された相補のクロック信号Ｐ１とＰ２は各クロックドインバータに供給される。また、Ｐ２はトランジスタＴ９、Ｔ１０のゲートに供給される。
【００７１】
図３に示した不揮発フリップフロップは、既存のフリップフロップの機能に加え、下記の機能を備えている。
【００７２】
・スレーブラッチの保持回路に電気的に記憶しているデータを不揮発素子へ書き込むことができる。
【００７３】
・不揮発素子に蓄えられているデータを読み出し、読み出したデータをスレーブラッチの保持回路で保持することができる。
【００７４】
不揮発素子は、例えば、磁気抵抗効果を利用した強磁性トンネル接合素子（ＭＴＪ（Ｍａｇｎｅｔｉｃ  Ｔｕｎｎｅｌ  Ｊｕｎｃｔｉｏｎ）素子）が用いられる。
【００７５】
ここで、ＭＴＪ素子は、磁化方向が変化する強磁性層（フリー層）と、磁化方向が固定された強磁性層（固定層）と、フリー層と固定層の間に形成される絶縁層を含む構成を備えている。このようなＭＴＪ素子に、膜面垂直方向に電流を流した際の抵抗値は、フリー層と固定層の磁化の方向によって変化する。
【００７６】
フリー層の磁化と固定層の磁化が平行の場合、抵抗値は低く、
フリー層の磁化と固定層の磁化が反平行の場合、抵抗値は高くなる。
【００７７】
この性質を利用して、ＭＴＪ素子では、この抵抗値、もしくは、フリー層の磁化の方向に、論理データを対応付ける。例えば、低抵抗状態を論理値‘０’、高抵抗状態を論理値‘１’とする。
【００７８】
ＭＴＪ素子の書き込みは、
電流磁界を用いてフリー層の磁化方向を制御する磁場書き込み方式と、
スピントルク効果を利用してフリー層の磁化方向を制御するスピントルク書き込み方式と、が知られている。
【００７９】
図４は、不揮発素子として、スピントルク効果を利用して書き込みを行う磁壁移動素子の素子近傍の断面を模式的に示す図である。なお、不揮発素子に接続されるトランジスタ（図３のトランジスタ、Ｔ１２、Ｔ１４、Ｔ１５、Ｔ１６、Ｔ１７、Ｔ１８）はいずれも回路図記号で示されている。この不揮発素子は、基板に近い順から、
メタル層１（２０６、２０７、２１６））、
ハード層１（２０４、２１４）、ハード層２（２０５、２１５）、
フリー層（２０３、２１３）、
絶縁層（２０２、２１２）、
リファレンス層（２０１、２１１）
を含む。
【００８０】
不揮発素子Ｒ１において、リファレンス層２０１は、不揮発レジスタのトランジスタＴ１２に、ハード層１（２０４）はトランジスタＴ１５とＴ１６の接続点に接続される。
【００８１】
ハード層２（２０５）は、メタル層１（２０７）、ハード層２（２１５）、不揮発素子Ｒ２のハード層１（２１４）を介して、トランジスタＴ１７、Ｔ１８の接続点に接続される。
【００８２】
一例として、フリー層およびハード層は垂直磁気異方性を有する磁性薄膜を利用している。ハード層１（２０４）とハード層２（２０５）の磁化方向は逆向きに固定されている。フリー層（２０３）の磁化は、スピン偏極電流の向きによって、Ｚ方向に沿って、上下にコントロールできる。例えば、ハード層１（２０４）からハード層２（２０５）に向かって電流を流した場合、偏極した電子は逆向きに流れ、ハード層２（２０５）と同じ向きにフリー層（２０３）の磁化は揃う。逆に、ハード層２（２０５）からハード層１（２０４）に向かって電流を流した場合、ハード層１（２０４）と同じ向きにフリー層（２０３）の磁化は揃う。不揮発素子Ｒ２についても同様である。
【００８３】
図３を参照して、不揮発レジスタの書き込み動作を説明する。書き込み動作時、書き込み制御信号ＷＢはＬｏｗ電位とされる。不揮発素子Ｒ１、Ｒ２への書き込みデータはスレーブラッチのデータＱに対応する。インバータＩＮＶ４の出力データＱが‘０’（Ｌｏｗ電位とする）の場合、ノードＮ４は電源電位（Ｈｉｇｈ電位）、ノードＮ３はＬｏｗ電位となり、ＮＯＲ２の出力はＬｏｗ、ＮＯＲ１の出力はＨｉｇｈとなり、トランジスタＴ１６とＴ１７がオン、トランジスタＴ１５とＴ１８がオフになる。このとき、ノードＮ６（Ｈｉｇｈ電位）からノードＮ５（Ｌｏｗ電位）へ書き込み電流が流れる。これにより、不揮発素子の抵抗Ｒ１は低抵抗状態、抵抗Ｒ２は高抵抗状態になり、データＱに対応したデータ‘０’を不揮発素子は記憶する。
【００８４】
一方、データＱが‘１’（Ｈｉｇｈ電位）の場合、ノードＮ３は電源電位（Ｈｉｇｈ電位）、ノードＮ４はＬｏｗ電位となり、ＮＯＲ１の出力はＬｏｗ、ＮＯＲ２の出力はＨｉｇｈとなり、トランジスタＴ１６とＴ１７がオフ、トランジスタＴ１５とＴ１８がオンになる。このとき、ノードＮ５（Ｈｉｇｈ電位）からノードＮ６（Ｌｏｗ電位）へ書き込み電流が流れる。これにより、不揮発素子の抵抗Ｒ１は高抵抗状態、抵抗Ｒ２は低抵抗状態になり、データＱと対応したデータ‘１’を不揮発素子は記憶する。
【００８５】
図３を参照して、不揮発レジスタのロード動作を説明する。ロード動作時、ロード信号ＬＢはＬｏｗ電位とされる。また、クロック信号ＣＬＫはＬｏｗ電位であり、Ｐ１はＨｉｇｈ電位、Ｐ２はＬｏｗ電位である。トランジスタＴ２０、Ｔ２１、Ｔ２２はオンとなり、ノードＮ３、Ｎ４はＨｉｇｈ電位（電源電位）にプリチャージ・イコライズされる。
【００８６】
ノードＮ４のＨｉｇｈ電位をゲートに受けるトランジスタＴ１２はオン状態とされ、電源、ノードＮ３からトランジスタＴ１２を介して不揮発素子Ｒ１に読み出し電流が流れる。また、ノードＮ３のＨｉｇｈ電位をゲートに受けるトランジスタＴ１４はオン状態とされ、電源、ノードＮ４からトランジスタＴ１４を介して不揮発素子Ｒ２に読み出し電流が流れる。なお、ロード時、ＷＢはＨｉｇｈとされ、トランジスタＴ１９がオンとされ、不揮発素子Ｒ１、Ｒ２に流れる読み出し電流はＧＮＤに流れ込む。これらの読み出し電流の差に応じて、ノードＮ３とＮ４には微小な電位差が生じる。
【００８７】
次に、ロード信号ＬＢがＬｏｗからＨｉｇｈに変化すると、トランジスタ２０−２２がオフし、トランジスタＴ１１−１４の保持回路（差動ラッチ）により、ノードＮ３、Ｎ４の電位差が増幅される。不揮発素子に記憶しているデータが‘０’の場合、不揮発素子の抵抗Ｒ１は低抵抗状態、Ｒ２は高抵抗状態であるため、ノードＮ３はＬｏｗレベル、ノードＮ４はＨｉｇｈレベルになる。ノードＮ４の電位はインバータＩＮＶ４で反転され，出力端子ＱはＬｏｗレベルとなる。すなわち、出力端子Ｑのデータは、不揮発素子のデータに対応した‘０’となる。
【００８８】
一方、不揮発素子に記憶しているデータが‘１’の場合、不揮発素子の抵抗Ｒ１は高抵抗状態、Ｒ２は低抵抗状態であるため、ノードＮ３はＨｉｇｈレベル、ノードＮ４はＬｏｗレベルになり、出力端子ＱはＨｉｇｈレベルとなる。すなわち、出力端子Ｑのデータは、不揮発素子のデータに対応した‘１’となる。
【００８９】
図５は、本発明の例示的な第１実施形態に係る半導体集積回路における不揮発レジスタと不揮発レジスタ制御回路（図１の１０２）の構成を示す図である。ｎ個のフリップフロップ１０４（不揮発レジスタ１０３）毎にアドレスＡ１を与えている。ｎは、例えば、１６ビットのワード単位、８ビットのバイト単位等である。
【００９０】
不揮発レジスタのアドレスは、アドレスＡ１からアドレスＡｍのｍ個である。典型的には、あるアドレスを指定すると、そのアドレスのｎ個のフリップフロップ１０４（不揮発レジスタ）を同時に制御することができる。また、あるアドレスを指定すると、あるアドレス領域の複数の不揮発レジスタを同時に制御できるようにしてもよい。
【００９１】
不揮発レジスタ制御回路１０２は、
システムのクロック信号：ＣＬＫ＿ＳＹＳと、
レジスタのアドレス信号：Ａ＿ＲＥＧと、
レジスタの揮発性データの書き込みイネーブル信号：ＷＥ＿ＲＥＧと、
レジスタへの入力データ：Ｄ＿ＲＥＧと、
不揮発素子への書き込みイネーブル信号：ＮＶＷＥ＿ＲＥＧと、
不揮発素子からのロードイネーブル信号：ＮＶＬＥ＿ＲＥＧと
が入力される。
【００９２】
不揮発レジスタ制御回路１０２は、受け取った制御信号をもとに、各不揮発レジスタ１０３へ不揮発レジスタ制御信号を出力する。
【００９３】
アドレスＡ１の不揮発レジスタへの不揮発レジスタ制御信号は、
クロック信号：ＣＬＫ＿ＲＥＧ（Ａ１）、
入力データ：Ｄ＿ＲＥＧ（Ａ１）、
ロード信号（Ｌｏｗアクティブ）：ＬＢ＿ＲＥＧ（Ａ１）、
書き込み制御信号（Ｌｏｗアクティブ）：ＷＢ＿ＲＥＧ（Ａ１）
である。
【００９４】
アドレスＡ１の不揮発レジスタ１０３は、出力信号Ｑ＿ＲＥＧ（Ａ１）を出力する。アドレスＡ２からＡｍまでの不揮発レジスタ１０３２〜１０３ｍも同様である。
【００９５】
図６は、図５に示した本発明の例示的な第１実施形態に係る半導体集積回路において、命令コードが不揮発素子の書き込み命令の時の動作波形の一例を示す図である。図６には、
システムのクロック信号：ＣＬＫ＿ＳＹＳ、
アドレス：Ａ＿ＲＡＭ、
アドレスＡ＿ＲＡＭのデータ：ＲＤ＿ＲＡＭ、
レジスタのアドレス：Ａ＿ＲＥＧ、
不揮発素子への書き込みイネーブル信号：ＮＶＷＥ＿ＲＥＧ、
アドレスＡ１のクロック：ＣＬＫ＿ＲＥＧ（Ａ１）、
アドレスＡ１への書き込み制御信号ＷＢ：ＷＢ＿ＲＥＧ（Ａ１）、
アドレスＡ１のデータ：Ｑ＿ＲＥＧ（Ａ１）、
アドレスＡ１の不揮発素子の抵抗値：Ｒ＿ＲＥＧ（Ａ１）、
アドレスＡ２のクロック：ＣＬＫ＿ＲＥＧ（Ａ２）、
アドレスＡ２への書き込み制御信号ＷＢ：ＷＢ＿ＲＥＧ（Ａ２）、
アドレスＡ２のデータ：Ｑ＿ＲＥＧ（Ａ２）、
アドレスＡ２の不揮発素子の抵抗値：Ｒ＿ＲＥＧ（Ａ２）
のタイミング波形が示されている。
【００９６】
図５、図６を参照して、不揮発素子の書き込み時の動作を説明する。時刻Ｔ１の直後に、中央処理装置は、記憶装置（図１の１００）へ、アドレスＡ＿ＲＡＭとして、プログラムカウンタの値ＰＣ１を出力する。
【００９７】
時刻Ｔ２に、中央処理装置は、記憶装置（図１の１００）のアドレスＡ＿ＲＡＭのデータＲＤ＿ＲＡＭとして、命令ＯＰ１を受け取る。ここで、命令ＯＰ１は、図２に示した命令形式であり、命令コードは、不揮発素子の書き込み命令のコードである。
【００９８】
また、命令ＯＰ１のアドレッシングモードは、シングルオペランド形式であり、アドレスＡ１のレジスタを指定するものとする。
【００９９】
時刻Ｔ３に、中央処理装置の命令デコーダは、命令ＯＰ１を解釈して、レジスタのアドレスＡ＿ＲＥＧとしてＡ１を出力する。
【０１００】
時刻Ｔ４に、中央処理装置の命令デコーダ（図１の１０１）は、命令のオペコードＯＰ１をデコードして、不揮発素子の書き込みイネーブル信号ＮＶＷＥ＿ＲＥＧを不揮発レジスタ制御回路１０２に出力し、時刻Ｔ５に出力を終了する。
【０１０１】
時刻Ｔ６からＴ８までの間、不揮発レジスタ制御回路１０２は、選択されたアドレスＡ１のレジスタの書き込み制御信号ＷＢ＿ＲＥＧ（Ａ１）をＬｏｗレベルにし、不揮発レジスタ１０３に書き込み電流を流す。
【０１０２】
時刻Ｔ７に、アドレスＡ１の不揮発レジスタにおける不揮発素子の抵抗値Ｒ＿ＲＥＧ（Ａ１）は、保持していたデータＱ＿ＲＥＧ（Ａ１）に対応した抵抗値Ｒ１に書き換わる。
【０１０３】
次のクロックサイクルでは、アドレスＡ２の不揮発レジスタにおける不揮発素子の書き込みが行われる動作波形を示しており、アドレスＡ１と同様の一連の過程で書き込みが行われる。
【０１０４】
図６に示すように、不揮発素子への書き込みを行う時刻Ｔ６とＴ８は、次の命令を記憶装置（図１の１００）からの読み出しサイクルの始まる時刻Ｔ１１よりも後であってもよい。なんとなれば、不揮発素子への書き込みは、不揮発レジスタの出力を変化させずに行えるため、次の命令の読み出し動作への妨げにならないからである。
【０１０５】
上記のようにパイプライン的に動作させることにより、不揮発素子への書き込みに対する十分なセットアップ時間を確保できるとともに、短い時間で複数の命令を実行することができる。
【０１０６】
図７は、本発明の例示的な第１実施形態に係る半導体集積回路において、命令コード（ＯＰ１）が不揮発素子のロード命令の時の動作波形の一例を示す図である。図７には、ＣＬＫ＿ＳＹＳ、Ａ＿ＲＡＭ、ＲＤ＿ＲＡＭ、Ａ＿ＲＥＧ、ＮＶＬＥ＿ＲＥＧ、ＣＬＫ＿ＲＥＧ（Ａ１）、ＬＢ＿ＲＥＧ（Ａ１）、Ｑ＿ＲＥＧ（Ａ１）、Ｒ＿ＲＥＧ（Ａ１）のタイミング波形が示されている。図７を参照して、不揮発素子のロード時の動作を説明する。
【０１０７】
時刻Ｔ１の直後に、中央処理装置は、記憶装置（図１の１００）へ、アドレスＡ＿ＲＡＭとして、プログラムカウンタの値ＰＣ１を出力する。
【０１０８】
時刻Ｔ２に、中央処理装置は、記憶装置（図１の１００）のアドレスＡ＿ＲＡＭのデータＲＤ＿ＲＡＭとして、命令ＯＰ１を受け取る。ここで、命令ＯＰ１は、図２に示した命令形式であり、命令コードは不揮発素子のロード命令のコードである。また、アドレッシングモードはシングルオペランド形式であり、アドレスＡ１のレジスタを指定するものとする。
【０１０９】
時刻Ｔ３に、中央処理装置の命令デコーダは、命令ＯＰ１を解釈して、レジスタのアドレスＡ＿ＲＥＧとしてＡ１を出力する。
【０１１０】
時刻Ｔ４に、中央処理装置の命令デコーダは、命令ＯＰ１を解釈して、不揮発素子のロードイネーブル信号ＮＶＬＥ＿ＲＥＧを、不揮発レジスタ制御回路（図１の１０２）に出力し、時刻Ｔ５に出力を終了する。
【０１１１】
時刻Ｔ６からＴ８までの間、不揮発レジスタ制御回路１０２は、選択されたアドレスＡ１のレジスタのロード信号ＬＢ＿ＲＥＧ（Ａ１）をＬｏｗレベルとし、不揮発レジスタのロード動作を行う。
【０１１２】
時刻Ｔ７に、アドレスＡ１の不揮発レジスタにおける出力データＱ＿ＲＥＧ（Ａ１）は、不揮発素子の抵抗値Ｒ＿ＲＥＧ（Ａ１）の抵抗値Ｒ１に対応した出力Ｄ１に書き換わる。なお、図８に示すように、書き込み動作は、次のサイクル時刻Ｔ１１に入る前に完了していてもよい。
【０１１３】
図８は、図６と時刻Ｔ１からＴ５まで同じである。図８において、図６と異なるのは、Ｔ１１の前の時刻Ｔ６からＴ８までの間、不揮発レジスタ制御回路１０２は、選択されたアドレスＡ１のレジスタの書き込み制御信号ＷＢ＿ＲＥＧ（Ａ１）をＬｏｗレベルとし、不揮発レジスタ１０３に書き込み電流を流す。
【０１１４】
時刻Ｔ７に、アドレスＡ１の不揮発レジスタにおける不揮発素子の抵抗値Ｒ＿ＲＥＧ（Ａ１）は、保持していたデータＱ＿ＲＥＧ（Ａ１）に対応した抵抗値Ｒ１に書き換わる。
【０１１５】
時刻Ｔ１１に、不揮発レジスタのデータはシステムのクロックＣＬＫ＿ＳＹＳと同期して変化し得る。図８では、時刻Ｔ１１の前のデータを保存する。一方、図６では、時刻Ｔ１１の後のデータを、不揮発素子に保存する。
【０１１６】
あるいは、図９に示すように、ロード動作は１サイクルで行ってもよい。図７は、ロード動作に、２サイクル要していたのに対し、図９のロード動作は、１サイクル要する点が異なる。
【０１１７】
図９は、図７と時刻Ｔ１からＴ７まで同じである。異なるのは、時刻Ｔ１１以降の次のサイクルに、アドレスＡ２のレジスタのロード動作を行っている点である。
【０１１８】
半導体集積回路がクロックＣＬＫ＿ＳＹＳに同期している場合、レジスタの値はＴ１１の直後に更新されうるが、ロード動作を行うレジスタは、遅延があり、ロード動作後のＴ７に更新される。この遅延を半導体集積回路が許容できる場合には、図９のようにロード命令を１サイクルとしてもよい。具体的には、ロードしたレジスタの後段のレジスタのセットアップマージンを十分確保できる場合に、図９のような動作が可能である。
【０１１９】
また、図１０に示すようにロード動作は、次のサイクル時刻Ｔ１１に入る前に完了していてもよい。
【０１２０】
図１０は、図７と時刻Ｔ１からＴ５まで同じである。異なるのは、時刻Ｔ１１の前の時刻Ｔ６からＴ７までの間、不揮発レジスタ制御回路１０２は、選択されたアドレスＡ１のレジスタのロード信号ＬＢ＿ＲＥＧ（Ａ１）をＬｏｗベルとし、不揮発レジスタ１０３の不揮発素子から保持回路にデータをロードする。
【０１２１】
時刻Ｔ７に、アドレスＡ１の不揮発レジスタにおける出力データＱ＿ＲＥＧ（Ａ１）は、不揮発素子の抵抗値Ｒ＿ＲＥＧ（Ａ１）の抵抗値Ｒ１に対応したＤ１（不揮発素子から保持回路に読み出されたデータ）に切り替わる。
【０１２２】
上記のように、本実施形態の半導体装置（半導体集積回路）は、ロジック素子と不揮発メモリ素子を一体化することにより、電源オフに先立ってデータを退避する際に、データ転送遅延、及びデータ転送する配線や回路の消費電力を低減できる。
【０１２３】
さらに、関連技術の半導体集積回路が、モジュール単位で不揮発レジスタの書き込みやロードを行っているため、不必要な書き込みやロードに要する電力を消費していたのに対し、本実施形態によれば、不揮発レジスタ単位で制御できるため、不必要なデータの退避、復帰に要する電力消費を低減できる。これは、不揮発レジスタにアドレスを付与し、そのアドレスの指定する命令中のビットと、不揮発レジスタの書き込みやロードの命令とを備えているためである。さらに、指定した不揮発レジスタの属するグループに対して書き込み、ロードすることにより、データの退避、復帰に必要な時間的なオーバーヘッドを抑えることができる。
【０１２４】
（第２実施形態）
図１１は、本発明の第２実施形態の構成を示す図である。本実施形態においては、図１を参照して説明した前記第１実施形態に加え、演算装置１０５が追加されている。
【０１２５】
演算装置１０５は、命令のオペランドＡとオペランドＢを入力し、命令コードで指定される演算（例えばオペランドＡとオペランドＢに関する２項演算）を実行し、演算結果を出力する。
【０１２６】
図１１では、オペランドＡ、Ｂとしてレジスタの値が用いられ、演算結果がレジスタに書き戻される場合を示している。なお、オペランドとして、メモリのデータや、モジュール内のレジスタの値を使用することもできる。演算装置１０５は、２項演算以外にも、単項演算を行ってもよい。
【０１２７】
図１２は、命令フォーマットを示す図である。図１２に示すように、第２の実施形態では、命令に、不揮発素子の書き込みモードを設定できるビット（ビットフィールド）を含む。
【０１２８】
（ａ＋ｂ＋ｃ＋ｄ）ビットからなる命令のうち、
１からａビットまではレジスタの指定に利用される。
【０１２９】
ａ＋１ビットからａ＋ｂビットまでのｂビットはアドレッシングモードの指定に利用される。
【０１３０】
ａ＋ｂ＋１ビットからａ＋ｂ＋ｃビットまでのｃビットは、命令コードの指定に利用される。
【０１３１】
ａ＋ｂ＋ｃ＋１からａ＋ｂ＋ｃ＋ｄビットまでのｄビットは、不揮発素子の書き込みモードビットＷＭＢ１からＷＭＢｄであり、不揮発素子の書き込みモードの指定に利用される。
【０１３２】
不揮発レジスタの書き込みモードＷＭＢ１からＷＭＢｄの各ビットと、複数の不揮発レジスタが対応付けられる。
【０１３３】
具体的には、アドレスＡ１からＡｍまでのｍ個の不揮発レジスタ１０３１〜１０３ｍは、ｑ個のグループＧ１からＧｑに分割される。
【０１３４】
それぞれのグループＧｙ（１≦ｙ≦ｑ）は、不揮発素子書き込みモードビットＷＭＢ１からＷＭＢｄのうちの一つＷＭＢｚ（１≦ｚ≦ｄ）と１対１に対応付けられるか、もしくは、対応する不揮発素子書き込みモードビットが存在しないとする。
【０１３５】
グループＧｙ（１≦ｙ≦ｑ）に属するアドレスＡｘの不揮発レジスタの保持回路へ書き込みを行う際に、対応付けられた不揮発素子書き込みモードビットＷＭＢｚ（１≦ｚ≦ｄ）が‘１’の場合、保持回路への書き込みデータを、指定されたアドレスＡｘの不揮発レジスタの不揮発素子へも書き込む。
【０１３６】
前記対応付けられた不揮発素子書き込みモードビットＷＭＢｚが‘０’の場合には、保持回路への書き込みデータを指定されたアドレスＡｘの不揮発レジスタの不揮発素子へ書き込むことはしない。
【０１３７】
前記対応付けられた不揮発素子書き込みモードビットＷＭＢｚが存在しない場合、保持回路への書き込みデータを、前記指定されたアドレスＡｘの不揮発レジスタの不揮発素子へ書き込むことはしない（不揮発素子書き込みモードビットＷＭＢｚが‘０’の場合と同様）。
【０１３８】
第２実施形態では、不揮発レジスタ制御回路１０２は、不揮発レジスタにデータが書き戻されると同時に、不揮発素子にも、そのデータを書き込むか、書き込まないかを、書き込みモードビットを元に判断する。
【０１３９】
以下、簡単のため、ｄ＝１ビット、かつ、不揮発レジスタのグループ数ｑ＝１とし、不揮発素子書き込みモードビットＷＭＢ１がグループＧ１に対応付けられるとする。命令の読み出しから不揮発レジスタの制御までの過程を簡単に説明する。
【０１４０】
はじめに、中央処理装置は、プログラムカウンタＰＣで指定されるアドレスを出力し、そのアドレスに記憶されている命令を記憶装置１００から読み出す。
【０１４１】
命令デコーダ１０１は、記憶装置１００から読み出した命令を解読する。
【０１４２】
命令コードの不揮発素子書き込みモードビットＷＭＢ１が１の場合、不揮発レジスタ制御回路１０２は、指定された不揮発レジスタ１０３の保持回路へ、演算結果を書き戻すと同時に、不揮発素子に演算結果を書き込む。例えば、アドレス（レジスタ番号）４と、アドレス（レジスタ番号）５の不揮発レジスタ１０３の加算結果を、アドレス（レジスタ番号）５の不揮発レジスタ１０３に書き戻すと同時に、アドレス（レジスタ番号）５の不揮発素子に、データを書き込む場合には、
レジスタの指定ビットを、アドレス（レジスタ番号）４と、アドレス（レジスタ番号）５に設定し、
アドレッシングモードを、レジスタとレジスタとの間で演算するダブルオペランドモードとし、
命令コードを加算命令とし、
不揮発レジスタの不揮発素子の書き込みモードに設定すればよい。
【０１４３】
図１３は、本発明の例示的な第２実施形態において、不揮発素子の書き込みモードの動作波形の一例を示す図である。図１３、図１１を参照して、不揮発レジスタへの書き込みと同時に、不揮発素子への書き込みを同時に行う際の動作について説明する。
【０１４４】
時刻Ｔ１直後に、中央処理装置（プログラムカウンタ）は、記憶装置１００へアドレスＡ＿ＲＡＭとして、プログラムカウンタの値ＰＣ１を出力する。
【０１４５】
時刻Ｔ２に、命令デコーダ１０１は、記憶装置１００のアドレスＡ＿ＲＡＭの読み出しデータＲＤ＿ＲＡＭとして、命令ＯＰ１を受け取る。ここで、命令ＯＰ１は、図１２に示した命令形式である。不揮発素子の書き込みモードビットを１とする。
【０１４６】
また、命令コードは、ある演算を指定し、不揮発レジスタＡｘとＡ１との間でその演算を実施し、その結果をレジスタＡ１に書き戻す。
【０１４７】
時刻Ｔ３に、命令デコーダ１０１は、命令ＯＰ１を解釈して、レジスタのアドレスＡ＿ＲＥＧとして、Ａ１を出力する。
【０１４８】
また、時刻Ｔ３に演算装置１０５は、レジスタへの入力データＤ＿ＲＥＧとして演算結果Ｄ１を出力する。
【０１４９】
時刻Ｔ４に、命令デコーダ１０１は、命令ＯＰ１を解釈して、不揮発素子の書き込みイネーブル信号ＮＶＷＥ＿ＲＥＧを、不揮発レジスタ制御回路１０２に出力し、時刻Ｔ５に出力を終了する。
【０１５０】
時刻Ｔ９に、不揮発レジスタ制御回路１０２は、不揮発レジスタ１０３の揮発データの書き込み信号ＷＢ＿ＲＥＧ（Ａ１）をＨｉｇｈレベルとし、アドレスＡ１の不揮発レジスタの不揮発素子にデータＤ１を書き込む。
【０１５１】
時刻Ｔ６からＴ８までの間、不揮発レジスタ制御回路１０２は、選択されたアドレスＡ１の不揮発レジスタ１０３の書き込み制御信号ＷＢ＿ＲＥＧ（Ａ１）をＬｏｗレベルとし、不揮発レジスタの不揮発素子の書き込み動作を行う。
【０１５２】
時刻Ｔ７に、アドレスＡ１の不揮発レジスタにおける不揮発素子の抵抗値Ｒ＿ＲＥＧ（Ａ１）は、演算結果Ｄ１に対応した抵抗値Ｒ１に切り替えられる。
【０１５３】
次のクロックサイクルでは、アドレスＡ２の不揮発レジスタ１０３における不揮発素子の書き込みが行われる動作波形を示しており、アドレスＡ１と同様の一連の過程で書き込みが行われる。
【０１５４】
上記のように、第２の実施形態では、前記第１の実施形態と同様の効果を得ることができる。
【０１５５】
さらに、前記第１の実施形態に比較して、不揮発レジスタの揮発性データの書き込みと同時に不揮発素子への書き込むことができる。したがって、前記第１実施形態では、揮発性データの書き込みと不揮発素子の書き込みの２つの命令を必要としていたのに対し、第２実施形態では、１つの命令サイクルで実施できるため、実行時間を短縮することができ、かつ、プログラム領域を縮小することができる。
【０１５６】
さらに、不意の電源供給の停止に供え、常に揮発データと不揮発データの一貫性を保つことができるため、電源障害に対する耐性が高い半導体集積回路を提供することができる。
【０１５７】
（第３実施形態）
図１４は、本発明の第３実施形態の構成を示す図である。本実施形態の半導体集積回路は、図１１を参照して説明した前記第２実施形態に、ｄビットの不揮発素子書き込みモードレジスタ１０６が追加されている。
【０１５８】
ここで、不揮発素子書き込みモードレジスタ１０６は、必ずしも不揮発レジスタである必要はなく、揮発性データのみを保持するレジスタであってもよい。図１５は、本発明の第３実施形態に係る不揮発レジスタを備えた半導体集積回路の命令形式を示す図である。
【０１５９】
第３の実施形態は、前記第２の実施形態と比較し、命令内に、不揮発素子書き込みモードを設定するビットフィールドが存在しない。つまり、不揮発素子書き込みモードを指定するビットが、前記第２の実施形態では命令内に設けられているが、第３の実施形態では、レジスタとして用意されている。
【０１６０】
不揮発レジスタの書き込みモードビットＷＭＢ１からＷＭＢｄの各ビットと、複数の不揮発レジスタが対応付けられる。具体的には、前記第２実施形態と同様、ｍ個の不揮発レジスタ１０３１〜１０３ｍのアドレスＡ１からＡｍは、ｑ個のグループＧ１からＧｑに分割される。それぞれのグループＧｙ（１≦ｙ≦ｑ）は、不揮発素子書き込みモードビットＷＭＢ１からＷＭＢｄのうちのひとつＷＭＢｚ（１≦ｚ≦ｄ）と１対１に対応付けられるか、もしくは、対応する不揮発素子書き込みモードビットが存在しないとする。
【０１６１】
グループＧｙ（１≦ｙ≦ｑ）に属するアドレスＡｘの不揮発レジスタの保持回路へ書き込みを行う際に、対応付けられた不揮発素子書き込みモードビットＷＭＢｚ（１≦ｚ≦ｚ）が‘１’の場合、保持回路への書き込みデータを指定されたアドレスＡｘの不揮発レジスタの不揮発素子へも書き込む。
【０１６２】
対応付けられた不揮発素子書き込みモードビットＷＭＢｚが‘０’の場合、保持回路への書き込みデータを指定されたアドレスＡｘの不揮発レジスタの不揮発素子へは書き込まない。
【０１６３】
対応付けられた不揮発素子書き込みモードビットＷＭＢｚが存在しない場合、保持回路への書き込みデータを指定されたアドレスＡｘの不揮発レジスタの不揮発素子へは書き込まない。
【０１６４】
このように、第３の実施形態では、不揮発レジスタ制御回路１０２は、不揮発レジスタ１０３にデータが書き戻されると同時に、不揮発レジスタ１０３の不揮発素子にも、そのデータを書き込むか書き込まないかを、書き込みモードレジスタ１０６の設定情報（不揮発素子書き込みモードビット情報）を基に、判断する。
【０１６５】
簡単のため、ｄ＝１ビット、かつ、不揮発レジスタのグループ数ｑ＝１とし、不揮発素子書き込みモードビットＷＭＢ１がグループＧ１に対応付けられるものとする。不揮発素子書き込みモードレジスタの設定から、不揮発レジスタの制御までの過程を簡単に説明する。
【０１６６】
はじめに、中央処理装置のプログラムカウンタＰＣで指定されるアドレスを出力し、そのアドレスに記憶されている命令を記憶装置１００から読み出す。
【０１６７】
命令デコーダ１０１は、記憶装置１００から読み出した命令を解読する。
【０１６８】
命令コードが、不揮発素子書き込みモードレジスタＷＭＢ１を‘１’に設定する命令である場合、不揮発素子書き込みモードレジスタの値は‘１’に設定され、そのレジスタ情報が不揮発レジスタ制御回路１０２に与えられる。
【０１６９】
その後、あるクロックサイクルで読み出した命令が、演算結果を不揮発レジスタ１０３の保持回路に書き込む命令であった場合、不揮発レジスタ制御回路１０２は、不揮発素子書き込みモードレジスタ１０６の値を参照する。不揮発素子書き込みモードレジスタ１０６の対応するビットの値が‘１’であることを確認できれば、その選択されたアドレスの不揮発レジスタに揮発性データを書き込むと同時に、当該不揮発レジスタの不揮発素子のデータを書き換える。この場合、詳細な書き込み時の波形は、図１３と同じであるため、説明を省略する。
【０１７０】
上記のように、第３の実施形態によれば、前記第１の実施形態と同様の効果を得ることができる。
【０１７１】
さらに、第３の実施形態によれば、前記第２の実施形態に比較し、既存のアーキテクチャとの親和性が高い。つまり、前記第２の実施形態において、不揮発レジスタの書き込みモードを指定するビットを加える必要があるが、既存の命令コードに空いているビットがない場合も有り得る。この場合、命令のビット幅を広げる、または、２つの命令に分ける必要があり、既存のアーキテクチャを大きく変更する必要がある。
【０１７２】
それに対し、第３の実施形態によれば、不揮発素子書き込みモードレジスタ１０６を設けることで、命令コードを変更する必要がなく、既存のアーキテクチャをそのまま利用できるという利点がある。
【０１７３】
（第４実施形態）
図１６は、本発明の第４の実施形態の構成を示す図である。図１６を参照すると、第４の実施形態は、前記第１実施形態に加え、演算装置１０５と、ダーティビット１０７が追加されている。ここで、ダーティビットは、必ずしも不揮発レジスタである必要はなく、従来の揮発性データのみを保持するレジスタであってもよい。
【０１７４】
図１６において、ｄ個からなるダーティビットＤＴＹ１からＤＴＹｄまでをレジスタ１０７に備え、ｍ個の不揮発レジスタのアドレスＡ１からＡｍは、ｓ個のグループＧ１からＧｓに分割される。それぞれのグループＧｙ（１≦ｙ≦ｓ）は、ダーティビットＤＴＹ１からＤＴＹｄのうちの一つＤＴＹｚと１対１に対応付けられるか、もしくは、対応する不揮発素子書き込みモードビットが存在しない。
【０１７５】
グループＧｙ（１≦ｙ≦ｓ）に属する全ての不揮発レジスタの保持回路のデータと不揮発素子のデータが一致している場合に、
グループＧｙに対応付けられたダーティビットＤＴＹｚ（１≦ｚ≦ｄ）が存在していれば、ＤＴＹｚを‘０’にセットする。
一致していない可能性がある場合に、ダーティビットＤＴＹｚが存在していれば、ＤＴＹｚを‘１’にセットする。
【０１７６】
命令デコーダ１０１が解釈した命令がアドレスＡｘの不揮発レジスタの不揮発素子への書き込み命令の時、アドレスＡｘの不揮発レジスタの属するグループＧｙに対応したダーティビットＤＴＹｚが存在したとき、
ダーティビットＤＴＹｚが‘１’の場合、アドレスＡｘの不揮発レジスタの不揮発素子へ、保持回路のデータを書き込み、
ダーティビットＤＴＹｚが‘０’の場合、アドレスＡｘの不揮発レジスタの不揮発素子へ、保持回路のデータを書き込まない。
【０１７７】
図１７は、本発明の第４実施形態における、ダーティビットの状態遷移を示す図である。不揮発レジスタ制御回路１０２は、下記のダーティビットの状態遷移を実現するように、データを書き込む。なお、各ダーティビットの値は、例えば、既存の揮発性のフリップフロップ（通常のフリップフロップ）に格納され、書き込みは、通常のフリップフロップの書き込みと同様に行われる。
【０１７８】
グループＧｙに属するアドレスＡｘの不揮発レジスタの保持回路は、電源オンに伴って、予め設定されている初期値が設定される。
【０１７９】
グループＧｙに対応したダーティビットＤＴＹｚが存在するとき、ダーティビットＤＴＹｚを‘１’に設定する。
アドレスＡｘの不揮発レジスタの保持回路へ揮発データを書き込んだ際には、ダーティビットＤＴＹｚが存在するとき、ダーティビットＤＴＹｚを‘１’に設定する。
グループＧｙに属する全ての不揮発レジスタの保持回路へ、不揮発素子のデータをロードした際には、ダーティビットＤＴＹｚが存在するとき、ダーティビットＤＴＹｚを‘０’に設定する。
グループＧｙに属する全ての不揮発レジスタの不揮発素子へ、保持回路のデータを書き込んだ際には、ダーティビットＤＴＹｚが存在するとき、ダーティビットＤＴＹｚを‘０’に設定する。
【０１８０】
次にダーティビットの値の利用について詳細に説明する。上記のように不揮発レジスタ制御回路１０２は、不揮発素子への書き込み時にダーティビットの値を参照する必要がある。不揮発レジスタ制御回路１０２は、ダーティビットの出力のうち、所望のダーティビットの値を選択することができる。
【０１８１】
例えば、アドレスＡｘの不揮発レジスタの不揮発素子への書き込みの場合、
命令デコーダ１０１から与えられたアドレスＡｘの情報を元にマルチプレクサ（不図示）等の回路により、複数あるダーティビットの出力の中から、アドレスＡｘの属するグループＧｙのダーティビットＤＴＹｚの値を選択する。
【０１８２】
そして、不揮発レジスタ制御回路１０２は、当該ダーティビットＤＴＹｚの値に応じて、不揮発素子への書き込みを行うか否かを判断する。
【０１８３】
ダーティビットは、不揮発素子の書き込み消費電力を低減するのに有用である。
【０１８４】
前記第１実施形態では、電源オフに先立ち、データの退避をきめ細かに行うことができるが、どのデータが既に退避されており、どのデータがまだ退避されていないかを管理することが困難な場合がある。その場合、すべてのデータを退避することでその問題を解決しようとすると、書き込みの消費電力は大きくなる。
【０１８５】
これに対して、第４の実施形態においては、電源のオフに先立ち、ダーティビットを用い、ダーティビットが‘１’の不揮発レジスタに対してのみ、不揮発素子にデータを書き込む。そのため、電源オフに先立ち、すべての不揮発レジスタにおいて、データを、不揮発レジスタの不揮発素子へ書き込む必要がなく、書き込みを行う不揮発素子の数を減らすことができる。
【０１８６】
前記第２、第３実施形態では、常にデータを不揮発素子へ退避することを可能とするため、どのデータが退避されているか否かを管理する必要がない。
【０１８７】
しかしながら、同じアドレスへ複数回書き込みがあった場合、その度に、不揮発素子へ書き込むことは、無駄に電力を消費することになる。
【０１８８】
第４の実施形態では、上記のように、不揮発レジスタの揮発性の保持回路に書き込む度に不揮発素子のデータを書き換えることは行わないため、複数回同じアドレスのレジスタへ書き込みが起こった場合でも、無駄な不揮発素子の書き込みの回数を低減できる。
【０１８９】
また、第４の実施形態では、不意の電源遮断に備えた復元ポイントの作成を、より低消費電力で実現できる。これは、上記のように、ダーティビットが１の不揮発レジスタのみ、不揮発素子への書き込みを行えばよいためである。
【０１９０】
上記のように、第４の実施形態は、前記第１実施形態と同様の効果を得ることができるほか、さらに、ダーティビットを備えたことにより、書き込み行う不揮発素子の数や書き込みの回数を低減することができ、データ退避のための遅延や消費電力を容易に低減できる。
【０１９１】
以上、いくつかの実施の形態に基づき本発明を具体的に説明したが、本発明は上述の実施の形態に限定されるものではない。本発明の要旨を逸脱しない範囲で種々の変更を施すことができ、これらの変形例も本発明に含まれる。例えば、上記は中央処理装置内のレジスタを中心に説明したが、周辺モジュール内のレジスタにも容易に拡張でき、本発明に含まれる。また、各実施形態を組み合わせた実施形態も、同様の効果が得られ、本発明に含まれる。なお、上記の特許文献の各開示を、本書に引用をもって繰り込むものとする。本発明の全開示（請求の範囲を含む）の枠内において、さらにその基本的技術思想に基づいて、実施形態ないし実施例の変更・調整が可能である。また、本発明の請求の範囲の枠内において種々の開示要素（各請求項の各要素、各実施形態ないし実施例の各要素、各図面の各要素等を含む）の多様な組み合わせないし選択が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。
【符号の説明】
【０１９２】
１００  記憶装置
１０１  命令デコーダ
１０２  不揮発レジスタ制御回路
１０３  不揮発レジスタ
１０４  不揮発フリップフロップ
１０５  演算装置
１０６  モードレジスタ
１０７  ダーティビット
２０１、２１１  リファレンス層
２０２、２１２  絶縁層
２０３、２１３  フリー層
２０４、２１４  ハード層１
２０５、２１５  ハード層２
２０６、２１６  メタル層１
２０７  メタル層１
【図１】
0005962658.tif 000002
【図２】
0005962658.tif 000003
【図３】
0005962658.tif 000004
【図４】
0005962658.tif 000005
【図５】
0005962658.tif 000006
【図６】
0005962658.tif 000007
【図７】
0005962658.tif 000008
【図８】
0005962658.tif 000009
【図９】
0005962658.tif 000010
【図１０】
0005962658.tif 000011
【図１１】
0005962658.tif 000012
【図１２】
0005962658.tif 000013
【図１３】
0005962658.tif 000014
【図１４】
0005962658.tif 000015
【図１５】
0005962658.tif 000016
【図１６】
0005962658.tif 000017
【図１７】
0005962658.tif 000018