(57)【要約】      （修正有）【課題】ＭＴＪ素子に基づく乱数の生成において、発生した乱数に偏りがないようにする。【解決手段】乱数発生回路は、第１の論理値に対応する高抵抗状態になり、前記第１の論理値と異なる第２の論理値に対応する低抵抗状態にもなるＭＴＪ（Ｍａｇｎｅｔｉｃ  Ｔｕｎｎｅｌ  Ｊｕｎｃｔｉｏｎ）素子と、前記ＭＴＪ素子の状態が前記高抵抗状態であるときは前記ＭＴＪ素子を前記高抵抗状態から前記低抵抗状態に確率的に反転させる第１の電流、前記ＭＴＪ素子が前記低抵抗状態であるときは前記ＭＴＪ素子を前記低抵抗状態から前記高抵抗状態に確率的に反転させる第２の電流のいずれか一方を前記ＭＴＪ素子に与える、制御回路と、を備える。【選択図】図６
2010182258.tif 000002
【特許請求の範囲】
【請求項１】
第１の論理値に対応する高抵抗状態にもなり、前記第１の論理値と異なる第２の論理値に対応する低抵抗状態にもなるＭＴＪ（Ｍａｇｎｅｔｉｃ  Ｔｕｎｎｅｌ  Ｊｕｎｃｔｉｏｎ）素子と、
前記ＭＴＪ素子の状態が前記高抵抗状態であるときは前記ＭＴＪ素子を前記高抵抗状態から前記低抵抗状態に確率的に反転させる第１の電流を、前記ＭＴＪ素子の状態が前記低抵抗状態であるときは前記低抵抗状態から前記高抵抗状態に確率的に反転させる第２の電流を、前記ＭＴＪ素子に与える、制御回路と、
を備えた乱数発生回路。
【請求項２】
第１の論理値に対応する高抵抗状態にもなり、前記第１の論理値と異なる第２の論理値に対応する低抵抗状態にもなるＭＴＪ（Ｍａｇｎｅｔｉｃ  Ｔｕｎｎｅｌ  Ｊｕｎｃｔｉｏｎ）素子と、
前記ＭＴＪ素子を前記高抵抗状態から前記低抵抗状態に確率的に反転させるか前記低抵抗状態から前記高抵抗状態に確率的に反転させるかを示した乱数発生方法データを外部装置から受信し、前記乱数発生方法データが前記ＭＴＪ素子を前記高抵抗状態から前記低抵抗状態に確率的に反転させることを示すときは前記ＭＴＪ素子を前記高抵抗状態から前記低抵抗状態に確率的に反転させる第１の電流を、前記乱数発生方法データが前記ＭＴＪ素子を前記低抵抗状態から前記高抵抗状態に確率的に反転させることを示す時は前記ＭＴＪ素子の状態を前記低抵抗状態から前記高抵抗状態に確率的に反転させる第２の電流を、前記ＭＴＪ素子に与える、制御回路と、
を備えた乱数発生回路。
【請求項３】
前記制御回路は、
外部装置から乱数の発生を指示する乱数発生信号を受信する第１の受信手段と、
前記外部装置から読み出しを指示する読み出し信号を受信する第２の受信手段と、
前記乱数発生信号および前記読み出し信号のいずれか任意の一方が受信されたとき前記ＭＴＪ素子の状態に対応する論理値を読み出すセンスアンプと、
前記乱数発生信号の受信により前記センスアンプにより読み出した前記論理値に応じて前記第１の電流および前記第２の電流のいずれか一方を選択し前記ＭＴＪ素子に与えるライトドライバと、
前記読み出し信号の受信に応じて前記センスアンプにより読み出した前記論理値を前記外部装置に出力する出力部と、
を含むことを特徴とする請求項１に記載の乱数発生回路。
【請求項４】
前記制御回路は、
外部装置から乱数の発生を指示する乱数発生信号を受信する第１の受信手段と、
前記外部装置から読み出しを指示する読み出し信号を受信する第２の受信手段と、
前記読み出し信号が受信されたとき前記ＭＴＪ素子の状態に対応する論理値を読み出すセンスアンプと、
前記読み出し信号の受信に応じて前記センスアンプにより読み出した前記論理値を前記外部装置に出力する出力部と、
前記読み出し信号の受信に応じて前記センスアンプにより読み出した前記論理値を記憶するレジスタと、
前記乱数発生信号が受信されたとき前記レジスタ内の前記論理値に応じて、前記第１の電流および前記第２の電流のいずれか一方を選択し前記ＭＴＪ素子に与えるライトドライバと、
を含むことを特徴とする請求項１に記載の乱数発生回路。
【請求項５】
前記制御回路は、
外部装置から乱数の発生を指示する乱数発生信号を受信する第１の受信手段と、
前記外部装置から読み出しを指示する読み出し信号を受信する第２の受信手段と、
前記外部装置からデータ書き込みを指示する書き込み信号を受信する第３の受信手段と、
前記外部装置から前記第１または第２の論理値を表す書き込みデータを受信する第４の受信手段と、
前記読み出し信号および前記乱数発生信号のいずれか任意の一方が受信されたとき前記ＭＴＪ素子の状態に対応する論理値を読み出すセンスアンプと、
前記乱数発生信号の受信により前記センスアンプから読み出される前記論理値に応じて、前記第１の電流および前記第２の電流のいずれか一方を選択して前記ＭＴＪ素子に与え、
前記書き込み信号が受信されたとき前記第４の受信手段で受信される書き込みデータに応じて、前記ＭＴＪ素子を前記高抵抗状態から前記低抵抗状態に確実に反転させる第３の電流および前記ＭＴＪ素子を前記低抵抗状態から前記高抵抗抗状態に確実に反転させる第４の電流のいずれか一方を選択して前記ＭＴＪ素子に与えるライトドライバと、
前記読み出し信号の受信に応じて前記センスアンプにより読み出した前記論理値を前記外部装置に出力する出力部と、
ことを特徴とする請求項１に記載の乱数発生回路。
【請求項６】
前記制御回路は、
外部装置から乱数の発生を指示する乱数発生信号を受信する第１の受信手段と、
前記外部装置から読み出しを指示する読み出し信号を受信する第２の受信手段と、
前記外部装置からデータ書き込みを指示する書き込み信号を受信する第３の受信手段と、
前記外部装置から前記第１または第２の論理値を表す書き込みデータを受信する第４の受信手段と、
前記読み出し信号が受信されたとき前記ＭＴＪ素子の状態に対応する論理値を読み出すセンスアンプと、
前記読み出し信号の受信に応じて前記センスアンプにより読み出した前記論理値を記憶するレジスタと、
前記読み出し信号の受信に応じて前記センスアンプにより読み出した前記論理値を前記外部装置に出力する出力部と、
前記書き込み信号が受信されたとき前記第４の受信手段で受信される書き込みデータに応じて、前記ＭＴＪ素子を前記高抵抗状態から前記低抵抗状態に確実に反転させる第３の電流および前記ＭＴＪ素子を前記低抵抗状態から前記高抵抗抗状態に確実に反転させる第４の電流のいずれか一方を選択して前記ＭＴＪ素子に与え、
前記乱数発生信号が受信されたとき前記レジスタ内の前記論理値に応じて、前記第１の電流および前記第２の電流のいずれか一方を選択し前記ＭＴＪ素子に与える、ライトドライバと、
を含むことを特徴とする請求項１に記載の乱数発生回路。
【請求項７】
前記制御回路は、
外部装置から乱数の発生を指示する乱数発生信号を受信する第１の受信手段と、
前記乱数発生信号が受信されたとき前記ＭＴＪ素子の状態に対応する論理値を読み出すセンスアンプと、
前記センスアンプにより読み出した前記論理値を出力する出力部と、
前記センスアンプにより読み出した前記論理値に応じて前記第１の電流および前記第２の電流のいずれか一方を選択し前記ＭＴＪ素子に与えるライトドライバと、
を含むことを特徴とする請求項１に記載の乱数発生回路。
【請求項８】
前記制御回路は、
外部装置から乱数の発生を指示する乱数発生信号を受信する第１の受信手段と、
前記第１または第２の論理値を記憶するレジスタと、
前記乱数発生信号が受信されたとき前記レジスタ内の前記論理値に応じて前記第１の電流および前記第２の電流のいずれか一方を選択し前記ＭＴＪ素子に与えるライトドライバと、
前記第１および第２の電流のいずれか一方が前記ＭＴＪ素子に与えられた後、前記ＭＴＪ素子の状態に対応する論理値を読み出すセンスアンプと、
前記センスアンプにより読み出した論理値を前記外部装置に出力する出力部と、
を含み、
前記レジスタは、前記センスアンプにより読み出された論理値を記憶する
ことを特徴とする請求項１に記載の乱数発生回路。
【請求項９】
前記制御回路は、
外部装置から乱数の発生を指示する乱数発生信号を受信する第１の受信手段と、
前記外部装置から読み出しを指示する読み出し信号を受信する第２の受信手段と、
前記外部装置から前記乱数発生方法データを受信する第５の受信手段と、
前記読み出し信号が受信されたとき前記ＭＴＪ素子の状態に対応する論理値を読み出すセンスアンプと、
前記センスアンプにより読み出した前記論理値を前記外部装置に出力する出力部と、
前記乱数発生信号および前記乱数発生方法データが受信されたとき、前記乱数発生方法データに応じて前記第１または第２の電流を選択して前記ＭＴＪ素子に与えるライトドライバと、
を含むことを特徴とする請求項２に記載の乱数発生回路。
【請求項１０】
前記制御回路は、
外部装置から乱数の発生を指示する乱数発生信号を受信する第１の受信手段と、
前記外部装置から読み出しを指示する読み出し信号を受信する第２の受信手段と、
前記外部装置からデータ書き込みを指示する書き込み信号を受信する第３の受信手段と、
前記外部装置から前記第１または第２の論理値を表す書き込みデータを受信する第４の受信手段と、
前記外部装置から前記乱数発生方法データを受信する第５の受信手段と、
前記読み出し信号が受信されたとき前記ＭＴＪ素子の状態に対応する論理値を読み出すセンスアンプと、
前記センスアンプにより読み出した前記論理値を前記外部装置に出力する出力部と、
前記書き込み信号が受信されたとき前記第４の受信手段により受信される前記書き込みデータに応じて、前記ＭＴＪ素子を前記高抵抗状態から前記低抵抗状態に確実に反転させる第３の電流および前記ＭＴＪ素子を前記低抵抗状態から前記高抵抗抗状態に確実に反転させる第４の電流を選択して前記ＭＴＪ素子に与え、
前記乱数発生信号および前記乱数発生方法データが受信されたとき、前記乱数発生方法データに応じて前記第１または第２の電流を選択して前記ＭＴＪ素子に与える、ライトドライバと、
を含むことを特徴とする請求項２に記載の乱数発生回路。
【請求項１１】
複数の前記ＭＴＪ素子を備え、
前記制御回路は、
前記複数のＭＴＪ素子のうち少なくとも１つのアドレスを指定したアドレスデータを外部装置から受信する第６の受信手段と、
前記アドレスデータに応じたＭＴＪ素子を選択するアドレスデコーダと、を含み、
前記センスアンプは、前記アドレスデコーダにより選択されたＭＴＪ素子から前記ＭＴＪ素子の状態に対応する論理値を読み出し、
前記ライトドライバは、前記選択されたＭＴＪ素子に、前記第１および第２の電流のいずれか一方を与える、
ことを特徴とする請求項１ないし１０のいずれか一項に記載の乱数発生回路。
【請求項１２】
前記第１の論理値は論理値０または論理値１のうちの一方であり、前記第２の論理値は前記論理値０または論理値１のうちの他方である
ことを特徴とする請求項１ないし１１のいずれか一項に記載の乱数発生回路。
【請求項１３】
第１の論理値に対応する高抵抗状態にもなり、前記第１の論理値と異なる第２の論理値に対応する低抵抗状態にもなるＭＴＪ素子を用いた乱数発生方法であって、
前記ＭＴＪ素子の状態が前記高抵抗状態であるときは前記ＭＴＪ素子を前記高抵抗状態から前記低抵抗状態に確率的に反転させる第１の電流を、前記ＭＴＪ素子の状態が前記低抵抗状態であるときは前記低抵抗状態から前記高抵抗状態に確率的に反転させる第２の電流を、前記ＭＴＪ素子に与えるステップ
を備えたことを特徴する乱数発生方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、スピン注入磁化反転を利用した乱数発生器および乱数発生方法に関する。
【背景技術】
【０００２】
スピン注入型ＭＲＡＭ（Ｍａｇｎｅｔｉｃ  Ｒａｎｄｏｍ−Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）として用いられる強磁性トンネル接合（ＭＴＪ：  Ｍａｇｎｅｔｉｃ  Ｔｕｎｎｅｌ  Ｊｕｎｃｔｉｏｎ）素子は、２つの強磁性層でトンネルバリア層を挟み込んだ構造を持ち、強磁性層の一方は電流が流れても磁化の向きが不変な参照層であり、もう一方は電流を流すことによって磁化の向きが可変な記憶層である。記憶層の磁化の向きには２つの状態があり、一方の状態を論理値０に、もう一方の状態を論理値１に対応させることによって、ＭＴＪ素子をメモリセルとして用いる。
【０００３】
ＭＴＪ素子へのデータの書き込みはスピン注入磁化反転によって行う。すなわち、ＭＴＪ素子に書き込み電流を流すことにより生じるスピン・トランスファ・トルクによって記憶層の磁化の向きを反転させる。書き込み電流の向きを変えることによって、記憶層のとりうる２つの状態のうちいずれかの状態になるように磁化の向きを反転させることができる。
【０００４】
記憶層の磁化の向きの違いによってＭＴＪ素子の抵抗値は異なる。ＭＴＪ素子からのデータの読み出しは、磁化反転が起こらない小さな読み出し電流をＭＴＪ素子に流して抵抗値を測定し、低抵抗値か高抵抗値かを判別することによって行う。
【０００５】
磁化反転を起こす書き込み電流値と、磁化反転を起こさない読み出し電流値の間の、適切に選んだ電流値（ここでは乱数発生電流と呼ぶ）のパルス（ここでは乱数発生パルスと呼ぶ）をＭＴＪ素子に流すと、磁化反転確率が０．０より大きく１．０より小さくなるように磁化反転させることができる。そこで、あらかじめ低抵抗状態にリセットしたＭＴＪ素子に対して、高抵抗状態への反転確率が０．０と１．０の間の電流値を持つ乱数発生パルスを流すことで、ランダムにＭＴＪ素子の状態を変化させることができ、乱数発生器として利用することができることが、非特許文献１に開示されている。もちろん、あらかじめ高抵抗状態にリセットしたＭＴＪ素子に対して、低抵抗状態への磁化反転確率が０．０と１．０の間の電流値を持つ乱数発生パルスを流すことでも同じ効果を得ることができる。ここでは、このような磁化反転確率が０．０と１．０の間の電流値を、「状態を確率的に反転させる電流」と呼ぶ。
【先行技術文献】
【非特許文献】
【０００６】
【非特許文献１】第３１回日本応用磁気学会学術講演会概要集（２００７）１３ｐＣ−１５（２１４ページ）「スピン注入磁化反転を用いた乱数発生器」（福島、久保田、薬師寺、湯浅、安藤）
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ＭＴＪ素子を利用することで自然現象に基づく性質の良い乱数を生成することができるが、その場合、発生した乱数に偏りがないように、すなわち０と１の出現確率が同じになるように、磁化反転確率が０．５になる電流を流すことが望ましい。しかし、ＭＴＪ素子の製造上のサイズのばらつき等の要因により、設計時に設定した書き込みパルスの電流値に対するＭＴＪ素子の磁化反転確率が必ずしも０．５にならず、０と１の出現確率に偏りが生じる。
【０００８】
本発明は、ＭＴＪ素子を利用した乱数発生において、ばらつきに起因する乱数の偏りを抑えることを可能にした乱数発生器および乱数発生方法を提供する。
【課題を解決するための手段】
【０００９】
本発明の一態様としての乱数発生回路は、
第１の論理値に対応する高抵抗状態にもなり、前記第１の論理値と異なる第２の論理値に対応する低抵抗状態にもなるＭＴＪ（Ｍａｇｎｅｔｉｃ  Ｔｕｎｎｅｌ  Ｊｕｎｃｔｉｏｎ）素子と、
前記ＭＴＪ素子の状態が前記高抵抗状態であるときは前記ＭＴＪ素子を前記高抵抗状態から前記低抵抗状態に確率的に反転させる第１の電流を、前記ＭＴＪ素子の状態が前記低抵抗状態であるときは前記低抵抗状態から前記高抵抗状態に確率的に反転させる第２の電流を、前記ＭＴＪ素子に与える、制御回路と、
を備える。
【００１０】
本発明の一態様としての乱数発生方法は、
第１の論理値に対応する高抵抗状態になり、前記第１の論理値と異なる第２の論理値に対応する低抵抗状態にもなるＭＴＪ素子を用いた乱数発生方法であって、
前記ＭＴＪ素子の状態が前記高抵抗状態であるときは前記ＭＴＪ素子を前記高抵抗状態から前記低抵抗状態に確率的に反転させる第１の電流を、前記ＭＴＪ素子の状態が前記低抵抗状態であるときは前記低抵抗状態から前記高抵抗状態に確率的に反転させる第２の電流を、前記ＭＴＪ素子に与えるステップ
を備えたことを特徴とする。
【発明の効果】
【００１１】
本発明により、ＭＴＪ素子を利用した乱数発生において、ばらつきに起因する乱数の偏りを抑えることを可能になる。
【図面の簡単な説明】
【００１２】
【図１】ＭＴＪ素子の構造を説明する図。
【図２】電流値と反転確率の関係を示す図。
【図３】ＭＴＪ素子の特性のばらつきを説明する図。
【図４】第１の実施例に係る乱数発生回路を示す図。
【図５】従来の乱数発生方式を示す図。
【図６】図４の乱数発生回路の動作を示す図。
【図７】第２の実施例に係る乱数発生回路を示す図。
【図８】図７の乱数発生回路の動作を示す図。
【図９】図７の乱数発生回路を利用する外部回路の動作を示す図。
【図１０】ＭＴＪ素子をメモリセルとして用いるスピン注入型ＭＲＡＭの代表的な構成を示す図。
【図１１】図１０のＭＲＡＭからデータを読み出す時の各信号線のタイミングチャート。
【図１２】図１０のＭＲＡＭにデータを書き込む時の各信号線のタイミングチャート。
【図１３】第３の実施例に係る乱数発生回路を示す図。
【図１４】図１３の乱数発生器から乱数値を読み出す時の各信号線のタイミングチャート。
【図１５】図１３の乱数発生器に新しい乱数を発生させる時の各信号線のタイミングチャート。
【図１６】第４の実施例に係る乱数発生回路を示す図。
【図１７】図１６の乱数発生器から乱数値を読み出す時の各信号線のタイミングチャート。
【図１８】図１６の乱数発生器に新しい乱数を発生させる時の各信号線のタイミングチャート。
【図１９】乱数発生器、マイクロプロセッサ（外部回路）、およびメモリがバスを介して接続されたシステムを示す図。
【図２０】図１６の乱数発生回路を用いて乱数を発生させる場合に外部回路で行う動作を示す図。
【図２１】第５の実施例に係る乱数発生器を示す図。
【図２２】図２１の乱数発生器から乱数値を読み出す時の各信号線のタイミングチャート。
【図２３】図２１の乱数発生器に新しい乱数を発生させる時の各信号線のタイミングチャート。
【図２４】図２１、図２５の乱数発生回路を用いて乱数を発生させる場合に外部回路で行う動作を示す図。
【図２５】第６の実施例に係る乱数発生器を示す図。
【図２６】図２５の乱数発生器から乱数値あるいはメモリとして記憶させた値を読み出す時の各信号線のタイミングチャート。
【図２７】図２５の乱数発生器をＭＲＡＭとして用いてデータの書き込む時の各信号線のタイミングチャート。
【図２８】図２５の乱数発生器に新しい乱数を発生させる時の各信号線のタイミングチャート。
【図２９】第７の実施例に係る乱数発生器を示す図。
【図３０】第８の実施例に係る乱数発生器を示す図。
【図３１】第８の実施例に係る乱数発生器を示す図。
【図３２】図３１の乱数発生器に乱数の発生と読み出しを指示する時の各信号線のタイミングチャート。
【発明を実施するための形態】
【００１３】
図１はＭＴＪ素子の構造を説明する図である。
【００１４】
ＭＴＪ素子１１は記憶層１１ａと参照層１１ｃがトンネルバリア層１１ｂを挟んだ構造をもつ。記憶層１１ａと参照層１１ｃは強磁性層であり、参照層１１ｃはＭＴＪ素子１１に書き込み電流が流れても磁化の向きは不変であるが、記憶層１１ａはＭＴＪ素子１１に書き込み電流の流れる向きに応じて磁化の向きが変化する。
【００１５】
たとえば図１（Ａ）のように、参照層１１ｃの磁化は右方向に固定されている場合に、書き込みパルスの電流を記憶層１１ａから参照層１１ｃに向かって流すと、電子は参照層１１ｃからトンネルバリア層１１ｂを経て記憶層１１ａに向かって流れ、その結果、記録層１１ａの磁化の向きは参照層１１ｃと同じ方向（図１（Ａ）では右方向）に変化する。このように記憶層１１ａと参照層１１ｃの磁化の向きが同じ方向を向いている状態では、ＭＴＪ素子１１の抵抗値は低くなる。
【００１６】
一方、図１（Ｂ）のように、書き込みパルスの電流を参照層１１ｃから記憶層１１ａに向かって流すと、電子は記憶層１１ａからトンネルバリア層１１ｂを経て参照層１１ｃに向かって流れ、その結果、記憶層１１ａの磁化の向きは参照層１１ｃと反対の方向（図１（Ｂ）では左方向）に変化する。このように記憶層１１ａと参照層１１ｃの磁化の向きが反対の方向を向いている状態では、ＭＴＪ素子１１の抵抗値は高くなる。
【００１７】
このように、記憶層１１ａの磁化の方向が参照層１１ｃと同じか反対かの２つの状態を、論理値の０と１に対応させることによって、ＭＴＪ素子１１をメモリとして用いるのがＭＲＡＭである。ここでは磁化の向きが同じ低抵抗状態を論理値０、磁化の向きが反対の高抵抗状態を論理値１とするが、逆に、低抵抗状態を論理値１、高抵抗状態を論理値０としても構わない。本発明の第１の論理値は、論理値１または０のうち一方であり、第２の論理値は論理値１または０のうち第１の論理値と異なる他方である。ＭＴＪ素子１１は、第１の論理値に対応する高抵抗状態になり、前記第１の論理値と異なる第２の論理値に対応する低抵抗状態にもなる。
【００１８】
ＭＴＪ素子１１の状態は、読み出し電流を流して抵抗値を検出することで読み出すことができる。この読み出し電流の値は、書き込みパルスよりも小さくし、これにより読み出しの際に、ＭＴＪ素子１１の記憶層１１ａの磁化の向きが変化しないようにする。
【００１９】
図２（Ａ）は、低抵抗状態のＭＴＪ素子に流す書き込みパルスの電流値を横軸に、低抵抗状態から高抵抗状態への反転確率を縦軸にとって、電流値と反転確率の関係を示している。また、図２（Ｂ）は、高抵抗状態のＭＴＪ素子に流す書き込みパルスの電流値を横軸に、高抵抗状態から低抵抗状態への反転確率を縦軸にとって、電流値と反転確率の関係を示している。ＭＴＪ素子を高抵抗状態に反転させるときと低抵抗状態に反転させるときでは電流を流す方向が逆であるので、図２（Ａ）は原点から右に行くほど流す電流の絶対値が大きくなり、図２（Ｂ）は原点から左に行くほど流す電流の絶対値が大きくなることを示している。
【００２０】
ＭＴＪ素子を記憶セルとして用いるＭＲＡＭでは、ＭＴＪ素子に論理値１を書き込む場合には、図２（Ａ）のＩＷ１のように高抵抗状態への反転確率が限りなく１．０に近い電流値の書き込みパルスをＭＴＪ素子に流す。逆にＭＴＪ素子に論理値０を書き込む場合には、図２（Ｂ）のＩＷ０のように低抵抗状態への反転確率が限りなく１．０に近い電流値の書き込みパルスをＭＴＪ素子に流す。ＭＴＪ素子から値を読み出す場合には、図２（Ｂ）のＩＲ０や図２（Ａ）のＩＲ１のような、反転確率が限りなく０．０に近い電流をＭＴＪ素子に流して抵抗値を検出し、高抵抗値ならば１、低抵抗値ならば０と判断する。
【００２１】
図２（Ａ）および図２（Ｂ）に示すように、ＭＴＪ素子の状態の反転確率は、ある閾値において急激に変化するのではなく、ある電流値の範囲においてなだらかに変化する。そのため、低抵抗状態のＭＴＪ素子に対して、図２（Ａ）のＩＧ１のような反転確率が０．５程度になる電流値の乱数発生パルスを流すと、ＭＴＪ素子の状態は５０％程度の確率で高抵抗状態になる。逆に、高抵抗状態のＭＴＪ素子に対して、図２（Ｂ）のＩＧ０のような反転確率が０．５程度になる電流値の乱数発生パルスを流すと、ＭＴＪ素子の状態は５０％程度の確率で低抵抗状態になる。
【００２２】
そこで、低抵抗状態か高抵抗状態のいずれか一方の状態へ初期化したＭＴＪ素子に対し、その状態から他方の状態への反転確率が０．５程度の電流値の乱数発生パルスを流すことで、ＭＴＪ素子の状態を低抵抗状態または高抵抗状態へそれぞれ約５０％の確率でランダムに設定することができ、ＭＴＪ素子は乱数発生器として利用できる。
【００２３】
実際にＭＴＪ素子を乱数発生器として利用するＬＳＩチップを製造する場合、チップ上に形成するＭＴＪ素子の特性にばらつきが生じうる。たとえば、図３（Ａ）のように、低抵抗状態から高抵抗状態への反転確率が０．５になる電流値ＩＧ１の乱数発生パルスをＭＴＪ素子に流すように設計したとしても、製造段階でチップ上に形成されるＭＴＪ素子の面積のばらつきなどの要因によってＭＴＪ素子の特性もばらつき、同じ電流値ＩＧ１の乱数発生パルスに対しても、図３（Ｂ）のように反転確率が０．５よりも大きくなったり、図３（Ｃ）のように反転確率が０．５よりも小さくなったりする。その結果、従来のようにＭＴＪ素子を論理値０にリセットした後、電流値ＩＧ１の乱数発生パルスを流すことで乱数を発生させると、結果として得られる乱数の論理値０と１の発生頻度に偏りが生じることになる。
【００２４】
高抵抗値から低抵抗値への反転確率に関しても同様のことが言え、たとえば、図３（Ｄ）のように、高抵抗状態から低抵抗状態への反転確率が０．５になる電流値ＩＧ０の乱数発生パルスをＭＴＪ素子に流すように設計したとしても、ばらつきによって、同じ電流値ＩＧ０の乱数発生パルスに対しても、図３（Ｅ）のように反転確率が０．５よりも大きくなったり、図３（Ｆ）のように反転確率が０．５よりも小さくなったりする。
【００２５】
ここで、ＭＴＪ素子の特性のばらつきの要因のうち、形状的な要因が支配的であれば、低抵抗状態から高抵抗状態への反転確率と、高抵抗状態から低抵抗状態への反転確率には、相関関係がある。すなわち、図３（Ａ）に示すように標準的なＭＴＪ素子に対して低抵抗状態から高抵抗状態への反転確率が０．５になるように乱数発生パルスの電流値ＩＧ１を決め、また、図３（Ｄ）に示すように標準的なＭＴＪ素子に対して高抵抗状態から低抵抗状態への反転確率が０．５になるように乱数発生パルスの電流値ＩＧ０を決めたとする。このとき、電流値ＩＧ１の乱数発生パルスに対する低抵抗状態から高抵抗状態への反転確率が０．５よりも高い図３（Ｂ）のような特性のＭＴＪ素子は、電流値ＩＧ０の乱数発生パルスに対する高抵抗状態から低抵抗状態への反転確率も図３（Ｅ）のように０．５よりも高くなる。また、電流値ＩＧ１の乱数発生パルスに対する低抵抗状態から高抵抗状態への反転確率が０．５よりも低い図３（Ｃ）のような特性のＭＴＪ素子は、電流値ＩＧ０の乱数発生パルスに対する高抵抗状態から低抵抗状態への反転確率も図３（Ｆ）のように０．５よりも低くなる。
【００２６】
本発明の乱数発生方式では、このような、低抵抗状態から高抵抗状態への反転確率と、高抵抗状態から低抵抗状態への反転確率の間にある相関関係を利用することで、発生した乱数の０と１の偏りをより小さくするものである。具体的には、ＭＴＪ素子の現在の値が高抵抗状態（論理値１とする）であれば、高抵抗状態から低抵抗状態へ確率的に反転させる電流値ＩＧ０（第１の電流）の乱数発生パルスを流し、逆にＭＴＪ素子の現在の値が低抵抗状態（論理値０とする）であれば、低抵抗状態から高抵抗状態へ確率的に反転させる電流値ＩＧ１（第２の電流）の乱数発生パルスを流すことで、ＭＴＪ素子の状態をランダムに変化させ、その状態を乱数値として利用する。
【００２７】
従来の乱数発生方式では、たとえばあらかじめＭＴＪ素子を低抵抗状態（論理値０）にリセットした後、低抵抗状態から高抵抗状態（論理値１）へ確率的に反転させる乱数発生パルスを流すことで、ＭＴＪ素子の状態をランダムに変化させる。このとき、乱数発生パルスの電流値に対する反転確率が０．５よりも大きい場合には、発生する乱数の値が１である確率もそれに比例して大きくなる。
【００２８】
一方、本発明の方式では、乱数発生時にＭＴＪ素子を特定の状態にリセットせず、現在の状態から他方の状態への確率的な反転を発生させる。そのため、たとえ低抵抗状態から高抵抗状態へ反転させる乱数発生パルスの電流値に対する反転確率が０．５よりも大きい場合でも、それに相関して高抵抗状態から低抵抗状態へ反転させる乱数発生パルスの電流値に対する反転確率も０．５より大きければ、低抵抗状態と高抵抗状態の間の反転頻度が大きくなることになるが、発生する乱数における０と１の出現確率の偏りをより小さくすることができる。逆に、低抵抗状態から高抵抗状態へ反転させる乱数発生パルスの電流値に対する反転確率が０．５より小さい場合でも、それに相関して高抵抗状態から低抵抗状態へ反転させる乱数発生パルスの電流値に対する反転確率も０．５より小さければ、低抵抗状態と高抵抗状態の間の反転頻度が小さくなることになるが、発生する乱数における０と１の出現確率の偏りをより小さくすることができる。
【００２９】
製造工程に起因するばらつきには、ＭＴＪ素子を備えるＬＳＩチップを複数製造した場合にＬＳＩチップ毎にＭＴＪ素子の特性が異なるばらつきもあれば、ひとつのＬＳＩチップ内に複数のＭＴＪ素子を備える場合にそれらのＭＴＪ素子間の特性のばらつきもある。本発明の方式は、いずれのばらつきに対しても、その影響を小さくする効果がある。
【００３０】
図４に本発明のひとつの実施例（第１の実施例）を示す。
【００３１】
図４の乱数発生回路は、乱数発生に用いるＭＴＪ素子１１と、制御回路１２から構成される。ＭＴＪ素子１１は記憶層１１ａ側の一端子と、参照層１１ｃ側の他端子とを有し、制御回路１２は、ＭＴＪ素子１１の一端子に接続される第１の端子と、ＭＴＪ素子１１の他端子に接続される第２の端子とを含む。制御回路１２は、この乱数発生回路につながっていて発生した乱数を使用する回路（外部装置）から、乱数発生信号と読み出し信号との２種類の信号を受信して動作する。
【００３２】
制御回路１２が読み出し信号を受信すると、制御回路１２はＭＴＪ素子１１に読み出し電流を流して抵抗値を調べ、低抵抗状態なら論理値０、高抵抗状態なら論理値１を、乱数データとして出力する。上述したように、本発明の第１の論理値は、論理値１または０のうち一方であり、第２の論理値は論理値１または０のうち第１の論理値と異なる他方である。
【００３３】
制御回路１２が乱数発生信号を受信した場合の動作を図６に示す。また、従来の方式の動作を図５に示す。
【００３４】
図５に示すように、従来の方式では、外部装置から乱数発生信号を受信した制御回路は、まずＭＴＪ素子に高抵抗状態から低抵抗状態に反転させる書き込みパルスを流し、論理値０を示す低抵抗状態にＭＴＪ素子をリセットする（Ｓ１１）。次に、低抵抗状態（論理値０）から高抵抗状態（論理値１）へ確率的に反転させる乱数発生パルスをＭＴＪ素子に流し、ＭＴＪ素子の状態をランダムに変化させる（Ｓ１２）。
【００３５】
一方、本発明の方式では、図６に示すように、外部装置から乱数発生信号を受信した制御回路１２は、まずＭＴＪ素子１１に読み出し電流を流して抵抗値を調べ、現在の値が０か１かを知る（Ｓ２１、Ｓ２２）。次に読み出した値が０であれば、ＭＴＪ素子を低抵抗状態（論理値０）から高抵抗状態（論理値１）へ確率的に反転させる乱数発生パルス（第２の電流）を流し（Ｓ２３）、逆に、読み出した値が１であれば、ＭＴＪ素子を高抵抗状態（論理値１）から低抵抗状態（論理値０）へ確率的に反転させる乱数発生パルス（第１の電流）を流す（Ｓ２４）。これにより、ＭＴＪ素子の状態をランダムに変化させる。
【００３６】
制御回路１２は、ＭＴＪ素子をメモリとして用いる場合と同様の回路で実現できる。すなわち、書き込みパルスの電流値を変更して磁化反転確率を乱数発生に適した値まで下げたものが乱数発生パルスであるので、ＭＴＪ素子１１に流れる電流値が書き込みパルスと異なるように設計すれば良い。
【００３７】
図４の実施例では、乱数発生回路がＭＴＪ素子をひとつ持つ例を示しているが、乱数発生回路内に複数のＭＴＪ素子を持ち、複数ビットの乱数を発生できるようにすることもできる。この場合は、乱数発生回路の制御回路１２は、読み出し信号を受信すると、内部にある複数のＭＴＪ素子の値を複数本の信号線で並列に出力するように実施してもよいし、少ない信号線を使って直列に出力するように実施しても良い。あるいは、複数のＭＴＪ素子の中からどのＭＴＪ素子から値を読み出すかを指定するアドレス信号を入力して、その信号線で指定されたＭＴＪ素子から値を読み出すように実施することもできる。乱数発生信号を受信して乱数発生をする場合も、複数あるＭＴＪ素子に並列に乱数発生パルスを流すように実施しても良いし、ＭＴＪ素子に順次乱数発生パルスを流すように実施しても良いし、アドレス信号で指定したＭＴＪ素子に乱数発生パルスを流すように実施しても良い。
【００３８】
図７に、図４の実施例を変形した、別の実施例（第２の実施例）を示す。
【００３９】
図４に示した実施例では、乱数発生時に制御回路１２がまずＭＴＪ素子１１の状態を読み出した後、その状態に応じて、高抵抗状態へ確率的に反転させる乱数発生パルスを流すか、低抵抗状態へ確率的に反転させる乱数発生パルスを流すかを、制御回路１２内で判断した。図７は、この判断を乱数発生回路を利用する外部回路（外部装置）側で行う方法である。
【００４０】
図７の制御回路１３は、図６の制御回路１２に対して乱数発生の方法を示すデータ（乱数発生方法データ）を入力する信号線が追加されている。乱数データの読み出し時の動作は、図６の乱数発生回路１２と図７の乱数発生回路１２とで同じである。
【００４１】
一方、新しい乱数を発生させる時の制御回路１２、１３の動作は、図６の乱数発生回路と図７の乱数発生回路では異なる。図７の乱数発生回路の制御回路１３は、乱数発生信号を受信すると、図８に示す手順で乱数発生を行う。すなわち、乱数発生信号の受信と同時に乱数発生方法データを受信し（Ｓ３１）、乱数発生方法データの値が０であれば、ＭＴＪ素子を高抵抗状態（論理値１）から低抵抗状態（論理値０）に確率的に反転させる電流値の乱数発生パルスをＭＴＪ素子１１に流し（Ｓ３２）、逆に、その値が１であれば、ＭＴＪ素子１１を低抵抗状態（論理値０）から高抵抗状態（論理値１）に確率的に反転させる電流値の乱数発生パルスをＭＴＪ素子に流す（Ｓ３３）。
【００４２】
図７の乱数発生回路を利用する外部回路は、図９に示す手順で図７の乱数発生回路を利用する。まず、乱数発生回路に読み出し信号を送って、現在の値を読み出し（Ｓ４１）、その値を調べる（Ｓ４２）。次に、読み出した値の論理否定値を含む乱数発生方法データを生成し、生成した乱数発生方法データを乱数発生信号とともに送る。すなわち、読み出した値が０であれば乱数発生方法データを１に指定し（Ｓ４３）、読み出した値が１であれば乱数発生方法データを０に指定し（Ｓ４４）、１または０に指定した乱数発生方法データを乱数発生信号とともに乱数発生回路に送る。これにより、乱数発生回路のＭＴＪ素子１１の状態をランダムに変化させる。この後、外部回路は、読み出し信号を乱数発生回路に送ることで、新しく発生させた乱数の値を読み出すことができる。
【００４３】
このように実施することで、制御回路１３の構成を図４の実施例の場合よりも簡単にすることができる。すなわち、図４の実施例の制御回路１２では、乱数発生信号を受信して乱数発生を行う場合に、ＭＴＪ素子１１の現在の状態の読み出しを行うステップと、ＭＴＪ素子１１に乱数発生パルスを流してランダムに状態を変化させるステップの２ステップの処理が必要であり、さらに、最初のステップで読み出した状態を記憶しておいて次のステップで使うための記憶素子（フリップフロップあるいはレジスタ）が必要になる。それに対して図７の実施例の制御回路１３は、乱数発生信号を受信したときの処理は、ＭＴＪ素子１１に乱数発生パルスを流してランダムに状態を変化させる処理だけであり、現在のＭＴＪ素子１１の状態を読み出して記憶しておく必要がないため、制御回路１３は簡単になる。つまり、図７の実施例では、現在の状態を読み出してそれに応じた乱数発生を指示するための処理は、乱数発生回路から省いて、乱数発生回路を利用する外部回路側に任せている。外部回路は、乱数発生回路から乱数を読み出したらその値を記憶しておき、次に新しい乱数を発生させるときに、記憶しておいた値を用いて乱数発生方法データを指定するようにすれば、効率良く動作させることができる。
【００４４】
乱数発生回路内に複数のＭＴＪ素子を持つ場合は、図４の実施例の変形例と同様の変形を行って実施できる。さらに、図７の乱数発生回路が複数のＭＴＪ素子を持つ場合に、乱数発生方法データの信号線は内部のＭＴＪ素子の数に合わせて複数本用意し、それぞれのＭＴＪ素子の乱数発生に用いるように実施できる。また、乱数発生方法データの信号線の数をＭＴＪ素子の数よりも少なくしておき、ＭＴＪ素子と同じビット数の乱数発生方法データを直列に入力するように実施することもできる。さらに、乱数発生させたいＭＴＪ素子を指定するアドレス信号の入力を制御回路１３に持たせ、制御回路１３はアドレス信号で指定したＭＴＪ素子に対して、乱数発生方法データを適用した乱数発生を行うように実施することもできる。
【００４５】
なお、この実施例（第２の実施例）では、乱数発生方法データの値が０であればＭＴＪ素子を高抵抗状態（論理値１）から低抵抗状態（論理値０）に、１であればＭＴＪ素子を低抵抗状態（論理値０）から高抵抗状態（論理値１）に確率的に反転させる電流値の乱数発生パルスをＭＴＪ素子に流すようにしているが、逆に、乱数発生方法データの値が０であればＭＴＪ素子を低抵抗状態（論理値０）から高抵抗状態（論理値１）に、１であればＭＴＪ素子を高抵抗状態（論理値１）から低抵抗状態（論理値０）に確率的に反転させる電流値の乱数発生パルスをＭＴＪ素子に流すように変形して実施することもできる。このように変形して実施した場合は、読み出した乱数値から乱数発生方法データを作る際に各ビットを反転する必要がなくなる。つまり、読み出した乱数値をそのまま乱数発生方法データとして用いることができる。
【００４６】
次に、通常のメモリのように複数のＭＴＪ素子を集積した乱数発生回路の実施例を説明するが、その前に、まずＭＴＪ素子をメモリセルとして用いるスピン注入型ＭＲＡＭの代表的な構成について説明する。
【００４７】
図１０は、ＭＴＪ素子をメモリセルとして用いるスピン注入型ＭＲＡＭの代表的な構成を示す。図１０の構成のＭＲＡＭは、データを読み書きするメモリのアドレスを指定するアドレス線（図１０ではＡ）、読み書きするデータの転送に用いるデータ線（図１０ではＤ）、アドレス線（Ａ）で指定したメモリの内容を読み出してデータ線（Ｄ）に出力することを指示する読み出し信号（図１０では〜ＯＥ）、データ線（Ｄ）に指定したデータをアドレス線（Ａ）で指定したメモリに書き込むことを指示する書き込み信号（図１０では〜Ｗ）の４種類の信号線で外部の回路と接続される。アドレス線（Ａ）はＭＲＡＭ内の複数のＭＴＪ素子１１が選択できるように、ＭＴＪ素子１１の数に合わせた複数ビットの信号線である。データ線（Ｄ）も、同時に読み書きできるデータが１ビットのＭＲＡＭであれば１本の信号線であるが、同時に複数ビットのデータを読み書きできるＭＲＡＭの場合には複数ビットの信号線である。ここで、〜記号で始まる名前の信号線はアクティブロー（Ａｃｔｉｖｅ  Ｌｏｗ）、すなわち、論理値が０になることで指示を伝えることを示している。ただし、必ずアクティブローである必要はなく、アクティブハイで実現されることもある。
【００４８】
ＭＲＡＭ内部には、セルアレイ３１、アドレスデコーダ３２、センスアンプ３３、ライトドライバ３４、トライステートバッファ３５が備えられる。セルアレイ３１は、メモリセルとして用いる複数のＭＴＪ素子１１を、複数本のワード線と複数本のビット線の交点上に配置した、アレイ構造を持つ。アドレスデコーダ３２はアドレス線（Ａ）に接続され、セルアレイ３１のＭＴＪ素子１１の中からアドレス線（Ａ）で指定されたＭＴＪ素子１１が読み書き対象になるように、セルアレイ３１のワード線と、必要に応じてビット線を制御する。ライトドライバ３４は、書き込み信号（〜Ｗ）を受信すると、その時データ線（Ｄ）に流れているデータを、アドレス線（Ａ）で選択されたＭＴＪ素子１１に書き込む。センスアンプ３３は、アドレス線（Ａ）で選択されたＭＴＪ素子１１に記録されている値を読み出す。トライステートバッファ３５は、読み出し信号（〜ＯＥ）を受信するとセンスアンプ３３から送られてくるデータをデータ線（Ｄ）に送り出す。
【００４９】
図１１は図１０のＭＲＡＭからデータを読み出す時の各信号線のタイミングチャートである。ＭＲＡＭに接続した外部回路（例えばマイクロプロセッサなど）がＭＲＡＭからデータを読み出す場合は、まず、書き込み信号（〜Ｗ）を１に固定し、アドレス線（Ａ）に読み出したいアドレスを指定し、読み出し信号（〜ＯＥ）を１から０にしてＭＲＡＭに読み出しを指示する。その結果、ＭＲＡＭのセルアレイ３１の中のアドレス線（Ａ）で指定されたＭＴＪ素子に対して読み出し電流を流してセンスアンプ３３で０／１の論理信号に変換し、読み出し信号（〜ＯＥ）で信号が伝搬するように設定されたトライステートバッファ３５を介して、データ線（Ｄ）に読み出したデータを出力する。その後、読み出し信号（〜ＯＥ）が０から１に戻ると、トライステートバッファ３５による信号の伝搬が止まって出力がハイインピーダンス状態になるため、データ線（Ｄ）へのデータ出力も止まる。
【００５０】
図１２は図１０のＭＲＡＭにデータを書き込む時の各信号線のタイミングチャートである。ＭＲＡＭに接続した外部回路がＭＲＡＭにデータを書き込む場合、まず、読み出し信号（〜ＯＥ）を１に固定し、アドレス線（Ａ）に書き込みたいアドレスを指定し、データ線（Ｄ）に書き込みたいデータを指定し、書き込み信号（〜Ｗ）を１から０にしてＭＲＡＭに書き込みを指示する。その結果、ＭＲＡＭのセルアレイ３１の中のアドレス線（Ａ）で指定されたＭＴＪ素子に対して、ライトドライバ３４がデータ線（Ｄ）で指定されたデータを書き込む。ライトドライバ３４によるＭＴＪ素子へのデータの書き込みは、データ線で書き込むべき論理値が０と指定されたＭＴＪ素子に対しては、ＭＴＪ素子を高抵抗状態（論理値１に対応）から低抵抗状態（論理値０に対応）に反転させる方向の書き込み電流のパルスを流し、逆に、データ線で書き込むべき論理値が１と指定されたＭＴＪ素子に対しては、ＭＴＪ素子を低抵抗状態（論理値０に対応）から高抵抗状態（論理値１に対応）に反転させる方向の書き込み電流のパルスを流すことで行う。書き込み信号（〜Ｗ）を０から１に戻すことで書き込み処理を終了する。
【００５１】
図１３に、図１０のＭＲＡＭを変形して乱数発生器を実現する実施例（第３の実施例）を示す。ＭＴＪ素子をＭＲＡＭに使う場合と乱数発生器に使う場合では、書き込みパルスの電流値が異なるだけであるので、図１０に示したスピン注入型ＭＲＡＭと同様の回路構成で乱数発生器も実現できる。このようにＭＲＡＭを変形した構成にすることにより、乱数発生器をマイクロプロセッサ等と接続しやすくなる。また、多数のＭＴＪ素子を集積することにより、大量の乱数を発生させることが必要な用途や、高速に乱数を発生させることが必要な用途、多くの自然乱数源を組み合わせてより良い特性の乱数を発生させることが必要な用途などにも利用できる。
【００５２】
図１３の乱数発生器は、乱数の発生に用いるＭＴＪ素子のアドレスを指定するアドレス線（図１３ではＡ）、乱数の値の読み出しに用いるデータ線（図１３ではＤ）、アドレス線（Ａ）で指定したＭＴＪ素子の状態を読み出してデータ線（Ｄ）に出力することを指示する読み出し信号（図１３では〜ＯＥ）、アドレス線（Ａ）で指定したＭＴＪ素子に新しい乱数値を生成することを指示する乱数発生信号（図１３では〜Ｗ）の４種類の信号線で外部の回路と接続される。アドレス線（Ａ）は乱数発生器内の複数のＭＴＪ素子が選択できるように、ＭＴＪ素子の数に合わせた複数ビットの信号線である。データ線（Ｄ）も、同時に読み出すことができる乱数値が１ビットの乱数発生器であれば１本の信号線であるが、同時に複数ビットの乱数値を読み出すことができる乱数発生器の場合には複数ビットの信号線である。データ線（Ｄ）が複数ビットの信号線である場合には、センスアンプやライトドライバも複数個用いて、複数ビットの信号を並列して扱う。
【００５３】
乱数発生器内部には、セルアレイ３１、アドレスデコーダ３２、センスアンプ４１、ライトドライバ４２、トライステートバッファ４３、レジスタ４４を備える。セルアレイ３１は、乱数発生に用いる複数のＭＴＪ素子１１を、複数本のワード線と複数本のビット線の交点上に配置した、アレイ構造を持つ。アドレスデコーダ３２はアドレス線（Ａ）に接続され、セルアレイ３１のＭＴＪ素子１１の中からアドレス線（Ａ）で指定されたＭＴＪ素子が乱数値の読み出しあるいは乱数発生の対象になるように、セルアレイ３１のワード線と、必要に応じてビット線を制御する。センスアンプ４１は、アドレス線（Ａ）で選択されたＭＴＪ素子に記録されている乱数値を読み出す。トライステートバッファ４３は、読み出し信号（〜ＯＥ）を受信するとセンスアンプ４１から送られてくる乱数値をデータ線（Ｄ）に送り出す。トライステートバッファ４３は読み出し信号（〜ＯＥ）を受信する、本発明の第２の受信手段と、センスアンプ４１により読み出した乱数値（論理値）を出力する出力手段とを含む。レジスタ４４は、乱数発生信号（〜Ｗ）を受信するとセンスアンプ４１から送られてくる乱数値を記憶する。ライトドライバ４２は、乱数発生信号（〜Ｗ）を受信すると、レジスタ４４に記憶しているＭＴＪ素子の現在の乱数値を確率的に反転させる乱数発生パルスをアドレス線（Ａ）で選択されたＭＴＪ素子に流すことで、ＭＴＪ素子の状態をランダムに変化させて新しい乱数を発生させる。レジスタ４４およびライトドライバ４２は乱数発生信号（〜Ｗ）を受信する本発明の第１の受信手段を含む。
【００５４】
図１４は図１３の乱数発生器から乱数値を読み出す時の各信号線のタイミングチャートである。乱数発生器に接続した外部回路（例えばマイクロプロセッサなど）が乱数発生器からデータを読み出す場合は、まず、乱数発生信号（〜Ｗ）を１に固定し、アドレス線（Ａ）に読み出したいＭＴＪ素子のアドレスを指定し、読み出し信号（〜ＯＥ）を１から０にして乱数発生器に読み出しを指示する。その結果、乱数発生器のセルアレイ３１の中のアドレス線（Ａ）で指定されたＭＴＪ素子に対してアドレスデコーダ３２が読み出し電流を流してセンスアンプ３１で０／１の論理信号に変換し、読み出し信号（〜ＯＥ）で信号が伝搬するように設定されたトライステートバッファ４３を介して、データ線（Ｄ）に読み出したデータを出力する。その後、読み出し信号（〜ＯＥ）が０から１に戻ると、トライステートバッファ４３による信号の伝搬が止まって出力がハイインピーダンス状態になるため、データ線（Ｄ）へのデータ出力も止まる。この読み出し手順はＭＲＡＭのデータの読み出しと同様である。
【００５５】
図１５は図１３の乱数発生器に新しい乱数を発生させる時の各信号線のタイミングチャートである。乱数発生器に接続した外部回路が乱数発生器に乱数発生を指示する場合、まず、読み出し信号（〜ＯＥ）を１に固定し、アドレス線（Ａ）に乱数を発生させたいＭＴＪ素子のアドレスを指定し、乱数発生信号（〜Ｗ）を１から０にして乱数発生器に乱数発生を指示する。その結果、まず、乱数発生器のセルアレイ３１の中のアドレス線（Ａ）で指定されたＭＴＪ素子に対してアドレスデコーダ３２が読み出し電流を流してセンスアンプ４１で０／１の論理値の信号に変換し、その値をレジスタ４４に記憶する。次に、乱数発生器のセルアレイ３１の中のアドレス線（Ａ）で指定されたＭＴＪ素子に対して、ライトドライバ４２がレジスタの値に基づいて乱数を発生させる。ライトドライバ４２によるＭＴＪ素子への乱数発生は、レジスタ４４に記憶している現在の乱数値が０であるＭＴＪ素子に対しては、ＭＴＪ素子を低抵抗状態（論理値０に対応）から高抵抗状態（論理値１に対応）に確率的に反転させる方向の乱数発生電流のパルスを流し、逆に、レジスタ４４に記憶している現在の乱数値が１であるＭＴＪ素子に対しては、ＭＴＪ素子を高抵抗状態（論理値１に対応）から低抵抗状態（論理値０に対応）に反転させる方向の乱数発生電流のパルスを流すことで行う。乱数発生信号（〜Ｗ）を０から１に戻すことで乱数発生処理を終了する。
【００５６】
図１６にさらに別の乱数発生器の実施例（第４の実施例）を示す。
【００５７】
図１６の乱数発生器は、乱数の発生に用いるＭＴＪ素子のアドレスを指定するアドレス線（図１６ではＡ）、乱数の値の読み出しに用いるデータ線（図１６ではＤ）、アドレス線（Ａ）で指定したＭＴＪ素子の状態を読み出してデータ線（Ｄ）に出力することを指示する読み出し信号（図１６では〜ＯＥ）、アドレス線（Ａ）で指定したＭＴＪ素子に新しい乱数値を生成することを指示する乱数発生信号（図１６では〜Ｗ）の４種類の信号線で外部の回路と接続される。アドレス線（Ａ）は乱数発生器内の複数のＭＴＪ素子が選択できるように、ＭＴＪ素子の数に合わせた複数ビットの信号線である。データ線（Ｄ）も、同時に読み出すことができる乱数値が１ビットの乱数発生器であれば１本の信号線であるが、同時に複数ビットの乱数値を読み出すことができる乱数発生器の場合には複数ビットの信号線である。データ線（Ｄ）が複数ビットの信号線である場合には、センスアンプやライトドライバも複数個用いて、複数ビットの信号を並列して扱う。
【００５８】
乱数発生器内部には、セルアレイ３１、アドレスデコーダ３２、センスアンプ５１、ライトドライバ５２、トライステートバッファ５３、レジスタ５４が備えられる。セルアレイ３１は、乱数発生に用いる複数のＭＴＪ素子１１を、複数本のワード線と複数本のビット線の交点上に配置した、アレイ構造を持つ。アドレスデコーダ３２はアドレス線（Ａ）に接続され、セルアレイのＭＴＪ素子の中からアドレス線（Ａ）で指定されたＭＴＪ素子が乱数値の読み出しあるいは乱数発生の対象になるように、セルアレイ３１のワード線と、必要に応じてビット線を制御する。センスアンプ５１は、アドレス線（Ａ）で選択されたＭＴＪ素子に記録されている乱数値を読み出す。トライステートバッファ５３は、読み出し信号（〜ＯＥ）を受信するとセンスアンプ５１から送られてくる乱数値をデータ線（Ｄ）に送り出す。レジスタ５４は、読み出し信号（〜ＯＥ）を受信するとセンスアンプ５１から送られてくる乱数値を記憶する。レジスタ５４およびトライステートバッファ５３は読み出し信号（〜ＯＥ）を受信する、本発明の第２の受信手段を含み、トライステートバッファ５３は、センスアンプ５１により読み出した乱数値（論理値）を出力する出力手段を含む。ライトドライバ５２は、乱数発生信号（〜Ｗ）を受信すると、レジスタ５４に記憶しているＭＴＪ素子の現在の乱数値を確率的に反転させる乱数発生パルスをアドレス線（Ａ）で選択されたＭＴＪ素子に流すことで、ＭＴＪ素子の状態をランダムに変化させて新しい乱数を発生させる。ライトドライバ５２は乱数発生信号（〜Ｗ）を受信する本発明の第１の受信手段を含む。
【００５９】
図１６の乱数発生器で新しい乱数を発生させる時は、図１３の乱数発生器と異なり、乱数発生に先立って現在の乱数値の読み出しを行う。すなわち、図１３の乱数発生器では乱数発生の指示を乱数発生信号によって受信すると、指定されたＭＴＪ素子の現在の値をレジスタに読み出してから、ＭＴＪ素子に対する新しい乱数の発生を行う。それに対して図１６の乱数発生器では、乱数値の読み出し時にレジスタに値が記憶されるため、新しい乱数を発生させるには、まず乱数を発生したいＭＴＪのアドレスを指定して値の読み出しをした後、同じＭＴＪのアドレスを指定して乱数発生を指示する。たとえば図１９のように、乱数発生器６１（ここでは図１６の乱数発生器であるとする）がバス６２を介してマイクロプロセッサ６３およびメモリ６４につながっている場合、乱数発生器６１に新しい乱数を発生させたいマイクロプロセッサ６３は、図２０に示す手順で乱数生成を指示する。すなわち、まずアドレスを指定して乱数発生器６１に読み出しを指示し（Ｓ５１）、続いて同じアドレスを指定して乱数発生器６１に乱数生成を指示する（Ｓ５２）。
【００６０】
図１７は図１６の乱数発生器から乱数値を読み出す時の各信号線のタイミングチャートである。乱数発生器に接続した外部回路（例えばマイクロプロセッサなど）が乱数発生器からデータを読み出す場合は、まず、乱数発生信号（〜Ｗ）を１に固定し、アドレス線（Ａ）に読み出したいＭＴＪ素子のアドレスを指定し、読み出し信号（〜ＯＥ）を１から０にして乱数発生器に読み出しを指示する。その結果、乱数発生器のセルアレイ３１の中のアドレス線（Ａ）で指定されたＭＴＪ素子に対してアドレスデコーダ３２が読み出し電流を流してセンスアンプ５１で０／１の論理信号に変換し、読み出し信号（〜ＯＥ）で信号が伝搬するように設定されたトライステートバッファ５３を介してデータ線（Ｄ）に読み出したデータを出力するとともに、その値をレジスタ５４に記憶する。その後、読み出し信号（〜ＯＥ）が０から１に戻ると、トライステートバッファ５３による信号の伝搬が止まって出力がハイインピーダンス状態になるため、データ線（Ｄ）へのデータ出力も止まる。
【００６１】
図１８は図１６の乱数発生器に新しい乱数を発生させる時の各信号線のタイミングチャートである。ここで、図１８の動作の直前に、図１７の動作によって、乱数を発生させたいＭＴＪ素子のアドレスを指定した読み出しがあらかじめ実行されているものとする。乱数発生器に接続したマイクロプロセッサなどの外部回路が乱数発生器に乱数発生を指示する場合、まず、読み出し信号（〜ＯＥ）を１に固定し、アドレス線（Ａ）に乱数を発生させたいＭＴＪ素子のアドレスを指定し、乱数発生信号（〜Ｗ）を１から０にして乱数発生器に乱数発生を指示する。その結果、乱数発生器のセルアレイ３１の中のアドレス線（Ａ）で指定されたＭＴＪ素子に対して、ライトドライバ５２がレジスタ５４の値に基づいて乱数を発生させる。ライトドライバ５２によるＭＴＪ素子への乱数発生は、レジスタ５４に記憶している現在の乱数値が０であるＭＴＪ素子に対しては、ＭＴＪ素子を低抵抗状態（論理値０に対応）から高抵抗状態（論理値１に対応）に確率的に反転させる方向の乱数発生電流のパルスを流し、逆に、レジスタ５４に記憶している現在の乱数値が１であるＭＴＪ素子に対しては、ＭＴＪ素子を高抵抗状態（論理値１に対応）から低抵抗状態（論理値０に対応）に反転させる方向の乱数発生電流のパルスを流すことで行う。乱数発生信号（〜Ｗ）を０から１に戻すことで乱数発生処理を終了する。
【００６２】
図１６の乱数発生器は、図１３の乱数発生器の乱数発生手順から、読み出し処理で代用できる手順を省き、読み出し手順と乱数発生手順を組み合わせることで新しい乱数の発生を実現している。この方式は、乱数発生手順の中で読み出しを行う必要がないため、乱数発生処理の時間が短縮できる。また、ＭＲＡＭの書き込みと同等の回路で実現できるので回路構成が簡単になる。
【００６３】
図２１には、さらに別の乱数発生器の実施例（第５の実施例）を示す。
【００６４】
図２１の乱数発生器は、乱数の発生に用いるＭＴＪ素子のアドレスを指定するアドレス線（図２１ではＡ）、読み出した乱数値および乱数発生に必要なデータの転送に用いるデータ線（図２１ではＤ）、アドレス線（Ａ）で指定したＭＴＪ素子の状態を読み出してデータ線（Ｄ）に出力することを指示する読み出し信号（図２１では〜ＯＥ）、アドレス線（Ａ）で指定したＭＴＪ素子にデータ線（Ｄ）に指定したデータ（乱数発生方法を示すデータ）に基づいて新しい乱数値を生成することを指示する乱数発生信号（図２１では〜Ｗ）の４種類の信号線で外部の回路と接続される。アドレス線（Ａ）は乱数発生器内の複数のＭＴＪ素子が選択できるように、ＭＴＪ素子の数に合わせた複数ビットの信号線である。データ線（Ｄ）も、同時に読み出しあるいは発生することができる乱数値が１ビットの乱数発生器であれば１本の信号線であるが、同時に複数ビットの乱数値を読み出しあるいは発生させることができる乱数発生器の場合には複数ビットの信号線である。データ線（Ｄ）が複数ビットの信号線である場合には、センスアンプやライトドライバも複数個用いて、複数ビットの信号を並列して扱う。
【００６５】
乱数発生器内部には、セルアレイ３１、アドレスデコーダ３２、センスアンプ７１、ライトドライバ７２、トライステートバッファ７３を備える。セルアレイ３１は、乱数発生に用いる複数のＭＴＪ素子１１を、複数本のワード線と複数本のビット線の交点上に配置した、アレイ構造を持つ。アドレスデコーダ３２はアドレス線（Ａ）に接続され、セルアレイのＭＴＪ素子の中からアドレス線（Ａ）で指定されたＭＴＪ素子が乱数値の読み出しあるいは乱数発生の対象になるように、セルアレイ３１のワード線と、必要に応じてビット線を制御する。センスアンプ７１は、アドレス線（Ａ）で選択されたＭＴＪ素子に記録されている乱数値を読み出す。トライステートバッファ７３は、読み出し信号（〜ＯＥ）を受信するとセンスアンプ７１から送られてくる乱数値をデータ線（Ｄ）に送り出す。ライトドライバ７２は、乱数発生信号（〜Ｗ）を受信すると、データ線（Ｄ）に指定された乱数発生方法を示すデータに基づいて、アドレス線（Ａ）で選択されたＭＴＪ素子に対して、その状態を確率的に反転させる乱数発生パルスを流すことで、ＭＴＪ素子の状態をランダムに変化させて新しい乱数を発生させる。ライトドライバ７２は乱数発生信号を受信する本発明の第１の受信手段と、乱数発生方法データを受信する本発明の第５の受信手段を含む。トライステートバッファ７３は読み出し信号を受信する本発明の第２の受信手段を含む。
【００６６】
図２１の乱数発生器は、図１９のように、マイクロプロセッサ６３等の外部回路と組み合わせて利用する。図２１の乱数発生器を使って新しい乱数を発生させたいマイクロプロセッサ６３等の外部回路は、図２４に示す手順で乱数発生器に乱数生成を指示する。すなわち、まず、アドレスを指定して乱数発生器に読み出しを指示して乱数値Ｒを取得し（Ｓ６１）、次に、取得した乱数値Ｒの各ビットの否定をとることで乱数発生方法を示すデータ〜Ｒを作成し（Ｓ６２）、最後に、続いて同じアドレスを指定するとともに乱数発生方法を示すデータ〜Ｒを指定して乱数発生器に乱数生成を指示する（Ｓ６３）。つまり、図１６の乱数発生器の持っていたレジスタを省略し、代わりに、読み出した乱数値をマイクロプロセッサ６３等の外部回路側で記憶しておき、その記憶した値を、乱数発生を指示するときに乱数発生器に渡すようになっている。プロセッサ６３による図２１の乱数発生器からの乱数値の読み出しの指示は、プロセッサ６３がバス６２によって接続された乱数発生器からデータを読み出すことによって実現され、プロセッサ６３による図２１の乱数発生器への乱数発生の指示は、プロセッサ６３がバス６２によって接続された乱数発生器に対して乱数発生方法を示すデータを書き込むことによって実現されるようになっている。
【００６７】
なお、図２４の手順では、乱数発生器から読み出した現在の乱数値の否定をとることにより乱数発生方法データを生成し、それを乱数発生時にデータ線（Ｄ）に指定している。これは、乱数発生器に乱数発生を指示するときに、乱数発生方法データとして論理値０がデータ線（Ｄ）に指定された場合には高抵抗状態（論理値１）から低抵抗状態（論理値０）に確率的に状態が反転する乱数発生電流のパルスを流し、乱数発生方法データとして論理値１がデータ線（Ｄ）に指定された場合には低抵抗状態（論理値０）から高抵抗状態（論理値１）に確率的に状態が反転する乱数発生電流のパルスを流すように実施されているためである。データ線（Ｄ）に指定されるデータの解釈を逆にし、乱数発生方法データとして論理値１がデータ線（Ｄ）に指定された場合には高抵抗状態（論理値１）から低抵抗状態（論理値０）に確率的に状態が反転する乱数発生電流のパルスを流し、乱数発生方法データとして論理値０がデータ線（Ｄ）に指定された場合には低抵抗状態（論理値０）から高抵抗状態（論理値１）に確率的に状態が反転する乱数発生電流のパルスを流すように実施すれば、図２４において読み出したデータの値の否定をとるステップＳ６２は不要になるため、読み出した乱数値Ｒをそのまま乱数発生方法データとして指定すればよい。
【００６８】
図２２は図２１の乱数発生器から乱数値を読み出す時の各信号線のタイミングチャートである。乱数発生器に接続した外部回路（例えばマイクロプロセッサなど）が乱数発生器からデータを読み出す場合は、まず、乱数発生信号（〜Ｗ）を１に固定し、アドレス線（Ａ）に読み出したいＭＴＪ素子のアドレスを指定し、読み出し信号（〜ＯＥ）を１から０にして乱数発生器に読み出しを指示する。その結果、乱数発生器のセルアレイ３１の中のアドレス線（Ａ）で指定されたＭＴＪ素子に対して読み出し電流を流してセンスアンプ７１で０／１の論理信号に変換し、読み出し信号（〜ＯＥ）で信号が伝搬するように設定されたトライステートバッファ７３を介してデータ線（Ｄ）に読み出したデータを出力する。その後、読み出し信号（〜ＯＥ）が０から１に戻ると、トライステートバッファ７３による信号の伝搬が止まって出力がハイインピーダンス状態になるため、データ線（Ｄ）へのデータ出力も止まる。
【００６９】
図２３は図２１の乱数発生器に新しい乱数を発生させる時の各信号線のタイミングチャートである。ここで、図２３の動作の直前に、図２１の動作によって、乱数を発生させたいＭＴＪ素子のアドレスを指定した読み出しがあらかじめ実行されているものとする。乱数発生器に接続したマイクロプロセッサなどの外部回路が乱数発生器に乱数発生を指示する場合、まず、読み出し信号（〜ＯＥ）を１に固定し、アドレス線（Ａ）に乱数を発生させたいＭＴＪ素子のアドレスを指定し、先に読み出しておいた現在の乱数値の各ビットの否定をとった値である乱数発生方法データをデータ線（Ｄ）に指定し、乱数発生信号（〜Ｗ）を１から０にすることにより乱数発生を指示する。その結果、ライトドライバ７２は、乱数発生器のセルアレイ３１の中のアドレス線（Ａ）で指定されたＭＴＪ素子に対して、データ線（Ｄ）に指定された値に基づいて乱数を発生させる。ライトドライバ７２によるＭＴＪ素子への乱数発生は、データ線（Ｄ）に指定された値が０であるＭＴＪ素子に対しては、ＭＴＪ素子を高抵抗状態（論理値１に対応）から低抵抗状態（論理値０に対応）に確率的に反転させる方向の乱数発生電流のパルスを流し、逆に、データ線（Ｄ）に指定された値が１であるＭＴＪ素子に対しては、ＭＴＪ素子を低抵抗状態（論理値０に対応）から高抵抗状態（論理値１に対応）に反転させる方向の乱数発生電流のパルスを流すことで行う。乱数発生信号（〜Ｗ）を０から１に戻すことで乱数発生処理を終了する。
【００７０】
図２１の乱数発生器は、図１６の乱数発生器からレジスタを省略することで、回路を簡単にすることができる。この方式は、ＭＲＡＭと同等の回路を用い、ＭＲＡＭの書き込みパルスの電流値を、ＭＴＪ素子を確率的に反転させる乱数生成パルスの電流値に変更するだけで実現できる。
【００７１】
図２５は、図２１の乱数発生器を変形した実施例（第６の実施例）であり、ＭＴＪ素子を通常のＭＲＡＭのメモリ素子としても乱数発生用にも利用できるようになっている。
【００７２】
図２１の乱数発生器の乱数発生信号（〜Ｗ）は、図２５の乱数発生器では書き込み信号（〜Ｗ）になっている。図２５の乱数発生器では、書き込み信号（〜Ｗ）は、メモリとしての書き込みの指示と乱数発生の指示の両方を兼ねる。図２５の乱数発生器は、図２１の乱数発生器に対して、乱数モード信号（〜ＲＮ）が加わっている。乱数モード信号（〜ＲＮ）はライトドライバ８２につながっている。ライトドライバ８２は書き込み信号（〜Ｗ）が１から０に変化した時に、乱数モード信号（〜ＲＮ）が１であれば通常のメモリへの書き込み処理を行う。つまり、ライトドライバ８２は、データ線（Ｄ）に指定されたデータ（書き込みデータ）に基づいて、アドレス線（Ａ）で選択されたＭＴＪ素子に対して書き込みパルスを流すことで、ＭＴＪ素子の状態を変化させて指定されたデータを記憶する。すなわち指定されたデータが０のときはＭＴＪ素子を高抵抗状態（論理値１に対応）から低抵抗状態（論理値０に対応）に反転させる方向の書き込みパルス（第３の電流）を流し、逆に、指定されたデータが１のときはＭＴＪ素子を低抵抗状態（論理値０に対応）から高抵抗状態（論理値１に対応）に確実に反転させる方向の書き込みパルス（第４の電流）を流す。一方、ライトドライバ８２は書き込み信号（〜Ｗ）が１から０に変化した時に、乱数モード信号（〜ＲＮ）が０であれば乱数発生処理を行う。つまり、ライトドライバ８２は、データ線（Ｄ）に指定されたデータ（乱数発生方法データ）に基づいて、アドレス線（Ａ）で選択されたＭＴＪ素子に対して、その状態を確率的に反転させる乱数発生パルスを流すことで、ＭＴＪ素子の状態をランダムに変化させて新しい乱数を発生させる。ライトドライバ８２は書き込みデータを受信する本発明の第４の受信手段を含む。
【００７３】
図２５の乱数発生器は、図１９のように、マイクロプロセッサ６３等の外部回路と組み合わせて利用する。図２５の乱数発生器を使って新しい乱数を発生させたいマイクロプロセッサ６３等の外部回路は、図２４に示す手順で乱数発生を指示する。すなわち、まずアドレスを指定して乱数発生器に読み出しを指示し（Ｓ６１）、読み出した乱数値の各ビットの否定をとった値であるデータを取得し（Ｓ６２）、同じアドレスを指定するとともに乱数発生器に乱数生成指示と当該データとを送る（Ｓ６３）。
【００７４】
図２６は図２５の乱数発生器から乱数値あるいはメモリとして記憶させた値を読み出す時の各信号線のタイミングチャートである。乱数発生器に接続した外部回路（例えばマイクロプロセッサなど）が乱数発生器からデータを読み出す場合は、まず、書き込み信号（〜Ｗ）を１に固定し、アドレス線（Ａ）に読み出したいＭＴＪ素子のアドレスを指定し、読み出し信号（〜ＯＥ）を１から０にして乱数発生器に読み出しを指示する。その結果、乱数発生器のセルアレイ３１の中のアドレス線（Ａ）で指定されたＭＴＪ素子に対して読み出し電流を流してセンスアンプ８１で０／１の論理信号に変換し、読み出し信号（〜ＯＥ）で信号が伝搬するように設定されたトライステートバッファ８３を介してデータ線（Ｄ）に読み出したデータを出力する。その後、読み出し信号（〜ＯＥ）が０から１に戻ると、トライステートバッファ８３による信号の伝搬が止まって出力がハイインピーダンス状態になるため、データ線（Ｄ）へのデータ出力も止まる。
【００７５】
図２７は図２５の乱数発生器をＭＲＡＭとして用いてデータの書き込む時の各信号線のタイミングチャートである。乱数発生器に接続したマイクロプロセッサなどの外部回路がデータの書き込みを指示する場合、まず、読み出し信号（〜ＯＥ）を１に固定し、乱数モード信号（〜ＲＮ）を１に固定し、アドレス線（Ａ）にデータを書き込みたいＭＴＪ素子のアドレスを指定し、データ線（Ｄ）に書き込みたいデータの値を指定し、書き込み信号（〜Ｗ）を１から０にして乱数発生器に書き込みを指示する。その結果、乱数発生器のセルアレイ３１の中のアドレス線（Ａ）で指定されたＭＴＪ素子に対して、データ線（Ｄ）に指定された値を記憶させる。ライトドライバ８２によるＭＴＪ素子へのデータの書き込みは、データ線（Ｄ）に指定された値が０であるＭＴＪ素子に対しては、ＭＴＪ素子を高抵抗状態（論理値１に対応）から低抵抗状態（論理値０に対応）に確実に反転させる方向の書き込み電流のパルスを流し、逆に、データ線（Ｄ）に指定された値が１であるＭＴＪ素子に対しては、ＭＴＪ素子を低抵抗状態（論理値０に対応）から高抵抗状態（論理値１に対応）に確実に反転させる方向の書き込み電流のパルスを流すことで行う。書き込み信号（〜Ｗ）を０から１に戻すことで書き込み処理を終了する。
【００７６】
図２８は図２５の乱数発生器に新しい乱数を発生させる時の各信号線のタイミングチャートである。ここで、図２８の動作の前に、図２６の動作によって、乱数を発生させたいＭＴＪ素子のアドレスを指定して現在の値があらかじめ読み出されているものとする。乱数発生器に接続したマイクロプロセッサなどの外部回路が乱数発生器に乱数発生を指示する場合、まず、読み出し信号（〜ＯＥ）を１に固定し、アドレス線（Ａ）に乱数を発生させたいＭＴＪ素子のアドレスを指定し、先に読み出しておいた現在の乱数値の各ビットの否定をとった値である乱数発生方法データをデータ線（Ｄ）に指定し、乱数モード信号（〜ＲＮ）を１から０にした後、書き込み信号（〜Ｗ）を１から０にすることにより乱数発生器に乱数発生を指示する。その結果、ライトドライバ８２は、乱数発生器のセルアレイ３１の中のアドレス線（Ａ）で指定されたＭＴＪ素子に対して、データ線（Ｄ）に指定された値に基づいて乱数を発生させる。ライトドライバ８２によるＭＴＪ素子への乱数発生は、データ線（Ｄ）に指定された値が０であるＭＴＪ素子に対しては、ＭＴＪ素子を高抵抗状態（論理値１に対応）から低抵抗状態（論理値０に対応）に確率的に反転させる方向の乱数発生電流のパルスを流し、逆に、データ線（Ｄ）に指定された値が１であるＭＴＪ素子に対しては、ＭＴＪ素子を低抵抗状態（論理値０に対応）から高抵抗状態（論理値１に対応）に反転させる方向の乱数発生電流のパルスを流すことで行う。書き込み信号（〜Ｗ）と乱数モード信号（〜ＲＮ）を０から１に戻すことで書き込み処理を終了する。
【００７７】
図２５の乱数発生器は、ＭＲＡＭと同等の回路を用い、乱数モード信号（〜ＲＮ）の値に応じて、ＭＲＡＭの書き込みパルスの電流値と、ＭＴＪ素子を確率的に反転させる乱数生成パルスの電流値とを切り替えるように変更するだけで実現できる。
【００７８】
図２５の乱数発生器を図１９のようにマイクロプロセッサ６３に接続する場合、通常のプロセッサのバスにはデータの読み出しと書き込みの信号線はあるが、乱数モード信号を接続するために適切な信号線がない場合がある。そのような場合には、乱数発生器をプロセッサのメモリ空間の２つの領域にマッピングし、一方の領域への書き込みの場合はＭＲＡＭとしての通常の書き込みを行い、もう一方の領域への書き込みの場合は乱数発生を行うようにすればよい。つまり、乱数モード信号（〜ＲＮ）を、乱数発生器内のＭＴＪ素子を指定するアドレス線（Ａ）のさらに上位のアドレス線と考えればよい。
【００７９】
なお、図２５の乱数発生器を用いれば、まず低抵抗状態（論理値０）にリセットしたＭＴＪ素子に対して、低抵抗状態（論理値０）から高抵抗状態（論理値１）へ確率的に状態を反転させる乱数発生電流のパルスを流して乱数を発生させる、従来の乱数発生方法も実現することができる。この場合、乱数発生器に接続したマイクロプロセッサ等の外部回路は、乱数発生器に対して、乱数発生に使いたいＭＴＪ素子のアドレスを指定して、まず全ビットに論理値０のデータを通常のＭＲＡＭの書き込み方法で書き込む。次に、同じアドレスに対して、全ビット論理値１のデータである乱数発生方法データを指定し、乱数発生を指示することで、乱数を発生させることができる。
【００８０】
図２５の乱数発生器と同様に、図１３や図１６の乱数発生器も、ＭＴＪ素子を通常のＭＲＡＭのメモリ素子としても乱数発生用にも利用できるように変形して実施できる。
【００８１】
図２９は、図１３の乱数発生器を、ＭＲＡＭとしても利用できるように変形した実施例（第７の実施例）である。図２５の乱数発生器と同様に、図１３の乱数発生器における乱数発生信号（〜Ｗ）は、図２９の乱数発生器では書き込み信号（〜Ｗ）になり、メモリとしての書き込みの指示と乱数発生の指示の両方の役割を兼ねる。図２９の乱数発生器は、図１３の乱数発生器の回路構成に加えて、乱数モード信号（〜ＲＮ）とセレクタ９５が加わっている。乱数モード信号（〜ＲＮ）はセレクタ９５に接続されている。セレクタ９５は、乱数モード信号（〜ＲＮ）が０の時はレジスタ９４の出力を、乱数モード信号（〜ＲＮ）が１の時はデータ線（Ｄ）のデータを、ライトドライバ９２に伝送する。乱数モード信号（〜ＲＮ）はライトドライバ９２にも接続されている。ライトドライバ９２は書き込み信号（〜Ｗ）が１から０に変化した時に、乱数モード信号（〜ＲＮ）が１であれば通常のメモリへの書き込み処理を行う。つまり、ライトドライバ９２は、セレクタ９５から送られてくるデータ線（Ｄ）に指定されたデータに基づいて、アドレス線（Ａ）で選択されたＭＴＪ素子に対して、書き込みパルスを流すことで、ＭＴＪ素子の状態を変化させてデータ線（Ｄ）に指定されたデータを記憶する。すなわち指定されたデータが０のときはＭＴＪ素子を高抵抗状態（論理値１に対応）から低抵抗状態（論理値０に対応）に確実に反転させる書き込みパルス（第３の電流）を流し、逆に、指定されたデータが１のときはＭＴＪ素子を低抵抗状態（論理値０に対応）から高抵抗状態（論理値１に対応）に確実に反転させる書き込みパルス（第４の電流）を流す。一方、ライトドライバ９２は書き込み信号（〜Ｗ）が１から０に変化した時に、乱数モード信号（〜ＲＮ）が０であれば乱数発生処理を行う。つまり、ライトドライバ９２は、セレクタ９５から送られてくるレジスタ９４の出力（現在のＭＴＪ素子の記憶データの否定をとったものになっている）に基づいて、アドレス線（Ａ）で選択されたＭＴＪ素子に対して、その状態を確率的に反転させる乱数発生パルスを流すことで、ＭＴＪ素子の状態をランダムに変化させて新しい乱数を発生させる。なお図２９のトライステートバッファ９３は図１３のトライステートバッファ４３と同一の機能を有する。
【００８２】
乱数モード信号（〜ＲＮ）が０であり書き込み信号（〜Ｗ）が０である状態は、本発明の乱数発生信号が受信された状態に相当する。また乱数モード信号（〜ＲＮ）が１であり書き込み信号（〜Ｗ）が０である状態は、本発明の書き込み信号が受信された状態に相当する。ライトドライバ９２は乱数発生信号（ここでは乱数モード信号（〜ＲＮ）が０であり書き込み信号（〜Ｗ）が０である状態を示す）を受信する第１の受信手段、書き込み信号（ここでは乱数モード信号（〜ＲＮ）が１であり書き込み信号（〜Ｗ）が０である状態を示す）を受信する本発明の第３の受信手段を含む。セレクタ９５は書き込みデータ（データ線（Ｄ）のデータ）を受信する本発明の第４の受信手段を含む。
【００８３】
図２９ではレジスタ９４は書き込み信号（〜Ｗ）が１から０に変化した時点でセンスアンプ９１から送られてくる読み出しデータを記憶するようになっているが、この記憶したデータが必要なのは乱数発生の時だけである。それゆえ、乱数モード信号（〜ＲＮ）が０の時に書き込み信号（〜Ｗ）が１から０に変化した時点でセンスアンプ９１から送られてくる読み出しデータを記憶するように実施しても良い。
【００８４】
図３０は、図１６の乱数発生器を、ＭＲＡＭとしても利用できるように変形した実施例（第８の実施例）である。図２５の乱数発生器と同様に、図１６の乱数発生器における乱数発生信号（〜Ｗ）は、図３０の乱数発生器では書き込み信号（〜Ｗ）になり、メモリとしての書き込みの指示と乱数発生の指示の両方の役割を兼ねる。図３０の乱数発生器は、図１６の乱数発生器の回路構成に加えて、乱数モード信号（〜ＲＮ）とセレクタ１０５が加わっている。乱数モード信号（〜ＲＮ）はセレクタ１０５に接続されている。セレクタ１０５は、乱数モード信号（〜ＲＮ）が０の時はレジスタ１０４の出力を、乱数モード信号（〜ＲＮ）が１の時はデータ線（Ｄ）のデータを、ライトドライバに１０２伝送する。乱数モード信号（〜ＲＮ）はライトドライバ１０２にも接続されている。ライトドライバ１０２は書き込み信号（〜Ｗ）が１から０に変化した時に、乱数モード信号（〜ＲＮ）が１であれば通常のメモリへの書き込み処理を行う。つまり、ライトドライバ１０２は、セレクタ１０５から送られてくるデータ線（Ｄ）に指定されたデータに基づいて、アドレス線（Ａ）で選択されたＭＴＪ素子に対して、書き込みパルスを流すことで、ＭＴＪ素子の状態を変化させてデータ線（Ｄ）に指定されたデータを記憶する。すなわち指定されたデータが０のときはＭＴＪ素子を高抵抗状態（論理値１に対応）から低抵抗状態（論理値０に対応）に確実に反転させる書き込みパルス（第３の電流）を流し、逆に、指定されたデータが１のときはＭＴＪ素子を低抵抗状態（論理値０に対応）から高抵抗状態（論理値１に対応）に確実に反転させる書き込みパルス（第４の電流）を流す。一方、ライトドライバ１０２は書き込み信号（〜Ｗ）が１から０に変化した時に、乱数モード信号（〜ＲＮ）が０であれば乱数発生処理を行う。つまり、ライトドライバ１０２は、セレクタ１０５から送られてくるレジスタ１０４の出力（現在のＭＴＪ素子の記憶データの否定をとったものになっている）に基づいて、アドレス線（Ａ）で選択されたＭＴＪ素子に対して、その状態を確率的に反転させる乱数発生パルスを流すことで、ＭＴＪ素子の状態をランダムに変化させて新しい乱数を発生させる。なおセンスアンプ１０１、トライステートバッファ１０３は図１６のセンスアンプ５１、トライステートバッファ５３と同一の機能を有する。
【００８５】
乱数モード信号（〜ＲＮ）が０であり書き込み信号（〜Ｗ）が０である状態は、本発明の乱数発生信号と書き込み信号との両方が受信された状態に相当する。また乱数モード信号（〜ＲＮ）が１であり書き込み信号（〜Ｗ）が０である状態は、本発明の書き込み信号が受信され乱数発生信号が受信されなかった状態に相当する。ライトドライバ１０２は乱数発生信号（ここでは乱数モード信号（〜ＲＮ）が０であり書き込み信号（〜Ｗ）が０である状態を示す）を受信する第１の受信手段、書き込み信号（ここでは乱数モード信号（〜ＲＮ）が１であり書き込み信号（〜Ｗ）が０である状態を示す）を受信する本発明の第３の受信手段を含む。セレクタ１０５は書き込みデータ（データ線（Ｄ）のデータ）を受信する本発明の第４の受信手段を含む。
【００８６】
これまでに説明した実施例では、乱数の発生と、乱数の読み出しを、別のタイミングで行うように実施しているが、乱数の発生と読み出しを同時に行うように実施することもできる。図３１に、図１３の乱数発生器を変形して、乱数の発生と読み出しを同時に行う乱数発生器の構成（第９の実施例）を示す。
【００８７】
図３１の乱数発生器は、乱数の発生に用いるＭＴＪ素子のアドレスを指定するアドレス線（図３１ではＡ）、乱数の値の読み出しに用いるデータ線（図３１ではＤ）、アドレス線（Ａ）で指定したＭＴＪ素子の状態を読み出してデータ線（Ｄ）に出力することとアドレス線（Ａ）で指定したＭＴＪ素子に新しい乱数値を生成することとを同時に指示する乱数発生信号（図３１では〜Ｗ）の線との３種類の信号線で外部回路と接続される。アドレス線（Ａ）は乱数発生器内の複数のＭＴＪ素子が選択できるように、ＭＴＪ素子の数に合わせた複数ビットの信号線である。データ線（Ｄ）も、同時に読み出すことができる乱数値が１ビットの乱数発生器であれば１本の信号線であるが、同時に複数ビットの乱数値を読み出すことができる乱数発生器の場合には複数ビットの信号線である。データ線（Ｄ）が複数ビットの信号線である場合には、センスアンプやライトドライバも複数個用いて、複数ビットの信号を並列して扱う。
【００８８】
乱数発生器内部には、セルアレイ３１、アドレスデコーダ３２、センスアンプ１１１、ライトドライバ１１２、レジスタ１１３が備えられる。セルアレイ３１は、乱数発生に用いる複数のＭＴＪ素子を、複数本のワード線と複数本のビット線の交点上に配置した、アレイ構造を持つ。アドレスデコーダ３２はアドレス線（Ａ）に接続され、セルアレイ３１のＭＴＪ素子の中からアドレス線（Ａ）で指定されたＭＴＪ素子が乱数値の読み出しあるいは乱数発生の対象になるように、セルアレイ３１のワード線と、必要に応じてビット線を制御する。センスアンプ１１１は、アドレス線（Ａ）で選択されたＭＴＪ素子に記録されている乱数値を読み出す。レジスタ１１３は、乱数発生信号（〜Ｗ）を受信するとセンスアンプ１１１から送られてくる乱数値を記憶する。レジスタ１１３の出力はデータ線（Ｄ）とライトドライバ１１２に接続されている。ライトドライバ１１２は、乱数発生信号（〜Ｗ）を受信すると、レジスタ１１３から送られてくる値に基づいて、ＭＴＪ素子に記憶している現在の乱数値を確率的に反転させる乱数発生パルスをアドレス線（Ａ）で選択されたＭＴＪ素子に流すことで、ＭＴＪ素子の状態をランダムに変化させて新しい乱数を発生させる。ライトドライバ１１２およびレジスタ１１３は乱数発生信号を受信する本発明の第１の受信手段を含む。
【００８９】
図３２は図３１の乱数発生器に乱数の発生と読み出しを指示する時の各信号線のタイミングチャートである。乱数発生器に接続した外部回路（例えばマイクロプロセッサなど）が乱数発生器に乱数の発生と読み出しを指示する場合は、アドレス線（Ａ）に乱数の発生と読み出しを行いたいＭＴＪ素子のアドレスを指定し、乱数発生信号（〜Ｗ）を１から０にして乱数発生器に乱数発生と読み出しを指示する。その結果、乱数発生器のセルアレイ３１の中のアドレス線（Ａ）で指定されたＭＴＪ素子に対して読み出し電流を流してセンスアンプ１１１で０／１の論理信号に変換し、その値をレジスタ１１３に記憶する。レジスタ１１３に記憶した現在のＭＴＪ素子の値は、発生した乱数としてデータ線（Ｄ）に出力するとともに、ライトドライバ１１２に送られる。次に、乱数発生器のセルアレイ３１の中のアドレス線（Ａ）で指定されたＭＴＪ素子に対して、ライトドライバ１１２が、レジスタ１１３から送られてきたＭＴＪ素子の現在の状態を示すデータに基づいて乱数を発生させる。ライトドライバ１１２によるＭＴＪ素子への乱数発生は、レジスタ１１３から送られてくる現在の乱数値が０であるＭＴＪ素子に対しては、ＭＴＪ素子を低抵抗状態（論理値０に対応）から高抵抗状態（論理値１に対応）に確率的に反転させる方向の乱数発生電流のパルスを流し、逆に、レジスタ１１３から送られてくる現在の乱数値が１であるＭＴＪ素子に対しては、ＭＴＪ素子を高抵抗状態（論理値１に対応）から低抵抗状態（論理値０に対応）に反転させる方向の乱数発生電流のパルスを流すことで行う。乱数発生信号（〜Ｗ）を０から１に戻すことで乱数発生処理を終了する。図３１の構成では、データ線（Ｄ）への乱数値の出力は、次に乱数発生信号（〜Ｗ）によって乱数発生と読み出しを指示するまで保持される。
【００９０】
図３１の乱数発生器は、乱数の発生と読み出しが指示されると、まずその時点のＭＴＪ素子の状態を乱数値として出力し、その後、ＭＴＪ素子の状態をランダムに反転させることで、次の乱数を発生させている。そのため、乱数発生器に乱数の発生と読み出しを指示した時に読み出されるのは、前回の乱数の発生と読み出しの指示の時にＭＴＪ素子に発生させておいて値である。また、乱数発生器に乱数の発生と読み出しを指示した時にＭＴＪ素子に発生させた乱数は、次回の乱数の発生と読み出しの指示の時に読みだされる値である。このように実現することで、乱数の発生と読み出しの指示が来てから新しい乱数値を出力するまでの時間を短くすることができる。このような方式の変形として、乱数の発生と読み出しの指示が来ると、まず現在のＭＴＪ素子の状態をランダムに反転させることで新しい乱数を発生し、次にＭＴＪ素子の状態を読み出しで乱数値として出力するように実装しても良い。
【００９１】
これまで説明したいずれの乱数発生器においても、通常のメモリとしてＭＴＪ素子へのデータ書き込みの時と、ＭＴＪ素子を乱数発生に用いる時とで、書き込み電流を変えるだけでなく、書き込みパルスの幅も変えるように実施することもできる。乱数発生時には、データ書き込み時よりも短い時間のパルスにすることで、電流の変化に対する反転確率の変化をよりなだらかにできるので、ばらつきをより小さくできる。
【００９２】
図１０、図１３、図１６、図２１、図２５、図２９、図３０、図３１の各実施例において、セルアレイの中のＭＴＪ素子の数が少なく、すべてのＭＴＪ素子に同時に読み出しや乱数生成ができる場合、つまりＭＴＪ素子の数とデータ線（Ｄ）のビット幅が等しい場合には、アドレスでＭＴＪ素子を選択する必要がないため、アドレス線（Ａ）およびアドレスデコーダを省略して実装できる。
【００９３】
また、これまで説明した乱数発生器では、ＭＴＪ素子の記憶層と参照層の磁化の向きが電流（電子）の流れる向きと垂直な、水平磁化方式のＭＴＪ素子を用いた実施例を示しているが、垂直磁化方式のＭＴＪ素子を用いてもまったく同様に実施できる。
【００９４】
さらに、これまで説明した乱数発生器では、記憶層と参照層がトンネルバリア層を挟んだ基本的な構造のＭＴＪ素子を用いた実施例を示しているが、さらに多層にすることでＭＴＪ素子の特性を向上させることができることが知られており、そのようなＭＴＪ素子を使った乱数発生器もまったく同様に実施できる。
【００９５】
なお、乱数を発生した後に、外乱によってＭＴＪ素子の状態が変化してしまうことを防止するために、乱数を発生した時点で誤り訂正符号化してパリティビットを同時に記録しておくように実施しても良い。
【図１】
2010182258.tif 000003
【図２】
2010182258.tif 000004
【図３】
2010182258.tif 000005
【図４】
2010182258.tif 000006
【図５】
2010182258.tif 000007
【図６】
2010182258.tif 000008
【図７】
2010182258.tif 000009
【図８】
2010182258.tif 000010
【図９】
2010182258.tif 000011
【図１０】
2010182258.tif 000012
【図１１】
2010182258.tif 000013
【図１２】
2010182258.tif 000014
【図１３】
2010182258.tif 000015
【図１４】
2010182258.tif 000016
【図１５】
2010182258.tif 000017
【図１６】
2010182258.tif 000018
【図１７】
2010182258.tif 000019
【図１８】
2010182258.tif 000020
【図１９】
2010182258.tif 000021
【図２０】
2010182258.tif 000022
【図２１】
2010182258.tif 000023
【図２２】
2010182258.tif 000024
【図２３】
2010182258.tif 000025
【図２４】
2010182258.tif 000026
【図２５】
2010182258.tif 000027
【図２６】
2010182258.tif 000028
【図２７】
2010182258.tif 000029
【図２８】
2010182258.tif 000030
【図２９】
2010182258.tif 000031
【図３０】
2010182258.tif 000032
【図３１】
2010182258.tif 000033
【図３２】
2010182258.tif 000034