データフローグラフ生成装置、設定データ生成装置、処理装置、及びデータフローグラフ生成方法
【課題】多倍長演算が可能なリコンフィギュラブルプロセッサに対応したデータフローグラフを自動的に生成する。
【解決手段】リコンフィギュラブル回路の論理回路で行う演算に必要な演算ビット数を決定する演算ビット数決定部と、演算に対応するノードを生成するノード生成部を備え、前記ノード生成部は、前記必要な演算ビット数が前記演算可能な演算ビット数よりも小さい又は等しいとき、前記1つの演算に対応する1つのノードを生成し、前記必要な演算ビット数が前記演算可能な演算ビット数よりも大きいとき、前記1つの演算に対応して複数のノードを生成する。
【解決手段】リコンフィギュラブル回路の論理回路で行う演算に必要な演算ビット数を決定する演算ビット数決定部と、演算に対応するノードを生成するノード生成部を備え、前記ノード生成部は、前記必要な演算ビット数が前記演算可能な演算ビット数よりも小さい又は等しいとき、前記1つの演算に対応する1つのノードを生成し、前記必要な演算ビット数が前記演算可能な演算ビット数よりも大きいとき、前記1つの演算に対応して複数のノードを生成する。
【発明の詳細な説明】
【技術分野】
【0001】
この発明は、機能の変更が可能な論理回路の複数の集合体と、それぞれの集合体の間に設けられて集合体間の論理回路の接続を選択的に確立可能な接続部を備えるリコンフィギュラブル回路に提供するデータフローグラフを生成するデータフローグラフ生成装置に関する。特に多倍長演算が可能なリコンフィギュラブル回路に対応したデータフローグラフの自動生成に関する。
【背景技術】
【0002】
近年、ALU(Arithmetic Logic Unit)と呼ばれる基本演算機能を複数持つ多機能素子を多段に並べたALUアレイを用いたリコンフィギュラブルプロセッサの検討が行われている(例えば、特許文献1)。リコンフィギュラブルプロセッサでは、設定データが設定されることにより、ALU回路の演算機能構成と接続部が制御され、全体として所期の演算処理回路を実現することができる。設定データは、一般にC言語などの高級プログラム言語で記述されたソースプログラムからDFG(Data Flow Graph、データフローグラフ)と呼ばれるデータフローを作成し、その情報をもとに作成される。DFGは、入力される変数や定数の演算の流れを、段階的にグラフ構造で表現したものである。
【特許文献1】特開2005−275698号公報
【発明の開示】
【発明が解決しようとする課題】
【0003】
リコンフィギュラブルプロセッサは、ALUの演算ビット幅を超える演算を複数のALUを用いて処理するような、多倍長演算も可能なものもある。多倍長演算とは、例えば、演算ビット幅が16ビットのALUを備えたプロセッサにより、32ビットの演算を行うことをいう。しかし、従来の方法により生成されるDFG生成は、上記のような多倍長演算対応のプロセッサでの演算に対応しない。
【0004】
例えば、図16(a)のプログラムで記述される演算を行うDFGの生成を考える。このプログラムは、short型(16ビット)の変数xと、int型(32ビット)の変数yを入力変数とし、int型の変数yを出力変数とした、関数func0(x,*y)の行う演算を示したものである。この関数func0(x,*y)では、まず「x+=1」において、入力変数xに1を加算し、加算した結果をxに置き換える。そして次の、「*y=-x」では、入力変数であるyからxを減算し、減算結果をyに置き換えて、出力する。このような関数func0(x,*y)の演算を行うDFGを従来の方法により生成すると、図16(b)のようになる。演算ノードn01では、xと1の加算を行い、その結果(n01outとする)を演算ノードn0へ出力する。演算ノードn02では、yからn01outを減算し、その結果を出力する。このDFGにより正しい演算を行うには、演算子が32ビットのALUを備えたプロセッサを用いる必要があり、ALUの演算ビット幅が32ビット未満の多倍長演算対応のプロセッサでの演算に対応しない。
【0005】
そこで、本発明は上記の事情に鑑み、リコンフィギュラブル回路を用いて多倍長演算を行うためのデータフローグラフを自動的に生成する装置、或いは方法を提供することを目的とする。
【課題を解決するための手段】
【0006】
本発明のある態様は、演算機能の変更が可能なリコンフィギュラブル回路の動作設定に必要なデータフローグラフであって、前記論理回路の演算機能をノードとして表現し入力データから出力データにいたるデータの流れをノードの接続で表現するデータフローグラフを生成するデータフローグラフ生成装置に関する。この態様のデータフローグラフ生成装置は、前記論理回路で行う演算に必要な演算ビット数を決定する演算ビット数決定部と、演算に対応するノードを生成するノード生成部を備える。前記ノード生成部は、前記必要な演算ビット数が前記演算可能な演算ビット数よりも小さい又は等しいとき、前記1つの演算に対応する1つのノードを生成し、前記必要な演算ビット数が前記演算可能な演算ビット数よりも大きいとき、前記1つの演算に対応して複数のノードを生成する。
【0007】
例えば、演算ビット数決定手段にて決定された演算ビット数が32ビットであって、リコンフィギュラブル回路の論理回路により演算可能な演算ビット数が16ビットであるような場合、1つの演算を2つの演算ノードに分けて行うようなDFGを生成する。
【0008】
係るDFG生成装置によれば、演算のビット数がリコンフィギュラブル回路の論理回路により演算可能なビット数よりも大きいときは演算を複数の演算ノードに分けて行うDFGを生成する。これにより、リコンフィギュラブル回路による倍長演算が可能となる。
【0009】
上記のデータフローグラフ生成装置は、動作を示した記述(例えば、C言語等で記述されたプログラム)に基づいてデータフローグラフを生成する。或いは、上記データフローグラフ生成装置は、既に生成されたデータフローグラフを、リコンフィギュラブル回路の演算ビット数に合うように再構成するものであっても良い。例えば、32ビット対応の論理回路を有するリコンフィギュラブル回路を想定して生成した32ビット演算を行うDFGを、16ビット対応の論理回路を有するリコンフィギュラブル回路での演算用に再構成するものであっても良い。
【0010】
好ましくは、前記演算ビット数決定部は、演算の入力データのビット数に基づいて前記演算ビット数を決定する。また、前記入力データのビット数が前記出力データのビット数よりも大きいとき、前記演算ビット数を出力データのビット数と等しく設定した場合と、前記出力データのビット数よりも大きく設定した場合の演算結果を比較し、比較した演算結果が等しいとき、出力データのビット数を演算ビット数と決定しても良い。
【0011】
演算の入力データのビット数と出力データのビット数から、演算に必要最小限な演算ビット数を決定する。これにより、DFGの小型化が図れ、その結果、演算に使用するリコンフィギュラブル回路を少なくすることができる。
【0012】
好ましくは、前記ノード生成部は、1つの演算に対して複数の演算ノードが生成されたとき、前記演算の入力、及び/又は出力データを、それぞれの演算ノードの入力、及び/又は出力に対応させるための変換を行う入出力変換部を備える。
【0013】
例えば、前記入出力変換部は、入力データのビット数が前記論理回路の入力ビット数よりも大きいとき、前記入力データを複数の入力データに分割して、それぞれの演算ノードの入力に対応させるようなデータフローグラフを生成する。
【0014】
或いは、前記入出力変換部は、出力データのビット数が前記論理回路の出力ビット数よりも大きいとき、前記出力データを複数の出力データに分割して、それぞれの演算ノードの出力に対応させるようなデータフローグラフを生成する。
【0015】
また、前記ノード生成部は、演算の入力データのビット数が前記演算のノードに対応した1以上の前記論理回路で入力可能な総ビット数よりも小さいとき、前記入力データのビット拡張用ノードを生成し、前記入力データを生成したビット拡張用ノードの入力に対応させるようなデータフローグラフを生成してもよい。
【0016】
前記ノード生成部は、演算の出力データのビット数が前記演算のノードに対応した1以上の前記論理回路で出力可能な総ビット数よりも大きいとき、前記出力データの出力用ノードを生成してもよい。
【0017】
本発明の設定データ生成装置は、上記のいずれかのデータフローグラフ生成装置と、データフローグラフ生成装置で生成されたデータフローグラフをリコンフィギュラブル回路に供給するための設定データに変換するデータ変換部を備える。
【0018】
本発明の処理装置は、設定データに従って動作するリコンフィギュラブル回路と、上記設定データ生成装置で生成された設定データを前記リコンフィギュラブル回路に順次供給する制御部を備えることを特徴とする。
【0019】
本発明のデータフローグラフ生成方法は、演算機能の変更が可能なリコンフィギュラブル回路の演算動作を記述するものとして、前記リコンフィギュラブル回路の論理回路の演算機能をノードとして表現し入力データから出力データにいたるデータの流れをノードの接続で表現するデータフローグラフを生成するデータフローグラフ生成方法において、前記論理回路で行う演算に必要な演算ビット数を決定する演算ビット数決定ステップと、演算に対応するノードを生成するノード生成ステップによりデータフローグラフを生成し、前記ノード生成ステップでは、前記必要な演算ビット数が前記演算可能な演算ビット数よりも小さい又は等しいとき、前記1つの演算に対応する1つのノードを生成し、前記必要な演算ビット数が前記演算可能な演算ビット数よりも大きいとき、前記1つの演算に対応して複数のノードを生成する。
【発明の効果】
【0020】
この発明によれば、リコンフィギュラブル回路を用いて多倍長演算を行うためのデータフローグラフを自動的に生成することができる。
【発明を実施するための最良の形態】
【0021】
図1は、実施の形態に係る処理装置10、設定データ生成装置30の構成を示す図である。
【0022】
<処理装置10の構成>
処理装置10は、演算機能を有し、回路構成が再構成可能である。この処理装置10は、1チップとして構成される集積回路からなり、リコンフィギュラブル回路12、設定部14、制御部18、入力回路20、出力回路22を備える。
【0023】
リコンフィギュラブル回路12は、機能の変更が可能なALUによる論理回路の集合体を複数備えた構造を有する。リコンフィギュラブル回路12は、後述する設定部14から供給される設定データに従って動作する演算回路として機能する。即ち、入力回路20からの入力データに対して、設定データに従った演算を行い、演算結果を出力回路20へ出力する。。このリコンフィギュラブル回路12の構成については後で詳しく説明する。
【0024】
設定部14は、リコンフィギュラブル回路12に所期の演算回路を構成するための設定データを供給する。設定部14から設定データを供給することにより、リコンフィギュラブル回路12は所期の演算回路として再構成される。この設定データは後述する設定データ生成装置20で生成される。
【0025】
制御部18は、処理装置10の各部、即ち、リコンフィギュラブル回路12、設定部14、入力回路20、出力回路22を制御する。また、クロック機能を有し、クロック信号を、リコンフィギュラブル回路12、入力回路20、出力回路22に供給する。
【0026】
入力回路20は、例えばデータフリップフロップ(DFF)などの順序回路として構成される。入力回路20は、外部から入力されたデータを、リコンフィギュラブル回路12での演算タイミングに同期するように、リコンフィギュラブル回路12へ入力させる。
【0027】
出力回路22は、例えばデータフリップフロップ(DFF)などの順序回路として構成され、リコンフィギュラブル回路12から出力されるデータを所期のタイミングで外部に出力する。
【0028】
<設定データ生成装置30の構成>
設定データ生成装置30は、データフローグラフ生成部32、設定データ生成部34、記憶部36を備える。
【0029】
記憶部36には、プログラム38、データフローグラフ40、設定データ42などが記憶されている。記憶部36に記憶されるプログラムは、リコンフィギュラブル回路12で実現されるべき処理の動作をC言語などの高級言語で記述したものである。
【0030】
データフローグラフ生成部32は、このプログラムを解析し、リコンフィギュラブル回路を動作設定するためのデータフローグラフ40に変換して記憶部36に格納する。DFGとは、回路における演算間の実行順序の依存関係を表現したものであり、入力変数および定数の演算の流れをグラフ構造で示したものである。一般に、DFGは、上から下に向かって演算が進むように作成される。
【0031】
設定データ生成部34は、データフローグラフ生成部32で生成されたデータフローグラフ40から設定データ42を生成する。設定データ42は、データフローグラフ40をリコンフィギュラブル回路12にマッピングするためのデータであり、リコンフィギュラブル回路12における論理回路の機能や論理回路間の接続関係を定める。設定データ生成部34により生成された設定データ40は、設定部14を介してリコンフィギュラブル回路12へ供給される。
【0032】
なお、設定データを複数のリコンフィギュラブル回路に分けて供給したり、1つのリコンフィギュラブル回路に複数回に分けて供給したりする場合等においては、1つのプログラムから複数の設定データを生成しても良い。
【0033】
<リコンフィギュラブル回路12の構成>
図2は、リコンフィギュラブル回路12の構成の一部を示すものである。
【0034】
図2のように、リコンフィギュラブル回路12では、演算器(ALU)、MUX、及び2つのDFFからなる論理回路(同図ではL11、L12、L21、…、L42として示している)がアレイ状に配列される。各論理回路の演算器は、演算機能を選択的に実行可能な構成となっている。各演算器には、設定部14から演算器の機能を制御する命令セットが設定される。演算器には予め論理和、論理積、ビットシフトなどを行う演算回路が実装されており、命令セットによってどの演算を行うかが選択される。
【0035】
上記の命令セット、接続データセットからなる構成情報は、一般にC言語などの高品位言語で記述されたプログラムから作成される。C言語のプログラムは、データフローグラフ生成部32によってDFGへ変換される。そして、設定データ生成部34は、このDFGから演算器の命令と演算器間の接続を決定し、これらの情報からリコンフィギュラブル回路12への構成情報に変換する。
【0036】
論理回路間の接続には一定の制限が課されている。即ち、上段の論理回路から下段算ユニットへの接続は、同じ列か、隣接する左右の列へのものに制限されており、論理回路段の間で物理的に近接して配列された論理回路同士を接続可能とするように構成される。例えば、論理回路L21からの出力は、L12、L22、及びL32の3つの論理回路にのみ接続されるような配線構造となっている。
【0037】
各論理回路において、演算器(ALU)での演算結果は、MUX(選択器)へ出力される。また、各演算器の演算結果は、DFF(D型フリップフロップ)を介して、同列次段の論理回路内のMUXへも出力される(遅延データ出力)。例えば、論理回路L11の演算器による演算結果は、L11のMUXだけでなく、L11のDFF2を介してL12のMUXへも出力される。MUXは、演算器からの出力と、前段の演算器からの出力(遅延データ入力)を選択して出力する。例えば、論理回路L12のMUXは、L12の演算器からの出力と、L11の演算器からの出力を選択して出力する。
【0038】
なお、上記説明したリコンフィギュラブル回路12は、本願出願人が開発した接続制限付きのリコンフィギュラブル回路(特開2005−182654号公報の図9参照)を改良したものである。リコンフィギュラブル回路12は、各論理回路からの出力が左下段、下段、右下段の3つの論理回路のみに接続配線される構成である点については、上記公報に記載のリコンフィギュラブル回路と共通している。しかし、演算器からの出力と、前段の演算器からの出力(遅延データ入力)を選択して出力するMUXを備える点(言い換えれば、演算器の出力が次段の論理回路の演算器だけでなく、2段下の論理回路の演算器にも接続可能である)点に、リコンフィギュラブル回路12は新規性を有する。
【0039】
なお、図2は、リコンフィギュラブル回路12の構成の一部分を示したものであり、実際には8つの論理回路だけでなく、それ以上に多数の論理回路を備えている。
【0040】
次に、このようなリコンフィギュラブル回路12を用いて倍長演算を行う例を図3を参照して説明する。ここで、リコンフィギュラブル回路12の各論理回路の演算器の演算ビット幅が16ビットであると仮定し、32ビット変数同士の加算A+Bを行う場合を説明する。この様子を示すのが図3である。いま、32ビット変数Aの上位16ビットをAH、下位16ビットをAL、32ビット変数Bの下位16ビットをBL、上位16ビットをBHとしたとき、A+Bの演算は、下位ビット同士の加算AL+BLと、上位ビット同士の加算AH+BHとに分けて行われる。
【0041】
まず、同図の論理回路L11中の演算器a1からALが遅延出力データとして出力され、DFF(d12)を介して論理回路L12の選択器(MUX(m2))でこのデータが選択されて出力される。これにより、論理回路L11の出力は、あたかも論理回路L12の出力であるかのように利用することができる。同様に論理回路L21の出力も、あたかも論理回路L22の出力であるかのように利用できる。そして、論理回路L13中の演算器a3(演算器(+L))は、論理回路L11の出力と、論理回路L21の出力を入力して処理することで、ALとBLの和を処理することができる。更に同様にして、論理回路L14の演算器a6(演算器(+H))は、論理回路L12の出力と論理回路L22の出力を入力して処理することで、AHとBHの和を処理することができる。
【0042】
なお、図示していないが、演算器(+L)で計算された加算におけるキャリーは、次段の演算器(+H)に入力されることで、倍長の加算処理が正しく実行される。また、リコンフィギュラブル回路12は、図2及び図3では図示省略しているが、符号拡張を行うための演算回路を備えていても良い。この符号拡張については、図10、図12などの実施例を用いて後で詳しく説明する。
【0043】
このように、リコンフィギュラブル回路12では、選択器における選択を切り替えることで、単精度と倍精度の両方の演算が実現できる。
【0044】
<データフローグラフ生成部32が行う処理>
データフローグラフ生成部32は、プログラムを解析して、DFGを生成する。このデータフローグラフ生成部32は、C言語等で記述されたプログラム(例えば、図4(a) のプログラム)から演算ビット数を判定する処理(ステップS100、図4参照)を行う。次に、ステップS100で判定された演算ビット数に基づいてDFGを生成する処理(ステップS200)を行う。ステップS100の処理は図5を参照して、ステップS200の処理は図6を参照して説明する。以下では、まず、手順の概略を簡単に説明し、その後、実際の演算例を用いて詳しく説明する。
【0045】
(演算ビット数判定処理:ステップS100)
図5は、演算ビット数を判定する処理(ステップS100)のフローチャートである。この処理では、プログラムから抽出した各演算において、演算の入出力のビット数から演算のビット数を決定する。
【0046】
ステップS101では、プログラムから抽出した演算数を変数mに格納する。続くステップS102では、iに1を代入する。ステップS103では、i番目の演算の入力データのうち最大のビット数aを取得する。ステップS104では、i番目の演算の出力データのうち最大のビット数bを取得する。
【0047】
ステップS105では、aとbの大小比較を行い、aがbよりも大きければステップS106へ進む。aがbよりも大きくない場合、ステップS107へ進む。ステップS106では、演算ビット数をaとした場合とbとした場合の演算結果を比較する。そして、演算結果が変わらなければステップS108へ進む。演算結果が異なるときステップS107へ進む。
【0048】
ステップS108へ進んだ場合、演算のビット数をbとする。ステップS107へ進んだ場合、演算のビット数をaとする。そして、ステップS109では、iとmを比較し、これらが一致すれば終了する。一致しない場合は、ステップS110へ進む。ステップS110へ進んだ場合、iに1を加えたのち、ステップS103へ戻る。
【0049】
以上の処理結果から、入出力ビット数と、演算ビット数が確定した中間DFG(例えば、図4(b)に示すようなもの)を生成できる。
【0050】
(DFG生成処理:ステップS200)
図6は、DFGを生成する処理(ステップS200)のフローチャートである。ここでは、図5の演算ビット数判定処理の結果に基づいてDFGを生成する。
【0051】
ステップS201では、演算数をmに格納する。続くステップS202では、iに1を代入する。ステップS203では、aにi番目の演算の演算ビット数を代入する。この場合の「演算ビット数」とは、図5のステップS107又はS108で決定された演算ビット数のことである。
【0052】
ステップS204では、aとrの大小比較を行う。ここで、rとはリコンフィギュラブル回路12の1個のALUで処理可能なビット数であり、本実施形態では16ビットである。aの方が大きければステップS205へ進み、そうでなければステップS206へ進む。
【0053】
ステップS205では、生成すべきノードの数を判定する。一例として、上記のaがrのn倍のとき、生成すべきノード数はn個であると判定する。このnをbとする。一方、ステップS206へ進んだ場合は、bを1とする。即ち、生成すべきノード数は1個であると判断する。
【0054】
ステップS207では、上記ステップS205又はS206で判定したb個のノードを生成する。
【0055】
ステップS300では、入力変換処理を行う。この処理については、図7を用いて後で説明する。
【0056】
ステップS400では、出力変換処理を行う。この処理については、図8を用いて後で説明する。
【0057】
ステップS208ではiとmを比較し、一致すればステップS210へ進みDFGを生成する。一致しなければステップS209へ進み、iに1を加えて、再びステップS203へ戻る。
【0058】
(入力変換処理:ステップS300)
図7を参照して、ステップS300で行われる入力変換処理の手順を説明する。ここでは、ノード以外から入力データを演算ノードに対応するように変換する。
【0059】
ステップS301では、m1に入力数を格納する。ここで「入力数」とは、演算の入力データの数のことである。ステップS302ではi1に1を代入する。
【0060】
ステップS303では、i1番目の入力データの解析を行う。具体的には、入力データのビット数や、入力データがノードからの入力か否か、などを解析する。
【0061】
入力データがノードからの入力であれば、ステップS304でyesと判定し、ステップS315へ進む。ノード以外からの入力であればステップS305へ進む。ステップS305からステップS314までが、このステップS300の入力変換処理の主要な部分に相当する。
【0062】
ステップS305では、入力データのビット数をa1に格納する。ステップS306では、入力データのビット数a1と、リコンフィギュラブル回路12のALUの入力ビット数r1を比較する。本実施形態ではr1は16である。a1の方が大きい場合、ステップS307へ進み、そうでない場合はステップS308へ進む。S307へ進んだ場合、入力データの分割を行い、分割された入力データの数をb1へ代入する。例えば、a1がr1の2倍であれば、入力データを2つに分割(上位データと下位データに分割)する。S308へ進んだ場合、入力データの分割は行わずに、b1に1を代入する。
【0063】
ステップS309では、b1がs未満かどうかを判定する。sとは演算のノード数のことであり、図6のステップS207で生成されたノードの数である。b1がs未満の場合、ステップS310へ進み、そうでない場合ステップS314へ進む。
【0064】
ステップS310では、入力が定数かどうかを判定し、定数の場合ステップS313へ進み、定数でない場合はステップS311へ進む。ステップS311では、入力データのビット拡張用ノードを生成する。ステップS312では、b1個に分割した入力データを対応するビット拡張用ノードの入力に割り当てる。ステップS313では、符号ビットを拡張して分割数をs個にする。
【0065】
ステップS314では、分割した入力データの下位側のs個を対応する演算ノードの入力に割り当てる。
【0066】
ステップS315では、i1とm1が一致するかどうかを判定し、一致する場合は終了して(図6の)ステップS400へ進む。一致しない場合は、ステップS316でiに1が加算されてステップS303へ戻る。
【0067】
(出力変換処理:ステップS400)
図8を参照して、ステップS400で行われる出力変換処理の手順を説明する。
【0068】
ステップS401では、m2に出力数を格納する。ここで「出力数」とは、演算の出力データの数のことである。ステップS402ではi2に1を代入する。
【0069】
ステップS403では、i1番目の出力データの解析を行う。具体的には、出力データのビット数や、出力データの出力先がノードか否か、などを解析する。
【0070】
出力データがノードへの出力であれば、ステップS404でyesと判定し、ステップS413へ進む。ノード以外への出力であればステップS405へ進む。
【0071】
ステップS405では、出力データのビット数を判定し、判定結果をa2に格納する。ステップS406では、出力データのビット数a2と、リコンフィギュラブル回路12のALUの出力ビット数r2を比較する。本実施形態ではr2は16である。a2の方が大きい場合、ステップS407へ進み、そうでない場合はステップS408へ進む。S407へ進んだ場合、出力データの分割を行い、分割された出力データの数をb2へ代入する。例えば、a2がr2の2倍であれば、出力データを2つに分割(上位データと下位データに分割)する。S408へ進んだ場合、出力データの分割は行わずに、b2に1を代入する。
【0072】
ステップS409では、b2がsより大きいかどうかを判定する。sとは演算のノード数のことであり、図6のステップS207で生成されたノードの数である。b2がsより大きい場合、ステップS410へ進み、そうでない場合ステップS412へ進む。
【0073】
ステップS410では、出力データのビット拡張用ノードを生成する。ステップS411では、b2個に分割した出力データを、対応するビット拡張用ノードの出力に割り当てる。ステップS412へ進んだ場合、分割した出力データを対応する演算ノードの出力に割り当てる。
【0074】
ステップS413では、i2とm2が一致するかどうかを判定し、一致する場合は終了して(図6の)ステップS208へ進む。一致しない場合は、ステップS414でiに1が加算されてステップS403へ戻る。
【0075】
(DFG生成例1)
以下では、図4(a)のプログラムから図4(c)のDFGを生成する例について説明する。
【0076】
このプログラムは、「x +=1」と、「*y -= x」の2つの演算を行うものであり、xはshort型の16ビットの変数、yはint型の32ビットの変数である。図5を参照して、ステップS101では、演算数は2であるから、mに2が代入される。1番目の演算「x +=1」(x = x +1 と同義)の入力データはxと1であり、xは16ビット変数なのでaは16ビットとなる(S103)。また、出力データであるxも16ビットなので、bも16ビットとなる(S104)。a=bなのでS107へ進み、1番目の演算ビット数を16と判定する(S107)。
【0077】
再びS103へ戻り、2番目の演算「*y -= x」(y = y - x と同義)の入力データはyとxであり、xが16ビットに対し、yが32ビットなのでaは32ビットとなる。また、出力データであるyも32ビットなので、bも32ビットとなる(S104)。a=bなのでS107へ進み、2番目の演算ビット数を32と判定する(S107)。
【0078】
以上の処理により、図4(b)のような入出力ビット数と、演算ビット数が確定した中間DFGを生成することができる。なお、この中間DFGにおいては、1番目の演算ノードn01は16ビットの加算を行い、2番目の演算ノードn02は32ビットの減算を行うものである。
【0079】
次に、S200(図6)へ進む。演算数mは2であり(S201)、1番目の演算(上記中間DFGのノードn01の演算に対応)のビット数aは16である(S203)。a=r=16であるから、b=1となり、1個の加算ノード(図4(c)のノードn11)が生成される(S207)。
【0080】
そして、S300(図7)へ進む。1番目の演算の入力はxと1であり(ノードn01への入力に対応)、m1は2である(S301)。このうちの1番目の入力データであるxは16ビットなのでa1は16であり(S305)、r1と等しいのでb1は1となる(S308)。S207で生成されたノード数sとb1は等しいので、xがそのまま演算ノードn11の入力となる(S314)。そして、S303へ戻り、2番目の入力である「1」は、ビット数が2であり(符号ビット付)、b1=1となる(S308)。そして、1がそのまま演算ノードn11の入力となる(S314)。
【0081】
そして、S400(図8)へ進む。1番目の演算の出力は、図4(b)のノードn01からの出力に対応するが、これは、図4(b)の中間DFGのノードn02への出力となるから、S404ではYesと判定され、結局、実質的に何の処理も行われないままS400の処理が完了する。
【0082】
再び図6を参照して、この後、S208、S209を経て、再びS203へ進む。2番目の演算(上記中間DFGのノードn02の演算に対応)のビット数aは32であり、a>rなので、S205へ進む。そして、S205、S207を経て2個の減算ノード(図4(c)のノードn12、n13)が生成される。
【0083】
そして、S300(図7)へ進む。2番目の演算の入力はyとノード(中間DFGのノードn01)からの入力の2つでり、m1は2である(S301)。1番目の入力データであるyは32ビットなのでa1は32であり(S305)、r1(=16)よりも大きいのでS307へ進む。そして、yは、上位データy(H)と、下位データy(L)の2つに分割される。続くS309では、b1=s==2だから、S314へ進み、y(L)をn12の入力として、y(H)をn13の入力としてそれぞれ割り当てる。その後、S315、S316を経て、S303で2番目の入力データが解析されるが、これは中間DFGのノードn01からの入力であるから、そのまま終了する。
【0084】
そして、S400(図8)へ進む。2番目の演算の出力は、図4(b)のノードn02からの出力に対応し、出力データyは32ビットであり、a2は32となる(S405)。このa2はr2よりも大きく、S407で出力データがy(L)、y(H)の2つに分割される。b2=s==2なので、S412へ進み、2個に分割されたy(L)、y(H)のそれぞれがノードn12、n13の出力として割り当てられる。
【0085】
そして、図4(c)のようなDFGが生成される(S210)。
【0086】
(DFG生成例2)
以下では、図9(a)のプログラムから図9(c)のDFGを生成する例について説明する。
【0087】
このプログラムは、「y = x + 1」の1つの演算を行うものであり、xはint型の32ビットの変数、yはshort型の16ビットの変数である。図5を参照して、演算数は1なのでmに1が代入される(S101)。入力データはxと1なのでaは32ビットとなる(S103)。出力データであるyは16ビットなので、bは16ビットとなる(S104)。a>bなのでS106へ進む。
【0088】
S106では、演算のビット数がa(=32)ビットの場合と、b(=16)ビットの場合で、「y = x + 1」の演算が同じ結果になるかどうか判定する。ここでは、出力yが16ビットであるから、16ビット演算した場合と、32ビット演算して16ビットに変換した結果とでは同じである。従って演算ビット数は16ビットで十分(32ビットも必要ない)と判断する(S108)。
【0089】
以上の処理により、図9(b)のような入出力ビット数と、演算ビット数が確定した中間DFGを生成することができる。即ち、int型の変数xと1(符号付の2ビット変数)がshort型の演算ノードへ入力され、これらの加算結果をshort型の変数yとして出力する演算を行うDFGが生成される。
【0090】
次に、S200(図6)へ進む。演算のビット数aは16である(S203)。a=r=16であるから、b=1となり、1個の加算ノード(図9(c)の演算ノードn21)が生成される(S207)。
【0091】
そして、S300(図7)へ進む。入力はxと1であるので入力数m1は2である。i1番目のデータはxであり、a1は32である(S305)。r1=16であるから、a1>r1となるので、S306ではyesと判定されて、S307へ進み、入力データであるxがx(H)とx(L)に分割される。b1=2であるのに対し演算ノード数s=1である(演算ノードn21)から、b1>sなのでS309ではNoと判断されてS314へ進む。そして、S314では分割した入力データの下位側のs個(1個)、即ちx(L)を対応する演算ノードn21の入力に割り当てる。
【0092】
次に2番目のデータ「1」のa1は2ビット(符号付変数と仮定)であるから、a1<r1なので、S306でNoと判断されるので、ステップS307でb1=1となる。b1=s1=1であるから、S309ではyesと判断される。入力は定数であるから、S310ではyesと判断されてS313へ進み、S313を経てS314において、「1」が演算ノードn21の入力として割り当てられる(S314)。
【0093】
そして、S400(図8)へ進む。演算の出力は、short型変数のyであり、a2=16である(S405)。a2=r2=16だから、b2=s==1となり、1個の出力データが対応する演算ノードn21の出力に割り当てられる。
【0094】
そして、図6へ戻り、図9(c)のようなDFGが生成される(S210)。
【0095】
(DFG生成例3)
以下では、図10(a)のプログラムから図10(c)のDFGを生成する例を説明する。
【0096】
このプログラムは、「y = x + 0x000fffff」という1つの演算を行うものであり、xはshort型の16ビットの変数、yはint型の32ビットの変数である。また、0x000fffffは32ビットである。図5を参照して、入力データはxと0x000fffffなのでaは32ビットとなる(S103)。出力データであるyは32ビットなので、bは32ビットとなる(S104)。a=bなのでS107へ進み、演算ビット数は32となる。
【0097】
以上の処理により、図10(b)のような入出力ビット数と、演算ビット数が確定した中間DFGを生成することができる。
【0098】
次に、S200(図6)へ進む。演算のビット数aは32である(S203)。r=16であるから、a>rであり、S205を経て、2個の加算ノード(図10(c)のノードn32、及びノードn33)が生成される(S207)。
【0099】
そして、S300(図7)へ進む。入力はxと0x000fffffであるので、入力数m1は2である。1番目のデータはxであり、a1は16である(S305)から、b1=1となる。一方、S207で生成されたノード数sは2だから、b<sなのでS310へ進む。xは定数ではないからS311へ進む。
【0100】
S311では、入力データのビット拡張用ノード(図10(c)のmovノードn31)が生成される。即ち、入力データxは16ビットであるので、32ビットの下位の演算ノード「+L」(ノードn32)のみの入力にしか対応しておらず、上位の演算ノード「+H」(ノードn33)に入力するxの上位16ビットのデータを生成する必要がある。movノードは、この上位16ビットの入力データを生成するための処理を行うものである。そして、xがこのmovノードへの入力に割り当てられる(S312)。
【0101】
次に2番目のデータ「0x000fffff」のa1は32ビットであるから、このデータは下位16ビットの「0xffff」と上位16ビットの「0x000f」に分割され(S307)b1=2となる。S309では、b1=s=2であるから、S309からS314へ進み、分割した入力データ「0xffff」「0x000f」のそれぞれを演算ノードn32、n33の入力へ割り当てる。
【0102】
そして、S400(図8)へ進む。演算の出力は、int型変数のyであり、a2=32である(S405)。r2=16であるから、a2>r2となるので、S407へ進み、出力データがy(L)とy(H)の2つに分割される。b2=s=2であるから、S409からS412へ進み、分割された出力データy(L)、y(H)のそれぞれが演算ノードn32、n33の出力に割り当てられる。
【0103】
そして、図6へ戻り、図10(c)のようなDFGが生成される(S210)。
【0104】
(DFG生成例4)
以下では、図11(a)のプログラムから図11(c)のDFGを生成する例を説明する。
【0105】
このプログラムは、「y = x + 1」という1つの演算を行うものであり、xはshort型の16ビットの変数、yはint型の32ビットの変数である。図5を参照して、入力データはxと1なのでaは16ビットとなる(S103)。出力データであるyは32ビットなので、bは32ビットとなる(S104)。a < bなのでS107へ進み、演算ビット数は16となる。
【0106】
以上の処理により、図11(b)のような入出力ビット数と、演算ビット数が確定した中間DFGを生成することができる。
【0107】
次に、S200(図6)へ進む。演算のビット数aは16である(S203)。r=16であるから、a = rであり、S206でb=1となるので、1個の加算ノード(図11(c)の加算ノードn41)が生成される(S207)。
【0108】
そして、S300(図7)へ進む。入力はxと1であるので、入力数m1は2である。i1番目のデータはxであり、a1は16である(S305)から、a1=r1=16なので、b1=1となる。S207で生成されたノード数sは1だから、b=sなのでS314へ進む。そして、xが加算ノードn41への入力に割り当てられる(S314)。
【0109】
次に2番目のデータ「1」のa1は2ビット(符号付変数であると仮定)であるから、b1=1となる。そして、同様にして、「1」が加算ノードn41の他の入力となる(S314)。
【0110】
そして、S400(図8)へ進む。演算の出力はint型変数のyであり、a2=32である(S405)。a2>r2であるから、S407へ進む。S407では、出力データが2つ(y(L)とy(H))に分割される。そして、b2=2に対しs=1であるからS410へ進む。
【0111】
出力データyは32ビットであるため、16ビットの加算ノードからは出力データyの上位16ビットであるy(H)を出力できない。そこで、加算ノードの結果をビット拡張し、出力データの上位16ビットのy(H)を生成し出力する必要がある。そこで、S410では、出力データのビット拡張用mov(mov L, mov H)ノードn42が生成される。そして、生成したビット拡張用ノード(mov L, mov H)に出力データy(L)とy(H)がそれぞれ割り当てられる(S411)。
【0112】
そして、図6へ戻り、図11(c)のようなDFGが生成される(S210)。
【0113】
(DFGの割り当て例)
上記の方法で生成したDFGをリコンフィギュラブル回路12に実際にマッピングした場合の様子を説明する。
【0114】
図4(c)のDFGをリコンフィギュラブル回路12に割り当てた場合、図12のようになる。
【0115】
上記で示した処理を実現することにより、多倍長演算のような処理が可能なリコンフィギュラブル回路に対応したDFGを自動的に生成することができる。また、これにより実行プログラムから実行設定データの生成までの時間が短縮できるため、リコンフィギュラブル回路に所望の処理を実行させるための開発期間を短縮させることができる。
【0116】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は、上記した実施の形態の説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【0117】
例示した図では、多倍長演算のノードを縦に並べた構成になっているが、これはリコンフィギュラブル回路の処理に依存するものであり、この構成に限定されるものではない。例えば、横に並ぶ等、様々な構成がありえる。
【0118】
また、上記では、2倍長演算を例に説明したが、本発明の概念は3以上の多倍長演算を行うためのDFGの生成にも適用できる。例えば、図13に示すような3倍長演算を行うDFGの生成にも適用できる。
【0119】
なお、上記ではステップS100により中間DFGを生成するものとして説明しているが、実際に中間DFGを生成することなく、演算ビット数、入出力ビット数の情報を、続くステップS200で利用できるよう格納しておくようにしても良い。
【図面の簡単な説明】
【0120】
【図1】実施の形態に係る処理装置10の構成図である。
【図2】リコンフィギュラブル回路12の構成を示す図である。
【図3】リコンフィギュラブル回路12を用いて倍長演算を行う例を説明する図である。
【図4】CソースプログラムからDFGを生成する第1の例である。
【図5】演算ビット数を判定する処理(ステップS100)のフローチャートである。
【図6】DFGを生成する処理(ステップS200)のフローチャートである。
【図7】入力変換処理(ステップS300)のフローチャートである。
【図8】出力変換処理(ステップS400)のフローチャートである。
【図9】CソースプログラムからDFGを生成する第2の例を示す図である。
【図10】CソースプログラムからDFGを生成する第3の例を示す図である。
【図11】CソースプログラムからDFGを生成する第4の例を示す図である。
【図12】図4(c)のDFGをリコンフィギュラブル回路12に割り当てた後の状態である。
【図13】3倍長演算を行う場合のDFGを示す図である。
【図14】従来の方法で生成したDFGを説明する図である。
【符号の説明】
【0121】
10 処理装置
12 リコンフィギュラブル回路
14 設定部
18 制御部
30 コンパイル部
32 設定データグラフ処理部
【技術分野】
【0001】
この発明は、機能の変更が可能な論理回路の複数の集合体と、それぞれの集合体の間に設けられて集合体間の論理回路の接続を選択的に確立可能な接続部を備えるリコンフィギュラブル回路に提供するデータフローグラフを生成するデータフローグラフ生成装置に関する。特に多倍長演算が可能なリコンフィギュラブル回路に対応したデータフローグラフの自動生成に関する。
【背景技術】
【0002】
近年、ALU(Arithmetic Logic Unit)と呼ばれる基本演算機能を複数持つ多機能素子を多段に並べたALUアレイを用いたリコンフィギュラブルプロセッサの検討が行われている(例えば、特許文献1)。リコンフィギュラブルプロセッサでは、設定データが設定されることにより、ALU回路の演算機能構成と接続部が制御され、全体として所期の演算処理回路を実現することができる。設定データは、一般にC言語などの高級プログラム言語で記述されたソースプログラムからDFG(Data Flow Graph、データフローグラフ)と呼ばれるデータフローを作成し、その情報をもとに作成される。DFGは、入力される変数や定数の演算の流れを、段階的にグラフ構造で表現したものである。
【特許文献1】特開2005−275698号公報
【発明の開示】
【発明が解決しようとする課題】
【0003】
リコンフィギュラブルプロセッサは、ALUの演算ビット幅を超える演算を複数のALUを用いて処理するような、多倍長演算も可能なものもある。多倍長演算とは、例えば、演算ビット幅が16ビットのALUを備えたプロセッサにより、32ビットの演算を行うことをいう。しかし、従来の方法により生成されるDFG生成は、上記のような多倍長演算対応のプロセッサでの演算に対応しない。
【0004】
例えば、図16(a)のプログラムで記述される演算を行うDFGの生成を考える。このプログラムは、short型(16ビット)の変数xと、int型(32ビット)の変数yを入力変数とし、int型の変数yを出力変数とした、関数func0(x,*y)の行う演算を示したものである。この関数func0(x,*y)では、まず「x+=1」において、入力変数xに1を加算し、加算した結果をxに置き換える。そして次の、「*y=-x」では、入力変数であるyからxを減算し、減算結果をyに置き換えて、出力する。このような関数func0(x,*y)の演算を行うDFGを従来の方法により生成すると、図16(b)のようになる。演算ノードn01では、xと1の加算を行い、その結果(n01outとする)を演算ノードn0へ出力する。演算ノードn02では、yからn01outを減算し、その結果を出力する。このDFGにより正しい演算を行うには、演算子が32ビットのALUを備えたプロセッサを用いる必要があり、ALUの演算ビット幅が32ビット未満の多倍長演算対応のプロセッサでの演算に対応しない。
【0005】
そこで、本発明は上記の事情に鑑み、リコンフィギュラブル回路を用いて多倍長演算を行うためのデータフローグラフを自動的に生成する装置、或いは方法を提供することを目的とする。
【課題を解決するための手段】
【0006】
本発明のある態様は、演算機能の変更が可能なリコンフィギュラブル回路の動作設定に必要なデータフローグラフであって、前記論理回路の演算機能をノードとして表現し入力データから出力データにいたるデータの流れをノードの接続で表現するデータフローグラフを生成するデータフローグラフ生成装置に関する。この態様のデータフローグラフ生成装置は、前記論理回路で行う演算に必要な演算ビット数を決定する演算ビット数決定部と、演算に対応するノードを生成するノード生成部を備える。前記ノード生成部は、前記必要な演算ビット数が前記演算可能な演算ビット数よりも小さい又は等しいとき、前記1つの演算に対応する1つのノードを生成し、前記必要な演算ビット数が前記演算可能な演算ビット数よりも大きいとき、前記1つの演算に対応して複数のノードを生成する。
【0007】
例えば、演算ビット数決定手段にて決定された演算ビット数が32ビットであって、リコンフィギュラブル回路の論理回路により演算可能な演算ビット数が16ビットであるような場合、1つの演算を2つの演算ノードに分けて行うようなDFGを生成する。
【0008】
係るDFG生成装置によれば、演算のビット数がリコンフィギュラブル回路の論理回路により演算可能なビット数よりも大きいときは演算を複数の演算ノードに分けて行うDFGを生成する。これにより、リコンフィギュラブル回路による倍長演算が可能となる。
【0009】
上記のデータフローグラフ生成装置は、動作を示した記述(例えば、C言語等で記述されたプログラム)に基づいてデータフローグラフを生成する。或いは、上記データフローグラフ生成装置は、既に生成されたデータフローグラフを、リコンフィギュラブル回路の演算ビット数に合うように再構成するものであっても良い。例えば、32ビット対応の論理回路を有するリコンフィギュラブル回路を想定して生成した32ビット演算を行うDFGを、16ビット対応の論理回路を有するリコンフィギュラブル回路での演算用に再構成するものであっても良い。
【0010】
好ましくは、前記演算ビット数決定部は、演算の入力データのビット数に基づいて前記演算ビット数を決定する。また、前記入力データのビット数が前記出力データのビット数よりも大きいとき、前記演算ビット数を出力データのビット数と等しく設定した場合と、前記出力データのビット数よりも大きく設定した場合の演算結果を比較し、比較した演算結果が等しいとき、出力データのビット数を演算ビット数と決定しても良い。
【0011】
演算の入力データのビット数と出力データのビット数から、演算に必要最小限な演算ビット数を決定する。これにより、DFGの小型化が図れ、その結果、演算に使用するリコンフィギュラブル回路を少なくすることができる。
【0012】
好ましくは、前記ノード生成部は、1つの演算に対して複数の演算ノードが生成されたとき、前記演算の入力、及び/又は出力データを、それぞれの演算ノードの入力、及び/又は出力に対応させるための変換を行う入出力変換部を備える。
【0013】
例えば、前記入出力変換部は、入力データのビット数が前記論理回路の入力ビット数よりも大きいとき、前記入力データを複数の入力データに分割して、それぞれの演算ノードの入力に対応させるようなデータフローグラフを生成する。
【0014】
或いは、前記入出力変換部は、出力データのビット数が前記論理回路の出力ビット数よりも大きいとき、前記出力データを複数の出力データに分割して、それぞれの演算ノードの出力に対応させるようなデータフローグラフを生成する。
【0015】
また、前記ノード生成部は、演算の入力データのビット数が前記演算のノードに対応した1以上の前記論理回路で入力可能な総ビット数よりも小さいとき、前記入力データのビット拡張用ノードを生成し、前記入力データを生成したビット拡張用ノードの入力に対応させるようなデータフローグラフを生成してもよい。
【0016】
前記ノード生成部は、演算の出力データのビット数が前記演算のノードに対応した1以上の前記論理回路で出力可能な総ビット数よりも大きいとき、前記出力データの出力用ノードを生成してもよい。
【0017】
本発明の設定データ生成装置は、上記のいずれかのデータフローグラフ生成装置と、データフローグラフ生成装置で生成されたデータフローグラフをリコンフィギュラブル回路に供給するための設定データに変換するデータ変換部を備える。
【0018】
本発明の処理装置は、設定データに従って動作するリコンフィギュラブル回路と、上記設定データ生成装置で生成された設定データを前記リコンフィギュラブル回路に順次供給する制御部を備えることを特徴とする。
【0019】
本発明のデータフローグラフ生成方法は、演算機能の変更が可能なリコンフィギュラブル回路の演算動作を記述するものとして、前記リコンフィギュラブル回路の論理回路の演算機能をノードとして表現し入力データから出力データにいたるデータの流れをノードの接続で表現するデータフローグラフを生成するデータフローグラフ生成方法において、前記論理回路で行う演算に必要な演算ビット数を決定する演算ビット数決定ステップと、演算に対応するノードを生成するノード生成ステップによりデータフローグラフを生成し、前記ノード生成ステップでは、前記必要な演算ビット数が前記演算可能な演算ビット数よりも小さい又は等しいとき、前記1つの演算に対応する1つのノードを生成し、前記必要な演算ビット数が前記演算可能な演算ビット数よりも大きいとき、前記1つの演算に対応して複数のノードを生成する。
【発明の効果】
【0020】
この発明によれば、リコンフィギュラブル回路を用いて多倍長演算を行うためのデータフローグラフを自動的に生成することができる。
【発明を実施するための最良の形態】
【0021】
図1は、実施の形態に係る処理装置10、設定データ生成装置30の構成を示す図である。
【0022】
<処理装置10の構成>
処理装置10は、演算機能を有し、回路構成が再構成可能である。この処理装置10は、1チップとして構成される集積回路からなり、リコンフィギュラブル回路12、設定部14、制御部18、入力回路20、出力回路22を備える。
【0023】
リコンフィギュラブル回路12は、機能の変更が可能なALUによる論理回路の集合体を複数備えた構造を有する。リコンフィギュラブル回路12は、後述する設定部14から供給される設定データに従って動作する演算回路として機能する。即ち、入力回路20からの入力データに対して、設定データに従った演算を行い、演算結果を出力回路20へ出力する。。このリコンフィギュラブル回路12の構成については後で詳しく説明する。
【0024】
設定部14は、リコンフィギュラブル回路12に所期の演算回路を構成するための設定データを供給する。設定部14から設定データを供給することにより、リコンフィギュラブル回路12は所期の演算回路として再構成される。この設定データは後述する設定データ生成装置20で生成される。
【0025】
制御部18は、処理装置10の各部、即ち、リコンフィギュラブル回路12、設定部14、入力回路20、出力回路22を制御する。また、クロック機能を有し、クロック信号を、リコンフィギュラブル回路12、入力回路20、出力回路22に供給する。
【0026】
入力回路20は、例えばデータフリップフロップ(DFF)などの順序回路として構成される。入力回路20は、外部から入力されたデータを、リコンフィギュラブル回路12での演算タイミングに同期するように、リコンフィギュラブル回路12へ入力させる。
【0027】
出力回路22は、例えばデータフリップフロップ(DFF)などの順序回路として構成され、リコンフィギュラブル回路12から出力されるデータを所期のタイミングで外部に出力する。
【0028】
<設定データ生成装置30の構成>
設定データ生成装置30は、データフローグラフ生成部32、設定データ生成部34、記憶部36を備える。
【0029】
記憶部36には、プログラム38、データフローグラフ40、設定データ42などが記憶されている。記憶部36に記憶されるプログラムは、リコンフィギュラブル回路12で実現されるべき処理の動作をC言語などの高級言語で記述したものである。
【0030】
データフローグラフ生成部32は、このプログラムを解析し、リコンフィギュラブル回路を動作設定するためのデータフローグラフ40に変換して記憶部36に格納する。DFGとは、回路における演算間の実行順序の依存関係を表現したものであり、入力変数および定数の演算の流れをグラフ構造で示したものである。一般に、DFGは、上から下に向かって演算が進むように作成される。
【0031】
設定データ生成部34は、データフローグラフ生成部32で生成されたデータフローグラフ40から設定データ42を生成する。設定データ42は、データフローグラフ40をリコンフィギュラブル回路12にマッピングするためのデータであり、リコンフィギュラブル回路12における論理回路の機能や論理回路間の接続関係を定める。設定データ生成部34により生成された設定データ40は、設定部14を介してリコンフィギュラブル回路12へ供給される。
【0032】
なお、設定データを複数のリコンフィギュラブル回路に分けて供給したり、1つのリコンフィギュラブル回路に複数回に分けて供給したりする場合等においては、1つのプログラムから複数の設定データを生成しても良い。
【0033】
<リコンフィギュラブル回路12の構成>
図2は、リコンフィギュラブル回路12の構成の一部を示すものである。
【0034】
図2のように、リコンフィギュラブル回路12では、演算器(ALU)、MUX、及び2つのDFFからなる論理回路(同図ではL11、L12、L21、…、L42として示している)がアレイ状に配列される。各論理回路の演算器は、演算機能を選択的に実行可能な構成となっている。各演算器には、設定部14から演算器の機能を制御する命令セットが設定される。演算器には予め論理和、論理積、ビットシフトなどを行う演算回路が実装されており、命令セットによってどの演算を行うかが選択される。
【0035】
上記の命令セット、接続データセットからなる構成情報は、一般にC言語などの高品位言語で記述されたプログラムから作成される。C言語のプログラムは、データフローグラフ生成部32によってDFGへ変換される。そして、設定データ生成部34は、このDFGから演算器の命令と演算器間の接続を決定し、これらの情報からリコンフィギュラブル回路12への構成情報に変換する。
【0036】
論理回路間の接続には一定の制限が課されている。即ち、上段の論理回路から下段算ユニットへの接続は、同じ列か、隣接する左右の列へのものに制限されており、論理回路段の間で物理的に近接して配列された論理回路同士を接続可能とするように構成される。例えば、論理回路L21からの出力は、L12、L22、及びL32の3つの論理回路にのみ接続されるような配線構造となっている。
【0037】
各論理回路において、演算器(ALU)での演算結果は、MUX(選択器)へ出力される。また、各演算器の演算結果は、DFF(D型フリップフロップ)を介して、同列次段の論理回路内のMUXへも出力される(遅延データ出力)。例えば、論理回路L11の演算器による演算結果は、L11のMUXだけでなく、L11のDFF2を介してL12のMUXへも出力される。MUXは、演算器からの出力と、前段の演算器からの出力(遅延データ入力)を選択して出力する。例えば、論理回路L12のMUXは、L12の演算器からの出力と、L11の演算器からの出力を選択して出力する。
【0038】
なお、上記説明したリコンフィギュラブル回路12は、本願出願人が開発した接続制限付きのリコンフィギュラブル回路(特開2005−182654号公報の図9参照)を改良したものである。リコンフィギュラブル回路12は、各論理回路からの出力が左下段、下段、右下段の3つの論理回路のみに接続配線される構成である点については、上記公報に記載のリコンフィギュラブル回路と共通している。しかし、演算器からの出力と、前段の演算器からの出力(遅延データ入力)を選択して出力するMUXを備える点(言い換えれば、演算器の出力が次段の論理回路の演算器だけでなく、2段下の論理回路の演算器にも接続可能である)点に、リコンフィギュラブル回路12は新規性を有する。
【0039】
なお、図2は、リコンフィギュラブル回路12の構成の一部分を示したものであり、実際には8つの論理回路だけでなく、それ以上に多数の論理回路を備えている。
【0040】
次に、このようなリコンフィギュラブル回路12を用いて倍長演算を行う例を図3を参照して説明する。ここで、リコンフィギュラブル回路12の各論理回路の演算器の演算ビット幅が16ビットであると仮定し、32ビット変数同士の加算A+Bを行う場合を説明する。この様子を示すのが図3である。いま、32ビット変数Aの上位16ビットをAH、下位16ビットをAL、32ビット変数Bの下位16ビットをBL、上位16ビットをBHとしたとき、A+Bの演算は、下位ビット同士の加算AL+BLと、上位ビット同士の加算AH+BHとに分けて行われる。
【0041】
まず、同図の論理回路L11中の演算器a1からALが遅延出力データとして出力され、DFF(d12)を介して論理回路L12の選択器(MUX(m2))でこのデータが選択されて出力される。これにより、論理回路L11の出力は、あたかも論理回路L12の出力であるかのように利用することができる。同様に論理回路L21の出力も、あたかも論理回路L22の出力であるかのように利用できる。そして、論理回路L13中の演算器a3(演算器(+L))は、論理回路L11の出力と、論理回路L21の出力を入力して処理することで、ALとBLの和を処理することができる。更に同様にして、論理回路L14の演算器a6(演算器(+H))は、論理回路L12の出力と論理回路L22の出力を入力して処理することで、AHとBHの和を処理することができる。
【0042】
なお、図示していないが、演算器(+L)で計算された加算におけるキャリーは、次段の演算器(+H)に入力されることで、倍長の加算処理が正しく実行される。また、リコンフィギュラブル回路12は、図2及び図3では図示省略しているが、符号拡張を行うための演算回路を備えていても良い。この符号拡張については、図10、図12などの実施例を用いて後で詳しく説明する。
【0043】
このように、リコンフィギュラブル回路12では、選択器における選択を切り替えることで、単精度と倍精度の両方の演算が実現できる。
【0044】
<データフローグラフ生成部32が行う処理>
データフローグラフ生成部32は、プログラムを解析して、DFGを生成する。このデータフローグラフ生成部32は、C言語等で記述されたプログラム(例えば、図4(a) のプログラム)から演算ビット数を判定する処理(ステップS100、図4参照)を行う。次に、ステップS100で判定された演算ビット数に基づいてDFGを生成する処理(ステップS200)を行う。ステップS100の処理は図5を参照して、ステップS200の処理は図6を参照して説明する。以下では、まず、手順の概略を簡単に説明し、その後、実際の演算例を用いて詳しく説明する。
【0045】
(演算ビット数判定処理:ステップS100)
図5は、演算ビット数を判定する処理(ステップS100)のフローチャートである。この処理では、プログラムから抽出した各演算において、演算の入出力のビット数から演算のビット数を決定する。
【0046】
ステップS101では、プログラムから抽出した演算数を変数mに格納する。続くステップS102では、iに1を代入する。ステップS103では、i番目の演算の入力データのうち最大のビット数aを取得する。ステップS104では、i番目の演算の出力データのうち最大のビット数bを取得する。
【0047】
ステップS105では、aとbの大小比較を行い、aがbよりも大きければステップS106へ進む。aがbよりも大きくない場合、ステップS107へ進む。ステップS106では、演算ビット数をaとした場合とbとした場合の演算結果を比較する。そして、演算結果が変わらなければステップS108へ進む。演算結果が異なるときステップS107へ進む。
【0048】
ステップS108へ進んだ場合、演算のビット数をbとする。ステップS107へ進んだ場合、演算のビット数をaとする。そして、ステップS109では、iとmを比較し、これらが一致すれば終了する。一致しない場合は、ステップS110へ進む。ステップS110へ進んだ場合、iに1を加えたのち、ステップS103へ戻る。
【0049】
以上の処理結果から、入出力ビット数と、演算ビット数が確定した中間DFG(例えば、図4(b)に示すようなもの)を生成できる。
【0050】
(DFG生成処理:ステップS200)
図6は、DFGを生成する処理(ステップS200)のフローチャートである。ここでは、図5の演算ビット数判定処理の結果に基づいてDFGを生成する。
【0051】
ステップS201では、演算数をmに格納する。続くステップS202では、iに1を代入する。ステップS203では、aにi番目の演算の演算ビット数を代入する。この場合の「演算ビット数」とは、図5のステップS107又はS108で決定された演算ビット数のことである。
【0052】
ステップS204では、aとrの大小比較を行う。ここで、rとはリコンフィギュラブル回路12の1個のALUで処理可能なビット数であり、本実施形態では16ビットである。aの方が大きければステップS205へ進み、そうでなければステップS206へ進む。
【0053】
ステップS205では、生成すべきノードの数を判定する。一例として、上記のaがrのn倍のとき、生成すべきノード数はn個であると判定する。このnをbとする。一方、ステップS206へ進んだ場合は、bを1とする。即ち、生成すべきノード数は1個であると判断する。
【0054】
ステップS207では、上記ステップS205又はS206で判定したb個のノードを生成する。
【0055】
ステップS300では、入力変換処理を行う。この処理については、図7を用いて後で説明する。
【0056】
ステップS400では、出力変換処理を行う。この処理については、図8を用いて後で説明する。
【0057】
ステップS208ではiとmを比較し、一致すればステップS210へ進みDFGを生成する。一致しなければステップS209へ進み、iに1を加えて、再びステップS203へ戻る。
【0058】
(入力変換処理:ステップS300)
図7を参照して、ステップS300で行われる入力変換処理の手順を説明する。ここでは、ノード以外から入力データを演算ノードに対応するように変換する。
【0059】
ステップS301では、m1に入力数を格納する。ここで「入力数」とは、演算の入力データの数のことである。ステップS302ではi1に1を代入する。
【0060】
ステップS303では、i1番目の入力データの解析を行う。具体的には、入力データのビット数や、入力データがノードからの入力か否か、などを解析する。
【0061】
入力データがノードからの入力であれば、ステップS304でyesと判定し、ステップS315へ進む。ノード以外からの入力であればステップS305へ進む。ステップS305からステップS314までが、このステップS300の入力変換処理の主要な部分に相当する。
【0062】
ステップS305では、入力データのビット数をa1に格納する。ステップS306では、入力データのビット数a1と、リコンフィギュラブル回路12のALUの入力ビット数r1を比較する。本実施形態ではr1は16である。a1の方が大きい場合、ステップS307へ進み、そうでない場合はステップS308へ進む。S307へ進んだ場合、入力データの分割を行い、分割された入力データの数をb1へ代入する。例えば、a1がr1の2倍であれば、入力データを2つに分割(上位データと下位データに分割)する。S308へ進んだ場合、入力データの分割は行わずに、b1に1を代入する。
【0063】
ステップS309では、b1がs未満かどうかを判定する。sとは演算のノード数のことであり、図6のステップS207で生成されたノードの数である。b1がs未満の場合、ステップS310へ進み、そうでない場合ステップS314へ進む。
【0064】
ステップS310では、入力が定数かどうかを判定し、定数の場合ステップS313へ進み、定数でない場合はステップS311へ進む。ステップS311では、入力データのビット拡張用ノードを生成する。ステップS312では、b1個に分割した入力データを対応するビット拡張用ノードの入力に割り当てる。ステップS313では、符号ビットを拡張して分割数をs個にする。
【0065】
ステップS314では、分割した入力データの下位側のs個を対応する演算ノードの入力に割り当てる。
【0066】
ステップS315では、i1とm1が一致するかどうかを判定し、一致する場合は終了して(図6の)ステップS400へ進む。一致しない場合は、ステップS316でiに1が加算されてステップS303へ戻る。
【0067】
(出力変換処理:ステップS400)
図8を参照して、ステップS400で行われる出力変換処理の手順を説明する。
【0068】
ステップS401では、m2に出力数を格納する。ここで「出力数」とは、演算の出力データの数のことである。ステップS402ではi2に1を代入する。
【0069】
ステップS403では、i1番目の出力データの解析を行う。具体的には、出力データのビット数や、出力データの出力先がノードか否か、などを解析する。
【0070】
出力データがノードへの出力であれば、ステップS404でyesと判定し、ステップS413へ進む。ノード以外への出力であればステップS405へ進む。
【0071】
ステップS405では、出力データのビット数を判定し、判定結果をa2に格納する。ステップS406では、出力データのビット数a2と、リコンフィギュラブル回路12のALUの出力ビット数r2を比較する。本実施形態ではr2は16である。a2の方が大きい場合、ステップS407へ進み、そうでない場合はステップS408へ進む。S407へ進んだ場合、出力データの分割を行い、分割された出力データの数をb2へ代入する。例えば、a2がr2の2倍であれば、出力データを2つに分割(上位データと下位データに分割)する。S408へ進んだ場合、出力データの分割は行わずに、b2に1を代入する。
【0072】
ステップS409では、b2がsより大きいかどうかを判定する。sとは演算のノード数のことであり、図6のステップS207で生成されたノードの数である。b2がsより大きい場合、ステップS410へ進み、そうでない場合ステップS412へ進む。
【0073】
ステップS410では、出力データのビット拡張用ノードを生成する。ステップS411では、b2個に分割した出力データを、対応するビット拡張用ノードの出力に割り当てる。ステップS412へ進んだ場合、分割した出力データを対応する演算ノードの出力に割り当てる。
【0074】
ステップS413では、i2とm2が一致するかどうかを判定し、一致する場合は終了して(図6の)ステップS208へ進む。一致しない場合は、ステップS414でiに1が加算されてステップS403へ戻る。
【0075】
(DFG生成例1)
以下では、図4(a)のプログラムから図4(c)のDFGを生成する例について説明する。
【0076】
このプログラムは、「x +=1」と、「*y -= x」の2つの演算を行うものであり、xはshort型の16ビットの変数、yはint型の32ビットの変数である。図5を参照して、ステップS101では、演算数は2であるから、mに2が代入される。1番目の演算「x +=1」(x = x +1 と同義)の入力データはxと1であり、xは16ビット変数なのでaは16ビットとなる(S103)。また、出力データであるxも16ビットなので、bも16ビットとなる(S104)。a=bなのでS107へ進み、1番目の演算ビット数を16と判定する(S107)。
【0077】
再びS103へ戻り、2番目の演算「*y -= x」(y = y - x と同義)の入力データはyとxであり、xが16ビットに対し、yが32ビットなのでaは32ビットとなる。また、出力データであるyも32ビットなので、bも32ビットとなる(S104)。a=bなのでS107へ進み、2番目の演算ビット数を32と判定する(S107)。
【0078】
以上の処理により、図4(b)のような入出力ビット数と、演算ビット数が確定した中間DFGを生成することができる。なお、この中間DFGにおいては、1番目の演算ノードn01は16ビットの加算を行い、2番目の演算ノードn02は32ビットの減算を行うものである。
【0079】
次に、S200(図6)へ進む。演算数mは2であり(S201)、1番目の演算(上記中間DFGのノードn01の演算に対応)のビット数aは16である(S203)。a=r=16であるから、b=1となり、1個の加算ノード(図4(c)のノードn11)が生成される(S207)。
【0080】
そして、S300(図7)へ進む。1番目の演算の入力はxと1であり(ノードn01への入力に対応)、m1は2である(S301)。このうちの1番目の入力データであるxは16ビットなのでa1は16であり(S305)、r1と等しいのでb1は1となる(S308)。S207で生成されたノード数sとb1は等しいので、xがそのまま演算ノードn11の入力となる(S314)。そして、S303へ戻り、2番目の入力である「1」は、ビット数が2であり(符号ビット付)、b1=1となる(S308)。そして、1がそのまま演算ノードn11の入力となる(S314)。
【0081】
そして、S400(図8)へ進む。1番目の演算の出力は、図4(b)のノードn01からの出力に対応するが、これは、図4(b)の中間DFGのノードn02への出力となるから、S404ではYesと判定され、結局、実質的に何の処理も行われないままS400の処理が完了する。
【0082】
再び図6を参照して、この後、S208、S209を経て、再びS203へ進む。2番目の演算(上記中間DFGのノードn02の演算に対応)のビット数aは32であり、a>rなので、S205へ進む。そして、S205、S207を経て2個の減算ノード(図4(c)のノードn12、n13)が生成される。
【0083】
そして、S300(図7)へ進む。2番目の演算の入力はyとノード(中間DFGのノードn01)からの入力の2つでり、m1は2である(S301)。1番目の入力データであるyは32ビットなのでa1は32であり(S305)、r1(=16)よりも大きいのでS307へ進む。そして、yは、上位データy(H)と、下位データy(L)の2つに分割される。続くS309では、b1=s==2だから、S314へ進み、y(L)をn12の入力として、y(H)をn13の入力としてそれぞれ割り当てる。その後、S315、S316を経て、S303で2番目の入力データが解析されるが、これは中間DFGのノードn01からの入力であるから、そのまま終了する。
【0084】
そして、S400(図8)へ進む。2番目の演算の出力は、図4(b)のノードn02からの出力に対応し、出力データyは32ビットであり、a2は32となる(S405)。このa2はr2よりも大きく、S407で出力データがy(L)、y(H)の2つに分割される。b2=s==2なので、S412へ進み、2個に分割されたy(L)、y(H)のそれぞれがノードn12、n13の出力として割り当てられる。
【0085】
そして、図4(c)のようなDFGが生成される(S210)。
【0086】
(DFG生成例2)
以下では、図9(a)のプログラムから図9(c)のDFGを生成する例について説明する。
【0087】
このプログラムは、「y = x + 1」の1つの演算を行うものであり、xはint型の32ビットの変数、yはshort型の16ビットの変数である。図5を参照して、演算数は1なのでmに1が代入される(S101)。入力データはxと1なのでaは32ビットとなる(S103)。出力データであるyは16ビットなので、bは16ビットとなる(S104)。a>bなのでS106へ進む。
【0088】
S106では、演算のビット数がa(=32)ビットの場合と、b(=16)ビットの場合で、「y = x + 1」の演算が同じ結果になるかどうか判定する。ここでは、出力yが16ビットであるから、16ビット演算した場合と、32ビット演算して16ビットに変換した結果とでは同じである。従って演算ビット数は16ビットで十分(32ビットも必要ない)と判断する(S108)。
【0089】
以上の処理により、図9(b)のような入出力ビット数と、演算ビット数が確定した中間DFGを生成することができる。即ち、int型の変数xと1(符号付の2ビット変数)がshort型の演算ノードへ入力され、これらの加算結果をshort型の変数yとして出力する演算を行うDFGが生成される。
【0090】
次に、S200(図6)へ進む。演算のビット数aは16である(S203)。a=r=16であるから、b=1となり、1個の加算ノード(図9(c)の演算ノードn21)が生成される(S207)。
【0091】
そして、S300(図7)へ進む。入力はxと1であるので入力数m1は2である。i1番目のデータはxであり、a1は32である(S305)。r1=16であるから、a1>r1となるので、S306ではyesと判定されて、S307へ進み、入力データであるxがx(H)とx(L)に分割される。b1=2であるのに対し演算ノード数s=1である(演算ノードn21)から、b1>sなのでS309ではNoと判断されてS314へ進む。そして、S314では分割した入力データの下位側のs個(1個)、即ちx(L)を対応する演算ノードn21の入力に割り当てる。
【0092】
次に2番目のデータ「1」のa1は2ビット(符号付変数と仮定)であるから、a1<r1なので、S306でNoと判断されるので、ステップS307でb1=1となる。b1=s1=1であるから、S309ではyesと判断される。入力は定数であるから、S310ではyesと判断されてS313へ進み、S313を経てS314において、「1」が演算ノードn21の入力として割り当てられる(S314)。
【0093】
そして、S400(図8)へ進む。演算の出力は、short型変数のyであり、a2=16である(S405)。a2=r2=16だから、b2=s==1となり、1個の出力データが対応する演算ノードn21の出力に割り当てられる。
【0094】
そして、図6へ戻り、図9(c)のようなDFGが生成される(S210)。
【0095】
(DFG生成例3)
以下では、図10(a)のプログラムから図10(c)のDFGを生成する例を説明する。
【0096】
このプログラムは、「y = x + 0x000fffff」という1つの演算を行うものであり、xはshort型の16ビットの変数、yはint型の32ビットの変数である。また、0x000fffffは32ビットである。図5を参照して、入力データはxと0x000fffffなのでaは32ビットとなる(S103)。出力データであるyは32ビットなので、bは32ビットとなる(S104)。a=bなのでS107へ進み、演算ビット数は32となる。
【0097】
以上の処理により、図10(b)のような入出力ビット数と、演算ビット数が確定した中間DFGを生成することができる。
【0098】
次に、S200(図6)へ進む。演算のビット数aは32である(S203)。r=16であるから、a>rであり、S205を経て、2個の加算ノード(図10(c)のノードn32、及びノードn33)が生成される(S207)。
【0099】
そして、S300(図7)へ進む。入力はxと0x000fffffであるので、入力数m1は2である。1番目のデータはxであり、a1は16である(S305)から、b1=1となる。一方、S207で生成されたノード数sは2だから、b<sなのでS310へ進む。xは定数ではないからS311へ進む。
【0100】
S311では、入力データのビット拡張用ノード(図10(c)のmovノードn31)が生成される。即ち、入力データxは16ビットであるので、32ビットの下位の演算ノード「+L」(ノードn32)のみの入力にしか対応しておらず、上位の演算ノード「+H」(ノードn33)に入力するxの上位16ビットのデータを生成する必要がある。movノードは、この上位16ビットの入力データを生成するための処理を行うものである。そして、xがこのmovノードへの入力に割り当てられる(S312)。
【0101】
次に2番目のデータ「0x000fffff」のa1は32ビットであるから、このデータは下位16ビットの「0xffff」と上位16ビットの「0x000f」に分割され(S307)b1=2となる。S309では、b1=s=2であるから、S309からS314へ進み、分割した入力データ「0xffff」「0x000f」のそれぞれを演算ノードn32、n33の入力へ割り当てる。
【0102】
そして、S400(図8)へ進む。演算の出力は、int型変数のyであり、a2=32である(S405)。r2=16であるから、a2>r2となるので、S407へ進み、出力データがy(L)とy(H)の2つに分割される。b2=s=2であるから、S409からS412へ進み、分割された出力データy(L)、y(H)のそれぞれが演算ノードn32、n33の出力に割り当てられる。
【0103】
そして、図6へ戻り、図10(c)のようなDFGが生成される(S210)。
【0104】
(DFG生成例4)
以下では、図11(a)のプログラムから図11(c)のDFGを生成する例を説明する。
【0105】
このプログラムは、「y = x + 1」という1つの演算を行うものであり、xはshort型の16ビットの変数、yはint型の32ビットの変数である。図5を参照して、入力データはxと1なのでaは16ビットとなる(S103)。出力データであるyは32ビットなので、bは32ビットとなる(S104)。a < bなのでS107へ進み、演算ビット数は16となる。
【0106】
以上の処理により、図11(b)のような入出力ビット数と、演算ビット数が確定した中間DFGを生成することができる。
【0107】
次に、S200(図6)へ進む。演算のビット数aは16である(S203)。r=16であるから、a = rであり、S206でb=1となるので、1個の加算ノード(図11(c)の加算ノードn41)が生成される(S207)。
【0108】
そして、S300(図7)へ進む。入力はxと1であるので、入力数m1は2である。i1番目のデータはxであり、a1は16である(S305)から、a1=r1=16なので、b1=1となる。S207で生成されたノード数sは1だから、b=sなのでS314へ進む。そして、xが加算ノードn41への入力に割り当てられる(S314)。
【0109】
次に2番目のデータ「1」のa1は2ビット(符号付変数であると仮定)であるから、b1=1となる。そして、同様にして、「1」が加算ノードn41の他の入力となる(S314)。
【0110】
そして、S400(図8)へ進む。演算の出力はint型変数のyであり、a2=32である(S405)。a2>r2であるから、S407へ進む。S407では、出力データが2つ(y(L)とy(H))に分割される。そして、b2=2に対しs=1であるからS410へ進む。
【0111】
出力データyは32ビットであるため、16ビットの加算ノードからは出力データyの上位16ビットであるy(H)を出力できない。そこで、加算ノードの結果をビット拡張し、出力データの上位16ビットのy(H)を生成し出力する必要がある。そこで、S410では、出力データのビット拡張用mov(mov L, mov H)ノードn42が生成される。そして、生成したビット拡張用ノード(mov L, mov H)に出力データy(L)とy(H)がそれぞれ割り当てられる(S411)。
【0112】
そして、図6へ戻り、図11(c)のようなDFGが生成される(S210)。
【0113】
(DFGの割り当て例)
上記の方法で生成したDFGをリコンフィギュラブル回路12に実際にマッピングした場合の様子を説明する。
【0114】
図4(c)のDFGをリコンフィギュラブル回路12に割り当てた場合、図12のようになる。
【0115】
上記で示した処理を実現することにより、多倍長演算のような処理が可能なリコンフィギュラブル回路に対応したDFGを自動的に生成することができる。また、これにより実行プログラムから実行設定データの生成までの時間が短縮できるため、リコンフィギュラブル回路に所望の処理を実行させるための開発期間を短縮させることができる。
【0116】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は、上記した実施の形態の説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【0117】
例示した図では、多倍長演算のノードを縦に並べた構成になっているが、これはリコンフィギュラブル回路の処理に依存するものであり、この構成に限定されるものではない。例えば、横に並ぶ等、様々な構成がありえる。
【0118】
また、上記では、2倍長演算を例に説明したが、本発明の概念は3以上の多倍長演算を行うためのDFGの生成にも適用できる。例えば、図13に示すような3倍長演算を行うDFGの生成にも適用できる。
【0119】
なお、上記ではステップS100により中間DFGを生成するものとして説明しているが、実際に中間DFGを生成することなく、演算ビット数、入出力ビット数の情報を、続くステップS200で利用できるよう格納しておくようにしても良い。
【図面の簡単な説明】
【0120】
【図1】実施の形態に係る処理装置10の構成図である。
【図2】リコンフィギュラブル回路12の構成を示す図である。
【図3】リコンフィギュラブル回路12を用いて倍長演算を行う例を説明する図である。
【図4】CソースプログラムからDFGを生成する第1の例である。
【図5】演算ビット数を判定する処理(ステップS100)のフローチャートである。
【図6】DFGを生成する処理(ステップS200)のフローチャートである。
【図7】入力変換処理(ステップS300)のフローチャートである。
【図8】出力変換処理(ステップS400)のフローチャートである。
【図9】CソースプログラムからDFGを生成する第2の例を示す図である。
【図10】CソースプログラムからDFGを生成する第3の例を示す図である。
【図11】CソースプログラムからDFGを生成する第4の例を示す図である。
【図12】図4(c)のDFGをリコンフィギュラブル回路12に割り当てた後の状態である。
【図13】3倍長演算を行う場合のDFGを示す図である。
【図14】従来の方法で生成したDFGを説明する図である。
【符号の説明】
【0121】
10 処理装置
12 リコンフィギュラブル回路
14 設定部
18 制御部
30 コンパイル部
32 設定データグラフ処理部
【特許請求の範囲】
【請求項1】
演算機能の変更が可能なリコンフィギュラブル回路の演算動作を記述するものとして、前記リコンフィギュラブル回路の論理回路の演算機能をノードとして表現し入力データから出力データにいたるデータの流れをノードの接続で表現するデータフローグラフを生成するデータフローグラフ生成装置において、
前記論理回路で行う演算に必要な演算ビット数を決定する演算ビット数決定部と、
演算に対応するノードを生成するノード生成部を備え、
前記ノード生成部は、
前記必要な演算ビット数が前記演算可能な演算ビット数よりも小さい又は等しいとき、前記1つの演算に対応する1つのノードを生成し、
前記必要な演算ビット数が前記演算可能な演算ビット数よりも大きいとき、前記1つの演算に対応して複数のノードを生成する、データフローグラフ生成装置。
【請求項2】
前記演算ビット数決定部は、演算の入力データのビット数に基づいて前記演算ビット数を決定する、請求項1記載のデータフローグラフ生成装置。
【請求項3】
前記演算ビット数決定部は、
前記入力データのビット数が前記出力データのビット数よりも大きいとき、前記演算ビット数を出力データのビット数と等しく設定した場合と、前記出力データのビット数よりも大きく設定した場合の演算結果を比較し、
比較した演算結果が等しいとき、出力データのビット数を演算ビット数と決定する、請求項2記載のデータフローグラフ生成装置。
【請求項4】
前記ノード生成部は、
1つの演算に対して複数の演算ノードが生成されたとき、前記演算の入力、及び/又は出力データを、それぞれの演算ノードの入力、及び/又は出力に対応させるための変換を行う入出力変換部を備える、請求項1ないし3のいずれかに記載のデータフローグラフ生成装置。
【請求項5】
前記入出力変換部は、
入力データのビット数が前記論理回路の入力ビット数よりも大きいとき、前記入力データを複数の入力データに分割して、それぞれの演算ノードの入力に対応させるようなデータフローグラフを生成する、請求項4記載のデータフローグラフ生成装置。
【請求項6】
前記入出力変換部は、
出力データのビット数が前記論理回路の出力ビット数よりも大きいとき、前記出力データを複数の出力データに分割して、それぞれの演算ノードの出力に対応させるようなデータフローグラフを生成する、請求項4記載のデータフローグラフ生成装置。
【請求項7】
前記ノード生成部は、
演算の入力データのビット数が前記演算のノードに対応した1以上の前記論理回路で入力可能な総ビット数よりも小さいとき、前記入力データのビット拡張用ノードを生成し、前記入力データを生成したビット拡張用ノードの入力に対応させるようなデータフローグラフを生成する、請求項1ないし6のいずれかに記載のデータフローグラフ生成装置。
【請求項8】
前記ノード生成部は、
演算の出力データのビット数が前記演算のノードに対応した1以上の前記論理回路で出力可能な総ビット数よりも大きいとき、前記出力データの出力用ノードを生成する、請求項1ないし6のいずれかに記載のデータフローグラフ生成装置。
【請求項9】
前記演算ビット数決定部は、所期の演算を記述したプログラムから演算に必要な演算ビット数を決定する、請求項1ないし8の何れかに記載のデータフローグラフ生成装置。
【請求項10】
請求項1ないし9の何れかに記載のデータフローグラフ生成装置と、
前記データフローグラフ生成装置で生成されたデータフローグラフを、前記リコンフィギュラブル回路に供給するための設定データに変換するデータ変換部を備えた、設定データ生成装置。
【請求項11】
設定データに従って動作するリコンフィギュラブル回路と、
請求項10に記載の設定データ生成装置で生成された設定データを前記リコンフィギュラブル回路に供給する設定部を備えた処理装置。
【請求項12】
演算機能の変更が可能なリコンフィギュラブル回路の演算動作を記述するものとして、前記リコンフィギュラブル回路の論理回路の演算機能をノードとして表現し入力データから出力データにいたるデータの流れをノードの接続で表現するデータフローグラフを生成するデータフローグラフ生成方法において、
前記論理回路で行う演算に必要な演算ビット数を決定する演算ビット数決定ステップと、
演算に対応するノードを生成するノード生成ステップによりデータフローグラフを生成し、
前記ノード生成ステップでは、
前記必要な演算ビット数が前記演算可能な演算ビット数よりも小さい又は等しいとき、前記1つの演算に対応する1つのノードを生成し、
前記必要な演算ビット数が前記演算可能な演算ビット数よりも大きいとき、前記1つの演算に対応して複数のノードを生成する、データフローグラフ生成方法。
【請求項1】
演算機能の変更が可能なリコンフィギュラブル回路の演算動作を記述するものとして、前記リコンフィギュラブル回路の論理回路の演算機能をノードとして表現し入力データから出力データにいたるデータの流れをノードの接続で表現するデータフローグラフを生成するデータフローグラフ生成装置において、
前記論理回路で行う演算に必要な演算ビット数を決定する演算ビット数決定部と、
演算に対応するノードを生成するノード生成部を備え、
前記ノード生成部は、
前記必要な演算ビット数が前記演算可能な演算ビット数よりも小さい又は等しいとき、前記1つの演算に対応する1つのノードを生成し、
前記必要な演算ビット数が前記演算可能な演算ビット数よりも大きいとき、前記1つの演算に対応して複数のノードを生成する、データフローグラフ生成装置。
【請求項2】
前記演算ビット数決定部は、演算の入力データのビット数に基づいて前記演算ビット数を決定する、請求項1記載のデータフローグラフ生成装置。
【請求項3】
前記演算ビット数決定部は、
前記入力データのビット数が前記出力データのビット数よりも大きいとき、前記演算ビット数を出力データのビット数と等しく設定した場合と、前記出力データのビット数よりも大きく設定した場合の演算結果を比較し、
比較した演算結果が等しいとき、出力データのビット数を演算ビット数と決定する、請求項2記載のデータフローグラフ生成装置。
【請求項4】
前記ノード生成部は、
1つの演算に対して複数の演算ノードが生成されたとき、前記演算の入力、及び/又は出力データを、それぞれの演算ノードの入力、及び/又は出力に対応させるための変換を行う入出力変換部を備える、請求項1ないし3のいずれかに記載のデータフローグラフ生成装置。
【請求項5】
前記入出力変換部は、
入力データのビット数が前記論理回路の入力ビット数よりも大きいとき、前記入力データを複数の入力データに分割して、それぞれの演算ノードの入力に対応させるようなデータフローグラフを生成する、請求項4記載のデータフローグラフ生成装置。
【請求項6】
前記入出力変換部は、
出力データのビット数が前記論理回路の出力ビット数よりも大きいとき、前記出力データを複数の出力データに分割して、それぞれの演算ノードの出力に対応させるようなデータフローグラフを生成する、請求項4記載のデータフローグラフ生成装置。
【請求項7】
前記ノード生成部は、
演算の入力データのビット数が前記演算のノードに対応した1以上の前記論理回路で入力可能な総ビット数よりも小さいとき、前記入力データのビット拡張用ノードを生成し、前記入力データを生成したビット拡張用ノードの入力に対応させるようなデータフローグラフを生成する、請求項1ないし6のいずれかに記載のデータフローグラフ生成装置。
【請求項8】
前記ノード生成部は、
演算の出力データのビット数が前記演算のノードに対応した1以上の前記論理回路で出力可能な総ビット数よりも大きいとき、前記出力データの出力用ノードを生成する、請求項1ないし6のいずれかに記載のデータフローグラフ生成装置。
【請求項9】
前記演算ビット数決定部は、所期の演算を記述したプログラムから演算に必要な演算ビット数を決定する、請求項1ないし8の何れかに記載のデータフローグラフ生成装置。
【請求項10】
請求項1ないし9の何れかに記載のデータフローグラフ生成装置と、
前記データフローグラフ生成装置で生成されたデータフローグラフを、前記リコンフィギュラブル回路に供給するための設定データに変換するデータ変換部を備えた、設定データ生成装置。
【請求項11】
設定データに従って動作するリコンフィギュラブル回路と、
請求項10に記載の設定データ生成装置で生成された設定データを前記リコンフィギュラブル回路に供給する設定部を備えた処理装置。
【請求項12】
演算機能の変更が可能なリコンフィギュラブル回路の演算動作を記述するものとして、前記リコンフィギュラブル回路の論理回路の演算機能をノードとして表現し入力データから出力データにいたるデータの流れをノードの接続で表現するデータフローグラフを生成するデータフローグラフ生成方法において、
前記論理回路で行う演算に必要な演算ビット数を決定する演算ビット数決定ステップと、
演算に対応するノードを生成するノード生成ステップによりデータフローグラフを生成し、
前記ノード生成ステップでは、
前記必要な演算ビット数が前記演算可能な演算ビット数よりも小さい又は等しいとき、前記1つの演算に対応する1つのノードを生成し、
前記必要な演算ビット数が前記演算可能な演算ビット数よりも大きいとき、前記1つの演算に対応して複数のノードを生成する、データフローグラフ生成方法。
【図2】
【図12】
【図1】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図13】
【図14】
【図12】
【図1】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図13】
【図14】
【公開番号】特開2009−43027(P2009−43027A)
【公開日】平成21年2月26日(2009.2.26)
【国際特許分類】
【出願番号】特願2007−207338(P2007−207338)
【出願日】平成19年8月9日(2007.8.9)
【出願人】(000001889)三洋電機株式会社 (18,308)
【Fターム(参考)】
【公開日】平成21年2月26日(2009.2.26)
【国際特許分類】
【出願日】平成19年8月9日(2007.8.9)
【出願人】(000001889)三洋電機株式会社 (18,308)
【Fターム(参考)】
[ Back to top ]