(57)【要約】【課題】  本発明の課題は、回路設計において、回路動作の複雑度を精度良く評価することを目的とする。【解決手段】  上記課題は、コンピュータを用いてハードウェア回路の複雑度を評価する方法であって、前記コンピュータが有するプロセッサが、前記コンピュータが有するメモリに格納されたハードウェア記述言語により回路を設計したソースファイルから組み合せ回路記述文の代入型を抽出し、抽出した前記代入型毎に、前記組み合せ回路記述文に関連する要素の第１の複雑度を取得し、前記関連に基づいて、前記第１の複雑度を用いて、前記代入型毎の第２の複雑度を取得する処理をコンピュータが行うことを特徴とするハードウェア回路の複雑度評価方法により達成される。【選択図】  図４
2016081287.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータを用いてハードウェア回路の複雑度を評価する方法であって、
前記コンピュータが有するプロセッサが、
前記コンピュータが有するメモリに格納されたハードウェア記述言語により回路を設計したソースファイルから、組み合せ回路記述文の代入型を抽出し、
抽出した前記代入型毎に、前記組み合せ回路記述文に関連する要素の第１の複雑度を取得し、
前記関連に基づいて、前記第１の複雑度を用いて、前記代入型毎の第２の複雑度を取得する
ハードウェア回路の複雑度評価方法。
【請求項２】
前記要素は、演算記述、条件記述、配線、信号、及びレジスタの少なくとも１以上を含み、
前記プロセッサは、各代入型の前記組み合せ回路記述文に包含される各要素の前記第１の複雑度を合計する
ことを特徴とする請求項１記載のハードウェア回路の複雑度評価方法。
【請求項３】
前記プロセッサは、前記演算記述に所定の複雑度を与えることを特徴とする請求項２記載のハードウェア回路の複雑度評価方法。
【請求項４】
前記プロセッサは、
前記ソースファイルにおいて入力端子として定義されている前記要素に対して、所定の複雑度を与えることを特徴とする請求項２又は３記載のハードウェア回路の複雑度評価方法。
【請求項５】
ハードウェア記述言語により回路を設計したソースファイルから組み合せ回路記述文の代入型を抽出し、
抽出した前記代入型毎に、前記組み合せ回路記述文に関連する要素の第１の複雑度を取得し、
前記関連に基づいて、前記第１の複雑度を用いて、前記代入型毎の第２の複雑度を取得する
処理をコンピュータに行わせることを特徴とするハードウェア回路の複雑度評価プログラム。
【請求項６】
ハードウェア記述言語により回路を設計したソースファイルから組み合せ回路記述文の代入型を抽出して複雑度テーブルを構築するテーブル構築部と、
前記複雑度テーブルに記憶された前記代入型毎に、前記組み合せ回路記述文に関連する要素の第１の複雑度を取得し、前記関連に基づいて、前記第１の複雑度を用いて、前記代入型毎の第２の複雑度を取得する解析部と、
を有することを特徴とする回路設計装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ハードウェア回路の複雑度を評価する技術に関する。
【背景技術】
【０００２】
大規模集積回路の設計において、デジタル回路は、Ｖｅｒｉｌｏｇ、ＶＨＤＬ(VHSIC(Very High Speed Integrated Circuit) Hardware Description Language)等のハードウェア記述言語を用いて設計される。このようなハードウェア記述言語を用いたデジタル回路の設計の品質を測定する手法（ハードウェアメトリックス）は、ソフトウェアの開発に比べて少ない。
【０００３】
デジタル回路等のハードウェアを設計したハードウェア記述に基づいて、設計の複雑度を評価することが考えられる。複雑度は、リテラル数や論理段数などを指標に用いた複雑度を用いること、元のＲＴＬ(Register Transfer Level)記述の論理の複雑度と合成結果のゲート数とに相関があるため、複雑度がゲート数に比例すると考えられること等が提案されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平１０−２１２９１号公報
【特許文献２】特開２００９−２７１６６７号公報
【特許文献３】特開平５−１８９５１０号公報
【特許文献４】特開２００２−３６８１０４号公報
【特許文献５】特開２００１−３３８００８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上述した技術では、モジュール毎の大まかな複雑度を示すのみであり、モジュールを開発した記述においてどの部分の複雑度が高いかを精度良く評価することができない。大規模集積回路では、モジュール内の動作が複雑化するなかで、設計段階において品質を評価することは重要である。
【０００６】
したがって、１つの側面では、本発明は、回路設計において、回路動作の複雑度を精度良く評価することを目的とする。
【課題を解決するための手段】
【０００７】
一態様によれば、コンピュータを用いてハードウェア回路の複雑度を評価する方法であって、前記コンピュータが有するプロセッサが、前記コンピュータが有するメモリに格納されたハードウェア記述言語により回路を設計したソースファイルから組み合せ回路記述文の代入型を抽出し、抽出した前記代入型毎に、前記組み合せ回路記述文に関連する要素の第１の複雑度を取得し、前記関連に基づいて、前記第１の複雑度を用いて、前記代入型毎の第２の複雑度を取得する処理をコンピュータが行うことを特徴とするハードウェア回路の複雑度評価方法が提供される。
【０００８】
また、上記課題を解決するための手段として、ハードウェア回路の複雑度評価プログラム、及び、回路設計装置とすることもできる。
【発明の効果】
【０００９】
回路設計において、回路動作の複雑度を精度良く評価することができる。
【図面の簡単な説明】
【００１０】
【図１】組み合せ回路の例を示す図である。
【図２】図１の組み合せ回路のＶｅｒｉｌｏｇ記述例を示す図である。
【図３】回路設計装置のハードウェア構成を示す図である。
【図４】回路設計装置の機能構成例を示す図である。
【図５】複雑度テーブル生成処理について説明するためのフローチャート図である。
【図６】複雑度算出処理を説明するためのフローチャートである。
【図７】図６のステップＳ４４での処理を説明するためのフローチャート図である。
【図８】フィードバック検出処理の例を示す図である。
【図９】複雑度の算出方法を説明するための図である。
【図１０】ｓｔａｔｅ文を含む場合の複雑度の算出方法を説明するための図である。
【図１１】Verilog記述例を示す図である。
【図１２】図１１のVerilog記述で表現される、Ａをドライブする回路構成を示す図である。
【図１３】図１１のVerilog記述で表現される、Ｂをドライブする回路構成を示す図である。
【図１４】図１１のVerilog記述で表現される、Ｘをドライブする回路構成を示す図である。
【図１５】図１１のVerilog記述に基づく複雑度の算出例を説明するための図（その１）である。
【図１６】図１１のVerilog記述に基づく複雑度の算出例を説明するための図（その２）である。
【図１７】図１１のVerilog記述に基づく複雑度の算出例を説明するための図（その３）である。
【図１８】図１１のVerilog記述に基づく複雑度の算出方法を説明するための図である。
【図１９】図１８の回路構成における複雑度の算出例を説明するための図である。
【発明を実施するための形態】
【００１１】
以下、本発明の実施の形態を図面に基づいて説明する。大規模集積回路の設計において、設計者が設計した回路のハードウェア記述の品質を検証する際、最も複雑な部分に集中して検証することが効率的である。
【００１２】
通常、設計者は、ハードウェア記述内の"always"文、"assign"文、及び"if"文の条件（condition）の組み合せ回路記述を重要部分として認識している。しかしながら、このような組み合せ回路記述が組み合せられることでネスティングした構造は複雑となる。単に重要部分の出現頻度で複雑度を評価した場合、ネスティングによる構造の複雑さは考慮されないため、精度良く評価することができない。
【００１３】
また、これら重要部分以外において、重要でないと考えられている部分に、非常に複雑なロジックによって駆動される信号／レジスタが存在する。そのような重要でないと考えられている部分を見逃さないようにする必要がある。重要でないと考えられている部分を、以下、「潜在的な重要部分」と言う。
【００１４】
本実施例では、上述したような組み合せ回路記述の重要部分の出現頻度のみで複雑度を算出するのではなく、ハードウェア記述内のロジックによって駆動される潜在的な重要部分を含めて、ロジックの複雑さを評価する、精度良いハードウェアメトリックスを提供する。
【００１５】
図１は、組み合せ回路の例を示す図である。図１に例示する組み合せ回路２は、入力端子ＩＮＰＵＴ１からＩＮＰＵＴ７と、出力端子ＯＵＴＰＵＴを有し、内部に、ＡＮＤ回路２ａ、ＯＲ回路２ｂと、ＯＲ回路２ｃと、ＡＮＤ回路２ｄとを有する。
【００１６】
配線ｗｉｒｅ１及び配線ｗｉｒｅ２は、組み合せ回路２の内部配線であり、配線ｗｉｒｅ１は、ＯＲ回路２ｂとＡＮＤ回路２ｄとを接続し、配線ｗｉｒｅ２は、ＡＮＤ回路２ｄと出力端子ＯＵＴＰＵＴとを接続する。
【００１７】
本実施例では、ロジックが配線ｗｉｒｅ１、配線ｗｉｒｅ２等の各内部の配線や信号をどの程度駆動するかを表す重み付けする。
【００１８】
図２は、図１の組み合せ回路のＶｅｒｉｌｏｇ記述例を示す図である。図２に例示する組み合せ回路２のＶｅｒｉｌｏｇ記述３は、記述３ａで組み合せ回路２の入力端子及び出力端子が定義され、記述３ｂで内部配線が定義されている。また、記述３ｃで、assign文により各ロジックに関するアサインメントが定義される。
【００１９】
記述３ｃでは、出力端子ＯＵＴＰＵＴの値はｗｉｒｅ２の値の値であることを定義し、ｗｉｒｅ１の値は、入力端子ＩＮＰＵＴ１とＩＮＰＵＴ２との論理積の値と、入力端子ＩＮＰＵＴ３との論理和であることを定義している。また、入力端子ＩＮＰＵＴ６とＩＮＰＵＴ７との論理和を求め、配線ｗｉｒｅ１、入力端子ＩＮＰＵＴ４、入力端子ＩＮＰＵＴ５、及び、論理和の値の論理積が、ｗｉｒｅ２の値であることを定義している。
【００２０】
例示したようなＶｅｒｉｌｏｇ記述３のソースファイルを読み込んで、潜在的な重要部分を考慮してロジックの複雑度を算出する、本実施例に係る回路設計装置１００のハードウェア構成について図３で説明する。
【００２１】
図３は、回路設計装置のハードウェア構成を示す図である。図３において、回路設計装置１００は、コンピュータによって制御される端末であって、ＣＰＵ（Central Processing Unit）１１と、主記憶装置１２と、補助記憶装置１３と、入力装置１４と、表示装置１５と、通信Ｉ／Ｆ（インターフェース）１７と、ドライブ装置１８とを有し、バスＢに接続される。
【００２２】
ＣＰＵ１１は、主記憶装置１２に格納されたプログラムに従って回路設計装置１００を制御するプロセッサである。主記憶装置１２には、ＲＡＭ（Random Access Memory）、ＲＯＭ（Read Only Memory）等が用いられ、ＣＰＵ１１にて実行されるプログラム、ＣＰＵ１１での処理に必要なデータ、ＣＰＵ１１での処理にて得られたデータ等を記憶又は一時保存する。
【００２３】
補助記憶装置１３には、ＨＤＤ（Hard Disk Drive）等が用いられ、各種処理を実行するためのプログラム等のデータを格納する。補助記憶装置１３に格納されているプログラムの一部が主記憶装置１２にロードされ、ＣＰＵ１１に実行されることによって、各種処理が実現される。記憶部１３０は、主記憶装置１２及び／又は補助記憶装置１３を有する。
【００２４】
入力装置１４は、マウス、キーボード等を有し、ユーザが回路設計装置１００による処理に必要な各種情報を入力するために用いられる。表示装置１５は、ＣＰＵ１１の制御のもとに必要な各種情報を表示する。通信Ｉ／Ｆ１７は、有線又は無線などのネットワークを通じて通信を行う。通信Ｉ／Ｆ１７による通信は無線又は有線に限定されるものではない。 
回路設計装置１００によって行われる処理を実現するプログラムは、例えば、ＣＤ−ＲＯＭ（Compact Disc Read-Only Memory）等の記憶媒体１９によって回路設計装置１００に提供される。
【００２５】
ドライブ装置１８は、ドライブ装置１８にセットされた記憶媒体１９（例えば、ＣＤ−ＲＯＭ等）と回路設計装置１００とのインターフェースを行う。
【００２６】
また、記憶媒体１９に、後述される本実施の形態に係る種々の処理を実現するプログラムを格納し、この記憶媒体１９に格納されたプログラムは、ドライブ装置１８を介して回路設計装置１００にインストールされる。インストールされたプログラムは、回路設計装置１００により実行可能となる。
【００２７】
尚、プログラムを格納する媒体としてＣＤ−ＲＯＭに限定するものではなく、コンピュータが読み取り可能な媒体であればよい。コンピュータ読取可能な記憶媒体として、ＣＤ−ＲＯＭの他に、ＤＶＤディスク、ＵＳＢメモリ等の可搬型記録媒体、フラッシュメモリ等の半導体メモリであっても良い。
【００２８】
図４は、回路設計装置の機能構成例を示す図である。図４において、回路設計装置１００は、複雑度評価部４０を有する。また、記憶部１３０に、ソースファイル３０、複雑度テーブル５０等が記憶される。
【００２９】
複雑度評価部４０は、組み合せ回路（モジュール）毎にハードウェア記述で動作を記述したソースファイル３０を読み込み、組み合せ回路毎に複雑度を一覧にした複雑度テーブル５０を出力する。
【００３０】
複雑度評価部４０は、更に、複雑度テーブル構築部４１と、複雑度解析部４２とを有する。複雑度テーブル構築部４１と、複雑度解析部４２とは、ＣＰＵ１１が対応するプログラムを実行することによって実現される。
【００３１】
複雑度テーブル構築部４１は、複雑度テーブル５０を作成して、重要部分に相当する"always"、"if"、及び"assign"等の代入型を抽出する。複雑度解析部４２は、潜在的な重要部分を抽出して、組み合せ回路内の重要部分の複雑度を、潜在的な重要部分の複雑度を含めて算出する。
【００３２】
複雑度評価部４０によって、重要部分として認識される"always"、"if"、及び"assign"等の代入型に加えて、重要部分に関連する配線（信号）及びレジスタの複雑度が考慮される。具体的には、"always"、"if"、及び"assign"等で始まる手続き文の各記述内に出現する配線（信号）名及びレジスタ名を抽出して、各配線及びレジスタにも複雑度を与える。本実施例において、信号及び配線は同義である。
【００３３】
ソースファイル３０は、Ｖｅｒｉｌｏｇ、ＶＨＤＬ(VHSIC(Very High Speed Integrated Circuit) Hardware Description Language)等のハードウェア記述言語で、開発者によって開発された組み合せ回路毎のソースファイルである。複雑度テーブル５０は、複雑度テーブル構築部４１によって作成され、複雑度解析部４２によって解析された複雑度を一覧で示すデータファイルである。
【００３４】
複雑度評価部４０によって行われる複雑度評価処理を図５、図６、及び図７で説明する。先ず、複雑度評価処理において、複雑度テーブル構築部４１及び複雑度解析部４２が行う複雑度テーブル生成処理について説明する。
【００３５】
図５は、複雑度テーブル生成処理について説明するためのフローチャート図である。図５において、複雑度評価部４０は、記憶部１３０からソースファイル３０を１つ読み込む（ステップＳ１１）。
【００３６】
そして、複雑度評価部４０は、ソースファイル３０の先頭から順に命令を取得する（ステップＳ１２）。複雑度評価部４０は、ステップＳ１３からＳ１６−２までの処理を、複雑度テーブル構築部４１によって行う。
【００３７】
複雑度テーブル構築部４１は、命令が"always"であるか否かを判断する（ステップＳ１３）。
【００３８】
命令が"always"である場合、複雑度テーブル構築部４１は、"always"を"always_i"（ｉは正数）として複雑度テーブル４１のステートメントに追加する（ステップＳ１３−２）。変数ｉを付与した"always_i"は、ソースファイル３０における"always"の出現順を示す。複雑度テーブル構築部４１は、変数ｉを１インクリメントして（ステップＳ１３−４）、ステップＳ２０へと進む。
【００３９】
複雑度テーブル５０において、"always_i"毎に、複雑度が累積される。"always_i"の複雑度は、即ち、センシティビティリスト（単に、センシティビティと言う）で示される配線（信号）／レジスタの複雑度によって示される。また、"always_i"の複雑度は、配線（信号）／レジスタの複雑度、"always_j"の組み合せ回路記述に包含されるassignの複雑度等の累積によって示される。詳細は後述される。
【００４０】
一方、命令が"always"でない場合、複雑度テーブル構築部４１は、命令が"if"であるか否かを判断する（ステップＳ１４）。
【００４１】
命令が"if"である場合、複雑度テーブル構築部４１は、"if"を"if_j"（ｊは正数）として複雑度テーブル４１のステートメントに追加する（ステップＳ１４−２）。変数ｊを付与した "if_j"は、ソースファイル３０における"if"の出現順を示す。複雑度テーブル構築部４１は、変数ｊを１インクリメントして（ステップＳ１４−４）、ステップＳ２０へと進む。
【００４２】
複雑度テーブル５０において、"if_j"毎に、複雑度が累積される。"if_j"の複雑度は、条件（condition）で示される配線（信号）／レジスタの複雑度、"if_j"の組み合せ回路記述に包含されるassignの複雑度等の累積によって示される。詳細は後述される。
【００４３】
一方、命令が"if"でない場合、複雑度テーブル構築部４１は、命令が"state"であるか否かを判断する（ステップＳ１５）。
【００４４】
命令が"state"である場合、複雑度テーブル構築部４１は、"state"を"state _k"（ｋは正数）として複雑度テーブル４１のステートメントに追加する（ステップＳ１５−２）。変数ｋを付与した"state_k"は、ソースファイル３０における"state"の出現順を示す。複雑度テーブル構築部４１は、変数ｋを１インクリメントして（ステップＳ１５−４）、ステップＳ２０へと進む。
【００４５】
複雑度テーブル５０において、"state_k"毎に、複雑度が示される。"state_k"の複雑度は０（ゼロ）である。
【００４６】
一方、命令が"state"でない場合、複雑度テーブル構築部４１は、命令がassignであるか否かを判断する（ステップＳ１６）。命令がassignでない場合、複雑度テーブル構築部４１は、対象外と判断する（ステップＳ１６−２）。そして、複雑度評価部４０は、ステップＳ２０へと進み、命令がある場合は、ステップＳ１１へと戻り、上述同様の処理を繰り返す。
【００４７】
一方、命令がassignの場合、複雑度評価部４０は、ステップＳ１７からＳ１９までの処理を、複雑度解析部４２に行わせる。
【００４８】
複雑度解析部４２は、アサインメントの配線（信号）及びレジスタの名前を夫々、複雑度テーブル４１のステートメントに追加する（ステップＳ１７）。配線及びレジスタ夫々の複雑度が考慮される（後述）。
【００４９】
複雑度解析部４２は、assignはalways、if、又はstateに属するか否かを判断する（ステップＳ１８）。assignがいずれかに属する場合、複雑度解析部４２は、ステップＳ１７で算出したアサイン複雑度をassignが属するalways、if、又はstateの複雑度に加算する（ステップＳ１９）。一方、assignがいずれにも属さない場合、複雑度解析部４２は、ステップＳ１８へと進む。
【００５０】
複雑度評価部４０は、未だ命令があるか否かを判断する（ステップＳ２０）。処理する命令が残っている場合、複雑度評価部４０は、ステップＳ１２へ戻り、次の命令を取得して、上記同様の処理を繰り返す。
【００５１】
一方、処理する命令が無い場合、複雑度評価部４０は、記憶部１３０に未処理のソースファイル３０があるか否かを判断する（ステップＳ２１）。ソースファイル３０が残っている場合、複雑度評価部４０は、ステップＳ１１へ戻り、記憶部１３０から次のソースファイル３０を取得して、上述した同様の処理を行う。
【００５２】
一方、ソースファイル３０が無い場合、つまり、全てのソースファイル３０を処理した場合、複雑度評価部４０は、この複雑度テーブル生成処理を終了する。
【００５３】
次に、複雑度解析部４２によって行われる、構文解析に基づく潜在的な重要部分を含めて複雑度を算出する複雑度算出処理について図６で説明する。図６は、複雑度算出処理を説明するためのフローチャートである。図６では、左側に複雑度テーブル５０のデータ例を示す。
【００５４】
図６において、複雑度解析部４２は、全てのcondition/assignのステートメントを構文解析する（ステップＳ４１）。ステートメントの複雑度が解析される。ステートメントの複雑度の解析には、行数（line number）及びネスティングの段数（nest level）の有無等が含まれる。
【００５５】
図５のステップＳ１７において、潜在的な重要部分に相当する信号名及びレジスタ名が抽出されているものとする。例えば、複雑度解析部４２は、信号名「ｓｉｇ１」、「ｓｉｇ２」等を抽出し、複雑度テーブル５０に、ステートメントを夫々「ｓｉｇ１」、「ｓｉｇ２」とする新たなレコードを追加する。「ｓｉｇ１」のレコードでは、複雑度に「１＋ｓｉｇ２」が設定され、「ｓｉｇ２」のレコードでは、複雑度に「ＩＮ３」が設定される。
【００５６】
ステップＳ４１では、複雑度解析部４２の解析によって、図５の複雑度テーブル生成処理によって抽出されたステートメント「if_1」の複雑度に対して、計算式「sig2 + sig3 + line number + net level」が設定される。行数（line number）は、一つのｉｆ文の条件を満たす場合に実行されるソースコードの行数を示す。ネスティングの段数（nest level）は、ネスティングされた回数を示す。
【００５７】
また、図５の複雑度テーブル生成処理によって抽出されたステートメント「always_1」の複雑度に対して、計算式「sensitivy_1 + if_1 + if_2」が設定される。sensitivy_1は、always_1のセンシティビティの複雑度に相当し、if_1は、always_1配下の１番目のｉｆ文の複雑度に相当し、２番目のｉｆ文の複雑度に相当する。
【００５８】
次に、複雑度解析部４２は、入力を定義する入力リストを構文解析して入力名を取得し、対応する複雑度を取得して、複雑度テーブル５０に追加する（ステップＳ４２）。ソースファイル３０において、図２の記述３ａに相当する部分を解析することによって入力名を取得できる。例えば、入力名「ＩＮ１」を取得した場合、且つ、入力名「ＩＮ１」が入力端子の場合、複雑度解析部４２は、「ＩＮ１」の複雑度を「１」として、新たなレコードを複雑度テーブル５０に追加する。
【００５９】
入力名「ＩＮ１」が入力端子でない場合、複雑度を設定しない。入力名がそのまま複雑度テーブル５０内に残しておく。処理中のソースファイル５０（処理中のモジュール）は、接続される前段のモジュールから値が入力される場合がある。前段のモジュールの複雑度テーブル５０が作成されることで、接続に従って、前段のモジュールの出力の複雑度を、処理中のモジュールの対応する入力の複雑度として継承せることができる。図１８及び図１９で詳述される。
【００６０】
複雑度解析部４２は、複雑度の計算式内のステートメントを既知となった値で置き換える（ステップＳ４３）。初回では、入力が入力端子の場合に、その入力（「IN1」）が値「１」で置き換える。複雑度テーブル５０のステートメント「sig1」の複雑度は計算式「IN1 + sig2」で表される場合、複雑度解析部４２は、計算式内の文字列「IN1」を値「１」に置き換える。ステートメント「sig1」の複雑度は計算式「1 + sig2」に変更される。
【００６１】
複雑度解析部４２は、ソースファイル３０を参照して、順に、condition/assign複雑度の値を算出する複雑度算出処理（図７）を行う（ステップＳ４４）。そして、複雑度解析部４２は、全てのcondition/assign複雑度を求めたか否かを判断する（ステップＳ４５）。複雑度を算出していないcondition/assignがまだ存在する場合、複雑度解析部４２は、ステップＳ４３へ戻り、上述同様の処理を繰り返す。
【００６２】
一方、全てのcondition/assign複雑度を求めた場合、複雑度解析部４２は、この複雑度算出処理を終了する。
【００６３】
図７は、図６のステップＳ４４での処理を説明するためのフローチャート図である。図７において、複雑度解析部４２は、condition/assignに対して、新たな値を算出できたか否かを判断する（ステップＳ５１）。複雑度テーブル５０において、ステートメントの複雑度を計算式ではなく、値で示すことができたか否かを判断する。算出できた場合、複雑度解析部４２は、この処理を終了する。図６のステップＳ４５での判断において、未だ処理が残っている場合には、次のcondition/assignについて上記同様の処理が行われる。
【００６４】
一方、算出できなかった場合、即ち、複雑度が計算式で表されている場合、複雑度解析部４２は、部分的に得られた複雑度を展開する（ステップＳ５２）。計算式内のステートメントの信号名毎に、複雑度テーブル５０を検索して、検索した信号名のレコードから複雑度を取得して、計算式内の信号名を取得した複雑度で置き換える。
【００６５】
その際に、複雑度解析部４２は、複雑度の計算式に自身の信号名があるか否かを判断する（ステップＳ５３）。自身を示す信号名を含む場合、複雑度解析部４２は、計算式内の自身の信号名をフィードバック複雑度で置き換える（ステップＳ５４）。ステップＳ５３及びＳ５４は、フィードバック検出処理に相当する。例えば、図８に示す「sig3」が相当する。
【００６６】
フィードバック複雑度は、予め、設計者などによって与えられた値である。例えば、値「５」をフィードバック複雑度とした場合の例を図８で説明する。
【００６７】
図８は、フィードバック検出処理の例を示す図である。図８において、ステートメントとして信号名「sig1」、「sig2」、「sig3」等が、複雑度テーブル５０に存在するとする。
【００６８】
テーブル遷移１において、複雑度テーブル５０のステートメント「sig3」のレコードの複雑度は、計算式「10＋sig1」で示される。この「sig1」は、「sig3」が出現する前に存在し、計算式「1＋sig2」で複雑度が示されている。従って、複雑度解析部４２は、計算式「10＋sig1」の「sig1」を「1＋sig2」で置き換える。
【００６９】
置き換え後のテーブル遷移２において、複雑度テーブル５０のステートメント「sig3」のレコードの複雑度は、計算式「10＋1＋sig2」で示される。この「sig2」は、「sig3」が出現する前に存在し、計算式「1＋sig3」で複雑度が示されている。従って、複雑度解析部４２は、計算式「10＋1＋sig2」の「sig2」を「1＋sig3」で置き換える。
【００７０】
置き換え後のテーブル遷移３において、複雑度テーブル５０のステートメント「sig3」のレコードの複雑度は、計算式「11＋1＋sig3」で示される。従って、複雑度解析部４２は、計算式「11＋1＋sig3」には自信の「sig3」を含むため、フィードバック複雑度「５」で置き換える。
【００７１】
置き換え後のテーブル遷移４において、複雑度テーブル５０のステートメント「sig3」のレコードの複雑度は、「12＋5」となり、その結果、テーブル遷移５で示すように、複雑度テーブル５０のステートメント「sig3」の複雑度は、「17」となる。「sig3」の複雑度が値で示されると、複雑度解析部４２は、ステートメント「sig3」より前に出現するレコードの計算式が「sig3」を含む場合、この信号名「sig3」を値「17」で置き換える。ステートメント「sig2」のレコードの複雑度は、「1＋17」となる。同様に、複雑度解析部４２は、ステートメント「sig1」のレコードの複雑度の計算式内の「sig2」を値で置き換える。
【００７２】
置き換え後のテーブル遷移６において、ステートメント「sig2」のレコードの複雑度は、値「18」を示し、更に、ステートメント「sig1」のレコードの複雑度は、値「19」を示す。
【００７３】
次に、組み合せ回路の動作（behavior）の複雑度の算出方法について図９及び図１０で説明する。図９は、複雑度の算出方法を説明するための図である。図９に示すＶｅｒｉｌｏｇ記述例を用いて、"always"の複雑度の算出例を説明する。
【００７４】
図９において、複雑度解析部４２は、各複雑度Ｃ１を算出する。本実施例では、各複雑度Ｃ１では、値を直接設定する記述の場合、「１」として算出するが、「１」に限定されるものではない。設計者が適宜、値を設定しておけばよい。
【００７５】
図９では、配線及びレジスタに係る複雑度Ｃ１として、sensitivity、condition、及びassignの簡単な例を示している。
【００７６】
sensitivityの複雑度Ｃ１は、クロック信号、リセット信号等が対象となる。クロック信号、リセット信号等の各複雑度の合計値が、センシティビティの複雑度Ｃ１となる。condition_1〜condition_pの各条件の複雑度Ｃ１は、条件文に出現する配線及びレジスタの複雑度の合計値で表される。また、assignの複雑度Ｃ１についても同様である。
【００７７】
複雑度Ｃ２は、"always"の記述によって駆動される信号の複雑度に相当する。各アサインメントの複雑度の合計値が複雑度Ｃ２となる。この例では、out_1〜out_nに、sig combi_1〜sig combi_mが設定される値を直接設定する記述であるため、単に「１」として算出する。即ち、out_1の複雑度は「１」であり、out_1〜out_nの複雑度の合計値が、複雑度Ｃ２となる。
【００７８】
複雑度Ｃ３は、ｉｆ文の記述においてネスティングの段数に応じた複雑度を示す。複雑度Ｃ４は、各ｉｆ文の記述全体の複雑度を示し、複雑度Ｃ１、Ｃ２、及びＣ３の合計に相当する。
【００７９】
そして、複雑度Ｃ５は、各always文の記述全体の複雑度を示示す。図９の例において、１番目のalwaysの複雑度Ｃ５は、複雑度Ｃ４の合計と、sensitivityの複雑度Ｃ１との総和で示される。２番目のalwaysの複雑度Ｃ５は、assignの複雑度Ｃ１等の総和で示される。
【００８０】
次に、ｓｔａｔｅ文を含む場合の複雑度の算出方法について図１０で説明する。図１０は、ｓｔａｔｅ文を含む場合の複雑度の算出方法を説明するための図である。図１０において、複雑度Ｃ６は、各state文の記述全体の複雑度を示す。state文内における種々の複雑度は、図９で説明した通りである。この例では、STATE_1からSTATE_Nの各複雑度の総和がalwaysの複雑度を表す。
【００８１】
次に、Verilog記述と、組み合せ回路構成と、複雑度テーブルとで、複雑度の算出方法を、図１１から図１８で説明する。図１１は、Verilog記述例を示す図である。図１１では、図１２〜図１４の組み合せ回路の動作をVerilogで記述した例を示している。本実施例の理解を容易とするため、Verilog記述例には、算出方法に係る情報を付加して示している。Verilog記述例内の横矢印は、１段毎のネスティングを表している。行内の"//"から右側に示すコメントには、算出例を示している。
【００８２】
図１２は、図１１のVerilog記述で表現される、Ａをドライブする回路構成を示す図である。図１３は、図１１のVerilog記述で表現される、Ｂをドライブする回路構成を示す図である。図１４は、図１１のVerilog記述で表現される、Ｘをドライブする回路構成を示す図である。図１１の記述部分Ｄ１、Ｄ２、Ｄ３、Ｄ４の夫々に対応する構成部分に、同一符号を付してある。
【００８３】
図１２〜図１４の回路図の動作を記述した図１１のVerilog記述に基づく複雑度を算出する場合を、図１５から図１８までの複雑度テーブル５０のテーブル遷移で説明する。図１５から図１８は、図１１のVerilog記述に基づく複雑度の算出方法を説明するための図である。
【００８４】
図１５では、図５のフローチャートでの複雑度テーブル生成処理に基づいて説明する。図１５において、複雑度テーブル構築部４１は、図１１のソースファイル３０を記憶部１３０から読み込む（ステップＳ１１）。そして、複雑度テーブル構築部４１は、図１１のソースファイル３０の１行目から命令「always@(posedge CLK or negedge RST) begin」を取得する（ステップＳ１２）。
【００８５】
複雑度テーブル構築部４１は、１行目の命令から「always@」を取得し（ステップＳ１２）、ステートメント"always_1"として複雑度テーブル５０に追加する（ステップＳ１３、Ｓ１３−２、Ｓ１３−４）。
【００８６】
具体的には、複雑度テーブル構築部４１は、１行目の命令から「(posedge CLK or negedge RST」を更に取得する。「(posedge CLK or negedge RST」は、回路が後述する記述の動作を行う条件を示す。
【００８７】
そして、複雑度解析部４２は、「(posedge CLK or negedge RST)」内の配線又はレジスタに相当する"CLK"及び"RST"は"always_1"に属すると判断して、"always_1"の複雑度に加算する。
【００８８】
更に、複雑度テーブル構築部４１は、１行目の命令から「begin」を取得する。"begin"は、複雑度テーブル５０には追加されない。
【００８９】
複雑度テーブル構築部４１は、２行目から命令「if(! RST) begin」を取得する（ステップＳ１２）。２行目の命令から「if」を取得して、ステートメント"if_1"として複雑度テーブル５０に追加する（ステップＳ１４、Ｓ１４−２、Ｓ１４−４）。
【００９０】
具体的には、"if_1"は、"always_1"の配下であるため、"if_1"の複雑度を"always_1"の複雑度に追加する。"if_1"の複雑度は、"always_1"に反映される。
【００９１】
複雑度テーブル構築部４１は、２行目の命令から「(! RST)」を取得する。そして、複雑度解析部４２は、「(! RST)」内の配線又はレジスタに相当する"RST"は"if_1"に属すると判断して、ステートメント"if_1"の複雑度に加算する。また、後の複雑度算出処理において、複雑度解析部４２は、"if_1"のネスティングを示す"nest level"をステートメント"if_1"の複雑度に加算する（ステップＳ４１）。
【００９２】
更に、複雑度テーブル構築部４１は、２行目の命令から「begin」を取得する。"begin"は、複雑度テーブル５０には追加されない。
【００９３】
複雑度テーブル構築部４１は、３行目から命令「A <= 1'b0;」を取得する（ステップＳ１２）。複雑度テーブル構築部４１は、"assign"であると判断し、ステートメント"assign_1"として複雑度テーブル５０に追加する（ステップＳ１６）。
【００９４】
複雑度解析部４２は、命令「A <= 1'b0;」の演算子"<="より、値の設定であると判断し、ステートメント"assign_1"の複雑度に「１」を設定する（ステップＳ１７）。また、値が設定される"A"は、配線又はレジスタに相当すると判断し、ステートメント"A"として複雑度テーブル５０に追加する（ステップＳ１７）。"A"は、"always_1"の記述に従った回路動作によって駆動されるため、複雑度には"always_1"が設定される。
【００９５】
更に、複雑度解析部４２は、命令「A <= 1'b0;」は、"if_1"に属するため、ステートメント"if_1"の複雑度に、"assign_1"の複雑度を加算する（ステップＳ１８のＹｅｓ、Ｓ１９）。配線又はレジスタに相当する"A"の複雑度が考慮される。
【００９６】
複雑度テーブル構築部４１は、４行目から命令「B <= 1'b1;」を取得する（ステップＳ１２）。複雑度テーブル構築部４１は、"assign"であると判断し、ステートメント"assign_2"として複雑度テーブル５０に追加する（ステップＳ１６）。
【００９７】
複雑度解析部４２は、命令「B <= 1'b1;」の"<="より、値の設定であると判断し、ステートメント"assign_2"の複雑度に「１」を加算する（ステップＳ１７）。また、値が設定される"B"は、配線又はレジスタに相当すると判断し、ステートメント"B"として複雑度テーブル５０に追加する（ステップＳ１７）。
【００９８】
更に、複雑度解析部４２は、命令「B <= 1'b1;」は、"if_1"に属するため、ステートメント"if_1"の複雑度に、"assign_2"の複雑度を加算する（ステップＳ１８のＹｅｓ、Ｓ１９）。配線又はレジスタに相当する"B"の複雑度が考慮される。
【００９９】
複雑度テーブル構築部４１は、５行目から命令「end」を取得する（ステップＳ１２）。複雑度テーブル構築部４１は、対象外であると判断する（ステップＳ１６、Ｓ１６−２）。
【０１００】
複雑度テーブル構築部４１は、６行目から命令「else begin」を取得する（ステップＳ１２）。６行目の命令から「else」を取得する。複雑度テーブル構築部４１は、行の最初のコードが"else"である場合、"if"と同様の処理を行う。以下、図５のフローチャートのステップＳ１４、Ｓ１４−２、及びＳ１４−４に準ずるため、ステップＳ１４'、Ｓ１４−２'、及びＳ１４−４'で示す。複雑度テーブル構築部４１は、"else"をステートメント"else_1"として複雑度テーブル５０に追加する（ステップＳ１４'、Ｓ１４−２'、及びＳ１４−４'）。また、後の複雑度算出処理において、複雑度解析部４２は、"else_1"のネスティングを示す"nest level"をステートメント"else _1"の複雑度に加算する（ステップＳ４１）。
【０１０１】
更に、複雑度テーブル構築部４１は、６行目の命令から「begin」を取得する。"begin"は、複雑度テーブル５０には追加されない。
【０１０２】
複雑度テーブル構築部４１は、７行目から命令「if((C) && (!D) && (!E)) begin」を取得する（ステップＳ１２）。
【０１０３】
複雑度テーブル構築部４１は、７行目の命令から「if」を取得し、ステートメント"if_2"として複雑度テーブル５０に追加する（ステップＳ１４、Ｓ１４−２、Ｓ１４−４）。
【０１０４】
"if_2"は、"else_1"の配下であるため、"if_2"の複雑度を"else_1"の複雑度に追加する。"if_2"の複雑度は、"else_1"に反映される。
【０１０５】
具体的には、複雑度テーブル構築部４１は、７行目の命令から「((C) && (!D) && (!E))」を更に取得する。「((C) && (!D) && (!E))」は条件を示す。"C"、"D"、及び"E"は、配線又はレジスタに相当する。
【０１０６】
そして、複雑度解析部４２は、「((C) && (!D) && (!E))」内の配線又はレジスタに相当する"C"、"D"、及び"E"は"if_2"に属すると判断して、ステートメント"if_2"の複雑度に加算する。論理積の対象となる配線又はレジスタが複雑度に考慮される。また、後の複雑度算出処理において、複雑度解析部４２は、"if_2"のネスティングを示す"nest level"をステートメント"if_2"の複雑度に加算する。
【０１０７】
更に、複雑度テーブル構築部４１は、７行目の命令から「begin」を取得する。"begin"は、複雑度テーブル５０には追加されない。
【０１０８】
複雑度テーブル構築部４１は、８行目の命令「A <= 1'b0;」を取得する（ステップＳ１２）。複雑度テーブル構築部４１は、"assign"であると判断し、ステートメント"assign_3"として複雑度テーブル５０に追加する（ステップＳ１６）。
【０１０９】
複雑度解析部４２は、命令「A <= 1'b0;」の"<="より、値の設定であると判断し、ステートメント"assign_3"の複雑度に「１」を加算する（ステップＳ１７）。また、値が設定される"A"は、配線又はレジスタに相当するが、複雑度テーブル５０に既に存在するため、複雑度テーブル５０への追加、及び複雑度の設定は行わない。
【０１１０】
複雑度テーブル構築部４１は、９行目の命令「B <= 1'b1;」を取得する（ステップＳ１２）。複雑度テーブル構築部４１は、"assign"であると判断し、ステートメント"assign_4"として複雑度テーブル５０に追加する（ステップＳ１６）。
【０１１１】
複雑度解析部４２は、命令「B <= 1'b1;」の"<="より、値の設定であると判断し、ステートメント"assign_4"の複雑度に「１」を加算する（ステップＳ１７）。また、値が設定される"B"は、配線又はレジスタに相当するが、複雑度テーブル５０に既に存在するため、複雑度テーブル５０への追加、及び複雑度の設定は行わない。
【０１１２】
１０行目の命令「end」は対象外と判断される（ステップＳ１６のＮｏ、Ｓ１６−２）。従って、複雑度テーブル５０には追加されない。
【０１１３】
複雑度テーブル構築部４１は、１１行目から命令「else if(F == 11'h000) begin」を取得する（ステップＳ１２）。１１行目の命令から「else if」を取得する。"else if"である場合においても"if"と同様の処理を行う。"else"の場合と同様に、以下、ステップＳ１４'、Ｓ１４−２'、及びＳ１４−４'で示す。複雑度テーブル構築部４１は、"else if"をステートメント"else_2"として複雑度テーブル５０に追加する（ステップＳ１４'、Ｓ１４−２'、及びＳ１４−４'）。"else_2"は、６行目の"else_1"に属するため、ステートメント"else_1"の複雑度に"else_2"の複雑度が追加される（ステップＳ１９）。また、後の複雑度算出処理において、複雑度解析部４２は、"else_2"のネスティングされていることを示す"nest level"をステートメント"else _2"の複雑度に加算する。
【０１１４】
具体的には、"else_2"は、"else_1"の配下であるため、"else_2"の複雑度を"else_1"の複雑度に追加する。"else_2"の複雑度は、"else_1"に反映される。
【０１１５】
また、複雑度テーブル構築部４１は、１１行目の命令から「(F == 11'h000)」を更に取得する。そして、複雑度解析部４２は、命令「(F == 11'h000)」内の配線又はレジスタに相当する"F"は"else_2"に属すると判断して、ステートメント"else _2"の複雑度に加算する。配線又はレジスタの要素が複雑度に考慮される。また、後の複雑度算出処理において、複雑度解析部４２は、"if_2"のネスティングを示す"nest level"をステートメント"if_2"の複雑度に加算する。
【０１１６】
更に、複雑度テーブル構築部４１は、１１行目の命令から「begin」を取得する。"begin"は、複雑度テーブル５０には追加されない。
【０１１７】
複雑度テーブル構築部４１は、１２行目の命令「A <= 1'b1;」を取得する（ステップＳ１２）。複雑度テーブル構築部４１は、"assign"であると判断し、ステートメント"assign_5"が複雑度テーブル５０に追加する（ステップＳ１６）。
【０１１８】
複雑度解析部４２は、命令「A <= 1'b1;」の"<="より、値の設定であると判断し、ステートメント"assign_5"の複雑度に「１」を加算する（ステップＳ１７）。配線又はレジスタに相当する"A"は、既に複雑度テーブル５０に存在するため、複雑度テーブル５０への追加、及び複雑度の設定は行われない。
【０１１９】
複雑度テーブル構築部４１は、１３行目の命令「B <= 1'b0;」を取得する（ステップＳ１２）。複雑度テーブル構築部４１は、"assign"であると判断し、ステートメント"assign_5"が複雑度テーブル５０に追加する（ステップＳ１６）。
【０１２０】
複雑度解析部４２は、命令「B <= 1'b0;」の"<="より、値の設定であると判断し、ステートメント"assign_6"の複雑度に「１」を加算する（ステップＳ１７）。配線又はレジスタに相当する"B"は、既に複雑度テーブル５０に存在するため、複雑度テーブル５０への追加、及び複雑度の設定は行われない。
【０１２１】
複雑度テーブル構築部４１は、１４行目及び１５行目の命令「end」は対象外と判断する（ステップＳ１２、Ｓ１６、Ｓ１６−２）。
【０１２２】
そして、複雑度テーブル構築部４１は、１６行目の命令「Assign X = A or C」を取得する（ステップＳ１２）。複雑度テーブル構築部４１は、"assign"であると判断し（ステップＳ１６）、assign文に含まれる配線又はレジスタを示す"X"を複雑度テーブル５０に追加する（ステップＳ１７）。この場合、複雑度解析部４２は、"X"の複雑度に、"A"の複雑度と、"C"の複雑度とを加算する（ステップＳ１７）。また、このassign文は、"always"、"if"、又は"state"のいずれにも属さないため（ステップＳ１８のＮｏ）、このassignの複雑度は、いずれにも加算されない。
【０１２３】
図１６では、図６の複雑度算出処理及び図７の処理に基づいて説明する。図１６において、複雑度解析部４２は、ソースファイル３０を参照しながら、構文解析を行う（ステップＳ４１）。
【０１２４】
複雑度解析部４２は、ステートメント"always_1"に対して、条件文の「(posedge CLK or negedge RST)」において、変数CLK及び変数RSTの値が直接示されるため、本実施例では、一律に値「１」を設定する。しかしながら、値「１」に限定されるものではない。設計者により適宜設定できるようにしても良い。複雑度解析部４２は、複雑度テーブル５０の複雑度の計算式内の変数CLK及び変数RSTを、全て値「１」に置き換える。
【０１２５】
複雑度解析部４２は、ステートメント"if_1"に対して、RSTを値「１」に置き換え、ネスティングの段数は１であるので、nest levelを値「１」で置き換える。複雑度解析部４２は、また、ステートメント"else_1"に対して、ネスティングの段数は１であるので、nest levelを値「１」で置き換える。
【０１２６】
複雑度解析部４２は、また、ステートメント"if_2"及び"else_2"に対して、ネスティングの段数は２であるので、nest levelを値「２」で置き換える。
【０１２７】
複雑度解析部４２は、入力リストを構文解析して入力名を取得し、その複雑度を「１」とする（ステップＳ４２）。複雑度テーブルの５０の複雑度の値において、取得した同一入力名に対応する値で置き換える（ステップＳ４３）。図１１（図１５）のソースファイル３０では、"C"、"D"、"E"、及び"F"が入力に相当する。
【０１２８】
複雑度解析部４２は、値で表されるステートメントが存在する場合、複雑度を表す計算式内の該ステートメントをその値で置き換える（図６のステップＳ４３、Ｓ４４（及び図７）、及びＳ４５）。値で表されるステートメントとは、他のステートメントを含む計算式で表されていないステートメントを示し、この例では、"assing_1"、"assing_2"、"assing_3"、"assing_4"、"assing_5"、及び"assing_6"が相当する。
【０１２９】
複雑度テーブル５０において、ステートメント"if_1"の複雑度の計算式に対して、"assing_1"が値「１」に置き換えられ、"assing_2"が値「１」に置き換えられる。また、ステートメント"if_2"の複雑度の計算式に対して、"assing_3"が値「１」に置き換えられ、"assing_4"が値「１」に置き換えられる。更に、ステートメント"else_2"の複雑度の計算式に対して、"assing_5"が値「１」に置き換えられ、"assing_6"が値「１」に置き換えられる。
【０１３０】
上述の既知となったステートメントの値で置き換える繰り返し処理により、ステートメント"else_1"の複雑度は、「2 + if_1 + else_1」で表され、ステートメント"if_1"の複雑度は、「４」で表される。他ステートメントの複雑度においても、部分的に数値に置き換えられる。
【０１３１】
この時点では、複雑度テーブル５０内の複雑度には、ステートメント"if_1"、"else_1"、"if_2"、"else_2"が残っている。
【０１３２】
図１７において、複雑度解析部４２は、ステートメント"else_1"の複雑度の計算式内の"if_2"及び"else_2"を、それぞれの複雑度の値「C+D+E+4」及び「F+4」で置き換える（図７のステップＳ５２）。以下、ステップＳ５２を繰り返す。
【０１３３】
複雑度解析部４２は、更に、ステートメント"always_1"の複雑度の計算式内の"else_1"を、その複雑度の値「C+D+E+F+9」で置き換える。
【０１３４】
複雑度解析部４２は、更に、ステートメント"A"及び"B"の複雑度の計算式内の"always_1"を、その複雑度の値「C+D+E+F+15」で置き換える。また、ステートメント"X"の複雑度の計算式内の"A"を、その複雑度の値「C+D+E+F+15」で置き換える。
【０１３５】
複雑度テーブル５０内の全てのステートメントの複雑度から計算式がなくなると、複雑度解析部４２の処理は終了する。計算式の無い値で示された複雑度テーブル５０が記憶部１３０に出力される。この例において、入力名"C"、"D"、"E"、及び"F"は、前段のモジュールからの入力の複雑度を値で示す。
【０１３６】
モジュールの接続に応じて、入力の複雑度が変化する場合について図１８及び図１９で説明する。図１８は、同一モジュールを２か所に実装した回路構成例を示す図である。図１８において、トップモジュールＡは、内部に、モジュールＢと、モジュールＣとを有する。
【０１３７】
モジュールＢは、トップモジュールＡ内において、インスタンス１及び２として２か所に実装されている。インスタンス１及び２のモジュールＢの構成は同一である。モジュールＢの入力は、Bin1、Bin2、Bin3、及びBin4であり、出力は、Bout1、Bout2、Bout3、及びBout4である。
【０１３８】
インスタンス１は、トップモジュールＡの入力端子INPUT1、INPUT2、INPUT3、及びINPUT4の夫々から直接信号を入力し、トップモジュールＡの出力端子OUTPUT1、OUTPUT2、OUTPUT3、及びOUTPUT4の夫々に直接信号を出力する。
【０１３９】
一方、インスタンス２では、前段のモジュールＣに接続される。インスタンス２において、入力Bin1、Bin2、Bin3、及びBin4はモジュールＣから与えられる。出力は、インスタンス１と同様に、トップモジュールＡの出力端子OUTPUT5、OUTPUT6、OUTPUT7、及びOUTPUT8の夫々に直接信号を出力する。
【０１４０】
上述した本実施例における複雑度評価部４０によって複雑度を算出した結果例を図１９で説明する。図１９は、図１８の回路構成における複雑度の算出例を説明するための図である。
【０１４１】
図１９において、モジュールＢのインスタンス１では、前段に接続されるモジュールが存在しない。トップモジュールＡの入力端子INPUT1、INPUT2、INPUT3、及びINPUT4から直接入力される場合、複雑度は、入力Bin1、Bin2、Bin3、及びBin4の全てで値「１」となる。
【０１４２】
インスタンス１の出力Bout1、Bout2、Bout3、及びBout4が、それぞれ複雑度「b1_1」、「b1_2」、「b1_3」、及び「b1_4」であった場合、トップモジュールＡの出力端子OUTPUT1、OUTPUT2、OUTPUT3、及びOUTPUT4の夫々の複雑度は、インスタンス１の出力Bout1、Bout2、Bout3、及びBout4の複雑度「b1_1」、「b1_2」、「b1_3」、及び「b1_4」となる。
【０１４３】
一方、同一モジュールＢであっても、インスタンス２では、モジュールＣの各出力の複雑度がインスタンス２に累積される。モジュールＣの各出力の複雑度「c1」、「c2」、「c3」、及び「c4」が、モジュールＢの入力Bin1、Bin2、Bin3、及びBin4の夫々の複雑度に継承され、インスタンス２の内部で累積される。
【０１４４】
モジュールＢの内部の複雑度に影響されて、インスタンス２の出力Bout1、Bout2、Bout3、及びBout4は、それぞれ複雑度「b2_1」、「b2_2」、「b2_3」、及び「b2_4」となる。
【０１４５】
インスタンス１及びインスタンス２も内部の複雑度は同様であるが、前段に接続されるモジュールＣの複雑度が累積されることにより、同一の出力Bout1であっても、インスタンス１では複雑度は「b1_1」であり、インスタンス２では複雑度は「b2_1」である。他出力についても同様である。
【０１４６】
従って、トップモジュールＡの出力端子OUTPUT1と出力端子OUTPUT5とは複雑度が異なり、出力端子OUTPUT5の複雑度「b2_1」は、出力端子OUTPUT1の複雑度「b1_1」より大きくなる。
【０１４７】
同様に、出力端子OUTPUT5の複雑度「b2_2」は、出力端子OUTPUT1の複雑度「b1_2」より大きくなる。出力端子OUTPUT5の複雑度「b2_3」は、出力端子OUTPUT1の複雑度「b1_3」より大きくなる。出力端子OUTPUT5の複雑度「b2_4」は、出力端子OUTPUT1の複雑度「b1_4」より大きくなる。
【０１４８】
一のトップモジュールＡ内に、同一のモジュールＢを２以上実装した場合、モジュールＢの同一出力であっても複雑度は異なっている。これはハードウェア特有であり、本実施例では、前段における複雑度を内部で累積することで、精度良く複雑度を算出することができる。単に、"always"文、"assign"文、及び"if"文等の組み合せ回路記述文の出現回数をカウントしたのみでは得ることができない。
【０１４９】
本実施例では、各ステートメントを解析し、配線（又は信号）、及び条件の複雑度を考慮するため、ハードウェア記述内のロジックによって駆動される潜在的な重要部分を含めて、ロジックの複雑さを算出可能とする。
【０１５０】
また、ネスティングの段数（nest level）を考慮するため、ネスティングによる構造の複雑さを含めて評価することができる。
【０１５１】
更に、条件内に出現する配線、信号を含めて、ソースファイル３０に出現する全ての配線、信号、及びレジスタに複雑度を与えるため、精度良く複雑度の算出結果を得ることができる。配線、信号、及びレジスタの複雑度を見逃すことがない。
【０１５２】
本発明は、具体的に開示された実施例に限定されるものではなく、特許請求の範囲から逸脱することなく、種々の変形や変更が可能である。
【０１５３】
以上の実施例を含む実施形態に関し、更に以下の付記を開示する。
（付記１）
コンピュータを用いてハードウェア回路の複雑度を評価する方法であって、
前記コンピュータが有するプロセッサが、
前記コンピュータが有するメモリに格納されたハードウェア記述言語により回路を設計したソースファイルから、組み合せ回路記述文の代入型を抽出し、
抽出した前記代入型毎に、前記組み合せ回路記述文に関連する要素の第１の複雑度を取得し、
前記関連に基づいて、前記第１の複雑度を用いて、前記代入型毎の第２の複雑度を取得する
処理をコンピュータが行うことを特徴とするハードウェア回路の複雑度評価方法。
（付記２）
前記要素は、演算記述、条件記述、配線、信号、及びレジスタの少なくとも１以上を含み、
前記プロセッサは、各代入型の前記組み合せ回路記述文に包含される各要素の前記第１の複雑度を合計する
ことを特徴とする付記１記載のハードウェア回路の複雑度評価方法。
（付記３）
前記プロセッサは、前記演算記述に所定の複雑度を与えることを特徴とする付記２記載のハードウェア回路の複雑度評価方法。
（付記４）
前記プロセッサは、
前記ソースファイルにおいて入力端子として定義されている前記要素に対して、所定の複雑度を与えることを特徴とする付記２又は３記載のハードウェア回路の複雑度評価方法。
（付記５）
前記演算記述から、値が設定される先の配線、信号、又はレジスタに相当する要素を抽出し、
前記関連する前記組み合せ回路記述文の前記第２の複雑度を、前記要素の複雑度とする
処理をコンピュータが行うことを特徴とする付記４記載のハードウェア回路の複雑度評価方法。
（付記６）
前記回路の入力に係る要素は、前段の回路の出力の複雑度に置き換えられることを特徴とする付記５記載のハードウェア回路の複雑度評価方法。
（付記７）
ハードウェア記述言語により回路を設計したソースファイルから組み合せ回路記述文の代入型を抽出し、
抽出した前記代入型毎に、前記組み合せ回路記述文に関連する要素の第１の複雑度を取得し、
前記関連に基づいて、前記第１の複雑度を用いて、前記代入型毎の第２の複雑度を取得する
処理をコンピュータに行わせることを特徴とするハードウェア回路の複雑度評価プログラム。
（付記８）
ハードウェア記述言語により回路を設計したソースファイルから組み合せ回路記述文の代入型を抽出して複雑度テーブルを構築するテーブル構築部と、
前記複雑度テーブルに記憶された前記代入型毎に、前記組み合せ回路記述文に関連する要素の第１の複雑度を取得し、前記関連に基づいて、前記第１の複雑度を用いて、前記代入型毎の第２の複雑度を取得する解析部と、
を有することを特徴とする回路設計装置。
【符号の説明】
【０１５４】
１１          ＣＰＵ
１２          主記憶装置
１３          補助記憶装置
１４          入力装置
１５          表示装置
１６          出力装置
１７          通信Ｉ／Ｆ
１８          ドライブ
１９          記憶媒体
３０          ソースファイル
４０          複雑度評価部
４１          複雑度テーブル構築部
４２          複雑度解析部
５０          複雑度テーブル
【図１】
2016081287.tif 000003
【図２】
2016081287.tif 000004
【図３】
2016081287.tif 000005
【図４】
2016081287.tif 000006
【図５】
2016081287.tif 000007
【図６】
2016081287.tif 000008
【図７】
2016081287.tif 000009
【図８】
2016081287.tif 000010
【図９】
2016081287.tif 000011
【図１０】
2016081287.tif 000012
【図１１】
2016081287.tif 000013
【図１２】
2016081287.tif 000014
【図１３】
2016081287.tif 000015
【図１４】
2016081287.tif 000016
【図１５】
2016081287.tif 000017
【図１６】
2016081287.tif 000018
【図１７】
2016081287.tif 000019
【図１８】
2016081287.tif 000020
【図１９】
2016081287.tif 000021