(57)【要約】本発明は、マルチバンク構成のメモリの制御において、入力時と出力時とで異なるデータ配列の組み合わせに汎用的に対応することを可能にするメモリ制御装置を提供する。そのメモリ制御装置は、汎用アドレス生成器制御情報に基づいて、第１から第Ｍのメモリそれぞれに対応する、書き込みアドレスを出力する、書込アドレス生成手段と、ＧＡＧ制御情報に基づいて、第１から第Ｍのメモリそれぞれに対応する、読み出しアドレスを出力する、読出アドレス生成手段と、ＧＡＧ制御情報に基づいて、第１から第Ｍのメモリそれぞれに書き込む入力データの組を排他的に指定する入力データ選択手段用制御情報を出力する、入力データ選択制御手段と、ＧＡＧ制御情報に基づいて、第１から第Ｍのメモリから読み出した複数のデータの組の内の各データの組を排他的に指定する、出力データ選択手段用制御情報を出力する、出力データ選択制御手段と、入力データ選択手段用制御情報に基づいて、入力データ配列の入力データの組の内の各データの組を排他的に選択し、出力する入力データ選択手段と、読み出しアドレスに対応して第１から第Ｍのメモリそれぞれから同時に読み出された複数のデータの組を受け取り、出力データ選択手段用制御情報に基づいて、受け取った複数のデータの組の内の各データの組を排他的に選択し、出力データ配列の出力データを出力する出力データ選択手段と、を備える。
2012070683.tif 000002
【特許請求の範囲】
【請求項１】
第１から第Ｍ（Ｍは２以上の任意の自然数）のメモリそれぞれに同時に書き込む複数の入力データの組の配列を指定する入力データ配列と前記第１から第Ｍのメモリから同時に読み出す複数の出力データの組の配列を指定する出力データ配列とに基づいて生成された、ベースアドレスとアドレスの増分値であるステップ数と前記ベースアドレスに対して前記ステップ数を順次加算してアドレスを生成する回数とを含むループ構造を１つ以上含む、汎用アドレス生成器制御情報（ＧＡＧ制御情報）に基づいて、第１から第Ｍのメモリそれぞれに対応する、書き込みアドレスを出力する、書込アドレス生成手段と、
前記ＧＡＧ制御情報に基づいて、前記第１から第Ｍのメモリそれぞれに対応する、読み出しアドレスを出力する、読出アドレス生成手段と、
前記ＧＡＧ制御情報に基づいて、前記第１から第Ｍのメモリそれぞれに書き込む前記入力データの組を排他的に指定する入力データ選択手段用制御情報を出力する、入力データ選択制御手段と、
前記ＧＡＧ制御情報に基づいて、前記第１から第Ｍのメモリから読み出した複数のデータの組の内の各データの組を排他的に指定する、出力データ選択手段用制御情報を出力する、出力データ選択制御手段と、
前記入力データ選択手段用制御情報に基づいて、前記入力データ配列の前記入力データの組の内の各データの組を排他的に選択し、出力する入力データ選択手段と、
前記読み出しアドレスに対応して前記第１から第Ｍのメモリそれぞれから同時に読み出された複数のデータの組を受け取り、前記出力データ選択手段用制御情報に基づいて、前記受け取った複数のデータの組の内の各データの組を排他的に選択し、前記出力データ配列の前記出力データを出力する出力データ選択手段と、を含むメモリ制御装置。
【請求項２】
前記入力データ配列及び前記出力データ配列に基づいて、前記入力データ配列の各要素が前記出力データ配列の先頭から何行目に配置されているかを示す出力タイミング配列を生成する出力タイミング配列生成手段と、
前記入力データ配列及び前記出力タイミング配列に基づいて、前記入力データ配列の各要素を前記第１から第Ｍのメモリに格納した状態を示すメモリ内データ配列を生成するメモリ配置方法決定手段と、
前記入力データ配列及び前記メモリ内データ配列に基づいて、前記入力データ配列の各要素毎の前記入力データ選択手段用制御情報及び前記書き込みアドレスを含む、書き込みアドレス配列を生成する書き込みアドレス配列生成手段と、
前記書き込みアドレス配列に基づいて、前記ＧＡＧ制御情報を生成する書き込み側ＧＡＧ制御情報生成手段と、を含むＧＡＧ制御情報自動生成手段を更に含む
請求項１記載のメモリ制御装置。
【請求項３】
前記ＧＡＧ制御情報自動生成手段は、
前記メモリ内データ配列及び前記出力データ配列に基づいて、前記メモリ内データ配列の各要素毎の前記読み出しアドレス及び前記出力データ選択手段用制御情報を含む、読み出しアドレス配列を生成する読み出しアドレス配列生成手段と、
前記読み出しアドレス配列に基づいて、前記ＧＡＧ制御情報を生成する読み出し側ＧＡＧ制御情報生成手段と、を更に含む請求項２記載のメモリ制御装置。
命令記憶手段を更に含む
請求項２記載のメモリ制御装置。
【請求項４】
前記出力データ配列は、前記第１から第Ｍのメモリからの読み出しを開始するタイミングが異なる出力データ配列であって、
前記ＧＡＧ制御情報自動生成手段は、前記出力データ配列に基づいて、前記出力データ配列の行の要素を再配置した出力タイミング情報を生成する出力タイミング情報生成手段を更に含み、
前記出力タイミング情報生成手段は、前記出力データ配列の列の内の読み出しを開始するタイミングが最も早い前記列である最早列における前記第１から第Ｍのメモリからのデータの読み出しが行われる前記出力データ配列の行の要素に対応する、前記出力データ配列の各列における前記第１から第Ｍのメモリからのデータの読み出しが行われない前記出力データ配列の行の要素に、前記最早列における読み出しの終了以後の前記出力データ配列の行の要素に対応する、前記出力データ配列の各列における前記第１から第Ｍのメモリからのデータの読み出しが行われる前記出力データ配列の行の要素を、再配置した出力タイミング情報を生成し、
前記出力タイミング配列生成手段は、前記入力データ配列及び前記出力タイミング情報に基づいて、出力タイミング配列を生成する
請求項２または３に記載のメモリ制御装置。
【請求項５】
前記書込アドレス生成手段、前記読出アドレス生成手段、前記入力データ選択制御手段及び前記出力データ選択制御手段のそれぞれに対応する前記ＧＡＧ制御情報を保持する命令記憶手段を更に含む請求項１乃至４のいずれかに記載のメモリ制御装置
【請求項６】
前記第１から第Ｍのメモリを更に含む請求項１乃至５のいずれかに記載のメモリ制御装置。
【請求項７】
メモリ制御装置が、
第１から第Ｍ（Ｍは２以上の任意の自然数）のメモリそれぞれに同時に書き込む複数の入力データの組の配列を指定する入力データ配列と前記第１から第Ｍのメモリから同時に読み出す複数の出力データの組の配列を指定する出力データ配列とに基づいて生成された、ベースアドレスとアドレスの増分値であるステップ数と前記ベースアドレスに対して前記ステップ数を順次加算してアドレスを生成する回数とを含むループ構造を１つ以上含む、汎用アドレス生成器制御情報（ＧＡＧ制御情報）に基づいて、第１から第Ｍのメモリそれぞれに対応する、書き込みアドレスを出力し、
前記ＧＡＧ制御情報に基づいて、前記第１から第Ｍのメモリそれぞれに対応する、読み出しアドレスを出力し、
前記ＧＡＧ制御情報に基づいて、前記第１から第Ｍのメモリそれぞれに書き込む前記入力データの組を排他的に指定する入力データ選択手段用制御情報を出力し、
前記ＧＡＧ制御情報に基づいて、前記第１から第Ｍのメモリから読み出した複数のデータの組の内の各データの組を排他的に指定する、出力データ選択手段用制御情報を出力し、
前記入力データ選択手段用制御情報に基づいて、前記入力データ配列の前記入力データの組の内の各データの組を排他的に選択し、出力し、
前記読み出しアドレスに対応して前記第１から第Ｍのメモリそれぞれから同時に読み出された複数のデータの組を受け取り、前記出力データ選択手段用制御情報に基づいて、前記受け取った複数のデータの組の内の各データの組を排他的に選択し、前記出力データ配列の前記出力データを出力するメモリ制御方法。
【請求項８】
ＧＡＧ制御情報自動生成手段が、
前記入力データ配列及び前記出力データ配列に基づいて、前記入力データ配列の各要素が前記出力データ配列の先頭から何行目に配置されているかを示す出力タイミング配列を生成し、
前記入力データ配列及び前記出力タイミング配列に基づいて、前記入力データ配列の各要素を前記第１から第Ｍのメモリに格納した状態を示すメモリ内データ配列を生成し、
前記入力データ配列及び前記メモリ内データ配列に基づいて、前記入力データ配列の各要素毎の前記入力データ選択手段用制御情報及び前記書き込みアドレスを含む、書き込みアドレス配列を生成し、
前記書き込みアドレス配列に基づいて、前記ＧＡＧ制御情報を生成する請求項７記載のメモリ制御方法。
【請求項９】
前記ＧＡＧ制御情報自動生成手段は、
前記メモリ内データ配列及び前記出力データ配列に基づいて、前記メモリ内データ配列の各要素毎の前記読み出しアドレス及び前記出力データ選択手段用制御情報を含む、読み出しアドレス配列を生成し、
前記読み出しアドレス配列に基づいて、前記ＧＡＧ制御情報を生成する請求項８記載のメモリ制御方法。
【請求項１０】
第１から第Ｍ（Ｍは２以上の任意の自然数）のメモリそれぞれに同時に書き込む複数の入力データの組の配列を指定する入力データ配列と前記第１から第Ｍのメモリから同時に読み出す複数の出力データの組の配列を指定する出力データ配列とに基づいて、前記入力データ配列の各要素が前記出力データ配列の先頭から何行目に配置されているかを示す出力タイミング配列を生成する処理と、
前記入力データ配列及び前記出力タイミング配列に基づいて、前記入力データ配列の各要素を前記第１から第Ｍのメモリに格納した状態を示すメモリ内データ配列を生成する処理と、
前記入力データ配列及び前記メモリ内データ配列に基づいて、前記入力データ配列の各要素毎の、前記第１から第Ｍのメモリそれぞれに書き込む前記入力データの組を排他的に指定する入力データ選択手段用制御情報及び前記第１から第Ｍのメモリそれぞれに対応する書き込みアドレスを含む、書き込みアドレス配列を生成する処理と、
前記書き込みアドレス配列に基づいて、ベースアドレスとアドレスの増分値であるステップ数と前記ベースアドレスに対して前記ステップ数を順次加算してアドレスを生成する回数とを含むループ構造を１つ以上含む、汎用アドレス生成器制御情報（ＧＡＧ制御情報）を生成する処理と、をコンピュータに実行させるメモリ制御情報生成プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリ制御装置、及びメモリ制御方法に関し、特に、複数のデータを同時に読み出し及び複数のデータを同時に書き込むメモリ制御装置、及びメモリ制御方法に関する。
【背景技術】
【０００２】
例えばマルチバンク構成のメモリの制御などにおいて、複数のデータを同時に読み出し、及び複数のデータを同時に書き込むメモリ制御の技術が、数多く開示されている。
例えば、特許文献１は、データ配列変換システムの一例を開示する。
特許文献１のデータ配列変換システムは、入力された２次元データの行と列とを入れ替えて出力するデータ配列変換システムである。
このデータ配列変換システムは、入力手段と出力手段とを有している。入力手段は、入力行列の成分を中間行列の成分に変換する。そして、入力手段は、この中間行列の行成分または列成分を複数の行または列メモリ手段に同時に書き込む。出力手段は、複数の行または列メモリ手段に保持されている中間行列の行成分または列成分を同時に読み出する。そして、出力手段は、中間行列の成分を出力行列の成分に変換し、入力行列に対して行と列とを入れ替えた出力行列を出力する。
また、例えば、特許文献２は、リストに配列されるインデックスの指すメモリバンクにアクセスすることで、規定の算出式の計算処理を実行する計算機において、同一メモリバンクへの連続アクセスを防止する技術の一例を開示する。
特許文献２の計算機は、インデックスの基数に対する剰余を求める。次に、その計算機は、そのインデックスとその剰余の規定する数値との対応関係を管理する作業配列、を作成する。同時に、その計算機は、そのインデックスとそのインデックスのリスト配列順序との対応関係を管理する作業配列、を作成する。更に、特許文献２の計算機は、規定の算出式を、特定の形式で再構成する。ここで、特定の形式は、剰余系を内側ループとし、剰余の規定する数値の出現頻度を外側ループとする、形式である。
そして、特許文献２の計算機は、作成した作業配列に示される計算順序に従ってメモリバンクにアクセスし、再構成した算出式による計算処理を実行する。
また、例えば、非特許文献１は、関連技術であるアドレス生成器に関する技術を開示する。
ある種の信号処理アルゴリズムにおいては、入力・出力のデータフォーマット（データ配列）が規定されている。そして、このような規定されたデータフォーマットのデータをメモリから自動で読み出すようにアドレスを生成するアドレス生成器がある。
このアドレス生成器を用いることにより、プロセッサがメモリアクセスの処理を行う必要がなくなり、処理サイクル数を削減できることが知られている。
このようなアドレス生成器の関連技術として、非特許文献１に示されるＧｅｎｅｒｉｃ  Ａｄｄｒｅｓｓ  Ｇｅｎｅｒａｔｏｒ（汎用アドレス生成器：ＧＡＧ）がある。そのアドレス生成器について、例を用いて、以下に具体的に説明する。
図３７は、関連する技術のアドレス生成器９００の構成を示す図である。このアドレス生成器９００は、ＧＡＧ９４０とＧＡＧ９４０の制御情報（アドレス生成コマンド）を格納するＧＡＧ用命令メモリ９３０とを有する。
ＧＡＧ用命令メモリ９３０は、ＧＡＧ制御情報９３１を含む。尚、図３７に示すＧＡＧ制御情報９３１は、ＧＡＧの制御情報の一例である。
図３７に示すように、ＧＡＧ９４０は、複数のループ構造設定を持つＧＡＧ制御情報９３１によってその動作を規定する。各ループ構造設定は、Ｂａｓｅ（ベース）値と、Ｉｎｎｅｒ  Ｌｏｏｐ（内部ループ）のＬｉｍｉｔ（リミット）値及びＳｔｅｐ（ステップ）値と、Ｏｕｔｅｒ  Ｌｏｏｐ（外部ループ）のＬｉｍｉｔ値及びＳｔｅｐ値とからなる。
本例では、図３７に示すようにＧＡＧ制御情報９３１は、ループ構造１設定とループ構造２設定とを含む。図３７に示すループ構造１設定は、例えば、Ｂａｓｅ値が「０」、Ｉｎｎｅｒ  Ｌｏｏｐ  Ｌｉｍｉｔ値及びＳｔｅｐ値がそれぞれ「２」及び「１」、Ｏｕｔｅｒ  Ｌｏｏｐ  Ｌｉｍｉｔ値及びＳｔｅｐ値がそれぞれ「２」及び「４」である。
また、ＧＡＧ９４０は、ループ構造１設定による動作を終了すると、自動的にループ構造２設定による動作を開始する。
以下、これら複数のループ構造設定をまとめて、ＧＡＧ制御情報とも呼ぶ。
図３８は、上述のループ構造１設定に基づいた、アドレス生成器９００の動作の一例を示す図である。図３８を参照して、アドレス生成器９００がどのようなアドレスを生成するかを説明する。尚、本例においては、アクセスするメモリは８ワードであるとする。
図３８を参照すると、ＧＡＧ９４０は、まず、Ｂａｓｅ値をメモリアクセスアドレスとしてセットする。具体的には、本例ではＢａｓｅ値は「０」であるので、ＧＡＧ９４０は、メモリの０番地をアクセスする（Ｓ９０１）。
次に、ＧＡＧ９４０はＩｎｎｅｒ  Ｌｏｏｐの実行を開始する。より具体的には、ＧＡＧ９４０は、Ｂａｓｅ値に対し、Ｉｎｎｅｒ  ＬｏｏｐのＬｉｍｉｔ値の回数だけＳｔｅｐ値を加算して更新しつつ、メモリにアクセスする。本例では、Ｉｎｎｅｒ  ＬｏｏｐのＬｉｍｉｔ値が「２」、Ｓｔｅｐ値が「１」である。従って、ＧＡＧ９４０は、まず、Ｂａｓｅ値に「１」を加算してメモリの１番地をアクセスし、次に、更にもう一度「１」を加算してメモリの２番地をアクセスする（Ｓ９０２）。
Ｉｎｎｅｒ  Ｌｏｏｐの処理を終了すると、ＧＡＧ９４０は、次にＯｕｔｅｒ  Ｌｏｏｐを実行する。より具体的には、Ｉｎｎｅｒ  Ｌｏｏｐの実行が終了すると、ＧＡＧ９４０は、Ｏｕｔｅｒ  ＬｏｏｐのＬｉｍｉｔ値をデクリメントする。続けて、ＧＡＧ９４０は、Ｏｕｔｅｒ  ＬｏｏｐのＬｉｍｉｔ値をチェックする。そして、そのＬｉｍｉｔ値が「０」でない場合、ＧＡＧ９４０は、Ｂａｓｅ値をＯｕｔｅｒ  ＬｏｏｐのＳｔｅｐ値「４」で更新し、更新した新たなＢａｓｅ値に基づいて、Ｉｎｎｅｒ  Ｌｏｏｐを実行する。
本例においては、Ｏｕｔｅｒ  ＬｏｏｐのＬｉｍｉｔ値の初期値は、「２」である。１回目のＩｎｎｅｒ  Ｌｏｏｐが終了すると、ＧＡＧ９４０は、そのＬｉｍｉｔ値から「１」デクリメントし、そのＬｉｍｉｔ値は「１」となる。ここで、Ｌｉｍｉｔ値が「０」でないため、ＧＡＧ９４０は、ＢａｓｅをＯｕｔｅｒ  ＬｏｏｐのＳｔｅｐ値で更新する。ここで、Ｏｕｔｅｒ  ＬｏｏｐのＳｔｅｐ値は「４」なので、新たなＢａｓｅ値は「４」となる（Ｓ９０３）。
次に、ＧＡＧ９４０は、再度Ｉｎｎｅｒ  Ｌｏｏｐを実行する（Ｓ９０４）。
Ｉｎｎｅｒ  Ｌｏｏｐが終了すると、ＧＡＧ９４０は、Ｏｕｔｅｒ  ＬｏｏｐのＬｉｍｉｔ値を「１」デクリメントする。ここで、Ｌｉｍｉｔ値が「０」となるので、ＧＡＧ９４０は、Ｏｕｔｅｒ  Ｌｏｏｐの処理を終了する。
このようなアドレス生成器９００を利用して、メモリアクセスを行うようにすることにより、プロセッサの負担を軽減することができる。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００３−２０８４１５号公報
【特許文献２】特開２０００−０３５８９２号公報
【非特許文献】
【０００４】
【非特許文献１】Ｒｅｉｎｅｒ  Ｗ．Ｈａｒｔｅｎｓｔｅｉｎ，Ｍｉｃｈａｅｌ  Ｈｅｒｚ，Ｔｈｏｍａｓ  Ｈｏｆｆｍａｎ，Ｕｌｒｉｃｈ  Ｎａｇｅｌｄｉｎｇｅｒ  ：  Ｅｘｐｌｏｉｔｉｎｇ  Ｃｏｎｔｅｍｐｏｒａｒｙ  Ｍｅｍｏｒｙ  Ｔｅｃｈｎｉｑｕｅｓ  ｉｎ  Ｒｅｃｏｎｆｉｇｕｒａｂｌｅ  Ａｃｃｅｌｅｒａｔｏｒｓ，Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ８ｔｈ  Ｉｎｔｅｒｎａｔｉｏｎａｌ  ｗｏｒｋｓｈｏｐ  ｏｎ  Ｆｉｅｌｄ−Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  ａｎｄ  Ａｐｐｌｉｃａｔｉｏｎｓ，ＦＰＬ’９８，Ｔａｌｌｉｎ，Ｅｓｔｏｎｉａ，Ａｕｇｕｓｔ  ３１  −  Ｓｅｐｔｅｍｂｅｒ  ３，１９９８
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、上述した技術文献に記載された技術は、マルチバンク構成のメモリの制御において、入力（メモリへの書き込み）時と出力（メモリからの読み出し）時とでデータ配列が異なる場合、対応可能なデータ配列の組み合わせが非常に限定されている、という問題点を有する。
その理由は、上述の技術文献に記載された技術は、入力時と出力時とで異なるデータ配列の組み合わせに、汎用的に対応することができないためである。このことを、以下に、具体的に説明する。
特許文献１に開示されたデータ配列変換システムは、特定の変換のみを可能としている。その特定の変換は、入力のデータフォーマットが２のＮ乗行と２のＮ乗列とからなる２次元データ配列であり、かつ出力のデータフォーマットが入力データフォーマットの行と列とを入れ替えた配列である、変換である。
特許文献２に開示された計算機における作業配列の作成の技術は、入力・出力のデータフォーマットが規定されたデータ配列の変換に適したものではない。
非特許文献１に示されるＧＡＧは、複数組のデータ群を格納しているメモリから、メモリに格納されて配列とは異なる配列で、一度に一組のデータを順次読み出す場合の読み出しアドレスを生成することができる。また、このＧＡＧは、保持している複数組のデータ群を、保持している配列とは異なる配列で、一度に一組のデータを順次メモリに書き込む場合の書き込みアドレスを生成することができる。
一方、高度に最適化された信号処理用回路において、一度に複数組のデータを並列に読み出すこと、及び一度に複数組のデータを書き込むことが必要とされる場合がある。このような場合、メモリの構成は、通常マルチバンク構成である。
更に、マルチバンク構成のメモリ制御は、メモリアクセスのスループット低下を防止するため、同時に読み出される複数組のデータの配列を考慮して、一度に書き込む複数組のデータを格納するバンクを決定する機能を有していることが望ましい。即ち、マルチバンク構成のメモリ制御は、どのポートから入力された一組のデータをどのメモリバンクに書き込むかを選択する機能を有していることが望ましい。更に、マルチバンク構成のメモリ制御は、どのバンクから読み出した一組のデータをどのポートに出力するかを選択する機能を有していることが望ましい。しかし、非特許文献１に示されるＧＡＧは、そのような機能は有していない。
即ち、マルチバンク構成のメモリの制御において、上述の技術文献に記載された技術により対応可能な、入力時と出力時とで異なるデータフォーマットの組み合わせは、２次元データ配列の行と列とを入れ替えたデータフォーマットの組み合わせのみ、であるためである。
本発明の目的は、上述した問題点を解決できるメモリ制御装置、及びメモリ制御方法を提供することにある。
【課題を解決するための手段】
【０００６】
本発明のメモリ制御装置は、第１から第Ｍ（Ｍは２以上の任意の自然数）のメモリそれぞれに同時に書き込む複数の入力データの組の配列を指定する入力データ配列と前記第１から第Ｍのメモリから同時に読み出す複数の出力データの組の配列を指定する出力データ配列とに基づいて生成された、ベースアドレスとアドレスの増分値であるステップ数と前記ベースアドレスに対して前記ステップ数を順次加算してアドレスを生成する回数とを含むループ構造を１つ以上含む、汎用アドレス生成器制御情報（ＧＡＧ制御情報）に基づいて、第１から第Ｍのメモリそれぞれに対応する、書き込みアドレスを出力する、書込アドレス生成手段と、
前記ＧＡＧ制御情報に基づいて、前記第１から第Ｍのメモリそれぞれに対応する、読み出しアドレスを出力する、読出アドレス生成手段と、
前記ＧＡＧ制御情報に基づいて、前記第１から第Ｍのメモリそれぞれに書き込む前記入力データの組を指定する入力データ選択手段用制御情報を出力する、入力データ選択制御手段と、
前記ＧＡＧ制御情報に基づいて、前記第１から第Ｍのメモリから読み出した複数のデータの組の内の各データの組を排他的に指定する、出力データ選択手段用制御情報を出力する、出力データ選択制御手段と、
前記入力データ選択手段用制御情報に基づいて、前記入力データ配列の前記入力データの組の内の各データの組を排他的に選択し、出力する入力データ選択手段と、
前記読み出しアドレスに対応して前記第１から第Ｍのメモリそれぞれから同時に読み出された複数のデータの組を受け取り、前記出力データ選択手段用制御情報に基づいて、前記受け取った複数のデータの組の内の各データの組を排他的に選択し、前記出力データ配列の前記出力データを出力する出力データ選択手段と、を含む。
本発明のメモリ制御方法は、メモリ制御装置が、
第１から第Ｍ（Ｍは２以上の任意の自然数）のメモリそれぞれに同時に書き込む複数の入力データの組の配列を指定する入力データ配列と前記第１から第Ｍのメモリから同時に読み出す複数の出力データの組の配列を指定する出力データ配列とに基づいて生成された、ベースアドレスとアドレスの増分値であるステップ数と前記ベースアドレスに対して前記ステップ数を順次加算してアドレスを生成する回数とを含むループ構造を１つ以上含む、汎用アドレス生成器制御情報（ＧＡＧ制御情報）に基づいて、第１から第Ｍのメモリそれぞれに対応する、書き込みアドレスを出力し、
前記ＧＡＧ制御情報に基づいて、前記第１から第Ｍのメモリそれぞれに対応する、読み出しアドレスを出力し、
前記ＧＡＧ制御情報に基づいて、前記第１から第Ｍのメモリそれぞれに書き込む前記入力データの組を排他的に指定する入力データ選択手段用制御情報を出力し、
前記ＧＡＧ制御情報に基づいて、前記第１から第Ｍのメモリから読み出した複数のデータの組の内の各データの組を排他的に指定する、出力データ選択手段用制御情報を出力し、
前記入力データ選択手段用制御情報に基づいて、前記入力データ配列の前記入力データの組の内の各データの組を排他的に選択し、出力し、
前記読み出しアドレスに対応して前記第１から第Ｍのメモリそれぞれから同時に読み出された複数のデータの組を受け取り、前記出力データ選択手段用制御情報に基づいて、前記受け取った複数のデータの組の内の各データの組を排他的に選択し、前記出力データ配列の前記出力データを出力する。
本発明のメモリ制御情報生成プログラムは、第１から第Ｍ（Ｍは２以上の任意の自然数）のメモリそれぞれに同時に書き込む複数の入力データの組の配列を指定する入力データ配列と前記第１から第Ｍのメモリから同時に読み出す複数の出力データの組の配列を指定する出力データ配列とに基づいて、前記入力データ配列の各要素が前記出力データ配列の先頭から何行目に配置されているかを示す出力タイミング配列を生成する処理と、
前記入力データ配列及び前記出力タイミング配列に基づいて、前記入力データ配列の各要素を前記第１から第Ｍのメモリに格納した状態を示すメモリ内データ配列を生成する処理と、
前記入力データ配列及び前記メモリ内データ配列に基づいて、前記入力データ配列の各要素毎の、前記第１から第Ｍのメモリそれぞれに書き込む前記入力データの組を排他的に指定する入力データ選択手段用制御情報及び前記第１から第Ｍのメモリそれぞれに対応する書き込みアドレスを含む、書き込みアドレス配列を生成する処理と、
前記書き込みアドレス配列に基づいて、ベースアドレスとアドレスの増分値であるステップ数と前記ベースアドレスに対して前記ステップ数を順次加算してアドレスを生成する回数とを含むループ構造を１つ以上含む、ＧＡＧ制御情報を生成する処理と、をコンピュータに実行させる。
【発明の効果】
【０００７】
本発明は、マルチバンク構成のメモリの制御において、入力時と出力時とで異なるデータ配列の組み合わせに汎用的に対応することを可能にするという効果がある。
【図面の簡単な説明】
【０００８】
【図１】図１は、本発明の第１の実施形態の構成を示すブロック図である。
【図２】図２は、本発明の第１乃至第３の実施形態のシャッフル回路の構成を示すブロック図である。
【図３】図３は、本発明の第１乃至第３の実施形態の２−Ｄ  ＧＡＧの構成を示すブロック図である。
【図４】図４は、本発明の第２の実施形態における入力データ配列の例を示す図である。
【図５】図５は、本発明の第２の実施形態における出力データ配列の例を示す図である。
【図６】図６は、本発明の第１の実施形態の具体的な構成を示すブロック図である。
【図７】図７は、本発明の第１及び第３の実施形態におけるデータ入力側の動作を示すタイムチャートである。
【図８】図８は、本発明の第１の実施形態におけるデータ出力側の動作を示すタイムチャートである。
【図９】図９は、本発明の第２の実施形態の構成を示すブロック図である。
【図１０】図１０は、本発明の第２の実施形態における入力データ配列の例を示す図である。
【図１１】図１１は、本発明の第２の実施形態における出力データ配列の例を示す図である。
【図１２】図１２は、本発明の第２の実施形態のＧＡＧ制御情報自動生成部の動作を示すフローチャートである。
【図１３】図１３は、本発明の第２の実施形態の出力タイミング配列生成ステップの動作を示す擬似コードのリストである。
【図１４】図１４は、本発明の第２の実施形態のｃａｌｃ＿ｄｅｌａｙ関数の動作を示す擬似コードのリストである。
【図１５】図１５は、本発明の第２の実施形態のメモリ配置方法決定ステップの動作を示す擬似コードのリストである。
【図１６】図１６は、本発明の第２の実施形態のｉｎｉｔｉａｌｉｚｅ＿ｄａｔａ関数の動作を示す擬似コードのリストである。
【図１７】図１７は、本発明の第２の実施形態のｄｏ＿ｓｈｕｆｆｌｅ関数の動作を示す擬似コードのリストである。
【図１８】図１８は、本発明の第２の実施形態のｄｓｅａｒｃｈ＿ｖａｃ＿ｃｏｌ関数の動作を示す擬似コードのリストである。
【図１９】図１９は、本発明の第２の実施形態の書き込み側ＧＡＧ制御情報生成ステップの動作を示す擬似コードのリストである。
【図２０】図２０は、本発明の第２の実施形態のｍｋ＿ａｄｄｒ＿ｍａｐ関数の動作を示す擬似コードのリストである。
【図２１】図２１は、本発明の第２の実施形態の関数ｍｋ＿ａｄｒ＿ｍａｐ＿ｓｕｂ関数の動作を示す擬似コードのリストである。
【図２２】図２２は、本発明の第２の実施形態のｌｏｏｐ＿ａｎａｌｙｚｅｒ関数の動作を示す擬似コードのリストである。
【図２３】図２３は、本発明の第２の実施形態のｉｌｏｏｐ＿ａｎａｌｙｚｅ関数の動作を示す擬似コードのリストである。
【図２４】図２４は、本発明の第２の実施形態のｏｌｏｏｐ＿ａｎａｌｙｚｅ関数の動作を示す擬似コードのリストである。
【図２５】図２５は、本発明の第２の実施形態の読み出しアドレス配列生成ステップの動作を示す擬似コードのリストである。
【図２６】図２６は、本発明の第２の実施形態における入力データ配列及び出力データ配列と出力タイミング配列との関係の例を示す図である。
【図２７】図２７は、本発明の第２の実施形態におけるメモリ内データ配列を生成するプロセスの一部を示す図である。
【図２８】図２８は、本発明の第２の実施形態における入力データ配列７０２及びメモリ内データ配列７２１と、書き込みアドレス配列７３１との関係の例を示す図である。
【図２９】図２９は、本発明の第２の実施形態におけるループ構造分析のプロセスの例の一部を示した図である。
【図３０】図３０は、本発明の第２の実施形態におけるループ構造分析のプロセスの例の一部を示した図である。
【図３１】図３１は、本発明の第２の実施形態におけるメモリ内データ配列及び出力データ配列と読み出しアドレス配列との関係の例を示す図である。
【図３２】図３２は、本発明の第３の実施形態の構成を示すブロック図である。
【図３３】図３３は、本発明の第３の実施形態におけるメモリ内データ配列及び出力データ配列と読み出しアドレス配列と関係の例を示す図である。
【図３４】図３４は、本発明の第３の実施形態におけるデータ出力側の動作を示すタイムチャートである。
【図３５】図３５は、本発明の第４の実施形態の構成を示すブロック図である。
【図３６】図３６は、本発明の第６の実施形態の構成を示すブロック図である。
【図３７】図３７は、関連する技術の、アドレス生成器の構成を示す図である。
【図３８】図３８は、関連する技術の、アドレス生成器の動作の一例を示す図である。
【図３９】図３９は、本発明の第２の実施形態における入力データ配列の例を示す図である。
【図４０】図４０は、本発明の第５の実施形態の構成を示すブロック図である。
【図４１】図４１は、本発明の第５の実施形態のデータ保持出力回路の構成を示すブロック図である。
【図４２】図４２は、本発明の第５の実施形態のリード  ２−Ｄ  ＧＡＧの構成を示すブロック図である。
【図４３】図４３は、本発明の第５の実施形態のＧＡＧ制御情報自動生成部の動作を示すフローチャートである。
【図４４】図４４は、本発明の第２の実施形態のＧＡＧ制御情報自動生成部の出力タイミング情報生成ステップの詳細な動作を示すフローチャートである。
【図４５】図４５は、本発明の第２の実施形態のＧＡＧ制御情報自動生成部の前部有効領域及び後部有効領域を算出するステップの詳細な動作を示すフローチャートである。
【図４６】図４６は、本発明の第２の実施形態のＧＡＧ制御情報自動生成部の出力タイミング情報を生成するステップの詳細な動作を示すフローチャートである。
【図４７】図４７は、本発明の第５の実施形態におけるリタイミングデータの例を示す図である。
【図４８】図４８は、本発明の第５の実施形態におけるリタイミングデータの例を示す図である。
【図４９】図４９は、本発明の第５の実施形態におけるリタイミングデータの例を示す図である。
【図５０】図５０は、本発明の第５の実施形態におけるリタイミングデータの例を示す図である。
【図５１】図５１は、本発明の第５の実施形態における出力タイミング情報の例を示す図である。
【発明を実施するための形態】
【０００９】
次に、本発明の実施形態について図面を参照して詳細に説明する。
以下の説明において、複数の同一モジュールを区別して説明する必要がある場合、符号に続けて「＃識別番号」の形式でサフィックスを付加して表記する。例えば、制御回路９９９というモジュールが２つあり、これを区別して説明する場合、制御回路９９９＃１、制御回路９９９＃２と表記する。複数の同一モジュールを区別しないで説明する場合（例えば、全ての制御回路９００について説明する場合）、サフィックスを付加しないで単に制御回路９９９と表記する。また、例えば、制御回路９９９＃０〜制御回路９９９＃（Ｍ−１）を、制御回路９９９＃０〜＃（Ｍ−１）とも表記する。但し、Ｍは２以上の自然数とする。
［第１の実施の形態］
図１は、本発明の第１の実施形態の構成を示すブロック図である。
図１を参照すると、本実施形態に係るデータ保持出力回路１００は、Ｗｒｉｔｅ  ２−Ｄ  ＧＡＧ（書込２次元汎用アドレス生成器）２１０、リード  ２−Ｄ  ＧＡＧ（読出２次元汎用アドレス生成器）２２０、シャッフル回路３００＃１〜＃２及びメモリ４００＃０〜＃（Ｍ−１）を含む。
メモリ４００は、例えば、マルチバンク構造のメモリの各バンクである。メモリ４００は、例えば、ワードアドレスで示される番地に、ワード単位のデータ（データの組、入力データの組及び出力データの組とも呼ばれる）を記憶する。
次に、シャッフル回路３００について、図２を用いて説明する。図２は、シャッフル回路３００の構造を示すブロック図である。
シャッフル回路３００は、Ｍ個の入力ポート３１１、Ｍ個の入力に対し１つを選択するＭ個のＭ：１  セレクタ（Ｍ対１セレクタ）３１０及びＭ個の出力ポート３１２を含む。シャッフル回路３００は、Ｍ個の入力ポート３１１に、Ｍ個のシャッフル前データＢＳ＃０〜＃（Ｍ−１）を受け取る。また、シャッフル回路３００のＭ個のＭ：１  セレクタ３１０＃０〜＃（Ｍ−１）は、Ｍ個のシャッフル回路用制御情報ＢＡ＃０〜＃（Ｍ−１）を受け取る。
シャッフル前データＢＳ＃０〜＃（Ｍ−１）は、シャッフル回路３００＃１の場合、外部からシャッフル回路３００に入力される入力データＩＤ＃０〜＃（Ｍ−１）である。シャッフル前データＢＳ＃０〜＃（Ｍ−１）は、シャッフル回路３００＃２の場合、メモリ４００＃０〜＃（Ｍ−１）から出力されるメモリ出力データＭＯ＃０〜＃（Ｍ−１）である。シャッフル回路用制御情報ＢＡ＃０〜＃（Ｍ−１）は、「０」〜「（Ｍ−１）」の値のいずれかを、それぞれ排他的に持つ。
シャッフル回路３００は、受け取ったシャッフル前データＢＳ＃０〜＃（Ｍ−１）をそれぞれＭ分岐し、各Ｍ：１  セレクタ３１０＃０〜＃（Ｍ−１）にシャッフル前データＢＳ＃０〜＃（Ｍ−１）を入力する。また、シャッフル回路３００は、Ｍ：１  セレクタ３１０＃０〜＃（Ｍ−１）それぞれに、受け取ったシャッフル回路用制御情報ＢＡ＃０〜＃（Ｍ−１）をそれぞれ入力する。
各Ｍ：１  セレクタ３１０＃０〜＃（Ｍ−１）は、シャッフル回路用制御情報ＢＡ＃０〜＃（Ｍ−１）に基づいて、シャッフル前データＢＳ＃０〜＃（Ｍ−１）の内のいずれか１つを、それぞれ選択する。尚、シャッフル回路３００＃１に入力されるシャッフル回路用制御情報ＢＡは、入力データ選択部用制御情報とも呼ばれる。また、シャッフル回路３００＃１に入力されるシャッフル回路用制御情報ＢＡは、出力データ選択部用制御情報とも呼ばれる。
そして、各Ｍ：１  セレクタ３１０＃０〜＃（Ｍ−１）は、選択した１つのシャッフル前データＢＳ＃０〜＃（Ｍ−１）を、それぞれシャッフル後データＡＳ＃０〜＃（Ｍ−１）として、各出力ポート３１２から出力する。シャッフル後データＡＳ＃０〜＃（Ｍ−１）は、シャッフル回路３００＃１の場合、メモリ４００＃０〜＃（Ｍ−１）に出力するメモリ入力データＭＩ＃０〜＃（Ｍ−１）である。シャッフル後データＡＳ＃０〜＃（Ｍ−１）は、シャッフル回路３００＃２の場合、シャッフル回路３００から外部へ出力する出力データＯＤ＃０〜＃（Ｍ−１）である。
次に、ライト  ２−Ｄ  ＧＡＧ２１０及びリード  ２−Ｄ  ＧＡＧ２２０について、図３を用いて説明する。以後、ライト  ２−Ｄ  ＧＡＧ２１０及びリード  ２−Ｄ  ＧＡＧ２２０を総称して２−Ｄ  ＧＡＧ２００とも呼ぶ。図３は、２−Ｄ  ＧＡＧ２００の構造を示すブロック図である。
２−Ｄ  ＧＡＧ２００は、シャッフル回路用制御情報生成器２０１及びメモリ用ワードアドレス生成器２０２を含む。シャッフル回路用制御情報生成器２０１及びメモリ用ワードアドレス生成器２０２は、それぞれ、Ｍ個の命令メモリ（ＧＡＧ用命令メモリ）２０３と、Ｍ個のＧＡＧ２０４とを含む。各命令メモリ２０３は、ＧＡＧ制御情報２０５を保持する。
命令メモリ２０３とＧＡＧ２０４との組み合わせは、各々、背景技術において図３７及び図３８を用いて説明したアドレス生成器９００と同様の動作を行う。
ＧＡＧ制御情報２０５は、例えば、関連技術として説明した図３７に示すようなＧＡＧ制御情報９３１と同様の情報である。ＧＡＧ制御情報２０５は、例えば、図４に示すような入力データ配列７０２と図５に示すような出力データ配列に基づいて、生成された情報である。
ＧＡＧ制御情報２０５は、ループ構造を１つ以上含む。そのループ構造は、例えば、ベースアドレスとアドレスの増分値であるステップ数とそのベースアドレスに対してそのステップ数を順次加算してアドレスを生成する回数とを含むループ構造である。
図４は、入力データ配列７０２の例を示す図である。図４に示すように、入力データ配列７０２は、例えば、それぞれＡ〜Ｐのインデックスが割り当てられた配列である。入力データ配列７０２は、例えば、メモリ４００＃０〜＃（Ｍ−１）それぞれに、同時に書き込む複数ワードの入力データの配列を指定する。
図５は、出力データ配列７０３の例を示す図である。図５に示すように、出力データ配列７０３は、例えば、それぞれＡ〜Ｐのインデックスが割り当てられた配列である。出力データ配列７０３は、例えば、メモリ４００＃０〜＃（Ｍ−１）から同時に読み出す複数ワードのデータを出力する際の、出力データの配列を指定する。
ライト  ２−Ｄ  ＧＡＧ２１０のシャッフル回路用制御情報生成器２０１は、対応するＧＡＧ制御情報２０５に基づいて、シャッフル回路用制御情報ＢＡ＃０〜＃（Ｍ−１）をシャッフル回路３００＃１に出力する。また、メモリ用ワードアドレス生成器２０２は、対応するＧＡＧ制御情報２０５に基づいて、メモリ用ワードアドレスＷＡ＃０〜＃（Ｍ−１）を、出力する。図１に示すように、メモリ用ワードアドレス生成器２０２は、メモリ用ワードアドレスＷＡ＃０〜＃（Ｍ−１）それぞれをメモリ入力用ワードアドレスＩＷＡ＃０〜＃（Ｍ−１）として、Ｍ個のメモリ４００＃０〜＃（Ｍ−１）にそれぞれ出力する。尚、メモリ４００＃０〜＃（Ｍ−１）は、これらメモリ入力用ワードアドレスＩＷＡ＃０〜＃（Ｍ−１）が示す番地に、シャッフル回路３００＃１から出力されたメモリ入力データＭＩ＃０〜＃（Ｍ−１）を書き込む。
リード  ２−Ｄ  ＧＡＧ２２０のシャッフル回路用制御情報生成器２０１は、対応するＧＡＧ制御情報２０５に基づいて、シャッフル回路用制御情報ＢＡ＃０〜＃（Ｍ−１）をシャッフル回路３００＃２に出力する。また、メモリ用ワードアドレス生成器２０２は、対応するＧＡＧ制御情報２０５に基づいて、メモリ用ワードアドレスＷＡ＃０〜＃（Ｍ−１）を、出力する。図１に示すように、メモリ用ワードアドレス生成器２０２は、メモリ用ワードアドレスＷＡ＃０〜＃（Ｍ−１）それぞれをメモリ出力用ワードアドレスＯＷＡ＃０〜＃（Ｍ−１）として、Ｍ個のメモリ４００＃０〜＃（Ｍ−１）にそれぞれ出力する。尚、メモリ４００＃０〜＃（Ｍ−１）は、これらメモリ出力用ワードアドレスＯＷＡ＃０〜＃（Ｍ−１）が示す番地からデータを読み出し、メモリ出力データＭＯ＃０−＃（Ｍ−１）として、シャッフル回路３００＃２に出力する。
次に、本実施形態の動作について、図２〜図８を参照して詳細に説明する。
尚、本実施形態の動作の説明において、前提を以下の例のとおりであると仮定する。
データ保持出力回路１００は、例えば、４つのメモリ４００＃０〜＃３を含む。即ち、図４のデータ保持出力回路１００は、図１に示すデータ保持出力回路１００において、Ｍ＝４とした場合のデータ保持出力回路１００である。
データ配列の変換対象の入力データは、例えば、行方向に「４」の、列方向に「４」の、行列の要素に対応し、１６個である。出力データも同様である。ここで、行方向は、メモリ４００の数に対応し、同じタイミングでデータが入力される。また、列方向は、メモリ４００のワードアドレスに対応する。
命令メモリ２０３、及びメモリ４００は、制御情報及びデータを格納するために必要十分な領域を有している。
命令メモリ２０３は、例えば、ＧＡＧ制御情報２０５を、ＧＡＧ２０４が動作する際に使用する順番で、命令メモリ２０３の先頭から順に保持している。
また、ライト  ２−Ｄ  ＧＡＧ２００のシャッフル回路用制御情報生成器２０１のＧＡＧ２０４は、例えば、データ保持出力回路１００に入力データが入力されるタイミングと同じタイミングで、シャッフル回路用制御情報ＢＡ＃０〜＃３を出力する。
更に、ライト  ２−Ｄ  ＧＡＧ２００のメモリ用ワードアドレス生成器２０２のＧＡＧ２０４は、例えば、シャッフル回路用制御情報ＢＡ＃０〜＃３の出力を開始した次のサイクルから、メモリ入力用ワードアドレスＩＷＡ＃０〜＃３を出力する。
また、リード  ２−Ｄ  ＧＡＧ２２０のメモリ用ワードアドレス生成器２０２のＧＡＧ２０４は、例えば、メモリ４００＃０〜＃３に全データが溜まった次のサイクルから、メモリ出力用ワードアドレスＯＷＡ＃０〜＃３を出力する。
更に、リード  ２−Ｄ  ＧＡＧ２２０のシャッフル回路用制御情報生成器２０１のＧＡＧ２０４は、例えば、メモリ出力用ワードアドレスＯＷＡ＃０〜＃３の出力が開始された次のサイクルから、シャッフル回路用制御情報ＢＡ＃０〜＃３を出力する。
また、シャッフル回路用制御情報ＢＡ＃０〜＃３は、例えば、１〜４の整数である。そして、各Ｍ：１  セレクタ３１０は、入力されたシャッフル前データＢＳ＃０〜＃３の内、その識別番号（＃の後の数字）が、シャッフル回路用制御情報ＢＡから「１」減算した値と一致する、シャッフル前データＢＳを選択し出力する。
更に、各メモリ４００＃０〜＃３のアドレスは、例えば、先頭番地を「１」として、ワード単位で「１」ずつ増加する値である。
メモリ４００は、例えば、メモリ入力用ワードアドレスＩＷＡに対応する番地に、入力されたデータを格納する。
更に、メモリ４００は、例えば、メモリ出力用ワードアドレスＯＷＡを受け取った次のサイクルに、そのメモリ出力用ワードアドレスＯＷＡに対応する番地に格納されているデータを読み出し、出力する。
以上を前提として、本実施形態の動作を説明する。
図６は、上述の前提に基づく、本実施形態の具体的な構成の例を示すブロック図である。
上述の前提に基づいて、各情報及びデータ線は４組である。尚、以下の説明において、メモリ４００に入力するデータをメモリ入力データＭＩ、メモリ４００から出力するデータをメモリ出力データと呼ぶ。
まず、データ入力側の動作を説明する。
図７は、データ入力側（ライト  ２−Ｄ  ＧＡＧ２１０及びシャッフル回路３００＃１）の動作を示すタイムチャートである。図７を参照すると、最上部の数字はクロックの番号を示し、その下の信号はクロック信号を示し、それ以下の信号は各信号線から出力されるデータ及び制御情報を示す。
まず、クロック０〜３において、入力データＩＤ＃０〜＃３（シャッフル前データＢＳ＃０〜＃３）が入力される。これに応じて、ライト  ２−Ｄ  ＧＡＧ２１０は、シャッフル回路用制御情報ＢＡ＃０〜＃３を出力する。このシャッフル回路用制御情報ＢＡ＃０〜＃３は、前述のとおり、各Ｍ：１  セレクタ３１０＃０〜＃（Ｍ−１）がシャッフル回路３００＃１に入力されたシャッフル前データＢＳ＃０〜＃３の内のどれを選択するかを指示する。
シャッフル回路３００は、シャッフル回路用制御情報ＢＡ＃０〜＃３に基づいて、メモリ入力データＭＩ＃０〜＃３（シャッフル後データＡＳ＃０〜＃３）を出力する。
次に、ライト  ２−Ｄ  ＧＡＧ２１０は、メモリ入力用ワードアドレスＩＷＡ＃０〜＃３をメモリ４００＃０〜＃３に出力する。このメモリ入力用ワードアドレスＩＷＡ＃０〜＃３は、前述のとおり、シャッフル後データＡＳ＃０〜＃３をメモリ４００＃０〜＃３のどのワードに格納するかを指示する。メモリ４００＃０〜＃３は、メモリ入力用ワードアドレスＩＷＡ＃０〜＃３に基づいて、シャッフル後データＡＳ＃０〜＃３を格納する。
次に、データ出力側の動作を説明する。
図８は、データ出力側（リード  ２−Ｄ  ＧＡＧ２２０、シャッフル回路３００＃２及びメモリ４００＃０〜＃３）の動作を示すタイムチャートである。図８を参照すると、最上部の数字はクロックの番号を示し、その下の信号はクロック信号を示し、それ以下の信号は各信号線から出力されるデータ及び制御情報を示す。
まず、上述の入力側の動作によって、１６個の全ての入力データがメモリに書き込まれると、リード  ２−Ｄ  ＧＡＧ２２０は、メモリ出力用ワードアドレスＯＷＡ＃０〜＃３を出力する。このメモリ出力用ワードアドレスＯＷＡ＃０〜＃３は前述のとおり、シャッフル前データＢＳ＃０〜＃３をメモリ４００＃０〜＃３のどのワードから読み出すかを指示する。メモリ４００＃０〜＃３は、メモリ出力用ワードアドレスＯＷＡ＃０〜＃３に基づいて、シャッフル前データＢＳ＃０〜＃３（ＭＯ＃０〜＃３）を出力する
次に、リード  ２−Ｄ  ＧＡＧ２２０は、シャッフル回路用制御情報ＢＡ＃０〜＃３を出力する。これらに基づいて、シャッフル回路３００＃２は、上述のシャッフル回路３００＃１と同様に動作し、出力データＯＤ＃０〜＃３（シャッフル後データＡＳ＃０〜＃３）を出力する。
尚、本実施形態においては前述のような前提であると仮定したが、本実施形態で示す機能と同等のものが実現できる場合、これに限る必要はない。例えば、ＧＡＧ２０４は、ＧＡＧ用の命令メモリ２０３に対して、ＧＡＧ制御情報２０５を読み出す位置を示す情報を入力し、動作開始時にその位置からＧＡＧ制御情報２０５を読み出すようにしてもよい。
上述した本実施形態における効果は、マルチバンク構成のメモリの制御において、入力時と出力時とで異なるデータ配列の組み合わせに汎用的に対応することを可能にする点である。
その理由は、以下のような構成を含むからである。即ち、第１に、データ入力時において、ライト  ２−Ｄ  ＧＡＧ２１０及びシャッフル回路３００＃１が、同時に入力された入力パターン配列の複数ワードの入力データそれぞれを、ＧＡＧ制御情報に基づいて排他的に選択し、複数のメモリ４００に格納する。第２に、データ出力時において、リード  ２−Ｄ  ＧＡＧ２２０及びシャッフル回路３００＃２が、複数のメモリ４００から同時に出力する複数の出力データそれぞれを、ＧＡＧ制御情報に基づいて排他的に選択し、出力ポートに出力パターン配列の出力データを出力する。
［第２の実施の形態］
次に、本発明の第２の実施形態について、図面を参照して詳細に説明する。以下、本実施形態の説明が不明確にならない範囲で、前述の説明と重複する内容については省略する。
図９は、本発明の第２の実施形態の構成を示すブロック図である。
第２の実施形態は、第１の実施形態の要素に加えて、ＧＡＧ制御情報２０５を生成するＧＡＧ制御情報自動生成部５００を有する。尚、データ保持出力回路１００とＧＡＧ制御情報自動生成部５００とは、併せてメモリ制御装置とも呼ばれる。
ＧＡＧ制御情報自動生成部５００は、データ保持出力回路１００のスループットを最大にするＧＡＧ制御情報２０５を生成する。
このデータ保持出力回路１００のスループットは、全てのメモリ４００が常に出力データを出力している状態の時に最大である。同時に読み出す出力データが全て別々のメモリ４００に格納されている場合に、全てのメモリ４００は、常に出力データを出力する。
従って、ライト  ２−Ｄ  ＧＡＧ２１０は、シャッフル回路用制御情報ＢＡを生成する。そのシャッフル回路用制御情報ＢＡは、出力時に同時にメモリ４００から出力する出力データＯＤとなる、入力データＩＤを別々のメモリ４００に分散させるように、シャッフル回路３００＃１を動作させる。同時に、ライト  ２−Ｄ  ＧＡＧ２１０は、更にメモリ４００に書き込むためのメモリ入力用ワードアドレスを生成する。
また、リード  ２−Ｄ  ＧＡＧ２２０は、同時に出力する出力データＯＤ＃０〜＃（Ｍ−１）を、適切なメモリ４００から読み出すためのメモリ出力用ワードアドレスを生成する。同時に、リード  ２−Ｄ  ＧＡＧ２２０は、読み出した出力データＯＤ＃０〜＃（Ｍ−１）を並べ替えるシャッフル回路３００＃２へのシャッフル回路用制御情報ＢＡを生成する。
ＧＡＧ制御情報自動生成部５００は、上述のようなライト  ２−Ｄ  ＧＡＧ２１０及びリード  ２−Ｄ  ＧＡＧ２２０用の、ＧＡＧ制御情報２０５を自動生成する。
ＧＡＧ制御情報自動生成部５００は、各要素に一意な値を割り当てられた入力データ配列７００と出力データの各要素の配列を示す出力データ配列７０１とを入力として、ライト  ２−Ｄ  ＧＡＧ制御情報２０５を自動生成する。入力データ配列７００は、行を時間サイクル、列をポートとして入力データの配列を示す。出力データ配列７０１は、入力データ配列７００を上述のデータ保持出力回路１００によって並び替えた後の出力データの各要素の配列を示す。
次に、実施形態１において図１を用いて説明したデータ保持出力回路１００内のライト  ２−Ｄ  ＧＡＧ２１０用に、ＧＡＧ制御情報２０５を生成するＧＡＧ制御情報自動生成部５００の動作の概要を説明する。
ＧＡＧ制御情報自動生成部５００は、図１０に示すような入力データ配列７００と図１１に示すような出力データ配列７０１とに基づいて、ライト  ２−Ｄ  ＧＡＧ２１０用の命令メモリの内容を生成する。
図１０は、入力データ配列の例を示す図である。図１１は、出力データ配列の例を示す図である。図１０及び図１１を参照すると、入力データ配列７００及び出力データ配列７０１は、それぞれＮ行Ｍ列の配列であり、それぞれサイズＮ×Ｍの行列で表される。但し、Ｎは、自然数である。入力データ配列７００及び出力データ配列７０１は、データ保持出力回路１００に同時に入力及び同時に出力されるデータを列方向に持つ。
入力データ配列７００及び出力データ配列７０１のＭ列は、シャッフル回路３００＃１の入力ＩＤ＃０〜＃（Ｍ−１）に対応しており、同時刻にデータ保持出力回路１００へ入力される入力データを示している。
一方、入力データ配列７００及び出力データ配列７０１のＮ行は、データ保持出力回路１００へ入力されるデータの入力時刻サイクルを表しており、「０」、「１」、「２」、・・・、「Ｎ−１」はそれぞれ、１サイクル目入力、２サイクル目入力、３サイクル目入力、・・・、Ｎサイクル目入力を示している。
また、入力データ配列７００の配列内要素は、それぞれ一意のデータが割り振られる。例えば、図１０に示す入力データ配列７００は、「０」〜「Ｎ×（Ｍ−１）」の自然数が要素内に格納される様子を示している。
また、図１１に示す出力データ配列７０１の配列内各要素にも、それぞれ一意のデータが割り振られ、更に、それぞれの要素は、入力データ配列７００の要素と一対一に対応する。
次に、第２の実施形態の動作について、図を参照して説明する。図１２は、本実施形態のＧＡＧ制御情報自動生成部５００の動作を示すフローチャートである。
図１２を参照すると、ＧＡＧ制御情報自動生成部５００は、出力タイミング配列生成ステップＳ６１０、メモリ配置方法決定ステップＳ６２０、書き込みアドレス生成ステップＳ６３１、書き込み側ＧＡＧ制御情報生成ステップＳ６３２、読み出しアドレス配列生成ステップＳ６４０、読み出し側ＧＡＧ制御情報生成ステップＳ６５０を順次実行する。
出力タイミング配列生成ステップＳ６１０について、図１３、図１４を用いて説明する。
出力タイミング配列生成ステップＳ６１０において、ＧＡＧ制御情報自動生成部５００は、入力データ配列７００と出力データ配列７０１を走査することにより、入力データ配列７００の各要素が出力データ配列７０１の先頭から何行目で出力されるかを分析する。そして、ＧＡＧ制御情報自動生成部５００は、その分析結果をＮ行Ｍ列の出力タイミング配列ｔｉｍｉｎｇｓに記録する。
図１３は、出力タイミング配列生成ステップＳ６１０の動作を示す擬似コード（ｍａｋｅ＿ｔｉｍｉｎｇｓ）のリストである。図１３に示す擬似コードにおいて、出力タイミング配列生成ステップＳ６１０の入力である入力データ配列７００をｄａｔａ＿ｉｎで、同じく出力データ配列７０１をｄａｔａ＿ｏｕｔで示す。また、図１３に示す擬似コードにおいて、出力タイミング配列生成ステップＳ６１０の出力である出力タイミング配列を、ｔｉｍｉｎｇｓで示す。
まず、ＧＡＧ制御情報自動生成部５００は、図１３の６行目で示すように、入力データのＮ行について、７行目〜１４行目までの処理を繰り返す。
更に、ＧＡＧ制御情報自動生成部５００は、７行目で示すように、入力データのｒｏｗ行目Ｍ列について、８行目〜１３行目までの処理を適用する。
次に、ＧＡＧ制御情報自動生成部５００は、９行目に示すように、入力データ配列７００の要素を１つ取得する。続けて、ＧＡＧ制御情報自動生成部５００は、１０行目に示すように、ｃａｌｃ＿ｄｅｌａｙ関数を呼び出し、取得した要素が出力データ配列７０１の何行目にあるかを取得する。次に、ＧＡＧ制御情報自動生成部５００は、この結果を、出力タイミング配列ｔｉｍｉｎｇｓのｒｏｗ行目ｃｏｌ列目に設定する。
図１４は、図１３の１０行目のｃａｌｃ＿ｄｅｌａｙ関数の動作を示す擬似コードのリストである。このｃａｌｃ＿ｄｅｌａｙ関数は、入力データ配列７００の１つの要素（ＳＲＣ）と出力データ配列７０１（ｄａｔａ＿ｏｕｔ）とを引数とし、入力データ配列７００の要素が出力データ配列７０１の何行目に存在するかを調べ、その行数を返す関数である。
まず、ＧＡＧ制御情報自動生成部５００は、図１４の３行目で示すように、引数で与えられた出力データ配列７０１のＮ行において、４行目〜１０行目までの処理を行う。
更に、ＧＡＧ制御情報自動生成部５００は、４行目に示すように、出力データ配列７０１のｒｏｗ行目のＭ列それぞれに対し、５行目〜９行目までの処理を行う。
次に、ＧＡＧ制御情報自動生成部５００は、５行目に示すように、引数で与えられた要素ｓｒｃと、ｄａｔａ＿ｏｕｔ（出力データ配列７０１）のｒｏｗ行目ｃｏｌ列目を比較する。そして、これらが一致していた場合、ＧＡＧ制御情報自動生成部５００は、一時変数ｒｅｓｕｌｔに行番号ｒｏｗを格納する。一致しなかった場合、ＧＡＧ制御情報自動生成部５００は、何も処理を行わない。最後に、ＧＡＧ制御情報自動生成部５００は、一時変数ｒｅｓｕｌｔを返し、処理を終了する。
メモリ配置方法決定ステップＳ６２０について、図１５、図１６、図１７、図１８を用いて説明する。
本ステップにおいて、入力は、入力データ配列７００（ｄａｔａ＿ｉｎ）及び出力タイミング配列ｔｉｍｉｎｇｓである。また、出力は、メモリ内データ配列ｄａｔａ＿ｍｅｍである。
メモリ内データ配列ｄａｔａ＿ｍｅｍは、Ｎ行Ｍ列の２次元配列であり、入力データをメモリ４００に格納した状態を示す。メモリ内データ配列ｄａｔａ＿ｍｅｍのＮ行はメモリ４００の先頭から数えたワードアドレスを示し、Ｍ列はＭ個のメモリ４００の内のどのメモリ４００に書き込まれたかを示す。
図１５は、メモリ配置方法決定ステップＳ６２０の動作を示す擬似コード（ｓｈｕｆｆｌｅ＿ｔｉｍｉｎｇｓ）のリストである。まず、ＧＡＧ制御情報自動生成部５００は、５行目に示すように、ｉｎｉｔｉａｌｉｚｅ＿ｄａｔａ関数を実行させて、メモリ内データ配列ｄａｔａ＿ｍｅｍを初期化する。
ここで、ｉｎｉｔｉａｌｉｚｅ＿ｄａｔａ関数の処理内容を説明する。図１６は、ｉｎｉｔｉａｌｉｚｅ＿ｄａｔａ関数の動作を示す擬似コードのリストである。図１６に示すように、ＧＡＧ制御情報自動生成部５００は、ｄａｔａ＿ｍｅｍの全要素に無効データＩＮＶを設定する。
ここで、無効データＩＮＶは、入力データ配列７００、出力データ配列７０１、及び出力タイミング配列においては使用されない値である。すなわち、無効データＩＮＶが格納されている要素は、有効なデータがまだ何も格納されていない要素であることを意味する。
ｉｎｉｔｉａｌｉｚｅ＿ｄａｔａ関数実行後、ＧＡＧ制御情報自動生成部５００は、ｄｏ＿ｓｈｕｆｆｌｅ関数を実行する。
ここで、ｄｏ＿ｓｈｕｆｆｌｅ関数の処理内容を説明する。図１７は、ｄｏ＿ｓｈｕｆｆｌｅ関数の動作を示す擬似コードのリストである。ｄｏ＿ｓｈｕｆｆｌｅ関数は、引数として、入力データｄａｔａ＿ｉｎ、出力タイミング配列ｔｉｍｉｎｇｓ、及びメモリ内データ配列ｄａｔａ＿ｍｅｍを持つ。
まず、ＧＡＧ制御情報自動生成部５００は、図１７の４行目に示すように、Ｍ列の要素を持つｕｓｅ＿ｂ配列を用意する。尚、ｕｓｅ＿ｂ配列の各要素の初期状態は、無効データＩＮＶである。
ＧＡＧ制御情報自動生成部５００は、本ｕｓｅ＿ｂ配列を、あるタイミング、すなわちｔｉｍｉｎｇｓ配列のある要素で指定されるサイクル数目、に出力されるデータをどのメモリに書き込むかを調べる際、既にどの列が使用されているかを示す配列として用いる。
次に、ＧＡＧ制御情報自動生成部５００は、図１７の５行目〜１４行目に示すように、出力の各サイクルにおいて、出力されるデータのメモリ書き込み方法を調査、決定する。ＧＡＧ制御情報自動生成部５００は、図１７の６行目〜１３行目に示すように、全行全列を走査し、現在調査しているｔｉｍｉｎｇｓ配列の要素と一致するデータが見つかった場合にｓｅａｒｃｈ＿ｖｅｃ＿ｃｏｌ関数を呼ぶことによって、この調査、決定の処理を行う。
ここで、ｓｅａｒｃｈ＿ｖｅｃ＿ｃｏｌ関数の処理内容を説明する。図１８は、ｓｅａｒｃｈ＿ｖｅｃ＿ｃｏｌ関数の動作を示す擬似コードのリストである。ｓｅａｒｃｈ＿ｖｅｃ＿ｃｏｌ関数は引数として、現在調査中のタイミングを示すｉと、このタイミングｉに一致するデータの位置ｒｏｗ及びｃｏｌと、ｕｓｅ＿ｂ配列と、入力データ配列７００ｄａｔａ＿ｉｎ（入力データ配列７００）と、メモリ内データ配列ｄａｔａ＿ｍｅｍとを持つ。
まず、ＧＡＧ制御情報自動生成部５００は、５行目〜１２行目に示すように、配置可能な列が見つかるまで、ｕｓｅ＿ｂ配列とメモリ内データ配列ｄａｔａ＿ｍｅｍの走査を行う。この走査中に、メモリ内データ配列ｄａｔａ＿ｍｅｍに有効なデータがなく、更に、ｕｓｅ＿ｂ配列の該当列に有効なデータが配置されていない場合、ＧＡＧ制御情報自動生成部５００は、その場所に現在のデータを配置する。
具体的には、ＧＡＧ制御情報自動生成部５００は、入力データ配列７００のｒｏｗ行目ｃｏｌ列目の要素を、メモリ内データ配列ｄａｔａ＿ｍｅｍのｒｏｗ行目及び見つかった配置可能な列の位置に格納する。また、ＧＡＧ制御情報自動生成部５００は、ｕｓｅ＿ｂ配列の該当列に１を格納し、その位置に有効なデータが格納されたことを記録する。
次に、書き込みアドレス配列生成ステップＳ６３１及び書き込み側ＧＡＧ制御情報生成ステップＳ６３２について、図１９〜図２４を用いて説明する。
本ステップにおいて、入力は、入力データ配列７００（ｄａｔａ＿ｉｎ）及びメモリ内データ配列（ｄａｔａ＿ｍｅｍ）である。ＧＡＧ制御情報２０５のＢａｓｅ値について、出力は、シャッフル回路用制御情報生成ＧＡＧ用のｂ＿ａｄｄｒ＿ｃ、及びメモリ用ワードアドレス生成ＧＡＧ用のｂ＿ａｄｄｒ＿ｒである。更に、ＧＡＧ制御情報２０５のＩｎｎｅｒ  Ｌｏｏｐ  Ｓｔｅｐについて、出力は、シャッフル回路用制御情報生成ＧＡＧ用のｉｌｐ＿ｃ、及びメモリ用ワードアドレス生成ＧＡＧ用のｉｌｐ＿ｒである。また更に、ＧＡＧ制御情報２０５のＯｕｔｅｒ  Ｌｏｏｐ  Ｓｔｅｐについて、出力は、シャッフル回路用制御情報生成ＧＡＧ用のｏｌｐ＿ｃ、及びメモリ用ワードアドレス生成ＧＡＧ用のｏｌｐ＿ｒである。また更に、Ｉｎｎｅｒ及びＯｕｔｅｒ  ＬｏｏｐのＬｉｍｉｔ値として、出力は、それぞれｉｌｐ＿ｎ及びｏｌｐ＿ｎである。尚、各出力は、２次元の配列で表される。
この配列の１次元目は、ループ構造のインデクスを示しており、２次元目はＧＡＧ＃０〜＃（Ｍ−１）のインデクスを示している。例えば、Ｉｎｎｅｒ  Ｌｏｏｐ  Ｌｉｍｉｔ  ｉｌｐ＿ｎについて、ｉｌｐ＿ｎ［２］［１］は、ＧＡＧ＃１の２番ループ構造のＬｉｍｉｔ値であることを示す。
図１９は、書き込みアドレス配列生成ステップＳ６３１及び書き込み側ＧＡＧ制御情報生成ステップＳ６３２の動作を示す擬似コードｇｅｎ＿ｇａｇ＿ａｄｄのリストである。
図１９に示すように、ＧＡＧ制御情報自動生成部５００は、ｇｅｎ＿ｇａｇ＿ａｄｄｒにおいて、２つの関数を実行する。１つ目の関数は、ｍｋ＿ａｄｄｒ＿ｍａｐ関数である。２つ目の関数は、ｌｏｏｐ＿ａｎａｌｙｚｅｒ関数である。
まず、ｍｋ＿ａｄｄｒ＿ｍａｐ関数の処理内容について説明する。ｍｋ＿ａｄｄｒ＿ｍａｐ関数は、ＧＡＧ制御情報自動生成部５００において、書き込みアドレス配列生成ステップＳ６３１を実現する関数である。ｍｋ＿ａｄｄｒ＿ｍａｐ関数は、入力データ配列７００とメモリ内データ配列７２１とを分析し、入力データ配列７００に対応するように、ＧＡＧ２０４が出力するシャッフル回路用制御情報マップとメモリ用ワードアドレスマップとを生成する。
図２０は、ｍｋ＿ａｄｄｒ＿ｍａｐ関数の動作を示す擬似コードのリストである。
ｍｋ＿ａｄｄｒ＿ｍａｐ関数の入力は、入力データ配列７００（ｄａｔａ＿ｉｎ）及びメモリ内データ配列（ｄａｔａ＿ｍｅｍ）であり、出力はメモリ用ワードアドレスマップ（ｒ＿ａｄｄｒ＿ｍａｐ）及びシャッフル回路用制御情報マップ（ｃ＿ａｄｄｒ＿ｍａｐ）である。以後、メモリ用ワードアドレスマップｒ＿ａｄｄｒ＿ｍａｐ及びシャッフル回路用制御情報マップｃ＿ａｄｄｒ＿ｍａｐを併せて、アドレス配列とも呼ぶ。
ここで、これらの出力はＮ行Ｍ列の２次元配列である。そして、それらの２次元配列の各要素は、入力データ配列７００の各要素にそれぞれ対応しており、入力データ配列７００の各要素が入力された際に出力するシャッフル回路用制御情報、及びメモリ用ワードアドレスである。
図２０に示すように、ＧＡＧ制御情報自動生成部５００は、ｄａｔａ＿ｉｎの全要素に対し、ｍｋ＿ａｄｄｒ＿ｍａｐ＿ｓｕｂをコールする。
図２１は、ｍｋ＿ａｄｄｒ＿ｍａｐ＿ｓｕｂ関数の動作を示す擬似コードのリストである。図２１に示すように、ＧＡＧ制御情報自動生成部５００は、指定された行ｒｏｗ、列ｃｏｌのｄａｔａ＿ｍｅｍの要素に対し、ｄａｔａ＿ｉｎの位置を検索する。そして、ＧＡＧ制御情報自動生成部５００は、検出した位置をｒ＿ａｄｄｒ＿ｍａｐとｃ＿ａｄｄｒ＿ｍａｐの行ｒｏｗ、列ｃｏｌに記録する。以上により、ＧＡＧ制御情報自動生成部５００は、メモリ用ワードアドレスマップｒ＿ａｄｄｒ＿ｍａｐ及びシャッフル回路用制御情報マップｃ＿ａｄｄｒ＿ｍａｐを生成する。
次に、ｌｏｏｐ＿ａｎａｌｙｚｅｒ関数の処理内容について説明する。ｌｏｏｐ＿ａｎａｌｙｚｅｒ関数は、ＧＡＧ制御情報自動生成部５００において、書き込み側ＧＡＧ制御情報生成ステップＳ６３２を実現する関数である。ｌｏｏｐ＿ａｎａｌｙｚｅｒ関数は、ｍｋ＿ａｄｄｒ＿ｍａｐ関数が生成したシャッフル回路用制御情報マップｃ＿ａｄｄｒ＿ｍａｐとメモリ用ワードアドレスマップｒ＿ａｄｄｒ＿ｍａｐとを分析し、ＧＡＧ制御情報２０５を生成する。
図２２は、ｌｏｏｐ＿ａｎａｌｙｚｅｒ関数の擬似コードのリストである。
ｌｏｏｐ＿ａｎａｌｙｚｅｒ関数の入力は、ｒ＿ａｄｄｒ＿ｍａｐ及びｃ＿ａｄｄｒ＿ｍａｐである。また、ｌｏｏｐ＿ａｎａｌｙｚｅｒ関数の出力は、まず、メモリ用ワードアドレス生成器２０２及びシャッフル回路用制御情報生成器２０１のＢａｓｅであるｂ＿ａｄｄｒ＿ｒ及びｂ＿ａｄｄｒ＿ｃを含む。更に、ｌｏｏｐ＿ａｎａｌｙｚｅｒ関数の出力は、Ｉｎｎｅｒ  Ｌｏｏｐ  Ｓｔｅｐのｉｌｐ＿ｒ及びｉｌｐ＿ｃと、Ｏｕｔｅｒ  Ｌｏｏｐ  Ｓｔｅｐのｏｌｐ＿ｒ及びｏｌｐ＿ｃとを含む。更に、ｌｏｏｐ＿ａｎａｌｙｚｅｒ関数の出力は、Ｉｎｎｅｒ  Ｌｏｏｐ及びＯｕｔｅｒ  ＬｏｏｐのＬｉｍｉｔ値であるｉｌｐ＿ｎ及びｏｌｐ＿ｎを含む。
尚、これらの各出力は２次元の配列で表される。これらの配列の１次元目はループ構造のインデクスを示しており、２次元目はＧＡＧ＃０〜＃（Ｍ−１）のインデクスを示している。例えば、Ｉｎｎｅｒ  Ｌｏｏｐ  Ｌｉｍｉｔ  ｉｌｐ＿ｎについて、ｉｌｐ＿ｎ［２］［１］は、ＧＡＧ＃１の２番ループ構造のＬｉｍｉｔ値であることを示す。
ｌｏｏｐ＿ａｎａｌｙｚｅｒ関数は、主に３つの処理を含む。
１番目の処理は、図２２の７〜１０行目に示される、Ｂａｓｅ値、Ｌｉｍｉｔ値、Ｓｔｅｐ値を初期化する初期化ステップである。２番目の処理は、図２２の１３、１４行目に示されるＩｎｎｅｒ  Ｌｏｏｐ分析（ｉｌｏｏｐ＿ａｎａｌｙｚｅ）である。３番目の処理は、図２２の１５、１６行目に示されるＯｕｔｅｒ  Ｌｏｏｐ分析（ｏｌｏｏｐ＿ａｎａｌｙｚｅ）である。
まず、初期化ステップにおいて、ＧＡＧ制御情報自動生成部５００は、０番ループ構造のｂａｓｅ値、Ｌｉｍｉｔ値、Ｓｔｅｐ値に対し、ｂａｓｅ値をアドレスマップの先頭アドレスで初期化する。更に、ＧＡＧ制御情報自動生成部５００は、Ｉｎｎｅｒ  Ｌｏｏｐ  Ｌｉｍｉｔ値及びＳｔｅｐ値をそれぞれ「０」及び「０」で、Ｏｕｔｅｒ  ＬｏｏｐＬｉｍｉｔ値及びＳｔｅｐ値をそれぞれ「１」及び「０」で初期化する。
初期化が終わると、ＧＡＧ制御情報自動生成部５００は、Ｉｎｎｅｒ  Ｌｏｏｐ分析、Ｏｕｔｅｒ  Ｌｏｏｐ分析の処理を開始する。
具体的には、ＧＡＧ制御情報自動生成部５００は、アドレスマップの先頭から順にまずＩｎｎｅｒ  Ｌｏｏｐの分析を開始する。Ｉｎｎｅｒ  Ｌｏｏｐの分析中に、Ｉｎｎｅｒ  ＬｏｏｐのＳｔｅｐ値で表せない要素を検出した場合、ＧＡＧ制御情報自動生成部５００は、次にＯｕｔｅｒ  Ｌｏｏｐの分析を行う。
その後、Ｏｕｔｅｒ  Ｌｏｏｐで表せない要素を検出した場合、ＧＡＧ制御情報自動生成部５００は、該当ループ構造の分析を終了し、次のループ構造に移り、アドレスマップを引き続き分析する。
Ｉｎｎｅｒ  Ｌｏｏｐの分析処理ｉｌｏｏｐ＿ａｎａｌｙｚｅについて、図２３を用いて説明する。図２３は、ｉｌｏｏｐ＿ａｎａｌｙｚｅ関数の動作を示す擬似コードのリストである。
本処理においてＧＡＧ制御情報自動生成部５００は、あるループ構造分析で初めて本処理を実行する場合、Ｉｎｎｅｒ  Ｌｏｏｐ  Ｓｔｅｐであるｉｌｐ＿ｒ、ｉｌｐ＿ｃのそのループ構造の対応するＧＡＧユニット番号のオフセット値を登録する。これは、アドレスマップ上の、現在分析を行っている行ｒｏｗと、その前の行ｒｏｗ−１の要素の差分をとることにより求めることができる。
ここで、差分が負の値だった場合、ＧＡＧ制御情報自動生成部５００は、メモリ用ワードアドレスならばＮを、シャッフル回路用制御情報ならばＭを加算することによって正の値に修正する。尚、本処理は、図２３の７〜１１行目に対応している。
また、１０行目のｍｏｄｉｆｙ＿ｎｅｇａｔｉｖｅ＿ｖａｌ関数は、第５引数及び第６引数で与えられた配列の、第１引数及び第２引数で与えられた位置の要素が負の値である場合、それぞれ第３引数、第４引数の値を加算する関数である。例として１０行目の場合、ｉｌｐ＿ｒ［ｌｐ＿ｎ］［ｃｏｌ］の要素が負の値である場合、ｉｌｐ＿ｒ［ｌｐ＿ｎ］［ｃｏｌ］＝ｉｌｐ＿ｒ［ｌｐ＿ｎ］［ｃｏｌ］  ＋  Ｎとする。また、ｉｌｐ＿ｃ［ｌｐ＿ｎ］［ｃｏｌ］の要素が負の値である場合、ｉｌｐ＿ｃ［ｌｐ＿ｎ］［ｃｏｌ］＝ｉｌｐ＿ｃ［ｌｐ＿ｎ］［ｃｏｌ］  ＋  Ｍとする。
次に、本処理の２回目以降において、ＧＡＧ制御情報自動生成部５００は、求めたＳｔｅｐとアドレスマップの現在分析を行っている行の前の行ｒｏｗ−１で、アドレスマップの現在分析を行っているｒｏｗを表すことができるか否かを分析する。
具体的には、ＧＡＧ制御情報自動生成部５００は、アドレスマップの現在分析を行っているｒｏｗとアドレスマップの現在分析を行っている行の前の行ｒｏｗ−１の差分をとり、それがＳｔｅｐ値と一致するか否かを分析する。一致した場合、ＧＡＧ制御情報自動生成部５００は、Ｉｎｎｅｒ  ＬｏｏｐのＬｉｍｉｔ値であるｉｌｐ＿ｎを１インクリメントする。一致しなかった場合、ＧＡＧ制御情報自動生成部５００は、ｆｉｎ＿ｆｌａｇ＝１とし、Ｉｎｎｅｒ  Ｌｏｏｐ分析を終了する。尚、以上の処理は、図２３の１３〜１８行目に対応している。
Ｏｕｔｅｒ  Ｌｏｏｐの分析処理ｏｌｏｏｐ＿ａｎａｌｙｚｅについて、図２４を用いて説明する。図２４は、ｌｏｏｐ＿ａｎａｌｙｚｅｒ内のｏｌｏｏｐ＿ａｎａｌｙｚｅ関数の動作を示す擬似コードのリストである。
まず、あるループ構造分析で初めて本ｏｌｏｏｐ＿ａｎａｌｙｚを実行する場合、ＧＡＧ制御情報自動生成部５００は、Ｏｕｔｅｒ  Ｌｏｏｐ  Ｓｔｅｐであるｏｌｐ＿ｒ、ｏｌｐ＿ｃの該当ループ構造の該当ＧＡＧユニット番号に、オフセット値を登録する。ＧＡＧ制御情報自動生成部５００は、アドレスマップの現在分析を行っているｒｏｗの要素と、このループ構造のベースアドレス値の差分をとることにより、オフセット値を求める。
尚、差分が負の値であった場合、ＧＡＧ制御情報自動生成部５００は、上述のｉｌｏｏｐ＿ａｎａｌｙｚｅの説明で示した方法と同様の方法で正の値に修正する。また、ＧＡＧ制御情報自動生成部５００は、現在分析を行っている行を一時保存領域ｂｕｆ＿ｐｏｓに保存する。これは、Ｏｕｔｅｒ  Ｌｏｏｐ構造が成り立たないことが判明した場合、分析を開始した行に戻って、次のループ構造の分析を開始するためである。
尚、以上の処理は図２４の７行から１２行に対応している。
以上の処理を終了したら、ＧＡＧ制御情報自動生成部５００は、ｓｔ＿ｆｌａｇ＝１とし、Ｏｕｔｅｒ  Ｌｏｏｐ構造が成り立つか否かの分析に移る。
次に、Ｏｕｔｅｒ  Ｌｏｏｐ構造が成り立つか否かの分析方法について説明する。
ＧＡＧ制御情報自動生成部５００は、Ｏｕｔｅｒ  Ｌｏｏｐ構造が成り立つか否かの分析を、既に分析したＩｎｎｅｒ  Ｌｏｏｐ構造が現在分析を行っているアドレスマップの区間に適用できるか否かを分析することにより行う。
具体的には、ＧＡＧ制御情報自動生成部５００は、アドレスマップの現在分析を行っている行ｒｏｗの要素とアドレスマップの現在分析を行っている行の前の行ｒｏｗ−１の要素との差分を求め、その結果が既に求めたＩｎｎｅｒ  ＬｏｏｐのＳｔｅｐ値と一致するか否かを分析する。
尚、差分結果が負の値であった場合、ＧＡＧ制御情報自動生成部５００は、上述のｉｌｏｏｐ＿ａｎａｌｙｚｅの説明で示した方法と同様の方法で正の値に修正する。一致した場合、ＧＡＧ制御情報自動生成部５００は、一時変数ｔｍｐ＿ｌｐを「１」インクリメントする。
次に、ｔｍｐ＿ｌｐがＩｎｎｅｒ  Ｌｏｏｐ構造のＬｉｍｉｔ値と同値になった場合、ＧＡＧ制御情報自動生成部５００は、Ｏｕｔｅｒ  Ｌｏｏｐ構造が成立したと判断し、Ｏｕｔｅｒ  ＬｏｏｐのＬｉｍｉｔ値ｏｌｐ＿ｎを「１」インクリメントする。更に、ＧＡＧ制御情報自動生成部５００は、ｓｔ＿ｆｌａｇ＝２とし、その先もＯｕｔｅｒ  Ｌｏｏｐ構造が成り立つか否かの分析に移行する。
一方、ｔｍｐ＿ｌｐがＩｎｎｅｒ  ＬｏｏｐのＬｉｍｉｔ値と同値になる前に、Ｓｔｅｐ値と一致しないアドレスマップの構造が出現した場合には、ＧＡＧ制御情報自動生成部５００は、Ｏｕｔｅｒ  Ｌｏｏｐが成り立たなかったと判定し、Ｏｕｔｅｒ  Ｌｏｏｐ構造の分析を終了し、次のループ構造の分析に移行する。ここで、ＧＡＧ制御情報自動生成部５００は、アドレスマップの分析位置ｒｏｗをＯｕｔｅｒ  Ｌｏｏｐ構造分析開始時点で一時保存していたｂｕｆ＿ｐｏｓの値で更新する。
尚、以上の処理は、図２４の２５行から３７行に対応している。
Ｏｕｔｅｒ  Ｌｏｏｐ構造が成り立ち、次のＯｕｔｅｒ  Ｌｏｏｐ構造が成り立つか否かの分析を開始する際、すなわち、ｓｔ＿ｆｌａｇ＝２の際には、ＧＡＧ制御情報自動生成部５００は、新規Ｏｕｔｅｒ  Ｌｏｏｐ構造のオフセット値が既に求めたｏｌｐ＿ｒ、ｏｌｐ＿ｃに一致するか否かを分析する。
具体的には、ＧＡＧ制御情報自動生成部５００は、現在の行とベースアドレスの差分を求める。次に、ＧＡＧ制御情報自動生成部５００は、その差分を求めた結果が、既に求めたＯｕｔｅｒ  Ｌｏｏｐ  Ｓｔｅｐであるｏｌｐ＿ｒ、ｏｌｐ＿ｃに、Ｏｕｔｅｒ  Ｌｏｏｐ構造数ｏｌｐ＿ｎをかけた値と等しいか否かを分析する。尚、差分結果が負の値であった場合、ＧＡＧ制御情報自動生成部５００は、上述のｉｌｏｏｐ＿ａｎａｌｙｚｅの説明で示した方法と同様の方法で正に修正する。
等しい場合、ＧＡＧ制御情報自動生成部５００は、新しいＯｕｔｅｒ  Ｌｏｏｐ構造の分析が可能であると判断し、ｓｔ＿ｆｌａｇ＝１とし、そのＯｕｔｅｒ  Ｌｏｏｐ構造が成り立つか否かの分析を開始する。
一方、等しくなかった場合、ＧＡＧ制御情報自動生成部５００は、Ｏｕｔｅｒ  Ｌｏｏｐ構造の分析を終了する。
尚、以上の処理は、図２４の１４行から２５行に対応している。
上述の処理により、ＧＡＧ制御情報自動生成部５００は、メモリ用ワードアドレス生成器２０２、及びシャッフル回路用制御情報生成器２０１のＧＡＧ制御情報２０５を生成する。命令メモリ２０３は、これらの生成された各ＧＡＧ２０４に対応するＧＡＧ制御情報２０５を格納する。そして、各ＧＡＧ２０４は、命令メモリ２０３に格納されたＧＡＧ制御情報２０５に基づいて動作し、入力データに対して、適切なアドレスを生成する。
次に、読み出しアドレス配列生成ステップＳ６４０について、図２５を用いて説明する。
図２５は、読み出しアドレス配列生成ステップＳ６４０の動作を示す擬似コード（ｍａｋｅ＿ｒｄ＿ａｄｄｒ）のリストである。読み出しアドレス配列生成ステップＳ６４０は、メモリ内データ配列７２１（ｄａｔａ＿ｍｅｍ）及び出力データ配列７０１（ｄａｔａ＿ｏｕｔ）を入力とする。また、読み出しアドレス配列生成ステップＳ６４０は、メモリ用ワードアドレスを示す読み出しアドレス配列（ｒｅａｄ＿ｒ＿ａｄｄｒ）及びシャッフル回路用制御情報を示す読み出しアドレス配列（ｒｅａｄ＿ｃ＿ａｄｄｒ）を出力とする。
ＧＡＧ制御情報自動生成部５００は、まず、６行から１４行に示すように、ｒｅａｄ＿ｒ＿ａｄｄｒの生成を行う。
具体的には、ＧＡＧ制御情報自動生成部５００は、ｄａｔａ＿ｏｕｔ（出力データ配列７０１）の各行、各列について、各要素のデータをそれぞれ、ｄａｔａ＿ｍｅｍ（メモリ内データ配列７２１）から検索する。ＧＡＧ制御情報自動生成部５００は、検索を、９行目のｆｉｎｄ＿ｄａｔａ関数で行う。
このｆｉｎｄ＿ｄａｔａ関数は第１引数で与えられたデータを、第２引数で与えられた２次元配列から検索し、見つかった行、列の位置をそれぞれ第３、第４引数で与えられた変数に格納して返す関数である。
次に、ＧＡＧ制御情報自動生成部５００は、検索して得られた行、列（ｆ＿ｒｏｗ、ｆ＿ｃｏｌ）について、１１行目に示すようにアドレスを格納する。また、ＧＡＧ制御情報自動生成部５００は、ここで本アドレスによって読み出されるデータを１２行目に示すように、ｍｅｍ＿ｏｕｔ＿ａｒｒａｙに一時的に保存する。
次に、ＧＡＧ制御情報自動生成部５００は、１７行から２４行に示すように、シャッフル回路用制御情報を示す読み出しアドレス配列（ｒｅａｄ＿ｃ＿ａｄｄｒ）を生成する。具体的には、ＧＡＧ制御情報自動生成部５００は、ｄａｔａ＿ｏｕｔ（出力データ配列７０１）の各行において、メモリ４００から出力されたデータの内どのメモリ４００から出力された値を取得すればよいかをｆｉｎｄ＿ｄａｔａ関数で検索する。そして、ＧＡＧ制御情報自動生成部５００は、その検索した結果（ｆ＿ｃｏｌ）を２２行目に示すように保存する。これによって、ＧＡＧ制御情報自動生成部５００は、シャッフル回路用制御情報を示す読み出しアドレス配列（ｒｅａｄ＿ｃ＿ａｄｄｒ）を生成する。
次に、読み出し側ＧＡＧ制御情報生成ステップＳ６５０について説明する。
読み出し側ＧＡＧ制御情報生成ステップＳ６５０において、ＧＡＧ制御情報自動生成部５００は、ステップＳ６４０で生成された読み出しアドレス配列に基づいて、リード  ２−Ｄ  ＧＡＧ用のＧＡＧ制御情報２０５を生成する。具体的には、ＧＡＧ制御情報自動生成部５００は、読み出しアドレス配列を用いて、前述した書き込み側ＧＡＧ制御情報生成ステップＳ６３２と同様の処理を実行する。読み出し側ＧＡＧ制御情報生成ステップＳ６５０の処理は、書き込み側ＧＡＧ制御情報生成ステップＳ６３２と同等であるため、説明を省略する。
次に、入力データ内に、出力データとして出力されない、不要なデータが存在する場合について説明する。
例えば、ＧＡＧ制御情報自動生成部５００は、メモリ配置方法決定ステップＳ６２０において、一旦その不要なデータの配置を保留する。そして、ＧＡＧ制御情報自動生成部５００は、他のデータの配置を決定した後で、その不要なデータをメモリ内の空いている場所に保存するようにして出力しないようにする。
また、ＧＡＧ制御情報自動生成部５００は、不要なデータの位置である、行ｒｏｗ、列ｃｏｌと同じインデクスを持つメモリの位置に無効データであることを示すデータを格納しておくようにしてもよい。この場合、ＧＡＧ制御情報自動生成部５００は、書き込み側ＧＡＧ制御情報生成時に、Ｉｎｎｅｒ  ＬｏｏｐやＯｕｔｅｒ  Ｌｏｏｐが成り立ちやすいアドレスを挿入するようにしてもよい。
尚、本実施形態において、シャッフル回路用制御情報とメモリ用ワードアドレスとにおけるＩｎｎｅｒ  Ｌｏｏｐ及びＯｕｔｅｒ  ＬｏｏｐのＬｉｍｉｔ値は同じであるものとして説明した。しかし、シャッフル回路用制御情報及びメモリ用ワードアドレスにおいて、Ｌｉｍｉｔ値が異なるような場合がある。この場合、シャッフル回路用制御情報及びメモリ用ワードアドレスの内のどちらか一方だけにおいて、Ｉｎｎｅｒ  Ｌｏｏｐ或いはＯｕｔｅｒ  Ｌｏｏｐが成り立たない状態が発生する。上述の説明において、ＧＡＧ制御情報自動生成部５００は、そのような状態が発生した場合、そのループ構造の分析を終了し、新たなループ構造の分析に移る。
ここで、例えば、ＧＡＧ制御情報自動生成部５００は、シャッフル回路用制御情報及びメモリ用ワードアドレスについてそれぞれ別次元として扱うようにし、個別にループ構造の分析を実行するようにしてもよい。
次に、本実施形態における動作について、図２６〜図３１を参照し、具体的な値を示して更に詳細に説明する。
説明の簡略化のために、前提として、メモリ内データ配列７２１の行数（メモリ４００のワードアドレス）Ｎを「４」であるとする。また、メモリ内データ配列７２１の列数（メモリ４００の数）Ｍを、図６に示すメモリ４００＃０〜＃３に基づいて、「４」であるとする。
まず、図２６を参照して、出力タイミング配列７１１生成ステップＳ６１０の具体的な動作について説明する。図２６は、入力データ配列７０２及び出力データ配列７０３と出力タイミング配列７１１との関係の例を示した図である。
図２６を参照すると、入力データ配列７０２の各要素に対し、出力データ配列７０３の先頭から何サイクル目で出力されるか、すなわち、何行目に位置しているか、が出力タイミング配列７１１に示されていることが分かる。例えば、四角及び矢印で示した要素Ａは、出力データの１行目に位置しているので、出力タイミング配列７１１に１と記録する。また例えば、四角及び矢印で示した要素Ｂは、出力データの２行目に位置しているので、出力タイミング配列７１１に２と記録する。
次に、図２７を参照して、メモリ配置方法決定ステップＳ６２０の具体的な動作について説明する。図２７は、メモリ配置方法決定ステップＳ６２０が、メモリ内データ配列７２１を生成するプロセスの一部を示す図である。
図２７に示すように、ＧＡＧ制御情報自動生成部５００は、入力データ配列７０２と出力データ配列７０３とから生成した出力タイミング配列７１１を用い、メモリ内データ配列７２１を生成する。尚、メモリ配置後タイミング配列７２２は、メモリ内データ配列７２１の各要素が出力データ配列７０３の先頭から何サイクル目で出力されるか、即ち、出力データ配列７０３の何行目に位置しているか、を示す。このメモリ配置後タイミング配列７２２は、メモリ内データ配列７２１の生成に伴って決定されて行く。
処理を開始すると、ＧＡＧ制御情報自動生成部５００は、図２７のプロセスＰ６２１において、まず、出力タイミング配列７１１の１列目について分析を開始する。すると、ＧＡＧ制御情報自動生成部５００は、１列目に記録された要素は全て１なので、全要素を互いに排他的に、異なる列に配置する必要があることを検出する。そこで、ＧＡＧ制御情報自動生成部５００は、１行目は１列目に、２行目は２列目に、３行目は３列目、４行目は４列目というように、各要素をずらして配置する。こうして、ＧＡＧ制御情報自動生成部５００は、図２７のプロセスＰ６２２に示すような配置が決定する。
次に、ＧＡＧ制御情報自動生成部５００は、プロセスＰ６２２において、出力タイミング配列７１１の２列目の分析を行う。すると、ここでもＧＡＧ制御情報自動生成部５００は、全要素が「２」であり同じタイミングで出力することが要求されるため、全要素を互いに排他的に、異なる列に配置する必要があることを検出する。そこで、ＧＡＧ制御情報自動生成部５００は、１行目は２列目に配置し、２行目は３列目に、というように、各要素をずらして配置する。ＧＡＧ制御情報自動生成部５００は、同様の処理を繰り返し、最終的に図２７のプロセスＰ６２３に示すように、メモリ内データ配列７２１を生成する。
次に、図２８〜図３０を参照して、書き込みアドレス配列生成ステップＳ６３１及び書き込み側ＧＡＧ制御情報生成ステップＳ６３２の具体的な動作について説明する。
まず、図２８を参照して、ＧＡＧ制御情報自動生成部５００が、メモリ用ワードアドレスマップ及びシャッフル回路用制御情報マップ（書き込みアドレス配列）を生成する、書き込みアドレス配列生成ステップ６３１の具体例について説明する。
図２８は、入力データ配列７０２及びメモリ内データ配列７２１と、書き込みアドレス配列７３１との関係の例を示す図である。
図２８において、書き込みアドレス配列７３１は、メモリ用ワードアドレスマップ及びシャッフル回路用制御情報マップの対応する各要素を「メモリ用ワードアドレス、シャッフル回路用制御情報」という形式で持つ。書き込みアドレス配列７３１のメモリ用ワードアドレス及びシャッフル回路用制御情報は、入力データ配列７０２の各要素が入力された際にライト  ２−Ｄ  ＧＡＧ２１０のＧＡＧ２０４が生成する、メモリ入力用ワードアドレス及びシャッフル回路用制御情報である。
図２８に示す書き込みアドレス配列７３１において、例えば入力データ配列７０２の要素Ａが入力された場合、メモリ用ワードアドレスはＡを１行目に書き込むことを示し、シャッフル回路用制御情報は１列目のＡをそのまま選択することを示す。
また例えば、図２８に示すように、入力データ配列７０２の要素Ｆの位置と同位置のメモリ内データ配列７２１の位置には、要素Ｅが書き込まれる。そこで、入力データ配列７０２の要素Ｆの位置と同位置の書き込みアドレス配列７３１の位置の、メモリ用ワードアドレスは、入力データ配列７０２のＥが先頭から２行目なので「２」である。また、シャッフル回路用制御情報は、Ｅが１列目なので「１」である。従って、ＧＡＧ制御情報自動生成部５００は、入力データ配列７０２の要素Ｆの位置と同位置の書き込みアドレス配列７３１の位置の要素「２，１」を生成する。
このようにして、ＧＡＧ制御情報自動生成部５００は、入力データ配列７０２の全要素を分析し、図２８に示す書き込みアドレス配列７３１を生成する。
次に、図２９を参照して、書き込み側ＧＡＧ制御情報生成ステップＳ６３２のループ構造分析の具体例について説明する。
図２９は、本実施形態におけるループ構造分析のプロセスの一部を示した図である。図２９は、図２８に示すように生成されたメモリ用ワードアドレス及びシャッフル回路用制御情報に対し、どのようにＢａｓｅ、Ｉｎｎｅｒ  ＬｏｏｐのＬｉｍｉｔ値、Ｓｔｅｐ値が生成されるかを示す。尚、以下の説明は、１列目についての説明である。
まず、図２９のプロセスＰ６３１において、ＧＡＧ制御情報自動生成部５００は、１行目の分析にて、ｂａｓｅ値を設定する。ここでは、ＧＡＧ制御情報自動生成部５００は、１列目、１行目の要素（１，１）に基づいて、ｂａｓｅを（１，１）と設定する。
また、図には示していないが、ＧＡＧ制御情報自動生成部５００は、Ｉｎｎｅｒ  ＬｏｏｐのＬｉｍｉｔ値及びＳｔｅｐ値と、Ｏｕｔｅｒ  ＬｏｏｐのＬｉｍｉｔ値及びＳｔｅｐ値を、ここで初期化する。
次に、図２９のプロセスＰ６３２は、２行目の分析の様子を示している。ここでは、ＧＡＧ制御情報自動生成部５００は、現在の行と前の行との差分をＩｎｎｅｒ  ＬｏｏｐのＳｔｅｐ値として算出する。尚、差分が負の値になった場合は、列数（本例では、「４」）を加算する。プロセスＰ６３２で、算出されるＳｔｅｐ値は、（１，３）である。
次に、図２９のプロセスＰ６３３に示すように、ＧＡＧ制御情報自動生成部５００は、３行目の分析に移る。３行目の分析では、ＧＡＧ制御情報自動生成部５００は、現在の行を、前の行とＩｎｎｅｒ  ＬｏｏｐのＳｔｅｐ値とを用いて表すことができるか否かを分析する。具体的には、ＧＡＧ制御情報自動生成部５００は、現在の行と前の行との差分がＳｔｅｐ値と一致するか否かを判定する。３行目と２行目との差分は（１，−１）であり、負の値には列の最大数である４を加算するので、プロセスＰ６３３において算出される差分結果は、（１，３）である。従って、Ｓｔｅｐ値と差分結果とが同値であるため、ＧＡＧ制御情報自動生成部５００は、Ｉｎｎｅｒ  ＬｏｏｐのＬｉｍｉｔ値を＋１インクリメントする。
最後に、図２９のプロセスＰ６３４に示すように、ＧＡＧ制御情報自動生成部５００は、４行目の分析を行う。４行目においても３行目と同様に、現在の行と前の行との差分結果がＳｔｅｐ値と一致するため、ＧＡＧ制御情報自動生成部５００は、Ｌｉｍｉｔ値を「１」加算する。
結果として、本例において、ＧＡＧ制御情報自動生成部５００は、Ｂａｓｅ＝（１，１）、Ｉｎｎｅｒ  Ｌｏｏｐ  Ｌｉｍｉｔ＝３、Ｉｎｎｅｒ  Ｌｏｏｐ  Ｓｔｅｐ＝（１，３）、Ｏｕｔｅｒ  Ｌｏｏｐ  Ｌｉｍｉｔ＝０及びＯｕｔｅｒ  Ｌｏｏｐ  Ｓｔｅｐ＝（０，０）を生成する。
次に、図３０を参照して、書き込み側ＧＡＧ制御情報生成ステップＳ６３２のループ構造分析の他の具体例について説明する。図３０は、本実施形態におけるループ構造分析の他のプロセスの例の一部を示した図である。図３０は、ＧＡＧ制御情報自動生成部５００がＯｕｔｅｒ  Ｌｏｏｐを分析する場合の例を示す。尚、図３０も図２９と同様に、１列目を例として説明を行う。
まず、プロセスＰ６４１に示すように、ＧＡＧ制御情報自動生成部５００は、Ｂａｓｅ値を（１，１）と設定する。次にプロセスＰ６４２に示すように、ＧＡＧ制御情報自動生成部５００は、２行目を分析してＩｎｎｅｒ  ＬｏｏｐのＳｔｅｐ値を（１，３）と設定する。
次に、プロセスＰ６４３に示すように、ＧＡＧ制御情報自動生成部５００は、３行目を分析して、現在の行と前の行との差分結果として、（４，２）を算出する。この差分結果は、Ｉｎｎｅｒ  ＬｏｏｐのＳｔｅｐ値とは一致しない。そこで、ＧＡＧ制御情報自動生成部５００は、現在の行と最初にＩｎｎｅｒ  Ｌｏｏｐを開始した行との差分（５，１）を算出し、Ｏｕｔｅｒ  ＬｏｏｐのＳｔｅｐ値を（５，１）と設定する。続けて、ＧＡＧ制御情報自動生成部５００は、Ｏｕｔｅｒ  Ｌｏｏｐの分析を開始する。
すると、プロセスＰ６４４に示すように、ＧＡＧ制御情報自動生成部５００は、４行目を分析して、現在の行と前の行との差分結果（１，３）を算出する。この差分結果は、先に求めたＩｎｎｅｒ  ＬｏｏｐのＳｔｅｐ値と一致する。更に、Ｏｕｔｅｒ  ＬｏｏｐのＳｔｅｐ値からのＩｎｎｅｒ  Ｌｏｏｐの構造は、先に求めたＩｎｎｅｒ  Ｌｏｏｐの構造と一致する。従って、ＧＡＧ制御情報自動生成部５００は、Ｏｕｔｅｒ  Ｌｏｏｐが成り立つと判定し、Ｏｕｔｅｒ  Ｌｏｏｐ  Ｌｉｍｉｔを「１」インクリメントする。
結果として、本例においてＧＡＧ制御情報自動生成部５００は、Ｂａｓｅ＝（１，１）、Ｉｎｎｅｒ  Ｌｏｏｐ  Ｌｉｍｉｔ＝１、Ｉｎｎｅｒ  Ｌｏｏｐ  Ｓｔｅｐ  ＝  （１，３）、Ｏｕｔｅｒ  Ｌｏｏｐ  Ｌｉｍｉｔ＝２及びＯｕｔｅｒ  Ｌｏｏｐ  Ｓｔｅｐ＝（５，１）を生成する。
次に、図３１を参照して、読み出しアドレス配列生成ステップＳ６４０を具体的に説明する。
図３１は、メモリ内データ配列７２１及び出力データ配列７０３と、リード  ２−Ｄ  ＧＡＧ用の読み出しアドレス配列７４１との関係の例を示す図である。図３１において、読み出しアドレス配列７４１は、メモリ用ワードアドレスマップ及びシャッフル回路用制御情報マップの対応する各要素を、１オリジンで、「メモリ用ワードアドレス、シャッフル回路用制御情報」の形式で持つ。読み出しアドレス配列７４１のメモリ用ワードアドレス及びシャッフル回路用制御情報は、出力データ配列７０３の各要素を出力する際に、リード  ２−Ｄ  ＧＡＧ２２０のＧＡＧ２０４が生成する、メモリ出力用ワードアドレス及びシャッフル回路用制御情報である。
まず、ＧＡＧ制御情報自動生成部５００は、出力データ配列７０３を行毎に分析し、該当行の出力データと一致するデータをメモリ内データ配列７２１から探す。
次に、ＧＡＧ制御情報自動生成部５００は、一致するデータを検出した行位置を、読み出しアドレス配列７４１の出力データ配列７０３と対応した行に、メモリワード用アドレスとして記録する。
更に、ＧＡＧ制御情報自動生成部５００は、そのアドレスを用いて読み出されるデータと、出力データ配列７０３を比較し、同様の並びとなるように、シャッフル回路用制御情報を生成する。
例えば、ＧＡＧ制御情報自動生成部５００は、読み出しアドレス配列７４１の２行目の要素を以下のように生成する。出力データ配列７０３の２行目に存在するデータは、Ｂ、Ｆ、Ｊ、Ｎである。ＧＡＧ制御情報自動生成部５００は、これらのデータを、メモリ内データ配列７２１の１、２、３、４列目のそれぞれ４、１、２、３行目に検出する。
このとき、メモリ内データ配列７２１の１、２、３、４列目のデータは、それぞれＮ、Ｂ、Ｆ、Ｊである。そこで、ＧＡＧ制御情報自動生成部５００は、シャッフル回路３００用に、これらのデータを出力データ配列７０３にあるように並べ替える制御情報を生成する。
具体的には、ＧＡＧ制御情報自動生成部５００は、シャッフル回路３００＃２が、ＯＤ＃０，１，２，３にＢ、Ｆ、Ｊ、Ｎというデータを出力するように、制御情報を生成する。すなわち、ＧＡＧ制御情報自動生成部５００は、リード  ２−Ｄ  ＧＡＧ２２０がシャッフル回路用制御情報ＢＡ＃０〜３に、それぞれ２、３、４、１を出力するように、制御情報を生成する。
ＧＡＧ制御情報自動生成部５００は、この値を、読み出しアドレス配列７４１のシャッフル回路用制御情報に記録する。
尚、読み出し側ＧＡＧ制御情報生成ステップＳ６５０の具体的な動作については、書き込み側ＧＡＧ制御情報生成ステップＳ６３２と同様であるため、説明を省略する。
尚、本実施形態においては、ループ数をＩｎｎｅｒ  ＬｏｏｐとＯｕｔｅｒ  Ｌｏｏｐの２つとしたが、これに限る必要はなく、例えば、１つであってもよいし、３つ以上であってもよい。
上述した本実施形態における効果は、第１の実施例の効果に加えて、２次元ＧＡＧを制御するＧＡＧ制御情報２０５を、自動的に生成することを可能にする点である。
その理由は、ＧＡＧ制御情報自動生成部５００が、入力データ配列７００と出力データ配列７０１とを分析してメモリ内データ配列７２１を生成し、更に入力データ配列７００と出力データ配列７０１とメモリ内データ配列７２１とに基づいてＧＡＧ制御情報２０５を生成するようにしたからである。
［第３の実施の形態］
次に、本発明の第３の実施形態について図面を参照して詳細に説明する。以下、本実施形態の説明が不明確にならない範囲で、前述の説明と重複する内容については省略する。
前述の第１の実施形態のデータ保持出力回路１００は、メモリワード用アドレスに基づいてメモリ４００から読み出されたメモリ出力データを、シャッフル回路用制御情報に基づいてシャッフル回路３００＃２が、どの出力ポート３１２に出力するかを決定するものであった。
これに対し、本実施形態のデータ保持出力回路は、メモリ用ワードアドレスをシャッフル回路用制御情報が示すメモリ４００に入力してメモリ出力データを読み出す。そして、本実施形態のデータ保持出力回路は、読み出したメモリ出力データをそのメモリ出力データのメモリ用ワードアドレスを生成したＧＡＧ２０４に対応する（サッフィクスが同じ）出力ポート３１２に出力する。
図３２は、本発明の第３の実施形態の構成を示すブロック図である。図３２を参照すると、本発明の第３の実施形態に係るデータ保持出力回路１３０は、第１の実施形態のデータ保持出力回路１００に比べて、ワードシャッフル機構３３０及びデータシャッフル機構３４０を含む。
また、本実施形態のリード  ２−Ｄ  ＧＡＧ２２０は、メモリ出力用ワードアドレスＯＷＡ＃０〜＃３に替えて、ＴＷＡ＃０〜＃３を出力する。ＴＷＡ＃０〜＃３は、各ＴＷＡ＃０〜＃３を出力するＧＡＧ２０４に対応する（サッフィクスが同じ）出力ポート３１２に出力するデータのアドレスである。
ワードシャッフル機構３３０は、各メモリ４００＃０〜＃３に、ＴＷＡ＃０〜＃３をシャッフル回路用制御情報ＢＡ＃０〜＃３に基づいて並べ替えた、メモリ出力用ワードアドレスＯＷＡ＃０〜＃３を、出力する。
データシャッフル機構３４０は、メモリ出力データＭＯ＃０〜＃３をシャッフル回路用制御情報ＢＡ＃０〜＃３に基づいて、その各メモリ出力データ＃０〜＃３のメモリ用ワードアドレスを生成したＧＡＧ２０４に対応する（サッフィクスが同じ）出力ポート３１２に出力する。
本実施形態の動作について、図３２〜図３４を参照して詳細に説明する。
図３３は、本実施形態における、メモリ内データ配列７２１及び出力データ配列７０３と、読み出しアドレス配列６５１との関係の例を示す図である。
図３４は、本実施形態におけるデータ出力側の動作を示すタイムチャートである。図３４を参照すると、最上部の数字はクロックの番号を示し、その下の信号はクロック信号を示し、それ以下の信号は各信号線から出力されるデータ及び制御情報を示す。
尚、本実施形態においては、メモリ出力用ワードアドレスＯＷＡ＃０〜＃３は、ＴＷＡ＃０〜＃３及びシャッフル回路用制御情報ＢＡ＃０〜＃３がワードシャッフル機構３３０に入力されてから１サイクル後に出力されるものとする。
また、出力データＯＤ＃０〜＃３は、メモリ出力データＭＯ＃０〜＃３がデータシャッフル機構３４０に入力されてから、１サイクル後に出力されるものとする。
また、シャッフル回路用制御情報ＢＡ＃０〜＃３は、データシャッフル機構３４０に入力された後遅延され、ＭＯ＃０〜＃３からの出力１サイクル毎に、シャッフル回路用制御情報ＢＡ＃０〜＃３が入力された順に内部で使用されるものと仮定した。
本実施例においては、まず、リード  ２−Ｄ  ＧＡＧ２２０より生成されたＴＷＡ＃０〜３は、同じくリード  ２−Ｄ  ＧＡＧ２２０から出力されたシャッフル回路用制御情報ＢＡ＃０〜３によって並べなおされる。
例として、２サイクル目を見ると、ＴＷＡ＃０〜３は１、２、３、４と入力され、シャッフル回路用制御情報ＢＡ＃０〜３は２、３、４、１と入力される。この結果、３サイクル目のメモリ出力用ワードアドレスＯＷＡ＃０〜＃３へのアドレスが示すように、ＴＷＡ＃０〜３はメモリ４００＃０〜３へはそれぞれ、３、４、１、２と入力されるように並べなおされる。
これは、各ＴＷＡを同番号のシャッフル回路用制御情報ＢＡが示す番号に遷移させることにより実現される。
出力データＭＯ＃０〜３は、リード  ２−Ｄ  ＧＡＧ２２０が生成したシャッフル回路用制御情報ＢＡ＃０〜３をデータシャッフル機構３４０内部で遅延させた信号によって再度並びなおされて出力される。
例として、４サイクル目にメモリ４００＃０〜＃３から出力されたＫ、Ｏ、Ｃ、Ｇデータ列について説明する。
このデータ列は、先頭データが入力されてから２サイクル後に入力されたデータであるので、本データに適用されるシャッフル回路用制御情報ＢＡ＃０〜＃３は先頭から２サイクル後に入力される制御情報であり、具体的にはシャッフル回路用制御情報ＢＡ＃０〜３はそれぞれ３、４、１、２となっているものである。
ここで、メモリ４００＃０〜＃３から出力されたメモリ出力データＭＯ＃０〜＃３は、シャッフル回路用制御情報ＢＡ＃０〜３それぞれが示すポートへと遷移される。よって出力データＯＤ＃０〜＃３の並びは、Ｃ、Ｇ、Ｋ、Ｏとなり、これらがデータ保持出力回路１３０から出力される。
上述した本実施形態における効果は、第１の実施形態と同様に、マルチバンク構成のメモリの制御において、入力時と出力時とで異なるデータ配列の組み合わせに汎用的に対応することを可能にする点である。
その理由は、以下のような構成を含むからである。即ち、第１に、データ入力時において、ライト  ２−Ｄ  ＧＡＧ２１０及びシャッフル回路３００＃１が、同時に入力された入力パターン配列の複数ワードの入力データそれぞれを、ＧＡＧ制御情報に基づいて排他的に選択し、複数のメモリ４００に格納する。第２に、データ出力時において、リード  ２−Ｄ  ＧＡＧ２２０、ワードシャッフル機構３３０お呼びデータシャッフル機構３４０が、複数のメモリ４００から同時に出力する複数の出力データそれぞれを、ＧＡＧ制御情報に基づいて排他的に選択し、出力ポートに出力パターン配列の出力データを出力する。
［第４の実施形態］
次に、本発明の第４の実施形態について図面を参照して詳細に説明する。以下、本実施形態の説明が不明確にならない範囲で、前述の説明と重複する内容については省略する。
図３５は、本発明の第４の実施形態の構成を示すブロック図である。図３５を参照すると、本実施形態に係るメモリ制御装置１４０は、書込アドレス生成部２１２４、読出アドレス生成部２２２４、入力データ選択制御部２１１４、出力データ選択制御部２２１４、入力データ選択部３１０１及び出力データ選択部３１０２とを含む。
メモリ制御装置１４０は、複数のメモリ（図示しない）へのデータの書き込み、及び複数のメモリからのデータの読み出し、を制御する。
書込アドレス生成部２１２４は、ＧＡＧ制御情報２０５に基づいて、前述の複数のメモリそれぞれに対応する書き込みアドレスを出力する。書込アドレス生成部２１２４は、第１の実施形態のライト  ２−Ｄ  ＧＡＧ２１０のメモリ用ワードアドレス生成器２０２のＧＡＧ２０４と同等の構成要素である。
ＧＡＧ制御情報２０５は、例えば、図３７に示すＧＡＧ制御情報９３１のように、ベースアドレスと、アドレスの増分値であるステップ数と、ベースアドレスに対してステップ数を順次加算してアドレスを生成する回数とを含むループ構造を、１つ以上含む。ＧＡＧ制御情報２０５は、入力データ配列と出力データ配列とに基づいて生成された情報である。ここで、入力データ配列は、前述の複数のメモリへ同時に書き込む複数ワードの入力データの配列を指定する配列である。また、出力データ配列は、前述の複数のメモリから同時に読み出す複数ワードの出力データの配列を指定する配列である。
読出アドレス生成部２２２４は、ＧＡＧ制御情報２０５に基づいて、前述の複数のメモリそれぞれに対応する読み出しアドレスを出力する。読出アドレス生成部２２２４は、第１の実施形態のリード  ２−Ｄ  ＧＡＧ２２０のメモリ用ワードアドレス生成器２０２のＧＡＧ２０４と同等の構成要素である。
入力データ選択制御部２１１４は、ＧＡＧ制御情報２０５に基づいて、入力データ選択部用制御情報（ライト側シャッフル回路用制御情報に対応）を出力する。ここで、入力データ選択部用制御情報は、前述の複数のメモリそれぞれに書き込む入力データのワードを指定する情報である。入力データ選択制御部２１１４は、第１の実施形態のライト  ２−Ｄ  ＧＡＧ２１０のシャッフル回路用制御情報生成器２０１のＧＡＧ２０４と同等の構成要素である。
出力データ選択制御部２２１４は、ＧＡＧ制御情報２０５に基づいて、出力データ選択部用制御情報（リード側シャッフル回路用制御情報に対応）を出力する。ここで、出力データ選択部用制御情報は、前述の複数のメモリから読み出した複数ワードのデータの内の各ワードを排他的に指定する。出力データ選択制御部２２１４は、第１の実施形態のリード  ２−Ｄ  ＧＡＧ２２０のシャッフル回路用制御情報生成器２０１のＧＡＧ２０４と同等の構成要素である。
入力データ選択部３１０１は、入力データ選択制御部２１１４が出力する入力データ選択部用制御情報に基づいて、前述の入力データ配列の入力データの内の各ワードを排他的に選択し、出力する。入力データ選択部３１０１は、第１の実施形態のシャッフル回路３００＃１と同等の構成要素である。
尚、入力データ選択部用制御情報は、入力データ選択部３１０１に、出力データ選択部３１０２が同時に読み出す複数ワードのデータのそれぞれのワードを、前述の複数のメモリに排他的に格納するように、選択させる情報である。
出力データ選択部３１０２は、前述の読み出しアドレスに対応して前述の複数のメモリそれぞれから同時に読み出された複数ワードのデータを受け取る。そして、出力データ選択部３１０２は、前述の出力データ選択部用制御情報に基づいて、受け取った複数ワードのデータの内の各ワードを排他的に選択し、前述の出力データ配列の複数ワードの出力データを出力する。出力データ選択部３１０２は、第１の実施形態のシャッフル回路３００＃２と同等の構成要素である。
上述した本実施形態における効果は、マルチバンク構成のメモリの制御において、入力時と出力時とで異なるデータ配列の組み合わせに汎用的に対応することを可能にする点である。
その理由は、以下のような構成を含むからである。即ち、第１に、データ入力時において、書込アドレス生成部２１２４、入力データ選択制御部２１１４及び入力データ選択部３１０１が、入力パターン配列の入力データそれぞれを、ＧＡＧ制御情報に基づいて排他的に選択し、複数のメモリ４００に格納する。第２に、データ出力時において、読出アドレス生成部２２２４、出力データ選択制御部２２１４及び出力データ選択部３１０２が、複数のメモリから同時に読み出したデータそれぞれを、ＧＡＧ制御情報に基づいて排他的に選択し、出力ポートに出力パターン配列の出力データを出力する。
［第５の実施の形態］
次に、本発明の第５の実施形態について、図面を参照して詳細に説明する。以下、本実施形態の説明が不明確にならない範囲で、前述の説明と重複する内容については省略する。
既に説明したように、図６に示すリード  ２−Ｄ  ＧＡＧ２２０は、全てのメモリ４００から同時にデータを読み出して全ての出力ポート３１２から同時に出力を開始するように、メモリ出力用ワードアドレスＯＷＡ＃０〜＃３及びシャッフル回路用制御情報ＢＡ＃０〜＃３を出力する。
しかし、実際の使用においては、メモリ４００からのデータの読み出しを開始するタイミング、即ち出力ポート３１２から出力データＯＤ＃０〜＃３それぞれの出力を開始するサイクル、が異なる場合がある。
図３９は、メモリ４００毎に出力を開始するタイミングが異なる出力データ配列７６３の例を示す図である。
図３９に示すように、出力データ配列の各列は出力ポート３１２＃０〜＃３に対応し、出力データ配列の各行はサイクル０〜６に対応する。
図３９に示すように、出力データ配列７６３は、サイクル０において、出力ポート３１２＃０から、「Ａ」のインデックスが割り当てられた出力データＯＤ＃０が出力されることを示す。尚、出力ポート３１２＃０は、出力データＯＤ＃０を出力する出力ポート３１２である。以下の、出力ポート３１２＃１〜＃３についても同様である。
また、出力データ配列７６３は、サイクル０において、出力ポート３１２＃１〜＃３から、出力データＯＤ＃１〜＃３が出力されないことを示す。尚、出力データ配列７６３において、出力データＯＤ＃１〜＃３が出力されない要素は、「Ｚ」で示している。
また、出力データ配列７６３は、サイクル１において、出力ポート３１２＃０及び＃１それぞれから、「Ｂ」及び「Ｅ」のインデックスそれぞれが割り当てられた出力データＯＤ＃０及び＃１それぞれが出力されることを示す。また、出力データ配列７６３は、サイクル１において、出力ポート３１２＃２及び＃３それぞれから、出力データＯＤ＃２及び＃３が出力されないことを示す。
以後も同様であり、例えば、出力データ配列７６３は、サイクル６において、出力ポート３１２＃０〜＃２からは、既に並べ替えられたデータの出力が完了しているために、出力データＯＤ＃〜＃２が出力されないことを示す。また、出力データ配列７６３は、サイクル６において、出力ポート３１２＃３から、「Ｐ」のインデックスが割り当てられた出力データＯＤ＃３が出力されることを示す。
例えば、複数の図４に示す入力データ配列７０２から出力データ配列７６３へのデータの並べ替えを連続して実行する場合が考えられる。このような場合、先行する並べ替え処理においてメモリ４００からのデータの出力が完了していない時点で、次の並べ替え処理が開始される。このような場合、先行の並べ替え処理を終了していない出力データＯＤを記憶するメモリ４００と、それに続く後続の並べ替え処理を開始している出力データＯＤを記憶するメモリ４００とが、同一サイクルにおいて、同一メモリ４００にならないような制御が求められる。
本実施形態は、以上説明したような、メモリ４００からの読み出し開始タイミングが異なるような場合に対応する、ＧＡＧ制御情報自動生成部とデータ保持出力回路との実施形態を示す。
図４０は、本実施形態の構成を示すブロック図である。
図４０に示すように、第５の実施形態は、第２の実施形態に比べて、ＧＡＧ制御情報自動生成部５５０に替えてＧＡＧ制御情報自動生成部５６０を、データ保持出力回路１００に替えてデータ保持出力回路１６０を有する点が異なる。
まず、データ保持出力回路１６０について説明する。
図４１は、本実施形態のデータ保持出力回路１６０の構成を示すブロック図である。
図４１に示すようにデータ保持出力回路１６０は、図６に示すデータ保持出力回路１００に比べて、タイミング生成部２６０を更に含む点が異なる。また、データ保持出力回路１６０は、図６に示すデータ保持出力回路１００に比べて、リード  ２−Ｄ  ＧＡＧ２２０に替えて、リード  ２−Ｄ  ＧＡＧ２７０を含む点が異なる。また、命令メモリ２０３は、ＧＡＧ制御情報２０５に替えて、ＧＡＧ制御情報２７５を格納する点が異なる。
図４２は、リード  ２−Ｄ  ＧＡＧ２７０の構成を示すブロック図である。リード  ２−Ｄ  ＧＡＧ２７０は、図３に示す２−Ｄ  ＧＡＧ２００に比べて、シャッフル回路用制御情報生成器２０１に替えてシャッフル回路用制御情報生成器２７１を含む点が異なる。また、リード  ２−Ｄ  ＧＡＧ２７０は、２−Ｄ  ＧＡＧ２００に比べて、メモリ用ワードアドレス生成器２０２に替えてメモリ用ワードアドレス生成器２７２を含む点が異なる。
シャッフル回路用制御情報生成器２７１は、図３に示すシャッフル回路用制御情報生成器２０１に比べて、ＧＡＧ２０４に替えてＧＡＧ２７４を含む点が異なる。
メモリ用ワードアドレス生成器２７２は、図３に示すメモリ用ワードアドレス生成器２０２に比べて、ＧＡＧ２０４に替えてＧＡＧ２７４を含む点が異なる。
また、シャッフル回路用制御情報生成器２７１及びメモリ用ワードアドレス生成器２７２の命令メモリ２０３は、ＧＡＧ制御情報２０５に替えて、ＧＡＧ制御情報２７５を記憶する点が、第１及び第２の実施形態と異なる。ＧＡＧ制御情報２７５の詳細は後述する。
タイミング生成部２６０は、各メモリ４００からのデータ読出の開始タイミングが異なる出力データ配列７６３で、データ保持出力回路１６０がデータを出力するようにリード  ２−Ｄ  ＧＡＧ２２０を制御する。
タイミング生成部２６０は、リード  ２−Ｄ  ＧＡＧ２７０のシャッフル回路用制御情報生成器２７１のＧＡＧ２７４＃０〜＃３に対し、出力データ配列７６３に対応する、制御情報の生成開始を指示するリードサイクルスタート信号ＲＳＳ＃０〜＃３を出力する。また、タイミング生成部２６０は、メモリ用ワードアドレス生成器２７２のＧＡＧ２７４＃０〜＃３に対しても、同じくリードサイクルスタート信号ＲＳＳ＃０〜＃３を出力する。
尚、タイミング生成部２６０は、例えば、ある入力データと出力データとの組の並べ替え処理毎に、予め定められたタイミング生成条件に基づいてリードサイクルスタート信号ＲＳＳ＃０〜＃３生成する。タイミング生成条件は、出力データＯＤ＃０〜＃３それぞれに対して、リードサイクルスタート信号ＲＳＳ＃０〜＃３を出力するタイミング決定する情報である。
尚、タイミング生成部２６０は、例えば、内部に配置した記憶手段（図示しない）にタイミング生成条件を保持し、並べ替え処理の開始時にその並べ替えに対応したタイミング生成条件をメモリから読み出して出力する。また、タイミング生成部２６０は、例えば、外部の手段（図示しない）から指定されたタイミング生成条件に基づいて、リードサイクルスタート信号ＲＳＳ＃０〜＃３を生成するようにしてもよい。
ＧＡＧ２７４＃０〜＃３は、ＧＡＧ制御情報２７５に基づいて、リードサイクルスタート信号ＲＳＳ＃０〜＃３の入力に対応する、シャッフル回路用制御情報ＢＡ＃０〜＃３及びメモリ出力用ワードアドレスＯＷＡ＃０〜＃３を生成し、出力する。
以上で、データ保持出力回路１６０についての説明を終了する。
次に、本実施形態の、ＧＡＧ制御情報自動生成部５６０について説明する。
ＧＡＧ制御情報自動生成部５６０は、第２の実施形態のＧＡＧ制御情報自動生成部５００に比べて、以下のように動作する構成を含む点が異なる。まず、ＧＡＧ制御情報自動生成部５６０は、例えば出力データ配列７６３のような出力データＯＤ＃０〜＃３それぞれの出力を開始するタイミングが異なる出力データ配列から出力タイミング情報を生成する。次に、ＧＡＧ制御情報自動生成部５６０は、出力データ配列７０３に替えて、生成した出力タイミング情報を利用して、ＧＡＧ制御情報２７５を自動生成する。即ち、ＧＡＧ制御情報２７５は、ＧＡＧ制御情報２０５に比べて、出力タイミング情報を利用して生成される点が異なる。
次に、本実施形態の動作について、図を参照して説明する。図４３は、本実施形態のＧＡＧ制御情報自動生成部５６０の動作を示すフローチャートである。
図４３に示すように、ＧＡＧ制御情報自動生成部５６０は、出力タイミング情報生成ステップＳ６６０、出力タイミング配列生成ステップＳ６１６、メモリ配置方法決定ステップＳ６２０、書き込みアドレス生成ステップＳ６３１、書き込み側ＧＡＧ制御情報生成ステップＳ６３２、読み出しアドレス配列生成ステップＳ６４６、読み出し側ＧＡＧ制御情報生成ステップＳ６５０を順次実行する。
まず、ＧＡＧ制御情報自動生成部５６０は、出力データ配列７６３に基づいて、出力タイミング情報７６８を生成する（Ｓ６６０）。具体的には、ＧＡＧ制御情報自動生成部５６０は、図示しないメモリに保持されているｌｏｏｐ＿ｃｙｃｌｅ及びｏｕｔｐｕｔ＿ｄａｔａ［ｘ］［ｙ］を入力データとして、ｒｅｔｉｍｅｄ＿ｄａｔａ［ｘ］［ｙ］を生成する。ここで、ｌｏｏｐ＿ｃｙｃｌｅは、入力データの入力が開始されてから、全入力データが装置へ入力されるまでの時間を示す。ｏｕｔｐｕｔ＿ｄａｔａ［ｘ］［ｙ］は、出力データ配列７６３であり、ｘはサイクル、ｙは出力ポート３１２の番号を示す。ｒｅｔｉｍｅｄ＿ｄａｔａ［ｘ］［ｙ］は、出力タイミング情報７６８であり、ｘはサイクル、ｙは出力ポート３１２の番号を示す。
図４４は、出力タイミング情報生成ステップＳ６６０の詳細な動作を示すフローチャートである。最初に、ＧＡＧ制御情報自動生成部５６０は、ｏｕｔｐｕｔ＿ｄａｔａをコピーし、ベースとなるｒｅｔｉｍｅｄ＿ｄａｔａを作成する（Ｓ６６１）。
次に、ＧＡＧ制御情報自動生成部５６０は、全出力ポート３１２の内で最も開始タイミングが早い出力ポート３１２（最早列に対応）の、開始サイクルを取得する。続けて、ＧＡＧ制御情報自動生成部５６０は、取得した開始サイクルの値を、ｍｉｎ＿ｄｅｌａｙとして図示しない記憶手段に記憶する（Ｓ６６２）。
次に、ＧＡＧ制御情報自動生成部５６０は、各出力ポート３１２の開始サイクル数とｍｉｎ＿ｄｅｌａｙとの差分を算出する。続けて、ＧＡＧ制御情報自動生成部５６０は、算出した差分を、ｄｉｆｆ＿ｄｅｌａｙとして図示しない記憶手段に記憶する（Ｓ６６３）。
次に、ＧＡＧ制御情報自動生成部５６０は、ｌｏｏｐ＿ｃｙｃｌｅ及びｄｉｆｆ＿ｄｅｌａｙに基づいて、前部有効領域、後部有効領域を算出する（Ｓ６６４）。
次に、ＧＡＧ制御情報自動生成部５６０は、前部有効領域及び後部有効領域に基づいてリタイミングデータを生成する。続けて、ＧＡＧ制御情報自動生成部５６０は、生成したリタイミングデータ及びｌｏｏｐ＿ｃｙｃｌｅに基づいて出力タイミング情報７６８を生成する（Ｓ６６５）。
図４５は、前部有効領域及び後部有効領域を算出するステップＳ６６４の詳細な動作を示すフローチャートである。前部有効領域及び後部有効領域を算出する処理は、２つのループ処理で構成される。
最初に、１つ目のループにおいて、ＧＡＧ制御情報自動生成部５６０は、出力ポート３１２の数だけステップＳ６６４２を繰り返す処理を行う（Ｓ６６４１）。
ＧＡＧ制御情報自動生成部５６０は、出力ポート３１２の前部有効領域（ｆ＿ｖ＿ａｒｅａ）として、対応する出力ポート３１２のｄｉｆｆ＿ｄｅｌａｙを図示しない記憶手段に記憶する（Ｓ６６４２）。
次に、２つ目のループにおいて、ＧＡＧ制御情報自動生成部５６０は、出力ポート３１２の数だけステップＳ６３４５を繰り返す処理を行う（Ｓ６６４４）。
ＧＡＧ制御情報自動生成部５６０は、出力ポート３１２の後部有効領域（ｌ＿ｖ＿ａｒｅａ）として、対応するｆ＿ｖ＿ａｒｅａにｌｏｏｐ＿ｃｙｃｌｅを、加算した値を図示しない記憶手段に記憶する（Ｓ６６４５）。
図４６は、出力タイミング情報７６８を生成するステップＳ６６５の詳細な動作を示すフローチャートである。出力タイミング情報７６８を生成する処理は、外側ループと内側ループとの２重ループで構成される。
外側ループにおいて、ＧＡＧ制御情報自動生成部５６０は、出力ポート３１２＃ｔ（ｔ＝０〜３）について順次、ステップＳ６６５２〜ステップＳ６６５６の処理を行う（Ｓ６６５１）。
外側ループの中の処理において、まず、ＧＡＧ制御情報自動生成部５６０は、ｏｆｆｓｅｔ（内側ループで使用する変数）に「１」を設定する（Ｓ６６５２）。
次に、内側ループにおいて、ＧＡＧ制御情報自動生成部５６０は、１つの出力ポート３１２＃ｔについて、リタイミングデータを生成する（Ｓ６６５３）。具体的には、ＧＡＧ制御情報自動生成部５６０は、ｆ＿ｖ＿ａｒｅａ［ｔ］−１のサイクルから０（先頭）のサイクルまでのリタイミングデータの要素を配置する処理を繰り返す。
内側ループの中の処理において、まず、ＧＡＧ制御情報自動生成部５６０は、ｆ＿ｖ＿ａｒｅａ［ｔ］からｏｆｆｓｅｔを減算した値ｌ＿ｐｏｓを算出する（Ｓ６６５４）。
次に、ＧＡＧ制御情報自動生成部５６０は、ｌ＿ｐｏｓに存在するｏｕｔｐｕｔ＿ｄａｔａ［ｌ＿ｐｏｓ］［ｔ］の要素をｒｅｔｉｍｅｄ＿ｄａｔａ［ｒ］［ｔ］にコピーする（Ｓ６６５５）。これはすなわち、最も開始タイミングが早いメモリ４００の出力が終了するサイクルを基点として、その他のメモリ４００について、前記サイクル以降に出力されるデータを折り返して配置する処理に等しい。
次に、ＧＡＧ制御情報自動生成部５６０は、Ｏｆｆｓｅｔに「１」加算する。（Ｓ６６５６）。
外側ループの処理が終了した後に、ＧＡＧ制御情報自動生成部５６０は、ｒｅｔｉｍｅｄ＿ｄａｔａを、先頭から数えて、ｌｏｏｐ＿ｃｙｃｌｅと同じ長さになるように調整し、出力タイミング情報７６８を生成する（Ｓ６６５７）。
次に、上述の動作について、具体的な値を示して詳細に説明する。
尚、前提として、入力データ配列７０２は図４に示す入力データ配列７０２、及び出力データ配列７６３は図３９に示す出力データ配列７６３、であるとする。従って、ｌｏｏｐ＿ｃｙｃｌｅは、「４」であるとする。まず、ＧＡＧ制御情報自動生成部５６０は、出力データ配列７６３（ｏｕｔｐｕｔ＿ｄａｔａ）をコピーし、ベースとなるリタイミングデータ（ｒｅｔｉｍｅｄ＿ｄａｔａ）を作成する（Ｓ６６１）。図４７は、ベースとなるリタイミングデータ７６４を示す図である。
次に、ＧＡＧ制御情報自動生成部５６０は、ｍｉｎ＿ｄｅｌｅｙを取得する（Ｓ６６２）。図３９に示す出力データ配列７６３を参照すると、最も早いデータ出力の開始タイミングはサイクル０であるため、ｍｉｎ＿ｄｅｌａｙは、「０」である。
次に、ＧＡＧ制御情報自動生成部５６０は、各出力ポート３１２のｄｉｆｆ＿ｄｅｌａｙを算出する（Ｓ６６３）。出力データ配列７６３の場合、出力ポート３１２＃０のｄｉｆｆ＿ｄｅｌａｙは「０」、出力ポート３１２＃１のｄｉｆｆ＿ｄｅｌａｙは「１」、出力ポート３１２＃２のｄｉｆｆ＿ｄｅｌａｙは「２」、出力ポート３１２＃３のｄｉｆｆ＿ｄｅｌａｙは「３」である。
次に、ＧＡＧ制御情報自動生成部５６０は、各出力ポート３１２に対応するｆ＿ｖ＿ａｒｅａ（前部有効領域）を算出する。出力データ配列７６３の場合、出力ポート３１２＃０のｆ＿ｖ＿ａｒｅａは「０」、出力ポート３１２＃１のｆ＿ｖ＿ａｒｅａは「１」、出力ポート３１２＃２のｆ＿ｖ＿ａｒｅａは「２」、出力ポート３１２＃３のｆ＿ｖ＿ａｒｅａは「３」である（Ｓ６６４１、Ｓ６６４２）。
次に、ＧＡＧ制御情報自動生成部５６０は、各出力ポート３１２に対応するｌ＿ｖ＿ａｒｅａ（後部有効領域）を算出する。出力データ配列７６３の場合、出力ポート３１２＃０のｌ＿ｖ＿ａｒｅａは「４」、出力ポート３１２＃１のｌ＿ｖ＿ａｒｅａは「５」、出力ポート３１２＃２のｌ＿ｖ＿ａｒｅａは「６」、出力ポート３１２＃３のｌ＿ｖ＿ａｒｅａは「７」である（Ｓ６６４４、Ｓ６６４５）。
次に、ＧＡＧ制御情報自動生成部５６０は、出力ポート３１２＃０について、出力タイミング情報７６８の要素を決定する外側ループを実行する（Ｓ６６５１）。
次に、出力データ配列７６３の場合、出力ポート３１２＃０のｆ＿ｖ＿ａｒｅａは［０］であるため、ＧＡＧ制御情報自動生成部５６０は、内側ループは１度も実行しないと判断し（Ｓ６６５３）、リタイミングデータ７６４を変更しない。具体的には、ステップＳ６６５３で、ｆｏｒ（ｒ＝−１；ｒ＞＝０；ｒ−−）となり、内側ループを実行しない。
次に、ＧＡＧ制御情報自動生成部５６０は、出力ポート３１２＃０について、出力タイミング情報７６８の要素を生成する（Ｓ６６５１）。
次に、ＧＡＧ制御情報自動生成部５６０は、出力ポート３１２＃１について、出力タイミング情報７６８の要素を生成する外側ループを実行する（Ｓ６６５１）。
次に、出力データ配列７６３の場合、出力ポート３１２＃０のｆ＿ｖ＿ａｒｅａは［１］であるため、ＧＡＧ制御情報自動生成部５６０は、０サイクル目のリタイミングデータの要素を決定する内側ループを実行する（Ｓ６６５３）。具体的には、ステップＳ６６５３で、ｆｏｒ（ｒ＝０；ｒ＞＝０；ｒ−−）となり、サイクル０分のみ内側ループを実行する。
次に、出力データ配列７６３の場合、ＧＡＧ制御情報自動生成部５６０は、ｌ＿ｐｏｓ＝ｌ＿ｖ＿ａｒｅａ［１］−ｏｆｆｓｅｔ＝５−１＝４を算出する（Ｓ６６５４）。
次に、ＧＡＧ制御情報自動生成部５６０は、ｒｅｔｉｍｅｄ＿ｄａｔａ［０］［１］にｏｕｔｐｕｔ＿ｄａｔａ［４］［１］の「Ｈ」を格納する（Ｓ６６５５）。図４８は、出力ポート＃１の０サイクル目の位置に「Ｈ」が格納された、リタイミングデータ７６５を示す図である。
ＧＡＧ制御情報自動生成部５６０は、出力ポート＃２についても同様にして、内側ループの１回目において、ｌ＿ｐｏｓ＝ｌ＿ｖ＿ａｒｅａ［２］−ｏｆｆｓｅｔ＝６−１＝５を算出する（Ｓ６６５４）。次に、ＧＡＧ制御情報自動生成部５６０は、ｒｅｔｉｍｅｄ＿ｄａｔａ［１］［２］にｏｕｔｐｕｔ＿ｄａｔａ［５］［２］の「Ｌ」を格納する（Ｓ６６５５）。次に、ＧＡＧ制御情報自動生成部５６０は、内側ループの２回目において、ｌ＿ｐｏｓ＝ｌ＿ｖ＿ａｒｅａ［２］−ｏｆｆｓｅｔ＝６−２＝４を算出する（Ｓ６６５４）。次に、ＧＡＧ制御情報自動生成部５６０は、ｒｅｔｉｍｅｄ＿ｄａｔａ［０］［２］にｏｕｔｐｕｔ＿ｄａｔａ［４］［２］の「Ｋ」を格納する（Ｓ６６５５）。
図４９は、出力ポート＃２の０サイクル目及び１サイクル目の位置それぞれに、「Ｋ」及び「Ｌ」それぞれが、格納された、リタイミングデータ７６６を示す図である。
ＧＡＧ制御情報自動生成部５６０は、出力ポート＃３についても同様にして、出力タイミング情報７６８の要素を決定し、格納する。図５０は、出力ポート＃３の０サイクル目、１サイクル目及び２サイクル目の位置それぞれに、「Ｎ」、「Ｏ」及び「Ｐ」が、格納された、リタイミングデータ７６７を示す図である。
最後に、リタイミングデータ７６７をｌｏｏｐ＿ｃｙｃｌｅで調整し、出力タイミング情報７６８を生成する。図５１は、出力タイミング情報７６８の例を示す図である。
以上をまとめると、出力タイミング情報生成ステップＳ６６０は、出力データ配列７６３に基づいて、第１の要素に対応する第２の要素に、第３の要素に対応する第４の要素を、再配置した出力タイミング情報を生成する。
ここで、第１の要素は、出力データ配列７６３の列（出力ポート３１２に対応）の内の読み出しを開始するタイミングが最も早い列である最早列における、各メモリ４００からの読み出しが行われる出力データ配列７６３の行（サイクルに対応）の要素である。第２の要素は、出力データ配列７６３の各列における、各メモリ４００からの読み出しが行われない出力データ配列７６３の行の要素である。第３の要素は、最早列における、読み出しの終了以後の出力データ配列７６３の行の要素である。第４の要素は、出力データ配列７６３の各列における、各メモリ４００からの読み出しが行われる出力データ配列７６３の行の要素である。
以上が、図４３の出力タイミング情報生成手段ステップＳ６６０の説明である。
次に、ＧＡＧ制御情報自動生成部５６０は、出力タイミング配列生成ステップＳ６１６を実行する。出力タイミング配列生成ステップＳ６１６は、第２の実施形態において説明した出力タイミング配列Ｓ６１０と比べて、出力データ配列７０３に替えて出力タイミング情報７６８（ｒｅｔｉｍｅｄ＿ｄａｔａ）を入力とする点が異なる。出力タイミング配列生成ステップＳ６１６は、ｒｅｔｉｍｅｄ＿ｄａｔａを入力とする点を除いて、出力タイミング配列Ｓ６１０と同じである。
次に、ＧＡＧ制御情報自動生成部５６０は、メモリ配置方法決定ステップＳ６２０、書き込みアドレス生成ステップＳ６３１及び書き込み側ＧＡＧ制御情報生成ステップＳ６３２を順次実行する。メモリ配置方法決定ステップＳ６２０、書き込みアドレス生成ステップＳ６３１及び書き込み側ＧＡＧ制御情報生成ステップＳ６３２の動作は、第２の実施形態と同じである。
次に、ＧＡＧ制御情報自動生成部５６０は、読み出しアドレス配列生成ステップＳ６４６を実行する。読み出しアドレス配列生成ステップＳ６４６は、第２の実施形態において説明した読み出しアドレス配列生成ステップＳ６４０と比べて、出力データ配列７０３に替えて、ｒｅｔｉｍｅｄ＿ｄａｔａを入力とする点が異なる。読み出しアドレス配列生成ステップＳ６４６は、出力タイミング情報７６８（ｒｅｔｉｍｅｄ＿ｄａｔａ）を入力とする点を除いて、読み出しアドレス配列生成ステップＳ６４０と同じである。
次に、ＧＡＧ制御情報自動生成部５６０は、読み出し側ＧＡＧ制御情報生成ステップＳ６５０を実行する。読み出し側ＧＡＧ制御情報生成ステップＳ６５０の動作は、第２の実施形態と同じである。
上述した本実施形態における効果は、各メモリ４００からのデータ読出の開始タイミングが異なる場合において、連続した並べ替え処理に汎用的に対応することを可能にする点である。具体的には、先行の並べ替え処理を終了していない出力データＯＤを記憶するメモリ４００と、それに続く後続の並べ替え処理を開始している出力データＯＤを記憶するメモリ４００とが、同一サイクルにおいて、同一メモリ４００にならないように制御することが可能になる。
その理由は、以下のような構成を含むからである。即ち、第１に、ＧＡＧ制御情報自動生成部５６０が、出力データ配列７６３に基づいて出力タイミング情報７６８を生成する。第２にＧＡＧ制御情報自動生成部５６０が、出力データ配列７６３に替えて出力タイミング情報７６８を利用して、ＧＡＧ制御情報２７５を生成する。第３にデータ保持出力回路１６０のリード  ２−Ｄ  ＧＡＧ２７０が、この生成されたＧＡＧ制御情報２０５に基づいて、タイミング生成部２６０のＲＳＳ＃０〜＃３に対応するＯＷＡ＃０〜＃３及びＢＡ＃０〜＃３を出力する。
［第６の実施形態］
次に、本発明の第６の実施形態について図面を参照して詳細に説明する。以下、本実施形態の説明が不明確にならない範囲で、前述の説明と重複する内容については省略する。
第６の実施形態は、プログラムにより所定の処理をコンピュータに実行させる実施形態である。第５の実施形態は、プログラムをコンピュータの記録媒体に記録して実行することにより、ＧＡＧ制御情報２０５を生成する。
図３６は、本実施形態の構成を示すブロック図である。図３６は、本実施形態に係る、コンピュータ１５０の構成を示すブロック図である。図３６を参照すると、コンピュータ１５０は、プロセッサ部５４０、記憶媒体５５０及び記憶部５３０を含む。記憶媒体５５０は、例えば、ディスク装置である。
プロセッサ部５４０は、記憶媒体５５０に格納されたメモリ制御情報生成プログラムを、例えば記憶部５３０に展開し、展開したメモリ制御情報生成プログラムに基づいて所定の処理を実行する。
記憶媒体５５０は、上述の各実施形態における情報処理端末の処理の一部をコンピュータに実行させるプログラムを記憶する。
記憶媒体５５０に格納されたメモリ制御情報生成プログラムは、例えば、実施形態２で説明した図１２のフローチャートで示されるプログラムである。
記憶部５３０は、展開されたそのメモリ制御情報生成プログラム及びそのメモリ制御情報生成プログラムの作業情報（例えば、入力データ配列）を記憶する。
上述した本実施形態における効果は、２次元ＧＡＧを制御するＧＡＧ制御情報２０５を、自動的に生成することが可能になる点である。
その理由は、記憶媒体５５０に格納された制御情報自動生成のためのプログラムに基づいて、プロセッサ部５４０がＧＡＧ制御情報２０５を生成するようにしたからである。
以上の各実施形態で説明した各構成要素は、必ずしも個々に独立した存在である必要はない。例えば、各構成要素は、複数の構成要素が１個のモジュールとして実現されたり、一つの構成要素が複数のモジュールで実現されたりしてもよい。また、各構成要素は、ある構成要素が他の構成要素の一部であったり、ある構成要素の一部と他の構成要素の一部とが重複していたり、といったような構成であってもよい。
また、以上説明した各実施形態では、複数の動作をフローチャートの形式で順番に記載してあるが、その記載の順番は複数の動作を実行する順番を限定するものではない。このため、各実施形態を実施するときには、その複数の動作の順番は内容的に支障しない範囲で変更することができる。
更に、以上説明した各実施形態では、複数の動作は個々に相違するタイミングで実行されることに限定されない。例えば、ある動作の実行中に他の動作が発生したり、ある動作と他の動作との実行タイミングが部分的に乃至全部において重複していたりしていてもよい。
更に、以上説明した各実施形態では、ある動作が他の動作の契機になるように記載しているが、その記載はある動作と他の動作の全ての関係を限定するものではない。このため、各実施形態を実施するときには、その複数の動作の関係は内容的に支障のない範囲で変更することができる。また各構成要素の各動作の具体的な記載は、各構成要素の各動作を限定するものではない。このため、各構成要素の具体的な各動作は、各実施形態を実施する上で機能的、性能的、その他の特性に対して支障をきたさない範囲内で変更されて良い。
尚、以上説明した各実施形態における各構成要素は、必要に応じ可能であれば、ハードウェアで実現されても良いし、ソフトウェアで実現されても良いし、ハードウェアとソフトウェアの混在により実現されても良い。
また、各構成要素の物理的な構成は、以上の実施形態の記載に限定されることはなく、独立して存在しても良いし、組み合わされて存在しても良いしまたは分離して構成されても良い。
上記の実施形態の一部または全部は、以下の付記のようにも記載されうるが、以下には限られない。
（付記１）
第１から第Ｍ（Ｍは２以上の任意の自然数）のメモリそれぞれに同時に書き込む複数の入力データの組の配列を指定する入力データ配列と前記第１から第Ｍのメモリから同時に読み出す複数の出力データの組の配列を指定する出力データ配列とに基づいて生成された、ベースアドレスとアドレスの増分値であるステップ数と前記ベースアドレスに対して前記ステップ数を順次加算してアドレスを生成する回数とを含むループ構造を１つ以上含む、汎用アドレス生成器制御情報（ＧＡＧ制御情報）に基づいて、第１から第Ｍのメモリそれぞれに対応する、書き込みアドレスを出力する、書込アドレス生成手段と、
前記ＧＡＧ制御情報に基づいて、前記第１から第Ｍのメモリそれぞれに対応する、読み出しアドレスを出力する、読出アドレス生成手段と、
前記ＧＡＧ制御情報に基づいて、前記第１から第Ｍのメモリそれぞれに書き込む前記入力データの組を排他的に指定する入力データ選択手段用制御情報を出力する、入力データ選択制御手段と、
前記ＧＡＧ制御情報に基づいて、前記第１から第Ｍのメモリから読み出した複数のデータの組の内の各データの組を排他的に指定する、出力データ選択手段用制御情報を出力する、出力データ選択制御手段と、
前記入力データ選択手段用制御情報に基づいて、前記入力データ配列の前記入力データの組の内の各データの組を排他的に選択し、出力する入力データ選択手段と、
前記読み出しアドレスに対応して前記第１から第Ｍのメモリそれぞれから同時に読み出された複数のデータの組を受け取り、前記出力データ選択手段用制御情報に基づいて、前記受け取った複数のデータの組の内の各データの組を排他的に選択し、前記出力データ配列の前記出力データを出力する出力データ選択手段と、を含むメモリ制御装置。
（付記２）
前記入力データ配列及び前記出力データ配列に基づいて、前記入力データ配列の各要素が前記出力データ配列の先頭から何行目に配置されているかを示す出力タイミング配列を生成する出力タイミング配列生成手段と、
前記入力データ配列及び前記出力タイミング配列に基づいて、前記入力データ配列の各要素を前記第１から第Ｍのメモリに格納した状態を示すメモリ内データ配列を生成するメモリ配置方法決定手段と、
前記入力データ配列及び前記メモリ内データ配列に基づいて、前記入力データ配列の各要素毎の前記入力データ選択手段用制御情報及び前記書き込みアドレスを含む、書き込みアドレス配列を生成する書き込みアドレス配列生成手段と、
前記書き込みアドレス配列に基づいて、前記ＧＡＧ制御情報を生成する書き込み側ＧＡＧ制御情報生成手段と、を含むＧＡＧ制御情報自動生成手段を更に含む付記１記載のメモリ制御装置。
（付記３）
前記ＧＡＧ制御情報自動生成手段は、
前記メモリ内データ配列及び前記出力データ配列に基づいて、前記メモリ内データ配列の各要素毎の前記読み出しアドレス及び前記出力データ選択手段用制御情報を含む読み出しアドレス配列を生成する読み出しアドレス配列生成手段と、
前記読み出しアドレス配列に基づいて、前記ＧＡＧ制御情報を生成する読み出し側ＧＡＧ制御情報生成手段と、を更に含む付記２記載のメモリ制御装置。
（付記４）
前記出力データ配列は、前記第１から第Ｍのメモリからの読み出しを開始するタイミングが異なる出力データ配列であって、
前記ＧＡＧ制御情報自動生成手段は、前記出力データ配列に基づいて、前記出力データ配列の行の要素を再配置した出力タイミング情報を生成する出力タイミング情報生成手段を更に含み、
前記出力タイミング情報生成手段は、前記出力データ配列の列の内の読み出しを開始するタイミングが最も早い前記列である最早列における前記第１から第Ｍのメモリからのデータの読み出しが行われる前記出力データ配列の行の要素に対応する、前記出力データ配列の各列における前記第１から第Ｍのメモリからのデータの読み出しが行われない前記出力データ配列の行の要素に、前記最早列における読み出しの終了以後の前記出力データ配列の行の要素に対応する、前記出力データ配列の各列における前記第１から第Ｍのメモリからのデータの読み出しが行われる前記出力データ配列の行の要素を、再配置した出力タイミング情報を生成し、
前記出力タイミング配列生成手段は、前記入力データ配列及び前記出力タイミング情報に基づいて、出力タイミング配列を生成する
付記２または３に記載のメモリ制御装置。
（付記５）
前記出力タイミング情報生成手段は、前記第１から第Ｍのメモリそれぞれの読み出しを開始するタイミングに基づいて、前部有効領域及び後部有効領域を算出し、前記第１から第Ｍのメモリの中で出力を開始するタイミングが最も早い前記第１から第Ｍのメモリ以外の前記第１から第Ｍのメモリの前記出力データ配列の要素において、後部有効領域の要素をコピーして、前部有効領域に再配置して出力タイミング情報を生成する
付記４記載のメモリ制御装置。
（付記６）
前記出力タイミング情報生成手段は、前記第１から第Ｍのメモリの中で出力を開始するタイミングが最も早い前記第１から第Ｍのメモリが出力を開始する時刻と、それ以外の前記第１から第Ｍのメモリが出力を開始する時刻との差分に対応する値を前記前部有効領域として算出する
付記５記載のメモリ制御装置。
（付記７）
前記出力タイミング情報生成手段は、前記前部有効領域に、入力データ配列がデータ並べ替え機構への入力を開始してから入力が終了するまでの時刻との差分に対応する値を、加算して前記後部有効領域として算出する
（付記８）
前記書込アドレス生成手段、前記読出アドレス生成手段、前記入力データ選択制御手段及び前記出力データ選択制御手段のそれぞれに対応する前記ＧＡＧ制御情報を保持する命令記憶手段を更に含む付記１乃至７のいずれかに記載のメモリ制御装置。
（付記９）
前記第１から第Ｍのメモリを更に含む付記１乃至８のいずれかに記載のメモリ制御装置。
（付記１０）
メモリ制御装置が、
第１から第Ｍ（Ｍは２以上の任意の自然数）のメモリそれぞれに同時に書き込む複数の入力データの組の配列を指定する入力データ配列と前記第１から第Ｍのメモリから同時に読み出す複数の出力データの組の配列を指定する出力データ配列とに基づいて生成された、ベースアドレスとアドレスの増分値であるステップ数と前記ベースアドレスに対して前記ステップ数を順次加算してアドレスを生成する回数とを含むループ構造を１つ以上含む、汎用アドレス生成器制御情報（ＧＡＧ制御情報）に基づいて、第１から第Ｍのメモリそれぞれに対応する、書き込みアドレスを出力し、
前記ＧＡＧ制御情報に基づいて、前記第１から第Ｍのメモリそれぞれに対応する、読み出しアドレスを出力し、
前記ＧＡＧ制御情報に基づいて、前記第１から第Ｍのメモリそれぞれに書き込む前記入力データの組を排他的に指定する入力データ選択手段用制御情報を出力し、
前記ＧＡＧ制御情報に基づいて、前記第１から第Ｍのメモリから読み出した複数のデータの組の内の各データの組を排他的に指定する、出力データ選択手段用制御情報を出力し、
前記入力データ選択手段用制御情報に基づいて、前記入力データ配列の前記入力データの組の内の各データの組を排他的に選択し、出力し、
前記読み出しアドレスに対応して前記第１から第Ｍのメモリそれぞれから同時に読み出された複数のデータの組を受け取り、前記出力データ選択手段用制御情報に基づいて、前記受け取った複数のデータの組の内の各データの組を排他的に選択し、前記出力データ配列の前記出力データを出力するメモリ制御方法。
（付記１１）
ＧＡＧ制御情報自動生成手段が、
前記入力データ配列及び前記出力データ配列に基づいて、前記入力データ配列の各要素が前記出力データ配列の先頭から何行目に配置されているかを示す出力タイミング配列を生成し、
前記入力データ配列及び前記出力タイミング配列に基づいて、前記入力データ配列の各要素を前記第１から第Ｍのメモリに格納した状態を示すメモリ内データ配列を生成し、
前記入力データ配列及び前記メモリ内データ配列に基づいて、前記入力データ配列の各要素毎の前記入力データ選択手段用制御情報及び前記書き込みアドレスを含む、書き込みアドレス配列を生成し、
前記書き込みアドレス配列に基づいて、前記ＧＡＧ制御情報を生成する付記１０記載のメモリ制御方法。
（付記１２）
前記ＧＡＧ制御情報自動生成手段は、
前記メモリ内データ配列及び前記出力データ配列に基づいて、前記メモリ内データ配列の各要素毎の前記読み出しアドレス及び前記出力データ選択手段用制御情報を含む、読み出しアドレス配列を生成し、
前記読み出しアドレス配列に基づいて、前記ＧＡＧ制御情報を生成する付記１１記載のメモリ制御方法。
（付記１３）
第１から第Ｍ（Ｍは２以上の任意の自然数）のメモリそれぞれに同時に書き込む複数の入力データの組の配列を指定する入力データ配列と前記第１から第Ｍのメモリから同時に読み出す複数の出力データの組の配列を指定する出力データ配列とに基づいて、前記入力データ配列の各要素が前記出力データ配列の先頭から何行目に配置されているかを示す出力タイミング配列を生成する処理と、
前記入力データ配列及び前記出力タイミング配列に基づいて、前記入力データ配列の各要素を前記第１から第Ｍのメモリに格納した状態を示すメモリ内データ配列を生成する処理と、
前記入力データ配列及び前記メモリ内データ配列に基づいて、前記入力データ配列の各要素毎の、前記第１から第Ｍのメモリそれぞれに書き込む前記入力データの組を排他的に指定する入力データ選択手段用制御情報及び前記第１から第Ｍのメモリそれぞれに対応する書き込みアドレスを含む、書き込みアドレス配列を生成する処理と、
前記書き込みアドレス配列に基づいて、ベースアドレスとアドレスの増分値であるステップ数と前記ベースアドレスに対して前記ステップ数を順次加算してアドレスを生成する回数とを含むループ構造を１つ以上含む、汎用アドレス生成器制御情報（ＧＡＧ制御情報）を生成する処理と、をコンピュータに実行させるメモリ制御情報生成プログラム。
（付記１４）
前記メモリ内データ配列及び前記出力データ配列に基づいて、前記メモリ内データ配列の各要素毎の前記第１から第Ｍのメモリそれぞれに対応する読み出しアドレス及び前記第１から第Ｍのメモリから読み出した複数のデータの組の内の各データの組を排他的に指定する、出力データ選択手段用制御情報を含む、読み出しアドレス配列を生成する処理と、
前記読み出しアドレス配列に基づいて、前記ＧＡＧ制御情報を生成する処理と、をコンピュータに実行させる付記１３記載のメモリ制御情報生成プログラム。
（付記１５）
第１から第Ｍ（Ｍは２以上の任意の自然数）のメモリそれぞれに同時に書き込む複数の入力データの組の配列を指定する入力データ配列と前記第１から第Ｍのメモリから同時に読み出す複数の出力データの組の配列を指定する出力データ配列とに基づいて、前記入力データ配列の各要素が前記出力データ配列の先頭から何行目に配置されているかを示す出力タイミング配列を生成し、
前記入力データ配列及び前記出力タイミング配列に基づいて、前記入力データ配列の各要素を前記第１から第Ｍのメモリに格納した状態を示すメモリ内データ配列を生成し、
前記入力データ配列及び前記メモリ内データ配列に基づいて、前記入力データ配列の各要素毎の、前記第１から第Ｍのメモリそれぞれに書き込む前記入力データの組を排他的に指定する入力データ選択手段用制御情報及び前記第１から第Ｍのメモリそれぞれに対応する書き込みアドレスを含む、書き込みアドレス配列を生成し、
前記書き込みアドレス配列に基づいて、ベースアドレスとアドレスの増分値であるステップ数と前記ベースアドレスに対して前記ステップ数を順次加算してアドレスを生成する回数とを含むループ構造を１つ以上含む、汎用アドレス生成器制御情報（ＧＡＧ制御情報）を生成するメモリ制御方法。
（付記１６）
前記メモリ内データ配列及び前記出力データ配列に基づいて、前記メモリ内データ配列の各要素毎の前記第１から第Ｍのメモリそれぞれに対応する読み出しアドレス及び前記第１から第Ｍのメモリから読み出した複数のデータの組の内の各データの組を排他的に指定する、出力データ選択手段用制御情報を含む読み出しアドレス配列を生成し、
前記読み出しアドレス配列に基づいて、前記ＧＡＧ制御情報を生成する付記１５記載のメモリ制御方法。
（付記１７）
第１から第Ｍ（Ｍは２以上の任意の自然数）のメモリそれぞれに同時に書き込む複数の入力データの組の配列を指定する入力データ配列と前記第１から第Ｍのメモリから同時に読み出す複数の出力データの組の配列を指定する出力データ配列とに基づいて、前記入力データ配列の各要素が前記出力データ配列の先頭から何行目に配置されているかを示す出力タイミング配列を生成する出力タイミング配列生成手段と、
前記入力データ配列及び前記出力タイミング配列に基づいて、前記入力データ配列の各要素を前記第１から第Ｍのメモリに格納した状態を示すメモリ内データ配列を生成するメモリ配置方法決定手段と、
前記入力データ配列及び前記メモリ内データ配列に基づいて、前記入力データ配列の各要素毎の、前記第１から第Ｍのメモリそれぞれに書き込む前記入力データの組を排他的に指定する入力データ選択手段用制御情報及び前記第１から第Ｍのメモリそれぞれに対応する書き込みアドレスを含む、書き込みアドレス配列を生成する書き込みアドレス配列生成手段と、
前記書き込みアドレス配列に基づいて、ベースアドレスとアドレスの増分値であるステップ数と前記ベースアドレスに対して前記ステップ数を順次加算してアドレスを生成する回数とを含むループ構造を１つ以上含む、汎用アドレス生成器制御情報（ＧＡＧ制御情報）を生成する書き込み側ＧＡＧ制御情報生成手段と、を含むメモリ制御装置。
（付記１８）
前記メモリ内データ配列及び前記出力データ配列に基づいて、前記メモリ内データ配列の各要素毎の前記第１から第Ｍのメモリそれぞれに対応する読み出しアドレス及び前記第１から第Ｍのメモリから読み出した複数のデータの組の内の各データの組を排他的に指定する、出力データ選択手段用制御情報を含む、読み出しアドレス配列を生成する読み出しアドレス配列生成手段と、
前記読み出しアドレス配列に基づいて、前記ＧＡＧ制御情報を生成する読み出し側ＧＡＧ制御情報生成手段と、を更に含む付記１７記載のメモリ制御装置。
以上、実施形態を参照して本願発明を説明したが、本願発明は上記実施形態に限定されものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
この出願は、２０１０年１１月２４日に出願された日本出願特願２０１０−２６０７９０及び２０１１年５月２４日に出願された日本出願特願２０１１−１１５４８４を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【産業上の利用可能性】
【００１０】
本発明は、マルチバンクのメモリを使用した、一般的で複雑な信号処理アルゴリズムで動作するプロセッサ用コンパイラ等に適用できる。
【符号の説明】
【００１１】
１００  データ保持出力回路
１３０  データ保持出力回路
１４０  メモリ制御装置
１５０  コンピュータ
１６０  データ保持出力回路
２００  ２−Ｄ  ＧＡＧ
２０１  シャッフル回路用制御情報生成器
２０２  メモリ用ワードアドレス生成器
２０３  命令メモリ
２０４  ＧＡＧ
２０５  ＧＡＧ制御情報
２１０  ライト  ２−Ｄ  ＧＡＧ
２２０  リード  ２−Ｄ  ＧＡＧ
２６０  タイミング生成部
２７０  リード  ２−Ｄ  ＧＡＧ
２７１  シャッフル回路用制御情報生成器
２７２  メモリ用ワードアドレス生成器
２７４  ＧＡＧ
２７５  ＧＡＧ制御情報
３００  シャッフル回路
３１０  Ｍ：１  セレクタ
３１１  入力ポート
３１２  出力ポート
３３０  ワードシャッフル機構
３４０  データシャッフル機構
４００  メモリ
５００  ＧＡＧ制御情報自動生成部
５３０  記憶部
５４０  プロセッサ部
５５０  記憶媒体
５６０  ＧＡＧ制御情報自動生成部
６５１  読み出しアドレス配列
７００  入力データ配列
７０１  出力データ配列
７０２  入力データ配列
７０３  出力データ配列
７１１  出力タイミング配列
７２１  メモリ内データ配列
７２１  モリ内データ配列
７２２  メモリ配置後タイミング配列
７３１  アドレス配列
７４１  読み出しアドレス配列
７６３  出力データ配列
７６４  リタイミングデータ
７６５  リタイミングデータ
７６６  リタイミングデータ
７６７  リタイミングデータ
７６８  出力タイミング情報
９００  アドレス生成器
９３０  ＧＡＧ用命令メモリ
９３１  ＧＡＧ制御情報
９４０  ＧＡＧ
２１１４  入力データ選択制御部
２１２４  書込アドレス生成部
２２１４  出力データ選択制御部
２２２４  読出アドレス生成部
３１０１  入力データ選択部
３１０２  出力データ選択部
【図１】
2012070683.tif 000003
【図２】
2012070683.tif 000004
【図３】
2012070683.tif 000005
【図４】
2012070683.tif 000006
【図５】
2012070683.tif 000007
【図６】
2012070683.tif 000008
【図７】
2012070683.tif 000009
【図８】
2012070683.tif 000010
【図９】
2012070683.tif 000011
【図１０】
2012070683.tif 000012
【図１１】
2012070683.tif 000013
【図１２】
2012070683.tif 000014
【図１３】
2012070683.tif 000015
【図１４】
2012070683.tif 000016
【図１５】
2012070683.tif 000017
【図１６】
2012070683.tif 000018
【図１７】
2012070683.tif 000019
【図１８】
2012070683.tif 000020
【図１９】
2012070683.tif 000021
【図２０】
2012070683.tif 000022
【図２１】
2012070683.tif 000023
【図２２】
2012070683.tif 000024
【図２３】
2012070683.tif 000025
【図２４】
2012070683.tif 000026
【図２５】
2012070683.tif 000027
【図２６】
2012070683.tif 000028
【図２７】
2012070683.tif 000029
【図２８】
2012070683.tif 000030
【図２９】
2012070683.tif 000031
【図３０】
2012070683.tif 000032
【図３１】
2012070683.tif 000033
【図３２】
2012070683.tif 000034
【図３３】
2012070683.tif 000035
【図３４】
2012070683.tif 000036
【図３５】
2012070683.tif 000037
【図３６】
2012070683.tif 000038
【図３７】
2012070683.tif 000039
【図３８】
2012070683.tif 000040
【図３９】
2012070683.tif 000041
【図４０】
2012070683.tif 000042
【図４１】
2012070683.tif 000043
【図４２】
2012070683.tif 000044
【図４３】
2012070683.tif 000045
【図４４】
2012070683.tif 000046
【図４５】
2012070683.tif 000047
【図４６】
2012070683.tif 000048
【図４７】
2012070683.tif 000049
【図４８】
2012070683.tif 000050
【図４９】
2012070683.tif 000051
【図５０】
2012070683.tif 000052
【図５１】
2012070683.tif 000053
【国際調査報告】
2012070683.tif 000054
2012070683.tif 000055
2012070683.tif 000056
2012070683.tif 000057