(57)【要約】【課題】メモリアクセスに関わるレイテンシの低減、回路面積を小さくできるようにするための動作合成装置を提供する。【解決手段】動作合成装置１は、逐次動作記述プログラムを解析して、逐次動作記述プログラム中の１又は複数の関数によるメモリモデルに対するアクセスパターンが予め決められたパターンに該当する記述の有無を検出するメモリアクセス解析部１１ｃと、メモリアクセス解析部１１ｃにより予め決められたらパターンに該当する記述が検出された場合、１の関数を予め決められた２以上の関数に分割、あるいは複数の関数を予め決められた１つの関数に併合するように、逐次動作記述プログラム中の１又は複数の関数を他の関数に変換する関数変換部１１ｅと、関数変換部１１ｅにより変換された他の関数を含む逐次動作記述プログラムに基づいて、動作合成を行う動作合成部１１ｆとを有する。【選択図】図１
2007323206.tif 000002
【特許請求の範囲】
【請求項１】
逐次動作記述のプログラミング言語によってハードウエアの動作および構成を記述した逐次動作記述プログラムに基づいて、動作合成を行う装置であって、
前記逐次動作記述プログラムを解析して、前記逐次動作記述プログラム中の１又は複数の関数による、前記逐次動作記述プログラム内のメモリモデルに対するアクセスパターンが予め決められたパターンに該当する記述の有無を検出するメモリアクセス解析部と、
該メモリアクセス解析部により前記予め決められたパターンに該当する記述が検出された場合、前記１の関数を予め決められた２以上の関数に分割、あるいは前記複数の関数を予め決められた１つの関数に併合するように、前記逐次動作記述プログラム中の前記１又は複数の関数を他の関数に変換する関数変換部と、
該関数変換部により変換された前記他の関数を含む前記逐次動作記述プログラムに基づいて、動作合成を行う動作合成部と、
を有することを特徴とする動作合成装置。
【請求項２】
複数のモジュールの入出力情報が定義されてハードウエアの動作および構成を階層的に記述した階層動作記述プログラムに基づいて、シミュレーションを行うシミュレーション装置であって、
前記階層動作記述プログラムを解析して、前記複数のモジュールのラッパを外し、前記階層動作記述プログラムを関数記述プログラムに変更する関数記述変更部と、
該関数記述プログラムに基づいて、前記複数のモジュールの入出力情報の記述のないプログラムを、シミュレーション用プログラムとして生成する関数記述生成部と、
該関数記述生成部により生成されたシミュレーション用プログラムを用いてシミュレーションを行うシミュレーション部と、
を有することを特徴とするシミュレーション装置。
【請求項３】
逐次動作記述のプログラミング言語によってハードウエアの動作および構成を記述した逐次動作記述プログラムを解析して、前記逐次動作記述プログラム中の１又は複数の関数による、前記逐次動作記述プログラム内のメモリモデルに対するアクセスパターンが予め決められたパターンに該当する記述の有無を検出するメモリアクセス解析部と、
該メモリアクセス解析部により前記予め決められたパターンに該当する記述が検出された場合、前記１の関数を予め決められた２以上の関数に分割、あるいは前記複数の関数を予め決められた１つの関数に併合するように、前記逐次動作記述プログラム中の前記１又は複数の関数を他の関数に変換する関数変換部と、
該関数変換部により変換された前記他の関数を含む前記逐次動作記述プログラムに基づいて、動作合成を行う動作合成部と、
複数のモジュールの入出力情報が定義されてハードウエアの動作および構成を階層的に記述した階層動作記述プログラムを解析して、前記複数のモジュールのラッパを外し、前記階層動作記述プログラムを関数記述プログラムに変更する関数記述変更部と、
該関数記述プログラムに基づいて、前記複数のモジュールの入出力情報の記述のないプログラムを、シミュレーション用プログラムとして生成する関数記述生成部と、
該関数記述生成部により生成されたシミュレーション用プログラムを用いてシミュレーションを行うシミュレーション部と、
を有することを特徴とする設計装置。
【請求項４】
メモリアクセス解析部と、関数変換部と、動作合成部とを有し、逐次動作記述のプログラミング言語によってハードウエアの動作および構成を記述した逐次動作記述プログラムに基づいて、動作合成を行う方法であって、
前記メモリアクセス解析部は、前記逐次動作記述プログラムを解析して、前記逐次動作記述プログラム中の１又は複数の関数による、前記逐次動作記述プログラム内のメモリモデルに対するアクセスパターンが予め決められたパターンに該当する記述の有無を検出し、
前記関数変換部は、前記メモリアクセス解析部により前記予め決められたパターンに該当する記述が検出された場合、前記１の関数を予め決められた２以上の関数に分割、あるいは前記複数の関数を予め決められた１つの関数に併合するように、前記逐次動作記述プログラム中の前記１又は複数の関数を他の関数に変換し、
前記動作合成部は、前記関数変換部により変換された前記他の関数を含む前記逐次動作記述プログラムに基づいて、動作合成を行うことを特徴とする動作合成方法。
【請求項５】
関数記述変更部と、関数記述生成部と、シミュレーション部とを有し、複数のモジュールの入出力情報が定義されてハードウエアの動作および構成を階層的に記述した階層動作記述プログラムに基づいて、シミュレーションを行うシミュレーション方法であって、
前記関数記述変更部は、前記階層動作記述プログラムを解析して、前記複数のモジュールのラッパを外し、前記階層動作記述プログラムを関数記述プログラムに変更し、
前記関数記述生成部は、前記関数記述プログラムに基づいて、前記複数のモジュールの入出力情報の記述のないプログラムを、シミュレーション用プログラムとして生成し、
前記シミュレーション部は、前記関数記述生成部により生成されたシミュレーション用プログラムを用いてシミュレーションを行うことを特徴とするシミュレーション方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウエアプログラムを利用して設計されるハードウエアのための動作合成装置、同方法、シミュレーション装置、同方法及び設計装置に関する。
【背景技術】
【０００２】
従来より、半導体集積回路装置の設計において、階層的に動作が記述されたプログラム言語、例えばSystemC言語、から動作合成するツールは提案されている。このような階層動作を記述する言語用の動作合成ツールには、次の様な特徴がある。
【０００３】
1つ目の特徴は、設計対象である対象回路の全体が複数のモジュールによって構成されるように記述されるため、動作合成ツールの処理限界を超えて大規模な回路が合成できることである。２つ目は、部分的に修正した場合、修正のあるモジュールだけ再合成すればよいので、その修正をしてから修正結果の確認をするまでの合成時間のTAT（Turn Around Time:ターン・アラウンド・タイム）が短いことである。３つ目は、設計の意図を酌みながら人手によって階層設計が行われる場合は、対象回路の性能とサイズが制御でき、設計者の期待するレジスタ転送レベル（以下、RTLと省略）記述を得られるように動作合成することが出来ることである。４つ目は、対象回路の性能について、大粒度のパイプライン処理が可能か否かを設計者が判断しながらパイプライン処理を実現するように階層設計するので、レイテンシを低減できることである。５つ目は、人手によって階層設計が行われる場合は、回路の共有を確実に実現するように階層設計するので、対象装置の回路サイズについても削減できることである。
【０００４】
このような動作合成方法は、人手によって階層的な記述をするのに時間を要するという課題もあったが、対象回路のレイテンシと面積を最適化するという課題に対して、系統的なモジュール分割方法は、これまで提案されていない。
【０００５】
例えば、動作合成のメモリモデルマッピング技術については、マルチポートメモリやカスタムメモリのマッピング、及び、メモリを複数バンクに分割してマッピングする研究がなされている（例えば、非特許文献１参照）が、動作合成後の回路の性能に影響するメモリへのアクセス方式を考慮したモジュール分割手法は提案されていない。
【０００６】
また、動作合成用として記述された階層動作を記述する言語、例えばSystemC言語の記述の場合、外部インターフェースの動作は、ピン（あるいはポート）を用いてサイクルレベルの記述で書かれたり、モジュール間の入出力は信号を用いて接続するため、シミュレーション速度が遅い、すなわちシミュレーションに長い時間が掛かるという問題があった。
【０００７】
シミュレーション速度の問題については、RTL記述をSystemC記述に変換して高速なシミュレーションをする技術が提案されている（例えば、非特許文献２参照）が、この提案に係る技術はモジュール間の信号接続によるシミュレーション速度の低下の問題を解決していない。
【非特許文献１】ピー・アール・パンダ、エフ・キャットフー、エヌ・ディ・ダット、ケイ・ダンカート、イー・ブロックミーヤ、シー・カルカーニ、エイ・バンダーキャッペル、及びピー・ジー・キルズバーグ著、「組み込みシステムにおけるデータとメモリの最適化技術」２００１年、４月、電子システムのデザインオートメーションについてのACMトランザクション（TODAS）VOL.6,No.2,頁１４９−２０６。（P. R. Panda, F.Catthoor, N. D. Dutt, K. Danckaert, E. Brockmeyer, C. Kulkarni, A. Vandercappell, P. G. Kjeldsberg. Data and Memory Optimization Techniques for Embedded Systems. ACM Transaction on Design Automation of Electronics Systems (TODAES), Vol.6, No.2, April 2001, pages 149-206）
【非特許文献２】エヌ・カラザンス、イー・モレノ、エフ・ヘッセル、ブイ・ロサ、エフ・モラエス、及びイー・カララ著、「VHDLレジスタトランスファーレベルからSystemCトランザンクションレベルへのモデリング：比較ケーススタディ」２００３年、第１６回集積回路とシステムデザイン・シンポジウム、頁３５５−３６６。（N. Calazans, E. Moreno, F.Hessel, V. Rosa, F. Moraes, E. Carara. From VHDL Register Transfer Level to SystemC Transaction Level Modeling: a Comparative Case Study. 16th. Symposium on Integrated Circuits and Systems Design, pages 355-360, 2003）
【発明の開示】
【発明が解決しようとする課題】
【０００８】
そこで、本発明は、以上のような点に鑑みてなされたものであり、メモリアクセスに関わるレイテンシの低減、回路面積を小さくできるようにするための動作合成装置を提供することを一の目的とする。
【０００９】
また、本発明は、高速なシミュレーションを可能とするシミュレーション装置を提供することを別の目的とする。
【００１０】
さらにまた、本発明は、メモリアクセスに関わるレイテンシの低減、回路面積を小さくできるようにするための動作合成ができ、高速なシミュレーションを可能とする設計装置を提供することをさらに別の目的とする。
【課題を解決するための手段】
【００１１】
本発明の一態様によれば、逐次動作記述のプログラミング言語によってハードウエアの動作および構成を記述した逐次動作記述プログラムに基づいて、動作合成を行う装置であって、前記逐次動作記述プログラムを解析して、前記逐次動作記述プログラム中の１又は複数の関数による、前記逐次動作記述プログラム内のメモリモデルに対するアクセスパターンが予め決められたパターンに該当する記述の有無を検出するメモリアクセス解析部と、該メモリアクセス解析部により前記予め決められたパターンに該当する記述が検出された場合、前記１の関数を予め決められた２以上の関数に分割、あるいは前記複数の関数を予め決められた１つの関数に併合するように、前記逐次動作記述プログラム中の前記１又は複数の関数を他の関数に変換する関数変換部と、該関数変換部により変換された前記他の関数を含む前記逐次動作記述プログラムに基づいて、動作合成を行う動作合成部と、を有することを特徴とする動作合成装置が提供される。
【００１２】
本発明の一態様によれば、複数のモジュールの入出力情報が定義されてハードウエアの動作および構成を階層的に記述した階層動作記述プログラムに基づいて、シミュレーションを行うシミュレーション装置であって、前記階層動作記述プログラムを解析して、前記複数のモジュールのラッパを外し、前記階層動作記述プログラムを関数記述プログラムに変更する関数記述変更部と、該関数記述プログラムに基づいて、前記複数のモジュールの入出力情報の記述のないプログラムを、シミュレーション用プログラムとして生成する関数記述生成部と、該関数記述生成部により生成されたシミュレーション用プログラムを用いてシミュレーションを行うシミュレーション部と、を有することを特徴とするシミュレーション装置が提供される。
【００１３】
本発明の一態様によれば、逐次動作記述のプログラミング言語によってハードウエアの動作および構成を記述した逐次動作記述プログラムを解析して、前記逐次動作記述プログラム中の１又は複数の関数による、前記逐次動作記述プログラム内のメモリモデルに対するアクセスパターンが予め決められたパターンに該当する記述の有無を検出するメモリアクセス解析部と、該メモリアクセス解析部により前記予め決められたらパターンに該当する記述が検出された場合、前記１の関数を予め決められた２以上の関数に分割、あるいは前記複数の関数を予め決められた１つの関数に併合するように、前記逐次動作記述プログラム中の前記１又は複数の関数を他の関数に変換する関数変換部と、該関数変換部により変換された前記他の関数を含む前記逐次動作記述プログラムに基づいて、動作合成を行う動作合成部と、複数のモジュールの入出力情報が定義されてハードウエアの動作および構成を階層的に記述した階層動作記述プログラムを解析して、前記複数のモジュールのラッパを外し、前記階層動作記述プログラムを関数記述プログラムに変更する関数記述変更部と、該関数記述プログラムに基づいて、前記複数のモジュールの入出力情報の記述のないプログラムを、シミュレーション用プログラムとして生成するが関数記述生成部と、該関数記述生成部により生成されたシミュレーション用プログラムを用いてシミュレーションを行うシミュレーション部と、を有することを特徴とする設計装置が提供される。
【発明の効果】
【００１４】
本発明の一態様によれば、メモリアクセスに関わるレイテンシの低減、回路面積を小さくできるようにするための動作合成装置を実現することができる。
【００１５】
また、本発明の一態様によれば、高速なシミュレーションを可能とするシミュレーション装置を実現することができる。
【００１６】
さらにまた、本発明の一態様によれば、メモリアクセスに関わるレイテンシの低減、回路面積を小さくできるようにするための動作合成ができ、高速なシミュレーションを可能とする設計装置を実現することができる。
【発明を実施するための最良の形態】
【００１７】
以下、図面を参照して本発明の実施の形態を説明する。
【００１８】
まず図１に基づき、本実施の形態に係わるシステムの構成を説明する。  
本実施の形態に係る動作合成装置は、C言語またはC++言語記述からメモリアクセスのタイプに基づいた関数分割、すなわち機能分割を行い、動作合成用にSystemC記述に変換する。そして、本実施の形態に係るシミュレーション装置は、動作合成用に生成された階層動作記述の、すなわち階層的に動作が記述されたSystemC記述を、逐次動作記述の、すなわち逐次的に動作が記述されたC++言語のプログラム記述に逆変換することにより高速なシミュレーションを実現する。
【００１９】
以下、逐次動作記述から動作合成用の階層動作記述への変換手順と、その階層動作記述からシミュレーション用の逐次動作記述への逆変換の手順について説明する。ここでは、動作合成用の階層動作を記述するためにSystemC言語（以下、単にSystemCともいう）を用い、シミュレーション用の逐次動作記述言語としてはC++言語（以下、単にC++ともいう）を用いている例で説明する。これらの言語は、いずれもハードウエアの動作および構成を記述できるものである。階層動作記述は、複数のモジュールの入出力情報を定義し、それら複数モジュールの接続と、ハードウエアの動作と構成を階層的に記述したものである。
【００２０】
まず、図１は、本実施の形態に係わる動作合成装置の構成を示すブロック構成図である。図１は、逐次動作記述のC++のプログラム記述を階層動作記述のSystemC記述に変換して動作合成する動作合成装置を示す。図２に、階層動作記述のSystemC記述を逐次動作記述のC++のプログラム記述に逆変換してシミュレーションするシミュレーション装置を示す。
【００２１】
動作合成装置１は、後述する各種処理を行うCPU１１と、記憶装置１２と、入力装置１３と、出力装置１４と、主記憶装置１５とを含んで構成される。CPU１１は、コンピュータの中央処理装置であり、動作合成のための複数のプログラムを記憶装置１２から主記憶装置１５に読み出して実行する。複数のプログラムには、コマンド解釈部１１ａ、C++記述解釈部１１ｂ、メモリアクセス解釈部１１ｃ、関数分割部１１ｄ、SystemC記述生成部１１ｅ、及び動作合成部１１ｆが含まれる。記憶装置１２は、コマンド記憶領域１２ａと、C++記述記憶領域１２ｂと、SystemC記述記憶領域１２ｃと、RTL記述記憶領域１２ｄとを有する。コマンド記憶領域１２ａには、ユーザからのコマンド、データ等が記憶される。C++記述記憶領域１２ｂには、C++のプログラムが記憶される。SystemC記述記憶領域１２ｃには、生成されたSystemCのプログラムが記憶される。RTL記述記憶領域１２ｄには、動作合成の結果得られたRTL言語のプログラムが記憶される。
【００２２】
入力装置１３は、コンピュータである動作合成装置１に対して動作合成処理を実行させるためのコマンド、データ等をユーザが入力するためのインターフェース装置である。出力装置１４は、動作合成処理を実行させるためのコマンド、データ等の選択、動作合成結果の表示等を出力するためのインターフェース装置である。具体的には、入力装置は、キーボード、マウス等であり、出力装置はモニタ、プリンタ等である。主記憶装置１５は、CPU１１が動作合成処理を実行するためのいわゆる主メモリである。
【００２３】
コマンド解釈部１１ａは、記憶装置１２に記憶、すなわち格納されるコマンド（プログラム名、オプション他）の情報を解釈して、主記憶装置１５に格納する。CPU１１は、コマンド解釈部１１ａによって格納されたコマンドを順次読み出して実行することによって、C++記述解釈部１１ｂから動作合成部１１ｆの各プログラムを実行する。
【００２４】
C++記述解釈部１１ｂは、記憶装置１２のC++記述記憶領域１２ｂからユーザにより記述されたC++記述を読み出し、データ依存性グラフを生成して主記憶装置１５に格納する。このC++記述は、設計対象である半導体装置、例えばプロセッサ装置、のハードウエアモデル及びソフトウエアモデルをユーザが記述したものである。従って、このようなC++記述をC++モデルともいう。
【００２５】
メモリアクセス解析部１１ｃは、主記憶装置１５に格納されたデータ依存グラフを解析して、C++記述中の１又は複数の関数によるメモリに対するアクセスパターンが予め決められたパターンに該当する記述の有無を検出する。具体的には、メモリアクセス解析部１１ｃは、C++記述中の各関数がアクセスする配列変数のデータ依存性をチェックし、後述する関数分割ルールが適用可能か否かを判断して、その判断結果の情報を取得する。ここで、配列変数は、対象装置におけるメモリに対応する。  
予め決められたパターンは、記憶装置１２内の、パターン記憶部であるパターン記憶領域（図示せず）に記憶される。
【００２６】
関数分割部１１ｄは、後述するような関数分割ルールに基づいて関数を分割または併合する。その分割又は併合のルールは、予め決められたパターンに対応して、他の関数に変換するための変換ルールとして、記憶装置１２内の、ルール記憶部であるルール記憶領域（図示せず）に記憶される。
【００２７】
SystemC記述生成部１１ｅは、メモリアクセス解析部１１ｃにより予め決められたらパターンに該当する記述が検出された場合、１の関数を予め決められた２以上の関数に分割、あるいは複数の関数を予め決められた１つの関数に併合するように、逐次動作記述プログラム中の１又は複数の関数を他の関数に変換する関数変換部を構成する。さらに、SystemC記述生成部１１ｅは、モジュールから呼び出される関数に対してSystemCのラッパ記述を生成し、記憶装置１２のSystemC記述記憶領域１２ｃに格納する。従って、SystemC記述生成部１１ｅは、C++記述からSystemC記述を生成する階層動作記述生成部を構成する。
【００２８】
動作合成部１１ｆは、SystemC記述を取り込んで合成を行いRTL記述を生成し、記憶装置１２のRTL記述記憶領域１２ｄにRTL記述を格納する。
【００２９】
図２は、本実施の形態に係るシミュレーション装置のブロック構成図である。  
シミュレーション装置２は、後述する各種処理を行うCPU２１と、記憶装置２２と、入力装置２３と、出力装置２４と、主記憶装置２５とを含んで構成される。CPU２１は、コンピュータの中央処理装置であり、シミュレーションのための複数のプログラムを記憶装置２２から主記憶装置２５に読み出して実行する。複数のプログラムには、コマンド解釈部２１ａ、SystemC記述解釈部２１ｂ、関数記述変更部２１ｃ、メモリアクセス関数生成部２１ｄ、スレッド記述生成部２１ｅ、モジュール記述生成部２１ｆ、及びシミュレーション部２１ｇが含まれる。記憶装置２２は、コマンド１記憶領域２２ａと、コマンド２記憶領域２２ｂと、SystemC記述記憶領域２２ｃと、新動作記述記憶領域２２ｄと、テストデータ記憶領域２２ｄとを有する。コマンド１記憶領域２２ａ及びコマンド２記憶領域２２ｂには、ユーザからのコマンド１及びコマンド２等が記憶される。SystemC記述記憶領域２２ｃには、SystemC言語のプログラム、すなわちSystemC記述が記憶される。新動作記述記憶領域２２ｄには、生成された新動作のプログラムが記憶される。テストデータ記憶領域２２ｅには、シミュレーション用のテストデータが記憶される。
【００３０】
入力装置２３は、シミュレーション装置２に対してシミュレーション処理を実行させるためのコマンド、データ等をユーザが入力するためのインターフェース装置である。出力装置２４は、シミュレーション処理を実行させるためのコマンド、データ等の選択、シミュレーション結果の表示等を出力するためのインターフェース装置である。具体的には、入力装置はキーボード、マウス等で、出力装置はモニタ、プリンタ等である。主記憶装置２５は、CPU２１がシミュレーション処理を実行するときに用いるデータ等を格納する主メモリである。
【００３１】
なお、シミュレーション装置２は、上述した動作合成装置１と同じコンピュータ上に実現してもよい。すなわち、シミュレーション装置２において、専用のCPU２１を設けずに、動作合成装置１のCPU１１を利用してもよく、同様に、記憶装置２２、入力装置２３、出力装置２４、及び主記憶装置２５は、それぞれ、動作合成装置１における記憶装置１２、入力装置１３、出力装置１４、及び主記憶装置１５を利用してもよい。その場合、CPU１１で実行される各種プログラムが、シミュレーション処理では、コマンド解釈部２１ａからシミュレーション部２１ｇの内容であり、動作合成処理では、コマンド解釈部１１ａから動作合成部１１ｆの内容である。そして、動作合成装置１とシミュレーション装置２の両方を備えることにより、全体として設計装置が構成される。
【００３２】
コマンド解釈部２１ａは、記憶装置２２に格納されるコマンド（プログラム名、オプション他）の情報を解釈して主記憶装置２５に格納する。ここで格納されるコマンドは、後述するコマンド１とコマンド２である。CPU２１は、コマンド１記憶領域２２ａ及びコマンド２記憶領域２２ｂに格納された各コマンドを順次読み出して実行することによって、SystemC記述解釈部２１ｂからシミュレーション部２１ｇの各プログラムを実行する。
【００３３】
SystemC記述解釈部２１ｂは、SystemC記述記憶領域２２ｃからSystemC記述を取り込み、ポート名、信号名、関数名他の情報を取り出して主記憶装置２５に格納する。  
関数記述変更部２１ｃは、SystemC記述プログラムを解析して、複数のモジュールのラッパを外し、SystemC記述を、逐次動作記述の関数記述プログラムであるC++記述に変更する。具体的には、関数記述変更部２１ｃは、配列名（メモリI/Fポート）をメモリアクセス関数に置換する。すなわち、SystemC記述の中のラッパ記述をはずし、関数記述に変更する。その置換処理は、SystemC記述におけるメモリの配列記述、例えばｘ[adr]=yの記述を、C++の関数記述、例えばram_x(0,1,adr,y)に変更するような処理である。
【００３４】
メモリアクセス関数生成部２１ｄは、メモリアービタ記述から呼び出される関数を用いてメモリアクセス関数を生成する。
【００３５】
図３は、SystemC記述生成部１１ｅと関数記述変更部２１ｃとメモリアクセス関数生成部２１ｄの処理の例を説明するための図である。図３の右側には、SystemC記述のCaller部３１と、Behavioral part部３２とが示され、左側には、C++記述のCaller部３３と、Functions of behavioral part部３４とが示されている。関数記述変更部２１ｃは、SystemC記述のCaller部３１からC++記述のCaller部３３への変換を行う。メモリアクセス関数生成部２１ｄは、SystemC記述のBehavioral part部３２からC++記述のFunctions of behavioral part部３４への変換を行う。
【００３６】
SystemCのスレッド記述生成部２１ｅは、新最上位モジュールから呼び出されるスレッド記述を生成する。スレッド記述の例は、図４の左側に示される。図４は、スレッド及び関数を説明するための図である。
【００３７】
モジュール記述生成部２１ｆは、シミュレーション用の最上位モジュール記述を生成し、新動作記述記憶領域２２ｄに格納する。  
スレッド記述生成部２１ｅとモジュール記述生成部２１ｆは、関数記述生成部を構成し、関数記述プログラムに基づいて、入出力情報の記述のないプログラム記述を、シミュレーション用プログラム記述として生成する。
【００３８】
なお、ここでは、階層のある、すなわち階層構造を有する複数のモジュールを含む記述であるSystemC記述が、SystemC記述であっても、階層のない、すなわち１つのモジュールの記述に変換されている。従って、SystemC記述であっても、信号記述がないので、シミュレーションが速い。
【００３９】
モジュール記述の例は、図５に示される。図５のモジュール記述は、図６のコマンド記述と、C++記述とから生成される。
【００４０】
シミュレーション部２１ｇは、新動作記述記憶領域２２ｄから動作記述を、そして、テストデータ記憶領域２２ｅからテストデータを取り込みシミュレーションを実行する。
【００４１】
ここで、動作合成とシミュレーションの両方を行って、半導体装置の設計を行う設計工程の全体をまとめて説明する。図７は、半導体回路設計に係る処理の流れの例を示すフローチャートである。
【００４２】
図１の動作合成装置１は、ユーザの記述したC++記述を読み込んで、メモリアクセス解析部１１ｃが、各関数のアクセスする配列変数のデータ依存性をチェックする。そして、関数分割部１１ｄは、後述するメモリアクセスパターンに基づきC++記述の関数分割、すなわち機能分割を行う（ステップS1）。
【００４３】
次に、動作合成装置１のSystemC記述生成部１１ｅは、C++記述をSystemC記述に変換する。C++の関数をSC_MODULEのラッパで括り、さらに、メモリモデルを作成し、SC_MODULEを逐次的に起動する制御部を生成して、複数のSC_MODULEを接続する（ステップS2）。ステップS2において、いわゆるゴールデンモデルが生成される。
【００４４】
そして、設計者が、生成されたSystemC記述の各モジュールの関数および制御部の記述を人手で最適化して動作合成部１１ｆを用いて動作合成し、RTL記述を生成する（ステップS3）。
【００４５】
ステップS3で最適化されたSystemC記述を、図２のシミュレーション装置２を用いてC++記述に逆変換し（ステップS4）、シミュレーションする（ステップS5）。ステップS4では、ステップS2において生成されたSystemC記述から、逆変換が行われる。
【００４６】
ステップS3の記述は、ゴールデンモデルの記述として記憶装置１２に保持される。仕様変更がある場合は、設計者はゴールデンモデルの記述を修正し、動作合成によりRTL記述を再合成するとともにステップS4の処理を再度行ってシミュレーション用の記述を得る。
【００４７】
以下、ステップS1で適用する関数分割ルール、ステップS2の階層化とメモリ関数の変換、ステップS3の人手による最適化と、ステップS4の逐次動作記述への変換処理について例を用いて説明する。
【００４８】
まず、関数分割ルール、すなわち機能分割ルールについて説明する。上述したように、関数分割ルールは、記憶装置１２のルール記憶領域（図示せず）に予め記憶され、ルールを適用するためのアクセスパターンも、記憶装置１２のパターン記憶領域（図示せず）に予め記憶されている。なお、本実施の形態では、関数を分割するだけでなく、関数の併合も行っているので、関数の分割あるいは併合のためのルールが用いられている。以下の説明では、関数分割部１１ｄは、関数の分割だけでなく、関数の併合も行うので、関数変換部を構成する。
【００４９】
関数分割ルールはメモリモデルへのアクセスパターンによって分類される。C++記述では、配列変数の読み書きがメモリモデルへのアクセスに相当するため、関数内のアルゴリズムの配列アクセスをチェックしてこれらのルールを適用して記述を書き換える。動作合成後の対象装置の性能は、メモリへのアクセス記述に依存するので、メモリへのアクセスの内容を解析して、メモリモデルが割り付けられる。図８は、関数分割ルールの例を示す図である。
【００５０】
ここでは、２つのルールを例に説明し、１つのルールは、さらに３つのパターンを有するルールである。ルール１は、メモリアクセスに関する機能自体の分割に関するルールで、ルール２はメモリモデルと機能モデルの分割ルールである。図８において、（A）から（C）がルール１を説明するための図であり、（D）が、ルール２を説明するための図である。
【００５１】
これらのルールのいずれに該当するかは、C++記述におけるメモリアクセスの部分のアクセスパターンと、予め設定された参照パターンとをテキストレベルで比較することによって決定される。
【００５２】
図８の（A）に示すルール１aは、配列変数memory1に同時アクセス可能な関数AとBがあった場合に、関数を、関数（A+B）として一つにマージする、というルールである。これにより、同じデータが別々に読み出されるような場合に、関数をマージして１回の読み出しで済むようになる。
【００５３】
図８の（B）に示すルール１ｂは、２つの配列変数memory1、memory2にそれぞれアクセスする１つの関数の異なる部分A,Bがそれぞれの配列変数memory1、memory2をアクセスする２つの関数AとBに分割する、というルールである。これにより、別々なデータを読み出されるような場合に、各関数A,Bがそれぞれ各配列変数memory1、memory2にアクセスするような並列動作が可能となり、レイテンシの低減が図れる場合がある。
【００５４】
図８の（C）に示すルール１ｃは、一つの配列変数に逐次的にアクセスする異なる部分A,Bは、その逐次処理を2つの関数に分割することができる。これにより、メモリ内をバンク分けするようにすることにより、並列動作が可能となったり、２ポートメモリが使用可能となる場合がある。
【００５５】
以上のようなルール１の３つのルール間には優先度が予め設定されており、ルール１ｂと１ｃの優先度が最も高く、次に優先度が高いのはルール１ａである。ルール１ｂとルール１ｃを、全ての関数にルール１を適用し、関数の細分化を行う。その後、ルール１ａを適用して、並列化可能関数の併合を図る。ルール１適用後に、関数分割部１１ｄは、全ての関数にルール２を適用する。
【００５６】
図８の（D）に示すルール２は、関数A中にメモリアクセス機能を含めずに、配列変数memory1中にメモリアクセス機能が含まれるようにすることによって、他の関数からのメモリアクセスにも対応できるようになる場合がある。例えば、ルール２は、メモリモデルのアドレスを限定してアクセスするような場合、予め決められたアドレスのデータをマージするような場合、あるいは予め決められたアドレスのデータを分割するような場合、等に、メモリアクセス機能をメモリモデル側に移動する、というルールである。メモリモデルの例としては、転置アクセス、奇数／偶数要素のアクセスのメモリがある。
【００５７】
以上のような関数の分割、あるいは併合を行うことによって、対象装置である半導体装置のレイテンシの低減、あるいは回路面積を小さくすることができる。
【００５８】
ここで、関数の分割あるいは併合によりC++記述の変換の例を説明する。  
図９は、関数分割ルール１aの適用前後のC++記述の例を示す図である。図９の記述９１中、fnc_A、fnc_Bはルール適用前の関数、図９の記述９２中、fnc_AB_newは適用後の関数である。なお、メモリモデルは、配列で記述できるが、図９の例では関数で記述し、その関数の中で配列に代入する。関数名のmem1はメモリモデル名であり、第１引数は読み出しイネーブル、第２引数は書き込みイネーブル、第３引数がメモリのアドレス、第４引数は書込みデータである。読み出しの場合、第４引数は省略可能である。そして関数の戻り値が読み出しデータである。
【００５９】
図９の記述９１では、関数fnc_Aとfnc_Bが同じメモリモデルmem1をアクセスしている。fnc_Aとfnc_Bそれぞれの関数が読み書きする変数に依存性がないとすれば、これらの関数を論理回路に合成するとき、メモリへのアクセスを除き同時に実行可能な回路にすることができる。C++記述では２つの関数は同時には実行されないので、fnc_Aの後にfnc_Bが呼び出されるものとしてルールを適用する。関数内のメモリモデル読み書き前後の処理を簡単に説明するため、複数の代入文ではなく関数呼び出し記述としている。図９の例では下位の関数fnc_Ax,fnc_Bxが呼び出されている。関数fnc_Bは、M-1回（Mは自然数）だけ、メモリモデルmem1からデータを読み出すが、fnc_Aがmem1から読み出す値data2aをfnc_Bでも読み出していれば、図９の記述９２に示すように、mem1読み出しのループの中でdata2aを読み出した場合にだけfnc_A2を呼び出せばよい。そうすれば、メモリへのアクセス回数が減り、処理サイクル、すなわちレイテンシも低減できる。data2aがfnc_Bで読み出されない場合は、図９の記述９３のような記述に変換される。
【００６０】
図１０は、関数分割ルール1bの適用前後のC++記述例を示す図である。記法は、図９と同様である。図１０の記述９４はルール適用前の記述、図１０の記述９５は適用後の記述である。メモリモデルmem1とmem2のそれぞれをアクセスして処理する関数fnc_ABが、メモリモデルmem1とmem2のアクセス単位で２つの関数fnc_Aとfnc_Bに分割される。ただし、分割前の関数fnc_ABの下位関数func_AB4またはfnc_AB5がメモリモデルmem1から読み出した値を使う場合は、関数fnc_Bがその値を利用できるように、例えばfnc_Aで外部変数gdata2に値をセットし、fnc_Bにより読み出されるようにする。
【００６１】
図１１は、関数分割ルール1cの適用前後のC++記述例を示す図である。記法は、図９と同様である。図１１の記述９６はルール適用前の記述、図１１の記述９７は適用後の記述である。メモリモデルmem1をアクセスして処理するfnc_ABが、２つの関数fnc_Aとfnc_Bに分割される。ただし、ルール1bの適応例と同様、関数func_AB4またはfnc_AB5がメモリモデルmem1から読み出したdata2を使用する場合は、関数fnc_Bがその値を利用できるように、例えば外部変数を用いて渡される。
【００６２】
図１２は、関数分割ルール２の適用前後のC++記述例を示す図である。記法は、図９と同様である。図１２の記述９８はルール適用前の記述、図１２の記述９９は適用後の記述である。メモリモデルmem1の0と奇数アドレスをアクセスする関数fnc_Aは、fnc_A_newに変換される。関数func_Aにあるメモリモデルmem1のアドレス計算部分（奇数アドレスを得るためのモジュロ計算）が、関数mem1aのメモリモデルのアドレス計算部分へと移動される。これに伴い、繰り返し回数も64回から32回に減らし、メモリモデルmem1書き込み前後の関数fnc_A2,fnc_A3の２回の繰り返しで行っていた処理は、繰り返し1回で行う処理に変更される。図１２の例では、関数fnc_A2、func_A3をそれぞれ関数fnc_A2a、fnc_A3aに、記述の中も変更される。関数fnc_A2aの内部記述は人手で変更される。  
以上のようなルールの適用によりメモリのアクセス回数が減りレイテンシが削減される。
【００６３】
なお、以上の４つのルールは、１つの例であるが、他にも経験則に基づいて、他のルールも予め設定しておくようにしてもよいことによって、メモリのアクセス回数が減りレイテンシが削減される。
【００６４】
次に、SystemC記述生成部１１ｅにおける、関数分割後のC++記述を、階層動作記述のSystemC記述に変換する処理の流れを図１３に示す。図１３は、SystemC記述生成部１１ｅにおける処理の流れの例を示すフローチャートである。
【００６５】
まず、SystemC記述生成部１１ｅは、関数を呼び出すSC_CTHREADのラッパと、入出力を持ったSC_MODULEのモジュール記述を生成する（ステップS11）。
【００６６】
SystemC記述生成部１１ｅは、C++記述をSystemCのSC_CTHREAD記述に変換する（ステップS12）。この変換により、図３の左側のC++記述のCaller部３３と、Functions of behavioral part部３４とが、図３の右側のSystemC記述のCaller部３１と、Behavioral part部３２とに示されたような記述に変換される。この変換は、予め設定されたテンプレートを用いて、変換すべき予め決められたC++記述を、予め決められたSystemC記述に、テキストベースで変換するように行われる。
【００６７】
次に、SystemC記述生成部１１ｅは、各モジュールを逐次的に起動する制御モジュールを生成する（ステップS13）。生成処理は、モジュール記述を出力、例えば画面表示することによって、ユーザによって各モジュールの起動順序情報が入力される。SystemC記述生成部１１ｅは、入力された起動順序情報に基づいて、制御モジュールを生成する。
【００６８】
SystemC記述生成部１１ｅは、全てのモジュールを信号で接続する（ステップS14）。この接続も、モジュール記述を出力することによって、ユーザによって各モジュールの信号で接続が行われる。SystemC記述生成部１１ｅは、入力された信号接続情報に基づいて、全てのモジュールを信号で接続する。
【００６９】
SystemC記述生成部１１ｅによって生成されたSystemC記述は、動作合成部１１ｆに供給されて動作合成が行われる。  
以上の説明した動作合成装置１は、ハードウエアのCベース設計の動作合成に適用でき、特に大規模なハードウエアの動作合成にも適用できるものである。さらに、本実施の形態の動作合成装置１は、逐次動作記述のC記述をメモリアクセスパターンに基づいて階層記述に置き換えて性能のよいRTL記述の合成を可能にする。
【００７０】
従って、本実施の形態の動作合成装置では、CベースのC++記述におけるメモリアクセスを解析して、メモリアクセスのパターンに基づいて予め決められた関数分割（あるいは関数併合）が実行される。その予め決められた関数分割により、対象装置である半導体装置におけるメモリアクセスに関わるレイテンシの低減、あるいは回路面積を小さくすることができるように関数が分割（あるいは関数併合）される。よって、そのように関数分割されたC++記述からSystemC記述を生成して動作合成されたRTL記述によれば、最適なメモリの構成あるいはメモリアドレスデコーダの合成が実現されるので、レイテンシの低減、あるいは回路面積の小さい、半導体装置を設計することができる。
【００７１】
次に、本実施の形態に係るシミュレーション装置２が行う逐次動作記述生成手順をSystemC記述を例に説明する。  
まず、階層記述された複数のモジュールからなるモジュールのブロック図の例を図１４に示す。図１４は、複数のモジュールからなるモジュールの例を示すブロック図である。図１４において、最上位モジュールModAには、複数のモジュールModB、ModC、ModD（下位階層モジュール）が含まれ、各モジュール間は信号で接続される。下位階層モジュールModBとModCは制御モジュールModDによってその起動順番と起動回数が制御される。下位のModBとModCは、メモリモデルMemA（SystemC記述ではSC_CTHREAD）にアクセスする。メモリモデルMemAは各モジュールModB、ModCからのアクセスを調停するアービタを持っている。
【００７２】
逐次動作記述の生成手順は、処理１と処理２から構成される。シミュレーション装置２は、下位階層のモジュールModB、ModCに含まれるメンバ関数を抽出し、その抽出された関数から構成されるスレッド記述と新たな最上位モジュールとを生成する。  
図１５は、処理１の処理の流れの例を示すフローチャートである。処理１は、下位階層モジュールにかかわる情報の抽出を行う処理であり、処理２は新たな記述を生成する処理である。階層記述から必要な情報を抽出するため、本実施の形態のシミュレーション装置２に予め決められたコマンドを供給する。まず、各処理のステップを示し、その後、SystemC記述を用いて詳しく説明する。まず、図１５を用いて処理１を説明する。
【００７３】
シミュレーション装置２のコマンド解釈部２１ａは、コマンド１記憶装置２２ａから、コマンド１を読み出して解釈し、最上位モジュール名、抽出対象モジュール名、モジュールの起動順番、同モジュールの起動回数、及びメモリモデルのアービタ名を取り込み主記憶装置２５に格納する（ステップS21）。
【００７４】
コマンド１の例は、図６に示されている。
【００７５】
図６は、コマンド１の記述例を説明するための図である。コマンド１は、最上位モジュール名（Top_module）、階層記述から抽出するモジュール名（Extracted_module）、同モジュールの起動順番（Driven_order）、同モジュールの起動回数（Repeat_count）、メモリモデルのアービタ名（Memory arbiter）、メモリモデルへのI/F名（配列名）（Memory_interface）からなる。コマンド1の記述例を図６に示す。このコマンド１の内容が、ステップS21において、解釈される。
【００７６】
ステップS21の処理により、図６のコマンド１では、最上位モジュール名はModAで、抽出モジュール名はModB、ModCであり、起動順番はModB、ModCの順で、繰り返し回数は４回であり、メモリアービタはMemAで、モジュールBとCのメモリI/F名はそれぞれMem1、Mem2であることが解釈される。
【００７７】
SystemC記述解釈部２１bは、階層記述のSystemC記述をSystemC記述記憶領域２２ｃから取り込み、主記憶装置２５に保存する（ステップS22）。SystemC記述の例は、図５に示されている。図５はSystemC記述によるモジュール記述の例を示す図である。図４はモジュールModBのスレッド記述とそのスレッド記述から呼び出される関数記述とメモリアービタ記述の例を示す図である。
【００７８】
さらに、SystemC記述解釈部２１ｂは、最上位モジュールを解析し、最上位モジュールのポート名とデータタイプ、ならびに信号名と信号のデータタイプを取り出し、主記憶装置２５に保存する（ステップS23）。
【００７９】
図５の例では、ステップS23の処理において、最上位モジュールであるModAにおいて、ポート名、例えばclk, reset,ain1等と、そのデータタイプ、例えばbool,sc_uint<16>等と解釈される。
【００８０】
次に、SystemC記述解釈部２１ｂは、抽出対象モジュールを解析し、抽出対象モジュール内の関数名を抽出し、その関数の入力変数名と出力変数名を取り出し、主記憶装置２５に保存する（ステップS24）。
【００８１】
図５の例では、ステップS24の処理において、抽出モジュールModB、ModCのSC_CTHREAD関数であるb_exec,c_exec等が抽出され、入力変数と出力変数を、図４の内容から、それぞれの関数の入出力の変数名、例えばfncin1,fncin2,bout1等とそのデータタイプが抽出される。
【００８２】
さらに、SystemC記述解釈部２１ｂは、図６のメモリモデルのアービタ名を基に、そのアービタから呼び出される関数名を抽出し、主記憶装置２５に保存する（ステップS25）。
【００８３】
図４においては、メモリアービタ名MemA（SC_CTHREAD関数）から呼び出される関数名は、mem_read(),mem11_write(addr,data)等である。
【００８４】
そして、SystemC記述解釈部２１ｂは、主記憶装置２５に保存した各情報を出力装置に出力する（ステップS26）。
【００８５】
図１６は、その出力された情報の出力例を示す図である。図１６に示すように、抽出された情報が、テキスト情報として出力されている。
【００８６】
次に、処理２の処理について説明する。  
出力装置から出力されたデータをテキスト形式に変換し、コマンド２の情報を人が作成する。図１７は、コマンド２の記述例を示す図である。最上位モジュールの各ポートと関数の入力及び出力の変数との接続関係、ならびに配列変数名とメモリ関数の関係が、コマンド２として記述されている。すなわち、コマンド２の情報は、最上位モジュールの各ポートと関数の入力、出力変数の接続関係、並びに、メモリアクセス関数に置き換える配列変数名とメモリアクセス関数から呼び出される関数名である。コマンド２の情報は、入力装置２３から入力され、コマンド２記憶領域２２ｂに格納される。次に、処理２のステップを図１８を用いて説明する。図１８は、処理２の処理の流れの例を示すフローチャートである。
【００８７】
まず、コマンド解釈部２１ａは、コマンド１の出力情報とコマンド２の情報を、コマンド１記憶領域２２ａとコマンド２記憶領域２２ｂからそれぞれ取り込み、主記憶装置２５に保存する（ステップS31）。
【００８８】
SystemC記述解釈部２１ｂは、階層記述のSystemC記述（図５）をSystemC記述記憶領域２２ｃから取り込み、主記憶装置２５に保存する（ステップS32）。
【００８９】
メモリアクセス関数生成部２１ｄは、メモリアクセス関数を生成する（ステップS33）。図１９は、メモリアクセス関数の記述の例を示す図である。
【００９０】
メモリアクセス関数Mem1の場合、ステップS33のメモリアクセス関数の生成処理では、コマンド２の情報を元に配列名を関数名とし、リードイネーブル(Re)、ライトイネーブル(We)、アドレス(addr)、入力データ(data)を引数として、Reが真の場合に読み出し関数を呼び出し、Weが真の場合に書き込み関数を呼び出す関数を作成する。生成されたメモリアクセス関数の例は、図１９の部分１０１に示されている。モジュールModCのメモリI/F(配列変数)Mem2についても同様である。
【００９１】
関数記述変更部２１ｃは、関数内部の配列変数をステップS33で生成したメモリアクセス関数呼び出しに変更して、新動作記述記憶領域２２ｄに格納する（ステップS34）。
【００９２】
図４では、メモリが配列変数で記述されていたが、図１９の部分１０２には、メモリアクセス関数に置換された後のfn1関数が記述されている。
【００９３】
配列変数からメモリアクセス関数への変更処理は、プログラムの記述の中に予め設定されたテキストが有るか否かをチェックし、そのようなテキストベースの配列変数が検出されると、予め設定されたテキストベースのメモリアクセス関数に置き換えることによって、実現することができる。
【００９４】
スレッド記述生成部２１ｅは、制御関数を生成する。すなわち、スレッド記述生成部２１ｅは、新最上位モジュールのスレッド記述を、コマンド１から取り込んだモジュールの繰り返し回数とモジュール起動順の情報に従って、関数呼び出し記述として生成し、さらに関数間データの受け渡しの変数代入文を作成し、新動作記述領域２２ｄに格納する（ステップS35）。
【００９５】
図１９の部分１０３は、スレッド記述の例を示す図である。そのスレッド記述は、コマンド２のポートと変数の接続情報とコマンド１の起動順番、起動回数をもとに作成される。Fn1in1 = ain1等は接続関係から、forループ文とその内部の関数呼び出しは、起動順番と起動回数をもとに生成される。
【００９６】
モジュール記述生成部２１ｆは、最上位モジュールのモジュール記述（モジュール名、ポート、信号、変数、関数の宣言、スレッド呼び出し）を生成し、新動作記述記憶領域２２ｄに格納する（ステップS36）。図２０は、新最上位モジュール記述の例を示す図である。従って、階層動作記述ではない、１つのモジュールによるSystemC記述が生成される。
【００９７】
図２０では、関数a_exec_newを呼び出し、図１９の部分１０３が実行されるように、最上位モジュールが記述されている。従って、シミュレーション装置２は、階層動作記述のないSystemC記述に基づいてシミュレーションを実行するので、シミュレーション速度が速い処理を実現することができる。
【００９８】
なお、図２０では、最上位モジュール記述をSystemC記述で示したが、SystemC記述に限定されるものではない。例えば、図４のSystemCのスレッド記述を図２１のC++のメンバ関数として生成し、その関数をシミュレータのAPI（アプリケーションプログラムインタフェース）関数(図２１では命令サイクル毎に呼び出されるStepI関数)を用いて呼びだし、C++シミュレータによってシミュレーションすることができる。図２１は、C++シミュレーション記述の例を示す図である。
【００９９】
新動作記述記憶領域２２ｄから情報が取り出され、生成された動作記述が出力装置に出力される（ステップS37）。
【０１００】
さらに、本実施の形態では、コマンド記述でシミュレーション装置２に制御情報を与えたが、これに限定されるものではなくSystemC記述中に、図２２のようなディレクティブとして与えてもよい。図２２は、SystemC記述中に、コメント文として制御情報を記述するようにした例を示す図である。すなわち、ディレクティブ記述として制御情報が記述される。
【０１０１】
以上のように、本実施の形態に係わるシミュレーション装置２は、ハードウエアのCベース設計におけるシミュレーションに適用でき、特に大規模なハードウエアのシミュレーションにも適用できるものである。さらに、本実施の形態のシミュレーション装置２は、階層的に記述された複数モジュール記述を自動的に１モジュール記述あるいは階層動作記述のない記述に変換するので、高速シミュレーションを実現することができる。
【０１０２】
また、上述した実施の形態によれば、プログラムの保守において、動作合成用の階層動作記述だけを保守するだけでよく、従来のような２つの記述を保守する工数に比べ、工数は半分になる。
【０１０３】
なお、以上説明した各部の動作を実行するプログラムは、フロッピー（登録商標）ディスク、ＣＤ−ＲＯＭ等の可搬媒体や、ハードディスク等の記憶装置等に、その全体あるいは一部が記録され、あるいは記憶されている。そのプログラムがコンピュータにより読み取られて、動作の全部あるいは一部が実行される。あるいは、そのプログラムの全体あるいは一部を通信ネットワークを介して流通または提供することができる。利用者は、通信ネットワークを介してそのプログラムをダウンロードしてコンピュータにインストールしたり、あるいは記録媒体からコンピュータにインストールすることで、容易に本発明の設計装置を実現することができる。
【０１０４】
以上説明したように、本実施の形態に係る動作合成装置１を利用することによって、メモリアクセスにかかわるレイテンシを低減することができ、また、最適なメモリ構成とメモリアドレスデコーダの合成が可能で合成後の回路サイズを小さくすることができる。
【０１０５】
さらに、本実施の形態に係るシミュレーション装置２を利用することによって、高速なシミュレーションを実現することができる。
【０１０６】
本発明は、上述した実施の形態に限定されるものではなく、本発明の要旨を変えない範囲において、種々の変更、改変等が可能である。
【図面の簡単な説明】
【０１０７】
【図１】本発明の実施の形態に係わる動作合成装置の構成を示すブロック構成図である。
【図２】本発明の実施の形態に係わるシミュレーション装置のブロック構成図である。
【図３】SystemC記述生成部と関数記述変更部とメモリアクセス関数生成部の処理の例を説明するための図である。
【図４】スレッド及び関数を説明するための図である。
【図５】SystemC記述によるモジュール記述の例を示す図である。
【図６】コマンド１の記述例を説明するための図である。
【図７】半導体回路設計に係る処理の流れの例を示すフローチャートである。
【図８】関数分割ルールの例を示す図である。
【図９】関数分割ルール１aの適用前後のC++記述の例を示す図である。
【図１０】関数分割ルール1bの適用前後のC++記述例を示す図である。
【図１１】関数分割ルール1cの適用前後のC++記述例を示す図である。
【図１２】関数分割ルール２の適用前後のC++記述例を示す図である。
【図１３】SystemC記述生成部における処理の流れの例を示すフローチャートである。
【図１４】複数のモジュールからなるモジュールの例を示すブロック図である。
【図１５】処理１の処理の流れの例を示すフローチャートである。
【図１６】出力された情報の出力例を示す図である。
【図１７】コマンド２の記述例を示す図である。
【図１８】処理２の処理の流れの例を示すフローチャートである。
【図１９】メモリアクセス関数の記述の例を示す図である。
【図２０】新最上位モジュール記述の例を示す図である。
【図２１】C++シミュレーション記述の例を示す図である。
【図２２】SystemC記述中に、コメント文として制御情報を記述するようにした例を示す図である。
【符号の説明】
【０１０８】
１  動作合成装置、２  シミュレーション装置、１１、２１  CPU、１２、２２  記憶装置
【図１】
2007323206.tif 000003
【図２】
2007323206.tif 000004
【図３】
2007323206.tif 000005
【図４】
2007323206.tif 000006
【図５】
2007323206.tif 000007
【図６】
2007323206.tif 000008
【図７】
2007323206.tif 000009
【図８】
2007323206.tif 000010
【図９】
2007323206.tif 000011
【図１０】
2007323206.tif 000012
【図１１】
2007323206.tif 000013
【図１２】
2007323206.tif 000014
【図１３】
2007323206.tif 000015
【図１４】
2007323206.tif 000016
【図１５】
2007323206.tif 000017
【図１６】
2007323206.tif 000018
【図１７】
2007323206.tif 000019
【図１８】
2007323206.tif 000020
【図１９】
2007323206.tif 000021
【図２０】
2007323206.tif 000022
【図２１】
2007323206.tif 000023
【図２２】
2007323206.tif 000024