(57)【要約】【課題】非通信ステップのハードウェア動作をシミュレーションするための計算量を削減してシミュレーションを高速化することにより、ハードウェアの検証に要する時間を節約することができて、システムＬＳＩの開発コストを低減すると共に開発期間を短縮する。【解決手段】ハードウェア仕様として要求される動作周波数でＣＤＦＧをスケジューリングして各ステップに割り振るスケジューリング・ステップ割り振り手段５１４と、ＣＤＦＧから通信を行う動作が含まれない非通信ステップを抽出する非通信ステップ抽出手段５１５と、非通信ステップのハードウェアの動作を統合した計算式を生成してサイクル精度で検証可能なプログラミング記述を生成するステップサイクル精度検証記述生成手段５１６とを有している。【選択図】図２
2010237858.tif 000002
【特許請求の範囲】
【請求項１】
ハードウェアの構造に関する情報を含まず、処理動作のみが記述されたハードウェアの動作記述から、当該ハードウェアを機能ブロックに分割する機能ブロック分割手段と、
該機能ブロック分割手段で分割された機能ブロック毎に、該動作記述を解析した動作情報から該ハードウェアのコントロールデータフローグラフを生成するコントロールデータフローグラフ生成手段と、
ハードウェア仕様として要求される動作周波数で該コントロールデータフローグラフをスケジューリングして各ステップに割り振るスケジューリング・ステップ割り振り手段と、
該コントロールデータフローグラフから通信を行う動作が含まれない非通信ステップを抽出する非通信ステップ抽出手段と、
該非通信ステップのハードウェアの動作を統合した計算式を生成してサイクル精度で検証可能なプログラミング記述を生成するステップサイクル精度検証記述生成手段とを有する高位合成装置。
【請求項２】
前記ステップサイクル精度検証記述生成手段は、
前記非通信ステップのハードウェアの動作を統合した計算式を生成する計算式生成手段と、
該計算式を用いて、該ハードウェアを汎用プログラミング言語で表現した記述として、サイクル精度で検証する動作モデルを生成する動作モデル生成手段とを有する請求項１に記載の高位合成装置。
【請求項３】
前記非通信ステップ抽出手段は、前記コントロールデータフローグラフに含まれる各ノードの動作情報を用いて、通信を行う動作を表すノードが含まれないステップを選び出す請求項１に記載の高位合成装置。
【請求項４】
前記非通信ステップ抽出手段は、前記コントロールデータフローグラフの中から通信ステップを抽出することにより、該通信ステップ以外を前記非通信ステップとして抽出する請求項１に記載の高位合成装置。
【請求項５】
前記計算式生成手段は、通信を行う動作を表すノードが含まれない非通信ステップの中で、最終のステップに含まれるレジスタの出力結果を計算するための計算式を生成する請求項２に記載の高位合成装置。
【請求項６】
前記計算式生成手段は、前記コントロールデータフローグラフの中のセレクタの選択条件によって不要となる演算を行わないように計算式を生成する請求項２または５に記載の高位合成装置。
【請求項７】
前記ハードウェアの機能ブロック間で計算を実行する機能ブロックの実行順序を制御する制御記述を生成する機能ブロック実行順序制御記述生成手段を更に有する請求項１に記載の高位合成装置。
【請求項８】
前記実行順序制御記述生成手段は、前記ハードウェアの機能ブロック毎に、前記計算を終了したステップを数えるカウンタを有しており、該カウンタのカウント値が最小である機能ブロックから順番に次の計算を行う制御記述を生成する請求項７に記載の高位合成装置。
【請求項９】
通信を行うステップの１ステップ前までの非通信ステップは、前記機能ブロック内で連続して前記計算を実行する請求項７または８に記載の高位合成装置。
【請求項１０】
前記通信は、機能ブロック間通信および共有リソースアクセスのいずれかである請求項１、３および５のいずれかに記載の高位合成装置。
【請求項１１】
ハードウェアの構造に関する情報を含まず、処理動作のみが記述されたハードウェアの動作記述から、当該ハードウェアを機能ブロックに分割する機能ブロック分割工程と、
該機能ブロック分割工程で分割した機能ブロック毎に、該動作記述を解析した動作情報から該ハードウェアのコントロールデータフローグラフを生成するコントロールデータフローグラフ生成工程と、
ハードウェア仕様として要求される動作周波数で該コントロールデータフローグラフをスケジューリングして各ステップに割り振るスケジューリング・ステップ割り振り工程と、
該コントロールデータフローグラフから通信を行う動作が含まれない非通信ステップを抽出する非通信ステップ抽出工程と、
該非通信ステップのハードウェアの動作を統合した計算式を生成してサイクル精度で検証する動作モデルを生成するステップサイクル精度検証記述生成工程とを有する高位合成方法。
【請求項１２】
前記ステップサイクル精度検証記述生成工程は、
前記非通信ステップのハードウェアの動作を統合した計算式を生成する計算式生成工程と、
該計算式を用いて、ハードウェアを汎用プログラミング言語で表現した記述として、サイクル精度で検証する動作モデルを生成する動作モデル生成工程とを有する請求項１１に記載の高位合成方法。
【請求項１３】
前記非通信ステップ抽出工程は、前記コントロールデータフローグラフに含まれる各ノードの動作情報を用いて、通信を行う動作を表すノードが含まれないステップを選び出す請求項１１に記載の高位合成方法。
【請求項１４】
前記非通信ステップ抽出工程は、前記コントロールデータフローグラフの中から通信ステップを抽出することにより、該通信ステップ以外を前記非通信ステップとして抽出する請求項１１に記載の高位合成方法。
【請求項１５】
前記計算式生成工程は、通信を行う動作を表すノードが含まれないステップの中で、最終のステップに含まれるレジスタの出力結果を計算するための計算式を生成する請求項１２に記載の高位合成方法。
【請求項１６】
前記計算式生成工程は、前記コントロールデータフローグラフの中のセレクタの選択条件によって不要となる演算を行わないように計算式を生成する請求項１２に記載の高位合成方法。
【請求項１７】
前記ハードウェアの機能ブロック間で計算を実行する機能ブロックの実行順序を制御する制御記述を生成する機能ブロック実行順序制御記述生成工程を更に有する請求項１１に記載の高位合成方法。
【請求項１８】
前記実行順序制御記述生成工程は、前記ハードウェアの機能ブロック毎に、前記計算を終了したステップを数えるカウンタを有しており、該カウンタのカウント値が最小である機能ブロックから順番に次の計算を行う制御記述を生成する請求項１７に記載の高位合成方法。
【請求項１９】
請求項１〜１０のいずれかに記載の高位合成装置を用いてハードウェア動作をシミュレーションした論理合成回路情報に基づいてレジストパターンを設計し、この設計情報によりパターニングしたレジストパターンを用いて半導体集積回路を製造する半導体集積回路の製造方法。
【請求項２０】
請求項１１〜１８のいずれかに記載の高位合成方法の各工程をコンピュータに実行させるための処理手順が記述された制御プログラム。
【請求項２１】
請求項２０に記載の制御プログラムが格納されたコンピュータ読み取り可能な可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ハードウェアの動作を検証できる汎用プログラミング記述を生成する高位合成装置および高位合成方法、この高位合成装置を用いた半導体集積回路の製造方法、この動作合成方法の各工程をコンピュータに実行させるための処理手順が記述された制御プログラム、この制御プログラムが格納されたコンピュータ読み取り可能な可読記憶媒体に関する。
【背景技術】
【０００２】
従来より、システムＬＳＩなどの半導体集積回路のハードウェア部分を設計するため、ＲＴＬ（レジスタ・トランスファ・レベル）での設計技術が用いられてきた。ところが、大規模化、複雑化するシステムを設計するためには、膨大な時間と労力が必要となるため、効率的に設計作業を進めるために高位合成技術が用いられるようになってきた。
【０００３】
従来の高位合成装置は、ハードウェアの構造に関する情報は含まず、処理の動作のみを記述した動作記述から、ＲＴＬ（レジスタ・トランスファ・レベル）の論理回路を自動生成する高位合成技術を用いたコンピュータシステムである。高位合成手法としては、例えば特許文献１で提案されているような方法がある。ハードウェアの動作を表すために従来からハードウェアの設計言語として用いられてきたＨＤＬ（Ｈａｒｄｗａｒｅ  Ｄｅｓｃｒｉｐｔｉｏｎ  Ｌａｎｇｕａｇｅ）に比べて、抽象度の高い言語、例えばＣ言語やＣ＋＋言語などを用いて書かれた動作記述を解析し、設計仕様で与えられるクロック周波数で動作が可能なようにハードウェア動作をスケジューリングし、必要に応じて演算器やレジスタのアロケーションを行い、ＦＳＭ（Ｆｉｎｉｔｅ  Ｓｔａｔｅ  Ｍａｃｈｉｎｅ：有限状態機械）で構成される制御回路と、演算などを行うデータパス回路をＨＤＬ言語として出力する。
【０００４】
このように、高位合成技術などによって得られたＨＤＬが設計仕様通りに動作するかどうかを検証する必要がある。従来では、ハードウェアの検証にＨＤＬシミュレータを用いていた。このＨＤＬシミュレータにテストパターンを入力し、シミュレーションして得られる出力が期待する値かどうかを検証する。
【０００５】
しかし、ハードウェアの動作が複雑になり、より多くの、また、より長いテストパターンを必要とする場合、従来のように、ＨＤＬシミュレータを用いた検証には、多大な時間と労力が必要となる。この検証に要する時間を短縮する目的で、特許文献２や特許文献３が提案されている。特許文献２や特許文献３では、高位合成技術を用いたハードウェアのクロックサイクル精度の動作モデルの生成方法が開示されている。
【０００６】
これらの特許文献２および特許文献３の高位合成技術を用いると、従来のＨＤＬシミュレータのように信号変化のイベント単位で行われる計算に比べて、レジスタの値をクロックサイクル単位で計算するだけでよく、シミュレーションに必要な計算量を大幅に削減することができる。
【０００７】
特許文献２や特許文献３の従来技術によると、図１６に示すように、ハードウェアの動作記述から構文解析および字句解析を行ってブロック分割を実行した後に、ＣＤＦＧ（コントロール・データ・フロー・グラフ）を生成し、ハードウェアの設計仕様で要求される動作周波数でハードウェアが動作可能なようにスケジューリングし、ＣＤＦＧに含まれるノードをステート毎に割り振り、ＣＤＦＧの各ノードが持つ動作情報を用いて動作モデルを生成し、ＣＤＦＧの枝情報を用いて各ノードの動作モデルを計算する順序付けを行い、レジスタへの入力値を求めるための計算式を作成してサイクルアキュレートモデルの記述を生成する。ここで、ＣＤＦＧのノードとは、ハードウェアで実現されるべき演算動作、例えば加算、減算、乗算、除算などを表したもので、各ノードは演算の実行順序などから前後関係を持ち、有向な枝で結ばれている。
【０００８】
例えば、図１７に示すようなハードウェアの動作記述を高位合成して得られるＣＤＦＧの一例を図１８に示している。このＣＤＦＧの事例では、入力ａと入力ｂを乗算するノード３０１と、入力ｃと入力ｄを乗算するノード３０２、および各乗算ノードの結果を加算するノード３０３が存在している。このように、特許文献３では、ＣＤＦＧから作成されたレジスタへの計算式をクロックサイクル単位で計算することにより、ハードウェアのシミュレーションをＨＤＬシミュレータに比べて高速に行う手法を提案している。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開平５−１０１１４１号公報
【特許文献２】特開２００４−３４８６０６号公報
【特許文献３】特開２００６−１３９７２９号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
上記特許文献２や特許文献３に提案されている従来の高位合成手法では、ハードウェアに含まれるレジスタの計算式をサイクル精度で計算し、シミュレーションを行っている。どのレジスタの計算式が実行されるかは、高位合成の過程でスケジューリングされたＣＤＦＧの各ステップに含まれるレジスタによる。計算するステップを順番に進めていくことにより、ハードウェアのサイクル精度のシミュレーションが実現できる。
【００１１】
スケジューリングされたＣＤＦＧのステップには、外部との通信を表すノードを含むステップがある。ここで言う外部とは、例えば演算途中の値を保存しておくためのＲＡＭや、並列動作する他のハードウェアブロックや、テストベンチなどである。また一方で、このような通信を表すノードを含まないステップがある。例えば、あるレジスタから読み出した値を用いて演算し、その結果をレジスタに保存するような動作を表すノードだけを含むステップなどである。
【００１２】
以降の説明を簡略化するために、このように通信を表すノードを通信ノードとし、また、１つでも通信ノードを含むステップを通信ステップと呼ぶことにする。また、通信を表すノード以外を非通信ノードとし、また、非通信ノードのみを含むステップを非通信ステップと呼ぶことにする。これら通信ステート、非通信ステートの１つの計算が、ハードウェアの１クロックサイクル分の動作のシミュレーションに相当する。
【００１３】
ここで、テストベンチからデータを受信し、受信したデータを用いて演算を行い、その結果をテストベンチに送信するような動作を考える。この動作を実現するため、高位合成技術でハードウェアを合成し、サイクル精度でシミュレーション可能なモデルを生成してシミュレーションをする場合、例えば図１９で示すように、テストベンチからデータを受信するために１ステップを必要とし、次に、受信したデータを用いて演算するために１００ステップが必要であり、最後に、テストベンチに演算結果を送信するために１ステップ必要であると仮定する。
【００１４】
つまり、ノード４０１やノード４０４のように、通信ノードを含むステップは通信ステップであり、ノード４０２やノード４０３のように非通信ノードのみを含むステップは非通信ステップであると言える。高位合成においては、図１９では、各ステップの境界とノード間の枝が交差するポイントがハードウェアのレジスタに相当する。特許文献３の高位合成手法によると、このレジスタへの値を計算するための式を生成し、計算することによりハードウェアのサイクル精度のシミュレーションを実現する。
【００１５】
図２０に、特許文献３の高位合成手法によって生成した図１９のＣＤＦＧのサイクル精度の検証用記述の一例を示している。この高位合成手法によるサイクル精度の検証用記述の事例は、Ｃ言語の文法を用いて記述した一例である。図１９に示すＣＤＦＧの各ステップはそれぞれ関数として表されている。
【００１６】
この関数ｓｔｅｐ０は、テストベンチからデータを受信する処理を行う関数であり、通信ステップの関数である。関数ｓｔｅｐ１、ｓｔｅｐ２などは、演算処理を行う関数で非通信ステップの関数である。関数ｓｔｅｐ１やｓｔｅｐ２などの関数は、図１９で示すように１００ステップ分必要である。関数ｓｔｅｐ１０１は演算結果をテストベンチに送信する処理を行う関数で、通信ステップの関数である。変数ｒ０、ｒ１、ｒ２はハードウェアのレジスタを表現しており、関数ｓｔｅｐ１やｓｔｅｐ２などで演算された結果を保存する。変数ｒ０は、図１９中のノード４０１とノード４０２を結ぶ枝とステップの境界が交差するポイントのレジスタを表している。また、変数ｒ１は、図１９中のノード４０２とノード４０３を結ぶ枝とステップの境界が交差するポイントのレジスタを表している。
【００１７】
図２０で示すように、テストベンチから受信したデータを元に各ステップで演算し、レジスタを表す変数を中継して結果をテストベンチに送信する。各ステップがハードウェアのクロックサイクルに相当するため、ステップの関数を実行した個数を数え上げることによりハードウェアのクロックサイクル精度のシミュレーションが可能となる。
【００１８】
このハードウェアの動作を検証するため、各クロックサイクル、つまり、ＣＤＦＧの各ステップにおけるレジスタ値をシミュレーションする場合、図２０で示すようなモデルを用いると、多くのレジスタの値を逐次計算する必要があるが、テストベンチから送信したデータが正しく演算されてテストベンチで受信できるか否かを検証したい場合、演算の途中経過、即ち図１９で示すようなレジスタの値が正しいか否かを確認する必要がないのであれば、関数ｓｔｅｐ１やｓｔｅｐ２での演算結果を変数ｒ０やｒ１に逐次保存するための処理は冗長であると言える。各ステップで演算の入出力の個数が増えれば、各ステップで計算するレジスタの個数も増えてその計算時間は多大なものとなってしまう。また、ステップの関数の数が多ければ、関数の切り替え時間も増大することになる。
【００１９】
本発明は、上記従来の問題を解決するもので、非通信ステップのハードウェア動作をシミュレーションするための計算量を削減してシミュレーションを高速化することにより、ハードウェアの検証に要する時間を節約することができて、システムＬＳＩの開発コストを低減すると共に開発期間を短縮することができる高位合成装置および高位合成方法、この高位合成装置を用いて論理回路などの半導体集積回路を製造する半導体集積回路の製造方法、この動作合成方法をコンピュータに実行させるための処理手順が記述された制御プログラム、この制御プログラムが格納されたコンピュータ読み取り可能な可読記憶媒体を提供することを目的とする。
【課題を解決するための手段】
【００２０】
本発明の高位合成装置は、ハードウェアの構造に関する情報を含まず、処理動作のみが記述されたハードウェアの動作記述から、当該ハードウェアを機能ブロックに分割する機能ブロック分割手段と、該機能ブロック分割手段で分割された機能ブロック毎に、該動作記述を解析した動作情報から該ハードウェアのコントロールデータフローグラフを生成するコントロールデータフローグラフ生成手段と、ハードウェア仕様として要求される動作周波数で該コントロールデータフローグラフをスケジューリングして各ステップに割り振るスケジューリング・ステップ割り振り手段と、該コントロールデータフローグラフから通信を行う動作が含まれない非通信ステップを抽出する非通信ステップ抽出手段と、該非通信ステップのハードウェアの動作を統合した計算式を生成してサイクル精度で検証可能なプログラミング記述を生成するステップサイクル精度検証記述生成手段とを有するものであり、そのことにより上記目的が達成される。
【００２１】
また、好ましくは、本発明の高位合成装置におけるステップサイクル精度検証記述生成手段は、前記非通信ステップのハードウェアの動作を統合した計算式を生成する計算式生成手段と、該計算式を用いて、該ハードウェアを汎用プログラミング言語で表現した記述として、サイクル精度で検証する動作モデルを生成する動作モデル生成手段とを有する。
【００２２】
さらに、好ましくは、本発明の高位合成装置における非通信ステップ抽出手段は、前記コントロールデータフローグラフに含まれる各ノードの動作情報を用いて、通信を行う動作を表すノードが含まれないステップを選び出す。
【００２３】
さらに、好ましくは、本発明の高位合成装置における非通信ステップ抽出手段は、前記コントロールデータフローグラフの中から通信ステップを抽出することにより、該通信ステップ以外を前記非通信ステップとして抽出する。
【００２４】
さらに、好ましくは、本発明の高位合成装置における計算式生成手段は、通信を行う動作を表すノードが含まれない非通信ステップの中で、最終のステップに含まれるレジスタの出力結果を計算するための計算式を生成する。
【００２５】
さらに、好ましくは、本発明の高位合成装置における計算式生成手段は、前記コントロールデータフローグラフの中のセレクタの選択条件によって不要となる演算を行わないように計算式を生成する。
【００２６】
さらに、好ましくは、本発明の高位合成装置におけるハードウェアの機能ブロック間で計算を実行する機能ブロックの実行順序を制御する制御記述を生成する機能ブロック実行順序制御記述生成手段を更に有する。
【００２７】
さらに、好ましくは、本発明の高位合成装置における実行順序制御記述生成手段は、前記ハードウェアの機能ブロック毎に、計算を終了したステップを数えるカウンタを有しており、該カウンタのカウント値が最小である機能ブロックから順番に計算を行う制御記述を生成する。
【００２８】
さらに、好ましくは、本発明の高位合成装置における通信を行うステップの１ステップ前までの非通信ステップは、前記機能ブロック内で連続して前記計算を実行する。
【００２９】
さらに、好ましくは、本発明の高位合成装置における通信は、機能ブロック間通信および共有リソースアクセスのいずれかである。
【００３０】
本発明の高位合成方法は、ハードウェアの構造に関する情報を含まず、処理動作のみが記述されたハードウェアの動作記述から、当該ハードウェアを機能ブロックに分割する機能ブロック分割工程と、該機能ブロック分割工程で分割した機能ブロック毎に、該動作記述を解析した動作情報から該ハードウェアのコントロールデータフローグラフを生成するコントロールデータフローグラフ生成工程と、ハードウェア仕様として要求される動作周波数で該コントロールデータフローグラフをスケジューリングして各ステップに割り振るスケジューリング・ステップ割り振り工程と、該コントロールデータフローグラフから通信を行う動作が含まれない非通信ステップを抽出する非通信ステップ抽出工程と、該非通信ステップのハードウェアの動作を統合した計算式を生成してサイクル精度で検証する動作モデルを生成するステップサイクル精度検証記述生成工程とを有するものであり、そのことにより上記目的が達成される。
【００３１】
また、好ましくは、本発明の高位合成方法におけるステップサイクル精度検証記述生成工程は、前記非通信ステップのハードウェアの動作を統合した計算式を生成する計算式生成工程と、該計算式を用いて、ハードウェアを汎用プログラミング言語で表現した記述として、サイクル精度で検証する動作モデルを生成する動作モデル生成工程とを有する。
【００３２】
さらに、好ましくは、本発明の高位合成方法における非通信ステップ抽出工程は、前記コントロールデータフローグラフに含まれる各ノードの動作情報を用いて、通信を行う動作を表すノードが含まれないステップを選び出す。
【００３３】
さらに、好ましくは、本発明の高位合成方法における非通信ステップ抽出工程は、前記コントロールデータフローグラフの中から通信ステップを抽出することにより、該通信ステップ以外を前記非通信ステップとして抽出する。
【００３４】
さらに、好ましくは、本発明の高位合成方法における計算式生成工程は、通信を行う動作を表すノードが含まれないステップの中で、最終のステップに含まれるレジスタの出力結果を計算するための計算式を生成する。
【００３５】
さらに、好ましくは、本発明の高位合成方法における計算式生成工程は、前記コントロールデータフローグラフの中のセレクタの選択条件によって不要となる演算を行わないように計算式を生成する。
【００３６】
さらに、好ましくは、本発明の高位合成方法におけるハードウェアの機能ブロック間で計算を実行する機能ブロックの実行順序を制御する制御記述を生成する機能ブロック実行順序制御記述生成工程を更に有する。
【００３７】
さらに、好ましくは、本発明の高位合成方法における実行順序制御記述生成工程は、前記ハードウェアの機能ブロック毎に、前記計算を終了したステップを数えるカウンタを有しており、該カウンタのカウント値が最小である機能ブロックから順番に次の計算を行う制御記述を生成する。
【００３８】
本発明の半導体集積回路の製造方法は、本発明の上記高位合成装置を用いてハードウェア動作をシミュレーションした論理合成回路情報に基づいてレジストパターンを設計し、この設計情報によりパターニングしたレジストパターンを用いて半導体集積回路を製造するものであり、そのことにより上記目的が達成される。
【００３９】
本発明の制御プログラムは、本発明の上記高位合成方法の各工程をコンピュータに実行させるための処理手順が記述されたものであり、そのことにより上記目的が達成される。
【００４０】
本発明の可読記憶媒体は、本発明の上記制御プログラムが格納されたコンピュータ読み取り可能なものであり、そのことにより上記目的が達成される。
【００４１】
上記構成により、以下、本発明の作用を説明する。
【００４２】
本発明の高位合成装置においては、ハードウェアの構造に関する情報を含まず、処理動作のみが記述されたハードウェアの動作記述から、当該ハードウェアを機能ブロックに分割する機能ブロック分割手段と、この機能ブロック分割手段で分割された機能ブロック毎に動作記述を解析した動作情報からハードウェアのコントロールデータフローグラフを生成するコントロールデータフローグラフ生成手段と、ハードウェア仕様として要求される動作周波数でコントロールデータフローグラフをスケジューリングして各ステップに割り振るスケジューリング・ステップ割り振り手段と、コントロールデータフローグラフから通信を行う動作が含まれない非通信ステップを抽出する非通信ステップ抽出手段と、非通信ステップのハードウェアの動作を統合した計算式を生成してサイクル精度で検証可能なプログラミング記述を生成するステップサイクル精度検証記述生成手段とを有している。
【００４３】
このように、非通信ステップを一つのステップに統合したため、レジスタは各ステップの境界毎に不要となり、この不要となったレジスタの更新のための計算を削減することが可能となる。これによって、非通信ステップのハードウェア動作をシミュレーションするための計算量を削減してシミュレーションを高速化することができ、ハードウェアの検証に要する時間を節約すると共に、システムＬＳＩの開発コストを低減すると共に開発期間を短縮することが可能となる。
【発明の効果】
【００４４】
以上により、本発明によれば、非通信ステップを一つのステップに統合したため、レジスタは各ステップの境界毎に不要となることから、この不要となったレジスタの更新のための計算を削減して、非通信ステップのハードウェア動作をシミュレーションするための計算量を削減してシミュレーションを高速化することができ、ハードウェアの検証に要する時間を節約すると共に、システムＬＳＩの開発コストを低減すると共に開発期間を短縮することができる。
【図面の簡単な説明】
【００４５】
【図１】本発明の高位合成装置の基本構成例を模式的に示すブロック図である。
【図２】図１のＲＯＭ内に格納された制御プログラムにおける高位合成手段の詳細な構成例をそのハードウェア構成と共に模式的に示すブロック図である。
【図３】ハードウェアの動作記述の一例を示す図である。
【図４】図２の制御プログラムとしてのハードウェア高位合成プログラムにおけるＣＤＦＧ生成手段を用いて得られるＣＤＦＧの一例を示す図である。
【図５】非通信ステップを抽出するアルゴリズムを示すフローチャートである。
【図６】通信ステップを抽出するアルゴリズムを示すフローチャートである。
【図７】通信ステップと非通信ステップを抽出するアルゴリズムを示すフローチャートである。
【図８】本発明の手法によって図４に示すＣＤＦＧの非通信ステップを統合して、計算するレジスタの数を削減した場合のＣＤＦＧを示す図である。
【図９】図８のＣＤＦＧから得られるハードウェアをサイクル精度で検証可能なプログラミング記述の一例を示す図である。
【図１０】図８のＣＤＦＧから得られるハードウェアをサイクル精度で検証可能なプログラミング記述の別の例を示す図である。
【図１１】セレクタの選択条件ｓ１が「０」で、かつ選択条件ｓ２が「０」のときの図８のＣＤＦＧを示す図である。
【図１２】２つの並列動作する機能ブロック間で、誤ったサイクル精度の検証を説明するためのＣＤＦＧの事例を示す図である。
【図１３】本発明の実施形態２において、２つの並列動作する機能ブロック間で、各機能ブロックの計算順序を制御した正しいサイクル精度の検証を説明するためのＣＤＦＧの事例を示す図である。
【図１４】本発明の実施形態２において、複数の並列動作する機能ブロックの計算順序を制御する制御記述を生成するアルゴリズムを示すフローチャートである。
【図１５】図１４のアルゴリズムをＣ言語のプログラムを用いて実装した制御記述例を示す図である。
【図１６】特許文献２および３に開示されている従来の高位合成手法の各処理工程を模式的に示す流れ図である。
【図１７】ハードウェアの動作記述の一例を示す図である。
【図１８】図１７のハードウェアの動作記述を高位合成して得られるＣＤＦＧの一例を示す図である。
【図１９】テストベンチからデータを受信し、受信したデータを用いて一連の演算をし、最後に、テストベンチに演算結果を送信する処理をＣＤＦＧからスケジューリングした結果を示す図である。
【図２０】特許文献２および３の高位合成手法によって生成した図１９のＣＤＦＧから得られるハードウェアをサイクル精度で検証可能なプログラミング記述の一例を示す図である。
【発明を実施するための形態】
【００４６】
以下に、本発明の高位合成装置および高位合成方法の実施形態１、２について図面を参照しながら具体的に説明する前に、図１の本発明の高位合成装置の基本構成例および図２の制御プログラムにおける高位合成手段の詳細な構成例について説明する。
【００４７】
図１は、本発明の高位合成装置の基本構成例を模式的に示すブロック図である。
【００４８】
図１において、本実施形態のハードウェア検証用プログラミング記述生成装置としての高位合成装置１は、コンピュータシステムで構成されており、各種入力指令を可能とするキーボードやマウス、画面入力装置などの操作入力部２と、各種入力指令に応じて表示画面上に、初期画面、選択誘導画面および処理結果画面などの各種画像を表示可能とする表示部３と、全体的な制御を行う制御手段としてのＣＰＵ４（中央演算処理装置）と、ＣＰＵ４を動作させるための制御プログラムおよびこれに用いる各種データなどが記録されたコンピュータ読み取り可能な可読記録媒体（記憶手段）としてのＲＯＭ５と、ＣＰＵ４の起動時にワークメモリとして働く一時記憶手段としてのＲＡＭ６とを有している。
【００４９】
ＣＰＵ４は、操作入力部２からの入力指令の他、ＲＯＭ５内からＲＡＭ６内に読み出された制御プログラムおよびこれに用いる各種データに基づいて、次の図２で詳細に後述する高位合成手段５１の各機能を実行するようになっている。
【００５０】
ＲＯＭ５は、ここでは可読記録媒体（記憶手段）としてのハードディスクであるが、その他に、光ディスク、磁気ディスクおよびＩＣメモリなどの可読記録媒体（記憶手段）で構成されていてもよい。この制御プログラムおよびこれに用いる各種データは、携帯自在な光ディスク、磁気ディスクおよびＩＣメモリなどからＲＯＭ５にダウンロードされてもよいし、コンピュータのハードディスクから別のＲＯＭ５にダウンロードされてもよいし、無線または有線、インターネットなどを介してＲＯＭ５にダウンロードされてもよい。
【００５１】
図２は、図１のＲＯＭ５内に格納された制御プログラムにおける高位合成手段の詳細な構成例をそのハードウェア構成と共に模式的に示すブロック図である。なお、図２では、ハードウェアをサイクル精度で検証可能なプログラミング記述を生成する詳細処理構成を示しており、ハードウェア検証用プログラミング記述の高位合成において、回路の機能単位でブロックに分割した形で動作を記述でき、各機能ブロックを並列動作可能なハードウェアの動作記述とする。また、この説明において生成されるハードウェアをサイクル精度で検証可能なプログラミング記述は、汎用プログラミング言語のＣ言語で記述されるものとする。他の言語でも同様に記述できる。
【００５２】
図２において、本発明のハードウェア検証用プログラミング記述生成装置としての高位合成装置１の構成を更に説明すると、キーボードなどの入力装置である操作入力部２、表示画面３ａを持つモニタ装置である表示部３、計算機本体に含まれるＣＰＵ（中央演算処理ユニット）４、メモリなどのＲＡＭ６および磁気ディスク（ハードディスク）などの可読記憶媒体としてのＲＯＭ５から構成されている。磁気ディスクなどの可読記憶媒体としてのＲＯＭ５には、本発明のハードウェアをサイクル精度で検証可能なプログラミング記述を高位合成するための制御プログラムとしてのハードウェア高位合成プログラムが格納されている。
【００５３】
高位合成手段５１の各機能を実行する制御プログラムとしてのハードウェア高位合成プログラムには、次の各機能手段が含まれる。
【００５４】
即ち、本発明の高位合成手段５１は、ハードウェアの動作記述を構文解析・字句解析する構文解析・字句解析手段５１１と、機能ブロック単位で並列動作をするかまたは直列動作をするハードウェアの回路ブロックに分割する機能ブロック分割手段５１２と、各機能ブロックでＣＤＦＧ（コントロール・データフロー・グラフ）を生成するＣＤＦＧ生成手段５１３と、各機能ブロックで、ハードウェアに与えられた設計仕様の動作周波数の制約を満たすためにＣＤＦＧのノードをスケジューリングしてノードをステップに割り振るスケジューリング・ステップ割り振り手段５１４と、各機能ブロックで、非通信ステップを抽出する非通信ステップ抽出手段５１５と、非通信ステップ抽出手段５１５で抽出されたステップのハードウェアの動作を統合した計算式を生成し、ハードウェアを汎用プログラミング言語で表現した記述として、各機能ブロックで、各ステップをサイクル精度で検証する動作モデル（検証可能なプログラミング記述）を生成するステップサイクル精度検証記述生成手段５１６と、機能ブロック間で、計算を実行する機能ブロックの実行順序を制御するための記述を生成する機能ブロック実行順序制御記述生成手段５１７とを有している。
【００５５】
本発明の高位合成手段５１を用いた高位合成方法としては、構文解析・字句解析手段５１１がハードウェアの動作記述を構文解析・字句解析する構文解析・字句解析工程と、その後に、機能ブロック分割手段５１２が、回路のハードウェアの構造に関する情報を含まず、処理動作のみが記述されたハードウェアの動作記述から、機能ブロック単位で並列動作するなどのハードウェアを機能ブロックに分割する機能ブロック分割工程と、ＣＤＦＧ生成手段５１３が、分割された機能ブロック毎に動作記述を解析した動作情報からハードウェアのコントロールデータフローグラフを生成するＣＤＦＧ生成工程と、スケジューリング・ステップ割り振り手段５１４が、ハードウェア仕様として要求される動作周波数でコントロールデータフローグラフをスケジューリングして各ステップに割り振るスケジューリング・ステップ割り振り工程と、非通信ステップ抽出手段５１５が、通信を行う動作が含まれないステップを抽出する非通信ステップ抽出工程と、ステップサイクル精度検証記述生成手段５１６が、抽出されたステップのハードウェアの動作を統合した計算式を生成し、ハードウェアを汎用プログラミング言語で表現した記述として、サイクル精度で検証する動作モデルを生成するステップサイクル精度検証記述生成工程と、機能ブロック実行順序制御記述生成手段５１７が、機能ブロック間で、計算を実行する機能ブロックの実行順序を制御するための記述を生成する機能ブロック実行順序制御記述生成工程とを有している。
【００５６】
なお、通常の高位合成処理は、スケジューリング後に、各処理を回路素子に割り付けると共に処理途中のデータを記憶するためにレジスタに割り付けるアロケーション工程と、スケジューリング工程およびアロケーション工程による各処理結果にしたがって、データパスとそれを制御するコントローラを生成し、演算器およびレジスタの接続を表すネットリストを作成すると共に、上記クロック情報に基づいて信号伝播保証回路（または同期化回路）を追加生成したりするデータパス・コントローラ生成工程とを有しており、そのデータパス・コントローラ生成結果をＲＴＬ記述として出力している。このデータパス・コントローラ生成結果によって、論理合成回路情報を得ることができる。
【００５７】
本発明の半導体集積回路の製造方法では、高位合成手段５１を用いてハードウェア動作をシミュレーションし、高位合成した論理合成回路情報に基づいてレジストパターンを設計し、この設計情報によりパターニングしたレジストパターンを用いて半導体集積回路（ＩＣやＬＳＩ）を製造することができる。
【００５８】
ここで、高位合成手段５１を用いたハードウェア動作のシミュレーションと、高位合成する設計情報の論理合成回路情報との関係について説明する。
【００５９】
本発明のシミュレーションは、スケジューリング・ステップ割り振り工程以降であれば行うことができる。
【００６０】
本実施形態では、レジスタを使って説明しており、レジスタアロケーション以降の回路情報を用いているような説明になっているが、アロケーションより前でも本発明のシミュレーションは可能である。スケジューリング後であれば、ＣＤＦＧのあるステップのノードの計算結果（出力）が次のステップで使用されるかどうか判断できるので、結果がステップを跨ぐような場合は結果を保存しておけばよい。次のステップでその保存してある値を使う。回路シミュレーションを行うための動作モデルを本実施形態のようにＣ言語で表現する場合、変数などを用いて計算結果を保存する。レジスタアロケーションの情報があれば、その変数がハードウェアのどのレジスタに相当するかを識別することができる。
【００６１】
したがって、例えば設計情報の論理合成回路情報はデータパス・コントローラ生成工程後に得られるが、本発明のシミュレーションは、スケジューリング・ステップ割り振り工程後でアロケーション工程前でもよく、よちろん、アロケーション工程後でもデータパス・コントローラ生成工程後でもよい。
【００６２】
ここで、本発明の高位合成手段５１の特徴構成としては、非通信ステップを抽出する非通信ステップ抽出手段５１５と、ステップのハードウェアの動作を統合した計算式を生成し、各機能ブロックで、各ステップをサイクル精度で検証する動作モデルを生成するステップサイクル精度検証記述生成手段５１６と、機能ブロック間で、計算を実行する機能ブロックの実行順序を制御するための記述を生成する機能ブロック実行順序制御記述生成手段５１７とを有している点である。
【００６３】
この機能ブロックを一つ（単一スレッドの場合）だけ持つハードウェアのサイクル精度で検証可能なプログラミング記述を生成する場合を次の実施形態１で詳細に説明する。この場合は、構文解析・字句解析手段５１１、機能ブロック分割手段５１２、ＣＤＦＧ生成手段５１３、スケジューリング・ステップ割り振り手段５１４、非通信ステップ抽出手段５１５およびステップサイクル精度検証記述生成手段５１６を用い、機能ブロック実行順序制御記述生成手段５１７は用いない。
【００６４】
また、複数の機能ブロック（複数のスレッドの場合）を持つハードウェアのサイクル精度で検証可能なプログラミング記述を生成する場合を実施形態２で詳細に説明する。この場合は、構文解析・字句解析手段５１１、機能ブロック分割手段５１２、ＣＤＦＧ生成手段５１３、スケジューリング・ステップ割り振り手段５１４、非通信ステップ抽出手段５１５およびステップサイクル精度検証記述生成手段５１６の他に、機能ブロック実行順序制御記述生成手段５１７を用いる。
（実施形態１）
図３は、ハードウェアの動作記述例を示す図である。
【００６５】
図３に示すハードウェアの動作記述を、図２の制御プログラムとしてのハードウェア高位合成プログラムに基づいて高位合成処理することを考える。図３で示す動作記述では、ｉ０からｉ１５までの変数で表される値を用いて乗算と加算を行い、その結果を変数ｘとｙに代入する。ただし、ｘとｙの計算には条件が付いており、変数ｓ０とｓ１によって乗算と加算で用いるｉ０からｉ１５までの値が選択される。変数ｘとｙの値が求まれば、この２つを加算して変数ｚに代入する。この変数ｚをハードウェア外部に送信する。ここで言うハードウェア外部をテストベンチと仮定する。
図３で示す動作を、図２の制御プログラムとしてのハードウェア高位合成プログラムにおけるＣＤＦＧ生成手段５１３を用いて得られるＣＤＦＧの一例を図４に示している。
【００６６】
図４の事例では、ＣＤＦＧは、加算、乗算などの演算、および複数の入力から条件に従って出力を決定するセレクタなどの非通信ノードと、外部への通信を行う通信ノードと、これらのノードを接続する枝で構成されている。また、ある動作周波数でスケジューリングされた結果、動作に必要なステップは４ステップになっている。即ち、図４では、ステップｎからステップｎ＋３までの４ステップとして表している。図４の事例では、ｉ０からｉ１５までの値については、高位合成処理された回路中の他のレジスタから得られた値である。また、セレクタを表すノードの選択条件であるｓ１とｓ２についても、回路中の他のレジスタから得られる値とする。
【００６７】
以下、各ステップにおける動作について詳細に説明する。
【００６８】
まず、ステップｎにおいて、ｉ０からｉ１５までの値を用いて、ｎ０からｎ７までのノードで乗算処理を行う。各演算結果は、それぞれレジスタｒ０からｒ７に保存される。
【００６９】
次に、ステップｎ＋１において、レジスタｒ０からｒ７の値を用いて、ｎ８からｎ１１までのノードで加算処理を行う。各演算結果は、それぞれレジスタｒ８からｒ１１に保存される。
【００７０】
続いて、ステップｎ＋２におおいて、レジスタｒ８からｒ１１までの値を用いて加算処理を行う。ただし、選択条件ｓ０と選択条件ｓ１が示す値に従い演算で用いるレジスタの値を選択する。本事例において、ノードｎ１２では、選択条件ｓ１の値が「０」のときレジスタｒ８の値が選択され、「１」のときはレジスタｒ９の値が選択される。また、ノードｎ１３では、選択条件ｓ２の値が「０」のときレジスタｒ１０の値が選択され、選択条件ｓ２の値が「１」のときはレジスタｒ１１が選択される。ノードｎ１４で加算演算された結果は、レジスタｒ１２に保存される。
【００７１】
最後に、ステップｎ＋３において、レジスタｒ１２の値を取り出してテストベンチに送信処理する。
【００７２】
このようなＣＤＦＧにおける各ステップの情報を元に、図２の非通信ステップ抽出手段５１５を用いて非通信ステップを抽出する。
【００７３】
図５は、ＣＤＦＧの中から非通信ステップを抽出するアルゴリズムのフローチャートであり、図６は、ＣＤＦＧの中から通信ステップを抽出するアルゴリズムのフローチャートである。なお、この抽出方法は、図７で示すように通信ステップの抽出と非通信ステップの抽出とを同時に行ってもよい。
【００７４】
まず、図５の非通信ステップを抽出するアルゴリズムについて詳細に説明する。
【００７５】
図５に示すように、まず、ステップＳ１で非通信ステップの抽出を開始する。ステップＳ２でＣＤＦＧに含まれる全ての非通信ステップの抽出が完了したかどうかを判定する。続いて、ステップＳ２でＣＤＦＧに含まれる全ての非通信ステップの抽出が完了していない場合は、次のステップＳ３でＣＤＦＧデータからステップの情報を取り出す。さらに、ステップＳ２でＣＤＦＧに含まれる全ての非通信ステップの抽出が完了した場合は、ステップＳ４でその抽出処理を終了する。
【００７６】
次に、ステップＳ３でＣＤＦＧデータから取り出したステップに対して、ステップＳ５で通信ノードが含まれるかどうか判定する。ステップＳ５で通信ノードを含む場合には、ステップＳ２の処理に戻って、全ステップの抽出が完了したかどうかを判定する。ステップＳ５で通信ノードを含まない場合には、次のステップＳ６で非通信ステップのリストにステップの通信ノードを含まないという情報を保存し、ステップＳ２の処理に戻って、全ステップの抽出が完了したかどうかを判定する。
【００７７】
また、以下、図６の通信ステップを抽出するアルゴリズムについて詳細に説明する。
【００７８】
図６に示すように、まず、ステップＳ１１で通信ステップの抽出を開始する。ステップＳ１２でＣＤＦＧに含まれる全ての通信ステップの抽出が完了したかどうかを判定する。続いて、ステップＳ１２でＣＤＦＧに含まれる全ての通信ステップの抽出が完了していない場合は、次のステップＳ１３でＣＤＦＧデータからステップの情報を取り出す。さらに、ステップＳ１２でＣＤＦＧに含まれる全ての通信ステップの抽出が完了した場合は、ステップＳ１４でその抽出処理を終了する。
【００７９】
次に、ステップＳ１３でＣＤＦＧデータから取り出したステップに対して、ステップＳ１５で通信ノードが含まれるかどうか判定する。ステップＳ１５で通信ノードを含まない場合には、ステップＳ１２の処理に戻って、全ステップの抽出が完了したかどうかを判定する。ステップＳ１５で通信ノードを含む場合には、次のステップＳ６で通信ステップのリストにステップの通信ノードを含む情報を保存し、ステップＳ２の処理に戻って、全ステップの抽出が完了したかどうかを判定する。
【００８０】
この図６の通信ステップを抽出するアルゴリズムでは、通信ノードを含むか否かの判定結果によって保存するステップが通信ステップのリストであることを除けば、図５で示す非通信ステップを抽出するアルゴリズムの場合と同様である。
【００８１】
このＣＤＦＧデータの中で、図６に示すアルゴリズムで抽出された通信ステップのリストに入っていない残りのステップは非通信ステップであると言えるので、通信ステップを抽出することで非通信ステップを抽出することも可能である。
【００８２】
さらに、以下、図７の通信ステップおよび非通信ステップを共に抽出するアルゴリズムについて詳細に説明する。
【００８３】
図７に示すように、まず、ステップＳ２１で通信ステップおよび非通信ステップの抽出を開始する。ステップＳ２２でＣＤＦＧに含まれる全てのステップの抽出が完了したかどうかを判定する。続いて、ステップＳ２２でＣＤＦＧに含まれる全てのステップの抽出が完了していない場合は、次のステップＳ２３でＣＤＦＧデータからステップの情報を取り出す。さらに、ステップＳ２２でＣＤＦＧに含まれる全てのステップの抽出が完了した場合は、ステップＳ２４でその抽出処理を終了する。
【００８４】
次に、ステップＳ２３でＣＤＦＧデータから取り出したステップに対して、ステップＳ２５で通信ノードが含まれるかどうか判定する。ステップＳ２５で通信ノードを含む場合には、次のステップＳ２６Ａで通信ステップのリストにステップの通信ノードを含む情報を保存し、ステップＳ２２の処理に戻って、全ステップの抽出が完了したかどうかを判定する。また、ステップＳ２５で通信ノードを含まない場合には、次のステップＳ２６Ｂで非通信ステップのリストにステップの非通信ノードを含む情報を保存し、ステップＳ２２の処理に戻って、全ステップの抽出が完了したかどうかを判定する。
【００８５】
このように、図７で示すアルゴリズムでは、通信ノードを含むか否かの判定結果によって通信ステップのリスト、または非通信ステップのリストに振り分けていることを除けば、図５で示す非通信ステップを抽出するアルゴリズムの場合と同じである。
【００８６】
前述した特許文献３の従来技術にあるように、スケジューリングされたＣＤＦＧの各ステップでは、ステップに含まれるノードと、ノード間の有向な枝の情報を含んでおり、ノードの接続関係からステップ間の接続関係が判明できるとしている。つまり、ステップ間の連続性は、ステップに含まれるノードを調べることで判断できるとしている。
【００８７】
図４に示す事例では、ステップｎ、ステップｎ＋１、およびステップｎ＋２の各ステップは非通信ステップであり、ステップｎ＋３のみが通信ステップである。よって、ステップｎ、ステップｎ＋１、およびステップｎ＋２は非通信ステップリストに登録され、ステップｎ＋３だけが通信ステップリストに登録されることになる。
【００８８】
従来であれば、図２で示す各ステップのサイクル精度シミュレーション記述のステップサイクル精度検証記述生成手段５１６を用いて、ＣＤＦＧの全ステップでのレジスタの値を求めるための計算式を作成するが、本発明においては、連続した非通信ステップの最終ステップに含まれるレジスタの出力結果、つまり、図４におけるレジスタｒ１２の値を求める計算式を作成する。
【００８９】
図５に示す非通信ステップを抽出するアルゴリズムによって得られた非通信ステップのリストからステップを取り出し、取り出した連続するステップのうち、最終ステップに含まれ、レジスタの出力結果の値を求めるための計算式を作成する。図４中のレジスタｒ０からｒ１１までのように、連続する非通信ステップの最終ステップではないステップのレジスタに割り当たっている部分については計算式を作成せず、レジスタｒ１２の計算式の中に含める。
【００９０】
図８は、本発明の手法によって図４に示すＣＤＦＧの非通信ステップを統合して、計算するレジスタの数を削減した場合のＣＤＦＧを示す図である。
【００９１】
図８に示すように、ステップｎからステップｎ＋２までの入力となるレジスタがなく、ステップｎ＋２での出力となるレジスタｒ１２のみがある。ステップｎからステップｎ＋２までのステップを仮想的に１つのステップとして統合し、図２で示すステップサイクル精度検証生成手段５１６を用いてサイクル精度で検証可能なプログラミング記述を生成する。このとき、統合したステップ数が分かっているので、統合されたステップのサイクル精度の計算を実行しても、ハードウェア動作の何クロックサイクル分に相当するか計算可能である。つまり、これは、サイクル精度での検証が可能であることを意味する。
【００９２】
図９は、図８に示すＣＤＦＧのステップｎからステップｎ＋２を統合したステップのサイクル精度で検証可能な記述を、図２に示すステップサイクル精度検証生成手段５１６を用いて生成した事例を示す図である。
【００９３】
図９の事例では、三項演算子を用いて条件分岐する式で表しているが、図１０のようにｉｆ条件文を用いて記述してもよい。図９や図１０の事例では、選択条件ｓ１と選択条件ｓ２の値によって計算で必要な値が選択されている。例えばｓ１が０で、かつｓ２が０の場合、入力ｉ０、ｉ１、ｉ２、ｉ３、ｉ８、ｉ９、ｉ１０、ｉ１１の値を用いてｒ１２に代入する値を計算しているが、入力ｉ４、ｉ５、ｉ６、ｉ７、ｉ１２、ｉ１３、ｉ１４、ｉ１５の値は計算に使用されない。一方、ｓ１が１で、かつｓ２が１の場合、逆に、入力ｉ４、ｉ５、ｉ６、ｉ７、ｉ１２、ｉ１３、ｉ１４、ｉ１５は計算に使用されるが、入力ｉ０、ｉ１、ｉ２、ｉ３、ｉ８、ｉ９、ｉ１０、ｉ１１は使用されない。つまり、選択条件によって計算を分けているため、図８のＣＤＦＧにおいて、計算に必要なノードの動作だけが計算される。
【００９４】
図１１は、セレクタの選択条件ｓ１が「０」でかつ選択条件ｓ２が「０」のときの図８のＣＤＦＧを示す図である。
【００９５】
図１１に示すように、本実施形態１のセレクタの選択条件によって不要な演算を行わない場合であって、例えばセレクタの選択条件ｓ１が「０」でかつ選択条件ｓ２が「０」であれば、ノードｎ２、ｎ３、ｎ９およびノードｎ６、ｎ７、ｎ１１はセレクタによって選択されないので、ノードｎ２、ｎ３、ｎ９およびノードｎ６、ｎ７、ｎ１１の動作は計算する必要がなく、ステップｎからステップｎ＋２までの非通信ステップを統合したステップの計算に必要な計算量を大幅に削減することができる。これによって、高速にハードウェアの動作をサイクル精度でシミュレーション可能である。
【００９６】
したがって、本実施形態１によれば、ステップｎからステップｎ＋２までの非通信ステップを統合したため、レジスタは各ステップの境界毎に不要となって通信ステップ直前の１個で済み、不要となったレジスタの更新のための計算を削減することができて高速にハードウェアの動作をサイクル精度でシミュレーションできる。また、セレクタの選択条件によって不要な計算を削減することができて高速にハードウェアの動作をサイクル精度でシミュレーションできる。さらに、スケジューリング結果から必要なステップ数は分かっているので、サイクル精度でシミュレーションを進めることができる。この場合のサイクルカウントは正確である。
（実施形態２）
本実施形態２では、複数の並列動作をする機能ブロックを含むハードウェアの動作をサイクル精度で検証する場合について説明する。
【００９７】
この場合、機能ブロック間の通信をサイクル精度で確実にシミュレーションする必要がある。上記実施形態１で説明したように、複数の非通信ステップを仮想的に１つのステップとして統合して計算するときには、シミュレーション開始時から計算を行ったステップ数が、機能ブロック間で一致しない場合が出てくる。ステップ数が一致しないと言うことは、各機能ブロックでシミュレーションを行ったクロックサイクル数が一致しないことを意味しており、そのような状況において、機能ブロック間で通信を行っても、正確にサイクル精度でシミュレーションができているとは言えない。よって、機能ブロック間で、計算を実行する機能ブロックの実行順序を制御するための仕組みが必要となる。
【００９８】
図１２は、２つの並列動作する機能ブロック間で、誤ったサイクル精度の検証を説明するためのＣＤＦＧの事例を示す図である。
図１２において説明を簡単にするために、この２つの機能ブロックは共に８個のノードを持ち、ＣＤＦＧの１つのステップで１つのノードの動作を計算するものとする。機能ブロックＡでは、６個の非通信ノードを実行したのち、２個の通信ノードを連続して実行する。これらの通信ノードでは、同一の通信路を用いて、機能ブロックＢにデータを送信する。ただし、それぞれの通信では、異なるデータが送信されるものとする。例えば、１回目の通信ではデータＸを送信し、２回目の通信ではデータＹを送信する。
【００９９】
また、機能ブロックＢでは、３個の非通信ノードを実行したのち、１個の通信ノードを実行する。この通信ノードで通信する対象は機能ブロックＡ以外であるとする。例えば、テストベンチにデータを送信する動作とする。次に、２個の非通信ノードを実行したのち、２個の連続した通信ノードを実行する。これらの通信ノードでは、機能ブロックＡから送信されるデータを受信し、機能ブロックＢで使用するものとする。
【０１００】
図１２の事例では、上記実施形態１で説明した手法を用いて、非通信ステップを仮想的に統合した場合、破線で示したステップの境界部分については統合されて実行される。
前述した特許文献３で述べられている手法を用いて、複数の並列動作する機能ブロックのサイクル精度のシミュレーションでは、計算を実行する機能ブロックの実行順序は任意である。本発明の実施形態２の場合でも同様であり、機能ブロックの実行順序は任意である。図１２で示した事例においては、まず、機能ブロックＡの計算を実行し、次に、機能ブロックＢの計算を実行するものとする。特許文献３で述べられている手法では、各機能ブロックの計算を順番に実行し、全ての計算が終わった時点で１クロックサイクル分のサイクル精度のハードウェア動作の計算が行えることを意味しており、同様の手法を用いて図１２で示す機能ブロックの計算を行うと、以下のような順番で計算を行う。
【０１０１】
図１２に示すように、まず、機能ブロックＡの（１）示す非通信ノードの６ステップを計算する。次に、機能ブロックを変え、機能ブロックＢの（２）で示す非通信ノードの３ステップを計算する。続いて、機能ブロックを変え、機能ブロックＡの（３）で示す通信ノードのステップを計算する。さらに、この通信ノードのステップでは、機能ブロックＢに対してデータＸを送信する。
【０１０２】
次に、機能ブロックを変え、機能ブロックＢの（４）で示す通信ノードのステップを計算する。この通信ノードのステップでは、テストベンチに対して何らかのデータを送信する。その後、機能ブロックを変え、機能ブロックＡの（５）で示す通信ノードのステップを計算する。この通信ノードのステップでは、機能ブロックＢに対してデータＹを送信する。この通信ノードのステップで機能ブロックＡの動作は終了する。
【０１０３】
さらに、機能ブロックを変え、機能ブロックＢの（６）で示す非通信ノードの２ステップを計算する。次に、機能ブロックＢの（７）で示す通信ノードのステップを計算する。この通信ノードのステップでは、機能ブロックＡからデータを受信する。その後、機能ブロックＢの（８）で示す通信ノードのステップを計算する。この通信ノードのステップでは、機能ブロックＡからデータを受信する。この通信ノードのステップで機能ブロックＢの動作も終了する。
【０１０４】
このように、機能ブロックＡの（３）の通信ノードのステップで送信されるデータＸは、機能ブロックＢの（７）の通信ノードのステップで受信して使用されるのが正しい動作であるとすると、機能ブロックＢのステップ（７）の動作を実行する時点では、機能ブロックＡのステップ（５）の動作が実行されているため、データＹを受信してしまい誤った動作となる虞がある。
【０１０５】
正しい計算の順番は、図１３に示すような順番である。図１３で示すようにステップの計算を（１）〜（８）まで順番に行えば、機能ブロックＡの（５）の通信ノードのステップで送信するデータＸは、機能ブロックＢの（６）の受信前に機能ブロックＡの（７）の送信がないので、機能ブロックＢの（６）の通信ノードのステップで正しく受信される。また、機能ブロックＡの（７）の通信ノードのステップで送信するデータＹは、機能ブロックＢの（８）の通信ノードのステップで正しく受信される。
【０１０６】
この場合の本発明の高位合成手段５１の特徴構成としては、非通信ステップを抽出する非通信ステップ抽出手段５１５と、ステップのハードウェアの動作を統合した計算式を生成し、各機能ブロックで、各ステップをサイクル精度で検証する動作モデルを生成するステップサイクル精度検証記述生成手段５１６と、機能ブロック間で、計算を実行する機能ブロックの実行順序を制御するための記述を生成する機能ブロック実行順序制御記述生成手段５１７とを有している。
【０１０７】
機能ブロック実行順序制御記述生成手段５１７は、ハードウェアの機能ブロック毎に、計算を終了したステップを数えるカウンタを持ち、このカウンタのカウント値が最小である機能ブロックから順番に計算を行う制御記述を生成するものである。このことを図１４および図１５を用いて説明する。
【０１０８】
図１４は、複数の並列動作する機能ブロックを含むハードウェアの動作を正しくサイクル精度で検証するために、計算を実行する機能ブロックの順序を制御するためのアルゴリズムを示すフローチャートである。
【０１０９】
以下に、複数の並列動作する機能ブロックの計算順序を制御する記述を生成するアルゴリズムを示すフローチャートについて説明する。
【０１１０】
図１４に示すように、まず、ステップＳ３１でシミュレーションを開始する。ステップＳ３２で各機能ブロックでの計算を実行終了したステップ数を表すカウンタのカウント値を「０」にして初期化する。ここでは、ｎ個の機能ブロックがあるとし、Ｃ言語での変数の配列ｃ［ｎ］を用いて表現している。
【０１１１】
次に、ステップＳ３３で計算を実行終了したステップ数が最小の機能ブロックを選択する。図１４では、ｃ［ｎ］の値を参照し、最小の値を持つ機能ブロックを選択する。
【０１１２】
続いて、ステップＳ３４で選択された機能ブロックの計算を実行する。さらに、ステップＳ３５で計算したステップ数を、計算を実行した機能ブロックのステップ数のカウンタのカウント値に加算する。
【０１１３】
図１５は、図１４のアルゴリズムをＣ言語のプログラムを用いて実装した記述例であって、複数の並列動作する機能ブロックの計算順序を制御する制御記述例を示す図である。
【０１１４】
図１５の制御記述例では、４つの並列動作する機能ブロックがある。各機能ブロックの計算を実行終了したステップ数を表すカウンタのカウント値を、変数の配列ｃ［４］を用いて表している。各機能ブロックの計算を行うための関数は、ｂｌｏｃｋ０、ｂｌｏｃｋ１、ｂｌｏｃｋ２、ｂｌｏｃｋ３で表され、これらの関数の戻り値は、各機能ブロックで計算を実行したステップ数であるとする。
【０１１５】
図１５中のＣ言語の関数ｍｉｎｉｍｕｎは、図１４のアルゴリズムのステップＳ３３の処理を実現するための機能を実装した関数である。各機能ブロックで計算を実行終了したステップ数を表すカウンタのカウント値を参照し、その中から最小の値を持つカウンタのカウント値を抽出し、そのカウンタのカウント値を持つ機能ブロックの番号を戻り値として返す。図１５中のＣ言語の関数ｃｙｃｌｅ＿ａｃｃｕｒａｔｅ＿ｓｉｍｕｌａｔｅでは、各機能ブロックのカウンタのカウント値を初期化し、次に、無限ループを用いて図１４で示すところのステップＳ３３〜Ｓ３５の各処理を繰り返し行っている。この無限ループ内部では、関数ｍｉｎｉｍｕｎを用いて実行終了したステップ数が最小の機能ブロックを求め、ｓｗｉｔｃｈ構文を用いて計算を実行する機能ブロックを振り分けている。
【０１１６】
ここで、複数の並列動作をする機能ブロック（スレッド）を含むハードウェアの動作をサイクル精度で検証する場合（複数のスレッドの場合）について更に説明する。
【０１１７】
スレッド間通信および共有リソースアクセスをトランザクションと定義し、トランザクションを行うステップの１ステップ前まで一連のシミュレーションを実行する。即ち、トランザクションがスケジューリングされているステップまでスレッド回路動作をシミュレーションする。なお、ここでは、スレッド間通信および共有リソースアクセスを含めて単に通信として一般化している。
【０１１８】
この場合、トランザクションがない非通信ステップは、連続してシミュレーションを実行する。非通信ステップでは、上記実施形態１で説明したように、ステップ間のレジスタ更新は行わず、レジスタアロケーションを考慮しないことにより、シミュレーションの高速化を図ることができる。また、非通信ステップでは、上記実施形態１で説明したように、セレクタの条件に応じて不要な計算を削除することによっても、シミュレーションの高速化を図ることができる。
【０１１９】
まず、前述したように、単一スレッドの場合と同様に、トランザクションを行うステップの１ステップ前まで一連のシミュレーションを実行する。トランザクションが発生するまではスレッド内部で閉じた計算を行うことができる。
【０１２０】
次に、スレッド毎にシミュレーションを進めたステップ数をカウンタでカウントする。
【０１２１】
続いて、進めたステップ数のカウント値が最小のスレッドについてシミュレーションを進める。
【０１２２】
複数のスレッドについて、ステップ数のカウント値が同一になる場合、シミュレーションを進めるスレッドの順番は任意とする。例えばスレッド番号の小さい順にシミュレーションを進めてもよい。
【０１２３】
さらに、ハンドシェイクを必要とするトランザクションは、ハンドシェイクが成立するまで同一のステップを実行する。複数の要求があった場合にどれに割り当てるかを調停するアービトレーションを必要とするトランザクションは、アービトレーションが終了するまで同一のステップを実行する。
【０１２４】
このように、図１４で示すアルゴリズムを用いれば、複数の並列動作する機能ブロックがあり、本発明のような非通信ステップを統合して計算を実行しても、正しいサイクル精度でハードウェアのシミュレーションを実行することができる。
【０１２５】
したがって、上記実施形態１，２を用いれば、非通信ステップのハードウェア動作をシミュレーションするための計算量を大幅に削減することができて、シミュレーションを高速化することができ、これによって、ハードウェアの検証に要する時間を節約して、システムＬＳＩの開発コストおよび開発期間を大幅に低減することができる。
【０１２６】
なお、上記実施形態１、２で前述したが、本発明の高位合成装置１の高位合成手段５１において、ハードウェアの構造に関する情報を含まず、処理動作のみが記述されたハードウェアの動作記述から、当該ハードウェアを機能ブロックに分割する機能ブロック分割手段５１２と、この機能ブロック分割手段５１２で分割された機能ブロック毎に動作記述を解析した動作情報からハードウェアのＣＤＦＧを生成するＣＤＦＧ生成手段５１３と、ハードウェア仕様として要求される動作周波数でＣＤＦＧをスケジューリングして各ステップに割り振るスケジューリング・ステップ割り振り手段５１４と、ＣＤＦＧから通信を行う動作が含まれない非通信ステップを抽出する非通信ステップ抽出手段５１５と、非通信ステップのハードウェアの動作を統合した計算式を生成してサイクル精度で検証可能なプログラミング記述を生成するステップサイクル精度検証記述生成手段５１６とを有している。これによって、非通信ステップのハードウェア動作をシミュレーションするための計算量を削減してシミュレーションを高速化することにより、ハードウェアの検証に要する時間を節約することができて、システムＬＳＩの開発コストを低減すると共に開発期間を短縮することができる本発明の目的を達成することができる。
【０１２７】
また、上記実施形態１、２では特に説明しなかったが、ハードウェアの動作を統合した計算式と検証用の動作モデルとの関係について説明する。
【０１２８】
このハードウェアの動作を統合した計算式は動作モデルの構成要素である。ハードウェアのサイクル精度の動作モデルは、ハードウェアの動作をクロックサイクル単位で等価に表現したもので、ハードウェアの動作を統合した計算式や、サイクル数を表すカウンタ、複数の機能ブロックで構成されたハードウェアであれば、機能ブロックの切り替え処理などから構成されている。したがって、非通信ステップのハードウェアの動作を統合した計算式を用いて、ハードウェアを汎用プログラミング言語で表現した記述として、サイクル精度で検証する動作モデルを生成する。
【０１２９】
以上のように、本発明の好ましい実施形態１、２を用いて本発明を例示してきたが、本発明は、この実施形態１、２に限定して解釈されるべきものではない。本発明は、特許請求の範囲によってのみその範囲が解釈されるべきであることが理解される。当業者は、本発明の具体的な好ましい実施形態１、２の記載から、本発明の記載および技術常識に基づいて等価な範囲を実施することができることが理解される。本明細書において引用した特許、特許出願および文献は、その内容自体が具体的に本明細書に記載されているのと同様にその内容が本明細書に対する参考として援用されるべきであることが理解される。
【産業上の利用可能性】
【０１３０】
本発明は、ハードウェアの動作を検証できる汎用プログラミング記述を生成する高位合成装置および高位合成方法、半導体集積回路の製造方法、この動作合成方法の各工程をコンピュータに実行させるための処理手順が記述された制御プログラム、この制御プログラムが格納されたコンピュータ読み取り可能な可読記憶媒体の分野において、非通信ステップのハードウェア動作をシミュレーションするための計算量を削減してシミュレーションを高速化することにより、ハードウェアの検証に要する時間を節約することができて、システムＬＳＩの開発コストを低減すると共に開発期間を短縮することができる。
【符号の説明】
【０１３１】
１  高位合成装置
２  操作入力部（入力装置）
３  表示部（モニタ装置）
３ａ  表示画面
４  ＣＰＵ（制御部）
５  ＲＯＭ（可読記録媒体）
５１  高位合成手段
５１１  構文解析・字句解析手段
５１２  機能ブロック分割手段
５１３  ＣＤＦＧ生成手段
５１４  スケジューリング・ステップ割り振り手段
５１５  非通信ステップ抽出手段
５１６  ステップサイクル精度検証記述生成手段
５１７  機能ブロック実行順序制御記述生成手段
６  ＲＡＭ
【図１】
2010237858.tif 000003
【図２】
2010237858.tif 000004
【図３】
2010237858.tif 000005
【図４】
2010237858.tif 000006
【図５】
2010237858.tif 000007
【図６】
2010237858.tif 000008
【図７】
2010237858.tif 000009
【図８】
2010237858.tif 000010
【図９】
2010237858.tif 000011
【図１０】
2010237858.tif 000012
【図１１】
2010237858.tif 000013
【図１２】
2010237858.tif 000014
【図１３】
2010237858.tif 000015
【図１４】
2010237858.tif 000016
【図１５】
2010237858.tif 000017
【図１６】
2010237858.tif 000018
【図１７】
2010237858.tif 000019
【図１８】
2010237858.tif 000020
【図１９】
2010237858.tif 000021
【図２０】
2010237858.tif 000022