(57)【特許請求の範囲】
【請求項１】
一個または複数個のグループの、グループ毎に定められた個数の要素を、アドレスを有する複数個のスロットから構成される母体テーブルに分散配置するシェーピング方法において、
上記グループ毎の理想配置スロット位置（以下、スロット位置を位置と称す）を算出する理想位置算出処理と、
算出した上記理想配置位置にグループ要素を、帯域が同一の上記グループをまとめて、帯域が大きく、理想位置からのずれの許容度を示す優先度が高い上記グループ順に配置するグループ要素配置処理と、
上記理想配置位置に配置できない場合に代替のスロットを探索する代替位置探索処理とを備え、
上記理想位置算出処理が、
定められた個数の上記グループを上記母体テーブルへ均等配置する際の、二種類の整数配置間隔を求める整数間隔算出処理と、
定められた個数のグループを上記母体テーブルへ均等配置する際の上記理想配置位置を、実数計算により求めて整数化する実数間隔算出処理と、
上記実数間隔算出処理において、実数計算により求めた値を整数化する際に、バイアスを加算してから整数化演算処理を行うバイアス付加処理と、
上記二種類の整数配置間隔の選択順番を変化させる間隔混合法変化処理と、
同一帯域グループ内の上記グループ毎の理想配置位置を、上記整数配置間隔内に均等分散する群内理想位置均等分散処理と、
上記同一帯域グループの上記グループ毎の配置開始位置を、上記母体テーブルに均等分散する群内開始位置均等分散処理と、
上記実数間隔算出処理および上記群内理想位置均等分散処理により算出した理想配置位置と、上記群内開始位置均等分散処理により算出した配分開始位置を行列座標にして記憶する行列座標記憶処理と、
帯域の異なる上記グループの配置開始位置を、上記母体テーブル内にランダム分散する開始位置ランダム分散処理と、
同一帯域グループ内のグループ要素の均等配分を、上記整数間隔算出処理および上記実数間隔算出処理を用いて行う共通化均等配分処理と、
同一グループの要素の隣接スロットへの配置を禁止する隣接配置禁止処理とを備え、
上記代替位置探索処理が、
上記理想配置位置の周辺のスロット配置状況を観察し、あらかじめ記憶させておいた最適配置位置パターンと照合し、最適配置位置を求めるパターン照合処理と、
上記母体テーブル内の配置済スロットの割合に依存して、上記最適配置位置パターンを変化させる配置割合依存パターン照合処理と、
上記理想配置位置の近傍スロットをランダムに探索する近傍ランダム探索処理と、
上記グループの配置開始位置を上記母体テーブル内でランダムに探索する全体ランダム探索処理と、
同一帯域グループ群の配置開始位置基準点を、上記母体テーブル内で、所定の連続スロットの空をランダムに探索する全体連続ランダム探索処理とを
備えたことを特徴とするシェーピング方法。
【請求項２】
理想位置算出処理におけるバイアス付加処理において、付加するバイアス値をゼロ以上１未満とする小数バイアス付加処理と、
上記理想位置算出処理における間隔混合法変化処理において、上記小数バイアス付加処理でバイアス値を変化させ、グループ要素の再設定を行うバイアス変化処理と、
上記バイアス変化処理において、変化させるバイアス値の順番をあらかじめ定めて、ゼロ以上１未満の値をとるバイアス値に、バイアス値の種類の総数を乗じることによって整数値として、この整数値の数列とバイアス値の種類総数を記憶させておくバイアス値変化パターン記憶処理とを
備えたことを特徴とする請求項１記載のシェーピング方法。
【請求項３】
理想位置算出処理における実数間隔算出処理において、３２ビット以下の整数による固定小数点変数を用いて、
母数を除数で除算し、第１の商と第１の剰余を求める第１の処理と、
上記第１の剰余を所定のビット数だけ左シフトする（所定のビット数回だけ２を乗ずる）第２の処理と、
上記左シフトされた第１の剰余を上記除数で除算し、第２の商と第２の剰余を求める第３の処理と、
上記第２の商に、１以上で上記除数以下の第１の整数を乗算し、第１の変数を求める第４の処理と、
上記第２の剰余に上記第１の整数を乗算し、上記除数で除算し、第２の変数を求める第５の処理と、
上記第１の変数と上記第２の変数を加算し、第１の剰余分回答を求める第６の処理と、
上記第１の剰余分回答を、上記所定のビット数だけ右シフトし（所定のビット数回だけ２で除算し）、第２の剰余分回答を求める第７の処理と、
上記第１の商に上記第１の整数を乗算し、商分回答を求める第８の処理と、
上記第２の剰余分回答と上記商分回答を加算することにより、回答を求める第９の処理と、
上記第１の整数を、１以上から上記除数以下の範囲で変化させ、上記第４の処理から上記第９の処理を繰り返すループ処理とを
備えたことを特徴とする請求項１記載のシェーピング方法。
【請求項４】
理想位置算出処理における開始位置ランダム分散処理、ならびに代替位置探索処理における近傍ランダム探索処理、全体ランダム探索処理および全体連続ランダム探索処理において、
２のべき乗値で表される乱数の周期を引数とし、周期毎に異なる変数を設け、周期毎の変数を初期化する乱数初期化処理と、
周期毎の変数を一次関数で更新する処理と、
一周期間の乱数発生時にゼロと最大目的地の間の各整数を１回または２回ランダムに発生させる乱数発生周期制御処理と、
上記最大目的地を越えない最小の２のべき乗の周期を選択する周期選択処理と、
上記選択した２のべき乗の周期の乱数関数を呼出す乱数関数呼出し処理とを
備えたことを特徴とする請求項１記載のシェーピング方法。
【請求項５】
代替位置探索処理におけるパターン照合処理において、
あらかじめ行っておく最適配置位置パターン作成処理と、
あらかじめ行っておく最適配置位置パターン記憶処理と、
パターン照合時に行う最適配置位置パターン参照処理とを備え、
上記最適配置位置パターン作成処理が、
同程度に適した空位置があるときは全てを配置候補とする処理と、
新規配置により、配置済の連続が発生しない空位置がある場合には、上記空位置を配置候補とする処理と、
配置済の連続が発生しない空位置がない場合には、配置済の連続数が最小となる位置を配置候補とする処理とを備え、
上記最適配置位置パターン記憶処理において記憶するパターンが、
理想配置位置周辺のスロットの配置状況を、配置済スロットを１、空スロットを０として１と０の連続数列で表し、これを二進数列とみなして十進数に換算した配置状況パターンと、
最適配置位置パターンにおける配置候補数と、
最適配置位置パターンにおける配置候補位置を、理想配置位置との相対位置で表して羅列した配置候補位置とを備え、
上記最適配置位置パターン参照処理が、
現在の理想配置位置周辺のスロットの配置状況を調査して配置状況パターンを作成する処理と、
上記最適配置位置パターン記憶処理において記憶されたパターンを参照する処理と、
上記最適配置位置パターン記憶処理において記憶された配置候補数が複数あるときは、乱数により配置候補位置の一つを選択する処理とを
備えたことを特徴とする請求項１記載のシェーピング方法。
【請求項６】
代替位置探索処理におけるパターン照合処理および近傍ランダム探索処理において、
理想位置に配置できない場合に実際に配置された代替位置が、理想位置より母体テーブルにおいて右側（スロットアドレスの大きい側）に配置された場合のスロット数のずれ（代替位置と理想位置のアドレスの差）を表す変数である借りを、算出した理想配置位置アドレスに加算し、代替位置アドレスを減算して指標を求める指標計算処理と、
上記指標が正またはゼロの場合には、代替位置が、理想位置より母体テーブルにおいて左側（スロットアドレスの小さい側）に配置された場合のスロット数のずれ（代替位置と理想位置のアドレスの差）を表す狭まりを指標とし、かつ新規借りをゼロとし、上記指標が負の場合には上記狭まりをゼロとし、上記新規借りを上記指標の絶対値とする狭まり・借り更新処理と、
上記新規借りをこれまでの借りの積算値に加算する借り積算処理とを
備えたことを特徴とする請求項１記載のシェーピング方法。
【請求項７】
一個または複数個のコネクションの、コネクション毎に定められた出力帯域に基づいて伝送される固定長セルの送出間隔を調整するシェーピング方法において、
コネクション、または幾つかのコネクションの集合として構成されるコネクショングループ（以下、まとめてグループと称す）に対して要求される帯域値の大きな順にグループを並び替える処理と、
帯域値順に、処理対象のグループに対して固定長セルを送出する際の理想送出間隔を算出する処理と、
それぞれがアドレスを有する複数のスロットから構成されて固定長セルの出力順を規定する母体テーブル上に、処理対象のグループについて配置開始位置を含めた全ての配置位置について理想配置位置を順次決定する処理と、
上記理想配置位置に処理対象のグループを配置できるか否かを判定する処理と、
配置可能である場合には、上記理想配置位置に処理対象のグループを配置する処理と、
配置不可である場合には、配置済みの帯域合計値が判定値よりも小さい時には上記理想配置位置を中心とした許容ＣＤＶ値内の範囲の奇数アドレス（または偶数アドレス）に優先的に処理対象のグループを配置し、配置済みの帯域合計値が判定値よりも大きい時には許容ＣＤＶ値内の範囲の任意のアドレスに処理対象のグループを配置する処理とを
備えたことを特徴とするシェーピング方法。
【請求項８】
一個または複数個のコネクションの、コネクション毎に定められた出力帯域に基づいて伝送される固定長セルの送出間隔を調整するシェーピング方法において、
コネクション、または幾つかのコネクションの集合として構成されるコネクショングループ（以下、まとめてグループと称す）に対して要求される帯域値の大きな順にグループを並び替える処理と、
帯域値順に、処理対象のグループに対して固定長セルを送出する際の理想送出間隔を算出する処理と、
それぞれがアドレスを有する複数のスロットから構成されて固定長セルの出力順を規定する出力テーブル上に、処理対象のグループについて配置開始位置を含めた全ての配置位置について理想配置位置を順次決定する処理と、
配置済みの帯域合計値が判定値よりも小さい場合には、理想配置位置を中心とした許容ＣＤＶ値内の範囲の奇数アドレス（または偶数アドレス）に優先的に処理対象のグループを配置し、配置済みの帯域合計値が判定値よりも大きい場合には、理想配置位置を中心とした許容ＣＤＶ値内の範囲の任意のアドレスに処理対象のグループを配置する処理とを
備えたことを特徴とするシェーピング方法。
【請求項９】
帯域合計値に対して比較される判定値が、母体テーブルの全出力帯域の半分の値として与えられることを特徴とする請求項７または請求項８記載のシェーピング方法。
【請求項１０】
処理対象のグループを許容ＣＤＶ値内の範囲の奇数アドレス（または偶数アドレス）に優先的に配置する際に、所定数で除した剰余が特定の数値となるアドレスに処理対象のグループを配置することを特徴とする請求項７または請求項８記載のシェーピング方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、ＡＴＭネットワークノードの交換装置内で実施されるシェーピング方法に関するものである。
【０００２】
【従来の技術】
図７７は、例えば電子情報通信学会技術報告ＳＳＥ９８−１９３（１９９９年１月）岩村、小林、堀江、藤田、芦「ＧＦＲ処理回路の帯域割り当て方法に関する検討」に示された従来のシェーピング方法を示す図である。図において、ＧＩＤＴＢＬはグループ識別子配置テーブル、ＡＤＲはＧＩＤアドレス、ＣＡＬＰはＧＩＤの計算理想配置位置、ＣＡＬＤはＧＩＤの理想配置間隔、ＲＤは相関計算範囲である。
【０００３】
図７７において、理想配置位置ＣＡＬＰの前７スロット、後８スロットを抜粋拡大したものが図の下部に示されており、スロット毎に１から１６の番号が振られている。スロット５からスロット１２が許容ＣＤＶ値７の場合の許容ＣＤＶ範囲であり、この各々のスロットに対して、９スロット毎の相関理想範囲ＲＤ５からＲＤ１２が定義されている。
【０００４】
図７８は、この従来のシェーピング方法の１グループ内のグループ要素配置の手順を示す図である。図の処理ｔｒｕｎｃ＿ｓ３＿ｐａｓｔ＿ｓ３において、理想配置間隔ＣＡＬＤは、総スロット数／グループ要素数ＧＰＣＲで計算され、これに基き理想配置位置ＣＡＬＰが求められる。各々の理想配置位置ＣＡＬＰに関して、許容ＣＤＶ範囲内、許容ＣＤＶ値を７とすれば、前３スロットから後４スロット、すなわち理想位置をスロット８と置くとスロット５からスロット１２までの各スロットについて、相関計算範囲ＲＤ５からＲＤ１２の荷重付き相関を計算し、配置密度がなるべく均等になるように配置位置を選択する。
【０００５】
さらに、配置母体のＧＩＤテーブルＧＩＤＴＢＬ内の理想位置ＣＡＬＰの配置位置に関しては、理想配置間隔ＣＡＬＤの範囲内で１０箇所を選択して試行し、全体としての配置密度がなるべく均等になる位置、すなわちＧＩＤテーブルＧＩＤＴＢＬ内の配置済スロットがなるべく均等になる位置を選択して、ＧＩＤを配置する。
【０００６】
上記のような従来のシェーピング方法では、ＧＩＤ配置に関して多種類の複雑な仮想配置処理を試行し、その結果を比較して最適な配置位置を選択している。図７８の手順で示すように、この方式では多重のループ処理からなる仮想配置処理が課されている。
【０００７】
【発明が解決しようとする課題】
図７７と図７８に示す方法では、許容ＣＤＶ値が７以下であるが、許容ＣＤＶ値が大きくなると、ｔｒｕｎｃ＿ｓ３＿ｐａｓｔ＿ｓ４からｔｒｕｎｃ＿ｓ３＿ｐａｓｔ＿ｓ７へのループの回数は、許容ＣＤＶ値に比例して多くなり、ＧＩＤテーブルの全スロットに対する要配置グループ要素の割合が小さい場合でも、多重のループ処理による仮想配置処理を経る必要があるという課題があった。
【０００８】
また、この方法は、配置の際のＣＤＶを、許容ＣＤＶ値を超えない最大値にするような構造になっているので、少ないＣＤＶで配置できる場合でも、大きなＣＤＶ値の位置に配置されてしまうという課題があった。
【０００９】
また、この方法は、理想配置位置ＣＡＬＰの計算については、割り切れない整数除算の商を単純な整数計算（理想間隔ＣＡＬＤ＝整数個の総スロット数／整数個のグループ要素数ＧＰＣＲ）で一定値において計算しており、実数計算に基く理想位置と、整数化した場合のずれに対する配慮がないという課題があった。
【００１０】
この発明は、上述のような課題を解決するためになされたもので、第１の目的は、構造的に全グループを配置するようにしたものである。第２の目的は、理想配置位置を全スロット中にできるだけ均等に分散させるようにしたものである。第３の目的は、理想配置位置に配置できない場合に、適切な代替位置を選択するようにしたものである。第４の目的は、正確なＣＤＶ値が算出できるようにしたものである。第５の目的は、周期と範囲を限定した乱数系列が得られるようにしたものである。
【００１１】
【課題を解決するための手段】
この発明に係るシェーピング方法は、一個または複数個のグループの、グループ毎に定められた個数の要素を、アドレスを有する複数個のスロットから構成される母体テーブルに分散配置するものにおいて、上記グループ毎の理想配置スロット位置（以下、スロット位置を位置と称す）を算出する理想位置算出処理と、算出した上記理想配置位置にグループ要素を、帯域が同一の上記グループをまとめて、帯域が大きく、理想位置からのずれの許容度を示す優先度が高い上記グループ順に配置するグループ要素配置処理と、上記理想配置位置に配置できない場合に代替のスロットを探索する代替位置探索処理とを備え、上記理想位置算出処理が、定められた個数の上記グループを上記母体テーブルへ均等配置する際の、二種類の整数配置間隔を求める整数間隔算出処理と、定められた個数のグループを上記母体テーブルへ均等配置する際の上記理想配置位置を、実数計算により求めて整数化する実数間隔算出処理と、上記実数間隔算出処理において、実数計算により求めた値を整数化する際に、バイアスを加算してから整数化演算処理を行うバイアス付加処理と、上記二種類の整数配置間隔の選択順番を変化させる間隔混合法変化処理と、同一帯域グループ内の上記グループ毎の理想配置位置を、上記整数配置間隔内に均等分散する群内理想位置均等分散処理と、上記同一帯域グループの上記グループ毎の配置開始位置を、上記母体テーブルに均等分散する群内開始位置均等分散処理と、上記実数間隔算出処理および上記群内理想位置均等分散処理により算出した理想配置位置と、上記群内開始位置均等分散処理により算出した配分開始位置を行列座標にして記憶する行列座標記憶処理と、帯域の異なる上記グループの配置開始位置を、上記母体テーブル内にランダム分散する開始位置ランダム分散処理と、同一帯域グループ内のグループ要素の均等配分を、上記整数間隔算出処理および上記実数間隔算出処理を用いて行う共通化均等配分処理と、同一グループの要素の隣接スロットへの配置を禁止する隣接配置禁止処理とを備え、上記代替位置探索処理が、上記理想配置位置の周辺のスロット配置状況を観察し、あらかじめ記憶させておいた最適配置位置パターンと照合し、最適配置位置を求めるパターン照合処理と、上記母体テーブル内の配置済スロットの割合に依存して、上記最適配置位置パターンを変化させる配置割合依存パターン照合処理と、上記理想配置位置の近傍スロットをランダムに探索する近傍ランダム探索処理と、上記グループの配置開始位置を上記母体テーブル内でランダムに探索する全体ランダム探索処理と、同一帯域グループ群の配置開始位置基準点を、上記母体テーブル内で、所定の連続スロットの空をランダムに探索する全体連続ランダム探索処理とを備えたものである。
【００１２】
この発明に係るシェーピング方法は、理想位置算出処理におけるバイアス付加処理において、付加するバイアス値をゼロ以上１未満とする小数バイアス付加処理と、上記理想位置算出処理における間隔混合法変化処理において、上記小数バイアス付加処理でバイアス値を変化させ、グループ要素の再設定を行うバイアス変化処理と、上記バイアス変化処理において、変化させるバイアス値の順番をあらかじめ定めて、ゼロ以上１未満の値をとるバイアス値に、バイアス値の種類の総数を乗じることによって整数値として、この整数値の数列とバイアス値の種類総数を記憶させておくバイアス値変化パターン記憶処理とを備えたものである。
【００１３】
この発明に係るシェーピング方法は、理想位置算出処理における実数間隔算出処理において、３２ビット以下の整数による固定小数点変数を用いて、母数を除数で除算し、第１の商と第１の剰余を求める第１の処理と、上記第１の剰余を所定のビット数だけ左シフトする（所定のビット数回だけ２を乗ずる）第２の処理と、上記左シフトされた第１の剰余を上記除数で除算し、第２の商と第２の剰余を求める第３の処理と、上記第２の商に、１以上で上記除数以下の第１の整数を乗算し、第１の変数を求める第４の処理と、上記第２の剰余に上記第１の整数を乗算し、上記除数で除算し、第２の変数を求める第５の処理と、上記第１の変数と上記第２の変数を加算し、第１の剰余分回答を求める第６の処理と、上記第１の剰余分回答を、上記所定のビット数だけ右シフトし（所定のビット数回だけ２で除算し）、第２の剰余分回答を求める第７の処理と、上記第１の商に上記第１の整数を乗算し、商分回答を求める第８の処理と、上記第２の剰余分回答と上記商分回答を加算することにより、回答を求める第９の処理と、上記第１の整数を、１以上から上記除数以下の範囲で変化させ、上記第４の処理から上記第９の処理を繰り返すループ処理とを備えたものである。
【００１４】
この発明に係るシェーピング方法は、理想位置算出処理における開始位置ランダム分散処理、ならびに代替位置探索処理における近傍ランダム探索処理、全体ランダム探索処理および全体連続ランダム探索処理において、２のべき乗値で表される乱数の周期を引数とし、周期毎に異なる変数を設け、周期毎の変数を初期化する乱数初期化処理と、周期毎の変数を一次関数で更新する処理と、一周期間の乱数発生時にゼロと最大目的地の間の各整数を１回または２回ランダムに発生させる乱数発生周期制御処理と、上記最大目的地を越えない最小の２のべき乗の周期を選択する周期選択処理と、上記選択した２のべき乗の周期の乱数関数を呼出す乱数関数呼出し処理とを備えたものである。
【００１５】
この発明に係るシェーピング方法は、代替位置探索処理におけるパターン照合処理において、あらかじめ行っておく最適配置位置パターン作成処理と、あらかじめ行っておく最適配置位置パターン記憶処理と、パターン照合時に行う最適配置位置パターン参照処理とを備え、上記最適配置位置パターン作成処理が、同程度に適した空位置があるときは全てを配置候補とする処理と、新規配置により、配置済の連続が発生しない空位置がある場合には、上記空位置を配置候補とする処理と、配置済の連続が発生しない空位置がない場合には、配置済の連続数が最小となる位置を配置候補とする処理とを備え、上記最適配置位置パターン記憶処理において記憶するパターンが、理想配置位置周辺のスロットの配置状況を、配置済スロットを１，空スロットを０として１と０の連続数列で表し、これを二進数列とみなして十進数に換算した配置状況パターンと、最適配置位置パターンにおける配置候補数と、最適配置位置パターンにおける配置候補位置を、理想配置位置との相対位置で表して羅列した配置候補位置とを備え、上記最適配置位置パターン参照処理が、現在の理想配置位置周辺のスロットの配置状況を調査して配置状況パターンを作成する処理と、上記最適配置位置パターン記憶処理において記憶されたパターンを参照する処理と、上記最適配置位置パターン記憶処理において記憶された配置候補数が複数あるときは、乱数により配置候補位置の一つを選択する処理とを備えたものである。
【００１６】
この発明に係るシェーピング方法は、代替位置探索処理におけるパターン照合処理および近傍ランダム探索処理において、理想位置に配置できない場合に実際に配置された代替位置が、理想位置より母体テーブルにおいて右側（スロットアドレスの大きい側）に配置された場合のスロット数のずれ（代替位置と理想位置のアドレスの差）を表す変数である借りを、算出した理想配置位置アドレスに加算し、代替位置アドレスを減算して指標を求める指標計算処理と、上記指標が正またはゼロの場合には、代替位置が、理想位置より母体テーブルにおいて左側（スロットアドレスの小さい側）に配置された場合のスロット数のずれ（代替位置と理想位置のアドレスの差）を表す狭まりを指標とし、かつ新規借りをゼロとし、上記指標が負の場合には上記狭まりをゼロとし、上記新規借りを上記指標の絶対値とする狭まり・借り更新処理と、上記新規借りをこれまでの借りの積算値に加算する借り積算処理とを備えたものである。
【００１７】
この発明に係るシェーピング方法は、一個または複数個のコネクションの、コネクション毎に定められた出力帯域に基づいて伝送される固定長セルの送出間隔を調整するものにおいて、コネクション、または幾つかのコネクションの集合として構成されるコネクショングループ（以下、まとめてグループと称す）に対して要求される帯域値の大きな順にグループを並び替える処理と、帯域値順に、処理対象のグループに対して固定長セルを送出する際の理想送出間隔を算出する処理と、それぞれがアドレスを有する複数のスロットから構成されて固定長セルの出力順を規定する母体テーブル上に、処理対象のグループについて配置開始位置を含めた全ての配置位置について理想配置位置を順次決定する処理と、上記理想配置位置に処理対象のグループを配置できるか否かを判定する処理と、配置可能である場合には、上記理想配置位置に処理対象のグループを配置する処理と、配置不可である場合には、配置済みの帯域合計値が判定値よりも小さい時には上記理想配置位置を中心とした許容ＣＤＶ値内の範囲の奇数アドレス（または偶数アドレス）に優先的に処理対象のグループを配置し、配置済みの帯域合計値が判定値よりも大きい時には許容ＣＤＶ値内の範囲の任意のアドレスに処理対象のグループを配置する処理とを備えたものである。
【００１８】
この発明に係るシェーピング方法は、一個または複数個のコネクションの、コネクション毎に定められた出力帯域に基づいて伝送される固定長セルの送出間隔を調整するものにおいて、コネクション、または幾つかのコネクションの集合として構成されるコネクショングループ（以下、まとめてグループと称す）に対して要求される帯域値の大きな順にグループを並び替える処理と、帯域値順に、処理対象のグループに対して固定長セルを送出する際の理想送出間隔を算出する処理と、それぞれがアドレスを有する複数のスロットから構成されて固定長セルの出力順を規定する出力テーブル上に、処理対象のグループについて配置開始位置を含めた全ての配置位置について理想配置位置を順次決定する処理と、配置済みの帯域合計値が判定値よりも小さい場合には、理想配置位置を中心とした許容ＣＤＶ値内の範囲の奇数アドレス（または偶数アドレス）に優先的に処理対象のグループを配置し、配置済みの帯域合計値が判定値よりも大きい場合には、理想配置位置を中心とした許容ＣＤＶ値内の範囲の任意のアドレスに処理対象のグループを配置する処理とを備えたものである。
【００１９】
この発明に係るシェーピング方法は、帯域合計値に対して比較される判定値が、母体テーブルの全出力帯域の半分の値として与えられるものである。
【００２０】
この発明に係るシェーピング方法は、処理対象のグループを許容ＣＤＶ値内の範囲の奇数アドレス（または偶数アドレス）に優先的に配置する際に、所定数で除した剰余が特定の数値となるアドレスに処理対象のグループを配置するものである。
【００２１】
【発明の実施の形態】
以下、この発明の実施の一形態を説明する。
実施の形態１．
この発明の実施の形態によるシェーピング方法を用いたグループ識別子配置例についてまず説明する。図１はグループ識別子配置テーブルの一例を示すものである。図において、ＧＩＤはグループ識別子、ＳＬＯＴはＧＩＤを収容するメモリ空間であるスロット、ＡＤＲはスロットＳＬＯＴのアドレス、ＧＩＤＴＢＬはＧＩＤアドレスＡＤＲが０から１１９７９の１１９８０個のスロットＳＬＯＴから構成されるグループ識別子（ＧＩＤ）配置テーブルである。
【００２２】
図１に示す帯状のＧＩＤ配置テーブル（ＧＩＤテーブルバンド）は、論理的には両端がつながっており、図２に示す輪状のＧＩＤ配置テーブル（ＧＩＤテーブルリング）と等価である。図１および図２に示す用語を整理したものを図３に示す。
【００２３】
次に、この実施の形態を具体的に説明するに先立ち、この実施の形態におけるＧＩＤ配置テーブルを使用して、ＧＩＤ配置を行う必要がある背景とその位置付けについて述べる。
【００２４】
インターネット等の急速な発展にともない、ＡＴＭ（Ａｓｙｎｃｈｒｏｎｏｕｓ  Ｔｒａｎｓｆｅｒ  Ｍｏｄｅ；非同期転送モード）を用いて安価なデータ通信を実現する方法が求められている。このなかで、ＡＴＭのサービスクラスであるＧＦＲ（Ｇｕａｒａｎｔｅｅｄ  Ｆｒａｍｅ  Ｒａｔｅ）が注目され、ＡＴＭフォーラムやＩＴＵ−Ｔ（国際電気通信連合）等で標準化が進んでおり、ＡＴＭＦｏｒｕｍ  Ｔｅｃｈｎｉｃａｌ  Ｃｏｍｍｉｔｔｅｅ  Ｔｒａｆｆｉｃ  Ｍａｎａｇｅｍｅｎｔ  Ｗｏｒｋｉｎｇ  Ｇｒｏｕｐ：“Ｔｒａｆｆｉｃ  Ｍａｎａｇｅｍｅｎｔ  Ｗｏｒｋｉｎｇ  Ｇｒｏｕｐ  Ｌｉｖｉｎｇ  Ｌｉｓｔ（ＡＴＭ  Ｆｏｒｕｍ／ＬＴＤ−ＴＭ−０１．０４  ｔｏ  ０１．０６），”Ｊｕｌｙｔｏ  Ｄｅｃ．１９９７、およびＩＴＵ−Ｔ勧告Ｉ．３７１  Ｌｉｖｉｎｇ  Ｌｉｓｔ，Ｇｅｎｅｖａ，Ｊｕｎ．１９９８等の文書が公表されている。
【００２５】
ＧＦＲでは、フレーム単位で各コネクションの最低帯域（ｍＣＲ；ｍｉｎｉｍｕｍ  Ｃｅｌｌ  Ｒａｔｅ）を保証し、余裕がある場合には、最大速度（ＰＣＲ；Ｐｅａｋ  Ｃｅｌｌ  Ｒａｔｅ）を超えない範囲で、ｍＣＲを超えた余剰帯域を各コネクションに割り当てる。各コネクションへの帯域割当時には、多重化によるＣＤＶ（Ｃｅｌｌ  Ｄｅｌａｙ  Ｖａｒｉａｔｉｏｎ；セル遅延変動）の発生や公平性等を考慮する必要があり、ＧＦＲの帯域割当は重要な技術課題となっている。
【００２６】
図４にＧＦＲにおける帯域割当の概念図を示す。図において、ＨＹＷＡＹは通信路のハイウェイ、ＣＯＮＮＣＴＮはＡＴＭのコネクションを示す。ここでは、１．２Ｇｂ／ｓ（正確には１．１９８Ｇｂ／ｓ）のハイウェイＨＹＷＡＹに、最大２０４８個のコネクションＣＯＮＮＣＴＮを収容する。コネクションＣＯＮＮＣＴＮをハイウェイＨＹＷＡＹに収容する際に、複数のコネクション間で余剰帯域を共用する。コネクション間で帯域共用を行う帯域割当を行うのが、帯域共用部ＢＡＮＤＭである。この際、帯域共用は全コネクション一括では行わず、コネクションを最大５１２個のグループＧＲＯＵＰに分割して、各々のグループ内で行う。即ち、ＧＦＲの帯域割当は、コネクションＣＯＮＮＣＴＮ単位と、グループＧＲＯＵＰ単位の二段階に分割して行われる。
【００２７】
帯域共用部ＢＡＮＤＭにおける、グループＧＲＯＵＰ内帯域のコネクションＣＯＮＮＣＴＮへの割当法としては、ＷＲＲ（Ｗｅｉｇｈｔｅｄ  Ｒｏｕｎｄ  Ｒｏｂｉｎ；荷重付ラウンドロビン）方式や、共通ＦＩＦＯバッファ方式が検討されている。
【００２８】
ＷＲＲ方式は、例えばＭ．Ｋａｔｅｖｅｎｉｓ，Ｓ．Ｓｉｄｉｒｏｐｏｕｌｏｓ，Ｃ．Ｃｏｕｒｃｏｕｂｅｔｉｓ，“Ｗｅｉｇｈｔｅｄ  Ｒｏｕｎｄ−Ｒｏｂｉｎ  ｃｅｌｌ  ｍｕｌｔｉｐｌｅｘｉｎｇ  ｉｎ  ａ  ｇｅｎｅｒａｌ−ｐｕｒｐｏｓｅ  ＡＴＭ  ｓｗｉｔｃｈ  ｃｈｉｐ，”Ｊｏｕｒｎａｌ  ｏｎ  Ｓｅｌｃｔｅｄ  Ａｒｅａｓ  ｉｎ  Ｃｏｍｍ．，ｖｏｌ．９，ｎｏ．８，ｐｐ．１２６５−１２７９，Ｏｃｔ．１９９１で説明される方式で、コネクションＣＯＮＮＣＴＮ毎にバッファを設けて各コネクションのセルを荷重付で順番に読み出している。
【００２９】
コネクション毎の荷重は、各コネクションの識別子（ＣＩＤ：Ｃｏｎｎｅｃｔｉｏｎ  Ｉｄｅｎｔｉｆｉｅｒ）を配置したコネクション識別子配置テーブルＣＩＤＴＢＬに保持されており、帯域共用部ＢＡＮＤＭは、コネクション識別子配置テーブルＣＩＤＴＢＬに基づいて、ＷＲＲ荷重の制御を行う。
【００３０】
共通ＦＩＦＯバッファ方式は、例えば吉野學、東間悟、家永憲人“ＧＦＲバッファ構成におけるＴＣＰ／ＩＰ公平性の検討”、９９信学総大Ｂ−８−１５，Ｍａｒｃｈ  １９９９で紹介されている方式で、全コネクションＣＯＮＮＣＴＮ共通のＦＩＦＯバッファを設け、バッファ内の閾値を超えたセルにタギングし、タギングされたセルを優先的に廃棄する。両者とも、タギング・廃棄はフレーム単位に行う（ＥＰＤ：Ｅａｒｌｙ  Ｐａｃｋｅｔ  Ｄｉｓｃａｒｄ）。
【００３１】
この実施の形態では、帯域共用部ＢＡＮＤＭではＷＲＲ方式をとることを想定しているが、以下の技術は他の方式でも同様に適用することができる。
ここでは、帯域共用部ＢＡＮＤＭでのコネクション識別子配置テーブルＣＩＤＴＢＬに基いたＣＩＤ配置を、ＣＩＤ配置問題と呼ぶ。
【００３２】
１．２Ｇｂ／ｓハイウェイＨＹＷＡＹへのグループＧＲＯＵＰの割当においては、帯域共用は行わない。しかし、各グループＧＲＯＵＰを許容ＣＤＶの範囲でハイウェイＨＹＷＡＹに割り当てるには、工夫が必要であるため、これも技術課題となっている。グループ割当は、多重化部ＭＵＸで、各グループＧＲＯＵＰの識別子（ＧＩＤ）を配置したグループ識別子配置テーブルＧＩＤＴＢＬを参照する。ここでは、この問題をＧＩＤ配置問題と呼ぶ。本実施の形態の発明は、ＧＩＤ配置問題の効率的な解法を与えるものである。
【００３３】
なお、図４はコネクションＣＯＮＮＣＴＮ，グループＧＲＯＵＰ，ハイウェイＨＹＷＡＹの階層構造を説明するための概念図であり、実際の装置構成とは異なる部分がある。図４では、帯域共用部ＢＡＮＤＭと多重化部ＭＵＸは、全く別個に描かれており、帯域共用部ＢＡＮＤＭで全グループのコネクションを割り当てた後、各グループを多重化部ＭＵＸで多重化するように見えるが、実際は、帯域共用部ＢＡＮＤＭと多重化部ＭＵＸは融合している。そこでは、グループ識別子配置テーブルＧＩＤＴＢＬを参照して、割り当てられたグループのみ、コネクション識別子配置テーブルＣＩＤＴＢＬの荷重に従ったＷＲＲを行う。
【００３４】
以下に、この実施の形態の内容を具体的に説明していく。その構成は次の通りである。まず、ＧＩＤ配置問題について説明した後、ＧＩＤ配置の手順の概要を示す。次にＧＩＤ配置の手順の詳細を説明していく。大筋としては、まず、ＧＩＤ配置における理想位置の算出方法を述べ、次に、理想位置に配置できない場合の処置について説明する。さらに、ＧＩＤ配置において使用する要素技術として、ＣＤＶに関する技術および乱数に関する技術について述べる。
【００３５】
以下に、この実施の形態におけるＧＩＤ配置問題について、前述の図１から図３および図５に基き詳細に説明する。図５は、ＧＩＤ配置問題の入力パターンの例を示す。図において、ＴＥＳＴ１はテストパターン１、ＧＰＲＩＯはグループの優先度、ＧＰＣＲはグループの帯域、ＧＰＣＲＤはグループ帯域（小数表現）である。ＧＰＲＩＯとＧＰＣＲは図３にも記されている。
【００３６】
ＧＩＤ配置問題では、まず、グループＧＲＯＵＰ毎の帯域ＧＰＣＲＤと優先度ＧＰＲＩＯが与えられる。これらはグループの属性としてグループを特徴付ける値である。この他に、各グループには、識別子としてグループ識別子ＧＩＤが振られるが、これは入力データの段階では付与されない。
【００３７】
グループ帯域は、小数表現ＧＰＣＲＤか整数表現ＧＰＣＲで表される。グループ帯域は１．１９８Ｇｂ／ｓのハイウェイＨＹＷＡＹ中の当該グループの帯域を示し、小数表現で０から５９９．０Ｍｂ／ｓの値をとる。ここで、帯域配置際の単位帯域が０．１Ｍｂ／ｓである。即ち、図１および図２に示す一つのスロットＳＬＯＴは０．１Ｍｂ／ｓであるため、グループ帯域は、
ＧＰＣＲ＝ＧＰＣＲＤ（Ｍｂ／ｓ）／０．１（Ｍｂ／ｓ）
＝ＧＰＣＲＤ×１０
の整数値で表すことができる。このグループ帯域ＧＰＣＲは、当該グループの要素数を示す。
【００３８】
グループの優先度は、グループの要素を配置する際の理想位置からのずれ（ＣＤＶ）の許容度を表す指標で、優先度が高いほど、ずれの許容度が小さい。配置グループの優先度の例を図６に示す。優先度としては高優先（Ｈｉｇｈ  Ｐｒｉｏｒｉｔｙ）、低優先（Ｌｏｗ  Ｐｒｉｏｒｉｔｙ）、優先無（Ｎｏｎ  Ｐｒｉｏｒｉｔｙ）があり、それぞれＨＰ、ＬＰ、ＮＰと略記される。
【００３９】
ＧＩＤ配置の仕様は、優先度毎に指定することができる。例えば、高優先グループはＣＤＶ≦７以内で全て配置し、ＣＤＶ≦３１で高優先を含む全グループの８０％を配置する、というものである。
【００４０】
グループ配置の際の基本方針は、高優先→低優先→優先無の順にそれぞれ帯域の大きいグループから配置していく。しかし高優先の小帯域のグループを全て配置してから低優先の大帯域のグループを配置しようとすると、配置できないことがあるので、その場合は、高優先の小帯域のグループの前に低優先の大帯域のグループを配置するように配置順を変更する。
【００４１】
図５のパターン例ＴＥＳＴ１では、優先度ＧＰＲＩＯが高優先（ＨＰ）で、帯域ＧＰＣＲＤが１６．７のグループが８個、優先度ＧＰＲＩＯが低優先（ＬＰ）で、帯域ＧＰＣＲＤが８．７のグループが３個ある。ＧＩＤ配置問題では、各グループのグループ要素を、１．２ＧハイウェイＨＹＷＡＹに均等に配置することが課題である。
【００４２】
即ち、図１または図２に示すＧＩＤ配置テーブルＧＩＤＴＢＬに、当該グループのＧＩＤを書き込むことにより、グループ要素を均等に配置することである。図１のＧＩＤ配置テーブルでは、アドレスＡＤＲが０のスロットＳＬＯＴから１０個毎に、ＧＩＤが１と記されている。これは、識別子が１のグループの要素の配置位置が、アドレスＡＤＲが０，１０，２０，…のスロットＳＬＯＴに配置されているという意味である。同様に、識別子が２のグループの要素は、アドレスＡＤＲが５の位置から１３スロット毎に配置されている。
【００４３】
以下に、この実施の形態におけるＧＩＤ配置の基本方針を述べる。
・同一帯域のグループはまとめて配置する。これを群化と呼ぶ。
・帯域の大きいグループの群から配置していく。
・群化した同一帯域群は、全スロット（１１９８０個）の中からランダムに選択されたベースオフセットを基準に配置する。
・群中のスタートオフセットは全スロット（１１９８０個）に均等に分散させるが、理想位置が既配置の場合は、全ＧＩＤの中からランダム選択する。
・一つのグループ内のＧＩＤは、全スロット（１１９８０個）に均等に分散させる。理想位置と許容ＣＤＶ値を考慮し、最適な位置を選択する。
・許容ＣＤＶ値の範囲でグループ内ＧＩＤを配置できないときは、当該グループにおける既設定ＧＩＤを削除し、スタートオフセットを全スロット（１１９８０個）の中からランダムに選択し、再設定する。
・許容回数スタートオフセットを変更してもグループ内ＧＩＤを設定できないときは、ＧＩＤ間隔計算時の整数化の方法を変更し、再試行する。
・許容回数ＧＩＤ間隔の整数化方法を変更してもグループ内ＧＩＤを設定できないときは、許容ＣＤＶ値を変更する。
【００４４】
本実施の形態におけるＧＩＤ配置アルゴリズムの大きな特徴は次の点である。
・乱数による配置位置のランダム選択
・同一帯域グループ内の理想配置位置は可能な限り均等分配
・許容ＣＤＶ値が７のときは、理想位置付近のパターン照合により最適配置位置を選択
・同一グループＧＩＤ隣接配置禁止機能
これらの特徴を中心に、本実施の形態におけるＧＩＤ配置アルゴリズムの詳細を以下に説明する。
【００４５】
次にＧＩＤ配置の手順について説明する。まず、グループの階層例として、次に示すＴＥＳＴ２のテストパターンをとる。
（［ＨＰ］１６７，１６７，１６７，１６７，１６７，１６７，１６７，１６７，１６３，１６３，１６３，１６３，１６３，１６３，１６３，１６３，１５７，１５７，１５７，１５７，１５７，１５７，１５７，１５７，１５１，１５１，１５１，１５１，１５１，１５１，１５１，１５１，１４９，１４９，１４９，１４９，１４９，１４９，１４９，１４９，１３９，１３９，１３９，１３９，１３９，１３９，１３９，１３９，１３７，１３７，１３７，１３７，１３７，１３７，１３７，１３７，１３１，１３１，１３１，１３１，１３１，１３１，１３１，１３１，１２７，１２７，１２７，１２７，１２７，１２７，１２７，１２７，１１３，１１３，１１３，１１３，１１３，１１３，１１３，１１３，６１，６１，６１，６１，６１，６１，６１，６１，２，２，２，２，２，２，２，２）
【００４６】
これは８個ずつの１２種類の９６個のグループから構成されるパターンで、図７のように階層化される。同一帯域のグループをまとめたものを同一帯域グループ群とする。グループ配置の際には、帯域の大きいグループから群毎に配置処理を行い、各群内ではグループ毎、各グループ内では個別ＧＩＤ毎に配置を行う。グループが階層化されているのにともない、グループの配置処理も階層化されている。ＧＩＤ配置の基本構成を図８に、図中のｔｒｕｎｃ＿ｓ０からｔｒｕｎｃ＿ｓ３の処理の手順を図９から図１２に示す。
【００４７】
次に、本実施の形態のＧＩＤ配置における、ＧＩＤ配置の理想位置の算出について述べる。
まず、同一帯域グループ内の理想配置位置の均等分配について述べる。
同一帯域を有する群化されたグループの各要素の理想配置位置は、全ＧＩＤ中に可能な限り均等に分配するというのが、本実施の形態におけるＧＩＤ配置アルゴリズムの基本方針である。以下に、この均等配分の方法について説明する。
【００４８】
例えば、図５に示すテストパターンＴＥＳＴの最初の８個のデータの帯域ＧＰＣＲは１６７である。この８個をまとめて一群として処理する（群化）。ここで１６７個のグループ要素を全スロットである１１９８０中になるべく均等に割り振るには、１１９８０／１６７＝７１．７３６５スロット毎にグループを配置すればよいが、１スロットは分割できず、ＧＩＤアドレスは整数値となっているので、グループ配置もこの制限下で行わなければならない。ここで、厳密な理想の計算位置からどのくらいずれても許容されるかを表すのが許容ＣＤＶ値である。許容ＣＤＶ値とＣＤＶ算出方法については後に詳述する。
【００４９】
次にステップの配置について説明する。
さて、１６７個のグループを１１９８０個のＧＩＤ中に整数的に配置するためには、１１９８０＝７１×４４＋７２×１２３から、７１の間隔を４４個と７２個の間隔を１２３個を混合して配置する必要がある。便宜上、小さいほうの間隔（この場合は７１）をｓｔｅｐ１、大きいほうの間隔（この場合は７２）をｓｔｅｐ２と呼ぶ。ｓｔｅｐ２＝ｓｔｅｐ１＋１である。
【００５０】
本実施の形態においてｓｔｅｐ１とｓｔｅｐ２の計算は関数ｃｎｔ＿ｍｉｘ＿ｃｌｃ＿ｉｎｔで行っている。図１３は、ｃｎｔ＿ｍｉｘ＿ｃｌｃ＿ｉｎｔの手順を示すフローチャートである。関数ｃｎｔ＿ｍｉｘ＿ｃｌｃ＿ｉｎｔは、図１０の処理ｔｒｕｎｃ＿ｓ１＿ｓ１のｃｎｔ＿ｓｅｔ＿ｓｔｅｐ＿ｉｎｆおよびｃｎｔ＿ｓｅｔ＿ｓｉｚｅ＿ｉｎｆで用いられる。
【００５１】
図１３のｃｎｔ＿ｍｉｘ＿ｃｌｃ＿ｉｎｔは、割算のもとになる全体数ｗｈｏｌｅ＿ｉｎｔのなかに、分割数ｄｉｖｉｄｅｒ＿ｉｎｔ個の要素をできるだけ均等配置する処理を、整数の世界のみで行う処理である。配置要素の間隔ｓｉｚｅ１とｓｉｚｅ２＝ｓｉｚｅ１＋１，ｓｉｚｅ１の数ｎｕｍ１，ｓｉｚｅ２の数ｎｕｍ２を返す。この例の場合は、ｗｈｏｌｅ＿ｉｎｔ＝１１９８０，ｄｉｖｉｄｅｒ＿ｉｎｔ＝１６７，ｓｉｚｅ１＝ｓｔｅｐ１＝７１，ｓｉｚｅ２＝ｓｔｅｐ２＝７２となる。
【００５２】
図の処理ｃｎｔ＿ｍｉｘ＿ｃｌｃ＿ｉｎｔ＿ｓ１では、ｓｉｚｅ１とｓｉｚｅ２を求めて、処理ｃｎｔ＿ｍｉｘ＿ｃｌｃ＿ｉｎｔ＿ｓ２では、ｗｈｏｌｅ＿ｉｎｔ／ｄｉｖｉｄｅｒ＿ｉｎｔの余りｏｖｅｒ，この場合は１２３を求める。処理ｃｎｔ＿ｍｉｘ＿ｃｌｃ＿ｉｎｔ＿ｓ３では、ｓｉｚｅ１の個数ｎｕｍ１，この場合は４４個、およびｓｉｚｅ２の個数ｎｕｍ２，この場合は１２３個を求める。
【００５３】
ｓｔｅｐ１とｓｔｅｐ２の２種類の間隔の混合方法としては、次のような方法が考えられる。
１）まずｓｔｅｐ１をまとめて配置し、ｓｔｅｐ１が配置し終わったらｓｔｅｐ２を配置する。
２）ｓｔｅｐ１とｓｔｅｐ２の混合比を計算し、これに従ってｓｔｅｐ１とｓｔｅｐ２を混合配置する。混合比が整数なので、最後に余りが出てどちらかが固まって配置される。
３）ｓｔｅｐ１とｓｔｅｐ２については意識せずに、ステップの累積値（ＧＩＤアドレス）を次の（１）式により実数で計算し、実数値を丸めて整数値とする。
ＧＩＤアドレス＝１１９８０／帯域×ｉ                      （１）
但しｉ＝１，２，…帯域
方式１）〜３）の順でアルゴリズムが複雑化するが、理想ＧＩＤ値からのずれは小さくなる。
【００５４】
本実施の形態におけるＧＩＤ配置アルゴリズムにおいては、１）〜３）の順で全ての方法を使用した経緯があるが、整数化によるＣＤＶを１未満に抑えるために、最終的には３）の方式を使用している。３）の方式は単純に見えるが、使用変数をできるだけ正整数のみにするという制約のもとでは、それほど容易ではない。
【００５５】
図１４に、グループ帯域が３８０の場合に、各方式を用いて整数化したＧＩＤアドレスを求めた場合の、ＣＤＶと借りの最大値、最小値、平均を求めたシミュレーション結果を示してある。帯域＝３８０ということは、ＧＩＤの０から１１９７９になるべく均等に３８０個のグループ要素を配置するということであり、表にはこの３８０個の配置中でのＣＤＶと借りの値の最大・最小・平均を示してある。
【００５６】
方式１）では、まずｓｔｅｐ１＝３１を１８０個全て配置してから、次にｓｔｅｐ２＝３２を２００個配置する（１１９８０＝３１×１８０＋３２×２００）。間隔の小さいほうのｓｔｅｐ１を先に配置しているため、借りは発生しないが、ＣＤＶは非常に大きくなり、方式３）の場合の１００倍になっている。
【００５７】
方式２）では、３８０／１８０＝２．１１１１を四捨五入した整数比率２に基き、ｓｔｅｐ１とｓｔｅｐ２を１個ずつ交互に混合していき、最後に２０個余ったｓｔｅｐ２をまとめて配置する。借りの０．４７３７は、最初にｓｔｅｐ１でなくｓｔｅｐ２を配置したために発生した借りが、そのまま最後まで残ったもので、その後は新たな借りは発生していない。方式２）の場合もＣＤＶは大きくなり、方式１）の場合の１０倍になっている。
【００５８】
方式３）では、実数値の整数化の方法として、四捨五入、切捨て、切上げ、切捨てと切上げをランダムに選択の４種類を試行した。四捨五入、切捨て、切上げについては、一貫して同じ方法を用いるならば、ＣＤＶはほぼ同じで１未満となることがわかる。借りは、常に小さめの整数値を選択する切捨てではゼロ、常に大きめの整数値を選択する切上げでは１に近い値、四捨五入では中間となっている。また、切捨てと切上げをランダムに選択する方式ではＣＤＶが他の方式より１大きくなってしまうので、整数化の丸めには一貫して同じ方式を用いる必要があることがわかる。
【００５９】
本実施の形態では、これらの機能は実数による混合パラメータ計算設定処理関数ｃｎｔ＿ｍｉｘ＿ｒｅａｌで実現される。図１５は、関数ｃｎｔ＿ｍｉｘ＿ｒｅａｌの手順を示すフローチャートである。関数ｃｎｔ＿ｍｉｘ＿ｒｅａｌは、図１０のｔｒｕｎｃ＿ｓ１＿ｓ１のｃｎｔ＿ｓｅｔ＿ｓｉｚｅ＿ｉｎｆおよびｔｒｕｎｃ＿ｓ１＿ｓ４で用いられる。関数ｃｎｔ＿ｍｉｘ＿ｒｅａｌは、割算のもとになる全体数ｗｈｏｌｅ＿ｉｎｔのスロットに、分割数ｄｉｖｉｄｅｒ＿ｉｎｔ個の要素をできるだけ均等配置する処理を実数の世界で行い、整数化した値を配置テーブルに書き込んで返却する。外部からの入出力は整数で、実数計算は本関数の中だけで閉じるようになっている。配置間隔の数が整数計算の場合と一致するかどうかのチェック機能を有する。
【００６０】
図１５の処理ｃｎｔ＿ｍｉｘ＿ｒｅａｌ＿ｓ１では、整数変数ｗｈｏｌｅ＿ｉｎｔとｄｉｖｉｄｅｒ＿ｉｎｔを実数に変換している。処理ｃｎｔ＿ｍｉｘ＿ｒｅａｌ＿ｓ２では、丸めバイアスを計算している。丸めバイアスについては後述する。処理ｃｎｔ＿ｍｉｘ＿ｒｅａｌ＿ｓ４では、ｉ番目の実数配置位置ａｎｓｗｅｒを計算し、これに丸めバイアスｒｏｕｎｄ＿ｂｉａｓを加算し、切捨てで整数化してａｎｓｗｅｒ＿ｉｎｔを求め、テーブル＊ｍｉｘ＿ｃｕｍ＿ｔｂｌに設定している。処理ｃｎｔ＿ｍｉｘ＿ｒｅａｌ＿ｓ３からｃｎｔ＿ｍｉｘ＿ｒｅａｌ＿ｓ７のループで、ｉを１からｄｉｖｉｄｅｒ＿ｉｎｔまで変化させている。処理ｃｎｔ＿ｍｉｘ＿ｒｅａｌ＿ｓ５では、ここで求めた間隔および個数が、図１３の整数計算関数ｃｎｔ＿ｍｉｘ＿ｃｌｃ＿ｉｎｔで求めた値と一致しているかどうかを検査している。
【００６１】
次に、ステップ混合法の変更について説明する。
まず、丸めバイアスの加算について説明する。
上記方式３）の（１）式に基き、帯域＝３８０の場合のステップの加算値を実数で計算して、四捨五入、切捨て、切上げの三通りで整数化した場合の整数値の違いを図１６の表に示す。図１６からわかるように、整数化法の違いによって、ＧＩＤアドレス即ちｓｔｅｐ１とｓｔｅｐ２の混合状態は若干異なる。
【００６２】
本実施の形態のアルゴリズムでは、グループの個々のＧＩＤ配置時に、種々のスタートオフセット等を試行しても全ＧＩＤが配置できない場合、このステップ混合法の差異を利用して、さらに配置を試行してみる機能がある。これは図１５の実数による混合パラメータ計算設定処理関数ｃｎｔ＿ｍｉｘ＿ｒｅａｌ内の変数、丸めバイアスｒｏｕｎｄ＿ｂｉａｓによって実現されている。
【００６３】
丸めバイアスｒｏｕｎｄ＿ｂｉａｓは、処理ｃｎｔ＿ｍｉｘ＿ｒｅａｌ＿ｓ２でｒｏｕｎｄ＿ｂｉａｓ＿ｉｎｔ／ｂｉａｓ＿ｐｉｔｃｈによって求められる。このｂｉａｓ＿ｐｉｔｃｈは１００で、ｒｏｕｎｄ＿ｂｉａｓ＿ｉｎｔは０から９９の間の整数をとるので、丸めバイアスｒｏｕｎｄ＿ｂｉａｓは０から０．９９までの０．０１刻みの数をとることができる。
【００６４】
ここでは、整数化の際に、元来の実数値に丸めバイアスｒｏｕｎｄ＿ｂｉａｓを加算してから切捨てることにより、整数化のバリエーションを出している。丸めバイアスｒｏｕｎｄ＿ｂｉａｓ＝０では切捨て、０．５では四捨五入となる。図１７に示すように、切上げは端点の扱いが異なるので丸めバイアス加算によっては表せないが、丸めバイアスｒｏｕｎｄ＿ｂｉａｓ＝０．９９とすることにより模擬している。
【００６５】
丸めバイアスは、ロムテーブルｏ＿ｃｎｔ＿ｒｏｕｎｄ＿ｓｅｑに記されているｒｏｕｎｄ＿ｂｉａｓ＿ｉｎｔの値に従って設定される。これは下記のようになっているが、実際には最初の五個程度しか使用しない。
【００６６】
｛０，９９，５０，２５，７５，１２，３７，６２，８７，６，１８，３１，４３，５６，６８，８１，９３，３，９，１５，２１，２８，３４，４０，４６，５３，５９，６５，７１，７８，８４，９０，９６，２，５，８，１１，１４，１７，２０，２３，２７，３０，３３，３６，３９，４２，４５，４８，５２，５５，５８，６１，６４，６７，７０，７３，７７，８０，８３，８６，８９，９２，９５，９８，１，４，７，１０，１３，１６，１９，２２，２６，２９，３２，３５，３８，４１，４４，４７，５１，５４，５７，６０，６３，６６，６９，７２，７６，７９，８２，８５，８８，９１，９４，９７，２４，４９，７４｝
【００６７】
ステップ混合のバリエーションを出すためにこのようなステップ混合機能がある。ステップ混合機能は、方式１）の方法でステップを初期配置する場合には非常に効果が大きいが、方式３）の方法で実数を用いて配置する際には、比較的効果が少ない。
【００６８】
次に行列座標について説明する。
いずれかの方法で帯域個数分のｓｔｅｐ１とｓｔｅｐ２を適当に混合したとすると、この混合結果を記憶しておく必要がある。混合結果を記憶するのは面倒なので、ステップ混合の基本ルールさえ覚えておけば、結果は記憶せずともすぐに再現できるように見えるが、それほど簡単にはいかない。一つの帯域のグループが一つだけならよいが、複数のグループが存在して群化して配置されるとき、グループ毎に配置開始位置が異なるが、ｓｔｅｐ１とｓｔｅｐ２の混合方法は同一の枠組みで行わないと、わずかなずれが積算して一部分にに配置済ＧＩＤ群の固まりが形成されてしまう現象が発生する。このような問題を解消するために、この実施の形態では、行列座標の概念を導入した。
【００６９】
行列座標とは、帯域毎に定義されるもので、ｓｔｅｐ１とｓｔｅｐ２の混合方法を記憶しておく目的のために用いられる。基準となる行列座標（ｍｔｘｉ，ｍｔｘｊ）＝（０，０）をもとにし、ｍｔｘｉ番目のステップのｍｔｘｊ番目のＧＩＤを（ｍｔｘｉ，ｍｔｘｊ）と表す。
【００７０】
帯域＝１６７の場合の行列座標の概念例を図１８に示す。図において、ＧＩＤＴＢＬはグループ識別子配置テーブルを表し、図１では横一行に描かれているＧＩＤＴＢＬをｓｔｅｐ１またはｓｔｅｐ２の長さに分断して、縦列に並べて描いてある。図のＯＲＧは、このときの原点を示し、行列座標の行方向の座標をｍｔｘｉ，行列座標の列方向の座標をｍｔｘｊで表す。ここで注意する点は、行列座標の原点ＯＲＧは、ＧＩＤアドレスが０のスロットとは限らないということである。
【００７１】
行列座標（ｍｔｘｉ，ｍｔｘｊ）が０から１１９７９のＧＩＤのどこに対応しているかの対応関係を示すのが図１９，図２０，図２１の表である。図１９は、行列座標の原点（ｍｔｘｉ，ｍｔｘｊ）＝（０，０）がＧＩＤ＝０に対応している場合を示す。これが行列座標の基準となるので、行列座標設定時にはまずこの場合を計算する。行列座標はＧＩＤアドレスと対応付けて記憶するのであるが、行列座標（ｍｔｘｉ，ｍｔｘｊ）からＧＩＤアドレスを求めるときには、（ｍｔｘｉ，ｍｔｘｊ）の全ての組み合わせについて記憶しておく必要はなく、ｍｔｘｊ＝０のときの各ｍｔｘｉのＧＩＤである（ｍｔｘｉ，０）さえ記憶しておけばよい。図１９においては、網掛の部分の値のみがポインタ＊（ａ＿ｃｎｔ＿ｓｔｅｐ＿ｃｕｍ＿ｔｂｌ＋ｍｔｘｉ）に記憶されている。
【００７２】
図１９は行列座標設定の基準であるが、実際には行列座標の原点（ｍｔｘｉ，ｍｔｘｊ）＝（０，０）はＧＩＤアドレス＝０に対応するのではなく、その時々に乱数で０から１１９７９のなかから選ばれるベースオフセットアドレスに対応するのである。図１９の例において、行列座標の原点をベースオフセットアドレス＝１１７２７とした場合の例を図２０に示す。図２０は、図１９の各座標の値にベースオフセット＝１１７２７を加算して求めたものである。アルゴリズム中では、図２２に示す関数ｃｎｔ＿ｍａｔｒｉｘ＿ｃｏｏｒｄｉｎａｔｅ＿ｓｅｔにより、図１９ではなく図２０のテーブルを用いている。
【００７３】
関数ｃｎｔ＿ｍａｔｒｉｘ＿ｃｏｏｒｄｉｎａｔｅ＿ｓｅｔは、図１０のｔｒｕｎｃ＿ｓ１＿ｓ４で用いられる。図１９は図２０を算出する過程で必要であるが、図２０を算出してしまえば記憶しておく必要はない。図２０も図１９と同様に、ｍｔｘｊ＝０のときの各ｍｔｘｉのＧＩＤである（ｍｔｘｉ，０）即ち網掛の部分の値のみがポインタ＊（ａ＿ｃｎｔ＿ｓｔｅｐ＿ａｄｒ＿ｔｂｌ＋ｍｔｘｉ）に記憶されている。
【００７４】
さて、行列座標（ｍｔｘｉ，ｍｔｘｊ）から対応するＧＩＤを求めるときには図２０を用いればよいことはわかった。反対に任意のＧＩＤから対応する行列座標（ｍｔｘｉ，ｍｔｘｊ）を求める場合には、図２０の＊（ａ＿ｃｎｔ＿ｓｔｅｐ＿ａｄｒ＿ｔｂｌ＋ｍｔｘｉ）を検索して差を求めれば求められるが、ＧＩＤから行列座標を求める対応表があれば便利である。これを図２１に示す。図２１において、ＧＩＤ＝０は（ｍｔｘｉ，ｍｔｘｊ）＝（３，３８）に対応し、（ｍｔｘｉ，ｍｔｘｊ）＝（０，０）はＧＩＤ＝１１７２７に対応している。図２１の行列座標（ｍｔｘｉ，ｍｔｘｊ）は、ａ＿ｃｎｔ＿ｇｉｄ＿ｔｂｌ［ｉ］．ｍｔｘｉとａ＿ｃｎｔ＿ｇｉｄ＿ｔｂｌ［ｉ］．ｍｔｘｊに収納されている。
【００７５】
これまでは、ある帯域の一個のグループを配置する場合のステップの混合方法について述べた。次に、同一帯域のグループを複数配置する場合の配置方法について述べる。同一帯域のグループが複数存在する場合は、これらを別個に配置するのではなく、まとめて順次配置する。
【００７６】
図２３に帯域１６７の一個のグループを配置する場合の理想位置の例を、図２４に二個のグループを配置する場合の例を示す。図２３では、前述のようにｓｔｅｐ１とｓｔｅｐ２を混合して配置する。このとき、行列座標の原点のＧＩＤアドレスは乱数選択したベースオフセットであるが、図２３では簡単のためにベースオフセット＝０としてある。
【００７７】
図２４では、グループ１とグループ２の２グループを配置するが、ここでグループ１とグループ２ができるだけ散らばるためには、図に示すように、グループ１のステップの中間付近にグループ２が配置されるようにしたほうがよい。さらに、グループ数が増えた場合には、ステップ内に均等分散されるように配置すると、衝突の可能性が小さくなる。同一帯域グループ群ではベースオフセットは共通にし、同一の行列座標に基づいて配置する。これは、行列座標を用いると、ｍｔｘｊを一定にしてｍｔｘｉだけ１ずつ増加させることによって実現できる。この様子を図２５に示す。ここで問題となることに、次の二点がある。
１）複数グループ対応のｍｔｘｊの選択
２）配置を開始するｍｔｘｉの選択
これらについて、以下に説明する。
【００７８】
次にサイズの概念について説明する。
複数グループ対応のｍｔｘｊは、基本的にはｓｔｅｐ１を均等配分して割り当てる。本実施の形態では、１１９８０個のＧＩＤを帯域個に分割した間隔のことをステップ、ステップを同一帯域グループ個数で分割した間隔のことをサイズと呼ぶ。ステップのとる値はｓｔｅｐ１またはｓｔｅｐ２＝ｓｔｅｐ１＋１であるのと同様に、サイズもｓｉｚｅ１またはｓｉｚｅ２＝ｓｉｚｅ１＋１をとる。
【００７９】
ステップとサイズは、分割母体を分割して整数化するという点では類似性があり、次のように比較できる。この類似性を利用して、本実施の形態では、共通のアルゴリズムとして、図１３の関数ｃｎｔ＿ｍｉｘ＿ｃｌｃ＿ｉｎｔおよび図１５の関数ｃｎｔ＿ｍｉｘ＿ｒｅａｌを用いて、ステップ情報をｃｎｔ＿ｓｅｔ＿ｓｔｅｐ＿ｉｎｆで、サイズ情報をｃｎｔ＿ｓｅｔ＿ｓｉｚｅ＿ｉｎｆで計算している。関数ｃｎｔ＿ｓｅｔ＿ｓｔｅｐ＿ｉｎｆの手順を図２６に、関数ｃｎｔ＿ｓｅｔ＿ｓｉｚｅ＿ｉｎｆの手順を図２７に示す。これらの関数は、図１０の処理ｔｒｕｎｃ＿ｓ１＿ｓ１で用いられる。
【００８０】
ステップ情報を＊（ａ＿ｃｎｔ＿ｓｔｅｐ＿ｃｕｍ＿ｔｂｌ＋ｉ）に設定したのと同様に、サイズ情報は＊（ａ＿ｃｎｔ＿ｓｉｚｅ＿ｃｕｍ＿ｔｂｌ＋ｉ）に保持される。図７のＴＥＳＴ２のように、帯域＝１６７のグループが８個ある場合の、サイズ情報保持テーブルの例を図２９に、同例の配置の様子を図３０に示す。
【００８１】
サイズ情報は、一ステップ内の配置を示すもので、全ステップ共通の行列座標ｍｔｘｊを表す。ここで、サイズ情報は小さいほうのステップｓｔｅｐ１（図３０の例では７１）に基づいているので、ステップがｓｔｅｐ２の場合の最後のＧＩＤ（図３０の例ではｉ＝１，２，１６６の場合のステップの右端のｍｔｘｊ＝７１）には、理想位置としてのグループ配置はなされないことになる。
【００８２】
次に同一帯域グループ開始ステップの均等分散について説明する。
図３０では、各グループに割り当てられたｍｔｘｊに対してｉ＝０，１，２，…，１６６の１６７個のグループ要素が配置されている。しかし、図３０で黒く示されている配置位置ＣＡＬＰは、そこに配置できたら望ましいという理想の位置にすぎない。理想位置ＣＡＬＰが既に配置済みの場合は、前後の空位置を探索して許容ＣＤＶの範囲内の空位置に配置しなくてはならない。
【００８３】
多数のグループのＧＩＤを割り当てる際の、第一番目の割り当てならば、理想位置が既に配置済みであることはないが、二番目以降の場合は、理想位置が既に配置済みである可能性が出てくる。この可能性を鑑みると、グループ配置を開始するステップ、即ち図３０のＧＩＤＴＢＬのなかで、どのｍｔｘｉの列から開始するかも意味を持つことがわかる。図３０でいえば、全てのグループに関してｍｔｘｉ＝０のステップからＧＩＤ配置を開始するのが一番単純である。配置し始めは既配置スロットが少なく理想位置への配置が可能であるが、配置が進みｍｔｘｉが増加するにつれ、既配置スロットが増えて理想位置への配置が困難となってくる。
【００８４】
全てのグループで同様のことが発生するので、ｍｔｘｉ＝１６６のステップに近付くと空スロットが少なくなって、場合によっては許容ＣＤＶ内では配置不可となる可能性も出てくる。ここでは、このような事態を避けるために、グループ毎に配置開始位置をずらして全ＧＩＤ中になるべく分散するようにしている。このずれを表すのがバイアス個数ｂｉａｓ＿ｎｕｍであり、次式で求められる。但し、端数は切捨てて整数値をとる。
バイアス個数ｂｉａｓ＿ｎｕｍ＝帯域／同一帯域グループ個数
図３０の例では、バイアス個数＝１６７／８＝２０である。故に、各グループの配置開始ステップはｉ＝０，２０，４０，６０，８０，１００，１２０，１４０となる。この様子を図３１に示す。
【００８５】
グループ配置の際の基準となる点をオフセットと呼ぶ。図３１に基づいて各オフセットについて説明する。まず、行列座標の原点ＯＲＧを設定するのがベースオフセットｂａｓｅ＿ｏｆｆｓｅｔであり、全ＧＩＤアドレス（０から１１９７９）の中から乱数で選ばれる。
【００８６】
また、各グループの配置開始位置がスタートオフセットｓｔａｒｔ＿ｏｆｆｓｅｔである。スタートオフセット設定のためには、まずベースオフセットを基準にして、ｍｔｘｉ＝０の第一ステップを同一帯域グループ個数で均等分配したサイズ毎に、スタートオフセット原点ｓｔａｒｔ＿ｏｆｆｓｅｔ＿ｏｒｇを設定する。各グループ毎のスタートオフセット原点に、バイアス個数ｂｉａｓ＿ｎｕｍだけステップｉを順次ずらして、スタートオフセットｓｔａｒｔ＿ｏｆｆｓｅｔを設定する。
【００８７】
次に、スタートオフセット設定関数ｃｎｔ＿ｓｅｔ＿ｓｔａｒｔ＿ｏｆｆｓｅｔについて述べる。
前に述べたように、配置理想位置を均等分散し行列座標の変換テーブルを図１９，図２０，図２１に記憶している。ＧＩＤ配置の際にはこれらを読み出して使用する。
【００８８】
スタートオフセット配置の際に用いるのはスタートオフセット設定関数ｃｎｔ＿ｓｅｔ＿ｓｔａｒｔ＿ｏｆｆｓｅｔである。図３２に、関数ｃｎｔ＿ｓｅｔ＿ｓｔａｒｔ＿ｏｆｆｓｅｔのフローチャートを示す。この関数は、図１１の処理ｔｒｕｎｃ＿ｓ２＿ｓ１のスタートオフセット設定で用いられる。ここでは、変数ｌｏｏｐ２が、当該群において何番めのグループを配置しているかを示すことがポイントである。
【００８９】
図３１のスタートオフセットｏｒｇのｋは、ベースオフセットに図２９のサイズ情報保持テーブルのｋ番めの値＊（ａ＿ｃｎｔ＿ｓｉｚｅ＿ｃｕｍ＿ｔｂｌ＋ｋ）を加算したものとなる。これに、図１９の＊（ａ＿ｃｎｔ＿ｓｔｅｐ＿ｃｕｍ＿ｔｂｌ）を用いて、バイアス個数ｂｉａｓ＿ｎｕｍ×ｌｏｏｐ２を加算したのがスタートオフセットｋとなる。これは、図２０の＊（ａ＿ｃｎｔ＿ｓｔｅｐ＿ａｄｒ＿ｔｂｌ）のｂｉａｓ＿ｎｕｍ×ｌｏｏｐ２番めの値と、図２９のサイズ情報保持テーブル＊（ａ＿ｃｎｔ＿ｓｉｚｅ＿ｃｕｍ＿ｔｂｌ）のｌｏｏｐ２番めの値を用いることによっても求められる。
【００９０】
次に、配置ＧＩＤ取得処理ｃｎｔ＿ｓｅｔ＿ｃｌｃ＿ｇｉｄについて述べる。
Ｌｏｏｐ３内の個別ＧＩＤ配置の際に均等分配情報を読み出すのが配置ＧＩＤ取得処理関数ｃｎｔ＿ｓｅｔ＿ｃｌｃ＿ｇｉｄである。スタートオフセットとｌｏｏｐ３（何番めの個別ＧＩＤを設定しているか）から、図３３に示すように理想配置位置を求める。この関数は、図１２の処理ｔｒｕｎｃ＿ｓ３＿ｓ１の理想位置取得で用いられる。
【００９１】
まず、図の処理ｃｎｔ＿ｓｅｔ＿ｃｌｃ＿ｇｉｄ＿ｓ１で、図２１のＧＩＤから行列座標を求めるテーブルａ＿ｃｎｔ＿ｇｉｄ＿ｔｂｌにより、スタートオフセットのｍｔｘｉ座標とｍｔｘｊ座標を求める。次に処理ｃｎｔ＿ｓｅｔ＿ｃｌｃ＿ｇｉｄ＿ｓ２で、このｍｔｘｉ座標にｌｏｏｐ３を加算して、現在配置しようとしているＧＩＤのｍｔｘｉ座標を求める。
【００９２】
次に、処理ｃｎｔ＿ｓｅｔ＿ｃｌｃ＿ｇｉｄ＿ｓ３で、現在配置しようとしているＧＩＤのｍｔｘｊ座標を、スタートオフセットのｍｔｘｊ座標と等しく設定する。更に処理ｃｎｔ＿ｓｅｔ＿ｃｌｃ＿ｇｉｄ＿ｓ４で、現在配置しようとしているＧＩＤのｍｔｘｉ座標とｍｔｘｊ座標が求められたので、図２０のステップ情報テーブルａ＿ｃｎｔ＿ｓｔｅｐ＿ａｄｒ＿ｔｂｌを用いて、当該スロットのＧＩＤアドレスを求める。
【００９３】
次に同一グループＧＩＤ隣接配置禁止機能について述べる。
本実施の形態におけるアルゴリズムでは、同一グループのＧＩＤを隣接して配置してはいけないという制約を設けている。帯域の大きなグループでは、許容ＣＤＶの範囲内でＧＩＤを配置した場合でも、互いに隣接して配置されるという現象が発生する。隣接配置はないほうが、グループ内ＧＩＤが分散していることになるので望ましい。
【００９４】
隣接配置禁止の判断は、ＧＩＤ配置可不可判断（隣接ＧＩＤ禁止）関数ｃｎｔ＿ｃｈｋ＿ｇｉｄ＿ａｖａｉｌａｂｌｅで行われている。図３４に、ｃｎｔ＿ｃｈｋ＿ｇｉｄ＿ａｖａｉｌａｂｌｅのフローチャートを示す。これは、図１２の処理ｔｒｕｎｃ＿ｓ３＿ｓ２あるいはｔｒｕｎｃ＿ｓ３＿ｓ４等の、ｌｏｏｐ３の中での個別ＧＩＤ配置可不可判断に用いられる。
【００９５】
以下に、理想位置のスロットにグループ要素が配置できない場合の処置について述べる。前節において、理想位置の均等配分のメカニズムについて述べた。しかし理想位置ＣＡＬＰはあくまでも「そこに配置できることが望ましい」という位置であり、既にそのスロットが配置済みであった場合には、別のスロットを探さなくてはならない。図３６は、理想位置とその周辺を表す図である。図３６のＧＩＤ配置テーブルＧＩＤＴＢＬは、図１のＧＩＤＴＢＬの一部分を示すものである。図において、理想位置ＣＡＬＰのスロットが既配置で新たにＧＩＤを配置できないとすると、その近傍の適当なスロットに配置する必要がある。
【００９６】
別の配置スロットの探索方法は、配置しようとするものの種類により異なる。また、仮に目的の理想位置がちょうど空いていたとしても、周辺のＧＩＤの配置状況を考慮して、その理想位置に配置せずに周囲に配置したほうがよい場合もある。これらの区別を以下に述べる。
【００９７】
図３５は、理想位置のスロットに配置できない場合の処置について、まとめたものである。
【００９８】
次に、ＣＤＶ＝７のときのパターン照合について説明する。
本実施の形態のアルゴリズムでは、許容ＣＤＶ値が７のときは、理想位置付近のパターン照合により最適配置位置を選択している。すなわち、図１２の処理ｔｒｕｎｃ＿ｓ３＿ｓ２からｔｒｕｎｃ＿ｓ３＿ｓ５の代わりに、許容ＣＤＶ値が７の場合には以下の手順でパターン照合を行う。
【００９９】
許容ＣＤＶ値が７ということは、理想位置のスロットを含めて周辺８個のスロットに配置できれば、許容されるという意味である。各ＧＩＤアドレスが空の場合を０，配置済の場合を１と表すと、許容ＣＤＶ値が７の範囲は、８ビットのビットパターンで表すことができる。
【０１００】
さらに、この範囲の前後の状況も考慮したほうが望ましいが、あまり広い範囲を考慮すると複雑になるので、本アルゴリズムでは、前後に一アドレスずつ加えて、１０ビットパターンの範囲を考慮している。理想位置周辺の１０個のＧＩＤアドレスの空具合を１０ビットのビットパターンで表すことにより、空具合に応じた最適配置位置を、１０ビットのビットパターン対応で選択しようというのが、このパターン照合の概要である。１０ビットの空具合は、全パターンを網羅しても１０２４パターンなので、手作業で最適配置位置を選択することができる。
【０１０１】
初期のアルゴリズムでは、理想位置が空なら無条件配置しており、また許容ＣＤＶ値が７の範囲の前後各１ビットも考慮してなかったので、パターンは７ビット１２８通りであった。しかし、理想位置に配置することにより配置済ＧＩＤが連続してしまう現象や、考慮している範囲の外側の配置済ＧＩＤ群を増大させてしまう不都合が発生したため、１０ビットパターン照合することになった。
【０１０２】
既配置パターンから最適配置位置を選択する方針は次の通りである。
１）同程度に適した空位置（ビット０）が複数あるときは、全てを配置候補とし、パターン照合時に乱数により候補位置の一つを選択する。
２）新規配置により１（配置済）連続が発生しない空位置（０）があれば、そこに配置する。即ち、３ビット以上の０（空）連続があるときは、両端の０を除いた０の位置に配置する。
３）新規配置により１（配置済）連続が発生しない空位置（０）がない場合は、１（配置済）の連続数が最小となる位置を選択する。
４）１０ビット範囲の外側の配置状況については悲観的な想定をして、配置位置を選択する。即ち、外側の配置状況によっては、１０ビット内部での１連続数より少ない１連続数が実現できるとしても、外側が別の状況なら、さらに長い１連続が発生してしまう可能性のあるような位置は選択しない。
【０１０３】
ロムテーブルｏ＿ｃｎｔ＿ｃｄｖ７＿ｐａｔとビットパターンの一部を図３７に示す。表の左半分がロムテーブルで、右半分が１０ビットの配置パターンである。ロムテーブルでは、横一行のデータが一組となって、右側の配置パターンの最適配置位置を表している。ロムテーブルの最左列のパターンコードは、配置ビットパターンを二進数列とみなして、これを十進数に換算した場合の数を示す。
【０１０４】
図３７の第１行目では、ビットパターンは（０，０，０，０，０，０，０，０，０，０）なので、パターンコードは０となっている。パターンコード２５６のパターンは（０，１，０，０，０，０，０，０，０，０）であり、パターンコード１０２３のパターンは（１，１，１，１，１，１，１，１，１，１）である。
【０１０５】
パターンコード作成の際の各ビットの重みが、図３７の右半分の配置パターン表の上部に示されている。この配置パターン表の上部には、各ビットのラベルが記されている。ビットパターンのビットは、右側から０，１，２，…と名付けられているわけではなく、真中の理想位置から左右交互に番号付けされている。これは、理想位置から出発して、理想に近い位置を順次探索していく場合の順番を示す。
【０１０６】
ロムテーブルには、現状のビットパターンに新規に１を配置する場合の最適位置を示すが、同様に適した位置が複数存在する場合には、全ての候補のラベルが列挙してある。候補の個数がロムテーブルの２列目に記されている。第１行目のパターンコード０では、候補ラベル０，１，２，３，４，５，６，７の８個の候補が同様に適していることが示されている。ロムテーブルで配置候補に挙げたラベルの位置は、配置パターンでは斜線表示してある。複数の配置位置候補がある場合は、実際の配置時に乱数によって一つが選択される。
【０１０７】
パターンコードが０で空ビットが多いときは、配置候補位置（斜線部分）が多数存在するが、パターンコード１，２，３，…と増加するにつれて、配置候補位置は少なくなってくる。パターンコード２５５のように、１の多いパターンでは、配置候補はラベル６の１ビットのみとなるが、パターンコード２５６のように、０の多いパターンでは、配置候補位置は６ビットもある。パターンコード１０２２や１０２３では全ビットが１なので、配置候補はゼロで配置不可となる。
【０１０８】
これらの機能に加えて、配置の初期には奇数アドレスにのみ配置する等の制御を付加したものが、ＣＤＶ許容範囲内パターン照合関数ｃｎｔ＿ｃｈｋ＿ｃｄｖ＿ｐａｔ＿ｖａｌｕｅで実現されている。配置アドレスについてさらに細かい制御を付加して、バリエーションをつけたものが、ｃｎｔ＿ｃｈｋ＿ｃｄｖ＿ｐａｔ＿Ｒ１，ｃｎｔ＿ｃｈｋ＿ｃｄｖ＿ｐａｔ＿Ｒ１３，ｃｎｔ＿ｃｈｋ＿ｃｄｖ＿ｐａｔ＿Ｒ１３５，ｃｎｔ＿ｃｈｋ＿ｃｄｖ＿ｐａｔ＿Ｒ１３５７である。
【０１０９】
関数ｃｎｔ＿ｃｈｋ＿ｃｄｖ＿ｐａｔ＿ｖａｌｕｅの手順を示すフローチャートを図３８に、関数ｃｎｔ＿ｃｈｋ＿ｃｄｖ＿ｐａｔ＿Ｒ１３５７の手順を示すフローチャートを図３９に示す。関数ｃｎｔ＿ｃｈｋ＿ｃｄｖ＿ｐａｔ＿Ｒ１からｃｎｔ＿ｃｈｋ＿ｃｄｖ＿ｐａｔ＿Ｒ１３５は、関数ｃｎｔ＿ｃｈｋ＿ｃｄｖ＿ｐａｔ＿Ｒ１３５７の部分集合になっているので、手順は図３９に含まれる。
【０１１０】
図３８のｃｎｔ＿ｃｈｋ＿ｃｄｖ＿ｐａｔ＿ｖａｌｕｅでは、ＣＤＶ≦７のときに、付与のＧＩＤの周辺１０スロットの配置状況を読み込み、１０ビットのパターンｉｎｄ＿ｃｄｖ７に表現する。このパターンを、あらかじめ最適位置を探索しておいたパターン表（ロムテーブルに保管）と照合して、最適位置に配置する。
【０１１１】
図３８の処理ｃｎｔ＿ｃｈｋ＿ｃｄｖ＿ｐａｔ＿ｖａｌｕｅ＿ｓ６とｃｎｔ＿ｃｈｋ＿ｃｄｖ＿ｐａｔ＿ｖａｌｕｅ＿ｓ７とｃｎｔ＿ｃｈｋ＿ｃｄｖ＿ｐａｔ＿ｖａｌｕｅ＿ｓ８において、配置アドレスの奇偶に依存して、ロムテーブルｏ＿ｃｎｔ＿ｃｄｖ７＿ｐａｔと、ｏ＿ｃｎｔ＿ｃｄｖ７＿ｐａｔ＿ｏと、ｏ＿ｃｎｔ＿ｃｄｖ７＿ｐａｔ＿ｅを使い分けているが、いずれも、図３７に示すような内容テーブルである。
【０１１２】
図３９の関数ｃｎｔ＿ｃｈｋ＿ｃｄｖ＿ｐａｔ＿Ｒ１からｃｎｔ＿ｃｈｋ＿ｃｄｖ＿ｐａｔ＿Ｒ１３５７では、設定帯域合計が小さいときには、奇数アドレスのＧＩＤにグループ要素を配置する。
【０１１３】
関数ｃｎｔ＿ｃｈｋ＿ｃｄｖ＿ｐａｔ＿Ｒ１では、ＧＩＤアドレスを８で割ったときの余り１の位置に配置する（図の処理ｃｎｔ＿ｃｈｋ＿ｃｄｖ＿ｐａｔ＿Ｒ１３５７＿ｓ１１からｃｎｔ＿ｃｈｋ＿ｃｄｖ＿ｐａｔ＿Ｒ１３５７＿ｅ１）。許容回数試行しても配置不可の時は、次の余り１あるいは３の位置に配置する関数に移る。
【０１１４】
関数ｃｎｔ＿ｃｈｋ＿ｃｄｖ＿ｐａｔ＿Ｒ１３では、ＧＩＤアドレスを８で割ったときの余りが１あるいは３の位置に配置する（図の処理ｃｎｔ＿ｃｈｋ＿ｃｄｖ＿ｐａｔ＿Ｒ１３５７＿ｓ３１からｃｎｔ＿ｃｈｋ＿ｃｄｖ＿ｐａｔ＿Ｒ１３５７＿ｅ３）。許容回数試行しても配置不可の時は、次の余り１または３または５の位置に配置する関数に移る。
【０１１５】
関数ｃｎｔ＿ｃｈｋ＿ｃｄｖ＿ｐａｔ＿Ｒ１３５では、ＧＩＤアドレスを８で割ったときの余りが１または３または５の位置に配置する（図の処理ｃｎｔ＿ｃｈｋ＿ｃｄｖ＿ｐａｔ＿Ｒ１３５７＿ｓ５１からｃｎｔ＿ｃｈｋ＿ｃｄｖ＿ｐａｔ＿Ｒ１３５７＿ｅ５）。許容回数試行しても配置不可の時は、次の余り１または３または５または７の位置に配置する関数に移る。
【０１１６】
関数ｃｎｔ＿ｃｈｋ＿ｃｄｖ＿ｐａｔ＿Ｒ１３５７では、ＧＩＤアドレスを８で割ったときの余りが１または３または５または７の位置に配置する（図の処理ｃｎｔ＿ｃｈｋ＿ｃｄｖ＿ｐａｔ＿Ｒ１３５７＿ｓ７１からｃｎｔ＿ｃｈｋ＿ｃｄｖ＿ｐａｔ＿Ｒ１３５７＿ｅ７）。許容回数試行しても配置不可の時は、奇数アドレス配置はあきらめる。
【０１１７】
理想スロットに配置できない場合の他の試行手順には、以下のものがある。なお、乱数に関しては、後で詳述する。
図１１のｔｒｕｎｃ＿ｓ２＿ｓ１のスタートオフセットの設定で理想スロットに配置できない場合は、図４０に示すＧＩＤ乱数検索処理（全ＧＩＤ対象）関数ｃｎｔ＿ｃｈｋ＿ｓｔａｒｔ＿ｒａｎｄ＿ａｌｌを用いる。この関数では、後述する（３）式に示すように、周期１６３８４の乱数を０から１１９７９の間の乱数に変換し、空ＧＩＤが見付かるまで最大１６３８４回試行する。空ＧＩＤスロットが一個でも存在すれば、必ず発見される。
【０１１８】
図１０のｓｔｕｎｃ＿ｓ１＿ｓ２のベースオフセットの設定で理想スロットに配置できない場合は、関数ＧＩＤ乱数検索処理（全ＧＩＤ対象）±ｄｅｌｔａ，ｃｎｔ＿ｃｈｋ＿ｓｔａｒｔ＿ｒａｎｄ＿ａｌｌ＿ｄｅｌｔａを用いる。この関数は、図４０に示すｃｎｔ＿ｃｈｋ＿ｓｔａｒｔ＿ｒａｎｄ＿ａｌｌ関数と同様に乱数で空ＧＩＤを探索するが、処理ｃｎｔ＿ｃｈｋ＿ｓｔａｒ＿ｒａｎｄ＿ａｌｌ＿ｓ４の判断で、当該ＧＩＤのみならず±ｄｅｌｔａの範囲で空のＧＩＤを探索する。
【０１１９】
図１２の処理ｔｒｕｎｃ＿ｓ３＿ｓ３において、許容ＣＤＶ値が７を超えた場合で、理想ＧＩＤスロットに配置できない場合には、図４１に示すＣＤＶ許容範囲内乱数ＧＩＤ検索処理ｃｎｔ＿ｃｈｋ＿ｃｄｖ＿ｒａｎｄを用いる。この関数では、ＣＤＶ許容範囲内のＧＩＤを乱数で検索する。
【０１２０】
図１２の処理ｔｒｕｎｃ＿ｓ３＿ｓ３からｔｒｕｎｃ＿ｓ３＿ｓ５を繰り返しても、許容ＣＤＶ値内でグループ要素が配置できないときは、処理ｔｒｕｎｃ＿ｓ３＿ｓ６からｔｒｕｎｃ＿ｓ３＿ｓ６１に進んで、配置済の当該グループのグループ要素をリセットし、処理ｔｒｕｎｃ＿ｓ３＿ｅ６から図１１のｔｒｕｎｃ＿ｓ２＿ｓｔ２に戻ってスタートオフセットを変更して、グループ要素の再設定を行う。
【０１２１】
ループ３からループ２に差戻してスタートオフセットを変更する試行を許容回数行っても、当該グルーブの全要素が設定できないときは、図１２の処理ｔｒｕｎｃ＿ｓ３＿ｓ７からｔｒｕｎｃ＿ｓ３＿ｓ７１に進んで、処理ｔｒｕｎｃ＿ｓ３＿ｅ７から図１０のｔｒｕｎｃ＿ｓ１＿ｓｔ２に戻り、丸めバイアスを変更してグループ要素の再設定を行う。丸めバイアスの変更については前述した。
【０１２２】
ループ３からループ１に差戻して丸めバイアスを変更する試行を許容回数行っても、当該グルーブの全要素が設定できないときは、図１２の処理ｔｒｕｎｃ＿ｓ３＿ｓ８からｔｒｕｎｃ＿ｓ３＿ｓ８１に進んで、許容ＣＤＶ値を変更して、処理ｔｒｕｎｃ＿ｓ３＿ｅ８から図１１のｔｒｕｎｃ＿ｓ２＿ｓｔ２に戻り、グループ要素の再設定を行う。可能な限り許容ＣＤＶ値を増加させずにグループ要素を配置するために、ｔｒｕｎｃ＿ｓ３＿ｓ６からｔｒｕｎｃ＿ｓ３＿ｓ７の試行を行うが、それでも配置できない場合は、ｔｒｕｎｃ＿ｓ３＿ｓ８１で許容ＣＤＶ値を増加するのである。許容ＣＤＶ値増加の方法については後述する。許容ＣＤＶ値の最大値は全スロット１１９７９であるが、これでも配置できない場合は、ｔｒｕｎｃ＿ｓ３＿ｅｄで配置不可として終了する。
【０１２３】
次に、本実施の形態におけるＣＤＶについて説明する。
本実施の形態のＣＩＤ配置アルゴリズムの目的は、グループの各要素を、全ＧＩＤスロット中に可能な限り均等に分配することである。しかし、通常は、全ＧＩＤスロットの個数はグループ要素の個数では割りきれない。一方、ＧＩＤアドレスは整数値となっている。故に、理想配置スロットのＧＩＤアドレスは、厳密な理想の計算位置（実数）を整数化して求める必要があり、ここで若干のずれが生じる。このずれは、ＧＩＤ配置問題の構造上、必ず発生するものであるが、発生の仕組みと範囲を把握して、所望の範囲内に収める必要がある。このずれを構造的ＣＤＶと呼ぶ。構造的ＣＤＶについては後述する。
【０１２４】
また、グループ要素配置時に、理想配置位置のＧＩＤスロットが必ず空いているとは限らず、この場合には理想配置位置の周辺に配置することになる。この際に理想配置位置の周辺として許容される範囲が許容ＣＤＶ値である。許容ＣＤＶ値についても後述する。
【０１２５】
次にＣＤＶの仕組みと構造的ＣＤＶについて説明する。
まず、構造的ＣＤＶについて説明する。
ここでは、ＣＤＶ算出のために、借り（ｄｅｂｔ）という概念を導入する。また、通常のＣＤＶ計算方法と区別するために、ここではＣＤＶのことを狭まりと呼ぶ。狭まりとは、実際の配置位置が理想位置より先行した場合の、理想位置と実配置位置の差を指す。実配置位置が理想位置より遅延した場合は狭まりはゼロとなり、ペナルティがないように見えるが、新たな借りを発生してしまう。ここで、実配置位置とは、理想位置に配置できない場合に実際に配置された代替位置である。また、先行するとは、ＧＩＤテーブルにおいて左側（スロットアドレスの小さい側）に配置されることであり、遅延するとは、ＧＩＤテーブルにおいて右側（スロットアドレスの大きい側）に配置されることである。
【０１２６】
即ち、その次以降の配置の理想位置は借りの分だけ後方に移動し、計算上の理想位置に実配置されたのでは狭まりが発生することになってしまう。故に、実際の理想位置は、計算理想位置にこれまでの借りの総和を加算（遅延）した位置となる。ここでは、この理想位置と実位置の関係を指標（ｉｎｄｅｘ）と呼ぶことする。指標の正負により、狭まりまたは新規借りが発生することになる。
【０１２７】
図４２は、本実施の形態におけるＣＤＶ算出アルゴリズムｃｎｔ＿ｃｌｃ＿ｃｄｖ＿ｓｈｏｗのフローチャートを示す。この関数は、ＧＩＤ配置を行ったときに、ＣＤＶを算出するために、図１２の処理ｔｒｕｎｃ＿ｓ３＿ｓ２１およびｔｒｕｎｃ＿ｓ３＿ｓ４１，図３８の処理ｃｎｔ＿ｃｈｋ＿ｃｄｖ＿ｐａｔ＿ｖａｌｕｅ＿ｓ１１，図３９の処理ｃｎｔ＿ｃｈｋ＿ｃｄｖ＿ｐａｔ＿Ｒ１３４７＿ｓ１２，ｃｎｔ＿ｃｈｋ＿ｃｄｖ＿ｐａｔ＿Ｒ１３４７＿ｓ３２，ｃｎｔ＿ｃｈｋ＿ｃｄｖ＿ｐａｔ＿Ｒ１３４７＿ｓ５２，ｃｎｔ＿ｃｈｋ＿ｃｄｖ＿ｐａｔ＿Ｒ１３４７＿ｓ７２で用いられる。
【０１２８】
図４２において、処理ｃｎｔ＿ｃｌｃ＿ｃｄｖ＿ｓｈｏｗ＿ｓ１では、
指標＝（計算理想＋借り）−実位置＝借り＋（計算理想−実位置）
により指標を計算する。その結果を処理ｃｎｔ＿ｃｌｃ＿ｃｄｖ＿ｓｈｏｗ＿ｓ２で判定し、指標がゼロまたは正の場合は、実位置より理想位置が遅いので、処理ｃｎｔ＿ｃｌｃ＿ｃｄｖ＿ｓｈｏｗ＿ｓ３に進み、狭まり＝指標とする。このときは、新規借りは発生せず、処理ｃｎｔ＿ｃｌｃ＿ｃｄｖ＿ｓｈｏｗ＿ｓ５で計算し、借り積算値、即ちΣ借りは不変となる。指標が負の場合は、実位置より理想位置が早いので、処理ｃｎｔ＿ｃｌｃ＿ｃｄｖ＿ｓｈｏｗ＿ｓ４に進み、狭まり＝０とする。このときは指標の絶対値が新規借りとなり、この値を処理ｃｎｔ＿ｃｌｃ＿ｃｄｖ＿ｓｈｏｗ＿ｓ５でΣ借りに加算する。
【０１２９】
次に、ＣＤＶ計算の例を示す図４３により、ＣＤＶ計算の仕組みを説明する。図において、ＢＡＮＤＡＸは帯域軸を示す。これは図１のグループ識別子配置テーブルＧＩＤＴＢＬに対応する。図１のグループ識別子配置テーブルＧＩＤＴＢＬは、スロットＳＬＯＴを単位とするディジタル的なものであるのに対し、図４３の帯域軸ＢＡＮＤＡＸはアナログ的なものである。帯域軸の左側から、順次ＧＩＤ配置を行う。その他、ＣＡＬＰは計算理想位置、ＲＥＡＬＰは実位置、ＳＦＴＤＰはシフトされた理想位置、ＮＥＷＤＢＴは新たに発生した新規借り、ＳＵＭＤＢＴはΣ借り、即ちこれまでの借りの積算値、ＣＤＶは狭まりである。各々の記号に付加している数字は、時間を追って０，１，２，３，…の順に設定される各値の順番を示している。
【０１３０】
図４３において、計算理想位置ＣＡＬＰ０，ＣＡＬＰ１，ＣＡＬＰ２，ＣＡＬＰ３は等間隔に配置されている。実位置ＲＥＡＬＰ１は、ＣＡＬＰ１より早いため、ここでは狭まりが発生する。即ち、
指標１＝計算理想ＣＡＬＰ１−実位置ＲＥＡＬＰ１≧０
となるので、ＣＤＶ１＝指標１となる。この時点では、まだ借りは発生していない。
【０１３１】
実位置ＲＥＡＬＰ２は、計算理想位置ＣＡＬＰ２より遅いため、ここでは新規借りが発生する。即ち、
指標２＝計算理想ＣＡＬＰ２−実位置ＲＥＡＬＰ２＜０
となるので、新規借りＮＥＷＤＢＴ２＝−１×指標（正値）となる。
ここで借りができてしまったので、理想位置３は、計算理想位置ＣＡＬＰ３にΣ借り（この時点ではまだ新規借りＮＥＷＤＢＴ２のみ）を加算したシフトされた理想位置ＳＦＴＤＰ３となる。
【０１３２】
実位置ＲＥＡＬＰ３ａの場合は、
指標３ａ＝シフトされた理想位置ＳＦＴＤＰ３−実位置ＲＥＡＬＰ３ａ≧０
となり、ＣＤＶ３ａ＝指標３ａとなる。実位置３ｂの場合は、
指標３ｂ＝シフトされた理想位置ＳＦＴＤＰ３−実位置ＲＥＡＬＰ３ｂ＜０
となり、新規借りＮＥＷＤＢＴ３ｂ＝−１×指標３ｂとなる。
これらの機能は、ＣＤＶ計算処理関数ｃｎｔ＿ｃｌｃ＿ｃｄｖ＿ｓｈｏｗで実現されている。
【０１３３】
次に許容ＣＤＶ値について説明する。
許容ＣＤＶ値は初期値が７で、その後はＥ＿ＣＮＴ＿ＣＤＶ＿ＣＨＫｉの区切り目毎に、Ｅ＿ＣＮＴ＿ＣＤＶ＿ＡＤＤｉの値が、図４４に示す表のように加算される。これは許容ＣＤＶ値設定関数ｃｎｔ＿ｓｅｔ＿ａｌｌｏｗ＿ｃｄｖによって行われる。図４５は、許容ＣＤＶ値設定関数ｃｎｔ＿ｓｅｔ＿ａｌｌｏｗ＿ｃｄｖの手順を示すフローチャートである。この関数は、図１２の処理ｔｒｕｎｃ＿ｓ３＿ｓ８１で用いられる。
【０１３４】
但し、上記の許容ＣＤＶ値は、整数化された理想ＧＩＤが既に配置済みの場合に、前後にどこまでずらしても許容されるか、という許容値として用いられるのであり、整数化されたＧＩＤが実数計算のＧＩＤからずれる範囲の許容値として使用するためにあるのではない。整数化されたＧＩＤが実数計算のＧＩＤからずれる範囲は、１未満となるように制御する必要がある。測定機器を接続して観測する際には、実数計算の等間隔に基く位置を基準とするため、ＣＤＶが基準値を超えるエラーとして検出されてしまう可能性があるからである。
【０１３５】
以下に、本実施の形態における、乱数による配置位置のランダム選択について説明する。
まず、本実施の形態における乱数列の生成方法について述べる。
本実施の形態における乱数発生アルゴリズムでは、乱数発生の周期毎に、１５種類の乱数系列が準備されている。これを図４６に示す。乱数系列により発生させる乱数の周期は、２のべき乗の数２p とし、０から（２p −１）の範囲の乱数Ｒａを発生させる。一般に０から（Ｇｍａｘ−１）までの乱数Ｒｇを求める場合は、次式により変換する。
Ｒｇ＝Ｒａ×Ｇｍａｘ／２p 
【０１３６】
本実施の形態における乱数発生アルゴリズムでは、発生を要する乱数の最大周期が、ＧＩＤ配置テーブルの全スロット数１１９８０であり、
８１９２＝２13＜１１９８０＜２14＝１６３８４
となるので、指定できる周期は２14までとしてある。しかし、同様のアルゴリズムで、これを超える周期の乱数を発生することができる。
【０１３７】
また、図４６の周期１の関数は、常に０を発生するだけで、乱数としての使途はないが、エラー時等に全体としての整合性をとるために設けてある。
本実施の形態における乱数発生アルゴリズムでは、引数としてｐ即ち周期ｃｙｃｌｅの基底２の対数ｃｙｃｌｅ＿ｌｏｇ２を与え、呼び出すたびに乱数列を乱数テーブルの所定変数を計算して書換える関数ｃｎｔ＿ｒａｎｄが設けられている。図４７は、ｃｎｔ＿ｒａｎｄを示すフローチャートである。
【０１３８】
この関数は、図１０の処理ｔｒｕｎｃ＿ｓ１＿ｓ２のベースオフセット設定、図１１の処理ｔｒｕｎｃ＿ｓ２＿ｓ１のスタートオフセット設定、図１２の処理ｔｒｕｎｃ＿ｓ３＿ｓ３のランダムスロット検索、図３８の処理ｃｎｔ＿ｃｈｋ＿ｃｄｖ＿ｐａｔ＿ｖａｌｕｅ＿ｓ１０の配置候補位置選択等、乱数を使用する箇所で多数用いられる。
【０１３９】
また、乱数テーブルの初期化のために、引数としてｐ即ちｃｙｃｌｅ＿ｌｏｇ２および初期値ｓｅｅｄを与え、所定変数をｓｅｅｄに初期化できるようにしてある関数ｃｎｔ＿ｓｒａｎｃが設けられている。図４８は、ｃｎｔ＿ｓｒａｎｄを示すフローチャートである。この関数は、図９の処理ｔｒｕｎｃ＿ｓ０＿ｓ２で用いられる。
【０１４０】
図４７の関数ｃｎｔ＿ｒａｎｄは、呼ばれるたびに、周期ｃｙｃｌｅの乱数値を更新し、新しい値を返す。処理ｃｎｔ＿ｒａｎｄ＿ｓ１の更新式および処理ｃｎｔ＿ｓｒａｎｄ＿ｓ１の初期化式は次の（２）式に基く。
0003691297.tif 000002
この式の意味は、初期値ｘ0 ＝ｓｅｅｄから開始して、順次１１０３５１５２４５ｘn ＋１２３４５を２（cycle_log2)）で割った余りをｘn+1 とするということである。
【０１４１】
次に、上記（２）式の根拠についてに説明する。
例えば、脇本和昌、“乱数の知識”、森北出版  初等情報処理講座５，１９８１，ｐｐ．３２に記されているように、計算機による一般的な一様擬似乱数の生成法として、混合型合同法（ｍｉｘｅｄ  ｃｏｎｇｒｕｅｎｃｅ  ｍｅｔｈｏｄ）がある。これは次式に従って乱数列を生成する方法である。
ｘn+1 ＝ａｘn ＋ｃ（ｍｏｄｕｌｏ２p ）
ｘ0 ＝ｓｅｅｄ
この式の意味は、初期値ｘ0 ＝ｓｅｅｄから開始して、順次ａｘn ＋ｃを２p で割った余りをｘn+1 とするということである。
【０１４２】
ここで、上式によって生成される乱数列ｘ0 ，ｘ1 ，ｘ2 ，…の最大周期は、
ａ＝１（ｍｏｄｕｌｏ４）      …４で割ったとき１余る数という意味
ｃ＝１（ｍｏｄｕｌｏ２）      …２で割ったとき１余る数という意味
のとき、２p となる。本実施の形態における乱数発生アルゴリズムでは、この定数の値に、Ｂ．Ｗ．Ｋｅｒｎｉｇｈａｎ  ａｎｄ  Ｄ．Ｍ．Ｒｉｔｃｈｉｅ，“Ｔｈｅ  Ｃ  ｐｒｏｇｒａｍｍｉｎｇ  ｌａｎｇｕａｇｅ  Ｓｅｃｏｎｄ  ｅｄｉｔｉｏｎ”，Ｐｒｅｎｔｉｃｅ  Ｈａｌｌ，１９８８，ｐｐ．４６の乱数と同じ下記の値を用いているが、上式を満たす他の値でもよい。
ａ＝１１０３５１５２４５
ｃ＝１２３４５
【０１４３】
この実施の形態における乱数発生アルゴリズム自体は、前述の文献等で従来から知られている混合型合同法に基くものであるが、ＣＩＤ配置問題を解くにあたり、乱数発生周期の非常に長いプログラム言語の組込み関数ではなく、混合型合同法を用いて、乱数発生周期を目的に応じて制御できるようにした乱数関数を作成した点に特徴がある。
本実施の形態の乱数アルゴリズムと、プログラム言語の組込み関数の乱数関数との比較を、以下に述べる。
【０１４４】
本実施の形態の乱数アルゴリズムによれば、周期２p の乱数を２p 回発生させれば、０から（２p −１）の数がちょうど一回ずつ発生することが確認済みである。周期内での数列発生の順番はｓｅｅｄによって決まるので、２周期分の乱数を発生させれば、１周期目と２周期目との数列の順番は等しくなる。プログラム言語Ｃの標準ライブラリにも乱数を求める関数ｒａｎｄは存在するが、Ｃのｒａｎｄ関数は、乱数発生の周期が長くなるように作成されており、乱数発生の細かさも指定できないので、０から（２p −１）の間の数の乱数を２p 回発生させても、一回も発生しない数や複数回発生する数が多数存在する。これは本実施の形態の目的にそぐわないので、乱数関数を手作りしてある。
【０１４５】
図４９に本実施の形態の乱数と、シミュレーションを行ったＣ言語ソフトウェアであるマイクロソフト社のＶｉｓｕａｌ  Ｃ＋＋の組込み乱数の比較を示す。図４９の実線は次のようにして求めた。まず、本実施の形態の乱数でｓｅｅｄ＝１、周期２14として０から１６３８３の間の乱数Ｒａを発生させ、これを次の（３）式により０から１１９７９の間の乱数Ｒ１に変換する。
Ｒ１＝Ｒａ×１１９８０／１６３６４                        （３）
【０１４６】
この試行を１１９８０回繰り返した場合、０から１１９７９の間の数は一回発生する、二回発生する、一回も発生しない、のいずれかとなる。各々の回数が図４９の実線で示されている。ちょうど一回発生する数が７１８８個、ちょうど二回あるいはゼロ回発生する数の個数は等しく、２３９６個となっている。図には示されていないが、同様の試行を１６３８４繰り返すと、Ｒａは０から１６３８３の間の数がちょうど一回ずつ発生されるので、Ｒ１の０から１１９７９の間の数は一回発生が７５８０個、二回発生が４４００個となり、一回も発生しない数はゼロとなる。
【０１４７】
図４９の破線はマイクロソフト社のＶｉｓｕａｌ  Ｃ＋＋の組込み乱数ｒａｎｄを用いて、０から１１９７９の間の乱数を求める試行を１１９８０回繰り返した場合の、０から１１９７９の間の数の発生頻度である。変換式は次の通り。
Ｒ３＝Ｒｃ×１１９８０／（ＲＡＮＤ＿ＭＡＸ＋１）
但し、シミュレーションを行ったＣ言語ソフトウェアであるマイクロソフト社のＶｉｓｕａｌ  Ｃ＋＋では、ＲＡＮＤ＿ＭＡＸ＝３２７６７＝２15−１である。一回も発生しない数が４４４９個、ちょうど一回発生する数が４３６１個、二回発生する数が２１６８個、三回発生する数が７７３個、四回発生する数が１８２個、五回発生する数が４６個、六回発生する数が１個となっている。Ｃの組込み乱数は、本実施の形態の乱数に比べると、乱数発生の頻度が一様でなく、一定間隔内の数を発生させる目的には適さないことがわかる。
【０１４８】
図４９の実線データで一回発生の数が７１８８個となっている。乱数のシードを変えた場合に、この値がどのように変化するかを示すのが図５０である。本アルゴリズムにおいて、シードを０から１１９７９間で変化させ、それぞれの場合に周期１６３８４の乱数を１１９８０回発生させ、上記（３）式で０から１１９７９の間の乱数に変換した場合に、ちょうど一回発生する数の個数を横軸にし、発生頻度を縦軸にとったものである。シードをいくつにとっても、一回発生の数の個数は７１２０から７３２０の間におさまることがわかる。
【０１４９】
乱数に関係した関数には、以下のものがある。
図５１は、基底２の対数を計算する関数ｃｎｔ＿ｌｏｇ２を示すフローチャートである。この関数は、図４１の処理ｃｎｔ＿ｃｈｋ＿ｃｄｖ＿ｒａｎｄ＿ｓ１で用いられる。基底２の対数を計算する手順について、図５１に基き説明する。関数ｃｎｔ＿ｌｏｇ２が引数として変数ｙとともに呼ばれると、ｃｎｔ＿ｌｏｇ２＿ｓ１において、引数ｙに対して２x ≦ｙ＜２(x+1) なるｘを求め、ｃｎｔ＿ｌｏｇ２＿ｅｄで、求めたｘを返す。付与のｙの範囲内の値を乱数で求める場合には、その周期の２の対数（ｌｏｇ２）を端数切り捨てで計算する。ＣＤＶ許容範囲内乱数ＧＩＤ検索処理関数ｃｎｔ＿ｃｈｋ＿ｃｄｖ＿ｒａｎｄ内で用いる。
【０１５０】
その他、図４１のＣＤＶ許容範囲内乱数ＧＩＤ検索処理ｃｎｔ＿ｃｈｋ＿ｃｄｖ＿ｒａｎｄ，図４０のＧＩＤ乱数検索処理（全ＧＩＤ対象）関数ｃｎｔ＿ｃｈｋ＿ｓｔａｒｔ＿ｒａｎｄ＿ａｌｌ，ならびにｃｎｔ＿ｃｈｋ＿ｓｔａｒｔ＿ｒａｎｄ＿ａｌｌ＿ｄｅｌｔａが乱数を用いている。これらについては前述した。
【０１５１】
ところで、上記説明では、この発明を、ＡＴＭのＧＦＲにおけるＧＩＤ配置問題解決に利用する場合について述べた。しかし、図１あるいは図２に示すＧＩＤテーブルＧＩＤＴＢＬと同様に、アドレスＡＤＲを有するスロットＳＬＯＴに、図３に示す属性をもつグループ、すなわち、要素数がＧＰＣＲで、グループ識別子がＧＩＤで、理想位置からのずれの許容度が単数または複数種類のグループ要素を、均等に分散させるという目的の他の問題にも利用できることはいうまでもない。
【０１５２】
以上のように、この実施の形態１によれば、配置処理時間が短く、理想配置位置に配置できない場合には適切な代替位置を選択し、全体的に均等に分散配置を行うことができるという効果が得られる。
【０１５３】
実施の形態２．
実施の形態２から４は、実施の形態１の図１５に示す関数ｃｎｔ＿ｍｉｘ＿ｒｅａｌの改良に関するものである。実施の形態１の関数ｃｎｔ＿ｍｉｘ＿ｒｅａｌは、割算のもとになる全体数ｗｈｏｌｅ＿ｉｎｔのスロットに、分割数ｄｉｖｉｄｅｒ＿ｉｎｔ個の要素をできるだけ均等配置する処理を実数の世界で行い、整数化した値を配置テーブルに書き込んで返却する関数であり、外部から入出力は整数で、実数計算はこの関数のなかだけで閉じるようになっているものであった。
【０１５４】
実施の形態１の図１５に示す関数ｃｎｔ＿ｍｉｘ＿ｒｅａｌでは、処理ｃｎｔ＿ｍｉｘ＿ｒｅａｌ＿ｓ１で整数変数ｗｈｏｌｅ＿ｉｎｔとｄｉｖｉｄｅｒ＿ｉｎｔを単精度の浮動小数点変数ｗｈｏｌｅとｄｉｖｉｄｅｒに変換し、処理ｃｎｔ＿ｍｉｘ＿ｒｅａｌ＿ｓ４で、上記（１）式の値を計算していた。この実施の形態では、（１）式に対応する配分位置計算式として、次の（４）式を用いる。
ａｎｓｗｅｒ＝ｗｈｐｌｅ＊ｉ／ｄｉｖｉｄｅｒ              （４）
但し、各パラメータの値は図５２の通りとする。
【０１５５】
図５３と図５４にこの実施の形態におけるａｎｓｗｅｒの計算法を示す。これらの図の処理ｃｎｔ＿ｍｉｘ＿ｒｅａｌ＿ｓ１からｃｎｔ＿ｍｉｘ＿ｒｅａｌ＿ｓ４は、図１５の同処理に対応する。図５３と図５４では、図１５内の他の処理は省略されている。図５３と図５４示すａｎｓｗｅｒ計算手順では、処理ｃｎｔ＿ｍｉｘ＿ｒｅａｌ＿ｓ１で、整数変数ｗｈｏｌｅ＿ｉｎｔとｄｉｖｉｄｅｒ＿ｉｎｔを倍精度浮動小数点変数ｗｈｏｌｅとｄｉｖｉｄｅｒに変換している。
【０１５６】
（４）式を用いてｉ＝１，２，…，ｄｉｖｉｄｅｒにつき順次ａｎｓｗｅｒを計算する方法の一つは、各ｉにつき下式によって、まずｗｈｏｌｅとｉの掛算をしてからｄｉｖｉｄｅｒによる割算をする方法である。
ａｎｓｗｅｒ＝（ｗｈｏｌｅ＊ｉ）／ｄｉｖｉｄｅｒ          （５）
【０１５７】
これは図５３の処理ｃｎｔ＿ｍｉｘ＿ｒｅａｌ＿ｓ４に示されている。ここで、ｗｈｏｌｅとｉが図５２に示す値をとると、その積は最大となる。ところで、ＩＥＥＥ標準に準拠した通常の浮動小数点表示では、十進表示の有効桁数はｆｌｏａｔで６桁、ｄｏｕｂｌｅで１５桁となっている。故に（５）式の計算は、ｆｌｏａｔでは有効桁数を超えて桁落ちが発生してしまい、有効な値を得ることができない。一方、図５３に示すようにｄｏｕｂｌｅを用いると、桁落ちが発生せず有効な値を得ることができる。
【０１５８】
（４）式の計算のもう一つの方法は、先にｗｈｏｌｅのｄｉｖｉｄｅｒによる割算をしてから、順次各ｉにつき掛算をする方法である。
ａｎｓｗｅｒ＝（ｗｈｏｌｅ／ｄｉｖｉｄｅｒ）＊ｉ          （６）
この方法ならば、図５４のｃｎｔ＿ｍｉｘ＿ｒｅａｌ＿ｓ４＿１で先に一回割算をしておけば、ｉを変化させた各ループではｃｎｔ＿ｍｉｘ＿ｒｅａｌ＿ｓ４＿２のように掛算だけをすれば良く、計算速度が速くなる。また、先に割算をして小さな数にしておくので、桁あふれも発生しない。しかしｆｌｏａｔでは、この場合も有効桁数不足で有効な値を得ることができない。
【０１５９】
例として、ｄｉｖｉｄｅｒ＝３８０，ｉ＝１９の場合をとると、
0003691297.tif 000003
となるのであるが、ここでｆｌｏａｔ変数としてのａｎｓｗｅｒの中身は十進表現で、
＋５．９８９９９９９８０９２６５１３６７ｅ＋０００２
となっている。これを整数化すると５９８となり、目的の５９９は得られないのである。この場合も、図５４に示すようにｄｏｕｂｌｅを用いると、有効な値を得ることができる。
【０１６０】
以上のように、この実施の形態２によれば、実数間隔算出処理において、倍精度変数ｄｏｕｂｌｅを用いることにより、桁落ちが発生せず有効な値を得ることができるという効果が得られる。
【０１６１】
実施の形態３．
実施の形態３は、実施の形態１の図１５に示す関数ｃｎｔ＿ｍｉｘ＿ｒｅａｌの改良に関するものである。
実施の形態１の図１５に示す関数ｃｎｔ＿ｍｉｘ＿ｒｅａｌでは、処理ｃｎｔ＿ｍｉｘ＿ｒｅａｌ＿ｓ１で整数変数ｗｈｏｌｅ＿ｉｎｔとｄｉｖｉｄｅｒ＿ｉｎｔを浮動小数点変数ｗｈｏｌｅとｄｉｖｉｄｅｒに変換し、処理ｃｎｔ＿ｍｉｘ＿ｒｅａｌ＿ｓ４で、（１）式の値を計算していた。この実施の形態では、実施の形態１の（１）に対応する配分位置計算式として、実施の形態２の（４）を用い、各パラメータの値は図５２の通りとする。この実施の形態では、（４）式の計算に固定小数点変数を用いる。
【０１６２】
この実施の形態による配置位置計算手順を示すに先立ち、一般的な固定小数点表示で計算をする手順を、図５５を用いて説明する。ここでは、通常表示の元の数を整数とするので小数点が最下位ビットの右側においてあるが、元の数が小数ならば、対応する位置に配置すれば良いだけである。手順は、まず通常表示の整数を所望のビット数シフトして固定小数点表示に変換し、その上で必要な計算をして、その結果を逆にシフトして通常表示の数に戻す。シフトするビット数ＳＨＩＦＴは、必要な精度によって決まる。固定小数点表示の変数は、シフトしてもあふれないだけのビット長でなくてはならない。
【０１６３】
図５６にこの実施の形態における第一のａｎｓｗｅｒの計算法を示す。これらの図の処理ｃｎｔ＿ｍｉｘ＿ｒｅａｌ＿ｓ１からｃｎｔ＿ｍｉｘ＿ｒｅａｌ＿ｓ４は、図１５の同処理に対応する。図５６では、図１５内の他の処理は省略されている。
【０１６４】
（４）式の計算を、まずｗｈｏｌｅとｉの掛算をしてからｄｉｖｉｄｅｒによる割算をする方式は、次の（７）式および図５６で示される。
ｗｈｏｌｅ＝ｗｈｏｌｅ＜＜ＳＨＩＦＴ
ｄｉｖｉｄｅｒ＝ｄｉｖｉｄｅｒ＜＜ＳＨＩＦＴ
ａｎｓｗｅｒ＝（ｗｈｏｌｅ＊ｉ）／ｄｉｖｉｄｅｒ          （７）
但し、ｗｈｏｌｅ＜＜ＳＨＩＦＴは、整数ｗｈｏｌｅをＳＨＩＦＴビット左シフトすることを示す。
【０１６５】
これは図５６の処理ｃｎｔ＿ｍｉｘ＿ｒｅａｌ＿ｓ１で示されている。最初に処理ｃｎｔ＿ｍｉｘ＿ｒｅａｌ＿ｓ１の左シフトによってｗｈｏｌｅとｉｎｔと固定小数点表示を求めておき、ｉ＝１，２，…，ｄｉｖｉｄｅｒにつき順次ａｎｓｗｅｒを計算する。この方式では、（７）式の分子と分母で左シフトが相殺されるので、右シフトによる戻しシフトは必要無い。
【０１６６】
この際の必要ビット数を示したのが図５７である。ここでｗｈｏｌｅとｉは図５２の範囲の値をとるので、必要ビット数は、それぞれ１４ビット、１３ビットとなる。また、図５２の範囲の値をとるｄｉｖｉｄｅｒによる割算を行って有効な結果を得るためには、シフトビットは、１３ビットは必要となる。これらを合計すると４０ビットとなる。
【０１６７】
シミュレーションに用いたＭｉｃｒｏｓｏｆｔ  Ｖｉｓｕａｌ  Ｃ＋＋では、最大ビット数の整数は３２ビットの符号なし整数（ｕｎｓｉｇｎｅｄ  ｌｏｎｇ，最大値４２９４９６７２９５＝２32−１）なので、図５７に示す４０ビット表示によるシミュレーションを全面的に行うことはできない。
0003691297.tif 000004
【０１６８】
しかし、上式に示すように、ｉが４３を超えない時には、固定小数点表示変数が３２ビットで足りる。そこでｄｉｖｉｅｒが２≦ｄｉｖｉｄｅｒ≦４３の範囲で実験した結果、誤差の無い有効な結果を得ることができた。故に、固定小数点表示変数として４０ビット以上の整数を準備できれば、この方式で有効な結果を得ることができる。
【０１６９】
図５８にこの実施の形態における第二のａｎｓｗｅｒの計算法を示す。これは上記の第一の方式と対比するために、説明するもので、第一の計算法より性能が劣っている。
【０１７０】
（４）式の計算を、まずｗｈｏｌｅのｄｉｖｉｄｅｒによる割算をしてから、順次各ｉにつき掛算をする方式は、次の（９）式および図５８で示される。
ｗｈｏｌｅ＝ｗｈｏｌｅ＜＜ＳＨＩＦＴ
ｗｈｏｌｅ＿ｄｉｖｉｄｅ＝ｗｈｏｌｅ／ｄｉｖｉｄｅｒ
ａｎｓｗｅｒ＝ｗｈｏｌｅ＿ｄｉｖｉｄｅ＊ｉ
ａｎｓｗｅｒ＝ａｎｓｗｅｒ＞＞ＳＨＩＦＴ                  （９）
【０１７１】
最初の整数ｗｈｏｌｅの左シフトを図５８の処理ｃｎｔ＿ｍｉｘ＿ｒｅａｌ＿ｓ１で計算し、ｗｈｏｌｅ／ｄｉｖｉｄｅｒによる割算をｃｎｔ＿ｍｉｘ＿ｒｅａｌ＿ｓ４＿１で、あらかじめ計算して整数ｗｈｏｌｅ＿ｄｉｖｉｄｅに収納しておき、ｉ＝１，２，…，ｄｉｖｉｄｅｒにつきｃｎｔ＿ｍｉｘ＿ｒｅａｌ＿ｓ４＿２で順次ａｎｓｗｅｒを計算し、最後にｃｎｔ＿ｍｉｘ＿ｒｅａｌ＿ｓ４＿３で右シフトにより普通表示の数に戻す。
【０１７２】
この方式では、先に一回割算をしておけばｉを変化させた各ループでは掛算だけをすればよい。しかし、この方式では、ｃｎｔ＿ｍｉｘ＿ｒｅａｌ＿ｓ４＿１の整数ｗｈｏｌｅ＿ｄｉｖｉｄｅ計算時に切捨て誤差が発生し、その後のｉによる乗算では、この切捨て分を復活することができないので、有効な結果を得ることができない。場合によっては、実数計算と同じ正確な値を得られることもあるが、ｗｈｏｌｅとｄｉｖｉｄｅｒとｉの関係がちょうど割り切れる関係のときには、有効な値を得ることができない。
【０１７３】
例としてｄｉｖｉｄｅｒ＝３８０，ｉ＝１９の場合を考える。（４）式に代入すると、
0003691297.tif 000005
となり、ちょうど割り切れる。
【０１７４】
一方、ＳＨＩＦＴ＝１３として（９）式に代入すると次のようになる。
0003691297.tif 000006
これを計算すると、次のようになる。
【０１７５】
【数１】
0003691297.tif 000007
【０１７６】
（１１）式の結果は（１０）式と異なってしまう。シフトビットＳＨＩＦＴを更に大きくしても、同様の結果となる。この方法の根本的な問題点は、整数の除算では、割り切れない場合の商は必ず切捨てされるということに起因する。例えば（１０）式のように、除算と乗算を同時に行えば、ちょうど割り切れる計算において、除算を先に行い、その際に切捨てで商を求める限り、後の乗算では切捨て分は復活できない。故にいくらシフトビット数を増しても、この方法では有効な結果は得られない場合が発生する。ちなみに、浮動小数点表示の計算では、数を丸める際に最も近傍へ丸めるため、このようなことが発生しない。
【０１７７】
図５９にこの実施の形態における第三のａｎｓｗｅｒの計算法を示す。これは第一の計算法と対比するために説明するもので、性能は第一の計算法に比べて劣る。
【０１７８】
第二の計算法の問題点は、最初のｗｈｏｌｅのｄｉｖｉｄｅｒによる割算で、商を整数化するために切り捨てることにあった。それならば、最初の商だけは実数で計算し、その結果を用いて後の乗算を行えば、うまく行くのではと考えられる。実施の形態２で示したように、実数はｆｌｏａｔでは足りないことが解ったので、ｄｏｕｂｌｅを用いる。手順は次の（１２）式及び図５９に示す。変数の属性を明らかにするために、ｄｏｕｂｌｅにはｄｂ、整数にはｉｎｔが付けてある。
【０１７９】
0003691297.tif 000008
【０１８０】
この方法では、上記に示すように整数として３２ビットのｕｎｓｉｇｎｅｄ  ｌｏｎｇを用いているが、残念ながら３２ビット整数では、有効性は検証できない。この方法を使用するには、整数として少なくとも６４ビットオーダーの長さが必要である。
【０１８１】
以上から、この実施の形態で有効なのは第一の計算法であり、固定小数点表示により配置位置ａｎｓｗｅｒを求めるためには、図５６で示したように、乗算後に除算をして、整数は４０ビット以上とする必要がある。
【０１８２】
以上のように、この実施の形態３によれば、実数間隔算出処理において、固定小数点変数を用いることにより、整数だけで処理することができ、配置処理時間を短くすることができるという効果が得られる。
【０１８３】
実施の形態４．
実施の形態４は、請求項２の実数間隔算出処理の方法、すなわち、実施の形態１の図１５に示す関数ｃｎｔ＿ｍｉｘ＿ｒｅａｌの改良に関するものである。
実施の形態１の図１５に示す関数ｃｎｔ＿ｍｉｘ＿ｒｅａｌでは、処理ｃｎｔ＿ｍｉｘ＿ｒｅａｌ＿ｓ１で、整数変数ｗｈｏｌｅ＿ｉｎｔとｄｉｖｉｄｅｒ＿ｉｎｔを、浮動小数点変数ｗｈｏｌｅとｄｉｖｉｄｅｒに変換し、処理ｃｎｔ＿ｍｉｘ＿ｒｅａｌ＿ｓ４で、（１）式の値を計算していた。実施の形態３では、固定小数点表示変数を用いて実施の形態２の（４）式の値を計算し、各パラメータの値は図５２に従っていた。
【０１８４】
実施の形態３では、固定小数点表示変数による計算方式を示した。固定小数点表示変数による計算では、実施の形態３の第一の方式に示したように、乗算後に除算を行い、整数は４０ビット以上必要であることを示した。しかし、３２ビット以上の整数は標準化されておらず、コンパイラに依存しているため、誤動作防止のためにできれば使用を避けたい状況である。そこで、この実施の形態では、固定小数点計算を３２ビット以下の整数で行う方法を示す。
【０１８５】
この実施の形態では、実施の形態１の式１に対応する配分位置計算式として、実施の形態２の（４）式を用い、各パラメータの値は図５２の通りとするが、シフトするビット数はＳで表す。この実施の形態では、（４）式の計算に３２ビット以下の整数を用いて、固定小数点計算を行う。
【０１８６】
この実施の形態による配置位置計算手順を示すに先立ち、この実施の形態における計算方式の導出を示す。この実施の形態で示す計算方式をｒｅｓ＿ｒｅｓ法と呼ぶ。このｒｅｓ＿ｒｅｓとは、ｒｅｓｉｄｕｅ  ｏｆ  ｒｅｓｉｄｕｅ、すなわち余りの余りを意味する。
【０１８７】
この実施の形態の第一の方式として、まず、実施の形態１で示した丸めバイアスをゼロとした場合を考える。計算の方針は以下の通りとする。
・ビットシフトするのは、ｗｈｏｌｅをｄｉｖｉｄｅｒで割算したときの余り（ｒｅｓｉｄｕｅ）であるｗｈｏｌｅ＿ｒｅｓのみで、商（ｑｕｏｔｉｅｎｔ）であるｗｈｏｌｅ＿ｑｕｏはシフトしない。
・なるべく等価変換により式の変形を進める。（分母と分子に同じ数があるときは消すなど）
・掛算を先に行う。
・切捨てをともなう割算・ビットシフトは最後まで行わない。
【０１８８】
付与の定数ｗｈｏｌｅと変数ｄｉｖｉｄｅｒからａｎｓｗｅｒを求める式の変形を以下に示す。
【０１８９】
【数２】
0003691297.tif 000009
【０１９０】
上式の右辺の第一項（ｗｈｏｌｅ／ｄｉｖｉｄｅｒの商の分）については、ビットシフトは行わず乗算で計算し、第二項（余りの分）についてのみ、ビットシフトを行って計算する。
【０１９１】
以下に、ｗｈｏｌｅ＝１１９８０，ｄｉｖｉｄｅｒ＝３８０，ｉ＝１９，Ｓ＝１３の場合の数値例を示す。
１１９８０＝３１×３８０＋２００
１１９８０×２13＝３１×２13×３８０＋２００×２13
ここで、
0003691297.tif 000010
【０１９２】
上記の計算のプログラム例を以下に示し、フローチャートを図６０に示す。
ｗｈｏｌｅ＿ｑｕｏ＝ｗｈｏｌｅ／ｄｉｖｉｄｅｒ；
ｗｈｏｌｅ＿ｒｅｓ＝ｗｈｏｌｅ％ｄｉｖｉｄｅｒ；
ｒｅｓ＿ｓ＝ｗｈｏｌｅ＿ｒｅｓ＜＜Ｓ；
ｒｅｓ＿ｑｕｏ＿ｓ＝ｒｅｓ＿ｓ／ｄｉｖｉｄｅｒ；
ｒｅｓ＿ｒｅｓ＿ｓ＝ｒｅｓ＿ｓ％ｄｉｖｉｄｅｒ；
ｒｅｓ＿ｑｕｏ＿ａｎｓ＿ｓ＝ｒｅｓ＿ｑｕｏ＿ｓ＊ｉ；
ｒｅｓ＿ｒｅｓ＿ａｎｓ＿ｓ＝ｒｅｓ＿ｒｅｓ＿ｓ＊ｉ／ｄｉｖｉｄｅｒ；
ｒｅｓ＿ａｎｓ＿ｓ＝ｒｅｓ＿ｑｕｏ＿ａｎｓ＿ｓ＋ｒｅｓ＿ｒｅｓ＿ａｎｓ＿ｓ；
ｒｅｓ＿ａｎｓ＝ｒｅｓ＿ａｎｓ＿ｓ＞＞Ｓ；
ｑｕｏ＿ａｎｓ＝ｗｈｏｌｅ＿ｑｕｏ＊ｉ；
ａｎｓｗｅｒ＝ｑｕｏ＿ａｎｓ＋ｒｅｓ＿ａｎｓ；
【０１９３】
以下に、この実施の形態の第一の方式における必要ビット数の検討を行う。
各変数の説明を図６１に示す。各変数の値の範囲は図６１に示してあるが、これらの値はｄｉｖｉｄｅｒの値に依存して変化する。故に、図６１の値の範囲による必要ビット数を単純に加算したのでは、本当に必要なビット数を上回る値が出てしまう。必要ビット数を正しく評価するためには、各変数の最大値と与えるｄｉｖｉｄｅｒの値との関係を調査する必要がある。
【０１９４】
与えるｄｉｖｉｄｅｒの値と各変数の値の最大または上限値との関係を示したのが図６２である。図６２では、シフト数Ｓは１３としている。横軸のｄｉｖｉｄｅｒの値の最大値は、実際には５９９０であるが、各変数の挙動が良くわかるように、１１９８０まで示してある。縦軸は各変数のｌｏｇ２をとって切上げたもので、各変数を表現する必要ビット数を示している。図６２から、ｄｉｖｉｄｅｒ≦５９９０でＳ＝１３の場合は、必要ビット数は２６ビットであることがわかる。これを一般化して、必要ビット数はＳ＋１３として良いと思われる。故に、Ｓ≦１９ならば３２ビット整数が使用できることになる。
【０１９５】
次に、この実施の形態の第一の方式を拡張して、この実施の形態の第二の方式として、丸めバイアスを加算する場合について述べる。丸めバイアス（ｒｏｕｎｄ  ｂｉａｓ）は、０から９９の値をとるｒｏｕｎｄ＿ｂｉａｓ＿ｉｎｔとｒｏｕｎｄ＿ｂｉａｓ＿ｐｉｔｃｈ＝１００で、
ｒｏｕｎｄ＿ｂｉａｓ＝（ｒｏｕｎｄ＿ｂｉａｓ＿ｉｎｔ）／（ｒｏｕｎｄ＿ｂｉａｓ＿ｐｉｔｃｈ）
で表し、０から０．９９の値をとるものとする。
【０１９６】
この実施の形態の第一の方式の式のａｎｓｗｅｒは、以下のようになる。
【０１９７】
【数３】
0003691297.tif 000011
【０１９８】
プログラム例は以下のようになり、そのフローチャートを図６３に示す。
0003691297.tif 000012
【０１９９】
以下に、丸めバイアスを加算する場合の必要ビット数について示す。
この実施の形態の第一の方式で、丸めバイアスを加算しない場合の必要ビット数はＳ＋１３とした。シフトビットＳ＝１３の場合のｒｏｕｎｄ＿ｂｉａｓ＿ｓのｒｏｕｎｄ＿ｂｉａｓ＿ｉｎｔに対する値の変化を示したのが図６４である。図６４から、ｒｏｕｎｄ＿ｂｉａｓ＿ｓは１３ビット必要なことがわかる。これはＳによる。丸めバイアスを加算する場合は、上記で説明したように、ｒｅｓ＿ａｎｓ＿ｓがｒｏｕｎｄ＿ｂｉａｓ＿ｓだけ増加することになる。
【０２００】
図６２の（ｅ）に図６４の（ｂ）の丸めバイアスを加算したものが、図６５である。これは図６２の（ｅ）と同じであるので、図６２と同様に、ｄｉｖｉｄｅｒ≦５９９０でＳ＝１３の場合は、必要ビット数はＳ＋１３として良いと思われる。故に、Ｓ≦１９ならば３２ビット整数が使用できることになる。
【０２０１】
この実施の形態の第一の方式の評価を以下に示す。評価は、シフトビットＳ＝０，９，１３の場合について、ｒｏｕｎｄ＿ｂｉａｓを０から０．９９まで０．０１刻みで変化させて、各々の値における評価指標の場合の数を調べた。ｒｏｕｎｄ＿ｂｉａｓの各値につき、帯域（ｄｉｖｉｄｅｒ）は１から５９９０まで変化させ、各帯域につき、１≦ｉ≦ｄｉｖｉｄｅｒの範囲でｉを変化させた。
【０２０２】
評価指標と結果を図６６に示す。ｓｔｅｐ１とｓｔｅｐ２の間隔については、３ケースとも、整数計算により求めた規定値と異なる場合はないので、シフトビットをいくつにとっても、帯域が変わってしまう等の面倒な問題を引き起こすことはないと思われる。しかし、理想値を与えるｄｏｕｂｌｅによるａｎｓｗｅｒとの比較では、シフトビットが小さいほど、ａｎｓｗｅｒが異なる場合の数が多くなる。ｄｏｕｂｌｅによるａｎｓｗｅｒと異なる値をとると、ＣＤＶが最大１まで増加してしまうので、直後にＣＤＶチェックを行った場合は、エラーが発生する可能性がある。
【０２０３】
ところで、図６７の（ｂ）と（ｃ）から、Ｓ＝９と１３の場合は０，０．２５，０．５，０．７５の４値では、ｄｏｕｂｌｅとの差異がゼロになっている。故にｒｏｕｎｄ＿ｂｉａｓとして、この４値を用いれば、ｄｏｕｂｌｅとの差異がなくなると言える。図６７の（ａ）から、Ｓ＝０の場合も差異が小さくなる点があるが、そのときでも、ｒｏｕｎｄ＿ｂｉａｓ＝０の点を除いて、約１０００個の差異がある。ｒｏｕｎｄ＿ｂｉａｓ＝０の場合には、Ｓ＝０，１２，２０，２１のときに図６６の評価指標全てがゼロになった。
【０２０４】
この実施の形態では、ＧＩＤ配置問題の理想配置位置の固定小数点による計算を、３２ビット以下の整数で実現する方法を検討し、ｒｅｓ＿ｒｅｓ法を導出した。丸めバイアスを加算する場合も、しない場合も、シフトビットＳのとき、必要ビット数はＳ＋１３としてよい。故に、Ｓ≦１９ならば３２ビット整数が使用できることになる。
【０２０５】
シミュレーションによる評価では、シフトビットＳ＝０，９，１３の場合について、ｒｏｕｎｄ＿ｂｉａｓを０から０．９９まで０．０１刻みで変化させたところ、ｓｔｅｐ１とｓｔｅｐ２の各個数、合計個数、ｓｔｅｐ１，ｓｔｅｐ２以外の間隔の個数はゼロであった。理想値であるｄｏｕｂｌｅによる計算との比較では、シフトビットが小さいほど、ａｎｓｗｅｒが異なる場合の数が多くなる。これにより、ＣＤＶが最大１まで増加してしまうので、直後にＣＤＶチェックを行った場合には、エラーが発生する可能性がある。しかし、整数計算により求めた規定値（ｓｔｅｐの数等）は守られているので、帯域が変わってしまう等の面倒な問題を引き起こすことはないと思われる。
【０２０６】
以上のように、この実施の形態４によれば、実数間隔算出処理において、固定小数点変数を用いた計算を、３２ビット以下の整数で行うことができ、配置処理時間を短くすることができるという効果が得られる。
【０２０７】
実施の形態５．
図６８は、この発明の実施の形態５によるシェーピング機能を実現する装置の構成を示す概略図である。図６８において、１はシェーピング回路等の制御を行うＣＰＵ、２はＡＴＭセル（固定長セル）のセルストリームの入力を受けて各セル間の間隔を調整して出力することで出力トラフィックを制御するシェーピング回路、３は転送されるＡＴＭセルのヘッダ情報（ＶＰＩ、ＶＣＩ等のあて先情報）を読み取ってＡＴＭセルが転送されるべき出力線の出力インタフェース部にＡＴＭセルを送出するルーティングスイッチとして与えられるスイッチ部、４は入力線とスイッチ部３との間におけるインタフェース機能を実現する入力インタフェース部、５は出力線とスイッチ部３との間におけるインタフェース機能を実現する出力インタフェース部である。
【０２０８】
また、スイッチ部３は、複数の入力インタフェース部４から延びる伝送線を集線して各入力インタフェース部から転送されるＡＴＭセルを集めてＡＴＭセルストリームを構成するＡＴＭセル集約部と、ＡＴＭセル集約部で構成されたＡＴＭセルストリームから順次ＡＴＭセルを取り出してヘッダ情報を基に各ＡＴＭセルを所望の出力インタフェース部に分配するＡＴＭセル分配部とを有して構成されている。
【０２０９】
シェーピング回路２は、スイッチ部３のＡＴＭセル集約部とＡＴＭセル分配部との間に配置される。これにより、入力線または出力線におけるＡＴＭセルの転送速度が１５０Ｍｂｐｓ程度とすると、スイッチ部における集線度に応じてシェーピング回路にはその何倍もの帯域幅を有する出力テーブルが付設される。
【０２１０】
また、各コネクションにおけるＡＴＭセルの転送速度に拘る最大出力セル帯域（Ｐｅａｋ  Ｃｅｌｌ  Ｒａｔｅ、以下ＰＣＲと称する）を設定する際には、１つのコネクション（ＶＣコネクション、ＶＰコネクション等）を対象としてＰＣＲを算出する場合もあれば、幾つかのコネクションの集合として構成されるコネクショングループを単位としてＰＣＲを算出することも考えられる。以下の説明では、このようなコネクショングループ単位でＰＣＲを設定することを前提に本願発明を説明する。
【０２１１】
コネクションのグループ化に関しては、ＡＴＭを用いた通信を設定する際の網のコネクション受付制御部へのユーザからの通信申告等を基にして、同一の帯域幅を有する複数のコネクションをまとめてグループ化すること、帯域幅が所定の関係にあり１つのグループとして適宜まとめることが可能な複数のコネクションをまとめてグループ化すること、その他ＣＰＵによる所定の処理に基づいてグループ化が可能である複数のコネクションをまとめてグループ化すること等が考察される。
【０２１２】
図６９は、シェーピング回路に設定される出力テーブル（グループ識別子配置テーブルまたはＧＩＤテーブル）の例を示す図である。１０は帯域幅１．２Ｇｂｐｓを有する出力テーブル、１１は出力テーブル１０を約０．１Ｍｂｐｓ単位に区切って得られた単位テーブル（スロット）、１２は出力テーブル１０上での番号、すなわちコネクショングループを配置する上での番地（アドレス）である。なお、この例では、１．２Ｇｂｐｓの出力テーブル１０を、約０．１Ｍｂｐｓの単位テーブル１１に区切って１１９８０個の単位テーブル１１が生成される。そして、１．２Ｇｂｐｓとは、ルーティングスイッチによるＡＴＭセルの読み取り速度を示すものとして与えられるものである。
【０２１３】
出力テーブル１０内で番号が付されていない単位テーブル１１は、単位テーブル１１が空であることを示し、単位テーブル１１に番号が付されている場合は、その番号のコネクショングループがその単位テーブル１１に配置されていることを示す。単位テーブル１１に１００と付されている場合には、その単位テーブル１１に、コネクショングループの１００番が配置されていることを示し、またｎはコネクショングループ１００の理想送出間隔を示すものである。
【０２１４】
上記の個々の単位テーブル１１には、グループ化されたコネクションにて転送される多数のＡＴＭセルについての識別情報が適正に収容される。ＡＴＭセルの送出は、単位テーブル１１毎に逐次的に実施され、１つの単位テーブル１１の読み出しからは、１つのＡＴＭセルが送出される。そして、出力テーブル１０の最終番地まで到達すると、初期番地（すなわち、出力テーブル番号“０”）に復帰して、同様に単位テーブル１１毎に次に配置されていたＡＴＭセルが送出される。
【０２１５】
次にシェーピングを行う動作について説明する。
図７０は、この発明の実施の形態５によるシェーピング方法を示すフローチャートである。各コネクショングループのＰＣＲの値は、例えばシェーピング回路２を制御するＣＰＵ１により決定される場合もあれば、または予め設定されてＣＰＵ１に付随するメモリに記憶されている場合もある。
【０２１６】
まず、処理ＳＴ２０で、ＰＣＲ（帯域値）の大きな順（降順）に、各コネクショングループのソートを行う。ソートによる並べ替えが行われると、処理ＳＴ２１でＰＣＲ毎に同一のＰＣＲを有するコネクショングループ数をカウントする。次に、処理ＳＴ２２で処理対象グループの理想セル送出間隔ｎを計算する。処理ＳＴ２３では、処理対象グループと同一のＰＣＲを有するコネクショングループが、処理対象グループを含めて複数存在するか否かを判定し、同一のＰＣＲを有するグループが他に存在しない場合には、処理は分岐して処理ＳＴ２４に移る。
【０２１７】
処理ＳＴ２４では、出力テーブル上で処理対象グループを配置する最初の先頭番地を乱数等の計算方法を用いて算出する。このように算出された先頭配置番地（配置開始位置）について、処理ＳＴ２５で処理対象グループを配置可能か否かを判定する。他のコネクショングループが既配置の場合には、処理ＳＴ２４に戻って再度計算を行う。逆に配置可能であれば、処理ＳＴ２６で出力テーブル上の該当先頭配置番地に配置する。次に、処理ＳＴ２７では、先頭配置番地を基準として、処理対象グループを許容ＣＤＶ値以内の範囲で逐次的に配置していく。具体的には、（先頭配置番地）＋Ｎ＊ｎなる演算を実施して理想配置番地（理想配置位置）を決定し、その理想配置番地に配置可能か否かを判定するとともに、配置不可の場合には、許容ＣＤＶ値以内の範囲で近傍を検索する。なお、上記の式において、Ｎは１から処理対象グループについての総配置個数までの自然数を示す。
【０２１８】
上記の近傍検索に関しては、
１）許容ＣＤＶ値以内の範囲における検索であること、
２）理想配置番地からのずれをなるべく小さくすること、
３）既に他のコネクショングループが配置済みの単位テーブルにはなるべく隣接しないようにすること、
と表現される３つの条件に基づいて決定するアルゴリズムを採用することができる。例えば、３つの条件をパラメータ表現するとともに各パラメータを重み付けして、パラメータ値の総和を最小化する番地を配置番地とするようなアルゴリズムが考察される。
【０２１９】
さらに、配置番地の検索に関しては、従来技術のようにＡＴＭセルを後方にずらすのみではなく、前方および後方の両方向で空番地の検索が実施される。ここで、単位テーブルの配置において、隣接するのを避けるのが求められるのは、隣接していると、次のコネクショングループの配置（ＡＴＭセルの配置）の際に衝突が起こりやすくなるとともに、出力インタフェース部において輻輳が発生しやすくなるからである。そして、処理ＳＴ２８で全コネクショングループの配置がすべて終了したか否かを判定し、残りがあれば処理ＳＴ２２に戻って処理を継続し、残りがなければ処理を終了して出力テーブルの設定を完了する。
【０２２０】
処理ＳＴ２３で同一のＰＣＲを有するコネクショングループのグループ数が２以上である場合には、処理は処理ＳＴ２９に分岐して、処理ＳＴ２４と同様に、出力テーブル上で処理対象グループを配置する先頭配置番地を乱数等の計算方法を用いて算出する。このように算出された先頭配置番地については、処理ＳＴ３０で配置可能か否かを判定し、既配置の場合には、処理ＳＴ２９に戻って再度計算を行い、逆に配置可能の場合には、処理ＳＴ３１で当該先頭配置番地に処理対象グループを配置する。
【０２２１】
次に、処理ＳＴ３２では、同一のＰＣＲを有するコネクショングループのグループ数がｍ個あるとすると、処理ＳＴ３１において決定した先頭配置番地から理想送出間隔ｎの間に、各グループの先頭配置番地を均等に設定する。処理ＳＴ３３では、それぞれのコネクショングループが先頭配置番地に配置可能か否かを判定する。
【０２２２】
既配置（配置不可）の先頭配置番地がある場合には、それらのコネクショングループの先頭配置番地に関しては、処理ＳＴ３４において近傍検索による先頭配置番地決定処理を実施する。この近傍検索では、処理ＳＴ２７のように、許容ＣＤＶ値以内の範囲における検索であるという条件を課されることはないが、例えば、
１）均等配置番地からのずれをなるべく小さくすること、
２）既に他のコネクショングループが配置済みの単位テーブルにはなるべく隣接しないようにすること、
と表現される２つの条件に基づき決定するようなアルゴリズムを採用することができる。
【０２２３】
次に、処理ＳＴ３５では、各コネクショングループ毎に、理想送出間隔ｎに１から総配置個数までの自然数（Ｎ）を順次乗じた数に処理対象グループの先頭配置番地を加算して得た理想配置番地を算出し、その理想配置番地に配置可能であれば配置し、配置不可であれば、処理ＳＴ２７で実施したのと同様の近傍検索を行い配置番地を決定する。
【０２２４】
１つの処理対象グループに対して処理が終了すると、処理ＳＴ３６で同一のＰＣＲを有するすべてのコネクショングループについての配置が完了したか否かが判定され、完了していない場合には、処理ＳＴ３５に戻って同一のＰＣＲを有する次のコネクショングループに対して処理を行い、完了している場合には、処理ＳＴ２８に進行する。処理ＳＴ２８では、全コネクショングループに対して処理が終了したか否かを判定し、残りがあれば処理ＳＴ２２に戻って処理を継続し、残りがなければ処理を終了して出力テーブル上への配置処理を完了する。
【０２２５】
以上のように、この実施の形態５によれば、同一のＰＣＲを有する複数のコネクショングループについて、それぞれのコネクショングループの先頭配置番地が均等に設定されるとともに、同一のＰＣＲを有する複数のコネクショングループが先頭配置番地から最終配置番地まで互いに均等に配置されるように構成されているので、出力テーブル上でコネクショングループのより均等な配置が実現されて、ＡＴＭセルの衝突や輻輳が防止されるから、許容ＣＤＶ値に対してより多くのコネクション数を確保することができるという効果が得られる。
【０２２６】
また、処理対象のコネクションを理想配置番地に配置できない場合には、理想配置番地を中心とした許容ＣＤＶ値以内の範囲で、前方および後方の空番地を検出して配置番地を決定するように構成したので、許容ＣＤＶ値内の範囲の空番地を効率的に利用できるから、許容ＣＤＶ値に対してより多くのコネクション数を確保することができるとともに、ＡＴＭセルの衝突が頻繁に生じる場合でも、後方のみの検索のように出力帯域が小さくなることがないという効果が得られる。
【０２２７】
さらに、許容ＣＤＶ値内の範囲に、処理対象のコネクションを配置可能な番地が複数ある場合には、隣接する前方および後方の番地が、ともに他のコネクションにより配置済みとなっていない番地を優先的に選択して、当該処理対象のコネクションを配置できるので、隣接する番地へのコネクションの配置ができる限り防止されて、ＡＴＭセルの衝突を低減することができるから、許容ＣＤＶ値に対してより多くのコネクション数を確保することができるという効果が得られる。
【０２２８】
さらに、すべての出力インタフェース部に送出されるＡＴＭセルの出力順を規定できるだけの容量を有する広帯域の出力テーブルを備える構成としたので、出力テーブル上へのコネクショングループの配置において、微修正等を容易に実施できるから、出力テーブル作成の容易化および効率化を図れるという効果が得られる。さらに、このような広帯域の出力テーブルを用意することで、それぞれのコネクショングループが配置される番地の隣接をできる限り防止するので、許容ＣＤＶ値に対して、より多くのコネクション数を確保することができるという効果が得られる。
【０２２９】
なお、この実施の形態５では、広帯域な出力テーブルをスイッチ部に付設する構成としたが、このような広帯域な出力テーブルを、それぞれの出力インタフェース部ごとに設ける構成とすることも可能である。
【０２３０】
実施の形態６．
実施の形態６によるシェーピング方法を実現するための、シェーピング回路およびルーティングスイッチ等からなる装置構成、並びにシェーピングに使用される広帯域の出力テーブルは、図６８および図６９に示されたものと同じであるので、同一符号を用いて、その詳細な説明をここでは省略する。
【０２３１】
次に動作について説明する。
図７１は、この発明の実施の形態６によるシェーピング方法を示すフローチャートである。まず、処理ＳＴ４０で、ＰＣＲの大きな順（降順）に、各コネクショングループのソートを行い、各コネクショングループをＰＣＲの大きな順に並べ替える。次に、処理ＳＴ４１で、配置済みコネクショングループのＰＣＲの帯域合計値ＰＣＲ＿ＳＵＭ（配置済みの帯域合計値）の初期値としてゼロを設定する。
【０２３２】
そして、帯域値の大きな順に処理対象グループを決定して、特定された処理対象グループについて、第１に処理ＳＴ４２において、当該処理対象グループの理想セル送出間隔ｎを算出するとともに失敗回数の初期値としてゼロを設定する。処理ＳＴ４３では、出力テーブル上で処理対象グループを配置するうえでの先頭配置番地を乱数等の計算方法を用いて算出する。なお、この先頭配置番地は、理想配置番地において配置可能か否かを判定する処理ＳＴ４４において、理想配置番地の初期値として与えられるものである。
【０２３３】
処理ＳＴ４４では算出された理想配置番地に配置可能か否かが判定され、配置可能であれば処理ＳＴ４５において出力テーブル上の該当番地に配置する。配置不可であれば、処理ＳＴ４６に進んで配置番地検索処理１を実行する。
【０２３４】
図７２は、配置番地検索処理１の処理内容を示すフローチャートである。配置番地検索処理１においては、まず処理ＳＴ１０１でＰＣＲ＿ＳＵＭが全出力帯域値（この実施の形態６では１．２Ｇｂｐｓ）の半分の値（判定値）以下であるか否かを判定する。半分以下である場合には、処理ＳＴ１０２に進行して許容ＣＤＶ値内の奇数番地のなかで空番地を検索する。また、処理ＳＴ１０１でＰＣＲ＿ＳＵＭが全出力帯域値の半分より大きい場合には、処理ＳＴ１０３に進行して許容ＣＤＶ値内の偶数番地のなかで空番地を検索する。
【０２３５】
なお、偶数番地および奇数番地に拘りなくこのような空番地が複数ある場合には、実施の形態５での近傍検索と同様に、例えば、
１）許容ＣＤＶ値以内の範囲における検索であること、
２）理想配置番地からのずれをなるべく小さくすること、
３）既に他のコネクショングループが配置済みの単位テーブルにはなるべく隣接しないようにすること、
と表現される３つの条件に基づき、最適な配置番地を決定することが考えられる。
【０２３６】
処理ＳＴ１０２および処理ＳＴ１０３は処理後ともに処理ＳＴ１０４に進行して、処理ＳＴ１０４では出力テーブル上に配置可能か否かを判定する。出力テーブル上に配置可能である場合には、処理ＳＴ１０７に進行して“配置可能”として本処理を終了する。また、出力テーブル上に配置不可である場合には、処理ＳＴ１０５に進行して許容ＣＤＶ値内の範囲のすべての空番地を検索する。すなわち、処理ＳＴ１０２で許容ＣＤＶ値内の奇数番地で空番地を検索して配置不可であれば、許容ＣＤＶ値内の偶数番地で空番地を検索し、処理ＳＴ１０３で、許容ＣＤＶ値内の偶数番地で空番地を検索して配置不可であれば、許容ＣＤＶ値内の奇数番地で空番地を検索する。
【０２３７】
そして、処理ＳＴ１０５の検索結果に基づき、処理ＳＴ１０６で、出力テーブル上に配置可能か否かを判定する。出力テーブル上に配置可能である場合には、処理ＳＴ１０７に進行して“配置可能”として本処理を終了する。また、出力テーブル上に配置不可である場合には、処理ＳＴ１０８に進行して“配置不可”として本処理を終了する。
【０２３８】
図７１に戻って処理ＳＴ４６が終了すると、処理ＳＴ４７に進行して配置番地検索処理１の結果が配置可能であるか否かを判定する。配置不可であれば、処理ＳＴ４８に進行して、当該配置番地が先頭配置番地であるか否かを判定する。そして、処理ＳＴ４８における判定で、先頭配置番地である場合には、処理ＳＴ４９に進行して失敗回数を１増分し、その後処理ＳＴ４３に復帰して先頭配置番地の計算を再び行う。
【０２３９】
処理ＳＴ４８における判定で先頭配置番地でない場合には、処理ＳＴ５０に進行して、失敗回数が許容検索失敗回数未満であるか否かを判定する。許容失敗回数以上である場合には、異常終了（処理ＳＴ５１）として出力テーブル上への配置処理を終了する。許容失敗回数未満である場合には、処理ＳＴ５２に進行し、失敗回数を１増分するとともに当該処理対象グループについての既配置番地をクリアして空番地に戻し、その後処理ＳＴ４３に復帰して先頭配置番地の計算から処理を再び行う。
【０２４０】
処理ＳＴ４７で配置可能の場合には、処理ＳＴ４５に進行して出力テーブル上の該当番地に処理対象グループを配置する。処理ＳＴ４５の処理が終了すると、処理ＳＴ５３で処理対象グループの配置がすべて終了したか否かを判定する。未終了である場合には、処理ＳＴ５４で式｛（先頭配置番地）＋ｎ＊Ｎ（Ｎ：１から総配置個数までの自然数）｝から次の理想配置番地を算出して処理ＳＴ４４に復帰し、以後同様の処理を繰り返す。
【０２４１】
処理ＳＴ５３で当該処理対象グループのすべての配置が完了したと判定された場合には、処理ＳＴ５５で出力テーブル上に配置された処理対象グループのＰＣＲをＰＣＲ＿ＳＵＭに加算する。そして、処理ＳＴ５６に進行して同一のＰＣＲを有する未配置のコネクショングループが他にも存在するか否かが判定される。このようなコネクショングループが他にも存在する場合には、処理ＳＴ４３に復帰して以後処理対象のグループに対して同様の処理を行う。また、このようなコネクショングループが存在しない場合には、処理ＳＴ５７に進んで全コネクショングループの処理が終了したか否かを判定する。処理が終了していないコネクショングループが存在する場合には、処理ＳＴ４２に復帰して処理を継続する。
【０２４２】
以上のように、この実施の形態６によれば、ＰＣＲ＿ＳＵＭが出力テーブルの全出力帯域値の半分以下である間において、処理対象のコネクションを理想配置番地に配置できない場合には、理想配置番地を中心としたＣＤＶ値以内の範囲で奇数番地（または偶数番地）に優先的に配置するように構成したので、出力テーブル上でコネクショングループのより均等な配置が実現されて、ＡＴＭセルの衝突や輻輳が防止されるから、許容ＣＤＶ値に対してより多くのコネクション数を確保することができるという効果が得られる。
【０２４３】
また、奇数番地（または偶数番地）を優先的に検索する場合に、理想配置番地を中心とした許容ＣＤＶ値以内の前方および後方の奇数番地（または偶数番地）を検索するように構成したので、許容ＣＤＶ値内の範囲の空番地を効率的に利用できるから、許容ＣＤＶ値に対してより多くのコネクション数を確保することができるとともに、ＡＴＭセルの衝突が頻繁に生じる場合でも後方のみの検索のように出力帯域が小さくなることがないという効果が得られる。
【０２４４】
さらに、ＰＣＲ＿ＳＵＭが出力テーブルの全出力帯域値の半分となる時点を基準として、奇数番地における検索から偶数番地における検索へと切り替えることとしたので、空番地の検索を容易に行うことができ、出力テーブルの作成を効率化することができるという効果を奏する。さらに、広帯域な出力テーブルを備える構成としたことについては、実施の形態５と同様の効果が得られる。
【０２４５】
なお、図７２の処理ＳＴ１０１においては、ＰＣＲ＿ＳＵＭが全出力帯域値の半分以下であれば、処理ＳＴ１０２で奇数番地を検索することとしたが、偶数番地を検索することとしてもよく、同様の効果が得られる。
【０２４６】
実施の形態７．
実施の形態７によるシェーピング方法を実現するための、シェーピング回路およびルーティングスイッチ等からなる装置構成、並びにシェーピングに使用される広帯域の出力テーブルは、図６８および図６９に示されたものと同じであるので、同一符号を用いて、その詳細な説明をここでは省略する。
【０２４７】
次に動作について説明する。
図７３は、この発明の実施の形態７によるシェーピング方法を示すフローチャートである。図７３において図７１と同一符号はシェーピング方法において同一の処理を示すのでその説明を省略する。実施の形態７は、実施の形態６と比較すると、処理ＳＴ４４が省略されている点が相違する。
【０２４８】
すなわち、理想配置番地が算出されても、当該理想配置番地への配置が可能であるか否かの判定を行うことなしに、配置番地検索処理１を実施する。したがって、１つのコネクショングループについて、付与された複数の配置番地には、すべて優先的に奇数番地または偶数番地が与えられることになる。なお、他の動作については実施の形態６と同様であるので、その説明を省略する。
【０２４９】
以上のように、実施の形態７によれば、実施の形態６による効果とおおよそ同じ効果を得ることができる。相違点としては、ＰＣＲ＿ＳＵＭが出力テーブルの全出力帯域値の半分以下である間において、理想配置番地が空番地であるか否かに拘らず、処理対象のコネクショングループが広帯域な出力テーブル上で奇数番地（または偶数番地）にすべて優先的に配置されるので、出力テーブル上で非常に均等な配置が実現されるから、許容ＣＤＶ値に対してさらに多くのコネクション数を確保することができるという効果が得られる。
【０２５０】
実施の形態８．
実施の形態８によるシェーピング方法を実現するための、シェーピング回路およびルーティングスイッチ等からなる装置構成、並びにシェーピングに使用される広帯域の出力テーブルは、図６８および図６９に示されたものと同じであるので、同一符号を用いて、その詳細な説明をここでは省略する。
【０２５１】
次に動作について説明する。
図７４は、この発明の実施の形態８によるシェーピング方法を示すフローチャートである。図７４において、図７１と同一符号はシェーピング方法において同一の処理を示すので、その説明を省略する。実施の形態８は、実施の形態６と比較すると、処理ＳＴ４６の配置番地検索処理１を配置番地検索処理２に置き換えた点で相違する。
【０２５２】
図７５は、配置番地検索処理２の処理内容を示すフローチャートである。なお、この実施の形態では説明を簡単にするために、許容ＣＤＶ値を７として説明する。配置番地検索処理２においては、まず処理ＳＴ１５１で、ＰＣＲ＿ＳＵＭが出力テーブルの全出力帯域値（この実施の形態８では１．２Ｇｂｐｓ）の半分以下であるか否かを判定する。半分以下であれば、処理ＳＴ１５２でループカウンタ用変数ｉの初期値として１をセットする。そして、処理ＳＴ１５３でＰＣＲ＿ＳＵＭが｛（出力帯域）／（許容ＣＤＶ値＋１）｝＊ｉ以下であるか否かを判定する。この実施の形態においては、出力帯域は１．２Ｇｂｐｓであり、許容ＣＤＶ値が７であるので、上記の式は１５０Ｍｂｐｓ＊ｉとして与えられる。
【０２５３】
処理ＳＴ１５３において、ＰＣＲ＿ＳＵＭが１５０Ｍｂｐｓ＊ｉ以上である場合には、処理ＳＴ１５４でｉを１増分し、その後処理ＳＴ１５５でｉが許容値以下であるか否かを判定する。この許容値としては、ＰＣＭ＿ＳＵＭの値が全出力帯域値の半分である状況に対応する例えば（許容ＣＤＶ値＋１）／２として算出される値が用いられ、本実施の形態ではこの許容値として４が用いられる。処理ＳＴ１５５でｉが許容値以下である場合には、処理ＳＴ１５３に復帰して処理を継続する。処理ＳＴ１５５でｉが許容値以上である場合には、処理ＳＴ１５１に復帰して処理を継続する。
【０２５４】
また、処理ＳＴ１５３でＰＣＲ＿ＳＵＭが１５０Ｍｂｐｓ＊ｉ以下である場合には、処理ＳＴ１５６へ進行する。処理ＳＴ１５６では、ｉの値に基づき理想配置番地近傍において出力テーブル上の番地を８（許容ＣＤＶ値＋１）（所定数）で割った場合に、特定の剰余を有する奇数番地の検索を行う。
【０２５５】
例えば、ｉの値に基づいて次のような検索手順を設けるのが可能である。
１）ｉ＝１の場合：番地を８で割った際の余りが５となる番地を検索
２）ｉ＝２の場合：番地を８で割った際の余りが１，５となる番地を検索
３）ｉ＝３の場合：番地を８で割った際の余りが１，５，７となる番地を検索
４）ｉ＝４の場合：番地を８で割った際の余りが１，３，５，７となる番地を検索
以上のように、ｉの値に応じて、理想配置番地の近傍で制限的に空番地の検索を行う。
【０２５６】
上記のｉの値に基づく検索が終了すると、処理ＳＴ１５７で配置可能か否かの判定を行う。配置可能な場合には、処理ＳＴ１５８で“配置可能”として配置番地検索処理２を終了する。配置不可の場合には、処理ＳＴ１５４へ進行して処理を継続する。
【０２５７】
処理ＳＴ１５１でＰＣＲ＿ＳＵＭの値が出力テーブルの全出力帯域値の半分より大きい場合には、処理ＳＴ１５９へ進行して、理想配置番地近傍の許容ＣＤＶ値内の範囲で偶数番地の空番地を検索する。そして、処理ＳＴ１６０で配置可能か否かを判定して、配置可能であれば処理ＳＴ１５８へ進行して“配置可能”として配置番地検索処理２を終了する。
【０２５８】
また、配置不可であれば、処理ＳＴ１６１へ進行して、理想配置番地近傍の許容ＣＤＶ値内の範囲で偶数番地または奇数番地に拘らず空番地を検索する。そして、処理ＳＴ１６２で配置可能か否かを判定して、配置可能であれば、処理ＳＴ１５８へ進行して“配置可能”として配置番地検索処理２を終了し、配置不可であれば、処理ＳＴ１６３へ進行して“配置不可”として配置番地検索処理２を終了する。
【０２５９】
以上のように、この実施の形態８によれば、実施の形態６による効果とおおよそ同じ効果を得ることができる。相違点としては、ＰＣＲ＿ＳＵＭ値から導かれる出力テーブルの占有率に基づいて、所定数で除した際の剰余が特定の値を有する特定の番地に対してコネクショングループが配置されるように構成したので、出力テーブル上でのコネクショングループの配置が出力テーブルの占有率に応じて適宜制御されて均等に配置されるから、ＡＴＭセルの衝突や輻輳が防止され許容ＣＤＶ値に対してより多くのコネクション数を確保することができるという効果が得られる。
【０２６０】
なお、図７５の処理ＳＴ１５１においては、ＰＣＲ＿ＳＵＭが全出力帯域値の半分以下であれば、処理ＳＴ１５６で奇数番地を検索することとしたが、偶数番地を検索することとしてもよく、同様の効果が得られる。
【０２６１】
実施の形態９．
実施の形態９によるシェーピング方法を実現するための、シェーピング回路およびルーティングスイッチ等からなる装置構成、並びにシェーピングに使用される広帯域の出力テーブルは、図６８および図６９に示されたものと同じであるので、同一符号を用いて、その詳細な説明をここでは省略する。
【０２６２】
次に動作について説明する。
図７６は、この発明の実施の形態９によるシェーピング方法を示すフローチャートである。図７６において、図７４と同一符号はシェーピング方法において同一の処理を示すので、その説明を省略する。実施の形態９は、実施の形態８と比較すると、処理ＳＴ４４が省略されている点が相違する。
【０２６３】
すなわち、理想配置番地が算出されると、当該理想配置番地への配置が可能であるか否かの判定を行うことなしに、配置番地検索処理２を実施する。したがって、１つのコネクショングループについて、付与された複数の配置番地には、すべて優先的に奇数番地または偶数番地が与えられることになる。なお、他の動作については実施の形態８と同様であるので、その説明を省略する。
【０２６４】
以上のように、この実施の形態９によれば、実施の形態８による効果とおおよそ同じ効果を得ることができる。相違点としては、理想配置番地が空番地であるか否かに拘らず、広帯域な出力テーブル上で処理対象のグループが奇数番地（または偶数番地）に優先的に配置され、かつＰＣＲ＿ＳＵＭ値から導かれる出力テーブルの占有率に基づいて、剰余が特定の値を有する特定の番地に配置されるので、出力テーブル上で非常に均等な配置が実現されるから、許容ＣＤＶ値に対してさらに多くのコネクション数を確保することができるという効果が得られる。
【０２６５】
なお、処理ＳＴ１５６における空番地検索においては、奇数番地のなかでの優先順位を剰余が５，１，７，３となる番地の順としたが、これは奇数番地への配置でも配置済みとなる番地の間隔をできる限り広げようとの意図を持って選定されたものであるが、このような順序に限定されるものではなく、他の有効な順序の選定によっても同様の効果を得ることができる。
【０２６６】
【発明の効果】
以上のように、この発明によれば、理想位置算出処理が、整数間隔算出処理と、実数間隔算出処理と、バイアス付加処理と、間隔混合法変化処理と、群内理想位置均等分散処理と、群内開始位置均等分散処理と、行列座標記憶処理と、開始位置ランダム分散処理と、共通化均等配分処理と、隣接配置禁止処理とを備え、代替位置探索処理が、パターン照合処理と、配置割合依存パターン照合処理と、近傍ランダム探索処理と、全体ランダム探索処理と、全体連続ランダム探索処理とを備えることにより、配置処理時間が短く、理想配置位置に配置できない場合には適切な代替位置を選択し、全体的に均等に分散配置を行うことができるという効果がある。
【０２６７】
この発明によれば、バイアス付加処理における小数バイアス付加処理と、間隔混合法変化処理におけるバイアス変化処理とバイアス値変化パターン記憶処理を備えることにより、整数化の結果にバリエーションを持たせることができ、理想配置位置に配置できない場合に、再配置の可能性を高めることができるという効果がある。
【０２６８】
この発明によれば、実数間隔算出処理において、３２ビット以下の固定小数点変数を用いて、第１の剰余回答と第２の剰余回答を求めることにより、少ないビット数で、整数だけで処理することにより、配置処理時間を短くすることができるという効果がある。
【０２６９】
この発明によれば、理想位置算出処理における開始位置ランダム分散処理、ならびに代替位置探索処理における近傍ランダム探索処理、全体ランダム探索処理および全体連続ランダム探索処理において、乱数初期化処理と、周期毎の変数を一次関数で更新する処理と、乱数発生周期制御処理と、周期選択処理と、乱数関数呼出し処理とを備えることにより、理想配置位置に配置できない場合に、再配置の可能性を高めることができるという効果がある。
【０２７０】
この発明によれば、代替位置探索処理におけるパターン照合処理において、最適配置位置パターン作成処理と、最適配置位置パターン記憶処理と、最適配置位置パターン参照処理とを備えることにより、全体的に均等に配置することができるという効果がある。
【０２７１】
この発明によれば、代替位置探索処理におけるパターン照合処理および近傍ランダム探索処理において、指標計算処理と、狭まり・借り更新処理と、借り積算処理とを備えることにより、全体的に均等に配置することができるという効果がある。
【０２７２】
この発明によれば、配置済みの帯域合計値が判定値よりも小さい間では、処理対象のグループを理想配置位置に配置できない場合には、理想配置位置を中心としたＣＤＶ値以内の範囲で奇数アドレス（または偶数アドレス）に優先的に配置するように構成したので、母体テーブル上でグループの均等な配置が実現されてＡＴＭセルの衝突や輻輳が防止され、許容ＣＤＶ値に対してより多くのグループ数を確保することができるという効果がある。
【０２７３】
この発明によれば、配置済みの帯域合計値が判定値よりも小さい間では、理想配置位置が空アドレスであるか否かに拘らず、処理対象のグループが広帯域な母体テーブル上で奇数アドレス（または偶数アドレス）にすべて優先的に配置されるように構成したので、母体テーブル上で非常に均等な配置が実現されるから、許容ＣＤＶ値に対してさらに多くのグループ数を確保することができるという効果がある。
【０２７４】
この発明によれば、帯域合計値に対して比較される判定値が母体テーブルの全出力帯域の半分の値として与えられるように構成したので、大部分の奇数アドレスに対する配置が完了した後に、偶数アドレスの検索へと切り替えられるから、空アドレスの検索を容易に行うことができ、母体テーブルの作成を効率化することができるという効果がある。
【０２７５】
この発明によれば、処理対象のグループを許容ＣＤＶ値内の範囲の奇数アドレスまたは偶数アドレスに優先的に配置する際に、所定数で除した剰余が特定の数値となるアドレスに処理対象のグループを配置するように構成したので、母体テーブル上でのグループの配置がより制御されてグループが均等に配置されるから、ＡＴＭセルの衝突や輻輳が防止されて許容ＣＤＶ値に対してより多くのグループ数を確保することができるという効果がある。
【図面の簡単な説明】
【図１】  この発明の実施の形態１によるＧＩＤテーブルバンドを示す図である。
【図２】  この発明の実施の形態１によるＧＩＤテーブルリングを示す図である。
【図３】  この発明の実施の形態１による用語を説明する図である。
【図４】  この発明の実施の形態１による帯域割当概念図である。
【図５】  この発明の実施の形態１による入力パターン例を示す図である。
【図６】  この発明の実施の形態１による優先度を説明する図である。
【図７】  この発明の実施の形態１によるグループの階層を示す図である。
【図８】  この発明の実施の形態１によるＧＩＤ配置処理を示すフローチャートである。
【図９】  この発明の実施の形態１による初期設定を示すフローチャートである。
【図１０】  この発明の実施の形態１による同一帯域グループ群配置処理を示すフローチャートである。
【図１１】  この発明の実施の形態１によるグループ配置処理を示すフローチャートである。
【図１２】  この発明の実施の形態１による個別グループ要素配置処理を示すフローチャートである。
【図１３】  この発明の実施の形態１による関数ｃｎｔ＿ｍｉｘ＿ｃｌｃ＿ｉｎｔを示すフローチャートである。
【図１４】  この発明の実施の形態１による計算方式によるＣＤＶと借りの比較を示す図である。
【図１５】  この発明の実施の形態１による関数ｃｎｔ＿ｍｉｘ＿ｒｅａｌを示すフローチャートである。
【図１６】  この発明の実施の形態１による整数化法の違いによる差異を示す図である。
【図１７】  この発明の実施の形態１による整数化と丸めバイアスを説明する図である。
【図１８】  この発明の実施の形態１による行列座標の概念を示す図である。
【図１９】  この発明の実施の形態１による行列座標の例を示す図である。
【図２０】  この発明の実施の形態１による行列座標の例を示す図である。
【図２１】  この発明の実施の形態１によるＧＩＤから行列座標を求める処理を説明する図である。
【図２２】  この発明の実施の形態１による関数ｃｎｔ＿ｍａｔｒｉｘ＿ｃｏｏｒｄｉｎａｔｅ＿ｓｅｔを示すフローチャートである。
【図２３】  この発明の実施の形態１による一個のグループの配置を説明する図である。
【図２４】  この発明の実施の形態１による同一帯域の二個のグループの配置を説明する図である。
【図２５】  この発明の実施の形態１による同一帯域二グループ配置の行列座標を示す図である。
【図２６】  この発明の実施の形態１による関数ｃｎｔ＿ｓｅｔ＿ｓｔｅｐ＿ｉｎｆを示すフローチャートである。
【図２７】  この発明の実施の形態１による関数ｃｎｔ＿ｓｅｔ＿ｓｉｚｅ＿ｉｎｆを示すフローチャートである。
【図２８】  この発明の実施の形態１によるステップとサイズを説明する図である。
【図２９】  この発明の実施の形態１によるサイズ情報保持テーブルの例を示す図である。
【図３０】  この発明の実施の形態１によるサイズの配置例を示す図である。
【図３１】  この発明の実施の形態１による配置開始ステップの均等分散を説明する図である。
【図３２】  この発明の実施の形態１による関数ｃｎｔ＿ｓｅｔ＿ｓｔａｒｔ＿ｏｆｆｓｅｔを示すフローチャートである。
【図３３】  この発明の実施の形態１による関数ｃｎｔ＿ｓｅｔ＿ｃｌｃ＿ｇｉｄを示すフローチャートである。
【図３４】  この発明の実施の形態１による関数ｃｎｔ＿ｃｈｋ＿ｇｉｄ＿ａｖａｉｌａｂｌｅを示すフローチャートである。
【図３５】  この発明の実施の形態１による理想位置に配置できないときの処置を示す図である。
【図３６】  この発明の実施の形態１による理想位置と周辺を説明する図である。
【図３７】  この発明の実施の形態１によるロムテーブルとパターン照合の仕組みを説明する図である。
【図３８】  この発明の実施の形態１による関数ｃｎｔ＿ｃｈｋ＿ｃｄｖ＿ｐａｔ＿ｖａｌｕｅを示すフローチャートである。
【図３９】  この発明の実施の形態１による関数ｃｎｔ＿ｃｈｋ＿ｃｄｖ＿ｐａｔ＿Ｒ１３５７を示すフローチャートである。
【図４０】  この発明の実施の形態１による関数ｃｎｔ＿ｃｈｋ＿ｓｔａｒｔ＿ｒａｎｄ＿ａｌｌを示すフローチャートである。
【図４１】  この発明の実施の形態１による関数ｃｎｔ＿ｃｎｋ＿ｃｄｖ＿ｒａｎｄを示すフローチャートである。
【図４２】  この発明の実施の形態１によるＣＤＶ計算アルゴリズムを示すフローチャートである。
【図４３】  この発明の実施の形態１によるＣＤＶ計算の仕組みを説明する図である。
【図４４】  この発明の実施の形態１による許容ＣＤＶ値の増加を説明する図である。
【図４５】  この発明の実施の形態１によるｃｎｔ＿ｓｅｔ＿ａｌｌｏｗ＿ｃｄｖを示すフローチャートである。
【図４６】  この発明の実施の形態１による乱数テーブル保持内容を示す図である。
【図４７】  この発明の実施の形態１による関数ｃｎｔ＿ｒａｎｄを示すフローチャートである。
【図４８】  この発明の実施の形態１による関数ｃｎｔ＿ｓｒａｎｄを示すフローチャートである。
【図４９】  この発明の実施の形態１による乱数とＣの組込み乱数の比較を示す図である。
【図５０】  この発明の実施の形態１による乱数を１１９８０回呼び出した際にちょうど一回発生した数を示す図である。
【図５１】  この発明の実施の形態１による関数ｃｎｔ＿ｌｏｇ２を示すフローチャートである。
【図５２】  この発明の実施の形態２によるパラメータ規定を示す図である。
【図５３】  この発明の実施の形態２による掛算先行の場合の倍精度による配置位置計算法を示すフローチャートである。
【図５４】  この発明の実施の形態２による割算先行の場合の倍精度による配置位置計算法を示すフローチャートである。
【図５５】  この発明の実施の形態３による固定小数点表示による計算を説明する図である。
【図５６】  この発明の実施の形態３による掛算先行の場合の固定小数点表示による配置位置計算法を示すフローチャートである。
【図５７】  この発明の実施の形態３による掛算先行の場合の固定小数点計算の必要ビット数を説明する図である。
【図５８】  この発明の実施の形態３による割算先行で整数使用の場合の固定小数点表示による配置位置計算法を示すフローチャートである。
【図５９】  この発明の実施の形態３による割算先行で実数使用の場合の固定小数点表示による配置位置計算法を示すフローチャートである。
【図６０】  この発明の実施の形態４によるｒｅｓ＿ｒｅｓ法を示すフローチャートである。
【図６１】  この発明の実施の形態４によるパラメータを説明する図である。
【図６２】  この発明の実施の形態４による各変数の値の最大値／上限値と帯域の関係を示す図である。
【図６３】  この発明の実施の形態４によるｒｅｓ＿ｒｅｓ法を示すフローチャートである。
【図６４】  この発明の実施の形態４による丸め誤差の最大値とｒｏｕｎｄ＿ｂｉａｓ＿ｉｎｔの関係を示す図である。
【図６５】  この発明の実施の形態４による丸め誤差を加算した場合のｒｅｓ＿ａｎｓ＿ｓの最大値を示す図である。
【図６６】  この発明の実施の形態４による評価指標と結果を示す図である。
【図６７】  この発明の実施の形態４によるｄｏｕｂｌｅとｒｅｓ＿ｒｅｓ法のａｎｓｗｅｒが異なる場合の数を示す図である。
【図６８】  この発明の実施の形態５によるシェーピング方法を実現する構成を示す概略図である。
【図６９】  この発明の実施の形態５による出力テーブルの一例を示す図である。
【図７０】  この発明の実施の形態５によるシェーピング方法を示すフローチャートである。
【図７１】  この発明の実施の形態６によるシェーピング方法を示すフローチャートである。
【図７２】  この発明の実施の形態６による配置番地検索処理１の処理内容を示すフローチャートである。
【図７３】  この発明の実施の形態７によるシェーピング方法を示すフローチャートである。
【図７４】  この発明の実施の形態８によるシェーピング方法を示すフローチャートである。
【図７５】  この発明の実施の形態８による配置番地検索処理２の処理内容を示すフローチャートである。
【図７６】  この発明の実施の形態９によるシェーピング方法を示すフローチャートである。
【図７７】  従来のシェーピング方法を説明する図である。
【図７８】  従来のシェーピング方法のＧＩＤ配置手順を示すフローチャートである。
【符号の説明】
１  ＣＰＵ、２  シェーピング回路、３  スイッチ部、４  入力インタフェース部、５  出力インタフェース部、１０  出力テーブル（グループ識別子配置テーブル）、１１  単位テーブル（スロット）。
【図１】
0003691297.tif 000013
【図２】
0003691297.tif 000014
【図３】
0003691297.tif 000015
【図４】
0003691297.tif 000016
【図５】
0003691297.tif 000017
【図６】
0003691297.tif 000018
【図７】
0003691297.tif 000019
【図８】
0003691297.tif 000020
【図９】
0003691297.tif 000021
【図１０】
0003691297.tif 000022
【図１１】
0003691297.tif 000023
【図１２】
0003691297.tif 000024
【図１３】
0003691297.tif 000025
【図１４】
0003691297.tif 000026
【図１５】
0003691297.tif 000027
【図１６】
0003691297.tif 000028
【図１７】
0003691297.tif 000029
【図１８】
0003691297.tif 000030
【図１９】
0003691297.tif 000031
【図２０】
0003691297.tif 000032
【図２１】
0003691297.tif 000033
【図２２】
0003691297.tif 000034
【図２３】
0003691297.tif 000035
【図２４】
0003691297.tif 000036
【図２５】
0003691297.tif 000037
【図２６】
0003691297.tif 000038
【図２７】
0003691297.tif 000039
【図２８】
0003691297.tif 000040
【図２９】
0003691297.tif 000041
【図３０】
0003691297.tif 000042
【図３１】
0003691297.tif 000043
【図３２】
0003691297.tif 000044
【図３３】
0003691297.tif 000045
【図３４】
0003691297.tif 000046
【図３５】
0003691297.tif 000047
【図３６】
0003691297.tif 000048
【図３７】
0003691297.tif 000049
【図３８】
0003691297.tif 000050
【図３９】
0003691297.tif 000051
【図４０】
0003691297.tif 000052
【図４１】
0003691297.tif 000053
【図４２】
0003691297.tif 000054
【図４３】
0003691297.tif 000055
【図４４】
0003691297.tif 000056
【図４５】
0003691297.tif 000057
【図４６】
0003691297.tif 000058
【図４７】
0003691297.tif 000059
【図４８】
0003691297.tif 000060
【図４９】
0003691297.tif 000061
【図５０】
0003691297.tif 000062
【図５１】
0003691297.tif 000063
【図５２】
0003691297.tif 000064
【図５３】
0003691297.tif 000065
【図５４】
0003691297.tif 000066
【図５５】
0003691297.tif 000067
【図５６】
0003691297.tif 000068
【図５７】
0003691297.tif 000069
【図５８】
0003691297.tif 000070
【図５９】
0003691297.tif 000071
【図６０】
0003691297.tif 000072
【図６１】
0003691297.tif 000073
【図６２】
0003691297.tif 000074
【図６３】
0003691297.tif 000075
【図６４】
0003691297.tif 000076
【図６５】
0003691297.tif 000077
【図６６】
0003691297.tif 000078
【図６７】
0003691297.tif 000079
【図６８】
0003691297.tif 000080
【図６９】
0003691297.tif 000081
【図７０】
0003691297.tif 000082
【図７１】
0003691297.tif 000083
【図７２】
0003691297.tif 000084
【図７３】
0003691297.tif 000085
【図７４】
0003691297.tif 000086
【図７５】
0003691297.tif 000087
【図７６】
0003691297.tif 000088
【図７７】
0003691297.tif 000089
【図７８】
0003691297.tif 000090