(57)【特許請求の範囲】
【請求項１】
予め論理が固定された結線論理からなり、予め決められたプログラムカウンタの順番に従って所定の演算処理命令を制御信号として順次生成する制御回路を備えた制御器と、
前記制御器からの前記制御信号に基づいて機能ユニットにより前記演算処理命令に従った演算を実行するデータパスとからなるアクセラレータにおいて、
前記制御器は、
前記プログラムカウンタのうち所定のプログラムカウンタを追加プログラムカウンタに置き換え、該プログラムカウンタに対応付けられた前記演算処理命令の替わりに、前記追加プログラムカウンタに対応付けられた修正演算処理命令を制御信号として前記データパスに送出可能なパッチ回路を備え、
前記データパスは、前記パッチ回路からの制御信号を受け取ると、前記修正演算処理命令に従った演算を実行する
ことを特徴とするアクセラレータ。
【請求項２】
前記パッチ回路は、
前記プログラムカウンタに対応付けられた次に実行するプログラムカウンタに替えて前記追加プログラムカウンタを記憶可能なプログラムカウンタパッチ部と、
前記追加プログラムカウンタに対応付けられる前記修正演算処理命令を記憶可能な制御信号パッチ部とを備え、
前記プログラムカウンタパッチ部は、前記制御回路から次に実行するプログラムカウンタを順次受け取り、該プログラムカウンタが前記追加プログラムカウンタと置き換わるプログラムカウンタであるとき、該プログラムカウンタの替わりに前記追加プログラムカウンタを前記制御信号パッチ部に送出し、
前記制御信号パッチ部は、前記追加プログラムカウンタに対応付けられた前記修正演算処理命令を前記制御信号として前記データパスに送出する
ことを特徴とする請求項１記載のアクセラレータ。
【請求項３】
前記パッチ回路は、前記修正演算処理命令を記憶するメモリを備え、
前記プログラムカウンタ及び前記追加プログラムカウンタで定められた所定の順番でループ状に制御信号を所定回数繰り返し生成し、
前記メモリは、パッチメモリに接続されており、必要に応じて前記修正演算処理命令とは異なる他の修正演算処理命令を前記パッチメモリから読み出して、前記ループ状の処理過程で前記修正演算処理命令に替えて、前記他の修正演算処理命令を示す制御信号を生成する
ことを特徴とする請求項２記載のアクセラレータ。
【請求項４】
前記制御回路は、複数の異なる機能を実現する回路構成を備える
ことを特徴とする請求項１〜３のうちいずれか１項記載のアクセラレータ。
【請求項５】
前記データパスは、前記制御回路からの制御信号によって演算処理が実行可能な機能ユニットに加えて、前記制御器の機能修正により性能制約を満たすために必要になるであろう補助の機能ユニットが設けられている
ことを特徴とする請求項１〜４のうちいずれか１項記載のアクセラレータ。
【請求項６】
前記データパスには、
前記制御器からの制御信号によって実行される演算処理が仮想的に所定範囲でランダムに変更され、この変更された仮想演算処理を実行するのに必要な前記補助の機能ユニットが設けられている
ことを特徴とする請求項５項記載のアクセラレータ。
【請求項７】
前記データパスには、
前記演算処理の仮想的な変更が所定回数実行されて、各仮想演算処理を実行するのに必要となる前記補助の機能ユニットの全てが設けられている
ことを特徴とする請求項６記載のアクセラレータ。
【請求項８】
予め論理が固定された結線論理からなり、予め決められたプログラムカウンタの順番に従って所定の演算処理命令を制御信号として順次生成する制御回路を備えた制御器と、
前記制御器からの前記制御信号に基づいて機能ユニットにより前記演算処理命令に従った演算を実行するデータパスとからなるアクセラレータのデータ処理方法において、
前記制御器に設けられたパッチ回路によって、前記プログラムカウンタのうち所定のプログラムカウンタを追加プログラムカウンタに置き換える置き換えステップと、
前記パッチ回路によって、前記追加プログラムカウンタに置き換わる前記プログラムカウンタに対応付けられた演算処理命令の替わりに、前記追加プログラムカウンタに対応付けられた修正演算処理命令を制御信号として前記データパスに送出する送出ステップと、
前記データパスによって、前記修正演算処理命令に従った演算を実行する実行ステップと
を備えることを特徴とするデータ処理方法。
【請求項９】
前記置き換えステップは、
前記パッチ回路に設けられたプログラムカウンタパッチ部によって、前記制御回路から受け取った次に実行するプログラムカウンタが、前記追加プログラムカウンタと置き換わるプログラムカウンタであると判断すると、前記パッチ回路に設けられた制御信号パッチ部に、前記追加プログラムカウンタを該プログラムカウンタの替わりに送出し、
前記送出ステップは、
前記制御信号パッチ部によって、前記追加プログラムカウンタに対応付けられた前記修正演算処理命令をメモリから読み出して前記制御信号として前記データパッチに送出する
ことを特徴とする請求項８記載のデータ処理方法。
【請求項１０】
前記置き換えステップ、前記送出ステップ及び前記実行ステップをループ状に繰り返し、
必要に応じて前記修正演算処理命令とは異なる他の修正演算処理命令を、パッチメモリから読み出して前記メモリに記憶し、前記ループ状の処理過程で前記修正演算処理命令に替えて、前記他の修正演算処理命令を示す制御信号を生成する
ことを特徴とする請求項８又は９記載のデータ処理方法。
【請求項１１】
前記制御回路は、複数の異なる機能を実現する回路構成を備え、必要に応じて所定の機能を実現する
ことを特徴とする請求項８〜１０のうちいずれか１項記載のデータ処理方法。
【請求項１２】
前記制御回路からの制御信号によって演算処理が実行可能な機能ユニットに加えて、前記制御器の機能修正により性能制約を満たすために必要となる補助の機能ユニットによって、前記データパスによる演算処理が実行される
ことを特徴とする請求項８〜１１のうちいずれか１項記載のデータ処理方法。
【請求項１３】
前記制御器からの制御信号によって実行される演算処理が仮想的に所定範囲でランダムに変更され、この変更された仮想演算処理を実行するために設けられた前記補助の機能ユニットにより、前記修正演算処理命令に従った演算を実行する
ことを特徴とする請求項１２記載のデータ処理方法。
【請求項１４】
前記演算処理の仮想的な変更が所定回数実行されて、各仮想演算処理を実行するために設けられた前記補助の機能ユニットにより、前記修正演算処理命令に従った演算を実行する
ことを特徴とする請求項１３記載のデータ処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アクセラレータ及びデータ処理方法に関し、例えば製造後に機能修正が必要となる可能性があるアクセラレータに適用して好適なものである。
【背景技術】
【０００２】
近年、システムオンチップ（SoC：System on a Chip）開発では、開発コストの増大と、開発期間の短縮化とに伴い、高位合成を利用してアクセラレータを設計する手法（以下、これを高位合成手法と呼ぶ）の導入が進んでいる（例えば、特許文献１参照）。なお、ここで、高位合成とは、ハードウェアの処理動作が記述された動作記述からＲＴＬ（レジスタ・トランスファ・レベル）の論理回路を生成するという技術である。
【０００３】
高位合成手法を基に製造されたアクセラレータは、特定の機能向けに専用化された回路からなり、製造後に機能修正が可能な高いプログラマビリティを持つ汎用プロセッサに比べて、余分な回路構成を有しておらず、小型で処理速度が速く、かつ消費電力を低減できる。このため固定機能のアクセラレータは、設計する際に高位合成手法によって高いコストが掛かるものの、高性能と高効率の両立が求められる様々な分野において個別に設計され利用されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平５−１０１１４１号
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ところで、高位合成手法によって生成されたアクセラレータでも、当該アクセラレータの仕様変更や設計誤りにより製造後に回路構成を修正する必要が生じる場合もある。この場合には、機能修正したアクセラレータを設計し直すために高位合成手法によってアクセラレータを新たに設計し、再び製造する必要があることから、高いコストが再び発生してしまうという問題があった。
【０００６】
その一方で、プログラマビリティを持つ汎用プロセッサは、高位合成手法を用いることなく、プログラムを変更するだけで製造後に機能修正が簡単に行え、低コストで機能修正が行えるものの、制御回路全体がメモリで構成されていることから非常に大きなメモリが必要となり、結線論理で制御回路が構成されているアクセラレータに比べて大型化し、かつ余分なメモリ等によって処理速度が遅くなり、電力効率も非常に低くなる。このように汎用プロセッサでは、製造後の機能修正に掛かるコストを低減できるものの、固定機能のアクセラレータに比べて性能が低下してしまうという問題がある。
【０００７】
そこで、本発明は以上の点を考慮してなされたもので、小型化を図るとともに、処理速度及び電力効率の向上を図りつつ、製造後の機能修正に掛かるコストを格段的に低減し得るアクセラレータ及びデータ処理方法を提案することを目的とする。
【課題を解決するための手段】
【０００８】
かかる課題を解決するため本発明の請求項１は、予め論理が固定された結線論理からなり、予め決められたプログラムカウンタの順番に従って所定の演算処理命令を制御信号として順次生成する制御回路を備えた制御器と、前記制御器からの前記制御信号に基づいて機能ユニットにより前記演算処理命令に従った演算を実行するデータパスとからなるアクセラレータにおいて、前記制御器は、前記プログラムカウンタのうち所定のプログラムカウンタを追加プログラムカウンタに置き換え、該プログラムカウンタに対応付けられた前記演算処理命令の替わりに、前記追加プログラムカウンタに対応付けられた修正演算処理命令を制御信号として前記データパスに送出可能なパッチ回路を備え、前記データパスは、前記パッチ回路からの制御信号を受け取ると、前記修正演算処理命令に従った演算を実行することを特徴とするものである。
【０００９】
また、本発明の請求項２は、前記パッチ回路は、前記プログラムカウンタに対応付けられた次に実行するプログラムカウンタに替えて前記追加プログラムカウンタを記憶可能なプログラムカウンタパッチ部と、前記追加プログラムカウンタに対応付けられる前記修正演算処理命令を記憶可能な制御信号パッチ部とを備え、前記プログラムカウンタパッチ部は、前記制御回路から次に実行するプログラムカウンタを順次受け取り、該プログラムカウンタが前記追加プログラムカウンタと置き換わるプログラムカウンタであるとき、該プログラムカウンタの替わりに前記追加プログラムカウンタを前記制御信号パッチ部に送出し、前記制御信号パッチ部は、前記追加プログラムカウンタに対応付けられた前記修正演算処理命令を前記制御信号として前記データパスに送出することを特徴とするものである。
【００１０】
また、本発明の請求項３は、前記パッチ回路は、前記修正演算処理命令を記憶するメモリを備え、前記プログラムカウンタ及び前記追加プログラムカウンタで定められた所定の順番でループ状に制御信号を所定回数繰り返し生成し、前記メモリは、パッチメモリに接続されており、必要に応じて前記修正演算処理命令とは異なる他の修正演算処理命令を前記パッチメモリから読み出して、前記ループ状の処理過程で前記修正演算処理命令に替えて、前記他の修正演算処理命令を示す制御信号を生成することを特徴とするものである。
【００１１】
また、本発明の請求項４は、前記制御回路は、複数の異なる機能を実現する回路構成を備えることを特徴とするものである。
【００１２】
また、本発明の請求項５は、前記データパスは、前記制御回路からの制御信号によって演算処理が実行可能な機能ユニットに加えて、前記制御器の機能修正により性能制約を満たすために必要になるであろう補助の機能ユニットが設けられていることを特徴とするものである。
【００１３】
また、本発明の請求項６は、前記データパスには、前記制御器からの制御信号によって実行される演算処理が仮想的に所定範囲でランダムに変更され、この変更された仮想演算処理を実行するのに必要な前記補助の機能ユニットが設けられていることを特徴とするものである。
【００１４】
また、本発明の請求項７は、前記データパスには、前記演算処理の仮想的な変更が所定回数実行されて、各仮想演算処理を実行するのに必要となる前記補助の機能ユニットの全てが設けられていることを特徴とするものである。
【００１５】
また、本発明の請求項８は、予め論理が固定された結線論理からなり、予め決められたプログラムカウンタの順番に従って所定の演算処理命令を制御信号として順次生成する制御回路を備えた制御器と、前記制御器からの前記制御信号に基づいて機能ユニットにより前記演算処理命令に従った演算を実行するデータパスとからなるアクセラレータのデータ処理方法において、前記制御器に設けられたパッチ回路によって、前記プログラムカウンタのうち所定のプログラムカウンタを追加プログラムカウンタに置き換える置き換えステップと、前記パッチ回路によって、前記追加プログラムカウンタに置き換わる前記プログラムカウンタに対応付けられた演算処理命令の替わりに、前記追加プログラムカウンタに対応付けられた修正演算処理命令を制御信号として前記データパスに送出する送出ステップと、前記データパスによって、前記修正演算処理命令に従った演算を実行する実行ステップとを備えることを特徴とするものである。
【００１６】
また、本発明の請求項９は、前記置き換えステップは、前記パッチ回路に設けられたプログラムカウンタパッチ部によって、前記制御回路から受け取った次に実行するプログラムカウンタが、前記追加プログラムカウンタと置き換わるプログラムカウンタであると判断すると、前記パッチ回路に設けられた制御信号パッチ部に、前記追加プログラムカウンタを該プログラムカウンタの替わりに送出し、前記送出ステップは、前記制御信号パッチ部によって、前記追加プログラムカウンタに対応付けられた前記修正演算処理命令をメモリから読み出して前記制御信号として前記データパッチに送出することを特徴とするものである。
【００１７】
また、本発明の請求項１０は、前記置き換えステップ、前記送出ステップ及び前記実行ステップをループ状に繰り返し、必要に応じて前記修正演算処理命令とは異なる他の修正演算処理命令を、パッチメモリから読み出して前記メモリに記憶し、前記ループ状の処理過程で前記修正演算処理命令に替えて、前記他の修正演算処理命令を示す制御信号を生成することを特徴とするものである。
【００１８】
また、本発明の請求項１１は、前記制御回路は、複数の異なる機能を実現する回路構成を備え、必要に応じて所定の機能を実現することを特徴とするものである。
【００１９】
また、本発明の請求項１２は、前記制御回路からの制御信号によって演算処理が実行可能な機能ユニットに加えて、前記制御器の機能修正により性能制約を満たすために必要となる補助の機能ユニットによって、前記データパスによる演算処理が実行されることを特徴とするものである。
【００２０】
また、本発明の請求項１３は、前記制御器からの制御信号によって実行される演算処理が仮想的に所定範囲でランダムに変更され、この変更された仮想演算処理を実行するために設けられた前記補助の機能ユニットにより、前記修正演算処理命令に従った演算を実行することを特徴とするものである。
【００２１】
また、本発明の請求項１４は、前記演算処理の仮想的な変更が所定回数実行されて、各仮想演算処理を実行するために設けられた前記補助の機能ユニットにより、前記修正演算処理命令に従った演算を実行することを特徴とするものである。
【発明の効果】
【００２２】
本発明の請求項１によれば、制御回路を結線論理で構成することで、小型化を図り、かつ処理速度及び電力効率の向上を図ることができるとともに、仮に仕様変更や設計誤りにより製造後に機能修正する必要が生じた場合でも、高位合成により制御回路自体の再設計を行わずに、パッチ回路で機能修正が行えるので、その分だけコスト低減を図ることができる。かくして、小型化を図るとともに、処理速度及び電力効率の向上を図りつつ、製造後の機能修正に掛かるコストを格段的に低減し得るアクセラレータを提案できる。
【００２３】
本発明の請求項８によれば、制御回路を結線論理で構成することで、小型化を図り、かつ処理速度及び電力効率の向上を図ることができるとともに、高位合成により制御回路自体の再設計を行わずに、パッチ回路により機能修正が行えるので、その分だけコスト低減を図ることができる。かくして、小型化を図るとともに、処理速度及び電力効率の向上を図りつつ、製造後の機能修正に掛かるコストを格段的に低減し得るデータ処理方法を提案できる。
【図面の簡単な説明】
【００２４】
【図１】アクセラレータの回路構成を示すブロック図である。
【図２】融合結線論理制御回路の回路構成を示すブロック図である。
【図３】初期設計されたデータフローグラフ及びそのスケジュールを示す概略図である。
【図４】機能修正されたデータフローグラフ及びそのスケジュールを示す概略図である。
【図５】パッチ回路の回路構成を示すブロック図である。
【図６】データパス合成手法の概要の説明に供する概略図である。
【図７】データフローグラフから修正データフローグラフを生成する説明に供する概略図である。
【図８】スケジューリングの手続きの説明に供する概略図である。
【図９】）バインディングの手続きの説明に供する概略図である。
【図１０】データフローグラフの一例を示す概略図である。
【図１１】スケジューリング・バインディング結果（１）を示す概略図である。
【図１２】スケジューリング・バインディング結果（２）を示す概略図である。
【図１３】従来のアクセラレータの機能修正と、本発明のアクセラレータの機能修正とを比べた概略図である。
【図１４】アクセラレータの製造から機能修正までの説明に供する概略図である。
【図１５】従来の集積回路と、本発明のアクセラレータを用いた集積回路の全体の面積を比較した概略図である。
【図１６】本発明のアクセラレータと、従来の固定機能アクセラレータと、一般的な汎用プロセッサとについて回路構成の面積を比較した検証結果を示すグラフである。
【図１７】本発明のアクセラレータと、従来の固定機能アクセラレータと、一般的な汎用プロセッサとについて消費電力について比較した検証結果を示す概略図である。
【図１８】製造後の機能修正を考慮して生成されたデータパスと、従来の固定機能アクセラレータに用いられるデータパスとにおける性能歩留まりの検証結果を示すグラフである。
【図１９】本発明のアクセラレータを用いた集積回路の回路構成を示すブロック図である。
【図２０】パッチメモリとパッチ回路との説明に供するブロック図である。
【図２１】）パッチメモリに記憶されたパッチ1及びパッチ2を用いた演算処理の一例を示す概略図である。
【発明を実施するための形態】
【００２５】
以下図面に基づいて本発明の実施の形態を詳述する。
【００２６】
（１）アクセラレータの全体構成
図１において１はアクセラレータを示し、制御器２とデータパス３とから構成されており、結線論理で構成された融合結線論理制御回路４を制御器２に有し、この融合結線論理制御回路４からの制御信号に基づいてデータパス３において所定の演算処理を実行し、予め定められた所定の固定機能だけを実現し得る。かかる構成に加えて、このアクセラレータは、制御器２にパッチ回路５を備えており、結線論理からなり製造後に機能修正を行えなかった融合結線論理制御回路４でも、当該パッチ回路５によって製造後に小規模な機能修正を行え得るようになされている。なお、制御器２は、マルチプレクサM15を介して疎結合配線ネットワークから各種データを受け取り得る。
【００２７】
かかる構成に加えてデータパス３は、後述するデータパス合成手法を基に、製造後における仕様変更や設計誤りにより起こり得るであろう潜在的な機能修正を予め想定して、例えば比較器10、ALU（Arithmetic Logic Unit）111、ALU212、乗算器13、及びバレルシフタ14（以下、単にこれらをそれぞれ機能ユニットとも呼ぶ）が設けられている。これによりアクセラレータ１では、製造後に制御器２について小規模な機能修正を行っても、当該機能修正により性能制約を満たすために必要になるであろう機能ユニットが、データパス合成手法により予め選定され設けられていることから、機能修正後の性能歩留まりを最大化し得る。
【００２８】
なお、ここで、動画再生処理や音声処理等のある特定の機能だけを実現する固定機能のアクセラレータ１では、性能制約（例えば、何秒以内に所定の処理を終了しなければいけない等のように実行時間の上限等の所定の制約）を持っており、性能歩留まりとは、予め決められた所定の性能制約を満たす確率をいう。
【００２９】
実際上、データパス３は、機能ユニット（比較器10、ALU111、ALU212、乗算器13、及びバレルシフタ14）の他に、メモリ素子として、例えばレジスタファイル17、定数生成器18、及びローカルストア19が設けられており、これらが疎結合配線ネットワーク20によって互いに接続された構成を有する。ここで、各機能ユニットは、それぞれ予め決められた１種類以上の演算を実行し得るように構成されており、制御器２から受け取った制御信号に応じてレジスタファイル17から読み出したデータを基に各演算を実行し得るようになされている。
【００３０】
なお、このデータパス３では、レジスタファイル17に設けられた書き込みポートRFI1及び読み込みポートRFO1,RFO2と、定数生成器18に設けられた読み込みポートCGO1,CGO2と、ローカルストア19に設けられた書き込みポートLSI1及び読み込みポートLSO1とをそれぞれ機能ユニットとみなすことで、データパス合成、及び製造後の機能修正を行う際に、レジスタファイル17、定数生成器18及びローカルストア19へのアクセスを算術演算と同様に扱うことができる。
【００３１】
実際上、比較器10、ALU111、ALU212、乗算器13及びバレルシフタ14は、各入力がそれぞれマルチプレクサM1〜M10を介して疎結合配線ネットワーク20に接続され、各出力がそれぞれ疎結合配線ネットワーク20に直接接続された構成を有し、マルチプレクサM1〜M10からの制御信号によってそれぞれ入力信号を選択する。
【００３２】
レジスタファイル17は、複数のレジスタ（図示せず）を備え、入力が書き込みポートRFI1及びマルチプレクサM11を介して疎結合配線ネットワーク20に接続されているとともに、出力が読み込みポートRFO1,RFO2を介して疎結合配線ネットワーク20に接続されている。レジストファイル17は、各レジスタにそれぞれ局所変数値を格納し得るように構成されており、書き込みポートRFI1の制御信号によって、複数のレジスタのうちいずれのレジスタにアクセスするかが決定され得る。
【００３３】
定数生成器18は、予め決められた所定の定数を出力し得るようになされており、レジスタファイル17同様、読み込みポートCGO1,CGO2への制御信号に基づいて定数を生成し得る。ローカルストア19は、主にデータの配列やグローバル変数値を格納するRAM（Random Access Memory）であり、入力が書き込みポートLSI1及びマルチプレクサM12,M13を介して疎結合配線ネットワーク20に接続されているとともに、出力が読み込みポートLSO1を介して疎結合配線ネットワークに接続されている。
【００３４】
なお、読み込みポートLSO1は、マルチプレクサM14にも接続されており、疎結合配線ネットワーク20から受け取ったデータをローカルストア19へ受け渡す。また、ローカルストア19は、外部と各種データの授受を実行し得るようになされている。このようなローカルストア19は、書き込みポートLSI1及び読み込みポートLSO1が他のメモリ素子とは異なり、アドレスとデータの２つの信号線を有し、当該書き込みポートLSI1に書き込みイネーブルの制御入力を備えている。因みに、バレルシフタ14は、演算処理の際に必要に応じてデータを所定ビットシフトさせるものであり、比較器10は、必要に応じて２つの演算結果等を比較して比較結果を得るものであり、それぞれ必要に応じて演算処理に用いられる。
【００３５】
疎結合配線ネットワーク20に接続された制御器２は、結線論理で実現された回路構成からなる融合結線論理制御回路４や、パッチ回路５からの制御信号により比較器10、ALU111、ALU212、乗算器13、バレルシフタ14、レジスタファイル17、定数生成器18及びローカルストア19等の各種回路を統括的に制御し、所定の演算処理を実行し得るようになされている。
【００３６】
図２に示すように、この実施の形態の場合、融合結線論理制御回路４は、IDCT（Inverse Discrete Cosine Transform）制御回路25と、FIR（Finite Impulse Response）制御回路26と、CRC（Cyclic Redundancy Check）制御回路27とを備え、これらIDCT制御回路25とFIR制御回路26とCRC制御回路27とがマルチプレクサM16に接続された構成を有する。融合結線論理制御回路４は、マルチプレクサM16への選択信号が変更されることにより、IDCT制御回路25、FIR制御回路26及びCRC制御回路27のうちいずれか１つが選択され、選択されたIDCT制御回路25、FIR制御回路26又はCRC制御回路27により生成された制御信号をデータパス３に送出し、当該データパス３に所定の演算処理を実行させ得る。
【００３７】
このように融合結線論理制御回路４では、製造後にIDCT制御回路25、FIR制御回路26及びCRC制御回路27を適宜選択し得ることから、例えば製造後の用途の変更に応じてIDCT処理、FIR処理又はCRC処理のいずれかの処理を実行する回路構成へと機能変更し得るようになされている。ここで、IDCT制御回路25、FIR制御回路26及びCRC制御回路27は、それぞれ初期設計仕様を基に、高位合成手法によって設計された固定機能を実現する結線論理制御回路であり、結線論理だけで実現されメモリ等の余分な回路構成を有していない分だけ小型化が図られ、かつ処理速度及び電力効率の向上も図られている。
【００３８】
図３（Ａ）は、例えばIDCT制御回路25に対して初期設計されたデータフローグラフF1の一例を示す。このようなデータフローグラフF1は、所定データを演算ノードN1で乗算した後その結果を演算ノードN2で他のデータに加算し、次いでこの加算結果を演算ノードN3でさらに他のデータに加算する一連の演算処理が実行され得る。また、これとは別にこのデータフローグラフF1では、所定データを乗算した結果を演算ノードN4で他のデータに減算し、次いでこの減算結果を演算ノードN5でさらに他のデータに乗算する一連の演算処理が実行され得る。このような初期設計のデータフローグラフF1は、図３（Ｂ）に示すようなスケジュール100として表すことができ、このスケジュール100に従ってIDCT制御回路25で生成された制御信号に基づいてALU111、ALU212及び乗算器13（図３（Ｂ）中「MUL1」と表記）によりデータフローグラフF1の一連の演算処理が実行され得る。
【００３９】
スケジュール100は、IDCT制御回路25において生成される制御信号の内容が結線論理部分に示されており、当該結線論理部分にプログラムカウンタ１〜３が割り当てられ（図３（Ｂ）中の「PC」欄）、これらプログラムカウンタ１〜３にそれぞれ次に実行するプログラムカウンタ（以下、次カウンタと呼ぶ）が設定されている（図３（Ｂ）中の「次PC」欄）。実際上、このスケジュール100では、乗算処理を実行させる演算処理命令たる状態cs1がプログラムカウンタ１に設定され、加算処理及び減算処理を実行させる演算処理命令たる状態cs2がプログラムカウンタ２に設定され、加算処理及び乗算処理を実行させる演算処理命令たる状態cs3がプログラムカウンタ３に設定されている。
【００４０】
また、このスケジュール100では、例えばプログラムカウンタ１に対し次カウンタとしてプログラムカウンタ２が示され、プログラムカウンタ２に対し次カウンタとしてプログラムカウンタ３が示され、プログラムカウンタ３に対し次カウンタとしてプログラムカウンタ１が示されており、次カウンタに従った状態遷移としてプログラムカウンタ１、プログラムカウンタ２、プログラムカウンタ３、プログラムカウンタ１の順で演算処理が繰り返される。
【００４１】
このようなスケジュール100を実行する場合、図２に示したように、融合結線論理制御回路４では、所定の選択信号がマルチプレクサM16（図２）に送出されることにより、当該スケジュール100を実行するIDCT制御回路25が選択され、次カウンタに従って、プログラムカウンタ１の内容を示す制御信号、プログラムカウンタ２の内容を示す制御信号、プログラムカウンタ３の内容を示す制御信号の順にそれぞれIDCT制御回路25から制御信号がデータパス３に送出され得る。
【００４２】
ローカルストア19は、疎結合配線ネットワーク20、マルチプレクサM12,M13及び書き込みポートLSI1を順次介して、IDCT制御回路25からの制御信号を受け取ると、制御信号に基づいて外部のメモリから所定のデータを受け取り、読み込みポートLSO1、疎結合配線ネットワーク20、マルチプレクサM11及び書き込みポートRFI1を順次介してレジスタファイル17に当該データを受け渡す。
【００４３】
レジスタファイル17は、このデータをいずれかのレジスタに書き込んだ後、プログラムカウンタ１の内容を示した制御信号に基づき状態cs1に従って、当該データを読み込みポートRFO1を介して乗算器13に送出する。乗算器13は、レジスタファイル17からのデータや他のデータをマルチプレクサM7,M8を介して受け取ると、当該データを基に乗算処理を実行し、その結果得られた乗算結果をレジスタファイル17に送出する。レジスタファイル17は、マルチプレクサM11及び書き込みポートRFI1を介して乗算結果を受け取り、この乗算結果を所定のレジスタに書き込む。
【００４４】
次いで、データパス３は、次カウンタに従ってプログラムカウンタ２の内容を示す制御信号をIDCT制御回路25から受け取り、当該制御信号に従ってレジスタファイル17から乗算結果を読み出し、これを読み込みポートRFO1を介してALU111及びALU212にそれぞれ送出させる。これにより、ALU111は、マルチプレクサM3,M4を介して乗算結果や他のデータを受け取り、プログラムカウンタ２の状態cs2に従って、当該乗算結果を基に加算処理を実行し、その結果得られた加算結果をレジスタファイル17に送出する。
【００４５】
また、これと同時にALU212は、マルチプレクサM5,M6を介して乗算結果や他のデータを受け取り、同じくプログラムカウンタ２の状態cs2に従って、当該乗算結果を基に減算処理を実行し、その結果得られた減算結果をレジスタファイル17に送出する。レジスタファイル17は、ALU111からの加算結果と、ALU212からの減算結果とをそれぞれマルチプレクサM11及び書き込みポートRFI1を順次介して受け取り、所定のレジスタに書き込む。
【００４６】
次いで、データパス３は、次カウンタに従ってプログラムカウンタ３の内容を示す制御信号をIDCT制御回路25から受け取り、当該制御信号に従ってレジスタファイル17から読み込みポートRFO1を介して加算結果を読み出し、これをALU111に送出するとともに、同じくレジスタファイル17から読み込みポートRFO2を介して減算結果を読み出し、これを乗算器13に送出する。
【００４７】
これにより、ALU111は、マルチプレクサM3,M4を介して加算結果や他のデータを受け取り、プログラムカウンタ３に示された状態cs3に従って、加算処理を実行し、その結果得られた新たな加算結果をレジスタファイル17に送出する。これと同時に乗算器13は、マルチプレクサM7,M8を介して減算結果や他のデータを受け取り、同じくプログラムカウンタ３に示された状態cs3に従って乗算処理を実行し、その結果得られた乗算結果をレジスタファイル17に送出する。レジスタファイル17は、ALU111で得られた新たな加算結果と、乗算器13で得られた乗算結果とをそれぞれマルチプレクサM11及び書き込みポートRFI1を介して受け取り、それぞれ所定のレジスタに書き込む。
【００４８】
次いで、レジスタファイル17は、プログラムカウンタ３の次カウンタに従ってプログラムカウンタ１の内容を示す制御信号を再び受け取り、当該制御信号に基づき状態cs1に従って、例えばローカルストア19を介して外部から新たなデータを受け取り、所定のレジスタに書き込んだ後、当該データを乗算器13に送出し、上述した一連の演算処理を再び実行する。このようにしてアクセラレータ１は、IDCT制御回路25において生成された制御信号をデータパス３に順次送出し、図３（Ｂ）に示すスケジュール100に従った一連の演算処理を実行し得るようになされている。
【００４９】
因みに、上述した実施の形態においては、結線論理で構成されているIDCT制御回路25からの制御信号に基づいて、スケジュール100に従った演算処理をデータパス３で実行させる場合について説明したが、本発明では、結線論理で構成されているFIR制御回路26やCRC制御回路27についても同様に、これらFIR制御回路26やCRC制御回路27からの制御信号に基づいて、それぞれのスケジュールに従った一連の演算処理をデータパス３で実行させることになる。
【００５０】
また、かかる構成に加えて、このアクセラレータ１では、融合結線論理制御回路４におけるIDCT制御回路25、FIR制御回路26及びCRC制御回路27が固定機能を実現すべく結線論理で構成されているものの、製造後においても後述するパッチ回路５によって僅かに機能修正し得るようになされている。次に、パッチ回路５による製造後の機能修正について以下説明する。
【００５１】
（２）製造後におけるアクセラレータの機能修正の概要
ここでは、一例として、図３（Ａ）に示した初期設計のデータフローグラフF1について、減算処理を行う演算ノードN4を、図４（Ａ）に示すように、乗算処理を行う演算ノードN6に変更したデータフローグラフF2に機能修正する場合について説明する。このような機能修正後のデータフローグラフF2は、図４（Ｂ）に示すようなスケジュール200として表すことができ、このスケジュール200の結果に従って融合結線論理制御回路４及びパッチ回路５で生成された制御信号に基づいて、ALU111、ALU212及び乗算器13等によりデータフローグラフF2の一連の演算処理が実行され得る。
【００５２】
この場合、機能修正後のスケジュール200には、パッチ回路５で生成される制御信号の内容がパッチ部分に示されており、当該パッチ部分に追加プログラムカウンタ４及び５が割り当てられ（図３（Ｂ）中の「PC」欄）、加算処理及び乗算処理を実行させる修正演算処理命令たる状態cs4が、追加プログラムカウンタ４にパッチとして設定されている。また、このスケジュール200では、プログラムカウンタ１に次カウンタとして設定されていたプログラムカウンタ２が、追加プログラムカウンタ４に変更され、当該追加プログラムカウンタ４に次カウンタとしてプログラムカウンタ３が設定されており、次カウンタに従った状態遷移としてプログラムカウンタ１、追加プログラムカウンタ４、プログラムカウンタ３、プログラムカウンタ１の順で演算処理が繰り返される。
【００５３】
すなわち、機能修正後のスケジュール200では、プログラムカウンタ１の次カウンタが追加プログラムカウンタ４に修正されていることから、プログラムカウンタ１に示された状態cs1が実行された後、プログラムカウンタ２に移行することなく新たに設定された追加プログラムカウンタ４に移行し、追加プログラムカウンタ４に設定された状態cs4が実行され得る。また、スケジュール200では、追加プログラムカウンタ４の次カウンタに従って、機能修正前と同様にプログラムカウンタ３に移行して状態cs3が実行された後、当該プログラムカウンタ３の次カウンタに従ってプログラムカウンタ１に再び戻り、上述した機能修正された一連の演算処理を繰り返す。
【００５４】
このようにして機能修正後のスケジュール200では、乗算処理を実行するプログラムカウンタ１の次に、加算処理及び乗算処理を実行する状態cs4の追加プログラムカウンタ４に移行させることができ、アクセラレータ１を機能修正し得るようになされている。
【００５５】
ここで、上述した機能修正を実行し得るパッチ回路５は、図５に示すように、プログラムカウンタパッチ部30と、制御信号パッチ部31とから構成されており、プログラムカウンタパッチ部30によって、例えばプログラムカウンタ１の次に実行されるはずのプログラムカウンタ２を、新たに追加プログラムカウンタ４へ修正し得るようになされている。
【００５６】
この場合、プログラムカウンタパッチ部30は、修正するプログラムカウンタの数（ここでは２つ）に合わせて第１修正元状態レジスタ32aと、第２修正元状態レジスタ32bとが設けられており、当該第１修正元状態レジスタ32aに対応付けて第１修正後状態レジスタ33aが設けられているとともに、当該第２修正元状態レジスタ32bに対応付けて第２修正後状態レジスタ33bが設けられている。
【００５７】
因みに、上述した実施の形態においては、第１修正元状態レジスタ32aと、第２修正元状態レジスタ32bとを２つ設けるようにした場合について述べたが、本発明はこれに限らず、修正するプログラムカウンタの数に合わせて、さらに第３修正元状態レジスタや、第４修正元状態レジスタ等、複数の修正元状態レジスタを設けるようにしてもよい。
【００５８】
ここで、図３（Ｂ）に示したスケジュール100を、図４（Ｂ）に示したスケジュール200に機能修正する場合には、第１修正元状態レジスタ32a及び第２修正元状態レジスタ32bのうち、第１修正元状態レジスタ32aにだけプログラムカウンタ２が記憶される。また、これに伴い、この第１修正元状態レジスタ32aに対応付けられた第１修正後状態レジスタ33aには、追加プログラムカウンタ４が記憶される。
【００５９】
実際上、プログラムカウンタパッチ部30は、状態レジスタ35にプログラムカウンタ１が与えられると、これをカウンタデータとして等価判定部36a,36b及びマルチプレクサM17にそれぞれ送出し得る。等価判定部36a,36bは、それぞれ対応する第１修正元状態レジスタ32a又は第２修正元状態レジスタ32bに、カウンタデータと同じプログラムカウンタ１が記憶されているか否かを判断し得るようになされている。この実施の形態の場合、等価判定部36a,36bは、それぞれ対応する第１修正元状態レジスタ32a又は第２修正元状態レジスタ32bに、カウンタデータと同じプログラムカウンタ１が記憶されていないことから、このことを示すカウンタ不一致信号を生成し、これをマルチプレクサM17へ送出する。
【００６０】
これによりマルチプレクサM17は、状態レジスタ35から受け取ったプログラムカウンタ１を示すカウンタデータをそのまま融合結線論理制御回路４及び制御信号パッチ部31へそれぞれ送出する。ここで、制御信号パッチ部31は、大小判定部38と、制御信号メモリ40とを備えており、プログラムカウンタパッチ部30から受け取ったカウンタデータを大小判定部39及び制御信号メモリ40により受け取る。
【００６１】
ここで、大小判定部39は、結線論理部分となるプログラムカウンタの最大値ＳF（例えば、図３（Ｂ）ではプログラムカウンタ１〜３の最大の値を示す最大値「３」）が設定されており、プログラムカウンタパッチ部30から受け取ったカウンタデータの値と、プログラムカウンタの最大値ＳFとの大小関係を判定し得るようになされている。
【００６２】
そして、大小判定部39は、プログラムカウンタパッチ部30から受け取ったカウンタデータが、最大値ＳF以内のとき、融合結線論理制御回路４にて生成された制御信号をマルチプレクサM18を介してデータパス３に送出させ得る。一方、大小判定部39は、プログラムカウンタパッチ部30から受け取ったカウンタデータが、最大値ＳFを超えているとき、融合結線論理制御回路４にて生成される制御信号に替えて、制御信号メモリ40にて生成された制御信号をマルチプレクサM18を介してデータパス３に送出させ得るようになされている。
【００６３】
例えば融合結線論理制御回路４において選択信号によりIDCT制御回路25が選択されている場合、大小判定部39は、プログラムカウンタ１を示すカウンタデータを受け取ると、カウンタデータの値（プログラムカウンタ１）が、最大値ＳF「３」以内であることから、IDCT制御回路25から送出されたプログラムカウンタ１の内容を示す制御信号を、マルチプレクサM18を介してデータパス３と状態レジスタ35へそれぞれ送出させる。これにより、データパス３は、制御信号に基づいてプログラムカウンタ１の状態cs1に従った演算処理を実行し得る。
【００６４】
一方、状態レジスト35は、プログラムカウンタ１に設定された次カウンタであるプログラムカウンタ２を、カウンタデータとして制御信号から抽出し、これを等価判定部36a,36b及びマルチプレクサM17に送出する。この場合、第１修正元状態レジスタ32aに接続された等価判定部36aは、当該第１修正元状態レジスタ32aに記憶されたプログラムカウンタ２と、状態レジスタ35から受け取ったカウンタデータとが一致していると判定し、その判定結果をカウンタ一致信号としてマルチプレクサM17に送出する。
【００６５】
これによりマルチプレクサM17は、第１修正元状態レジスタ32aに対応付けられている第１修正後状態レジスタ33aに記憶された追加プログラムカウンタ４を変更カウンタデータとして選択し、状態レジスト35から受け取ったカウンタデータに換えて変更カウンタデータを大小判定部39、制御信号パッチ部31及び融合結線論理制御回路４に送出する。
【００６６】
ここで、制御信号パッチ部31の制御信号メモリ40には、プログラムカウンタ２を設計修正した内容である加算処理及び乗算処理を実行させる状態cs4と、次カウンタとして設定されたプログラムカウンタ３とが追加プログラムカウンタ４にパッチとして記憶されている。なお、制御信号メモリ40に記憶される状態cs4等の機能修正用のデータは、製造後にアクセラレータ１に生じた機能修正の内容に応じて、後述する「（３）整数線形計画法に基づくパッチコンパイル手法」に従って他のコンピュータで生成され、制御信号メモリ40の追加プログラムカウンタ４に記憶され得る。
【００６７】
大小判定部39は、追加プログラムカウンタ４を示す変更カウンタデータをプログラムカウンタパッチ部30から受け取ると、変更カウンタデータの値（追加プログラムカウンタ４）が、最大値ＳF「３」を超えていることから、融合結線論理制御回路４からの制御信号に替えて、制御信号メモリ40から読み出された追加プログラムカウンタ４の内容を、制御信号としてマルチプレクサM18を介しデータパス３及び状態レジスタ35へそれぞれ送出させる。
【００６８】
これによりデータパス３は、この制御信号に基づいて追加プログラムカウンタ４に設定された状態cs4に従った演算処理を実行し得る。このようにして、パッチ回路５は、プログラムカウンタ２を無効化して、このプログラムカウンタ２に替えて追加プログラムカウンタ４を選択し、状態cs4に従って機能修正された演算処理をデータパス３に実行させ得るようになされている。
【００６９】
一方、状態レジスタ35は、制御信号パッチ部31から制御信号を受け取ると、追加プログラムカウンタ４に設定された次カウンタであるプログラムカウンタ３を、カウンタデータとして制御信号から抽出し、これを等価判定部36a,36b及びマルチプレクサM17へそれぞれ送出し得る。等価判定部36a,36bは、カウンタデータと同じプログラムカウンタ３が第１修正元状態レジスタ32a又は第２修正元状態レジスタ32bに記憶されていないことから、このことを示す不一致信号を生成し、これをマルチプレクサM17に送出する。
【００７０】
これによりマルチプレクサM17は、状態レジスタ35から受け取ったプログラムカウンタ３を示したカウンタデータをそのまま大小判定部39、融合結線論理制御回路４及び制御信号パッチ部31に送出する。大小判定部39は、プログラムカウンタ３を示すカウンタデータを受け取ると、カウンタデータの値（プログラムカウンタ３）が、最大値ＳF「３」以内であることから、IDCT制御回路25から送出されたプログラムカウンタ３の内容を示す制御信号を、マルチプレクサM18を介してデータパス３と状態レジスタ35へそれぞれ送出させる。これにより、データパス３は、この制御信号に基づいてプログラムカウンタ３の状態cs3に従った演算処理を実行し得る。
【００７１】
一方、状態レジスト35は、プログラムカウンタ３に設定された次カウンタであるプログラムカウンタ１を、カウンタデータとして制御信号から抽出し、これを等価判定部36a,36b及びマルチプレクサM17に送出する。等価判定部36a,36bは、それぞれ対応する第１修正元状態レジスタ32a又は第２修正元状態レジスタ32bに、カウンタデータと同じプログラムカウンタ１が記憶されていないことから、このことを示すカウンタ不一致信号を生成し、これをマルチプレクサM17へ送出する。
【００７２】
これによりマルチプレクサM17は、状態レジスタ35から受け取ったプログラムカウンタ１を示すカウンタデータをそのまま大小判定部39、融合結線論理制御回路４及び制御信号パッチ部31へそれぞれ送出し得る。これにより大小判定部39は、カウンタデータの値（プログラムカウンタ１）が、最大値ＳF「３」以内であることから、上述と同様に、IDCT制御回路25から送出されたプログラムカウンタ１の内容を示す制御信号を、再びマルチプレクサM18を介してデータパス３と状態レジスタ35にそれぞれ送出させる。これにより、データパス３は、制御信号に基づいてプログラムカウンタ１の状態cs1に従った演算処理を再び実行し得る。
【００７３】
このようにして、制御器２は、プログラムカウンタ１、追加プログラムカウンタ４、プログラムカウンタ３、プログラムカウンタ１の順で一連の演算処理を繰り返させ、プログラムカウンタ２の状態cs2に替えて追加プログラムカウンタ４の状態cs4をデータパス３に実行させ、機能修正し得るようになされている。
【００７４】
因みに、このパッチ回路５では、さらにプログラムカウンタパッチ部30において、第２修正元状態レジスタ32bに例えばプログラムカウンタ３を記憶させ、かつ第２修正後状態レジスタ33bに追加プログラムカウンタ５を新たに記憶させることもできる。
【００７５】
この場合、状態レジスト35は、追加プログラムカウンタ４に設定された次カウンタであるプログラムカウンタ３を、カウンタデータとして制御信号から抽出し、これを等価判定部36a,36b及びマルチプレクサM17にそれぞれ送出し得る。第２修正元状態レジスタ32bに接続された等価判定部36bは、当該第２修正元状態レジスタ32bに記憶されたプログラムカウンタ３と、状態レジスタ35から受け取ったカウンタデータとが一致していることから、その判定結果をカウンタ一致信号としてマルチプレクサM17に送出する。
【００７６】
これによりマルチプレクサM17は、第２修正元状態レジスタ32bに対応付けられている第２修正後状態レジスタ33bに記憶された追加プログラムカウンタ５を、変更カウンタデータとして選択し、状態レジスト35から受け取ったカウンタデータに換えて変更カウンタデータを大小判定部39、制御信号パッチ部31及び融合結線論理制御回路４に送出する。
【００７７】
ここで、制御信号パッチ部31の制御信号メモリ40には、プログラムカウンタ３を設計修正した所定の演算処理を実効させる状態cs5と、次カウンタとして設定されたプログラムカウンタ１とが追加プログラムカウンタ５にパッチとして記憶されている。大小判定部39は、追加プログラムカウンタ５を示す変更カウンタデータをプログラムカウンタパッチ部30から受け取ると、変更カウンタデータの値（追加プログラムカウンタ５）が、最大値ＳF「３」を超えていることから、融合結線論理制御回路４からの制御信号に替えて、制御信号メモリ40から読み出した追加プログラムカウンタ５の内容を、制御信号としてマルチプレクサM18を介してデータパス３及び状態レジスタ35にそれぞれ送出させる。
【００７８】
これによりデータパス３は、この制御信号に基づいて追加プログラムカウンタ５に設定された状態cs5に従った演算処理を実行し得る。このようにして、パッチ回路５は、さらにプログラムカウンタ３をも無効化して、このプログラムカウンタ３に替えて追加プログラムカウンタ５を選択し、状態cs5に従って機能修正された演算処理をデータパス３に実行させ得るようになされている。かくして、制御器２は、プログラムカウンタ１、追加プログラムカウンタ４、追加プログラムカウンタ５、プログラムカウンタ１の順で処理を繰り返させるように機能修正し得るようになされている。
【００７９】
（３）整数線形計画法に基づくパッチコンパイル手法
次に、製造後に制御器２を機能修正する際、初期設計記述と、機能修正後の設計記述との差分から制御信号メモリ40に格納される内容をコンパイルするパッチコンパイル手法について説明する。この場合、初期設計されたデータフローグラフF1（図３（Ａ））と、機能修正後のデータフローグラフF2（図４（Ａ））との差分を設計者が求め、この差分からパッチをコンパイルする問題を、整数線形計画法で定式化し、この整数線形計画法を用いて厳密解を求める手法を適用する。因みに、整数線形計画法の定式化や、当該整数線形計画法から求められる制御信号メモリ40の追加プログラムカウンタ４や追加プログラムカウンタ５の設定内容は、別途、図示しないコンピュータを用いて求められる。
【００８０】
ここで、修正前後の設計記述は、修正前後のデータフローグラフを融合したグラフG＝（O,E）で表現される。Oは、演算ノードの集合を示し、修正されない演算ノードの集合Ofと、除去された演算ノードの集合Orと、新たに追加された演算ノードの集合Omとの和集合であり、O＝Of∪Om∪Orとして表される。つまり、修正前の演算ノード集合はOf∪Orとなり、修正後の演算ノード集合はOf∪Omとなる。なお、以下、新たに追加された演算ノードの集合Om＝｛o1,o2,…｝のうち、所定の演算ノードをoiと示す。各データ依存辺e∈Eは各演算ノード間のデータ依存関係を示す。すなわち、データ依存辺とは演算ノード間を繋げるデータエッジを示す。
【００８１】
なお、データパスは、機能ユニットの集合F＝｛f1,f2,…｝（以下、そのうち所定の機能ユニットをfjと示す）と、レジスタファイルポート（図１ではレジスタファイル17に設けられた読み込みポートRFO1,RFO2及び書き込みポートRFI1）の集合P＝｛p1,p2,…｝（以下、そのうち所定のレジスタファイルポートをpqと示す）とからなる。制御ステップS＝｛s1,s2,…｝（以下、そのうち所定の制御ステップをskと示す）は制御回路（IDCT制御回路25、FIR制御回路26及びCRC制御回路27のうち、例えばIDCT制御回路25）の各状態cs1,cs2,…に対応しており、修正前の各演算o∈Of∪Orの実行される制御ステップをS0(o)とし、演算で使用する機能ユニットをF0(o)とする。また、修正可能な制御ステップの総数の最大値をMmaxとする。この修正可能な制御ステップの総数の最大値Mmaxは、制御信号メモリ40のワード数に対応している。
【００８２】
ここでパッチコンパイル手法においては、各追加演算ノードo∈Omの制御ステップS(o)と、各追加演算ノードo∈Omの演算に使用する機能ユニットF(o)とを求める必要がある。そこで、このような各追加演算ノードo∈Omの制御ステップS(o)と、各追加演算ノードo∈Omの演算に使用する機能ユニットF(o)とを、整数変数を用いた制約式で表現し、整数線形計画法で求める手法について説明する。
【００８３】
因みに、この場合、修正前の演算は既に制御ステップにスケジュールされているとする。次に各制御ステップ間に空の制御ステップを挿入する。なお、この空の制御ステップにスケジュールされた演算はパッチ回路５における制御信号メモリ40に実装されることになる。各制御ステップ間に挿入される空の制御ステップの数は制御信号メモリ40のワード数、又は最も悲観的にスケジュールした場合に必要な制御ステップ数のうち小さい方となる。なお、最も悲観的にスケジュールした場合とは、各追加演算ノードを異なる制御ステップにスケジュールした場合であり、必要な制御ステップ数の理論的な上限を表す。
【００８４】
次に、制約式で用いる変数について説明する。後述する変数は全て２値変数である。例えばBi,j,kは、制御ステップskにおいて演算ノードoiが機能ユニットfjを使用しているときに１となる変数である（i、j及びkは、それぞれ所定の整数を示す）。また、Gj,k,q,tは、制御ステップskにおいて機能ユニットFjのt番目の入出力信号線がレジスタファイルポートpqを使用する場合に１となる変数である。さらに、Mkは、制御ステップskに修正がある場合に１となる変数である。そして、制約式は以下の７種類に分類される。
【００８５】
（３−１）    制約１(演算使用制約)
データフローグラフにおける各追加演算ノードoiは、所定の制御ステップskにおいて一度のみスケジュールされなくてはならない。これを制約式として表すと以下のようになる。
【００８６】
【数１】
0005626724.tif 000002
【００８７】
（３−２）    制約２(資源制約)
機能ユニットFjは、各制御ステップskにおいて高々一度のみ使用可能である。これを制約式として表すと以下のようになる。
【００８８】
【数２】
0005626724.tif 000003
【００８９】
（３−３）    制約３(データ依存制約)
データフローグラフにおける演算ノードol及び演算ノードox間の関係を示すデータ依存辺について、始点の演算は終点の演算よりも先にスケジュールされなければならない。これを制約式として表すと以下のようになる。なお、下記数３の左辺の最初の項は始点の演算の制御ステップに対応し、右辺は終点の演算の制御ステップに対応する。
【００９０】
【数３】
0005626724.tif 000004
【００９１】
（３−４）    制約４(修正制御ステップ制約)
変数であるMkは、制御ステップskが修正された際に１となる。これを制約式にすると以下のようになる。
【００９２】
【数４】
0005626724.tif 000005
【００９３】
（３−５）    制約５(除去演算制約)
除去する演算ノードoy∈Orがスケジュールされている制御ステップは、無条件に修正制御ステップとなり、変数であるMstep(oy)は１となる。これを制約式にすると以下のようになる。
【００９４】
【数５】
0005626724.tif 000006
【００９５】
（３−６）    制約６(最大修正制御ステップ数制約)
修正可能な制御ステップの最大値Mmaxの上限はパッチ回路内の制御信号メモリ40のワード数で決定される。これを制約式にすると以下のようになる。
【００９６】
【数６】
0005626724.tif 000007
【００９７】
（３−７）    制約７(レジスタポート制約)
ここでは説明の簡略化のためチェイニングを考慮しない。つまり、各機能ユニットはレジスタファイル17から所定のデータを読み出し、演算結果をレジスタファイル17に格納する。よって、各機能ユニットの入出力はレジスタファイルポート（図１ではレジスタファイル17に設けられた読み込みポートRFO1,RFO2及び書き込みポートRFI1）に接続されている必要がある。これを制約式にすると以下のようになる。
【００９８】
【数７】
0005626724.tif 000008
【００９９】
因みに、各変数のレジスタへの割り当てについては、整数線形計画法問題を解いた後に、「P. Brisk, F. Dabiri, R. Jafari, and M. Sarrafzadeh, "Optimal register sharing for high-level synthesis of SSA form programs," IEEE Trans. Computer-Aided Design, vol. 25, no. 5, pp. 772-779, May 2006」等の手法を用いて求める。
【０１００】
上述した制約１〜７までの制約式を整数線形計画法によって解くことによって、各演算の制御ステップと、それに用いる機能ユニットとが求まる。因みに、上述した制約１〜７までの制約式を整数線形計画法によって解いても、仮に解が求まらない場合には、パッチ回路５に設けられた制御信号メモリ40のワード数では機能修正が不可能であることを示している。
【０１０１】
（４）データパス合成手法
（４−１）データパス合成手法の概要
ここで、本発明によるアクセラレータ１のデータパス３は、設計時において、後述するデータパス合成手法を基に、製造後に起こり得るであろう潜在的な機能修正を予め想定して機能ユニットが選定されており、機能修正後の性能歩留まりを最大化し得るようになされている。以下、本発明によるデータパス合成手法について説明する。
【０１０２】
ここで図６は本発明のデータパス合成手法の一連の流れを示す概略図である。このデータパス合成手法では、アクセラレータ１の設計時に、先ず始めに、初期の設計仕様45に基づいて、一般的な高位合成を利用し、初期の設計記述を動作させるために必要となる最小構成の機能ユニットを割り当てる。実際上、一般的な高位合成手法と同様に、C言語等で記述された高位設計記述と、設計制約とをコンピュータに入力し、ＬＳＩの動作を記述した動作記述から、ハードウェアレベルの記述であるＲＴＬ（レジスタ転送レベル）記述を生成し、初期の設計仕様に対応したデータパスを決定する。
【０１０３】
次いで、初期の設計仕様を表したデータフローグラフに所定の演算ノードを新たに追加したり、或いは当該データフローグラフにおける演算ノード間の繋がりを変える等の仮想的な変更をランダムに実行し、機能修正を想定してデータフローグラフの内容を変更した例えば数百パターンの修正データフローグラフを多様性集合として生成する。なお、多様性集合とは、異なる事象の集合であり、各事象が確率を持つような確率空間である。ここで各事象を変異形と呼び、各事象の確率は性能歩留まりの計算に使用される。
【０１０４】
高位設計における設計修正では、初期設計記述の一部を変更する。一般的に初期設計の段階では、実際どのような機能修正が製造後に行われるかは不明であり、また初期設計から可能な設計修正の方法は非常に多数であるため網羅的に求めることは現実的に不可能である。そのため、本発明では、機能修正による変形パターンを予めモデル化し、かつその変形回数を予め設定した機能修正仕様46からランダムサンプリングによって潜在的な機能修正の候補を生成し、Cプログラムを設計変更した修正Cプログラム48を複数求め、これら修正Cプログラム48で表された機能修正後の設計記述の集合を多様性集合とする。
【０１０５】
ここでは、初期設計のデータフローグラフを基準に、演算ノードを追加したり、データエッジを変更して設計修正を行い、初期設計のデータフローグラフを変形させて潜在的な機能修正をモデル化する。機能修正仕様46としては、データエッジ上に所定の演算ノードを挿入する第１の変形モデルと、データエッジを削除又は追加する第２の変形モデルとの２つの変形モデルを考え、これら第１の変形モデル及び第２の変形モデルがランダムに所定回数選択され初期の設計仕様45が変形される。第１のモデルは、高位記述において、ある式中に新しい演算を追加するという設計変更に相当し、第２のモデルは、高位記述において、２つの変数参照を交換するという設計変更に相当する。
【０１０６】
例えば、図７（Ａ）は、初期の設計仕様を基に生成されたデータフローグラフF3を示し、このデータフローグラフF3は、所定データを演算ノードN8で加算した後その結果を演算ノードN9で「３」からのデータに乗算する一連の乗算処理を表している（なお、「３」は所定の演算ノードを示す）。また、データフローグラフF3では、これとは別に、所定データを演算ノードN10で加算するとともに、他のデータを演算ノードN11で加算し、これら加算結果を演算ノードN12で乗算する一連の演算処理を表している。以下、これらデータフローグラフF3を用いて、上述した第１の変形モデルと第２の変形モデルについて説明する。
【０１０７】
図７（Ｂ）に示すように、データフローグラフF3の機能修正の一例を示す仮想演算処理を示す修正データフローグラフF4では、例えば加算処理の演算ノードN11と乗算処理の演算ノードN12との間のデータ依存関係を示すデータエッジがランダムに選択され変更データエッジとなっている。また、この実施の形態の場合では、例えば加算処理の演算ノードや、減算処理の演算ノード、乗算処理の演算ノードのうち乗算処理の演算ノードN13がランダムに選択され、変更データエッジに当該演算ノードN13が新たに追加され、さらにランダムに選択された他の加算処理の演算ノードN8と、演算ノードN13との間に新たなデータエッジが生成されている。
【０１０８】
このように仮想演算処理を示す修正データフローグラフF4では、乗算処理の演算ノードN13を新たに追加する変更と、他の加算処理の演算ノードN8及び乗算処理の演算ノードN13間を繋げるデータエッジを生成する変更との２つの変更をランダムに選択して実行し得るようになされている。なお、新しい演算ノードが複数入力を持つ場合には、適当な数の演算ノードをランダムに選択して入力とする。
【０１０９】
また、データフローグラフF3の機能修正の他の例として、図７（Ｃ）に示すように、修正データフローグラフF5では、加算処理の演算ノードN8と、乗算処理の演算ノードN9とのデータ依存関係を示すデータエッジがランダムに選択され（図７（Ａ））、当該データエッジを削除するとともに、加算処理の演算ノードN8と、ランダムに選ばれた他の乗算処理の演算ノードN12とを繋げて新たなデータエッジを生成している。
【０１１０】
また、この仮想演算処理を示す修正データフローグラフF5では、他の加算処理の演算ノードN10と、乗算処理の演算ノードN12とのデータ依存関係を示すデータエッジ（図７（Ａ））がランダムに選択され、当該データエッジを削除するとともに、加算処理の演算ノードN10と、ランダムに選ばれた他の乗算処理の演算ノードN9とを繋げて新たなデータエッジを生成している。
【０１１１】
このように修正データフローグラフF5では、所定の加算処理の演算ノードN8及び乗算処理の演算ノードN9間のデータエッジを削除し、かつ当該演算ノードN8及び乗算処理の演算ノードN12間を繋げるデータエッジを新たな生成する変更と、他の加算処理の演算ノードN10及び乗算処理の演算ノードN12間のデータエッジを削除し、かつ当該演算ノードN10及び乗算処理の演算ノードN9間を繋げるデータエッジを新たに生成する変更との２つの変更をランダムに選択して実行し得るようになされている。
【０１１２】
なお、この実施の形態の場合、１回の変形によって初期設計から生成される機能修正設計は、初期設計から機能修正される規模が変形回数で決められており、例えば初期設計から数％以下で機能修正され得るように変形回数が予め指定されている。また、新たな演算ノードの追加や、データエッジの追加等の各変形は同じ確率で起こるものとする。
【０１１３】
実際上、このデータパス合成手法では、先ず初めに、初期設計仕様45に従って生成されたデータフローグラフF3に対して、第１の変更モデル又は第２の変更モデルのうちいずれかをランダムに選択して新たな修正データフローグラフF4を１つ生成する。次いで、図６に示したように、この修正データフローグラフF4に対して、後述するインクリメンタルスケジューリング・バインディング合成を繰り返し適用し、初期のデータパスによって修正データフローグラフF4を実行し得るように機能ユニット間の接続が必要に応じて追加されていく。
【０１１４】
その後、このようにして機能ユニット間の接続が新たに生成されたデータパス60が、予め決められている性能制約を満たしているか否かについて判断され、性能制約が満たしていない場合には、性能制約を満たすために必要であろうと推定される機能ユニットを特定し、この機能ユニットを初期のデータパスに対して新たに割り当て（図６中「インクリメンタル機能ユニット割り当て」）、新たなデータパス（以下、これを機能修正耐性データパスと呼ぶ）61の構成を決定する。
【０１１５】
次いで、再度、第１の変更モデル又は第２の変更モデルのうちいずれかをランダムに選択し、初期設計に従って生成されたデータフローグラフF3から新たな修正データフローグラフF5を再び生成する。次いで、この新たな修正データフローグラフF5に対して、後述するインクリメンタルスケジューリング・バインディング合成を繰り返し適用し、先に生成された機能修正耐性データパス61によって、当該修正データフローグラフF5を実行し得るように機能ユニット間の接続が必要に応じて追加されていく。
【０１１６】
その後、このようにして機能ユニット間の接続が新たに生成された機能修正耐性データパス61が、予め決められている性能制約を満たしているか否かについて判断し、性能制約が満たしていない場合には、性能制約を満たすために必要であろうと推定される機能ユニットを特定し、この機能ユニットを機能修正耐性データパス61に対してさらに割り当て（図６中「インクリメンタル機能ユニット割り当て」）、再度、新たな機能修正耐性データパス62の構成を決定する。
【０１１７】
このようにして、データパス合成手法では、予め決められた回数で設計修正を実行してゆき、各設計修正毎に所定の制約性能を満たすように、必要に応じて新たな機能ユニットを次第に追加させてゆき、最終的に、これら設計修正毎に必要に応じて追加された機能ユニット全てが設けられたデータパス３を生成し、このデータパス３に制御器２が設けられ本発明のアクセラレータ１が製造され得る。かくして、このようなデータパス合成手法では、製造後に起こり得るであろう潜在的な機能修正を予め想定して必要となる機能ユニットを設けることができるので、パッチ回路５による機能修正した際に、例えば乗算器13が足りずに性能制約を満たす範囲で機能修正し得ないとの問題を防止でき、機能修正後における性能歩留まりを最大化し得るようになされている。
【０１１８】
因みに、図６において性能分布を示したグラフ70は、例えば横軸が、左側にゆくに従って処理能力が良いことを示し、縦軸が、各処理能力を有するデータパスの該当数を示しており、設計修正したデータパスのうち性能制約を満たすデータパスがどの程度あるかの目安となり得る。
【０１１９】
（４−１）インクリメンタルスケジューリング・バインディング合成
次に、上述したインクリメンタルスケジューリング・バインディング合成手法について、説明する。なお、この「（４−１）インクリメンタルスケジューリング・バインディング合成」の説明に用いる記号は、上述した「（３）整数線形計画法に基づくパッチコンパイル手法」の説明に用いた記号とは別に定義しており、同じ記号であっても同じ意味を表すものではない。
【０１２０】
この場合、先ず、入力の高位設計記述を解析してコントロールデータフローグラフ(CDFG)を構築する。ここで、コントロールデータフローグラフ内で表現される式は、それぞれ静的単一代入(SSA)形式になっているものとする。コントロールデータフローグラフは、コントロールフローグラフ(CFG)GC=(VC,EC)と、データフローグラフ(DFG)GD =(VD,ED)からなる。コントロールフローグラフは、基本ブロックを表す制御ノードの集合VCと、制御ノード間の制御フローを表す制御エッジの集合ECからなる。ここで、基本ブロックとは、制御の変更を伴わない一連の演算を表す。
【０１２１】
データフローグラフは、演算ノードの集合VDと、演算ノード間のデータ依存関係を表すデータエッジの集合EDからなる。スケジュールS:VD→Uは演算ノードの集合から制御ステップの集合への写像として定義される。データパスA=(F,I)は、機能ユニットの集合Fと、機能ユニット間の配線の集合Iとからなる。機能ユニットの割り当てB:VD→Fは、演算ノードの集合から機能ユニットの集合Fへの写像として定義される。インクリメンタルスケジューリング・バインディング合成の対象となる演算ノードの集合T⊆VDを対象ノードと呼ぶ。ここで、残りの演算ノード(VD−T)のスケジュールと、機能ユニットの割り当ては与えられているものとする。
【０１２２】
そして、このインクリメンタルスケジューリング・バインディング合成手法は、スケジューリングと、バインディングとを並行して行う。具体的には、各演算ノードn∈VDに対して、まずnをどの制御ステップで実行するかを決定(スケジューリング)した後、どの機能ユニットでnを実行するかを決定(バインディング)する。図８に示すスケジューリングの手続きは、「J. Llosa, "Swing modulo scheduling: A lifetime-sensitive approach,"in Proc. IEEE Int. Conf. on Parallel Architecture and Compilation Techniques (PACT), Oct. 1996, pp. 80-87.」に記載されたswing modulo スケジューリングに基づいている。
【０１２３】
ここで、各基本ブロックBBに対して、swing modulo スケジューリング手法を用いて演算ノードの集合(BB∩T)のスケジューリング順を決定する(３行目、手続きSMS-Sort())。スケジューリングの品質は、スケジューリング順に大きく依存する。swing modulo スケジューリングは、クリティカルパス上の演算ノードを最優先とし、次に変数の寿命を最小にするようにスケジューリング順を決定する。決定されたスケジューリング順に各演算ノードnを選択し(４行目)、以下の処理を繰り返す。
【０１２４】
手続きAvailable-Slots()によってnがスケジュール可能な制御ステップの集合Sを決定する(５行目)。手続きScan-Direction()によって決定(６行目)した順で、Sの各制御ステップを選択し、バインディングを試みる(９行目)。割り当てが見つからない場合には、新しい制御ステップを挿入し(New-Step())、再びバインディングを行う(12-15行目)。
【０１２５】
次にレジスタ割り当てAssign-Registers()を行い、各変数をレジスタファイル17内のレジスタに割り当てる。ここではすべての局所変数は必ずレジスタに割り当てられる。つまりメモリスピルは行わない。この手法では、コントロールデータフローグラフ内に表現される式がSSA形式の場合に最適性を保証するレジスタ割り当てアルゴリズムを採用した（「P. Brisk, F. Dabiri, R. Jafari, and M. Sarrafzadeh, "Optimal register sharing for high-level synthesis of SSA form programs," IEEE Trans.Computer-Aided Design, vol. 25, no. 5, pp. 772-779, May 2006.」参照）。最後に手続きGenerate-Control-Words()によってスケジューリング及びバインディング結果から制御プログラムを生成する。
【０１２６】
図９にバインディングの手続きを示す。先ず、演算ノードnに割り当て可能な機能ユニットの集合を手続きAvailable-FUs()で求める。その後、手続きSort-FUs()によって機能ユニットの集合をバインディングのコストに基づいてソートする。演算ノードnを機能ユニットfに割り当てるコストは、割り当てた際に追加する必要のある配線のコストとする。ソートされた順に演算ノードnを機能ユニットfに割り当て、機能ユニットfに隣接する演算ノードmに対応する機能ユニットgに接続する。
【０１２７】
ここで演算ノードmと演算ノードnとの間にデータエッジが存在している場合に、２ノードが隣接していると呼ぶ。演算ノードmがすでに機能ユニットgに割り当てられている場合には、手続きBind-Path()によって機能ユニットfと、機能ユニットgとの間を接続する。このとき，機能ユニットfと機能ユニットgとの間の接続には、配線、マルチプレクサ、レジスタポートを組み合わせる。仮に演算ノードmと演算ノードnとが異なる制御ステップにスケジュールされている場合には、演算結果をレジスタに格納するようにバインディングする。
【０１２８】
仮に演算ノードmと演算ノードnとの間にそのようなパスがない場合には、手続きNew-Interconnects()によって新しい配線を導入してバインディングを再び行う。コンパイル時には、New-Connection()は実行されない。この部分が唯一合成とコンパイルで異なる点である。それでもパスが見つからない場合には、直前の繰り返しで導入された配線をすべて除去し(Undo-New-Interconnects())、次の機能ユニット候補f´∈Gを演算ノードnに割り当てる。
【０１２９】
次に、図１０に示すデータフローグラフF7を例として、インクリメンタルスケジューリング・バインディング合成手法を説明する。先ず、３つの演算ノード１,２,３をswing modulo スケジューリング手法を用いてソートする。なお、図１０中の数字はスケジューリング順を表している。図１１（Ａ）は、最初の２つの演算ノード１,２のスケジューリング・バインディング結果を示す。演算ノード１には、MUL1（図１の乗算器13に相当）が割り当てられており、レジスタファイル17に接続された読み出しポートRFO1が片方の入力に接続されている。演算ノード２には、ALU1（図１のALU111に相当）が割り当てられており、レジスタファイル17に接続された書き出しポートRFI1が出力に接続されている。図１１（Ｂ）に示すように、このようなスケジュール結果に対応するデータパス71では、ALU1及び書き出しポートRFI1間と、読み出しポートRFO1及びMUL1間とにそれぞれ配線が設けられる。
【０１３０】
次に、演算ノード３を制御ステップB（図中step B）にバインディングする。ここで、図１１（Ａ）に示すように、スケジューリング結果では、制御ステップBにALU1が既に割り当てられているため、図１２（Ａ）に示すように、新しい制御ステップC（図中step C）を挿入し、制御ステップCにおいてALU1を演算ノード３に割り当てる。
【０１３１】
ここで、演算ノード３及び演算ノード１は、その間にデータエッジが存在しており（図１０）、かつ演算ノード１が制御ステップAにスケジュールされ、演算ノード３が制御ステップC（図中step C）にスケジュールされており、異なる制御ステップA,Cにスケジュールされている。従って、このようなスケジュール結果では、図１２（Ａ）に示すように、レジスタファイル17に接続された読み込みポートRFO2に演算ノード１が接続され、レジスタファイル17に接続された書き込みポートRF1に演算ノード３が接続される。ここで、図１１（Ｂ）に示したデータパス71では、ALU1及び書き込みポートRFI1間に配線があるものの、読み込みポートRFO2及びMUL1間に配線が存在していない。そこで、図１２（Ｂ）に示すように、最終的には、読み込みポートRFO2及びMUL1間に新たな配線を追加し、スケジュール結果に対応したデータパス72を生成する。
【０１３２】
（５）動作及び効果
以上の構成において、アクセラレータ１では、予め論理が固定された結線論理からなり、予め決められたプログラムカウンタ１〜３の順番に従って所定の演算処理の命令を制御信号として順次生成する融合結線論理制御回路４を備え、当該融合結線論理制御回路４によって固定機能を実現しており、メモリ等の余分な回路構成を有していない分だけ小型化を図り、かつ処理速度及び電力効率の向上を図ることができる。
【０１３３】
また、このアクセラレータ１では、融合結線論理制御回路４からプログラムカウンタ１〜３を受け取り、これらプログラムカウンタ１〜３のうち所定のプログラムカウンタ２を追加プログラムカウンタ４に置き換えるプログラムカウンタパッチ部30と、追加プログラムカウンタ４に対応付けて修正演算処理命令である状態cs4を記憶した制御信号パッチ部31とが設けられている。
【０１３４】
これにより、アクセラレータ１では、制御信号パッチ部31がプログラムカウンタパッチ部30から追加プログラムカウンタ４を示すカウンタデータを受け取ると、融合結線論理制御回路４から出力されるプログラムカウンタ２の内容を示す制御信号に替えて、追加プログラムカウンタ４に対応付けられた修正演算処理命令である状態cs4を制御信号としてデータパス３に送出する。
【０１３５】
かくして、アクセラレータ１では、仕様変更や設計誤りにより製造後に回路構成を修正する必要が生じた場合でも、高位合成手法によって機能修正したアクセラレータを新たに設計し製造し直すことなく、融合結線論理制御回路４自体を修正せずに、データパス３によって状態cs4に従って機能修正後の演算処理を実行させることができる。
【０１３６】
すなわち、図１３に示すように、一般的に、結線論理からなる固定機能のアクセラレータ80を製造する場合には、高位記述を利用した高位合成手法（ステップＳＰ１０）によって結線論理の構成等の論理・物理設計（ステップＳＰ１１）が行われ、この初期設計に基づいて固定機能のアクセラレータ80が製造（ステップＳＰ１２）される。その後、製造したアクセラレータ80に動作上の欠陥が発見された場合には、初期設計の仕様通りに動作させるために必要な修正を特定する作業（ステップＳＰ１３）を行い、この欠陥を修正した修正後記述を作成して再び高位合成手法（ステップＳＰ１０）によって結線論理の構成等の論理・物理設計（ステップＳＰ１１）が行われ、初期設計が修正されたアクセラレータ80を製造（ステップＳＰ１２）していた。
【０１３７】
これに対して、本発明では、修正後記述を利用して整数線形計画法に基づくパッチコンパイル手法を適用（ステップＳＰ１４）することで、制御信号メモリ40に格納されるパッチをコンパイルすることができ、従来のような、論理・物理設計（ステップＳＰ１１）や、アクセラレータ自体の再製造（ステップＳＰ１２）等の一から製造のやり直しを不要とすることができる。
【０１３８】
また、このアクセラレータ１では、当該アクセラレータ１の設計時において、初期の設計仕様を基に高位合成手法により生成したデータフローグラフから、演算ノードの追加やデータエッジの変更等した複数の修正データフローグラフを生成し、これら修正データフローグラフの演算処理について所定の性能制約を満たす範囲内で実行し得るように機能ユニットが選定され、これら選定された全ての機能ユニットを備えたデータパス３が用いられている。
【０１３９】
これにより、アクセラレータ１では、製造後における仕様変更や設計誤りにより起こり得るであろう潜在的な機能修正を予め想定して、例えば比較器10、ALU111、ALU212、乗算器13、及びバレルシフタ14（機能ユニット）を設けることができ、製造後に制御器２について小規模な機能修正を行っても、当該機能修正により性能制約を満たすために必要になるであろう機能ユニットを有する確率を高め、機能修正後の性能歩留まりを最大化し得る。
【０１４０】
ここで、図１４は、本発明のアクセラレータ１の概要について纏めた概略図である。図１４に示すように、アクセラレータ１では、設計時に、Cプログラムを用いた初期の設計仕様と、演算ノードの追加やデータエッジの変更等を示す機能修正仕様とを基に、潜在的な機能修正を想定して複数の修正データフローグラフを生成し、高位合成手法によりこれら修正データフローグラフの演算処理を所定の性能制約内で実行可能なデータパス３が生成されている。
【０１４１】
アクセラレータ１では、製造後に仕様変更や設計誤りにより機能修正が必要となった場合でも、Cプログラムを用いた機能修正後の設計記述から上述したパッチコンパイル手法に基づいてパッチを生成し、このパッチの内容を制御信号メモリ40に書き込むことで、機能修正することができる。
【０１４２】
また、このアクセラレータ１では、異なる固定機能を実現するIDCT制御回路25、FIR制御回路26及びCRC制御回路27を備えた融合結線論理制御回路４が設けられ、かつこれらIDCT制御回路25、FIR制御回路26及びCRC制御回路27のいずれが選択されても、IDCT処理、FIR処理及びCRC処理が実行可能な機能ユニットが予め選択され設けられている。これによりアクセラレータ１では、製造後に用途の変更が生じても、これに応じてIDCT処理、FIR処理及びCRC処理のいずれかの処理を実行する回路構成へと簡単に機能変更させることができる。
【０１４３】
ところで、図１５に示すように、従来の集積回路85では、例えばIDCT処理や、FIR処理、CRC処理等の複数の処理のうちいずれかの処理を選択的に実行可能とする場合、各処理毎にそれぞれ個別に高位合成手法により設計されたアクセラレータ86a,86b,86c,86dが設けられていた。また、従来の集積回路85では、各アクセラレータ86a,86b,86c,86dがそれぞれ結線論理により構成され固定機能を実現していることから、製造後に設計変更を殆んど行うことができなかった。
【０１４４】
これに対して、図１５に示すように、パッチ回路５（図１）を有する本発明のアクセラレータ1a,1bを用いた集積回路88では、従来、各処理毎にそれぞれ個別に設けられていたデータパスを共通化させることができるので、その分だけ集積回路88全体の面積を小さくすることができ、小型化を図ることができる。また、このような集積回路88では、各アクセラレータ1a,1b毎にそれぞれパッチ回路５が設けられていることから、上述したようにパッチ回路５を用いることで、製造後であってもアクセラレータ1a,1b毎に小規模な機能修正を行うことができるようになり、製造後に機能修正が仮に生じても、製造時の回路構成をそのまま利用しつつ機能修正を行え得る集積回路88を実現できる。
【０１４５】
この実施の形態の場合、アクセラレータ１では、制御信号メモリ40が一部の制御信号のみを変更可能な程度のメモリ量しかないことから、仮に読み出しか数が非常に多くなっても消費電力を低減させることができる。
【０１４６】
以上の構成によれば、アクセラレータ１では、予め論理が固定された結線論理からなる融合結線論理制御回路４によりプログラムカウンタ１〜３の順番に従って順次生成された制御信号のうち、機能修正が必要となったプログラムカウンタ２の制御信号に替えて、機能修正を行った状態cs4を制御信号として新たにデータパス３に送出することにより、機能修正した演算処理をデータパス３に実行させるようにした。
【０１４７】
これにより、アクセラレータ１では、主として所定の機能を実現する融合結線論理制御回路を結線論理で構成することで、小型化を図り、かつ処理速度及び電力効率の向上を図ることができるとともに、仮に仕様変更や設計誤りにより製造後に機能修正する必要が生じた場合でも、高位合成により融合結線論理制御回路自体の再設計を行わずに、パッチ回路５によって機能修正が行えるので、その分だけコスト低減を図ることができる。かくして、小型化を図るとともに、処理速度及び電力効率の向上を図りつつ、製造後の機能修正に掛かるコストを格段的に低減し得るアクセラレータ１を提案できる。
【０１４８】
（６）検証結果
次に、本発明のアクセラレータ１における回路構成全体の面積と、実行時における消費電力とについて、従来からある１つの機能しか実現できない固定機能アクセラレータと、機能修正が可能な高いプログラマビリティを持つ一般的な汎用プロセッサと比べて、どの程度異なるか検証を行った。図１６は、本発明のアクセラレータ１と、従来の固定機能アクセラレータと、一般的な汎用プロセッサとについて回路構成の面積を比較した検証結果を示している。図１７は、本発明のアクセラレータ１と、従来の固定機能アクセラレータと、一般的な汎用プロセッサとについて消費電力について比較した検証結果を示している。
【０１４９】
ここでは、比較例となる従来の固定機能アクセラレータとして、C言語で記述し固定機能アクセラレータとして高位合成した「bubble sort（バブルソート）」と、「ADPCM Decoder（ADPCMでコーダ）」と、「8x8 IDCT（8x8 逆離散コサイン変換）」と、「MPEG-1 Prediction（MPEG-1 予測関数）」と、「MPEG-2 bdist2（MPEG-2 bdist関数）」の５つの回路を用意した。なお、図１６では、汎用プロセッサを「Prog.Micricided」と表している。
【０１５０】
また、本発明のアクセラレータ１としては、上述した従来の固定機能アクセラレータである「bubble sort」と、「ADPCM Decoder」と、「8x8 IDCT」と、「MPEG-1 Prediction」と、「MPEG-2 bdist2」の５つの機能を全て実行可能な回路構成とし、最大修正制御ステップ数Mmaxを3，10，50とした３種類のアクセラレータ１を用意した。
【０１５１】
なお、本発明のアクセラレータ１において、入力Cプログラムを解析し、SSA形式のコントロールデータフローグラフ（CDFG）を構築する処理には、LLVMコンパイラ・インフラストラクチャ（C. Lattner and V. Adve, "LLVM: A compilation framework for lifelong program analysis & transformation,"in Proc. IEEE/ACM Int. Symp. on Code Generation and Optimization (CGO), May 2004, p. 75.）を用いた。また、本発明のアクセラレータでは、データパス合成として、上述した「（４）データパス合成手法」を利用し、潜在的多様性を考慮したデータパスを用いた。すなわち、本発明のアクセラレータ１では複数機能の実行に最適化されたデータパスが合成されている。本発明のアクセラレータ１の製造の際に用いる整数線形計画法のソルバとしては、Gurobi Optimizer（Gurobi Optimizer Reference Manual, Version 3.0.Gurobi Optimization, Inc., 2010.）を用いた。
【０１５２】
また、ここでは、制御回路（Controller）と、マルチプレクサ（Multiplexers）と、演算器（Arithmetic）と、レジスタファイル（Register file）と、ローカルストア（Local Store）の各回路について面積を比較する検証を行った。
【０１５３】
本発明のアクセラレータ１と、従来の固定機能アクセラレータと、一般的な汎用プロセッサについて、公平な比較を行うため、全ての回路の動作周波数は200MHzとなるように設計した。また、面積評価及び消費電力評価には、45nmプロセスの仮想テクノロジであるFreePDK45（FreePDK45, http://www.eda.ncsu.edu/wiki/FreePDK45:Contents. North Carolina State University, 2010.）を用いた。また、スタンダードセルライブラリはNangate社提供のものを用いた。論理合成にはSynopsys 社Design Compilerを用い、静的タイミング解析、面積評価、消費電力評価にはSynopsys社PrimeTime を用いた。
【０１５４】
複数のアクセラレータ１のうち、最大修正制御ステップ数Mmaxが3であるアクセラレータ１では汎用プロセッサに比べて面積で78%、消費電力で83%小さくできることを確認した。また、この最大修正制御ステップ数Mmaxが3であるアクセラレータ１は、従来の固定機能アクセラレータの中で最も大きな面積を持つ回路である「MPEG-2 bdist2」に比べて面積で18%、消費電力で13%のオーバーヘッドであった。このように、本発明のアクセラレータ１は、複数機能の実行時の変更や、製造後の機能修正を可能にしつつ、従来の固定機能アクセラレータに匹敵する面積・消費電力を実現可能であることが分かり、面積と消費電力の面において従来方式よりも優れていることが確認できた。
【０１５５】
次に、上述した「（４）データパス合成手法」を基に製造後の機能修正を考慮して生成されたデータパスと、従来の固定機能アクセラレータに用いられるデータパスとについて、性能歩留まりを比較する検証を行ったところ、図１８に示すような結果が得られた。図１８では、多様性を考慮したデータパスを備えたアクセラレータ１を「Variation-Aware」と表記し、従来の多様性を考慮しないデータパスを備えたアクセラレータを「Variation-Unaware」と表記している。
【０１５６】
ここでは入力C プログラムを解析し，SSA 形式のCDFG を構築する処理には、上述のLLVM コンパイラ・インフラストラクチャを用いている。Cプログラムが関数呼び出しを含む場合には、関数インライン化を用いて単一関数を生成している。また、SystemC言語による記述を入力とすることも可能とし、各モジュールに対して１つのアクセラレータを合成する。このとき、複数モジュール間は、ローカルストアを通じて通信する。合成されたアクセラレータのRTL記述はVerilog HDL言語で出力することが可能となっており、制御プログラムも様々な形式で出力可能である。
【０１５７】
比較例としては、一般的な高位合成ツールが生成するデータパスと同等のもので多様性を考慮しないデータパスを合成した。機能ユニットやマルチプレクサ、メモリ素子、配線の面積はRohm 0.18μｍテクノロジを用いて見積もった。
【０１５８】
本発明のアクセラレータ１に設けられるデータパスでは、演算ノードを追加したり、データエッジを変更して初期設計のデータフローグラフを変形させた多様性集合を生成した。この生成に際しては、演算ノードの増加が全体の3%以下になるように制約を与え、また各設計に対して100個の異なる変異形を生成した。この変異形を考慮することで、機能修正に対する耐性を持つデータパスを合成した。
【０１５９】
次に、比較例とした多様性を考慮しないデータパスと、多様性を考慮したデータパスのそれぞれに対して、上と同じ方法で生成した設計多様性集合を入力としてコンパイルを行い、実行ステップ数を100個求めた。なお、性能歩留まりは100個の実行ステップ数のうち初期設計の実行ステップ数の103%以内になった割合である。図１８から、本発明のデータパスは、全体として2.8%の面積オーバーヘッドで43.4%の性能歩留まりの向上を確認した。
【０１６０】
（７）他の実施の形態
例えば、図１９において、90は、半導体チップ上に必要とされる一連の機能（システム）を集積するシステムオンチップでなる集積回路を示し、本発明のアクセラレータ１と、汎用プロセッサ91と、共有メモリ92と、周辺回路93a,93bとが共有バス94に接続されており、各回路間において種々のデータを授受し得るようになされている。
【０１６１】
この場合、アクセラレータ１には、制御信号メモリ40に共有バス40を介して共有メモリ92のパッチメモリ96が接続されており、当該パッチメモリ96に記憶されたデータが必要に応じて制御信号メモリ40に転送され得るようになされている。実際上、図２０に示すように、パッチメモリ96は、制御信号メモリ40よりも記憶容量が大きく、制御信号メモリ40において必要となる全てのパッチ1及びパッチ2を予め記憶している。
【０１６２】
制御信号メモリ40は、パッチメモリ96からパッチ1又はパッチ2のいずれかを必要に応じて読み出し動的更新し、例えばパッチ1からパッチ2に記憶内容を変更させたり、或いはパッチ2からパッチ1に記憶内容を変更し得るようになされている。
【０１６３】
これによりアクセラレータ１では、図２１に示すように、初めに制御信号メモリ40にパッチ1を記憶させておき、プログラムカウンタ及び追加プログラムカウンタに従った順番で所定回数（例えば10000回）繰り返されるデータパス３による演算処理（ループ1）の際、パッチ1の内容による演算処理を実行し得る。
【０１６４】
次いで、アクセラレータ１は、パッチメモリ96からパッチ2を読み出し、制御信号メモリ40に記憶されていたパッチ1に替えてパッチ2を記憶し得るようになされている。これにより、アクセラレータ１は、プログラムカウンタ及び追加プログラムカウンタに従った順番で所定回数（例えば10000回）繰り返されるデータパス３による演算処理（ループ2）の際、パッチ2の内容による演算処理を実行し得る。
【０１６５】
なお、上述した実施の形態においては、パッチメモリ96をパッチ回路５の外部に設けるようにした場合について述べたが、本発明はこれに限らず、パッチメモリ96をパッチ回路５の内部に設けるようにしてもよい。
【０１６６】
以上の構成において、アクセラレータ１では、パッチ可能な機能変更の規模が制御信号メモリ40のメモリ量によって制限されるものの、制御信号メモリ40に記憶される内容をパッチメモリ96の内容に更新可能とすることで、機能変更が大きい場合でも、制御信号メモリ40の内容をパッチメモリ96に記憶されたパッチに更新することで、異なるパッチ内容に簡単に変更することができる。
【０１６７】
また、このようなアクセラレータ１では、一般的にメモリ量を増加すると消費電力が大きくなり、消費電力の効率が悪くなるものの、パッチメモリ96からの読み出し回数が２回であり、制御信号メモリ40の読み出し回数が20000回であることから、パッチメモリ96からの読み出し回数が格段的に少ないことから、当該パッチメモリ96での消費電力をほぼ無視できる程度まで低減させることができる。
【０１６８】
さらに、このようなアクセラレータ１では、制御信号メモリ40の内容をデータパス３による演算処理を実行中においてもパッチ1からパッチ2へ変更することができることから、実質的に制御信号メモリ40のメモリ量を増やしたときと同等の効果を得ることができる。
【０１６９】
なお、本発明は、本実施形態に限定されるものではなく、本発明の要旨の範囲内で種々の変形実施が可能である。例えば、上述した実施の形態においては、融合結線論理制御回路４に設けた複数の異なる機能を実現する回路構成として、IDCT制御回路25、FIR制御回路26又はCRC制御回路27を設けるようにした場合について述べたが、本発明はこれに限らず、例えばFFT制御回路やDCT制御回路等その他種々の回路構成を設けるようにしてもよい。
【０１７０】
また、上述した実施の形態においては、整数線形計画法に基づくパッチコンパイル手法により、制御信号メモリ40に記憶されるパッチの内容を生成するようにした場合について述べたが、本発明はこれに限らず、要は、追加プログラムカウンタに記憶しておくことで機能修正を行えるパッチを生成することができればよく、その他種々の手法によりパッチを生成するようにしてもよい。
【０１７１】
さらに、上述した実施の形態においては、機能修正により性能制約を満たすために必要になるであろう機能ユニットが選定できれば、上述したデータパス合成手法のほかに種々の手法を適用してもよい。
【０１７２】
さらに、上述した実施の形態においては、大小判定部39によってプログラムカウンタパッチ部30からのカウンタデータの値が、最大値ＳF以内であるか否かを判定し、大小判定部39の判定結果を基に、例えば当該カウンタデータの値が最大値ＳF以内のとき、融合結線論理制御回路４からの制御信号をデータパス３へ送出し、一方、当該カウンタデータの値が最大値ＳFを超えているとき、制御信号メモリ40からの制御信号をデータパス３へ送出するようにした場合について述べたが、本発明はこれに限らず、大小判定部39を設けることなく、融合結線論理制御回路４及び制御信号メモリ40が、それぞれプログラムカウンタパッチ部30からのカウンタデータの値について、自己が制御信号を生成すべきカウンタデータであるか否かを判定し、その判定結果に応じてそれぞれ対応する制御信号をデータパス３に送出するようにしてもよい。
【符号の説明】
【０１７３】
１  アクセラレータ
２  制御器
３  データパス
４  融合結線論理制御回路
５  パッチ回路
10  比較器（機能ユニット）
11  ALU1（機能ユニット）
12  ALU2（機能ユニット）
13  乗算器（機能ユニット）
14  バレルシフタ（機能ユニット）
RFI1、LSI1  書き込みポート（機能ユニット）
RFO1、RFO2、CGO1、CGO2、LSO1  読み込みポート（機能ユニット）
40  制御信号メモリ（メモリ）
【図１】
0005626724.tif 000009
【図２】
0005626724.tif 000010
【図３】
0005626724.tif 000011
【図４】
0005626724.tif 000012
【図５】
0005626724.tif 000013
【図６】
0005626724.tif 000014
【図７】
0005626724.tif 000015
【図８】
0005626724.tif 000016
【図９】
0005626724.tif 000017
【図１０】
0005626724.tif 000018
【図１１】
0005626724.tif 000019
【図１２】
0005626724.tif 000020
【図１３】
0005626724.tif 000021
【図１４】
0005626724.tif 000022
【図１５】
0005626724.tif 000023
【図１６】
0005626724.tif 000024
【図１７】
0005626724.tif 000025
【図１８】
0005626724.tif 000026
【図１９】
0005626724.tif 000027
【図２０】
0005626724.tif 000028
【図２１】
0005626724.tif 000029