(57)【要約】【課題】強誘電体メモリの劣化を抑制する。【解決手段】カウンタ部２は、計数値の更新を指示する入力信号を受けるたびに、少なくとも（ｎ−１）（ｎ＞２）ビット分の値が変化する、計数値を示すｎビットの第１のコード（反転グレイコード）を生成する。強誘電体メモリ（ＦｅＲＡＭ）３は、第１のコードを記憶する。これにより、強誘電体メモリ３の分極方向の焼き付き（インプリント）が抑制され、強誘電体メモリ３の劣化を抑制できる。【選択図】図１
2017028409.tif 000002
【特許請求の範囲】
【請求項１】
計数値の更新を指示する入力信号を受けるたびに、少なくとも（ｎ−１）（ｎ＞２）ビット分の値が変化する、前記計数値を示すｎビットの第１のコードを生成するカウンタ部と、
前記第１のコードを記憶する強誘電体メモリと、
を有することを特徴とする不揮発性カウンタ回路。
【請求項２】
前記カウンタ部は、前記入力信号を受けるたびに１ビット分の値が変化する第１のグレイコードと、前記第１のグレイコードの各ビットの値を反転させた第２のコードとを、前記入力信号を受けるたびに交互に、前記第１のコードとして出力する、ことを特徴とする請求項１に記載の不揮発性カウンタ回路。
【請求項３】
前記カウンタ部は、前記入力信号を受けるたびに値が変化するフラグビットの値に基づき、前記第１のコードとして、前記第１のグレイコードを出力するか、前記第２のコードを出力するか決定する反転部を有する、ことを特徴とする請求項２に記載の不揮発性カウンタ回路。
【請求項４】
前記カウンタ部は、前記入力信号を２回受けるたびに１ビット分の値が変化する第２のグレイコードと、前記第２のグレイコードの各ビットの値を反転させた第３のコードとを、前記入力信号を受けるたびに交互に、前記第１のコードとして出力する、ことを特徴とする請求項１に記載の不揮発性カウンタ回路。
【請求項５】
前記カウンタ部は、前記第１のコードの最上位ビットの値に基づき、前記第１のコードを、２進数の値に変換することを特徴とする請求項４に記載の不揮発性カウンタ回路。
【請求項６】
プロセッサが、計数値の更新を指示する入力信号を受けるたびに、少なくとも（ｎ−１）（ｎ＞２）ビット分の値が変化する、前記計数値を示すｎビットの第１のコードを生成し、
前記プロセッサが、前記第１のコードを強誘電体メモリに記憶する、
ことを特徴とするメモリ制御方法。
【請求項７】
計数値の更新を指示する入力信号が発生するたびに、少なくとも（ｎ−１）（ｎ＞２）ビット分の値が変化する、前記計数値を示すｎビットの第１のコードを生成し、
前記第１のコードを強誘電体メモリに記憶する、
処理をコンピュータに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、不揮発性カウンタ回路、メモリ制御方法及びプログラムに関する。
【背景技術】
【０００２】
強誘電体材料を用いたＦｅＲＡＭ（Ferroelectric Random Access Memory）を、計数値を記憶する不揮発性メモリとして用いた不揮発性カウンタ回路がある。
ＦｅＲＡＭでは、強誘電体膜の分極方向に対応づけて１、０の値が記憶される。ただし、分極方向が同じ方向に長時間保持されると、分極方向の焼き付き（インプリント）が発生し、値の反転がしにくくなる（異なる値を書き込みにくくなる）現象がある。インプリントは、ＦｅＲＡＭの寿命の短小化につながっていた。
【０００３】
不揮発性カウンタ回路では、計数値の下位ビットは値が頻繁に変化するが、上位ビットになるほど値の変化は少なくなる。そのため、上位ビットの値を保持するメモリ素子では、インプリントの影響をより強く受ける懸念がある。
【０００４】
そこで、従来、不揮発性カウンタ回路として、計数値の各ビットのインプリントが進む前に値が反転するように、計数値を符号化するものがあった。たとえば、計数値ｎが偶数の場合にはｎ／２という値にし、奇数の場合には（ｎ−１）／２の各ビット値を反転した値とするように符号化するものがあった。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】米国特許出願公開第２００５／０１１１２８７号明細書
【特許文献２】特公平５−７４１１８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、従来の不揮発性カウンタ回路では、２進数の値である計数値において、桁上がりが発生する箇所（たとえば、１から２、３から４、７から８など）では、符号化によって得られるコードに値が変わらないビットがみられる。たとえば、４ビットの計数値で、３から４（すなわち、２進数で“００１１”から“０１００”）に変化する場合、コードは、１１１０から００１０に変化するが、下位２ビットは固定されている。また、１５から０に戻るとき（すなわち、２進数で“１１１１”から“００００”）に変化する場合、コードは、“１０００”から“００００”に変化するが、下位３ビットが固定されている。
【０００７】
このように、固定されるビット数が増えると、固定される箇所に使用される強誘電体メモリに対するインプリントの影響により、強誘電体メモリの劣化が進む問題があった。
【課題を解決するための手段】
【０００８】
発明の一観点によれば、計数値の更新を指示する入力信号を受けるたびに、少なくとも（ｎ−１）（ｎ＞２）ビット分の値が変化する、前記計数値を示すｎビットの第１のコードを生成するカウンタ部と、前記第１のコードを記憶する強誘電体メモリと、を有する不揮発性カウンタ回路が提供される。
【０００９】
また、発明の一観点によれば、プロセッサが、計数値の更新を指示する入力信号を受けるたびに、少なくとも（ｎ−１）（ｎ＞２）ビット分の値が変化する、前記計数値を示すｎビットの第１のコードを生成し、前記プロセッサが、前記第１のコードを強誘電体メモリに記憶する、メモリ制御方法が提供される。
【００１０】
また、発明の一観点によれば、計数値の更新を指示する入力信号が発生するたびに、少なくとも（ｎ−１）（ｎ＞２）ビット分の値が変化する、前記計数値を示すｎビットの第１のコードを生成し、前記第１のコードを強誘電体メモリに記憶する、処理をコンピュータに実行させるプログラムが提供される。
【発明の効果】
【００１１】
開示の不揮発性カウンタ回路、メモリ制御方法及びプログラムによれば、強誘電体メモリの劣化を抑制できる。
【図面の簡単な説明】
【００１２】
【図１】第１の実施の形態の不揮発性カウンタ回路の一例を示す図である。
【図２】第２の実施の形態の不揮発性カウンタ回路の一例を示す図である。
【図３】グレイコードカウンタの一例を示す図である。
【図４】計数値の一例を示す図である。
【図５】第３の実施の形態の不揮発性カウンタ回路の一例を示す図である。
【図６】計数値の一例を示す図である。
【図７】第４の実施の形態の不揮発性カウンタ回路の一例を示す図である。
【図８】反転グレイコードカウンタの一例を示す図である。
【図９】反転グレイコードカウンタの他の例を示す図である。
【図１０】計数値の一例を示す図である。
【図１１】３ビットの反転グレイコードを生成する反転グレイコードカウンタの一例を示す図である。
【図１２】計数値の一例を示す図である。
【図１３】第５の実施の形態の不揮発性カウンタ回路の一例を示す図である。
【図１４】２進数の値から反転グレイコードを生成する回路の一例を示す図である。
【図１５】反転グレイコードから２進数の値を生成する回路の一例を示す図である。
【図１６】２進数の値から反転グレイコードを生成する回路の他の例を示す図である。
【図１７】反転グレイコードから２進数の値を生成する回路の例を示す図である。
【図１８】反転グレイコードから２進数の値を生成する回路の他の例を示す図である。
【図１９】コンピュータの一例のハードウェア例を示す図である。
【図２０】メモリ制御方法の一例の流れを示すフローチャートである。
【図２１】反転グレイコードの生成処理の一例の流れを示す図である。
【図２２】２進数の値の生成処理の一例の流れを示す図である。
【図２３】反転グレイコードの生成処理の一例の流れを示す図である。
【発明を実施するための形態】
【００１３】
以下、発明を実施するための形態を、図面を参照しつつ説明する。
（第１の実施の形態）
図１は、第１の実施の形態の不揮発性カウンタ回路の一例を示す図である。
【００１４】
不揮発性カウンタ回路１は、カウンタ部２と強誘電体メモリ３を有する。
カウンタ部２は、計数値の更新を指示する入力信号（たとえば、クロック信号やカウント信号（カウントアップ信号）など）を受けるたびに少なくとも（ｎ−１）（ｎ＞２）ビット分の値が変化する、ｎビットのコードを生成する。本実施の形態の不揮発性カウンタ回路１では、このコードが計数値を示す。
【００１５】
たとえば、カウンタ部２は、上記の入力信号を受けるたびに１ビット分の値が１から０または０から１に反転するコードであるｎビットのグレイコードを生成する。そしてカウンタ部２は、上記の入力信号を受けるたびに、そのグレイコードと、グレイコードの各ビットの値を反転させたものとを、交互に用いる。これによって、上記の入力信号を受けるたびに、（ｎ−１）ビット分の値が変化するコードが生成される。
【００１６】
なお、カウンタ部２は、制御回路２ａを有している。制御回路２ａは、強誘電体メモリ３の記憶内容のカウンタ部２へのロードの制御、上記の入力信号を受けたときのコードを更新するタイミングの制御、生成したコードの強誘電体メモリ３への書き込みの制御などを行う。
【００１７】
以下、上記の入力信号を受けるたび（計数値の更新のたび）、少なくとも（ｎ−１）ビット分の値が変化するコードを反転グレイコードという。
反転グレイコードは、上記の手法の他に、後述する複数の手法により生成可能である。
【００１８】
なお、カウンタ部２は、反転グレイコードから、２進数の計数値を生成する機能を有していてもよい。この点についても後述する。
強誘電体メモリ３は、ＦｅＲＡＭであり、カウンタ部２で生成された反転グレイコードを記憶する。
【００１９】
以下、第１の実施の形態の不揮発性カウンタ回路１の一例の動作を説明する。
なお、以下では、４ビットの不揮発性カウンタ回路１を例にして説明する。
強誘電体メモリ３には、計数値を示す反転グレイコードの初期値として“００００”が記憶されているものとする。なお、反転グレイコードの初期値“００００”は、２進数の値“００００”に対応している。
【００２０】
また、以下の説明では、入力信号が、Ｌ（Low）レベルからＨ（High）レベルに立ち上がると、計数値の更新が指示されたものとする。
入力信号がＬレベルからＨレベルに立ち上がると、カウンタ部２は、強誘電体メモリ３の記憶内容を読み込み、“００００”のうち、３ビット分の値が変化した反転グレイコードである“１１１０”を生成する。生成された反転グレイコードは、強誘電体メモリ３に書き込まれる。再び、入力信号が、ＬレベルからＨレベルに立ち上がると、カウンタ部２は、強誘電体メモリ３の記憶内容を読み込み、“１１１０”のうち、３ビット分の値が変化した反転グレイコードである“００１１”を生成する。以下、入力信号がＬレベルからＨレベルに立ち上がるたびに同様の処理が行われる。
【００２１】
図１には、計数値が、１０進数、２進数、グレイコード、反転グレイコードの４種類で示されている。
２進数の値で示される計数値が強誘電体メモリ３に記憶される場合、計数値の下位ビットは値が頻繁に反転するが、上位ビットになるほど値の反転は少なくなる。そのため、強誘電体メモリ３において、上位ビットの値を保持するメモリ素子は、インプリントの影響をより強く受け、劣化しやすくなる。
【００２２】
一方、反転グレイコードは、上記のような４ビットの不揮発性カウンタ回路１の場合、入力信号が、ＬレベルからＨレベルに立ち上がるたび、３ビット分の値が反転する。２進数で、桁上がりが発生するときも、上記のような反転グレイコードでは、１ビット分の値が固定するだけですむ。
【００２３】
このため、本実施の形態の不揮発性カウンタ回路１０では、強誘電体メモリ３におけるインプリントが抑制され、劣化を抑制できる。
（第２の実施の形態）
図２は、第２の実施の形態の不揮発性カウンタ回路の一例を示す図である。
【００２４】
ｎ＋１ビットの不揮発性カウンタ回路１０は、カウンタ部１１とＦｅＲＡＭ１２を有する。
カウンタ部１１は、制御回路１１ｃｎｔ、トグルフリップフロップ（以下ＴＦＦと略す）１１ａ、グレイコードカウンタ１１ｂ、反転部１１ｃを有する。
【００２５】
制御回路１１ｃｎｔは、ＦｅＲＡＭ１２の記憶内容のＴＦＦ１１ａやカウンタ部１１へのロードの制御、カウンタ部１１が入力信号を受けたときのコードを更新するタイミングの制御、生成したコードのＦｅＲＡＭ１２への書き込みの制御などを行う。
【００２６】
ＴＦＦ１１ａは、クロック端子ＣＫへの入力信号がＬレベルからＨレベルに立ち上がるたびに、１ビットの値を０から１または１から０に反転して出力端子Ｑから出力する。また、出力端子Ｑから出力する信号に対して相補の信号を端子／Ｑから出力する。すなわち、ＴＦＦ１１ａの入力値が２分周された値を出力する。したがって、ＴＦＦ１１ａの端子／Ｑからグレイコードカウンタ１１ｂに出力される値と、ＴＦＦ１１ａの出力端子Ｑから反転部１１ｃに出力される値とは、論理レベルが逆（一方が０の場合は他方が１）である。以下では、グレイコードカウンタ１１ｂのクロック端子ＣＫと接続される端子／Ｑを、２分周出力端子／Ｑと呼び、反転部１１ｃに接続される出力端子Ｑと区別する。
【００２７】
グレイコードカウンタ１１ｂは、ＴＦＦ１１ａの２分周出力端子／Ｑから出力される値を受け、ｎビットのグレイコードを生成する。また、制御回路１１ｃｎｔの制御のもと、ＦｅＲＡＭ１２の記憶内容を、反転部１１ｃを介してロードする。
【００２８】
反転部１１ｃは、グレイコードカウンタ１１ｂで生成されたグレイコードとＴＦＦ１１ａの出力端子Ｑから出力される値に基づき、反転グレイコードを生成するとともに、ＦｅＲＡＭ１２に記憶されている値に基づき、反転グレイコードをグレイコードに戻す。
【００２９】
反転部１１ｃは、ＥｘＯＲ回路１１ｄ１，１１ｄ２，…，１１ｄｎ，１１ｅ１，１１ｅ２，…，１１ｅｎを有する。ＥｘＯＲ回路１１ｄ１〜１１ｄｎは、ＦｅＲＡＭ１２の各メモリ素子（強誘電体メモリ素子）によるビットｄ０，ｄ１，ｄ２，…，ｄｎのうち、ビットｄ１〜ｄｎに対応して設けられている。ＥｘＯＲ回路１１ｅ１〜１１ｅｎは、ｎビットのグレイコードを生成するグレイコードカウンタ１１ｂの各ビットに対応して設けられている。
【００３０】
ＥｘＯＲ回路１１ｄ１〜１１ｄｎの一方の入力端子には、ＦｅＲＡＭ１２のビットｄ０の値が入力され、他方の入力端子には、対応するビットｄ１〜ｄｎの値が入力される。ＥｘＯＲ回路１１ｄ１〜１１ｄｎの出力端子は、グレイコードカウンタ１１ｂに接続されている。
【００３１】
ＥｘＯＲ回路１１ｅ１〜１１ｅｎの一方の入力端子には、ＴＦＦ１１ａの出力端子Ｑから出力される値が入力され、他方の入力端子には、グレイコードカウンタ１１ｂから出力される対応するビットの値が入力される。
【００３２】
図３は、グレイコードカウンタの一例を示す図である。なお、ロード機能を実現する回路部分については図示が省略されている。
図３では、４ビットのグレイコードカウンタ１１ｂの一例が示されている。
【００３３】
グレイコードカウンタ１１ｂは、４ビットのＤ型フリップフロップ（以下ＤＦＦという）２０を有する。また、グレイコードカウンタ１１ｂは、ＮＡＮＤ回路２１、ＡＮＤ回路２２，２３、ＮＯＲ回路２４、インバータ回路２５、ＡＮＤ回路２６，２７、ＮＯＲ回路２８，２９、ＡＮＤ回路３０，３１、ＮＯＲ回路３２、ＯＲ回路３３、ＮＡＮＤ回路３４を有する。さらに、グレイコードカウンタ１１ｂは、ＥｘＮＯＲ回路３５、インバータ回路３６，３７，３８，３９、バッファ回路４０，４１を有する。
【００３４】
ＤＦＦ２０は、クロック端子ＣＫに図２に示したＴＦＦ１１ａの２分周出力端子／Ｑが接続されている。また、ＤＦＦ２０は、入力端子Ｄ０，Ｄ１，Ｄ２，Ｄ３、出力端子Ｑ０，Ｑ１，Ｑ２，Ｑ３を有する。ＤＦＦ２０は、ＴＦＦ１１ａの２分周出力端子／Ｑから出力される値が、ＬレベルからＨレベル（０から１）に変化するたびに、入力端子Ｄ０〜Ｄ３に入力される値を取り込む。
【００３５】
ＮＡＮＤ回路２１の一方の入力端子は、ＤＦＦ２０の出力端子Ｑ１に接続されており、他方の入力端子は、インバータ回路３６の出力端子に接続されている。ＮＡＮＤ回路２１の出力端子は、インバータ回路２５を介してＡＮＤ回路２６の一方の入力端子に接続されているとともに、ＡＮＤ回路２７の一方の入力端子及びＮＡＮＤ回路３４の一方の入力端子に接続されている。
【００３６】
ＡＮＤ回路２２は、２つの入力信号の論理レベルをそれぞれ反転したのちにＡＮＤ論理演算を行うものであり、一方の入力端子は、ＤＦＦ２０の出力端子Ｑ２に接続されており、他方の入力端子は、ＤＦＦ２０の出力端子Ｑ３に接続されている。ＡＮＤ回路２２の出力端子は、ＮＯＲ回路２４の一方の入力端子に接続されている。
【００３７】
ＡＮＤ回路２３の一方の入力端子は、ＤＦＦ２０の出力端子Ｑ３に接続されており、他方の入力端子は、ＤＦＦ２０の出力端子Ｑ２に接続されている。ＡＮＤ回路２３の出力端子は、ＮＯＲ回路２４の他方の入力端子に接続されている。ＮＯＲ回路２４の出力端子は、ＯＲ回路３３の一方の入力端子及びＥｘＮＯＲ回路３５の一方の入力端子に接続されている。
【００３８】
ＡＮＤ回路２６の一方の入力端子は、インバータ回路２５の出力端子に接続されており、他方の入力端子は、ＤＦＦ２０の出力端子Ｑ３に接続されている。ＡＮＤ回路２６の出力端子はＮＯＲ回路２８の一方の入力端子に接続されている。
【００３９】
ＡＮＤ回路２７の一方の入力端子は、ＮＡＮＤ回路２１の出力端子に接続されており、他方の入力端子は、インバータ回路３７の出力端子に接続されている。ＡＮＤ回路２７の出力端子は、ＮＯＲ回路２８の他方の入力端子に接続されている。ＮＯＲ回路２８の出力端子は、ＤＦＦ２０の入力端子Ｄ２に接続されている。
【００４０】
ＮＯＲ回路２９の一方の入力端子は、ＤＦＦ２０の出力端子Ｑ０に接続されており、他方の入力端子は、ＤＦＦ２０の出力端子Ｑ１に接続されている。ＮＯＲ回路２９の出力端子は、ＡＮＤ回路３０の一方の入力端子と、ＡＮＤ回路３１の一方の入力端子に接続されている。
【００４１】
ＡＮＤ回路３０は、２つの入力信号の論理レベルをそれぞれ反転したのちにＡＮＤ論理演算を行うものであり、一方の入力端子は、ＮＯＲ回路２９の出力端子に接続されており、他方の入力端子は、ＤＦＦ２０の出力端子Ｑ３に接続されている。ＡＮＤ回路３０の出力端子は、ＮＯＲ回路３２の一方の入力端子に接続されている。
【００４２】
ＡＮＤ回路３１の一方の入力端子は、ＮＯＲ回路２９の出力端子に接続されており、他方の入力端子は、インバータ回路３７の出力端子に接続されている。ＡＮＤ回路３１の出力端子は、ＮＯＲ回路３２の他方の入力端子に接続されている。ＮＯＲ回路３２の出力端子は、ＤＦＦ２０の入力端子Ｄ３に接続されている。
【００４３】
ＯＲ回路３３の一方の入力端子は、ＮＯＲ回路２４の出力端子に接続されており、他方の入力端子は、インバータ回路３６の出力端子に接続されている。ＯＲ回路３３の出力端子は、ＮＡＮＤ回路３４の他方の入力端子に接続されている。ＮＡＮＤ回路３４の出力端子は、ＤＦＦ２０の入力端子Ｄ１に接続されている。
【００４４】
ＥｘＯＲ回路３５の他方の入力端子は、ＤＦＦ２０の出力端子Ｑ１に接続されており、ＥｘＯＲ回路３５の出力端子は、ＤＦＦ２０の入力端子Ｄ０に接続されている。
インバータ回路３６の入力端子は、ＤＦＦ２０の出力端子Ｑ０に接続されており、出力端子はインバータ回路３９の入力端子に接続されている。インバータ回路３９の出力端子から、４ビットのグレイコードのうち、最下位ビット＜０＞の値が出力される。インバータ回路３７の入力端子は、ＤＦＦ２０の出力端子Ｑ２に接続されており、出力端子はインバータ回路３８の入力端子に接続されている。インバータ回路３８の出力端子から、４ビットのグレイコードのうち、最上位ビット（ＭＳＢ）の１つ下位のビット＜２＞の値が出力される。
【００４５】
バッファ回路４０の入力端子は、ＤＦＦ２０の出力端子Ｑ１に接続されており、出力端子からは、４ビットのグレイコードのうち、最下位ビットの１つ上位のビット＜１＞の値が出力される。
【００４６】
バッファ回路４１の入力端子は、ＤＦＦ２０の出力端子Ｑ３に接続されており、出力端子からは、４ビットのグレイコードのうち、最上位ビット＜３＞の値が出力される。
以下、図２に示す不揮発性カウンタ回路１０の動作例を説明する。
【００４７】
なお、グレイコードカウンタ１１ｂから出力されるグレイコードの各ビットの値の初期値と、ＦｅＲＡＭ１２のビットｄ０〜ｄｎの初期値は０とする。また、以下では、ｎ＝４として説明する。
【００４８】
まず、カウンタ部１１への入力信号がＬレベルからＨレベルに立ち上がると、制御回路１１ｃｎｔによりロード処理が行われる。ロード処理によって、ビットｄ０〜ｄ４の値が、ＦｅＲＡＭ１２から読み出され、ビットｄ０の値は、ＴＦＦ１１ａにロードされる。ビットｄ０の初期値が０であるため、反転部１１ｃにより、ビットｄ１〜ｄ４の値は、グレイコードに戻され（ｄ０=０の場合は反転部１１ｃでは非反転のためビットｄ１〜ｄ４の値は“００００”）、グレイコードカウンタ１１ｂのＤＦＦ２０にロードされる。なお、グレイコードカウンタ１１ｂにおいて、ロードのための配線は、図３では図示が省略されている。
【００４９】
上記のロード処理によって、ＴＦＦ１１ａの２分周出力端子／Ｑからは“０”、グレイコードカウンタ１１ｂからは、グレイコード“００００”が出力されることになる。
次にカウントアップ処理が行われる。制御回路１１ｃｎｔは、ロード処理時間分の遅延をもたせてＴＦＦ１１ａへの入力値がＬレベルからＨレベルに立ち上がるようにする。これによって、ＴＦＦ１１ａは０から１にカウントアップされる（つまりＴＦＦ１１ａの出力端子Ｑから１が出力される）。
【００５０】
一方、ＴＦＦ１１ａの２分周出力端子／Ｑから出力される値は、１から０と遷移するが、グレイコードカウンタ１１ｂは、カウントアップされず、グレイコードカウンタ１１ｂから出力されるグレイコードは“００００”のままである。
【００５１】
その後、ＦｅＲＡＭ１２への書き込み処理が行われる。反転部１１ｃは、ＴＦＦ１１ａの出力端子Ｑから出力される値が１であるため、グレイコードの各ビット“００００”の値を反転して、各ビットの値が１である反転グレイコード“１１１１”を生成する。反転グレイコード“１１１１”は、ＦｅＲＡＭ１２のビットｄ１〜ｄ４に書き込まれる。また、ＴＦＦ１１ａの出力端子Ｑから出力される値である１は、ＦｅＲＡＭ１２のビットｄ０に書き込まれる。
【００５２】
その後、再びカウンタ部１１への入力信号がＬレベルからＨレベルに変化すると、制御回路１１ｃｎｔによりロード処理が行われる。ビットｄ０〜ｄ４の値が、ＦｅＲＡＭ１２から読み出されて、ＴＦＦ１１ａには１がロードされる。ビットｄ０の値は１であるため、ビットｄ１〜ｄ４の値“１１１１”は、反転部１１ｃで反転され、グレイコードカウンタ１１ｂのＤＦＦ２０に、“００００”がロードされる。
【００５３】
次にカウントアップ処理が行われる。制御回路１１ｃｎｔは、ロード処理時間分の遅延をもたせてＴＦＦ１１ａのクロック端子ＣＫへの入力値がＬレベルからＨレベルに立ち上がるようにする。これによって、ＴＦＦ１１ａは１から０にカウントアップされる（つまりＴＦＦ１１ａの出力端子Ｑから０が出力される）。
【００５４】
このときＴＦＦ１１ａの２分周出力端子／Ｑから出力される値は、０から１に立ち上がるため、カウントアップ処理が行われる。
ＤＦＦ２０のクロック端子ＣＫに入力される信号の立ち上がりで、入力端子Ｄ３，Ｄ２，Ｄ１には０が入力され、入力端子Ｄ０には１が入力された状態でこれらの値がＤＦＦ２０に取り込まれる。そのため、出力端子Ｑ３，Ｑ２，Ｑ１からは０が出力され、出力端子Ｑ０から１が出力される。これによって、グレイコードの最下位ビット＜０＞が０から１に変わり、４ビットのグレイコード、“０００１”が生成される。
【００５５】
その後、ＦｅＲＡＭ１２への書き込み処理が行われる。反転部１１ｃは、ＴＦＦ１１ａの出力端子Ｑから出力される値が０であるため、グレイコードの各ビットの値を維持して、反転グレイコード“０００１”を生成する。反転グレイコード“０００１”は、ＦｅＲＡＭ１２のビットｄ１〜ｄ４に書き込まれる。また、ＴＦＦ１１ａの出力端子Ｑから出力される値である０は、ＦｅＲＡＭ１２のビットｄ０に書き込まれる。
【００５６】
以上の動作が順次繰り返される。
図４は、計数値の一例を示す図である。
図４では、計数値が、１０進数、２進数、グレイコード＋フラグ、反転グレイコード＋フラグの４種類で示されている。なお、フラグとは、ＴＦＦ１１ａの出力端子から出力される値であり、２進数の値の最下位ビットの値に対応する。以下ではこの値を、フラグビットの値と呼ぶ。
【００５７】
反転部１１ｃは、フラグビットの値に基づき、反転グレイコードとして、グレイコードを用いるか、グレイコードの各ビットの値を反転したものを用いるかが決定している。
これによって、４ビットの反転グレイコードは、ＴＦＦ１１ａのクロック端子ＣＫへの入力信号がＬレベルからＨレベルに変化するたびに（カウンタ部１１への入力がＬレベルからＨレベルに立ち上がり、計数値が更新されるたびに）、少なくとも３ビット分の値が反転している。また、４ビット分の値が反転している箇所も多くみられる。このように、フラグビットの値を用いることで、図１の表の反転グレイコードを生成する第１の実施の形態の不揮発性カウンタ回路１よりも、ＦｅＲＡＭ１２の各ビットの値が反転する頻度が上がり、インプリントの影響が少なくなり、劣化を抑制できる。
【００５８】
なお、ＴＦＦ１１ａ、及びグレイコードカウンタ１１ｂの値は、不揮発性カウンタ回路１０の外部から読み出し可能である。その場合、図４の関係に基づき、グレイコードの値を、適宜２進数の値や１０進数の値に変換可能である。
【００５９】
（第３の実施の形態）
図５は、第３の実施の形態の不揮発性カウンタ回路の一例を示す図である。図２に示した不揮発性カウンタ回路１０と同様の要素については同一符号を付し、説明を省略する。
【００６０】
不揮発性カウンタ回路１０ａは、カウンタ部１３が、図２に示した不揮発性カウンタ回路１０のカウンタ部１１と異なっている。
カウンタ部１３は、バイナリカウンタ１１ｆと変換部１１ｇを有する。
【００６１】
バイナリカウンタ１１ｆは、入力信号がＬレベルからＨレベルに変化するたびに計数値をカウントアップする２進数のカウンタである。バイナリカウンタ１１ｆは、２分周出力端子／Ｑが後段の入力端子（クロック端子ＣＫ）に接続するように直列に接続したＴＦＦ１１ｆ０，１１ｆ１，１１ｆ２，…，１１ｆｎを有する。
【００６２】
変換部１１ｇは、バイナリカウンタ１１ｆから出力されるｎ＋１ビットの２進数の値のうち、ＴＦＦ１１ｆ０の出力端子Ｑから出力される最下位ビット（ＬＳＢ）を除く、ｎビットの値からグレイコードを生成する。なお、ｎビットの２進数の値は、ＴＦＦ１１ｆ１〜１１ｆｎの出力端子Ｑから出力される。また、変換部１１ｇは、反転部１１ｃによって反転グレイコードから変換されたグレイコードを、さらに２進数の値に変換する。
【００６３】
変換部１１ｇは、たとえば、以下に示すような２進数の値とグレイコードとの関係を満たすように、２進数の値からグレイコード、グレイコードから２進数の値を生成する回路を含む。
【００６４】
図６は、計数値の一例を示す図である。
図６では、計数値が、１０進数、２進数＋フラグ、グレイコード＋フラグ、反転グレイコード＋フラグの４種類で示されている。なお、フラグとは、ＴＦＦ１１ｆ０の出力端子Ｑから出力される値であり、前述したフラグビットの値に相当する。
【００６５】
なお、変換部１１ｇは、たとえば、図示しないプロセッサによって実現されるようにしてもよい。その場合、プロセッサは、図６に示したようなテーブルに基づき、２進数の値からグレイコード、グレイコードから２進数の値を生成する。
【００６６】
以下、図５に示す不揮発性カウンタ回路１０ａの動作例を説明する。
なお、ＴＦＦ１１ｆ０〜１１ｆｎの出力端子Ｑから出力される値の初期値と、ＦｅＲＡＭ１２のビットｄ０〜ｄｎの初期値は０とする。以下では、ｎ＝３として説明する。
【００６７】
まず、カウンタ部１３への入力信号がＬレベルからＨレベルに立ち上がると、制御回路１１ｃｎｔによりロード処理が行われる。ロード処理によって、ビットｄ０〜ｄ３の値が、ＦｅＲＡＭ１２から読み出され、ビットｄ０の値は、ＴＦＦ１１ｆ０にロードされる。ビットｄ０の初期値が０であるため、反転部１１ｃにより、ビットｄ１〜ｄ３の値は、グレイコードに戻される（ｄ０＝０の場合は反転部１１ｃでは非反転のためビットｄ１〜ｄ３の値は“０００”）。さらに、グレイコードは、変換部１１ｇで２進数の値に変換されたのちに、ＴＦＦ１１ｆ１〜１１ｆ３にロードされる。初期状態では、ビットｄ０〜ｄ３は、０のため、ＴＦＦ１１ｆ０〜１１ｆ３の値は、全て０となる。
【００６８】
次にカウントアップ処理が行われる。制御回路１１ｃｎｔは、ロード処理時間分の遅延をもたせてＴＦＦ１１ｆ０のクロック端子ＣＫへの入力信号がＬレベルからＨレベルに立ち上がるようにする。これによって、ＴＦＦ１１ｆ０は０から１にカウントアップされる（つまりＴＦＦ１１ｆ０の出力端子Ｑから１が出力される）。
【００６９】
一方、ＴＦＦ１１ｆ０の２分周出力端子／Ｑから出力される値は、０となるため、後段のＴＦＦ１１ｆ１，１１ｆ２，１１ｆ３は、まだカウントアップされず、“０００”を維持する。
【００７０】
その後、ＦｅＲＡＭ１２への書き込み処理が行われる。変換部１１ｇは、２進数の値“０００”を変換して、グレイコード“０００”を生成する。反転部１１ｃは、ＴＦＦ１１ｆ０の出力端子Ｑから出力される値が１であるため、グレイコードの各ビットの値を反転して、各ビットの値が１である反転グレイコード“１１１”を生成する。反転グレイコード“１１１”は、ＦｅＲＡＭ１２のビットｄ１〜ｄ３に書き込まれる。また、ＴＦＦ１１ｆ０の出力端子Ｑから出力される値である１は、ＦｅＲＡＭ１２のビットｄ０に書き込まれる。
【００７１】
その後、再びカウンタ部１１への入力信号ＬレベルからＨレベルに変化すると、制御回路１１ｃｎｔによりロード処理が行われる。ビットｄ０〜ｄ４の値が、ＦｅＲＡＭ１２から読み出され、ＴＦＦ１１ｆ０には１がロードされる。ビットｄ０の値は１であるため、ビットｄ１〜ｄ３の値“１１１”は、反転部１１ｃで反転される。そのため、“０００”が、グレイコードから２進数への変換を行う変換部１１ｇに供給される。変換部１１ｇで２進数化された“０００”がＴＦＦ１１ｆ１，１１ｆ２，１１ｆ３にロードされる。
【００７２】
次にカウントアップ処理が行われる。制御回路１１ｃｎｔは、ロード処理時間分の遅延をもたせてＴＦＦ１１ｆ０のクロック端子ＣＫへの入力信号がＬレベルからＨレベルに立ち上がるようにする。これによって、ＴＦＦ１１ｆ０は１から０にカウントアップされる（つまりＴＦＦ１１ｆ０の出力端子Ｑから０が出力される）。
【００７３】
このときＴＦＦ１１ｆ０の２分周出力端子／Ｑから出力される値は、０から１に立ち上がるため、ＴＦＦ１１ｆ１もカウントアップされ、出力端子Ｑからは１が出力される。ただし、ＴＦＦ１１ｆ１の２分周出力端子／Ｑから出力される値は、１から０へ遷移するため、ＴＦＦ１１ｆ１，ＴＦＦ１１ｆ２は、カウントアップされず０のままである。したがって、ＴＦＦ１１ｆ０〜１１ｆ２の２進数の値は、“００１”となる。
【００７４】
その後、ＦｅＲＡＭ１２への書き込み処理が行われる。バイナリカウンタ１１ｆから変換部１１ｇに供給される３ビットの２進数の値は“００１”であるため、変換部１１ｇにてグレイコード“００１”に変換される。反転部１１ｃは、ＴＦＦ１１ｆ０の出力端子Ｑから出力される値が０であるため、グレイコードの各ビットの値をそのまま維持して、反転グレイコード“００１”を生成する。反転グレイコード“００１”は、ＦｅＲＡＭ１２のビットｄ１〜ｄ３に書き込まれる。また、ＴＦＦ１１ｆ０の出力端子Ｑから出力される値である０は、ＦｅＲＡＭ１２のビットｄ０に書き込まれる。
【００７５】
以上の動作が繰り返される。これによって、図６に示したような反転グレイコードが得られる。
なお、バイナリカウンタ１１ｆの値は、不揮発性カウンタ回路１０ａの外部から読み出し可能である。
【００７６】
図６に示されているように、３ビットの反転グレイコードは、ＴＦＦ１１ｆ０のクロック端子ＣＫへの入力信号がＬレベルからＨレベルに変化するたびに（１０進数の値や２進数＋フラグが更新されるたびに）、少なくとも２ビット分の値が反転している。また、３ビット分の値が反転している箇所も多くみられる。このように、フラグを用いることで、第１の実施の形態の不揮発性カウンタ回路１よりも、ＦｅＲＡＭ１２の各ビットの値が反転する頻度が上がり、インプリントの影響が少なくなり、劣化を抑制できる。また、バイナリカウンタ１１ｆを用いているため、計数値の把握が容易である。
【００７７】
なお、上記ではＴＦＦをシリーズ接続した、リップルバイナリカウンタを例に説明したが、ＤＦＦを用いた同期式のバイナリカウンタを用いても同様の効果が得られる。
（第４の実施の形態）
図７は、第４の実施の形態の不揮発性カウンタ回路の一例を示す図である。図２に示した不揮発性カウンタ回路１０と同様の要素については同一符号を付し、説明を省略する。
【００７８】
不揮発性カウンタ回路１０ｂは、カウンタ部１４が、図２に示した不揮発性カウンタ回路１０のカウンタ部１１と異なっている。
カウンタ部１４は、前述した制御回路１１ｃｎｔのほか、反転グレイコードカウンタ１１ｈを有する。
【００７９】
反転グレイコードカウンタ１１ｈは、クロック端子ＣＫへの入力信号がＬレベルからＨレベルに変化するたびに、ｎビットのインクリメントした反転グレイコードを生成して出力する。
【００８０】
図８は、反転グレイコードカウンタの一例を示す図である。
図８では、図７の反転グレイコードカウンタ１１ｈの例として、４ビットの反転グレイコードカウンタ１１ｈ１の一例が示されている。反転グレイコードカウンタ１１ｈ１は、図１に示したような反転グレイコードを生成するものである。以下では、この反転グレイコードを第１の反転グレイコードという。
【００８１】
反転グレイコードカウンタ１１ｈ１は、４ビットのＤＦＦ５０を有する。また、反転グレイコードカウンタ１１ｈ１は、ＮＡＮＤ回路５１，５２、ＡＮＤ回路５３，５４、ＮＯＲ回路５５、ＡＮＤ回路５６，５７、ＮＯＲ回路５８、インバータ回路５９、ＡＮＤ回路６０，６１、ＮＯＲ回路６２、ＯＲ回路６３、ＮＡＮＤ回路６４を有する。さらに、反転グレイコードカウンタ１１ｈ１は、ＡＮＤ回路６５，６６、ＮＯＲ回路６７、インバータ回路６８，６９，７０，７１、バッファ回路７２，７３を有する。
【００８２】
ＤＦＦ５０は、クロック端子ＣＫに、制御回路１１ｃｎｔから出力される信号が入力される入力端子ＩＮが接続されている。また、ＤＦＦ５０は、入力端子Ｄ０，Ｄ１，Ｄ２，Ｄ３、出力端子Ｑ０，Ｑ１，Ｑ２，Ｑ３を有する。ＤＦＦ５０は、入力信号がＬレベルからＨレベル（０から１）に変化するたびに、入力端子Ｄ０〜Ｄ３に入力される値を取り込む。
【００８３】
ＮＡＮＤ回路５１の一方の入力端子は、ＤＦＦ５０の出力端子Ｑ１から出力される信号の論理レベルを反転した信号を入力し、他方の入力端子は、ＤＦＦ５０の出力端子Ｑ０に接続されている。ＮＡＮＤ回路５１の出力端子は、ＡＮＤ回路５６，５７の一方の入力端子に接続されているとともに、ＮＡＮＤ回路６４の一方の入力端子に接続されている。
【００８４】
ＮＡＮＤ回路５２の一方の入力端子は、ＤＦＦ５０の出力端子Ｑ０に接続されており、他方の入力端子は、ＤＦＦ５０の出力端子Ｑ１に接続されている。ＮＡＮＤ回路５２の出力端子は、ＡＮＤ回路６０の一方の入力端子に接続されているとともに、インバータ回路５９を介してＡＮＤ回路６１の一方の入力端子に接続されている。
【００８５】
ＡＮＤ回路５３は、２つの入力信号の論理レベルをそれぞれ反転したのちにＡＮＤ論理演算を行うものであり、一方の入力端子は、ＤＦＦ５０の出力端子Ｑ２に接続されており、他方の入力端子は、ＤＦＦ５０の出力端子Ｑ３に接続されている。ＡＮＤ回路５３の出力端子は、ＮＯＲ回路５５の一方の入力端子に接続されている。
【００８６】
ＡＮＤ回路５４の一方の入力端子は、ＤＦＦ５０の出力端子Ｑ３に接続されており、他方の入力端子は、ＤＦＦ５０の出力端子Ｑ２に接続されている。ＡＮＤ回路５４の出力端子は、ＮＯＲ回路５５の他方の入力端子に接続されている。ＮＯＲ回路５５の出力端子は、ＯＲ回路６３の一方の入力端子及びＡＮＤ回路６５，６６の一方の入力端子に接続されている。
【００８７】
ＡＮＤ回路５６は、２つの入力信号の論理レベルをそれぞれ反転したのちにＡＮＤ論理演算を行うものであり、一方の入力端子は、ＮＡＮＤ回路５１の出力端子に接続されており、他方の入力端子は、ＤＦＦ５０の出力端子Ｑ３に接続されている。ＡＮＤ回路５６の出力端子は、ＮＯＲ回路５８の一方の入力端子に接続されている。
【００８８】
ＡＮＤ回路５７の一方の入力端子は、ＮＡＮＤ回路５１の出力端子に接続されており、他方の入力端子は、ＤＦＦ５０の出力端子Ｑ２に接続されている。ＡＮＤ回路５７の出力端子は、ＮＯＲ回路５８の他方の入力端子に接続されている。ＮＯＲ回路５８の出力端子は、ＤＦＦ５０の入力端子Ｄ２に接続されている。
【００８９】
ＡＮＤ回路６０の一方の入力端子は、ＮＡＮＤ回路５２の出力端子に接続されており、他方の入力端子は、ＤＦＦ５０の出力端子Ｑ３に接続されている。ＡＮＤ回路６０の出力端子は、ＮＯＲ回路６２の一方の入力端子に接続されている。
【００９０】
ＡＮＤ回路６１の一方の入力端子は、インバータ回路５９の出力端子に接続されており、他方の入力端子は、ＤＦＦ５０の出力端子Ｑ２に接続されている。ＡＮＤ回路６１の出力端子は、ＮＯＲ回路６２の他方の入力端子に接続されている。ＮＯＲ回路６２の出力端子は、ＤＦＦ５０の入力端子Ｄ３に接続されている。
【００９１】
ＯＲ回路６３の一方の入力端子は、ＮＯＲ回路５５の出力端子に接続されており、他方の入力端子は、ＤＦＦ５０の出力端子Ｑ０に接続されている。ＯＲ回路６３の出力端子は、ＮＡＮＤ回路６４の他方の入力端子に接続されている。ＮＡＮＤ回路６４の出力端子は、ＤＦＦ５０の入力端子Ｄ１に接続されている。
【００９２】
ＡＮＤ回路６５は、２つの入力信号の論理レベルをそれぞれ反転したのちにＡＮＤ論理演算を行うものであり、一方の入力端子は、ＮＯＲ回路５５の出力端子に接続されており、他方の入力端子は、ＤＦＦ５０の出力端子Ｑ１に接続されている。ＡＮＤ回路６５の出力端子は、ＮＯＲ回路６７の一方の入力端子に接続されている。
【００９３】
ＡＮＤ回路６６の一方の入力端子は、ＮＯＲ回路５５の出力端子に接続されており、他方の入力端子は、ＤＦＦ５０の出力端子Ｑ１に接続されている。ＡＮＤ回路６６の出力端子は、ＮＯＲ回路６７の他方の入力端子に接続されている。ＮＯＲ回路６７の出力端子は、ＤＦＦ５０の入力端子Ｄ０に接続されている。
【００９４】
インバータ回路６８の入力端子は、ＤＦＦ５０の出力端子Ｑ０に接続されており、出力端子はインバータ回路６９の入力端子に接続されている。インバータ回路６９の出力端子から、４ビットの反転グレイコードのうち、最下位ビット＜０＞の値が出力される。
【００９５】
インバータ回路７０の入力端子は、ＤＦＦ５０の出力端子Ｑ２に接続されており、出力端子はインバータ回路７１の入力端子に接続されている。インバータ回路７１の出力端子から、４ビットの反転グレイコードのうち、最上位ビットの１つ下位のビット＜２＞の値が出力される。
【００９６】
バッファ回路７２の入力端子は、ＤＦＦ５０の出力端子Ｑ３に接続されており、出力端子からは、４ビットの反転グレイコードのうち、最上位ビット＜３＞の値が出力される。
バッファ回路７３の入力端子は、ＤＦＦ５０の出力端子Ｑ１に接続されており、出力端子からは、４ビットの反転グレイコードのうち、最下位ビットの１つ上位のビット＜１＞の値が出力される。
【００９７】
以下、４ビットの反転グレイコードカウンタ１１ｈ１を用いたときの不揮発性カウンタ回路１０ｂの動作例を説明する。
なお、反転グレイコードカウンタ１１ｈ１から出力される反転グレイコードの各ビットの値の初期値と、ＦｅＲＡＭ１２のビットｄ０〜ｄｎの初期値は０とする。以下では、ｎ＝３として説明する。
【００９８】
まず、カウンタ部１４への入力信号がＬレベルからＨレベルに立ち上がると、制御回路１１ｃｎｔによりロード処理が行われる。ロード処理によって、ビットｄ０〜ｄ３の値が、ＦｅＲＡＭ１２から読み出され、ビットｄ０〜ｄ３の値は、反転グレイコードカウンタ１１ｈ１のＤＦＦ５０にロードされる。なお、このロード処理のための配線は、図８では図示が省略されている。
【００９９】
ＤＦＦ５０に、“００００”がロードされている状態では、ＤＦＦ５０の入力端子Ｄ３，Ｄ２，Ｄ１には１が入力され、入力端子Ｄ０には０が入力される。そのため、反転グレイコードカウンタ１１ｈ１への入力信号がＬレベルからＨレベルに変化すると、これらの値がＤＦＦ５０に取り込まれる。そのため、出力端子Ｑ３，Ｑ２，Ｑ１からは１が出力され、出力端子Ｑ０から０が出力される。これによって、４ビットの第１の反転グレイコード、“１１１０”が生成される。
【０１００】
第１の反転グレイコード“１１１０”は、ＦｅＲＡＭ１２のビットｄ０〜ｄ３に書き込まれる。
以上の動作が繰り返され、図１に示したような、カウンタ部２への入力信号がＬレベルからＨレベルに変化するたび（２進数の値がカウントアップされるたび）、３ビット分の値が反転し、第１の実施の形態の不揮発性カウンタ回路１と同様の効果が得られる。
【０１０１】
ところで、図７に示した反転グレイコードカウンタ１１ｈの他の例として、以下に示すようなものを用いてもよい。
図９は、反転グレイコードカウンタの他の例を示す図である。
【０１０２】
図９では、図７の反転グレイコードカウンタ１１ｈの他の例として、４ビットの反転グレイコードカウンタ１１ｈ２の一例が示されている。
反転グレイコードカウンタ１１ｈ２は、後述の図１０に示すような反転グレイコードを生成するものである。以下では、この反転グレイコードを第２の反転グレイコードという。
【０１０３】
反転グレイコードカウンタ１１ｈ２は、４ビットのＤＦＦ８０を有する。また、反転グレイコードカウンタ１１ｈ２は、インバータ回路８１、ＯＲ回路８２、ＮＡＮＤ回路８３，８４、ＡＮＤ回路８５，８６、ＮＯＲ回路８７、ＯＲ回路８８、ＮＡＮＤ回路８９、ＡＮＤ回路９０，９１、ＮＯＲ回路９２を有する。さらに、反転グレイコードカウンタ１１ｈ２は、ＡＮＤ回路９３，９４、ＮＯＲ回路９５、インバータ回路９６，９７，９８，９９，１００，１０１，１０２を有する。
【０１０４】
ＤＦＦ８０は、図８に示したＤＦＦ５０と同様のものである。
インバータ回路８１の入力端子は、ＤＦＦ８０の出力端子Ｑ３に接続されている。また、インバータ回路８１の出力端子は、ＯＲ回路８２の一方の入力端子、ＯＲ回路８８の３つの入力端子のうち第１の入力端子、ＡＮＤ回路９４の一方の入力端子、インバータ回路１０２の入力端子、及びＤＦＦ８０の入力端子Ｄ３に接続されている。
【０１０５】
ＯＲ回路８２の他方の入力端子は、ＤＦＦ８０の出力端子Ｑ０に接続されており、出力端子はＮＡＮＤ回路８３の一方の入力端子に接続されている。ＮＡＮＤ回路８３の他方の入力端子は、インバータ回路９８の出力端子に接続されている。ＮＡＮＤ回路８３の出力端子は、ＮＡＮＤ回路８９の一方の入力端子に接続されている。
【０１０６】
ＮＡＮＤ回路８４の一方の入力端子は、ＤＦＦ８０の出力端子Ｑ３に接続されており、他方の入力端子は、ＤＦＦ８０の出力端子Ｑ０に接続されている。ＮＡＮＤ回路８４の出力端子は、ＡＮＤ回路９０，９１の一方の入力端子に接続されている。
【０１０７】
ＡＮＤ回路８５の一方の入力端子は、ＤＦＦ８０の出力端子Ｑ２に接続されており、他方の入力端子は、ＤＦＦ８０の出力端子Ｑ１に接続されている。ＡＮＤ回路８５の出力端子は、ＮＯＲ回路８７の一方の入力端子に接続されている。
【０１０８】
ＡＮＤ回路８６の一方の入力端子は、インバータ回路９８の出力端子に接続されており、他方の入力端子は、インバータ回路９６の出力端子に接続されている。ＡＮＤ回路８６の出力端子は、ＮＯＲ回路８７の他方の入力端子に接続されている。ＮＯＲ回路８７の出力端子は、ＡＮＤ回路９３の一方の入力端子に接続されている。
【０１０９】
ＯＲ回路８８は、３つの入力端子を有し、第１の入力端子は、インバータ回路８１の出力端子に接続されており、第２の入力端子は、ＤＦＦ８０の出力端子Ｑ０に接続されており、第３の入力端子は、インバータ回路９６の出力端子に接続されている。ＯＲ回路８８の出力端子は、ＮＡＮＤ回路８９の他方の入力端子に接続されている。ＮＡＮＤ回路８９の出力端子は、ＤＦＦ８０の入力端子Ｄ１に接続されている。
【０１１０】
ＡＮＤ回路９０は、２つの入力信号の論理レベルをそれぞれ反転したのちにＡＮＤ論理演算を行うものであり、一方の入力端子は、ＮＡＮＤ回路８４の出力端子に接続されており、他方の入力端子は、インバータ回路９８の出力端子に接続されている。ＡＮＤ回路９０の出力端子は、ＮＯＲ回路９２の一方の入力端子に接続されている。
【０１１１】
ＡＮＤ回路９１の一方の入力端子は、ＮＡＮＤ回路８４の出力端子に接続されており、他方の入力端子は、ＤＦＦ８０の出力端子Ｑ２に接続されている。ＡＮＤ回路９１の出力端子は、ＮＯＲ回路９２の他方の入力端子に接続されている。ＮＯＲ回路９２の出力端子は、ＤＦＦ８０の入力端子Ｄ２に接続されている。
【０１１２】
ＡＮＤ回路９３の一方の入力端子は、ＮＯＲ回路８７の出力端子に接続されており、他方の入力端子は、ＤＦＦ８０の出力端子Ｑ３に接続されている。ＡＮＤ回路９３の出力端子は、ＮＯＲ回路９５の一方の入力端子に接続されている。
【０１１３】
ＡＮＤ回路９４の一方の入力端子は、インバータ回路８１の出力端子に接続されており、他方の入力端子は、ＤＦＦ８０の出力端子Ｑ０に接続されている。ＡＮＤ回路９４の出力端子は、ＮＯＲ回路９５の他方の入力端子に接続されている。ＮＯＲ回路９５の出力端子は、ＤＦＦ８０の入力端子Ｄ０に接続されている。
【０１１４】
インバータ回路９６の入力端子は、ＤＦＦ８０の出力端子Ｑ２に接続されており、出力端子はインバータ回路９７の入力端子に接続されている。インバータ回路９７の出力端子から、４ビットの反転グレイコードのうち、最上位ビットの１つ下位のビット＜２＞の値が出力される。
【０１１５】
インバータ回路９８の入力端子は、ＤＦＦ８０の出力端子Ｑ１に接続されており、出力端子はインバータ回路９９の入力端子に接続されている。インバータ回路９９の出力端子から、４ビットの反転グレイコードのうち、最下位ビットの１つ上位のビット＜１＞の値が出力される。
【０１１６】
インバータ回路１００の入力端子は、ＤＦＦ８０の出力端子Ｑ０に接続されており、出力端子はインバータ回路１０１の入力端子に接続されている。インバータ回路１０１の出力端子から、４ビットの反転グレイコードのうち、最下位ビット＜０＞の値が出力される。
【０１１７】
インバータ回路１０２の入力端子は、インバータ回路８１の出力端子に接続されており、出力端子からは、４ビットの反転グレイコードのうち、最上位ビット＜３＞の値が出力される。
【０１１８】
以下、図９に示したような４ビットの反転グレイコードカウンタ１１ｈ２を用いたときの不揮発性カウンタ回路１０ｂの動作例を説明する。
なお、反転グレイコードカウンタ１１ｈ２から出力される反転グレイコードの各ビットの値の初期値と、ＦｅＲＡＭ１２のビットｄ０〜ｄｎの初期値は０とする。以下では、ｎ＝３として説明する。
【０１１９】
まず、カウンタ部１４への入力信号がＬレベルからＨレベルに立ち上がると、制御回路１１ｃｎｔによりロード処理が行われる。ロード処理によって、ビットｄ０〜ｄ３の値が、ＦｅＲＡＭ１２から読み出され、ビットｄ０〜ｄ３の値は、反転グレイコードカウンタ１１ｈ２のＤＦＦ８０にロードされる。なお、ＤＦＦ８０に対するロード処理のための回路は、図９では図示が省略されている。
【０１２０】
ＤＦＦ８０に、“００００”がロードされている状態では、ＤＦＦ８０の入力端子Ｄ０〜Ｄ３には１が入力される。そのため、反転グレイコードカウンタ１１ｈ２への入力信号がＬレベルからＨレベルに変化すると、これらの値がＤＦＦ８０に取り込まれる。そのため、出力端子Ｑ０〜Ｑ３からは１が出力される。これによって、４ビットの第２の反転グレイコード、“１１１１”が生成される。
【０１２１】
第２の反転グレイコード“１１１１”は、ＦｅＲＡＭ１２のビットｄ０〜ｄ３に書き込まれる。
以上の動作が繰り返されると、以下のような第２の反転グレイコードが得られる。
【０１２２】
図１０は、計数値の一例を示す図である。
計数値が、１０進数、２進数、グレイコード、第２の反転グレイコードの４種類で示されている。なお、第４の実施の形態の不揮発性カウンタ回路１０ｂでは、グレイコードは生成されないが、生成される第２の反転グレイコードとの比較のために図１０に記載されている。
【０１２３】
図１０に示されているように、４ビットの第２の反転グレイコードは、入力信号がＬレベルからＨレベルに変化するたびに（１０進数や２進数の値が更新されるたびに）、少なくとも３ビット分の値が反転している。また、４ビット分の値が反転している箇所も多くみられる。
【０１２４】
図１０に示される第２の反転グレイコードは、計数値の更新を指示する入力信号を２回受けるたびに１ビット分の値が変化するグレイコードと、そのグレイコードの各ビットの値を反転させたものとを、その入力信号を受けるたびに交互に用いたものである。言い換えると、第２の反転グレイコードは、入力信号がＬレベルからＨレベルに変化する周期に対して２分周で変化するグレイコードを、入力信号が変化する上記の周期で反転と非反転を繰り返したものに相当する。
【０１２５】
上記のような第２の反転グレイコードを生成する反転グレイコードカウンタ１１ｈ２を用いることで、第１の実施の形態の不揮発性カウンタ回路１よりも、ＦｅＲＡＭ１２の各ビットの値が反転する頻度が上がる。そのため、インプリントの影響が少なくなり、劣化を抑制できる。
【０１２６】
なお、反転グレイコードカウンタ１１ｈは、４ビットの反転グレイコードを生成するものに限らず、奇数ビット、たとえば、３ビットの反転グレイコードを生成するものであってもよい。
【０１２７】
図１１は、３ビットの反転グレイコードを生成する反転グレイコードカウンタの一例を示す図である。
図１１では、図７の反転グレイコードカウンタ１１ｈの他の例として、３ビットの反転グレイコードカウンタ１１ｈ３の一例が示されている。
【０１２８】
反転グレイコードカウンタ１１ｈ３は、図９に示した反転グレイコードカウンタ１１ｈ２と同様の方式で、３ビットの第２の反転グレイコードを生成するものである。
反転グレイコードカウンタ１１ｈ３は、それぞれ１ビットのＤＦＦ１１０，１１１，１１２を有する。また、反転グレイコードカウンタ１１ｈ３は、インバータ回路１１３、ＡＮＤ回路１１４，１１５、ＮＯＲ回路１１６、ＡＮＤ回路１１７，１１８、ＮＯＲ回路１１９、インバータ回路１２０，１２１，１２２，１２３，１２４を有する。
【０１２９】
ＤＦＦ１１０〜１１２は、それぞれ入力端子Ｄ、クロック端子ＣＫ、出力端子Ｑを有している。クロック端子ＣＫには、制御回路１１ｃｎｔから出力される信号が入力される入力端子ＩＮが接続されている。ＤＦＦ１１０〜１１２は、制御回路１１ｃｎｔから出力される信号がＬレベルからＨレベル（０から１）に変化するたびに、入力端子Ｄに入力される値を取り込む。
【０１３０】
インバータ回路１１３の入力端子は、ＤＦＦ１１０の出力端子Ｑに接続されている。また、インバータ回路１１３の出力端子は、ＤＦＦ１１０の入力端子Ｄ、ＡＮＤ回路１１５，１１７，１１８の一方の入力端子、及びインバータ回路１２４の入力端子に接続されている。
【０１３１】
ＡＮＤ回路１１４の一方の入力端子は、ＤＦＦ１１０の出力端子Ｑに接続されており、他方の入力端子は、ＤＦＦ１１２の出力端子Ｑに接続されている。ＡＮＤ回路１１４の出力端子は、ＮＯＲ回路１１６の一方の入力端子に接続されている。
【０１３２】
ＡＮＤ回路１１５の一方の入力端子は、インバータ回路１１３の出力端子に接続されており、他方の入力端子は、ＤＦＦ１１１の出力端子Ｑに接続されている。ＡＮＤ回路１１５の出力端子は、ＮＯＲ回路１１６の他方の入力端子に接続されている。ＮＯＲ回路１１６の出力端子は、ＤＦＦ１１１の入力端子Ｄに接続されている。
【０１３３】
ＡＮＤ回路１１７は、２つの入力信号の論理レベルをそれぞれ反転したのちにＡＮＤ論理演算を行うものであり、一方の入力端子は、インバータ回路１１３の出力端子に接続されており、他方の入力端子は、ＤＦＦ１１１の出力端子Ｑに接続されている。ＡＮＤ回路１１７の出力端子はＮＯＲ回路１１９の一方の入力端子に接続されている。
【０１３４】
ＡＮＤ回路１１８の一方の入力端子は、インバータ回路１１３の出力端子に接続されており、他方の入力端子は、ＤＦＦ１１２の出力端子Ｑに接続されている。ＡＮＤ回路１１８の出力端子は、ＮＯＲ回路１１９の他方の入力端子に接続されている。ＮＯＲ回路１１９の出力端子は、ＤＦＦ１１２の入力端子Ｄに接続されている。
【０１３５】
インバータ回路１２０の入力端子は、ＤＦＦ１１２の出力端子Ｑに接続されており、出力端子は、インバータ回路１２１の入力端子に接続されている。インバータ回路１２１の出力端子から、３ビットの第２の反転グレイコードのうち、最下位ビット＜０＞の値が出力される。
【０１３６】
インバータ回路１２２の入力端子は、ＤＦＦ１１１の出力端子Ｑに接続されており、出力端子は、インバータ回路１２３の入力端子に接続されている。インバータ回路１２３の出力端子から、３ビットの第２の反転グレイコードのうち、最下位ビットの１つ上位のビット＜１＞の値が出力される。
【０１３７】
インバータ回路１２４の入力端子は、インバータ回路１１３の出力端子に接続されており、出力端子からは、３ビットの第２の反転グレイコードのうち、最上位ビット＜２＞の値が出力される。
【０１３８】
上記のような反転グレイコードカウンタ１１ｈ３を用いた場合、以下のような第２の反転グレイコードが生成される。
図１２は、計数値の一例を示す図である。
【０１３９】
計数値が、１０進数、２進数、グレイコード、第２の反転グレイコードの４種類で示されている。なお、上記のように、第４の実施の形態の不揮発性カウンタ回路１０ｂでは、グレイコードは生成されないが、生成される３ビットの第２の反転グレイコードとの比較のために図１２に記載されている。
【０１４０】
図１２に示されているように、３ビットの第２の反転グレイコードは、入力信号がＬレベルからＨレベルに変化するたびに（１０進数や２進数の値が更新されるたびに）、少なくとも２ビット分の値が反転している。また、３ビット分の値が反転している箇所も多くみられる。
【０１４１】
図１２に示される第２の反転グレイコードは、入力信号がＬレベルからＨレベルに変化する周期に対して２分周で変化するグレイコードを、制御回路１１ｃｎｔから出力される信号が変化する上記の周期で反転と非反転を繰り返したものに相当する。
【０１４２】
以上のように、３ビットの反転グレイコードカウンタ１１ｈ３を用いた場合でも、４ビットの反転グレイコードカウンタ１１ｈ２を用いた場合と同様の効果が得られる。
なお、図７に示した不揮発性カウンタ回路１０ｂにおいて、反転グレイコードカウンタ１１ｈの値（たとえば、図８のＤＦＦ５０に書き込まれた値）は、不揮発性カウンタ回路１０ｂの外部から読み出し可能である。その場合、用いる反転グレイコードカウンタ１１ｈの種類に応じた、反転グレイコードと２進数または１０進数の値との関係に基づき、反転グレイコードから、２進数または１０進数の値に変換可能である。
【０１４３】
（第５の実施の形態）
図１３は、第５の実施の形態の不揮発性カウンタ回路の一例を示す図である。図５に示した不揮発性カウンタ回路１０ａと同様の要素については同一符号を付し、説明を省略する。
【０１４４】
不揮発性カウンタ回路１０ｃは、カウンタ部１５が、図５に示した不揮発性カウンタ回路１０ａのカウンタ部１３と異なっている。カウンタ部１５は、制御回路１１ｃｎｔとバイナリカウンタ１１ｆの他に変換部１１ｉを有しており、図５に示したような反転部１１ｃを有していない。
【０１４５】
変換部１１ｉは、バイナリカウンタ１１ｆから出力されるｎ＋１ビットの２進数の値から、反転グレイコードを生成する。また、変換部１１ｉは、ＦｅＲＡＭ１２から出力される反転グレイコードを、２進数の値に変換する。
【０１４６】
変換部１１ｉは、たとえば、図１、図１０、図１２に示したような２進数の値と反転グレイコードとの関係を満たすように、２進数の値から反転グレイコード、反転グレイコードから２進数の値を生成する回路を含む。
【０１４７】
図１４は、２進数の値から反転グレイコードを生成する回路の一例を示す図である。
変換部１１ｉは、たとえば、グレイコード生成部１１ｉ１とＥｘＯＲ回路１１ｉ２を有する。なお、ＥｘＯＲ回路１１ｉ２は、２進数の値のビット数に対応してｎ＋１個あるが図１４では１つにまとめて図示されている。
【０１４８】
グレイコード生成部１１ｉ１は、バイナリカウンタ１１ｆから出力されるｎ＋１ビットの２進数の値から、ｎ＋１ビットのグレイコードを生成する。
ＥｘＯＲ回路１１ｉ２は、ｎ＋１ビットの２進数の値のうち、ＬＳＢの値が１のときは、グレイコード生成部１１ｉ１が生成したｎ＋１ビットのグレイコードの各ビットの値を反転し、ＬＳＢの値が０のときは、グレイコードの各ビットの値を反転せずに出力する。
【０１４９】
これによって、ｎ＝３のときは、図１に示したような反転グレイコードが２進数の値から生成される。
図１５は、反転グレイコードから２進数の値を生成する回路の一例を示す図である。
【０１５０】
変換部１１ｉは、たとえば、インバータ回路１１ｉ３、２進数値生成部１１ｉ４，１１ｉ５、セレクタ１１ｉ６を有する。なお、インバータ回路１１ｉ３は、反転グレイコードのビット数に対応してｎ＋１個あるが図１５では１つにまとめて図示されている。
【０１５１】
インバータ回路１１ｉ３は、ｎ＋１ビットの反転グレイコードの各ビットの値を反転する。
２進数値生成部１１ｉ４，１１ｉ５はグレイコードから２進数の値を生成する回路である。２進数値生成部１１ｉ４は、インバータ回路１１ｉ３から出力される反転グレイコードの各ビットの値を反転したものをグレイコードとして入力し、２進数の値を生成する。２進数値生成部１１ｉ５は、反転グレイコードをグレイコードとして入力し、２進数の値を生成する。
【０１５２】
セレクタ１１ｉ６は、２進数値生成部１１ｉ５で生成された２進数の値のＬＳＢの値が１のときは、２進数値生成部１１ｉ４で生成された２進数の値を選択して出力する。セレクタ１１ｉ６は、ＬＳＢの値が０のときは、２進数値生成部１１ｉ５で生成された２進数の値を選択して出力する。
【０１５３】
これによって、ｎ＝３のときは、図１に示したような２進数の値が反転グレイコードから生成される。
図１６は、２進数の値から反転グレイコードを生成する回路の他の例を示す図である。
【０１５４】
変換部１１ｉは、たとえば、グレイコード生成部１１ｉ７とＥｘＯＲ回路１１ｉ８を有する。なお、ＥｘＯＲ回路１１ｉ８は、グレイコード生成部１１ｉ７から出力されるグレイコードのビット数に対応してｎ個あるが図１６では１つにまとめて図示されている。
【０１５５】
グレイコード生成部１１ｉ７は、ｎ＋１ビットの２進数の値のうち、ＬＳＢを除くｎビットの値から、グレイコードを生成する。
ＥｘＯＲ回路１１ｉ８は、２進数の値のＬＳＢの値が１のときは、グレイコード生成部１１ｉ７が生成したｎビットのグレイコードの各ビットの値を反転し、ＬＳＢの値が０のときは、グレイコードの各ビットの値を反転せずに出力する。２進数の値のＬＳＢは、反転グレイコードのＭＳＢとなる。
【０１５６】
これによって、ｎ＝３のときは、図１０に示したような反転グレイコードが、２進数の値から生成される。
また、図１０に示したような反転グレイコードから、２進数の値を生成する回路は、たとえば、以下のようになる。
【０１５７】
図１７は、反転グレイコードから２進数の値を生成する回路の例を示す図である。
変換部１１ｉは、たとえば、ＥｘＯＲ回路１１ｉ９、２進数値生成部１１ｉ１０を有する。なお、ＥｘＯＲ回路１１ｉ９は、反転グレイコードのＭＳＢを除くビット数に対応してｎ個あるが図１７では１つにまとめて図示されている。
【０１５８】
ＥｘＯＲ回路１１ｉ９は、ｎ＋１ビットの反転グレイコードのうち、ＭＳＢの値が１のときｎビットの各ビットの値を反転し、ＭＳＢの値が０のときｎビットの値を反転せずに出力する。
【０１５９】
２進数値生成部１１ｉ１０は、ＥｘＯＲ回路１１ｉ９から出力されるｎビットの値をグレイコードとして入力し、ｎビットの２進数の値を生成する。反転グレイコードのＭＳＢは、２進数の値のＬＳＢとなる。
【０１６０】
これによって、ｎ＝３のときは、図１０に示したような２進数の値が、反転グレイコードから生成される。
図１８は、反転グレイコードから２進数の値を生成する回路の他の例を示す図である。
【０１６１】
変換部１１ｉは、たとえば、インバータ回路１１ｉ１１、２進数値生成部１１ｉ１２，１１ｉ１３、セレクタ１１ｉ１４を有する。
インバータ回路１１ｉ１１は、ｎ＋１ビットの反転グレイコードのうち、ＭＳＢを除くｎビットの値をそれぞれ反転する。
【０１６２】
２進数値生成部１１ｉ１２は、インバータ回路１１ｉ１１から出力されるｎビットの値をグレイコードとして入力し、ｎビットの２進数の値を生成する。
２進数値生成部１１ｉ１３は、ｎビットの反転グレイコードをグレイコードとして入力し、ｎビットの２進数の値を生成する。
【０１６３】
セレクタ１１ｉ１４は、反転グレイコードのＭＳＢの値が１のときは、２進数値生成部１１ｉ１２で生成されたｎビットの２進数の値を出力し、ＭＳＢの値が０のときは、２進数値生成部１１ｉ１３で生成されたｎビットの２進数の値を出力する。反転グレイコードのＭＳＢは、２進数の値のＬＳＢとなる。
【０１６４】
これによって、図１７の回路と同様に、ｎ＝３のときは、図１０に示したような２進数の値が、反転グレイコードから生成される。
なお、変換部１１ｉは、図示しないプロセッサによって実現されるようにしてもよい。その場合、プロセッサは、たとえば、図１、図１０、図１２に示したようなテーブルに基づき、２進数の値から反転グレイコード、反転グレイコードから２進数の値を生成する。
【０１６５】
以上のような、不揮発性カウンタ回路１０ｃによれば、前述した各実施の形態の不揮発性カウンタ回路１，１０，１０ａ，１０ｂと同様の効果が得られる。また、図１０、図１２に示したような反転グレイコードから、２進数の値を生成する場合には、反転グレイコードのＭＳＢを２進数の値のＬＳＢにすればよいため、変換が比較的容易になる。
【０１６６】
なお、上記ではＴＦＦをシリーズ接続した、リップルバイナリカウンタを例に説明したが、ＤＦＦを用いた同期式のバイナリカウンタを用いても同様の効果が得られる。
（第６の実施の形態）
以上示した各実施の形態のカウンタ部２，１１，１３，１４，１５の機能は、たとえば、以下のようなハードウェアをもつコンピュータにて実現できる。
【０１６７】
図１９は、コンピュータの一例のハードウェア例を示す図である。
コンピュータ２００は、プロセッサ２０１、メインメモリ２０２、ＦｅＲＡＭ２０３、インタフェース回路２０４、バス２０５を有している。
【０１６８】
プロセッサ２０１は、コンピュータ２００の全体を制御している。なお、プロセッサ２０１はレジスタ２０１ａを有している。プロセッサ２０１には、バス２０５を介してＲＡＭなどのメインメモリ２０２やＦｅＲＡＭ２０３、インタフェース回路２０４の他、図示を省略しているが複数の周辺機器が接続されている。プロセッサ２０１は、マルチプロセッサであってもよい。プロセッサ２０１は、たとえばＣＰＵ（Central Processing Unit）、ＭＰＵ（Micro Processing Unit）、ＤＳＰ（Digital Signal Processor）、ＡＳＩＣ（Application Specific Integrated Circuit）、またはＰＬＤ（Programmable Logic Device）である。またプロセッサ２０１は、ＣＰＵ、ＭＰＵ、ＤＳＰ、ＡＳＩＣ、ＰＬＤのうちの２以上の要素の組み合わせであってもよい。
【０１６９】
メインメモリ２０２には、プロセッサ２０１に実行させるＯＳ（Operating System）のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、メインメモリ２０２には、プロセッサ２０１による処理に必要な各種データが格納される。
【０１７０】
ＦｅＲＡＭ２０３には、前述した反転グレイコードが計数値として記憶される。なお、ＦｅＲＡＭ２０３は、計数値以外の情報を記憶してもよい。
インタフェース回路２０４は、コンピュータ２００に周辺機器を接続するための通信インタフェースである。インタフェース回路２０４は、たとえば、メモリ装置などの可搬型記録媒体２０４ａとの間でデータの書き込みや読み出しを行う。たとえば、インタフェース回路２０４には、ＦｅＲＡＭ２０３に保持されている計数値の更新を指示するためのカウント信号が入力される。
【０１７１】
コンピュータ２００は、たとえばコンピュータ読み取り可能な記録媒体に記録されたプログラムを実行することにより、以下に示す処理機能を実現する。コンピュータ２００に実行させる処理内容を記述したプログラムは、様々な記録媒体に記録しておくことができる。たとえば、コンピュータ２００に実行させるプログラムをメインメモリ２０２や図示しないＨＤＤ（Hard Disk Drive）に格納しておくことができる。ＨＤＤにプログラムが記録される場合、プロセッサ２０１は、ＨＤＤ内のプログラムの少なくとも一部をメインメモリ２０２にロードし、プログラムを実行する。またコンピュータ２００に実行させるプログラムを、光ディスク、メモリ装置、メモリカードなどの可搬型記録媒体２０４ａに記録しておくこともできる。可搬型記録媒体２０４ａに格納されたプログラムは、たとえばプロセッサ２０１からの制御により、ＨＤＤにインストールされた後、実行可能となる。またプロセッサ２０１が、可搬型記録媒体２０４ａから直接プログラムを読み出して実行することもできる。
【０１７２】
以下、上記のようなハードウェアを有するコンピュータ２００による、ＦｅＲＡＭ２０３を用いたカウンタ動作時のメモリ制御方法の一例を説明する。
図２０は、メモリ制御方法の一例の流れを示すフローチャートである。
【０１７３】
プロセッサ２０１は、たとえば、計数値の更新を指示するカウント信号を受信するたびに（計数値の更新を指示する信号が発生するたびに）以下の処理を行う。すなわち、プロセッサ２０１は、反転グレイコードのロード処理（ステップＳ１）と、インクリメント処理（ステップＳ２）と、反転グレイコードのＦｅＲＡＭ２０３への記憶処理（ステップＳ３）を行う。
【０１７４】
カウント信号は、たとえば、図示しないＲＴＣ（Real Time Clock）回路からインタフェース回路２０４を介して、プロセッサ２０１に供給される。
以下、図１０に示したような反転グレイコードを生成する際のプロセッサ２０１による一例の処理の流れを説明する。
【０１７５】
図２１は、反転グレイコードの生成処理の一例の流れを示す図である。
プロセッサ２０１は、ＦｅＲＡＭ２０３に記憶されている反転グレイコードをレジスタ２０１ａにロードし（ステップＳ１０）、レジスタ２０１ａ上で反転グレイコードの各ビットの値を反転して、グレイコードを生成する（ステップＳ１１）。
【０１７６】
そして、プロセッサ２０１は、グレイコードのＭＳＢが１であるか否かを判定する（ステップＳ１２）。ＭＳＢが０であるときには（元々保持されていたＭＳＢが１の場合）、プロセッサ２０１は、レジスタ２０１ａ上でグレイコードから２進数の値を生成する（ステップＳ１３）。さらに、プロセッサ２０１は、生成した２進数の値を＋１し（ステップＳ１４）、その値に基づき、正論理グレイコードを反転グレイコードとして生成する（ステップＳ１５）。なお、正論理グレイコードとは、グレイコードの各ビットに対して、各ビット値が正論理のグレイコードである。
【０１７７】
そして、プロセッサ２０１は、生成した反転グレイコードをレジスタ２０１ａからＦｅＲＡＭ２０３に記憶する（ステップＳ１６）。また、プロセッサ２０１は、ステップＳ１２の処理でＭＳＢ＝１と判定したときには（元々保持されていたＭＳＢが０の場合）、ステップＳ１１の処理で生成した負論理グレイコードを反転グレイコードとして、ＦｅＲＡＭ２０３に記憶する。なお、負論理グレイコードとは、グレイコードの各ビットに対して、各ビット値が負論理のグレイコードである。
【０１７８】
ステップＳ１３の２進数の値を生成する処理は、たとえば、以下のように行われる。
図２２は、２進数の値の生成処理の一例の流れを示す図である。
なお、以下では、計数値は５６ビットであるものとする。
【０１７９】
プロセッサ２０１は、レジスタ２０１ａの値ＡＣＣを、変数Ｔｅｍｐに設定し（ステップＳ２０）、５６を変数ｉに設定する（ステップＳ２１）。
その後、プロセッサ２０１は、値ＡＣＣのｉ番目のビット値ＡＣＣ（ｂｉｔ（ｉ））と、変数Ｔｅｍｐのｉ−１番目のビット値であるＴｅｍｐ（ｂｉｔ（ｉ−１））とのＥｘＯＲ演算を行う。そして、プロセッサ２０１は、ＥｘＯＲ演算結果を、値ＡＣＣのｉ−１番目のビット値ＡＣＣ（ｂｉｔ（ｉ−１））とする（ステップＳ２２）。
【０１８０】
そして、プロセッサ２０１は、ｉ−１をｉとして設定し（ｉをデクリメントし）（ステップＳ２３）、ｉが１であるか否かを判定する（ステップＳ２４）。ｉが１でないときには、ステップＳ２２からの処理が繰り返される。ｉが１になると、そのときの値ＡＣＣが、グレイコードから変換された２進数の値となり、２進数の値の生成処理が終わる。
【０１８１】
図２１の反転グレイコードの生成処理は、たとえば、以下のように行われる。
図２３は、反転グレイコードの生成処理の一例の流れを示す図である。
プロセッサ２０１は、レジスタ２０１ａの値ＡＣＣを、変数Ｔｅｍｐに設定する（ステップＳ３０）。その後、プロセッサ２０１は、値ＡＣＣを、１ビット右シフトする（ステップＳ３１）。
【０１８２】
そして、プロセッサ２０１は、値ＡＣＣと、変数ＴｅｍｐとのＥｘＯＲ演算を行い、ＥｘＯＲ演算結果を、値ＡＣＣとする（ステップＳ３２）。これにより、グレイコードが生成される。
【０１８３】
上記のような、メモリ制御方法を用いた場合でも、第１乃至第５の実施の形態と同様の効果が得られる。
以上、実施の形態に基づき、本発明の不揮発性カウンタ回路、メモリ制御方法及びプログラムの一観点について説明してきたが、これらは一例にすぎず、上記の記載に限定されるものではない。
【０１８４】
たとえば、反転グレイコードは、上記の例に限定されず、ビットの順番を、ハッシュ関数を用いて入れ替え、計数値の更新を指示する入力信号を受けるたびに少なくとも（ｎ−１）（ｎ＞２）ビット分の値が変化する、計数値を示すｎビットのコードになるようにしてもよい。
【０１８５】
また、上記では、計数値の更新はカウントアップするものとしたが、計数値の更新がカウントダウンする場合にも同様に可能である。
【符号の説明】
【０１８６】
１  不揮発性カウンタ回路
２  カウンタ部
２ａ  制御回路
３  強誘電体メモリ（ＦｅＲＡＭ）
【図１】
2017028409.tif 000003
【図２】
2017028409.tif 000004
【図３】
2017028409.tif 000005
【図４】
2017028409.tif 000006
【図５】
2017028409.tif 000007
【図６】
2017028409.tif 000008
【図７】
2017028409.tif 000009
【図８】
2017028409.tif 000010
【図９】
2017028409.tif 000011
【図１０】
2017028409.tif 000012
【図１１】
2017028409.tif 000013
【図１２】
2017028409.tif 000014
【図１３】
2017028409.tif 000015
【図１４】
2017028409.tif 000016
【図１５】
2017028409.tif 000017
【図１６】
2017028409.tif 000018
【図１７】
2017028409.tif 000019
【図１８】
2017028409.tif 000020
【図１９】
2017028409.tif 000021
【図２０】
2017028409.tif 000022
【図２１】
2017028409.tif 000023
【図２２】
2017028409.tif 000024
【図２３】
2017028409.tif 000025