JP2007323206A - 動作合成装置、同方法、シミュレーション装置、同方法及び設計装置 - Google Patents
動作合成装置、同方法、シミュレーション装置、同方法及び設計装置 Download PDFInfo
- Publication number
- JP2007323206A JP2007323206A JP2006150584A JP2006150584A JP2007323206A JP 2007323206 A JP2007323206 A JP 2007323206A JP 2006150584 A JP2006150584 A JP 2006150584A JP 2006150584 A JP2006150584 A JP 2006150584A JP 2007323206 A JP2007323206 A JP 2007323206A
- Authority
- JP
- Japan
- Prior art keywords
- description
- function
- program
- simulation
- functions
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Abstract
【課題】メモリアクセスに関わるレイテンシの低減、回路面積を小さくできるようにするための動作合成装置を提供する。
【解決手段】動作合成装置1は、逐次動作記述プログラムを解析して、逐次動作記述プログラム中の1又は複数の関数によるメモリモデルに対するアクセスパターンが予め決められたパターンに該当する記述の有無を検出するメモリアクセス解析部11cと、メモリアクセス解析部11cにより予め決められたらパターンに該当する記述が検出された場合、1の関数を予め決められた2以上の関数に分割、あるいは複数の関数を予め決められた1つの関数に併合するように、逐次動作記述プログラム中の1又は複数の関数を他の関数に変換する関数変換部11eと、関数変換部11eにより変換された他の関数を含む逐次動作記述プログラムに基づいて、動作合成を行う動作合成部11fとを有する。
【選択図】図1
【解決手段】動作合成装置1は、逐次動作記述プログラムを解析して、逐次動作記述プログラム中の1又は複数の関数によるメモリモデルに対するアクセスパターンが予め決められたパターンに該当する記述の有無を検出するメモリアクセス解析部11cと、メモリアクセス解析部11cにより予め決められたらパターンに該当する記述が検出された場合、1の関数を予め決められた2以上の関数に分割、あるいは複数の関数を予め決められた1つの関数に併合するように、逐次動作記述プログラム中の1又は複数の関数を他の関数に変換する関数変換部11eと、関数変換部11eにより変換された他の関数を含む逐次動作記述プログラムに基づいて、動作合成を行う動作合成部11fとを有する。
【選択図】図1
Description
本発明は、ソフトウエアプログラムを利用して設計されるハードウエアのための動作合成装置、同方法、シミュレーション装置、同方法及び設計装置に関する。
従来より、半導体集積回路装置の設計において、階層的に動作が記述されたプログラム言語、例えばSystemC言語、から動作合成するツールは提案されている。このような階層動作を記述する言語用の動作合成ツールには、次の様な特徴がある。
1つ目の特徴は、設計対象である対象回路の全体が複数のモジュールによって構成されるように記述されるため、動作合成ツールの処理限界を超えて大規模な回路が合成できることである。2つ目は、部分的に修正した場合、修正のあるモジュールだけ再合成すればよいので、その修正をしてから修正結果の確認をするまでの合成時間のTAT(Turn Around Time:ターン・アラウンド・タイム)が短いことである。3つ目は、設計の意図を酌みながら人手によって階層設計が行われる場合は、対象回路の性能とサイズが制御でき、設計者の期待するレジスタ転送レベル(以下、RTLと省略)記述を得られるように動作合成することが出来ることである。4つ目は、対象回路の性能について、大粒度のパイプライン処理が可能か否かを設計者が判断しながらパイプライン処理を実現するように階層設計するので、レイテンシを低減できることである。5つ目は、人手によって階層設計が行われる場合は、回路の共有を確実に実現するように階層設計するので、対象装置の回路サイズについても削減できることである。
このような動作合成方法は、人手によって階層的な記述をするのに時間を要するという課題もあったが、対象回路のレイテンシと面積を最適化するという課題に対して、系統的なモジュール分割方法は、これまで提案されていない。
例えば、動作合成のメモリモデルマッピング技術については、マルチポートメモリやカスタムメモリのマッピング、及び、メモリを複数バンクに分割してマッピングする研究がなされている(例えば、非特許文献1参照)が、動作合成後の回路の性能に影響するメモリへのアクセス方式を考慮したモジュール分割手法は提案されていない。
また、動作合成用として記述された階層動作を記述する言語、例えばSystemC言語の記述の場合、外部インターフェースの動作は、ピン(あるいはポート)を用いてサイクルレベルの記述で書かれたり、モジュール間の入出力は信号を用いて接続するため、シミュレーション速度が遅い、すなわちシミュレーションに長い時間が掛かるという問題があった。
シミュレーション速度の問題については、RTL記述をSystemC記述に変換して高速なシミュレーションをする技術が提案されている(例えば、非特許文献2参照)が、この提案に係る技術はモジュール間の信号接続によるシミュレーション速度の低下の問題を解決していない。
ピー・アール・パンダ、エフ・キャットフー、エヌ・ディ・ダット、ケイ・ダンカート、イー・ブロックミーヤ、シー・カルカーニ、エイ・バンダーキャッペル、及びピー・ジー・キルズバーグ著、「組み込みシステムにおけるデータとメモリの最適化技術」2001年、4月、電子システムのデザインオートメーションについてのACMトランザクション(TODAS)VOL.6,No.2,頁149−206。(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トランザンクションレベルへのモデリング:比較ケーススタディ」2003年、第16回集積回路とシステムデザイン・シンポジウム、頁355−366。(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)
ピー・アール・パンダ、エフ・キャットフー、エヌ・ディ・ダット、ケイ・ダンカート、イー・ブロックミーヤ、シー・カルカーニ、エイ・バンダーキャッペル、及びピー・ジー・キルズバーグ著、「組み込みシステムにおけるデータとメモリの最適化技術」2001年、4月、電子システムのデザインオートメーションについてのACMトランザクション(TODAS)VOL.6,No.2,頁149−206。(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トランザンクションレベルへのモデリング:比較ケーススタディ」2003年、第16回集積回路とシステムデザイン・シンポジウム、頁355−366。(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)
そこで、本発明は、以上のような点に鑑みてなされたものであり、メモリアクセスに関わるレイテンシの低減、回路面積を小さくできるようにするための動作合成装置を提供することを一の目的とする。
また、本発明は、高速なシミュレーションを可能とするシミュレーション装置を提供することを別の目的とする。
さらにまた、本発明は、メモリアクセスに関わるレイテンシの低減、回路面積を小さくできるようにするための動作合成ができ、高速なシミュレーションを可能とする設計装置を提供することをさらに別の目的とする。
本発明の一態様によれば、逐次動作記述のプログラミング言語によってハードウエアの動作および構成を記述した逐次動作記述プログラムに基づいて、動作合成を行う装置であって、前記逐次動作記述プログラムを解析して、前記逐次動作記述プログラム中の1又は複数の関数による、前記逐次動作記述プログラム内のメモリモデルに対するアクセスパターンが予め決められたパターンに該当する記述の有無を検出するメモリアクセス解析部と、該メモリアクセス解析部により前記予め決められたパターンに該当する記述が検出された場合、前記1の関数を予め決められた2以上の関数に分割、あるいは前記複数の関数を予め決められた1つの関数に併合するように、前記逐次動作記述プログラム中の前記1又は複数の関数を他の関数に変換する関数変換部と、該関数変換部により変換された前記他の関数を含む前記逐次動作記述プログラムに基づいて、動作合成を行う動作合成部と、を有することを特徴とする動作合成装置が提供される。
本発明の一態様によれば、複数のモジュールの入出力情報が定義されてハードウエアの動作および構成を階層的に記述した階層動作記述プログラムに基づいて、シミュレーションを行うシミュレーション装置であって、前記階層動作記述プログラムを解析して、前記複数のモジュールのラッパを外し、前記階層動作記述プログラムを関数記述プログラムに変更する関数記述変更部と、該関数記述プログラムに基づいて、前記複数のモジュールの入出力情報の記述のないプログラムを、シミュレーション用プログラムとして生成する関数記述生成部と、該関数記述生成部により生成されたシミュレーション用プログラムを用いてシミュレーションを行うシミュレーション部と、を有することを特徴とするシミュレーション装置が提供される。
本発明の一態様によれば、逐次動作記述のプログラミング言語によってハードウエアの動作および構成を記述した逐次動作記述プログラムを解析して、前記逐次動作記述プログラム中の1又は複数の関数による、前記逐次動作記述プログラム内のメモリモデルに対するアクセスパターンが予め決められたパターンに該当する記述の有無を検出するメモリアクセス解析部と、該メモリアクセス解析部により前記予め決められたらパターンに該当する記述が検出された場合、前記1の関数を予め決められた2以上の関数に分割、あるいは前記複数の関数を予め決められた1つの関数に併合するように、前記逐次動作記述プログラム中の前記1又は複数の関数を他の関数に変換する関数変換部と、該関数変換部により変換された前記他の関数を含む前記逐次動作記述プログラムに基づいて、動作合成を行う動作合成部と、複数のモジュールの入出力情報が定義されてハードウエアの動作および構成を階層的に記述した階層動作記述プログラムを解析して、前記複数のモジュールのラッパを外し、前記階層動作記述プログラムを関数記述プログラムに変更する関数記述変更部と、該関数記述プログラムに基づいて、前記複数のモジュールの入出力情報の記述のないプログラムを、シミュレーション用プログラムとして生成するが関数記述生成部と、該関数記述生成部により生成されたシミュレーション用プログラムを用いてシミュレーションを行うシミュレーション部と、を有することを特徴とする設計装置が提供される。
本発明の一態様によれば、メモリアクセスに関わるレイテンシの低減、回路面積を小さくできるようにするための動作合成装置を実現することができる。
また、本発明の一態様によれば、高速なシミュレーションを可能とするシミュレーション装置を実現することができる。
さらにまた、本発明の一態様によれば、メモリアクセスに関わるレイテンシの低減、回路面積を小さくできるようにするための動作合成ができ、高速なシミュレーションを可能とする設計装置を実現することができる。
以下、図面を参照して本発明の実施の形態を説明する。
まず図1に基づき、本実施の形態に係わるシステムの構成を説明する。
本実施の形態に係る動作合成装置は、C言語またはC++言語記述からメモリアクセスのタイプに基づいた関数分割、すなわち機能分割を行い、動作合成用にSystemC記述に変換する。そして、本実施の形態に係るシミュレーション装置は、動作合成用に生成された階層動作記述の、すなわち階層的に動作が記述されたSystemC記述を、逐次動作記述の、すなわち逐次的に動作が記述されたC++言語のプログラム記述に逆変換することにより高速なシミュレーションを実現する。
本実施の形態に係る動作合成装置は、C言語またはC++言語記述からメモリアクセスのタイプに基づいた関数分割、すなわち機能分割を行い、動作合成用にSystemC記述に変換する。そして、本実施の形態に係るシミュレーション装置は、動作合成用に生成された階層動作記述の、すなわち階層的に動作が記述されたSystemC記述を、逐次動作記述の、すなわち逐次的に動作が記述されたC++言語のプログラム記述に逆変換することにより高速なシミュレーションを実現する。
以下、逐次動作記述から動作合成用の階層動作記述への変換手順と、その階層動作記述からシミュレーション用の逐次動作記述への逆変換の手順について説明する。ここでは、動作合成用の階層動作を記述するためにSystemC言語(以下、単にSystemCともいう)を用い、シミュレーション用の逐次動作記述言語としてはC++言語(以下、単にC++ともいう)を用いている例で説明する。これらの言語は、いずれもハードウエアの動作および構成を記述できるものである。階層動作記述は、複数のモジュールの入出力情報を定義し、それら複数モジュールの接続と、ハードウエアの動作と構成を階層的に記述したものである。
まず、図1は、本実施の形態に係わる動作合成装置の構成を示すブロック構成図である。図1は、逐次動作記述のC++のプログラム記述を階層動作記述のSystemC記述に変換して動作合成する動作合成装置を示す。図2に、階層動作記述のSystemC記述を逐次動作記述のC++のプログラム記述に逆変換してシミュレーションするシミュレーション装置を示す。
動作合成装置1は、後述する各種処理を行うCPU11と、記憶装置12と、入力装置13と、出力装置14と、主記憶装置15とを含んで構成される。CPU11は、コンピュータの中央処理装置であり、動作合成のための複数のプログラムを記憶装置12から主記憶装置15に読み出して実行する。複数のプログラムには、コマンド解釈部11a、C++記述解釈部11b、メモリアクセス解釈部11c、関数分割部11d、SystemC記述生成部11e、及び動作合成部11fが含まれる。記憶装置12は、コマンド記憶領域12aと、C++記述記憶領域12bと、SystemC記述記憶領域12cと、RTL記述記憶領域12dとを有する。コマンド記憶領域12aには、ユーザからのコマンド、データ等が記憶される。C++記述記憶領域12bには、C++のプログラムが記憶される。SystemC記述記憶領域12cには、生成されたSystemCのプログラムが記憶される。RTL記述記憶領域12dには、動作合成の結果得られたRTL言語のプログラムが記憶される。
入力装置13は、コンピュータである動作合成装置1に対して動作合成処理を実行させるためのコマンド、データ等をユーザが入力するためのインターフェース装置である。出力装置14は、動作合成処理を実行させるためのコマンド、データ等の選択、動作合成結果の表示等を出力するためのインターフェース装置である。具体的には、入力装置は、キーボード、マウス等であり、出力装置はモニタ、プリンタ等である。主記憶装置15は、CPU11が動作合成処理を実行するためのいわゆる主メモリである。
コマンド解釈部11aは、記憶装置12に記憶、すなわち格納されるコマンド(プログラム名、オプション他)の情報を解釈して、主記憶装置15に格納する。CPU11は、コマンド解釈部11aによって格納されたコマンドを順次読み出して実行することによって、C++記述解釈部11bから動作合成部11fの各プログラムを実行する。
C++記述解釈部11bは、記憶装置12のC++記述記憶領域12bからユーザにより記述されたC++記述を読み出し、データ依存性グラフを生成して主記憶装置15に格納する。このC++記述は、設計対象である半導体装置、例えばプロセッサ装置、のハードウエアモデル及びソフトウエアモデルをユーザが記述したものである。従って、このようなC++記述をC++モデルともいう。
メモリアクセス解析部11cは、主記憶装置15に格納されたデータ依存グラフを解析して、C++記述中の1又は複数の関数によるメモリに対するアクセスパターンが予め決められたパターンに該当する記述の有無を検出する。具体的には、メモリアクセス解析部11cは、C++記述中の各関数がアクセスする配列変数のデータ依存性をチェックし、後述する関数分割ルールが適用可能か否かを判断して、その判断結果の情報を取得する。ここで、配列変数は、対象装置におけるメモリに対応する。
予め決められたパターンは、記憶装置12内の、パターン記憶部であるパターン記憶領域(図示せず)に記憶される。
予め決められたパターンは、記憶装置12内の、パターン記憶部であるパターン記憶領域(図示せず)に記憶される。
関数分割部11dは、後述するような関数分割ルールに基づいて関数を分割または併合する。その分割又は併合のルールは、予め決められたパターンに対応して、他の関数に変換するための変換ルールとして、記憶装置12内の、ルール記憶部であるルール記憶領域(図示せず)に記憶される。
SystemC記述生成部11eは、メモリアクセス解析部11cにより予め決められたらパターンに該当する記述が検出された場合、1の関数を予め決められた2以上の関数に分割、あるいは複数の関数を予め決められた1つの関数に併合するように、逐次動作記述プログラム中の1又は複数の関数を他の関数に変換する関数変換部を構成する。さらに、SystemC記述生成部11eは、モジュールから呼び出される関数に対してSystemCのラッパ記述を生成し、記憶装置12のSystemC記述記憶領域12cに格納する。従って、SystemC記述生成部11eは、C++記述からSystemC記述を生成する階層動作記述生成部を構成する。
動作合成部11fは、SystemC記述を取り込んで合成を行いRTL記述を生成し、記憶装置12のRTL記述記憶領域12dにRTL記述を格納する。
図2は、本実施の形態に係るシミュレーション装置のブロック構成図である。
シミュレーション装置2は、後述する各種処理を行うCPU21と、記憶装置22と、入力装置23と、出力装置24と、主記憶装置25とを含んで構成される。CPU21は、コンピュータの中央処理装置であり、シミュレーションのための複数のプログラムを記憶装置22から主記憶装置25に読み出して実行する。複数のプログラムには、コマンド解釈部21a、SystemC記述解釈部21b、関数記述変更部21c、メモリアクセス関数生成部21d、スレッド記述生成部21e、モジュール記述生成部21f、及びシミュレーション部21gが含まれる。記憶装置22は、コマンド1記憶領域22aと、コマンド2記憶領域22bと、SystemC記述記憶領域22cと、新動作記述記憶領域22dと、テストデータ記憶領域22dとを有する。コマンド1記憶領域22a及びコマンド2記憶領域22bには、ユーザからのコマンド1及びコマンド2等が記憶される。SystemC記述記憶領域22cには、SystemC言語のプログラム、すなわちSystemC記述が記憶される。新動作記述記憶領域22dには、生成された新動作のプログラムが記憶される。テストデータ記憶領域22eには、シミュレーション用のテストデータが記憶される。
シミュレーション装置2は、後述する各種処理を行うCPU21と、記憶装置22と、入力装置23と、出力装置24と、主記憶装置25とを含んで構成される。CPU21は、コンピュータの中央処理装置であり、シミュレーションのための複数のプログラムを記憶装置22から主記憶装置25に読み出して実行する。複数のプログラムには、コマンド解釈部21a、SystemC記述解釈部21b、関数記述変更部21c、メモリアクセス関数生成部21d、スレッド記述生成部21e、モジュール記述生成部21f、及びシミュレーション部21gが含まれる。記憶装置22は、コマンド1記憶領域22aと、コマンド2記憶領域22bと、SystemC記述記憶領域22cと、新動作記述記憶領域22dと、テストデータ記憶領域22dとを有する。コマンド1記憶領域22a及びコマンド2記憶領域22bには、ユーザからのコマンド1及びコマンド2等が記憶される。SystemC記述記憶領域22cには、SystemC言語のプログラム、すなわちSystemC記述が記憶される。新動作記述記憶領域22dには、生成された新動作のプログラムが記憶される。テストデータ記憶領域22eには、シミュレーション用のテストデータが記憶される。
入力装置23は、シミュレーション装置2に対してシミュレーション処理を実行させるためのコマンド、データ等をユーザが入力するためのインターフェース装置である。出力装置24は、シミュレーション処理を実行させるためのコマンド、データ等の選択、シミュレーション結果の表示等を出力するためのインターフェース装置である。具体的には、入力装置はキーボード、マウス等で、出力装置はモニタ、プリンタ等である。主記憶装置25は、CPU21がシミュレーション処理を実行するときに用いるデータ等を格納する主メモリである。
なお、シミュレーション装置2は、上述した動作合成装置1と同じコンピュータ上に実現してもよい。すなわち、シミュレーション装置2において、専用のCPU21を設けずに、動作合成装置1のCPU11を利用してもよく、同様に、記憶装置22、入力装置23、出力装置24、及び主記憶装置25は、それぞれ、動作合成装置1における記憶装置12、入力装置13、出力装置14、及び主記憶装置15を利用してもよい。その場合、CPU11で実行される各種プログラムが、シミュレーション処理では、コマンド解釈部21aからシミュレーション部21gの内容であり、動作合成処理では、コマンド解釈部11aから動作合成部11fの内容である。そして、動作合成装置1とシミュレーション装置2の両方を備えることにより、全体として設計装置が構成される。
コマンド解釈部21aは、記憶装置22に格納されるコマンド(プログラム名、オプション他)の情報を解釈して主記憶装置25に格納する。ここで格納されるコマンドは、後述するコマンド1とコマンド2である。CPU21は、コマンド1記憶領域22a及びコマンド2記憶領域22bに格納された各コマンドを順次読み出して実行することによって、SystemC記述解釈部21bからシミュレーション部21gの各プログラムを実行する。
SystemC記述解釈部21bは、SystemC記述記憶領域22cからSystemC記述を取り込み、ポート名、信号名、関数名他の情報を取り出して主記憶装置25に格納する。
関数記述変更部21cは、SystemC記述プログラムを解析して、複数のモジュールのラッパを外し、SystemC記述を、逐次動作記述の関数記述プログラムであるC++記述に変更する。具体的には、関数記述変更部21cは、配列名(メモリI/Fポート)をメモリアクセス関数に置換する。すなわち、SystemC記述の中のラッパ記述をはずし、関数記述に変更する。その置換処理は、SystemC記述におけるメモリの配列記述、例えばx[adr]=yの記述を、C++の関数記述、例えばram_x(0,1,adr,y)に変更するような処理である。
関数記述変更部21cは、SystemC記述プログラムを解析して、複数のモジュールのラッパを外し、SystemC記述を、逐次動作記述の関数記述プログラムであるC++記述に変更する。具体的には、関数記述変更部21cは、配列名(メモリI/Fポート)をメモリアクセス関数に置換する。すなわち、SystemC記述の中のラッパ記述をはずし、関数記述に変更する。その置換処理は、SystemC記述におけるメモリの配列記述、例えばx[adr]=yの記述を、C++の関数記述、例えばram_x(0,1,adr,y)に変更するような処理である。
メモリアクセス関数生成部21dは、メモリアービタ記述から呼び出される関数を用いてメモリアクセス関数を生成する。
図3は、SystemC記述生成部11eと関数記述変更部21cとメモリアクセス関数生成部21dの処理の例を説明するための図である。図3の右側には、SystemC記述のCaller部31と、Behavioral part部32とが示され、左側には、C++記述のCaller部33と、Functions of behavioral part部34とが示されている。関数記述変更部21cは、SystemC記述のCaller部31からC++記述のCaller部33への変換を行う。メモリアクセス関数生成部21dは、SystemC記述のBehavioral part部32からC++記述のFunctions of behavioral part部34への変換を行う。
SystemCのスレッド記述生成部21eは、新最上位モジュールから呼び出されるスレッド記述を生成する。スレッド記述の例は、図4の左側に示される。図4は、スレッド及び関数を説明するための図である。
モジュール記述生成部21fは、シミュレーション用の最上位モジュール記述を生成し、新動作記述記憶領域22dに格納する。
スレッド記述生成部21eとモジュール記述生成部21fは、関数記述生成部を構成し、関数記述プログラムに基づいて、入出力情報の記述のないプログラム記述を、シミュレーション用プログラム記述として生成する。
スレッド記述生成部21eとモジュール記述生成部21fは、関数記述生成部を構成し、関数記述プログラムに基づいて、入出力情報の記述のないプログラム記述を、シミュレーション用プログラム記述として生成する。
なお、ここでは、階層のある、すなわち階層構造を有する複数のモジュールを含む記述であるSystemC記述が、SystemC記述であっても、階層のない、すなわち1つのモジュールの記述に変換されている。従って、SystemC記述であっても、信号記述がないので、シミュレーションが速い。
モジュール記述の例は、図5に示される。図5のモジュール記述は、図6のコマンド記述と、C++記述とから生成される。
シミュレーション部21gは、新動作記述記憶領域22dから動作記述を、そして、テストデータ記憶領域22eからテストデータを取り込みシミュレーションを実行する。
ここで、動作合成とシミュレーションの両方を行って、半導体装置の設計を行う設計工程の全体をまとめて説明する。図7は、半導体回路設計に係る処理の流れの例を示すフローチャートである。
図1の動作合成装置1は、ユーザの記述したC++記述を読み込んで、メモリアクセス解析部11cが、各関数のアクセスする配列変数のデータ依存性をチェックする。そして、関数分割部11dは、後述するメモリアクセスパターンに基づきC++記述の関数分割、すなわち機能分割を行う(ステップS1)。
次に、動作合成装置1のSystemC記述生成部11eは、C++記述をSystemC記述に変換する。C++の関数をSC_MODULEのラッパで括り、さらに、メモリモデルを作成し、SC_MODULEを逐次的に起動する制御部を生成して、複数のSC_MODULEを接続する(ステップS2)。ステップS2において、いわゆるゴールデンモデルが生成される。
そして、設計者が、生成されたSystemC記述の各モジュールの関数および制御部の記述を人手で最適化して動作合成部11fを用いて動作合成し、RTL記述を生成する(ステップS3)。
ステップS3で最適化されたSystemC記述を、図2のシミュレーション装置2を用いてC++記述に逆変換し(ステップS4)、シミュレーションする(ステップS5)。ステップS4では、ステップS2において生成されたSystemC記述から、逆変換が行われる。
ステップS3の記述は、ゴールデンモデルの記述として記憶装置12に保持される。仕様変更がある場合は、設計者はゴールデンモデルの記述を修正し、動作合成によりRTL記述を再合成するとともにステップS4の処理を再度行ってシミュレーション用の記述を得る。
以下、ステップS1で適用する関数分割ルール、ステップS2の階層化とメモリ関数の変換、ステップS3の人手による最適化と、ステップS4の逐次動作記述への変換処理について例を用いて説明する。
まず、関数分割ルール、すなわち機能分割ルールについて説明する。上述したように、関数分割ルールは、記憶装置12のルール記憶領域(図示せず)に予め記憶され、ルールを適用するためのアクセスパターンも、記憶装置12のパターン記憶領域(図示せず)に予め記憶されている。なお、本実施の形態では、関数を分割するだけでなく、関数の併合も行っているので、関数の分割あるいは併合のためのルールが用いられている。以下の説明では、関数分割部11dは、関数の分割だけでなく、関数の併合も行うので、関数変換部を構成する。
関数分割ルールはメモリモデルへのアクセスパターンによって分類される。C++記述では、配列変数の読み書きがメモリモデルへのアクセスに相当するため、関数内のアルゴリズムの配列アクセスをチェックしてこれらのルールを適用して記述を書き換える。動作合成後の対象装置の性能は、メモリへのアクセス記述に依存するので、メモリへのアクセスの内容を解析して、メモリモデルが割り付けられる。図8は、関数分割ルールの例を示す図である。
ここでは、2つのルールを例に説明し、1つのルールは、さらに3つのパターンを有するルールである。ルール1は、メモリアクセスに関する機能自体の分割に関するルールで、ルール2はメモリモデルと機能モデルの分割ルールである。図8において、(A)から(C)がルール1を説明するための図であり、(D)が、ルール2を説明するための図である。
これらのルールのいずれに該当するかは、C++記述におけるメモリアクセスの部分のアクセスパターンと、予め設定された参照パターンとをテキストレベルで比較することによって決定される。
図8の(A)に示すルール1aは、配列変数memory1に同時アクセス可能な関数AとBがあった場合に、関数を、関数(A+B)として一つにマージする、というルールである。これにより、同じデータが別々に読み出されるような場合に、関数をマージして1回の読み出しで済むようになる。
図8の(B)に示すルール1bは、2つの配列変数memory1、memory2にそれぞれアクセスする1つの関数の異なる部分A,Bがそれぞれの配列変数memory1、memory2をアクセスする2つの関数AとBに分割する、というルールである。これにより、別々なデータを読み出されるような場合に、各関数A,Bがそれぞれ各配列変数memory1、memory2にアクセスするような並列動作が可能となり、レイテンシの低減が図れる場合がある。
図8の(C)に示すルール1cは、一つの配列変数に逐次的にアクセスする異なる部分A,Bは、その逐次処理を2つの関数に分割することができる。これにより、メモリ内をバンク分けするようにすることにより、並列動作が可能となったり、2ポートメモリが使用可能となる場合がある。
以上のようなルール1の3つのルール間には優先度が予め設定されており、ルール1bと1cの優先度が最も高く、次に優先度が高いのはルール1aである。ルール1bとルール1cを、全ての関数にルール1を適用し、関数の細分化を行う。その後、ルール1aを適用して、並列化可能関数の併合を図る。ルール1適用後に、関数分割部11dは、全ての関数にルール2を適用する。
図8の(D)に示すルール2は、関数A中にメモリアクセス機能を含めずに、配列変数memory1中にメモリアクセス機能が含まれるようにすることによって、他の関数からのメモリアクセスにも対応できるようになる場合がある。例えば、ルール2は、メモリモデルのアドレスを限定してアクセスするような場合、予め決められたアドレスのデータをマージするような場合、あるいは予め決められたアドレスのデータを分割するような場合、等に、メモリアクセス機能をメモリモデル側に移動する、というルールである。メモリモデルの例としては、転置アクセス、奇数/偶数要素のアクセスのメモリがある。
以上のような関数の分割、あるいは併合を行うことによって、対象装置である半導体装置のレイテンシの低減、あるいは回路面積を小さくすることができる。
ここで、関数の分割あるいは併合によりC++記述の変換の例を説明する。
図9は、関数分割ルール1aの適用前後のC++記述の例を示す図である。図9の記述91中、fnc_A、fnc_Bはルール適用前の関数、図9の記述92中、fnc_AB_newは適用後の関数である。なお、メモリモデルは、配列で記述できるが、図9の例では関数で記述し、その関数の中で配列に代入する。関数名のmem1はメモリモデル名であり、第1引数は読み出しイネーブル、第2引数は書き込みイネーブル、第3引数がメモリのアドレス、第4引数は書込みデータである。読み出しの場合、第4引数は省略可能である。そして関数の戻り値が読み出しデータである。
図9は、関数分割ルール1aの適用前後のC++記述の例を示す図である。図9の記述91中、fnc_A、fnc_Bはルール適用前の関数、図9の記述92中、fnc_AB_newは適用後の関数である。なお、メモリモデルは、配列で記述できるが、図9の例では関数で記述し、その関数の中で配列に代入する。関数名のmem1はメモリモデル名であり、第1引数は読み出しイネーブル、第2引数は書き込みイネーブル、第3引数がメモリのアドレス、第4引数は書込みデータである。読み出しの場合、第4引数は省略可能である。そして関数の戻り値が読み出しデータである。
図9の記述91では、関数fnc_Aとfnc_Bが同じメモリモデルmem1をアクセスしている。fnc_Aとfnc_Bそれぞれの関数が読み書きする変数に依存性がないとすれば、これらの関数を論理回路に合成するとき、メモリへのアクセスを除き同時に実行可能な回路にすることができる。C++記述では2つの関数は同時には実行されないので、fnc_Aの後にfnc_Bが呼び出されるものとしてルールを適用する。関数内のメモリモデル読み書き前後の処理を簡単に説明するため、複数の代入文ではなく関数呼び出し記述としている。図9の例では下位の関数fnc_Ax,fnc_Bxが呼び出されている。関数fnc_Bは、M-1回(Mは自然数)だけ、メモリモデルmem1からデータを読み出すが、fnc_Aがmem1から読み出す値data2aをfnc_Bでも読み出していれば、図9の記述92に示すように、mem1読み出しのループの中でdata2aを読み出した場合にだけfnc_A2を呼び出せばよい。そうすれば、メモリへのアクセス回数が減り、処理サイクル、すなわちレイテンシも低減できる。data2aがfnc_Bで読み出されない場合は、図9の記述93のような記述に変換される。
図10は、関数分割ルール1bの適用前後のC++記述例を示す図である。記法は、図9と同様である。図10の記述94はルール適用前の記述、図10の記述95は適用後の記述である。メモリモデルmem1とmem2のそれぞれをアクセスして処理する関数fnc_ABが、メモリモデルmem1とmem2のアクセス単位で2つの関数fnc_Aとfnc_Bに分割される。ただし、分割前の関数fnc_ABの下位関数func_AB4またはfnc_AB5がメモリモデルmem1から読み出した値を使う場合は、関数fnc_Bがその値を利用できるように、例えばfnc_Aで外部変数gdata2に値をセットし、fnc_Bにより読み出されるようにする。
図11は、関数分割ルール1cの適用前後のC++記述例を示す図である。記法は、図9と同様である。図11の記述96はルール適用前の記述、図11の記述97は適用後の記述である。メモリモデルmem1をアクセスして処理するfnc_ABが、2つの関数fnc_Aとfnc_Bに分割される。ただし、ルール1bの適応例と同様、関数func_AB4またはfnc_AB5がメモリモデルmem1から読み出したdata2を使用する場合は、関数fnc_Bがその値を利用できるように、例えば外部変数を用いて渡される。
図12は、関数分割ルール2の適用前後のC++記述例を示す図である。記法は、図9と同様である。図12の記述98はルール適用前の記述、図12の記述99は適用後の記述である。メモリモデルmem1の0と奇数アドレスをアクセスする関数fnc_Aは、fnc_A_newに変換される。関数func_Aにあるメモリモデルmem1のアドレス計算部分(奇数アドレスを得るためのモジュロ計算)が、関数mem1aのメモリモデルのアドレス計算部分へと移動される。これに伴い、繰り返し回数も64回から32回に減らし、メモリモデルmem1書き込み前後の関数fnc_A2,fnc_A3の2回の繰り返しで行っていた処理は、繰り返し1回で行う処理に変更される。図12の例では、関数fnc_A2、func_A3をそれぞれ関数fnc_A2a、fnc_A3aに、記述の中も変更される。関数fnc_A2aの内部記述は人手で変更される。
以上のようなルールの適用によりメモリのアクセス回数が減りレイテンシが削減される。
以上のようなルールの適用によりメモリのアクセス回数が減りレイテンシが削減される。
なお、以上の4つのルールは、1つの例であるが、他にも経験則に基づいて、他のルールも予め設定しておくようにしてもよいことによって、メモリのアクセス回数が減りレイテンシが削減される。
次に、SystemC記述生成部11eにおける、関数分割後のC++記述を、階層動作記述のSystemC記述に変換する処理の流れを図13に示す。図13は、SystemC記述生成部11eにおける処理の流れの例を示すフローチャートである。
まず、SystemC記述生成部11eは、関数を呼び出すSC_CTHREADのラッパと、入出力を持ったSC_MODULEのモジュール記述を生成する(ステップS11)。
SystemC記述生成部11eは、C++記述をSystemCのSC_CTHREAD記述に変換する(ステップS12)。この変換により、図3の左側のC++記述のCaller部33と、Functions of behavioral part部34とが、図3の右側のSystemC記述のCaller部31と、Behavioral part部32とに示されたような記述に変換される。この変換は、予め設定されたテンプレートを用いて、変換すべき予め決められたC++記述を、予め決められたSystemC記述に、テキストベースで変換するように行われる。
次に、SystemC記述生成部11eは、各モジュールを逐次的に起動する制御モジュールを生成する(ステップS13)。生成処理は、モジュール記述を出力、例えば画面表示することによって、ユーザによって各モジュールの起動順序情報が入力される。SystemC記述生成部11eは、入力された起動順序情報に基づいて、制御モジュールを生成する。
SystemC記述生成部11eは、全てのモジュールを信号で接続する(ステップS14)。この接続も、モジュール記述を出力することによって、ユーザによって各モジュールの信号で接続が行われる。SystemC記述生成部11eは、入力された信号接続情報に基づいて、全てのモジュールを信号で接続する。
SystemC記述生成部11eによって生成されたSystemC記述は、動作合成部11fに供給されて動作合成が行われる。
以上の説明した動作合成装置1は、ハードウエアのCベース設計の動作合成に適用でき、特に大規模なハードウエアの動作合成にも適用できるものである。さらに、本実施の形態の動作合成装置1は、逐次動作記述のC記述をメモリアクセスパターンに基づいて階層記述に置き換えて性能のよいRTL記述の合成を可能にする。
以上の説明した動作合成装置1は、ハードウエアのCベース設計の動作合成に適用でき、特に大規模なハードウエアの動作合成にも適用できるものである。さらに、本実施の形態の動作合成装置1は、逐次動作記述のC記述をメモリアクセスパターンに基づいて階層記述に置き換えて性能のよいRTL記述の合成を可能にする。
従って、本実施の形態の動作合成装置では、CベースのC++記述におけるメモリアクセスを解析して、メモリアクセスのパターンに基づいて予め決められた関数分割(あるいは関数併合)が実行される。その予め決められた関数分割により、対象装置である半導体装置におけるメモリアクセスに関わるレイテンシの低減、あるいは回路面積を小さくすることができるように関数が分割(あるいは関数併合)される。よって、そのように関数分割されたC++記述からSystemC記述を生成して動作合成されたRTL記述によれば、最適なメモリの構成あるいはメモリアドレスデコーダの合成が実現されるので、レイテンシの低減、あるいは回路面積の小さい、半導体装置を設計することができる。
次に、本実施の形態に係るシミュレーション装置2が行う逐次動作記述生成手順をSystemC記述を例に説明する。
まず、階層記述された複数のモジュールからなるモジュールのブロック図の例を図14に示す。図14は、複数のモジュールからなるモジュールの例を示すブロック図である。図14において、最上位モジュールModAには、複数のモジュールModB、ModC、ModD(下位階層モジュール)が含まれ、各モジュール間は信号で接続される。下位階層モジュールModBとModCは制御モジュールModDによってその起動順番と起動回数が制御される。下位のModBとModCは、メモリモデルMemA(SystemC記述ではSC_CTHREAD)にアクセスする。メモリモデルMemAは各モジュールModB、ModCからのアクセスを調停するアービタを持っている。
まず、階層記述された複数のモジュールからなるモジュールのブロック図の例を図14に示す。図14は、複数のモジュールからなるモジュールの例を示すブロック図である。図14において、最上位モジュールModAには、複数のモジュールModB、ModC、ModD(下位階層モジュール)が含まれ、各モジュール間は信号で接続される。下位階層モジュールModBとModCは制御モジュールModDによってその起動順番と起動回数が制御される。下位のModBとModCは、メモリモデルMemA(SystemC記述ではSC_CTHREAD)にアクセスする。メモリモデルMemAは各モジュールModB、ModCからのアクセスを調停するアービタを持っている。
逐次動作記述の生成手順は、処理1と処理2から構成される。シミュレーション装置2は、下位階層のモジュールModB、ModCに含まれるメンバ関数を抽出し、その抽出された関数から構成されるスレッド記述と新たな最上位モジュールとを生成する。
図15は、処理1の処理の流れの例を示すフローチャートである。処理1は、下位階層モジュールにかかわる情報の抽出を行う処理であり、処理2は新たな記述を生成する処理である。階層記述から必要な情報を抽出するため、本実施の形態のシミュレーション装置2に予め決められたコマンドを供給する。まず、各処理のステップを示し、その後、SystemC記述を用いて詳しく説明する。まず、図15を用いて処理1を説明する。
図15は、処理1の処理の流れの例を示すフローチャートである。処理1は、下位階層モジュールにかかわる情報の抽出を行う処理であり、処理2は新たな記述を生成する処理である。階層記述から必要な情報を抽出するため、本実施の形態のシミュレーション装置2に予め決められたコマンドを供給する。まず、各処理のステップを示し、その後、SystemC記述を用いて詳しく説明する。まず、図15を用いて処理1を説明する。
シミュレーション装置2のコマンド解釈部21aは、コマンド1記憶装置22aから、コマンド1を読み出して解釈し、最上位モジュール名、抽出対象モジュール名、モジュールの起動順番、同モジュールの起動回数、及びメモリモデルのアービタ名を取り込み主記憶装置25に格納する(ステップS21)。
コマンド1の例は、図6に示されている。
図6は、コマンド1の記述例を説明するための図である。コマンド1は、最上位モジュール名(Top_module)、階層記述から抽出するモジュール名(Extracted_module)、同モジュールの起動順番(Driven_order)、同モジュールの起動回数(Repeat_count)、メモリモデルのアービタ名(Memory arbiter)、メモリモデルへのI/F名(配列名)(Memory_interface)からなる。コマンド1の記述例を図6に示す。このコマンド1の内容が、ステップS21において、解釈される。
ステップS21の処理により、図6のコマンド1では、最上位モジュール名はModAで、抽出モジュール名はModB、ModCであり、起動順番はModB、ModCの順で、繰り返し回数は4回であり、メモリアービタはMemAで、モジュールBとCのメモリI/F名はそれぞれMem1、Mem2であることが解釈される。
SystemC記述解釈部21bは、階層記述のSystemC記述をSystemC記述記憶領域22cから取り込み、主記憶装置25に保存する(ステップS22)。SystemC記述の例は、図5に示されている。図5はSystemC記述によるモジュール記述の例を示す図である。図4はモジュールModBのスレッド記述とそのスレッド記述から呼び出される関数記述とメモリアービタ記述の例を示す図である。
さらに、SystemC記述解釈部21bは、最上位モジュールを解析し、最上位モジュールのポート名とデータタイプ、ならびに信号名と信号のデータタイプを取り出し、主記憶装置25に保存する(ステップS23)。
図5の例では、ステップS23の処理において、最上位モジュールであるModAにおいて、ポート名、例えばclk, reset,ain1等と、そのデータタイプ、例えばbool,sc_uint<16>等と解釈される。
次に、SystemC記述解釈部21bは、抽出対象モジュールを解析し、抽出対象モジュール内の関数名を抽出し、その関数の入力変数名と出力変数名を取り出し、主記憶装置25に保存する(ステップS24)。
図5の例では、ステップS24の処理において、抽出モジュールModB、ModCのSC_CTHREAD関数であるb_exec,c_exec等が抽出され、入力変数と出力変数を、図4の内容から、それぞれの関数の入出力の変数名、例えばfncin1,fncin2,bout1等とそのデータタイプが抽出される。
さらに、SystemC記述解釈部21bは、図6のメモリモデルのアービタ名を基に、そのアービタから呼び出される関数名を抽出し、主記憶装置25に保存する(ステップS25)。
図4においては、メモリアービタ名MemA(SC_CTHREAD関数)から呼び出される関数名は、mem_read(),mem11_write(addr,data)等である。
そして、SystemC記述解釈部21bは、主記憶装置25に保存した各情報を出力装置に出力する(ステップS26)。
図16は、その出力された情報の出力例を示す図である。図16に示すように、抽出された情報が、テキスト情報として出力されている。
次に、処理2の処理について説明する。
出力装置から出力されたデータをテキスト形式に変換し、コマンド2の情報を人が作成する。図17は、コマンド2の記述例を示す図である。最上位モジュールの各ポートと関数の入力及び出力の変数との接続関係、ならびに配列変数名とメモリ関数の関係が、コマンド2として記述されている。すなわち、コマンド2の情報は、最上位モジュールの各ポートと関数の入力、出力変数の接続関係、並びに、メモリアクセス関数に置き換える配列変数名とメモリアクセス関数から呼び出される関数名である。コマンド2の情報は、入力装置23から入力され、コマンド2記憶領域22bに格納される。次に、処理2のステップを図18を用いて説明する。図18は、処理2の処理の流れの例を示すフローチャートである。
出力装置から出力されたデータをテキスト形式に変換し、コマンド2の情報を人が作成する。図17は、コマンド2の記述例を示す図である。最上位モジュールの各ポートと関数の入力及び出力の変数との接続関係、ならびに配列変数名とメモリ関数の関係が、コマンド2として記述されている。すなわち、コマンド2の情報は、最上位モジュールの各ポートと関数の入力、出力変数の接続関係、並びに、メモリアクセス関数に置き換える配列変数名とメモリアクセス関数から呼び出される関数名である。コマンド2の情報は、入力装置23から入力され、コマンド2記憶領域22bに格納される。次に、処理2のステップを図18を用いて説明する。図18は、処理2の処理の流れの例を示すフローチャートである。
まず、コマンド解釈部21aは、コマンド1の出力情報とコマンド2の情報を、コマンド1記憶領域22aとコマンド2記憶領域22bからそれぞれ取り込み、主記憶装置25に保存する(ステップS31)。
SystemC記述解釈部21bは、階層記述のSystemC記述(図5)をSystemC記述記憶領域22cから取り込み、主記憶装置25に保存する(ステップS32)。
メモリアクセス関数生成部21dは、メモリアクセス関数を生成する(ステップS33)。図19は、メモリアクセス関数の記述の例を示す図である。
メモリアクセス関数Mem1の場合、ステップS33のメモリアクセス関数の生成処理では、コマンド2の情報を元に配列名を関数名とし、リードイネーブル(Re)、ライトイネーブル(We)、アドレス(addr)、入力データ(data)を引数として、Reが真の場合に読み出し関数を呼び出し、Weが真の場合に書き込み関数を呼び出す関数を作成する。生成されたメモリアクセス関数の例は、図19の部分101に示されている。モジュールModCのメモリI/F(配列変数)Mem2についても同様である。
関数記述変更部21cは、関数内部の配列変数をステップS33で生成したメモリアクセス関数呼び出しに変更して、新動作記述記憶領域22dに格納する(ステップS34)。
図4では、メモリが配列変数で記述されていたが、図19の部分102には、メモリアクセス関数に置換された後のfn1関数が記述されている。
配列変数からメモリアクセス関数への変更処理は、プログラムの記述の中に予め設定されたテキストが有るか否かをチェックし、そのようなテキストベースの配列変数が検出されると、予め設定されたテキストベースのメモリアクセス関数に置き換えることによって、実現することができる。
スレッド記述生成部21eは、制御関数を生成する。すなわち、スレッド記述生成部21eは、新最上位モジュールのスレッド記述を、コマンド1から取り込んだモジュールの繰り返し回数とモジュール起動順の情報に従って、関数呼び出し記述として生成し、さらに関数間データの受け渡しの変数代入文を作成し、新動作記述領域22dに格納する(ステップS35)。
図19の部分103は、スレッド記述の例を示す図である。そのスレッド記述は、コマンド2のポートと変数の接続情報とコマンド1の起動順番、起動回数をもとに作成される。Fn1in1 = ain1等は接続関係から、forループ文とその内部の関数呼び出しは、起動順番と起動回数をもとに生成される。
モジュール記述生成部21fは、最上位モジュールのモジュール記述(モジュール名、ポート、信号、変数、関数の宣言、スレッド呼び出し)を生成し、新動作記述記憶領域22dに格納する(ステップS36)。図20は、新最上位モジュール記述の例を示す図である。従って、階層動作記述ではない、1つのモジュールによるSystemC記述が生成される。
図20では、関数a_exec_newを呼び出し、図19の部分103が実行されるように、最上位モジュールが記述されている。従って、シミュレーション装置2は、階層動作記述のないSystemC記述に基づいてシミュレーションを実行するので、シミュレーション速度が速い処理を実現することができる。
なお、図20では、最上位モジュール記述をSystemC記述で示したが、SystemC記述に限定されるものではない。例えば、図4のSystemCのスレッド記述を図21のC++のメンバ関数として生成し、その関数をシミュレータのAPI(アプリケーションプログラムインタフェース)関数(図21では命令サイクル毎に呼び出されるStepI関数)を用いて呼びだし、C++シミュレータによってシミュレーションすることができる。図21は、C++シミュレーション記述の例を示す図である。
新動作記述記憶領域22dから情報が取り出され、生成された動作記述が出力装置に出力される(ステップS37)。
さらに、本実施の形態では、コマンド記述でシミュレーション装置2に制御情報を与えたが、これに限定されるものではなくSystemC記述中に、図22のようなディレクティブとして与えてもよい。図22は、SystemC記述中に、コメント文として制御情報を記述するようにした例を示す図である。すなわち、ディレクティブ記述として制御情報が記述される。
以上のように、本実施の形態に係わるシミュレーション装置2は、ハードウエアのCベース設計におけるシミュレーションに適用でき、特に大規模なハードウエアのシミュレーションにも適用できるものである。さらに、本実施の形態のシミュレーション装置2は、階層的に記述された複数モジュール記述を自動的に1モジュール記述あるいは階層動作記述のない記述に変換するので、高速シミュレーションを実現することができる。
また、上述した実施の形態によれば、プログラムの保守において、動作合成用の階層動作記述だけを保守するだけでよく、従来のような2つの記述を保守する工数に比べ、工数は半分になる。
なお、以上説明した各部の動作を実行するプログラムは、フロッピー(登録商標)ディスク、CD−ROM等の可搬媒体や、ハードディスク等の記憶装置等に、その全体あるいは一部が記録され、あるいは記憶されている。そのプログラムがコンピュータにより読み取られて、動作の全部あるいは一部が実行される。あるいは、そのプログラムの全体あるいは一部を通信ネットワークを介して流通または提供することができる。利用者は、通信ネットワークを介してそのプログラムをダウンロードしてコンピュータにインストールしたり、あるいは記録媒体からコンピュータにインストールすることで、容易に本発明の設計装置を実現することができる。
以上説明したように、本実施の形態に係る動作合成装置1を利用することによって、メモリアクセスにかかわるレイテンシを低減することができ、また、最適なメモリ構成とメモリアドレスデコーダの合成が可能で合成後の回路サイズを小さくすることができる。
さらに、本実施の形態に係るシミュレーション装置2を利用することによって、高速なシミュレーションを実現することができる。
本発明は、上述した実施の形態に限定されるものではなく、本発明の要旨を変えない範囲において、種々の変更、改変等が可能である。
1 動作合成装置、2 シミュレーション装置、11、21 CPU、12、22 記憶装置
Claims (5)
- 逐次動作記述のプログラミング言語によってハードウエアの動作および構成を記述した逐次動作記述プログラムに基づいて、動作合成を行う装置であって、
前記逐次動作記述プログラムを解析して、前記逐次動作記述プログラム中の1又は複数の関数による、前記逐次動作記述プログラム内のメモリモデルに対するアクセスパターンが予め決められたパターンに該当する記述の有無を検出するメモリアクセス解析部と、
該メモリアクセス解析部により前記予め決められたパターンに該当する記述が検出された場合、前記1の関数を予め決められた2以上の関数に分割、あるいは前記複数の関数を予め決められた1つの関数に併合するように、前記逐次動作記述プログラム中の前記1又は複数の関数を他の関数に変換する関数変換部と、
該関数変換部により変換された前記他の関数を含む前記逐次動作記述プログラムに基づいて、動作合成を行う動作合成部と、
を有することを特徴とする動作合成装置。 - 複数のモジュールの入出力情報が定義されてハードウエアの動作および構成を階層的に記述した階層動作記述プログラムに基づいて、シミュレーションを行うシミュレーション装置であって、
前記階層動作記述プログラムを解析して、前記複数のモジュールのラッパを外し、前記階層動作記述プログラムを関数記述プログラムに変更する関数記述変更部と、
該関数記述プログラムに基づいて、前記複数のモジュールの入出力情報の記述のないプログラムを、シミュレーション用プログラムとして生成する関数記述生成部と、
該関数記述生成部により生成されたシミュレーション用プログラムを用いてシミュレーションを行うシミュレーション部と、
を有することを特徴とするシミュレーション装置。 - 逐次動作記述のプログラミング言語によってハードウエアの動作および構成を記述した逐次動作記述プログラムを解析して、前記逐次動作記述プログラム中の1又は複数の関数による、前記逐次動作記述プログラム内のメモリモデルに対するアクセスパターンが予め決められたパターンに該当する記述の有無を検出するメモリアクセス解析部と、
該メモリアクセス解析部により前記予め決められたパターンに該当する記述が検出された場合、前記1の関数を予め決められた2以上の関数に分割、あるいは前記複数の関数を予め決められた1つの関数に併合するように、前記逐次動作記述プログラム中の前記1又は複数の関数を他の関数に変換する関数変換部と、
該関数変換部により変換された前記他の関数を含む前記逐次動作記述プログラムに基づいて、動作合成を行う動作合成部と、
複数のモジュールの入出力情報が定義されてハードウエアの動作および構成を階層的に記述した階層動作記述プログラムを解析して、前記複数のモジュールのラッパを外し、前記階層動作記述プログラムを関数記述プログラムに変更する関数記述変更部と、
該関数記述プログラムに基づいて、前記複数のモジュールの入出力情報の記述のないプログラムを、シミュレーション用プログラムとして生成する関数記述生成部と、
該関数記述生成部により生成されたシミュレーション用プログラムを用いてシミュレーションを行うシミュレーション部と、
を有することを特徴とする設計装置。 - メモリアクセス解析部と、関数変換部と、動作合成部とを有し、逐次動作記述のプログラミング言語によってハードウエアの動作および構成を記述した逐次動作記述プログラムに基づいて、動作合成を行う方法であって、
前記メモリアクセス解析部は、前記逐次動作記述プログラムを解析して、前記逐次動作記述プログラム中の1又は複数の関数による、前記逐次動作記述プログラム内のメモリモデルに対するアクセスパターンが予め決められたパターンに該当する記述の有無を検出し、
前記関数変換部は、前記メモリアクセス解析部により前記予め決められたパターンに該当する記述が検出された場合、前記1の関数を予め決められた2以上の関数に分割、あるいは前記複数の関数を予め決められた1つの関数に併合するように、前記逐次動作記述プログラム中の前記1又は複数の関数を他の関数に変換し、
前記動作合成部は、前記関数変換部により変換された前記他の関数を含む前記逐次動作記述プログラムに基づいて、動作合成を行うことを特徴とする動作合成方法。 - 関数記述変更部と、関数記述生成部と、シミュレーション部とを有し、複数のモジュールの入出力情報が定義されてハードウエアの動作および構成を階層的に記述した階層動作記述プログラムに基づいて、シミュレーションを行うシミュレーション方法であって、
前記関数記述変更部は、前記階層動作記述プログラムを解析して、前記複数のモジュールのラッパを外し、前記階層動作記述プログラムを関数記述プログラムに変更し、
前記関数記述生成部は、前記関数記述プログラムに基づいて、前記複数のモジュールの入出力情報の記述のないプログラムを、シミュレーション用プログラムとして生成し、
前記シミュレーション部は、前記関数記述生成部により生成されたシミュレーション用プログラムを用いてシミュレーションを行うことを特徴とするシミュレーション方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2006150584A JP2007323206A (ja) | 2006-05-30 | 2006-05-30 | 動作合成装置、同方法、シミュレーション装置、同方法及び設計装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2006150584A JP2007323206A (ja) | 2006-05-30 | 2006-05-30 | 動作合成装置、同方法、シミュレーション装置、同方法及び設計装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2007323206A true JP2007323206A (ja) | 2007-12-13 |
Family
ID=38855982
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2006150584A Pending JP2007323206A (ja) | 2006-05-30 | 2006-05-30 | 動作合成装置、同方法、シミュレーション装置、同方法及び設計装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2007323206A (ja) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2010039677A (ja) * | 2008-08-04 | 2010-02-18 | Fujitsu Ltd | 設計支援プログラム、設計支援装置、および設計支援方法 |
JP2010097493A (ja) * | 2008-10-17 | 2010-04-30 | Fujitsu Ltd | 設計支援プログラム、設計支援装置、およびシミュレーションモデル |
JP2019191796A (ja) * | 2018-04-23 | 2019-10-31 | 株式会社日立製作所 | 高位合成方法、高位合成プログラム、高位合成装置 |
-
2006
- 2006-05-30 JP JP2006150584A patent/JP2007323206A/ja active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2010039677A (ja) * | 2008-08-04 | 2010-02-18 | Fujitsu Ltd | 設計支援プログラム、設計支援装置、および設計支援方法 |
JP2010097493A (ja) * | 2008-10-17 | 2010-04-30 | Fujitsu Ltd | 設計支援プログラム、設計支援装置、およびシミュレーションモデル |
JP2019191796A (ja) * | 2018-04-23 | 2019-10-31 | 株式会社日立製作所 | 高位合成方法、高位合成プログラム、高位合成装置 |
JP7026563B2 (ja) | 2018-04-23 | 2022-02-28 | 株式会社日立製作所 | 高位合成方法、高位合成プログラム、高位合成装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Ferrandi et al. | Bambu: an open-source research framework for the high-level synthesis of complex applications | |
US7934179B2 (en) | Systems and methods for logic verification | |
WO2002061576A2 (en) | System, method and article of manufacture for interface constructs in a programming language capable of programming hardware architectures | |
US9405866B1 (en) | Automating a microarchitecture design exploration environment | |
WO2008033344A2 (en) | Hardware definition language generation for frame-based processing | |
WO2007078915A2 (en) | System and method for generating a plurality of models at different levels of abstraction from a single master model | |
JPH11513512A (ja) | ディジタル信号プロセッサの製造方法 | |
US8839187B1 (en) | Automatic generation of hardware simulation interface code using pre-processor macros | |
Sozzo et al. | Pushing the level of abstraction of digital system design: A survey on how to program fpgas | |
WO2018220974A1 (ja) | SystemCモデル生成方法およびSystemCモデル生成プログラム | |
Kapre et al. | Survey of domain-specific languages for FPGA computing | |
JP5034916B2 (ja) | 性能評価モデル生成方法、システム性能評価方法、及び性能評価モデル生成装置 | |
EP3937057A1 (en) | Systems and methods for generating synthesizable netlists from register transfer level designs | |
JP2007310449A (ja) | ソフトウェア/ハードウェア協調設計のためのモデル生成プログラム、およびモデル生成方法 | |
JP2007323206A (ja) | 動作合成装置、同方法、シミュレーション装置、同方法及び設計装置 | |
US10706193B1 (en) | Computer processing during simulation of a circuit design | |
Huang et al. | Specialized accelerators and compiler flows: Replacing accelerator apis with a formal software/hardware interface | |
Kourfali et al. | An integrated on-silicon verification method for FPGA overlays | |
JP4730536B2 (ja) | 動作合成システム、動作合成方法およびプログラム | |
Stefanov et al. | Deriving process networks from weakly dynamic applications in system-level design | |
Bombieri et al. | HDTLib: an efficient implementation of SystemC data types for fast simulation at different abstraction levels | |
Vanderbauwhede et al. | Towards automatic transformation of legacy scientific code into OpenCL for optimal performance on FPGAs | |
Belloeil et al. | Stratus: A procedural circuit description language based upon Python | |
Baguma | High level synthesis of fpga-based digital filters | |
Mathur et al. | A hierarchical simulation framework for application development on system-on-chip architectures |