IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 東芝メモリ株式会社の特許一覧

(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024137617
(43)【公開日】2024-10-07
(54)【発明の名称】乱数生成回路
(51)【国際特許分類】
   G06F 7/58 20060101AFI20240927BHJP
【FI】
G06F7/58 620
【審査請求】未請求
【請求項の数】18
【出願形態】OL
(21)【出願番号】P 2023150464
(22)【出願日】2023-09-15
(31)【優先権主張番号】P 2023045856
(32)【優先日】2023-03-22
(33)【優先権主張国・地域又は機関】JP
(71)【出願人】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110003708
【氏名又は名称】弁理士法人鈴榮特許綜合事務所
(72)【発明者】
【氏名】木野 洋介
(72)【発明者】
【氏名】野上 良
(72)【発明者】
【氏名】高山 篤史
(72)【発明者】
【氏名】櫻田 健次
(72)【発明者】
【氏名】熊野 尚人
(57)【要約】
【課題】ある範囲の値から重複しない値をランダムに効率良く出力することができる乱数生成回路を提供する。
【解決手段】乱数生成回路は、メモリ回路と、制御回路とを具備する。メモリ回路は、複数のアドレスでそれぞれ指定される複数の記憶領域を含む。制御回路は、複数の記憶領域に、互いに異なる複数の値をそれぞれ記憶させ、第1乱数を生成し、第1乱数を用いて複数のアドレスのうちの1つである第1アドレスを取得し、複数の記憶領域のうちの、第1アドレスで指定される第1記憶領域に記憶された第1値を読み出し、複数の記憶領域のうちの、第2アドレスで指定される第2記憶領域に記憶された第2値を読み出す。第2アドレスは、複数の記憶領域のうちの第1値がまだ読み出されていない記憶領域に対応するアドレスのうちの最大の値を有するアドレスである。制御回路は、第1値を読み出した後に、第1記憶領域に第2値を書き込む。制御回路は、第1値を出力する。
【選択図】図4
【特許請求の範囲】
【請求項1】
複数のアドレスでそれぞれ指定される複数の記憶領域を含むメモリ回路と、
前記複数の記憶領域に、互いに異なる複数の値をそれぞれ記憶させ、
第1乱数を生成し、
前記第1乱数を用いて前記複数のアドレスのうちの1つである第1アドレスを取得し、
前記複数の記憶領域のうちの、前記第1アドレスで指定される第1記憶領域に記憶された第1値を読み出し、
前記複数の記憶領域のうちの、前記第1値がまだ読み出されていない記憶領域に対応するアドレスのうちの最大の値を有するアドレスである第2アドレスで指定される第2記憶領域に記憶された第2値を読み出し、
前記第1値を読み出した後に、前記第1記憶領域に前記第2値を書き込み、
前記第1値を出力する、
ように構成された制御回路と、を具備する、
乱数生成回路。
【請求項2】
前記互いに異なる複数の値の個数は(Y+1)(Yは1以上の整数)であり、
前記複数のアドレスは、0以上Y以下の整数であり、
前記制御回路は、前記互いに異なる複数の値として、0以上Y以下の整数を前記複数の記憶領域のそれぞれに記憶させる、ように構成された、
請求項1に記載の乱数生成回路。
【請求項3】
前記制御回路は、前記第1乱数を前記(Y+1)で除算し、得られた余りを前記第1アドレスとして取得する、ように構成された、
請求項2に記載の乱数生成回路。
【請求項4】
前記制御回路は、前記第1値がまだ読み出されていない前記記憶領域に対応するアドレスの個数に1を加算した値で前記第1乱数を除算し、得られた余りを前記第1アドレスとして取得する、ように構成された、
請求項1に記載の乱数生成回路。
【請求項5】
前記制御回路は、前記第1乱数を生成することから、前記第1値の読み出しまでを、前記第1値がまだ読み出されていない前記記憶領域に対応するアドレスの範囲を狭めながら、第1回数だけ繰り返す、ように更に構成された、
請求項1に記載の乱数生成回路。
【請求項6】
前記第1回数は、前記互いに異なる複数の値の個数と異なる、
請求項5に記載の乱数生成回路。
【請求項7】
前記第1回数は、前記互いに異なる複数の値の個数と等しい、
請求項5に記載の乱数生成回路。
【請求項8】
前記制御回路は、前記第1アドレスと前記第2アドレスが等しい場合に、前記第1記憶領域に前記第2値を書き込む処理をスキップする、ように更に構成された、
請求項1に記載の乱数生成回路。
【請求項9】
前記第1乱数を生成する第1回路と、
前記第2記憶領域に記憶された前記第2値を読み出す第2回路と、をさらに具備する、
請求項1に記載の乱数生成回路。
【請求項10】
前記第1回路と前記第2回路とは独立して並列に動作するように構成された、
請求項9に記載の乱数生成回路。
【請求項11】
複数のアドレスでそれぞれ指定される複数の記憶領域を含むメモリ回路と、
前記複数のアドレスを第1グループと第2グループとに分割し、
前記第1グループの複数のアドレスでそれぞれ指定される複数の第1記憶領域に互いに異なる複数の値をそれぞれ記憶させ、前記複数の第1記憶領域にそれぞれ記憶される値と同一の値を前記第2グループの複数のアドレスでそれぞれ指定される複数の第2記憶領域にそれぞれ記憶させ、
第1乱数を生成し、
前記第1乱数を用いて前記複数のアドレスのうちの1つである第1アドレスを取得し、
前記第1アドレスが前記第1グループに属するとき、
前記複数の第1記憶領域のうちの、前記第1アドレスで指定される第3記憶領域に記憶された第1値を読み出し、前記第1値に第1演算を行うことにより第2値を取得し、
前記複数の第1記憶領域のうちの、前記第1値がまだ読み出されていない記憶領域に対応するアドレスのうちの最大の値を有するアドレスである第2アドレスで指定される第4記憶領域に記憶された第3値を読み出し、
前記第1値を読み出した後に、前記第3記憶領域に前記第3値を書き込み、
前記第2値を出力し、
前記第1アドレスが前記第2グループに属するとき、
前記複数の第2記憶領域のうちの、前記第1アドレスで指定される第5記憶領域に記憶された第4値を読み出し、前記第4値に第2演算を行うことにより第5値を取得し、
前記複数の第2記憶領域のうちの、前記第4値がまだ読み出されていない記憶領域に対応するアドレスのうちの最大の値を有するアドレスである第3アドレスで指定される第6記憶領域に記憶された第6値を読み出し、
前記第4値を読み出した後に、前記第5記憶領域に前記第6値を書き込み、
前記第5値を出力する、
ように構成された制御回路と、を具備する、
乱数生成回路。
【請求項12】
前記制御回路は、X(0以上の整数)個の乱数を取得する場合に、
前記複数のアドレスを、前記Xの2分の1であるY個のアドレスをそれぞれが含む前記第1グループと前記第2グループとに分割し、
前記第1アドレスが前記第1グループに属するとき、
第1変数に0を設定し、
前記第1演算では前記第1値に前記第1変数の値を加算し、
前記第1アドレスが前記第2グループに属するとき、
前記第1変数に前記Yを設定し、
前記第2演算では前記第4値に前記第1変数の値を加算する、ように構成された、
請求項11に記載の乱数生成回路。
【請求項13】
前記制御回路は、X(0以上の整数)個の乱数を取得する場合に、
前記複数のアドレスを、前記Xの2分の1であるY個のアドレスをそれぞれが含む前記第1グループと前記第2グループとに分割し、
前記第1アドレスが前記第1グループに属するとき、
第1変数に0を設定し、
前記第1演算では前記第1値を2倍するとともに前記第1変数の値を加算し、
前記第1アドレスが前記第2グループに属するとき、
前記第1変数に1を設定し、
前記第2演算では前記第4値を2倍するとともに前記第1変数の値を加算する、ように構成された、
請求項11に記載の乱数生成回路。
【請求項14】
前記メモリ回路は第1メモリと第2メモリとを含み、
前記第1メモリは前記複数の第1記憶領域を含み、
前記第2メモリは前記複数の第2記憶領域を含む、
請求項11に記載の乱数生成回路。
【請求項15】
前記制御回路は、
前記複数のアドレスを第3グループと第4グループとにさらに分割し、
前記複数の第1記憶領域にそれぞれ記憶される値と同一の値を前記第3グループの複数のアドレスでそれぞれ指定される複数の第7記憶領域にそれぞれ記憶させ、
前記複数の第1記憶領域にそれぞれ記憶される値と同一の値を前記第4グループの複数のアドレスでそれぞれ指定される複数の第8記憶領域にそれぞれ記憶させ、
前記第1アドレスが前記第3グループに属するとき、
前記複数の第7記憶領域のうちの、前記第1アドレスで指定される第9記憶領域に記憶された第7値を読み出し、前記第7値に第3演算を行うことにより第8値を取得し、
前記複数の第7記憶領域のうちの、前記第7値がまだ読み出されていない記憶領域に対応するアドレスのうちの最大の値を有するアドレスである第4アドレスで指定される第10記憶領域に記憶された第9値を読み出し、
前記第7値を読み出した後に、前記第9記憶領域に前記第9値を書き込み、
前記第8値を出力し、
前記第1アドレスが前記第4グループに属するとき、
前記複数の第8記憶領域のうちの、前記第1アドレスで指定される第11記憶領域に記憶された第10値を読み出し、前記第10値に第4演算を行うことにより第11値を取得し、
前記複数の第8記憶領域のうちの、前記第10値がまだ読み出されていない記憶領域に対応するアドレスのうちの最大の値を有するアドレスである第5アドレスで指定される第12記憶領域に記憶された第12値を読み出し、
前記第10値を読み出した後に、前記第11記憶領域に前記第12値を書き込み、
前記第11値を出力する、
ように構成された、
請求項11に記載の乱数生成回路。
【請求項16】
前記制御回路は、X(0以上の整数)個の乱数を取得する場合に、
前記複数のアドレスを、前記Xの4分の1であるZ個のアドレスをそれぞれが含む前記第1グループと前記第2グループと前記第3グループと前記第4グループとに分割し、
前記第1アドレスが前記第1グループに属するとき、
第1変数に0を設定し、
前記第1演算では前記第1値を4倍するとともに前記第1変数の値を加算し、
前記第1アドレスが前記第2グループに属するとき、
前記第1変数に1を設定し、
前記第2演算では前記第4値を4倍するとともに前記第1変数の値を加算し、
前記第1アドレスが前記第3グループに属するとき、
前記第1変数に2を設定し、
前記第3演算では前記第7値を4倍するとともに前記第1変数の値を加算し、
前記第1アドレスが前記第4グループに属するとき、
前記第1変数に3を設定し、
前記第4演算では前記第10値を4倍するとともに前記第1変数の値を加算する、ように構成された、
請求項15に記載の乱数生成回路。
【請求項17】
不揮発性メモリと、
請求項1に記載の乱数生成回路を含み、前記不揮発性メモリを制御するように構成されたメモリコントローラと、を具備し、
前記メモリコントローラは、
前記不揮発性メモリからデータを読み出し、
前記読み出されたデータに、前記乱数生成回路から出力された前記第1値に基づいてエラーを挿入し、
前記エラーが挿入されたデータに対し、エラー訂正を実行する
ように構成された、メモリシステム。
【請求項18】
前記メモリコントローラは、
前記乱数生成回路から出力された前記第1値に基づいて、前記読み出されたデータ中に挿入される前記エラーの位置を決定する、ように構成された、
請求項17に記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、乱数生成回路に関する。
【背景技術】
【0002】
ある範囲の値から重複しない値をランダムに出力する乱数生成回路が知られている。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特許第5813380号明細書
【特許文献2】特許第6380804号明細書
【特許文献3】米国特許第9292428号明細書
【発明の概要】
【発明が解決しようとする課題】
【0004】
一つの実施形態は、ある範囲の値から重複しない値をランダムに効率良く出力することができる乱数生成回路を提供する。
【課題を解決するための手段】
【0005】
実施形態の乱数生成回路は、メモリ回路と、制御回路とを具備する。メモリ回路は、複数のアドレスでそれぞれ指定される複数の記憶領域を含む。制御回路は、複数の記憶領域に、互いに異なる複数の値をそれぞれ記憶させ、第1乱数を生成し、第1乱数を用いて複数のアドレスのうちの1つである第1アドレスを取得し、複数の記憶領域のうちの、第1アドレスで指定される第1記憶領域に記憶された第1値を読み出し、複数の記憶領域のうちの、第2アドレスで指定される第2記憶領域に記憶された第2値を読み出す、ように構成される。第2アドレスは、複数の記憶領域のうちの第1値がまだ読み出されていない記憶領域に対応するアドレスのうちの最大の値を有するアドレスである。制御回路は、第1値を読み出した後に、第1記憶領域に第2値を書き込み、第1値を出力するように構成される。
【図面の簡単な説明】
【0006】
図1】第1実施形態に係る乱数生成回路のハードウェア構成を示すブロック図である。
図2】第1実施形態に係る乱数生成回路の機能ブロックの構成を示す図である。
図3】第1実施形態に係る乱数生成回路の機能ブロック間の命令及びデータの授受を示す図である。
図4】第1実施形態に係る乱数生成回路の動作を示すフローチャートである。
図5】第1実施形態に係るメモリ回路における初期の記憶状態を示す図である。
図6】第1実施形態に係るメモリ回路における記憶状態の推移の具体例を示す図である。
図7】第2実施形態に係る乱数生成回路の動作を示すフローチャートである。
図8】第2実施形態に係るメモリ回路における初期の記憶状態を示す図である。
図9】第2実施形態に係るメモリ回路における記憶状態の推移の具体例を示す図である。
図10】第3実施形態に係る乱数生成回路の動作を示すフローチャートである。
図11】第3実施形態に係る動作の一部をパイプライン処理した様子を示す図である。
図12】第4実施形態に係る乱数生成回路の動作を示すフローチャートである。
図13】第4実施形態に係るメモリ回路における記憶状態の推移の具体例を示す図である。
図14】第4実施形態に係るメモリ回路における記憶状態の推移の具体例を示す図である。
図15】第4実施形態に係るメモリ回路におけるアドレス及び記憶値、並びに変数の推移の具体例を示す図である。
図16】第4実施形態に係るメモリ回路におけるアドレス及び記憶値、並びに変数の推移の具体例を示す図である。
図17】第4実施形態に係るメモリ回路におけるアドレス及び記憶値、並びに変数の推移の具体例を示す図である。
図18】第4実施形態に係るメモリ回路におけるアドレス及び記憶値、並びに変数の推移の具体例を示す図である。
図19】第4実施形態に係るメモリ回路におけるアドレス及び記憶値、並びに変数の推移の具体例を示す図である。
図20】第4実施形態に係るメモリ回路におけるアドレス及び記憶値、並びに変数の推移の具体例を示す図である。
図21】第4実施形態に係るメモリ回路におけるアドレス及び記憶値、並びに変数の推移の具体例を示す図である。
図22】第4実施形態に係るメモリ回路におけるアドレス及び記憶値、並びに変数の推移の具体例を示す図である。
図23】第4実施形態に係るメモリ回路におけるアドレス及び記憶値、並びに変数の推移の具体例を示す図である。
図24】第4実施形態に係るメモリ回路におけるアドレス及び記憶値、並びに変数の推移の具体例を示す図である。
図25】第4実施形態に係るメモリ回路におけるアドレス及び記憶値、並びに変数の推移の具体例を示す図である。
図26】第4実施形態に係るメモリ回路におけるアドレス及び記憶値、並びに変数の推移の具体例を示す図である。
図27】第4実施形態に係るメモリ回路におけるアドレス及び記憶値、並びに変数の推移の具体例を示す図である。
図28】第4実施形態に係るメモリ回路におけるアドレス及び記憶値、並びに変数の推移の具体例を示す図である。
図29】第4実施形態に係るメモリ回路におけるアドレス及び記憶値、並びに変数の推移の具体例を示す図である。
図30】第4実施形態に係るメモリ回路におけるアドレス及び記憶値、並びに変数の推移の具体例を示す図である。
図31】第4実施形態に係るメモリ回路におけるアドレス及び記憶値、並びに変数の推移の具体例を示す図である。
図32】第4実施形態の変形例に係る乱数生成回路の動作を示すフローチャートである。
図33】第4実施形態の変形例に係るメモリ回路における記憶状態の推移の具体例を示す図である。
図34】第5実施形態に係る乱数生成回路の動作を示すフローチャートである。
図35】第5実施形態に係るメモリ回路における記憶状態を示す図である。
図36】第6実施形態に係る乱数生成回路の動作を示すフローチャートである。
図37】第6実施形態に係るメモリ回路における記憶状態の推移の具体例を示す図である。
図38】第6実施形態に係るメモリ回路における記憶状態の推移の具体例を示す図である。
図39】第6実施形態に係るメモリ回路における記憶状態の推移の具体例を示す図である。
【発明を実施するための形態】
【0007】
以下、図面を参照して実施形態について説明する。以下の説明において、同一の機能及び構成を有する構成要素については、共通する参照符号を付す。また、以下に示す実施形態は、この実施形態の技術的思想を具体化するための装置や方法を例示するものであって、構成部品の材質、形状、構造、及び配置等を下記のものに特定するものではない。
【0008】
機能ブロックは、ハードウェア、コンピュータソフトウェアのいずれかまたは両者を組み合わせたものとして実現することができる。機能ブロックが以下の例のように区別されていることは必須ではない。例えば、一部の機能が例示の機能ブロックとは別の機能ブロックによって実行されてもよい。さらに、例示の機能ブロックがさらに細かい機能サブブロックに分割されていてもよい。
【0009】
1.第1実施形態
第1実施形態の乱数生成回路について説明する。第1実施形態の乱数生成回路は、乱数生成器にて生成された乱数を用いて、ある範囲の値から任意の数の値を重複することなくランダムに出力する回路である。
【0010】
1.1 第1実施形態の構成
第1実施形態の乱数生成回路のハードウェア構成の一例について説明する。図1は、第1実施形態の乱数生成回路のハードウェア構成を示すブロック図である。
【0011】
乱数生成回路1は、例えば、SOC(system-on-a-chip)のような半導体装置により構成される。具体的には、乱数生成回路1は、CPU(central processing unit)コア(あるいは、プロセッサコア)2、メモリコア3、インターフェースコア4、及び専用回路コア5を備える。CPUコア2は、演算処理、データ処理、及び各種制御を行う。メモリコア3は、ソフトウェアやデータを記憶するメモリ素子、及びメモリ素子を制御する回路を含む。インターフェースコア4は、外部装置と乱数生成回路1との間での制御信号及びデータの入出力及びそれら入出力の制御を行う。専用回路コア5は、後述する各種の機能を持つ複数の専用回路を含む。
【0012】
次に、第1実施形態の乱数生成回路の機能ブロックの構成について説明する。図2は、第1実施形態の乱数生成回路における機能ブロックの構成を示す図である。
【0013】
乱数生成回路1は、乱数生成制御部10、メモリ制御部20、繰り返し制御部30、及びメモリ部40を備える。
【0014】
乱数生成制御部10は、乱数生成器11、数値範囲制限回路12、及びデクリメント回路13を含む。乱数生成器11は、乱数Aを生成し、出力する。乱数Aは任意の整数である。乱数生成器11は、例えば、メルセンヌ・ツイスタ(Mersenne twister)等の乱数生成器である。数値範囲制限回路12は、乱数Aを、0、1、2、…、jの範囲の値に制限するための処理を行う。デクリメント回路13は、変数“j”をデクリメントする。すなわち、デクリメント回路13は、変数“j”から1を減算する。変数“j”は1以上の整数である。
【0015】
メモリ制御部20は、初期値書き込み制御回路21、データ読み出し制御回路22、読み出し及び書き込み制御回路23を含む。初期値書き込み制御回路21は、メモリ部40に、(Y+1)個のそれぞれ異なる値を書き込む。(Y+1)個のそれぞれ異なる値は、任意の値で良い。例えば、(Y+1)個の値は、連続する整数の値である。この連続する整数の最小値は例えば0である。この連続する整数の最大値は例えばYである。初期値書き込み制御回路21は、(Y+1)個の値を、乱数生成回路1の外部(例えば乱数生成回路1が接続される不揮発性メモリ)から取得してもよい。
【0016】
データ読み出し制御回路22は、メモリ部40のアドレスBで指定される記憶領域に記憶されたデータを読み出す。読み出し及び書き込み制御回路23は、メモリ部40のアドレスjで指定される記憶領域に記憶されたデータを読み出し、読み出したデータをアドレスBで指定される記憶領域に書き込む。Bは0以上j以下の整数である。以降では、メモリ部40のアドレスZで指定される記憶領域にアクセスすること(すなわち、この記憶領域からデータを読み出すこと、または、この記憶領域にデータを書き込むこと)を、アドレスZにアクセスする、とも表記する。
【0017】
メモリ部40はメモリ回路41を含む。メモリ回路41は、アドレスで指定される記憶領域にデータを記憶する。メモリ回路41は、例えば、SRAM(static random access memory)を含む。
【0018】
繰り返し制御部30は、繰り返し制御回路31を含む。繰り返し制御回路31は、乱数生成制御部10、メモリ制御部20、及びメモリ部40に含まれる回路を制御する。繰り返し制御回路31は、例えば、シーケンサを含む。
【0019】
乱数生成制御部10は、例えば、専用回路コア5あるいはCPUコア2によって構成される。メモリ制御部20は、例えば、専用回路コア5あるいはCPUコア2によって構成される。繰り返し制御部30は、例えば、CPUコア2によって構成される。メモリ部40は、例えば、メモリコア3によって構成される。
【0020】
1.2 第1実施形態の動作
第1実施形態の乱数生成回路の動作について説明する。先ず、図3を用いて、乱数生成回路1における機能ブロック間の命令及びデータのやり取りについて説明する。図3は、第1実施形態の乱数生成回路における機能ブロック間の命令及びデータの授受を示す図である。
【0021】
先ず、動作開始のタイミングになると、繰り返し制御部30は、乱数生成の指示、及び乱数生成範囲の指示を乱数生成制御部10に送信する。
【0022】
乱数生成制御部10は、乱数生成の指示及び乱数生成範囲の指示に基づいて、乱数を生成する。乱数生成制御部10は、生成した乱数をメモリ制御部20に送信する。以降、乱数生成制御部10が生成した乱数を、内部乱数とも称する。また、繰り返し制御部30は、メモリ部40に対する読み出し動作及び書き込み動作の指示をメモリ制御部20に送信する。
【0023】
メモリ制御部20は、読み出し動作の指示とアドレスをメモリ部40に送信する。このとき、メモリ制御部20は、乱数生成制御部10から受信した内部乱数に基づく値をアドレスとして送信する。メモリ部40は、読み出し動作の指示とアドレスとに基づいて、アドレスで指定される記憶領域に記憶されたデータを読み出す。さらに、メモリ部40は、読み出したデータをメモリ制御部20に送信する。メモリ制御部20は、受信したデータを出力する。後述するように、メモリ制御部20から出力されるデータは、それぞれ異なる値から内部乱数に基づいて取得される値である。以降、メモリ制御部20から出力されるデータを、出力乱数とも称する。
【0024】
また、メモリ制御部20は、読み出し動作及び書き込み動作の指示をメモリ部40に送信する。メモリ部40は、読み出し動作及び書き込み動作の指示に基づいて、読み出し動作及び書き込み動作を行う。さらに、メモリ部40は、読み出したデータをメモリ制御部20に送信し、メモリ制御部20から書き込みデータを受信する。
【0025】
次に、第1実施形態の乱数生成回路の動作について説明する。図4は、第1実施形態の乱数生成回路の動作を示すフローチャートである。このフローチャートに示される動作は、繰り返し制御回路(あるいは、シーケンサ)31により制御される。図5は、メモリ回路41における初期の記憶状態を示し、メモリ回路41におけるアドレスと、それらアドレスに記憶されたデータ(記憶値)とを示している。
【0026】
第1実施形態の動作では、乱数生成回路1は、(Y+1)個の値の中からX個の重複しない値をランダムに取得する。ここで、Yは1以上の整数である。Xは1以上Y以下の整数である。ここでは、初期値書き込み制御回路21が、連続する整数の値(0~Y)を(Y+1)個のそれぞれ異なる値としてメモリ部40に書き込んだ場合について説明する。
【0027】
図4に示すように、先ず、繰り返し制御回路31は、変数“i”をXに設定する。変数“i”は、取得された出力乱数の個数を管理するための変数である。変数“i”はX以下の整数である。また、繰り返し制御回路31は、変数“j”をYに設定する。変数“j”は、出力乱数が読み出されていないメモリ回路41のアドレスの値のうち、最大値を示す変数である。変数“j”はY以下の整数である。また、繰り返し制御回路31は、初期値書き込み制御回路21により、メモリ回路41に初期の記憶状態42_0を設定する(S1)。図5に示すように、初期の記憶状態42_0では、アドレス0、1、2、3、…、Y-4、Y-3、Y-2、Y-1、及びYに、記憶値0、1、2、3、…、Y-4、Y-3、Y-2、Y-1、及びYがそれぞれ記憶されている。
【0028】
次に、繰り返し制御回路31は、乱数生成器11により乱数(即ち、内部乱数)Aを生成する(S2)。内部乱数Aは、任意の整数である。
【0029】
続いて、繰り返し制御回路31は、数値範囲制限回路12により、内部乱数Aを0~jの範囲の値に制限するための処理を行う。すなわち、数値範囲制限回路12は、内部乱数Aを用いて0~jの範囲の値を得るための処理を行う。具体的には、数値範囲制限回路12は、内部乱数Aを(j+1)で除算する。数値範囲制限回路12は、この除算によって余りBを算出する(S3)。余りBは0以上j以下の整数である。なお、上述したように、変数“j”の初期値はYに等しい。この場合、余りBは0以上Y以下の整数である。
【0030】
次に、繰り返し制御回路31は、余りBをメモリ回路41のアドレスと見なし、データ読み出し制御回路22によりメモリ回路41のアドレスBから値Pを読み出す(S4)。値Pは0以上Y以下の整数である。この値Pがメモリ制御部20から出力される出力乱数Pである。
【0031】
次に、繰り返し制御回路31は、変数“i”をデクリメントする。すなわち、繰り返し制御回路31は、変数“i”から1を減算する(S5)。
【0032】
続いて、繰り返し制御回路31は、減算後の変数“i”が0になっているか否かを判定する(S6)。変数“i”が0になっている場合(S6でYes)、X個の出力乱数Pが取得されたため、繰り返し制御回路31は動作を終了する。
【0033】
変数“i”が0になっていない場合(S6でNo)、繰り返し制御回路31は、余りB(すなわち、アドレスB)と変数“j”とが等しいか否かを判定する(S7)。すなわち、繰り返し制御回路31は、ステップS4において出力乱数が読み出されたメモリ回路41のアドレスの値が、それまでに出力乱数が読み出されていないアドレスの値のうちの最大値であったか否かを判定する。余りBと変数“j”とが等しい場合(S7でYes)、繰り返し制御回路31は、出力乱数がまだ読み出されていないアドレスの値のうちの最大値が余りBであるため、ステップS8及びS9をスキップして、デクリメント回路13により変数“j”をデクリメントする(S10)。すなわち、繰り返し制御回路31は、変数“j”から1を減算する。その後、繰り返し制御回路31は、ステップS2以降の処理を繰り返す。
【0034】
余りBと変数“j”とが等しくない場合(S7でNo)、繰り返し制御回路31は、読み出し及び書き込み制御回路23により、変数“j”の値のアドレスで示されるメモリ回路41の記憶領域に記憶された値Qを読み出す(S8)。値Qは0以上Y以下の整数である。
【0035】
次に、繰り返し制御回路31は、読み出し及び書き込み制御回路23によりメモリ回路41のアドレスBに、値Qを書き込む(S9)。すなわち、繰り返し制御回路31は、ステップS4において値Pが読み出されたアドレスBに、アドレスjから読み出された値Qを上書きする。
【0036】
次に、繰り返し制御回路31による処理は、ステップS10に移行する。上述したように、繰り返し制御回路31は、デクリメント回路13により変数“j”をデクリメントする。その後、繰り返し制御回路31は、ステップS2以降の処理を繰り返す。
【0037】
上述のステップS2~S10が繰り返されることにより、乱数生成回路1は、(Y+1)個の値の中から重複しないX個の出力乱数Pを取得する。
【0038】
以下に、図5及び図6を用いて、第1実施形態の乱数生成回路の具体的な動作を説明する。図6は、メモリ回路41における記憶状態の推移の具体例を示す。
【0039】
図4のステップS1において、図5に示すように、メモリ回路41が初期の記憶状態42_0に設定される。すなわち、メモリ回路41の初期の記憶状態42_0では、アドレス0、1、2、3、…、Y-4、Y-3、Y-2、Y-1、及びYに、記憶値0、1、2、3、…、Y-4、Y-3、Y-2、Y-1、及びYがそれぞれ記憶される。
【0040】
図6に示すように、1回目の乱数の取得動作(図4のステップS3)において、余りBとして4が得られたものとする。すると、アドレス4に記憶された値4が読み出される(図4のステップS4)。そして、読み出された値4が出力乱数として取得される。その後、アドレス4には、アドレスjから読み出された値Yが書き込まれる(図4のステップS8~S9)。なお、上述したように、1回目の乱数の取得動作の時では、変数“j”はYに等しい。さらに、変数“j”がデクリメントされて、出力乱数が取得されていないアドレスの範囲が0~(Y-1)となる。これにより、メモリ回路41の記憶状態42_1では、アドレス0、1、2、3、4、5、6、7、8、…、Y-4、Y-3、Y-2、及びY-1に、記憶値0、1、2、3、Y、5、6、7、8、…、Y-4、Y-3、Y-2、及びY-1がそれぞれ記憶される。なお、記憶状態42_1におけるアドレスYの状態は、図6では省略されている。
【0041】
次に、2回目の乱数の取得動作(図4のステップS3)において、余りBとして7が得られたものとする。すると、アドレス7に記憶された値7が読み出される(図4のステップS4)。そして、読み出された値7が出力乱数として取得される。その後、アドレス7には、アドレスj(すなわちアドレス(Y-1))から読み出された値(Y-1)が書き込まれる(図4のステップS8~S9)。さらに、変数“j”が(Y-1)から(Y-2)にデクリメントされて、出力乱数が取得されていないアドレスの範囲が0~(Y-2)となる。これにより、メモリ回路41の記憶状態42_2では、アドレス0、1、2、3、4、5、6、7、8、…、Y-4、Y-3、及びY-2に、記憶値0、1、2、3、Y、5、6、Y-1、8、…、Y-4、Y-3、及びY-2がそれぞれ記憶される。なお、記憶状態42_2におけるアドレス(Y-1)~アドレスYの状態は、図6では省略されている。
【0042】
さらに、3回目の乱数の取得動作(図4のステップS3)において、余りBとして4が得られたものとする。すると、アドレス4に記憶された値Yが読み出される(図4のステップS4)。そして、読み出された値Yが出力乱数として取得される。その後、アドレス4には、アドレスj(すなわちアドレス(Y-2))から読み出された値(Y-2)が書き込まれる(図4のステップS8~S9)。さらに、変数“j”が(Y-2)から(Y-3)にデクリメントされて、出力乱数が取得されていないアドレスの範囲が0~(Y-3)となる。これにより、メモリ回路41の記憶状態42_3では、アドレス0、1、2、3、4、5、6、7、8、…、Y-4、及びY-3に、記憶値0、1、2、3、Y-2、5、6、Y-1、8、…、Y-4、及びY-3がそれぞれ記憶される。なお、記憶状態42_3におけるアドレス(Y-2)~アドレスYの状態は、図6では省略されている。
【0043】
さらに、4回目の乱数の取得動作(図4のステップS3)において、余りBとして(Y-3)が得られたものとする。すると、アドレス(Y-3)に記憶された値(Y-3)が読み出される(図4のステップS4)。そして、読み出された値(Y-3)が出力乱数として取得される。その後、変数“j”が(Y-3)から(Y-4)にデクリメントされて、出力乱数が取得されていないアドレスの範囲が0~(Y-4)となる。これにより、メモリ回路41の記憶状態42_4では、アドレス0、1、2、3、4、5、6、7、8、…、及びY-4に、記憶値0、1、2、3、Y-2、5、6、Y-1、8、…、及びY-4がそれぞれ記憶される。なお、記憶状態42_4におけるアドレス(Y-3)~アドレスYの状態は、図6では省略されている。
【0044】
上述した乱数の取得動作がX回繰り返されることにより、乱数生成回路1は、(Y+1)個の値の中から重複しないX個の出力乱数を取得できる。
【0045】
1.3 第1実施形態の効果
第1実施形態によれば、ある範囲の値から重複しない値をランダムに効率良く出力することができる乱数生成回路を提供できる。
【0046】
第1実施形態では、乱数生成制御部10が生成した乱数Bが、メモリ部40のメモリ回路41からデータを読み出すためのアドレスとして使用される。メモリ回路41には、重複しない値0~Yが記憶されている。メモリ制御部20は、アドレスBから読み出した値Pを乱数として出力する。アドレスBに記憶されたデータが読み出される毎に、メモリ回路41のまだ読み出されていないアドレスから読み出された値が、アドレスBに上書きされる。そして、次に取得する乱数の範囲がデクリメントされる。すなわち、一度読み出されたアドレスに記憶された値が、まだ読み出されていないアドレスに記憶された値によって上書きされ、乱数の取得範囲が削減される。これにより、これ以降、乱数生成制御部10が生成する乱数B(即ち、アドレスB)が以前の値と重複しても、メモリ回路41から読み出される値Pは、以前に読み出された値と重複しない。
【0047】
また、第1実施形態では、アドレスBに記憶された値Pがメモリ回路41から読み出された後、読み出される値が重複しないように、アドレスBに記憶された値が書き換えられるが、この書き換え回数は、1回の乱数出力につき1回で済む。このため、メモリ回路41に記憶された値を書き換える回数を最小回数に抑えることができ、メモリ回路41における値の書き換え回数を低減できる。
【0048】
従って、第1実施形態の構成では、メモリ回路41における値の書き換え回数を低減できるため、X個の乱数の取得動作を高速化することができる。すなわち、X個の乱数の取得動作に要する時間を短縮することができる。
【0049】
さらに、メモリ回路41における値の書き換え回数を低減できるため、X個の乱数の取得動作に係る消費電力を低減することができる。
【0050】
以上述べたように第1実施形態によれば、乱数を効率良く出力することができる乱数生成回路及を提供できる。
【0051】
以下に、第1実施形態の乱数生成回路を不揮発性メモリのエラーエミュレーションに適用した例を説明する。不揮発性メモリは、例えばNAND型フラッシュメモリである。
【0052】
乱数生成回路1を含む半導体装置は、不揮発性メモリを制御するメモリコントローラとして機能し得る。メモリコントローラとして機能する半導体装置と、不揮発性メモリとは、メモリシステムを構成する。メモリコントローラは、不揮発性メモリに電気的に接続される。メモリコントローラは、乱数生成回路1を用いて、不揮発性メモリのエラーエミュレーションを実行し得る。
【0053】
エラーエミュレーションでは、不揮発性メモリから読み出されたデータ(リードデータ)の中に、例えば、ランダムにエラーデータが挿入される。このエラーエミュレーションは、例えば、メモリコントローラのエラー訂正能力の評価に用いられる。例えば、メモリコントローラは不揮発性メモリからリードデータを読み出す。リードデータ中の4000箇所のエラーデータの候補位置から500箇所のエラーデータの位置を決める場合、メモリコントローラは、第1実施形態の乱数生成回路1を用いて、4000個の整数(すなわちY=3999)から、500個の重複しない値(すなわちX=500)をランダムに取得する。メモリコントローラは、取得された値に基づいて、500箇所のエラーデータの位置を決定する。メモリコントローラは、決定した位置にエラーを挿入する。そして、メモリコントローラは、挿入されたエラーを含むリードデータに対し、エラー訂正を実行する。
【0054】
この場合、乱数生成回路1は、メモリ回路41に記憶されたデータを500回書き換えるだけでこの動作を実行できる。すなわち、第1実施形態の乱数生成回路1をエラーエミュレーションに用いれば、上記動作において必要なメモリ回路41におけるデータ書き換えの回数を低減することが可能である。
【0055】
2.第2実施形態
第2実施形態の乱数生成回路について説明する。第2実施形態の乱数生成回路は、乱数生成器にて生成された乱数を用いて、ある範囲の値から全ての値を重複することなくランダムに出力する回路である。第2実施形態では、主に第1実施形態と異なる点について説明する。
【0056】
2.1 第2実施形態の構成
第2実施形態の乱数生成回路のハードウェア構成及び機能ブロック構成は、前述した第1実施形態と同様である。
【0057】
2.2 第2実施形態の動作
第2実施形態の乱数生成回路の動作について説明する。図7は、第2実施形態の乱数生成回路の動作を示すフローチャートである。このフローチャートに示される処理は、繰り返し制御回路(あるいは、シーケンサ)31により制御される。図8は、メモリ回路41における初期の記憶状態を示し、メモリ回路41におけるアドレスと、それらアドレスに記憶されたデータ(記憶値)を示している。
【0058】
第2実施形態の動作では、乱数生成回路1は、それぞれ重複しない(X+1)個の値をランダムに取得する。ここで、Xは1以上の整数である。なお、第2実施形態は、第1実施形態においてXが(Y+1)の場合に相当する。
【0059】
図7に示すように、先ず、繰り返し制御回路31は、変数“i”をXに設定する。また、繰り返し制御回路31は、初期値書き込み制御回路21により、メモリ回路41に初期の記憶状態43_0を設定する(S21)。図8に示すように、初期の記憶状態43_0は、アドレス0、1、2、3、…、X-4、X-3、X-2、X-1、及びXに、記憶値0、1、2、3、…、X-4、X-3、X-2、X-1、及びXがそれぞれ記憶されている。
【0060】
次に、繰り返し制御回路31は、乱数生成器11により内部乱数Aを生成する(S22)。内部乱数Aは、任意の整数である。
【0061】
続いて、繰り返し制御回路31は、数値範囲制限回路12により、内部乱数Aを0~iの範囲の値に制限するための処理を行う。すなわち、数値範囲制限回路12は、内部乱数Aを用いて0~iの範囲の値を得るための処理を行う。具体的には、数値範囲制限回路12は、内部乱数Aを(i+1)で除算する。数値範囲制限回路12は、この除算によって余りBを算出する(S23)。
【0062】
次に、繰り返し制御回路31は、余りBをメモリ回路41のアドレスと見なし、データ読み出し制御回路22によりメモリ回路41のアドレスBから値Pを読み出す(S24)。
【0063】
次に、繰り返し制御回路31は、余りBと変数“i”とが等しいか否かを判定する(S25)。余りBと変数“i”とが等しくない場合(S25でNo)、繰り返し制御回路31は、読み出し及び書き込み制御回路23により、変数“i”の値のアドレスで示されるメモリ回路41の記憶領域に記憶された値Qを読み出す(S26)。
【0064】
次に、繰り返し制御回路31は、読み出し及び書き込み制御回路23により、メモリ回路41のアドレスBに、値Qを書き込む(S27)。すなわち、繰り返し制御回路31は、ステップS24において値Pが読み出されたアドレスBに、アドレスiから読み出された値Qを上書きする。その後、繰り返し制御回路31による処理は、ステップS28に移行する。
【0065】
一方、余りBと変数“i”とが等しい場合(S25でYes)、出力乱数がまだ読み出されていないアドレスの値のうちの最大値が余りBであるため、ステップS26及びS27をスキップして、繰り返し制御回路31による処理は、ステップS28に移行する。
【0066】
繰り返し制御回路31は、デクリメント回路13により変数“i”をデクリメントする(S28)。すなわち、繰り返し制御回路31は、変数“i”から1を減算する。
【0067】
次に、繰り返し制御回路31は、減算後の変数“i”が0になっているか否かを判定する(S29)。変数“i”が0になっていない場合(S29でNo)、繰り返し制御回路31は、ステップS22以降の処理を繰り返す。
【0068】
一方、変数“i”が0になっている場合(S29でYes)、繰り返し制御回路31は、データ読み出し制御回路22により、アドレス0に記憶された値Pを読み出す(S30)。その後、繰り返し制御回路31は動作を終了する。
【0069】
上述のステップS22~S30が繰り返されることにより、乱数生成回路1は、(X+1)個の値の中から重複しない(X+1)個の出力乱数Pを取得する。
【0070】
以下に、図8及び図9を用いて、第2実施形態の乱数生成回路の具体的な動作を説明する。図9は、第2実施形態の動作によるメモリ回路41における記憶状態の推移の具体例を示す。
【0071】
図7のステップS21において、図8に示すように、メモリ回路41が初期の記憶状態43_0に設定される。すなわち、初期の記憶状態43_0では、アドレス0、1、2、3、…、X-4、X-3、X-2、X-1、及びXに、記憶値0、1、2、3、…、X-4、X-3、X-2、X-1、及びXがそれぞれ記憶される。
【0072】
図9に示すように、1回目の乱数の取得動作(図7のステップS23)において、余りBとして3が得られたものとする。すると、アドレス3に記憶された値3が読み出される(図7のステップS24)。そして、読み出された値3が出力乱数として取得される。その後、アドレス3には、アドレスiから読み出された値Xが書き込まれる(図7のステップS26~S27)。なお、上述したように、1回目の乱数の取得動作の時では、変数“i”はXに等しい。さらに、変数“i”がデクリメントされて、出力乱数が取得されていないアドレスの範囲が0~(X-1)となる。これにより、メモリ回路41の記憶状態43_1では、アドレス0、1、2、3、4、5、6、7、8、…、X-4、X-3、X-2、及びX-1に、記憶値0、1、2、X、4、5、6、7、8、…、X-4、X-3、X-2、及びX-1がそれぞれ記憶される。なお、記憶状態43_1におけるアドレスXの状態は、図9では省略されている。
【0073】
次に、2回目の乱数の取得動作(図7のステップS23)において、余りBとして8が得られたものとする。すると、アドレス8に記憶された値8が読み出される(図7のステップS24)。そして、読み出された値8が出力乱数として取得される。その後、アドレス8には、アドレスi(すなわちアドレス(X-1))から読み出された値(X-1)が書き込まれる(図7のステップS26~S27)。さらに、変数“i”が(X-1)から(X-2)にデクリメントされて、出力乱数が取得されていないアドレスの範囲が0~(X-2)となる。これにより、メモリ回路41の記憶状態43_2では、アドレス0、1、2、3、4、5、6、7、8、…、X-4、X-3、及びX-2に、記憶値0、1、2、X、4、5、6、7、X-1、…、X-4、X-3、及びX-2がそれぞれ記憶される。なお、記憶状態43_2におけるアドレス(X-1)~アドレスXの状態は、図9では省略されている。
【0074】
さらに、3回目の乱数の取得動作(図7のステップS23)において、余りBとして3が得られたものとする。すると、アドレス3に記憶された値Xが読み出される(図7のステップS24)。そして、読み出された値Xが出力乱数として取得される。その後、アドレス3には、アドレスi(すなわちアドレス(X-2))から読み出された値(X-2)が書き込まれる(図7のステップS26~S27)。さらに、変数“i”が(X-2)から(X-3)にデクリメントされて、出力乱数が取得されていないアドレスの範囲が0~(X-3)となる。これにより、メモリ回路41の記憶状態43_3では、アドレス0、1、2、3、4、5、6、7、8、…、X-4、及びX-3に、記憶値0、1、2、X-2、4、5、6、7、X-1、…、X-4、及びX-3がそれぞれ記憶される。なお、記憶状態43_3におけるアドレス(X-2)~アドレスXの状態は、図9では省略されている。
【0075】
さらに、4回目の乱数の取得動作(図7のステップS23)において、余りBとして(X-3)が得られたものとする。すると、アドレス(X-3)に記憶された値(X-3)が読み出される(図7のステップS24)。そして、読み出された値(X-3)が出力乱数として取得される。その後、変数“i”が(X-3)から(X-4)にデクリメントされて、出力乱数が取得されていないアドレスの範囲が0~(X-4)となる。これにより、メモリ回路41の記憶状態43_4では、アドレス0、1、2、3、4、5、6、7、8、…、及びX-4に、記憶値0、1、2、X-2、4、5、6、7、X-1、…、及びX-4がそれぞれ記憶される。なお、記憶状態43_4におけるアドレス(X-3)~アドレスXの状態は、図9では省略されている。
【0076】
上述した乱数の取得動作が(X+1)回繰り返されることにより、乱数生成回路1は、(X+1)個の値の中から重複しない(X+1)個の出力乱数を取得できる。
【0077】
2.3 第2実施形態の効果
第2実施形態によれば、ある範囲の値から重複しない値をランダムに効率良く出力することができる乱数生成回路を提供できる。
【0078】
第2実施形態の構成では、(X+1)個の互いに重複しない値から全ての値をランダムに出力することができる。従って、第2実施形態の構成では、ある範囲の全ての値をランダムに取り出すシャッフル回路(あるいは、並べ替え回路)を実現することができる。その他の効果は、前述した第1実施形態と同様である。
【0079】
3.第3実施形態
第3実施形態の乱数生成回路について説明する。第3実施形態では、第1実施形態で説明した動作の一部が並行して実行される例を示す。第3実施形態では、主に第1実施形態と異なる点について説明する。
【0080】
3.1 第3実施形態の構成
第3実施形態の乱数生成回路のハードウェア構成及び機能ブロック構成は、前述した第1実施形態と同様である。
【0081】
3.2 第3実施形態の動作
第3実施形態の乱数生成回路の動作について説明する。図10は、第3実施形態の乱数生成回路の動作を示すフローチャートである。
【0082】
X個の出力乱数Pを取得する動作では、内部乱数Aを生成する処理(S2)から変数“j”をデクリメントする処理(S10)までの動作がX回繰り返し実行される。
【0083】
このX回繰り返し実行される処理の中で、図10に示すように、内部乱数Aを生成する処理(S2)及び余りB算出する処理(S3)と、変数“i”のデクリメント処理(S5)と、値Qの読み出し処理(S8)とは、並行して実行することができる。
【0084】
例えば、1回目の出力乱数の取得動作における変数“i”をデクリメントする処理(S5)及び値Qを読み出す処理(S8)と、2回目の出力乱数の取得動作における内部乱数Aを生成する処理(S2)とは、並行して実行することができる。すなわち、2回目の出力乱数の取得動作における内部乱数Aを生成する処理(S2)は、1回目の出力乱数の取得動作における変数“i”をデクリメントする処理(S5)及び値Qを読み出す処理(S8)と並行して実行されることが可能である。
【0085】
内部乱数Aを生成する処理(S2)は、乱数生成制御部10内の乱数生成器11により行われる。余りBを算出する処理(S3)は、数値範囲制限回路12により行われる。変数“i”をデクリメントする処理(S5)は、繰り返し制御部30内の繰り返し制御回路31により行われる。さらに、値Qを読み出す処理(S8)は、メモリ制御部20内の読み出し及び書き込み制御回路23により行われる。
【0086】
これらの処理のうちの少なくとも2つが専用ハードウェア回路により実行される場合、複数の専用ハードウェア回路が並行して動作することにより、内部乱数の生成処理(S2)(あるいは、余りの算出処理(S3))、変数“i”のデクリメント処理(S5)、及び値Qの読み出し処理(S8)、のうちの少なくとも2つを並行して実行することが可能である。
【0087】
図11は、第3実施形態における動作の一部をパイプライン処理した様子を示す図である。
【0088】
X個の出力乱数Pを取得する動作では、乱数の生成処理(S2及びS3)と読み出し及び書き込み処理(S8及びS9)とがX回繰り返し実行される。乱数の生成処理(S2及びS3)は、内部乱数Aを生成する処理(S2)、及び余りBを算出する処理(S3)を含む。読み出し及び書き込み処理(S8及びS9)は、メモリ回路41に対する値Qを読み出す処理(S8)、及び値Qを書き込む処理(S9)を含む。
【0089】
図11に示すように、例えば、1回目の出力乱数を取得する動作では、(1)に示す乱数生成処理51aが実行され、続いて、読み出し及び書き込み処理51bが実行される。2回目の出力乱数を取得する動作では、(2)に示す乱数生成処理52aが実行され、続いて、読み出し及び書き込み処理52bが実行される。さらに、3回目の出力乱数を取得する動作では、(3)に示す乱数生成処理53aが実行され、続いて、読み出し及び書き込み処理53bが実行される。
【0090】
乱数生成処理51a、52a及び53aは、乱数生成器11及び数値範囲制限回路12により実行される。読み出し及び書き込み処理51b、52b並びに53bは、読み出し及び書き込み制御回路23により実行される。乱数生成器11、数値範囲制限回路12、並びに、読み出し及び書き込み制御回路23のそれぞれが、専用ハードウェア回路にて形成されている場合、これらは独立に動作が可能である。
【0091】
従って、図11に示すように、(1)の読み出し及び書き込み処理51bと(2)の乱数生成処理52aとは、並行して実行することができる。すなわち、2回目の出力乱数の取得動作における乱数生成処理52aは、1回目の出力乱数の取得動作における読み出し及び書き込み処理51bと並行して実行されることが可能である。
【0092】
同様に、(2)の読み出し及び書き込み処理52bと(3)の乱数生成処理53aとは、並行して実行することができる。すなわち、3回目の出力乱数の取得動作における乱数生成処理53aは、2回目の出力乱数の取得動作における読み出し及び書き込み処理52bと並行して実行されることが可能である。
【0093】
3.3 第3実施形態の効果
第3実施形態によれば、ある範囲の値から重複しない値をランダムに効率良く出力することができる乱数生成回路を提供できる。
【0094】
第3実施形態の構成では、X回繰り返し実行される処理(S2)~(S10)において、乱数生成処理(S2)(あるいは、余りの算出処理(S3))と、変数“i”のデクリメント処理(S5)と、値Qの読み出し処理(S8)と、を並行して実行させることが可能である。これにより、X個の出力乱数Pの取得動作を高速化することができる。すなわち、X個の出力乱数Pの取得動作に要する時間を短縮することができる。
【0095】
また、第3実施形態の構成では、図11に示したように、X回繰り返し実行される乱数生成処理51aと読み出し及び書き込み処理51bとにおいて、前に実行される読み出し及び書き込み処理51bと、後に実行される乱数生成処理51aとを並行して実行させることが可能である。これにより、X個の出力乱数Pの取得動作を高速化することができる。すなわち、X個の出力乱数Pの取得動作に要する時間を短縮することができる。その他の効果は、前述した第1実施形態と同様である。
【0096】
4.第4実施形態
第4実施形態の乱数生成回路について説明する。第4実施形態では、メモリ回路41におけるアドレスが第1グループと第2グループとに分割され、第1グループに属するアドレスに記憶される値は数字の小さい出力乱数として算出され、第2グループに属するアドレスに記憶される値は数字の大きい出力乱数として算出される例を示す。第4実施形態では、主に第1実施形態と異なる点について説明する。
【0097】
4.1 第4実施形態の構成
メモリ回路41におけるアドレスは、例えば、数字で表されている。以降、アドレスを表す数字をアドレス番号と称する。第4実施形態では、メモリ回路41におけるアドレスが、アドレス番号が大きい第1グループと、アドレス番号が小さい第2グループの2つに分割され管理される。第1グループのアドレスで指定される記憶領域と、第2グループのアドレスで指定される記憶領域とには、それぞれ同一の値が記憶される。メモリ回路41におけるアドレスとその値を含む記憶状態については後で詳述する。
【0098】
その他の第4実施形態の乱数生成回路のハードウェア構成及び機能ブロック構成は、前述した第1実施形態と同様である。
【0099】
4.2 第4実施形態の動作
第4実施形態の乱数生成回路の動作について説明する。図12は、第4実施形態の乱数生成回路の動作を示すフローチャートである。このフローチャートに示される処理は、繰り返し制御回路(あるいは、シーケンサ)31により制御される。図13及び図14は、メモリ回路41における記憶状態の推移を示し、余りB、メモリ回路41におけるアドレス、及びそれらアドレスに記憶されたデータ(記憶値)を示している。
【0100】
第4実施形態の乱数生成回路1は、Y(=X/2)個の値を用いて、X個の値の中からX個の重複しない値をランダムに取得する。ここで、Yは0以上(X/2)以下の整数である。Xは0以上の整数である。繰り返し制御回路31が演算に用いる変数として、“N1”、“N2”、“B”、“C”、“D”、及び“R”が用意される。
【0101】
図12に示すように、先ず、繰り返し制御回路31は、変数“N1”及び“N2”をそれぞれY(=X/2)に設定する(S1)。変数“N1”及び“N2”は、取得された出力乱数の個数を管理するための変数である。変数“N1”及び“N2”は、それぞれ(X/2)以下の整数である。
【0102】
さらに、繰り返し制御回路31は、初期値書き込み制御回路21により、メモリ回路41に初期の記憶状態44_0を設定する(S1)。
【0103】
図13に示すように、メモリ回路41は、例えば、アドレス0、1、2、3、…、Y-2、Y-1、Y、Y+1、…、X-4、X-3、X-2、及びX-1を有する。これらアドレス0、1、2、…、及びX-1は、アドレス番号の小さいY個の第1グループと、アドレス番号の大きいY個の第2グループとに分割される。第1グループは、アドレス0、1、2、3、…、Y-2、及びY-1である。第2グループは、アドレスY、Y+1、…、X-4、X-3、X-2、及びX-1である。
【0104】
初期の記憶状態44_0では、第1グループに属するアドレス0、1、2、3、…、Y-2、及びY-1に、記憶値0、1、2、3、…、Y-2、及びY-1がそれぞれ記憶される。第2グループに属するアドレスY、Y+1、…、X-4、X-3、X-2、及びX-1に、記憶値0、1、…、Y-4、Y-3、Y-2、及びY-1がそれぞれ記憶される。すなわち、アドレス0とアドレスYには、同じ値0が記憶される。アドレス1とアドレス(Y+1)には、同じ値1が記憶される。アドレス2とアドレス(Y+2)には、同じ値2が記憶される。同様に、第1グループのアドレスと第2グループのアドレスには、それぞれ同じ値が記憶される。なお、図13及び図14における記憶値に記載された括弧内の値は、出力乱数として出力されるときの値を示す。
【0105】
次に、繰り返し制御回路31は、乱数生成器11により乱数(即ち、内部乱数)Aを生成する(S2)。内部乱数Aは、任意の整数である。
【0106】
続いて、繰り返し制御回路31の数値範囲制限回路12は、内部乱数Aを用いて0~(X-1)の範囲の値を得るための処理を行う。具体的には、数値範囲制限回路12は、内部乱数Aを(N1+N2)で除算する。数値範囲制限回路12は、この除算によって算出した余りを変数“B”に設定する(S3)。変数“B”の値は0以上(X-1)以下の整数である。
【0107】
次に、繰り返し制御回路31は、変数“B”が変数“N1”より小さいか否かを判定する(S4)。変数“B”が変数“N1”より小さい場合(S4でYes)、繰り返し制御回路31は、ステップS5~S7の処理を行う。先ず、繰り返し制御回路31は、変数“C”に0を設定する(S5)。変数“C”は、メモリ回路41から読み出された記憶値に加算される変数である。続いて、繰り返し制御回路31は、変数“N1”をデクリメントする(S6)。さらに、繰り返し制御回路31は、変数“D”に変数“N1”の値を設定する(S7)。変数“D”は、記憶値がまだ読み出されていないアドレスの値のうちの最大値を示すための変数である。その後、繰り返し制御回路31による処理は、ステップS12へ移行する。
【0108】
一方、変数“B”が変数“N1”より小さくない場合(S4でNo)、繰り返し制御回路31は、ステップS8~S11の処理を行う。先ず、繰り返し制御回路31は、変数“B”に対し、Yを加算するとともに変数“N1”の値を減算する(S8)。繰り返し制御回路31は、変数“C”にYを設定する(S9)。繰り返し制御回路31は、変数“N2”をデクリメントする(S10)。さらに、繰り返し制御回路31は、変数“D”に(N2+Y)の値を設定する(S11)。その後、繰り返し制御回路31による処理は、ステップS12へ移行する。
【0109】
次に、ステップS12において、繰り返し制御回路31は、変数“B”の値をメモリ回路41のアドレスと見なし、データ読み出し制御回路22によりメモリ回路41のアドレスBに記憶された値を読み出す。さらに、繰り返し制御回路31は、アドレスBから読み出された値に変数“C”の値を加算して、得られた値を変数“R”に設定する(S13)。変数“R”は0以上(2Y-1)以下の整数である。この変数“R”の値がメモリ制御部20から出力される出力乱数である。
【0110】
次に、繰り返し制御回路31は、(N1+N2)が0になっているか否かを判定する(S14)。(N1+N2)が0になっている場合(S14でYes)、X個の出力乱数Rが取得されたため、繰り返し制御回路31は動作を終了する。
【0111】
一方、(N1+N2)が0になっていない場合(S14でNo)、繰り返し制御回路31は、変数“B”と変数“D”とが等しいか否かを判定する(S15)。すなわち、繰り返し制御回路31は、ステップS12において値が読み出されたメモリ回路41のアドレスBの値が、第1グループあるいは第2グループにおいて値がまだ読み出されていないアドレスの値のうちの最大値であるか否かを判定する。
【0112】
変数“B”と変数“D”とが等しい場合(S15でYes)、値がまだ読み出されていないアドレスの値のうちの最大値が変数“B”であるため、繰り返し制御回路31は、ステップS16をスキップしてステップS2に戻り、ステップS2以降の処理を繰り返す。
【0113】
一方、変数“B”と変数“D”とが等しくない場合(S15でNo)、繰り返し制御回路31は、読み出し及び書き込み制御回路23により、変数“D”の値のアドレスで示されるメモリ回路41の記憶領域に記憶された値(即ち、アドレスDに記憶された値)を読み出し、メモリ回路41のアドレスBに、読み出された値を書き込む(S16)。すなわち、繰り返し制御回路31は、ステップS12において値が読み出されたアドレスBに、アドレスDから読み出された値を上書きする。その後、繰り返し制御回路31は、ステップS2に戻りステップS2以降の処理を繰り返す。
【0114】
上述のステップS2~S16が繰り返されることにより、乱数生成回路1は、0~Yまでの値を用いて、X個の値の中から重複しないX個の出力乱数Rを取得する。
【0115】
以下に、第4実施形態の乱数生成回路1の具体的な動作を説明する。図15図31は、乱数生成回路1の動作時のメモリ回路41におけるアドレス及び記憶値、並びに変数“N1”、“N2”、“B”、“C”、“D”、及び“R”の推移の具体例を示す。なお、乱数生成回路1の動作は、繰り返し制御回路(あるいは、シーケンサ)31により制御される。
【0116】
図12のステップS1において、変数“N1”及び“N2”がそれぞれYに設定される。さらに、図13及び図15に示すように、メモリ回路41が初期の記憶状態44_0に設定される。
【0117】
メモリ回路41の初期の記憶状態44_0では、第1グループに属するアドレス0、1、2、3、…、Y-2、及びY-1に、記憶値0、1、2、3、…、Y-2、及びY-1がそれぞれ記憶される。さらに、第2グループに属するアドレスY、Y+1、…、X-4、X-3、X-2、及びX-1に、記憶値0、1、…、Y-4、Y-3、Y-2、及びY-1がそれぞれ記憶される。
【0118】
次に、1回目の出力乱数Rの取得動作が実行される。
【0119】
図12のステップS2及びS3において、余り(すなわち、変数“B”)として2が得られたものとする。すると、図16に示すように、変数“B”に2が設定される。さらに、変数“B”の値2は変数“N1”の値Yより小さいため(S4でYes)、ステップS5~S7の処理が実行される。図17に示すように、変数“C”に0が設定され、変数“N1”の値がYからデクリメントされて、(Y-1)になる(S5及びS6)。さらに、、図18に示すように、変数“D”に変数“N1”の値(Y-1)が設定される(S7)。
【0120】
次に、アドレスB、すなわちアドレス2に記憶された値2が読み出される。さらに、図19に示すように、読み出された値2に変数“C”の値0が加算されて、変数“R”に値2が設定される(S12及びS13)。そして、変数“R”の値2が出力乱数として取得される。
【0121】
次に、図20に示すように、アドレスD(アドレス(Y-1))に記憶された値(Y-1)が読み出され、読み出された値(Y-1)がアドレスB、すなわちアドレス2に書き込まれる(S16)(図13の記憶状態44_1参照)。以上により、1回目の出力乱数2の取得動作が終了する。
【0122】
次に、2回目の出力乱数Rの取得動作が実行される。
【0123】
図12のステップS2及びS3において、余り(すなわち、変数“B”)としてYが得られたものとする。すると、図21に示すように、変数“B”にYが設定される。さらに、変数“B”の値Yは変数“N1”の値(Y-1)より小さくないため(S4でNo)、ステップS8~S11の処理が実行される。図22に示すように、値Yを有する変数“B”にYが加算されるとともに変数“N1”の値(Y-1)が減算される。これにより、変数“B”には(Y+1)が設定される(S8)。
【0124】
次に、図23に示すように、変数“C”にYが設定され、変数“N2”の値がYからデクリメントされて、(Y-1)になる(S9及びS10)。さらに、図24に示すように、変数“D”に(N2+Y)の値が設定される。すなわち、変数“D”に(2Y-1)が設定される(S11)。
【0125】
次に、アドレスB(アドレス(Y+1))に記憶された値1が読み出される。さらに、図25に示すように、読み出された値1に変数“C”の値Yが加算されて、変数“R”に値(Y+1)が設定される(S12及びS13)。そして、変数“R”の値(Y+1)が出力乱数として取得される。
【0126】
次に、図26に示すように、アドレスD(アドレス(X-1))に記憶された値(Y-1)が読み出され、読み出された値(Y-1)がアドレスB、すなわちアドレス(Y+1)に書き込まれる(S16)(図14の記憶状態44_2参照)。以上により、2回目の出力乱数(Y+1)の取得動作が終了する。
【0127】
次に、3回目の出力乱数Rの取得動作が実行される。
【0128】
図12のステップS2及びS3において、余り(すなわち、変数“B”)として2が得られたものとする。すると、図27に示すように、変数“B”に2が設定される。さらに、変数“B”の値2は変数“N1”の値(Y-1)より小さいため(S4でYes)、ステップS5~S7の処理が実行される。図28に示すように、変数“C”に0が設定され、変数“N1”の値が(Y-1)からデクリメントされて、(Y-2)になる(S5及びS6)。さらに、図29に示すように、変数“D”に変数“N1”の値(Y-2)が設定される(S7)。
【0129】
次に、アドレスB、すなわちアドレス2に記憶された値(Y-1)が読み出される。さらに、図30に示すように、読み出された値(Y-1)に変数“C”の値0が加算されて、変数“R”に値(Y-1)が設定される(S12及びS13)。そして、変数“R”の値(Y-1)が出力乱数として取得される。
【0130】
次に、図31に示すように、アドレスDに記憶された値(Y-2)が読み出され、読み出された値(Y-2)がアドレスB、すなわちアドレス2に書き込まれる(S16)(図14の記憶状態44_3参照)。以上により、3回目の出力乱数(Y-1)の取得動作が終了する。
【0131】
次に、4回目の出力乱数Rの取得動作が実行される。ここでは、メモリ回路41のアドレス及び記憶値、並びに変数“N1”、“N2”、“B”、“C”、“D”、及び“R”の推移を示す図は省略する。
【0132】
図12のステップS2及びS3において、余り(すなわち、変数“B”)として(Y-1)が得られたものとする。すると、変数“B”に(Y-1)が設定される。さらに、変数“B”の値(Y-1)は変数“N1”の値(Y-2)より小さくないため(S4でNo)、ステップS8~S11の処理が実行される。値(Y-1)を有する変数“B”にYが加算されるとともに変数“N1”の値(Y-2)が減算される。これにより、変数“B”に(Y+1)が設定される(S8)。
【0133】
次に、変数“C”にYが設定され、変数“N2”の値が(Y-1)からデクリメントされて、(Y-2)になる(S9及びS10)。さらに、変数“D”に(N2+Y)の値が設定される。すなわち、変数“D”に(2Y-1)が設定される(S11)。
【0134】
次に、アドレスB、すなわちアドレス(Y+1)に記憶された値(Y-1)が読み出される。さらに、読み出された値(Y-1)に変数“C”の値Yが加算されて、変数“R”に値(2Y-1)が設定される(S12及びS13)。そして、変数“R”の値(2Y-1)が出力乱数として取得される。
【0135】
次に、アドレスD、すなわちアドレス(X-2)に記憶された値(Y-2)が読み出され、読み出された値(Y-2)がアドレスB、すなわちアドレス(Y+1)に書き込まれる(S16)(図14の記憶状態44_4参照)。以上により、4回目の出力乱数(2Y-1)の取得動作が終了する。
【0136】
上述した乱数の取得動作がX回繰り返されることにより、乱数生成回路1は、0~Yまでの値を用いて、X個の値の中から重複しないX個の出力乱数を取得できる。
【0137】
4.3 第4実施形態の変形例
第4実施形態の変形例の乱数生成回路の動作について説明する。第4実施形態の変形例では、メモリ回路41におけるアドレスが第1グループと第2グループとに分割され、第1グループに属するアドレスに記憶される値は偶数の出力乱数として算出され、第2グループに属するアドレスに記憶される値は奇数の出力乱数として算出される例を示す。
【0138】
図32は、第4実施形態の変形例の乱数生成回路の動作を示すフローチャートである。このフローチャートに示される処理は、繰り返し制御回路(あるいは、シーケンサ)31により制御される。図33は、メモリ回路41における記憶状態の推移を示し、余りB、メモリ回路41におけるアドレス、及びそれらアドレスに記憶されたデータ(記憶値)を示している。
【0139】
図32に示すように、先ず、繰り返し制御回路31は、変数“N1”及び“N2”をそれぞれY(=X/2)に設定する(S1a)。変数“N1”及び“N2”は、取得された出力乱数の個数を管理するための変数である。変数“N1”及び“N2”は、それぞれ(X/2)以下の整数である。
【0140】
さらに、繰り返し制御回路31は、初期値書き込み制御回路21により、メモリ回路41に初期の記憶状態45_0を設定する(S1a)。
【0141】
記憶状態45_0は、第4実施形態における記憶状態44_0と同様である。記憶状態45_0では、第1グループのアドレス0、1、2、3、…、Y-2、及びY-1に、記憶値0、1、2、3、…、Y-2、及びY-1がそれぞれ記憶される。第2グループのアドレスY、Y+1、…、X-4、X-3、X-2、及びX-1に、記憶値0、1、…、Y-4、Y-3、Y-2、及びY-1がそれぞれ記憶される。すなわち、第1グループのアドレスと第2グループのアドレスには、それぞれ同一の値が記憶される。なお、図33における記憶値に記載された括弧内の値は、出力乱数として出力されるときの値を示す。
【0142】
図32に示す繰り返し制御回路31によるステップS2~ステップS7の処理は、図12に示すステップS2~ステップS7の処理と同様である。
【0143】
変数“B”が変数“N1”より小さくない場合(S4でNo)、繰り返し制御回路31は、ステップS8~S11の処理を行う。先ず、繰り返し制御回路31は、変数“B”に対し、Yを加算するとともに変数“N1”の値を減算する(S8)。続いて、繰り返し制御回路31は、変数“C”に1を設定する(S9a)。繰り返し制御回路31は、変数“N2”をデクリメントする(S10)。さらに、繰り返し制御回路31は、変数“D”に(N2+Y)の値を設定する(S11)。その後、繰り返し制御回路31による処理は、ステップS12へ移行する。
【0144】
次に、ステップS12において、繰り返し制御回路31は、変数“B”の値をメモリ回路41のアドレスと見なし、データ読み出し制御回路22によりメモリ回路41のアドレスBに記憶された値を読み出す。さらに、繰り返し制御回路31は、アドレスBから読み出された値を2倍し、さらに変数“C”の値を加算して、得られた値を変数“R”に設定する(S13a)。変数“R”は0以上(2Y-1)以下の整数である。この変数“R”の値がメモリ制御部20から出力される出力乱数である。
【0145】
図32に示す繰り返し制御回路31によるステップS14~ステップS16の処理は、図12に示すステップS14~ステップS16の処理と同様である。
【0146】
上述のステップS2~S16が繰り返されることにより、乱数生成回路1は、0~Yまでの値を用いて、X個の値の中から重複しないX個の出力乱数Rを取得する。
【0147】
以下に、図32及び図33を用いて、第4実施形態の変形例の乱数生成回路1の具体的な動作を説明する。
【0148】
図32のステップS1aにおいて、変数“N1”及び“N2”がそれぞれYに設定される。さらに、図33に示すように、メモリ回路41が初期の記憶状態45_0に設定される。
【0149】
メモリ回路41の初期の記憶状態45_0では、第1グループに属するアドレス0、1、2、3、…、Y-2、及びY-1に、記憶値0、1、2、3、…、Y-2、及びY-1がそれぞれ記憶される。さらに、第2グループに属するアドレスY、Y+1、…、X-4、X-3、X-2、及びX-1に、記憶値0、1、…、Y-4、Y-3、Y-2、及びY-1がそれぞれ記憶される。
【0150】
次に、1回目の出力乱数Rの取得動作が実行される。
【0151】
図32のステップS2及びS3において、余り(すなわち、変数“B”)として2が得られたものとする。変数“B”の値2は変数“N1”の値Yより小さいため(S4でYes)、ステップS5~S7の処理が実行される。まず、変数“C”に0が設定される(S5)。変数“N1”がYから(Y-1)へデクリメントされる(S6)。変数“D”に変数“N1”の値(Y-1)が設定される(S7)。
【0152】
次に、図33に示すように、アドレスB(アドレス2)に記憶された値2が読み出される(S12)。読み出された値2が2倍され、変数“C”の値0が加算されて変数“R”に設定される(S13a)。そして、変数“R”の値4が出力乱数として取得される。
【0153】
その後、アドレスB(アドレス2)には、アドレスD(アドレス(Y-1))から読み出された値(Y-1)が書き込まれる(S16)。
【0154】
また、変数“N1”がデクリメントされることにより、出力乱数が取得されていないアドレスの範囲が、第1グループにおいて0~(Y-2)、第2グループにおいてY~(X-1)となる。これにより、メモリ回路41の記憶状態45_1では、第1グループのアドレス0、1、2、3、…、及びY-2に、記憶値0、1、Y-1、3、…、及びY-2がそれぞれ記憶される。さらに、第2グループのアドレスY、Y+1、…、X-4、X-3、X-2、及びX-1に、記憶値0、1、…、Y-4、Y-3、Y-2、及びY-1がそれぞれ記憶される。
【0155】
次に、2回目の出力乱数Rの取得動作が実行される。
【0156】
図32のステップS2及びS3において、余り(すなわち、変数“B”)としてYが得られたものとする。すると、変数“B”の値Yは変数“N1”の値(Y-1)より小さくないため(S4でNo)、ステップS8~S11の処理が実行される。まず、変数“B”にYが加算されるとともに変数“N1”の値(Y-1)が減算され、得られた値(Y+1)が変数“B”に設定される(S8)。変数“C”に1が設定される(S9a)。変数“N2”の値がYから(Y-1)へデクリメントされる(S10)。さらに、変数“D”に(N2+Y)が設定される(S11)。すなわち、変数“D”に(2Y-1)が設定される。
【0157】
次に、図33に示すように、メモリ回路41のアドレスB、すなわちアドレス(Y+1)に記憶された値1が読み出される(S12)。読み出された値1が2倍され、変数“C”の値1が加算されて変数“R”に設定される(S13a)。そして、変数“R”の値3が出力乱数として取得される。
【0158】
その後、アドレスB(アドレス(Y+1))には、アドレスD(アドレス(2Y-1)、すなわちアドレス(X-1))から読み出された値(Y-1)が書き込まれる(S16)。
【0159】
また、変数“N2”がデクリメントされることにより、出力乱数が取得されていないアドレスの範囲が、第1グループにおいて0~(Y-2)、第2グループにおいてY~(X-2)となる。これにより、メモリ回路41の記憶状態45_2では、第1グループのアドレス0、1、2、3、…、及びY-2に、記憶値0、1、Y-1、3、…、及びY-2がそれぞれ記憶される。さらに、第2グループのアドレスY、Y+1、…、X-4、X-3、X-2に、記憶値0、Y-1、…、Y-4、Y-3、及びY-2がそれぞれ記憶される。
【0160】
上述した乱数の取得動作がX回繰り返されることにより、乱数生成回路1は、0~Yまでの値を用いて、X個の値の中から重複しないX個の出力乱数を取得できる。
【0161】
4.4 第4実施形態の効果
第4実施形態及び変形例によれば、ある範囲の値から重複しない値をランダムに効率良く出力できると共に、メモリ回路に記憶される値の記憶量を削減することができる。
【0162】
第4実施形態では、メモリ回路41におけるアドレスが第1グループと第2グループとに分割され、第1グループのアドレスと第2グループのアドレスに、それぞれ同一のY(=X/2)個の値(0~(Y-1))が記憶される。X個の出力乱数の取得時において、第1グループのアドレスに記憶された値が読み出された場合は、その値が数字の小さい出力乱数(0~(Y-1))として算出され、第2グループのアドレスに記憶された値が読み出された場合は、その値が数字の大きい出力乱数(Y~(2Y-1))として算出される。
【0163】
また、変形例では、メモリ回路41におけるアドレスが第1グループと第2グループとに分割され、第1グループのアドレスと第2グループのアドレスに、それぞれ同一のY個の値(0~(Y-1))が記憶される。X個の出力乱数の取得時において、第1グループのアドレスに記憶された値が読み出された場合は、その値が偶数の出力乱数(0、2、4、…、2Y-4、2Y-2)として算出され、第2グループのアドレスに記憶された値が読み出された場合は、その値が奇数の出力乱数(1、3、5、…、2Y-3、2Y-1)として算出される。
【0164】
第4実施形態及び変形例の乱数生成回路1では、X個の出力乱数を取得するために、0~(X-1)(すなわち、0~(2Y-1))までの値をメモリ回路41に記憶させる必要はなく、0~(Y-1)までの値をメモリ回路41に記憶させればよい。
【0165】
例えば、1024個(例えば、0~1023の整数)の出力乱数を取得する場合、0~1023までの整数を値としてメモリ回路41に記憶させる必要はなく、0~511の整数をメモリ回路41の第1グループ及び第2グループのアドレスで指定される記憶領域にそれぞれ記憶させればよい。0~1023の整数を表現するためには10ビットが必要であるが、0~511の整数は9ビットで表現可能である。すなわち、第4実施形態及び変形例では、メモリ回路41に必要な記憶容量を削減することができる。その他の効果は、前述した第1実施形態と同様である。
【0166】
5.第5実施形態
第5実施形態の乱数生成回路について説明する。第5実施形態では、メモリ回路41におけるメモリ領域が第1メモリ領域と第2メモリ領域とに分割され、第1メモリ領域におけるアドレスに記憶される値は数字の小さい出力乱数(0~Y-1)として算出され、第2メモリ領域におけるアドレスに記載される値は数字の大きい出力乱数(Y~(2Y-1))として算出される例を示す。第5実施形態では、主に第1実施形態と異なる点について説明する。
【0167】
5.1 第5実施形態の構成
メモリ回路41は、2つのメモリ領域M0及びメモリ領域M1を備える。メモリ領域M0及びメモリ領域M1は、それぞれ独立したアドレス範囲を有する。メモリ領域M0及びメモリ領域M1の同一のアドレスには、同一の値が記憶される。
【0168】
その他の第5実施形態の乱数生成回路のハードウェア構成及び機能ブロック構成は、前述した第1実施形態と同様である。
【0169】
5.2 第5実施形態の動作
第5実施形態の乱数生成回路の動作について説明する。図34は、第5実施形態の乱数生成回路の動作を示すフローチャートである。このフローチャートに示される処理は、繰り返し制御回路(あるいは、シーケンサ)31により制御される。図35は、メモリ領域M0及びM1における初期の記憶状態を示す図である。
【0170】
第5実施形態の乱数生成回路1は、第4実施形態と同様に、Y(=X/2)個の値を用いて、X個の値の中からX個の重複しない値をランダムに取得する。ここで、Yは0以上(X/2)以下の整数である。Xは0以上の整数である。繰り返し制御回路31が演算に用いる変数として、“N1”、“N2”、“B”、“C”、“D”、“R”、及び“M”が用意される。
【0171】
図34に示すように、先ず、繰り返し制御回路31は、変数“N1”及び“N2”をそれぞれY(=X/2)に設定する(S1b)。変数“N1”及び“N2”は、取得された出力乱数の個数を管理するための変数である。変数“N1”及び“N2”は、それぞれ(X/2)以下の整数である。
【0172】
さらに、繰り返し制御回路31は、初期値書き込み制御回路21により、メモリ領域M0及びM1に初期の記憶状態46_00及び46_01をそれぞれ設定する(S1b)。
【0173】
図35に示すように、例えば、メモリ領域M0は、アドレス0、1、2、3、…、Y-4、Y-3、Y-2、及びY-1を有する。同様に、メモリ領域M1は、アドレス0、1、2、3、…、Y-4、Y-3、Y-2、及びY-1を有する。すなわち、メモリ領域M0及びM1は、同一のアドレスを有する。
【0174】
メモリ領域M0における初期の記憶状態46_00では、アドレス0、1、2、3、…、Y-2、及びY-1に、記憶値0、1、2、3、…、Y-2、及びY-1がそれぞれ記憶される。メモリ領域M1における初期の記憶状態46_01では、アドレス0、1、…、Y-4、Y-3、Y-2、及びY-1に、記憶値0、1、…、Y-4、Y-3、Y-2、及びY-1がそれぞれ記憶される。すなわち、メモリ領域M0とメモリ領域M1のアドレス0には、記憶値0が記憶される。メモリ領域M0とメモリ領域M1のアドレス1には、記憶値1が記憶される。同様に、メモリ領域M0とメモリ領域M1のアドレス2~(Y-1)には、それぞれ記憶値2~(Y-1)が記憶される。なお、図35における記憶値に記載された括弧内の値は、出力乱数として出力されるときの値を示す。
【0175】
図34に示す繰り返し制御回路31によるステップS2~ステップS4の処理は、図12に示すステップS2~ステップS4の処理と同様である。
【0176】
次に、変数“B”が変数“N1”より小さい場合(S4でYes)、繰り返し制御回路31は、ステップS5~S7及びS21の処理を行う。図34に示す繰り返し制御回路31によるステップS5~ステップS7の処理は、図12に示すステップS5~ステップS7の処理と同様である。さらに、繰り返し制御回路31は、変数“M”に、メモリ領域M0が選択されていることを示す値を設定する(S21)。その後、繰り返し制御回路31による処理は、ステップS12aへ移行する。
【0177】
一方、変数“B”が変数“N1”より小さくない場合(S4でNo)、繰り返し制御回路31は、ステップS8a、S9、S10、S11a及びS22の処理を行う。先ず、繰り返し制御回路31は、変数“B”から変数“N1”の値を減算する(S8a)。続いて、繰り返し制御回路31は、変数“C”にYを設定する(S9)。繰り返し制御回路31は、変数“N2”をデクリメントする(S10)。繰り返し制御回路31は、変数“D”に変数“N2”の値を設定する(S11a)。さらに、繰り返し制御回路31は、変数“M”に、メモリ領域M1が選択されていることを示す値を設定する(S22)。その後、繰り返し制御回路31による処理は、ステップS12aへ移行する。
【0178】
次に、ステップS12aにおいて、繰り返し制御回路31は、変数“B”の値をメモリ領域M0あるいはM1のアドレスと見なし、データ読み出し制御回路22により変数“M”に設定されたメモリ領域M0あるいはM1のアドレス“B”に記憶された値を読み出す。
【0179】
図34に示す繰り返し制御回路31によるステップS13~ステップS15の処理は、図12に示すステップS13~ステップS15の処理と同様である。
【0180】
変数“B”と変数“D”とが等しくない場合(S15でNo)、繰り返し制御回路31は、読み出し及び書き込み制御回路23により、変数“M”に設定されたメモリ領域M0あるいはM1のアドレスDに記憶された値を読み出し、変数“M”に設定されたメモリ領域のアドレスBに、読み出された値を書き込む(S16a)。すなわち、繰り返し制御回路31は、ステップS12aにおいて値が読み出されたアドレスBに、アドレスDから読み出された値を上書きする。その後、繰り返し制御回路31は、ステップS2に戻りステップS2以降の処理を繰り返す。
【0181】
上述のステップS2~S16aが繰り返されることにより、乱数生成回路1は、0~Yまでの値を用いて、X個の値の中から重複しないX個の出力乱数Rを取得する。
【0182】
5.3 第5実施形態の変形例
第4実施形態の変形例と同様に、第5実施形態においても、メモリ回路41は偶数の出力乱数用の領域と奇数の出力乱数用の領域とに分割される。すなわち、第5実施形態の変形例では、メモリ回路41におけるメモリ領域が第1メモリ領域と第2メモリ領域とに分割される。そして、第1メモリ領域におけるアドレスに記憶される値は偶数の出力乱数として算出され、第2メモリ領域におけるアドレスに記憶される値は奇数の出力乱数として算出される。
【0183】
5.4 第5実施形態の効果
第5実施形態及び変形例によれば、ある範囲の値から重複しない値をランダムに効率良く出力できると共に、メモリ回路に記憶される値の記憶量を削減することができる。第4実施形態及び変形例では、例えば1つのSRAMのアドレス範囲が第1グループと第2グループとに分割された。第5実施形態及び変形例では、例えば2つのSRAMがそれぞれメモリ領域M0及びM1に割り当てられる。このような構成によっても、第4実施形態及び変形例と同様の効果が得られる。
【0184】
6.第6実施形態
第6実施形態の乱数生成回路について説明する。第6実施形態では、メモリ回路41におけるメモリ領域が4つのメモリ領域に分割され、各々のメモリ領域に応じて出力乱数が算出される例を示す。第6実施形態では、主に第1実施形態と異なる点について説明する。
【0185】
6.1 第6実施形態の構成
第6実施形態におけるメモリ回路41は、4つのメモリ領域M0、メモリ領域M1、メモリ領域M2、及びメモリ領域M3を備える。メモリ領域M0、M1、M2、及びM3は、それぞれ独立したアドレス範囲を有する。メモリ領域M0、M1、M2、及びM3の同一のアドレスには、同一の値が記憶される。
【0186】
その他の第6実施形態の乱数生成回路のハードウェア構成及び機能ブロック構成は、前述した第1実施形態と同様である。
【0187】
6.2 第6実施形態の動作
第6実施形態の乱数生成回路の動作について説明する。図36は、第6実施形態の乱数生成回路の動作を示すフローチャートである。このフローチャートに示される処理は、繰り返し制御回路(あるいは、シーケンサ)31により制御される。図37図39は、メモリ領域M0、M1、M2、及びM3における記憶状態の推移を示す図である。図37図39は、余りB、メモリ領域M0、M1、M2、及びM3におけるアドレス、及びそれらアドレスに記憶されたデータ(記憶値)を示す。
【0188】
第6実施形態の乱数生成回路1は、Z(=X/4)個の値を用いて、X個の値の中からX個の重複しない値をランダムに取得する。ここで、Zは0以上(X/4)以下の整数である。Xは0以上の整数である。繰り返し制御回路31が演算に用いる変数として、“N1”、“N2”、“N3”、“N4”、“B”、“C”、“D”、“R”、及び“M”が用意される。
【0189】
図36に示すように、先ず、繰り返し制御回路31は、変数“N1”、“N2”、“N3”、及び“N4”をそれぞれZ(=Y/2=X/4)に設定する(S31)。変数“N1”、“N2”、“N3”、及び“N4”は、取得された出力乱数の個数を管理するための変数である。変数“N1”、“N2”、“N3”、及び“N4”は、それぞれ(X/4)以下の整数である。
【0190】
さらに、繰り返し制御回路31は、初期値書き込み制御回路21により、メモリ領域M0、M1、M2、及びM3に初期の記憶状態48_00、48_01、48_02、及び48_03をそれぞれ設定する(S31)。
【0191】
図37に示すように、例えば、メモリ領域M0、M1、M2、及びM3は、アドレス0、1、2、3、…、Z-4、Z-3、Z-2、及びZ-1をそれぞれ有する。すなわち、メモリ領域M0、M1、M2、及びM3は、同一のアドレスを有する。
【0192】
メモリ領域M0、M1、M2、及びM3のそれぞれにおける初期の記憶状態48_00、48_01、48_02、及び48_03では、アドレス0、1、2、3、…、Z-4、Z-3、Z-2、及びZ-1に、記憶値0、1、2、3、…、Z-4、Z-3、Z-2、及びZ-1がそれぞれ記憶される。すなわち、メモリ領域M0、M1、M2、及びM3のアドレス0には、記憶値0が記憶される。メモリ領域M0、M1、M2、及びM3のアドレス1には、記憶値1が記憶される。同様に、メモリ領域M0、M1、M2、及びM3のアドレス2~(Z-1)には、それぞれ記憶値2~(Z-1)が記憶される。図37図39における記憶値に記載された括弧内の値は、出力乱数として出力されるときの値を示す。
【0193】
次に、繰り返し制御回路31は、乱数生成器11により乱数(即ち、内部乱数)Aを生成する(S32)。内部乱数Aは、任意の整数である。
【0194】
続いて、繰り返し制御回路31の数値範囲制限回路12は、内部乱数Aを用いて0~(X-1)の範囲の値を得るための処理を行う。具体的には、数値範囲制限回路12は、内部乱数Aを(N1+N2+N3+N4)で除算する。数値範囲制限回路12は、この除算によって算出した余りを変数“B”に設定する(S33)。変数“B”の値は0以上(X-1)以下の整数である。
【0195】
次に、繰り返し制御回路31は、変数“B”が変数“N1”より小さいか否かを判定する(S34)。変数“B”が変数“N1”より小さい場合(S34でYes)、繰り返し制御回路31は、ステップS35~S38の処理を行う。先ず、繰り返し制御回路31は、変数“C”に0を設定する(S35)。続いて、繰り返し制御回路31は、変数“N1”をデクリメントする(S36)。繰り返し制御回路31は、変数“D”に変数“N1”の値を設定する(S37)。さらに、繰り返し制御回路31は、変数“M”に、メモリ領域M0が選択されていることを示す値を設定する(S38)。その後、繰り返し制御回路31による処理は、ステップS56へ移行する。
【0196】
変数“B”が変数“N1”より小さくない場合(S34でNo)、繰り返し制御回路31は、ステップS39以降の処理を行う。先ず、繰り返し制御回路31は、変数“B”から変数“N1”の値を減算する(S39)。続いて、繰り返し制御回路31は、変数“B”が変数“N2”より小さいか否かを判定する(S40)。変数“B”が変数“N2”より小さい場合(S40でYes)、繰り返し制御回路31は、ステップS41~S44の処理を行う。先ず、繰り返し制御回路31は、変数“C”に1を設定する(S41)。続いて、繰り返し制御回路31は、変数“N2”をデクリメントする(S42)。繰り返し制御回路31は、変数“D”に変数“N2”の値を設定する(S43)。さらに、繰り返し制御回路31は、変数“M”に、メモリ領域M1が選択されていることを示す値を設定する(S44)。その後、繰り返し制御回路31による処理は、ステップS56へ移行する。
【0197】
変数“B”が変数“N2”より小さくない場合(S40でNo)、繰り返し制御回路31は、ステップS45以降の処理を行う。先ず、繰り返し制御回路31は、変数“B”から変数“N2”の値を減算する(S45)。続いて、繰り返し制御回路31は、変数“B”が変数“N3”より小さいか否かを判定する(S46)。変数“B”が変数“N3”より小さい場合(S46でYes)、繰り返し制御回路31は、ステップS47~S50の処理を行う。先ず、繰り返し制御回路31は、変数“C”に2を設定する(S47)。続いて、繰り返し制御回路31は、変数“N3”をデクリメントする(S48)。繰り返し制御回路31は、変数“D”に変数“N3”の値を設定する(S49)。さらに、繰り返し制御回路31は、変数“M”に、メモリ領域M2が選択されていることを示す値を設定する(S50)。その後、繰り返し制御回路31による処理は、ステップS56へ移行する。
【0198】
変数“B”が変数“N3”より小さくない場合(S46でNo)、繰り返し制御回路31は、ステップS51~S55の処理を行う。先ず、繰り返し制御回路31は、変数“B”から変数“N3”の値を減算する(S51)。続いて、繰り返し制御回路31は、変数“C”に3を設定する(S52)。繰り返し制御回路31は、変数“N4”をデクリメントする(S53)。繰り返し制御回路31は、変数“D”に変数“N4”の値を設定する(S54)。さらに、繰り返し制御回路31は、変数“M”に、メモリ領域M3が選択されていることを示す値を設定する(S55)。その後、繰り返し制御回路31による処理は、ステップS56へ移行する。
【0199】
次に、ステップS56において、繰り返し制御回路31は、変数“B”の値をメモリ領域M0、M1、M2、またはM3のアドレスと見なし、データ読み出し制御回路22により変数“M”に設定されたメモリ領域のアドレスBに記憶された値を読み出す。
【0200】
さらに、繰り返し制御回路31は、アドレスBから読み出された値を4倍し、さらに変数“C”の値を加算して、得られた値を変数“R”に設定する(S57)。変数“R”は0以上(2Y-1)以下の整数である。この変数“R”の値がメモリ制御部20から出力される出力乱数である。
【0201】
次に、繰り返し制御回路31は、(N1+N2+N3+N4)が0になっているか否かを判定する(S58)。(N1+N2+N3+N4)が0になっている場合(S58でYes)、X個の出力乱数Rが取得されたため、繰り返し制御回路31は動作を終了する。
【0202】
一方、(N1+N2+N3+N4)が0になっていない場合(S58でNo)、繰り返し制御回路31は、変数“B”と変数“D”とが等しいか否かを判定する(S59)。すなわち、繰り返し制御回路31は、ステップS56において値が読み出されたメモリ領域のアドレスBの値が、値がまだ読み出されていないアドレスの値のうちの最大値であるか否かを判定する。
【0203】
変数“B”と変数“D”とが等しい場合(S59でYes)、値がまだ読み出されていないアドレスの値のうちの最大値が変数“B”であるため、繰り返し制御回路31は、ステップS60をスキップしてステップS32に戻り、ステップS32以降の処理を繰り返す。
【0204】
一方、変数“B”と変数“D”とが等しくない場合(S59でNo)、繰り返し制御回路31は、読み出し及び書き込み制御回路23により、変数“M”に設定されたメモリ領域のアドレスDに記憶された値を読み出し、変数“M”に設定されたメモリ領域のアドレスBに、読み出された値を書き込む(S60)。すなわち、繰り返し制御回路31は、ステップS56において値が読み出されたアドレスBに、アドレスDから読み出された値を上書きする。その後、繰り返し制御回路31は、ステップS32に戻りステップS32以降の処理を繰り返す。
【0205】
上述のステップS32~S60が繰り返されることにより、乱数生成回路1は、0~Zまでの値を用いて、X個の値の中から重複しないX個の出力乱数Rを取得する。
【0206】
以下に、図36図39を用いて、第6実施形態の乱数生成回路1の具体的な動作を説明する。
【0207】
図36のステップS31において、変数“N1”、“N2”、“N3”及び“N4”がそれぞれZに設定される。さらに、図37に示すように、メモリ領域M0、M1、M2、及びM3が初期の記憶状態48_00、48_01、48_02、及び48_03にそれぞれ設定される。
【0208】
メモリ領域M0、M1、M2、及びM3のそれぞれにおける初期の記憶状態48_00、48_01、48_02、及び48_03では、アドレス0、1、2、3、…、Z-4、Z-3、Z-2、及びZ-1に、記憶値0、1、2、3、…、Z-4、Z-3、Z-2、及びZ-1がそれぞれ記憶される。
【0209】
次に、1回目の出力乱数Rの取得動作が実行される。
【0210】
図36のステップS32及びS33において、余り(すなわち、変数“B”)として2が得られたものとする。変数“B”の値2は変数“N1”の値Zより小さいため(S34でYes)、ステップS35~S38の処理が実行される。まず、変数“C”に0が設定される(S35)。変数“N1”の値がZから(Z-1)へデクリメントされる(S36)。変数“D”に変数“N1”の値(Z-1)が設定される(S37)。さらに、変数“M”に、メモリ領域M0が選択されていることを示す値が設定される(S38)。
【0211】
次に、図37に示すように、メモリ領域M0のアドレスB(アドレス2)に記憶された値2が読み出される(S56)。読み出された値2が4倍され、変数“C”の値0が加算されて変数“R”に設定される(S57)。そして、変数“R”の値8が出力乱数として取得される。
【0212】
その後、図38に示すように、アドレスB(アドレス2)には、アドレスD(アドレス(Z-1))から読み出された値(Z-1)が書き込まれる(S60)。
【0213】
また、変数“N1”がデクリメントされることにより、出力乱数が取得されていないアドレスの範囲が、メモリ領域M0において0~(Z-2)、メモリ領域M1において0~(Z-1)、メモリ領域M2において0~(Z-1)、及びメモリ領域M3において0~(Z-1)となる。これにより、メモリ領域M0の記憶状態48_10では、アドレス0、1、2、3、…、及びZ-2に、記憶値0、1、Z-1、3、…、及びZ-2がそれぞれ記憶される。メモリ領域M1、M2、及びM3のそれぞれの記憶状態48_11、48_12、及び48_13では、アドレス0、1、…、Z-2、及びZ-1に、記憶値0、1、…、Z-2、及びZ-1がそれぞれ記憶される。
【0214】
次に、2回目の出力乱数Rの取得動作が実行される。
【0215】
図36のステップS32及びS33において、余り(すなわち、変数“B”)としてY(=2Z)が得られたものとする。変数“B”の値2Zは変数“N1”の値(Z-1)より小さくないため(S34でNo)、ステップS39以降の処理が実行される。値2Zを有する変数“B”から変数“N1”の値(Z-1)が減算され、得られた値(Z+1)が変数“B”に設定される(S39)。
【0216】
次に、変数“B”の値(Z+1)は変数“N2”の値Zより小さくないため(S40でNo)、ステップS45以降の処理が実行される。値(Z+1)を有する変数“B”から変数“N2”の値Zが減算され、得られた値1が変数“B”に設定される(S45)。
【0217】
次に、変数“B”の値1は変数“N3”の値Zより小さいため(S46でYes)、ステップS47~S50の処理が実行される。まず、変数“C”に2が設定される(S47)。変数“N3”の値がZから(Z-1)へデクリメントされる(S48)。変数“D”に変数“N3”の値(Z-1)が設定される(S49)。さらに、変数“M”に、メモリ領域M2が選択されていることを示す値が設定される(S50)。
【0218】
次に、図38に示すように、メモリ領域M2のアドレスB(アドレス1)に記憶された値1が読み出される(S56)。読み出された値1が4倍され、変数“C”の値2が加算されて変数“R”に設定される(S57)。そして、変数“R”の値6が出力乱数として取得される。
【0219】
その後、図39に示すように、アドレスB(アドレス1)には、アドレスD(アドレス(Z-1))から読み出された値(Z-1)が書き込まれる(S60)。
【0220】
また、変数“N3”がデクリメントされることにより、出力乱数が取得されていないアドレスの範囲が、メモリ領域M0において0~(Z-2)、メモリ領域M1において0~(Z-1)、メモリ領域M2において0~(Z-2)、及びメモリ領域M3において0~(Z-1)となる。これにより、メモリ領域M0の記憶状態48_20では、アドレス0、1、2、3、…、及びZ-2に、記憶値0、1、Z-1、3、…、及びZ-2がそれぞれ記憶される。メモリ領域M1及びM3それぞれの記憶状態48_21及び48_23では、アドレス0、1、…、Z-2、及びZ-1に、記憶値0、1、…、Z-2、及びZ-1がそれぞれ記憶される。メモリ領域M2の記憶状態48_22では、アドレス0、1、…、及びZ-2に、記憶値0、Z-1、…、及びZ-2がそれぞれ記憶される。
【0221】
上述した乱数の取得動作がX回繰り返されることにより、乱数生成回路1は、0~Zまでの値を用いて、X個の値の中から重複しないX個の出力乱数を取得できる。
【0222】
6.3 第6実施形態の効果
第6実施形態によれば、ある範囲の値から重複しない値をランダムに効率良く出力できると共に、メモリ回路に記憶される値の記憶量を削減することができる。第5実施形態及び変形例では、例えば2つのSRAMがそれぞれメモリ領域M0及びM1に割り当てられた。第6実施形態では、例えば4つのSRAMがそれぞれメモリ領域M0、M1、M2及びM3に割り当てられる。このような構成によっても、第5実施形態及び変形例と同様の効果が得られる。
【0223】
例えば、1024個(例えば、0~1023の整数)の出力乱数を取得する場合、アドレス範囲0~1023に値0~1023をメモリ回路41に記憶させる必要はなく、アドレス範囲0~255に値として0~255をメモリ領域M0、M1、M2、及びM3にそれぞれ記憶させればよい。0~1023の整数を表現するためには10ビットが必要であるが、0~255の整数は8ビットで表現可能である。すなわち、第6実施形態では、メモリ回路41に必要な記憶容量を削減することができる。その他の効果は、前述した第1実施形態と同様である。
【0224】
7.その他
前述した実施形態の乱数生成回路は、以下のように表記することも可能である。
【0225】
実施形態の乱数生成回路は、メモリ回路と、制御回路とを具備する。メモリ回路は、複数のアドレス(例えば、0~Y)でそれぞれ指定される複数の記憶領域を含む(Yは1以上の整数)。
【0226】
制御回路は、複数の記憶領域に、互いに異なる複数の値(例えば、0~Y)をそれぞれ記憶させ、第1乱数(例えば内部乱数A)を生成し、第1乱数を用いて複数のアドレスのうちの1つである第1アドレス(例えばアドレスB)を取得し、複数の記憶領域のうちの、第1アドレスで指定される第1記憶領域に記憶された第1値(例えば値P)を読み出し、複数の記憶領域のうちの、第2アドレス(例えばアドレスj)で指定される第2記憶領域に記憶された第2値(例えば値Q)を読み出す、ように構成される。第2アドレスは、複数の記憶領域のうちの第1値がまだ読み出されていない記憶領域に対応するアドレスのうちの最大の値を有するアドレスである。制御回路は、第1値を読み出した後に、第1記憶領域に第2値を書き込む、ように構成される。制御回路は、第1値を出力するように構成される。
【0227】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると同様に、特許請求の範囲に記載された発明とその均等の範囲に含まれるものである。
【符号の説明】
【0228】
1…乱数生成回路、2…CPUコア、3…メモリコア、4…インターフェースコア、5…専用回路コア、10…乱数生成制御部、11…乱数生成器、12…数値範囲制限回路、13…デクリメント回路、20…メモリ制御部、21…初期値書き込み制御回路、22…データ読み出し制御回路、23…読み出し及び書き込み制御回路、30…繰り返し制御部、31…繰り返し制御回路、40…メモリ部、41…メモリ回路。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20
図21
図22
図23
図24
図25
図26
図27
図28
図29
図30
図31
図32
図33
図34
図35
図36
図37
図38
図39