図1は、実施例に係る処理装置10の構成図である。処理装置10は、リコンフィギュラブル回路12、設定データ保持部14、シーケンサ装置20、出力データ保持部30および経路部32を備える。処理装置10は、1チップとして構成される集積回路装置の構成を有してもよい。リコンフィギュラブル回路12は、設定を変更することにより、機能の変更を可能とする。
設定データ保持部14は、リコンフィギュラブル回路12に所期の回路を構成するための設定データを複数保持し、設定データを所定の時間間隔でリコンフィギュラブル回路12に順次供給する。設定データ保持部14は、記憶した設定データを、指定されたアドレス値をもとに出力するコマンドメモリとして構成されてもよい。この場合、設定データはコマンドデータと呼ぶことができる。シーケンサ装置20は、設定データ保持部14に記憶された複数の設定データの中から、リコンフィギュラブル回路12に供給する設定データを選択する機能をもつ。
リコンフィギュラブル回路12は、機能の変更が可能な複数の論理回路を有して構成される。具体的にリコンフィギュラブル回路12は、複数の演算機能を選択的に実行可能な論理回路を複数段に配列させた構成を有し、前段の論理回路列の出力と後段の論理回路列の入力との接続関係を設定可能な接続部を含む。複数の論理回路は、マトリックス状に配置されてもよい。各論理回路の機能と、論理回路間の接続関係は、設定データ保持部14により供給される設定データに基づいて設定される。設定データは所定の時間間隔でリコンフィギュラブル回路12に供給され、したがって、リコンフィギュラブル回路12は、供給される設定データに応じた演算処理機能を実行する。
経路部32は、フィードバックパスとして機能し、リコンフィギュラブル回路12の出力を、リコンフィギュラブル回路12の入力に接続する。出力データ保持部30は、リコンフィギュラブル回路12から出力されるデータ信号および/または外部から入力されるデータ信号を格納するための記憶領域を有する。出力データ保持部30に格納されたデータ信号は、経路部32を通じてリコンフィギュラブル回路12の入力に伝達され、また図示しない制御部からの出力指示に基づいて処理装置10の外部に出力される。
図2は、リコンフィギュラブル回路12の構成の一例を示す。リコンフィギュラブル回路12は、それぞれが複数の演算機能を選択的に実行可能な論理回路の多段配列と、前段の論理回路の出力と後段の論理回路の入力の接続関係を任意に設定可能な接続部52とを備える。リコンフィギュラブル回路12では、論理回路の多段配列構造により、上段から下段に向かって演算が進められる。なお、本明細書において「多段」とは、複数の段を意味する。なお、リコンフィギュラブル回路12の回路構成は、必ずしも多段配列を有する必要はないが、回路規模を削減するために全ての論理回路間の接続を可能とするのではなく、一部の論理回路同士の接続を実現させるのが好ましい。
リコンフィギュラブル回路12は、論理回路としてALU(Arithmetic Logic Unit)を有している。ALUは、複数種類の多ビット演算を選択的に実行可能な算術論理回路であって、論理和、論理積、ビットシフトなどの複数種類の多ビット演算を設定により選択的に実行できる。各ALUは、複数の演算機能を設定するためのセレクタを有して構成されている。図示の例では、ALUが、2つの入力端子と1つの出力端子を有して構成される。
リコンフィギュラブル回路12は、縦方向にX個、横方向にY個のALUが配置されたX段Y列のALUアレイとして構成される。ここでは、縦方向に3個、横方向に6個のALUが配置された3段6列のALUアレイを示している。リコンフィギュラブル回路12は、接続部52およびALU列53を備える。ALU列53は複数段に設けられ、接続部52は前後段のALU列53の間に設けられて、前段のALUの出力と後段のALUの入力の接続関係を設定する。
図2に示す例では、第1段のALU列53aと第2段のALU列53bの間に、第2段を構成する接続部52bが設けられ、第2段のALU列53bと第3段のALU列53cの間に、第3段を構成する接続部52cが設けられる。なお、第1段を構成する接続部52aは、第1段のALU列53aの上側に設けられる。
第1段のALU11、ALU12、・・・、ALU16には、入力変数や定数が入力され、設定された所定の演算がなされる。演算結果の出力は、第2段の接続部52bに設定された接続にしたがって、第2段のALU21、ALU22、・・・、ALU26に入力される。第2段の接続部52bにおいては、第1段のALU列53aの出力と第2段のALU列53bの入力の間で任意の接続関係、あるいは予め定められた接続関係の組合せの中から選択された接続関係を実現できるように接続用結線が構成されており、設定により所期の結線が有効となる。第2段のALU21、ALU22、・・・、ALU26には、ALU列53aの出力が入力され、設定された所定の演算がなされる。演算結果の出力は、第3段の接続部52cの接続用結線において設定された接続にしたがって、第3段のALU31、ALU32、・・・、ALU36に入力される。
最終段となる第3段のALU列53cからの出力データは、出力データ保持部30に出力される。出力データ保持部30は、経路部32を介して、出力データを接続部52aに入力する。接続部52aは、接続用結線を設定し、第1段のALU11、ALU12、・・・、ALU16にデータを供給する。演算処理の最終結果が生成された場合には、出力データ保持部30が、データを処理装置10の外部に出力する。
図1に戻って、シーケンサ装置20は、シーケンサ制御データ保持部22、設定データ選択部24、シーケンサ制御部26およびシーケンサ制御データ選択部28を有する。設定データ選択部24は、設定データ保持部14に、設定データを選択する第1選択信号を供給する。具体的に、第1選択信号は、設定データ保持部14の読出アドレスを指定する信号であり、設定データ保持部14は、この読出アドレスをもとに、リコンフィギュラブル回路12に所期の設定データを出力する。シーケンサ制御データ保持部22は、設定データ選択部24に第1選択信号を生成させるためのシーケンサ制御データを保持し、このシーケンサ制御データを設定データ選択部24に供給する。シーケンサ制御データ保持部22は、RAMなどのメモリにより構成される。これにより、シーケンサ装置20の処理内容を、シーケンサ制御データを書き換えることで容易に変更することができ、種々の制御を実行できるとともに、シーケンサ装置20の汎用性を高めることができる。
シーケンサ制御データ選択部28は、シーケンサ制御データ保持部22に、設定データ選択部24に対して供給するシーケンサ制御データを選択する第2選択信号を供給する。具体的に、第2選択信号は、シーケンサ制御データ保持部22の読出アドレスを指定する信号であり、シーケンサ制御データ保持部22は、この読出アドレスをもとに、設定データ選択部24に所期のシーケンサ制御データを出力する。
なお、図6に関して詳述するが、シーケンサ制御データは、設定データ選択部24だけでなく、シーケンサ制御部26およびシーケンサ制御データ選択部28の動作を制御するデータも含む。シーケンサ制御データ選択部28は、シーケンサ制御データ保持部22から供給される制御データ、シーケンサ制御部26から供給されるデータと、リコンフィギュラブル回路12から供給されるデータをもとに、第2選択信号を生成し、シーケンサ制御データ保持部22に供給する。本実施例において、シーケンサ制御データ選択部28は、リコンフィギュラブル回路12から出力される分岐制御データを受け取る。分岐制御データは、ソースプログラム中のif文やfor文などの処理に際して実行される条件判定の結果を示すものである。
本実施例では、シーケンサ装置20が、リコンフィギュラブル回路12における演算結果、具体的には条件の判定結果をもとに、設定データ保持部14がリコンフィギュラブル回路12に供給する設定データを管理する。本実施例では、シーケンサ装置20による設定データの管理を効率的なものとするために、設定データ保持部14に格納する設定データ、およびシーケンサ制御データ保持部22に格納するシーケンサ制御データを、以下の手順で生成する。
図3は、設定データおよびシーケンサ制御データの生成手順を示す。この生成フローは、図示しないコンパイラ装置により実行される。
コンパイラ装置が、リコンフィギュラブル回路12により実現されるべきプログラムを所定の記憶領域から読み出す(S10)。プログラムは、回路における処理の動作を記述した動作記述を示し、信号処理回路または信号処理アルゴリズムなどをC言語などの高級言語で記述したものである。プログラムは、条件文やループ文などを含んで構成される。なお、条件文およびループ文には演算の移行先を定めるための条件判定処理が存在し、条件判定の結果に応じて次に実行する演算処理が決定する。例えば、if文およびelse文で表現される条件文は、if条件が成立したときにif文を実行し、if条件が成立しないときにelse文を実行する。また、ループ文は、決められた回数の処理が終了すると、そのループ文を抜けて新たな演算処理を開始し、決められた回数の処理が終了しなければ、繰り返し処理を継続する。本実施例の処理装置10では、このような分岐処理を決定する条件判定の結果を用いて、効率的な演算処理を実現する。
コンパイラ装置は、読み出したプログラムをコンパイル処理し(S12)、データフローグラフ(DFG)に変換するとともに(S14)、DFGの処理の流れを示すフローデータを生成する(S18)。DFGは、回路における演算間の実行順序の依存関係を表現し、入力変数および定数の演算の流れをグラフ構造で示したものである。DFGフローデータは、DFG全体を、所定の一連の処理を実行する複数のDFG群に分解し、DFG群を組み合わせて、処理全体の流れを示すように生成される。DFG群は、処理順序が確定している1以上のDFGを一つの単位としてまとめられる。なおDFG群において、DFGが1つ存在する場合は、そのDFGのみを処理するものとして処理順序が確定しているものとみなし、DFGが2以上存在する場合は、2以上のDFG間の処理順序が確定していることが必要である。DFGは、対応する設定データに変換され(S16)、DFGフローデータは、対応するシーケンサ制御データに変換される(S20)。設定データは、DFGをリコンフィギュラブル回路12にマッピングするためのデータであり、リコンフィギュラブル回路12における論理回路の機能や論理回路間の接続関係を定める。設定データは、設定データ保持部14に格納され、シーケンサ制御データは、シーケンサ制御データ保持部22に格納される。
図4は、DFGフローデータの例を示す。従来のDFGは、分岐処理が存在する場合には、両方の分岐先の処理を実行するように作成されていたが、本実施例では、処理順序が確定している連続したDFGを一つのDFG群として位置づけ、複数のDFG群の処理関係をDFGフローデータとして表現する。すなわち、DFG群内における演算処理は、DFG群の分岐を判定した結果に依存することなく確定したものとなる。DFG群の条件分岐の判定結果は、リコンフィギュラブル回路12から出力される分岐制御データcによって示される。なお、この判定は、DFG群内で途中に位置するDFGによってなされてもよく、また最後に位置するDFGによってなされてもよい。図4では、分岐制御データcの値に応じて、次のDFGが決定されるフローが示されている。なお、リコンフィギュラブル回路12からの分岐制御データcはフラグ値などのデータ形式をとり、2分岐の場合には、1または0のいずれかとなる。
例えば、DFG群3を参照して、for文のようなループ処理を行う場合には、ループ終了条件が成立するまでの間、分岐制御データcは1であり、分岐制御データcが1に設定されている間は、DFG群3の演算処理が繰り返し実行される。一方、所定回数のループ処理が実行されて、ループ終了条件が成立したときには、分岐制御データcが0となり、DFG群4の演算処理が開始される。また、DFG群1を参照して、DFG群の分岐を判定するためのif文のような条件処理を行う場合には、例えば、if条件が成立したときに分岐制御データcは1となり、if条件が成立しないとき、もしくはelse条件が成立したときに分岐制御データcは0となる。逆に言うと、for文やif文などのDFG群分岐を判定する条件分岐判定が発生する処理については、上記したような分岐制御データcが生成されるように、リコンフィギュラブル回路12に供給する設定データが予め作成される。既述のように、設定データの生成は、図示しないコンパイル装置によって行われる。
例えばDFG群1において、DFG1−1からDFG1−12までは、分岐制御データcに依存せず順次処理されるDFGであり、DFG1−12の次に処理されるDFGは、リコンフィギュラブル回路12上で演算処理を実行したことにより決定される分岐制御データcの値によりDFG2−1かDFG7−1のいずれかに選択される。このように、本実施例では、分岐制御データcに依存せず処理順序が決まっているDFG1−1からDFG1−12までを一つのDFG群1に設定する。DFG群において最後に処理されるDFGは、DFG群の最後に配置され、DFG群1についていえば、DFG1−12がDFG群1の最後に配置されている。同様に残りのDFGを、最後に処理されるDFGを途中に含まないDFG群に分割する。なお、図示のDFGフローデータは一例であり、例えば、DFG群2とDFG群3とを一つのDFG群として設定することも可能である。図示の例ではDFG群3において、最終段のDFG3−10から先頭段のDFG3−1に戻る自己ループが形成されているが、DFG群2とDFG群3とを結合した場合には、この自己ループが途中段のDFGに戻ることになる。この場合であっても、最後の処理が発生するDFGは最終段のDFGであり、途中のDFGから他のDFG群に移行することはない。
図5は、図4のDFGフローデータに対応する設定データ保持部14における設定データの格納例を示す。ここで、一つのDFGが一つの設定データに対応するものとし、一つのDFGの設定データは設定データ保持部14の一つのアドレスに格納されるものとする。以下では、DFGおよび設定データを特に区別することなく取り扱うこともある。本実施例では、設定データを、図5に示すようにDFG群すなわち設定データ群ごとに格納する。
すなわち、設定データ保持部14は、リコンフィギュラブル回路12に供給する順序が確定している1以上の設定データを一つの設定データ群とし、複数の設定データを設定データ群単位で保持する。なお、設定データが1つの場合には、その設定データのみをリコンフィギュラブル回路12に供給するため、その点から、リコンフィギュラブル回路12に供給する順序が確定しているものとみなす。また、設定データが2以上の場合には、それらの設定データ間でリコンフィギュラブル回路12に供給する順序が確定していることが必要である。ここでは、設定データ保持部14が、リコンフィギュラブル回路12上に所期の回路を構成するための複数の設定データを、7つの設定データ群に分解して保持している。このとき、設定データ保持部14は、設定データ群における1以上の設定データを、リコンフィギュラブル回路12への供給順序にしたがって、連続したアドレスの格納領域に保持する。すなわち、DFG群内の2以上のDFGの並びは、リコンフィギュラブル回路12に対して供給する順番と同じとする。これにより、あるDFG群の設定データをリコンフィギュラブル回路12に供給するには、設定データ保持部14の読出アドレスを1ずつインクリメントすればよく、設定データ選択部24から設定データ保持部14に供給する読出アドレス(第1選択信号)の生成を単純化できる。このように、設定データ保持部14には、一つのDFG群内における設定データを処理順に応じて格納することが好ましいが、DFG群間のアドレス割当は適当であってよい。また、設定データ保持部14は、リコンフィギュラブル回路12を構成する設定データ以外の時間調整用の設定データ(E_DFG)を保持する。
図6は、シーケンサ装置20の詳細を示す。シーケンサ制御データ保持部22は、設定データ保持部14におけるDFG群の先頭DFGのRAMアドレス(COMaddr1)、分岐制御データc=1の場合にシーケンサ制御データ保持部22において次に読み出すアドレスへの移動数(a)、分岐制御データc=0の場合にシーケンサ制御データ保持部22において次に読み出すアドレスへの移動数(b)、DFG群のDFG数(step)、DFG群内で分岐制御データcを出力するDFGの順番(pos_c)、DFG群のすべてのDFGを処理した後に時間調整用に加えるE_DFGの数(empty)を、シーケンサ制御データとして保持する。本実施例では、これらのシーケンサ制御データを一つの制御データ群とし、DFG群(設定データ群)に対応付けて一つのアドレスに格納する。図6のシーケンサ制御データ保持部22では、一つのアドレスにおいて、左から順に、RAMアドレス(COMaddr1)、移動数(a)、移動数(b)、DFG群のDFG数(step)、分岐制御データcを出力するDFGの順番(pos_c)、E_DFGの数(empty)を格納している様子を示している。
シーケンサ制御データは、図4に示したDFGフローデータに基づいて生成される。図6の例では、DFG群1のシーケンサ制御データ群をシーケンサ制御データ保持部22のアドレス0に格納する。同様に、DFG群2のシーケンサ制御データ群をアドレス1に、DFG群3のシーケンサ制御データ群をアドレス2に、DFG群4のシーケンサ制御データ群をアドレス3に、DFG群5のシーケンサ制御データ群をアドレス4に、DFG群6のシーケンサ制御データ群をアドレス5に、DFG群7のシーケンサ制御データ群をアドレス6に格納する。なお、シーケンサ制御データ群を格納するアドレスは、DFGフローデータにおけるDFG番号の順に格納する必要はなく、ランダムであってよい。
シーケンサ制御データ保持部22のアドレス7に、E_DFGのシーケンサ制御データ群を格納する。このE_DFGの設定データは、リコンフィギュラブル回路12に構成した所期の回路の演算結果に影響を与えない設定データであり、すべてのDFG群が処理されたあとに時間調整を行うために利用される。例えば、処理装置10におけるクロックレートが外部クロックレートの100倍であるとき、外部1クロックに対し、リコンフィギュラブル回路12で処理可能なDFG数は100となる。外部クロックレートは、外部装置とリコンフィギュラブル回路12との間でデータを入出力するタイミングに影響を与える。処理するDFG数(設定データ数)が予め決まっていれば、外部との間のデータ入出力タイミングを予め定めることができるが、本実施例の演算処理では分岐処理が発生するため、条件の判定状況により全体の処理DFG数が変化することになる。例えば図4を参照して、DFG群1の処理終了後、条件の判定結果によってDFG群2またはDFG群7の処理が実行されるため、結果として処理されるDFG数が変化する。そこで、本実施例では、最後のDFGであるDFG7−9が処理された後に、保持している演算結果を変更させずに、外部装置とのタイミング調整を図るべく、E_DFGの設定データを100回以内の回数で実行させて、処理時間を調整する。
シーケンサ制御データCOMaddr1は、設定データ保持部14におけるDFG群の先頭DFGのアドレスである。なお、図6に示す例では、シーケンサ制御データCOMaddr1がDFG群の先頭DFGのアドレスを指定しているが、例えばDFG群内における自己ループによりDFG群の途中のDFGに戻る場合には、シーケンサ制御データCOMaddr1とは別に、その途中のDFGのアドレスが設定されていてもよい。シーケンサ制御データCOMaddr1は、設定データ群を選択するものであり、群選択制御データと呼ぶこともできる。DFG群1における先頭のDFGはDFG1−1であるため、シーケンサ制御データ保持部22のアドレス0におけるCOMaddr1は、1となる(図5参照)。他のDFG群に対しても同様であり、図5を参照して、シーケンサ制御データ保持部22のアドレス1におけるCOMaddr1は13、アドレス2におけるCOMaddr1は16、アドレス3におけるCOMaddr1は26、アドレス4におけるCOMaddr1は32、アドレス5におけるCOMaddr1は38、アドレス6におけるCOMaddr1は48となる。また、アドレス7は、E_DFGに対応するシーケンサ制御データ群が格納されており、COMaddr1は0となる。
シーケンサ制御データaおよびbは、次に読み出すシーケンサ制御データ保持部22のアドレスへの移動数であり、現在のアドレスに対する次のDFG群のシーケンサ制御データ保持部22のアドレスの相対値を設定される。シーケンサ制御データaおよびbは、分岐制御データcに応じてシーケンサ制御データ選択部28に選択的に読み出される。図4を参照して、DFG群1の処理終了後、分岐制御データc=1であれば、次の処理はDFG群2となる。DFG群1のアドレス0とDFG群2のアドレス1の相対値は1であり、したがってシーケンサ制御データ保持部22のアドレス0におけるシーケンサ制御データaは1となる。また、分岐制御データc=0であれば、次の処理はDFG群7となり、DFG群1のアドレス0とDFG群7のアドレス6の相対値は6であるため、シーケンサ制御データbが6となる。他のDFG群に対しても同様である。例えば、DFG群3では、c=1の場合、次に処理するDFG群が同じDFG群3であるため、シーケンサ制御データaは0となっている。c=0の場合、次の処理はDFG群4となるため、シーケンサ制御データbは1となる。また、DFG群6では、c=1の場合、次に処理するDFG群がDFG群2であり、DFGフローデータ上でフィードバックされることになるため、シーケンサ制御データaは−4となっている。なお、シーケンサ制御データaおよびbは、次に読み出すシーケンサ制御データ保持部22のアドレスそのものであってもよい。
シーケンサ制御データstepはDFG群のDFG数であり、DFG群1では、DFGを12個有しているため、stepは12となる。他のDFG群においても同様である。
シーケンサ制御データpos_cは、DFG群内における分岐制御データcを出力するDFGの順番である。例えば、DFG群1では、分岐制御データcが、DFG1−5の設定データをマッピングしたリコンフィギュラブル回路12で生成されるとすると、シーケンサ制御データpos_cは5となる。他のDFG群に対しても同様である。
シーケンサ制御データemptyは、現在のDFG群内のすべてのDFGを処理した後に時間調整用に加えるE_DFGの数である。具体的には、分岐制御データcの値がリコンフィギュラブル回路12から出力された後、シーケンサ制御データ選択部28が分岐制御データcをもとにシーケンサ制御データ保持部22のアドレスを指定して所期のシーケンサ制御データの読出を行い、設定データ選択部24が設定データ保持部14のアドレスを指定して、所期の設定データをリコンフィギュラブル回路12に供給できる時間よりも前に、現在の設定データ群における設定データを全てリコンフィギュラブル回路12に供給した場合に、設定データ保持部14が、時間を調整するためにE_DFGの必要数の設定データをリコンフィギュラブル回路12に供給する。
例えば、DFG群4では、シーケンサ制御データpos_cを参照すると、DFG群4内の最後のDFGが分岐制御データcを生成し出力するが、分岐制御データcの値に基づいてシーケンサ制御データ選択部28がシーケンサ制御データ保持部22の読出アドレスを生成し、設定データ選択部24が、読み出されたシーケンサ制御データから設定データを選択して、その設定データを設定データ保持部14からリコンフィギュラブル回路12に供給させるまでには所定の時間がかかる。なお、図6のハード構成では、3つのDFGの処理時間分が必要となる。その間、リコンフィギュラブル回路12に設定データが供給されなければ、演算結果が上書きされる恐れがある。そこで、次のDFG群における設定データがリコンフィギュラブル回路12に供給されるまでの間、演算結果に影響を与えないE_DFGの設定データをリコンフィギュラブル回路12に実行させておくことで、演算結果が上書きされる可能性を回避する。したがって、本実施例において、DFG群4におけるシーケンサ制御データemptyは3となる。
また、DFG群6では、シーケンサ制御データpos_cを参照して、DFG群6内のDFG10個中8番目のDFGで分岐制御データcが生成され、最後のDFGが処理されるまでの間にDFG2つ分の時間が経過するため、E_DFGを一つ挿入しておく必要がある(3−2=0)。したがって、DFG群6におけるシーケンサ制御データemptyは1となる。
以上から理解されるように、あるDFG群において、分岐制御データcを出力するDFGの後のDFGの数が3つ以上である場合には、シーケンサ制御データemptyは0をとることになる。
シーケンサ制御部26は、DFG群の現在のDFGの順番をカウントするカウンタを有している。このカウンタは、設定データ保持部14から設定データを出力するタイミングに同期して出力を1ずつインクリメントする。カウント値は、設定データ選択部24において、設定データ群内における設定データを選択する群内選択制御データとして利用される。
カウンタ値は、シーケンサ制御データ保持部22から読み出されるシーケンサ制御データstep、emptyの合計値と等しくなったときに初期値1にリセットされる。例えば、シーケンサ制御データ保持部22から読み出されるシーケンサ制御データが、DFG群3からDFG群4に変わったとき、カウンタ値は1に設定されており、カウンタが8回インクリメントされて、カウンタ値が9(step+empty=6+3)になった次のクロックで、カウンタ値が初期値1にリセットされる。カウンタ値が初期値1になると、シーケンサ制御データ保持部22は、シーケンサ制御データ選択部28より供給される選択信号addrに基づいて、DFG群5またはDFG群6のシーケンサ制御データを、設定データ選択部24、シーケンサ制御部26、シーケンサ制御データ選択部28のそれぞれに読み出す。
シーケンサ制御部26は、設定データ選択部24でE_DFGのアドレスを生成するかどうかを判定する信号flag_emptyを生成する。カウンタ値>stepのときflag_emptyを1とし、それ以外のときはflag_emptyを0とする。flag_emptyは、DFG群のすべてのDFGが処理された後に時間調整用としてE_DFGを挿入させる必要がある場合を判定した結果であり、1のとき、設定データ選択部24はE_DFGのアドレスを生成する。例えば、DFG群4では、step=6であり、カウンタ値は1から9までインクリメントされることになるが、カウンタ値=7,8,9のときflag_emptyは1となり、それ以外のときはflag_emptyは0となる。
設定データ選択部24は、設定データ保持部14から読み出す設定データの読出アドレスCOMaddr2を生成する。flag_emptyが1のときは、COMaddr2が、E_DFGのアドレス(EMPTYDFG_ADDR)に設定され、flag_emptyが0のときは、COMaddr2が、(COMaddr1+カウンタ値−1)に設定される。このように、flag_emptyが0のときは、設定データ選択部24が、COMaddr1(群選択制御データ)およびカウンタ値(群内選択制御データ)をもとに、読出アドレスCOMaddr2を生成する。なお、EMPTYDFG_ADDRは0である(図5参照)。設定データ選択部24は、シーケンサ制御部26からカウンタ値を受け取り、(COMaddr1+カウンタ値−1)は、カウンタ値のインクリメントにあわせて1ずつ大きくなる。図7は、設定データ選択部24における読出アドレスの生成アルゴリズムを示す。
図5に関して説明したように、設定データ保持部14は、1つのDFG群内のDFGを、その処理順に合わせて連続したアドレスに格納している。そのため、設定データ選択部24は、1つのDFG群内の設定データのアドレスを、最初の設定データのアドレス(COMaddr1)から所定のタイミングで1ずつインクリメントしていくことで、そのDFG群内におけるDFGを順番にリコンフィギュラブル回路12に供給させることができる。例えば、DFG群4では、カウンタは9までインクリメントされる。カウンタ値=7,8,9のとき、flag_emptyは1となる。COMaddr1=26であるため、設定データ選択部24は、COMaddr2を、順に26、27、28、29、30、31、0、0、0と変化させて、設定データ保持部14に供給する。この順に、設定データ保持部14から設定データが読み出されることによって、リコンフィギュラブル回路12上に、最初の6クロックでDFG4−1、・・・、DFG4−6が生成され、最後の3クロックでE_DFGが生成されることになる。
シーケンサ制御部26は、リコンフィギュラブル回路12から分岐制御データcがシーケンサ制御データ選択部28に供給されるタイミングを示す信号flag_cと、シーケンサ制御データ選択部28でシーケンサ制御データ保持部22の次のDFG群のアドレスに変更するタイミングを示す信号change_addrを生成し、シーケンサ制御データ選択部28に供給する。flag_cは、設定データ選択部24で分岐制御データcを生成する設定データのアドレスが生成されてから、分岐制御データcがシーケンサ制御データ選択部28に供給されるまでの遅延時間等(DELAYTIME1)を加味して生成され、カウンタ値が(pos_c+DELAYTIME1)のときに、flag_cは0から1に設定される。change_addrは、シーケンサ制御データ選択部28においてシーケンサ制御データ保持部22に読出アドレスを入力する遅延時間等(DELAYTIME2)を加味して生成され、カウンタ値が(step+empty−DELAYTIME2)のときchange_addrは0から1に設定される。例えば、DELAYTIME1=2、DELAYTIME2=1とした場合、DFG群1では、pos_c=5であるため、カウンタ値=5+2=7のときflag_cが1となる。また、step=12、empty=0であるため、カウンタ値=12+0−1=11のときchange_addrが1となる。図8は、シーケンサ制御部26における動作アルゴリズムを示す。
シーケンサ制御データ選択部28は、シーケンサ制御データ保持部22から読み出すシーケンサ制御データの読出アドレスaddrを生成する。また、flag_c=1のときのシーケンサ制御データ保持部22のシーケンサ制御データaまたはbの値set_cと、現在のシーケンサ制御データ保持部22の読出アドレスaddrを保持している。リコンフィギュラブル回路12から分岐制御データcが供給されるタイミングとなったとき(flag_c=1)、シーケンサ制御データ選択部28は、分岐制御データcが0であれば、set_cにシーケンサ制御データbを、分岐制御データcが1であれば、set_cにシーケンサ制御データaを保持させておく。そして、読出アドレスaddrを変更するタイミングとなったき(change_addr=1)、シーケンサ制御データ選択部28は、pos_cが0以外の値であれば、addrに保持しているset_cを加える。一方、pos_cが0であれば、分岐制御データcの値に依存せずに次に読み出すDFG群が一意に決まっている場合であり、addrに、分岐制御データaを加える。pos_cが0の場合とは、図4および図6を参照して、DFG群2、DFG群5などであり、この場合には分岐制御データが供給されず、次に処理するDFG群が予め定められている。
change_addrが0のときは、DFG群が変更されないときであるため、シーケンサ制御データ選択部28は、addrの値をそのまま保持しておく。そして、ここで生成されたaddrをシーケンサ制御データ保持部22の読出アドレスとすることで、所期のシーケンサ制御データを読み出すことができる。例えば、DFG群1では、上記の例では、カウンタ値=7のときflag_cが1となり、このとき分岐制御データcが0であれば、set_c=b=6となる。そして、カウンタ値=11のときchange_addrが1となり、このとき、現在のaddrが0、pos_cが5(!=0)であるため、addrにset_c(=6)を加えることで、新たなaddr(=6)を設定する。したがって、次にシーケンサ制御データ保持部22から読み出すシーケンサ制御データは、シーケンサ制御データ保持部22のアドレス6に格納されたDFG群7のものとなる。change_addr=0のときは、addrは変更されないため、同じDFG群1のシーケンサ制御データが読み出される。図9は、シーケンサ制御データ選択部28における動作アルゴリズムを示す。
このように、上記のDFG群1の例のように、DFG群の前段の方のDFGで分岐制御データcが生成される場合、残りのDFGの設定データをリコンフィギュラブル回路12に供給している間に、次のDFG群を決定する信号を生成してset_cとして保持しておくことができるため、DFG群の変更時には選択による遅延が発生しない。したがって、DFG群内だけでなく、DFG群間でも切れ目なくDFGが供給でき、処理パフォーマンスが向上し、消費電力が削減される。また、シーケンサ制御データ保持部22の制御データをDFG単位でなく、DFG群単位で持たせることによりシーケンサ制御データ数を減らすことができるため、シーケンサ制御データ保持部22のメモリ容量が小さくなり、回路規模が削減される。
次に、このようなシーケンサ装置20を備えることによる利点を、図4を例に取り説明する。
例えば、DFG群4でif文による条件分岐により、DFG群5またはDFG群6のどちらかを処理する場合、シーケンサ装置20があれば、条件分岐の方向を示す分岐制御データcを受けて、DFG群5またはDFG群6のいずれか一方を処理すればよい。従来の処理装置のようにシーケンサ装置20が存在しない場合には、DFG群5とDFG群6の双方を処理し、その結果をif文の条件分岐の判定結果により選択する必要があり、処理時間が長くなっていた。本実施例の処理装置10は、シーケンサ装置20を備えることにより、処理速度が向上し、消費電力を削減できる。また、分岐処理において、if文とelse文の処理量が大きく異なる場合であっても、同じ大きさのDFGで処理量に応じたDFG数をもったDFG群を作成して、DFGを順次実行するため、動作しない回路部分を減らすことができ、処理パフォーマンスを向上できる。
また、例えば、DFG群3がfor文によるループ処理により、何度も呼び出される場合、本実施例の処理装置10は、シーケンサ装置20を備えることにより、for文のループ判定結果による条件分岐の方向を示す分岐制御データcを受けて、DFG群3のループ処理を継続するか、またはループ処理を抜けてDFG群4を処理することになる。このため、処理装置10では、ループ処理1回分のDFG群3の設定データのみを設定データ保持部14に持たせ、それをループ回数分呼び出すことによりループ処理を実現できる。一方、シーケンサ装置20が存在しない場合には、全ループ回数分の設定データを設定データ保持部14に持たせ、それを順次処理する必要があり、設定データの容量が大きくなっていた。本実施例の処理装置10は、シーケンサ装置20を備えることにより、設定データ保持部14の容量を小さくでき、回路規模を削減できる。さらに、ループ回数がループ内の演算結果によって決まるようなループ回数不定のループ処理は、シーケンサ装置20を備えなければ、事前に処理順序を定めることが非常に困難であるが、シーケンサ装置20があれば、ループ内の演算結果である分岐制御データcを用いて、ループ処理を続けて行うかどうかの判定をその都度行うことができ、ループ回数不定のループ処理の実現も容易に実現可能となる。
最後に、シーケンサ装置20を備えた回路と備えていない回路の実際の規模比較を行う。ここでは、MPEG-4のIDCT処理部のDFGを用いた場合を想定し、設定データ保持部14、シーケンサ制御データ保持部22は、ともに1ポートRAMとし、1bit=1.5gateとして換算している。シーケンサ装置20を備えていない回路では、設定データ保持部14のゲート数が28.5万gatesとなった。それに対し、シーケンサ装置20を備えた回路では、シーケンサ装置20のゲート数が0.5万gates、設定データ保持部14のゲート数が6.7万gates、シーケンサ制御データ保持部22のゲート数が0.03万gatesとなり、全体として7.2万gatesとなった。したがって、シーケンサ装置20を備えた回路の方が備えていない回路に比べて回路規模を0.25倍と削減することができた。特に、処理装置10が携帯型の端末装置として存在する場合、回路規模を削減できることは非常に重要であり、また、携帯型でない場合であっても、回路規模の削減は消費電力の削減にもつながり、有用性の高い処理装置10を実現することが可能である。
以上、本発明を実施例をもとに説明した。実施例は例示であり、それらの各構成要素や各処理プロセスの組み合わせにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。例えば、実施例では、分岐制御データcはリコンフィギュラブル回路12の出力として生成されることとしているが、分岐制御データcは、外部装置の状態により決定されてもよい。この場合、分岐制御データcは外部から供給される。
今回開示された実施例はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
10・・・処理装置、12・・・リコンフィギュラブル回路、14・・・設定データ保持部、20・・・シーケンサ装置、22・・・シーケンサ制御データ保持部、24・・・設定データ選択部、26・・・シーケンサ制御部、28・・・シーケンサ制御データ選択部、30・・・出力データ保持部、32・・・経路部。