(57)【要約】【課題】  リコンフィギュラブル回路の動作設定に必要なデータフローグラフを処理する技術を提供する。【解決手段】  本発明のデータフローグラフ処理方法は、リコンフィギュラブル回路に含まれる論理回路の機能をノードとして表現し、メモリへのアクセスが可能なノードを含むＤＦＧを生成する（Ｓ１２）。メモリへのアクセスが可能な書込ノードはmem_wとして表現され、読出ノードはmem_rとして表現される。これらのメモリアクセスノードに対してインデクスを付加する（Ｓ１６）。インデクスはＤＦＧ内においてメモリにアクセスする順番を示す。このようにして、メモリアクセスノードを含んだＤＦＧを作成する。【選択図】図１８
2006065787.tif 000002
【特許請求の範囲】
【請求項１】
機能の変更が可能な論理回路の複数の集合体を備えたリコンフィギュラブル回路の動作設定に必要なデータフローグラフを処理する方法であって、
論理回路の機能をノードとして表現し、メモリへのアクセスが可能なノードを含むデータフローグラフを生成するステップを備えることを特徴とするデータフローグラフ処理方法。
【請求項２】
前記リコンフィギュラブル回路の集合体内の論理回路の数とメモリへのアクセス順および処理の遅延量に応じて、データフローグラフを１つ以上のサブデータフローグラフに分割するステップと、
１つ以上のサブデータフローグラフを、メモリへのアクセス順および処理の遅延量に応じて１つのデータフローグラフに結合するステップと、
をさらに備えることを特徴とするデータフローグラフ処理方法。
【請求項３】
前記生成ステップは、リコンフィギュラブル回路からの演算結果をメモリへのアクセスのためのアドレスとして処理するノードを含むデータフローグラフを作成することを特徴とする請求項１または２に記載のデータフローグラフ処理方法。
【請求項４】
前記生成ステップは、メモリのアドレスとデータを出力するノードを、メモリアクセス用の論理回路の位置にあうように配置したデータフローグラフを作成することを特徴とする請求項３に記載のデータフローグラフ処理方法。
【請求項５】
前記生成ステップは、メモリのアドレスを出力するノードに対して、アドレスから読み出されたデータを受け取るノードの配置を、読出し処理の遅延分だけ下段に配置することを特徴とする請求項３に記載のデータフローグラフ処理方法。
【請求項６】
前記分割ステップは、データフローグラフ内のメモリアクセスを実行するノードに対してアクセス順にアクセス番号を割り振り、アクセス番号が割り振られたノードが、１つのサブデータフローグラフ内に存在するように分割することを特徴とする請求項１から５のいずれかに記載のデータフローグラフ処理方法。
【請求項７】
前記結合ステップは、２つ以上のサブデータフローグラフ間にメモリを介したデータの授受が存在する場合、サブデータフローグラフ内のメモリアクセスを行うノードのアクセス順と処理遅延量を加味して、サブデータフローグラフ間を結合する請求項１から６のいずれかに記載のデータフローグラフ処理方法。
【請求項８】
請求項１から７のいずれかに記載のデータフローグラフ処理方法の結果から得られたデータにしたがって動作するリコンフィギュラブル回路。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、機能の変更が可能なリコンフィギュラブル回路の動作設定に必要なデータフローグラフを処理する技術に関する。
【背景技術】
【０００２】
近年、ＡＬＵ(Arithmetic Logic Unit)と呼ばれる基本演算機能を複数持つ多機能素子を用いたリコンフィギュラブルプロセッサの開発が進められている（例えば、特許文献１参照）。リコンフィギュラブルプロセッサでは、コマンドデータをＡＬＵ回路に順次設定することで、全体として所期の演算処理回路を実現することができる。コマンドデータは、Ｃ言語などの高級プログラム言語で記述されたソースプログラムをコンパイル処理することでＤＦＧ（データフローグラフ）と呼ばれるデータフローを作成し、そのＤＦＧをＡＬＵ回路にマッピングするデータとして作成される。
【特許文献１】特開２００４−２２０３７７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
従来のリコンフィギュラブルプロセッサでは、ＡＬＵ回路から出力されるデータをメモリに記憶する際、その格納位置は、プログラムのコンパイル処理時に予め決定されている。従来のリコンフィギュラブルプロセッサでは、メモリの書込アドレスまたは読出アドレスが固定されており、演算処理の実行中に、アドレスを動的に設定することができなかった。また、従来のＤＦＧはノード間のデータ入出力を表現するものであり、メモリアクセスのようにノードを介さないデータの扱いには不適であった。
【０００４】
本発明はこうした状況に鑑みてなされたもので、その目的は、メモリへのアクセスを動的に実行できるデータフローグラフを生成する技術を提供することにある。
【課題を解決するための手段】
【０００５】
上記課題を解決するために、本発明のある態様は、機能の変更が可能な論理回路の複数の集合体を備えたリコンフィギュラブル回路の動作設定に必要なデータフローグラフを処理する方法に関する。この態様のデータフローグラフ処理方法は、論理回路の機能をノードとして表現し、メモリへのアクセスが可能なノードを含むデータフローグラフを生成するステップを備える。
【０００６】
この態様のデータフローグラフ処理方法は、メモリへのアクセスが可能なノードを含むデータフローグラフを生成できるため、リコンフィギュラブル回路の演算結果によりメモリのアドレスを指定することが可能となる。
【０００７】
リコンフィギュラブル回路は、複数種類の多ビット演算を選択的に実行可能な算術論理回路を有してもよい。
【０００８】
なお、以上の構成要素の任意の組み合わせ、本発明の表現を方法、装置、システム、コンピュータプログラムとして表現したものもまた、本発明の態様として有効である。
【発明の効果】
【０００９】
本発明によれば、メモリへのアクセスを動的に実行できるデータフローグラフを生成する技術を提供することができる。
【発明を実施するための最良の形態】
【００１０】
図１は、実施例に係る処理装置１０の構成図である。処理装置１０は、集積回路装置２６を備える。集積回路装置２６は、回路構成を再構成可能とする機能を有する。集積回路装置２６は１チップとして構成され、リコンフィギュラブル回路１２、設定部１４、制御部１８、出力回路２２、メモリ部２７および経路部２４、２９を備える。リコンフィギュラブル回路１２は、設定を変更することにより、機能の変更を可能とする。
【００１１】
設定部１４は、リコンフィギュラブル回路１２に所期の回路を構成するための設定データ４０を供給する。設定部１４は、プログラムカウンタのカウント値に基づいて記憶したデータを出力するコマンドメモリとして構成されてもよい。この場合、制御部１８がプログラムカウンタの出力を制御する。この意味において、設定データ４０はコマンドデータと呼ばれてもよい。経路部２４、２９は、フィードバックパスとして機能し、リコンフィギュラブル回路１２の出力を、リコンフィギュラブル回路１２の入力に接続する。出力回路２２は、例えばデータフリップフロップ（Ｄ−ＦＦ）などの順序回路として構成され、リコンフィギュラブル回路１２の出力を受ける。メモリ部２７は経路部２９に接続されている。リコンフィギュラブル回路１２は組合せ回路または順序回路等の論理回路として構成される。
【００１２】
メモリ部２７は、リコンフィギュラブル回路１２から出力されるデータ信号および／または外部から入力されるデータ信号を格納するための記憶領域を有する。メモリ部２７はＲＡＭとして構成される。メモリ部２７にデータを書き込んで、そのデータを読み出すためには、少なくとも、それぞれの処理につき１クロック分の時間がかかる。メモリ部２７に格納されたデータ信号は、経路部２９を通じてリコンフィギュラブル回路１２の入力として伝達される。なお、本実施例において、メモリ部２７に供給するアドレスは、リコンフィギュラブル回路１２において生成される。
【００１３】
リコンフィギュラブル回路１２は、機能の変更が可能な論理回路を有して構成される。具体的にリコンフィギュラブル回路１２は、複数の演算機能を選択的に実行可能な論理回路を複数段に配列させた構成を備え、さらに前段の論理回路列の出力と後段の論理回路列の入力との接続関係を設定可能な接続部を備える。各段に含まれる複数の論理回路は、論理回路の集合体を構成する。この接続部は、前段の論理回路列の出力すなわち内部状態を保持する状態保持回路（以下、ＦＦ回路とも呼ぶ）の機能も備える。複数の論理回路は、マトリックス状に配置される。各論理回路の機能と、論理回路間の接続関係は、設定部１４により供給される設定データ４０に基づいて設定される。設定データ４０は、以下の手順で生成される。
【００１４】
集積回路装置２６により実現されるべきプログラム３６が、記憶部３４に保持されている。プログラム３６は、回路における処理の動作を記述した動作記述を示し、信号処理回路または信号処理アルゴリズムなどをＣ言語などの高級言語で記述したものである。コンパイル部３０は、記憶部３４に格納されたプログラム３６をコンパイルし、データフローグラフ（ＤＦＧ）３８に変換して記憶部３４に格納する。データフローグラフ３８は、回路における演算間の実行順序の依存関係を表現し、入力変数および定数の演算の流れをグラフ構造で示したものである。一般に、データフローグラフ３８は、上から下に向かって演算が進むように形成される。
【００１５】
設定データ生成部３２は、コンパイル部３０により決定されたデータフローグラフ３８をもとに、設定データ４０を生成する。設定データ４０は、データフローグラフ３８をリコンフィギュラブル回路１２にマッピングするためのデータであり、リコンフィギュラブル回路１２における論理回路の機能や論理回路間の接続関係、さらには論理回路に入力させる定数データなどを定める。
【００１６】
設定部１４がコマンドメモリとして構成されている場合、制御部１８は設定部１４に対してプログラムカウンタ値を与え、設定部１４は、そのカウンタ値に応じて格納した設定データを、コマンドデータとしてリコンフィギュラブル回路１２に設定する。なお、設定部１４は、キャッシュメモリや他の種類のメモリを有して構成されてもよい。なお、制御部１８が記憶部３４から設定データ４０を受けて、その設定データ４０を設定部１４に供給してもよいが、制御部１８を介さずに、予め設定部１４に設定データを格納しておいてもよい。
【００１７】
設定部１４は、設定データ４０をリコンフィギュラブル回路１２に設定し、リコンフィギュラブル回路１２の回路を逐次再構成させる。リコンフィギュラブル回路１２は、基本セルとして高性能の演算能力のあるＡＬＵを用いており、またリコンフィギュラブル回路１２および設定部１４を１チップ上に構成することから、コンフィグレーションを高速に、例えば１クロックで実現することができる。制御部１８はクロック機能を有し、クロック信号は、出力回路２２およびメモリ部２７に供給される。また制御部１８はカウンタを含み、カウント信号を設定部１４に供給してもよい。
【００１８】
図２は、リコンフィギュラブル回路１２の構成の一例を示す。リコンフィギュラブル回路１２は、それぞれが複数の演算機能を選択的に実行可能な論理回路の多段配列と、前段の論理回路の出力と後段の論理回路の入力の接続関係を任意に設定可能な接続部５２とを備える。リコンフィギュラブル回路１２では、論理回路の多段配列構造により、上段から下段に向かって演算が進められる。なお、本明細書において「多段」とは、複数の段を意味する。なお、リコンフィギュラブル回路１２の回路構成は、必ずしも多段配列を有する必要はないが、回路規模を削減するために全ての論理回路間の接続を可能とするのではなく、一部の論理回路同士の接続を実現させるのが好ましい。
【００１９】
リコンフィギュラブル回路１２は、論理回路としてＡＬＵ(Arithmetic Logic Unit)を有している。ＡＬＵは、複数種類の多ビット演算を選択的に実行可能な算術論理回路であって、論理和、論理積、ビットシフトなどの複数種類の多ビット演算を設定により選択的に実行できる。各ＡＬＵは、複数の演算機能を設定するためのセレクタを有して構成されている。図示の例では、ＡＬＵが、２つの入力端子と１つの出力端子を有して構成される。
【００２０】
リコンフィギュラブル回路１２は、縦方向にＸ個、横方向にＹ個のＡＬＵが配置されたＸ段Ｙ列のＡＬＵアレイとして構成される。ここでは、縦方向に３個、横方向に６個のＡＬＵが配置された３段６列のＡＬＵアレイを示している。リコンフィギュラブル回路１２は、接続部５２およびＡＬＵ列５３を備える。ＡＬＵ列５３は複数段に設けられ、接続部５２は前後段のＡＬＵ列５３の間に設けられて、前段のＡＬＵの出力と後段のＡＬＵの入力の接続関係を設定する。
【００２１】
図２に示す例では、第１段のＡＬＵ列５３ａと第２段のＡＬＵ列５３ｂの間に、第２段を構成する接続部５２ｂが設けられ、第２段のＡＬＵ列５３ｂと第３段のＡＬＵ列５３ｃの間に、第３段を構成する接続部５２ｃが設けられる。なお、第１段を構成する接続部５２ａは、第１段のＡＬＵ列５３ａの上側に設けられる。
【００２２】
第１段のＡＬＵ１１、ＡＬＵ１２、・・・、ＡＬＵ１６には、入力変数や定数が入力され、設定された所定の演算がなされる。演算結果の出力は、第２段の接続部５２ｂに設定された接続にしたがって、第２段のＡＬＵ２１、ＡＬＵ２２、・・・、ＡＬＵ２６に入力される。第２段の接続部５２ｂにおいては、第１段のＡＬＵ列５３ａの出力と第２段のＡＬＵ列５３ｂの入力の間で任意の接続関係、あるいは予め定められた接続関係の組合せの中から選択された接続関係を実現できるように接続用結線が構成されており、設定により所期の結線が有効となる。第２段のＡＬＵ２１、ＡＬＵ２２、・・・、ＡＬＵ２６には、ＡＬＵ列５３ａの出力が入力され、設定された所定の演算がなされる。演算結果の出力は、第３段の接続部５２ｃの接続用結線において設定された接続にしたがって、第３段のＡＬＵ３１、ＡＬＵ３２、・・・、ＡＬＵ３６に入力される。
【００２３】
最終段となる第３段のＡＬＵ列５３ｃからの出力データは、出力回路２２、メモリ部２７または経路部２４に出力される。メモリ部２７は、経路部２９を介して、出力データを接続部５２ａに入力する。接続部５２ａは、接続用結線を設定し、第１段のＡＬＵ１１、ＡＬＵ１２、・・・、ＡＬＵ１６にデータを供給する。
【００２４】
図３は、リコンフィギュラブル回路１２におけるＡＬＵ間の接続関係を示す図である。なお、図３では、ＡＬＵ列の間に配置される接続部５２の図示を省略している。第１段の接続部５２においては、第１段のＡＬＵ列の出力と第２段のＡＬＵ列の入力の間で、一定の接続制限が課された接続関係を実現できるように結線が構成されており、設定により、その範囲内での所期の結線が有効となる。なお、第２段の接続部５２においても同様である。最終段である第３段のＡＬＵ列は演算の最終結果を出力する。接続部５２は、ＡＬＵ段の間で、物理的に近接して配置された論理回路同士を接続可能とするように構成される。これにより、配線長を短くすることができ、回路規模を削減することができる。その結果、低消費電力化及び処理高速化が可能となる。
【００２５】
図３に示すリコンフィギュラブル回路１２では、３段×６列のＡＬＵが存在し、上段における１つのＡＬＵからの配線は、下段の３つのＡＬＵに制限される。図示のように、下段における１つのＡＬＵの入力は、上段における直上のＡＬＵと、直上のＡＬＵの左右のＡＬＵに制限され、また上段における１つのＡＬＵの出力は、下段における直下のＡＬＵと、直下のＡＬＵの左右のＡＬＵに制限される。例えば、ＡＬＵ２２に関してみると、その入力は、ＡＬＵ１１、ＡＬＵ１２、ＡＬＵ１３の３方向に制限され、その出力は、ＡＬＵ３１、ＡＬＵ３２、ＡＬＵ３３の３方向に制限される。なお、左または右に対応するＡＬＵが存在しなければ、その入力および出力は、それぞれ２方向に制限される。このような配線とすることにより、上下段の全てのＡＬＵ間の接続を可能とする場合と比較すると、配線数を大幅に削減することが可能となる。
【００２６】
本実施例において、メモリアクセスは、リコンフィギュラブル回路１２で生成されたアドレスにより実行される。データをメモリ部２７に書き込むとき、リコンフィギュラブル回路１２からの２つの出力が、それぞれ書き込み先のアドレスと書き込むデータとなり、データを読み出すとき、リコンフィギュラブル回路１２からの１つの出力が、読み出すアドレスとなる。具体的に、コンパイル部３０は、論理回路の機能をノードとして表現し、メモリへのアクセスが可能なノードを含むＤＦＧを生成する。このとき、アドレスを出力するノード、および書込／読出命令を割り当てたノードを作成する。また、ＤＦＧ作成時に、メモリアクセスを実行するノードに対してアクセス順にアクセス番号を割り振り、アクセス番号が割り振られたノードが１つのサブＤＦＧ内に存在するようにＤＦＧを分割する。このとき、サブＤＦＧには、メモリアクセスノードを含むＤＦＧを高々１つ程度含むように分割される。最後に、１つ以上のサブＤＦＧを、アクセス番号の順にしたがって、メモリアクセスが１段中１つ以下になるようにノード配置を行って、結合する。
【００２７】
図４は、メモリへの書き込みを行うＣソースの例を示す。図５は、図４に示すＣソースを変換したアセンブラ命令を示す。mem_aは演算の出力がアドレスであることを示す命令で、配列aの先頭アドレスと配列のインデクスiを加算し、アドレス値を示す変数adr(=a+i)に代入する。またmem_wはアドレスadrに対して定数１を書き込むことを表す。コンパイル部３０は、図５に示すアセンブラ命令から、データの入出力関係を基にＤＦＧを作成する。
【００２８】
図６（ａ）は、アセンブラ命令を表現したＤＦＧを示す。アドレスとデータはそれぞれのＡＬＵ出力となるようにＤＦＧを作成する必要がある。mem_wへの入力が定数の場合は、図６（ｂ）に示すようにデータスルーノードであるmovノードを作成する。movノードでは、データに演算を加えることなく、入力したデータをそのまま出力する。最後に、mem_wは機能的に意味が無いため削除する。このようにmem_wのノードは、コンパイル部３０で除去されるが、メモリ書き込みに必要な２つのノードを同じ段に配置するために一旦ＤＦＧ化される。図６（ｃ）は、アドレスとデータを出力する２つのノードmem_aとmovを作成した状態を示す。
【００２９】
リコンフィギュラブル回路１２に演算処理を実行させるときには、図７のように、配列a[100]に相当する領域がメモリ部２７内に割り当てられ、外部入力であるiの値に従ってa[i]の領域に１が書き込まれる。
【００３０】
図８は、メモリ部２７からの読出しを行うＣソースの例である。図９は、図８に示すＣソースを変換したアセンブラ命令を示す。mem_aにより配列aの先頭アドレスと配列のインデクスiを加算し、アドレス値を示す変数adrに代入する。mem_rはアドレスadrからデータを読み出すことを表す。このようにアセンブラ命令に変換することにより、入出力関係を明らかにする。コンパイル部３０は、まず、図９に示すアセンブラ命令から、データの入出力関係を基にＤＦＧを作成する。
【００３１】
図１０（ａ）は、アセンブラ命令を表現したＤＦＧを示す。ノードからアドレスを出力し、データを読み出す処理には遅延が発生するので、図１０（ｂ）のようにアドレスを出力したノードとそのアドレスからデータを出力するノードの間に遅延分に相当する数の段を空け、データを出力するmovノードを作成する。この場合、必要な空き段数は３である。続いてコンパイル部３０は、mem_rノードは単に段数をカウントするためだけに用意したノードで機能的に意味が無いため削除する。これにより、図１０（ｃ）のアドレス出力するmem_aと読み出したデータが入力されるmovが作成され、その出力からデータretを得られる。
【００３２】
リコンフィギュラブル回路１２に演算処理を実行させるときには、図１１のように、配列a[100]に相当する領域がメモリ内に割り当てられ、外部入力であるiの値に従ってa[i]の領域からデータが読み出される。
【００３３】
図１２（ａ）は、複数のメモリアクセスが行われるＣソースの例である。図１２（ｂ）は、図１２（ａ）のＣソースの動作内容を示す。この動作では、要素数２の配列を用いてＦＩＦＯを実現する。図１３は、図１２（ａ）に示すＣソースを変換したアセンブラ命令を示す。図１４は、コンパイル部３０で生成された３つのＤＦＧを示す。
【００３４】
Ｃソースにメモリアクセスが記述されている場合、その記述された順に処理されなければ正しい結果が得られない。しかし、従来のメモリアクセスが無いＤＦＧをリコンフィギュラブル回路１２へマッピングする手法では、リコンフィギュラブル回路１２にマッピングする順は、ＤＦＧを生成した順番になるので、メモリアクセスノードの処理順がＣソースに規定された順と異なる場合が発生する。このとき、正しい動作は行われない。そこで、コンパイル部３０は、アセンブラの先頭からmem_r及びmem_w命令をサーチし、メモリアクセスノードにインデクスを付加しておく。次にコンパイル部３０は、命令をノードに変換し、ノード間の入出力関係を基にＤＦＧを作成する。
【００３５】
図１４は、メモリアクセス命令に、アクセスの昇順に「mem_r:1」や「mem_w:3」としてインデクスを割り振った状態を示す。コンパイル部３０は、データの読出、書込を行うノードを判定して、インデクスを適宜割り当てる。但し、遅延用のmem_rにはインデクスは付けない。コンパイル部３０は、図１４（ａ）、図１４（ｂ）、図１４（ｃ）に示す３つのＤＦＧを、少なくとも１つのメモリアクセスノードが含まれるように分割する。
【００３６】
コンパイル部３０は、まず３つのＤＦＧのノードからメモリアクセスノードのインデクスをサーチし、メモリアクセスノードが見つかると、その入力ノードを順に辿る。入力が定数か変数であるノードか、別のメモリアクセスノードであれば、その時点で別のＤＦＧに分割し、リコンフィギュラブル回路１２の接続にあった形にマッピングする。インデクス１のノードが図１４（ｂ）に示すＤＦＧに含まれるので、まず、このＤＦＧを分割する。このＤＦＧは、図１５（ａ）に示すＤＦＧに変換される。
【００３７】
次にインデクス２のノードが図１４（ｃ）に示すＤＦＧに含まれるので、このＤＦＧを分割する。図１４（ｃ）に示すＤＦＧはインデクス２のメモリアクセスノード以外にインデクス３のメモリアクセスノードも含む。そこで、コンパイル部３０は、このＤＦＧをインデクス２とインデクス３のそれぞれのメモリアクセスノードを含む２つのサブＤＦＧに分割し、インデクス２を含むサブＤＦＧに対して、インデクス２のメモリアクセスノードとその出力先であるmovノードを割り当てる。インデクス２のメモリアクセスノードを含んだノード群は、図１５（ｂ）に示すＤＦＧに変換される。残りのインデクス３のメモリアクセスノードを含んだノード群は、図１６に示すＤＦＧに変換される。次に、インデクス３のメモリアクセスノードを含むＤＦＧを図１５（ｃ）に示すように生成し、インデクス４のメモリアクセスノードを含むＤＦＧを図１５（ｄ）に示すように生成する。
【００３８】
次に、コンパイル部３０は、図１５（ａ）〜図１５（ｄ）にマッピングされた４つのＤＦＧを、順番に結合する。この際、２つ以上のメモリアクセスが同じ段に存在するとメモリ部２７に対して重複アクセスが発生する可能性があるため、メモリアクセスノードは１段に１つ存在するように制限する。これにより、メモリ部２７への重複アクセスを防止し、Ｃ記述の計算順序と合致したメモリアクセスを実現できる。図４、図８のＣソースの例で述べたように、mem_rとmem_wを削除すると、図１７のように結合される。
【００３９】
最後に、図１７に示すように結合したＤＦＧは、リコンフィギュラブル回路１２の行数である３行毎に分割され、設定データに変換される。実行時は、３行毎に設定データが割り当てられ、最下段のＡＬＵからのデータは経路部２９を用いて、次の３段ＤＦＧの最上段のＡＬＵに渡される。
【００４０】
図１８は、コンパイル部におけるＤＦＧ作成処理のフローチャートを示す。本実施例のＤＦＧ作成処理では、メモリ部２７へのアクセスが可能なノードを含むＤＦＧを生成する。まずアセンブラデータの読み込みを行う（Ｓ１０）。この読み込みは、１つのアセンブラ命令ごとに実行される。読み込んだアセンブラ命令に対してノードを作成し（Ｓ１２）、そのノードがmem_wであるか、またはmem_rであるかを判定する（Ｓ１４）。ノードがmem_wまたはmem_rである場合（Ｓ１４のＹ）、インデクスをノードに付加する（Ｓ１６）。インデクスは、ＤＦＧ内のメモリアクセスを実行するノードに対してアクセスする順番にしたがって付加されるアクセス番号である。ノードがmem_wまたはmem_rでない場合（Ｓ１４のＮ）、メモリアクセスが実行されないため、インデクスはノードに付加されない。
【００４１】
続いて、入力がノードであるか否かを判定する（Ｓ１８）。入力がノードであれば（Ｓ１８のＹ）、ノード間を接続したＤＦＧを生成する（Ｓ２０）。入力がノードでなければ（Ｓ１８のＮ）、ノード間を接続する必要はない。アセンブラデータに未読み込みのものが存在する場合（Ｓ２２のＮ）、上記した処理を繰り返し、全アセンブラデータの読み込みが終了すると（Ｓ２２のＹ）、mem_a、mem_wの入力が定数であるか否かを判定する（Ｓ２４）。mem_aは、リコンフィギュラブル回路１２からの演算結果をメモリ部２７へのアクセスのためのアドレスとして処理するノードである。
【００４２】
mem_a、mem_wの入力が定数である場合（Ｓ２４のＹ）、スルーノードであるmovを、mem_a、mem_wの入力に挿入する（Ｓ２６）。メモリ部２７のアドレスと、データを出力するノードは、メモリアクセス用の論理回路の位置にあうように配置される。また、mem_a、mem_wの入力が定数でない場合（Ｓ２４のＮ）、mem_rが存在するか否かを判定する（Ｓ２８）。mem_rが存在していれば（Ｓ２８のＹ）、mem_rの下に遅延用のmem_rを挿入する（Ｓ３０）。ここでは、メモリ部２７のアドレスを出力するノードに対して、アドレスから読み出されたデータを受け取るノードの配置を、読出処理の遅延分だけ下段に配置する。遅延用のmem_rは、３つ挿入される。これにより、アクセス遅延を含むＤＦＧを実現できる。メモリアクセス処理のために遅延が生じたＡＬＵと同期させるために、同段の処理も遅延するなどの方法をとった場合と比較すると、読出処理の遅延分だけ遅延させることで、遅延分を最小とすることができ、全体としての処理時間を短縮できる。
【００４３】
図１９は、コンパイル部におけるＤＦＧ分割処理のフローチャートを示す。この分割処理では、リコンフィギュラブル回路１２の集合体内の論理回路の数とメモリ部２７へのアクセス順および処理の遅延量に応じて、ＤＦＧを１つ以上のサブＤＦＧに分割する。まず、ｉを１に設定する（Ｓ１００）。インデクスｉのメモリアクセスノードの存在を確認し（Ｓ１０２）、メモリアクセスノードが存在していれば（Ｓ１０２のＹ）、１つのメモリアクセスノードを含むようにＤＦＧを分割して（Ｓ１０４）、サブＤＦＧを生成する（Ｓ１０６）。したがって、サブＤＦＧは、インデクスが割り振られた１つのメモリアクセスノードを有して構成される。インデクスｉのメモリアクセスノードが存在しなければ（Ｓ１０２のＮ）、そのＤＦＧをサブＤＦＧとして取り扱う（Ｓ１０６）。ＤＦＧ化していないノードが残っている場合には（Ｓ１０８のＮ）、ｉを１インクリメントして（Ｓ１１０）、Ｓ１０２に戻り、全ノードのＤＦＧ化が終了すると（Ｓ１０８のＹ）、この分割処理を終了する。
【００４４】
図２０は、コンパイル部におけるサブＤＦＧ結合処理のフローチャートを示す。このサブＤＦＧ結合処理では、１つ以上のサブＤＦＧを、メモリへのアクセス順および処理の遅延量に応じて１つのＤＦＧに結合する。２つ以上のサブＤＦＧ間にメモリ部２７を介したデータの授受が存在する場合、サブＤＦＧ内のメモリアクセスを行うノードのアクセス順と処理遅延量を加味して、サブＤＦＧ間を結合する。
【００４５】
まず、ｊに１を設定する（Ｓ２００）。サブＤＦＧｊにメモリアクセスノードが含まれているか否かを判定し（Ｓ２０２）、メモリアクセスノードが含まれている場合には（Ｓ２０２のＹ）、mem_r、mem_wノードを取り除く（Ｓ２０４）。これにより、サブＤＦＧｊを、サブＤＦＧ（ｊ−１）よりも下段に結合する（Ｓ２０６）。なお、サブＤＦＧにメモリアクセスノードが含まれていない場合には（Ｓ２０２のＹ）、すぐに結合処理を実行する（Ｓ２０６）。ｊが全サブＤＦＧ数と等しくなければ（Ｓ２１０のＮ）、ｊを１インクリメントして（Ｓ２１２）、Ｓ２０２に戻る。ｊが全サブＤＦＧ数と等しくなると（Ｓ２１０のＹ）、この結合処理を終了する。ノードのアクセス順と処理遅延量を加味してサブＤＦＧ間を結合することで、アクセス遅延を含むＤＦＧを実現できる。メモリアクセス処理のために遅延が生じたＡＬＵと同期させるために、同段の処理も遅延するなどの方法をとった場合と比較すると、読出処理の遅延分だけ遅延させることで、遅延分を最小とすることができ、全体としての処理時間を短縮できる。
【００４６】
本実施例では、メモリアクセス処理をリコンフィギュラブル回路１２上で実現することにより、従来実現が困難であった配列への動的アクセスを含むＣ記述をリコンフィギュラブル回路１２上で処理することが可能となる。また、ＤＦＧ数を少なくできるため、処理時間を短縮でき、消費電力を低減できるという利点もある。さらに、ＤＦＧ数を少なくすることで、設定データ量を削減でき、設定部１４における設定データの格納領域の回路規模を小さくできる。
【００４７】
以上、本発明を実施例もとに説明した。実施例は例示であり、それらの各構成要素や各処理プロセスの組み合わせにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
【００４８】
例えば、リコンフィギュラブル回路１２におけるＡＬＵの配列は、縦方向にのみ接続を許した多段配列に限らず、横方向の接続も許した、メッシュ状の配列であってもよい。また、上記の説明では、段を飛ばして論理回路を接続する結線は設けられていないが、このような段を飛ばす接続結線を設ける構成としてもよい。また、図１では、処理装置１０が１つのリコンフィギュラブル回路１２を有する場合を示しているが、複数のリコンフィギュラブル回路１２を有していてもよい。
【００４９】
今回開示された実施例はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【図面の簡単な説明】
【００５０】
【図１】実施例に係る処理装置の構成図である。
【図２】リコンフィギュラブル回路の構成の一例を示す図である。
【図３】リコンフィギュラブル回路におけるＡＬＵ間の接続関係を示す図である。
【図４】メモリへの書き込みを行うＣソースの例を示す図である。
【図５】図４に示すＣソースを変換したアセンブラ命令を示す図である。
【図６】ＤＦＧの生成過程を示す図である。
【図７】メモリの割り当てを示す図である。
【図８】メモリ部からの読出しを行うＣソースの例を示す図である。
【図９】図８に示すＣソースを変換したアセンブラ命令を示す図である。
【図１０】ＤＦＧの生成過程を示す図である。
【図１１】メモリの割り当てを示す図である。
【図１２】（ａ）は複数のメモリアクセスが行われるＣソースの例を示す図であり、（ｂ）は、図１２（ａ）のＣソースの動作内容を示す図である。
【図１３】図１２（ａ）に示すＣソースを変換したアセンブラ命令を示す図である。
【図１４】コンパイル部で生成された３つのＤＦＧを示す図である。
【図１５】変換されたＤＦＧを示す図である。
【図１６】変換されたＤＦＧを示す図である。
【図１７】結合したＤＦＧを示す図である。
【図１８】コンパイル部におけるＤＦＧ作成処理のフローチャートである。
【図１９】コンパイル部におけるＤＦＧ分割処理のフローチャートである。
【図２０】コンパイル部におけるサブＤＦＧ結合処理のフローチャートである。
【符号の説明】
【００５１】
１０・・・処理装置、１２・・・リコンフィギュラブル回路、１４・・・設定部、１８・・・制御部、２２・・・出力回路、２４・・・経路部、２６・・・集積回路装置、２７・・・メモリ部、２９・・・経路部、３０・・・コンパイル部、３２・・・設定データ生成部、３４・・・記憶部。
【図１】
2006065787.tif 000003
【図２】
2006065787.tif 000004
【図３】
2006065787.tif 000005
【図４】
2006065787.tif 000006
【図５】
2006065787.tif 000007
【図６】
2006065787.tif 000008
【図７】
2006065787.tif 000009
【図８】
2006065787.tif 000010
【図９】
2006065787.tif 000011
【図１０】
2006065787.tif 000012
【図１１】
2006065787.tif 000013
【図１２】
2006065787.tif 000014
【図１３】
2006065787.tif 000015
【図１４】
2006065787.tif 000016
【図１５】
2006065787.tif 000017
【図１６】
2006065787.tif 000018
【図１７】
2006065787.tif 000019
【図１８】
2006065787.tif 000020
【図１９】
2006065787.tif 000021
【図２０】
2006065787.tif 000022