(57)【要約】【課題】回路記述流出時の不正利用と設計情報不正解読のリスクを低減するために、設計情報を秘匿化（設計情報隠蔽と回路記述難読化）した回路記述を生成する半導体集積回路の高位合成方法を提供する。【解決手段】ハードウェアの動作レベル回路記述を解析して得られた中間表現であるＣＤＦＧ（Control Data Flow Graph）に対して、設計情報を秘匿化するため、スケジューリング前又はスケジューリング後に、演算の追加によるＣＤＦＧの変形処理を施す。ハードウェアリソースのアロケーション処理済みのＣＤＦＧに対して、ハードウェアリソースの割り付け変更処理を施してもよい。【選択図】図１
2007193529.tif 000002
【特許請求の範囲】
【請求項１】
ハードウェアの動作レベルの回路記述を解析して、記述中に現れた演算とデータとの流れを表すＤＦＧ（Data Flow Graph）と、演算の実行順序の制御の流れを表すＣＦＧ（Control Flow Graph）とから構成されるＣＤＦＧ（Control Data Flow Graph）を生成する中間表現生成工程と、
所望のハードウェア回路の設計制約条件と使用可能なハードウェアリソースの情報とをもとに前記ＣＤＦＧの各ノードの実行順序をクロックに同期したステートに割り付けるスケジューリング工程と、
前記ＣＤＦＧの各ノードに処理を実現するハードウェアリソースを割り付けるアロケーション工程と、
出力する回路記述中の設計情報の秘匿化を考慮して、演算の追加による前記ＣＤＦＧの変更、又はアロケーション結果の変更を行う回路秘匿化工程と、
前記各工程の処理結果に基づいて、回路記述と秘匿化解読情報とを出力する回路記述出力工程とを備えたことを特徴とする半導体集積回路の高位合成方法。
【請求項２】
請求項１記載の半導体集積回路の高位合成方法において、
前記回路秘匿化工程において追加する処理結果の一致性を保証する演算は、前記ＣＤＦＧ上に存在しない演算であることを特徴とする半導体集積回路の高位合成方法。
【請求項３】
請求項１記載の半導体集積回路の高位合成方法において、
前記回路秘匿化工程において追加する処理結果の一致性を保証する演算は、前記ＣＤＦＧ上に存在する演算であることを特徴とする半導体集積回路の高位合成方法。
【請求項４】
請求項１記載の半導体集積回路の高位合成方法において、
前記回路秘匿化工程は、前記中間表現生成工程で生成されたＣＤＦＧの入出力間のパス遅延を解析して、遅延が短いパスに対して、優先して処理結果の一致性を保証する演算を追加することを特徴とする半導体集積回路の高位合成方法。
【請求項５】
請求項１記載の半導体集積回路の高位合成方法において、
前記回路秘匿化工程は、前記中間表現生成工程で生成されたＣＤＦＧの入出力間のパス遅延を解析して、遅延が長いパスに対して、優先して処理結果の一致性を保証する演算を追加することを特徴とする半導体集積回路の高位合成方法。
【請求項６】
請求項１記載の半導体集積回路の高位合成方法において、
前記回路秘匿化工程は、前記スケジューリング工程で生成されたスケジューリング済みＣＤＦＧを解析して、処理サイクルが増加しない範囲で、処理結果の一致性を保証する冗長な演算を追加することを特徴とする半導体集積回路の高位合成方法。
【請求項７】
請求項４〜６のいずれか１項に記載の半導体集積回路の高位合成方法において、
前記回路秘匿化工程は、追加した演算の入力となる定数を表すノードを定数以外のハードウェアリソースに割り付けることを特徴とする半導体集積回路の高位合成方法。
【請求項８】
請求項７記載の半導体集積回路の高位合成方法において、
前記定数以外のハードウェアリソースとは、入力ポートであることを特徴とする半導体集積回路の高位合成方法。
【請求項９】
請求項４〜６のいずれか１項に記載の半導体集積回路の高位合成方法において、
前記回路秘匿化工程は、前記ＣＤＦＧのノードの入力ビット幅が小さいノードに対して、そのノードの出力値を作り出す演算を追加することを特徴とする半導体集積回路の高位合成方法。
【請求項１０】
請求項４〜６のいずれか１項に記載の半導体集積回路の高位合成方法において、
前記回路秘匿化工程は、前記ＣＤＦＧの定数ノードに対して、その定数値を作り出す演算を追加することを特徴とする半導体集積回路の高位合成方法。
【請求項１１】
請求項１記載の半導体集積回路の高位合成方法において、
前記回路秘匿化工程は、前記アロケーション工程で割り付けられたハードウェアリソースを再利用して、処理結果の一致性を保証する演算を作り出すことを特徴とする半導体集積回路の高位合成方法。
【請求項１２】
請求項１１記載の半導体集積回路の高位合成方法において、
前記回路秘匿化工程は、入力を選択するマルチプレクサの制御遅延が小さいハードウェアリソースを優先して再利用することを特徴とする半導体集積回路の高位合成方法。
【請求項１３】
請求項１１記載の半導体集積回路の高位合成方法において、
前記回路秘匿化工程は、入力ビット幅が小さいハードウェアリソースを優先して再利用することを特徴とする半導体集積回路の高位合成方法。
【請求項１４】
請求項１記載の半導体集積回路の高位合成方法において、
前記回路秘匿化工程は、前記ＣＤＦＧに追加する演算の数を所定の基準に従って制限することを特徴とする半導体集積回路の高位合成方法。
【請求項１５】
請求項１４記載の半導体集積回路の高位合成方法において、
前記所定の基準とは、追加する演算の数の上限であることを特徴とする半導体集積回路の高位合成方法。
【請求項１６】
請求項１４記載の半導体集積回路の高位合成方法において、
前記所定の基準とは、前記追加演算を実行するために必要となるハードウェアリソースの面積が、前記回路秘匿化工程を実施する前の回路面積に及ぼす面積増加率の上限であることを特徴とする半導体集積回路の高位合成方法。
【請求項１７】
請求項１４記載の半導体集積回路の高位合成方法において、
前記所定の基準とは、前記追加演算を実行するために必要となる遅延が、前記ＣＤＦＧの最長パスに及ぼす遅延の増加率であることを特徴とする半導体集積回路の高位合成方法。
【請求項１８】
請求項１記載の半導体集積回路の高位合成方法において、
前記回路記述出力工程は、前記追加演算の結果が所望の値であるかを検証するためのアサーション記述を、回路記述に含めて出力することを特徴とする半導体集積回路の高位合成方法。
【請求項１９】
請求項１記載の半導体集積回路の高位合成方法において、
前記回路記述出力工程は、動作レベルの回路記述を出力することを特徴とする半導体集積回路の高位合成方法。
【請求項２０】
請求項１記載の半導体集積回路の高位合成方法において、
前記回路記述出力工程は、レジスタ転送レベルの回路記述を出力することを特徴とする半導体集積回路の高位合成方法。
【請求項２１】
請求項１記載の半導体集積回路の高位合成方法において、
前記回路記述出力工程は、秘匿化解読情報として、出力された回路記述を解読するための上位階層の回路記述を、独立したファイルとして出力することを特徴とする半導体集積回路の高位合成方法。
【請求項２２】
請求項１記載の半導体集積回路の高位合成方法において、
前記追加演算の方法をデータベースとして備えることを特徴とすることを特徴とする半導体集積回路の高位合成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体集積回路の高位設計方法において、回路記述中の設計情報を秘匿化する方法に関するものである。
【背景技術】
【０００２】
半導体微細化技術及び情報技術の進展に伴い、１つの集積回路に搭載される情報処理機能が格段に向上した。こうした集積回路は、一般に大規模かつ複雑であるため、人手だけによる設計は非現実的である。近年では、機能設計、論理設計、物理設計等、集積回路設計の作業工程が分割され、更に、これらの作業工程は、ＥＤＡ（Electronic Design Automation）と呼ばれるソフトウェア環境によって支援されている。特に、機能設計においては設計が抽象化され、一般にＨＤＬ（Hardware Description Language：ハードウェア記述言語）と呼ばれるハードウェア設計用のプログラミング言語を用いてＲＴＬ（Register Transfer Level：レジスタ転送レベル）の回路記述を作成することによって、集積回路の機能を設計することができる。更に、最近では、より抽象性を高めた高位設計において、動作レベルと呼ばれる高位の回路記述からＲＴＬの回路記述を自動生成する高位合成技術が利用されるようになってきた。
【０００３】
しかしながら、プログラミング言語による高位レベル又は機能レベルのハードウェア設計は、設計を効率化させる反面、設計が抽象化されているために、設計データが流出した際に、第三者によって容易に設計データを解読されてしまうという欠点がある。集積回路の開発工程は、設計から製造まで多岐に分業されているため、電子メールや記録媒体を用いて動作レベル或いはＲＴＬの設計データ（回路記述）を受け渡しすることがある。このため、設計データが流出した際の設計情報の漏洩や不正利用のリスクを低減するために、設計データに対して設計情報を設計者以外から守るための処置を施すことがある。
【０００４】
回路記述において変数等の回路構造を示す名称を、回路構造とは関係のない別の名称に自動変換する方法が知られている（特許文献１及び２参照）。この方法によると、例えば、カウンタを実現する変数名ＣＮＴをＮ１等、カウンタを推測させない全く別の名称に変換する。変数名が変更された回路記述は、設計者以外が容易に解読することはできないため、不正利用のリスクを低減することができる。また、市販されている高位合成ツールは、出力するＲＴＬ回路記述の可読性を上げるために、動作レベル回路記述の変数名等をＲＴＬ回路記述のワイヤ名やレジスタ名に継承することがある。したがって、動作レベルの回路記述において名称を変更することで、高位合成後のＲＴＬ回路記述の不正利用のリスクを低減することができる。
【特許文献１】特開２００２−１６３３１２号公報
【特許文献２】特開２００５−２３５８４８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、前述の従来方法では、回路構造や回路動作から容易に設計情報が解読されてしまう危険性がある。例えば、シミュレーション等による回路動作の解析によって回路記述が解読されてしまう。
【０００６】
そこで、本発明の目的は、回路記述流出時の不正利用と設計情報不正解読のリスクを、より効果的に低減することにある。
【課題を解決するための手段】
【０００７】
上記課題を解決するために、本発明では、設計情報の隠蔽や解読の混乱を招くダミー（冗長）動作の挿入を行うこととした。
【０００８】
具体的に説明すると、本発明に係る半導体集積回路の高位合成方法は、ハードウェアの動作レベル回路記述を解析して、記述中に現れた演算とデータとの流れを表すＤＦＧ（Data Flow Graph）と演算の実行順序の制御の流れを表すＣＦＧ（Control Flow Graph）とから構成されるＣＤＦＧ（Control Data Flow Graph）を生成する中間表現生成工程と、所望のハードウェア回路の設計制約条件と使用可能なハードウェアリソースの情報とをもとに、中間表現生成工程において生成されたＣＤＦＧの各ノードの実行順序をクロックに同期した時間（ステート）に割り付けるスケジューリング工程と、このスケジューリング工程においてスケジュールされたＣＤＦＧの各ノードに処理を実現するハードウェアリソースを割り付けるアロケーション工程と、中間表現生成工程によって生成されたＣＤＦＧに対して、或いはスケジューリング工程又はアロケーション工程における処理が完了したＣＤＦＧに対して、設計情報を秘匿化（設計情報隠匿、或いは回路記述難読化）するために、演算（ノード）の追加によるＣＤＦＧの変形又は回路構造変更又は一部ハードウェアリソースの割り当て変更を施す回路秘匿化工程と、最終的な結果として動作レベル或いはＲＴＬの回路記述と秘匿化解読情報とを別々に出力する回路記述出力工程とを包含することを特徴とする。
【０００９】
なお、本発明の高位合成方法は、追加する演算の種類と方法をデータベースとして与えてもよい。
【発明の効果】
【００１０】
本発明の高位合成方法によれば、動作レベルの回路記述を解析して得られたＣＤＦＧに対して、設計情報を秘匿化（設計情報隠匿、或いは回路記述難読化）するための冗長演算を追加することにより、回路記述が流出した際に不正利用されたり、解読されたりするリスクを低減できる。
【発明を実施するための最良の形態】
【００１１】
以下に、本発明の実施形態について、図面を用いて説明する。なお、本発明は以下の実施形態に何等限定されるものではなく、要旨を逸脱しない範囲においては種々なる形態で実施し得ることは、言うまでもない。
【００１２】
《第１の実施形態》
図１は、第１の実施形態に係る高位合成方法を示すフローチャートである。図１に示す高位合成方法では、ハードウェアの動作レベル回路記述に対して、中間表現生成工程Ｓ０１、スケジューリング工程Ｓ０２、回路秘匿化工程Ｓ１１、アロケーション工程Ｓ０３、回路記述出力工程Ｓ０４が実行される。まず、中間表現生成工程Ｓ０１において、ハードウェアの動作レベル回路記述を解析して、記述中に現れた演算とデータとの流れを表すＤＦＧと、演算の実行順序の制御の流れを表すＣＦＧとから構成されるＣＤＦＧを生成する。そして、スケジューリング工程Ｓ０２において、所望のハードウェアを合成するための設計制約条件と使用可能なハードウェアリソースの情報とをもとに、中間表現生成工程Ｓ０１において生成されたＤＦＧの各ノードの実行順序をクロックに同期した時間（ステート）に割り付ける。次に、回路秘匿化工程Ｓ１１では、スケジューリング工程Ｓ０２で生成されたスケジューリング済みＤＦＧの各ノードのライフタイムを解析して、処理サイクルが増加しない範囲において、ＤＦＧの実行結果に影響を及ぼさないようにＤＦＧを変形する。ＤＦＧの変形は、具体的には、ノードの出力値の一致性を保証する冗長な演算を追加することにより行う。追加する演算の種類と方法は、例えば、データベースとして登録されたものから選択する。次に、アロケーション工程Ｓ０３において、回路秘匿化工程Ｓ１１で変形されたＤＦＧの各ノードに処理を実現するハードウェアリソースを割り付ける。回路記述出力工程Ｓ０４では、スケジューリング工程Ｓ０２、回路秘匿化工程Ｓ１１、アロケーション工程Ｓ０３の処理結果に基づいて、動作レベル又はＲＴＬの回路記述と秘匿化内容を解読するための情報とを出力する。
【００１３】
以下、
ｙ＝（（（ａ＋ｂ）＋ｃ）＋（ｄ＋ｅ））＋（ｆ＋ｇ）
という計算式の図２に示す動作レベル回路記述ＢＤ１（秘匿化処理前：初期状態）を用いて、本実施形態の動作の一例を示す。
【００１４】
まず、中間表現生成工程Ｓ０１では、動作レベル回路記述ＢＤ１を解析して、変数、演算をノードで、データの流れをエッジでそれぞれ表したＤＦＧと、ＤＦＧをノードで、ＤＦＧの実行順序の制御をエッジでそれぞれ表したＣＦＧとから構成されるＣＤＦＧを生成する。ＢＤ１のＣＤＦＧを図３に示す。ＢＤ１には、処理の実行順序を制御する条件記述（Ｃ／Ｃ＋＋等のプログラミング言語では、一般にＩＦ文、ＦＯＲ文等で表現される。）が存在しないため、ＣＦＧのノードは１つのみである。また、ＤＦＧの重複する演算（ノード）には、＋１、＋２等、識別番号を記載している。
【００１５】
次に、スケジューリング工程Ｓ０２において、ＤＦＧの各ノードをステップと呼ばれるクロックサイクルに同期した時間に割り付けて実行順序を決定する。図４は、ＢＤ１のスケジューリング済みのＤＦＧである。ＤＦＧの各ノードは、Ｓ０，Ｓ１，Ｓ２，Ｓ３のいずれかのステートに割り付けられている。
【００１６】
回路秘匿化工程Ｓ１１では、処理サイクル数が増加しない範囲で、かつ、元の動作レベル回路記述ＢＤ１の実行結果に影響を与えないような演算を追加する。そのため、まずスケジューリング済みのＤＦＧの各ノードの出力値のライフタイムを解析する。ライフタイムとは、ノードの出力値が保持されるステップ数のことである。図４のＤＦＧでは、ノード＋１、＋２、＋３、＋４のライフタイムは１であり、＋５のライフタイムは３であり、＋６のライフタイムは４である。ライフタイムが２以上のノードの出力値、例えばノード＋６の出力値に対して、当該ノード＋６の出力値を保証する新たな演算を施す。新たに追加する演算は、１サイクルで実行可能なハードウェアリソースを割り付けられる演算のみとする。これにより、追加演算によって回路性能が劣化する（処理サイクルが増加する）ことを防ぐ。また、出力値を保証する演算として、データベースから任意の演算を選択してもよいが、ここでは、ＤＦＧ上に存在する演算で、かつ演算を追加するステップ以外に存在する演算を選択するという選定基準を設けて、ノード＋６の出力値とゼロとの加算を追加する。図５は、ノード＋６の出力値とゼロとの加算を追加した後のＤＦＧである。加算ノード＋７と定数ノード０とが新たに追加されている。この場合、加算ノード＋７を追加するステップ以外では、ＤＦＧ上に５個の加算ノード＋１、＋３、＋４、＋５、＋６が存在するため、以降で実施するアロケーション工程Ｓ０３において、これらの加算ノードに割り付けられるハードウェアリソースを共有できる可能性がある。共有された場合、ハードウェアリソースの使用数削減によって、追加演算による回路面積の増加を抑制することができる。
【００１７】
更に、加算ノード＋７の入力となる定数ノード０を入力ポートｐに割り付ける。定数ノードを入力ポートに割り付ける１つの理由は、追加演算が冗長であるため、高位合成中の最適化処理、或いは論理合成中の最適化処理において、冗長性を削除されることを防ぐためである。この追加演算は、最終的に出力する回路記述を難読化することを目的とする。したがって、出力回路記述に対して確実に反映する必要がある。もう１つの理由は、回路記述を正しく動作させるために必要な情報を隠蔽するためである。定数値を入力ポートとして隠蔽することにより、回路記述が流出した場合でも、入力ポートに正しい値を与えない限り、回路記述を正しく利用することができず、流出時のリスクを低減することができる。
【００１８】
次に、アロケーション工程Ｓ０３において、回路秘匿化工程Ｓ１１で変形されたＤＦＧの各ノードに対して処理を実行するハードウェアリソースを割り付ける。図６は、ハードウェアリソース割り付け後のＤＦＧである。追加ノード＋７に割り付けられた加算リソースＡｄｄ２は、加算ノード＋５と共有されているので、ハードウェアリソースの増加を抑制できている。
【００１９】
最後に、回路記述出力工程Ｓ０４において、秘匿化処理を反映した回路記述と機密内容を解読するための秘匿化解読情報とを出力する。回路設計者は、回路記述と秘匿化解読情報とを別々に管理し、正規の回路記述使用者に対して、別々のルート（電子メール、記録媒体等）でこれらを提供することにより、回路記述流出時に設計情報が解読されるリスクを低減することができる。
【００２０】
図７は、動作レベル回路記述ＢＤ１に対して秘匿化処理を施す高位合成により得られたＲＴＬ回路記述の一例である。一方、図８は、秘匿化処理を施さない、従来の高位合成により得られたＲＴＬ回路記述である。なお、両図のＲＴＬ回路記述では、ワイヤ及びレジスタの宣言については省略している。両図のＲＴＬ回路記述には、ＢＤ１の変数名をワイヤ名に継承しているため、秘匿化処理を施さなかった図８のＲＴＬ回路記述には、ＢＤ１の部分式「ｄ＋ｅ」に相当する記述が１０行目にそのままの形で残っている。一方、図７のＲＴＬ回路記述には、「ｄ＋ｅ」に相当する記述は、ＢＤ１とは異なる形（１０行目から１２行目）で実現されている。したがって、秘匿化処理が施された図７のＲＴＬ回路記述からＢＤ１の計算式を解読することは、図８のＲＴＬ回路記述に比べて困難である。また、図７のＲＴＬ回路記述は、入力ポートｐに対してゼロを与えない限り、ＢＤ１と同じ結果を得ることができず、ＲＴＬ回路記述が流出した際も、不正に回路記述が利用されるリスクを低減できる。
【００２１】
秘匿化解読情報は、例えば、追加演算の個数、追加演算の種類、回路記述中に追加演算が存在する行数、追加演算に入力する値（追加入力ポートに与える値）等である。追加演算に入力する値は、秘匿化処理が施された回路記述の上位階層記述として与えてもよい。図９は、図７のＲＴＬ回路記述の上位階層にあたる回路記述である。図７の追加入力ポートｐがゼロに固定されている。上位階層記述を得ることにより、回路記述使用者は、秘匿化された情報を解読できる。
【００２２】
なお、出力する回路記述としては、ＲＴＬ回路記述に限らず、動作レベル回路記述を選択してもよい。図１０は、秘匿化処理が施された動作レベル回路記述ＢＤ２である。ＢＤ２では、３行目の右辺に変数ｇとＢＤ１に存在しなかった変数ｐとの演算が追加されている。ＢＤ２から元のＢＤ１を導き出すことは、設計情報等、必要な情報を知らない限り難しいことである。また、変数ｐにゼロを与えない限り、図２のＢＤ１と同じ結果は得られない。これによって、動作レベル回路記述の設計情報が解読されるリスク、不正利用されるリスクを低減できる。
【００２３】
また、回路記述には、追加演算前後の結果が常に同じ結果であることを確認するためのアサーション記述を追加してもよい。多数の入力ポートが追加された場合、これら全てに正しい値がセットされたかを確認することは手間がかかる。したがって、回路設計者がデバッグの際に、追加入力ポートの値設定ミスがあった場合、自動でミスを検出することができるので、設計情報の秘匿化によって起こり得る問題の解析工数発生のリスクを低減することができる。
【００２４】
以上のようにして、設計情報を秘匿化（設計情報の隠蔽と設計データの難読化）した回路記述を生成することができる。また、追加演算はライフタイムが２以上のノードの出力値に対して施すので、追加演算によってスケジューリング結果を変更する必要はなく、回路性能が劣化することはない。
【００２５】
なお、本実施形態では、追加演算にゼロとの加算を用いたが、選択演算、比較演算、論理演算、加算以外の四則演算等、出力値を保証できるものであれば、データベースに存在する任意の演算の種類を追加してもよい。
【００２６】
また、本実施形態では、追加演算としてＤＦＧ上に存在する加算演算を選択したが、追加演算の選定基準として、逆にＤＦＧ上に存在しない演算を追加してもよい。図３の例では、加算演算の代わりに、ノード＋６の出力値と定数１との乗算、ノード＋６の出力値と定数０とのいずれかを選択する選択演算（選択信号は入力ポートから与える）等を追加してもよい。この場合、以降のアロケーション工程Ｓ０３においてハードウェアリソースの共有を期待することができないため、回路面積の抑制は期待できない。しかしながら、ＤＦＧ上に存在しない演算は、アルゴリズム等を記載した回路仕様書にも存在しない。このため、出力された回路記述中の演算子からアルゴリズムを予測し辛くなり、回路記述が流出した際の不正解読のリスクを低減できる。
【００２７】
また、本実施形態では、回路秘匿化工程Ｓ１１において１つのノードに対してのみ演算を追加したが、ライフタイムが２以上の複数のノードに対して演算を追加してもよい。
【００２８】
《第２の実施形態》
図１１は、第２の実施形態に係る高位合成方法を示すフローチャートである。第１の実施形態との違いは、回路の秘匿化処理がスケジューリング工程Ｓ０２の前に実施される点である。図１１の回路秘匿化工程Ｓ１２は、回路秘匿化時にスケジューリング結果の制約を受けないため、第１の実施形態に比較して、柔軟に演算を追加することができる。
【００２９】
演算は、ＤＦＧの最小遅延パス上に存在するノードに対して追加するのがよい。まず、ＤＦＧの各ノードに対して、そのノードを経由するパスの遅延を算出して、最長の遅延を設定する。
【００３０】
前記ＢＤ１から得られた図３のＤＦＧを用いて説明する。ここでは、加算ノードの遅延は１０ｎｓ、入力ノード、出力ノードの遅延は、ともに０ｎｓとする。ノード＋１を経由するパスは、（ａ，＋１，＋２，＋３，＋４）、（ｂ，＋１，＋２，＋３，＋４）の２つである。これら２つのパス遅延はともに４０ｎｓであるので、ノード＋１には４０ｎｓを設定する。ノード＋２を経由するパスは、（ａ，＋１，＋２，＋３，＋４）、（ｂ，＋１，＋２，＋３，＋４）、（ｃ，＋２，＋３，＋４）の３つである。これら３つのパス遅延は、それぞれ４０ｎｓ、４０ｎｓ、３０ｎｓである。最長遅延に基づき、ノード＋２に４０ｎｓを設定する。同様の計算を行い、ノード＋３、＋４、＋５、＋６に、それぞれ４０ｎｓ、４０ｎｓ、３０ｎｓ、２０ｎｓを設定する。最小遅延パス上に存在するノードは＋６であるので、ここではノード＋６の出力値に対して、新たな演算を施す。例えば、ゼロとの加算を追加すると、図１２のようなＤＦＧになる。この場合、追加演算＋７を経由する最長のパスは、（ｆ，＋６，＋７，＋４）、（ｇ，＋６，＋７，＋４）の３０ｎｓである。したがって、図３に示す元のＤＦＧの最長遅延４０ｎｓを超えないので、以降のスケジューリング工程Ｓ０２における結果で、処理サイクルが増加することを防ぐことができる。
【００３１】
以上のように、ＤＦＧの最小遅延パス上に存在するノードに対して演算を追加することで、スケジューリング工程Ｓ０２において処理サイクルの増加を抑制した、回路の秘匿化を実現できる。また、スケジューリング実行前にＤＦＧに演算を追加することによって、スケジューリング工程Ｓ０２にて、第１の実施形態と違い、初期のＤＦＧ上のノードだけでなく、追加演算（ノード）を含めて、ハードウェアリソースの共有を考慮したスケジューリングを実施できる。
【００３２】
また、逆に、ＤＦＧの最大遅延パス上に存在するノードに対して演算を追加してもよい。この場合、スケジューリング工程Ｓ０２において、処理サイクルが増加する可能性が高くなるため、回路記述出力工程Ｓ０４において動作レベル回路記述のみを出力する。ＲＴＬ回路記述を出力しないのは、論理合成以降の工程で処理サイクルを改善することが困難なためである。一方、秘匿化処理が施された動作レベル回路記述は、再び、従来の秘匿化処理を施さない高位合成をすることで処理サイクルを改善することができる。
【００３３】
例えば、図１３に示すように、図３の演算ノード＋２の出力に対して冗長なゼロとの加算演算を施し、定数値を入力ポートとして隠蔽する。この処置を施して出力した動作レベル回路記述を従来手法によって高位合成する。加算ノードの遅延を１０ｎｓとすると、追加演算（ノード）＋７を経由するパスの最長遅延が、（ａ，＋１，＋２，＋７，＋３，＋４）又は（ｂ，＋１，＋２，＋７，＋３，＋４）の５０ｎｓとなり、元の動作レベル回路記述の最長遅延４０ｎｓを超える。このため、クロック周波数の制約によって、サイクル数が増加する可能性がある。しかしながら、第１の実施形態で説明したように、秘匿化解読情報として出力した、追加ポートに正しい定数値を設定する動作レベルの上位階層記述から高位合成を実施することで、本質的に冗長である追加演算は、高位合成の最適化機能（具体的には、定数伝播機能）によって、ＤＦＧのレベルで計算されてしまう。定数伝播実施後の追加演算（冗長演算）が削除されたＤＦＧは、基本的に、演算が追加される前の初期のＤＦＧ、すなわち図３のＤＦＧと同じになる。このＤＦＧに対して実施するスケジューリング結果は、冗長なサイクルを含まない。これは秘匿化解読情報を入手することによって可能となるので、秘匿化された動作レベル回路記述から、設計情報秘匿化のための不要サイクルを含まない正規のＲＴＬ回路記述を生成されるリスクを低減できる。また、極端に多くの演算を追加した動作レベル回路記述を、秘匿化解読情報を与えず、追加ポートをそのままポートとして高位合成すると、前述したように、追加演算により、不要にサイクルが増大する可能性がある。その結果、回路記述を動作させたときの処理サイクル数が、アルゴリズム本来の性能と差が生じて、処理サイクルからアルゴリズムを予測することを困難にさせることができる。
【００３４】
以上のようにして、スケジューリング実行前に設計情報の秘匿化処理を施すことで、回路性能（処理サイクル）の劣化を抑制しつつ、追加演算を実行するハードウェアリソースの面積増加を抑制できる。また、スケジューリング実行前に設計情報を秘匿化して得られた動作レベル回路記述は、設計情報の隠蔽と回路記述の難読化のみならず、出力されるＲＴＬ回路記述の性能（処理サイクル）も隠蔽することができるので、設計情報の秘匿性を向上させることができる。
【００３５】
《第３の実施形態》
図１４は、第３の実施形態に係る高位合成方法を示すフローチャートである。第１の実施形態との違いは、回路の秘匿化処理がアロケーション工程Ｓ０３の後に実施される点である。ここで、入力動作レベル回路記述に存在する冗長な計算式は、中間表現生成工程Ｓ０１においてＣＤＦＧが生成される段階で最適化機能によって削除されるものとする。
【００３６】
図１４の回路秘匿化工程Ｓ１３では、回路秘匿化時にアロケーション情報からＲＴＬ回路構造を推測しながら、演算を追加することができる。
【００３７】
図１５に示すアロケーション済みＤＦＧを用いて説明する。なお、ハードウェアリソースＡｄｄ１，Ａｄｄ２の出力はそれぞれ、レジスタＲ１，Ｒ２で受けるものとする。図１５のアロケーション結果から、図１６に示すＲＴＬ回路構造を推測することができる。
【００３８】
まず、出力値のライフタイムが２以上のノードを選択する。ここではノード＋４の出力のみが２以上のライフタイムを持つ。選択したノードの出力に対して施す新たな演算をデータベースから選択する。このとき、選択する演算は、図１５のＤＦＧのノードに割り付けられたハードウェアリソースをスケジューリングの変更をせずに再利用することによって、実行できるものとする。図１５の例では、ノード＋４に割り付けられたハードウェアリソースＡｄｄ２のみがステートＳ１，Ｓ２で再利用可能である。したがって、ノード＋４の出力に対して、Ａｄｄ２で実行可能な演算として、ゼロとの加算をステートＳ１で実行するように追加する。
【００３９】
なお、追加演算の入力となる定数は、入力ポートに割り付けない。この処置を施した後のＤＦＧを図１７に示す。図１７のアロケーション結果から、図１８に示すＲＴＬ回路構造を推測することができる。ここで、再利用されたハードウェアリソースは、２つ以上の演算を実行することになり、これらの演算を適切に実行するための入力制御が必要となる。図１８では、マルチプレクサＭＵＸ３，ＭＵＸ４によって入力を制御（選択）することで、元の演算と冗長演算とを適宜実行している。
【００４０】
回路記述出力工程Ｓ０４は、回路秘匿化工程Ｓ１３で最終的に変形されたＤＦＧとアロケーション情報とに基づいて推測される回路構造を、ＲＴＬの回路記述として出力する。このＲＴＬ回路記述は、冗長に追加された演算及び制御を含むため、解読が困難な複雑な記述になっている。
【００４１】
以上のようにして、ハードウェアリソースが割り付けられたＤＦＧを解析して回路秘匿化処理を施すことにより、解読を困難にさせるための冗長な演算及び制御を作り出すことができるため、設計データ流出時に、回路記述が解読されるリスクを低減できる。また、ハードウェアリソースを再利用することを前提に冗長な演算を作り出すことで、ハードウェアリソースの増加を抑制することができる。また、第１の実施形態と違って、設計情報隠蔽のためのポートを追加することがないため、回路記述を検証する際に、特別なケアをする必要がない。
【００４２】
本実施形態における高位合成方法は、ＲＴＬ回路構造に対する難読化を実現するため、回路記述出力工程Ｓ０４では、ＲＴＬ回路記述のみを出力する。
【００４３】
なお、冗長演算を施す演算（ノード）の選択肢が複数ある場合は、再利用するハードウェアリソースの入力を選択するマルチプレクサの入力数（或いは段数）が少ないものを選択すればよい。マルチプレクサの出力を選択するための制御信号は、制御回路であるＦＳＭ（Finite State Machine）の状態レジスタとデータパス回路の出力から生成されるが、選択する入力数が多く制御が複雑になると、制御信号を生成する論理段数が大きくなる可能性が高くなる。この場合、状態レジスタからマルチプレクサを経由してデータパス回路のレジスタに到達するパス遅延が、設計制約で規定された動作周波数制約を満たさなくなる危険性がある。したがって、マルチプレクサの入力数が少ないハードウェアリソースを採用することで、遅延違反の危険性を抑制することができる。
【００４４】
また、再利用するハードウェアリソースのビット幅が小さいものを選択してもよい。ただし、ハードウェアリソースは選択した演算を十分実行できるビット幅を有するものとする。入力を選択するために追加されるマルチプレクサは、ハードウェアリソースの入力ビット幅に依存するため、ビット幅が小さいハードウェアリソースを選択することで、マルチプレクサのビット幅が小さくなり、面積の増加を抑制することができる。
【００４５】
《第４の実施形態》
図１９は、第４の実施形態に係る高位合成方法における回路秘匿化工程を示すフローチャートである。本実施形態では、第１〜第３の実施形態の回路秘匿化工程Ｓ１１，Ｓ１２，Ｓ１３において追加する演算の数を所定の基準に従って制限する。
【００４６】
本実施形態における回路秘匿化工程では、図１９に示すように、終了判定工程Ｓ２１の次に、演算追加工程Ｓ２２が実行される。終了判定工程Ｓ２１では、所定の基準に従い、処理を終了するか継続するかが判断される。処理継続と判断（ＮＯと判断）した場合は、演算追加工程Ｓ２２を実施する。演算追加工程Ｓ２２の終了後は、終了判定工程Ｓ２１に戻る。処理終了と判定（ＹＥＳと判断）されるか、演算が追加できなくなるまで、演算追加工程Ｓ２２と終了判定工程Ｓ２１とを繰り返し実施する。
【００４７】
以下、本実施形態の動作の一例として、上述した動作レベル回路記述ＢＤ１から得られた図４のＤＦＧを用いて説明する。
【００４８】
まず、処理を終了するための基準として、追加する演算数を制限する方法を示す。ここでは、追加する演算数は「２つまで」とする。
【００４９】
図１９によれば、まず終了判定工程Ｓ２１において、追加した演算の数が所定の基準（２つまで）に達したかを判定する。追加した演算は０個なので、演算追加工程Ｓ２２に進む。演算追加工程Ｓ２２では、ライフタイムが２以上のノードを１つ選択して、そのノードの出力に対して、新たな演算を追加する。
【００５０】
例えば、ビット幅が小さいノードを選択すればよい。追加する演算を実行するハードウェアリソースの面積は、計算するビット幅に応じて増加する。３２ビットの演算を追加すると、３２ビットの加算リソースが必要になるが、４ビットの演算を追加する場合には、４ビットの加算リソースで済む。したがって、ビット幅が小さいノードを選択することは、追加演算によるハードウェアリソースの面積を抑制できる可能性がある。
【００５１】
また、定数ノードを選択してもよい。ＤＦＧ上に存在する定数ノードは、アルゴリズムで規定された定数である場合がある。この場合、アルゴリズムで規定された定数を別の定数の演算によって作り出すことにより、最終的に出力する回路記述から、アルゴリズムで規定された定数を隠蔽できる。この結果、回路記述に存在する定数からアルゴリズムを解読されるリスクを低減できる。
【００５２】
図４の例では、ノード＋６を選択する。ノード＋６の出力値に対して、ゼロとの加算を施すことにより、ノード＋６の出力値を保証する。ゼロとの加算を追加したＤＦＧは、図２０に示すとおり、第１の実施形態で示した図５と同じになる。
【００５３】
次に、終了判定工程Ｓ２１に戻る。ここでは、追加した演算数が１つであり、所定の基準（２つまで）に達していないので、再び、演算追加工程Ｓ２２に移る。
【００５４】
演算追加工程Ｓ２２では、更新されたＤＦＧのライフタイム情報に基づき、ノードを選択する。図２０は、１回目の演算追加工程Ｓ２２による更新後のＤＦＧとライフタイムを示す。ライフタイムが２以上のノードは、＋５と＋７である。ここでは、ノード＋５の出力値に対して新たな演算を施す。図２１は、ノード＋５の出力に対して１との乗算を施した後のＤＦＧ及びライフタイム情報である。
【００５５】
再び、終了判定工程Ｓ２１に移る。更新後のＤＦＧ（図２１参照）上には、ライフタイムが２以上のノードが２つ（＊、＋７）存在しているが、追加した演算数が２つになり、所定の基準（２つまで）に達したので、ここで処理を終了する。
【００５６】
次に、処理を終了するための基準として、追加する演算数を回路の面積増加率により制限する方法を示す。ここでは、回路面積の増加率が「１０％を超えるまで」とする。また、加算リソースの面積は一律１０とする。
【００５７】
まず、終了判定工程Ｓ２１において、追加した演算の数が所定の基準（回路面積増加率１０％）を超えたかを判定する。図４のＤＦＧの元の回路面積は、加算演算が６個あるので、面積は６０と推定する。ここでは、追加した演算は０個なので、面積増加率は０であるので、演算追加工程Ｓ２２に進む。
【００５８】
演算追加工程Ｓ２２では、ライフタイムが２以上のノードを１つ選択して、そのノードの出力に対して、新たな演算を追加する。ここでは、ノード＋６を選択して、ゼロとの加算を追加する。ゼロとの加算を追加したＤＦＧは、図２０のようになる。加算演算が１つ増えたので、回路面積を７０と推定する。
【００５９】
次に、終了判定工程Ｓ２１に戻る。回路面積が、元の推定値６０から７０に増加したので、増加率は１６％である。所定の基準（回路面積増加率１０％）を超えたので、ここで処理を終了する。
【００６０】
以上のようにすれば、追加する演算の数を所定の基準に従って制御することができる。追加演算数を制限する場合、設計情報を秘匿化するための情報量を主として制御することができる。また、回路面積の増加率を制限する場合、設計情報を秘匿化しつつ、回路面積のオーバーヘッドを抑制することができる。
【００６１】
なお、回路面積の増加率の代わりに、回路性能（最長パス遅延）の増加率を制限してもよい。例えば、第２の実施形態の図１１で示したように、中間表現生成工程Ｓ０１において生成されたＤＦＧに対して演算を追加する場合に、設計情報を秘匿化しつつ、極端に最長パス遅延が増加してスケジューリング結果として処理サイクルが増大することを防ぐことができる。
【産業上の利用可能性】
【００６２】
以上説明してきたとおり、本発明に係る半導体集積回路の高位合成方法は、回路記述が流出した際に不正利用されたり、解読されたりするリスクを低減できる効果を有し、ディジタル回路を構成するＲＴＬ回路記述の生成等に有用である。
【図面の簡単な説明】
【００６３】
【図１】第１の実施形態に係る半導体集積回路の高位合成方法を示すフローチャートである。
【図２】第１の実施形態に係る半導体集積回路の高位合成方法における動作レベル回路記述を示す図である。
【図３】第１の実施形態に係る半導体集積回路の高位合成方法における中間表現生成工程によって生成されたＤＦＧを示す図である。
【図４】第１の実施形態に係る半導体集積回路の高位合成方法におけるスケジューリング工程によってスケジュールされたＤＦＧを示す図である。
【図５】第１の実施形態に係る半導体集積回路の高位合成方法における回路秘匿化工程によって変形されたＤＦＧを示す図である。
【図６】第１の実施形態に係る半導体集積回路の高位合成方法におけるアロケーション工程によってハードウェアリソースが割り付けられたＤＦＧを示す図である。
【図７】第１の実施形態に係る半導体集積回路の高位合成方法における回路記述出力工程によって出力された秘匿化処理済みのＲＴＬ回路記述を示す図である。
【図８】秘匿化処理が施されていないＲＴＬ回路記述を示す図である。
【図９】第１の実施形態に係る半導体集積回路の高位合成方法における回路記述出力工程によって出力された秘匿化解読情報としての上位階層回路記述を示す図である。
【図１０】第１の実施形態に係る半導体集積回路の高位合成方法における回路記述出力工程によって出力された秘匿化処理済みの動作レベル回路記述を示す図である。
【図１１】第２の実施形態に係る半導体集積回路の高位合成方法を示すフローチャートである。
【図１２】第２の実施形態に係る半導体集積回路の高位合成方法における回路秘匿化工程によって変形されたＤＦＧを示す図である。
【図１３】第２の実施形態に係る半導体集積回路の高位合成方法における回路秘匿化工程によって変形された他のＤＦＧを示す図である。
【図１４】第３の実施形態に係る半導体集積回路の高位合成方法を示すフローチャートである。
【図１５】ハードウェアリソース割り付け済みＤＦＧを示す図である。
【図１６】図１５のＤＦＧから推測されたＲＴＬ回路構造を示す図である。
【図１７】第３の実施形態に係る半導体集積回路の高位合成方法における回路秘匿化工程によって変形されたハードウェアリソース割り付け済みＤＦＧを示す図である。
【図１８】図１７のＤＦＧから推測されたＲＴＬ回路構造を示す図である。
【図１９】第４の実施形態に係る半導体集積回路の高位合成方法における回路秘匿化工程の詳細を示すフローチャートである。
【図２０】第４の実施形態に係る半導体集積回路の高位合成方法における回路秘匿化工程によって加算演算が追加されたＤＦＧを示す図である。
【図２１】第４の実施形態に係る半導体集積回路の高位合成方法における回路秘匿化工程によって更に乗算演算が追加されたＤＦＧを示す図である。
【符号の説明】
【００６４】
Ｓ０１  中間表現生成工程
Ｓ０２  スケジューリング工程
Ｓ０３  アロケーション工程
Ｓ０４  回路記述出力工程
Ｓ１１，Ｓ１２，Ｓ１３  回路秘匿化工程
Ｓ２１  終了判定工程
Ｓ２２  演算追加工程
【図１】
2007193529.tif 000003
【図２】
2007193529.tif 000004
【図３】
2007193529.tif 000005
【図４】
2007193529.tif 000006
【図５】
2007193529.tif 000007
【図６】
2007193529.tif 000008
【図７】
2007193529.tif 000009
【図８】
2007193529.tif 000010
【図９】
2007193529.tif 000011
【図１０】
2007193529.tif 000012
【図１１】
2007193529.tif 000013
【図１２】
2007193529.tif 000014
【図１３】
2007193529.tif 000015
【図１４】
2007193529.tif 000016
【図１５】
2007193529.tif 000017
【図１６】
2007193529.tif 000018
【図１７】
2007193529.tif 000019
【図１８】
2007193529.tif 000020
【図１９】
2007193529.tif 000021
【図２０】
2007193529.tif 000022
【図２１】
2007193529.tif 000023
【手続補正書】
【提出日】平成18年7月12日(2006.7.12)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
ハードウェアの動作レベルの回路記述を解析して、記述中に現れた演算とデータとの流れを表すＤＦＧ（Data Flow Graph）と、演算の実行順序の制御の流れを表すＣＦＧ（Control Flow Graph）とから構成されるＣＤＦＧ（Control Data Flow Graph）を生成する中間表現生成工程と、
所望のハードウェア回路の設計制約条件と使用可能なハードウェアリソースの情報とをもとに前記ＣＤＦＧの各ノードの実行順序をクロックに同期したステートに割り付けるスケジューリング工程と、
前記ＣＤＦＧの各ノードに処理を実現するハードウェアリソースを割り付けるアロケーション工程と、
出力する回路記述中の設計情報の秘匿化を考慮して、前記ＣＤＦＧの変更、又はアロケーション結果の変更を行う回路秘匿化工程と、
前記各工程の処理結果に基づいて、回路記述と秘匿化解読情報とを出力する回路記述出力工程とを備えたことを特徴とする半導体集積回路の高位合成方法。
【請求項２】
請求項１記載の半導体集積回路の高位合成方法において、
前記回路秘匿化工程における前記ＣＤＦＧの変更とは、処理結果の一致性を保証する演算を追加することであって、前記演算は、前記ＣＤＦＧ上に存在しない演算であることを特徴とする半導体集積回路の高位合成方法。
【請求項３】
請求項１記載の半導体集積回路の高位合成方法において、
前記回路秘匿化工程における前記ＣＤＦＧの変更とは、処理結果の一致性を保証する演算を追加することであって、前記演算は、前記ＣＤＦＧ上に存在する演算であることを特徴とする半導体集積回路の高位合成方法。
【請求項４】
請求項１記載の半導体集積回路の高位合成方法において、
前記回路秘匿化工程における前記ＣＤＦＧの変更とは、処理結果の一致性を保証する演算を追加することであって、前記演算を、前記中間表現生成工程で生成されたＣＤＦＧの入出力間のパス遅延を解析して、遅延が短いパスに対して、優先して追加することを特徴とする半導体集積回路の高位合成方法。
【請求項５】
請求項１記載の半導体集積回路の高位合成方法において、
前記回路秘匿化工程における前記ＣＤＦＧの変更とは、処理結果の一致性を保証する演算を追加することであって、前記演算を、前記中間表現生成工程で生成されたＣＤＦＧの入出力間のパス遅延を解析して、遅延が長いパスに対して、優先して追加することを特徴とする半導体集積回路の高位合成方法。
【請求項６】
請求項１記載の半導体集積回路の高位合成方法において、
前記回路秘匿化工程における前記ＣＤＦＧの変更とは、処理結果の一致性を保証する演算を追加することであって、前記演算を、前記スケジューリング工程で生成されたスケジューリング済みＣＤＦＧを解析して、処理サイクルが増加しない範囲で追加することを特徴とする半導体集積回路の高位合成方法。
【請求項７】
請求項４〜６のいずれか１項に記載の半導体集積回路の高位合成方法において、
前記回路秘匿化工程は、変更した前記ＣＤＦＧの定数を表すノードを定数以外のハードウェアリソースに割り付けることを特徴とする半導体集積回路の高位合成方法。
【請求項８】
請求項７記載の半導体集積回路の高位合成方法において、
前記定数以外のハードウェアリソースとは、入力ポートであることを特徴とする半導体集積回路の高位合成方法。
【請求項９】
請求項４〜６のいずれか１項に記載の半導体集積回路の高位合成方法において、
前記回路秘匿化工程は、前記ＣＤＦＧのノードの入力ビット幅が小さいノードに対して、そのノードの出力値を作り出す演算を追加することを特徴とする半導体集積回路の高位合成方法。
【請求項１０】
請求項４〜６のいずれか１項に記載の半導体集積回路の高位合成方法において、
前記回路秘匿化工程は、前記ＣＤＦＧの定数ノードに対して、その定数値を作り出す演算を追加することを特徴とする半導体集積回路の高位合成方法。
【請求項１１】
請求項１記載の半導体集積回路の高位合成方法において、
前記回路秘匿化工程における前記ＣＤＦＧの変更とは、処理結果の一致性を保証する演算を追加することであって、前記演算を、前記アロケーション工程で割り付けられたハードウェアリソースを再利用して作り出すことを特徴とする半導体集積回路の高位合成方法。
【請求項１２】
請求項１１記載の半導体集積回路の高位合成方法において、
前記回路秘匿化工程は、入力を選択するマルチプレクサの制御遅延が小さいハードウェアリソースを優先して再利用することを特徴とする半導体集積回路の高位合成方法。
【請求項１３】
請求項１１記載の半導体集積回路の高位合成方法において、
前記回路秘匿化工程は、入力ビット幅が小さいハードウェアリソースを優先して再利用することを特徴とする半導体集積回路の高位合成方法。
【請求項１４】
請求項１記載の半導体集積回路の高位合成方法において、
前記回路秘匿化工程は、前記ＣＤＦＧに追加する演算の数を所定の基準に従って制限することを特徴とする半導体集積回路の高位合成方法。
【請求項１５】
請求項１４記載の半導体集積回路の高位合成方法において、
前記所定の基準とは、追加する演算の数の上限であることを特徴とする半導体集積回路の高位合成方法。
【請求項１６】
請求項１４記載の半導体集積回路の高位合成方法において、
前記所定の基準とは、前記追加演算を実行するために必要となるハードウェアリソースの面積が、前記回路秘匿化工程を実施する前の回路面積に及ぼす面積増加率の上限であることを特徴とする半導体集積回路の高位合成方法。
【請求項１７】
請求項１４記載の半導体集積回路の高位合成方法において、
前記所定の基準とは、前記追加演算を実行するために必要となる遅延が、前記ＣＤＦＧの最長パスに及ぼす遅延の増加率であることを特徴とする半導体集積回路の高位合成方法。
【請求項１８】
請求項１記載の半導体集積回路の高位合成方法において、
前記回路記述出力工程は、前記追加演算の結果が所望の値であるかを検証するためのアサーション記述を、回路記述に含めて出力することを特徴とする半導体集積回路の高位合成方法。
【請求項１９】
請求項１記載の半導体集積回路の高位合成方法において、
前記回路記述出力工程は、動作レベルの回路記述を出力することを特徴とする半導体集積回路の高位合成方法。
【請求項２０】
請求項１記載の半導体集積回路の高位合成方法において、
前記回路記述出力工程は、レジスタ転送レベルの回路記述を出力することを特徴とする半導体集積回路の高位合成方法。
【請求項２１】
請求項１記載の半導体集積回路の高位合成方法において、
前記回路記述出力工程は、秘匿化解読情報として、出力された回路記述を解読するための上位階層の回路記述を、独立したファイルとして出力することを特徴とする半導体集積回路の高位合成方法。
【請求項２２】
請求項１記載の半導体集積回路の高位合成方法において、
前記追加演算の方法をデータベースとして備えることを特徴とすることを特徴とする半導体集積回路の高位合成方法。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体集積回路の高位設計方法において、回路記述中の設計情報を秘匿化する方法に関するものである。
【背景技術】
【０００２】
半導体微細化技術及び情報技術の進展に伴い、１つの集積回路に搭載される情報処理機能が格段に向上した。こうした集積回路は、一般に大規模かつ複雑であるため、人手だけによる設計は非現実的である。近年では、機能設計、論理設計、物理設計等、集積回路設計の作業工程が分割され、更に、これらの作業工程は、ＥＤＡ（Electronic Design Automation）と呼ばれるソフトウェア環境によって支援されている。特に、機能設計においては設計が抽象化され、一般にＨＤＬ（Hardware Description Language：ハードウェア記述言語）と呼ばれるハードウェア設計用のプログラミング言語を用いてＲＴＬ（Register Transfer Level：レジスタ転送レベル）の回路記述を作成することによって、集積回路の機能を設計することができる。更に、最近では、より抽象性を高めた高位設計において、動作レベルと呼ばれる高位の回路記述からＲＴＬの回路記述を自動生成する高位合成技術が利用されるようになってきた。
【０００３】
しかしながら、プログラミング言語による高位レベル又は機能レベルのハードウェア設計は、設計を効率化させる反面、設計が抽象化されているために、設計データが流出した際に、第三者によって容易に設計データを解読されてしまうという欠点がある。集積回路の開発工程は、設計から製造まで多岐に分業されているため、電子メールや記録媒体を用いて動作レベル或いはＲＴＬの設計データ（回路記述）を受け渡しすることがある。このため、設計データが流出した際の設計情報の漏洩や不正利用のリスクを低減するために、設計データに対して設計情報を設計者以外から守るための処置を施すことがある。
【０００４】
回路記述において変数等の回路構造を示す名称を、回路構造とは関係のない別の名称に自動変換する方法が知られている（特許文献１及び２参照）。この方法によると、例えば、カウンタを実現する変数名ＣＮＴをＮ１等、カウンタを推測させない全く別の名称に変換する。変数名が変更された回路記述は、設計者以外が容易に解読することはできないため、不正利用のリスクを低減することができる。また、市販されている高位合成ツールは、出力するＲＴＬ回路記述の可読性を上げるために、動作レベル回路記述の変数名等をＲＴＬ回路記述のワイヤ名やレジスタ名に継承することがある。したがって、動作レベルの回路記述において名称を変更することで、高位合成後のＲＴＬ回路記述の不正利用のリスクを低減することができる。
【特許文献１】特開２００２−１６３３１２号公報
【特許文献２】特開２００５−２３５８４８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、前述の従来方法では、回路構造や回路動作から容易に設計情報が解読されてしまう危険性がある。例えば、シミュレーション等による回路動作の解析によって回路記述が解読されてしまう。
【０００６】
そこで、本発明の目的は、回路記述流出時の不正利用と設計情報不正解読のリスクを、より効果的に低減することにある。
【課題を解決するための手段】
【０００７】
上記課題を解決するために、本発明では、設計情報の隠蔽や解読の混乱を招くダミー（冗長）動作の挿入を行うこととした。
【０００８】
具体的に説明すると、本発明に係る半導体集積回路の高位合成方法は、ハードウェアの動作レベル回路記述を解析して、記述中に現れた演算とデータとの流れを表すＤＦＧ（Data Flow Graph）と演算の実行順序の制御の流れを表すＣＦＧ（Control Flow Graph）とから構成されるＣＤＦＧ（Control Data Flow Graph）を生成する中間表現生成工程と、所望のハードウェア回路の設計制約条件と使用可能なハードウェアリソースの情報とをもとに、中間表現生成工程において生成されたＣＤＦＧの各ノードの実行順序をクロックに同期した時間（ステート）に割り付けるスケジューリング工程と、このスケジューリング工程においてスケジュールされたＣＤＦＧの各ノードに処理を実現するハードウェアリソースを割り付けるアロケーション工程と、中間表現生成工程によって生成されたＣＤＦＧに対して、或いはスケジューリング工程又はアロケーション工程における処理が完了したＣＤＦＧに対して、設計情報を秘匿化（設計情報隠匿、或いは回路記述難読化）するために、演算（ノード）の追加によるＣＤＦＧの変形又は回路構造変更又は一部ハードウェアリソースの割り当て変更を施す回路秘匿化工程と、最終的な結果として動作レベル或いはＲＴＬの回路記述と秘匿化解読情報とを別々に出力する回路記述出力工程とを包含することを特徴とする。
【０００９】
なお、本発明の高位合成方法は、追加する演算の種類と方法をデータベースとして与えてもよい。
【発明の効果】
【００１０】
本発明の高位合成方法によれば、動作レベルの回路記述を解析して得られたＣＤＦＧに対して、設計情報を秘匿化（設計情報隠匿、或いは回路記述難読化）するための冗長演算を追加することにより、回路記述が流出した際に不正利用されたり、解読されたりするリスクを低減できる。
【発明を実施するための最良の形態】
【００１１】
以下に、本発明の実施形態について、図面を用いて説明する。なお、本発明は以下の実施形態に何等限定されるものではなく、要旨を逸脱しない範囲においては種々なる形態で実施し得ることは、言うまでもない。
【００１２】
《第１の実施形態》
図１は、第１の実施形態に係る高位合成方法を示すフローチャートである。図１に示す高位合成方法では、ハードウェアの動作レベル回路記述に対して、中間表現生成工程Ｓ０１、スケジューリング工程Ｓ０２、回路秘匿化工程Ｓ１１、アロケーション工程Ｓ０３、回路記述出力工程Ｓ０４が実行される。まず、中間表現生成工程Ｓ０１において、ハードウェアの動作レベル回路記述を解析して、記述中に現れた演算とデータとの流れを表すＤＦＧと、演算の実行順序の制御の流れを表すＣＦＧとから構成されるＣＤＦＧを生成する。そして、スケジューリング工程Ｓ０２において、所望のハードウェアを合成するための設計制約条件と使用可能なハードウェアリソースの情報とをもとに、中間表現生成工程Ｓ０１において生成されたＤＦＧの各ノードの実行順序をクロックに同期した時間（ステート）に割り付ける。次に、回路秘匿化工程Ｓ１１では、スケジューリング工程Ｓ０２で生成されたスケジューリング済みＤＦＧの各ノードのライフタイムを解析して、処理サイクルが増加しない範囲において、ＤＦＧの実行結果に影響を及ぼさないようにＤＦＧを変形する。ＤＦＧの変形は、具体的には、ノードの出力値の一致性を保証する冗長な演算を追加することにより行う。追加する演算の種類と方法は、例えば、データベースとして登録されたものから選択する。次に、アロケーション工程Ｓ０３において、回路秘匿化工程Ｓ１１で変形されたＤＦＧの各ノードに処理を実現するハードウェアリソースを割り付ける。回路記述出力工程Ｓ０４では、スケジューリング工程Ｓ０２、回路秘匿化工程Ｓ１１、アロケーション工程Ｓ０３の処理結果に基づいて、動作レベル又はＲＴＬの回路記述と秘匿化内容を解読するための情報とを出力する。
【００１３】
以下、
ｙ＝（（（ａ＋ｂ）＋ｃ）＋（ｄ＋ｅ））＋（ｆ＋ｇ）
という計算式の図２に示す動作レベル回路記述ＢＤ１（秘匿化処理前：初期状態）を用いて、本実施形態の動作の一例を示す。
【００１４】
まず、中間表現生成工程Ｓ０１では、動作レベル回路記述ＢＤ１を解析して、変数、演算をノードで、データの流れをエッジでそれぞれ表したＤＦＧと、ＤＦＧをノードで、ＤＦＧの実行順序の制御をエッジでそれぞれ表したＣＦＧとから構成されるＣＤＦＧを生成する。ＢＤ１のＣＤＦＧを図３に示す。ＢＤ１には、処理の実行順序を制御する条件記述（Ｃ／Ｃ＋＋等のプログラミング言語では、一般にＩＦ文、ＦＯＲ文等で表現される。）が存在しないため、ＣＦＧのノードは１つのみである。また、ＤＦＧの重複する演算（ノード）には、＋１、＋２等、識別番号を記載している。
【００１５】
次に、スケジューリング工程Ｓ０２において、ＤＦＧの各ノードをステップと呼ばれるクロックサイクルに同期した時間に割り付けて実行順序を決定する。図４は、ＢＤ１のスケジューリング済みのＤＦＧである。ＤＦＧの各ノードは、Ｓ０，Ｓ１，Ｓ２，Ｓ３のいずれかのステートに割り付けられている。
【００１６】
回路秘匿化工程Ｓ１１では、処理サイクル数が増加しない範囲で、かつ、元の動作レベル回路記述ＢＤ１の実行結果に影響を与えないような演算を追加する。そのため、まずスケジューリング済みのＤＦＧの各ノードの出力値のライフタイムを解析する。ライフタイムとは、ノードの出力値が保持されるステップ数のことである。図４のＤＦＧでは、ノード＋１、＋２、＋３、＋４のライフタイムは１であり、＋５のライフタイムは３であり、＋６のライフタイムは４である。ライフタイムが２以上のノードの出力値、例えばノード＋６の出力値に対して、当該ノード＋６の出力値を保証する新たな演算を施す。新たに追加する演算は、１サイクルで実行可能なハードウェアリソースを割り付けられる演算のみとする。これにより、追加演算によって回路性能が劣化する（処理サイクルが増加する）ことを防ぐ。また、出力値を保証する演算として、データベースから任意の演算を選択してもよいが、ここでは、ＤＦＧ上に存在する演算で、かつ演算を追加するステップ以外に存在する演算を選択するという選定基準を設けて、ノード＋６の出力値とゼロとの加算を追加する。図５は、ノード＋６の出力値とゼロとの加算を追加した後のＤＦＧである。加算ノード＋７と定数ノード０とが新たに追加されている。この場合、加算ノード＋７を追加するステップ以外では、ＤＦＧ上に５個の加算ノード＋１、＋３、＋４、＋５、＋６が存在するため、以降で実施するアロケーション工程Ｓ０３において、これらの加算ノードに割り付けられるハードウェアリソースを共有できる可能性がある。共有された場合、ハードウェアリソースの使用数削減によって、追加演算による回路面積の増加を抑制することができる。
【００１７】
更に、加算ノード＋７の入力となる定数ノード０を入力ポートｐに割り付ける。定数ノードを入力ポートに割り付ける１つの理由は、追加演算が冗長であるため、高位合成中の最適化処理、或いは論理合成中の最適化処理において、冗長性を削除されることを防ぐためである。この追加演算は、最終的に出力する回路記述を難読化することを目的とする。したがって、出力回路記述に対して確実に反映する必要がある。もう１つの理由は、回路記述を正しく動作させるために必要な情報を隠蔽するためである。定数値を入力ポートとして隠蔽することにより、回路記述が流出した場合でも、入力ポートに正しい値を与えない限り、回路記述を正しく利用することができず、流出時のリスクを低減することができる。
【００１８】
次に、アロケーション工程Ｓ０３において、回路秘匿化工程Ｓ１１で変形されたＤＦＧの各ノードに対して処理を実行するハードウェアリソースを割り付ける。図６は、ハードウェアリソース割り付け後のＤＦＧである。追加ノード＋７に割り付けられた加算リソースＡｄｄ２は、加算ノード＋５と共有されているので、ハードウェアリソースの増加を抑制できている。
【００１９】
最後に、回路記述出力工程Ｓ０４において、秘匿化処理を反映した回路記述と機密内容を解読するための秘匿化解読情報とを出力する。回路設計者は、回路記述と秘匿化解読情報とを別々に管理し、正規の回路記述使用者に対して、別々のルート（電子メール、記録媒体等）でこれらを提供することにより、回路記述流出時に設計情報が解読されるリスクを低減することができる。
【００２０】
図７は、動作レベル回路記述ＢＤ１に対して秘匿化処理を施す高位合成により得られたＲＴＬ回路記述の一例である。一方、図８は、秘匿化処理を施さない、従来の高位合成により得られたＲＴＬ回路記述である。なお、両図のＲＴＬ回路記述では、ワイヤ及びレジスタの宣言については省略している。両図のＲＴＬ回路記述には、ＢＤ１の変数名をワイヤ名に継承しているため、秘匿化処理を施さなかった図８のＲＴＬ回路記述には、ＢＤ１の部分式「ｄ＋ｅ」に相当する記述が１０行目にそのままの形で残っている。一方、図７のＲＴＬ回路記述には、「ｄ＋ｅ」に相当する記述は、ＢＤ１とは異なる形（１０行目から１２行目）で実現されている。したがって、秘匿化処理が施された図７のＲＴＬ回路記述からＢＤ１の計算式を解読することは、図８のＲＴＬ回路記述に比べて困難である。また、図７のＲＴＬ回路記述は、入力ポートｐに対してゼロを与えない限り、ＢＤ１と同じ結果を得ることができず、ＲＴＬ回路記述が流出した際も、不正に回路記述が利用されるリスクを低減できる。
【００２１】
秘匿化解読情報は、例えば、追加演算の個数、追加演算の種類、回路記述中に追加演算が存在する行数、追加演算に入力する値（追加入力ポートに与える値）等である。追加演算に入力する値は、秘匿化処理が施された回路記述の上位階層記述として与えてもよい。図９は、図７のＲＴＬ回路記述の上位階層にあたる回路記述である。図７の追加入力ポートｐがゼロに固定されている。上位階層記述を得ることにより、回路記述使用者は、秘匿化された情報を解読できる。
【００２２】
なお、出力する回路記述としては、ＲＴＬ回路記述に限らず、動作レベル回路記述を選択してもよい。図１０は、秘匿化処理が施された動作レベル回路記述ＢＤ２である。ＢＤ２では、３行目の右辺に変数ｇとＢＤ１に存在しなかった変数ｐとの演算が追加されている。ＢＤ２から元のＢＤ１を導き出すことは、設計情報等、必要な情報を知らない限り難しいことである。また、変数ｐにゼロを与えない限り、図２のＢＤ１と同じ結果は得られない。これによって、動作レベル回路記述の設計情報が解読されるリスク、不正利用されるリスクを低減できる。
【００２３】
また、回路記述には、追加演算前後の結果が常に同じ結果であることを確認するためのアサーション記述を追加してもよい。多数の入力ポートが追加された場合、これら全てに正しい値がセットされたかを確認することは手間がかかる。したがって、回路設計者がデバッグの際に、追加入力ポートの値設定ミスがあった場合、自動でミスを検出することができるので、設計情報の秘匿化によって起こり得る問題の解析工数発生のリスクを低減することができる。
【００２４】
以上のようにして、設計情報を秘匿化（設計情報の隠蔽と設計データの難読化）した回路記述を生成することができる。また、追加演算はライフタイムが２以上のノードの出力値に対して施すので、追加演算によってスケジューリング結果を変更する必要はなく、回路性能が劣化することはない。
【００２５】
なお、本実施形態では、追加演算にゼロとの加算を用いたが、選択演算、比較演算、論理演算、加算以外の四則演算等、出力値を保証できるものであれば、データベースに存在する任意の演算の種類を追加してもよい。
【００２６】
また、本実施形態では、追加演算としてＤＦＧ上に存在する加算演算を選択したが、追加演算の選定基準として、逆にＤＦＧ上に存在しない演算を追加してもよい。図３の例では、加算演算の代わりに、ノード＋６の出力値と定数１との乗算、ノード＋６の出力値と定数０とのいずれかを選択する選択演算（選択信号は入力ポートから与える）等を追加してもよい。この場合、以降のアロケーション工程Ｓ０３においてハードウェアリソースの共有を期待することができないため、回路面積の抑制は期待できない。しかしながら、ＤＦＧ上に存在しない演算は、アルゴリズム等を記載した回路仕様書にも存在しない。このため、出力された回路記述中の演算子からアルゴリズムを予測し辛くなり、回路記述が流出した際の不正解読のリスクを低減できる。
【００２７】
また、本実施形態では、回路秘匿化工程Ｓ１１において１つのノードに対してのみ演算を追加したが、ライフタイムが２以上の複数のノードに対して演算を追加してもよい。
【００２８】
また、本実施形態では、追加した演算（加算ノード＋７）の入力となる定数ノードを入力ポート（ｐ）に割り付けたが、追加した演算に関係する定数に限らず、定数を隠蔽することは、回路を正しく動作させる情報を隠蔽する効果があるので、演算を追加する前のもともとのＤＦＧに存在していた定数ノードを入力ポートに割り付けてもよい。
【００２９】
《第２の実施形態》
図１１は、第２の実施形態に係る高位合成方法を示すフローチャートである。第１の実施形態との違いは、回路の秘匿化処理がスケジューリング工程Ｓ０２の前に実施される点である。図１１の回路秘匿化工程Ｓ１２は、回路秘匿化時にスケジューリング結果の制約を受けないため、第１の実施形態に比較して、柔軟に演算を追加することができる。
【００３０】
演算は、ＤＦＧの最小遅延パス上に存在するノードに対して追加するのがよい。まず、ＤＦＧの各ノードに対して、そのノードを経由するパスの遅延を算出して、最長の遅延を設定する。
【００３１】
前記ＢＤ１から得られた図３のＤＦＧを用いて説明する。ここでは、加算ノードの遅延は１０ｎｓ、入力ノード、出力ノードの遅延は、ともに０ｎｓとする。ノード＋１を経由するパスは、（ａ，＋１，＋２，＋３，＋４）、（ｂ，＋１，＋２，＋３，＋４）の２つである。これら２つのパス遅延はともに４０ｎｓであるので、ノード＋１には４０ｎｓを設定する。ノード＋２を経由するパスは、（ａ，＋１，＋２，＋３，＋４）、（ｂ，＋１，＋２，＋３，＋４）、（ｃ，＋２，＋３，＋４）の３つである。これら３つのパス遅延は、それぞれ４０ｎｓ、４０ｎｓ、３０ｎｓである。最長遅延に基づき、ノード＋２に４０ｎｓを設定する。同様の計算を行い、ノード＋３、＋４、＋５、＋６に、それぞれ４０ｎｓ、４０ｎｓ、３０ｎｓ、２０ｎｓを設定する。最小遅延パス上に存在するノードは＋６であるので、ここではノード＋６の出力値に対して、新たな演算を施す。例えば、ゼロとの加算を追加すると、図１２のようなＤＦＧになる。この場合、追加演算＋７を経由する最長のパスは、（ｆ，＋６，＋７，＋４）、（ｇ，＋６，＋７，＋４）の３０ｎｓである。したがって、図３に示す元のＤＦＧの最長遅延４０ｎｓを超えないので、以降のスケジューリング工程Ｓ０２における結果で、処理サイクルが増加することを防ぐことができる。
【００３２】
以上のように、ＤＦＧの最小遅延パス上に存在するノードに対して演算を追加することで、スケジューリング工程Ｓ０２において処理サイクルの増加を抑制した、回路の秘匿化を実現できる。また、スケジューリング実行前にＤＦＧに演算を追加することによって、スケジューリング工程Ｓ０２にて、第１の実施形態と違い、初期のＤＦＧ上のノードだけでなく、追加演算（ノード）を含めて、ハードウェアリソースの共有を考慮したスケジューリングを実施できる。
【００３３】
また、逆に、ＤＦＧの最大遅延パス上に存在するノードに対して演算を追加してもよい。この場合、スケジューリング工程Ｓ０２において、処理サイクルが増加する可能性が高くなるため、回路記述出力工程Ｓ０４において動作レベル回路記述のみを出力する。ＲＴＬ回路記述を出力しないのは、論理合成以降の工程で処理サイクルを改善することが困難なためである。一方、秘匿化処理が施された動作レベル回路記述は、再び、従来の秘匿化処理を施さない高位合成をすることで処理サイクルを改善することができる。
【００３４】
例えば、図１３に示すように、図３の演算ノード＋２の出力に対して冗長なゼロとの加算演算を施し、定数値を入力ポートとして隠蔽する。この処置を施して出力した動作レベル回路記述を従来手法によって高位合成する。加算ノードの遅延を１０ｎｓとすると、追加演算（ノード）＋７を経由するパスの最長遅延が、（ａ，＋１，＋２，＋７，＋３，＋４）又は（ｂ，＋１，＋２，＋７，＋３，＋４）の５０ｎｓとなり、元の動作レベル回路記述の最長遅延４０ｎｓを超える。このため、クロック周波数の制約によって、サイクル数が増加する可能性がある。しかしながら、第１の実施形態で説明したように、秘匿化解読情報として出力した、追加ポートに正しい定数値を設定する動作レベルの上位階層記述から高位合成を実施することで、本質的に冗長である追加演算は、高位合成の最適化機能（具体的には、定数伝播機能）によって、ＤＦＧのレベルで計算されてしまう。定数伝播実施後の追加演算（冗長演算）が削除されたＤＦＧは、基本的に、演算が追加される前の初期のＤＦＧ、すなわち図３のＤＦＧと同じになる。このＤＦＧに対して実施するスケジューリング結果は、冗長なサイクルを含まない。これは秘匿化解読情報を入手することによって可能となるので、秘匿化された動作レベル回路記述から、設計情報秘匿化のための不要サイクルを含まない正規のＲＴＬ回路記述を生成されるリスクを低減できる。また、極端に多くの演算を追加した動作レベル回路記述を、秘匿化解読情報を与えず、追加ポートをそのままポートとして高位合成すると、前述したように、追加演算により、不要にサイクルが増大する可能性がある。その結果、回路記述を動作させたときの処理サイクル数が、アルゴリズム本来の性能と差が生じて、処理サイクルからアルゴリズムを予測することを困難にさせることができる。
【００３５】
以上のようにして、スケジューリング実行前に設計情報の秘匿化処理を施すことで、回路性能（処理サイクル）の劣化を抑制しつつ、追加演算を実行するハードウェアリソースの面積増加を抑制できる。また、スケジューリング実行前に設計情報を秘匿化して得られた動作レベル回路記述は、設計情報の隠蔽と回路記述の難読化のみならず、出力されるＲＴＬ回路記述の性能（処理サイクル）も隠蔽することができるので、設計情報の秘匿性を向上させることができる。
【００３６】
《第３の実施形態》
図１４は、第３の実施形態に係る高位合成方法を示すフローチャートである。第１の実施形態との違いは、回路の秘匿化処理がアロケーション工程Ｓ０３の後に実施される点である。ここで、入力動作レベル回路記述に存在する冗長な計算式は、中間表現生成工程Ｓ０１においてＣＤＦＧが生成される段階で最適化機能によって削除されるものとする。
【００３７】
図１４の回路秘匿化工程Ｓ１３では、回路秘匿化時にアロケーション情報からＲＴＬ回路構造を推測しながら、演算を追加することができる。
【００３８】
図１５に示すアロケーション済みＤＦＧを用いて説明する。なお、ハードウェアリソースＡｄｄ１，Ａｄｄ２の出力はそれぞれ、レジスタＲ１，Ｒ２で受けるものとする。図１５のアロケーション結果から、図１６に示すＲＴＬ回路構造を推測することができる。
【００３９】
まず、出力値のライフタイムが２以上のノードを選択する。ここではノード＋４の出力のみが２以上のライフタイムを持つ。選択したノードの出力に対して施す新たな演算をデータベースから選択する。このとき、選択する演算は、図１５のＤＦＧのノードに割り付けられたハードウェアリソースをスケジューリングの変更をせずに再利用することによって、実行できるものとする。図１５の例では、ノード＋４に割り付けられたハードウェアリソースＡｄｄ２のみがステートＳ１，Ｓ２で再利用可能である。したがって、ノード＋４の出力に対して、Ａｄｄ２で実行可能な演算として、ゼロとの加算をステートＳ１で実行するように追加する。
【００４０】
なお、追加演算の入力となる定数は、入力ポートに割り付けない。この処置を施した後のＤＦＧを図１７に示す。図１７のアロケーション結果から、図１８に示すＲＴＬ回路構造を推測することができる。ここで、再利用されたハードウェアリソースは、２つ以上の演算を実行することになり、これらの演算を適切に実行するための入力制御が必要となる。図１８では、マルチプレクサＭＵＸ３，ＭＵＸ４によって入力を制御（選択）することで、元の演算と冗長演算とを適宜実行している。
【００４１】
回路記述出力工程Ｓ０４は、回路秘匿化工程Ｓ１３で最終的に変形されたＤＦＧとアロケーション情報とに基づいて推測される回路構造を、ＲＴＬの回路記述として出力する。このＲＴＬ回路記述は、冗長に追加された演算及び制御を含むため、解読が困難な複雑な記述になっている。
【００４２】
以上のようにして、ハードウェアリソースが割り付けられたＤＦＧを解析して回路秘匿化処理を施すことにより、解読を困難にさせるための冗長な演算及び制御を作り出すことができるため、設計データ流出時に、回路記述が解読されるリスクを低減できる。また、ハードウェアリソースを再利用することを前提に冗長な演算を作り出すことで、ハードウェアリソースの増加を抑制することができる。また、第１の実施形態と違って、設計情報隠蔽のためのポートを追加することがないため、回路記述を検証する際に、特別なケアをする必要がない。
【００４３】
本実施形態における高位合成方法は、ＲＴＬ回路構造に対する難読化を実現するため、回路記述出力工程Ｓ０４では、ＲＴＬ回路記述のみを出力する。
【００４４】
なお、冗長演算を施す演算（ノード）の選択肢が複数ある場合は、再利用するハードウェアリソースの入力を選択するマルチプレクサの入力数（或いは段数）が少ないものを選択すればよい。マルチプレクサの出力を選択するための制御信号は、制御回路であるＦＳＭ（Finite State Machine）の状態レジスタとデータパス回路の出力から生成されるが、選択する入力数が多く制御が複雑になると、制御信号を生成する論理段数が大きくなる可能性が高くなる。この場合、状態レジスタからマルチプレクサを経由してデータパス回路のレジスタに到達するパス遅延が、設計制約で規定された動作周波数制約を満たさなくなる危険性がある。したがって、マルチプレクサの入力数が少ないハードウェアリソースを採用することで、遅延違反の危険性を抑制することができる。
【００４５】
また、再利用するハードウェアリソースのビット幅が小さいものを選択してもよい。ただし、ハードウェアリソースは選択した演算を十分実行できるビット幅を有するものとする。入力を選択するために追加されるマルチプレクサは、ハードウェアリソースの入力ビット幅に依存するため、ビット幅が小さいハードウェアリソースを選択することで、マルチプレクサのビット幅が小さくなり、面積の増加を抑制することができる。
【００４６】
《第４の実施形態》
図１９は、第４の実施形態に係る高位合成方法における回路秘匿化工程を示すフローチャートである。本実施形態では、第１〜第３の実施形態の回路秘匿化工程Ｓ１１，Ｓ１２，Ｓ１３において追加する演算の数を所定の基準に従って制限する。
【００４７】
本実施形態における回路秘匿化工程では、図１９に示すように、終了判定工程Ｓ２１の次に、演算追加工程Ｓ２２が実行される。終了判定工程Ｓ２１では、所定の基準に従い、処理を終了するか継続するかが判断される。処理継続と判断（ＮＯと判断）した場合は、演算追加工程Ｓ２２を実施する。演算追加工程Ｓ２２の終了後は、終了判定工程Ｓ２１に戻る。処理終了と判定（ＹＥＳと判断）されるか、演算が追加できなくなるまで、演算追加工程Ｓ２２と終了判定工程Ｓ２１とを繰り返し実施する。
【００４８】
以下、本実施形態の動作の一例として、上述した動作レベル回路記述ＢＤ１から得られた図４のＤＦＧを用いて説明する。
【００４９】
まず、処理を終了するための基準として、追加する演算数を制限する方法を示す。ここでは、追加する演算数は「２つまで」とする。
【００５０】
図１９によれば、まず終了判定工程Ｓ２１において、追加した演算の数が所定の基準（２つまで）に達したかを判定する。追加した演算は０個なので、演算追加工程Ｓ２２に進む。演算追加工程Ｓ２２では、ライフタイムが２以上のノードを１つ選択して、そのノードの出力に対して、新たな演算を追加する。
【００５１】
例えば、ビット幅が小さいノードを選択すればよい。追加する演算を実行するハードウェアリソースの面積は、計算するビット幅に応じて増加する。３２ビットの演算を追加すると、３２ビットの加算リソースが必要になるが、４ビットの演算を追加する場合には、４ビットの加算リソースで済む。したがって、ビット幅が小さいノードを選択することは、追加演算によるハードウェアリソースの面積を抑制できる可能性がある。
【００５２】
また、定数ノードを選択してもよい。ＤＦＧ上に存在する定数ノードは、アルゴリズムで規定された定数である場合がある。この場合、アルゴリズムで規定された定数を別の定数の演算によって作り出すことにより、最終的に出力する回路記述から、アルゴリズムで規定された定数を隠蔽できる。この結果、回路記述に存在する定数からアルゴリズムを解読されるリスクを低減できる。
【００５３】
図４の例では、ノード＋６を選択する。ノード＋６の出力値に対して、ゼロとの加算を施すことにより、ノード＋６の出力値を保証する。ゼロとの加算を追加したＤＦＧは、図２０に示すとおり、第１の実施形態で示した図５と同じになる。
【００５４】
次に、終了判定工程Ｓ２１に戻る。ここでは、追加した演算数が１つであり、所定の基準（２つまで）に達していないので、再び、演算追加工程Ｓ２２に移る。
【００５５】
演算追加工程Ｓ２２では、更新されたＤＦＧのライフタイム情報に基づき、ノードを選択する。図２０は、１回目の演算追加工程Ｓ２２による更新後のＤＦＧとライフタイムを示す。ライフタイムが２以上のノードは、＋５と＋７である。ここでは、ノード＋５の出力値に対して新たな演算を施す。図２１は、ノード＋５の出力に対して１との乗算を施した後のＤＦＧ及びライフタイム情報である。
【００５６】
再び、終了判定工程Ｓ２１に移る。更新後のＤＦＧ（図２１参照）上には、ライフタイムが２以上のノードが２つ（＊、＋７）存在しているが、追加した演算数が２つになり、所定の基準（２つまで）に達したので、ここで処理を終了する。
【００５７】
次に、処理を終了するための基準として、追加する演算数を回路の面積増加率により制限する方法を示す。ここでは、回路面積の増加率が「１０％を超えるまで」とする。また、加算リソースの面積は一律１０とする。
【００５８】
まず、終了判定工程Ｓ２１において、追加した演算の数が所定の基準（回路面積増加率１０％）を超えたかを判定する。図４のＤＦＧの元の回路面積は、加算演算が６個あるので、面積は６０と推定する。ここでは、追加した演算は０個なので、面積増加率は０であるので、演算追加工程Ｓ２２に進む。
【００５９】
演算追加工程Ｓ２２では、ライフタイムが２以上のノードを１つ選択して、そのノードの出力に対して、新たな演算を追加する。ここでは、ノード＋６を選択して、ゼロとの加算を追加する。ゼロとの加算を追加したＤＦＧは、図２０のようになる。加算演算が１つ増えたので、回路面積を７０と推定する。
【００６０】
次に、終了判定工程Ｓ２１に戻る。回路面積が、元の推定値６０から７０に増加したので、増加率は１６％である。所定の基準（回路面積増加率１０％）を超えたので、ここで処理を終了する。
【００６１】
以上のようにすれば、追加する演算の数を所定の基準に従って制御することができる。追加演算数を制限する場合、設計情報を秘匿化するための情報量を主として制御することができる。また、回路面積の増加率を制限する場合、設計情報を秘匿化しつつ、回路面積のオーバーヘッドを抑制することができる。
【００６２】
なお、回路面積の増加率の代わりに、回路性能（最長パス遅延）の増加率を制限してもよい。例えば、第２の実施形態の図１１で示したように、中間表現生成工程Ｓ０１において生成されたＤＦＧに対して演算を追加する場合に、設計情報を秘匿化しつつ、極端に最長パス遅延が増加してスケジューリング結果として処理サイクルが増大することを防ぐことができる。
【産業上の利用可能性】
【００６３】
以上説明してきたとおり、本発明に係る半導体集積回路の高位合成方法は、回路記述が流出した際に不正利用されたり、解読されたりするリスクを低減できる効果を有し、ディジタル回路を構成するＲＴＬ回路記述の生成等に有用である。
【図面の簡単な説明】
【００６４】
【図１】第１の実施形態に係る半導体集積回路の高位合成方法を示すフローチャートである。
【図２】第１の実施形態に係る半導体集積回路の高位合成方法における動作レベル回路記述を示す図である。
【図３】第１の実施形態に係る半導体集積回路の高位合成方法における中間表現生成工程によって生成されたＤＦＧを示す図である。
【図４】第１の実施形態に係る半導体集積回路の高位合成方法におけるスケジューリング工程によってスケジュールされたＤＦＧを示す図である。
【図５】第１の実施形態に係る半導体集積回路の高位合成方法における回路秘匿化工程によって変形されたＤＦＧを示す図である。
【図６】第１の実施形態に係る半導体集積回路の高位合成方法におけるアロケーション工程によってハードウェアリソースが割り付けられたＤＦＧを示す図である。
【図７】第１の実施形態に係る半導体集積回路の高位合成方法における回路記述出力工程によって出力された秘匿化処理済みのＲＴＬ回路記述を示す図である。
【図８】秘匿化処理が施されていないＲＴＬ回路記述を示す図である。
【図９】第１の実施形態に係る半導体集積回路の高位合成方法における回路記述出力工程によって出力された秘匿化解読情報としての上位階層回路記述を示す図である。
【図１０】第１の実施形態に係る半導体集積回路の高位合成方法における回路記述出力工程によって出力された秘匿化処理済みの動作レベル回路記述を示す図である。
【図１１】第２の実施形態に係る半導体集積回路の高位合成方法を示すフローチャートである。
【図１２】第２の実施形態に係る半導体集積回路の高位合成方法における回路秘匿化工程によって変形されたＤＦＧを示す図である。
【図１３】第２の実施形態に係る半導体集積回路の高位合成方法における回路秘匿化工程によって変形された他のＤＦＧを示す図である。
【図１４】第３の実施形態に係る半導体集積回路の高位合成方法を示すフローチャートである。
【図１５】ハードウェアリソース割り付け済みＤＦＧを示す図である。
【図１６】図１５のＤＦＧから推測されたＲＴＬ回路構造を示す図である。
【図１７】第３の実施形態に係る半導体集積回路の高位合成方法における回路秘匿化工程によって変形されたハードウェアリソース割り付け済みＤＦＧを示す図である。
【図１８】図１７のＤＦＧから推測されたＲＴＬ回路構造を示す図である。
【図１９】第４の実施形態に係る半導体集積回路の高位合成方法における回路秘匿化工程の詳細を示すフローチャートである。
【図２０】第４の実施形態に係る半導体集積回路の高位合成方法における回路秘匿化工程によって加算演算が追加されたＤＦＧを示す図である。
【図２１】第４の実施形態に係る半導体集積回路の高位合成方法における回路秘匿化工程によって更に乗算演算が追加されたＤＦＧを示す図である。
【符号の説明】
【００６５】
Ｓ０１  中間表現生成工程
Ｓ０２  スケジューリング工程
Ｓ０３  アロケーション工程
Ｓ０４  回路記述出力工程
Ｓ１１，Ｓ１２，Ｓ１３  回路秘匿化工程
Ｓ２１  終了判定工程
Ｓ２２  演算追加工程