(57)【要約】【課題】ソフトウエアで具体化した処理の一部を、ハードウエア合成系を使用してハードウエア化する際に、変数の数が大規模な対象に対しても、ハードウエア合成系を有効に利用できようにする。【解決手段】ソフトウエアに残す処理とハードウエア化する処理との間で受け渡される変数のセットアップタイムを生成するとき、前記ソフトウエアの中の前記ハードウエア化する記述部分を指定し、該記述部分において参照している変数を列挙した変数リストを生成し、前記ソフトウエアをコンパイルした機械語命令列の追跡によるアドレスが前記変数リストのアドレスと一致するとき、当該アドレスの変数に前記追跡のセットアップタイムを記録更新し、各変数のセットアップタイムを記録更新した変数リストを出力する。【選択図】図５
2009176077.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウエアで具体化した処理の一部を、ハードウエア合成系を使用してハードウエア化する際に、ソフトウエアに残す処理とハードウエア化する処理との間で受け渡される変数のセットアップタイムを生成するセットアップタイム生成方法であって、
前記ソフトウエアの中の前記ハードウエア化する記述部分を指定し、該記述部分において参照している変数を列挙した変数リストを生成し、前記ソフトウエアをコンパイルした機械語命令列の追跡によるアドレスが前記変数リストのアドレスと一致するとき、当該アドレスの変数に前記追跡のセットアップタイムを記録更新し、各変数のセットアップタイムを記録更新した変数リストを出力することを特徴とするセットアップタイム生成方法。
【請求項２】
請求項１に記載のセットアップタイム生成方法において、
前記各変数のセットアップタイムは、前記ハードウエア化に適した様式で出力されることを特徴とするセットアップタイム生成方法。
【請求項３】
請求項１又は２に記載のセットアップタイム生成方法において、
前記ソフトウエアに条件分岐があるとき、当該条件成立時のセットアップタイムと不成立時のセットアップタイムを記録更新した変数リストを生成することを特徴とするセットアップタイム生成方法。
【請求項４】
ソフトウエアで具体化した処理の一部を、ハードウエア合成系を使用してハードウエア化する際に、ソフトウエアに残す処理とハードウエア化する処理との間で受け渡される変数のセットアップタイムを生成するセットアップタイム生成装置であって、
前記ソフトウエアを機械語に変換して機械語命令列を生成するコンパイラと、
前記ソフトウエアの中の前記ハードウエア化する処理の記述部分において参照している変数を列挙した変数リストを生成する変数リスト生成部と、
前記機械語命令列の中の命令語を追跡する機械語命令追跡部と、
該機械語命令追跡部が命令語の追跡を１ステップ進める毎に時刻を更新する時刻変数管理部と、
前記変数リスト生成部で生成された変数リストを格納し、前記時刻変数管理部からの現在の時刻情報と前記機械語命令追跡部からの変数のアドレス値を伴う通知とを受け取り、前記変数リストの中に当該アドレス値を持つエントリーがあるとき、前記時刻情報を前記変数のセットアップタイムとして、前記変数リストのセットアップタイムを記録更新する変数リスト管理部と、
を備えることを特徴とするセットアップタイム生成装置。
【請求項５】
請求項４に記載のセットアップタイム生成装置において、
前記変数リスト管理部の各変数のセットアップタイムを最も早く値の決まる変数のセットアップタイムとの相対的な時間で定めた様式に変換して出力する出力管理部を備えることを特徴とするセットアップタイム生成装置。
【請求項６】
請求項４又は５に記載のセットアップタイム生成装置において、
前記機械語命令追跡部が命令語の追跡中に条件分岐を検出したとき、該条件分岐が成立した場合の変数のセットアップタイムを戻り値として前記機械語命令追跡部に戻す再帰処理管理部を備え、
前記機械語命令追跡部は、前記再帰処理管理部からの前記戻り値を受け取り、前記条件分岐の成立条件の識別子を含む変数のアドレス値を伴う通知を前記変数リスト管理部に送るとともに、前記条件分岐が不成立の場合の変数のアドレス値を伴う通知を前記変数リスト管理部に送り、
前記変数リスト管理部は、変数について、条件が成立した場合と成立しなかった場合の両方のセットアップタイムを変数リストに記録更新する、
ことを特徴とするセットアップタイム生成装置。
【請求項７】
ソフトウエアで具体化した処理の一部を、ハードウエア合成系を使用してハードウエア化する際に、ソフトウエアに残す処理とハードウエア化する処理との間で受け渡される変数のセットアップタイムを生成するプログラムであって、
前記ソフトウエアの中の前記ハードウエア化する記述部分を指定するステップと、
該記述部分において参照している変数を列挙した変数リストを生成するステップと、
前記ソフトウエアをコンパイルした機械語命令列の命令語を追跡するステップと、
該追跡によるアドレスが前記変数リストのアドレスと一致するとき、当該アドレスの変数に前記追跡の時刻をセットアップタイムとして記録更新するステップと、
各変数のセットアップタイムを記録した変数リストを出力するステップと、
を備えることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、システムの動作をＣ言語などのソフトウエア記述によって具体化したものについて、その処理の一部をハードウエア化する際のセットアップタイム生成方法、装置、およびプログラムに関するものである。
【背景技術】
【０００２】
ソフトウエア記述によって具体化したものについて、その処理の一部をハードウエア化する場合、従来では、次の手順で行われている（例えば、非特許文献１参照）。
(1)ソフトウエア言語での記述：システムの動作をまねるソフトウエア記述（ソフトウエソースコード、以下「プログラム」と呼ぶこともある）を作成する。
(2)ハードウエア化する箇所の選定：上記プログラムの中で、既存のプロセッサではなく、専用のハードウエアに処理させるところを考慮しつつ、その専用のハードウエアの概略設計（アーキテクチャの作成）を行う。
(3)ソフトウエア言語での記述の分割変更：プロセッサに行わせるソフトウエア処理と専用のハードウエアに行わせる処理との間で情報を受け渡すための手順を決め、プログラムの記述を書き改める。
(4)ソフトウエアコンパイラの使用：プログラムを機械語にコンパイルし、プロセッサを模擬するシステム、もしくは実際のプロセッサの命令メモリに記憶させておく。
(5)ハードウエア合成（動作合成）：アーキテクチャを使って処理の手順を実行する機構と、ソフトウエアに行わせている処理との間で情報を受け渡しするための手順を実行する機構を作り出す。
(6)結合検証：プログラムをコンパイルして生成した機械語命令列を、プロセッサを模擬するシステム、もしくは、実際のプロセッサの命令メモリに記憶させておき、ハードウエア合成系から得たハードウエアとの接続を模擬、もしくは、実際に接続して、所望の動作と性能を確認する。
【０００３】
以上の手順によって、ソフトウエア処理の一部を処理する専用ハードウエアを設計し、ソフトウエアと組み合わせて、機能の確認や性能の評価をすることができる。
【非特許文献１】黒坂  他、「システムレベル設計フローと設計言語」、情報処理、４５巻５号、４５６−４６３頁、２００４年、５月（特に４６２頁の図８）
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかし、上記手順では、その過程で次のような問題が生じていた。すなわち、ハードウエア化しようとする処理が大規模のとき、ハードウエアに処理させる変数（ハードウエア合成系として取り扱うレジスタの数）が非常に大きくなると、スケジューリング（ハードウエアがレジスタの値を取り出したり書き換えたりする時刻を計画すること）を検討する組み合わせが非常に大きくなり、ハードウエア合成系の処理において、ムダな合成候補のための時間が多くなる。
【０００５】
したがって、ハードウエア化しようとする処理をハードウエア合成系にて行うことをあきらめ、設計者が分析、設計しているが、間違いが入る危険や、検証すべき箇所を指定するための手間が増大していた。特に、ハードウエア合成系の処理対象における、ソフトウエアとの情報の受け渡しの仕組みについては、ほとんど手作業や設計者の創意によるものとなっており、上記のリスクと手間が大きかった。
【０００６】
このように、ハードウエア合成系の処理対象における、ソフトウエアとの情報の受け渡しの仕組みにおいて、変数・レジスタの独立個数が非常に多い状況においては、ハードウエアが変数を利用できるようになる（参照の準備ができる、もしくは、変更してよい）時間的な情報についての分析結果をハードウエア合成系に提供できなかった。
【０００７】
本発明の目的は、ソフトウエアで具体化された処理の一部をハードウエア化する際に、ソフトウエアに残す処理とハードウエア化する処理との間で受け渡される変数のセットアップタイムを生成できるようにして、変数の数が大規模な対象に対しても、ハードウエア合成系を有効に利用できようにしたセットアップタイム生成方法、装置、およびプログラムを提供することである。
【課題を解決するための手段】
【０００８】
上記目的を達成するために、請求項１にかかる発明のセットアップタイム生成方法は、ソフトウエアで具体化した処理の一部を、ハードウエア合成系を使用してハードウエア化する際に、ソフトウエアに残す処理とハードウエア化する処理との間で受け渡される変数のセットアップタイムを生成するセットアップタイム生成方法であって、前記ソフトウエアの中の前記ハードウエア化する記述部分を指定し、該記述部分において参照している変数を列挙した変数リストを生成し、前記ソフトウエアをコンパイルした機械語命令列の追跡によるアドレスが前記変数リストのアドレスと一致するとき、当該アドレスの変数に前記追跡のセットアップタイムを記録更新し、各変数のセットアップタイムを記録更新した変数リストを出力することを特徴とする。
請求項２にかかる発明は、請求項１に記載のセットアップタイム生成方法において、前記各変数のセットアップタイムは、前記ハードウエア化に適した様式で出力されることを特徴とする。
請求項３にかかる発明は、請求項１又は２に記載のセットアップタイム生成方法において、前記ソフトウエアに条件分岐があるとき、当該条件成立時のセットアップタイムと不成立時のセットアップタイムを記録更新した変数リストを生成することを特徴とする。
請求項４にかかる発明のセットアップタイム生成装置は、ソフトウエアで具体化した処理の一部を、ハードウエア合成系を使用してハードウエア化する際に、ソフトウエアに残す処理とハードウエア化する処理との間で受け渡される変数のセットアップタイムを生成するセットアップタイム生成装置であって、前記ソフトウエアを機械語に変換して機械語命令列を生成するコンパイラと、前記ソフトウエアの中の前記ハードウエア化する処理の記述部分において参照している変数を列挙した変数リストを生成する変数リスト生成部と、前記機械語命令列の中の命令語を追跡する機械語命令追跡部と、該機械語命令追跡部が命令語の追跡を１ステップ進める毎に時刻を更新する時刻変数管理部と、前記変数リスト生成部で生成された変数リストを格納し、前記時刻変数管理部からの現在の時刻情報と前記機械語命令追跡部からの変数のアドレス値を伴う通知とを受け取り、前記変数リストの中に当該アドレス値を持つエントリーがあるとき、前記時刻情報を前記変数のセットアップタイムとして、前記変数リストのセットアップタイムを記録更新する変数リスト管理部と、を備えることを特徴とする。
請求項５にかかる発明は、請求項４に記載のセットアップタイム生成装置において、前記変数リスト管理部の各変数のセットアップタイムを最も早く値の決まる変数のセットアップタイムとの相対的な時間で定めた様式に変換して出力する出力管理部を備えることを特徴とする。
請求項６にかかる発明は、請求項４又は５に記載のセットアップタイム生成装置において、前記機械語命令追跡部が命令語の追跡中に条件分岐を検出したとき、該条件分岐が成立した場合の変数のセットアップタイムを戻り値として前記機械語命令追跡部に戻す再帰処理管理部を備え、前記機械語命令追跡部は、前記再帰処理管理部からの前記戻り値を受け取り、前記条件分岐の成立条件の識別子を含む変数のアドレス値を伴う通知を前記変数リスト管理部に送るとともに、前記条件分岐が不成立の場合の変数のアドレス値を伴う通知を前記変数リスト管理部に送り、前記変数リスト管理部は、変数について、条件が成立した場合と成立しなかった場合の両方のセットアップタイムを変数リストに記録更新する、ことを特徴とする。
請求項７にかかる発明のプログラムは、ソフトウエアで具体化した処理の一部を、ハードウエア合成系を使用してハードウエア化する際に、ソフトウエアに残す処理とハードウエア化する処理との間で受け渡される変数のセットアップタイムを生成するプログラムであって、前記ソフトウエアの中の前記ハードウエア化する記述部分を指定するステップと、該記述部分において参照している変数を列挙した変数リストを生成するステップと、前記ソフトウエアをコンパイルした機械語命令列の命令語を追跡するステップと、該追跡によるアドレスが前記変数リストのアドレスと一致するとき、当該アドレスの変数に前記追跡の時刻をセットアップタイムとして記録更新するステップと、各変数のセットアップタイムを記録した変数リストを出力するステップと、を備えることを特徴とする。
【発明の効果】
【０００９】
本発明によれば、ソフトウエアで具体化された処理の一部をハードウエア化する際に、ソフトウエアに残す処理とハードウエア化する処理との間で受け渡される変数のセットアップタイムを生成できるので、そのセットアップタイムを、ハードウエア合成において、レジスタを使用する順序を計画する処理で既知の条件として使うことができるようになるため、変数の数が１０００以上という大規模な対象に対しても、ハードウエア合成系を有効に利用できる利点がある。
【発明を実施するための最良の形態】
【００１０】
本発明では、ソフトウエアによって逐次的に行う処理順序を分析して、ハードウエア合成系に提供する。具体的には、ソフトウエア記述（ハードウエアが利用する変数）とコンパイラが最適化／合成した機械語命令実行順序とから、変数のそれぞれが持つセットアップタイムを導き出し、それを、ハードウエア合成系に提供する。用語の都合上、まず、この方法が、ハードウエア合成系にもたらす効果を説明する。
【００１１】
以下は、一般的にハードウエア合成系が行う処理である。まず、変数に対する記憶要素（レジスタ）の割り当てを行う。次に、演算器とレジスタの使用順序の計画を行う。その際、演算器の種類と個数、レジスタの個数などの制約条件を満たすようにする。次に、所定の記述言語によるハードウエア記述の出力を行う。
【００１２】
ここで、例として、変数ｘ，ｙ，ｚについて、「ｘ＋ｙ＋ｚ」の演算をハードウエアで処理させる場合について、図１を参照して説明する。セットアップタイムが不明のままである場合は、変数を格納するレジスタとしては、変数ｘ、ｙ、ｚの格納用と演算結果格納用にそれぞれ１個使用するので、計４個のレジスタＲ１〜Ｒ４が必要であるとして合成し、演算手順についても、
（ｘ＋ｙ）＋ｚ
（ｘ＋ｚ）＋ｙ
（ｙ＋ｚ）＋ｘ
の３通りの演算に対して、ハードウエアを合成候補する。図１(a)にこの３通りの候補を示した。００００，０００１，０００２，０００３等はレジスタＲ１〜Ｒ４のアドレスである。これらの候補に対する比較評価を、設計工程で行うことになる。
【００１３】
この例では、３候補とも特に得失はなく、どれを選択してもよいことは自明である。しかし、一般的な合成対象はもっと大きく、実行順序の制御も関係するため、一般的に、変数の数が大きくなればなるほど、候補の数が爆発的に多くなり、ハードウエア合成系が処理できなくなる。また、仮にある程度処理できたとしても、その後の性能評価の手間が現実に耐えないほど多くなる。
【００１４】
これを避けるためには、検討に値しないムダなハードウエア候補を発生させないようにすればよく、そのためには、既存のハードウエア合成系が、各種の拘束条件や既知の外界の条件を考慮に入れることができるようになっていることを利用すればよい。
【００１５】
しかし、この条件を与えるためには、あらかじめハードウエアをかなり詳細に決めておかねばならないとされており（非特許文献１のアーキテクチャ設計：図８）、これを設計者が行っていたが、ソフトウエアとハードウエアとがやり取りをする変数を決定し、ソフトウエア側からのＡＰＩ（Application Program Interface)を決定した後、ハードウエア側の設計を検討していた。この際、どのようにレジスタを用意し、用意したレジスタをどのような順序で使って処理を進めるかについても、設計者の経験に基づいて決定してきていた。
【００１６】
一方、変数ｘ，ｙ，ｚについて、それぞれのセットアップタイムが、１，２，３であるといったことが、この発明により提供できるわけだが、ハードウエア合成系は、これを計画の拘束条件として使って、図１(b)に示すように、変数ｘ，ｙ用、演算結果用にそれぞれ１個で、合計３個のレジスタＲ４〜Ｒ６を使用する。このとき、変数ｚは変数ｘ又はｙ用のレジスタと兼用する。演算手順は「ｘ＋ｙ」の演算を行ってその結果を一時的に演算結果用のレジスタＲ６に格納し、つぎに演算結果に変数ｚを加算する。このようにすると、ただ一通りのみのハードウエアを生成することができる。このようにして、図１(b)の手法によれば、図１(a)の手法にくらべて数分の１の手間でハードウエアを生成することができる。
【００１７】
上記の例でみられる組合せの数は、一般に変数の種類が多くなると急激に増えることから、現実的な課題では非常に大きな差となる。例えば、上記の類推として、変数を４つにした場合は６：１になり、５つにした場合は６０：１になり、図１(b)による手法の方が図１(a)による数より、はるかに少なくなることが分かる。なお、図２では、(a)に変数のセットアップタイムを考慮せずに合成する手法を、(b)に変数のセットアップタイムを考慮して合成する手法を、いずれも時刻０，１，２，３で行う場合について示した。
【００１８】
＜変数のセットアップタイム＞
ハードウエアでの処理に利用する変数の値を作り出すのはソフトウエア処理であるが、ある時点以降はその変数の値を変更しなくなる時刻が存在する。変数は、あらかじめ備え付けられた変数レジスタへの転送の機構と手順にしたがって、ハードウエアであるレジスタにビット値として格納されるが、この格納時刻を、変数のセットアップタイムということにする。セットアップタイムを一般化すると、いくつかの論理条件のついた変数になるが、一般化した場合も含めて、ここではセットアップタイムと表現する。
【００１９】
＜変数のレジスタへの転送＞
変数のレジスタへの転送は、一般に次のような方法で行う。ゲストハードウエアのレジスタを、ホストプロセッサのバスに接続しておき、ホストプロセッサが、あるアドレスへの変数の書き込みを実施することにより、ゲストハードウエアのレジスタに、その変数の書き込みが行える機構を構成しておく。プログラムの処理により変数を書き込むときは、ゲストハードウエアのレジスタのアドレス領域に明示的に書き込む。
【００２０】
＜ソフトウエアの一部をハードウエア合成するための処理の概略＞
図３に処理の全体のフローチャートを示す。まず、前処理ブロック１００で示すように、元となるプログラムの中で、ハードウエア化するプログラムの部分を決め、ハードウエアで参照や更新を行う変数を識別できるように前処理をしておく。その方法としては、(1)事前にプログラムに明示記述する、(2)プログラムを解析してハードウエア化する部分で参照および更新する変数に対して識別用の情報を付与する、などがある。例えば、(2)の例では、Ｃ言語等で記述されたソフトウエアに、ハードウエア化する処理の記述部分を指定しておく。この指定は、実行には影響しない説明文であるコメントの文法構造（例えばＣ言語では、／＊と＊／でコメント部分を囲む）を利用すると、従来のコンパイラを本技術の準備（前処理１００）に用いるコンパイラとして、そのまま使用できる。これを、ソフトウエアのコンパイラに処理させるが、コンパイラに上記の識別をつけた変数をリストアップする機能を付加しておく。そして、得られたリストと機械語命令列をもとに、次に、本処理ブロック２００で示すように、セットアップタイム分析処理を行って、各変数のセットアップタイムを求め、変数リストを生成する。その後に、後処理ブロック３００で示すように、そのセットアップタイムを制約として、ハードウエア合成を行う。
【００２１】
＜セットアップタイム分析処理（実施例１）＞
図４に、本発明のセットアップタイムの分析処理２００を行う装置構成を示す。コンパイラ２１１は、Ｃ言語等で記述され且つ前記した前処理１００を施された「ソフトウエア」を取り込んで械語命令に変換し、これをメモリの「機械語命令列」に格納する。
【００２２】
変数リスト生成部２１２は、「ソフトウエア」が供給されると、ハードウエア化する部分の記述部分を検出し、その記述において参照している変数を列挙した「変数リスト」を生成する。「変数リスト」の構造は、図６のブロック２２１に示すように、その変数の値を格納するメモリのアドレス（例えば、0xc0000000）と変数名（例えば、buff[0]）とを組として持ち、その変数に対するセットアップタイムを格納するフィールドを有するレコードをもつデータベースである。変数リスト生成部２１２が「変数リスト」の生成を完了すると、「初期生成完了」の指令を時刻変数管理部２１３に送り、時刻変数管理部２１３が時刻変数ｔの値をｔ＝０にする。
【００２３】
変数リスト管理部２１４は、生成された「変数リスト」を格納し、時刻変数管理部２１３からの現在の「時刻情報」と、機械語命令追跡部２１５からの「変数書込み検出通知」を受けとって、「変数リスト」のセットアップタイムを記録更新していく機能と、出力管理部２１６からの「問合せ」に対する「応答」として、セットアップタイムを記録した「変数リスト」を出力管理部２１６に送出する機能を有する。この変数リスト管理部２１４では、機械語命令追跡部２１５から、変数のアドレスの値を伴った「変数書込み検出通知」を受けとると、「変数リスト」の中に該当アドレス値をもつエントリーがある否かを確認し、ある場合には、時刻変数管理部３からの「時刻情報」を、「変数リスト」の当該アドレス値の変数のセットアップタイムのフィールドの値として記録更新する。
【００２４】
機械語命令追跡部２１５は、「機械語命令列」の中の命令語を追跡して、メモリ領域への書込みを行っている命令を検出し、そのアドレス値をもって、「変数書込み検出通知」を変数リスト管理部２１４に送り出す。この機械語命令追跡部２１５では、命令を擬似的に実行することにより、命令の追跡を１ステップ進める毎に、時刻変数を増加させるために、時刻変数管理部２１３に対して、「時刻更新」の指令を送る。また、「機械語命令列」と「ソフトウエア」の記述から、ハードウエア合成する処理の呼び出しを行う命令の格納されたアドレスを予め用意しており、命令の追跡が進み、そのアドレスに到達したか否かを検知して、到達した場合には、処理の「完了通知」を出力管理部２１６に送る。
【００２５】
なお、変形例として、予め、「変数リスト」を機械語命令追跡部２１５からも参照可能としておき、アドレス値から変数名への翻訳は、この機械語命令追跡部２１５で行っても良い。この場合は、機械語命令追跡部２１５で「変数リスト」に登録されている変数に当たるメモリ領域への書込みを行っている命令を検出する。検出した場合に、機械語命令追跡部２１５が変数名を伴った「変数書込み検出通知」を行い、変数リスト管理部２１４がセットアップタイムのフィールドの更新を行う。
【００２６】
また、機械語命令追跡部２１５は、「機械語命令列」の全部ではなく、一部を処理対象とすることによって、処理の時間を短くすることもできる。その処理方法は、ハードウエア化する処理の呼び出しを行う命令の格納されたアドレスを予め用意してあるので、そのアドレスから命令の実行を逆さにのぼり、「変数リスト」のすべての変数に対しての書込みを見つけたら処理を終えるか、あるいは、予め外部から指定された限界アドレスに到達したところで処理を終えるというものである。また、後ほど述べるが、セットアップタイムのフィールドについては、成立する条件に応じて複数を持つ実現例もあり得る。
【００２７】
出力管理部２１６は、機械語命令追跡部２１５からの「完了通知」を受けると、変数リスト管理部２１４に「変数リスト」に登録されている変数に対して、セットアップタイムと組にしたレコードをすべて引き出し、ハードウエア合成系の仕様に合わせた様式、例えば、「最も速く値の決まる変数との相対的な時間で他の変数の定まる時間制約を与える」といった制約の様式に、セットアップタイムに基づいて所定の数値を埋め込んで出力する。また、その際、上記の一連の処理の中で、セットアップタイムが一度も与えられなかった変数については、ハードウエア合成系に対して、セットアップ制約がない、すなわち最もセットアップタイムが早い変数と同時に値が定まっているとして、制約の様式への埋め込みを行う。上記の様式であれば、「セットアップ制約がない」とはセットアップタイムとして０を与えることになる。
【００２８】
図５に図４の装置構成をコンピュータとプログラムで実現する際の処理のフローチャートを示した。このプログラムは記録媒体に記録することも、ネットワークを通じて提供することもできる。前処理１００の後のソフトウエアを取り込んで（Ｓ１）、コンパイラ２１１でコンパイルして「機械語命令列」に変換しておき（Ｓ２）、また変数リスト生成部２１２によって「変数リスト」を生成する（Ｓ３）。この「変数リスト」は、例えば、図６のブロック２２１に示す内容である。この「変数リスト」の生成完了により、時刻変数管理部２１３で基点となる時刻がｔ＝０に初期化される（Ｓ４）。以後、機械語命令追跡部２１５によって機械語命令列の実行追跡が開始し（Ｓ５）、「変数リスト」のセットアップタイムを記録更新する。ここでは、時刻変数管理部２１３からの現在の「時刻情報」と、機械語命令追跡部２１５からの「変数書込み検出通知」とにしたがって、「変数リスト」のセットアップタイムを記録更新していく（Ｓ６，Ｓ７，Ｓ８）。図６のブロック２２２に「変数リスト」の書込み開始を、ブロック２２３に「変数リスト」の全てにセットアップタイムの書き込みが完了した内容を示す。例えば、ブロック２２３において、「0xc0000000:buff[0]:c1」は、変数名「buff[0]」の変数が、その値をメモリの「0xc0000000」のアドレスに格納しており、その値はマシンサイクル「ｃ１」において確定するので、変数のセットアップタイムは「ｃ１」となることを示している。そして、機械語命令追跡部２１５による追跡がハードウエア合成の呼び出しを行う命令の格納されたアドレスに到達すると（Ｓ９）、「完了通知」が出力管理部２１６に通知されるので、出力管理部２１６が変数リスト管理部２１４の「変数リスト」に登録されている変数に対して、ハードウエア合成系に合わせた様式の数値を埋め込んで、出力管理部２１６から出力する。図６のブロック２２４に一例の様式に沿ったハードウエア合成で与える制約を示す。
【００２９】
この図６のブロック２２４は、マシンサイクル単位の整数値で制約を与える場合の様式の例であり、最も早く値が確定する変数のセットアップタイム（値が最も小さいセットアップタイム）がｃ１であるとして、その値からの相対値として、他のセットアップタイムを与えている。つまり、ｃ１→０（なぜなら、ｃ１−ｃ１＝０）、ｃ２→ｃ２−ｃ１、ｃ３→ｃ３−ｃ１、・・・のように、マシンサイクル単位の整数値で制約を与えている。このように、ハードウエア合成に制約を与える方法として、最も早く値の決まる変数との相対的な時間で、他の変数の定まる時間制約を与えている。
【００３０】
以上のように、ここで説明したセットアップタイム分析処理（その１）では、ハードウエア合成の処理で参照する「変数リスト」を用意して、ある時刻（例えば、ある変数への値の設定の時刻）を基点にして、なんらかの変数に値を設定する時刻を、一定の単位、たとえば何マシンサイクルかかるか、によって記録していき、ソフトウエアがハードウエア合成の処理の実行開始（図３に示すソフトウエアの例では、func_Bの呼出）に到来するまでこれを繰り返し、その結果得られたそれぞれの変数のセットアップタイムに基づく制約を、ハードウエア合成系に渡すものである。
【００３１】
＜セットアップタイム分析処理（実施例２）＞
セットアップタイムを分析する場合において、変数への値の書込みのマシンサイクル数につき、何らかの条件による変動がある場合でも、前記したセットアップ分析処理（実施例１）の手法をそのまま用いることができる。この場合、変動する条件の中で、最も遅く変数の値が確定するマシンサイクル数がセットアップタイムとして得られる。
【００３２】
これに対し、セットアップタイム分析の処理（実施例２）では、条件に応じてセットアップタイムが変わることなく、特に、成立する条件によっては、一部のセットアップタイムが早く（小さく）なることを分析し、ハードウエア合成系に渡すことも可能である。
【００３３】
条件分岐が含まれる場合、分岐先の処理も、その処理の後にセットアップされる変数のセットアップタイムに影響する。分岐先にある処理に対しても、図４，図５の処理を行って、途中結果とし、条件付きで加算する。また分岐しなかった場合の処理でセットアップタイムを決める変数もあり得るので、分岐先のステップ数に影響されないステップ数を保存するために、処理は再帰的となる。
【００３４】
図７に、セットアップタイム分析の処理（実施例２）を行う装置構成を示す。これは図４で説明した装置構成に対して、条件分岐に対する取り扱いを加えた場合の例である。追跡の途中でマシンサイクル数の変動をもたらすような分岐を経由しなければ、リストの記載はすべて定数となっているが、追跡の途中でマシンサイクル数が変動するような分岐を通るかもしれないので、マシンサイクル数が変動する分岐を経由している場合には、経由のたびに、分岐の条件を駆動変数としてマシンサイクル数の積算を順次数式化していく。
【００３５】
図７の装置構成が図４の装置構成と異なるところは、機械語命令追跡部２１５で「条件分岐」の命令を検出することと、「条件分岐」が検出された場合に、分岐の条件が成立した場合のセットアップタイムの算出を、分岐の条件が不成立の場合のセットアップタイムの算出と並行して再帰的に処理実施する点である。
【００３６】
再帰処理管理部２１７は、機械語命令追跡部２１５が「条件分岐」を検出した場合に、「変数リスト」の複製を作成し、また機械語命令追跡部２１５の追跡中の命令アドレス等の追跡状態を複製して残し、再帰的に処理する。この再帰処理は、条件成立の場合の分岐先の処理の終点に到達したときに終え、この時点での「変数リスト」にセットアップタイムの更新されたものを、「戻り値」（出力）として得る。
【００３７】
機械語命令追跡部２１５は、「戻り値」を得ると、追跡中のアドレス等の追跡状態を元に復元し、「戻り値」については、成立条件の識別子とともに「変数書込み検出通知」として変数リスト管理部２１４に渡す。
【００３８】
変数リスト管理部２１４は、条件成立の識別子によるフィールドを、各レコードに生成し、現在のセットアップフィールドの値を複写する。そして、この条件識別子付きフィールドの値に、「戻り値」の内容を加算する。
【００３９】
以上により、条件が成立した場合のセットアップタイムを得るので、さらに、機械語命令追跡部２１５は、このあと条件が不成立だった場合に相当する命令の追跡を実行することで、条件が成立した場合と成立しなかった場合の両方のセットアップタイムを、「変数リスト」のフィールドに格納することになる。図８に図７の装置構成をコンピュータとプログラムで実現する際の処理のフローチャートを示した。図５のフローチャートに対して、ステップＳ１０〜１３が追加されている。このプログラムは記録媒体に記録することも、ネットワークを通じて提供することもできる。
【００４０】
分岐条件のある場合のセットアップタイムの一例を図９に示す。変数名として、Buff[k]、Buff[i]、Buff[s]、Buff[t]の４つを掲げ、ある「条件１」の成立した場合と、成立していない場合とでの各変数のセットアップタイムがどのようになるかを示した。例えば、Buff[k]については、「条件１」が成立していない場合はセットアップが「２」（マシンサイクル２の値が与えられる）、成立している場合は「８」となる。Buff[i]については、「条件１」が成立している場合はセットアップが「１７」であるが、成立していない場合でもその変数へのデフォルト値の代入が「１１３」において与えられる。また、Buff[s]については、「条件１」が成立する場合には値の代入がなく（値が変わることがない）、不成立の場合に「１５０」が与えられる。Buff[t]については、逆に成立しない場合には値の代入がなく（値が変わることがない）、成立の場合に「３７」が与えられる。以上により、特定の「条件１」によってセットアップタイムが変わる（小さくなり得る）場合は、成立する「条件１」に応じて、各変数のセットアップタイムを得ることができる。
【００４１】
以上によって、セットアップタイム分析２００の処理が完了する。ここまでで、合成対象となる部分の変数（レジスタ）について、どれが、何時、セットアップされるか、がわかった。すなわち、ハードウエア合成系に渡す変数名で、どれが何時セットアップされるかをリストアップできた。
【００４２】
＜ハードウエア合成＞
ハードウエア合成系は、一定数の記憶要素部品（レジスタ）、演算要素部品（演算器）を前提として、計算処理を達成するための手順について、完全に逐次的に記述したもの（プログラム）に基づいて、処理の構成する部分手順の依存関係を見つけ出し、結果が同じになるように部分手順を並び替えることによって、遂次の実行の一部を同時に行えるようにすることである（例えば、塚本他、「動作合成技術の動向」、情報処理、４５巻５号、４７１−４７６頁、２００４年、５月）。
【００４３】
ハードウエア合成系は、プログラムを解析することでハードウエアの構造の候補を推定し、その構造で何時どの処理を行うかという手順（何時どのレジスタと演算器をつなぐよにするか＝スケジューリング）の候補を生成し、それらの候補が与えられた制約を満たすか否を判別して、満たす場合に構造と手順を出力する。
【００４４】
ハードウエア合成系が入力として扱うのは、合成の対象とする処理を遂次処理で書き表した記述（プログラム）のほかに、いくつかの制約、例えば、レジスタや演算器の種類、数量、処理の開始から終了までの時間等の制約などである。
【００４５】
ハードウエア合成系にはいくつかの製品や研究成果の具体例があるが、共通的に、それらの内部では、どれもデータフローグラフもしくはデータフローコントロールグラフという分析結果をもっており、どの処理を何時行うかのスケジューリングを行う際に、ある処理が終わってから始めることができる別の処理はなにかという依存関係を守ることによって、処理の結果が元の遂次処理（プログラム）と同じになるようにしている。
【００４６】
ハードウエア合成対象の入力部分は、一般に複数のレジスタで構成されることになる。そのレジスタが保持する値が処理のために準備完了する（セットアップされる）のは、どれが先でどれが後となるかは、知りえないものとして、これまではハードウエア合成系を使用してきた。
【００４７】
しかしながら、元々ハードウエア合成系がプログラムの解析結果として持っているデータフローグラフに基づけば、仮に、多数あるレジスタのなかの一部の値のみが他に先立って確定したときに、どの処理から行うことができるか選択判定することは、ほとんど従来のまま実現できる機能である。
【００４８】
このような改造が行われたハードウエア合成系に対して、本発明は、前記したように、レジスタの値の設定完了時刻（セットアップタイム）を個別（レジスタごと）に提供するものである。
【００４９】
＜まとめ＞
以上から、本発明によれば、ハードウエア合成系の処理対象における、ソフトウエアとの情報の受け渡しの仕組みにおいて、変数・レジスタの独立個数が非常に多い状況においても、ハードウエアが変数を利用できるようになる時間的な情報についての分析結果（セットアップタイム）をハードウエア合成系に提供できる利点がある。
【００５０】
これによって、ハードウエア合成系がレジスタの使用計画を行う際に、変数のセットアップタイムを利用することができるようになって、無駄な組み合せが減り、いままでハードウエア合成系の使用を断念していた、ソフトウエア処理と１０００程度以上の多くの変数を逐次的に交換するような大規模な処理対象も、ハードウエア合成系で実施できるようになる。
【００５１】
従来では、ハードウエア合成系の使用を断念していたため、設計者の創意と発案により個別に行っていた、ソフトウエアとの情報のやり取りの機構の生成を、手順として標準化できるようになり、間違いが入るリスクを減らし、検証箇所を明確に決定できるようになる。
【００５２】
さらに、従来の設計方法では、ソフトウエアとハードウエアの情報の受け渡しの機構を、ハードウエアを記述する言語で作り直すことや、ソフトウエアの処理を合わせた性能の見積りを繰り返すことに大きな手間がかかっていたが、本発明の手法をとれば、ハードウエア合成系は、ソフトウエアが変数を確定させる時刻（セットアップタイム）を反映して生成されるものとなるため、そのまま性能を算出することができ、手間の削減ができる。
【図面の簡単な説明】
【００５３】
【図１】ハードウエア合成の説明図である。
【図２】ハードウエア合成の説明図である。
【図３】ソフトウエアの一部をハードウエア合成するための処理の一例のブロック図である。
【図４】セットアップタイム分析処理（実施例１）の装置構成のブロック図である。
【図５】セットアップタイム分析処理（実施例１）のフローチャートである。
【図６】セットアップタイム分析処理（実施例１）での変数リストの変遷の説明図である。
【図７】セットアップタイム分析処理（実施例２）の装置構成のブロック図である。
【図８】セットアップタイム分析処理（実施例２）のフローチャートである。
【図９】セットアップタイム分析処理（実施例２）によるセットアップタイムの説明図である。
【図１】
2009176077.tif 000003
【図２】
2009176077.tif 000004
【図３】
2009176077.tif 000005
【図４】
2009176077.tif 000006
【図５】
2009176077.tif 000007
【図６】
2009176077.tif 000008
【図７】
2009176077.tif 000009
【図８】
2009176077.tif 000010
【図９】
2009176077.tif 000011