(57)【要約】【課題】  システムの消費電力の削減を実現しつつ、システムの設計の効率の高い設計方法を提供する。【解決手段】  システム設計の高位合成において、プログラムを入力した後、まとまった機能を実現するためのブロックと、複数のＨＷ資源と各ＨＷ資源とを接続する配線との構造を表すＨＷ資源接続グラフとを生成する。ＨＷ資源を登録したデータベースからＨＷ資源の大きさに関する情報を入力して、ＨＷ資源の仮配置を行ない、ブロック間配線における消費電力などに影響するパラメータの配線全体に対する寄与率をブロック間信号線重みとして算出する。ブロック間の配線におけるブロック間信号線重みが閾値以下になるまでブロックの生成をやり直して、ブロック間信号線重みが閾値以下になるとＨＤＬを出力する。上流側の高位合成で、消費電力削減などを考慮したブロック生成により、全体としての設計効率を高める。【選択図】    図１
2004288206.tif 000002
【特許請求の範囲】
【請求項１】
半導体集積回路装置を設計するためのビヘイビア表記を含むアプリケーションプログラムを入力した後、ビヘイビア表記を含むアプリケーションをまとまった機能単位でＨＷ資源の配置を行なうためのブロックの生成と、各ブロック内のＨＷ資源の配置と各ブロック間を接続する配線とを表すＨＷ資源接続グラフとを生成するステップ（ａ）と、
ＨＷライブラリから少なくともＨＷ資源の大きさに関する情報を入力して、上記ＨＷ資源接続グラフ中のＨＷ資源の仮配置を行ない、仮配置情報を出力するステップ（ｂ）と、
上記ブロック間を接続する各配線における消費電力，遅延のうち少なくともいずれか一方に影響するパラメータの比率をブロック間信号線重みとして算出するステップ（ｃ）と、
上記各ブロック間信号線重みが閾値以下か否かを判断するステップ（ｄ）と、
上記各ブロック間信号線重みが閾値以下になると、ＨＤＬで記述したＲＴＬの論理回路を出力するステップ（ｅ）とを含み、
上記ステップ（ｄ）の判断において各ブロック間信号線重みが閾値以下になるまで上記ステップ（ａ）におけるブロックの生成と、上記ステップ（ｂ）〜（ｄ）とを繰り返す半導体集積回路装置の設計方法。
【請求項２】
請求項１記載の半導体集積回路装置の設計方法において、
上記ステップ（ａ）は、
上記アプリケーションプログラムの記述を、タスクを表すブロックに分割するとともに、各タスク間のデータの流れを示す第１のデータフロー図を生成するサブステップ（ａ１）と、
上記アプリケーションプログラムのシミュレーションを行なうサブステップ（ａ２）と、
上記サブステップ（ａ２）で得られた各ブロック間の配線の遷移頻度の比率を第１のブロック間信号線重みとして算出するサブステップ（ａ３）と、
上記初期のブロック間信号線重みが初期の閾値以下か否かを判断するサブステップ（ａ４）と、
上記初期のブロック間信号線重みが上記初期の閾値以下になると、上記第１のデータフロー図中の各ブロックにＨＷライブラリに登録されたＨＷ資源の配置が可能となるように第２のデータフロー図を生成するサブステップ（ａ５）と、
上記第２のデータフロー図中の各ブロックの実行タイミングの決定とＨＷ資源の配置とを行なって上記ＨＷ資源接続グラフを作成するサブステップ（ａ６）とを含み、
上記初期のブロック間信号線重みが上記初期の閾値以下になるまで上記サブステップ（ａ１）におけるブロックの再分割と、上記サブステップ（ａ２）〜（ａ４）とを繰り返すことを特徴とする半導体集積回路装置の設計方法。
【請求項３】
請求項１記載の半導体集積回路装置の設計方法において、
上記ステップ（ａ）は、
上記アプリケーションプログラムの記述を、複数の演算機能からなるモジュールに分割するとともに、各モジュール間のデータの流れを示す第１のデータフロー図を生成するサブステップ（ａ１）と、
上記アプリケーションプログラムのシミュレーションを行なうサブステップ（ａ２）と、
上記サブステップ（ａ２）で得られたモジュール間を接続する配線の消費電力及び遅延のうち少なくともいずれか一方に影響するパラメータの比率を第１のモジュール間信号線重みとして算出するサブステップ（ａ３）と、
上記複数のモジュールを、各々複数のモジュールによって構成される複数のブロックに分割するサブステップ（ａ４）と、
上記第１のデータフロー図中の各モジュールにＨＷライブラリに登録されたＨＷ資源の配置が可能な第２のデータフロー図を生成するサブステップ（ａ５）と、
上記第２のデータフロー図中の各モジュールの実行タイミングの決定とＨＷ資源の割り当てとを行なって上記ＨＷ資源接続グラフを作成するサブステップ（ａ６）とを含み、
上記ステップ（ｃ）では、上記仮配置情報と上記第１のモジュール間信号線重みとから第２のモジュール間信号線重みを算出するとともに、上記ブロック間を接続する配線となるものの第２のモジュール間信号線重みをブロック間信号線重みとすることを特徴とする半導体集積回路装置の設計方法。
【請求項４】
請求項１記載の半導体集積回路装置の設計方法において、
上記ステップ（ａ）は、
上記アプリケーションプログラムの記述を解析して、各動作を実現する演算機能間のデータの流れを、ＨＷライブラリに登録されたＨＷ資源の配置が可能な第１のデータフロー図として生成するサブステップ（ａ１）と、
上記複数の演算機能から各々複数の演算機能により構成されるモジュールを生成するとともに、上記第１のデータフロー図からモジュール間のデータの流れを示す第２のデータフロー図を生成するサブステップ（ａ２）と、
上記アプリケーションプログラムのシミュレーションを行なうサブステップ（ａ３）と、
上記サブステップ（ａ３）で得られたモジュール間を接続する配線の消費電力及び遅延のうち少なくともいずれか一方に影響するパラメータの比率を第１のモジュール間信号線重みとして算出するサブステップ（ａ４）と、
上記複数のモジュールを、各々複数のモジュールによって構成される複数のブロックに分割するサブステップ（ａ５）と、
上記第２のデータフロー図中の各モジュールの実行タイミングとの決定とＨＷ資源の割り当てとを行なって上記ＨＷ資源接続グラフを作成するサブステップ（ａ６）とを含み、
上記ステップ（ｃ）では、上記仮配置情報と上記第１のモジュール間信号線重みとから第２のモジュール間信号線重みを算出するとともに、上記ブロック間を接続する配線となるものの第２のモジュール間信号線重みをブロック間信号線重みとすることを特徴とする半導体集積回路装置の設計方法。
【請求項５】
請求項１記載の半導体集積回路装置の設計方法において、
上記ステップ（ａ）は、
上記アプリケーションプログラムの動作記述を解析して、演算機能間のデータの流れを、ＨＷライブラリに登録されたＨＷ資源を配置することが可能な第１のデータフロー図として生成するサブステップ（ａ１）と、
上記第１のデータフロー図中の各演算機能の実行タイミングとの決定とＨＷ資源の割り当てとを行なって上記ＨＷ資源接続グラフを作成するサブステップ（ａ２）と、
上記複数の演算機能から複数の演算機能により構成されるモジュールを生成するサブステップ（ａ３）と、
上記アプリケーションプログラムのシミュレーションを行なうサブステップ（ａ４）と、
上記サブステップ（ａ３）で得られたモジュール間を接続する配線の消費電力及び遅延のうち少なくともいずれか一方に影響するパラメータの比率を第１のモジュール間信号線重みとして算出するサブステップ（ａ５）と、
上記複数のモジュールを、各々複数のモジュールによって構成される複数のブロックに分割するサブステップ（ａ６）とを含み、
上記ステップ（ｃ）では、上記仮配置情報と上記第１のモジュール間信号線重みとから第２のモジュール間信号線重みを算出するとともに、上記ブロック間を接続する配線となるものの第２のモジュール間信号線重みをブロック間信号線重みとすることを特徴とする半導体集積回路装置の設計方法。
【請求項６】
請求項１〜５のうちいずれか１つに記載の半導体集積回路装置の設計方法において、
上記ステップ（ｅ）の後に、上記ＨＤＬで記述された設計データを用いた論理合成を行なって、上記ブロック及びブロック間の配線構造に関する情報をネットリストにまとめるステップ（ｆ）と、
上記ネットリストを用いた配置配線を行なってレイアウト情報を出力するステップ（ｇ）とをさらに含み、
上記ステップ（ｇ）では、上記ステップ（ｂ）における仮配置の情報と、上記ステップ（ｃ）におけるブロックに関する情報とを位置決定情報として用いて配置配線を行なうことを特徴とする半導体集積回路装置の設計方法。
【請求項７】
請求項３〜５のうちいずれか１つに記載の半導体集積回路装置の設計方法において、
上記ステップ（ｅ）の後に、上記ＨＤＬで記述された設計データを用いた論理合成を行なって、上記モジュール及びモジュール間の配線構造に関する情報をネットリストにまとめるステップ（ｆ）と、
上記ネットリストを用いた配置配線を行なってレイアウト情報を出力するステップ（ｇ）とをさらに含み、
上記ステップ（ｇ）では、上記ステップ（ｂ）における仮配置の情報と、上記ステップ（ｃ）におけるブロックに関する情報とを位置決定情報として用いて配置配線を行ない、
上記ステップ（ｅ）の後、ステップ（ｆ）の前に、ＨＤＬシミュレーションを行なって、その結果得られた情報を上記ステップ（ｃ）にフィードバックすることを特徴とする半導体集積回路装置の設計方法。
【請求項８】
請求項３〜５のうちいずれか１つに記載の半導体集積回路装置の設計方法において、
上記ステップ（ｅ）の後に、上記ＨＤＬで記述された設計データを用いた論理合成を行なって、上記モジュール及びモジュール間の配線構造に関する情報をネットリストにまとめるステップ（ｆ）と、
上記ネットリストを用いた配置配線を行なってレイアウト情報を出力するステップ（ｇ）とをさらに含み、
上記ステップ（ｇ）では、上記ステップ（ｂ）における仮配置の情報と、上記ステップ（ｃ）におけるブロックに関する情報とを位置決定情報として用いて配置配線を行ない、
上記ステップ（ｆ）の後、ステップ（ｇ）の前に、ネットリストを用いた仮配線と、仮配線の結果を用いた仮配線シミュレーションとを行なって、仮配線シミュレーションの結果得られた情報を上記ステップ（ｃ）にフィードバックすることを特徴とする半導体集積回路装置の設計方法。
【請求項９】
請求項３〜５のうちいずれか１つに記載の半導体集積回路装置の設計方法において、
上記ステップ（ｅ）の後に、上記ＨＤＬで記述された設計データを用いた論理合成を行なって、上記モジュール及びモジュール間の配線構造に関する情報をネットリストにまとめるステップ（ｆ）と、
上記ネットリストを用いた配置配線を行なってレイアウト情報を出力するステップ（ｇ）とをさらに含み、
上記ステップ（ｇ）では、上記ステップ（ｂ）における仮配置の情報と、上記ステップ（ｃ）におけるブロックに関する情報とを位置決定情報として用いて配置配線を行ない、
上記ステップ（ｇ）の後、レイアウト情報を用いた実配線シミュレーションを行なって、実配線シミュレーションの結果得られた情報を上記ステップ（ｃ）にフィードバックすることを特徴とする半導体集積回路装置の設計方法。
【請求項１０】
請求項７記載の半導体集積回路装置の設計方法において、
上記ステップ（ｆ）の後、ステップ（ｇ）の前に、ネットリストを用いた仮配線と、仮配線の結果を用いた仮配線シミュレーションとを行なって、仮配線シミュレーションの結果得られた情報を上記ステップ（ｃ）にフィードバックすることを特徴とする半導体集積回路装置の設計方法。
【請求項１１】
請求項７記載の半導体集積回路装置の設計方法において、
上記ステップ（ｇ）の後、レイアウト情報を用いた実配線シミュレーションを行なって、実配線シミュレーションの結果得られた情報を上記ステップ（ｃ）にフィードバックすることを特徴とする半導体集積回路装置の設計方法。
【請求項１２】
請求項８記載の半導体集積回路装置の設計方法において、
上記ステップ（ｇ）の後、レイアウト情報を用いた実配線シミュレーションを行なって、実配線シミュレーションの結果得られた情報を上記ステップ（ｃ）にフィードバックすることを特徴とする半導体集積回路装置の設計方法。
【請求項１３】
請求項１０記載の半導体集積回路装置の設計方法において、
上記ステップ（ｇ）の後、レイアウト情報を用いた実配線シミュレーションを行なって、実配線シミュレーションの結果得られた情報を上記ステップ（ｃ）にフィードバックすることを特徴とする半導体集積回路装置の設計方法。
【請求項１４】
請求項１〜９のうちいずれか１つに記載の半導体集積回路装置の設計方法において、
上記ステップ（ｃ）では、ブロック間配線の配線長の寄与率をブロック間信号線重みとすることを特徴とする半導体集積回路装置の設計方法。
【請求項１５】
請求項１〜９のうちいずれか１つに記載の半導体集積回路装置の設計方法において、
上記ステップ（ｃ）では、ブロック間配線の配線容量の寄与率をブロック間信号線重みとすることを特徴とする半導体集積回路装置の設計方法。
【請求項１６】
請求項１〜９のうちいずれか１つに記載の半導体集積回路装置の設計方法において、
上記ステップ（ｃ）では、ブロック間配線の配線遷移頻度の寄与率をブロック間信号線重みとすることを特徴とする半導体集積回路装置の設計方法。
【請求項１７】
請求項１〜９のうちいずれか１つに記載の半導体集積回路装置の設計方法において、
上記ステップ（ｃ）では、ブロック間配線の配線長及び配線遷移頻度の寄与率をブロック間信号線重みとすることを特徴とする半導体集積回路装置の設計方法。
【請求項１８】
請求項１〜９のうちいずれか１つに記載の半導体集積回路装置の設計方法において、
上記ステップ（ｃ）では、ブロック間配線の配線容量及び配線遷移頻度の寄与率をブロック間信号線重みとすることを特徴とする半導体集積回路装置の設計方法。
【請求項１９】
請求項４又は５記載の半導体集積回路装置の設計方法において、
上記ステップ（ｅ）の後に、上記ＨＤＬで記述された設計データを用いた論理合成を行なって、上記モジュール及びモジュール間の配線構造に関する情報をネットリストにまとめるステップ（ｆ）と、
上記ネットリストを用いた配置配線を行なってレイアウト情報を出力するステップ（ｇ）とをさらに含み、
上記ステップ（ｇ）では、上記ステップ（ｂ）における仮配置の情報と、上記ステップ（ｃ）におけるブロックに関する情報とを位置決定情報として用いて配置配線を行ない、
上記ステップ（ｅ）の後、ステップ（ｆ）の前に、ＨＤＬシミュレーションを行なって、その結果得られた情報を上記サブステップ（ａ１）にフィードバックすることを特徴とする半導体集積回路装置の設計方法。
【請求項２０】
請求項４又は５記載の半導体集積回路装置の設計方法において、
上記ステップ（ｅ）の後に、上記ＨＤＬで記述された設計データを用いた論理合成を行なって、上記モジュール及びモジュール間の配線構造に関する情報をネットリストにまとめるステップ（ｆ）と、
上記ネットリストを用いた配置配線を行なってレイアウト情報を出力するステップ（ｇ）とをさらに含み、
上記ステップ（ｇ）では、上記ステップ（ｂ）における仮配置の情報と、上記ステップ（ｃ）におけるブロックに関する情報とを位置決定情報として用いて配置配線を行ない、
上記ステップ（ｆ）の後、ステップ（ｇ）の前に、ネットリストを用いた仮配線と、仮配線の結果を用いた仮配線シミュレーションとを行なって、仮配線シミュレーションの結果得られた情報を上記サブステップ（ａ１）にフィードバックすることを特徴とする半導体集積回路装置の設計方法。
【請求項２１】
請求項４又は５記載の半導体集積回路装置の設計方法において、
上記ステップ（ｅ）の後に、上記ＨＤＬで記述された設計データを用いた論理合成を行なって、上記モジュール及びモジュール間の配線構造に関する情報をネットリストにまとめるステップ（ｆ）と、
上記ネットリストを用いた配置配線を行なってレイアウト情報を出力するステップ（ｇ）とをさらに含み、
上記ステップ（ｇ）では、上記ステップ（ｂ）における仮配置の情報と、上記ステップ（ｃ）におけるブロックに関する情報とを位置決定情報として用いて配置配線を行ない、
上記ステップ（ｇ）の後、レイアウト情報を用いた実配線シミュレーションを行なって、実配線シミュレーションの結果得られた情報を上記ステップ（ａ１）にフィードバックすることを特徴とする半導体集積回路装置の設計方法。
【請求項２２】
請求項５記載の半導体集積回路装置の設計方法において、
上記ステップ（ｅ）の後に、上記ＨＤＬで記述された設計データを用いた論理合成を行なって、上記モジュール及びモジュール間の配線構造に関する情報をネットリストにまとめるステップ（ｆ）と、
上記ネットリストを用いた配置配線を行なってレイアウト情報を出力するステップ（ｇ）とをさらに含み、
上記ステップ（ｇ）では、上記ステップ（ｂ）における仮配置の情報と、上記ステップ（ｃ）におけるブロックに関する情報とを位置決定情報として用いて配置配線を行ない、
上記ステップ（ｅ）の後、ステップ（ｆ）の前に、ＨＤＬシミュレーションを行なって、その結果得られた情報を上記サブステップ（ａ２）にフィードバックすることを特徴とする半導体集積回路装置の設計方法。
【請求項２３】
請求項４又は５記載の半導体集積回路装置の設計方法において、
上記ステップ（ｅ）の後に、上記ＨＤＬで記述された設計データを用いた論理合成を行なって、上記モジュール及びモジュール間の配線構造に関する情報をネットリストにまとめるステップ（ｆ）と、
上記ネットリストを用いた配置配線を行なってレイアウト情報を出力するステップ（ｇ）とをさらに含み、
上記ステップ（ｇ）では、上記ステップ（ｂ）における仮配置の情報と、上記ステップ（ｃ）におけるブロックに関する情報とを位置決定情報として用いて配置配線を行ない、
上記ステップ（ｆ）の後、ステップ（ｇ）の前に、ネットリストを用いた仮配線と、仮配線の結果を用いた仮配線シミュレーションとを行なって、仮配線シミュレーションの結果得られた情報を上記サブステップ（ａ２）にフィードバックすることを特徴とする半導体集積回路装置の設計方法。
【請求項２４】
請求項４又は５記載の半導体集積回路装置の設計方法において、
上記ステップ（ｅ）の後に、上記ＨＤＬで記述された設計データを用いた論理合成を行なって、上記モジュール及びモジュール間の配線構造に関する情報をネットリストにまとめるステップ（ｆ）と、
上記ネットリストを用いた配置配線を行なってレイアウト情報を出力するステップ（ｇ）とをさらに含み、
上記ステップ（ｇ）では、上記ステップ（ｂ）における仮配置の情報と、上記ステップ（ｃ）におけるブロックに関する情報とを位置決定情報として用いて配置配線を行ない、
上記ステップ（ｇ）の後、レイアウト情報を用いた実配線シミュレーションを行なって、実配線シミュレーションの結果得られた情報を上記サブステップ（ａ２）にフィードバックすることを特徴とする半導体集積回路装置の設計方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は半導体集積回路装置の設計方法に係り、特に、消費電力の削減を図りつつ、設計全体の効率の向上を図るための対策に関する。
【背景技術】
【０００２】
従来より、半導体集積回路装置の設計における高位合成は、半導体集積回路装置の仕様，動作，ＲＴなどについて、半導体集積回路装置の各要素や機能をプログラム言語上で次第に具体化していくという流れに沿って行なわれる。そして、高位合成を経てＨＤＬでまとめられた設計データにしたがって、論理合成が行なわれ論理回路（ネットリスト）が生成された後、配置配線が行なわれる。この段階になると、回路要素や配線が具体的に現れてくるので、シミュレーションによる消費電力，処理速度などの推定を利用した最適化処理が行なわれる。
【０００３】
例えば、回路の動作速度とチップ面積とのトレードオフを考慮した最適化処理などである。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、近年のごとく、システムＬＳＩなどの大規模な半導体集積回路装置が出現すると、論理合成に至るまでの高位合成においてどの程度的確な設計が行なわれているかによって、論理合成後の最適化の度合いが変わってくる。論理合成の前にブロック分割などがほぼ定まっているので、その後の最適化処理によって変更できる自由度は小さいからである。
【０００５】
ところが、従来の半導体集積回路装置の設計においては、高位合成の適否は設計者の熟練に委ねられているのが現状であり、この高位合成における最適化を図る手段が未開発である。そのために、論理合成後の設計の効率化を図る上で大きな障害となっている。
【０００６】
本発明の目的は、高位合成の最適化を図る手段を講ずることにより、設計全体としての効率の向上を図り、特に、低消費電力性の優れた半導体集積回路装置の設計を図ることにある。
【課題を解決するための手段】
【０００７】
本発明の半導体集積回路装置の設計方法は、半導体集積回路装置を設計するためのビヘイビア表記を含むアプリケーションプログラムを入力した後、ビヘイビア表記を含むアプリケーションをまとまった機能単位でＨＷ資源の配置を行なうためのブロックの生成と、各ブロック内のＨＷ資源の配置と各ブロック間を接続する配線とを表すＨＷ資源接続グラフとを生成するステップ（ａ）と、ＨＷライブラリから少なくともＨＷ資源の大きさに関する情報を入力して、上記ＨＷ資源接続グラフ中のＨＷ資源の仮配置を行ない、仮配置情報を出力するステップ（ｂ）と、上記ブロック間を接続する各配線における消費電力，遅延のうち少なくともいずれか一方に影響するパラメータの比率をブロック間信号線重みとして算出するステップ（ｃ）と、上記各ブロック間信号線重みが閾値以下か否かを判断するステップ（ｄ）と、上記各ブロック間信号線重みが閾値以下になると、ＨＤＬで記述したＲＴＬの論理回路を出力するステップ（ｅ）とを含み、上記ステップ（ｄ）の判断において各ブロック間信号線重みが閾値以下になるまで上記ステップ（ａ）におけるブロックの生成と、上記ステップ（ｂ）〜（ｄ）とを繰り返す方法である。
【０００８】
この方法により、設計の上流側である高位合成において、アプリケーションプログラム中の記述や人の経験に基づく判断に基づくブロック分割の代わりに、消費電力や遅延などに影響するパラメータの適正化を定量的に判断しうるブロック分割を効率よく行なうことが可能になる。したがって、下流側ではある程度適正に分割されたブロックを配置して配置配線などを行なうことが可能になるので、設計全体としての効率が向上する。
【０００９】
上記半導体集積回路装置の設計方法において、上記ステップ（ａ）に、上記アプリケーションプログラムの記述を、タスクを表すブロックに分割するとともに、各タスク間のデータの流れを示す第１のデータフロー図を生成するサブステップ（ａ１）と、上記アプリケーションプログラムのシミュレーションを行なうサブステップ（ａ２）と、上記サブステップ（ａ２）で得られた各ブロック間の配線の遷移頻度の比率を第１のブロック間信号線重みとして算出するサブステップ（ａ３）と、上記初期のブロック間信号線重みが初期の閾値以下か否かを判断するサブステップ（ａ４）と、上記初期のブロック間信号線重みが上記初期の閾値以下になると、上記第１のデータフロー図中の各ブロックにＨＷライブラリに登録されたＨＷ資源の配置が可能となるように第２のデータフロー図を生成するサブステップ（ａ５）と、上記第２のデータフロー図中の各ブロックの実行タイミングの決定とＨＷ資源の配置とを行なって上記ＨＷ資源接続グラフを作成するサブステップ（ａ６）とを含ませて、上記初期のブロック間信号線重みが上記初期の閾値以下になるまで上記サブステップ（ａ１）におけるブロックの再分割と、上記サブステップ（ａ２）〜（ａ４）とを繰り返すことにより、まず、アプリケーションに内在する特徴を利用したブロック分割のおおまかな最適化を行った後、さらに仮配置情報を利用した細やかなブロック再分割を行なうことになる。したがって、２段階のブロック分割によるブロック分割の効率の向上を図ることができる。
【００１０】
上記半導体集積回路装置の設計方法において、上記ステップ（ａ）に、上記アプリケーションプログラムの記述を、複数の演算機能からなるモジュールに分割するとともに、各モジュール間のデータの流れを示す第１のデータフロー図を生成するサブステップ（ａ１）と、上記アプリケーションプログラムのシミュレーションを行なうサブステップ（ａ２）と、上記サブステップ（ａ２）で得られたモジュール間を接続する配線の消費電力及び遅延のうち少なくともいずれか一方に影響するパラメータの比率を第１のモジュール間信号線重みとして算出するサブステップ（ａ３）と、上記複数のモジュールを、各々複数のモジュールによって構成される複数のブロックに分割するサブステップ（ａ４）と、上記第１のデータフロー図中の各モジュールにＨＷライブラリに登録されたＨＷ資源の配置が可能な第２のデータフロー図を生成するサブステップ（ａ５）と、上記第２のデータフロー図中の各ブロックの実行タイミングの決定とＨＷ資源の割り当てとを行なって上記ＨＷ資源接続グラフを作成するサブステップ（ａ６）とを含ませて、上記ステップ（ｃ）では、上記仮配置情報と上記第１のモジュール間信号線重みとから第２のモジュール間信号線重みを算出するとともに、上記ブロック間を接続する配線となるものの第２のモジュール間信号線重みをブロック間信号線重みとすることにより、まず、ブロックを構成するモジュールという小さな回路単位の生成し、さらに、生成された複数のモジュールを組み合わせてブロックを生成するので、ブロック生成やモジュール生成の際の制約が緩やかになり、第１のＣＤＦＧからモジュールやブロックを最適に生成できる。
【００１１】
上記半導体集積回路装置の設計方法において、上記ステップ（ａ）に、上記アプリケーションプログラムの記述を解析して、各動作を実現する演算機能間のデータの流れを、ＨＷライブラリに登録されたＨＷ資源の配置が可能な第１のデータフロー図として生成するサブステップ（ａ１）と、上記複数の演算機能から各々複数の演算機能により構成されるモジュールを生成するとともに、上記第１のデータフロー図からモジュール間のデータの流れを示す第２のデータフロー図を生成するサブステップ（ａ２）と、上記アプリケーションプログラムのシミュレーションを行なうサブステップ（ａ３）と、上記サブステップ（ａ３）で得られたモジュール間を接続する配線の消費電力及び遅延のうち少なくともいずれか一方に影響するパラメータの比率を第１のモジュール間信号線重みとして算出するサブステップ（ａ４）と、上記複数のモジュールを、各々複数のモジュールによって構成される複数のブロックに分割するサブステップ（ａ５）と、上記第２のデータフロー図中の各モジュールの実行タイミングとの決定とＨＷ資源の割り当てとを行なって上記ＨＷ資源接続グラフを作成するサブステップ（ａ６）とを含ませて、上記ステップ（ｃ）では、上記仮配置情報と上記第１のモジュール間信号線重みとから第２のモジュール間信号線重みを算出するとともに、上記ブロック間を接続する配線となるものの第２のモジュール間信号線重みをブロック間信号線重みとすることにより、モジュール生成の前に、いわゆるトランスフォーメーションを行なうことで、モジュール生成に際してトランスフォーメーションによる最適化を加味することができる。
【００１２】
上記半導体集積回路装置の設計方法において、上記ステップ（ａ）に、上記アプリケーションプログラムの動作記述を解析して、演算機能間のデータの流れを、ＨＷライブラリに登録されたＨＷ資源を配置することが可能な第１のデータフロー図として生成するサブステップ（ａ１）と、上記第１のデータフロー図中の各演算機能の実行タイミングとの決定とＨＷ資源の割り当てとを行なって上記ＨＷ資源接続グラフを作成するサブステップ（ａ２）と、上記複数の演算機能から複数の演算機能により構成されるモジュールを生成するサブステップ（ａ３）と、上記アプリケーションプログラムのシミュレーションを行なうサブステップ（ａ４）と、上記サブステップ（ａ３）で得られたモジュール間を接続する配線の消費電力及び遅延のうち少なくともいずれか一方に影響するパラメータの比率を第１のモジュール間信号線重みとして算出するサブステップ（ａ５）と、上記複数のモジュールを、各々複数のモジュールによって構成される複数のブロックに分割するサブステップ（ａ６）とを含ませて、上記ステップ（ｃ）では、上記仮配置情報と上記第１のモジュール間信号線重みとから第２のモジュール間信号線重みを算出するとともに、上記ブロック間を接続する配線となるものの第２のモジュール間信号線重みをブロック間信号線重みとすることにより、モジュール生成及びブロック生成が、いわゆるトランスフォーメーション，バインディングなどによる情報を利用して行なわれるので、モジュール生成に際してトランスフォーメーション及びバインディングによる最適化を加味することができる。
【００１３】
上記ステップ（ｅ）の後に、上記ＨＤＬで記述された設計データを用いた論理合成を行なって、上記ブロック及びブロック間の配線構造に関する情報をネットリストにまとめるステップ（ｆ）と、上記ネットリストを用いた配置配線を行なってレイアウト情報を出力するステップ（ｇ）とをさらに含ませて、上記ステップ（ｇ）では、上記ステップ（ｂ）における仮配置の情報と、上記ステップ（ｃ）におけるブロックに関する情報とを位置決定情報として用いて配置配線を行なうことにより、高位合成で分割されたブロックを配置して迅速な配置配線を行なうことが可能になる。
【００１４】
上記ステップ（ｅ）の後に、上記ＨＤＬで記述された設計データを用いた論理合成を行なって、上記モジュール及びモジュール間の配線構造に関する情報をネットリストにまとめるステップ（ｆ）と、上記ネットリストを用いた配置配線を行なってレイアウト情報を出力するステップ（ｇ）とをさらに含みませて、上記ステップ（ｇ）では、上記ステップ（ｂ）における仮配置の情報と、上記ステップ（ｃ）におけるブロックに関する情報とを位置決定情報として用いて配置配線を行ない、上記ステップ（ｅ）の後、ステップ（ｆ）の前に、ＨＤＬシミュレーションを行なって、その結果得られた情報を上記ステップ（ｃ）にフィードバックすることにより、ＨＤＬデータを利用した情報に基づいて、より適正なブロック分割を行なうことができる。
【００１５】
上記ステップ（ｅ）の後に、上記ＨＤＬで記述された設計データを用いた論理合成を行なって、上記モジュール及びモジュール間の配線構造に関する情報をネットリストにまとめるステップ（ｆ）と、上記ネットリストを用いた配置配線を行なってレイアウト情報を出力するステップ（ｇ）とをさらに含ませて、上記ステップ（ｇ）では、上記ステップ（ｂ）における仮配置の情報と、上記ステップ（ｃ）におけるブロックに関する情報とを位置決定情報として用いて配置配線を行ない、上記ステップ（ｆ）の後、ステップ（ｇ）の前に、ネットリストを用いた仮配線と、仮配線の結果を用いた仮配線シミュレーションとを行なって、仮配線シミュレーションの結果得られた情報を上記ステップ（ｃ）にフィードバックすることにより、仮配線情報に基づいて、より適正なブロック分割を行なうことができる。
【００１６】
上記ステップ（ｅ）の後に、上記ＨＤＬで記述された設計データを用いた論理合成を行なって、上記モジュール及びモジュール間の配線構造に関する情報をネットリストにまとめるステップ（ｆ）と、上記ネットリストを用いた配置配線を行なってレイアウト情報を出力するステップ（ｇ）とをさらに含ませて、上記ステップ（ｇ）では、上記ステップ（ｂ）における仮配置の情報と、上記ステップ（ｃ）におけるブロックに関する情報とを位置決定情報として用いて配置配線を行ない、上記ステップ（ｇ）の後、レイアウト情報を用いた実配線シミュレーションを行なって、実配線シミュレーションの結果得られた情報を上記ステップ（ｃ）にフィードバックすることにより、実配線情報に基づいて、より適正なブロック分割を行なうことができる。
【００１７】
また、上記ＨＤＬシミュレーションの結果得られた情報，仮配線シミュレーションの結果得られた情報，実配線シミュレーションの結果得られた情報のうちいずれか２つ以上の情報をフィードバックすることがより好ましい。
【００１８】
上記ステップ（ｃ）では、ブロック間配線の配線長の寄与率をブロック間信号線重みとすることにより、遅延を考慮したブロック分割を行なうことが可能となる。
【００１９】
上記ステップ（ｃ）では、ブロック間配線の配線容量の寄与率をブロック間信号線重みとすることにより、消費電力の削減を考慮したブロック分割を行なうことができる。
【００２０】
上記ステップ（ｃ）では、ブロック間配線の配線遷移頻度の寄与率をブロック間信号線重みとすることによっても、消費電力の削減を考慮したブロック分割を行なうことができる。
【００２１】
上記ステップ（ｃ）では、ブロック間配線の配線長及び配線遷移頻度の寄与率や、配線容量及び配線遷移頻度の寄与率をブロック間信号線重みとすることがより好ましい。
【００２２】
また、上記ＨＤＬシミュレーションの結果得られた情報，仮配線シミュレーションの結果得られた情報，実配線シミュレーションの結果得られた情報などを、上記ステップ（ａ）中のサブステップ（ａ１）にフィードバックすることにより、下流側でのシミュレーション結果を利用して最適なトランスフォーメーションを行なってからブロック分割を行なうことができる。
【００２３】
また、上記ＨＤＬシミュレーションの結果得られた情報，仮配線シミュレーションの結果得られた情報，実配線シミュレーションの結果得られた情報などを、上記ステップ（ａ）中のサブステップ（ａ２）にフィードバックすることにより、下流側でのシミュレーション結果を利用して最適なアロケーション，バインディングを行なってからブロック分割を行なうことができる。
【発明の効果】
【００２４】
本発明の半導体集積回路装置の設計方法によれば、ビヘイビア表記を含むアプリケーションプログラムを入力した後、ブロック，ＨＷ資源接続グラフを生成してから、ＨＷ資源接続グラフ中のＨＷ資源の仮配置を行なうとともに、ブロック間を接続する各配線における消費電力，遅延のうち少なくともいずれか一方に影響するパラメータの比率をブロック間信号線重みとして算出し、各ブロック間信号線重みが閾値以下になるまでブロックの再分割をおこなってから、ＲＴレベルの記述を含むＨＤＬを出力するようにしたので、設計の上流側である高位合成において、アプリケーションプログラム中の記述や人の経験に基づく判断に基づくブロック分割の代わりに、消費電力や遅延などに影響するパラメータの適正化を定量的に判断しうるブロック分割を効率よく行なうことができ、よって、設計全体としての効率の向上を図ることができる。
【発明を実施するための最良の形態】
【００２５】
実施形態の説明に入る前に、本発明において利用する“高位合成”の概念について説明する。
【００２６】
−高位合成の基本的な流れ−
図１（ａ）は、本発明で利用する高位合成の流れを示すフローチャートである。図１（ｂ）〜（ｅ）は、各ステップにおいて出力されるデータの一例を示す図である。
【００２７】
まず、動作仕様設計により、アプリケーションが得られる。図１（ｂ）は、このときのＣ言語プログラムの例を示す例である。この例では、ａ，ｂ，ｃ，ｄ，ｘ，ｙ，ｚを入力し、ｘ＝ａ×ｂ，ｙ＝ｃ×ｄ，ｚ＝ｘ＋ｙの演算を行なう関数main（）に関する記述が含まれているとする。Ｃ言語などのプログラムは、ビヘイビア（動作）を表す記述（動作記述）を含んでおり、このようなビヘイビアが記述されたプログラムをビヘイビア表記（アプリケーションプログラム）ともいう。
【００２８】
次に、トランスフォーメーションにより、ビヘイビア表記中の記述を解析して、演算数や段数の削減、ループの展開などのハードウエア化に向けた適合化処理を行ない、その結果得られるデータの流れとそのデータに対する処理とをアーク（データの流れの方向を示す矢印）とノードで表すＣＤＦＧ（コントロールデータフローグラフ）に変換する。この例では、図１（ｃ）に示すように、アークで示す各データの流れと、データａとｂとの加算処理を示すノード１と、データｃとｄとの加算処理を示すノード２と、ノード１とノード２との処理で得られる結果同士の乗算処理を示すノード３とが現れている。
【００２９】
次に、スケジューリングにより、ＣＤＦＧ中の各処理部分（ノード）を時間軸上の各クロック・サイクルに割り当てて、各処理の実行タイミング（step）を決定する。この例では、図１（ｄ）に示すように、まず、step１でノード１の処理を行ない、次に、step２でノード２の処理を行なってから、step３でノード３の処理を行なうように決定される。
【００３０】
次に、アロケーションにより、ＨＷ資源（演算器）を格納しているライブラリから、それぞれの処理の種類に応じた種類のＨＷ資源を各ノードに割り当てる。この例では、図１（ｅ）に示すように、ノード１，２には乗算器（ＭＰＹ）が割り当てられ、ノード３には加算器（ＡＤＤ）が割り当てられる。このように、ＣＤＦＧ中のノードに演算器が割り当てられたフローグラフを、ＨＷ資源接続グラフという。
【００３１】
次に、バインディングにより、ＨＷ資源の最終的な接続関係を決定する。このとき、アロケーションで割り当てられたＨＷ資源をそのまま接続したのでは、回路面積が膨大なものとなるので、共有できるＨＷ資源は共有し、できるだけシステムを簡素にする。この例では、図１（ｆ）に示すように、ノード１，２に割り当てられた各乗算器（ＭＰＹ）が同じタイミングで動作しないようにスケジューリングされているので、共通のＨＷ資源である乗算器（ＭＰＹ１）を利用することができる。そして、データａ，ｂ，ｃ，ｄや乗算結果を保持するためのレジスタや、乗算器（ＭＰＹ１）などへのデータの入力を切り換えるマルチプレクサを配置することにより、図１（ｂ）に示すＣ言語プログラム中の関数main（）の機能を実現するための回路を生成する。
【００３２】
そして、最終的に生成された回路は、ハードウエア記述言語であるＨＤＬによるＲＴＬ（レジスタ・トランスファー・レベル）の論理情報の記述として出力される。代表的なＨＤＬとしては、例えば、Verilog-ＨＤＬやＶＨＤＬなどがある。そして、高位合成によって出力されたＨＤＬ記述には、後述するように、高位合成によって分割されたブロックや階層構造の情報が含まれている。
【００３３】
次に、上述のトランスフォーメーション，スケジューリング，アロケーション，バインディングなどの処理内容について、もう少し詳細に説明する。
【００３４】
−トランスフォーメーション−
図２（ａ）〜（ｄ）は、トランスフォーメーションの過程を示す図である。上述のように、トランスフォーメーションとは、ビヘイビア表記（アプリケーションプログラム）中の動作記述を、ハードウエア化に向けた適合化処理を施し、ＣＤＦＧに変形する作業である。
【００３５】
そのために、例えば、図２（ａ）に示すように、分配則や交換則を活用して演算数や段数の削減を行なう。例えば、分配則を利用して、“Ａ×Ｂ＋Ａ×Ｃ”を“Ａ（Ｂ＋Ｃ）”と変形することにより、演算数つまり乗算の回数を低減することができる。また、交換則を利用して、“（（Ａ＋Ｂ）＋Ｃ）＋Ｄ”を“（Ａ＋Ｂ）＋（Ｃ＋Ｄ）”と変形することにより、段数を３段から２段に低減することができる。
【００３６】
また、図２（ｂ）に示すように、設計の階層化・非階層化を行なう。例えば、処理１，２，３を含む関数FunctionＡがある場合、この関数FunctionＡを、処理１を行なうFunctionＢと、処理２を行なうFunctionＣと、処理３を行なうFunctionＤと、FunctionＢ，Ｃ，Ｄを統合したFunctionＡとに階層化する。逆に、階層化されたFunctionＡ−FunctionＢ，Ｃ，Ｄがある場合に、これを単一のFunctionＡにして非階層化することも行なう。
【００３７】
また、図２（ｃ）に示すように、ループの展開を行なう。例えば、３つのデータ列に対して、処理Ａの入力を切り替えて処理する場合、３つの処理Ａを並列に配置してそれぞれ３つの流れでデータの処理を行なうように展開する。
【００３８】
また、図２（ｄ）に示すように、乗算，加算などの処理を表すノードと、各ノードに対するデータの流れとを示すＣＤＦＧ（コントロールデータフローグラフ）がトランスフォーメーションの結果として出力される。これらの処理は、必ずしも図２（ａ）〜（ｄ）の順に行なう必要はなく、適宜順序を変更し、又は図２（ａ）〜（ｄ）中の複数の処理を同時に行なうことが可能である。
【００３９】
−スケジューリング−
上述のように、スケジューリングとは動作記述中の各演算を実行するタイミングを決定することを言うが、スケジューリングを大きく分けると、時間を制約するものと、ＨＷ資源を制約するものとの２つに分類される。
【００４０】
スケジューリングのアルゴリズムには、ＡＳＡＰスケジューリング，ＡＬＡＰスケジューリング，リストスケジューリング，Force Directedスケジューリング，整数計画法などがある。
【００４１】
また、スケジューリングアルゴリズムを拡張するものとして、パイプライン化スケジューリング，マルチサイクル演算，演算のチェイニング，パイプライン化演算器，条件文のスケジューリング，投機的実行などがある。
【００４２】
スケジューリングの例を挙げると、図３（ａ）に示すＣＤＦＧが入力された場合に、図３（ｂ）に示すように、ノード１の処理はstep１で、ノード２の処理はstep２で、ノード３，４の処理はstep３で、ノード５の処理はstep４で行なわれるような組立となっている。
【００４３】
図４（ａ），（ｂ）は、パイプライン化スケージューリングの一例を説明するための図である。図４（ａ）に示すノード１の処理を行なってからノード２を行なう処理を複数回繰り返すという記述がある場合、そのiteration （繰り返し処理）間の依存関係を解析し、依存関係がなければパイプライン化が可能であるので、各iteration 間で演算をオーバーラップして実行するようにスケジューリングを行なう。例えば、図４（ｂ）に示すように、step１，２でノード１Ａから２Ａの処理を行ない、step２，３でノード１Ｂからノード２Ｂの処理を行ない、step３，４でノード１Ｃからノード２Ｃの処理を行なうことで、各処理を直列的に行なうのに比べて、スループットの向上を図ることができる。
【００４４】
−アロケーション−
上述のように、アロケーションとは、ＣＤＦＧ中のノードに適当なＨＷ資源を割り当てることを言い、アロケーションによりＨＷ資源接続グラフが生成される。このとき、ＨＷ資源の種類と数とが決定される。ただし、ＨＷ資源はあらかじめライブラリに登録済みのものを用い、性能とコストのトレードオフを考慮する必要がある。
【００４５】
図５（ａ）〜（ｃ）は、アロケーションの過程を説明するための図である。図５（ａ）に示すように、スケジューリングによってＣＤＦＧ中の乗算処理や加算処理を行なうノードの実行タイミングが決まっている。次に、図５（ｂ）に示すように、Module Libraryから乗算器（ＭＰＹ）や加算器（ＡＤＤ）などの演算器を取り出して、図５（ｃ）に示すように、各ノードに乗算器や加算器を割り当てる。この過程によって、ＨＷ資源接続グラフが生成される。
【００４６】
−バインディング−
上述のように、バインディングとは最終的なＨＷ資源の接続関係を決定することを言う。
【００４７】
図６（ａ），（ｂ）は、バインディングの過程を説明するための図である。例えば、アロケーションにより、図６（ａ）に示すように乗算器（ＭＰＹ），加算器（ＡＤＤ）などがノードに割り当てられたＨＷ資源接続グラフが入力されたとする。このとき、図６（ｂ）に示すように、３回の乗算については共有できるＨＷ資源である乗算器（ＭＰＹ）を共有し、データにレジスタを割り当てるとともに、演算器−レジスタ間でデータを転送するためのバスも生成する。これによって、最終的な回路構造が現れた状態となっている。
【００４８】
また、バインディング終了時点で使用するＨＷ資源が決定されることから、ＨＷ資源情報により、各ブロックの大きさやブロック間距離を高位合成において最終的に見積もることができる。
【００４９】
図７（ａ），（ｂ）は、それぞれブロックの大きさとブロック間距離とを見積もる方法を示す図である。図７（ａ）に示すように、システムがブロックＡ〜Ｆに分割されているとする。そして、図７（ｂ）に示すように、ブロックＡ，Ｂをそれぞれ１辺の長さがｌA ，ｌB の正方形と仮定して、ブロックＡ−Ｂ間の中心距離をｌABとする。ただし、ｌAB＞（ｌA ＋ｌB ）／２とする。また、ブロックＡの各辺をＵA ，ＤA ，ＲA ，ＬA とし、ブロックＢの各辺をＵB ，ＤB ，ＲB ，ＬB とする。
【００５０】
このとき、ブロックＡ−Ｂ間を接続する配線は、辺ＲA と辺ＬB 間で接続されているものとする。そこで、配線のピン位置情報として、辺ＲA と辺ＬB とを位置決定情報に与える。また、ブロックＡの辺ＤＡ に対向するブロック（例えばＣ）に接続される配線も同様に位置決定情報を与える。ただし、配線情報による配線の優先順位がある場合には、優先順位の高い方からピン位置情報として、ＲA1，ＲA2，…ＲAnを位置決定情報に与える。さらに、配線の重みも計算されていれば、これも付加する。
【００５１】
ここで、各ブロックの位置は、基準となるブロック（例えばブロックＡ）を選択し、ブロックＡの辺ＵA と辺ＬA とが交わるコーナーを原点とする。その後、各ブロックＡ〜Ｆの中心の座標位置を当該ブロックの位置情報として位置決定情報に付加する。例えば、ブロックＡの座標位置は（ｌA ／２，ｌA ／２）であり、ブロックＢの座標位置は（（ｌA ／２）＋ｌAB，ｌB ／２）である。
【００５２】
−高位合成後の設計−
高位合成が終了した後のＨＤＬには、設計対象となるシステムの内容がＲＴＬで記述されているが、このシステムは以下のような回路単位（要素）によって構成されている。
【００５３】
すなわち、複数の演算器がまとまって１つのモジュールが構成されている。ここでいうモジュールとは、複数の演算器からなる単一機能を実現するための回路単位である。単一機能とは、例えば、アドレス生成，誤り訂正などをいう。
【００５４】
また、ここでは、複数のモジュールがまとまったものをブロックという。ブロックとは、複数のモジュールからなる複合機能を実現するための回路単位をいい、例えばプロセッサや、プロセッサ（ＳＷ）による処理では満足な性能が得られない処理を専用のＨＷで実現したエンジンなどが１つのブロックを構成する。次に、ＨＤＬ中のＲＴＬで記述された論理ブロックを、その機能を実現するために適したマクロセルの組み合わせによって構成されるネットリストに変換するための論理合成を行なう。この処理は、一般に自動論理合成ツールを用いて行なわれる。自動論理合成用ツールとして、Verilog-ＨＤＬ，ＶＨＤＬを入力データとする各種のツールが開発されている。論理合成で生成されたネットリストは、実際に使用するマクロセルとマクロセル間の接続情報とによって構成されている。
【００５５】
次に、ネットリストの情報を用いた配置配線（レイアウト設計）を行なう。図８は、配置配線の手順の一例を概略的に示すフローチャートである。
【００５６】
まず、ブロック位置情報に含まれるブロックのピン位置情報によりピン位置を決定する。次に、各ブロック内のレイアウト（配置配線）などを行なう。次に、ブロック位置情報に含まれるブロックの座標に基づいて、各ブロックの配置を行なう。
【００５７】
ブロック配置を行なった後、ブロック間配線を行なう。その際、配線領域面積の不足などによって配線処理が終了しないときには、位置決定情報の座標を考慮し、また、配線の優先順位（又は重み）がある場合はこれも考慮しながら、ブロック間を広げてブロックを再配置し、ブロック間配線をやり直す。
【００５８】
以上が、本発明における各実施形態の前提となる半導体集積回路装置の設計手順の概略である。以下、本発明の特徴部分を有する各実施形態について説明する。
【００５９】
（第１の実施形態）
本実施形態においては、ビヘイビア表記（アプリケーションプログラム）に対して、おおまかなブロック分割を行なった後、高位合成においてブロック分割の適否をチェックすることにより、ブロック間信号線の消費電力や遅延を適正に保持した状態で下流側の設計に進む方法について説明する。
【００６０】
図９は本実施形態における半導体集積回路装置の設計方法の手順を示すフローチャートである。
【００６１】
まず、ステップＳＴ１１で、データベースからビヘイビア表記されたプログラムを取り込んで、プログラム中の字句，構文の解析を行なって、ビヘイビア表記の誤りと、ビヘイビア表記で表されているシステムに含まれる機能とを調べる。この誤り検出は、一般的なコンパイラなどと同様の処理によって自動的に行なわれる。このシステムに含まれる機能とは、一定の機能を果たしている関数の組み合わせ、もしくは関数単体で表現されているものであって、字句，構文解析等によって検出される。そして、この機能を解析情報として記憶装置に格納しておく。
【００６２】
次に、ステップＳＴ１２で、ビヘイビア表記と解析情報とを利用し、ブロックを生成する（ブロック分割）。そして、ある程度のブロックの接続関係を示す第１のＣＤＦＧ（タスクグラフ）がデータベースに格納される。このときの当初のブロック分割と、後述するフィードバックを受けたときのブロック分割（再分割）との相違については、後に図２５（ａ），（ｂ）を参照しながら説明する。
【００６３】
図１０（ａ），（ｂ）は、このときに生成される第１のＣＤＦＧ及び各ノードの内容を示す図である。この第１のＣＤＦＧは、上述の図１（ｃ）又は図２（ｄ）に示すＣＤＦＧ（本実施形態における第２のＣＤＦＧ）とは異なり、ノード１〜４には演算処理ではなくtask０〜３（タスク）が配置されている。各タスク（プロセス）は、図１０（ｂ）に示すように、プログラム中の複数の関数functionによって構成されている。このタスクは、例えば“データ圧縮”というように、いくつかの演算処理によって独立処理される１つのまとまった機能を果たすものである。すなわち、ステップＳＴ１２においては、図１０（ａ）に示すようなタスクをブロックとして分割する。
【００６４】
次に、ステップＳＴ１３で、第１のＣＤＦＧを取り込んで、実際のアプリケーションを動作させるアプリケーションレベルシミュレーションを行なう。このアプリケーションレベルシミュレーションにより、ブロック間信号線の遷移頻度と、アクティブ率とがわかる。
【００６５】
次に、ステップＳＴ１４で、アプリケーションシミュレーションによって明らかになったプロファイル情報から算出される各ブロック間の信号線の重みを第１のブロック間信号線重みＷとして算出する。最初のステップＳＴ１２では、重みＷとして何らかの初期値（例えば一律の値）が与えられているが、このアプリケーションシミュレーションによって、図１０（ａ）に示すように、実際の重みＷ１〜Ｗ３が算出可能になる。つまり、task０〜task４をブロックとしたときに、実際に処理してどのような計算を何回行なったのか、どのようなデータがどれぐらい転送されているのかということがプロファイル情報として得られるので、このブロック間の信号の遷移頻度（アクティブ率を含む）の関数として重みＷを算出する。この重みの具体的な計算方法については、図２６（ａ），（ｂ）を参照しながら後に説明する。ここでは、Ｗ＝Ｆ（配線遷移頻度）となっている。
【００６６】
次に、ステップＳＴ１５で、第１のブロック間信号線重みが適正か否かを判断する。この判断は、例えば、各信号線における第１のブロック間信号線重みＷを予め定められた第１の閾値と比較することで行なわれる。すなわち、ある信号線の第１のブロック間信号線重みＷが第１の閾値を越えていれば（ＮＧ）、その部分の電力消費が大きくなるおそれがあるので、ブロックをもう少し細かく分けるような処理、あるいはブロックの分け方を変更するような処理を行なう必要がある。そこで、ステップＳＴ１２に戻って、ブロックの生成をやり直す（ブロック再分割）。
【００６７】
次に、ステップＳＴ１５における判断で第１のブロック間信号線重みがすべて第１の閾値を越えていないときには（ＯＫ）、ステップＳＴ１６に進んで、第１のＣＤＦＧを取り込んで上述のトランスフォーメーションを行なう。このトランスフォーメーションによって、上述の図１（ｃ）又は図２（ｄ）に示すような第２のＣＤＦＧが生成される。この段階では、各タスク内部はＣＤＦＧにより表現されており、各ノードには演算器が入った状態である。次に、ステップＳＴ１７で、スケジューリングを行ない、第２のＣＤＦＧ中の処理（ノード）の実行タイミングをクロック・サイクルに割り当てて、図１（ｄ）又は図３（ｂ）に示す第３のＣＤＦＧを生成する。
【００６８】
次に、ステップＳＴ１８で、ＨＷライブラリ中のＨＷ規模情報を取り込んで、第３のＣＤＦＧから上述のアロケーションを行なう。これにより、図１（ｅ）又は図５（ｃ）に示すような第１のＨＷ資源接続グラフが生成される。
【００６９】
次に、ステップＳＴ１９で、第１のＨＷ資源接続グラフから上述のバインディングを行なう。このとき、上述のように共有できるＨＷ資源があるときは共有して、図１（ｆ）又は図６（ｂ）に示すような第２のＨＷ資源接続グラフを生成するとともに、第２のＨＷ資源接続グラフ中の各ＨＷ資源を制御するステートマシーンを生成する。
【００７０】
次に、ステップＳＴ２０で、仮フロアプランを行なう。フロアプランとは、チップ内でどのようにブロックを配置するかを検討し、決定する処理をいう。そして、仮フロアプランとは、予め登録されているＨＷライブラリ中のＨＷ規模情報を抽出し、ブロックの大きさを仮見積もりし、ブロックの仮配置を行なうことにより、ブロック間の距離を算出する処理をいう。本実施形態においては、すでに説明した図７（ａ），（ｂ）に示す方法によって、ＨＷライブラリからＨＷ規模情報を取り込んで、第２のＨＷ資源接続グラフ中の各ＨＷ資源間の距離を求める。そして、第２のＨＷ資源接続グラフ中の各ＨＷ資源の仮配置を行ない、仮配置情報を出力する。このとき、ＨＷ資源間の距離は、ほぼ配線長の大まかな目安となる。
【００７１】
そして、ステップＳＴ２１で、仮配置情報に基づいて、ブロック間配線の重みの判断に、ある程度のブロック間距離からわかる配線長，配線容量などを含めた第２のブロック間信号線重みＷ’を算出する。この計算方法の例については、後述する。
【００７２】
次に、ステップＳＴ２２で、第２のブロック間信号線重みＷ’が適正か否かを判断する。すなわち、ステップＳＴ１５におけると同様に、第２のブロック間信号線重みＷ’が第２の閾値よりも小さいか否かを判断し、すべての第２のブロック間信号線重みＷ’が第２の閾値よりも小さければ（ＯＫ）、ステップＳＴ２３に進んでＨＤＬを出力する。
【００７３】
一方、第２のブロック間信号線重みＷ’のうちの１つでも第２の閾値以上であれば（ＮＧ）、ステップＳＴ１２に戻ってブロックの生成をやり直す。本実施形態では、例えば図１０（ａ）に示すtask０とtask１とをまとめて１つのブロックとしたり、task０中の一部の関数functionを他のtask２内に組み込む。このように、ブロックの組み立て方を変更することにより、ブロック間距離を変更してから、再びステップＳＴ１３〜ＳＴ２２の処理を実行する。
【００７４】
このとき、ステップＳＴ１２に戻る前に、第２の閾値を緩和するように変更するステップを経てからステップＳＴ１２に戻るようにしてもよい。第２の閾値の変更は、例えば初期の第２の閾値からある一定比率で大きくするように設定しておけば自動的に行なうことができる。
【００７５】
本実施形態によると、以下の効果を発揮することができる。
【００７６】
一般に、信号線の消費電力は、信号の遷移頻度，配線容量（配線長に比例），電源電圧，動作周波数などによって定まることが知られている。また、配線の遅延は配線長の関数となることも知られている。したがって、上流側の設計である高位合成においては、まだ配置配線が行なわれておらず配線長などが定まっていないことから、従来、信号線の消費電力や遅延を考慮した設計は行なわれていない。したがって、下流側の設計において、配置配線を行なってから初めて、一部の信号線の消費電力や遅延が過大であることなどがわかると、上流側に戻って高位合成をやり直していた。そのため、高位合成の頻繁なやり直しを回避するためには、設計者の経験と能力が必要であった。
【００７７】
それに対し、本実施形態では、システムのビヘイビア表記のレベルで表現されたブロック分割（生成）や人間の経験に基づくブロック分割にとらわれることなく、アプリケーションに内在する特徴，つまりブロック間の通信量，仮フロアプランの結果得られる配線長に対する定量的なブロック分割のための情報を得て、消費電力や遅延の低減の観点からブロック分割（及び再分割）を行なうことにより、消費電力の低減や遅延の低減を図りつつ効率のよいブロック分割を行なうことができる。すなわち、一般的には、ブロック間信号線の長さはブロック内信号線の長さよりも長いので、ブロック間信号線重みを考慮したブロック分割を行なうことにより、消費電力の削減効果などを高めることができる。
【００７８】
すなわち、ステップＳＴ１２で、ビヘイビア表記の機能に沿ったブロック分割を行なっているが、その後、ステップＳＴ１４で、配線長までは考慮しなくても、信号の遷移頻度から重みを算出し、ステップＳＴ１５でブロック間信号線重みの適正を判断を行なってからステップＳＴ１２のブロック生成をやり直すフローを繰り返すので、ステップＳＴ１５の段階で、ある程度ブロック間信号線の消費電力や遅延が過大にならないように適正なブロック分割が行なわれる。したがって、トランスフォーメーション以下の処理で、第２のブロック間信号線重みが第２の閾値以上になることによって再分割する確率が低減する。
【００７９】
さらに、ステップＳＴ１６〜ＳＴ２１の処理で、従来から行なわれている高位合成の処理，つまり、トランスフォーメーション，スケジューリング，アロケーション，バインディングを行なった後、仮フロアプランによって得られるブロック間配線の長さに関する情報を用いて、信号の遷移頻度と配線長とを考慮したブロック間配線の消費電力や遅延を適正化処理を行なうことで、高位合成後においてブロック間配線の消費電力や遅延が過大になることに起因する高位合成のやり直しを少なくすることができる。
【００８０】
また、ステップＳＴ１１からＳＴ２３までの処理を、第１，第２の閾値の設定を除いてすべて自動を行なうことができるので、ステップＳＴ１１〜ＳＴ２３までを行なうのに要する期間は非常に短くて済む。
【００８１】
なお、本実施形態では、ブロック配置がほぼ適正化された状態で、下流側の設計においてモジュールの生成を行なって、論理合成や配置配線を行なうことができる。
【００８２】
（第２の実施形態）
本実施形態においては、トランスフォーメーションを行なう前にモジュール分割し、モジュール間の重みをアプリケーションレベルシミュレーションによって算出することで、ブロック組み立てを行なう方法について説明する。
【００８３】
図１１は、本実施形態における半導体集積回路装置の設計方法の手順を示すフローチャートである。
【００８４】
まず、ステップＳＴ３１で、第１の実施形態と同様に、データベースからビヘイビア表記されたプログラムを取り込んで、プログラム中の字句，構文の解析を行なって、ビヘイビア表記の誤りがないかどうかをチェックするとともに、ビヘイビア表記で表されているシステムに含まれる機能（演算器レベル）を調べる。そして、解析の結果得られた機能を解析情報として記憶装置に格納する。
【００８５】
次に、ステップＳＴ３２で、解析情報に基づいて、アプリケーション全体を分割して、ブロックに分割するためのモジュールを生成する。そして、このモジュール内の演算機能をノードとする第１のＣＤＦＧを生成して、これを記憶装置に格納しておく。
【００８６】
図１２は、本実施形態において生成される第１のＣＤＦＧを示す図である。ここで、ＣＤＦＧ中の各ノード１〜４は、比較器，加算器，乗算器などの演算器であって、これらの複数の演算器によって１つのモジュールが構成されている。
【００８７】
次に、ステップＳＴ３３で、第１のＣＤＦＧを取り込んで、実際のアプリケーションを動作させるアプリケーションレベルシミュレーションを行なう。このアプリケーションレベルシミュレーションにより、モジュール間配線のデータ通信量がわかる。
【００８８】
次に、ステップＳＴ３４で、アプリケーションシミュレーションによって明らかになったプロファイル情報から算出される各モジュール間の信号線の重みを第１のモジュール間に信号線重みｗとして算出する。すなわち、アプリケーションレベルシミュレーションにより、各モジュール間で、どのようなデータがどれぐらい転送されているのかということがプロファイル情報として得られるので、このモジュール間のデータ通信量の関数として、第１のモジュール間信号線重みｗを算出する。
【００８９】
図１３は、各モジュールＭ１〜Ｍ７と、これらを接続する信号線の第１のモジュール間信号線重みｗ１〜ｗ１２を説明するための図である。同図に示すように、各モジュールの間の配線に対してデータの通信量に応じた重みＷ１〜ｗ１２が定められている。
【００９０】
次に、ステップＳＴ３５で、第１のＣＤＦＧとモジュール間信号線の重み情報とを利用して、ブロックを生成する（グループ分け）。このブロックは、モジュール間信号線の重みから、各ブロックの入出力信号線のデータ通信量の総和ができるだけ小さくなるように生成される。
【００９１】
次に、ステップＳ３６で、第１のＣＤＦＧを取り込んで上述のトランスフォーメーションを行なう。このトランスフォーメーションによって、上述の図１（ｃ）又は図２（ｄ）に示すような第２のＣＤＦＧが生成される。次に、ステップＳＴ３７で、スケジューリングを行ない、第２のＣＤＦＧ中の処理（ノード）の実行タイミングをクロック・サイクルに割り当てて、図１（ｄ）又は図３（ｂ）に示す第３のＣＤＦＧを生成する。
【００９２】
次に、ステップＳＴ３８で、ＨＷライブラリ中のＨＷ規模情報を取り込んで、第３のＣＤＦＧから上述のアロケーションを行なう。これにより、図１（ｅ）又は図５（ｃ）に示すような第１のＨＷ資源接続グラフが生成される。
【００９３】
次に、ステップＳＴ３９で、第１のＨＷ資源接続グラフから上述のバインディングを行なう。このとき、図１（ｆ）又は図６（ｂ）に示すような第２のＨＷ資源接続グラフを生成するとともに、第２のＨＷ資源接続グラフ中の各ＨＷ資源を制御するステートマシーンを生成する。
【００９４】
次に、ステップＳＴ４０で、仮フロアプランを行なって、ＨＷライブラリからＨＷ規模情報を取り込んで、すでに説明した図７（ａ），（ｂ）に示す方法によって、第２のＨＷ資源接続グラフ中の各ＨＷ資源間の距離を求める。そして、第２のＨＷ資源接続グラフ中の各ＨＷ資源の仮配置を行ない、仮配置情報を出力する。このとき、ＨＷ資源間の距離は、ほぼ配線長の大まかな目安となる。
【００９５】
そして、ステップＳＴ４１で、仮配線情報と第１のモジュール間信号線重みに基づいて、第２のモジュール間信号線重みｗ’を算出する。ここでは、大まかな配線長がわかっているので、第２のモジュール間信号線重みは、モジュール間のデータの通信量に配線長を乗じた値に基づいて算出することができる。具体的な方法については、後述する。そして、この第２のモジュール間信号線重みｗ’のうちブロック間配線となる部分の重みをブロック間信号線重みＷとする。
【００９６】
図１４は、このときのブロックの分割された状態を示す図である。同図に示すように、各ブロックＢ１〜Ｂ４は複数のモジュールによって構成され、各ブロック間配線となるモジュール間信号線の第２のモジュール線間信号線重みｗ’がブロック間信号線重みＷ１〜Ｗ５となっている。なお、ブロック間に複数のモジュール間信号線がある場合は、ブロック間信号線重み（例えば、Ｗ５）は、複数の第２のモジュール間信号線重みの和（例えばｗｎ’＋ｗｍ’）となっている。また、モジュール間信号線重みとして配線長のみ，配線遷移頻度のみ又は配線容量のみを組み込んだ重み付けを行なってもよいし、配線容量と配線遷移頻度を組み込んだ重み付けを行なってもよい。
【００９７】
次に、ステップＳＴ４２で、ブロック間信号線重みＷが適正か否かを判断する。すなわち、ブロック間信号線重みＷがその閾値よりも小さいか否かを判断し、すべてのブロック間信号線重みが閾値よりも小さければ（ＯＫ）、ステップＳＴ４３に進んでＨＤＬを出力する。
【００９８】
一方、ブロック間信号線重みＷのうちの１つでも閾値以上であれば（ＮＧ）、ステップＳＴ３５に戻ってブロックの生成をやり直す。すなわち、モジュールによるブロックの組み立て方を変更することにより、ブロック間信号線となるモジュール間信号線の一部を変更してから、再びステップＳＴ３５〜ＳＴ４２の処理を実行する。
【００９９】
本実施形態によると、基本的には、上記第１の実施形態と同様に、高位合成において、モジュール分割を通じて消費電力や遅延を考慮したブロック分割を行なうことができる。すなわち、システムのビヘイビア表記のレベルで記述されたブロック分割にとらわれることなく、アプリケーションが要するブロック間の通信量や配線長が小さくなるように個々のモジュールをまとめてブロックを構成するため、ブロック間の通信や配線容量による消費電力の削減や、遅延の低減を図ることができる。
【０１００】
特に、第１の実施形態とは異なり、当初からブロックではなくモジュールという単位でアプリケーション全体を分割し、その後ブロックを構成するように各モジュールをグループ分けするので、上記第１の実施形態よりも効率よくブロックを生成することができる利点がある。
【０１０１】
（第３の実施形態）
本実施形態においては、トランスフォーメーションを行なってから、モジュール分割し、モジュール間の重みをアプリケーションレベルシミュレーションによって算出することで、ブロック組み立てを行なう方法について説明する。
【０１０２】
図１５は、本実施形態における半導体集積回路装置の設計方法の手順を示すフローチャートである。
【０１０３】
まず、ステップＳＴ５１で、第１の実施形態と同様に、データベースからビヘイビア表記されたプログラムを取り込んで、プログラム中の字句，構文の解析を行なって、ビヘイビア表記の誤りがないかどうかをチェックするとともに、ビヘイビア表記で表されているシステムに含まれる機能を調べる、そして、解析の結果得られた機能を解析情報として記憶装置に格納する。
【０１０４】
次に、ステップＳ５２で、解析情報を取り込んで、解析情報をＨＷライブラリに登録されたＨＷ資源によって回路に置き換えることができるように、上述のトランスフォーメーションを行なう。このトランスフォーメーションによって、上述の図１２に示すような第１のＣＤＦＧが生成される。
【０１０５】
次に、ステップＳＴ５３で、解析情報に基づいて、アプリケーション全体を分割して、ブロックに分割するためのモジュールを生成する。このとき、複数のノードによりモジュールが構成されている状態を示す第２のＣＤＦＧを生成し、これを記憶装置に格納しておく。ここで、第２のＣＤＦＧ中の各ノードは、図１２に示す第１のＣＤＦＧ上のノードと同様に、比較器，加算器，乗算器などの演算器である。そして、これらの複数の演算器によって１つのモジュールが構成されている。
【０１０６】
その後、ステップＳＴ５４〜ＳＴ６３で、第２の実施形態におけるステップＳＴ３３〜ＳＴ４３（ステップＳＴ３６を除く）と同様の処理を行なう。
【０１０７】
すなわち、本実施形態においては、モジュール生成及びブロック生成がトランスフォーメーションの後で行なわれる点のみが、第２の実施形態と異なる。
【０１０８】
したがって、本実施形態によっても、基本的には、上述の第２の実施形態と同様の効果を発揮することができる。
【０１０９】
加えて、本実施形態では、トランスフォーメーションへの情報のフィードバックを行なってからモジュール分割，ブロック分割が可能となるので、後述するように、トランスフォーメーションによる設計の最適化を図ることができる利点がある。
【０１１０】
（第４の実施形態）
本実施形態においては、トランスフォーメーション〜バインディングを行なってから、モジュール分割し、モジュール間の重みをアプリケーションレベルシミュレーションによって算出することで、ブロック生成を行なう方法について説明する。
【０１１１】
図１６は、本実施形態における半導体集積回路装置の設計方法の手順を示すフローチャートである。
【０１１２】
まず、ステップＳＴ７１で、第１の実施形態と同様に、データベースからビヘイビア表記されたプログラムを取り込んで、プログラム中の字句，構文の解析を行なって、ビヘイビア表記の誤りがないかどうかをチェックするとともに、ビヘイビア表記で表されているシステムに含まれる機能を調べる。そして、解析の結果得られた機能を解析情報として記憶装置に格納する。
【０１１３】
次に、ステップＳＴ７２で、解析情報を取り込んで、解析情報をＨＷライブラリに登録されたＨＷ資源によって回路に置き換えることができるように、上述のトランスフォーメーションを行なう。このトランスフォーメーションによって、上述の図１２に示すような第１のＣＤＦＧが生成される。
【０１１４】
次に、ステップＳＴ７３で、スケジューリングを行ない、第１のＣＤＦＧ中の処理（ノード）の実行タイミングをクロック・サイクルに割り当てて、図１（ｄ）又は図３（ｂ）に示す第２のＣＤＦＧを生成する。
【０１１５】
次に、ステップＳＴ７４で、ＨＷライブラリ中のＨＷ規模情報を取り込んで、第３のＣＤＦＧから上述のアロケーションを行なう。これにより、図１（ｅ）又は図５（ｃ）に示すような第１のＨＷ資源接続グラフが生成される。
【０１１６】
次に、ステップＳＴ７５で、第１のＨＷ資源接続グラフから上述のバインディングを行なう。このとき、図１（ｆ）又は図６（ｂ）に示すような第２のＨＷ資源接続グラフを生成するとともに、第２のＨＷ資源接続グラフ中の各ＨＷ資源を制御するステートマシーンを生成する。
【０１１７】
次に、ステップＳＴ７６で、第２のＨＷ資源接続グラフを解析して、アプリケーション全体を分割して、ブロックを組み立てるためのモジュールを生成する。このとき、複数の演算器によりモジュールが構成されている状態を示す第３のＨＷ資源接続グラフを生成し、これを記憶装置に格納しておく。
【０１１８】
次に、ステップＳＴ７７で、第３のＨＷ資源接続グラフを取り込んで、実際のアプリケーションを動作させるアプリケーションレベルシミュレーションを行なう。このアプリケーションレベルシミュレーションにより、モジュール間配線のデータ通信量がわかる。
【０１１９】
次に、ステップＳＴ７８で、アプリケーションシミュレーションによって明らかになったプロファイル情報から算出される各モジュール間の信号線の重みを第１のモジュール間に信号線重みｗとして算出する。すなわち、アプリケーションレベルシミュレーションにより、各モジュール間で、どのようなデータがどれぐらい転送されているのかということがプロファイル情報として得られるので、このモジュール間のデータ通信量の関数として、図１３に示すような第１のモジュール間重みｗを算出する。
【０１２０】
次に、ステップＳＴ７９で、モジュール間信号線の重み情報を利用して、ブロックを生成する（グループ分け）。このブロックは、モジュール間信号線の重みから、各ブロックの入出力信号線のデータ通信量の総和ができるだけ小さくなるように生成される。
【０１２１】
次に、ステップＳＴ８０で、仮フロアプランを行なって、ＨＷライブラリからＨＷ規模情報を取り込んで、すでに説明した図７（ａ），（ｂ）に示す方法によって、第３のＨＷ資源接続グラフ中の各ＨＷ資源間の距離を求める。そして、第３のＨＷ資源接続グラフ中の各ＨＷ資源の仮配置を行ない、仮配置情報を出力する。このとき、ＨＷ資源間の距離は、ほぼ配線長の大まかな目安となる。
【０１２２】
そして、ステップＳＴ８１で、仮配線情報と第１のモジュール間信号線重みとに基づいて、第２のモジュール間信号線重みｗ’を算出する。ここでは、大まかな配線長がわかっているので、第２のモジュール間信号線重みは、モジュール間のデータの通信量に配線長を乗じた値に基づいて算出することができる。具体的な方法については、後述する。そして、図１４に示すように、この第２のモジュール間信号線重みｗ’のうちブロック間配線となる部分の重みをブロック間信号線重みＷとすることができる。
【０１２３】
次に、ステップＳＴ８２で、ブロック間信号線重みＷが適正か否かを判断する。すなわち、ブロック間信号線重みＷがその閾値よりも小さいか否かを判断し、すべてのブロック間信号線重みが閾値よりも小さければ（ＯＫ）、ステップＳＴ８３に進んでＨＤＬを出力する。
【０１２４】
一方、ブロック間信号線重みＷのうちの１つでも閾値以上であれば（ＮＧ）、ステップＳＴ７９に戻ってブロックの生成からやり直す。すなわち、モジュールによるブロックの組み立て方を変更することにより、ブロック間信号線となるモジュール間信号線の一部を変更してから、再びステップＳＴ８０〜ＳＴ８２の処理を実行する。
【０１２５】
本実施形態においても、基本的には上記第１の実施形態と同様に、高位合成において、モジュール分割を通して、消費電力や遅延を考慮したブロック分割を行なうことができる。
【０１２６】
特に、本実施形態においては、ステップＳＴ５２〜ＳＴ７５のトランスフォーメーション，スケジューリング，アロケーション，バインディングによって、ＨＷ資源の接続関係が決定された後に、ステップＳＴ７６，ＳＴ７９で、モジュール生成，ブロック分割が行なわれる。すなわち、バインディング後のＨＷ資源が割り当てられた時点でモジュール生成が行なわれるため、共有化が可能なＨＷ資源は共有化するなど、モジュール自体がある程度最適化された複数の演算器によって構成されている。つまり、第１〜第３の実施形態では、モジュールやタスク間ではバインディングできなかったが、本実施形態においては、このようなモジュールやブロックが生成されていないので、第１のＨＷ資源接続グラフ中の各ＨＷ資源を自由にバインディングすることができる。したがって、システム全体のＨＷ資源を特に有効に活用しつつ、消費電力や遅延を考慮した設計効率の向上を図ることができる。
【０１２７】
また、本実施形態では、トランスフォーメーション又はバインディングへの情報のフィードバックを行なってからモジュール分割，ブロック分割が可能となるので、後述するように、トランスフォーメーション又はバインディングによる設計の最適化を図ることができる利点がある。
【０１２８】
（第５の実施形態）
本実施形態においては、上記第１〜第４の実施形態の少なくともいずれか１つの高位合成を行なった後の論理合成，配置配線を行なう方法について、以下の各具体例に沿って説明する。
【０１２９】
−第１の具体例−
図１７は、第１の具体例における論理合成，配置配線の手順を示すフローチャートである。
【０１３０】
まず、ステップＳＴ１０１で、アプリケーションプログラムを入力して、上記各実施形態の高位合成を行なう。その結果、上述のようなＨＤＬと位置決定情報とが得られる。
【０１３１】
次に、ステップＳＴ１０２で、ＨＤＬ中の論理ブロックをマクロセルの組み合わせによって構成されるネットリストに変換するための論理合成を行なう。ここでは、高位合成で分割されたブロック及び階層構造を保持するような論理合成が適用され、ネットリストにおいてもブロックと同じ認識可能な情報を保持するように論理合成を行なう。
【０１３２】
次に、ネットリストの情報と、高位合成で得られた位置決定情報とを用いた配置配線（レイアウト設計）を行なう。すなわち、すでに説明した図８に示すフローに沿って、ブロック内への演算器などの配置及び配線と、各ブロックの配置及び各ブロック間の配線とが行なわれる。そして、最終的に半導体装置集積回路装置のレイアウトが出力される。
【０１３３】
本具体例によると、高位合成において消費電力の削減や遅延の低減という観点から最適化されたブロック，モジュールなどの位置情報に基づいて、論理合成，配置配線を自動的に行なうことが可能になる。
【０１３４】
−第２の具体例−
図１８は、第２の具体例における論理合成，配置配線の手順を示すフローチャートである。
【０１３５】
まず、ステップＳＴ１１１で、アプリケーションプログラムを入力して、上記各実施形態の高位合成を行なう。その結果、上述のようなＨＤＬと位置決定情報とが得られる。
【０１３６】
次に、ステップＳＴ１１２で、ＨＤＬを入力して、配線の遷移頻度についてのシミュレーションを行なう。すなわち、ＨＤＬシミュレータを用いて、アプリケーションを実行させると、各信号線（配線）のトグル頻度（遷移頻度）が求まり、この遷移頻度は高位合成におけるアプリケーションレベルシミュレーションから得られる遷移頻度よりも精度の高い値である。そして、この配線遷移頻度についての情報を高位合成にフィードバックする。このフィードバックは、第２の実施形態においては、図１１のステップＳＴ４１における第２のモジュール間信号線重み及びブロック間信号線重みの算出を再度やり直すように、第３の実施形態においては、図１５のステップＳＴ６１における第２のモジュール間信号線重み及びブロック間信号線重みの算出を再度やり直すように、第４の実施形態においては、図１６のステップＳＴ８１における第２のモジュール間信号線重み及びブロック間信号線重みの算出を再度やり直すように、行なわれる。
【０１３７】
その後、ステップＳＴ１１３，ＳＴ１１４で、上記第１の具体例と同様の論理合成，配置配線を行なう。
【０１３８】
本具体例によると、アプリケーションレベルシミュレーションに比べてより精度の高いＨＤＬシミュレーションによる配線遷移頻度の情報を、高位合成におけるブロック分割又は組み立てに反映させることができるので、第２回目以降の高位合成によって、設計精度がさらに向上する。よって、消費電力の削減や遅延の低減の効果の高いブロック分割又はブロックの組み立てを行なうことが可能になる。
【０１３９】
−第３の具体例−
図１９は、第３の具体例における論理合成，配置配線の手順を示すフローチャートである。
【０１４０】
まず、ステップＳＴ１２１で、アプリケーションプログラムを入力して、上記各実施形態の高位合成を行なう。その結果、上述のようなＨＤＬと位置決定情報とが得られる。
【０１４１】
次に、ステップＳＴ１２２で、上記第１の具体例と同様の論理合成を行なう。次に、ステップＳＴ１２３で、論理合成によって得られたネットリストを用いて仮配線を行なった後、ステップＳＴ１２４で、論理シミュレータ上でアプリケーションを実行させることにより、仮配線シミュレーションを行なう。そして、この仮配線シミュレーションによって、配線のトグル数だけでなく、配線容量についても測定を行なう。そして、この配線遷移頻度及び配線容量についての仮配線情報を出力し、高位合成にフィードバックする。このフィードバックは、第２の実施形態においては、図１１のステップＳＴ４１における第２のモジュール間信号線重み及びブロック間信号線重みの算出を再度やり直すように、第３の実施形態においては、図１５のステップＳＴ６１における第２のモジュール間信号線重み及びブロック間信号線重みの算出をやり直すように、第４の実施形態においては、図１６のステップＳＴ８１における第２のモジュール間信号線重み及びブロック間信号線重みの算出を再度やり直すように、行なわれる。
【０１４２】
本具体例によると、アプリケーションレベルシミュレーションに比べてより精度の高い仮配線シミュレーションによる配線遷移頻度及び配線容量の情報を、高位合成におけるブロック分割又は組み立てに反映させることができるので、第２回目以降の高位合成によって、設計精度がさらに向上する。よって、消費電力の削減や遅延の低減の効果の高いブロック分割又はブロックの組み立てを行なうことが可能になる。
【０１４３】
−第４の具体例−
図２０は、第４の具体例における論理合成，配置配線の手順を示すフローチャートである。
【０１４４】
まず、ステップＳＴ１３１で、アプリケーションプログラムを入力して、上記各実施形態の高位合成を行なう。その結果、上述のようなＨＤＬと位置決定情報とが得られる。
【０１４５】
次に、ステップＳＴ１３２，ＳＴ１３３で、上記第１の具体例と同様の論理合成，配置配線を行なう。
【０１４６】
次に、ステップＳＴ１３４で、配置配線によって得られたレイアウト上の回路を用いて、論理シミュレータ又はＳＰＩＣＥ上でアプリケーションを実行させることにより、実配線シミュレーションを行なう。そして、この実配線シミュレーションによって、配線のトグル数だけでなく、配線容量も測定する。そして、配線遷移頻度及び配置配線によるレイアウト情報としての配線容量についての実配線情報を出力し、高位合成にフィードバックする。このフィードバックは、第２の実施形態においては、図１１のステップＳＴ４１における第２のモジュール間信号線重み及びブロック間信号線重みの算出を再度やり直すように、第３の実施形態においては、図１５のステップＳＴ６１における第２のモジュール間信号線重み及びブロック間信号線重みの算出をやり直すように、第４の実施形態においては、図１６のステップＳＴ８１における第２のモジュール間信号線重み及びブロック間信号線重みの算出を再度やり直すように、行なわれる。
【０１４７】
本具体例によると、仮配線シミュレーションに比べてより精度の高い実配線シミュレーションによる配線容量の情報を、高位合成におけるブロック分割又は組み立てに反映させることができるので、第２回目以降の高位合成によって、設計精度がさらに向上する。よって、消費電力の削減効果や遅延の低減効果の高いブロック分割又はブロックの組み立てを行なうことが可能になる。
【０１４８】
−第５の具体例−
図２１は、第５の具体例における論理合成，配置配線の手順を示すフローチャートである。
【０１４９】
まず、ステップＳＴ１４１で、アプリケーションプログラムを入力して、上記各実施形態の高位合成を行なう。その結果、上述のようなＨＤＬと位置決定情報とが得られる。
【０１５０】
次に、ステップＳＴ１４２で、第２の具体例と同様に、ＨＤＬを入力して、配線の遷移頻度についてのシミュレーションを行なう。すなわち、ＨＤＬシミュレータを用いて、アプリケーションを実行させて、各信号線（配線）のトグル頻度（遷移頻度）を求め、この配線遷移頻度に関する情報を、上記第２の具体例において説明した各実施形態における高位合成のステップにフィードバックする。
【０１５１】
次に、ステップＳＴ１４３で、上記第１の具体例と同様の論理合成を行なう。次に、ステップＳＴ１４４で、論理合成によって得られたネットリストを用いて仮配線を行なった後、ステップＳＴ１４５で、上記第３の具体例と同様に、論理シミュレータ上でアプリケーションを実行させることにより、仮配線シミュレーションを行なう。そして、この仮配線シミュレーションによって、得られた配線遷移頻度及び配線容量についての仮配線情報を出力し、高位合成にフィードバックする。このフィードバックは、上記第３の具体例と同様に行なわれる。
【０１５２】
本具体例によると、まず、シミュレーション時間が比較的短く、出力情報の精度の低いＨＤＬシミュレーションの出力を高位合成にフィードバックすることで、高位合成におけるブロック間信号線重みが第１の閾値Ｘよりも小さくなるようにブロック分割の精度が高められる。次に、シミュレーション時間が中程度でシミュレーション精度が中程度の仮配線シミュレーションの出力を高位合成にフィードバックすることで、高位合成におけるブロック間信号線重みが第２の閾値Ｙよりも小さくなるようにブロック分割の精度がさらに高められる。
【０１５３】
そして、このような２種類のフィードバック情報を高位合成に利用することにより、設計の手戻り回数を低減することができる。
【０１５４】
−第６の具体例−
図２２は、第６の具体例における論理合成，配置配線の手順を示すフローチャートである。
【０１５５】
まず、ステップＳＴ１５１で、アプリケーションプログラムを入力して、上記各実施形態の高位合成を行なう。その結果、上述のようなＨＤＬと位置決定情報とが得られる。
【０１５６】
次に、ステップＳＴ１５２で、第２の具体例と同様に、ＨＤＬを入力して、配線の遷移頻度についてのシミュレーションを行なう。すなわち、ＨＤＬシミュレータを用いて、アプリケーションを実行させて、各信号線（配線）のトグル頻度（遷移頻度）を求め、この配線遷移頻度に関する情報を、上記第２の具体例において説明した各実施形態における高位合成中のステップにフィードバックする。
【０１５７】
次に、ステップＳＴ１５３，ＳＴ１５４で、上記第１の具体例と同様の論理合成，配置配線を行なう。次に、ステップＳＴ１５５で、配置配線によって得られたレイアウト上の回路を用いて、論理シミュレータ又はＳＰＩＣＥ上でアプリケーションを実行させることにより、実配線シミュレーションを行なう。そして、この実配線シミュレーションによって、配線のトグル数だけでなく、配線容量も測定する。そして、配線遷移頻度及び配置配線によるレイアウト情報としての配線容量についての実配線情報を出力し、高位合成にフィードバックする。このフィードバックは、上記第４の具体例と同様に行なわれる。
【０１５８】
本具体例によると、まず、シミュレーション時間が比較的短く、出力情報の精度の低いＨＤＬシミュレーションの出力を高位合成にフィードバックすることで、高位合成におけるブロック間信号線重みが第１の閾値Ｘよりも小さくなるようにブロック分割の精度が高められる。次に、シミュレーション時間が比較的長くシミュレーション精度が高い実配線シミュレーションの出力を高位合成にフィードバックすることで、高位合成におけるブロック間信号線重みが第２の閾値Ｚよりも小さくなるようにブロック分割の精度がさらに高められる。
【０１５９】
そして、このような２種類のフィードバック情報を高位合成に利用することにより、設計の手戻り回数を低減することができる。
【０１６０】
−第７の具体例−
図２３は、第７の具体例における論理合成，配置配線の手順を示すフローチャートである。
【０１６１】
まず、ステップＳＴ１６１で、アプリケーションプログラムを入力して、上記各実施形態の高位合成を行なう。その結果、上述のようなＨＤＬと位置決定情報とが得られる。
【０１６２】
次に、ステップＳＴ１６２で、第１の具体例と同様の論理合成を行なう。次に、ステップＳＴ１６３で、論理合成によって得られたネットリストを用いて仮配線を行なった後、ステップＳＴ１６４で、上記第３の具体例と同様に、論理シミュレータ上でアプリケーションを実行させることにより、仮配線シミュレーションを行なう。そして、この仮配線シミュレーションによって、得られた配線遷移頻度及び配線容量についての仮配線情報を出力し、高位合成にフィードバックする。このフィードバックは、上記第３の具体例と同様に行なわれる。
【０１６３】
次に、ステップＳＴ１６５で、上記第１の具体例と同様の配置配線を行なう。次に、ステップＳＴ１６６で、配置配線によって得られたレイアウト上の回路を用いて、論理シミュレータ又はＳＰＩＣＥ上でアプリケーションを実行させることにより、実配線シミュレーションを行なう。そして、この実配線シミュレーションによって、配線のトグル数だけでなく、配線容量も測定する。そして、配線遷移頻度及び配置配線によるレイアウト情報としての配線容量についての実配線情報を出力し、高位合成にフィードバックする。このフィードバックは、上記第４の具体例と同様に行なわれる。
【０１６４】
本具体例によると、まず、シミュレーション時間が中程度で出力情報の精度も中程度の仮配線シミュレーションの出力を高位合成にフィードバックすることで、高位合成におけるブロック間信号線重みが第１の閾値Ｙよりも小さくなるようにブロック分割の精度が高められる。次に、シミュレーション時間が比較的長くシミュレーション精度が高い実配線シミュレーションの出力を高位合成にフィードバックすることで、高位合成におけるブロック間信号線重みが第２の閾値Ｚよりも小さくなるようにブロック分割の精度がさらに高められる。
【０１６５】
そして、このような２種類のフィードバック情報を高位合成に利用することにより、設計の手戻り回数を低減することができる。
【０１６６】
−第８の具体例−
図２４は、第８の具体例における論理合成，配置配線の手順を示すフローチャートである。
【０１６７】
まず、ステップＳＴ１７１で、アプリケーションプログラムを入力して、上記各実施形態の高位合成を行なう。その結果、上述のようなＨＤＬと位置決定情報とが得られる。
【０１６８】
次に、ステップＳＴ１７２で、第２の具体例と同様に、ＨＤＬを入力して、配線の遷移頻度についてのシミュレーションを行なう。すなわち、ＨＤＬシミュレータを用いて、アプリケーションを実行させて、各信号線（配線）のトグル頻度（遷移頻度）を求め、この配線遷移頻度に関する情報を、上記第２の具体例において説明した各実施形態における高位合成のステップにフィードバックする。
【０１６９】
次に、ステップＳＴ１７３で、第１の具体例と同様の論理合成を行なう。次に、ステップＳＴ１７４で、論理合成によって得られたネットリストを用いて仮配線を行なった後、ステップＳＴ１７５で、上記第３の具体例と同様に、論理シミュレータ上でアプリケーションを実行させることにより、仮配線シミュレーションを行なう。そして、この仮配線シミュレーションによって、得られた配線遷移頻度及び配線容量についての仮配線情報を出力し、高位合成にフィードバックする。このフィードバックは、上記第３の具体例と同様に行なわれる。
【０１７０】
次に、ステップＳＴ１７６で、上記第１の具体例と同様の配置配線を行なう。次に、ステップＳＴ１７７で、配置配線によって得られたレイアウト上の回路を用いて、論理シミュレータ又はＳＰＩＣＥ上でアプリケーションを実行させることにより、実配線シミュレーションを行なう。そして、この実配線シミュレーションによって、配線のトグル数だけでなく、配線容量も測定する。そして、配線遷移頻度及び配置配線によるレイアウト情報としての配線容量についての実配線情報を出力し、高位合成にフィードバックする。このフィードバックは、上記第４の具体例と同様に行なわれる。
【０１７１】
本具体例によると、上述のＨＤＬシミュレーションを行なうことによる効果に加えて、まず、シミュレーション時間が中程度で出力情報の精度も中程度の仮配線シミュレーションの出力を高位合成にフィードバックすることで、高位合成におけるブロック間信号線重みが第２の閾値Ｙよりも小さくなるようにブロック分割の精度が高められる。さらに、シミュレーション時間が比較的長くシミュレーション精度が高い実配線シミュレーションの出力を高位合成にフィードバックすることで、高位合成におけるブロック間信号線重みが第３の閾値Ｚよりも小さくなるようにブロック分割の精度がさらに高められる。
【０１７２】
そして、このような３種類のフィードバック情報を高位合成に利用することにより、設計の手戻り回数も低減することができる。
【０１７３】
（第６の実施形態）
本実施形態においては、上記第１〜第４の実施形態に限られずに、高位合成一般に適用しうるブロックの生成（分割又は組み立て）方法や、ブロックの再分割方法について説明する。ただし、本実施形態の方法は、上記第１〜第４の実施形態におけるブロックの生成（分割又は組み立て）や、図９のステップＳＴ１５及びＳＴ２２，図１１のステップＳＴ４２，図１５のステップＳＴ６２及び図１６のステップＳＴ８２の判別によるフィードバック（第５の実施形態におけるＨＤＬ生成後のシミュレーションによる情報のフィードバックを受けたときを含む）を受けてブロックを再分割するときの処理方法にも適用することができる。
【０１７４】
−ブロック分割及び再分割−
図２５（ａ），（ｂ）は、高位合成において行なわれる本実施形態のブロックの分割，再分割の例を示す図である。
【０１７５】
図９に示すフローにおいて、ステップＳＴ１２で、情報のフィードバックがまだ入力されていない最初の処理においては、すでに説明したように、アプリケーションプログラムのビヘイビア表記の字句，構文の解析を行なった結果に基づいて機能的に意味のある処理を１つのタスクとする第１のＣＤＦＧ（タスクグラフ）を生成する。このタスクは１つ以上のサブタスクにより構成されている。このサブタスクは、モジュール生成を行なう第２，第３，第４の実施形態においては、モジュールに相当するものである。例えば、図２５（ａ）に示すように、TaskＢ内に、Sub-TaskB0，Sub-TaskB1，Sub-TaskB2が含まれているとする。TaskＡ，TaskＣにもサブタスクが含まれているが、図２５（ａ），（ｂ）にはそれらの図示が省略されている。図２５（ａ），（ｂ）に示すアーク（矢印）はデータ通信を意味する。また、タスクグラフ中の各タスクは１つのＨＷブロックに対応し、あるブロックから別のブロックに至るアークはブロック間配線に対応する。アプリケーションのプログラムのシミュレーション結果から得られる実行プロファイルや実行トレースなどの情報のフィードバックにより、タスク間のデータ通信量（ブロック間配線の遷移頻度）を推定することができる。
【０１７６】
具体的な例でいうと、図９のステップＳＴ１２でフィードバック情報がない最初のブロック分割は、生成されたタスクグラフに基づいて行なう。このとき、アークに対応する配線長や、配線遷移頻度はまだわかっていないので、初期値としてある値を与える。この初期値は、一律に与えてもよいし、すでに優先的に配置したいタスクが判明している場合には、そのタスクが優先的に配置されるように与える。
【０１７７】
その後、例えば図９のステップＳＴ１５からのフィードバックを受ける場合には、アプリケーションレベルシミュレーションによってタスク間のデータ通信量（ブロック間配線の遷移頻度）がある程度具体的に判るので、これを用いてブロックの再分割を行なうことになる。たとえば、図９のステップＳＴ２２，図１１のステップＳＴ４２，図１５のステップＳＴ６２及び図１６のステップＳＴ８２からのフィードバックの際には、ブロック間の距離（図２５（ａ）に示すアークの長さ）がわかっているので、配線長と配線遷移頻度とを考慮して初期値に対する重み付けを行ない、アークに対応する配線長と、配線遷移頻度を用いて初期値を更新する。これにより、各タスクの配置後における各タスク間のアーク（ブロック間配線）に対応する配線長，配線遷移頻度が求まるので、次の過程では、この値に基づいてブロックの再分割（又は統合）を行なうことができる。また、例えば、第５の実施形態におけるＨＤＬシミュレーション後のフィードバックを受けた後に、さらにステップＳＴ２２などからのフィードバックを受けてブロック再分割を行なう場合には、ブロック間配線の遷移頻度がより正確にわかっている。さらに、例えば、第５の実施形態における仮配線シミュレーション又は実配線シミュレーション後のフィードバックを受けた後に、さらにステップＳＴ２２などからのフィードバックを受けてブロックの再分割を行なう場合には、配線遷移頻度，配線長及び配線容量がわかっているので、これらすべてを考慮した重み付けが可能となる。
【０１７８】
例えば、図２５（ａ）において、TaskＡからTaskＢへのアークの遷移頻度あるいはデータ転送量が大きく、一方、Sub-TaskB0からSub-TaskB1へのデータ転送量が少ないことが判明したとする。このような場合としては、TaskＡから大量の配列データ（ベクトルデータ）が転送され、Sub-TaskB0ではTaskＡから送られてくる配列データに対して処理を行ない、最終的な結果として１つの値をSub-TaskB1に渡すような処理を行なう場合がある。このような関係が各タスク間にある場合には、TaskＢ内のSub-TaskB0をTaskＡのブロック内に移動させることにより、TaskＡのブロックとTaskＢのブロックとの間におけるデータ転送量，あるいは配線遷移頻度を低減することができる。つまり、配線長の長いブロック間配線におけるデータ転送量又は配線遷移頻度を低減することで、システムの消費電力や遅延の低減を図ることができる。
【０１７９】
−重み付け計算−
(1)  配線長
図２６（ａ），（ｂ）は、ブロック間信号線重みの計算方法を示す図である。最初の処理において、図２６（ａ）に示すように、TaskＭ，Ｎ，Ｏ，Ｌ，Ｋが分割されたものとする。このとき、各ブロック間のアーク（ブロック間配線）に対する配線長の初期値Ｌi が設定されている。例えば、TaskＭ−Ｎ間配線の配線長の初期値Ｌi-mnと、TaskＮ−Ｏ間配線の配線長の初期値Ｌi-noと、TaskＭ−Ｌ間配線の配線長の初期値Ｌi-mlと、TaskＬ−Ｋ間配線の配線長の初期値Ｌi-lkとが設定されているものとする。このとき、フィードバック情報として、実配線長，仮配線長，位置情報などが与えられると、図２６（ｂ）に示すように、各ブロック間の配線長，位置情報の値を正規化した比率α（αmn，αno，αml，αlk）を初期値Ｌi に掛けることにより、新たなブロック間配線情報（図２６（ｂ）に示す値）を生成する。文献“Neil H.E.Weste,Kamran Eshraghian,Principles of CMOS VLSI Design, A System Perspective, Second Edition ADDSION-WESLEY PUBLISHING COMPANY ”の“4.3 Capacitance Estimation”にあるように、配線遅延は配線長に比例する関数であるので、配線遅延を抑制するためには配線長情報を用いることが有効である。もちろん、与えられたフィードバック情報で初期値Ｌi を置き換えることで、新たなブロック間配線情報を生成することも可能である。特に、実配線長がフィードバックされる場合には、実際の値を使用する方が推定精度が向上する。そして、ブロック間配線長Ｌと許容される上限値Ｌmax （閾値）とを比較することにより、例えば、図１１のステップＳＴ４２，図１５のステップＳＴ６２及び図１６のステップＳＴ８２のような判別を行なうことができる。つまり、Ｌ≦Ｌmax である場合には次のステップに進み、Ｌ＞Ｌmax の場合には、Ｌ≦Ｌmax になるように、ブロックの再組み立て又はブロックの再分割を行なうことができる。
【０１８０】
(2)  配線遷移頻度
第１の実施形態においては、最初のブロック分割（生成）において与えられた各ブロック間のアークに対するブロック間信号線情報に対して、フィードバックされたブロック間信号線情報に配線遷移頻度を正規化した比率β（βmn，βno，βml，βlk）を掛けることにより、新たなブロック間配線遷移頻度情報Ｓ（Ｓmn，Ｓno，Ｓml，Ｓlk）を生成する。これにより、各ブロック間配線における消費電力の概略値を演算することが可能になる。
【０１８１】
“Principles of CMOS VLSI Design, A System Perspective, Second Edition”の“4.7 Power Dissipation ”に記載されているように、回路のダイナミック消費電力は配線の遷移頻度に比例する関数である。つまり、配線の遷移率ａ，配線容量Ｃ，電源電位Ｖ，周波数ｆにおける各配線の消費電力Ｐは、下記式
Ｐ＝ａ・Ｃ・Ｖ2 ・ｆ
で表される。したがって、消費電力を抑制するためには、この新たな配線遷移頻度情報を利用することは有効であることがわかる。
【０１８２】
また、最初のブロック間配線情報（配線遷移頻度）に対して、正規化した比率βではなく遷移頻度そのものを掛けることや、シミュレーション等で得られたより正確な遷移頻度で置き換えることも可能である。そして、各ブロック間配線における消費電力の総和（ΣＰ）と許容される上限値Ｐmax とを比較することにより、図９のステップＳＴ１５のような判別を行なうことができる。すなわち、各ブロック間配線の消費電力の総和（ΣＰ）が上限値Ｐmax を越えない場合（ΣＰ≦Ｐmax ）には次のステップに進み、各ブロック間配線の消費電力の総和（ΣＰ）が上限値Ｐmax を越える場合（ΣＰ＞Ｐmax ）にはブロックの再分割又は再組み立てを行なうことができる。
【０１８３】
ただし、図９のステップＳＴ２２，図１１のステップＳＴ４２，図１５のステップＳＴ６２及び図１６のステップＳＴ８２においても、配線遷移頻度のみを考慮したブロック間信号線重みの可否判断を行なうことが可能である。また、第１の実施形態においては、仮フロアプランによってある程度のブロック間距離がわかってからは、配線遷移頻度だけでなく配線長や配線容量を組み込んで、図９のステップＳＴ２２における重み付けの可否判断が可能になる。
【０１８４】
(3)  配線容量
最初のブロック分割（生成）において与えられた各ブロック間のアークに対するブロック間信号線情報に対して、フィードバックされたブロック間信号線情報に配線容量を正規化した比率γ（γmn，γno，γml，γlk）を掛けることにより、新たなブロック間配線容量情報Ｔ（Ｔmn，Ｔno，Ｔml，Ｔlk）を生成する。
【０１８５】
上記式  Ｐ＝ａ・Ｃ・Ｖ2 ・ｆから明らかなように、回路のダイナミック消費電力は配線容量に比例する関数である。したがって、消費電力を抑制するためには、配線容量情報を利用することは有効であることがわかる。ただし、配線容量は配線長から近似的に算出することができる。
【０１８６】
また、最初のブロック間配線容量情報に対して、正規化した比率γではなく配線容量そのものを掛けることや、シミュレーション等で得られたより正確な配線容量で置き換えることも可能である。そして、各ブロック間配線における消費電力の総和（ΣＰ）と許容される上限値Ｐmax とを比較することにより、図９のステップＳＴ２２，図１１のステップＳＴ４２，図１５のステップＳＴ６２及び図１６のステップＳＴ８２のような判別を行なうことができる。すなわち、各ブロック間配線の消費電力の総和（ΣＰ）が上限値Ｐmax を越えない場合（ΣＰ≦Ｐmax ）には次のステップに進み、各ブロック間配線の消費電力の総和（ΣＰ）が上限値Ｐmax を越える場合（ΣＰ＞Ｐmax ）にはブロックの再分割又は再組み立てを行なうことができる。
【０１８７】
(4)  配線長＆配線遷移頻度，配線容量＆配線遷移頻度
上述の配線長，配線遷移頻度，配線容量というパラメータについて、これらのパラメータを単独ではなくいくつかを組み合わせてブロック間配線重みを判断することができる。
【０１８８】
すなわち、ブロック間信号線重みの初期値に対して、上述のような各パラメータについての正規化された比率を掛けることや、フィードバック情報そのものを利用する（置き換える）ことができる。配線容量は、配線の単位長さ当たりの容量をＣ unit-lengthとすると、配線長に比例する関数として表される。また、配線遅延は、配線の抵抗成分（Ｒ）と容量（Ｃ）との関数である。そして、図９のステップＳＴ２２，図１１のステップＳＴ４２，図１５のステップＳＴ６２，図１６のステップＳＴ８２において、これらをすべて組み込んだブロック間信号線重みに基づいて、ブロック分割の可否判断を行なうことができる。したがって、これらを組み合わせて用いることにより、配線遅延と消費電力との双方に関するより詳細なブロック間配線情報が得られるので、遅延時間，消費電力の値の精度が向上することになる。
【０１８９】
（第７の実施形態）
本実施形態においては、上記第５の実施形態におけるＨＤＬ生成後の各種シミュレーションの結果得られた情報を、第１〜第４の実施形態におけるブロック間信号線重みの算出ステップではなく、トランスフォーメーションやバインディングのステップに戻す例について説明する。
【０１９０】
ここで、情報のフィードバック経路について説明する。配線遷移頻度又は仮配線情報又は実配線情報をフィードバックする信号線は、モジュール間又はブロック間を接続する信号線であり、この信号線としては、例えばバス，グローバル配線（割り込みなど）がある。そして、モジュール内の信号線は、高位合成過程において最適化されているために、上述のフィードバックを行なう対象とはしない。
【０１９１】
フィードバックする情報としては、ＨＤＬシミュレーションの結果得られる配線遷移頻度情報，仮配線シミュレーションの結果得られる仮配線情報，実配線シミュレーションの結果得られる実配線情報がある。
【０１９２】
配線遷移頻度情報は、ＨＤＬレベルにおける論理シミュレーション（ＨＤＬシミュレーション）の結果得られるモジュール間の配線に関する遷移頻度（遷移頻度及びアクティブ頻度）を含んでいる。
【０１９３】
仮配線情報は、仮配線後におけるＳＰＩＣＥなどを利用した回路シミュレーションの結果得られるモジュール間配線の長さ（配線容量），遷移頻度（あるいは配線遷移頻度及びアクティブ頻度の双方）を含んでいる。
【０１９４】
実配線情報は、実配線後におけるＳＰＩＣＥなどを利用した回路シミュレーションの結果得られるモジュール間配線の長さ（配線容量），遷移頻度（あるいは配線遷移頻度及びアクティブ頻度の双方）を含んでいる。
【０１９５】
そこで、以下の具体例においては、ＨＤＬ生成後におけるシミュレーションの結果得られた情報をトランスフォーメーション又はバインディングにフィードバックする方法について説明する。
【０１９６】
−第１の具体例（トランスフォーメーションへのフィードバック）−
高位合成は、動作レベル（ビヘイビアレベル）のハードウエア記述言語（ＨＤＬ）、機能ブロック図等のスケマティック，Ｃ言語などの高級言語などによって表されたシステムを、レジスタ・トランスファ・レベル（ＲＴＬ）のＨＤＬを生成する処理といえる。このように、抽象度の高いビヘイビア表記から抽象度の低いＲＴＬ記述を得るために、高位合成では、ビヘイビア表記の意味を壊さない範囲で、ハードウエアで実現可能なレベルにシステムの表現を変換する。この処理は、Ｃ言語などの高級言語をオブジェクトコードに変換するコンパイル処理の過程と共通の要素を有している。
【０１９７】
ここで、本発明の各実施形態におけるトランスフォーメーションの処理とは、高級言語のコンパイラで一般に行なわれるフロントエンド処理中の中間言語のレベルでの式の変換に相当する。このフロントエンド処理は、刊行物「コンパイラＩ，II  原理・技法・ツール，Ａ．Ｖ．エイホ，Ｒ．セシィ，Ｊ．Ｄ．ウルマン著，原田賢一約，サイエンス社」に記載されている。また、トランスフォーメーションの前処理，すなわち，字句解析，構文解析などの処理はコンパイラのフロントエンド処理で行なわれている処理と類似している。
【０１９８】
このトランスフォーメーションは、すでに説明したように、数式への交換則や分配則の適用，関数のインライン展開，ループの１重化，ループ内に存在する定数のループ外への移動など、コンパイラにおける種々の技法を利用して行なわれる。
【０１９９】
図２７（ａ），（ｂ）は、トランスフォーメーションにおける分配則の適用により消費電力の削減を図る例を示す図である。図２７（ａ）に示すように、演算  Ａ＝Ｂ×Ｃ＋Ｂ×Ｄを行なう機能を有する回路ブロックが、２つの乗算器と１つの加算器により構成されている場合、フィードバックされた各信号線の消費電力の総和（つまりこの回路全体の消費電力）が閾値よりも大きいときには、分配則を適用して、図２７（ｂ）に示す回路に変形することができる。この変形により、活性化される信号線の数（つまり容量）が低減されるので、回路全体の消費電力も削減される。
【０２００】
図２８（ａ），（ｂ）は、トランスフォーメーションにおけるインライン展開の適用により消費電力の削減を図る例を示す図である。図２８（ａ）に示すように、functionＡがprogＰとprogＱとにおいて使用されている場合、progＰとprogＱとをハードウエア化する際には、両者がfunctionＡという共通の演算機能を有しているので、functionＡをprogＰとprogＱとが共有する演算モジュールとしてハードウエア化することがある。しかし、functionＡを共有ＨＷ資源として抜き出すことにより、全体としての配線長が長くなって信号線部分の消費電力が増大することもある。かかる場合には、図２８（ｂ）に示すように、インライン展開することにより、共有していた演算モジュールを個別に持たせることができる。このインライン展開により、functionＡの演算モジュールが各回路ブロック毎に必要となるが、例えば演算モジュール毎に、Gated Clock や電圧制御などを適用することにより、消費電力を抑制することができる。また、回路面積が増大することになるが、チップ全体として許容範囲内であればインライン展開を実施する方が有利である。
【０２０１】
したがって、回路規模の増大が問題とならない範囲で、増設された演算モジュールを各々有する回路ブロックの消費電力を抑制することができるのであれば、このようなインライン展開により回路全体としての消費電力の削減を実現することができる利点がある。
【０２０２】
−第２の具体例（バインディングへのフィードバック）−
バインディングは、アロケーションでＣＤＦＧの各節に割り当てられた演算器などのモジュールに関し、複数の節で共通のモジュールがあれば、これらをリソースシェアリング（資源の共有化）するかしないかを判断し、最終的なデータパスの決定と制御のためのステートマシーンを生成する工程である。
【０２０３】
ここで、再バインディングを行なうか行なわないかは、フィードバックされた情報に基づいて、求められた信号線の総消費電力と最大遅延とが予め定められた目標範囲に収まっているか否かによる。すなわち、これらのパラメータが目標範囲に収まっていれば再バインディングを行なわないが、目標範囲に収まっていない場合には、再バインディングを実行する。
【０２０４】
図２９（ａ），（ｂ）は、再バインディングを行なう過程を説明する図である。再バインディングを行なう際の最適化の方向性（戦略）としては、できるだけリソースシェアリング（資源の共有化）を行なわないようにする。その理由は、リソースシェアリングを行なっていると、リソースシェアリングされるモジュールが抜き出されるために、図２９（ａ）に示すように、共有化しているモジュール（共有ＨＷ資源）とこれに接続される周辺のモジュールとを接続する信号線が長くなり、配線の総消費電力や配線遅延が大きくなるからである。そこで、総消費電力や配線遅延が大きい場合には、図２９（ｂ）に示すように、非共有化を図ることが好ましい。ただし、この場合にも、第２の具体例と同様に、ＨＷ資源の非共有化によって回路面積が問題になるほどは増大しないことが前提である。
【産業上の利用可能性】
【０２０５】
本発明の半導体集積回路装置の設計方法は、ＬＳＩ，特にいわゆるシステムＬＳＩの設計に利用することができる。
【図面の簡単な説明】
【０２０６】
【図１】（ａ）は本発明で利用する高位合成の流れを示すフローチャート図、（ｂ）〜（ｅ）は、各ステップにおいて出力されるデータの一例を示す図である。
【図２】（ａ）〜（ｄ）は、トランスフォーメーションの過程を示す図である。
【図３】（ａ），（ｂ）は、一般的なスケジューリングの過程を示す図である。
【図４】（ａ），（ｂ）は、パイプライン化スケージューリングを説明するための図である。
【図５】（ａ）〜（ｃ）は、アロケーションの過程を説明するための図である。
【図６】（ａ），（ｂ）は、バインディングの過程を説明するための図である。
【図７】（ａ），（ｂ）は、それぞれブロックの大きさとブロック間距離とを見積もる方法を示す図である。
【図８】配置配線の手順の一例を概略的に示すフローチャートである。
【図９】第１の実施形態における半導体集積回路装置の設計方法の手順を示すフローチャートである。
【図１０】（ａ），（ｂ）は、第１の実施形態において生成される第１のＣＤＦＧ及び各ノードの内容を示す図である。
【図１１】第２の実施形態における半導体集積回路装置の設計方法の手順を示すフローチャートである。
【図１２】第２の実施形態において生成される第１のＣＤＦＧを示す図である。
【図１３】第２〜第４の実施形態におけるモジュール間を接続する信号線の第１のモジュール間信号線重みを説明するための図である。
【図１４】第２〜第４の実施形態におけるブロックの分割された状態及びブロック間信号線重みを示す図である。
【図１５】第３の実施形態における半導体集積回路装置の設計方法の手順を示すフローチャートである。
【図１６】第４の実施形態における半導体集積回路装置の設計方法の手順を示すフローチャートである。
【図１７】第５の実施形態の第１の具体例における論理合成，配置配線の手順を示すフローチャートである。
【図１８】第５の実施形態の第２の具体例における論理合成，配置配線の手順を示すフローチャートである。
【図１９】第５の実施形態の第３の具体例における論理合成，配置配線の手順を示すフローチャートである。
【図２０】第５の実施形態の第４の具体例における論理合成，配置配線の手順を示すフローチャートである。
【図２１】第５の実施形態の第５の具体例における論理合成，配置配線の手順を示すフローチャートである。
【図２２】第５の実施形態の第６の具体例における論理合成，配置配線の手順を示すフローチャートである。
【図２３】第５の実施形態の第７の具体例における論理合成，配置配線の手順を示すフローチャートである。
【図２４】第５の実施形態の第８の具体例における論理合成，配置配線の手順を示すフローチャートである。
【図２５】（ａ），（ｂ）は、高位合成において行なわれる第６の実施形態のブロックの分割，再分割の例を示す図である。
【図２６】（ａ），（ｂ）は、第６の実施形態におけるブロック間信号線重みの計算方法を示す図である。
【図２７】（ａ），（ｂ）は、第７の実施形態におけるトランスフォーメーションにおける分配則の適用により消費電力の削減を図る例を示す図である。
【図２８】（ａ），（ｂ）は、第７の実施形態におけるトランスフォーメーションにおけるインライン展開の適用により消費電力の削減を図る例を示す図である。
【図２９】（ａ），（ｂ）は、第７の実施形態における再バインディングを行なう過程を説明する図である。
【図１】
2004288206.tif 000003
【図２】
2004288206.tif 000004
【図３】
2004288206.tif 000005
【図４】
2004288206.tif 000006
【図５】
2004288206.tif 000007
【図６】
2004288206.tif 000008
【図７】
2004288206.tif 000009
【図８】
2004288206.tif 000010
【図９】
2004288206.tif 000011
【図１０】
2004288206.tif 000012
【図１１】
2004288206.tif 000013
【図１２】
2004288206.tif 000014
【図１３】
2004288206.tif 000015
【図１４】
2004288206.tif 000016
【図１５】
2004288206.tif 000017
【図１６】
2004288206.tif 000018
【図１７】
2004288206.tif 000019
【図１８】
2004288206.tif 000020
【図１９】
2004288206.tif 000021
【図２０】
2004288206.tif 000022
【図２１】
2004288206.tif 000023
【図２２】
2004288206.tif 000024
【図２３】
2004288206.tif 000025
【図２４】
2004288206.tif 000026
【図２５】
2004288206.tif 000027
【図２６】
2004288206.tif 000028
【図２７】
2004288206.tif 000029
【図２８】
2004288206.tif 000030
【図２９】
2004288206.tif 000031