(57)【要約】【課題】  ハードウェアによって非常に柔軟度の高い乱数発生システムを構成する。【解決手段】  発生させるべき乱数のビット数分の１ビットの数値をラッチする手段と、上記１ビットの数値をラッチする手段の各々に付属し、現在発生している乱数を論理演算して新しい1ビットの乱数を発生させる1ビット乱数発生手段と、上記1ビット乱数発生手段内の各々に備わっている上記新しい1ビットの乱数を発生させるアルゴリズムを決定するアルゴリズム決定手段を有し、上記アルゴリズム決定手段により、上記各1ビット乱数発生手段に対し、発生させるべき乱数の論理演算のアルゴリズムを決定し、それによって上記各1ビット乱数発生手段した各1ビットの乱数値を、上記発生させるべき乱数のビット数分の１ビットの数値をラッチする手段に、各々ラッチさせることで、乱数系列を発生させる。【選択図】  図１
2005173797.tif 000002
【特許請求の範囲】
【請求項１】
乱数の発生システムにおいて、発生させるべき乱数のビット数分の１ビットの数値をラッチする手段と、上記１ビットの数値をラッチする手段の各々に付属し、現在発生している乱数を論理演算して新しい1ビットの乱数を発生させる1ビット乱数発生手段と、上記1ビット乱数発生手段内の各々に備わっている上記新しい1ビットの乱数を発生させるアルゴリズムを決定するアルゴリズム決定手段を有し、上記アルゴリズム決定手段により、上記各1ビット乱数発生手段に対し、発生させるべき乱数の論理演算のアルゴリズムを決定し、それによって上記各1ビット乱数発生手段した各1ビットの乱数値を、上記発生させるべき乱数のビット数分の１ビットの数値をラッチする手段に、各々ラッチさせることで、乱数系列を発生させていくことを特徴とする乱数の発生システム。
【請求項２】
上記請求項１において、発生させるべき乱数のビット数分の１ビットの数値をラッチする手段とは、D-FFであることを特徴とした乱数の発生システム。
【請求項３】
上記請求項２において、アルゴリズム決定手段とは、D-FFによるレジスタによって実現されることを特徴とした乱数の発生システム。
【請求項４】
上記請求項３において、現在発生している乱数を論理演算して新しい1ビットの乱数を発生させる1ビット乱数発生手段とは、現在発生している乱数の中から複数のビットを抜き出し、上記抜き出された複数のビットを論理演算することで、新しい1ビットの乱数を発生させることを特徴とした乱数の発生システム。
【請求項５】
上記請求項４において、1ビット乱数発生手段内の各々に備わっている上記新しい1ビットの乱数を発生させるアルゴリズムを決定するアルゴリズム決定手段の機能の一つとして、現在発生している乱数の中から、どの複数のビットを抜き出しすかを決定する機能を有することを特徴とした乱数の発生システム。
【請求項６】
上記請求項５において、1ビット乱数発生手段内の各々に備わっている上記新しい1ビットの乱数を発生させるアルゴリズムを決定するアルゴリズム決定手段の機能の一つとして、上記抜き出された複数のビットから新しい1ビットの乱数を発生させる論理演算式を選択することが可能な機能を有することを特徴とした乱数の発生システム。
【請求項７】
上記請求項６において、上記抜き出された複数のビットから新しい1ビットの乱数を発生させる論理演算式を選択することが可能な機能とは、ハードウェアのANDゲート、ORゲート、Ex-ORゲート、NOTゲート等によって構成される組み合わせ回路の複数の出力を、選択手段によって1つだけ選び出すことで実現される構成を有することを特徴とした乱数の発生システム。
【請求項８】
上記請求項７において、上記アルゴリズム決定手段の設定は、MPUと、上記MPUのファームウェアによって行われることを特徴とした乱数の発生システム。
【請求項９】
上記請求項８において、本システムにより実現されている乱数系列の周期を観測するカウンタを有することを特徴とした乱数の発生システム。
【請求項１０】
上記請求項９において、本システムにより実現されている乱数系列の周期を観測するカウンタの管理は、MPUと、上記MPUのファームウエァによって行われ、上記カウンタの値が、ある規定の値になったと、上記MPUにより判断された場合、上記1ビット乱数発生手段内の各々に備わっている上記新しい1ビットの乱数を発生させるアルゴリズムを決定するアルゴリズム決定手段の設定が、上記MPUにより変更され、乱数系列が別のものに変更されることを特徴とした乱数の発生システム。
【請求項１１】
上記請求項９において、本システムにより実現されている乱数系列の周期を観測するカウンタの管理は、ハードウエァによって行われることを特徴とした乱数の発生システム。
【請求項１２】
上記請求項１１において、上記乱数系列の周期を観測するカウンタの値を、ある規定の値と比較するための比較手段と、上記比較手段が比較するための上記ある規定の値を設定する手段とを有し、上記比較手段が、上記乱数系列の周期を観測するカウンタの値が上記ある規定の値を越えたと判断した場合、上記ある規定の値と、上記1ビット乱数発生手段内の各々に備わっている上記新しい1ビットの乱数を発生させるアルゴリズムを決定するアルゴリズム決定手段の設定値を、自動的に更新することで、発生する乱数系列を変更させ、かつ、その乱数発生の周期をも変更する機構をもつことを特徴とした乱数の発生システム。
【請求項１３】
上記請求項１２おいて、自動的に更新される、上記ある規定の値と、上記1ビット乱数発生手段内の各々に備わっている上記新しい1ビットの乱数を発生させるアルゴリズムを決定するアルゴリズム決定手段の設定値は、規定の段数のfifo型メモリの中に備えられていることを特徴とした乱数の発生システム。
【請求項１４】
上記請求項１３おいて、上記規定の段数のfifo型メモリの中に備えられている各設定値は、MPUの初期化処理によって与えられることを特徴とした乱数の発生システム。
【請求項１５】
上記請求項１０において、提案されている乱数の発生システムは、プリンタ専用のASIC内の、画像処理に用いられることを特徴とした乱数の発生システム。
【請求項１６】
上記請求項１４において、提案されている乱数の発生システムは、プリンタ専用のASIC内の、画像処理に用いられることを特徴とした乱数の発生システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本提案は、乱数発生システム、特に、プリンタ専用の高画質形成時に必要とされる乱数発生システムに関するものである。
【背景技術】
【０００２】
プリンタの高画質形成時に乱数が欠かせないのは公知の事実である。その理由は特許文献１、特許文献２、特許文献３、もしくは、特許文献４に見られるとおりである。要約すると、マルチパス印字時にスジやムラのあるパターンを無くすため、ある乱数によって生成された特殊な「ランダムマスク」と呼ばれるものが必要となるからである。
【０００３】
また、上記に述べられたような技術は、言わば、回路的な仕組みでなされているのではなく、ソフト的な仕組みで、しかも、リアルタイムにデータ形成するのではなく、予め用意されていたオブジェクトを、プリンタシステムが使用する手法にて、なされている。詳しく説明すると、予め設計者らがPCなどの機器を用い、乱数計算にて作成したランダムマスクをプリンタシステム内のROMに記憶させておき、印字時にはそれを取り出して用いる手法を取っているのである。このような仕組みが取られている理由には、（１）プリンタのハードウェアにてランダムマスクを自動生成する仕組みが、現状では存在しないこと、（２）プリンタのファームウェアでランダムマスクを自動生成することは、システム上の負荷が重すぎること、等が挙げられる。
【特許文献１】特開平09-066612号公報
【特許文献２】特開平10-235852号公報
【特許文献３】特開平11-138785号公報
【特許文献４】特開2000-141617号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、従来のプリンタ専用の高画質形成時に必要とされる乱数発生システムには以下のような欠点が存在した。
【０００５】
まず、ファームウェア的な欠点から挙げると、上記のように、プリンタシステム内のROM内にランダムマスクを記憶させると言うことは、それだけで膨大な容量のROM領域が必要となることに他ならない。即ち、ある制約内でコーディングする場合、必ず税金のように掛かってしまうROM内にランダムマスク記憶領域が、さらなる制約を呼んでしまうのである。例えば、2M byteのROMに収まるようプログラムを書かなければならない場合、ランダムマスク記憶領域として0.5M byte必要となると、コーディングに使用できる領域は1.5M byteに減ってしまう。
【０００６】
次に、ハードウェア的な欠点を挙げると、上記のようプリンタシステム内のROM内にランダムマスクを記憶させると言うことは、ハードウェア的なボトルネックを、いとも簡単に作ってしまうのである。つまり、ハードウェアが印字ヘッドに印字データを転送する前に、このマスクデータを記憶装置から読み出してデータ加工することが必須となるので、どうしても大量のデータ転送装置が必要となるのである。通常、このような場合、ROM内からランダムマスクデータを、直接、読むことはせず、一旦、プリンタシステム内のDMA可能なRAMにコーピーし、それをバースト読み出しなどで高速に読み込むことで、上記のデータ加工はなされている。この時、ある印字系では(特に「超高画質」と呼ばれるような画像の形成時)、このデータ加工のためにDMAがあまりにも頻繁に発生してしまうため、バスが込みすぎてデータ処理が間に合わないなどの事態を、多々、引き起こすのである。
【０００７】
上記の通り、ランダムマスクは高画質形成に必須でありながら、現状のシステムでは、その運用に欠点が目立つと言わざるを得ない。
【０００８】
それでは、従来の乱数発生システムを応用して、プリンタシステム内でランダムマスクを自動生成可能な系にすれば良いと思われるのだが、これにも問題点がある。
【０００９】
例えば、(特開平07-36673)などが、システム内で乱数をハード的に発生可能な系を提供する例であろう。これは乱数発生回路の手本のとも言うべき構成であり、これを実装すればプリンタシステム内に必要とされるランダムマスクを生成可能なように考えられるが、ここにも幾つかの問題点がある。
【００１０】
1つには周期性の問題である。周知の通り、乱数発生システムは、それがハード構成だろうとソフト構成であろうと必ず周期性を持つ(当然、装置内にπ = 3.1415..等の無理数テーブル実装していれば話は別だが、ここでは計算によってのみ得られる乱数にフォーカスする)。通常、nビットの数値系列で乱数を発生すると、最大2n-1の周期が得られることが知られている。が、当然、これは最大値であって、初期値の与え方が悪いと、これよりも、ずっと短い期間で周期性をもってします。仮に、運良く2n-1の周期が得られた場合でも、問題は起こり得る。即ち、現状のようにA3紙プリントのように大きな画像形成をする場合、この最大周期(現状、システムは32ビットバスで組まれることが多いのでn=32とするのが、最も設計的に容易であろう)でも、周期が足りないと言うことが起こり得る。即ち、短周期の乱数は、同じ周期のランダムマスクを形成する。この周期が画像の大きさに対して十分長くなければ、人間の目に見えるようなスジ・ムラが発生してしまうのである。
【００１１】
次に挙げられる問題点が、乱数の品質に対する保証である。繰り返し述べるが、画像形成用のランダムマスクを作成するための乱数である。たとえ長周期の乱数発生手段が得られたとしても、それが品質の良いランダムマスクを生成するものでなければ、意味が無い。即ち、マルチパス印字内の、ある特定のパスで似たような位置にばかりマスクが掛かるような乱数が出来てしまった場合、それは、画像ムラの原因になりやすいので、プリンタシステム的には、品質の良い乱数と言うことは出来ないであろう。
【００１２】
最終的に、全てハードウェア的な欠点に行き着くのだと思われるが、一度、システム内に組んでしまった乱数発生回路は(特に、それがASICの内部であれば、なおさら)、変更が容易ではないのである。例えば、望んだ周期が得られなかった、もしくは、品質の悪い乱数が出来てしまった、などの事態に対する処置は、ハードの作り直しと言う、大きな犠牲を強いられる結果につながりやすい。
【００１３】
それでは、(特開平07-36673)で述べられているように、乱数の初期値だけを変更可能な構成にしたら、どうであろうか?当然、この場合、周期の問題は、一部、解決できる可能性がある。が、それも、初期値の持つビット数nの2n-1の周期の範囲に限定される。そもそも、根本的に、このビット数nが画像形成時に短すぎると結論付けられた場合の対処法は、どうなるのか?それは、ハードの作り直し以外にありえないであろう。また、初期値が変更可能であっても、計算アルゴリズムが固定のままでは、乱数の品質に関する保証が無いに変わりは無い。要は、最適解(=画像に合った品質の良い乱数を発生させられる初期値)が無い可能性もあるのだ。
【００１４】
即ち、まとめると、問題点は以下のようになる。（１）現状のプリンタシステムで用いているランダムパターン発生手段には、夥しいボトルネックが存在する、方や、（２）ハード的に同様の機能を実装しようとすると、発生される乱数の周期・品質の面での保証が十分に得られない、と言うわけである。
【００１５】
本件は、上記の状況を解決すべく、プリンタシステムに良く適合した、乱数発生の手段について提案を行うものである。
【課題を解決するための手段】
【００１６】
本提案は、乱数の発生システムにおいて、発生させるべき乱数のビット数分の１ビットの数値をラッチする手段と、上記１ビットの数値をラッチする手段の各々に付属し、現在発生している乱数を論理演算して新しい1ビットの乱数を発生させる1ビット乱数発生手段と、上記1ビット乱数発生手段内に備わっている上記新しい1ビットの乱数を発生させるアルゴリズムを決定する複数のアルゴリズム決定手段を有し、上記アルゴリズム決定手段により、上記各1ビット乱数発生手段に対し、発生させるべき乱数の論理演算のアルゴリズムを決定し、それによって上記各1ビット乱数発生手段した各1ビットの乱数値を、上記発生させるべき乱数のビット数分の１ビットの数値をラッチする手段に、各々ラッチさせることで、乱数系列を発生させていくこと特徴とする乱数の発生システムにより、上記従来の技術が有する課題を解決するものである。
【００１７】
（作用）
本発案の提案する上記手段によれば、プリンタシステムに必要なランダムパターン発生手段に対して応用が可能であり、しかも、そこで発生される乱数の品質や周期の保証も可能である、乱数発生システムを提供することを可能にしている。
【発明の効果】
【００１８】
上記のように、本提案は、ハードウェアによって非常に柔軟度の高い乱数発生システムを構成し、また、場合によっては、一部、本乱数発生システムの外部にあるMPUの機能も利用することで、従来の技術ではなしえていなかった、プリンタシステム向きの品質の高い乱数発生システムの提供を実現していることが分かる。
【発明を実施するための最良の形態】
【００１９】
以下、本発案の実施例の1つについて説明する。
【実施例１】
【００２０】
本実施例の構成を、図１に示す。以下、図１を基に、構成の説明を行う。基本的に、本システムは処理にMPUが介在し、色々な種類のレジスタ設定や、動作制御を行うことを前提に考えられている。
【００２１】
まず、図１-1中、本件によって発生する乱数はRanD[n:0]1-1である。乱数は任意のビット数nビットで表現され、そのため、図-1のように、システム内部ではn ビットの幅を持つバスとして表現される。基本的な思想として、本システムは、1 ビットの乱数を発生させる仕組み1-2(図-1中、破線で囲まれた部分)の集合をn個集め、n ットの乱数としている。
【００２２】
そこで、この1ビットの乱数を発生システム1-2について説明を行うと、まず、上記RanD[n:0]1-1の中の1 ビット要素RanD[i](iは0以上n以下の任意の数)はD-FFi1-2-1によってラッチされている。そして、現在の乱数の1 ビット要素RanD[i]nから、次の乱数i1-2-2の1ビット要素RanD[i]n+1の発生は、現在の乱数値RanD[n:0]n1-1の中の要素2ビットを取りだして加工することで行われるので、RanD[n:0]1-1から2ビットスプリットする仕組み、nto2seli(nビットから2ビット選択するセレクタ)1-2-3が存在する。ここで取り出されたRanD[n:0]1-1の中の要素2 ビットは、演算手段i1-2-4に入力され、新しい乱数の1 ビット要素RanD[i]n+1が発生する。また、nto2seli1-2-3が存在するため、RanD[n:0]1-1から、どの2 ビットスプリットするのかを決定するセレクト信号DataSeli[m:0]1-2-5(mは自然数でlog2nより大きい最小の値、m = (unsigned int)log2n+1、の式で与えられる)と、変数DataSeli[m:0]1-2-5を設定するレジスタi1-2-6も必要である。さらに、本件では、乱数を発生するアルゴリズムを一様に決定しないため、演算手段1-2-4に乱数発生の計算法を知らせる信号CalSeli[k:0]1-2-7(kは自然数で、乱数発生の計算法の種類の数≦2k、の関係が必須)と、CalSeli[k:0]1-2-7を設定するレジスタi1-2-8も必要である。そして、本システムでは、任意のタイミングでRanD[n:0]1-1の値(これを乱数のSEED[n:0]と呼ぶことにする)を外部から(即ち、MPUのストア動作で)書き換え可能なようになっているので、D-FFi1-2-1に、次の乱数i1-2-2をラッチさせるのか、それとも、SEED[i]1-2-9をラッチさせるのかを選択する2to1seli(2ビットから1 ビット選択するセレクタ)1-2-10も必要である。この1ビットの乱数を発生システム1-2の構成が、n個、nビット分、本システム内には用意されている。
【００２３】
さらに、1ビットの乱数を発生システム1-2の外部の他の構成について言及すると、このシステムを制御するためのデータバスDin[31:0]1-3が必要である(ここでは、2002年現在、組み込み系MPUとして、最も一般的な、32ビットバス構成がとられているものとする)。
【００２４】
これを用い、MPUが外部より、レジスタ1-2-5、レジスタ1-2-8、乱数のSEED[n:0]の書き込みを行える。また、RanD[n:0]1-1を各ビットのD-FF1-2-1にラッチする乱数ラッチ信号1-4も必要であり、これは、乱数のSEED[n:0]の書き込み信号1-5と、乱数の更新信号1-6の2つの信号から合成され、発生される。この発生手段を、乱数ラッチ信号発生手段1-7と呼ぶことにする。さらに、2to1sel(2 ビットから1 ビット選択するセレクタ)1-2-10制御用の、乱数SEED/更新値書き込みセレクト信号1-8も、別途、必要である。
【００２５】
また、本実施例では、発生した乱数の周期を管理するために、発生した乱数の個数をカウントするカウンタ1-9が必要である。このカウンタは、乱数の更新信号1-6の発生と同期してカウント値が更新され、カウント値1-10として、本システムの外部にあるMPUより、読み取り可能な構成になっている。
【００２６】
次に、本実施例の根幹をなす構成の1つである、演算手段1-2-4の内部について、もう少し詳しく説明を加える。基本的に、本件は公知である線形フィードバックシフトレジスタ(LFSR : Linear Feedback Shift Register)を用いた擬似乱数発生法に、色々なカスタマイズ性を与えた手法といえる。その観点から述べると、この演算手段1-2-4の責務は、システムに対し、選択し得る、数多くの演算手法を与えることである。
【００２７】
例えば、本実施例では、その1例として、図-2のような構造を提案する。基本的な構成としては、2ビットの入力IN[1:0]を演算して1ビットの出力OUTを得ることであり、その演算方法はSEL[k:0]の設定により選択されるようになっている。まず、入力された2ビットの信号IN[1]とIN[0]は、各々、演算用に、そのままの値を使用するのか反転値(-IN[1]と-IN[0])を用いるのかを、2to1sel(2ビットから1ビット選択するセレクタ)1-2-4-1により、選択可能となっている。これら2つの2to1sel1-2-4-1の出力は、AND1-2-4-2とOR1-2-4-3とEx-OR1-2-4-4に入力され、それぞれの演算出力は、どの出力を次段の論理回路で使用するのかを決定する3to1sel(3ビットから1ビット選択するセレクタ)1-2-4-5に入力される。そして、SEL[k:0]の設定に基づき、AND1-2-4-2、OR1-2-4-3、もしくは、Ex-OR1-2-4-4の内のどの演算結果を出力するが決定され、3to1sel1-2-4-5は選ばれた3つの結果の内の1つを出力する。さらに、演算手段の最終段論理として、4to1sel(4ビットから1ビット選択するセレクタ)1-2-4-6があり、これは、SEL[k:0]の設定に基づき、IN[0]かその反転値、IN[1]かその反転値、3to1sel1-2-4-5の出力、3to1sel1-2-4-5の出力の反転値の4つの信号の内の、どれか1つを選択し、OUT信号に出力するのである。この機構により実現される計算式は図-3の28通りの演算であり、どれを使用するかはSEL[k:0](今回の場合、k=6となるはず)の設定に依存するのは言うまでも無い。
【００２８】
勿論、RanD[n:0]1-1から、より多くのビットを選び出し、更に複雑な方程式(例：(IN[a]&IN[b]&IN[c])(IN[d]&IN[e])(IN[f]|IN[g])、等、ここでa、b、c、d、e、f、gは自然数でn以下の数)を組み込み、それをSEL[k:0]の設定に基づき変数設定できるようにすれば、より複雑な系を実現可能でではあるが、この実施例では話を簡素化するためにも、入力は信号IN[1]とIN[0]の2ビットのみと考えることにする。
【００２９】
フローチャート-1（図５）は、本実施の代表的な動作の様子を示したものである。この図は2つの動作を表しており、左図が本乱数発生システムの動作(即ち、ハードウェア動作)、右図が本乱数発生システムの外部にあるMPUの動作(即ち、ファームウェア動作)である。
【００３０】
最初に、フローチャート-1の左図、本乱数発生システムの動作から説明を行う。
【００３１】
まず、本乱数発生システム起動(S11-0)直後、システムの初期化が必要である。内容的には、乱数のSEEDの設定(P11-1)と各レジスタ設定(P11-2)である。フローチャートに記述するために(P11-1)と(P11-2)に順番を持たせたが、これはどちらが先でも構わない。
【００３２】
作業の内容的には、以下の通りである。まず、乱数のSEEDの設定(P11-1)では、本システムの外部にあるMPUがデータライトサイクルを発生させる。この時、2to1sel(2ビットから1 ビット選択するセレクタ)1-2-10がデータバスDin[31:0]1-3を出力に選ぶような方向で乱数SEED/更新値書き込みセレクト信号1-8が発生し、また、SEED書き込み信号の発生に応じて、乱数ラッチ信号1-4も発生し、Din[31:0]1-3に乗っている乱数のSEED[n:0]を、各乱数ビットをラッチするためのD-FF1-2-1に書き込むことになる。次に、各レジスタ設定(P11-2)では、乱数発生用の各1 ビットの乱数を発生システム1-2のためのレジスタ設定、即ち、現在の乱数値RanD[n:0]1-1の、どの2ビットを選択して新しい乱数の1ビット要素を発生するのかをきめるレジスタ1-2-6の設定と、その1ビット要素を、どのような演算で発生するのかをきめるレジスタ1-2-8を、各乱数RanD[n:0]1-1のビット対して設定する必要がある。ここで、簡単な注意事項であるが、演算手段1-2-4が図-2のような構成の場合、恐らく組み合わせ回路のみで構成されていることが予想されるので、ここまでの処理が終わった時点、即ち、乱数のSEED[n:0]が決定=現在の乱数値RanD[n:0]1-1が確定し、どの2ビットを選択して新しい乱数の1ビット要素を発生するのがレジスタ1-2-6により確定し、どのような演算で発生するのかがレジスタ1-2-8により確定した時点で、演算手段1-2-4からは、各々、次の乱数の1ビット要素1-2-2が出力されており、D-FF1-2-1にラッチされるのを待っている状態にあるのである。
【００３３】
そして、これらの初期化処理後、システムは乱数更新信号1-6が発生するまで待機状態に入る(P11-3)。そして、システムは乱数更新信号1-6が発生すると、システムは新しい乱数値のラッチ処理に入る(P11-4)。作業の内容的には、以下の通りである。まず、2to1sel(2ビットから1 ビット選択するセレクタ)1-2-10が次の乱数の1ビット要素1-2-2を出力に選ぶような方向で乱数SEED/更新値書き込みセレクト信号1-8が発生し、また、乱数更新信号1-6が発生に応じて、乱数ラッチ信号1-4も発生し、次の乱数の1ビット要素1-2-2を、各乱数ビットをラッチするためのD-FF1-2-1に書き込み/値更新を行うことになる。
【００３４】
この乱数値のラッチ処理(P11-4)を終了後、システムは再度、乱数更新信号1-6が発生するまで待機状態に入る(P11-3)。
【００３５】
以上が、フローチャート-1の左図、本乱数発生システムの動作である。
次に、フローチャート-1の右図、本乱数発生システムの外部にあるMPUの動作について説明を行う。まず、本乱数発生システム軌道のため、システムの初期化を行う(P12-1)。要は、この処理をトリガとして、上記の乱数SEED設定(P11-1)と各レジスタ設定(P11-2)が発生する。
【００３６】
その後、MPUは乱数の周期管理に入る。具体的には、乱数発生信号が発生1-6する度に更新されるカウンタ1-9のカウンタ値1-10を観測し、これが規定の値を越えたか否かを判断する(P12-3)。カウンタ値1-10が規定の値以内であれば(= 乱数の発生した回数が、規定の回数に達していなければ)MPUは待機する。カウンタ値1-10が規定の値を越えると(=乱数の発生した回数が、規定の回数に達すると)、MPUは本乱数発生システムに、システムの設定変更を行うよう命令する。即ち、これにより、上記本乱数発生システムの動作は、その状態がどこにあろうと(恐らく(P11-3)にいる確率が高く、そうでなければ、(P11-4)にいる)、強制的に動作状態を(P11-1)に変更されてしまう。その後、再度、MPUは乱数の周期管理に入り、一方、本乱数発生システムはフローチャート-1の左図に沿って、(P11-1)->(P11-2)->(P11-3)->...と、処理を進めていく。
【００３７】
以上が、フローチャート-1の右図、本乱数発生システムの外部にあるMPUの動作(本乱数発生システムとの関連部を含む)である。
【００３８】
上記動作の説明から、本提案における幾つかの利点を見出すことが可能である。
【００３９】
先ずは、乱数発生アルゴリズムのカスタマイズ性が高いことで、少なくとも図-2の構成によれば、各ビットに対して28種類の演算が、即ち、nビットの乱数全体としては2のn乗の種類の演算方法を、レジスタの設定にて選択可能であり、さらに、また、演算させるビットはnビット内の任意の2ビットを自由に選べるためnC2xn=n2(n-1)/2通りの選択肢が発生するので、総計で、(n2(n-1)/2)x2n通りのカスタマイズが可能となっている。
【００４０】
さらに、本乱数発生システムの外部にあるMPUが、これらカスタマイズ可能な設定を任意のタイミングで変更可能なため、乱数の周期に関する問題も解決されていることが分かる。即ち、カウンタ1-9のカウンタ値1-10を参考うにして、本乱数発生システムの外部にあるMPUは乱数の発生回数が管理可能であるため、乱数が周期性周回内に入る前に本乱数発生システムのカスタマイズを行い、乱数発生アルゴリズムを変えてしまうことで、その周期性周回内に入ることを回避できるのである。
【００４１】
以下、幾つかの点で補足的な説明を加える。
【００４２】
まず、上記で、MPUの乱数の周期管理の方法として、カウンタ値1-10ポーリングを提案しているが、これは、別途、カウンタ値1-10と規定の値を比較し、その規定の値以上にカウンタ値がなったときに、（１）別の構成に設けた、ある1ビット信号がACTIVEになり、MPUは、その信号の論理値をポーリングするだけで良い、比較演算する必要はない、（２）MPUに対し割り込みを発生して、それを知らせる、等、別の実現方法も考えられる。また、これらによって、MPUの受け持つタスクを、一部、軽減できるはずである。
【００４３】
また、本乱数発生システムを有効に機能させるためには、予め、C/C++言語によって、本乱数発生アルゴリズムを、PC上などでソフト的にシミュレーションしておき(図-3で示したように、計算式での表現が可能であるため、C/C++言語へのアルゴリズム実装は容易)、その上で、制御を行うべきである。即ち、この作業を前もって行うことで、（１）乱数の周期、（２）(プリント画像を形成すると言う視点での)乱数の品質を見極めた上でのシステム運用が可能となろう。
【００４４】
さらに、演算手段1-2-4(図-2)に関しての局所的な注意であるが、新しい乱数発生の中で、ANDやOR演算子を多く用いると、より速く乱数が収束・周期性周回に入る可能性がある。即ち、0&*=0、であるし、1|*=1であるので、ANDやOR演算子を用いたビットの位置から、0や1が他のビットの位置に伝播し易くなるのである。これは、上記PC上などでソフト的にシミュレーションにて、良く見極めた上で実装を行うべきであろう。
【００４５】
以上のように、本乱数システムは、発生アルゴリズムと、乱数の周期に対して、非常に柔軟度の高い構成と動作を実現していることが分かる。
【実施例２】
【００４６】
以下、本発案の、他の実施例について説明する。
【００４７】
上記実施例-1では、乱数の周期をMPUにて管理させていたが、本実施例では、その負荷をハードウェアが負った場合の機構について言及する。
【００４８】
基本的な構成要素、即ち1-1から1-10までは、データバス1-3を除き、実施例-1と全く同じ物を使用することになる。その他に、幾つかの要素を加えて、新たなる機構を実現するのである。よって、構成に関する説明は、主に、実施例-1との差分の説明になる。
【００４９】
まず、乱数の周期を管理する周期管理用レジスタ2-1と、周期管理用レジスタ2-1の保持する値とカウンタ値1-10を比較するための比較手段2-2がある。そして、比較手段2-2の比較結果2-3は、設定更新信号発生手段2-4に出力される。設定更新信号発生手段2-4は、カウンタ値1-10が、乱数の周期を管理する周期管理用レジスタ2-1の保持する値以上になると、設定更新信号2-5を発生する機能をもつ。また、設定更新信号2-5は、本乱数発生システムの外部にあるMPUからの要求2-6によっても、直接、発生可能となっている。
【００５０】
また、実施例-1では、nビットの乱数値RanD[n:0]1-1の初期値(SEED)の書き込み、演算手段1-2-4に入力するnビットの乱数値RanD[n:0]1-1の内の2ビットを指定するレジスタ1-2-6、演算手段1-2-4の乱数発生アルゴリズムを決定するレジスタ1-2-8、以上の3つの値を、本乱数発生システムの外部にあるMPUから直接書き込める構成にしていたが、本実施例では、それは許可されない。代りに、レジスタ値とnビットの乱数値RanD[n:0]1-1の初期値(SEED)の設定は、必ずj段のfifo(jは任意の自然数)を解して行われる。即ち、構成を説明すると、まず、各1ビットの乱数値RanD[i](0≦i≦n)を発生するための1ビット乱数発生機構1-2毎に、nビットの乱数値RanD[n:0]1-1の内の2ビットを指定するレジスタ1-2-6用の設定データ更新fifo2-7と、演算手段1-2-4の乱数発生アルゴリズムを決定するレジスタ1-2-8用の設定データ更新fifo2-8の2つが備わることになる。そして、nビットの乱数値RanD[n:0]1-1の初期値(SEED)の書き込み用として、本乱数発生システム内に1つだけ、SEED指定用のfifo2-9の2つが存在し、本乱数発生システム内部のバスSEED[n:0]2-10を介し、各1ビット乱数発生機構毎1-2に1ビットのSEED[i](0≦i≦n)が供給される。
【００５１】
また、上記周期管理用レジスタ2-1の設定値も、本乱数発生システムの外部にあるMPUにより直接書かれることはなく、同様に、j段のfifo(jは任意の自然数)を解して行われる。即ち、周期管理レジスタ更新fifo2-11が存在する。
【００５２】
これら、fifo2-7、2-8、2-9、2-11は、j段のであるので、各々、j個のレジスタ設定、もしくは、j個の乱数のSEEDを持ち、上記、設定更新信号が発生する毎に、それぞれ、規定のレジスタやD-FFへ、値の更新が行われ、その後、fifoの中身は1段シフトする(即ち、i段目にあったデータはi-1段目にシフトする、0 ≦ i ≦ j-1)。
【００５３】
フローチャート-2（図６）は、本実施の代表的な動作の様子を示したものである。この図は2つの動作を表しており、左図が本乱数発生システム内の、乱数発生処理部の動作、右図が本乱数発生システム内の、乱数周期管理部の動作であり、これら2つはハードウェア構成であるので、並列動作を行う。故に、フローチャートは2つ存在する。
【００５４】
最初に、フローチャート-2の左図、本乱数発生システム内の、乱数発生処理部の動作から説明を行う。
【００５５】
まず、本乱数発生システム起動(S21-0)直後、システムの初期化が行われる(P21-1)。即ち、本乱数発生システムの外部にあるMPUによって、各fifo2-7、2-8、2-9、2-11に必要な数の設定や値の書き込みが行われた後、設定更新要求2-6が発行される。この設定更新要求2-6によって設定更新信号2-5がACTIVEになり、乱数のSEEDの設定(P21-2)と、1ビット乱数発生機構1-2内のレジスタ1-2-6とレジスタ1-2-8の設定が行われる(P21-3)(フローチャートに記述するために(P21-2)と(P21-3)に順番を持たせたが、これはどちらが先でも構わない)。
【００５６】
作業の内容的には、以下の通りである。まず、乱数のSEEDの設定(P21-1)では、設定更新信号2-5がACTIVEになるのと同時に、バスSEED[n:0]2-10が、1ビット乱数発生機構1-2内の各乱数ビットをラッチするためのD-FF1-2-1に書き込まれるような方向で乱数SEED/更新値書き込みセレクト信号1-8が発生し、かつ、SEED書き込み信号発生 -> 乱数ラッチ信号1-4も発生となり、乱数値RanD[n:0]1-1にSEED[n:0]が確定する。このときのSEED[n:0]とは、SEEDレジスタ更新データ用fifo2-9の一番先頭にある値である。この乱数値RanD[n:0]1-1へのSEED[n:0]の書き込みと同期して、fifo2-9の中身は1段シフトする(即ち、i段目にあったデータはi-1段目にシフトする、0≦i≦j-1)。同様、1ビット乱数発生機構1-2内のレジスタ1-2-6とレジスタ1-2-8の設定は、設定更新信号2-5がACTIVEになるのと同時に、2ビット抜き出しレジスタ更新データ用fifo2-7の一番先頭にある値がレジスタ1-2-6に設定され、2演算手法指定レジスタ更新データ用fifo2-8の一番先頭にある値がレジスタ1-2-8に設定される。この2つのレジスタ設定と同期して、各fifo2-7、2-8の中身は1段シフトする(即ち、i段目にあったデータはi-1段目にシフトする、0≦i≦j-1)。
【００５７】
そして、これらの設定処理後、システムは乱数更新信号1-6が発生するまで待機状態に入る(P21-4)。そして、システムは乱数更新信号1-6が発生すると、システムは新しい乱数値のラッチ処理に入る(P21-5)。この部分の動作は、実施例-1の(P11-3)と(P11-4)の動作に、全く同じである。
【００５８】
以上が、フローチャート-2の左図、本乱数発生システム内の、乱数発生処理部の動作である。
【００５９】
次に、フローチャート-2の右図、本乱数発生システム内の、乱数周期管理部の動作について説明を行う。
【００６０】
まず、まず、本乱数発生システム起動(S22-0)直後、システムの初期化が行われる(P22-1)。即ち、本乱数発生システムの外部にあるMPUによって、各fifo2-7、2-8、2-9、2-11に必要な数の設定や値の書き込みが行われた後、設定更新要求2-6が発行される。この設定更新要求2-6によって設定更新信号2-5がACTIVEになり、乱数のSEEDの設定(P21-2)と、周期管理レジスタ2-1への設定が行われる(P21-2)。作業の内容的には、以下の通りで、設定更新信号2-5がACTIVEになるのと同時に、周期管理レジスタ更新データ用fifo2-11の一番先頭にある値が周期管理レジスタ2-1に設定され、かつ、fifo2-11の中身は1段シフトする(即ち、i段目にあったデータはi-1段目にシフトする、0≦i≦j-1)。
【００６１】
その後、右図が本乱数発生システム内の乱数周期管理部は、乱数の周期管理に入る。具体的には、乱数発生信号が発生1-6する度に更新されるカウンタ1-9のカウンタ値1-10を観測し、これが規定の値を越えたか否かを判断する(P22-3)。カウンタ値1-10は比較手段2-2に転送され、その結果2-3が、周期管理レジスタ2-1の保持する値以内であれば(= 乱数の発生した回数が、周期管理レジスタ2-1の保持する値の回数に達していなければ)本乱数周期管理部は待機する。カウンタ値1-10が、周期管理レジスタ2-1の保持する値値を越えると(=乱数の発生した回数が、周期管理レジスタ2-1の保持する値の回数に達すると)、設定更新信号発生手段が起動し、設定更新信号2-5がACTIVEになる(P22-4)。
【００６２】
この設定更新信号2-5がACTIVEになる(P22-4)プロセスにより、2つの制御が行われる。一つ目は、乱数周期管理部の動作、即ち、フローチャート-2の右図の状態は(P22-2)に強制的に戻され、再度、周期管理レジスタのデータ更新(fifo2-11の一番先頭にある値が周期管理レジスタ2-1に転送)が行われる。もう一つは、乱数発生処理部の動作、即ち、フローチャート-2の左図の状態は(P21-2)に強制的に戻され、再度、乱数のSEEDの設定(P21-2)と、1ビット乱数発生機構1-2内のレジスタ1-2-6とレジスタ1-2-8の設定が行われる(P21-3)(fifo2-9の一番先頭にある値が乱数値RanD[n:0]1-1に、fifo2-7の一番先頭にある値がレジスタ1-2-6に、fifo2-8の一番先頭にある値がレジスタ1-2-8に転送される)。
【００６３】
その後、再度、乱数発生処理部は(P21-4)と(P21-5)の間で乱数発生処理を行い、乱数周期管理部は、新しい周期管理レジスタ2-1の値に基づき、乱数の周期観測を行う(P22-3)。
【００６４】
そして、また、カウンタ値1-10が、新しい周期管理レジスタ2-1の値を越えた後の流れ(P22-4以降)は、上記を繰り返すことになる。そして、(P22-4)のプロセスが発生する度とに、各fifo2-7、2-8、2-9、2-11の値が、各D-FFやレジスタに更新されていくのである。
【００６５】
以上が、フローチャート-2の右図、本乱数発生システム内の、乱数周期管理部の動作(乱数発生処理部との関連部を含む)である。
【００６６】
上記動作の説明から、本実施例における幾つかの利点を見出すことが可能である。
【００６７】
即ち、実施例１では、本乱数発生システムの外部にあるMPUが行っていた、乱数周期の管理と、それに伴う、各レジスタや乱数SEEDの更新を、完全にハードウェアが行っているため、本乱数発生システムの外部にあるMPUの負荷が著しく減っていることである(本乱数発生システムの外部にあるMPUの責務は、フローチャート-2内では、各fifoの初期化と、初めの設定更新要求の発生のみである)。このため、印字中にDMA等の要因でシステムバスが込み合い、システム内のレジスタアクセスが制限されている状況下でも、本システムは、安全に、乱数の発生を、非常に長い周期に渡って行えるような機構を、本実施例は提供している。
【００６８】
以下、幾つかの点で補足的な説明を加える。
【００６９】
まず、原理的な話であるが、本実施例の基本的なアイディアは、本システムの持つ乱数の周期=(fifiの1番目の要素で決まる乱数発生アルゴリズム周期)+(fifiの2番目の要素で決まる乱数発生アルゴリズム周期)+… +(fifiのj番目の要素で決まる乱数発生アルゴリズム周期)とした、言わば、一つ一つは短い乱数発生アルゴリズムを繋ぎ合わせ、擬似的に長周期の乱数発生アルゴリズムを実現しようと言うところにある。
【００７０】
そこで、言うまでもなく、本システムの持つ(擬似的な)乱数の発生周期は、fifoの段数=jに依存するであろうと言うことが容易に想像がつく。それでは、このfifoの段数=jは、如何にして決定すべきか?当然、段数=jを大きく持つことで乱数の周期は大きくなる、しかし、本システムが実現されるであろう回路規模も、それに伴い大きなものとなるであろう。逆に、段数=jを小さく持つと、(擬似的な)乱数の発生周期は短くなり、画像上に、人間の目で観測可能な縞模様が発生することが予測される。
【００７１】
故に、筆者が推奨する手法は、以下の通りである。即ち、実施例-1でも述べたように、予め、C/C++言語によって、本乱数発生アルゴリズムをPC上などでソフト的にシミュレーションしておけば、どの程度の周期が実現可能かを予測可能なので、それをもって、段数=jは決定されるべきである。個の値はの適・不適は、一概に述べることが出来ず、場合によっては、A3紙1枚のプリントが全てフォローされる程大きなfifoが必要かもしれないし、また、A4紙の横幅程度で十分な場合もあるかもしれなし。いずれにせよ、これは、PC上などでソフト的にシミュレーションにより、プリンタの設計者が、自ら決めるべき点だと考えられる。
【００７２】
以上のように、本実施例は、実施例-1の長所を継承しつつ、ファーム的な負荷を低減した、より進んだシステムの提案をしていることが分かる。
【図面の簡単な説明】
【００７３】
【図１】本明細が提案する乱数発生システムの1実施形態の構成図。
【図２】実施例１の基本的な構成の1つである演算手段を詳細に説明する図。
【図３】実施例１の基本的な構成の1つである演算手段の実現可能な演算式を示す図。
【図４】実施例２における乱数発生システムの1実施形態の構成図。
【図５】本明細が提案する乱数発生システムの実施例１のフローチャート（フローチャート１）。
【図６】本明細が提案する乱数発生システムの実施例２のフローチャート（フローチャート２）。
【符号の説明】
【００７４】
1-1  nビットの乱数値
1-2  1ビットの乱数発生機構
1-2-1  乱数をラッチするD-FF
1-2-4  演算手段
1-2-6  1ビットの乱数発生機構の動作を規定するレジスタ(1)
1-2-8  1ビットの乱数発生機構の動作を規定するレジスタ(2)
1-3  データバス
1-7  乱数ラッチ信号発生手段
1-9  乱数周期管理用のカウンタ
2-1  周期管理用レジスタ
2-2  比較手段
2-4  設定更新信号発生レジスタ
2-7、2-8、2-9、2-11  本乱数システムの設定更新用のfifo
【図１】
2005173797.tif 000003
【図２】
2005173797.tif 000004
【図３】
2005173797.tif 000005
【図４】
2005173797.tif 000006
【図５】
2005173797.tif 000007
【図６】
2005173797.tif 000008