(57)【要約】【課題】  本発明の課題は、論理設計のサインオフを支援することを目的とする。【解決手段】  上記課題は、半導体集積回路をハードウェア記述言語で論理設計したファイルを、回路毎の動作を記述したブロックで分割し、前記ファイルを分割して得た前記ブロック毎に、コミット回数に基づいて障害発生の可能性を示すエントロピーを算出し、前記ブロックに対する検証のカバレッジと、算出した前記エントロピーとに基づいて、該ブロックのサインオフ状態値を計算し、前記サインオフ状態値が、サインオフ閾値より大きい場合に、前記ブロックはサインオフ可能であると判定する処理をコンピュータに行わせるサインオフ支援プログラムにより達成される。【選択図】  図４
2017045393.tif 000002
【特許請求の範囲】
【請求項１】
半導体集積回路をハードウェア記述言語で論理設計したファイルを、回路毎の動作を記述したブロックで分割し、
前記ファイルを分割して得た前記ブロック毎に、コミット回数に基づいて障害発生の可能性を示すエントロピーを算出し、
前記ブロックに対する検証のカバレッジと、算出した前記エントロピーとに基づいて、該ブロックのサインオフ状態値を計算し、
前記サインオフ状態値が、サインオフ閾値より大きい場合に、前記ブロックはサインオフ可能であると判定する
処理をコンピュータに行わせるサインオフ支援プログラム。
【請求項２】
前記サインオフ状態値を計算する計算式は、カバレッジが高い程、また、エントロピーが低い程、値が高くなることを特徴とする請求項１記載のサインオフ支援プログラム。
【請求項３】
前記コンピュータは、
前記ブロックを出力及びクロック名で特定し、
サインオフ可否を判定する期間毎に、前記出力及びクロック名を用いて、前回期間と今回期間とにおいて前記ブロックを特定して該ブロックの記述を比較し、該比較によってコミット回数を取得する
ことを特徴とする請求項１又は２記載のサインオフ支援プログラム。
【請求項４】
半導体集積回路をハードウェア記述言語で論理設計したファイルを、回路毎の動作を記述したブロックで分割し、
前記ファイルを分割して得た前記ブロック毎に、コミット回数に基づいて障害発生の可能性を示すエントロピーを算出し、
前記ブロックに対する検証のカバレッジと、算出した前記エントロピーとに基づいて、該ブロックのサインオフ状態値を計算し、
前記サインオフ状態値が、サインオフ閾値より大きい場合に、前記ブロックはサインオフ可能であると判定する
処理をコンピュータが行うサインオフ支援方法。
【請求項５】
半導体集積回路をハードウェア記述言語で論理設計したファイルを、回路毎の動作を記述したブロックで分割し、分割して得た該ブロック毎に、コミット回数に基づいて障害発生の可能性を示すエントロピーを算出する算出部と、
前記ブロックに対する検証のカバレッジと、前記算出部が算出した前記エントロピーとに基づいて、該ブロックのサインオフ状態値を計算し、該サインオフ状態値がサインオフ閾値より大きい場合に、前記ブロックはサインオフ可能であると判定する判定部と
を有するサインオフ支援装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、サインオフ支援プログラム、サインオフ支援方法、及びサインオフ支援装置に関する。
【背景技術】
【０００２】
通常、半導体集積回路の論理設計後には、回路動作を記述したソースファイルに対して、論理設計の検証が行われる。検証項目がソースコードの全てを網羅したか否かを判定する。
【０００３】
回路記述における非活性箇所をカバレッジ対象外として機能シミュレーションを行ってカバレッジ結果を出力することで、カバレッジ結果に基づく検証工数を削減する技術等が知られている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１２−１５５４８２号公報
【特許文献２】特開平７−１０５０５１号公報
【特許文献３】特開２００６−１８４３４号公報
【非特許文献】
【０００５】
【非特許文献１】Ahmed E. Hassan, "Predicting faults using the complexity of code changes" In Proceedings of the 31st International Conference on Software Engineering (ICSE '09)
【発明の概要】
【発明が解決しようとする課題】
【０００６】
回路動作記述は、機能の変更等によりコードが変更される。コード変更後の検証工数は、変更による障害が出る可能性によって変わってくる。障害が出る可能性の判断は、開発者の知識や経験に基づいて行われている。また、検証後には、十分な検証がなされ品質を保証するサインオフの判断も開発者の知識や経験に基づいている。
【０００７】
半導体集積回路の規模が複雑化するにつれ、変更による影響の大きさ、サインオフの判断は、高度な知識を要するようになっている。
【０００８】
したがって、１つの側面では、本発明は、論理設計のサインオフを支援することを目的とする。
【課題を解決するための手段】
【０００９】
一態様によれば、半導体集積回路をハードウェア記述言語で論理設計したファイルを、回路毎の動作を記述したブロックで分割し、前記ファイルを分割して得た前記ブロック毎に、コミット回数に基づいて障害発生の可能性を示すエントロピーを算出し、前記ブロックに対する検証のカバレッジと、算出した前記エントロピーとに基づいて、該ブロックのサインオフ状態値を計算し、前記サインオフ状態値が、サインオフ閾値より大きい場合に、前記ブロックはサインオフ可能であると判定する処理をコンピュータに行わせるサインオフ支援プログラムが提供される。
【００１０】
また、上記課題を解決するための手段として、サインオフ支援方法、及びサインオフ支援装置とすることもできる。
【発明の効果】
【００１１】
論理設計のサインオフを支援することができる。
【図面の簡単な説明】
【００１２】
【図１】ファイル単位のエントロピーを説明するための図である。
【図２】ブロック単位のエントロピーを説明するための図である。
【図３】サインオフ支援装置のハードウェア構成を示す図である。
【図４】サインオフ支援装置の機能構成例を示す図である。
【図５】エントロピーとカバレッジの組み合せと、サインオフ可否との関係を説明するための図である。
【図６】ブロック特定部によって行われるブロック特定処理を説明するためのフローチャート図である。
【図７】エントロピー取得部によるエントロピー取得処理を説明するためのフローチャート図である。
【図８】作業テーブルのデータ例を示す図である。
【図９】ブロック単位の分割の一例を説明する図である。
【図１０】全一致の例を示す図である。
【図１１】全キー一致の例を示す図である。
【図１２】部分キー一致の例を示す図である。
【図１３】ブロック単位の分割の他の例を説明する図である。
【図１４】サインオフ判定部によるサインオフ判定処理を説明するためのフローチャート図である。
【図１５】サインオフ判定例を説明するための図である。
【発明を実施するための形態】
【００１３】
以下、本発明の実施の形態を図面に基づいて説明する。先ず、本実施例において使用される主な用語について説明する。
【００１４】
サインオフ：ＬＳＩ（Large Scale Integration）をテープアウト（設計完了）して良いかどうかを判断することである。
【００１５】
カバレッジ：論理設計のソースコードのシミュレーションによる活性化を示す数値である。ソースコードは、例えば、Verilog言語、ＶＨＤＬ言語（very-high-speed-integrated-circuits hardware description language）等のハードウェア記述言語である。一つの行が活性化されたら、カバーされたと言い、カバレッジは、ソースコード全体に対して検証によってカバーされた割合を示す。
【００１６】
エントロピー：非特許文献１で定義されているRepository Miningによって計るバグ等の障害がまだ残っている可能性を示す数値である。
【００１７】
リポジトリー：ソースコードを管理するシステムである。例えば、ＳＶＮ、ＣＶＳ、ＧＩＴリポジトリー等がある。
【００１８】
上述したサインオフは、カバレッジに基づいて行われる場合がある。ＬＳＩが大規模化する中で、カバレッジを１００％にするのは、検証のリソース不足によって不可能な場合がある。また、ＬＳＩのモジュール（又はブロック）の完成度によっては１００％をカバーしなくても良い場合がある。
【００１９】
本実施例では、上記を鑑み、カバレッジを補間するためにエントロピーと組み合わせることを提案する。即ち、カバレッジとエントロピーとを組み合わせることによって、１００％をカバーされなくても良いモジュールを特定する。これは、エントロピーによってバグが出る可能性の低いモジュールを判別できるためである。
【００２０】
しかしながら、非特許文献１によるエントロピーは行レベルではなくファイル単位で示すため、行又はソースコードのブロック（ｉｆ文等）に落とす必要がある。
【００２１】
非特許文献１は、ソフトウェアに適用する技術として記載されており、エントロピーをハードウェア記述言語で記載されたブロックレベルで示すことは容易ではないと考えられている。特に、diff等のファイルの変更による差分を比較する一般ツールの場合、行の順番の入れ替わりなど、ファイル内のどの部分が本当に変更されたのかを調べることが困難な場合がある。
【００２２】
本実施例では、diffの代わりにハードウェア記述言語のverilogのalways文やＶＨＤＬのprocess文に変更があったか否かを調べ、そのレベルでエントロピーを計算する。即ち、そのハードウェアのブロックの特徴を、更新される毎に追跡することで、そのレベルで変更があったかどうかを確認できる。本実施例において、ブロックとは、ハードウェア記述言語のverilogのalways文やＶＨＤＬのprocess文による回路動作記述部分に相当する。
【００２３】
ソースコードファイルのブロックレベルの障害予測とカバレッジとを組み合わせることによって、カバレッジホールに危険性のレベルをつける。つまり、そのブロックに障害がまだ存在している可能性がある場合、カバレッジは１００％に近いことが要求される。即ち、この場合は、検証が必要であると判断する。一方、障害が存在している可能性が低ければ、カバレッジの閾値をもっと低い値としてもよい。この場合は、検証を不要としてもよい。
【００２４】
まず、ファイル単位のエントロピーについて説明する。図１は、ファイル単位のエントロピーを説明するための図である。図１では、ファイルＡ、Ｂ、Ｃ、及びＤについて、期間１、期間２、及び期間３の各期間でのエントロピーを例示している。丸印が変更があった時期を示している。期間は、例えば、サインオフ可否を判定するタイミングで区切られる。
【００２５】
ファイル単位のエントロピーＨ（Ｃ）は、非特許文献１を参照することにより、
【００２６】
【数１】
2017045393.tif 000003
のように示される。
【００２７】
ここで、ファイルＡ、Ｂ、Ｃ、及びＤをブロックＡ、Ｂ、Ｃ、及びＤに置き換えた場合について考察する。図２は、ブロック単位のエントロピーを説明するための図である。図２では、ブロックＡ、Ｂ、Ｃ、及びＤについて、期間１、期間２、及び期間３の各期間でのエントロピーを例示している。丸印が変更があった時期を示している。
【００２８】
ブロック単位のエントロピーＨ（Ｃ）は、数１に基づいて、
【００２９】
【数２】
2017045393.tif 000004
のように示される。即ち、数１の「ファイル」を数２の「ブロック」に置き換えるのみでよいことが分かる。従って、ハードウェア記述言語による回路動作記述において、ブロックを一意に特定できれば、エントロピーＨ（Ｃ）の計算式の適用は容易となる。
【００３０】
発明者等は、ハードウェア記述言語であるverilogのalways文又はＶＨＤＬのprocessは、出力とクロック名によって一意に特定可能であることに着目し、ハードウェア記述言語であるverilogのalways文又はＶＨＤＬのprocessを、出力とクロック名とで定義されたブロックであると見なすことで、回路動作を記述したソースコードファイル内のブロックに対してエントロピーＨ（Ｃ）の計算式を適用できることを発見した。
【００３１】
本実施例におけるサインオフ支援装置１００は、図３に示すようなハードウェア構成を有する。図３は、サインオフ支援装置のハードウェア構成を示す図である。図３において、サインオフ支援装置１００は、コンピュータによって制御される情報処理装置であって、ＣＰＵ（Central Processing Unit）１１と、主記憶装置１２と、補助記憶装置１３と、入力装置１４と、表示装置１５と、通信Ｉ／Ｆ（インターフェース）１７と、ドライブ装置１８とを有し、バスＢに接続される。
【００３２】
ＣＰＵ１１は、主記憶装置１２に格納されたプログラムに従ってサインオフ支援装置１００を制御するプロセッサに相当する。主記憶装置１２には、ＲＡＭ（Random Access Memory）、ＲＯＭ（Read Only Memory）等が用いられ、ＣＰＵ１１にて実行されるプログラム、ＣＰＵ１１での処理に必要なデータ、ＣＰＵ１１での処理にて得られたデータ等を記憶又は一時保存する。
【００３３】
補助記憶装置１３には、ＨＤＤ（Hard Disk Drive）等が用いられ、各種処理を実行するためのプログラム等のデータを格納する。補助記憶装置１３に格納されているプログラムの一部が主記憶装置１２にロードされ、ＣＰＵ１１に実行されることによって、各種処理が実現される。主記憶装置１２及び／又は補助記憶装置１３が、記憶部１３０に相当する。
【００３４】
入力装置１４は、マウス、キーボード等を有し、ＬＳＩの開発者等のユーザがサインオフ支援装置１００による処理に必要な各種情報を入力するために用いられる。表示装置１５は、ＣＰＵ１１の制御のもとに必要な各種情報を表示する。通信Ｉ／Ｆ１７は、有線又は無線などのネットワークを通じて通信を行う。通信Ｉ／Ｆ１７による通信は無線又は有線に限定されるものではない。 
サインオフ支援装置１００によって行われる処理を実現するプログラムは、例えば、ＣＤ−ＲＯＭ（Compact Disc Read-Only Memory）等の記憶媒体１９によってサインオフ支援装置１００に提供される。
【００３５】
ドライブ装置１８は、ドライブ装置１８にセットされた記憶媒体１９（例えば、ＣＤ−ＲＯＭ等）とサインオフ支援装置１００とのインターフェースを行う。
【００３６】
また、記憶媒体１９に、後述される本実施の形態に係る種々の処理を実現するプログラムを格納し、この記憶媒体１９に格納されたプログラムは、ドライブ装置１８を介してサインオフ支援装置１００にインストールされる。インストールされたプログラムは、サインオフ支援装置１００により実行可能となる。
【００３７】
尚、プログラムを格納する記憶媒体１９はＣＤ−ＲＯＭに限定されず、コンピュータが読み取り可能な、構造（structure）を有する１つ以上の非一時的（non-transitory）な、有形（tangible）な媒体であればよい。コンピュータ読取可能な記憶媒体として、ＣＤ−ＲＯＭの他に、ＤＶＤディスク、ＵＳＢメモリ等の可搬型記録媒体、フラッシュメモリ等の半導体メモリであっても良い。
【００３８】
図４は、サインオフ支援装置の機能構成例を示す図である。図４において、サインオフ支援装置１００は、サインオフ支援処理部４０を有し、記憶部１３０は、コミットファイル５２を含むリポジトリ５０、ブロック特定テーブル５３、カバレッジＤＢ５４、サインオフ閾値５５、判定結果テーブル５９等を記憶する。
【００３９】
サインオフ支援処理部４０は、ＣＰＵ１１が対応するプログラムを実行することで実現する処理部である。サインオフ支援処理部４０は、ブロックレベルの障害予測とカバレッジと組み合わせて、ブロック毎にサインオフを支援する本実施例に係る処理部であり、主に、ブロック特定部４１と、サインオフレベル取得部４３とを有する。
【００４０】
ブロック特定部４１は、リポジトリ５０からオリジナルのソースコードファイル５１を読み込んで、ブロックを特定してブロック特定テーブル５３に記録する。本実施例では、verilogのalways文をブロックの例として説明するが、これに限定されない。
【００４１】
サインオフレベル取得部４３は、オリジナルのソースコードファイル５１と、コミットファイル５２とをブロックに分割して比較することで、ブロック毎にサインオフの可否を判定し、判定結果テーブル５９を出力する。サインオフレベル取得部４３は、更に、エントロピー取得部４５と、サインオフ判定部４７とを有する。
【００４２】
エントロピー取得部４５は、上述した数２を用いて、ブロック毎のエントロピーを計算する。サインオフ判定部４７は、ブロック毎のエントロピーと、カバレッジＤＢ５４から得られるブロック毎のカバレッジとを用いてサインオフ状態値を計算し、計算したサインオフ状態値と、与えられたサインオフ閾値５５との比較結果に基づいて、サインオフの可否を判定する。サインオフ状態値は、
【００４３】
【数３】
2017045393.tif 000005
で表される。サインオフ閾値５５は、ユーザによって設定された値である。
【００４４】
リポジトリ５０は、ＬＳＩの設計に係る全ソースコードファイル５１を記憶したデータベース等である。リポジトリ５０に保持されるソースコードファイル５１のうち、開発者等のユーザによって変更されたファイルが、コミットファイル５２である。また、リポジトリ５０は、オリジナルのソースコードファイル５１も記憶している。
【００４５】
ブロック特定テーブル５３は、ブロック特定部４１によって作成され、ファイル毎に、各コミットファイル５２を分割後のブロックを管理するテーブルであり、ファイル名、ブロック特定キー等の項目を有する。ファイル名は、ソースコードファイル５１又はコミットファイル５２のファイル名を示す。
【００４６】
verilogのalways文又はＶＨＤＬのprocessの回路動作記述部分には名称が存在しないが、出力、クロック名の組み合せによって、どの回路動作記述部分かを特定することが可能である。ブロック特定キーは、回路動作記述部分に記載される出力、クロック名の組み合せを示す。
【００４７】
カバレッジＤＢ５４は、ブロック毎の検証後のカバレッジを示すデータベースである。サインオフ閾値５５は、開発者等のユーザによって予め設定された値である。ブロック毎のサインオフ状態値が、サインオフ閾値５５より大きい場合に、サインオフが可能（ＯＫ）と判定し検証を不要となる。一方、サインオフ状態値が、サインオフ閾値５５より小さい場合に、サインオフは不可（ＮＧ）と判定し検証を要する。
【００４８】
判定結果テーブル５９は、サインオフレベル取得部４３によって出力される、ブロック毎にサインオフ可否の判定結果を示したテーブルであり、タイムフレーム、ファイル名、ブロック特定キー、コミット回数、エントロピー、カバレッジ、サインオフ判定結果等の項目を有する。
【００４９】
図５は、エントロピーとカバレッジの組み合せと、サインオフ可否との関係を説明するための図である。図５において、エントロピーの値とカバレッジの値との組み合わせに対する、サインオフ可否をマトリックスで示す。
【００５０】
エントロピーが低い、つまり、障害が出るリスクが低く、かつ、カバレッジが高い、つまり、既に十分に検証済みである場合に、サインオフ可能（ＯＫ）となる。
【００５１】
逆に、エントロピーが高い、つまり、障害が出るリスクが高く、かつ、カバレッジが低い、つまり、検証が十分でない場合に、サインオフ不可（ＮＧ）となる。
【００５２】
サインオフ閾値５５、カバレッジの重みcov_weight、及びエントロピーの重みentro_weightに応じて、サインオフ可能（ＯＫ）又はサインオフ不可（ＮＧ）となる、値の範囲は変化するため、上述以外の組み合せの場合、即ち、エントロピーが高く、かつ、カバレッジが高い場合と、エントロピーが低く、かつ、カバレッジが低い場合では、ＯＫ又はＮＧの値をとる。
【００５３】
図６は、ブロック特定部によって行われるブロック特定処理を説明するためのフローチャート図である。図６において、ブロック特定部４１は、リポジトリ５０からソースコードファイル５１を読み込む（ステップＳ６１）。
【００５４】
ブロック特定部４１は、ソースコードファイル５１を解析して、ブロックを検索して（ステップＳ６２）、検索したブロックから出力及びクロック名をブロック特定キーとして取得する（ステップＳ６３）。
【００５５】
ブロック特定部４１は、ファイル名と、取得したブロック特定キーとを、記憶部１３０内のブロック特定テーブル５３に設定して（ステップＳ６４）、ステップＳ６１で読み込んだソースコードファイル５１に未解析の行があるか否かを判断する（ステップＳ６５）。未解析の行がある場合（ステップＳ６５のＹＥＳ）、ブロック特定部４１は、ステップＳ６２へと戻り、上述同様の処理を繰り返す。
【００５６】
一方、未解析の行がない場合（ステップＳ６５のＮＯ）、ブロック特定部４１は、更に、未解析のソースコードファイル５１があるか否かを判断する（ステップＳ６６）。未解析のソースコードファイル５１がある場合（ステップＳ６６のＹＥＳ）、ブロック特定部４１は、ステップＳ６１へと戻り、上述同様の処理を繰り返す。一方、未解析のソースコードファイル５１がない場合（ステップＳ６６のＮＯ）、ブロック特定部４１は、このブロック特定処理を終了する。
【００５７】
ブロック特定テーブル５３には、解析したソースコードファイル５１のファイル名「ファイルＡ」、「ファイルＢ」等が一覧され、ファイル名毎に、検索されたブロック（回路動作記述部分でありモジュールに相当する）を特定する出力とクロック名の組み合せが対応付けられる。一例として、ファイル名「ファイルＡ」には、Ｃｌｋ１、Ａ、及びＢで特定されるブロック、Ｃｌｋ１、Ｃ、及びＤで特定されるブロック等が対応付けられている。
【００５８】
次に、サインオフレベル取得部４１における処理について説明する。エントロピー取得部４５によるエントロピー取得処理、及び、サインオフ判定部４７によるサインオフ判定処理の夫々について説明する。
【００５９】
図７は、エントロピー取得部によるエントロピー取得処理を説明するためのフローチャート図である。図７において、エントロピー取得部４５は、オリジナルのソースコードファイル５１を回路動作記述文単位で分割する（ステップＳ７１）。
【００６０】
以下に説明するステップＳ７２〜Ｓ８０は、タイムフレーム毎に繰り返し行われる。エントロピー取得部４５は、コミットファイル５２をブロック単位で分割して（ステップＳ７２）、オリジナルのソースコードファイル５１と変更後のソースコードファイル５１とにおいて、分割ファイルの一致を確認する（ステップＳ７３）。
【００６１】
エントロピー取得部４５は、一致した分割ファイルが存在したか否かを判断する（ステップＳ７４）、一致した場合（ステップＳ７４のＹＥＳ）、即ち、分割ファイルに変更が無かった場合、エントロピー取得部４５は、ステップＳ７８へと進む。一方、一致しなかった場合（ステップＳ７４のＮＯ）、即ち、コードに何らかの変更があった場合、エントロピー取得部４５は、出力とクロック名との一致を確認する（ステップＳ７５）。
【００６２】
エントロピー取得部４５は、出力とクロック名とが一致したか否かを判断する（ステップＳ７６）。出力とクロック名とが一致した場合（ステップＳ７６のＹＥＳ）、エントロピー取得部４５は、ステップＳ７８へと進む。
【００６３】
一方、一致しなかった場合（ステップＳ７６のＮＯ）、エントロピー取得部４５は、追加又は削除された出力を検索する（ステップＳ７７）。
【００６４】
ステップＳ７４のＹＥＳ、ステップＳ７６のＹＥＳ、又はステップＳ７７の後、エントロピー取得部４５は、現在のタイムフレームにおけるブロック特定キー及び／又はコミット回数を更新する（ステップＳ７８）。ステップＳ７４のＹＥＳの場合には、ブロック特定キーは前回と同様のブロック特定キーが設定され、コミット回数は０に設定される。ステップＳ７６のＹＥＳの場合には、ブロック特定キーには前回と同様のブロック特定キーが設定され、コミット回数にはブロック特定キー以外の変更回数が設定される。ステップＳ７７の後の場合、ブロック特定キーには変更後のブロック特定キーが設定され、コミット回数にはブロック特定キーの変更を含めて変更の合計回数が設定される。
【００６５】
作業テーブル５８（図８）の現在のタイムフレームを示すレコードのうち、ソースコードファイル５１のファイル名と、出力及びクロック名とに基づいて、分割ファイルのレコードのブロック特定キー及び／又はコミット回数が更新される。
【００６６】
エントロピー取得部４５は、リポジトリ５０に未解析のソースコードファイル５１があるか否かを判断する（ステップＳ７９）。未解析のソースコードファイル５１がある場合（ステップＳ７９のＹＥＳ）、エントロピー取得部４５は、ステップＳ７２へと進み、上述同様の処理を繰り返す。一方、未解析のソースコードファイル５１がない場合（ステップＳ７９のＮＯ）、エントロピー取得部４５は、作業テーブル５８を参照して、数２を用いて、ブロック毎にエントロピーを計算して（ステップＳ８０）、このエントロピー取得処理を終了する。
【００６７】
図８は、作業テーブルのデータ例を示す図である。図８（Ａ）の作業テーブル５８では、タイムフレームＴＦ０に相当する図７のステップＳ７１と、タイムフレームＴＦ１に対するステップＳ７２が行われた結果を示している。
【００６８】
タイムフレームＴＦ０は、オリジナルのソースコードファイル５１に係る情報であるため、コミット回数は、全て「０」に設定されている。タイムフレームＴＦ１において、ファイルＡに関して、（Ｃｌｋ１、Ａ、Ｂ）のブロックと、（Ｃｌｋ１、Ｃ、Ｄ）のブロックとに分割したことを示している。
【００６９】
図８（Ｂ）の作業テーブル５８では、ステップＳ７８によって、タイムフレームＴＦ１に関して、ファイルＡに対して、ブロック特定キーとコミット回数とが更新され、エントロピーの計算結果が設定された状態を示している。
【００７０】
ファイルＡの（Ｃｌｋ１、Ａ、Ｂ）のブロックのコミット回数は「１」であり、エントロピーは「０．７」である。ファイルＡの（Ｃｌｋ１、Ｃ、Ｄ）は、（Ｃｌｋ１、Ｃ、Ｄ、Ｅ）に更新され、そのブロックのコミット回数は「４」であり、エントロピーは「１．３」であることを示している。
【００７１】
図９は、ブロック単位の分割の一例を説明する図である。図９では、オリジナルのファイルＡの分割例を、verilogの記述で示している。オリジナルのファイルＡは、alwaysの開始からalwaysの終了までの回路動作記述部分の単位毎に分割される。
【００７２】
分割ファイル３０１ａは、ブロック特定キーが（Ｃｌｋ１、Ａ、Ｂ）のalwaysのブロックのファイルとなる。分割ファイル３０１ｂは、ブロック特定キーが（Ｃｌｋ１、Ｃ、Ｄ）のalwaysのブロックのファイルとなる。
【００７３】
前回のタイムフレームと、今回のタイムフレームでの比較において、分割ファイル３０１ａが一致した場合（ステップＳ７３及びステップＳ７４のＹＥＳ）、即ち、コードに全く変更がなかった全一致について説明する。
【００７４】
図１０は、全一致の例を示す図である。図１０（Ａ）では、前回のタイムフレームにおける分割ファイル３０１ａを示し、図１０（Ｂ）では、今回のタイムフレームにおける分割ファイル３０１ａを示している。
【００７５】
図１０（Ａ）の分割ファイル３０１ａと、図１０（Ｂ）の分割ファイル３０１ａとに差異がなかった場合を示している。ブロック特定キー（Ｃｌｋ１、Ａ、Ｂ）を含めてコードに変更がなかった場合に、全一致であると言う。図７のステップＳ７４の（ＹＥＳ）の場合に相当する。
【００７６】
図１１は、全キー一致の例を示す図である。図１１（Ａ）では、前回のタイムフレームにおける分割ファイル３０１ｂを示し、図１１（Ｂ）では、今回のタイムフレームにおける分割ファイル３０１ｂを示している。
【００７７】
図１１（Ａ）の分割ファイル３０１ｂと、図１１（Ｂ）の分割ファイル３０１ｂとを比較した場合に、ブロック特定キー（Ｃｌｋ１、Ｃ、Ｄ）に差異はないが、ブロック特定キー（Ｃｌｋ１、Ｃ、Ｄ）以外で変更箇所を検出した場合に、全キー一致であると言う。図７のステップＳ７６のＹＥＳの場合に相当する。
【００７８】
全キー一致では、ブロック特定キー以外に変更がある。この例では、図１１（Ａ）のファイル３０１ｂのコード「C <= X or Y」が、図１１（Ｂ）のファイル３０１ｂのコード「C <= X or Y or Z」に変更されている。この変更が、作業テーブル５８（図８（Ｂ））のコミット回数「１」に相当する。
【００７９】
図１２は、部分キー一致の例を示す図である。図１２（Ａ）では、前回のタイムフレームにおける分割ファイル３０１ｂを示し、図１２（Ｂ）では、今回のタイムフレームにおける分割ファイル３０１ｂを示している。
【００８０】
図１２（Ａ）の分割ファイル３０１ｂと、図１２（Ｂ）の分割ファイル３０１ｂとを比較した場合に、ブロック特定キー（Ｃｌｋ１、Ｃ、Ｄ）が、ブロック特定キー（Ｃｌｋ１、Ｃ、Ｄ、Ｅ）へと変更されている。前回のブロック特定キー（Ｃｌｋ１、Ｃ、Ｄ）に出力Ｅが追加されている。前回のブロック特定キーからキーが追加又は削除された場合に、部分キー一致であると言う。図７のステップＳ７６の（ＮＯ）の場合に相当する。
【００８１】
部分キー一致では、ブロック特定キーにキー追加による変更がある。また、キーが追加されれば、回路動作に変更がある。この例では、図１１（Ｂ）のファイル３０１ｂにおいて、少なくとも出力Ｅに関してコード「E <= 1'b0;」、コード「E <= ・・・」等の変更があったことを示している。このような変更を含めて、コミット回数「４」が、作業テーブル５８（図８（Ｂ））で示される。
【００８２】
図１３は、ブロック単位の分割の他の例を説明する図である。図１３では、図９のverilogの記述に相当するＶＨＤＬの記述例を示している。ＶＨＤＬの場合、オリジナルのファイルＡは、processの開始からprocessの終了まで（回路動作記述部分）の単位毎に分割される。
【００８３】
分割ファイル３０２ａは、ブロック特定キーが（Ｃｌｋ１、Ａ、Ｂ）のprocessのブロックのファイルとなる。分割ファイル３０２ｂは、ブロック特定キーが（Ｃｌｋ１、Ｃ、Ｄ）のprocessのブロックのファイルとなる。
【００８４】
ＶＨＤＬの記述であっても、verilogの記述の場合と同様にソースコードファイル５１を分割することができる。
【００８５】
図１４は、サインオフ判定部によるサインオフ判定処理を説明するためのフローチャート図である。図１４において、サインオフ判定部４７は、作業テーブル５８から現在のタイムフレームのレコードを読み込み（ステップＳ９１）、全ブロックの中で最大のエントロピーを取得する（ステップＳ９２）。
【００８６】
サインオフ判定部４７は、読み込んだレコードからブロックを１つ選択して、数３によりサインオフ状態値を算出する（ステップＳ９３）。サインオフ判定部４７は、選択したブロックのカバレッジをカバレッジＤＢ５４から取得して、数３を計算することによりサインオフ状態値を得る。サインオフ判定部４７は、サインオフ状態値がサインオフ閾値５５より大きいか否かを判断する（ステップＳ９４）。
【００８７】
サインオフ状態値がサインオフ閾値５５以下である場合（ステップＳ９４のＮＯ）、サインオフ判定部４７は、選択したブロックのレコードのサインオフ判定結果にＮＧを設定し（ステップＳ９５）、全ブロックを処理したか否かを判断する（ステップＳ９７）。全ブロックを処理していない場合（ステップＳ９７のＮＯ）、サインオフ判定部４７は、ステップＳ９３へと戻り、上述同様の処理を繰り返す。一方、全ブロックを処理した場合（ステップＳ９７のＹＥＳ）、サインオフ判定部４７は、このサインオフ判定処理を終了する。
【００８８】
サインオフ状態値がサインオフ閾値５５より大きい場合（ステップＳ９４のＹＥＳ）、サインオフ判定部４７は、選択したブロックのレコードのサインオフ判定結果にＯＫを設定し（ステップＳ９６）、全ブロックを処理したか否かを判断する（ステップＳ９７）。全ブロックを処理していない場合、ステップＳ９３へと戻り、上述同様の処理を繰り返す。一方、全ブロックを処理した場合（ステップＳ９７のＹＥＳ）、サインオフ判定部４７は、このサインオフ判定処理を終了する。
【００８９】
図１５は、サインオフ判定例を説明するための図である。図１５では、作業テーブル５８に基づいて得られた、タイムフレームＴＦ１のときのサインオフ判定結果と、タイムフレームＴＦ２のときのサインオフ判定結果とから、サインオフ可否の推移を示している。
【００９０】
一例として、サインオフ閾値を５０％、最大エントロピーを２、カバレッジ及びエントロピー共に重みを１とする。
【００９１】
タイムフレームＴＦ１において、ファイルＡに関して、ブロック特定キー（Ｃｌｋ１、Ａ、Ｂ）のブロックに対するサインオフ可否の判定は、数３に基づいて、
８５％×１×（１−（０．７／２）×１）  ＝  ５５．２５
を得る。しがって、サインオフ閾値「５０％」より大きいため、サインオフ判定結果には「ＯＫ」が設定される。
【００９２】
タイムフレームＴＦ１において、ファイルＡに関して、ブロック特定キー（Ｃｌｋ１、Ｃ、Ｄ、Ｅ）のブロックに対するサインオフ可否の判定は、数３に基づいて、
９５％×１×（１−（１．３／２）×１）  ＝  ３３．２５
を得る。しがって、サインオフ閾値「５０％」以下であるため、サインオフ判定結果には「ＮＧ」が設定される。
【００９３】
このように、カバレッジが９５％と高くても、コミット回数等により障害の可能性が高い場合には、エントロピーの値の高さが影響して、サインオフにできないことが示される。
【００９４】
次の期間のタイムフレームＴＦ２において、ファイルＡに関して、タイムフレームＴＦ１でサインオフ判定結果がＮＧであった、ブロック特定キー（Ｃｌｋ１、Ｃ、Ｄ、Ｅ）のブロックは、このＴＦ２の期間においてサインオフ判定結果は「ＯＫ」になったことを示している。
【００９５】
上述したように、本実施例では、エントロピーとカバレッジとを組み合わせることで、精度良くサインオフ可否の判定を行えるため、検証対象となるブロックを精度良く抽出できる。従って、ブロックを検証するための検証工数の無駄を省き、開発者は、効率的に検証作業を行える。即ち、コスト削減を行える。
【００９６】
また、障害の可能性を十分に検証せずに、サインオフとしてしまうことがないため、論理設計の品質を保障できる。
【００９７】
本発明は、具体的に開示された実施例に限定されるものではなく、特許請求の範囲から逸脱することなく、主々の変形や変更が可能である。
【００９８】
以上の実施例を含む実施形態に関し、更に以下の付記を開示する。
（付記１）
半導体集積回路をハードウェア記述言語で論理設計したファイルを、回路毎の動作を記述したブロックで分割し、
前記ファイルを分割して得た前記ブロック毎に、コミット回数に基づいて障害発生の可能性を示すエントロピーを算出し、
前記ブロックに対する検証のカバレッジと、算出した前記エントロピーとに基づいて、該ブロックのサインオフ状態値を計算し、
前記サインオフ状態値が、サインオフ閾値より大きい場合に、前記ブロックはサインオフ可能であると判定する
処理をコンピュータに行わせるサインオフ支援プログラム。
（付記２）
前記サインオフ状態値を計算する計算式は、カバレッジが高い程、また、エントロピーが低い程、値が高くなることを特徴とする付記１記載のサインオフ支援プログラム。
（付記３）
前記コンピュータは、
前記ブロックを出力及びクロック名で特定し、
サインオフ可否を判定する期間毎に、前記出力及びクロック名を用いて、前回期間と今回期間とにおいて前記ブロックを特定して該ブロックの記述を比較し、該比較によってコミット回数を取得する
ことを特徴とする付記１又は２記載のサインオフ支援プログラム。
（付記４）
前記コンピュータは、
前記ファイルから前記回路の動作を記述する特定の記述文を抽出することで、該ファイルを前記ブロックで分割する
ことを特徴とする付記１乃至３のいずれか１項記載のサインオフ支援プログラム。
（付記５）
前記特定の記述文は、前記ファイルがverilogで記述されている場合、always文であり、該ファイルがＶＨＤＬで記述されている場合、process文である
ことを特徴とする付記４項記載のサインオフ支援プログラム。
（付記６）
半導体集積回路をハードウェア記述言語で論理設計したファイルを、回路毎の動作を記述したブロックで分割し、
前記ファイルを分割して得た前記ブロック毎に、コミット回数に基づいて障害発生の可能性を示すエントロピーを算出し、
前記ブロックに対する検証のカバレッジと、算出した前記エントロピーとに基づいて、該ブロックのサインオフ状態値を計算し、
前記サインオフ状態値が、サインオフ閾値より大きい場合に、前記ブロックはサインオフ可能であると判定する
処理をコンピュータが行うサインオフ支援方法。
（付記７）
半導体集積回路をハードウェア記述言語で論理設計したファイルを、回路毎の動作を記述したブロックで分割し、分割して得た該ブロック毎に、コミット回数に基づいて障害発生の可能性を示すエントロピーを算出する算出部と、
前記ブロックに対する検証のカバレッジと、前記算出部が算出した前記エントロピーとに基づいて、該ブロックのサインオフ状態値を計算し、該サインオフ状態値がサインオフ閾値より大きい場合に、前記ブロックはサインオフ可能であると判定する判定部と
を有するサインオフ支援装置。
【符号の説明】
【００９９】
１１          ＣＰＵ
１２          主記憶装置
１３          補助記憶装置
１４          入力装置
１５          表示装置
１７          通信Ｉ／Ｆ
１８          ドライブ装置
４０          サインオフ支援処理部
４１          ブロック特定部
４３          サインオフレベル取得部
４５          エントロピー取得部
４７          サインオフ判定部
５０          リポジトリ
５１          ソースコードファイル
５２          コミットファイル
５３          ブロック特定テーブル
５４          カバレッジＤＢ
５５          サインオフ閾値
５８          作業テーブル
５９          判定結果テーブル
６０          マトリクス
１００        サインオフ支援装置
Ｂ            バス
【図１】
2017045393.tif 000006
【図２】
2017045393.tif 000007
【図３】
2017045393.tif 000008
【図４】
2017045393.tif 000009
【図５】
2017045393.tif 000010
【図６】
2017045393.tif 000011
【図７】
2017045393.tif 000012
【図８】
2017045393.tif 000013
【図９】
2017045393.tif 000014
【図１０】
2017045393.tif 000015
【図１１】
2017045393.tif 000016
【図１２】
2017045393.tif 000017
【図１３】
2017045393.tif 000018
【図１４】
2017045393.tif 000019
【図１５】
2017045393.tif 000020