(57)【特許請求の範囲】
【請求項１】
動作記述を、秘匿化が指定された記述ブロックである秘匿部と前記秘匿部を除く記述である公開部とに分割し、前記秘匿部の記述を関数化すると共に該関数を呼び出す処理の記述に置き換える動作記述分割手段と、
前記関数化された秘匿部に代わって置き換えられた処理に、前記秘匿部に対応するハードウェアモジュールを割り当てる秘匿部考慮スケジューリング／バインディング手段と、
を有し、
前記動作記述分割手段は、
前記動作記述の制御フロー解析、前記動作記述のポインタ解析及びデータフロー解析、並びに前記秘匿部を関数とみなして行うプロシージャー間解析を実行し、前記秘匿部が分割可能と判断した場合に該秘匿部を分割し、
前記秘匿部考慮スケジューリング／バインディング手段は、
予め定義されるインターフェース生成規則と前記秘匿部に対応するハードウェアモジュールから決定されるインターフェースのプロトコルにしたがってスケジューリング行う動作合成装置。
【請求項２】
前記秘匿部に対応するハードウェアモジュールで用いる入出力ポートを定義したＲＴＬ記述を、前記秘匿部のテンプレートとして生成するテンプレート生成手段を有する請求項１記載の動作合成装置。
【請求項３】
動作記述を、秘匿化が指定された記述ブロックである秘匿部と前記秘匿部を除く記述である公開部とに分割し、前記秘匿部の記述を関数化すると共に該関数を呼び出す処理の記述に置き換える動作記述分割手段と、
前記公開部に対応するハードウェアモジュールとのデータの送受信に用いる入出力ポートの定義を含む、前記秘匿部に対応するハードウェアモジュールの動作合成結果であるＲＴＬ記述を生成する公開部考慮スケジューリング／バインディング手段と、
を有し、
前記動作記述分割手段は、
前記動作記述の制御フロー解析、前記動作記述のポインタ解析及びデータフロー解析、並びに前記秘匿部を関数とみなして行うプロシージャー間解析を実行し、前記秘匿部が分割可能と判断した場合に該秘匿部を分割し、
前記公開部考慮スケジューリング／バインディング手段は、
前記公開部に対応するハードウェアモジュールを外部モジュールとして取り扱い、前記秘匿部に対応するハードウェアモジュールの情報で示されるインターフェース及び前記秘匿部の動作記述から動作合成時に考慮すべき情報である秘匿部動作合成指示を満たすようにスケジューリング及びバインディングを行う動作合成装置。
【請求項４】
前記関数化された秘匿部に代わって置き換えられた処理に、前記秘匿部に対応するハードウェアモジュールを割り当てる秘匿部考慮スケジューリング／バインディング手段を有する請求項３記載の動作合成装置。
【請求項５】
コンピュータが、
動作記述の制御フロー解析、前記動作記述のポインタ解析及びデータフロー解析、並びに秘匿化が指定された記述ブロックである秘匿部を関数とみなして行うプロシージャー間解析を実行し、
前記秘匿部が分割可能と判断した場合、前記動作記述を該秘匿部と該秘匿部を除く記述である公開部とに分割し、
前記秘匿部の記述を関数化すると共に該関数を呼び出す処理の記述に置き換え、
前記関数化された秘匿部に代わって置き換えられた処理に、前記秘匿部に対応するハードウェアモジュールを割り当て、
予め定義されるインターフェース生成規則と前記秘匿部に対応するハードウェアモジュールから決定されるインターフェースのプロトコルにしたがってスケジューリング行う動作合成方法。
【請求項６】
前記コンピュータが、
前記秘匿部に対応するハードウェアモジュールで用いる入出力ポートを定義したＲＴＬ記述を、前記秘匿部のテンプレートとして生成する請求項５記載の動作合成方法。
【請求項７】
コンピュータが、
動作記述の制御フロー解析、前記動作記述のポインタ解析及びデータフロー解析、並びに秘匿化が指定された記述ブロックである秘匿部を関数とみなして行うプロシージャー間解析を実行し、
前記秘匿部が分割可能と判断した場合、前記動作記述を該秘匿部と該秘匿部を除く記述である公開部とに分割し、
前記秘匿部の記述を関数化すると共に該関数を呼び出す処理の記述に置き換え、
前記公開部に対応するハードウェアモジュールとのデータの送受信に用いる入出力ポートの定義を含む、前記秘匿部に対応するハードウェアモジュールの動作合成結果であるＲＴＬ記述を生成し、
前記公開部に対応するハードウェアモジュールを外部モジュールとして取り扱い、前記秘匿部に対応するハードウェアモジュールの情報で示されるインターフェース及び前記秘匿部の動作記述から動作合成時に考慮すべき情報である秘匿部動作合成指示を満たすようにスケジューリング及びバインディングを行う動作合成方法。
【請求項８】
前記コンピュータが、
前記関数化された秘匿部に代わって置き換えられた処理に、前記秘匿部に対応するハードウェアモジュールを割り当てる請求項７記載の動作合成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体集積回路の動作を示す動作記述から具体的な機能（回路）を示すＲＴＬ（Register Transfer Level）記述を生成する動作合成装置及び方法に関する。
【背景技術】
【０００２】
近年、システムＬＳＩの設計には、抽象度の高い動作記述で設計し、動作合成によりＲＴＬ回路を生成する設計手法が採用され始めている。この種の設計手法では、まずシステムＬＳＩの所望の動作を実現する動作記述を設計し、動作合成により動作記述をＲＴＬ記述に変換する。そして、論理合成によりＲＴＬ記述をゲートレベル記述に変換し、最後にゲートレベル記述から回路レイアウトを作成する。このように動作記述に基づいてハードウェアを設計することで、設計情報を抽象化できるために設計効率が向上する。
【０００３】
しかしながら、動作記述で用いるハードウェア記述言語は、一般にソフトウェア記述言語と同程度の抽象度である。そのため、動作記述が第三者に見られると、該第三者によって動作記述内のアルゴリズム等が解読され、該アルゴリズムで示される技術情報が漏洩するおそれがある。特に、動作記述の作成者（以下、動作記述作成者と称す）と動作合成ツールを用いて動作記述から動作合成を行う実行者（以下、動作合成実行者）とが異なる場合、動作記述作成者が作成したアルゴリズムが動作合成実行者によって容易に解読されてしまう。
【０００４】
動作記述を部分的に秘匿する方法としては、例えば、動作記述作成者が、作成した動作記述を秘匿する記述と公開する記述とに分割し、秘匿する記述を関数等に変換する方法が知られている。しかしながら、動作記述の作成段階において、秘匿のために動作記述を分割すると、動作記述の再利用性が低下するため、設計効率が低下する問題がある。また、秘匿のために既に設計済みの動作記述の一部を変更すると、新たなバグが混入するおそれがある。
【０００５】
なお、動作記述を部分的に秘匿する他の方法としては、特許文献１（特開２００２―１６３３１２号公報）や特許文献２（特開２００５―２３５８４８号公報）に記載された技術もある。特許文献１（特開２００２―１６３３１２号公報）や特許文献２（特開２００５―２３５８４８号公報）には、動作記述中の変数名等の文字列を元の文字列を推定できない他の文字列に変換することで、該動作記述で示された設計情報の解読を困難にする方法が記載されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００２―１６３３１２号公報
【特許文献２】特開２００５―２３５８４８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
上述したように、背景技術の動作合成装置では、動作記述作成者が、設計した動作記述を秘匿する記述と公開する記述とに分割し、秘匿する記述を個別に関数等に変換するため、動作記述の再利用性が低下して設計効率が低下する問題がある。また、秘匿のために既に設計済みの動作記述の一部を変更すると、新たなバグが混入するおそれがある。
【０００８】
一方、上述した特許文献１や特許文献２では、動作記述中の変数名等の文字列を変更することで秘匿性を向上させる技術を示しているが、アルゴリズムの記述を変更することについては何も示していないため、アルゴリズムが解読される危険性は依然として存在する。
【０００９】
本発明は上述したような背景技術が有する問題点を解決するためになされたものであり、秘匿する記述を公開することなく、公開された動作記述から動作合成が可能な動作合成装置及び方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
上記目的を達成するため本発明の動作合成装置は、動作記述を、秘匿化が指定された記述ブロックである秘匿部と前記秘匿部を除く記述である公開部とに分割し、前記秘匿部の記述を関数化すると共に該関数を呼び出す処理の記述に置き換える動作記述分割手段と、
前記関数化された秘匿部に代わって置き換えられた処理に、前記秘匿部に対応するハードウェアモジュールを割り当てる秘匿部考慮スケジューリング／バインディング手段と、
を有し、
前記動作記述分割手段は、
前記動作記述の制御フロー解析、前記動作記述のポインタ解析及びデータフロー解析、並びに前記秘匿部を関数とみなして行うプロシージャー間解析を実行し、前記秘匿部が分割可能と判断した場合に該秘匿部を分割し、
前記秘匿部考慮スケジューリング／バインディング手段は、
予め定義されるインターフェース生成規則と前記秘匿部に対応するハードウェアモジュールから決定されるインターフェースのプロトコルにしたがってスケジューリング行う構成である。
【００１１】
または、動作記述を、秘匿化が指定された記述ブロックである秘匿部と前記秘匿部を除く記述である公開部とに分割し、前記秘匿部の記述を関数化すると共に該関数を呼び出す処理の記述に置き換える動作記述分割手段と、
前記公開部に対応するハードウェアモジュールとのデータの送受信に用いる入出力ポートの定義を含む、前記秘匿部に対応するハードウェアモジュールの動作合成結果であるＲＴＬ記述を生成する公開部考慮スケジューリング／バインディング手段と、
を有し、
前記動作記述分割手段は、
前記動作記述の制御フロー解析、前記動作記述のポインタ解析及びデータフロー解析、並びに前記秘匿部を関数とみなして行うプロシージャー間解析を実行し、前記秘匿部が分割可能と判断した場合に該秘匿部を分割し、
前記公開部考慮スケジューリング／バインディング手段は、
前記公開部に対応するハードウェアモジュールを外部モジュールとして取り扱い、前記秘匿部に対応するハードウェアモジュールの情報で示されるインターフェース及び前記秘匿部の動作記述から動作合成時に考慮すべき情報である秘匿部動作合成指示を満たすようにスケジューリング及びバインディングを行う構成である。
【００１２】
一方、本発明の動作合成方法は、コンピュータが、
動作記述の制御フロー解析、前記動作記述のポインタ解析及びデータフロー解析、並びに秘匿化が指定された記述ブロックである秘匿部を関数とみなして行うプロシージャー間解析を実行し、
前記秘匿部が分割可能と判断した場合、前記動作記述を該秘匿部と該秘匿部を除く記述である公開部とに分割し、
前記秘匿部の記述を関数化すると共に該関数を呼び出す処理の記述に置き換え、
前記関数化された秘匿部に代わって置き換えられた処理に、前記秘匿部に対応するハードウェアモジュールを割り当て、
予め定義されるインターフェース生成規則と前記秘匿部に対応するハードウェアモジュールから決定されるインターフェースのプロトコルにしたがってスケジューリング行う方法である。
【００１３】
または、コンピュータが、
動作記述の制御フロー解析、前記動作記述のポインタ解析及びデータフロー解析、並びに秘匿化が指定された記述ブロックである秘匿部を関数とみなして行うプロシージャー間解析を実行し、
前記秘匿部が分割可能と判断した場合、前記動作記述を該秘匿部と該秘匿部を除く記述である公開部とに分割し、
前記秘匿部の記述を関数化すると共に該関数を呼び出す処理の記述に置き換え、
前記公開部に対応するハードウェアモジュールとのデータの送受信に用いる入出力ポートの定義を含む、前記秘匿部に対応するハードウェアモジュールの動作合成結果であるＲＴＬ記述を生成し、
前記公開部に対応するハードウェアモジュールを外部モジュールとして取り扱い、前記秘匿部に対応するハードウェアモジュールの情報で示されるインターフェース及び前記秘匿部の動作記述から動作合成時に考慮すべき情報である秘匿部動作合成指示を満たすようにスケジューリング及びバインディングを行う方法である。
【発明の効果】
【００１４】
本発明によれば、秘匿する記述を公開することなく、公開された動作記述から動作合成が可能になる。
【図面の簡単な説明】
【００１５】
【図１】第１の実施の形態の動作合成装置の一構成例を示すブロック図である。
【図２】第１の実施の形態の動作合成装置の処理手順の一例を示すフローチャートである。
【図３】秘匿化ブロックが分割可能か否かを判定するための処理手順の一例を示すフローチャートである。
【図４】第２の実施の形態の動作合成装置の一構成例を示すブロック図である。
【図５】第２の実施の形態の動作合成装置の処理手順の一例を示すフローチャートである。
【図６】動作記述の一例を示す模式図である。
【図７】図６に示した動作記述に対応する、動作記述分割指示の一例を示す模式図である。
【図８】図６に示した動作記述及び図７に示した動作記述分割指示から生成される秘匿部動作記述の一例を示す模式図である。
【図９】図６に示した動作記述及び図７に示した動作記述分割指示から生成される公開部動作記述の一例を示す模式図である。
【図１０】図６に示した動作記述及び図７に示した動作記述分割指示から生成される秘匿部ハードウェアモジュール情報の一例を示す模式図である。
【図１１】図６に示した動作記述及び図７に示した動作記述分割指示から生成されるテンプレートである秘匿部ハードウェアモジュールＲＴＬ記述の一例を示す模式図である。
【図１２】図６に示した動作記述及び図７に示した動作記述分割指示から生成される公開部ハードウェアモジュールＲＴＬ記述の一例を示す模式図である。
【図１３】図６に示した動作記述及び図７に示した動作記述分割指示から生成されるコントロールフローグラフの一例を示す模式図である。
【図１４】図６に示した動作記述及び図７に示した動作記述分割指示から生成されるコールグラフの一例を示す模式図である。
【図１５】第２実施例の動作合成装置で生成される、秘匿部ハードウェアモジュールＲＴＬ記述の一例を示す模式図である。
【発明を実施するための形態】
【００１６】
次に本発明について図面を用いて説明する。
（第１の実施の形態）
図１は第１の実施の形態の動作合成装置の一構成例を示すブロック図である。
【００１７】
図１に示すように、第１の実施の形態の動作合成装置は、動作記述をＲＴＬ記述へ変換する処理装置１００と、変換対象となる動作記述、変換後のＲＴＬ記述及び動作記述からＲＴＬ記述への変換処理で用いる各種のデータが格納される記憶装置１１０とを有する構成である。図１に示す動作合成装置は、例えばプログラムにしたがって所要の処理を実行するＣＰＵ、記憶装置、各種の論理回路等を含むコンピュータで実現できる。
【００１８】
処理装置１００は、動作記述分割手段１０１、テンプレート生成手段１０２及び秘匿部考慮スケジューリング／バインディング手段１０３を備えている。
【００１９】
また、記憶装置１１０は、動作記述記憶部１１１、動作記述分割指示記憶部１１２、秘匿部動作記述記憶部１１３、公開部動作記述記憶部１１４、秘匿部ハードウェアモジュール情報記憶部１１５、秘匿部ハードウェアモジュールＲＴＬ記述テンプレート記憶部１１６、公開部動作合成指示記憶部１１７及び公開部ハードウェアモジュールＲＴＬ記述記憶部１１８を備えている。
【００２０】
ＲＴＬ記述への変換対象となる動作記述は、予め動作記述記憶部１１１に格納されている。動作記述は、Ｖｅｒｉｌｏｇ−ＨＤＬ、ＶＨＤＬ、ＳｙｓｔｅｍＶｅｒｉｌｏｇ等のハードウェア記述言語、あるいはＣ言語、Ｃ＋＋言語、Ｃ＃言語、ＳｙｓｔｅｍＣ、ＳｐｅｃＣ、Ｊａｖａ（登録商標）、Ｐｅｒｌ、Ｓｃｈｅｍｅ、Ｌｉｓｐ等のプログラミング言語で表される。また、動作記述には、回路設計用にＣ言語、Ｃ＋＋言語、Ｊａｖａ（登録商標）から拡張された言語を用いることもある。動作記述は、動作記述作成者によって準備される。
【００２１】
作成した動作記述のうち、秘匿化する記述ブロック（以下、秘匿化ブロックと称す）は、動作記述分割指示で指定される。動作記述分割指示は、秘匿化ブロックの範囲を指定する情報を含み、予め動作記述分割指示記憶部１１２に格納される。動作記述分割指示は、例えば動作記述作成者によって準備される。
【００２２】
動作記述分割手段１０１は、動作記述記憶部１１１から動作記述を読み出し、動作記述分割指示記憶部１１２から該動作記述に対応する動作記述分割指示を読み出し、動作記述記憶部１１１から読み出した動作記述のうち、動作記述分割指示で指定された秘匿化ブロックを関数化する。また、秘匿化ブロックの関数化に用いた関数の定義を秘匿部動作記述として秘匿部動作記述記憶部１１３に格納する。また、動作記述分割手段１０１は、動作記述記憶部１１１から読み出した動作記述のうち、関数化された秘匿化ブロックを、該関数を呼び出すための記述に置き換え、該記述を含む動作記述全体を公開部動作記述として公開部動作記述記憶部１１４に格納する。さらに、動作記述分割手段１０１は、秘匿化ブロックの関数化時に解析した該秘匿化ブロックの特徴に基づいて、該秘匿化ブロックの関数内でアクセスする、該関数外で定義される変数、配列、関数の情報を動作記述分割指示に追加し、秘匿部ハードウェアモジュール情報として秘匿部ハードウェアモジュール情報記憶部１１５に格納する。
【００２３】
テンプレート生成手段１０２は、秘匿部ハードウェアモジュール情報記憶部１１５から秘匿部ハードウェアモジュール情報を読み出し、該秘匿部ハードウェアモジュール情報で指定されたインターフェース生成規則にしたがって秘匿部ハードウェアモジュールと公開部ハードウェアモジュール間のインターフェースを決定する。また、テンプレート生成手段１０２は、インターフェースとして用いる入出力ポート等を示す秘匿部ハードウェアモジュールのＲＴＬ記述をテンプレートとして生成し、秘匿部ハードウェアモジュールＲＴＬ記述テンプレート記憶部１１６に格納する。
【００２４】
公開部ハードウェアモジュールは、公開部動作記述から動作合成により生成された、ＲＴＬ記述で示されるハードウェアモジュールを指す。また、秘匿部ハードウェアモジュールは、上記秘匿部ハードウェアモジュール情報から動作合成により生成された、ＲＴＬ記述で示されるハードウェアモジュールを指す。
【００２５】
インターフェースは、公開部ハードウェアモジュールと秘匿部ハードウェアモジュール間で制御信号やデータ信号を送受信するのに用いる入出力ポート及びプロトコルを指す。インターフェース生成規則は、動作記述分割指示で指定され、動作合成装置の装置構成に応じて定義される。
【００２６】
インターフェース生成規則としては、公開部ハードウェアモジュールから秘匿部ハードウェアモジュールの実行制御を行うためのインターフェース生成規則、秘匿部ハードウェアモジュールから公開部ハードウェアモジュール内に実現された関数の機能を制御するためのインターフェース生成規則、公開部ハードウェアモジュールと秘匿部ハードウェアモジュール間でデータ転送を行うためのインターフェース生成規則等がある。例えば、公開部ハードウェアモジュールから秘匿部ハードウェアモジュールへ実行制御を移す場合、公開部ハードウェアモジュールが開始制御信号（１ビット）の立ち上げることで通知することを示すプロトコルと、該開始制御信号の送受信に用いる入出力ポートとを定義する。
【００２７】
秘匿部考慮スケジューリング／バインディング手段１０３は、公開部動作記述記憶部１１４から公開部動作記述を読み出し、秘匿部ハードウェアモジュール情報記憶部１１５から秘匿部ハードウェアモジュール情報を読み出し、公開部動作合成指示記憶部１１７から公開部動作合成指示を読み出し、公開部動作記述に含まれる関数を呼び出すための記述に対して、秘匿部ハードウェアモジュールを内部の論理が定義されないブラックボックス化された外部ハードウェアモジュールとして割り当てるよう、スケジューリング及びバインディングする。また、秘匿部考慮スケジューリング／バインディング手段１０３は、動作合成結果である、秘匿部ハードウェアモジュールＲＴＬ記述テンプレートの入出力ポートとの接続情報を備える公開部ハードウェアモジュールＲＴＬ記述を生成し、公開部ハードウェアモジュールＲＴＬ記述記憶部１１８に格納する。
【００２８】
公開部動作合成指示は、公開部動作記述からの動作合成時に考慮すべき情報であり、予め公開部動作合成指示記憶部１１７に格納される。公開部動作合成指示は、例えば動作記述作成者によって準備される。
【００２９】
次に、図１〜図３を用いて第１の実施の形態の動作合成装置の処理について説明する。
【００３０】
まず、処理装置１００は、動作記述分割指示手段１０１により、動作記述記憶部１１１から変換対象である動作記述を読み出し、動作記述分割指示記憶部１１２から該動作記述に対応する動作記述分割指示を読み出し、動作記述分割指示で指定された動作記述中の秘匿化ブロックが分割可能か否かを判定する（図２のステップＳ１）。
【００３１】
図３に示すように、秘匿化ブロックが分割可能か否かは、動作記述分割指示で定義された秘匿化ブロック毎に以下の３段階の解析を行うことで判定する。
【００３２】
第１段階において、動作記述分割指示手段１０１は、動作記述の制御フロー解析を行い、秘匿化ブロックの開始点から終了点の間に該秘匿化ブロックの外部を通る実行パスが存在するか否かを確認する（図３のステップＳ１１）。秘匿化ブロックの外部を通る実行パスが存在する場合は、指定された秘匿化ブロックを関数で表現できないため、分割不可と判定する。
【００３３】
第２段階において、動作記述分割指示手段１０１は、動作記述のポインタ解析及びデータフロー解析を行い、秘匿化ブロック内で参照・代入される該秘匿化ブロック外の変数、配列、外部ポート、並びに該秘匿化ブロック内で呼び出される関数を列挙する（図３のステップＳ１２）。指し先を一意に特定できないポインタが秘匿化ブロック内に存在する場合は秘匿化ブロック内外のインターフェースを決定できないため、分割不可と判定する。
【００３４】
第３段階において、動作記述分割指示手段１０１は、秘匿化ブロックを関数とみなしてプロシージャー間解析を行い、該関数の再帰呼び出しが存在するか否かを確認する（図３のステップＳ１３）。関数の再帰呼び出しが存在する場合はハードウェアモジュールを実現できないため、分割不可と判定する。
【００３５】
以上の３段階の解析結果でいずれも分割不可と判定されない場合、動作記述分割指示手段１０１は、解析した秘匿化ブロックが分割可能と判定する。なお、上記制御フロー解析、ポインタ解析、データフロー解析、プロシージャー間解析は、一般的なソフトウェアのコンパイラで用いられるアルゴリズムを用いて実行すればよい。
【００３６】
動作記述分割指示手段１０１は、秘匿化ブロックの分割が可能と判定すると、該秘匿化ブロックに対する各段階の解析結果を用いて秘匿化ブロック内で参照・代入される変数、配列、外部ポート、並びに該秘匿化ブロックで呼び出される関数の情報を、該秘匿化ブロックに対応する動作記述分割指示に追加し、秘匿部ハードウェアモジュール情報として秘匿部ハードウェアモジュール情報記憶部１１５に格納する（図２のステップＳ２）。
【００３７】
次に、動作記述分割指示手段１０１は、秘匿化ブロックの記述を、該秘匿化ブロック内で参照・代入される変数、配列、外部ポートを引数とする関数の定義またはそれらのポインタを引数とする関数の定義に変換し、秘匿部動作記述として秘匿部動作記述記憶部１１３に格納する。また、元の動作記述内の秘匿化ブロックの記述を、新たに定義された対応する関数を呼び出すための記述に変換し、公開部動作記述として公開部動作記述記憶部１１４に格納する（図２のステップＳ３）。
【００３８】
なお、秘匿化ブロック内で呼び出される、該秘匿化ブロック外で定義される関数が存在する場合、秘匿化ブロック内から該秘匿化ブロック外の関数を呼び出す記述とするか、秘匿化ブロック外の関数の定義を複製して該秘匿化ブロックの動作記述に含めるか、どちらの分割方法を採用するかは、動作記述分割指示で指定される。秘匿化ブロック外の関数の定義を複製して秘匿化ブロックの動作記述に含める場合、複製する関数は秘匿部ハードウェアモジュール内で実現可能であるものとする。
【００３９】
次に、処理装置１００は、テンプレート生成手段１０２により、秘匿部ハードウェアモジュール情報記憶部１１５から秘匿部ハードウェアモジュール情報を読み込み、秘匿化ブロックに対応する秘匿部ハードウェアモジュールと公開部ハードウェアモジュール間のインターフェースを決定する。
【００４０】
また、テンプレート生成手段１０２は、決定したインターフェースに基づき、秘匿部ハードウェアモジュールの入出力ポートを定義したＲＴＬ記述から成る秘匿部ハードウェアモジュールを生成し、該ＲＴＬ記述をテンプレートとして秘匿部ハードウェアモジュールＲＴＬ記述テンプレート記憶部１１６に格納する（図２のステップＳ４）。
【００４１】
最後に、処理装置１００は、秘匿部考慮スケジューリング／バインディング手段１０３により、公開部動作記述記憶部１１４から公開部動作記述を読み出し、秘匿部ハードウェアモジュール情報記憶部１１５から秘匿部ハードウェアモジュール情報を読み出し、公開部動作合成指示記憶部１１７から公開部動作合成指示を読み出し、それらの情報を用いてスケジューリング及びバインディングを行う。秘匿部ハードウェアモジュールの性能、面積、消費電力に関する情報は、動作記述分割指示で指定される。スケジューリングは、公開部動作記述に含まれる、秘匿ブロックに対応する関数の呼び出し処理に置き換えた記述に、対応する秘匿部ハードウェアモジュールを割り当てるように実行する。スケジューリング時に考慮すべき秘匿部ハードウェアモジュールの遅延は、公開部動作合成指示で定義された値を用いる。
【００４２】
秘匿部考慮スケジューリング／バインディング手段１０３は、動作合成装置の装置構成に応じて定義されるインターフェース生成規則と秘匿部ハードウェアモジュール情報から決定されるインターフェースのプロトコルにしたがってスケジューリング行う。例えば、公開部動作合成指示で秘匿部ハードウェアモジュールの実行レイテンシが固定のクロックサイクル数で定義されている場合、固定のクロックサイクル数で動作する演算器と同様と見なしてスケジューリング行う。また、例えば、秘匿部ハードウェアモジュールの実行レイテンシが固定のクロックサイクル数で定義されておらず、不定である場合は、不定のクロックサイクル数で動作する外部ハードウェアモジュールとみなしてスケジューリングを行う。
【００４３】
また、秘匿部考慮スケジューリング／バインディング手段１０３は、ブラックボックス化された関数を呼び出すための記述に対して、対応する秘匿部ハードウェアモジュールを割り当てるバインディングを行う。
【００４４】
秘匿部考慮スケジューリング／バインディング手段１０３は、動作合成装置の装置構成に応じて定義されるインターフェース生成規則と秘匿部ハードウェアモジュール情報から決定されるインターフェースとして用いる入出力ポートに基づき、動作合成結果から秘匿部ハードウェアモジュールＲＴＬ回路記述テンプレートの入出力ポートと接続可能な構造を持つ公開部ハードウェアモジュールＲＴＬ記述を生成し、公開部ハードウェアモジュールＲＴＬ記述記憶部１１８に格納する。
【００４５】
次に、本実施形態の動作合成装置の効果について説明する。
【００４６】
本実施形態の動作合成装置は、動作記述分割指示手段１０１により秘匿化が指定された動作記述中の処理ブロック（秘匿化ブロック）を秘匿部動作記述とし、該秘匿化ブロックを除く動作記述を公開部動作記述とし、秘匿部動作記述に対応する秘匿部ハードウェアモジュールのインターフェースを示す秘匿部ハードウェアモジュール情報を生成し、テンプレート生成手段１０２により秘匿部ハードウェアモジュールのＲＴＬ記述のテンプレートを生成し、秘匿部考慮スケジューリング／バインディング手段１０３により秘匿部ハードウェアモジュール情報を用いて秘匿部ハードウェアモジュールを考慮した動作合成を行い、秘匿部ハードウェアモジュールＲＴＬ記述テンプレートと接続可能な公開部ハードウェアモジュールＲＴＬ記述を生成する。
【００４７】
したがって、動作記述作成者は、動作記述の一部を元の動作記述から分離して秘匿化することが可能であり、動作合成実行者は、秘匿部動作記述を外部ハードウェアモジュールとみなすことで公開部動作記述を動作合成できる。
【００４８】
また、秘匿する記述の範囲を指定するだけで、指定された動作記述中の処理ブロック（秘匿化ブロック）が関数化され、秘匿化ブロックが対応する関数の呼び出し処理に変換されると共に、該呼び出し処理で呼び出される外部ハードウェアモジュール（秘匿部ハードウェアモジュール）が生成されるため、動作記述作成者は、所望する記述を容易に秘匿化することが可能であり、動作記述を手作業で秘匿する記述と公開する記述とに分割し、秘匿のために記述を変更する必要がない。したがって、作成済みの動作記述に新たなバグ等が混入するおそれがない。
（第２の実施の形態）
次に本発明の第２の実施の形態について説明する。
【００４９】
図４は、第２の実施の形態の動作合成装置の一構成例を示すブロック図である。図５は、第２の実施の形態の動作合成装置の処理手順の一例を示すフローチャートである。
【００５０】
第２の実施の形態の動作合成装置では、公開部動作記述から動作合成した公開部ハードウェアモジュールを外部ハードウェアモジュールとみなして秘匿部動作記述を動作合成し、その後、第１の実施の形態と同様に秘匿部動作記述から動作合成した秘匿部ハードウェアモジュールを外部ハードウェアモジュールとみなして公開部動作記述を動作合成する。
【００５１】
図４に示すように、第２の実施の形態の動作合成装置では、処理装置１００に、図１に示したテンプレート生成手段１０２に代わって、公開部考慮スケジューリング／バインディング手段１０４を備えている。また、記憶装置１１０に、秘匿部ハードウェアモジュールＲＴＬ記述テンプレート記憶部１１６に代わって、秘匿部動作合成指示記憶部１１９及び秘匿部ハードウェアモジュールＲＴＬ記述記憶部１２０を備えている。
【００５２】
秘匿部動作合成指示は、秘匿部動作記述からの動作合成時に考慮すべき情報であり、予め秘匿部動作合成指示記憶部１１７に格納される。秘匿部動作合成指示は、例えば動作記述作成者によって準備される。
【００５３】
さらに、図５に示すように、第２の実施の形態の動作合成装置は、図２に示したステップＳ４の処理に代わってステップＳ６の処理を実行する。
【００５４】
すなわち、ステップＳ６において、公開部考慮スケジューリング／バインディング手段１０４は、秘匿部動作記述記憶部１１３から秘匿部動作記述を読み出し、秘匿部ハードウェアモジュール情報記憶部１１５から秘匿部ハードウェアモジュール情報を読み出し、秘匿部動作合成指示記憶部１１９から秘匿部動作合成指示を読み出す。また、公開部考慮スケジューリング／バインディング手段１０４は、公開部ハードウェアモジュールを外部モジュールとして取り扱い、秘匿部ハードウェアモジュール情報で示されるインターフェース及び秘匿部動作合成指示を満たすようにスケジューリング及びバインディングを行う。さらに、公開部考慮スケジューリング／バインディング手段１０４は、秘匿部動作記述から動作合成した結果である秘匿部ハードウェアモジュールＲＴＬ記述を秘匿部ハードウェアモジュールＲＴＬ記述記憶部１２０に格納する。その他の構成及び処理は第１の実施の形態の動作合成装置と同様であるため、その説明は省略する。
【００５５】
第２の実施の形態の動作合成装置では、公開部考慮スケジューリング／バインディング手段１０４により、第１の実施の形態で示した秘匿部ハードウェアモジュールＲＴＬ記述のテンプレートに含まれる入出力ポートの定義と共に、動作合成された秘匿部ハードウェアモジュールのＲＴＬ記述も生成される。
【００５６】
また、第１の実施の形態と同様に、秘匿部考慮スケジューリング／バインディング手段１０３により、秘匿部ハードウェアモジュール情報を用いて秘匿部ハードウェアモジュールを考慮した動作合成を行い、入出力ポートの定義を含む秘匿部ハードウェアモジュールＲＴＬ記述と接続可能な公開部ハードウェアモジュールＲＴＬ記述を生成する。
【００５７】
したがって、第２の実施の形態の動作合成装置においても、第１の実施の形態の動作合成装置と同様の効果を得ることができる。
【００５８】
以下、本発明の動作合成装置の実施例について図面を用いて説明する。
（第１実施例）
まず、本発明の動作合成装置の第１実施例について図面を用いて説明する。第１実施例は、上述した第１の実施の形態の動作合成装置に対応している。
【００５９】
図６は動作記述の一例を示す模式図である。
【００６０】
図６に示す動作記述は、Ｃ言語で表現され、予め記憶装置１１０の動作記述記憶部１１１に格納されている。図６に示す関数ｆｕｎｃ（）は、設計対象のハードウェアモジュールのトップモジュールに対応し、図６に示すグローバル変数ａは外部入力ポートに対応し、図６に示すグローバル変数ｘは外部出力ポートに対応する。また、図６では、関数ｆｕｎｃ（）のローカルスコープで配列ｒ、変数ｓ、ｔが宣言されている。
【００６１】
また、図６には、動作合成装置の装置構成に応じて定義される外部ポートを用いて、入力関数ｉｎｐｕｔにより外部からデータを入力し、動作記述にしたがってデータ処理を実行し、出力関数ｏｕｔｐｕｔにより外部へ処理後のデータを出力することが記載されている。
【００６２】
図７は動作記述分割指示の一例を示す模式図である。
【００６３】
図７に示す動作記述分割指示では、図６に示した動作記述のうち、秘匿化する処理ブロックを定義している。具体的には、図７の３行目に、図６に示した動作記述の７行目から１３行目までの処理を秘匿化することが記述されている。
【００６４】
また、図７の４行目から１０行目の記述は、秘匿化ブロックに対応するハードウェアモジュールの特徴を定義している。具体的には、図７の４行目は対応するハードウェアモジュールが順序回路であることを示し、図７の５行目は対応するハードウェアモジュールが秘匿化ブロックの処理を固定の２クロックサイクルで実行することを示している。
【００６５】
また、図７の６行目は、対応するハードウェアモジュールの入力ポートから出力ポートまでの内部レジスタを経由しないパスが存在せず、遅延時間が定義されないことを示し、図７の７行目は、対応するハードウェアモジュールの入力ポートから内部レジスタまでの最大遅延時間が５ｎｓであることを示している。
【００６６】
また、図７の８行目は、対応するハードウェアモジュールの内部レジスタから出力ポートまでの最大遅延時間が７ｎｓであることを示し、図７の９行目は、対応するハードウェアモジュールの面積が２，０００平方マイクロメートルであることを示している。さらに、図７の１０行目は、対応するハードウェアモジュールの消費電力が５０μＷであることを示している。
【００６７】
図７の１１行目から２２行目は、秘匿化ブロックの内外でデータの送受信が必要となる、変数、配列、外部ポート、関数に対するインターフェース規則を定義している。
【００６８】
図７の１１行目から１４行目は、外部入力ポート及び変数に対して直接接続することを指定しており、データ転送に要するレイテンシが０クロックサイクルであることを示している。
【００６９】
図７の１５行目から１８行目は、配列に対しては、読み込みと書き込み兼用のポートを１系統持ち、データ転送に要するレイテンシが０クロックサイクルであることを示している。
【００７０】
図７の１９行目から２２行目は、公開部ハードウェアモジュールで実現される関数に対して、秘匿部のハードウェアモジュールからは、１ビットの開始要求信号ｓｔａｒｔと１ビットの終了通知信号ｅｎｄで実行制御を行い、関数ｓｕｂの引数及び戻り値に対応するデータ転送は、直接接続によりレイテンシが０クロックサイクルで実行することを示している。
【００７１】
動作記述分割指示手段１０１は、図６に示した動作合成記述を動作記述記憶部１１１から読み出し、図７に示した動作合成分割指示を動作記述分割指示記憶部１１２から読み出し、図８に示す秘匿部動作記述、図９に示す公開部動作記述及び図１０に示す秘匿部ハードウェアモジュール情報を作成する。
【００７２】
テンプレート生成手段１０２は、図１１に示す秘匿部ハードウェアモジュールＲＴＬ記述のテンプレートを生成して秘匿部ハードウェアモジュールＲＴＬ回路記述テンプレート記憶部１１６に格納する。
【００７３】
秘匿部考慮スケジューリング／バインディング手段１０３は、図１２に示す公開部ハードウェアモジュールＲＴＬ記述を生成し、公開部ハードウェアモジュールＲＴＬ回路記述記憶部１１８に格納する。
【００７４】
動作記述分割指示手段１０１は、動作記述分割指示で秘匿化が指定された秘匿化ブロックが分割可能か否かを判定する（図２のステップＳ１）。
【００７５】
動作記述分割指示手段１０１は、第１段階で、図７に示す動作記述から図１３に示すコントロールフローグラフを作成して制御フロー解析を行う（図３のステップＳ１１）。図１３に示すコントロールフローグラフでは、破線で囲まれた処理が秘匿化ブロックに相当する。図１３に示す例では、破線で囲まれた秘匿化ブロック（black box1）内から該秘匿化ブロックの外部を通って該秘匿化ブロック内に至る実行パスが存在しないため、動作記述分割指示手段１０１は、第１段階では秘匿化ブロックが分割可能と判定する。
【００７６】
動作記述分割指示手段１０１は、第２段階で、ポインタ解析及びデータフロー解析を行う（図３のステップＳ１２）。図７に示した動作記述ではポインタが存在しないため、動作記述分割指示手段１０１は、第２段階では秘匿化ブロックが分割可能と判定する。
【００７７】
動作記述分割指示手段１０１は、第３段階で、図１４に示すコールグラフを作成してプロシージャー間解析を行う（図３のステップＳ１３）。秘匿化ブロックは独立した関数とみなせるため、図１４に示す例では、関数ｆｕｎｃ１がブロックｂｌａｃｋ＿ｂｏｘ１を呼び出すことを示し、関数ｓｕｂがブロックｂｌａｃｋ＿ｂｏｘ１から呼び出されることを示している。図１４に示すコールグラフでは閉路が存在しないため、動作記述分割指示手段１０１は、第３段階では秘匿化ブロックが分割可能と判定する。
【００７８】
次に、動作記述分割指示手段１０１は、上記第１段階〜第３段階の解析結果に基づいて、秘匿化ブロック内で利用され、該秘匿化ブロック外で定義される変数、配列、外部ポート、関数の情報を動作記述分割指示に追加し、秘匿部ハードウェアモジュール情報として秘匿部ハードウェアモジュール情報記憶部１１５に格納する（図２のステップＳ２）。
【００７９】
図１０は、図７に示した動作記述と図８に示した動作記述分割指示から生成された秘匿部ハードウェアモジュール情報の一例を示している。
【００８０】
図１０では、秘匿化ブロック内で読み込まれる対象として外部ポートａが示され、秘匿化ブロックで書き込みが行われる対象として変数ｔが示され、秘匿化ブロックで読み書きが行われる対象として配列ｒが示され、秘匿化ブロックで呼び出しが行われる対象として関数ｓｕｂが示されている。変数ｓは、秘匿化ブロック内で読み書きされる変数であるが、データフロー解析により変数のライフタイムが秘匿化ブロックの範囲に収まることが分かるため、秘匿化ブロック内の変数とみなして列挙されない。
【００８１】
次に、動作記述分割指示手段１０１は、秘匿化ブロックの記述を、該秘匿化ブロック内で参照・代入される変数、配列、外部ポートを引数とする関数の定義に変換し、秘匿部動作記述として秘匿部動作記述記憶部１１３に格納する。また、元の動作記述のうち、秘匿化ブロックを新たに定義された対応する関数の呼び出し記述に変換し、公開部動作記述として公開部動作記述記憶部１１４に格納する（図２のステップＳ３）。
【００８２】
図８は、秘匿部動作記述の一例を示す模式図である。
【００８３】
動作記述分割指示手段１０１は、秘匿化ブロックを内部処理とする関数ｂｌａｃｋ＿ｂｏｘ１を定義する記述を生成する。また、秘匿化ブロックで公開部の外部ポートａ、配列ｒ、変数ｔにアクセスするために、対応する関数の引数が定義される。
【００８４】
図９は、公開部動作記述の一例を示す模式図である。
【００８５】
図９に示す公開部動作記述では、元の動作記述のうち、秘匿化ブロックが関数ｂｌａｃｋ＿ｂｏｘ１の呼び出し記述に変換されている。
【００８６】
次に、処理装置１００は、テンプレート生成手段１０２により、秘匿部ハードウェアモジュールで用いる入出力ポートを定義したＲＴＬ記述のテンプレートを生成する（図２のステップＳ５）。
【００８７】
図１１は、図１０に示す秘匿部ハードウェアモジュール情報から生成されたＶｅｒｉｌｏｇ−ＨＤＬによるＲＴＬ記述のテンプレートの一例を示している。
【００８８】
ＲＴＬ記述のテンプレートでは、動作合成装置の装置構成に依存して定義されるインターフェース生成規則に基づいて、必要な入出力ポートが定義される。
【００８９】
図１１に示すｃｌｏｃｋはクロックを入力するポートに対応し、ｒｅｓｅｔはリセット信号を入力するポートに対応する。また、図１１に示すｓｔａｒｔは公開部ハードウェアモジュールから秘匿部ハードウェアモジュールに対して実行を要求する制御信号に対応し、ｒｅａｄｙは秘匿部ハードウェアモジュールが公開部ハードウェアモジュールに対して状態を通知する制御信号に対応する。
【００９０】
また、図１１に示すａは、公開部ハードウェアモジュールに接続される外部ポートａのデータ転送に対応し、ｒ＿ｒｄ及びｒ＿ｗｄは秘匿部ハードウェアモジュール内で保持される配列ｒに対応するリソースに対して読み込み及び書き込みのデータ転送に対応する。
【００９１】
また、図１１に示すｒ＿ａｄｄｒは、配列ｒに対応するリソースに対してアクセスするインデックスのデータ転送に対応し、ｒ＿ｏｅ及びｒ＿ｗｅは、同様に配列ｒに対応するリソースに対するアクセスにおいて、読み出し要求及び書き込み要求を通知する制御信号に対応する。
【００９２】
また、図１１に示すｔは、公開部ハードウェアモジュール内で保持される変数ｔに対応するデータを出力するデータ転送に対応し、ｓｕｂ＿ｓｔａｒｔ及びｓｕｂ＿ｅｎｄは、公開部ハードウェアモジュール内で実現される関数ｓｕｂの実行制御信号に対応する。
【００９３】
また、図１１に示すｓｕｂ＿ｎ及びｓｕｂ＿ｒｅｇは、関数ｓｕｂの実行時の引数及び戻り値に対応するデータ転送に対応する。
【００９４】
動作記述作成者は、生成したテンプレート及び動作合成装置の装置構成に応じて定義されるプロトコルに合わせて秘匿部ハードウェアモジュールを設計する。
【００９５】
最後に、秘匿部考慮スケジューリング／バインディング手段１０３は、公開部の動作合成結果をＲＴＬ回路記述として生成する（図２のステップＳ５）。図１２は、生成されたＶｅｒｉｌｏｇ−ＨＤＬによる公開部ハードウェアモジュールＲＴＬ記述の一部を例示している。公開部ハードウェアモジュールＲＴＬ記述は、秘匿部ハードウェアモジュールＲＴＬ記述と接続可能な構造を備えており、図１２に示す例では、秘匿部ハードウェアモジュールＲＴＬ回述が下位階層のサブモジュールとしてインスタンス化されて接続されている。
（第２実施例）
次に第２実施例について図面を用いて説明する。
【００９６】
第２実施例は、第２の実施の形態の動作合成装置に対応する。第２実施例の動作合成装置では、動作記述分割指示手段１０１は、図６に示した動作合成記述を動作記述記憶部１１１から読み出し、図７に示した動作記述分割指示を動作記述記憶部１１２から読み出し、動作記述分割指示に基づいて図８に示した秘匿部動作記述、図９に示した公開部動作記述及び図１０に示した秘匿部ハードウェアモジュール情報を作成する。
【００９７】
公開部考慮スケジューリング／バインディング手段１０４は、秘匿部動作記述、秘匿部ハードウェアモジュール情報及び秘匿部動作合成指示に基づいて、図１５に示す秘匿部ハードウェアモジュールＲＴＬ記述を生成し、秘匿部ハードウェアモジュールＲＴＬ記述記憶部１２０に格納する（図５のステップＳ６）。
【００９８】
図１５に示すように、公開部考慮スケジューリング／バインディング手段１０４で生成する秘匿部ハードウェアモジュールＲＴＬ記述には、第１実施例で示した秘匿部ハードウェアモジュールＲＴＬ記述のテンプレートと同様に入出力ポートの定義（図１１参照）が含まれ、さらに動作合成された秘匿部ハードウェアモジュールのＲＴＬ記述が含まれる。
【符号の説明】
【００９９】
１００    処理装置
１０１    動作記述分割手段
１０２    テンプレート生成手段
１０３    秘匿部考慮スケジューリング／バインディング手段
１０４    公開部考慮スケジューリング／バインディング手段
１１０    記憶装置
１１１    動作記述記憶部
１１２    動作記述分割指示記憶部
１１３    秘匿部動作記述記憶部
１１４    公開部動作記述記憶部
１１５    秘匿部ハードウェアモジュール情報記憶部
１１６    秘匿部ハードウェアモジュールＲＴＬ記述テンプレート記憶部
１１７    公開部動作合成指示記憶部
１１８    公開部ハードウェアモジュールＲＴＬ記述記憶部
１１９    秘匿部動作合成指示記憶部
１２０    秘匿部ハードウェアモジュールＲＴＬ記述記憶部
【図１】
0005471413.tif 000002
【図２】
0005471413.tif 000003
【図３】
0005471413.tif 000004
【図４】
0005471413.tif 000005
【図５】
0005471413.tif 000006
【図６】
0005471413.tif 000007
【図７】
0005471413.tif 000008
【図８】
0005471413.tif 000009
【図９】
0005471413.tif 000010
【図１０】
0005471413.tif 000011
【図１１】
0005471413.tif 000012
【図１２】
0005471413.tif 000013
【図１３】
0005471413.tif 000014
【図１４】
0005471413.tif 000015
【図１５】
0005471413.tif 000016