(57)【特許請求の範囲】
【請求項１】
計算機で実行することにより電子回路の設計を補助する方法において、
Ｃ＋＋言語により回路モジュールの機能を関数名として記述したリストに基いて、各モジュール毎に内部出力を特定して抽出するモジュールのクラス定義生成ステップと、
上記モジュール間の接続状況を記述した接続記述ファイルとに基いて、モジュール間接続点を上位階層内部出力として抽出し、かつソートして機能が共通する関数を引用しているモジュールを結合記述して、上位階層のクラス定義ファイルを得るモジュール接続情報検出・上位階層のクラス定義ファイル生成ステップと、
上記モジュールのクラス定義生成ステップで得られたモジュールのクラス定義ファイルを必要な数だけ抽出し、上記モジュール接続情報・上位階層のクラス定義ファイル生成ステップで得られた上位階層のクラス定義とを合成して、合成クラス定義ファイルを得るクラス定義合成ステップ、とを備え、計算機で上記各ステップを実行することを特徴とするＣ＋＋言語による電子回路設計補助方法。
【請求項２】
モジュール間の接続状況を記述した接続記述ファイルは、Ｃ＋＋言語で記述し、モジュール接続情報検出・上位階層のクラス定義ファイル生成ステップは、上記接続記述ファイルに記載された共通の機能を持つメンバ関数に対して結合記述するようにしたことを特徴とする請求項１記載のＣ＋＋言語による電子回路設計補助方法。
【請求項３】
Ｃ＋＋言語により回路モジュールの機能を関数名として記述したリストにパイプライン接続が記述されている場合は、上記Ｃ＋＋言語により回路モジュールの機能を関数名として記述したリストから上記パイプラインの段数を検出するパイプライン段数検出ステップを備えて、
モジュールのクラス定義ファイルは、上記パイプラインの出力を内部出力として特定するようにしたことを特徴とする請求項１記載のＣ＋＋言語による電子回路設計補助方法。
【請求項４】
Ｃ＋＋言語により回路モジュールの機能を関数名として記述したリストにパイプライン接続が記述されている場合は、上記Ｃ＋＋言語により回路モジュールの機能を関数名として記述したリストからデバイスタイプを検出するデバイスタイプ検出ステップと、
ＬＳＩ依存参照テーブルを設けて、該ＬＳＩ依存参照テーブルを参照して上記検出したデバイスタイプの上記パイプラインの段数を決めるパイプライン段数検出ステップ、とを備えて、
モジュールのクラス定義ファイルは、上記パイプラインの出力を内部出力として特定するようにしたことを特徴とする請求項１記載のＣ＋＋言語による電子回路設計補助方法。
【請求項５】
決められたパイプライン段数を追加すると、該追加された特定モジュールの出力に着目して、該特定モジュールの出力先のモジュールに入力する他のモジュールに対しても、上記同一パイプライン段数を追加する周辺回路パイプライン追加ステップを備えたことを特徴とする請求項３または請求項４記載のＣ＋＋言語による電子回路設計補助方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、電子回路設計においてＨ／Ｗ記述言語により電子回路の設計を補助する方法及び装置に関するものである。
【０００２】
【従来の技術】
従来の電子回路の設計は、Ｈ／Ｗ設計用の専用記述言語やＣ／Ｃ＋＋言語、または回路図を描くことによって行われてきた。
【０００３】
次に動作について説明する。電子回路設計をＣ＋＋言語によって行う場合、動作を表す記述と、Ｃ＋＋言語固有のクラス定義記述を行う。これら記述を元に、電子回路の物理的情報に変換して電子回路を生成する。
また、Ｃ＋＋言語によるＨ／Ｗ記述によって物理回路変換可能な同期回路の動作記述をする場合には、動作クロックを意識した記述を行うか、または抽象的な記述をして抽象的な動作記述を物理情報に変換可能なＥＤＡツールにより物理回路を作成している。
【０００４】
【発明が解決しようとする課題】
従来のＣ＋＋言語によるＨ／Ｗ記述設計では、動作を示す記述ファイルと、クラス定義を記述したファイルの両方を作成しなくてはならない。動作記述をしている関数のクラス定義ファイルにはその関数の入出力ポート、および内部変数の情報を定義している。さらにそれらの関数を接続する上位階層の関数のクラス定義ファイルには、上位階層の関数における入出力ポートや内部変数のほかに、その階層（関数）で呼び出す関数とクラスの対応条件や関数関の接続信号名を宣言する必要がある。下位階層の関数において入出力ポートまたは内部変数の変更が生じた場合は、各関数のクラス定義ファイルの入出力ポートや内部変数の宣言を変更し、上位階層関数のクラス定義ファイルに対して、関数間の接続信号名の定義ファイルの内容を変更する必要があるため、設計変更による作業負担が大きいという課題がある。
【０００５】
更に、同期回路を設計する場合の最終的なＨ／Ｗ記述設計においては、クロックを意識した記述をする必要があるが、一般にＣ＋＋言語ではクロックを意識しない動作記述による設計を行う場合が多く、回路のアルゴリズムの評価を行った後にクロックを意識した記述に書き換えるという方法をとる。この方法では、回路のアルゴリズム変更によりクロックの段数の変更があった場合は、再度クロックを意識した記述の変更が必要になるという課題がある。
【０００６】
また、乗算器などの設計を行う場合、Ｃ＋＋言語によるＨ／Ｗ設計では、Ｈ／Ｗ性能を考慮した設計（パイプラインの段数を考慮した設計）を行わない場合が一般的であり、最終的にパイプラインの段数を意識して再設計を行う。この際に、パイプライン段数を１段増やすということは、Ｈ／Ｗにおいてはフリップ・フロップ関数を追加するということになる。フリップ・フロップ関数の追加が必用な関数が多い場合、または１つの関数においてパイプラインの追加段数が多い場合は、パイプライン段数の変更に伴うＣ＋＋言語記述の変更量が大きく、パイプライン段数変更によるパフォーマンス調整などが即座に出来ない。また、パイプライン段数を追加した場合は、その周辺回路もタイミング調整を行なうために、フリップ・フロップを追加する必要があり、その記述変更ミスが生じるやすいという課題がある。
【０００７】
この発明は上記課題を解決するためになされたもので、まずＣ＋＋言語による電子回路記述において、クラス定義を記述する作業負荷を削減し、設計効率を高めるシステムを得る。
【０００８】
【課題を解決するための手段】
この発明に係る高位言語による電子回路設計補助方法は、計算機で実行することにより電子回路の設計を補助する方法において、
Ｃ＋＋言語により回路モジュールの機能を関数名として記述したリストに基いて、各モジュール毎に内部出力を特定して抽出するモジュールのクラス定義生成ステップと、
上記モジュール間の接続状況を記述した接続記述ファイルとに基いて、モジュール間接続点を上位階層内部出力として抽出し、かつソートして機能が共通する関数を引用しているモジュールを結合記述して、上位階層のクラス定義ファイルを得るモジュール接続情報検出・上位階層のクラス定義ファイル生成ステップと、
上記モジュールのクラス定義生成ステップで得られたモジュールのクラス定義ファイルを必要な数だけ抽出し、上記モジュール接続情報・上位階層のクラス定義ファイル生成ステップで得られた上位階層のクラス定義とを合成して、合成クラス定義ファイルを得るクラス定義合成ステップ、とを備え、計算機で上記各ステップを実行することを特徴とする。
【０００９】
また更に、モジュール間の接続状況を記述した接続記述ファイルは、Ｃ＋＋言語で記述し、モジュール接続情報検出・上位階層のクラス定義ファイル生成ステップは、接続記述ファイルに記載された共通の機能を持つメンバ関数に対して結合記述するようにした。
【００１０】
また更に、Ｃ＋＋言語により回路モジュールの機能を関数名として記述したリストからパイプラインの段数を検出するパイプライン段数検出ステップを備えて、
モジュールのクラス定義ファイルは、パイプラインの出力を内部出力として特定するようにした。
【００１１】
また更に、Ｃ＋＋言語により回路モジュールの機能を関数名として記述したリストからデバイスタイプを検出するデバイスタイプ検出ステップと、
ＬＳＩ依存参照テーブルを設けて、このＬＳＩ依存参照テーブルを参照して検出したデバイスタイプのパイプライン段数を決めるパイプライン段数検出ステップ、とを備えて、
モジュールのクラス定義ファイルは、パイプラインの出力を内部出力として特定するようにした。
【００１２】
また更に、決められたパイプライン段数を追加すると、この追加した特定モジュールの出力に着目して、この特定モジュールの出力先のモジュールに入力する他のモジュールに対しても、同一パイプライン段数を追加する周辺回路パイプライン追加ステップを備えた。
【００１４】
【発明の実施の形態】
実施の形態１．
以下、本発明の高位言語によるハードウェア設計補助方法の実施の形態１を図面に基づき説明する。
図１は、高位言語、特にＣ＋＋言語による回路アルゴリズムの記述から要素としての各モジュールのクラス定義ファイルを得て、回路を構成するモジュール間の接続の記述から上位階層のクラス定義ファイルを得て、更にこれらを結合して合成クラス定義ファイルを得る、システム設計の流れを示すフロー図である。なお、こうして得られた合成クラス定義ファイルと、モジュールの回路動作記述アルゴリズムにより、Ｃ＋＋言語で記述して容易にハードウェア設計ができるが、その部分は本発明の範囲外となるので、ここでは記述しない。
【００１５】
図１において、１は単位回路としてのモジュールが持つ機能、つまり関係式で記述した関数を用いて、Ｃ＋＋言語によるアルゴリズムの形式で記述したリストである。２は、入出力ポート／内部レジスタ特定処理工程（ステップ）、３はモジュールのクラス定義生成工程で、これらにより４のモジュールのクラス定義ファイルが生成される。
５はＣ＋＋言語によるモジュール間の接続記述ファイルで、６は回路図エディタ、７はそれにより得られるネットリスト、８はモジュール間接続情報を検出する関数接続情報検出工程で、いずれかの接続記述ファイル５またはネットリスト７から、モジュールの接続情報を検出し、特に内部出力を抽出する。９は上位階層関数のクラス定義ファイル生成工程で、複数のモジュールが接続されて上位階層の複合回路を形成する場合、上位階層に含まれるモジュール間で定義される内部出力（内部変数と記述する）を含んだ、この上位階層のクラス定義ファイルを生成する。
更に１１は、上位階層のクラス定義ファイルと、この上位階層を形成する複数のモジュールのクラス定義ファイルを結合する、クラス定義合成工程であり、１２は、その結果得られる合成クラス定義ファイルである。
【００１６】
図２は、Ｃ＋＋言語によるアルゴリズムの形式で記述したリストであり、図１におけるアルゴリズム記述ファイル１の例を示している。図において、モジュールの関数（機能）定義が、入力、出力、機能として記述されている。この図の例では、入力が「型名  入力名」（ｉｎｔ  ｉｎ−ａ等）と表され、出力は「型名出力名」（ｉｎｔ＆ｏｕｔ）と表されている。更に機能記述の中で、内部演算が記述（ｉｆ等）されている。図３は、入出力ポート／内部レジスタ特定処理工程２とモジュールのクラス定義生成工程３とが行う動作フローと、その結果得られるモジュールのクラス定義ファイル４の例を示す図である。
図４は、複数のモジュールが接続されて上位階層の複合回路を形成する場合の、複合回路、つまり上位階層の接続例と、この接続をＣ＋＋言語で記述した接続記述ファイル５の例を示す図である。図５は、モジュール間接続情報検出工程８と上位階層のクラス定義ファイル生成工程９とが行う動作フローと、その結果得られる上位階層クラス定義ファイル１０の例を示す図である。図６は、クラス定義合成工程１１が行う動作フローと、その結果得られ合成クラス定義ファイル１２の例を示す図である。
【００１７】
図１の各工程における動作を説明する。
入出力ポート／内部レジスタ特定処理工程２では、入力であるアルゴリズム記述ファイル１から入力としての変数を検索し、関数名と入力ポートと出力ポート、及び内部レジスタを特定する。即ち、関数の因数宣言で「型名  入力ポート名」と宣言している引数（変数）名を検索して入力ポートとする。同様に関数の引数宣言で「型名  出力ポート名」と宣言している引数名を検索して出力ポートとする。これは図３（ａ）のＳ２１で示される。関数の中で使用している出力を検索して、特に関数表現（＝表示）されていて、出力ポートと判別されたもの以外のものが、フリップ・フロップ等の、中間出力となる内部レジスタとされる。Ｓ２２で示される動作である。
またモジュールのクラス定義生成工程３では、上記検索した入力ポート名、出力ポート名及び内部出力から、内部出力にはｐｒｉｖａｔｅとしてラベル付け、モジュールのメンバ関数宣言は、ｐｕｂｌｉｃとラベルを付ける。Ｓ２３でモジュールとの関係をｖｏｉｄ  ｖａｒとして記述して、モジュールのクラス定義ファイル４を生成する。図において、ｃｌａｓｓ  ｆｕｎｃはモジュールのクラス定義ファイルを表している。
【００１８】
一方、各モジュール間の接続情報は、１つは、Ｃ＋＋言語でモジュールの接続を記述した図４（ｂ）に例が示される接続記述ファイル５から得られる。この例は、図４（ａ）で５つのハードウェア・モジュールで構成される上位階層の複合回路の接続関係を記述している。
図４（ｂ）では、上位階層の入力の変数はａとｂの２つがあり、それらから最終的に上位階層の出力が得られることを示している。詳細には、下位のモジュールの接続関係として、クラスＦ＿Ａ（例えば除算）に属する関数はｆｕｎｃ＿Ａ、それとは別にクラスＦ＿Ｂ（例えば乗算）に属する関数はｆｕｎｃ＿Ｂ０とｆｕｎｃ＿Ｂ１があることを示している。それぞれの入力は、例えばｆｕｎｃ＿Ａではａとｃとで、出力はｄである。
この入力ファイルから、接続情報検出工程８は図５（ａ）のフローに基づいた動作を行う。即ちＳ３１で、接続記述ファイル５中の関数の引数名で出力ポートを抽出する。次いでＳ３２では、同じく出力ポート以外のものを抽出し、内部変数（出力）とする。上位階層のクラス定義ファイル生成工程９では、これらをｐｒｉｖａｔｅとラベル付け、Ｓ３３におけるソート動作により、Ｃ＋＋言語で記述された接続記述ファイル中で、コメントとして同一メンバ関数（図では、例えばｃｌａｓｓ＝Ｆ＿Ｂ）を引用しているモジュールを結合記述し、ｆｕｎｃ＿Ｂ０，ｆｕｎｃ＿Ｂ１等とする。Ｓ３４では、アルゴリズム記述とクラス定義ファイルとを関係付けるｖｏｉｄ  ｂａｒ宣言をして、図５（ｂ）の上位階層クラス定義ファイル１０が得られる。
【００１９】
モジュール間接続情報を得る、他の１つの方法は、回路図エディタ６によって生成されたネットリスト７から情報を得るものである。この場合も、クラスと関数の関係はネットリストで定められている属性に定義されているので、結局は図４（ｂ）相当のリストが得られて、これから上記図５（ａ）相当の動作により、上位階層のクラス定義ファイル１０が得られる。
クラス定義合成工程１１は、図６（ａ）に示す複数のファイル結合を行う。即ち図６（ｂ）のＳ４１で、上位階層を表現したアルゴリズム記述ファイルから記載されているモジュールを抽出し、これらのモジュールのクラス定義ファイルをメモリに記憶する。更にＳ４２では、上位階層のクラス定義ファイル１０を抽出し、先にメモリに記憶しておいた複数のモジュールのクラス定義ファイルと合成して、図６（ｂ）の合成クラス定義ファイル１２を生成する。
【００２０】
こうして完成したクラス定義ファイルであっても、例えばモジュール間に新しいモジュールを追加したり、新規に信号を追加したりして、設計変更を行うことがある。こうした場合に、当然のことながら設計変更に基づくクラス定義ファイルの再作成が必要になる。
設計変更を本実施の形態に及ぼすには、設計者はクラス定義ファイルと接続記述ファイルの両方を変更する。こうした場合も、本実施の形態の方法によれば、元の接続記述を変更すれば、それに基づいてクラス定義ファイルの変更が行われることを説明する。
図７（ａ）は、図４（ａ）の上位階層の接続状態を説明する図において、新らしいモジュール１３を付加し、その出力をモジュールＢ０とモジュールＢ１に接続する設計変更を行った場合の、元となる接続変更図である。また図７（ｂ）は設計変更前のモジュールＢ０とＢ１の定義ファイルを示す図で、図７（ｃ）は変更後のクラス定義ファイルを示す図である。
【００２１】
動作としては、先ずモジュール定義ファイル４の入力が１つ増えるので、ｃを付加する。図７（ａ）の接続図では、この追加された入力の信号名はｚとなっているが、Ｃ＋＋ク言語によるラス定義ファイル４では、順次入力信号を定めるので、ｚと命名しなくてよい。図８（ａ）は変更前の接続記述ファイル５を示し、これが図７（ａ）のモジュール追加により、図８（ｂ）の記述となる。即ち新しいモジュールｚが追加され、かつモジュールｆｕｎｃ＿Ｂ０、ｆｕｎｃ＿Ｂ１の各入力にこの中間出力のｚが接続される記述となる。
詳細記述は省略するが、これらの入力により、接続情報検出工程８、上位階層クラス定義ファイル生成工程９、及びクラス定義合成工程１１が上記のように動作して、図８（ｃ）の設計変更に対応する合成クラス定義ファイル１２を生成する。
回路図エディタ６によって接続情報を変更する場合も、それに基づいてユーザが新しいネットリスト７を得て、設計変更前のネットリストと比較して、容易に新しいモジュールと接続関係の変更を抽出できる。即ち追加があれば記述を追加し、削除があれば対応するモジュールを削除したり、接続記述を減らす。
【００２２】
実施の形態２．
図９は、本実施の形態におけるＣ＋＋言語によるＨ／Ｗ設計方法の流れを示すフロー図である。これは実施の形態１における、モジュールのクラス定義ファイル１を作成する前段階の追加動作フローである。本実施の形態では、Ｃ＋＋で記述したクロックを意識しない抽象度で記述されたモジュール関数記述に対して、挿入するパイプラインの段数を定義し、その情報によりパイプラインの調整を行ったＣ＋＋記述を生成する方法について説明する。
【００２３】
多ビットの乗算器などは、論理回路の内容またはハードウェアのデバイス性能によりパイプライン処理を何段か挿入しなくては、処理結果がタイミングの制約上間に合わない場合がある。そのため、Ｃ＋＋言語によるＨ／Ｗ記述において、モジュール関数の回路動作を記述したプログラム・ファイル１３の中で、そのモジュール関数の内部に存在する乗算器回路等に挿入するパイプラインの段数を定義する。図１０に記述例を示す。この例では、「＃ｐｒａｇｍａ  ｃｙｃｌｅ（挿入パイプライン段数）」と宣言している。即ち図１０の例では挿入パイプラインは２段である。
【００２４】
検出工程１５ａにおいて、ユーザーがプログラム・ファイル１３の中で宣言したパイプラインの段数を検索することにより任意の乗算器回路等のパイプラインの段数を特定する。そして定義されたパイプラインの段数の数だけ、乗算器回路等の関数の出力にフリップ・フロップのモジュール関数を付加する。追加する方法は、まず乗算器回路等の関数出力ポートに接続し、フリップ・フロップ関数の出力ポート名を変更する前の乗算器回路等の出力ポート名に変更する。これにより１段のフリップ・フロップ回路が挿入されたことになる。
２段、３段とフリップ・フロップ関数を追加する場合は、最終段のフリップ・フロップ関数の出力ポート名を変更し、追加するフリップモジュール関数の入力ポートを接続する。そして追加したフリップ・フロップ関数の出力ポートと記述変更前の乗算器回路等の出力ポートに変更する。
【００２５】
さらに、フリップフロップを付加した乗算器回路等の周りに存在する回路に対して、フリップ・フロップのモジュール関数を対応して付加することにより、回路全体のタイミングエラーを回避する。例として、乗算器モジュールと周辺回路との関係を図１１に示す。乗算器モジュール２０ａにフリップ・フロップ・モジュールを追加した場合、回路全体のタイミングを合わせるために周辺回路Ａ２０ｂの出力にフリップ・フロップ・モジュールを追加する。これにより回路Ｂ２０ｃに入力される乗算器モジュールの２０ａの出力信号と、回路Ａ２０ｂモジュールの出力信号とのタイミング差はなくなる。回路Ａの検索方法は、まず乗算器モジュールの出力ポートと接続する関数Ｂを検索する。次に関数Ｂの入力ポートにおいて乗算器モジュール以外から入力されるポート名を検索する。そしてそのポート名と同じ接続信号をもつ関数を検出することにより、フリップ・フロップ・モジュールを追加する周辺回路Ａを決定する。周辺回路Ａにフリップ・フロップ・モジュールを追加する方法は、周辺回路Ａの出力ポート名を変更し、追加するフリップ・フロップ関数の入力ポートに接続する。そしてフリップ・フロップ関数の出力信号を周辺回路Ａの最終出力ポート名に変更する。
こうしてフリップ・フロップ関数が追加されたＣ＋＋言語によるモジュール回路動作アルゴリズム記述プログラム１ｂが生成される。この回路動作アルゴリズムの記述ファイル１ｂを用いての、モジュールのクラス定義ファイル作成工程は、図１のフローに従うので、記述を省略する。
【００２６】
設計するＬＳＩのデバイスタイプが決まっており、パイプラインの段数もそのデバイスのタイプによって設定するのであれば、ＬＳＩ依存参照テーブル１６にてユーザーがデバイスタイプ、関数名、パイプライン段数を定義する。そしてプログラム・ファイル１３の中で「ｐｒａｇｍａ」宣言等により、ＬＳＩのデバイス名をユーザーが宣言する。図１２にプログラム・ファイル１３の木術例を、図１３にＬＳＩ依存参照テーブル１６の記述例を示す。これは図９のＬＳＩ依存参照テーブル１６の中にあり、デバイスと乗算ビット数に対応して、段数が経験的に決められている。プログラム・ファイル１３の記述例では、デバイス名の宣言を「＃ｐｒａｇｍａ  ｄｅｖ＿ｔｙｐｅ  ｔｙｐｅデバイス名」といている。ＬＳＩ依存参照テーブル１６では「（デバイス名）−（関数名）−（パイプライン段数）」を定義している。まずＬＳＩのデバイスタイプをプログラム・ファイル１３からデバイス検出器１４により抽出する。次にプログラム・ファイル１３で呼び出している乗算器回路等の関数名および抽出されたデバイス名をキーとして、目的の関数に挿入するパイプライン段数を決定する。
【００２７】
実施の形態３．
図１４は、本実施の形態におけるＣ＋＋言語によるメモリを使用したＨ／Ｗ設計方法の流れを示すフロー図である。これも実施の形態２と同様に、実施の形態１における、モジュールのクラス定義ファイル１を作成する前段階の追加動作フローである。本実施の形態では、メモリのリードおよびライトのアクセス処理も乗算器等と同様にクロックを意識したＣ＋＋言語記述１ｃを生成する。
【００２８】
メモリのアクセス・タイミングを意識していない動作記述を行ったプログラム２１の中に、メモリデータのリードおよびライトのアクセス・タイミングをユーザーが設定し、記述の中で「ｐｒａｇｍａ」宣言等を使用して定義する。記述例を図１５に示す。このアクセス・タイミング情報を抽出し、メモリモジュール関数の前後にフリップ・フロップ関数を追加することにより、メモリのリードおよびライトのアクセス・タイミングを考慮したＣ＋＋言語記述１ｃを生成する。これ以降の動作については、図１の動作フローに従うので、詳細記述を省略する。
【００２９】
図１５の記述では、遅延段数は１である。メモリのリードに対するアクセスタイミングを１サイクル遅延させるためには、メモリのリードデータおよびリードアドレスに対して、１段フリップ・フロップを追加することにより実現できる。フリップ・フロップ関数の追加の方法は、プログラムファイル２１から「ｐｒａｇｍａ」宣言とうにより設定されたリード遅延段数を抽出する。図１５の記述例では、「＃ｐｒａｇｍａ（関数名）−Ｒ−（パイプライン段数）」となっている。そしてメモリに入力するリードアドレスの信号名を変更し、フリップ・フロップ関数の入力ポートに接続する。フリップ・フロップ関数モジュールの出力ポートを、変更前のリードアドレスの信号名に変更する。複数段アクセス・タイミングを遅延させるには、複数のフリップ・フロップ回路を同時に追加する。
【００３０】
メモリのライトに対するアクセス・タイミングを１サイクル遅延させるためには、メモリのライトデータおよびライトアドレスに対して、１段フリップ・フロップを追加することにより実現できる。フリップ・フロップ関数の追加の方法は、プログラムファイル２１から「ｐｒａｇｍａ」宣言等により設定されたリード遅延段数を抽出する。本記述例では、「＃ｐｒａｇｍａ（関数名）−Ｗ−（パイプライン段数）」となっている。そしてメモリから出力するデータ及びライトアドレスの信号名を変更し、フリップ・フロップ関数の入力ポートに接続する。フリップ・フロップ関数モジュールの出力ポートを、変更前のライトデータおよびライトアドレスの信号名に変更する、複数段アクセス・タイミングを遅延させるには、複数のフリップ・フロップ回路を同様に追加する。
【００３１】
また、メモリのアクセス・タイミングとメモリタイプの関係をユーザーがメモリ・タイミング参照テーブル３０にて定義することも可能である。メモリ・タイミング参照テーブル３０には、メモリのアクセス・タイミング、リード遅延段数、ライト遅延段数が定義する。例を図１６に示す。この例では「（メモリタイプ）−Ｒ／Ｗ−（段数）」と定義されている。ｍｅｍ＿Ａ、ｍｅｍ＿Ｂがメモリタイプであり、Ｒ−１とあればリードタイミングに１段のフリップ・フロップが追加される。Ｒ−２とあれば２段のフリップ・フロップが追加される。Ｗ−１とあればライトタイミングに１段のフリップ・フロップが追加され、Ｗ−２とあれば２段のフリップ・フロップが追加される。プログラムファイル２１にて使用している関数と、メモリ・タイミング参照テーブルにある「メモリタイプ」がマッチングするかどうかを測定する。マッチングする場合は、メモリ・タイミングから、対象のメモリタイプに対するリードおよびライトの段数を抽出する。そして目的のアクセス・タイミングを考慮したＣ＋＋言語を生成する。
【００３２】
【発明の効果】
以上のようにこの発明によれば、Ｃ＋＋言語によるハードウェア回路設計において必要となるクラス定義ファイルを回路動作記述アルゴリズムから作成するので、設計者の回路設計の負荷が減る効果がある。
【図面の簡単な説明】
【図１】  本発明の実施の形態１におけるハードウェア設計補助方法の動作フロー図である。
【図２】  実施の形態１におけるＣ＋＋言語によるアルゴリズム記述リストの例を示す図である。
【図３】  入出力ポート／内部レジスタ特定処理ステップ２とモジュールのクラス定義生成ステップ３の動作と、その結果得られるモジュールのクラス定義ファイルの例を示す図である。
【図４】  モジュール間の接続と、Ｃ＋＋言語で記述されたモジュール間の接続記述ファイルの例を示す図である。
【図５】  モジュール間接続情報検出ステップ８と上位階層クラス定義ファイル生成ステップ９の動作と、その結果得られる上位階層のクラス定義ファイルの例を示す図である。
【図６】  上位階層のクラス定義合成ステップ１１の動作と、その結果得られる合成クラス定義ファイルの例を示す図である。
【図７】  実施の形態１におけるモジュール追加の例と、それに基づくモジュールのクラス定義ファイルの変更を示す図である。
【図８】  実施の形態１におけるモジュール追加によるモジュール間接続記述ファイルの変更と、合成クラス定義ファイルの変更を示す図である。
【図９】  本発明の実施の形態２におけるモジュール回路動作記述ファイルの前処理の動作フロー図である。
【図１０】  実施の形態２におけるパイプラインを意識しない回路アルゴリズム記述ファイルの例を示す図である。
【図１１】  実施の形態２における周辺回路パイプライン追加ステップ１８の動作を説明するための図である。
【図１２】  実施の形態２における他のパイプラインを意識しない回路アルゴリズム記述ファイルの例を示す図である。
【図１３】  実施の形態２におけるＬＳＩ依存参照テーブル１６の例を示す図である。
【図１４】  本発明の実施の形態３におけるモジュール回路動作記述ファイルの前処理の動作フロー図である。
【図１５】  実施の形態３におけるパイプラインを意識しない回路アルゴリズム記述ファイルの例を示す図である。
【図１６】  実施の形態３におけるメモリ・タイミング参照テーブル３０の例を示す図である。
【符号の説明】
１，１ａ，１ｂ  Ｃ＋＋言語によるモジュール内の回路動作アルゴリズムの記述ファイル、２  入出力ポート／内部レジスタ特定処理ステップ（工程）、３  モジュールのクラス定義生成ステップ（工程）、８  モジュール間接続情報検出ステップ（工程）、９  上位階層クラス定義ファイル生成ステップ（工程）、１１  上位階層のクラス定義合成ステップ（工程）、１４  デバイスタイプの検出ステップ（工程）、１５ａ，１５ｂ  パイプライン段数検出ステップ（工程）、１６  ＬＳＩ依存参照テーブル、１７  モジュールへのパイプライン段数追加ステップ（工程）、１８  周辺回路へのパイプライン段数追加ステップ（工程）、３０  メモリ・タイミング参照テーブル。
【図１】
0003705772.tif 000002
【図２】
0003705772.tif 000003
【図３】
0003705772.tif 000004
【図４】
0003705772.tif 000005
【図５】
0003705772.tif 000006
【図６】
0003705772.tif 000007
【図７】
0003705772.tif 000008
【図８】
0003705772.tif 000009
【図９】
0003705772.tif 000010
【図１０】
0003705772.tif 000011
【図１１】
0003705772.tif 000012
【図１２】
0003705772.tif 000013
【図１３】
0003705772.tif 000014
【図１４】
0003705772.tif 000015
【図１５】
0003705772.tif 000016
【図１６】
0003705772.tif 000017