(57)【要約】【課題】高位合成での処理に適した動作記述モデルを効果的に生成できるようにする。【解決手段】高位設計システム１０１は、回路設計における高位合成ツール１１４に使用される動作記述モデルを生成するものである。配列展開部１０５は、与えられる動作記述モデルの中の分割対象となる処理単位が他の処理単位との間で複数の情報の受け渡しを行う配列を有している場合、当該配列を要素毎に展開する。高位設計システム１０１は、前記展開により生成された複数の処理単位の記述を含む動作記述モデルを生成する。【選択図】      図１
2007164596.tif 000002
【特許請求の範囲】
【請求項１】
回路設計における高位合成システムに使用される動作記述モデルを生成する設計システムであって、
与えられる動作記述モデルの中の分割対象となる処理単位が他の処理単位との間で複数の情報の受け渡しを行う配列を有している場合、当該配列を要素毎に展開する配列展開手段を具備し、
前記配列展開手段により生成された複数の処理単位の記述を含む動作記述モデルを生成することを特徴とする設計システム。
【請求項２】
前記処理単位は、関数であることを特徴とする請求項１記載の設計システム。
【請求項３】
与えられる動作記述モデルの中に、分割対象となる処理単位の分割を指示する記述が含まれていることを特徴とする請求項１記載の設計システム。
【請求項４】
前記配列展開手段により生成された複数の処理単位を接続するための信号線を定義する記述を生成する接続信号生成手段を更に具備し、
前記接続信号生成手段により生成された記述を含む動作記述モデルを生成することを特徴とする請求項１記載の設計システム。
【請求項５】
前記配列展開手段により生成された複数の処理単位をハンドシェイクさせるための通信プロトコルを定義する記述を生成するプロトコル生成手段を更に具備し、
前記プロトコル生成手段により生成された記述を含む動作記述モデルを生成することを特徴とする請求項１記載の設計システム。
【請求項６】
前記配列展開手段により生成された複数の処理単位を含むモジュールもしくはスレッドの記述を生成するモジュール化手段を更に具備し、
前記モジュール化手段により生成された記述を含む動作記述モデルを生成することを特徴とする請求項１記載の設計システム。
【請求項７】
分割対象となる処理単位の中に、当該処理単位に依存する子処理単位が含まれているか否かを判定する依存性判定手段を更に具備し、
前記モジュール化手段は、前記依存性判定手段により前記子処理単位が含まれていると判定された場合、当該子処理単位を別のモジュールにコピーすることを特徴とする請求項６記載の設計システム。
【請求項８】
前記配列展開手段により展開が行われた後の動作記述モデルに含まれる複数のモジュールもしくはスレッドが同一のメモリにアクセスする場合の競合を解決するためのアービターモジュールを定義する記述を生成するアービターモジュール生成手段を更に具備し、
前記アービターモジュール生成手段により生成された記述を含む動作記述モデルを生成することを特徴とする請求項１記載の設計システム。
【請求項９】
前記配列展開手段により展開が行われた後の動作記述モデルに含まれる複数のモジュールもしくはスレッドを動作させるタイミングを制御するための記述を生成する制御記述生成手段を更に具備し、
前記制御記述生成手段により生成された記述を含む動作記述モデルを生成することを特徴とする請求項１記載の設計システム。
【請求項１０】
回路設計における高位合成システムに使用される動作記述モデルを生成する設計方法であって、
与えられる動作記述モデルの中の分割対象となる処理単位が他の処理単位との間で複数の情報の受け渡しを行う配列を有している場合、当該配列を要素毎に展開し、
前記展開により生成された複数の処理単位の記述を含む動作記述モデルを生成することを特徴とする設計方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、回路設計における高位合成システムに使用される動作記述モデルを生成する設計システムおよび設計方法に関する。
【背景技術】
【０００２】
集積回路などの回路設計においては、Ｃベース言語（Ｃ言語又はその機能を拡張した言語）によって回路の動作アルゴリズムが記述された動作記述モデルから、ハードウェア記述言語（HDL: Hardware description language）によってハードウェア回路構成が記述された実装モデルを自動作成する合成技術がよく用いられる。特に抽象度が高い高位記述からの合成を実現する技術は高位合成（High Level Synthesis）と呼ばれ、高位合成ツールとして市販されているものもある。
【０００３】
例えば、特許文献１には、高位合成技術により、並列動作する複数の回路モジュール間のインタフェースとなるモジュール間インタフェースを作成することが開示されている。
【特許文献１】特開２００４−５４６４１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
ところで、高位合成ツールに高位記述を処理させる場合、記述の分割のしかた（個々のモジュールもしくはスレッドの作成のしかた）によって、生成される回路の性能が異なってくる。設計者は記述の分割を何通りも試したいが、手作業で分割方法の変更を行っている限り、試せる分割方法のバリエーションは限られてしまい、結果的に良い回路モデルを生成することができなくなる。このような問題は、特許文献１の技術では、到底解決することができない。
【０００５】
本発明は上記実情に鑑みてなされたものであり、高位合成での処理に適した動作記述モデルを効果的に生成する設計システムおよび設計方法を提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明に係る設計システムは、回路設計における高位合成システムに使用される動作記述モデルを生成する設計システムであって、与えられる動作記述モデルの中の分割対象となる処理単位が他の処理単位との間で複数の情報の受け渡しを行う配列を有している場合、当該配列を要素毎に展開するする配列展開手段を具備し、前記配列展開手段により生成された複数の処理単位の記述を含む動作記述モデルを生成することを特徴とする。
【０００７】
本発明に係る設計方法は、回路設計における高位合成システムに使用される動作記述モデルを生成する設計方法であって、与えられる動作記述モデルの中の分割対象となる処理単位が他の処理単位との間で複数の情報の受け渡しを行う配列を有している場合、当該配列を要素毎に展開し、前記展開により生成された複数の処理単位の記述を含む動作記述モデルを生成することを特徴とする。
【発明の効果】
【０００８】
本発明によれば、高位合成での処理に適した動作記述モデルを効果的に生成することができる。
【発明を実施するための最良の形態】
【０００９】
以下、図面を参照して、本発明の実施形態について説明する。
【００１０】
図１は、本発明の一実施形態に係る高位設計システムを含むシステム全体の構成を示すブロック図である。
【００１１】
図１中には、高位設計システム１０１、第１の記憶媒体１１２、第２の記憶媒体１１３、及び高位合成ツール１１４が示されている。
【００１２】
高位設計システム１０１は、回路設計において特に抽象度が高い高位記述からの合成処理を行う高位合成システム（ここでは、高位合成ツール１１４）での処理に適した動作記述モデルを自動生成するアプリケーションプログラムに相当し、プロセッサにより実行されて動作する。この高位設計システム１０１は、第１の記憶媒体１１２から動作記述モデルを読み出し、当該動作記述モデルを調整してから第２の記憶媒体１１３へ書き込む。
【００１３】
上記高位設計システム１０１は、特に、第１の記憶媒体１１２から得られる動作記述モデルの中の分割対象となる処理単位（本実施形態では、処理単位は、モジュール内の関数であるものとする。）が他の処理単位との間で複数の情報の受け渡しを行う配列(array)を有している場合に、当該配列を要素毎に展開する（すなわち、関数に対する分割処理を行う）。ここでいう配列とは、同じ型のデータを寄せ集めてひとかたまりにして扱えるようにしたものであり、複数の配列要素を有する。例えばＣ言語プログラミングにおいて「int a[10];」と宣言されたint型（整数型）の配列がある場合、その配列要素は、a[0]、a[1]、…、a[9]のそれぞれに該当する。括弧[]で囲った部分は、配列添字演算子(array subscript operator)と呼ばれる。
【００１４】
第１の記憶媒体１１２は、Ｃベース言語（Ｃ言語又はその機能を拡張した言語）によって回路の動作アルゴリズムがあらかじめ設計者により記述された動作記述モデルを記憶している。当該動作記述モデルの中には、各種のモジュール（プログラムをいくつかの独立した機能単位に分割したもの）やスレッド（内部タスクをいくつかに分割したもの）が記述されている。この動作記述モデルは、高位合成ツール１１４に直接使用することができるが、本実施形態においては高位合成ツール１１４に使用する前に高位設計システム１０１に与えられる。動作記述モデルの中に、分割対象となる処理単位の分割を指示する指示記述（例えば特定のフォーマットのコメントやプラグマ記述）が含まれていてもよい。
【００１５】
第２の記憶媒体１１３は、高位設計システム１０１により分割処理された後の高位の動作記述モデルを記憶するものである。
【００１６】
高位合成ツール１１４は、Ｃベース言語（Ｃ言語又はその機能を拡張した言語）によって回路の動作アルゴリズムが記述された動作記述モデルから、ハードウェア記述言語によってハードウェア回路構成が記述された実装モデルを自動作成するための市販のアプリケーションソフトウェアに相当し、プロセッサにより実行されて動作する。この高位合成ツール１１４は、本実施形態においては第２の記憶媒体１１３に記憶されている分割処理後の動作記述モデルに対して高位合成を行う。
【００１７】
上記高位設計システム１０１は、分割対象関数指示受理部１０２、所属モジュール検出部１０３、関数インタフェース解析部１０４、配列展開部１０５、接続信号生成部１０６、プロトコル生成部１０７、関数のスレッド化・モジュール化部１０８、関数の依存性判定部１０９、アービターモジュール生成部１１０、および制御記述生成部１１１、といった各種の機能を備えている。
【００１８】
分割対象関数指示受理部１０２は、第１の記憶媒体１１２から得られる動作記述モデルの高位記述に関して、どの部分を別のモジュールやスレッドとして分割するのか、という設計者の指示を受け付ける機能である。例えば高位記述中に前述の指示記述が埋め込まれている場合、それを字句・構文解析して指示内容を得ることができるようになっている。
【００１９】
所属モジュール検出部１０３は、分割対象関数指示受理部１０２によって指示された分割対象の関数が、どのモジュールに所属するのかを検出する機能である。これは、第１の記憶媒体１１２から得られる動作記述モデルの高位記述を構文解析する際、指示されている分割対象関数がどのモジュールのものであるかを構文解析ツリーから読み取ることができるようになっている。
【００２０】
関数インタフェース解析部１０４は、分割対象関数指示受理部１０２によって指示された分割対象の関数の引数(parameter, argument)および戻り値(return value)を解析する機能である。これら引数や戻り値といったインタフェースは分割処理後、信号やポートとして実現されることになるため、何ビットの情報を何個やりとりすることになるのか、引数の値を利用するだけなのか引数に値を書き込んで返すのか、スカラー値なのか配列なのか、などを解析する。スカラーか配列か、という情報は、後述する配列展開部１０５を実行するかどうかの判定に利用される。それ以外の情報は、後述する接続信号生成部１０６で利用される。
【００２１】
配列展開部１０５は、分割対象関数指示受理部１０２によって指示された関数のインタフェースが配列を含んでいる場合に実行される機能である。例えばint型で要素数が１０個の配列であれば、これをint型のスカラーの引数１０個に、内部的に展開するか、またはそのような情報を生成しておく。int型はＣ言語上ではスカラー扱いだが、信号やポートを形成する場合には３２ビットのベクトル信号としなければならず、int型の配列をそのまま市販の高位合成ツール１１４に入力できるような「配列型のポート」などにはできないからである。配列の要素を１つずつ、信号やポートとして実装しなければならない。例えば、図２に示されるように、分割対象の関数func1がint型の配列a[3]を有している場合、当該配列a[3]を３つの要素int a0, int a1, int a2に展開する。
【００２２】
接続信号生成部１０６は、これまでに解析された情報を用いて分割処理後の個々のモジュールやスレッドを接続するための信号線やポートを定義する記述を生成する機能である。モジュール分割であれば信号線とポートの記述を生成しなければならず、スレッド分割であれば信号線の記述の生成だけでよく、ポートの記述は不要である。例えば、図３に示されるモジュール５０の分割の場合、配列に対応する入力側信号線５１，ポート５１Ａ，５１Ｂ，５１Ｃや、スカラーに対応する入力側信号線５２，ポート５２Ａや、スカラーに対応する出力側信号線５３，ポート５３Ａや、配列に対応する出力側信号線５４，ポート５４Ａ，５４Ｂ，５４Ｃ、にそれぞれ対応する記述を生成する。この他に分割処理後のモジュールの開始や終了を示すスタートやバリッド、初期状態に戻すためのリセットなどの制御用信号やポートの記述を生成する。
【００２３】
プロトコル生成部１０７は、分割された個々のモジュールやスレッドをハンドシェイクさせるための通信プロトコルを定義する記述を生成する機能である。具体的にはスタート信号が来るまで動作を待機したり、分割されたモジュールやスレッドが計算を終えたらバリッド信号を立てたり、リセット信号が来たらモジュールやスレッドの先頭に戻るような記述を生成する。
【００２４】
関数のスレッド化・モジュール化部１０８は、これまでに得られた情報をもとに、分割対象関数指示受理部１０２によって指示された分割対象の関数をラップするモジュールまたはスレッドを定義する記述を生成する機能である。
【００２５】
関数の依存性判定部１０９は、分割対象となる関数の中に、当該関数に依存する子関数が含まれているか否かを判定する機能である。この関数の依存性判定部１０９は、分割対象関数指示受理部１０２によって指示された分割対象の関数を別モジュールにする場合に必要な機能である。例えば、図４に示されるように、分割対象の関数func1が、子関数func2を持っていた場合、その子関数も別モジュールにコピーしなければならない。そのため、関数の依存性判定部１０９は、関数間の依存性を判定し、関数の呼び出し関係を解析することができるようになっている。なお、別モジュールへのコピー処理は、例えば、前述した関数のスレッド化・モジュール化部１０８が実行するようにしてもよい。
【００２６】
アービターモジュール生成部１１０は、関数が分割された後の複数のモジュールまたはスレッドが、同一のメモリにアクセスすることになる場合の競合を解決するためのアービターモジュールを定義する記述を生成する機能である。例えば、図５に示されるように、関数func1を有するモジュールと関数func3を有するモジュールとが同一のメモリ９０に対して同一のタイミングでアクセスする場合を考える。図示の例では、関数func1を有するモジュールがメモリ９０上の記憶領域９０Ａへのアクセスを要求し、関数func3を有するモジュールがメモリ９０上の記憶領域９０Ａへのアクセスを要求している。しかし、同一のメモリ９０に対する複数のアクセスを同時に受け入れることはできない。このようなアクセスの競合が発生した場合、アービターモジュールはこれらの調停を行う。高位記述において、高位合成後にメモリが使用されることになるかどうかは、配列のデータへのアクセスが定義されているかどうかに基づいて判定すればよい。Ｃ言語ならば、通常は関数の引数に配列があるかどうかで判別できる。SystemCならば、それに加えてモジュールクラスのメンバに配列型の変数があるかどうかと、それを分割対象関数が使用しているかどうかを追加で解析すればよい。メモリ（配列型変数）を使用している場合は、それをアービターモジュール内に置き、分割処理後の高位記述はアービターモジュールの配列を使用するように構成する。アービターモジュールは複数のモジュールまたはスレッドから同一の配列にアクセスがある場合には、どちらか一方しか採用しないような動作を定義すればよい。具体的にどのようにアクセスを制御するかは、採用するアービトレーションアルゴリズムに依存する。
【００２７】
制御記述生成部１１１は、分割されたモジュールやスレッドを動作させるタイミングを制御する記述を生成する機能である。具体的には、分割対象関数の呼び出し部分を、分割されたモジュールやスレッドを起動するためのスタート信号を立て、結果のバリッドを待つ記述に置き換えるようにすればよい。
【００２８】
次に、図１を参照しつつ、図６のフローチャートを参照して、高位設計システム１０１の動作の流れを説明する。
【００２９】
まず、分割対象関数指示受理部１０２は、設計者が分割したい関数がどれかを示す指示を受理する（ステップＳ１１）。これにより、所属モジュール検出部１０３は、分割対象として指示された関数が、どのモジュールに所属しているのかを検出する（ステップＳ１２）。また、関数インタフェース解析部１０４は、分割対象として指示された関数のインタフェース（引数と戻り値）を解析し（ステップＳ１３）、当該インタフェースが配列を含んでいるか否かを判定する（ステップＳ１４）。
【００３０】
ここで、インタフェースが配列を含んでいる場合、配列展開部１０５は、そのインタフェースを要素毎に展開する分割処理を実行する（ステップＳ１５）。一方、インタフェースが配列を含んでいなければ、ステップＳ１５の処理はスキップする。
【００３１】
そして、接続信号生成部１０６は、分割処理後のモジュールやスレッドを、呼び出し元と接続するための信号線やポートを定義する記述を生成する（ステップＳ１６）。また、プロトコル生成部１０７は、信号の送受信用のハンドシェイクプロトコルを生成する（ステップＳ１７）。このとき、スタート信号（ポート）なども生成する。さらに、関数のスレッド化・モジュール化部１０８は、分割指示された関数（の内容）を、別モジュールまたは別スレッドに割り付ける（ステップＳ１８）。
【００３２】
関数の依存性判定部１０９は、分割指示された関数が子関数を含んでいるかどうかを解析する（ステップＳ１９）。ここで、子関数を含んでいれば、例えば関数のスレッド化・モジュール化部１０８が子関数を分割処理後の別モジュールにコピーする（ステップＳ２０）。一方、子関数を含んでいなければ、ステップＳ２０の処理をスキップする。
【００３３】
また、関数の依存性判定部１０９は、分割処理後のモジュールやスレッドと、それを呼び出す側との両方にアクセスされるメモリ（配列型の変数）があるかどうかを解析する（ステップＳ２１）。ある場合には、アービターモジュール生成部１１０が、メモリアクセスを調停するためのアービターモジュールを生成する（ステップＳ２２）。一方、無い場合には、ステップＳ２２の処理をスキップする。
【００３４】
そして、制御記述生成部１１１は、分割処理されたモジュールやスレッドの起動・停止を制御するためのモジュールを生成する（ステップＳ２３）。
【００３５】
このように分割処理等を通じて形成された各種のモジュール等を含む動作記述モデルが高位設計システム１０１から出力されると、記憶媒体１１３に記憶された後、高位合成ツール１１４において使用されることになる。
【００３６】
このように本実施形態によれば、設計者は高位設計システム１０１に入力するための動作記述モデルの高位記述を自在に変えて分割を何通りも試すことができ、試した数だけ高位設計システム１０１から、高位合成ツールでの処理に適した動作記述モデルの高位記述が自動的に生成されるため、設計者の負担を大幅に軽減することができる。また、このような高位設計システム１０１を利用すれば、多くの分割方法のバリエーションを試すことができるため、結果的に最適の回路を生成することが可能となる。
【００３７】
なお、上記実施形態では分割対象の処理単位が関数である場合を例示したが、関数ではなく、高位記述のある範囲を分割対象としてもよい。その場合、指定された範囲が、その範囲外と情報をやりとりする変数を検出し、内部的に関数化してインタフェースを検出する機能を実現する構成要素や処理ステップを追加すればよい。
【００３８】
上述した実施形態で述べた本発明に係る各種の処理手順は、コンピュータプログラムとして、コンピュータにより読み取り可能な記憶媒体（例えば磁気ディスク，光ディスク，半導体メモリ）に記憶させておき、必要に応じてそれをプロセッサにより読み出して実行することができる。また、このようなコンピュータプログラムは、通信媒体を介してあるコンピュータから他のコンピュータに伝送することにより配布することも可能である。
【００３９】
本発明は上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。
【図面の簡単な説明】
【００４０】
【図１】本発明の一実施形態に係る高位設計システムを含むシステム全体の構成を示すブロック図。
【図２】高位記述中の関数が配列を有している場合の例を説明するための図。
【図３】信号線やポートを定義する記述の生成について説明するための図。
【図４】ある関数が子関数を有している場合の例を説明するための図。
【図５】同一のメモリにアクセスするモジュールの調停について説明するための図。
【図６】高位設計システムの動作の流れを説明するためのフローチャート。
【符号の説明】
【００４１】
１０１…高位設計システム、１０２…分割対象関数指示受理部、１０３…所属モジュール検出部、１０４…関数インタフェース解析部、１０５…配列展開部、１０６…接続信号生成部、１０７…プロトコル生成部、１０８…関数のスレッド化・モジュール化部、１０９…関数の依存性判定部、１１０…アービターモジュール生成部、１１１…制御記述生成部、１１２…第１の記憶媒体、１１３…第２の記憶媒体、１１４…高位合成ツール。
【図１】
2007164596.tif 000003
【図２】
2007164596.tif 000004
【図３】
2007164596.tif 000005
【図４】
2007164596.tif 000006
【図５】
2007164596.tif 000007
【図６】
2007164596.tif 000008