(57)【要約】【課題】不具合の再現が可能であって、秘匿性の高い再現データの生成が可能な半導体集積回路の設計支援装置を提供する。【解決手段】図１に示す設計支援装置は、設計データを複数のＦＳＭに変換するＦＳＭ変換部と、複数のＦＳＭから装置が動作するために必要な論理構造を生成するＦＳＭデータ探索部と、論理構造から装置の不具合が再現可能な縮小データを出力する縮小データ生成部と、を備えている。ＦＳＭデータ探索部においては、任意に選択したＦＳＭから設計支援装置が動作可能であって、必要最低限の情報しか含まない情報を探索し、生成する。【選択図】図１
2012150624.tif 000002
【特許請求の範囲】
【請求項１】
半導体集積回路の設計データに基づいて半導体集積回路の設計を支援する設計支援装置であって、
設計データを複数のＦＳＭ（Ｆｉｎｉｔｅ  Ｓｔａｔｅ  Ｍａｃｈｉｎｅ）に変換するＦＳＭ変換部と、
前記複数のＦＳＭから前記設計支援装置が動作するために必要な論理構造を生成するＦＳＭデータ探索部と、
前記論理構造から前記設計支援装置の不具合が再現可能な縮小データを出力する縮小データ生成部と、
を備えることを特徴とする半導体集積回路の設計支援装置。
【請求項２】
前記ＦＳＭデータ探索部は、前記論理構造に基づいて前記設計支援装置が動作可能な動作確認用データを生成し、前記動作確認用データを用いて前記設計支援装置の不具合の発生確認を繰り返すことで、前記論理構造の中から前記設計支援装置に不具合を発生させる不具合再現論理構造を特定し、
前記縮小データ生成部は、前記不具合発生論理構造から前記設計データと同じ言語形式、又は、ユーザが指定する言語形式で前記縮小データを生成する請求項１の半導体集積回路の設計支援装置。
【請求項３】
前記ＦＳＭデータ探索部は、前記複数のＦＳＭから第１のＦＳＭを選択し、前記第１のＦＳＭに含まれる論理式の処理の内容を示す右辺を構成する信号を抽出し、前記信号の生成源となる第２のＦＳＭを探索すると共に、前記第２のＦＳＭの探索の間に検出するＦＳＭを、前記信号を生成するための状態群として記憶し、前記状態群から前記論理構造を生成する請求項１又は２の半導体集積回路の設計支援装置。
【請求項４】
前記ＦＳＭデータ探索部は、前記第１のＦＳＭに含まれる論理式の処理の内容を示す右辺を構成する信号が複数存在する場合には、前記複数の信号それぞれに対して前記状態群を複数抽出し、前記複数の状態群を組み合わせることで前記論理構造を生成する請求項３の半導体集積回路の設計支援装置。
【請求項５】
前記ＦＳＭデータ探索部は、前記複数のＦＳＭから第１のＦＳＭを第１の処理対象ＦＳＭと定め、前記第１の処理対象ＦＳＭを遷移先とする第２のＦＳＭを抽出し、前記第２のＦＳＭが複数存在する場合には、前記第１の処理対象ＦＳＭと前記第２のＦＳＭを新たな前記第１の処理対象ＦＳＭとして定めることを繰り返すと共に、
前記第１のＦＳＭを第２の処理対象ＦＳＭと定め、前記第２の処理対象ＦＳＭから遷移する第３のＦＳＭを抽出し、前記第３のＦＳＭが複数存在する場合には、前記第２の処理対象ＦＳＭと前記第３のＦＳＭを新たな前記第２の処理対象ＦＳＭと定めることを繰り返すことで、
前記第１のＦＳＭを遷移先とするＦＳＭが１、かつ、前記第１のＦＳＭの遷移先のＦＳＭが１となるＦＳＭの状態群を抽出し、前記状態群から前記論理構造を生成する請求項１又は２の半導体集積回路の設計支援装置。
【請求項６】
前記ＦＳＭデータ探索部は、前記論理構造に分岐条件が含まれる場合には、前記分岐条件に相当するＦＳＭを削除する請求項５の半導体集積回路の設計支援装置。
【請求項７】
半導体集積回路の設計データに基づいて半導体集積回路の設計を支援する設計支援装置の設計支援方法であって、
設計データを複数のＦＳＭ（Ｆｉｎｉｔｅ  Ｓｔａｔｅ  Ｍａｃｈｉｎｅ）に変換するＦＳＭ変換工程と、
前記複数のＦＳＭから前記設計支援装置が動作するために必要な論理構造を生成するＦＳＭデータ探索工程と、
前記論理構造から前記設計支援装置の不具合が再現可能な縮小データを出力する縮小データ生成工程と、
を含むことを特徴とする半導体集積回路の設計支援方法。
【請求項８】
前記ＦＳＭデータ探索工程は、前記論理構造に基づいて前記設計支援装置が動作可能な動作確認用データを生成し、前記動作確認用データを用いて前記設計支援装置の不具合の発生確認を繰り返すことで、前記論理構造の中から前記設計支援装置に不具合を発生させる不具合再現論理構造を特定し、
前記縮小データ生成工程は、前記不具合発生論理構造から前記設計データと同じ言語形式、又は、ユーザが指定する言語形式で前記縮小データを生成する請求項７の半導体集積回路の設計支援方法。
【請求項９】
前記ＦＳＭデータ探索工程は、前記複数のＦＳＭから第１のＦＳＭを選択し、前記第１のＦＳＭに含まれる論理式の処理の内容を示す右辺を構成する信号を抽出し、前記信号の生成源となる第２のＦＳＭを探索すると共に、前記第２のＦＳＭの探索の間に検出するＦＳＭを、前記信号を生成するための状態群として記憶し、前記状態群から前記論理構造を生成する請求項７又は８の半導体集積回路の設計支援方法。
【請求項１０】
前記ＦＳＭデータ探索工程は、前記第１のＦＳＭに含まれる論理式の処理の内容を示す右辺を構成する信号が複数存在する場合には、前記複数の信号それぞれに対して前記状態群を複数抽出し、前記複数の状態群を組み合わせることで前記論理構造を生成する請求項９の半導体集積回路の設計支援方法。
【請求項１１】
前記ＦＳＭデータ探索工程は、前記複数のＦＳＭから第１のＦＳＭを第１の処理対象ＦＳＭと定め、前記第１の処理対象ＦＳＭを遷移先とする第２のＦＳＭを抽出し、前記第２のＦＳＭが複数存在する場合には、前記第１の処理対象ＦＳＭと前記第２のＦＳＭを新たな前記第１の処理対象ＦＳＭとして定めることを繰り返すと共に、
前記第１のＦＳＭを第２の処理対象ＦＳＭと定め、前記第２の処理対象ＦＳＭから遷移する第３のＦＳＭを抽出し、前記第３のＦＳＭが複数存在する場合には、前記第２の処理対象ＦＳＭと前記第３のＦＳＭを新たな前記第２の処理対象ＦＳＭと定めることを繰り返すことで、
前記第１のＦＳＭを遷移先とするＦＳＭが１、かつ、前記第１のＦＳＭの遷移先のＦＳＭが１となるＦＳＭの状態群を抽出し、前記状態群から前記論理構造を生成する請求項７又は８の半導体集積回路の設計支援方法。
【請求項１２】
前記ＦＳＭデータ探索工程は、前記論理構造に分岐条件が含まれる場合には、前記分岐条件に相当するＦＳＭを削除する請求項１１の半導体集積回路の設計支援方法。
【請求項１３】
半導体集積回路の設計データに基づいて半導体集積回路の設計を支援する設計支援装置を構成するコンピュータに実行させるプログラムであって、
設計データを複数のＦＳＭ（Ｆｉｎｉｔｅ  Ｓｔａｔｅ  Ｍａｃｈｉｎｅ）に変換するＦＳＭ変換処理と、
前記複数のＦＳＭから前記設計支援装置が動作するために必要な論理構造を生成するＦＳＭデータ探索処理と、
前記論理構造から前記設計支援装置の不具合が再現可能な縮小データを出力する縮小データ生成処理と、
を実行するプログラム。
【請求項１４】
前記ＦＳＭデータ探索処理は、前記論理構造に基づいて前記設計支援装置が動作可能な動作確認用データを生成し、前記動作確認用データを用いて前記設計支援装置の不具合の発生確認を繰り返すことで、前記論理構造の中から前記設計支援装置に不具合を発生させる不具合再現論理構造を特定し、
前記縮小データ生成処理は、前記不具合発生論理構造から前記設計データと同じ言語形式、又は、ユーザが指定する言語形式で前記縮小データを生成する請求項１３のプログラム。
【請求項１５】
前記ＦＳＭデータ探索処理は、前記複数のＦＳＭから第１のＦＳＭを選択し、前記第１のＦＳＭに含まれる論理式の処理の内容を示す右辺を構成する信号を抽出し、前記信号の生成源となる第２のＦＳＭを探索すると共に、前記第２のＦＳＭの探索の間に検出するＦＳＭを、前記信号を生成するための状態群として記憶し、前記状態群から前記論理構造を生成する請求項１３又は１４のプログラム。
【請求項１６】
前記ＦＳＭデータ探索処理は、前記第１のＦＳＭに含まれる論理式の処理の内容を示す右辺を構成する信号が複数存在する場合には、前記複数の信号それぞれに対して前記状態群を複数抽出し、前記複数の状態群を組み合わせることで前記論理構造を生成する請求項１５のプログラム。
【請求項１７】
前記ＦＳＭデータ探索処理は、前記複数のＦＳＭから第１のＦＳＭを第１の処理対象ＦＳＭと定め、前記第１の処理対象ＦＳＭを遷移先とする第２のＦＳＭを抽出し、前記第２のＦＳＭが複数存在する場合には、前記第１の処理対象ＦＳＭと前記第２のＦＳＭを新たな前記第１の処理対象ＦＳＭとして定めることを繰り返すと共に、
前記第１のＦＳＭを第２の処理対象ＦＳＭと定め、前記第２の処理対象ＦＳＭから遷移する第３のＦＳＭを抽出し、前記第３のＦＳＭが複数存在する場合には、前記第２の処理対象ＦＳＭと前記第３のＦＳＭを新たな前記第２の処理対象ＦＳＭと定めることを繰り返すことで、
前記第１のＦＳＭを遷移先とするＦＳＭが１、かつ、前記第１のＦＳＭの遷移先のＦＳＭが１となるＦＳＭの状態群を抽出し、前記状態群から前記論理構造を生成する請求項１３又は１４のプログラム。
【請求項１８】
前記ＦＳＭデータ探索処理は、前記論理構造に分岐条件が含まれる場合には、前記分岐条件に相当するＦＳＭを削除する請求項１７のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体集積回路の設計支援装置、設計支援方法及びプログラムに関する。特に、不具合解析用のデータの生成が可能な半導体集積回路の設計支援に関する。
【背景技術】
【０００２】
半導体集積回路の回路規模は年々増加している。これに伴い、半導体集積回路の設計において設計支援装置の利用が不可欠になっている。ここで、設計支援装置のソフトウェアには不具合が存在する可能性がある。そのため、ユーザ（半導体集積回路の設計者）が設計支援装置を利用している際に、ソフトウェアの異常終了などの不具合が発生する場合がある。このような不具合が発生すると、ユーザから設計支援装置の開発元に原因の解析及び不具合の修正に関する依頼をすることになる。
【０００３】
しかし、このような具合は、設計支援装置の開発元で十分な試験・検証をしても残ってしまった不具合であるため、不具合の内容からだけでは原因を特定することが困難であることが多い。さらに、近年の半導体集積回路の高機能化（複雑化、規模の増大）や設計支援装置自体の高機能化により、不具合が発生した際の設計データがないと不具合の再現ができない場合が多い。
【０００４】
一方で、設計段階の半導体集積回路の設計データは秘匿性が非常に高く、設計支援装置の開発元に対して設計データの提供を行なうことができないという問題が発生する。
【０００５】
そこで、特許文献１において、半導体集積回路の検証支援装置の不具合が再現可能であり、かつ、第三者からは半導体集積回路の設計意図（論理意図）を類推するのが困難なデータを生成する技術が開示されている。その際に、不具合の原因となっているモジュールを特定し、その後、不具合の発生に関係しない論理を削除することで不具合の発生する再現データを自動的に生成している。
【０００６】
さらに、特許文献２において、論理合成ツールや論理検証ツールといったプログラムの異常終了原因の特定がより短時間で行なえるようにする技術が開示されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００８−１１７１３６号公報
【特許文献２】特開２００６−２７７１８０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
以下の分析は、本発明の観点からなされたものである。
【０００９】
上述のように、不具合が再現可能であり、かつ、設計情報を極力含まない再現データを提供するための技術が特許文献１で開示されている。ここで、特許文献１で開示された技術では、設計データをモジュールごとに分割することで再現データを生成している。しかし、このような再現データの生成方法では、ユーザによるＨＤＬ（ＶＨＤＬ、Ｖｅｒｉｌｏｇ−ＨＤＬなど）の記述内容に依存して分割する単位（再現データ）が定まってしまい、再現データの秘匿性が低下するという問題がある。
【００１０】
以上のとおり、従来技術には、解決すべき問題点が存在する。
【００１１】
本発明の一側面において、不具合の再現が可能であって、秘匿性の高い再現データの生成が可能な半導体集積回路の設計支援装置、設計支援方法及びプログラムが、望まれる。
【課題を解決するための手段】
【００１２】
本発明の第１の視点によれば、半導体集積回路の設計データに基づいて半導体集積回路の設計を支援する設計支援装置であって、設計データを複数のＦＳＭ（Ｆｉｎｉｔｅ  Ｓｔａｔｅ  Ｍａｃｈｉｎｅ）に変換するＦＳＭ変換部と、前記複数のＦＳＭから前記設計支援装置が動作するために必要な論理構造を生成するＦＳＭデータ探索部と、前記論理構造から前記設計支援装置の不具合が再現可能な縮小データを出力する縮小データ生成部と、を備える半導体集積回路の設計支援装置が提供される。
【００１３】
本発明の第２の視点によれば、半導体集積回路の設計データに基づいて半導体集積回路の設計を支援する設計支援装置の設計支援方法であって、設計データを複数のＦＳＭ（Ｆｉｎｉｔｅ  Ｓｔａｔｅ  Ｍａｃｈｉｎｅ）に変換するＦＳＭ変換工程と、前記複数のＦＳＭから前記設計支援装置が動作するために必要な論理構造を生成するＦＳＭデータ探索工程と、前記論理構造から前記設計支援装置の不具合が再現可能な縮小データを出力する縮小データ生成工程と、を含む半導体集積回路の設計支援方法が提供される。
【００１４】
本発明の第３の視点によれば、半導体集積回路の設計データに基づいて半導体集積回路の設計を支援する設計支援装置を構成するコンピュータに実行させるプログラムであって、設計データを複数のＦＳＭ（Ｆｉｎｉｔｅ  Ｓｔａｔｅ  Ｍａｃｈｉｎｅ）に変換するＦＳＭ変換処理と、前記複数のＦＳＭから前記設計支援装置が動作するために必要な論理構造を生成するＦＳＭデータ探索処理と、前記論理構造から前記設計支援装置の不具合が再現可能な縮小データを出力する縮小データ生成処理と、を実行するプログラムが提供される。
【発明の効果】
【００１５】
本発明の各視点によれば、不具合の再現が可能であって、秘匿性の高い再現データの生成が可能な半導体集積回路の設計支援装置、設計支援方法及びプログラムが、提供される。
【図面の簡単な説明】
【００１６】
【図１】本発明の概要を説明するための図である。
【図２】本発明の第１の実施形態の設計支援装置の内部構成を示す図である。
【図３】図２に示す設計支援装置を使用する際に必要なデータと出力するデータの関係を示す図である。
【図４】縮小データの生成処理の概要を示すフローチャートである。
【図５】図２に示すＦＳＭデータ探索部におけるデータ探索処理の概要を示すフローチャートである。
【図６】図５のファンインの探索処理を示すフローチャートである。
【図７】図５に示す必要状態生成処理を示すフローチャートである。
【図８】図７の動作確認処理を示すフローチャートである。
【図９】設計データをＦＳＭに変換し、変換後のＦＳＭの状態遷移から一部を抜粋した一例を示す図である。
【図１０】図９の信号ＣについてのＦＳＭの状態遷移を記憶する木構造データの一例を示す図である。
【図１１】図７のステップＳ２０３で抽出したＦＳＭに含まれる論理式の一例である。
【図１２】図８のステップＳ１００１で決定した各信号の情報から、Ｖｅｒｉｌｏｇ−ＨＤＬ形式で出力した動作確認用データの一例を示す図である。
【図１３】本発明の第２の実施形態におけるＦＳＭデータ探索処理の概要を示すフローチャートである。
【図１４】図１３の遷移元範囲拡大処理を示すフローチャートである。
【図１５】図１３の遷移先範囲拡大処理を示すフローチャートである。
【図１６】設計データから生成したＦＳＭの状態遷移の一部の一例を示す図である。
【図１７】図１６に対応するＶｅｒｉｌｏｇ−ＨＤＬ記述の一部についての一例である。
【図１８】図１６に示すＦＳＭと図１７のＶｅｒｉｌｏｇ−ＨＤＬ記述の範囲との関係を示す図である。
【図１９】本発明の第３の実施形態における回路の一部を縮小する処理を示すフローチャートである。
【発明を実施するための形態】
【００１７】
初めに、図１を用いて実施形態の概要について説明する。なお、この概要に付記した図面参照符号は、理解を助けるための一例として各要素に便宜上付記したものであり、本発明を図示の態様に限定することを意図するものではない。
【００１８】
上述のように、特許文献１で開示された技術では、設計データをモジュールごとに分割することで再現データを生成する。しかし、このような再現データの生成方法では、再現データの秘匿性が低下するという問題がある。そのため、不具合の再現が可能であって、秘匿性の高い再現データ（以後、縮小データと呼ぶ）の生成が可能な半導体集積回路の設計支援装置が必要である。
【００１９】
そこで、図１に示す半導体集積回路の設計支援装置を提供する。図１に示す設計支援装置は、設計データを複数のＦＳＭに変換するＦＳＭ変換部と、複数のＦＳＭから装置が動作するために必要な論理構造を生成するＦＳＭデータ探索部と、論理構造から装置の不具合が再現可能な縮小データを出力する縮小データ生成部と、を備えている。ＦＳＭデータ探索部においては、任意に選択したＦＳＭから設計支援装置が動作可能であって、必要最低限の情報しか含まない情報を探索し、生成する。
【００２０】
ここで、ユーザが設計支援装置を使って設計をしている半導体集積回路の全ての情報が設計支援装置の不具合の再現に必要な訳ではない。一方、ユーザから不具合の報告を受けた設計支援装置の開発元では、ユーザから提供されるデータを用いて再現確認をすることになる。その際に、特定のＦＳＭに含まれる論理式のみ提供されても設計支援装置を動作させることができず、ある程度の論理的な整合性がとれたデータが必要となる。そこで、ＦＳＭデータ探索部において、ＦＳＭに含まれる論理式を構成する信号に対してファンインの探索を行ない、任意に選択したＦＳＭの論理構造を成立させるデータの探索を行なう。若しくは、任意に選択したＦＳＭを含み、入出力が１系統となる範囲のＦＳＭの状態群を探索することで整合性のとれたデータを生成する。そして、ＦＳＭデータ探索部が生成した論理構造から設計支援装置の動作確認が可能なデータを生成し、不具合の再現確認を行なう。その後、ＦＳＭデータ生成部では不具合の再現した論理構造から縮小データの出力を行なう。
【００２１】
このように、ユーザが記述したＨＤＬファイルに依存せず、不具合の再現が可能な縮小データを生成することで、設計支援装置の開発元に提供するデータの秘匿性を向上させることができる。
【００２２】
［第１の実施形態］
次に、本発明の第１の実施形態について、図面を用いてより詳細に説明する。初めに、設計支援装置１の構成及びその動作を説明し、その後、具体的なデータを用いて動作の説明を行なう。
【００２３】
図２は、本発明の第１の実施形態に係る設計支援装置１の内部構成を示す図である。設計支援装置１は、表示部１０と、操作部２０と、記憶部３０と、ＦＳＭ変換部４０と、ＦＳＭデータ探索部５０と、縮小データ生成部６０と、制御部７０から構成されている。
【００２４】
表示部１０は、ユーザが設計支援装置１を操作する際に必要な情報を表示する。操作部２０では、ユーザからの操作を受け付ける。記憶部３０は、設計支援装置１の動作に必要なデータを記憶する。ＦＳＭ変換部４０は、設計データから状態遷移を制御する有限状態機械（ＦＳＭ）を生成する。ＦＳＭデータ探索部５０は、ＦＳＭ変換部４０において変換したＦＳＭから半導体集積回路の設計支援装置１の不具合を再現させるために必要なデータを抽出する。縮小データ生成部６０は、ＦＳＭ変換部４０が抽出したデータから設計支援装置１で発生した不具合の再現が可能であって、秘匿性の高いデータ（縮小データ）を生成する。制御部７０は、設計支援装置１の表示部１０、操作部２０、記憶部３０、ＦＳＭ変換部４０、ＦＳＭデータ探索部５０、縮小データ生成部６０の制御を行なう。
【００２５】
図３は、設計支援装置１を本来の設計支援装置として機能させる際に必要なデータと出力するデータの関係を示す図である。設計支援装置１では、設計の対象としている半導体集積回路の設計データ（入力データ）と、設計データで使われているセルの詳細な情報が記憶されているセルライブラリを必要とする。セルライブラリは、記憶部３０に記憶されているものを指定しても良いし、ネットワーク上のサーバに記憶されたものであっても良い。設計支援装置１は、セルライブラリを参照し、設計データから出力データを生成する。設計支援装置１の出力データは、設計支援装置１が備える機能によって異なり、例えば、設計支援装置１が半導体集積回路の動作確認（シミュレーション）を行なう機能を備えていれば、そのシミュレーション結果等を出力データとして出力する。なお、設計支援装置１に不具合があり、ユーザから縮小データの提供を受けた開発元では、縮小データを図３に示す入力データとして設計支援装置を動作させ、不具合を再現させることになる。
【００２６】
次に、設計支援装置１の動作について説明する。図４は、縮小データの生成処理の概要を示すフローチャートである。
【００２７】
ステップＳ０１では、設計データの入力をする。設計データは、Ｖｅｒｉｌｏｇ−ＨＤＬ、ＶＨＤＬといったハードウェア記述言語（ＨＤＬ）や、Ｃ言語、Ｃ＋＋言語、ＳｙｓｔｅｍＣなどのプログラム言語によって記述されている。
【００２８】
ステップＳ０２では、ＦＳＭ変換部４０において、入力された設計データをＦＳＭに変換する。本実施形態に係る設計支援装置１においては、設計データからＦＳＭに変換できれば、そのアルゴリズムについての制限はない。
【００２９】
ステップＳ０３では、ＦＳＭデータ探索部５０において、変換後のＦＳＭに対してＦＳＭデータ探索処理を行ない、不具合を再現させるために必要となるデータ（論理構造）の抽出を行なう。
【００３０】
ステップＳ０４では、縮小データ生成部６０において、ＦＳＭデータ探索部５０が抽出したデータから縮小データの出力を行う。
【００３１】
次に、上述のステップＳ０３のＦＳＭデータ探索処理について、より詳細に説明する。図５は、ＦＳＭデータ探索部５０におけるＦＳＭデータ探索処理の概要を示すフローチャートである。
【００３２】
ステップＳ１１において、生成されたＦＳＭの中からデータ抽出を開始するＦＳＭを選択する。この際に選択するＦＳＭは任意のＦＳＭで良く、ユーザが選択しても設計支援装置１が自動的に決定しても良い。
【００３３】
ステップＳ１２では、選択したＦＳＭのみで不具合が再現するか否かを確認する。
【００３４】
不具合が再現することが確認できれば処理を終了し、不具合が再現できない場合にはステップＳ１４に遷移する（ステップＳ１３）。
【００３５】
ステップＳ１４では、ステップＳ１１で選択したＦＳＭに含まれる論理式の右辺を構成する信号を抽出する。その際に、定数や入力端子信号については抽出対象から除外する。なお、ＦＳＭに含まれる論理式のうち、処理内容を示すものを右辺、その処理の結果を示すものを左辺として以下の説明をする。
【００３６】
ステップＳ１５では、ステップＳ１４で信号の抽出を行なった結果、論理式の右辺に抽出対象となる信号が存在するか確認する。信号の抽出の結果、論理式の右辺に信号がない場合、探索すべき信号は存在しないと判断し、処理を終了する。一方、信号の抽出の結果、論理式の右辺に信号が存在する場合、ステップＳ１６に遷移する。
【００３７】
ステップＳ１６では、ステップＳ１４で抽出した信号に対してファンインの探索を行なう。本ステップでは、ステップＳ１１で任意に選択したＦＳＭに含まれる論理式から抽出した信号に対してファンインの探索を行なうことで、ステップＳ１１で選択したＦＳＭの論理を構成するために必要となるＦＳＭの集合（以後、状態群と呼ぶ）を生成する。即ち、ステップＳ１１で選択したＦＳＭに含まれる論理式を成立させるために必要なＦＳＭの集合を抽出する処理を本ステップでは実行する。ファンインの探索の詳細については後述する。
【００３８】
ステップＳ１７では、ステップＳ１４で抽出した全ての信号に対してファンインの探索が終了したか否かを判断する。全ての信号についてファンインの探索が終了している場合にはステップＳ１８に遷移する。全ての信号についてファンインの探索が終了していない場合には、ステップＳ１６に遷移し、ファンインの探索を継続する。
【００３９】
ステップＳ１８では、ステップＳ１１で選択したＦＳＭに含まれる論理式の右辺に存在する全ての信号についてファンインの探索が終了したので、ＦＳＭの論理式の右辺を構成する信号ごとにファンインの探索により生成された状態群からそれぞれ状態群を１つ選択する。そして、異なる信号の状態群を組み合わせることで、設計支援装置１の動作に必要（不具合の再現に必要な）な動作確認用データを生成し、生成したデータを用いて不具合が再現するか否かを確認する。
【００４０】
例えば、ステップＳ１１で選択したＦＳＭに含まれる論理式から、信号Ｘ及び信号Ｙがファンインの対象として抽出され、ステップＳ１６の処理を実行した結果、信号Ｘを生成するために必要なＦＳＭの状態群としてＧ１｛Ｘ１、Ｘ２、Ｘ３｝が生成され、信号Ｙを生成するために必要なＦＳＭの状態群としてＧ２｛Ｙ１、Ｙ２｝が生成されたものとする。次に、Ｇ１の中から１つの状態群を選択し、さらにＧ２の中から１つの状態群を選択し、これらを組み合わせて設計支援装置１の動作に必要なデータを生成し、不具合の再現を試みる。本ステップでの処理を必要状態生成処理と呼び、後に詳細を説明する。
【００４１】
次に、上述のステップＳ１６におけるファンインの探索について説明する。図６は、ファンインの探索処理のフローチャートである。ファンインの探索処理は、図５のステップＳ１４で抽出した信号の生成源となるＦＳＭを探索する処理である。
【００４２】
ステップＳ１０１では、ステップＳ１１で選択したＦＳＭを遷移先（現在の処理対象のＦＳＭ）に定め、処理対象となっているＦＳＭに遷移する前のＦＳＭを遷移元として、全ての遷移元のＦＳＭを抽出する。なお、全ての遷移元のＦＳＭを抽出するとは、処理対象となっているＦＳＭが１つのＦＳＭから遷移するとは限らず、処理対象となっているＦＳＭを遷移先に持つ全てのＦＳＭを抽出することを意味する。
【００４３】
ステップＳ１０２では、ステップＳ１０１で抽出した、それぞれの各遷移元のＦＳＭにおいて、遷移先のＦＳＭに含まれる論理式の右辺から抽出した信号が、遷移元のＦＳＭに含まれる論理式の左辺に存在するか否かを探索する。
【００４４】
ステップＳ１０３では、遷移元のＦＳＭに含まれる論理式の左辺に、遷移先のＦＳＭの論理式の右辺から抽出した信号が存在するか否かを確認する。信号が存在しなければステップＳ１０４に遷移する。信号が存在すればステップＳ１０５に遷移する。
【００４５】
ステップＳ１０４では、遷移元のＦＳＭを新たな遷移先のＦＳＭとしてファンインの探索を行なう。即ち、現在行なっているファンインの探索処理（ステップＳ１６）において、同じファンインの探索処理を再帰的に実行する。再帰的にファンインの探索処理を実行することで、最終的に目的とする信号の生成源となっているＦＳＭを特定することが可能になる。
【００４６】
ステップＳ１０５では、遷移元のＦＳＭを、遷移先のＦＳＭに含まれる論理式を構成するために必要なＦＳＭの状態群の中の１つとして記憶する。
【００４７】
その際の記憶方法は木構造などのデータ構造を採用する。後の処理において遷移先のＦＳＭの右辺から抽出した信号が、どのようなＦＳＭを経由して生成された信号であるかといった情報が必要になるためである。木構造などのデータ構造を採用することで、それぞれの信号がどのＦＳＭを経由しているかを認識可能とする。本実施形態においては、信号ごとの状態群を木構造で記憶した場合について説明する。遷移先のＦＳＭを親ノード、遷移元のＦＳＭを子ノードとして記憶する。なお、各信号が伝播する状態を順番に記憶（経路を記憶）することができれば、他のデータ構造でも採用可能なことは当然である。
【００４８】
ステップＳ１０６では、抽出した信号を左辺に持つ遷移元のＦＳＭに含まれる論理式において、その論理式の右辺から、さらに信号を抽出する。なお、信号を抽出する際には、定数や入力端子信号については除外し、これらの定数や入力端子信号については信号とは扱わない。
【００４９】
ステップＳ１０７では、遷移元のＦＳＭに含まれる論理式の右辺に信号が存在するか否か確認する。信号が存在すればステップＳ１０８に遷移し、信号が存在しなければ、ファンインの探索対象となる信号は存在しないと判断し、ステップＳ１１０に遷移する。
【００５０】
ステップＳ１０８では、ステップＳ１０６で抽出した信号に対して、さらに遷移元のＦＳＭを新たな処理対象としてファンインの探索を行なう。本ステップにおいても、ステップＳ１０４と同様にファンインの探索処理の再帰実行が行なわれる。
【００５１】
ステップＳ１０９では、ステップＳ１０６で抽出した全ての信号についてファンインの探索を実行したか否かを確認する。全ての信号について、ファンインの探索を実行していなければステップＳ１０８に遷移し、ファンインの探索を継続する。全ての信号について、ファンインの探索を実行していれば、ステップＳ１１０に遷移する。
【００５２】
ステップＳ１１０では、ステップＳ１０１で抽出した全てのＦＳＭについて、ステップＳ１０２以降の処理（信号ごとのファンインの探索処理）を実行したか否か確認する。全てのＦＳＭについてステップＳ１０２以降の処理を実行している場合には、ファンインの探索処理を終了し、全てのＦＳＭに対してステップＳ１０２以降の処理を実行していない場合にはステップＳ１０２に遷移し、処理を継続する。
【００５３】
次に、必要状態生成処理の詳細について説明する。図７は、図５の必要状態生成処理（ステップＳ１８）を示すフローチャートである。
【００５４】
ステップＳ２０１では、図５のステップＳ１１で選択したＦＳＭに含まれる論理式を構成する各信号について、ステップＳ１６のファンインの探索により生成された信号ごとの状態群を抽出する。具体的には、図６のステップＳ１０５で生成した木構造データの末端の子ノードから順に、親ノードまでたどり、各ノードに記憶した一連のＦＳＭを状態群として抽出する。
【００５５】
ステップＳ２０２では、信号ごとに抽出した状態群から１つの状態群を選択し、処理対象となるＦＳＭの状態群を選択する。
【００５６】
ステップＳ２０３では、抽出したＦＳＭの状態群から、重複して選択されたＦＳＭが存在する場合には、重複したＦＳＭを削除する。ステップＳ２０３により生成されたＦＳＭの状態群は、設計支援装置１を動作させるために必要なＦＳＭの中から必要最低限のＦＳＭを選択したものといえる。
【００５７】
ステップＳ２０４では、ステップＳ２０３で生成した、設計支援装置１の動作に必要なＦＳＭの状態群から生成したデータを使用して動作確認（不具合の再現確認）を行なう。
【００５８】
ここで、図８を用いてＦＳＭデータ探索処理における動作確認の方法について説明する。図８は、動作確認方法（不具合の再現確認）を示すフローチャートである。
【００５９】
ステップＳ１００１では、動作確認の対象となるＦＳＭの状態群から論理式を抽出し、抽出した論理式の中から、設計支援装置１の動作に必要な論理構造（入出力信号及び内部信号）を決定する。その際の決定方法については、特許文献２の図７で開示されている方法を始めとして、どのようなアルゴリズムでも良い。
【００６０】
ステップＳ１００２では、ステップＳ１００１で決定した信号情報に基づいて、入力した設計データと同じ言語仕様に基づくファイル形式で動作確認用データを生成する。例えば、Ｖｅｒｉｌｏｇ−ＨＤＬで記述したデータを入力データとした時は、Ｖｅｒｉｌｏｇ−ＨＤＬで動作確認用データを記述する。
【００６１】
ステップＳ１００３では、ステップＳ１００２で生成した動作確認用データを用いて、設計支援装置１を動作させ、不具合の再現確認を行なう。以上が、動作確認方法に関する説明である。
【００６２】
再び、図７を用いて必要状態生成処理の説明を継続する。図７のステップＳ２０５では、上述の動作確認によって不具合が再現したか否かを確認する。不具合の再現が行なえた場合には、動作確認用データを作り出した論理構造を記憶部３０に記憶し、処理を終了する。不具合の再現が行なえなかった場合には、ステップＳ２０６に遷移する。
【００６３】
ステップＳ２０６では、候補となる状態群の組み合わせが全て終了したか否かを判断する。全ての組み合せが終了していれば処理を終了する。全ての組み合せが終了していなければ、ステップＳ２０２に遷移して、組み合せが異なる状態群に対して処理を継続する。さらに、縮小データ生成部６０では、記憶部３０に記憶されている論理構造から縮小データを出力する。なお、その際の縮小データの形式は設計データと同じ形式でも良いし、ユーザが縮小データの形式を選択しても良い。以上が、設計支援装置１における縮小データの生成処理の説明である。
【００６４】
次に、本実施形態に係る設計支援装置１における縮小データの生成を具体的なデータを用いて説明する。図９は、設計データをＦＳＭに変換し、変換後のＦＳＭの状態遷移から一部を抜粋した一例である。図９には、７つのＦＳＭが示されており、ＦＳＭ１０１乃至ＦＳＭ１０５には論理式を記載している。図９に示す状態遷移が入手できているので、図４のステップＳ０２までは既に終了しているものとし、図４のステップＳ０３以降について具体的に説明する。図４のステップＳ０３の詳細は、図５に示されているため、図５に示すフローチャートに従いＦＳＭデータ探索処理について説明する。
【００６５】
図５のステップＳ１１では、複数のＦＳＭから任意のＦＳＭを選択する。ここでは、ＦＳＭ１０５を選択したものとする。
【００６６】
ステップＳ１２では、選択したＦＳＭ１０５のみで設計支援装置１の不具合が再現できるか確認する。
【００６７】
選択したＦＳＭ１０５のみでは不具合が再現できなかったものとする。従って、ステップＳ１４に遷移する（ステップＳ１３）。
【００６８】
ステップＳ１４では、ＦＳＭ１０５の論理式から右辺の信号を抽出する。ＦＳＭ１０５に含まれる論理式はＨ＝Ｃ＋Ｆ／Ｅであるから、信号Ｃ、信号Ｆ、信号Ｅがそれぞれ抽出される。
【００６９】
ステップＳ１５では、ＦＳＭ１０５の論理式に信号が存在するか否かを判断する。上述のように、信号Ｃ、信号Ｆ、信号Ｅが存在するためステップＳ１６に遷移する。
【００７０】
ステップＳ１６では、抽出したそれぞれの信号（信号Ｃ、信号Ｆ、信号Ｅ）についてファンインの探索を行なう。
【００７１】
ここで、ファンインの探索に関する説明は図６に基づいて行なう。
【００７２】
ステップＳ１０１では、ファンインの探索の対象となっている信号が、信号Ｃであれば、ＦＳＭ１０５の遷移元であるＦＳＭ１０２及びＦＳＭ１０４が抽出される。
【００７３】
ステップＳ１０２では、それぞれの遷移元であるＦＳＭ１０２及びＦＳＭ１０４に含まれる論理式の左辺に信号Ｃが存在するか否か探索する。図９の例においては、ＦＳＭ１０２に含まれる論理式の左辺に信号Ｃが存在する。ＦＳＭ１０４に含まれる論理式の左辺には信号Ｃは存在しない。
【００７４】
ステップＳ１０３では、ＦＳＭ１０２に含まれる論理式の左辺に信号Ｃが存在するためステップＳ１０５に遷移する。遷移元がＦＳＭ１０４であれば、ＦＳＭ１０４に含まれる論理式の左辺に信号Ｃは存在しないためステップＳ１０４に遷移する。
【００７５】
ステップＳ１０４において、ＦＳＭ１０４を新たな遷移先としてファンインの探索を再帰的に行なう。しかし、遷移元のＦＳＭ１０３、さらに、ＦＳＭ１０１においても、信号ＣはＦＳＭに含まれる論理式の左辺に発見できないのでＦＳＭ１０４側には信号Ｃに関する状態群は存在しないことが確定する。
【００７６】
ステップＳ１０５では、遷移先のＦＳＭ１０５を親ノード、遷移元のＦＳＭ１０２を子ノードとして木構造により記憶する。
【００７７】
図１０は、信号ＣについてのＦＳＭの状態遷移を記憶する木構造データの一例を示す図である。記憶部３０の配列２０１に、信号Ｃ用のエリア２０２が確保される。ステップＳ１０５において、状態群として記憶すべきＦＳＭとしてＦＳＭ１０５及びＦＳＭ１０２を抽出した際に、ノードＮ０１及びＮ０２を生成する。その後、それぞれのノードにＦＳＭ１０５及びＦＳＭ１０２をポインタＰ０１及びＰ０２により接続し、記憶する。さらに、配列２０１から親ノードＮ０１へのポインタＰ０３を登録すると共に、親ノードＮ０１から子ノードＮ０２を示すポインタＰ０４を登録することで、親子関係の構築を行なう。また、子ノードから親ノードを探索できるように親ノードを示すポインタＰ０５を登録する。親ノードＮ０１には上位のノード（親ノード）は存在しないので、ノードＮ０１の親ノードを示すポインタＰ０６は未使用とする。図１０では、ポインタＰ０６は未使用であることを明示するため、ＥＮＤと記述している。また、遷移元状態が複数ある場合には、子ノードと並列に兄弟ノードとして登録して記憶する。図１０において、ノードＮ０１及びＮ０２の兄弟ノードを示すポインタＰ０７及びＰ０８は未使用である。
【００７８】
再び、図６に基づいて説明を継続する。図６のステップＳ１０５において、遷移先のＦＳＭと遷移元のＦＳＭを木構造により記憶した後は、ステップＳ１０６を実行する。
【００７９】
ステップＳ１０６では、ＦＳＭ１０２に含まれる論理式の右辺から信号の抽出を行なう。図９の例においては、信号Ａが抽出される。
【００８０】
ステップＳ１０７では、ステップＳ１０６でＦＳＭ１０２の論理式から信号Ａが抽出されたのでステップＳ１０８に遷移する。
【００８１】
ステップＳ１０８では、ＦＳＭ１０２を新たな遷移先として、信号Ａについてファンインの探索を再帰的に行なう。すると、ＦＳＭ１０２の遷移元であるＦＳＭ１０１に含まれる論理式の左辺に信号Ａが存在することがわかる。このＦＳＭ１０１に含まれる論理式においては、信号Ａについての右辺は定数であるのでこれ以上の探索ができない。従って、ＦＳＭ１０１までの探索で処理を終了する。
【００８２】
信号Ｃについての状態群として、ＦＳＭ１０１が検出されたので木構造データに登録する。図１０の木構造データに、ＦＳＭ１０１を記憶する際には、登録済みであるＦＳＭ１０２についてのノードＮ０２を親ノードとして、ノードＮ０３を新たに生成する。さらに、ＦＳＭ１０１へのポインタＰ０９を登録する。また、親ノードＮ０２から子ノードＮ０３を示すポインタＰ１０を親ノードＮ０２に登録し、子ノードＮ０３から親ノードＮ０２を示すポインタＰ１１を子ノードＮ０３に登録する。ノードＮ０３の子ノードを示すポインタＰ１２と、兄弟ノードを示すポインタＰ１３は未使用である。以上の処理により、ＦＳＭ１０５、ＦＳＭ１０２、ＦＳＭ１０１の各ＦＳＭを信号Ｃについての状態群として木構造データにより記憶する。
【００８３】
なお、図９においては、信号Ｃについての状態群は１つしか発見できなかったが、複数存在する場合もある。さらに、信号Ｃに対してのファンインの探索において１通りしか状態群は記憶されなかったため、１列の木構造になっているが、検出された遷移元状態が複数存在する場合には子ノードが多数存在することになるため、多分木構造でデータの記憶を行なう。
【００８４】
信号Ｃに対して行なったファンインの探索と同様に、信号Ｆ及び信号Ｅについてもファンインの探索を行なう。その結果、信号ＦはＦＳＭ１０５、ＦＳＭ１０４、ＦＳＭ１０１を状態群として持ち、信号ＥはＦＳＭ１０５及びＦＳＭ１０４を状態群として持つ。以上で、図５におけるステップＳ１７までの処理を説明した。
【００８５】
次に、図５のステップＳ１８の処理を行なう。ステップＳ１８では、信号Ｃ、信号Ｆ、信号Ｅについて、それぞれ抽出した各状態群を組み合わせて、設計支援装置１の動作確認に必要な必要状態生成を行なう。
【００８６】
次に、図７を用いて必要状態生成の具体例を説明する。図７のステップＳ２０１では、状態群の抽出を行なう。各信号について抽出した状態群は、それぞれ１つ存在する。信号Ｃについての状態群は、ＦＳＭ１０５、ＦＳＭ１０２、ＦＳＭ１０１である。信号Ｆについての状態群は、ＦＳＭ１０５、ＦＳＭ１０４、ＦＳＭ１０１である。信号Ｅについての状態群は、ＦＳＭ１０５、ＦＳＭ１０４である。ここでは、各信号についての状態群はそれぞれ１つしか存在しないため、状態群の組み合わせも１通りとなる。
【００８７】
ステップＳ２０２では、ステップＳ２０１で抽出した状態群から不具合再現の際に候補となるＦＳＭの組み合わせを選択する。その組み合わせを列挙すると、ＦＳＭ１０５、ＦＳＭ１０２、ＦＳＭ１０１、ＦＳＭ１０５、ＦＳＭ１０４、ＦＳＭ１０１、ＦＳＭ１０５、ＦＳＭ１０４となる。
【００８８】
ステップＳ２０３では、ステップＳ２０２で生成したＦＳＭの組み合わせからから重複するＦＳＭを削除する。すると、ＦＳＭ１０１、ＦＳＭ１０２、ＦＳＭ１０４、ＦＳＭ１０５が残る。図１１に、ステップＳ２０３で抽出したＦＳＭに含まれる論理式の一例を示す。
【００８９】
次に、図７のステップＳ２０４を実行する。ステップＳ２０４の動作確認は、抽出したＦＳＭを用いて論理構造を生成し、不具合動作の再現を行なう処理である。
【００９０】
図８を用いて、ステップＳ２０４の具体的な処理を説明する。
【００９１】
図８のステップＳ１００１では、抽出したＦＳＭに含まれる論理式から、右辺にしか存在しない信号を入力信号、左辺にしか存在しない信号を出力信号と定める。さらに、論理式の右辺及び左辺に存在する信号を内部信号と定める。例えば、図１１においては、信号Ｈは出力信号、信号Ａ、信号Ｂ、信号Ｃ、信号Ｄ、信号Ｅ、信号Ｆは内部信号と決定する。このようにして、設計支援装置１が動作するために必要な論理構造を生成する。
【００９２】
ステップＳ１００２では、論理構造から動作確認用データを、入力データと同じ形式で出力する。図１２は、ステップＳ１００１で生成した論理構造（各信号の情報）から、Ｖｅｒｉｌｏｇ−ＨＤＬ形式で出力した動作確認用データの一例を示す図である。
【００９３】
ステップＳ１００３では、生成した動作確認用データを用いて、設計支援装置１における動作を実行する。以上の動作で、図７のステップＳ２０４まで終了したことになる。
【００９４】
図７のステップＳ２０５では、設計支援装置１の不具合が再現できれば、その際の論理構造を記憶し、図７の処理を終了する。不具合が再現できなければステップＳ２０６において、状態群の全ての組み合わせにおいて不具合再現を試みたかを確認し、不具合の再現を試みていない組み合せが存在すればステップＳ２０２に遷移し、処理を継続する。その後、縮小データ生成部６０において、ユーザから設計支援装置１の開発元に提出する縮小データを出力する。以上が、縮小データを生成する処理である。
【００９５】
以上のように、半導体集積回路の設計支援装置１において、任意のＦＳＭを選択し、選択したＦＳＭの論理を構成する信号に対して、信号ごとにファンインの探索をする。さらに、その結果から、設計支援装置１の不具合再現に必要なＦＳＭの状態群を生成する。その後、ＦＳＭの状態群を組み合わせて設計支援装置１で動作確認が可能な動作確認用データを生成する。この動作確認用データを用いて、設計支援装置１の不具合再現確認を行い、不具合の再現が確認できれば縮小データとして出力する。この縮小データは、不具合の再現に必要な回路のみ抽出されており、縮小データから半導体集積回路の設計意図を推測することが非常に困難になる。
【００９６】
なお、特許文献１に開示された技術では、ユーザが提供するＨＤＬファイルに記述されたモジュールや論理ブロックをそのまま流用しており、ユーザの設計意図を認識することが容易である。そのため、特許文献１に開示された不具合再現のためのデータの秘匿性は必ずしも高いとはいえない。一方、本実施形態に係る設計支援装置１が出力する縮小データは、必要最低限の情報だけを含み、設計支援装置１が自動的に生成する（ユーザの記述するＨＤＬファイルに依存しない）ものであるため、設計データの秘匿性が向上しているといえる。
【００９７】
［第２の実施形態］
続いて、第２の実施形態について図面を参照して詳細に説明する。本実施形態に係る設計支援装置１ａの内部構成は設計支援装置１と同様であるため、図２に相当する説明を省略する。
【００９８】
設計支援装置１と設計支援装置１ａの相違点は、ＦＳＭデータ探索部５０におけるデータ探索の方法である。第１の実施形態に係る設計支援装置１では、各ＦＳＭに含まれる論理の内容に基づいて縮小データの生成を行なっていたが、本実施形態ではＦＳＭ間の接続関係を調べることで、不具合の再現に必要なＦＳＭを決定する。図１３を用いて、本実施形態におけるＦＳＭデータ探索の処理について説明する。図１３は、本実施形態におけるＦＳＭデータ探索の概要を示すフローチャートである。
【００９９】
ステップＳ２１では、複数のＦＳＭから任意のＦＳＭを選択する。なお、以後の説明において、現在の処理対象となっているＦＳＭを遷移先、遷移先のＦＳＭに遷移する前のＦＳＭを遷移元とする。また、あるＦＳＭへ別のＦＳＭからの遷移を入力エッジ、あるＦＳＭから別のＦＳＭへの遷移を出力エッジと呼ぶ。
【０１００】
ステップＳ２２では、ステップＳ２１で選択した現在の処理対象となっているＦＳＭにおいて他のＦＳＭと接続している入力エッジの本数を数え、そのような入力エッジが１本より多く存在するか判断する。入力エッジが１本より多い場合には、ステップＳ２３に遷移する。入力エッジが１本以下であれば、ステップＳ２４に遷移する。
【０１０１】
ステップＳ２３では、遷移元のＦＳＭについて遷移元範囲拡大処理を行なう。遷移元範囲拡大処理については後述する。
【０１０２】
ステップＳ２４では、現在の処理対象となっているＦＳＭにおいて他のＦＳＭと接続している出力エッジの本数を数える。その後、そのような出力エッジが１本より多く存在するか判断する。出力エッジが１本より多い場合には、ステップＳ２５に遷移する。出力エッジが１本以下であれば、ステップＳ２６に遷移する。
【０１０３】
ステップＳ２５では、遷移先のＦＳＭについて遷移先範囲拡大処理を行なう。遷移先範囲拡大処理については後述する。
【０１０４】
以上の処理を実行することで、入力エッジが１本、出力エッジが１本となる範囲のＦＳＭを抽出する。
【０１０５】
ステップＳ２６では、この抽出したＦＳＭに対して、図８で説明した動作確認と同様の処理を行なう。
【０１０６】
ステップＳ２７では、不具合の再現を判断し、不具合が再現すればＦＳＭデータ探索処理は終了する。不具合が再現できなければ、ステップＳ２８に遷移する。
【０１０７】
ステップＳ２８では、遷移元のＦＳＭについての範囲拡大処理を行ない、遷移元のＦＳＭが存在せず、範囲の拡大が行なえなくなるまで処理を継続する。
【０１０８】
ステップＳ２９では、遷移元のＦＳＭについて範囲拡大ができない場合に、ステップＳ２５に遷移し、遷移先のＦＳＭについて範囲拡大処理を行ない範囲の拡大が行なえなくなるまで処理を継続する。その後、遷移先のＦＳＭについて範囲の拡大が行なえない場合に処理を終了する。
【０１０９】
次に、ステップＳ２５における遷移先範囲拡大処理について説明する。図１４は、図１３のステップＳ２３で示した遷移元範囲拡大処理のフローチャートである。
【０１１０】
ステップＳ３０１では、現在の処理対象となっているＦＳＭの遷移元を探索し、遷移元のＦＳＭを抽出する。
【０１１１】
ステップＳ３０２では、ステップＳ３０１で抽出した遷移元のＦＳＭの出力エッジ数と現在の処理対象となっているＦＳＭの入力エッジ数をそれぞれ数え、比較する。そして、現在の処理対象となっているＦＳＭの入力エッジ数が、遷移元の出力エッジ数よりも多い場合には、ステップＳ３０３に遷移する。現在の処理対象となっているＦＳＭの入力エッジ数が、遷移元の出力エッジ数以下の場合には、ステップＳ３０４に遷移する。
【０１１２】
ステップＳ３０３では、遷移元のＦＳＭを探索候補のＦＳＭとして記憶する。この際の記憶データ構造は、配列やリスト構造など複数の状態を記憶できる方式であればどのような方式でも良い。
【０１１３】
ステップＳ３０４では、ステップ３０２において数えた遷移元のＦＳＭの出力エッジ数と現在の処理対象となっているＦＳＭの入力エッジ数が等しいか確認する。遷移元のＦＳＭの出力エッジ数が現在の処理対象となっているＦＳＭの入力エッジ数と等しくない場合には、ステップＳ３０５に遷移する。遷移元のＦＳＭの出力エッジ数が現在の処理対象となっているＦＳＭの入力エッジ数と等しい場合には、ステップＳ３０６に遷移する。
【０１１４】
ステップＳ３０５では、遷移先のＦＳＭに対して遷移先範囲拡大処理を行なう。
【０１１５】
ステップＳ３０６では、ステップＳ３０１で抽出した全ての遷移元のＦＳＭについて探索が終了したか否か判断する。探索が終了していれば、ステップＳ３０７に遷移する。探索が終了していなければステップＳ３０２に遷移し、処理を継続する。
【０１１６】
ステップＳ３０７では、ステップＳ３０３で記憶した探索候補のＦＳＭが存在するか否かを判断する。探索候補のＦＳＭが存在する場合には、ステップＳ３０１に遷移し、探索候補のＦＳＭを新たな遷移先に設定し、処理を継続する。探索候補のＦＳＭが存在しない、又は、ステップＳ３０３で記憶した探索候補のＦＳＭを全て探索した場合には、ステップＳ３０８に遷移する。
【０１１７】
ステップＳ３０８では、探索したＦＳＭにおいて、探索したＦＳＭの範囲外のＦＳＭから遷移している入力エッジの総数が１本であるか否かを判断する。なお、探索したＦＳＭの範囲外のＦＳＭから遷移している入力エッジの総数を、以後、相互に接続していない総入力エッジ数と呼ぶ。相互に接続していない総入力エッジ数が１本であれば処理を終了する。１本でなければ、ステップＳ３０９に遷移する。
【０１１８】
ステップＳ３０９では、ステップＳ３０１で抽出したＦＳＭを新たな現在の処理対象のＦＳＭとして、遷移元のＦＳＭについての遷移元範囲拡大処理を行なう。
【０１１９】
次に、遷移先範囲拡大処理について説明する。図１５は、図１３のステップＳ２５で示した遷移先範囲拡大処理のフローチャートである。現在の処理対象となっているＦＳＭの状態を遷移元のＦＳＭの状態とする。
【０１２０】
ステップＳ４０１では、ＦＳＭの遷移元の遷移先を探索し、遷移先のＦＳＭを抽出する。
【０１２１】
ステップＳ４０２では、現在の処理対象となっているＦＳＭの出力エッジ数とステップＳ４０１で抽出した遷移先のＦＳＭの入力エッジ数をそれぞれ数え、比較する。そして、現在の処理対象となっているＦＳＭの出力エッジ数が、遷移先の入力エッジ数よりも多い場合には、ステップＳ４０３に遷移する。現在の処理対象となっているＦＳＭの出力エッジ数が、遷移先の入力エッジ数以下の場合には、ステップＳ４０４に遷移する。
【０１２２】
ステップＳ４０３では、遷移先のＦＳＭを探索候補のＦＳＭとして記憶する。この際の記憶データ構造も配列やリスト構造など複数の状態を記憶できる方式であれば良い。
【０１２３】
ステップＳ４０４では、ステップＳ４０２において数えた現在の処理対象となっているＦＳＭの出力エッジ数と遷移先のＦＳＭの入力エッジ数が等しいか確認する。現在の処理対象となっているＦＳＭの出力エッジ数と遷移先のＦＳＭの入力エッジ数が等しくない場合には、ステップＳ４０５に遷移する。現在の処理対象となっているＦＳＭの出力エッジ数と遷移先のＦＳＭの入力エッジ数が等しい場合には、ステップＳ４０６に遷移する。
【０１２４】
ステップＳ４０５では、遷移元のＦＳＭに対して遷移元範囲拡大処理を行なう。
【０１２５】
ステップＳ４０６では、ステップＳ４０１で抽出した全ての遷移先のＦＳＭについて探索が終了したか否か判断する。探索が終了していれば、ステップＳ４０７に遷移し、探索が終了していなければステップＳ４０２に遷移し、処理を継続する。
【０１２６】
ステップＳ４０７では、ステップＳ４０３で記憶した探索候補のＦＳＭが存在するか否かを判断する。探索候補のＦＳＭが存在する場合には、ステップＳ４０１に遷移し、探索候補のＦＳＭを新たな遷移元に設定した上で処理を継続する。探索候補のＦＳＭが存在しない、又は、ステップＳ４０３で記憶した探索候補のＦＳＭを全て探索した場合には、ステップＳ４０８に遷移する。
【０１２７】
ステップＳ４０８では、探索したＦＳＭにおいて、探索したＦＳＭの範囲外へ遷移している出力エッジの総数が１本であるか否かを判断する。なお、探索したＦＳＭの範囲外へ遷移している出力エッジの総数を、以後、相互に接続していない総出力エッジ数と呼ぶ。相互に接続していない総出力エッジ数が１本であれば処理を終了する。１本以外であれば、ステップＳ４０９に遷移する。
【０１２８】
ステップＳ４０９では、ステップＳ４０１で抽出したＦＳＭを新たな現在の処理対象のＦＳＭとして、遷移先のＦＳＭについての遷移先範囲拡大処理を行なう。
【０１２９】
次に、本実施形態に係る設計支援装置１ａにおけるＦＳＭから不具合の再現に必要となるＦＳＭを抽出するまでの処理を具体的なデータを用いて説明する。
【０１３０】
図１６は、設計データから生成したＦＳＭの状態遷移の一部の一例を示す図である。図１７は、図１６に対応するＶｅｒｉｌｏｇ−ＨＤＬ記述の一部についての一例である。図１８は、図１６に示すＦＳＭ（若しくは、範囲）と図１７のＶｅｒｉｌｏｇ−ＨＤＬ記述の範囲との関係を示す図である。ここで、図１６の範囲３０１は、範囲３１０とＦＳＭ３０８を含む範囲である。つまり、図１６の範囲３０１は図１７の範囲４０３のＶｅｒｉｌｏｇ−ＨＤＬ記述に相当し、Ｖｅｒｉｌｏｇ−ＨＤＬ記述４０４の条件分岐処理（ｉｆ文）とＶｅｒｉｌｏｇ−ＨＤＬ記述４０８の逐次処理に相当する。
【０１３１】
以下に、図１６のＦＳＭ３０８から探索を開始し、図１６の範囲３０１に存在するＦＳＭを抽出する手順を具体的に説明する。説明は、図１３乃至１５のフローチャートを参照しながら行なう。
【０１３２】
図１３のステップＳ２１において、ＦＳＭ３０８を選択する。ＦＳＭ３０８には、入力エッジとしてエッジＥ０１の１本のみ存在し、出力エッジとしてエッジＥ０２の１本が存在する。従って、ステップＳ２２からステップＳ２４に遷移し、さらにステップＳ２６に遷移する。
【０１３３】
ステップＳ２６では、ＦＳＭ３０８のみを用いて、設計支援装置１ａの動作確認を行なう。ここでは、ＦＳＭ３０８のみでは不具合は再現できなかったものとする。従って、ステップＳ２８に遷移する（ステップＳ２７）。
【０１３４】
ＦＳＭ３０８には遷移元のＦＳＭ３０７が存在するので、遷移元のＦＳＭについての範囲拡大処理が可能である（ステップＳ２８）。
【０１３５】
次に、図１４を用いて、ＦＳＭ３０７を遷移元のＦＳＭとする遷移元範囲拡大処理について説明する。
【０１３６】
図１４のステップＳ３０１では、現在の処理対象のＦＳＭはＦＳＭ３０８が抽出され、現在の処理対象であるＦＳＭ３０８の遷移元をたどり、ＦＳＭ３０７を検出し、記憶する。
【０１３７】
ステップＳ３０２では、遷移元のＦＳＭ３０７の出力エッジ数と、現在の処理対象であるＦＳＭ３０８の入力エッジ数を比較する。遷移元のＦＳＭ３０７にある出力エッジ数は、エッジＥ０１のみであるからその数は１である。また、現在の処理対象であるＦＳＭ３０８にある入力エッジ数は、エッジＥ０１のみであるから、その数は１である。従って、ステップＳ３０２からステップＳ３０４に遷移する。
【０１３８】
また、遷移元のＦＳＭ３０７の出力エッジ数と現在の処理対象であるＦＳＭ３０８入力エッジ数は等しいのでステップＳ３０６に遷移する。
【０１３９】
ステップＳ３０１で抽出したＦＳＭはＦＳＭ３０７のみであるので、ステップＳ３０１で抽出した全ての遷移元のＦＳＭの探索が終了したことなり、ステップＳ３０７に遷移する（ステップＳ３０６）。
【０１４０】
ステップＳ３０７においては、ステップＳ３０３を実行していないため、記憶された探索候補のＦＳＭは存在せず、ステップＳ３０８に遷移する。
【０１４１】
ＦＳＭ３０８及びＦＳＭ３０７の相互に接続していない総入力エッジ数はエッジＥ０３乃至Ｅ０５の３本であるので、ステップＳ３０９に遷移し、遷移元のＦＳＭ３０７について遷移元範囲拡大処理を実行する（ステップＳ３０８）。ここで、遷移元範囲拡大処理が再帰的に実行されるが、その際の現在の処理対象のＦＳＭはＦＳＭ３０７となる。従って、ステップＳ３０１における、遷移元のＦＳＭの探索では、ＦＳＭ３０４、ＦＳＭ３０５、ＦＳＭ３０６のそれぞれが抽出される。ステップＳ３０１で抽出されたＦＳＭの中から順に、遷移元範囲拡大処理が実行される。ここでは、上記の３つのＦＳＭのうちＦＳＭ３０４を選択して、処理を説明する。
【０１４２】
ステップＳ３０２では、遷移元のＦＳＭ３０４の出力エッジ数と現在の処理対象であるＦＳＭ３０７の入力エッジ数を比較する。遷移元のＦＳＭ３０４が有する出力エッジはエッジＥ０３のみであるから、その数は１本である。一方、現在の処理対象であるＦＳＭ３０７が有する入力エッジは、エッジＥ０３乃至Ｅ０５であるから、その数は３本である。従って、出力エッジ数は入力エッジ数より小さいのでステップＳ３０３に遷移する。
【０１４３】
ステップＳ３０３では、ＦＳＭ３０４を探索候補のＦＳＭとして記憶する。
【０１４４】
ステップＳ３０６では、ステップＳ３０１で抽出した全ての遷移元となるＦＳＭについて探索を行なっていないので、ステップＳ３０２に遷移し、処理を継続する。
【０１４５】
既にＦＳＭ３０４についての探索処理は終了したので、ステップＳ３０１で抽出したＦＳＭのうち、対象となるのはＦＳＭ３０５及びＦＳＭ３０６である。これらについても、ＦＳＭ３０４と同様に処理し、ＦＳＭ３０５及びＦＳＭ３０６がステップＳ３０３において、探索候補のＦＳＭとして記憶される。以上の処理が終了すると、ステップＳ３０６からステップＳ３０７に遷移する。
【０１４６】
ステップＳ３０７では、探索候補となるＦＳＭの存在を確認するが、既にＦＳＭ３０４、ＦＳＭ３０５、ＦＳＭ３０６が探索候補として記憶されているので、ステップＳ３０８に遷移する。
【０１４７】
ステップＳ３０８では、ＦＳＭ３０７の入力エッジの数は３本であるので、それぞれの探索候補について遷移元のＦＳＭを探索する（ステップＳ３０９に遷移する）。
【０１４８】
ステップＳ３０９では、遷移元範囲拡大処理が、ＦＳＭ３０４、ＦＳＭ３０５、ＦＳＭ３０６を対象として再帰的に実行される。ここでは、探索候補であるＦＳＭ３０４の遷移元を探索することとする。
【０１４９】
ステップＳ３０１では、探索候補のＦＳＭ３０４の遷移元を探索し、ＦＳＭ３０３を抽出する。遷移元のＦＳＭ３０３が有する出力エッジはエッジＥ０６乃至Ｅ０８であるから、３本である。一方、現在の処理対象であるＦＳＭ３０７が有する入力エッジはエッジＥ０３乃至Ｅ０５であるから、３本である。従って、出力エッジ数は入力エッジ数より少ないわけではないので、ステップＳ３０４の処理へ進む（ステップＳ３０２）。
【０１５０】
さらに、出力エッジ数と入力エッジ数は等しいのでステップＳ３０６の処理へ進む（ステップＳ３０４）。
【０１５１】
ステップＳ３０６では、ステップＳ３０１で抽出したＦＳＭの状態３０４についての遷移元のＦＳＭはＦＳＭ３０３のみであるので、全ての遷移元のＦＳＭの状態を探索終了したと判断される。
【０１５２】
さらに、ステップＳ３０３は実行されていないので、探索候補のＦＳＭは記憶されておらず、ステップＳ３０８に遷移する（ステップＳ３０７）。
【０１５３】
なお、探索候補であるＦＳＭ３０４と同様に、他の探索候補であるＦＳＭ３０５及びＦＳＭ３０６について、遷移元のＦＳＭを探索する。このようにして、ＦＳＭ３０５、ＦＳＭ３０６についての探索処理が終了すると、最終的には、ＦＳＭ３０８、ＦＳＭ３０７、ＦＳＭ３０４、ＦＳＭ３０５、ＦＳＭ３０６、ＦＳＭ３０３において、相互に接続していない総入力エッジ数は、エッジＥ０９の１本のみ存在する。従って、遷移元範囲拡大処理は終了する（ステップＳ３０８）。
【０１５４】
以上の処理で、図１３におけるステップＳ２３が終了したことになる。
【０１５５】
次に、相互に接続していない総出力エッジ数は、エッジＥ０２の１本のみであるから、図１３のステップＳ２４からステップＳ２６に遷移する。
【０１５６】
ステップＳ２６では、抽出したＦＳＭ３０８、ＦＳＭ３０７、ＦＳＭ３０４、ＦＳＭ３０５、ＦＳＭ３０６、ＦＳＭ３０３を用いて不具合の再現確認を行なう。不具合の再現を確認すれば、処理を終了する（ステップＳ２７）。以上の手順によって、不具合の再現確認に必要となるＦＳＭの状態群として範囲３０１が選択できる。
【０１５７】
以上のように、本実施形態に係る設計支援装置１ａにおいて、任意に選択したＦＳＭを含む特定の範囲のＦＳＭの状態が、入力エッジが１本、出力エッジが１本となる範囲を抽出する。入力エッジが１本、出力エッジが１本となるような範囲は、回路全体の構成により特定の論理構造を持つことになり、設計支援装置１ａでの動作確認が行なえる。そのような特定の論理構造には、図１６の範囲３１０と図１７の４０４が示すように、条件分岐処理が含まれることもある。即ち、特定の範囲のＦＳＭの状態において、入力エッジが１本、出力エッジが１本となる範囲を検出することで、一定の論理構造に則した範囲のＦＳＭの抽出が可能となる。従って、本実施形態においても、ユーザが記述したモジュールや論理ブロックに依存せずに、不具合の再現確認に必要な回路を抽出することが可能となるため、再現データの秘匿性を高めることができる。
【０１５８】
［第３の実施形態］
続いて、第３の実施形態について図面を参照して詳細に説明する。本実施形態に係る設計支援装置１ｂの内部構成は設計支援装置１及び設計支援装置１ａと同様であるため、図２に相当する説明を省略する。
【０１５９】
本実施形態に係る設計支援装置１ｂは、第２の実施形態において説明した処理に回路の一部を縮小する処理を追加するものである。図１９は、本実施形態に係る設計支援装置１ｂの回路の一部を縮小する処理を示すフローチャートである。
【０１６０】
ステップＳ２００１では、第２の実施形態において抽出したＦＳＭの状態に対して、条件分岐処理の有無の発見を目的として、いずれかのＦＳＭから複数の遷移先のＦＳＭに向けた遷移が存在するか否かを確認する。なお、複数の遷移先のＦＳＭに向けた遷移があったＦＳＭを分岐の先頭と呼び、分岐の先頭のＦＳＭの出力エッジ数と同じ入力エッジ数を持つＦＳＭを、分岐の終端と呼ぶ。
【０１６１】
ステップＳ２００２において、条件分岐処理が発見できなかった場合には、回路をこれ以上、縮小することはできないので処理を終了する。条件分岐処理が発見された場合、ステップＳ２００３に遷移する。
【０１６２】
ステップＳ２００３では、分岐の先頭から分岐の終端の間にあるＦＳＭの状態群を、分岐後のＦＳＭの状態として、分岐の数と同数だけ抽出する。例えば、２系統の分岐処理が存在すれば、２つのＦＳＭの状態群が抽出できる。
【０１６３】
ステップＳ２００４では、ステップＳ２００３で抽出した分岐後のＦＳＭの状態を、第２の実施形態において抽出したＦＳＭの状態から削除したＦＳＭの状態を抽出する。
【０１６４】
ステップＳ２００５では、ステップＳ２００４で抽出したＦＳＭの状態を用いて動作確認を行なう。その際の確認は、図５のステップＳ１２と同様の方法で行なう。
【０１６５】
ステップＳ２００６では、不具合の動作確認を行ない、不具合が再現できれば処理を終了する。再現できなければ、ステップＳ２００７に遷移する。
【０１６６】
ステップＳ２００７では、ステップＳ２００３で抽出した他の分岐後のＦＳＭの状態に対して処理が終了したか判断し、終了していなければステップＳ２００４に遷移し、処理を継続する。
【０１６７】
次に、具体的なデータを用いて、本実施形態に係る縮小データの抽出について説明する。ここでは、図１６の範囲３０１が不具合の再現確認に必要となるＦＳＭの状態群として抽出されたものとして説明を行なう。
【０１６８】
範囲３０１に含まれるＦＳＭを先頭のＦＳＭから探索すると、ＦＳＭ３０３は複数の出力エッジＥ０６乃至Ｅ０８を有することがわかる（ステップＳ２００１）。
【０１６９】
複数の出力エッジを持つということは、条件分岐処理を持つということと等価であるので、ステップＳ２００３に遷移する（ステップＳ２００２）。
【０１７０】
また、分岐の先頭のＦＳＭ３０３の出力エッジはエッジＥ０６乃至Ｅ０８の３本である。一方、ＦＳＭ３０３の遷移先のＦＳＭを探索するとＦＳＭ３０７の入力エッジは、エッジＥ０３乃至Ｅ０５の３本であるので、ＦＳＭ３０７が分岐の終端に定まる。従って、ステップＳ２００３では、分岐の先頭のＦＳＭ３０３と分岐の終端のＦＳＭ３０７の間にあるＦＳＭ３０４と、ＦＳＭ３０５と、ＦＳＭ３０６が分岐後のＦＳＭとして抽出される。
【０１７１】
ステップＳ２００４では、ステップＳ２００３で抽出した分岐後のＦＳＭに対して、順にステップＳ２００４の処理を実行する。
【０１７２】
初めに、ＦＳＭ３０４について、ステップＳ２００４の処理を実行する。範囲３０１に含まれるＦＳＭ３０３乃至３０８から、ＦＳＭ３０４を除いたＦＳＭ３０３、ＦＳＭ３０５、ＦＳＭ３０６、ＦＳＭ３０７、ＦＳＭ３０８を抽出する。
【０１７３】
ステップＳ２００５では、このステップＳ２００４で抽出したＦＳＭの状態を用いて動作確認を行なう。
【０１７４】
不具合の再現確認が行なえれば、処理を終了する（ステップＳ２００６）。なお、ＦＳＭ３０４を除いた時点で不具合動作が再現したとしても、それ以外のＦＳＭ３０５又はＦＳＭ３０６を削除して、不具合の再現が確認できれば、より小さい縮小データの生成が可能になる。
【０１７５】
第２の実施形態において抽出したＦＳＭの状態において、条件分岐を含んでいる場合、分岐後のＦＳＭが条件分岐数の数と同数存在することになる。一部の分岐後のＦＳＭの状態が不具合を再現する動作に影響を与えなければ、分岐後のＦＳＭの状態の一部を除くことで、縮小データを、より小さくすることが可能になる。その結果、縮小データの秘匿性をさらに高めることが可能となる。
【０１７６】
なお、上記の特許文献等の各開示を、本書に引用をもって繰り込むものとする。本発明の全開示（請求の範囲を含む）の枠内において、さらにその基本的技術思想に基づいて、実施形態の変更・調整が可能である。また、本発明の請求の範囲の枠内において種々の開示要素の多様な組み合わせ、ないし選択が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であれば、なし得るであろう各種変形、修正を含むことは勿論である。例えば、設計支援装置の各部の処理は、コンピュータに半導体集積回路の設計支援プログラムを実行させることで実現されるようにしても良い。若しくは、ネットワーク上のサーバ上でプログラムを実行し、各クライアントからプログラムを呼び出す構成であっても良い。
【符号の説明】
【０１７７】
１、１ａ、１ｂ  半導体集積回路の設計支援装置
１０  表示部
２０  操作部
３０  記憶部
４０  ＦＳＭ変換部
５０  ＦＳＭデータ探索部
６０  縮小データ生成部
７０  制御部
１０１〜１０７  ＦＳＭ
２０１  配列
２０２  配列のエリア
３０１、３１０  ＦＳＭの状態群
３０２〜３０９  ＦＳＭ
Ｎ０１〜Ｎ０３  ノード
Ｐ０１〜Ｐ１３  ポインタ
Ｅ０１〜Ｅ０９  エッジ
【図１】
2012150624.tif 000003
【図２】
2012150624.tif 000004
【図３】
2012150624.tif 000005
【図４】
2012150624.tif 000006
【図５】
2012150624.tif 000007
【図６】
2012150624.tif 000008
【図７】
2012150624.tif 000009
【図８】
2012150624.tif 000010
【図９】
2012150624.tif 000011
【図１０】
2012150624.tif 000012
【図１１】
2012150624.tif 000013
【図１２】
2012150624.tif 000014
【図１３】
2012150624.tif 000015
【図１４】
2012150624.tif 000016
【図１５】
2012150624.tif 000017
【図１６】
2012150624.tif 000018
【図１７】
2012150624.tif 000019
【図１８】
2012150624.tif 000020
【図１９】
2012150624.tif 000021