JP3705772B2 - Electronic circuit design support method in C ++ language - Google Patents
Electronic circuit design support method in C ++ language Download PDFInfo
- Publication number
- JP3705772B2 JP3705772B2 JP2001398975A JP2001398975A JP3705772B2 JP 3705772 B2 JP3705772 B2 JP 3705772B2 JP 2001398975 A JP2001398975 A JP 2001398975A JP 2001398975 A JP2001398975 A JP 2001398975A JP 3705772 B2 JP3705772 B2 JP 3705772B2
- Authority
- JP
- Japan
- Prior art keywords
- module
- class definition
- function
- language
- pipeline
- 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.)
- Expired - Fee Related
Links
Images
Description
【0001】
【発明の属する技術分野】
この発明は、電子回路設計においてH/W記述言語により電子回路の設計を補助する方法及び装置に関するものである。
【0002】
【従来の技術】
従来の電子回路の設計は、H/W設計用の専用記述言語やC/C++言語、または回路図を描くことによって行われてきた。
【0003】
次に動作について説明する。電子回路設計をC++言語によって行う場合、動作を表す記述と、C++言語固有のクラス定義記述を行う。これら記述を元に、電子回路の物理的情報に変換して電子回路を生成する。
また、C++言語によるH/W記述によって物理回路変換可能な同期回路の動作記述をする場合には、動作クロックを意識した記述を行うか、または抽象的な記述をして抽象的な動作記述を物理情報に変換可能なEDAツールにより物理回路を作成している。
【0004】
【発明が解決しようとする課題】
従来のC++言語によるH/W記述設計では、動作を示す記述ファイルと、クラス定義を記述したファイルの両方を作成しなくてはならない。動作記述をしている関数のクラス定義ファイルにはその関数の入出力ポート、および内部変数の情報を定義している。さらにそれらの関数を接続する上位階層の関数のクラス定義ファイルには、上位階層の関数における入出力ポートや内部変数のほかに、その階層(関数)で呼び出す関数とクラスの対応条件や関数関の接続信号名を宣言する必要がある。下位階層の関数において入出力ポートまたは内部変数の変更が生じた場合は、各関数のクラス定義ファイルの入出力ポートや内部変数の宣言を変更し、上位階層関数のクラス定義ファイルに対して、関数間の接続信号名の定義ファイルの内容を変更する必要があるため、設計変更による作業負担が大きいという課題がある。
【0005】
更に、同期回路を設計する場合の最終的なH/W記述設計においては、クロックを意識した記述をする必要があるが、一般にC++言語ではクロックを意識しない動作記述による設計を行う場合が多く、回路のアルゴリズムの評価を行った後にクロックを意識した記述に書き換えるという方法をとる。この方法では、回路のアルゴリズム変更によりクロックの段数の変更があった場合は、再度クロックを意識した記述の変更が必要になるという課題がある。
【0006】
また、乗算器などの設計を行う場合、C++言語によるH/W設計では、H/W性能を考慮した設計(パイプラインの段数を考慮した設計)を行わない場合が一般的であり、最終的にパイプラインの段数を意識して再設計を行う。この際に、パイプライン段数を1段増やすということは、H/Wにおいてはフリップ・フロップ関数を追加するということになる。フリップ・フロップ関数の追加が必用な関数が多い場合、または1つの関数においてパイプラインの追加段数が多い場合は、パイプライン段数の変更に伴うC++言語記述の変更量が大きく、パイプライン段数変更によるパフォーマンス調整などが即座に出来ない。また、パイプライン段数を追加した場合は、その周辺回路もタイミング調整を行なうために、フリップ・フロップを追加する必要があり、その記述変更ミスが生じるやすいという課題がある。
【0007】
この発明は上記課題を解決するためになされたもので、まずC++言語による電子回路記述において、クラス定義を記述する作業負荷を削減し、設計効率を高めるシステムを得る。
【0008】
【課題を解決するための手段】
この発明に係る高位言語による電子回路設計補助方法は、計算機で実行することにより電子回路の設計を補助する方法において、
C++言語により回路モジュールの機能を関数名として記述したリストに基いて、各モジュール毎に内部出力を特定して抽出するモジュールのクラス定義生成ステップと、
上記モジュール間の接続状況を記述した接続記述ファイルとに基いて、モジュール間接続点を上位階層内部出力として抽出し、かつソートして機能が共通する関数を引用しているモジュールを結合記述して、上位階層のクラス定義ファイルを得るモジュール接続情報検出・上位階層のクラス定義ファイル生成ステップと、
上記モジュールのクラス定義生成ステップで得られたモジュールのクラス定義ファイルを必要な数だけ抽出し、上記モジュール接続情報・上位階層のクラス定義ファイル生成ステップで得られた上位階層のクラス定義とを合成して、合成クラス定義ファイルを得るクラス定義合成ステップ、とを備え、計算機で上記各ステップを実行することを特徴とする。
【0009】
また更に、モジュール間の接続状況を記述した接続記述ファイルは、C++言語で記述し、モジュール接続情報検出・上位階層のクラス定義ファイル生成ステップは、接続記述ファイルに記載された共通の機能を持つメンバ関数に対して結合記述するようにした。
【0010】
また更に、C++言語により回路モジュールの機能を関数名として記述したリストからパイプラインの段数を検出するパイプライン段数検出ステップを備えて、
モジュールのクラス定義ファイルは、パイプラインの出力を内部出力として特定するようにした。
【0011】
また更に、C++言語により回路モジュールの機能を関数名として記述したリストからデバイスタイプを検出するデバイスタイプ検出ステップと、
LSI依存参照テーブルを設けて、このLSI依存参照テーブルを参照して検出したデバイスタイプのパイプライン段数を決めるパイプライン段数検出ステップ、とを備えて、
モジュールのクラス定義ファイルは、パイプラインの出力を内部出力として特定するようにした。
【0012】
また更に、決められたパイプライン段数を追加すると、この追加した特定モジュールの出力に着目して、この特定モジュールの出力先のモジュールに入力する他のモジュールに対しても、同一パイプライン段数を追加する周辺回路パイプライン追加ステップを備えた。
【0014】
【発明の実施の形態】
実施の形態1.
以下、本発明の高位言語によるハードウェア設計補助方法の実施の形態1を図面に基づき説明する。
図1は、高位言語、特にC++言語による回路アルゴリズムの記述から要素としての各モジュールのクラス定義ファイルを得て、回路を構成するモジュール間の接続の記述から上位階層のクラス定義ファイルを得て、更にこれらを結合して合成クラス定義ファイルを得る、システム設計の流れを示すフロー図である。なお、こうして得られた合成クラス定義ファイルと、モジュールの回路動作記述アルゴリズムにより、C++言語で記述して容易にハードウェア設計ができるが、その部分は本発明の範囲外となるので、ここでは記述しない。
【0015】
図1において、1は単位回路としてのモジュールが持つ機能、つまり関係式で記述した関数を用いて、C++言語によるアルゴリズムの形式で記述したリストである。2は、入出力ポート/内部レジスタ特定処理工程(ステップ)、3はモジュールのクラス定義生成工程で、これらにより4のモジュールのクラス定義ファイルが生成される。
5はC++言語によるモジュール間の接続記述ファイルで、6は回路図エディタ、7はそれにより得られるネットリスト、8はモジュール間接続情報を検出する関数接続情報検出工程で、いずれかの接続記述ファイル5またはネットリスト7から、モジュールの接続情報を検出し、特に内部出力を抽出する。9は上位階層関数のクラス定義ファイル生成工程で、複数のモジュールが接続されて上位階層の複合回路を形成する場合、上位階層に含まれるモジュール間で定義される内部出力(内部変数と記述する)を含んだ、この上位階層のクラス定義ファイルを生成する。
更に11は、上位階層のクラス定義ファイルと、この上位階層を形成する複数のモジュールのクラス定義ファイルを結合する、クラス定義合成工程であり、12は、その結果得られる合成クラス定義ファイルである。
【0016】
図2は、C++言語によるアルゴリズムの形式で記述したリストであり、図1におけるアルゴリズム記述ファイル1の例を示している。図において、モジュールの関数(機能)定義が、入力、出力、機能として記述されている。この図の例では、入力が「型名 入力名」(int in−a等)と表され、出力は「型名出力名」(int&out)と表されている。更に機能記述の中で、内部演算が記述(if等)されている。図3は、入出力ポート/内部レジスタ特定処理工程2とモジュールのクラス定義生成工程3とが行う動作フローと、その結果得られるモジュールのクラス定義ファイル4の例を示す図である。
図4は、複数のモジュールが接続されて上位階層の複合回路を形成する場合の、複合回路、つまり上位階層の接続例と、この接続をC++言語で記述した接続記述ファイル5の例を示す図である。図5は、モジュール間接続情報検出工程8と上位階層のクラス定義ファイル生成工程9とが行う動作フローと、その結果得られる上位階層クラス定義ファイル10の例を示す図である。図6は、クラス定義合成工程11が行う動作フローと、その結果得られ合成クラス定義ファイル12の例を示す図である。
【0017】
図1の各工程における動作を説明する。
入出力ポート/内部レジスタ特定処理工程2では、入力であるアルゴリズム記述ファイル1から入力としての変数を検索し、関数名と入力ポートと出力ポート、及び内部レジスタを特定する。即ち、関数の因数宣言で「型名 入力ポート名」と宣言している引数(変数)名を検索して入力ポートとする。同様に関数の引数宣言で「型名 出力ポート名」と宣言している引数名を検索して出力ポートとする。これは図3(a)のS21で示される。関数の中で使用している出力を検索して、特に関数表現(=表示)されていて、出力ポートと判別されたもの以外のものが、フリップ・フロップ等の、中間出力となる内部レジスタとされる。S22で示される動作である。
またモジュールのクラス定義生成工程3では、上記検索した入力ポート名、出力ポート名及び内部出力から、内部出力にはprivateとしてラベル付け、モジュールのメンバ関数宣言は、publicとラベルを付ける。S23でモジュールとの関係をvoid varとして記述して、モジュールのクラス定義ファイル4を生成する。図において、class funcはモジュールのクラス定義ファイルを表している。
【0018】
一方、各モジュール間の接続情報は、1つは、C++言語でモジュールの接続を記述した図4(b)に例が示される接続記述ファイル5から得られる。この例は、図4(a)で5つのハードウェア・モジュールで構成される上位階層の複合回路の接続関係を記述している。
図4(b)では、上位階層の入力の変数はaとbの2つがあり、それらから最終的に上位階層の出力が得られることを示している。詳細には、下位のモジュールの接続関係として、クラスF_A(例えば除算)に属する関数はfunc_A、それとは別にクラスF_B(例えば乗算)に属する関数はfunc_B0とfunc_B1があることを示している。それぞれの入力は、例えばfunc_Aではaとcとで、出力はdである。
この入力ファイルから、接続情報検出工程8は図5(a)のフローに基づいた動作を行う。即ちS31で、接続記述ファイル5中の関数の引数名で出力ポートを抽出する。次いでS32では、同じく出力ポート以外のものを抽出し、内部変数(出力)とする。上位階層のクラス定義ファイル生成工程9では、これらをprivateとラベル付け、S33におけるソート動作により、C++言語で記述された接続記述ファイル中で、コメントとして同一メンバ関数(図では、例えばclass=F_B)を引用しているモジュールを結合記述し、func_B0,func_B1等とする。S34では、アルゴリズム記述とクラス定義ファイルとを関係付けるvoid bar宣言をして、図5(b)の上位階層クラス定義ファイル10が得られる。
【0019】
モジュール間接続情報を得る、他の1つの方法は、回路図エディタ6によって生成されたネットリスト7から情報を得るものである。この場合も、クラスと関数の関係はネットリストで定められている属性に定義されているので、結局は図4(b)相当のリストが得られて、これから上記図5(a)相当の動作により、上位階層のクラス定義ファイル10が得られる。
クラス定義合成工程11は、図6(a)に示す複数のファイル結合を行う。即ち図6(b)のS41で、上位階層を表現したアルゴリズム記述ファイルから記載されているモジュールを抽出し、これらのモジュールのクラス定義ファイルをメモリに記憶する。更にS42では、上位階層のクラス定義ファイル10を抽出し、先にメモリに記憶しておいた複数のモジュールのクラス定義ファイルと合成して、図6(b)の合成クラス定義ファイル12を生成する。
【0020】
こうして完成したクラス定義ファイルであっても、例えばモジュール間に新しいモジュールを追加したり、新規に信号を追加したりして、設計変更を行うことがある。こうした場合に、当然のことながら設計変更に基づくクラス定義ファイルの再作成が必要になる。
設計変更を本実施の形態に及ぼすには、設計者はクラス定義ファイルと接続記述ファイルの両方を変更する。こうした場合も、本実施の形態の方法によれば、元の接続記述を変更すれば、それに基づいてクラス定義ファイルの変更が行われることを説明する。
図7(a)は、図4(a)の上位階層の接続状態を説明する図において、新らしいモジュール13を付加し、その出力をモジュールB0とモジュールB1に接続する設計変更を行った場合の、元となる接続変更図である。また図7(b)は設計変更前のモジュールB0とB1の定義ファイルを示す図で、図7(c)は変更後のクラス定義ファイルを示す図である。
【0021】
動作としては、先ずモジュール定義ファイル4の入力が1つ増えるので、cを付加する。図7(a)の接続図では、この追加された入力の信号名はzとなっているが、C++ク言語によるラス定義ファイル4では、順次入力信号を定めるので、zと命名しなくてよい。図8(a)は変更前の接続記述ファイル5を示し、これが図7(a)のモジュール追加により、図8(b)の記述となる。即ち新しいモジュールzが追加され、かつモジュールfunc_B0、func_B1の各入力にこの中間出力のzが接続される記述となる。
詳細記述は省略するが、これらの入力により、接続情報検出工程8、上位階層クラス定義ファイル生成工程9、及びクラス定義合成工程11が上記のように動作して、図8(c)の設計変更に対応する合成クラス定義ファイル12を生成する。
回路図エディタ6によって接続情報を変更する場合も、それに基づいてユーザが新しいネットリスト7を得て、設計変更前のネットリストと比較して、容易に新しいモジュールと接続関係の変更を抽出できる。即ち追加があれば記述を追加し、削除があれば対応するモジュールを削除したり、接続記述を減らす。
【0022】
実施の形態2.
図9は、本実施の形態におけるC++言語によるH/W設計方法の流れを示すフロー図である。これは実施の形態1における、モジュールのクラス定義ファイル1を作成する前段階の追加動作フローである。本実施の形態では、C++で記述したクロックを意識しない抽象度で記述されたモジュール関数記述に対して、挿入するパイプラインの段数を定義し、その情報によりパイプラインの調整を行ったC++記述を生成する方法について説明する。
【0023】
多ビットの乗算器などは、論理回路の内容またはハードウェアのデバイス性能によりパイプライン処理を何段か挿入しなくては、処理結果がタイミングの制約上間に合わない場合がある。そのため、C++言語によるH/W記述において、モジュール関数の回路動作を記述したプログラム・ファイル13の中で、そのモジュール関数の内部に存在する乗算器回路等に挿入するパイプラインの段数を定義する。図10に記述例を示す。この例では、「#pragma cycle(挿入パイプライン段数)」と宣言している。即ち図10の例では挿入パイプラインは2段である。
【0024】
検出工程15aにおいて、ユーザーがプログラム・ファイル13の中で宣言したパイプラインの段数を検索することにより任意の乗算器回路等のパイプラインの段数を特定する。そして定義されたパイプラインの段数の数だけ、乗算器回路等の関数の出力にフリップ・フロップのモジュール関数を付加する。追加する方法は、まず乗算器回路等の関数出力ポートに接続し、フリップ・フロップ関数の出力ポート名を変更する前の乗算器回路等の出力ポート名に変更する。これにより1段のフリップ・フロップ回路が挿入されたことになる。
2段、3段とフリップ・フロップ関数を追加する場合は、最終段のフリップ・フロップ関数の出力ポート名を変更し、追加するフリップモジュール関数の入力ポートを接続する。そして追加したフリップ・フロップ関数の出力ポートと記述変更前の乗算器回路等の出力ポートに変更する。
【0025】
さらに、フリップフロップを付加した乗算器回路等の周りに存在する回路に対して、フリップ・フロップのモジュール関数を対応して付加することにより、回路全体のタイミングエラーを回避する。例として、乗算器モジュールと周辺回路との関係を図11に示す。乗算器モジュール20aにフリップ・フロップ・モジュールを追加した場合、回路全体のタイミングを合わせるために周辺回路A20bの出力にフリップ・フロップ・モジュールを追加する。これにより回路B20cに入力される乗算器モジュールの20aの出力信号と、回路A20bモジュールの出力信号とのタイミング差はなくなる。回路Aの検索方法は、まず乗算器モジュールの出力ポートと接続する関数Bを検索する。次に関数Bの入力ポートにおいて乗算器モジュール以外から入力されるポート名を検索する。そしてそのポート名と同じ接続信号をもつ関数を検出することにより、フリップ・フロップ・モジュールを追加する周辺回路Aを決定する。周辺回路Aにフリップ・フロップ・モジュールを追加する方法は、周辺回路Aの出力ポート名を変更し、追加するフリップ・フロップ関数の入力ポートに接続する。そしてフリップ・フロップ関数の出力信号を周辺回路Aの最終出力ポート名に変更する。
こうしてフリップ・フロップ関数が追加されたC++言語によるモジュール回路動作アルゴリズム記述プログラム1bが生成される。この回路動作アルゴリズムの記述ファイル1bを用いての、モジュールのクラス定義ファイル作成工程は、図1のフローに従うので、記述を省略する。
【0026】
設計するLSIのデバイスタイプが決まっており、パイプラインの段数もそのデバイスのタイプによって設定するのであれば、LSI依存参照テーブル16にてユーザーがデバイスタイプ、関数名、パイプライン段数を定義する。そしてプログラム・ファイル13の中で「pragma」宣言等により、LSIのデバイス名をユーザーが宣言する。図12にプログラム・ファイル13の木術例を、図13にLSI依存参照テーブル16の記述例を示す。これは図9のLSI依存参照テーブル16の中にあり、デバイスと乗算ビット数に対応して、段数が経験的に決められている。プログラム・ファイル13の記述例では、デバイス名の宣言を「#pragma dev_type typeデバイス名」といている。LSI依存参照テーブル16では「(デバイス名)−(関数名)−(パイプライン段数)」を定義している。まずLSIのデバイスタイプをプログラム・ファイル13からデバイス検出器14により抽出する。次にプログラム・ファイル13で呼び出している乗算器回路等の関数名および抽出されたデバイス名をキーとして、目的の関数に挿入するパイプライン段数を決定する。
【0027】
実施の形態3.
図14は、本実施の形態におけるC++言語によるメモリを使用したH/W設計方法の流れを示すフロー図である。これも実施の形態2と同様に、実施の形態1における、モジュールのクラス定義ファイル1を作成する前段階の追加動作フローである。本実施の形態では、メモリのリードおよびライトのアクセス処理も乗算器等と同様にクロックを意識したC++言語記述1cを生成する。
【0028】
メモリのアクセス・タイミングを意識していない動作記述を行ったプログラム21の中に、メモリデータのリードおよびライトのアクセス・タイミングをユーザーが設定し、記述の中で「pragma」宣言等を使用して定義する。記述例を図15に示す。このアクセス・タイミング情報を抽出し、メモリモジュール関数の前後にフリップ・フロップ関数を追加することにより、メモリのリードおよびライトのアクセス・タイミングを考慮したC++言語記述1cを生成する。これ以降の動作については、図1の動作フローに従うので、詳細記述を省略する。
【0029】
図15の記述では、遅延段数は1である。メモリのリードに対するアクセスタイミングを1サイクル遅延させるためには、メモリのリードデータおよびリードアドレスに対して、1段フリップ・フロップを追加することにより実現できる。フリップ・フロップ関数の追加の方法は、プログラムファイル21から「pragma」宣言とうにより設定されたリード遅延段数を抽出する。図15の記述例では、「#pragma(関数名)−R−(パイプライン段数)」となっている。そしてメモリに入力するリードアドレスの信号名を変更し、フリップ・フロップ関数の入力ポートに接続する。フリップ・フロップ関数モジュールの出力ポートを、変更前のリードアドレスの信号名に変更する。複数段アクセス・タイミングを遅延させるには、複数のフリップ・フロップ回路を同時に追加する。
【0030】
メモリのライトに対するアクセス・タイミングを1サイクル遅延させるためには、メモリのライトデータおよびライトアドレスに対して、1段フリップ・フロップを追加することにより実現できる。フリップ・フロップ関数の追加の方法は、プログラムファイル21から「pragma」宣言等により設定されたリード遅延段数を抽出する。本記述例では、「#pragma(関数名)−W−(パイプライン段数)」となっている。そしてメモリから出力するデータ及びライトアドレスの信号名を変更し、フリップ・フロップ関数の入力ポートに接続する。フリップ・フロップ関数モジュールの出力ポートを、変更前のライトデータおよびライトアドレスの信号名に変更する、複数段アクセス・タイミングを遅延させるには、複数のフリップ・フロップ回路を同様に追加する。
【0031】
また、メモリのアクセス・タイミングとメモリタイプの関係をユーザーがメモリ・タイミング参照テーブル30にて定義することも可能である。メモリ・タイミング参照テーブル30には、メモリのアクセス・タイミング、リード遅延段数、ライト遅延段数が定義する。例を図16に示す。この例では「(メモリタイプ)−R/W−(段数)」と定義されている。mem_A、mem_Bがメモリタイプであり、R−1とあればリードタイミングに1段のフリップ・フロップが追加される。R−2とあれば2段のフリップ・フロップが追加される。W−1とあればライトタイミングに1段のフリップ・フロップが追加され、W−2とあれば2段のフリップ・フロップが追加される。プログラムファイル21にて使用している関数と、メモリ・タイミング参照テーブルにある「メモリタイプ」がマッチングするかどうかを測定する。マッチングする場合は、メモリ・タイミングから、対象のメモリタイプに対するリードおよびライトの段数を抽出する。そして目的のアクセス・タイミングを考慮したC++言語を生成する。
【0032】
【発明の効果】
以上のようにこの発明によれば、C++言語によるハードウェア回路設計において必要となるクラス定義ファイルを回路動作記述アルゴリズムから作成するので、設計者の回路設計の負荷が減る効果がある。
【図面の簡単な説明】
【図1】 本発明の実施の形態1におけるハードウェア設計補助方法の動作フロー図である。
【図2】 実施の形態1におけるC++言語によるアルゴリズム記述リストの例を示す図である。
【図3】 入出力ポート/内部レジスタ特定処理ステップ2とモジュールのクラス定義生成ステップ3の動作と、その結果得られるモジュールのクラス定義ファイルの例を示す図である。
【図4】 モジュール間の接続と、C++言語で記述されたモジュール間の接続記述ファイルの例を示す図である。
【図5】 モジュール間接続情報検出ステップ8と上位階層クラス定義ファイル生成ステップ9の動作と、その結果得られる上位階層のクラス定義ファイルの例を示す図である。
【図6】 上位階層のクラス定義合成ステップ11の動作と、その結果得られる合成クラス定義ファイルの例を示す図である。
【図7】 実施の形態1におけるモジュール追加の例と、それに基づくモジュールのクラス定義ファイルの変更を示す図である。
【図8】 実施の形態1におけるモジュール追加によるモジュール間接続記述ファイルの変更と、合成クラス定義ファイルの変更を示す図である。
【図9】 本発明の実施の形態2におけるモジュール回路動作記述ファイルの前処理の動作フロー図である。
【図10】 実施の形態2におけるパイプラインを意識しない回路アルゴリズム記述ファイルの例を示す図である。
【図11】 実施の形態2における周辺回路パイプライン追加ステップ18の動作を説明するための図である。
【図12】 実施の形態2における他のパイプラインを意識しない回路アルゴリズム記述ファイルの例を示す図である。
【図13】 実施の形態2におけるLSI依存参照テーブル16の例を示す図である。
【図14】 本発明の実施の形態3におけるモジュール回路動作記述ファイルの前処理の動作フロー図である。
【図15】 実施の形態3におけるパイプラインを意識しない回路アルゴリズム記述ファイルの例を示す図である。
【図16】 実施の形態3におけるメモリ・タイミング参照テーブル30の例を示す図である。
【符号の説明】
1,1a,1b C++言語によるモジュール内の回路動作アルゴリズムの記述ファイル、2 入出力ポート/内部レジスタ特定処理ステップ(工程)、3 モジュールのクラス定義生成ステップ(工程)、8 モジュール間接続情報検出ステップ(工程)、9 上位階層クラス定義ファイル生成ステップ(工程)、11 上位階層のクラス定義合成ステップ(工程)、14 デバイスタイプの検出ステップ(工程)、15a,15b パイプライン段数検出ステップ(工程)、16 LSI依存参照テーブル、17 モジュールへのパイプライン段数追加ステップ(工程)、18 周辺回路へのパイプライン段数追加ステップ(工程)、30 メモリ・タイミング参照テーブル。[0001]
BACKGROUND OF THE INVENTION
The present invention relates to a method and apparatus for assisting electronic circuit design using an H / W description language in electronic circuit design.
[0002]
[Prior art]
Conventional electronic circuit design has been performed by drawing a dedicated description language or C / C ++ language for H / W design, or a circuit diagram.
[0003]
Next, the operation will be described. When the electronic circuit design is performed in the C ++ language, a description representing the operation and a class definition description unique to the C ++ language are performed. Based on these descriptions, the electronic circuit is generated by converting into physical information of the electronic circuit.
In addition, when describing the behavior of a synchronous circuit that can be converted into a physical circuit by H / W description in C ++ language, a description that considers the operation clock is given, or an abstract description is given. A physical circuit is created by an EDA tool that can be converted into physical information.
[0004]
[Problems to be solved by the invention]
In the conventional H / W description design using the C ++ language, both a description file indicating the operation and a file describing the class definition must be created. In the class definition file of the function describing the operation, the input / output port of the function and the information of the internal variable are defined. Furthermore, in the class definition file of the upper layer function that connects these functions, in addition to the input / output ports and internal variables of the upper layer function, the correspondence condition between the function and class to be called in that layer (function) and the function relation You must declare the connection signal name. If the I / O port or internal variable changes in a lower-level function, change the I / O port or internal variable declaration in the class definition file for each function, and change the function to the class definition file for the higher-level function. Since it is necessary to change the contents of the definition file of the connection signal names between them, there is a problem that the work load due to the design change is large.
[0005]
Furthermore, in the final H / W description design when designing a synchronous circuit, it is necessary to make a description in consideration of the clock, but in general, in the C ++ language, there are many cases where the design is based on an operation description that is not aware of the clock. After evaluating the algorithm of the circuit, it is rewritten to a description that is conscious of the clock. In this method, when the number of clock stages is changed due to a change in the circuit algorithm, there is a problem that it is necessary to change the description in consideration of the clock again.
[0006]
In addition, when designing a multiplier or the like, in the H / W design using the C ++ language, the design considering the H / W performance (design considering the number of pipeline stages) is generally not performed. In addition, redesign is performed with the number of pipeline stages in mind. At this time, increasing the number of pipeline stages by one means adding a flip-flop function in H / W. When there are many functions that require the addition of flip-flop functions, or when there are many pipeline stages in one function, the amount of change in the C ++ language description accompanying the change in the number of pipeline stages is large. Performance adjustments cannot be made immediately. In addition, when the number of pipeline stages is added, it is necessary to add a flip-flop in order to adjust the timing of the peripheral circuit, and there is a problem that a description change error is likely to occur.
[0007]
The present invention has been made to solve the above-mentioned problems. First, in an electronic circuit description in C ++ language, a system for reducing the workload for describing class definitions and improving the design efficiency is obtained.
[0008]
[Means for Solving the Problems]
An electronic circuit design assistance method using a high-level language according to the present invention is as follows:In a method of assisting electronic circuit design by executing on a computer,
A module class definition generation step for identifying and extracting an internal output for each module based on a list in which the function of the circuit module is described as a function name in C ++ language;
Based on the connection description file that describes the connection status between the modules, extract the connection point between modules as internal output of the upper hierarchy, and combine and describe modules that sort and cite functions that share common functions. Module connection information detection / upper layer class definition file generation step to obtain upper layer class definition file,
Extract the required number of class definition files for the module obtained in the class definition generation step for the module above, and synthesize the module connection information and the class definition for the upper hierarchy obtained in the class definition file generation step for the upper hierarchy. And a class definition synthesis step for obtaining a synthesis class definition file.The above steps are executed by a computer..
[0009]
Furthermore, the connection description file describing the connection status between modules is described in C ++, and the module connection information detection / upper layer class definition file generation step is a member having a common function described in the connection description file. Added linkage to functions.
[0010]
Furthermore, a pipeline stage number detection step for detecting the number of pipeline stages from a list in which the function of the circuit module is described as a function name in C ++ language is provided.
The module class definition file now identifies pipeline output as internal output.
[0011]
Furthermore, a device type detecting step for detecting a device type from a list in which the function of the circuit module is described as a function name in C ++ language;
An LSI dependent reference table, and a pipeline stage number detecting step for determining the number of pipeline stages of the device type detected by referring to the LSI dependent reference table,
The module class definition file now identifies pipeline output as internal output.
[0012]
Furthermore, when the determined number of pipeline stages is added, paying attention to the output of the added specific module, the same number of pipeline stages is added to other modules that are input to the output module of the specific module. A peripheral circuit pipeline adding step is provided.
[0014]
DETAILED DESCRIPTION OF THE INVENTION
1 obtains a class definition file of each module as an element from a description of a circuit algorithm in a high-level language, particularly C ++, and obtains a class definition file of an upper layer from a description of connections between modules constituting the circuit, Furthermore, it is a flowchart showing a system design flow in which these are combined to obtain a composite class definition file. It should be noted that the hardware design can be easily performed by writing in the C ++ language by using the synthetic class definition file obtained in this way and the module circuit operation description algorithm, but this part is out of the scope of the present invention, so it is described here. do not do.
[0015]
In FIG. 1,
5 is a connection description file between modules in C ++ language, 6 is a circuit diagram editor, 7 is a netlist obtained thereby, 8 is a function connection information detection step for detecting connection information between modules, and any connection description file 5 or the netlist 7 detects module connection information, and in particular extracts the internal output. 9 is a class definition file generation process for an upper layer function. When a plurality of modules are connected to form an upper layer composite circuit, an internal output defined between the modules included in the upper layer (described as an internal variable) A class definition file of this higher hierarchy including is generated.
Further, 11 is a class definition synthesis step for combining a class definition file of an upper layer and a class definition file of a plurality of modules forming the upper layer, and 12 is a synthesized class definition file obtained as a result.
[0016]
FIG. 2 is a list described in the form of an algorithm in the C ++ language, and shows an example of the
FIG. 4 is a diagram showing a composite circuit, that is, a connection example of the upper layer when a plurality of modules are connected to form an upper layer composite circuit, and an example of a connection description file 5 in which this connection is described in the C ++ language. It is. FIG. 5 is a diagram showing an operation flow performed by the inter-module connection information detection step 8 and the upper layer class definition file generation step 9, and an example of the upper layer
[0017]
The operation in each step of FIG. 1 will be described.
In the input / output port / internal
In the module class
[0018]
On the other hand, one piece of connection information between the modules is obtained from the connection description file 5 shown as an example in FIG. 4B in which module connections are described in C ++ language. This example describes the connection relationship of the upper layer composite circuit composed of five hardware modules in FIG.
FIG. 4B shows that there are two upper-level input variables, a and b, from which an upper-layer output can be finally obtained. More specifically, as a connection relationship between lower modules, a function belonging to class F_A (for example, division) has func_A, and a function belonging to class F_B (for example, multiplication) has func_B0 and func_B1. Each input is, for example, a and c in func_A, and the output is d.
From this input file, the connection information detection step 8 performs an operation based on the flow of FIG. That is, in S31, the output port is extracted by the argument name of the function in the connection description file 5. Next, in S32, those other than the output port are extracted and set as internal variables (output). In the class definition file generation step 9 of the upper hierarchy, these are labeled as private, and the same member function (for example, class = F_B in the figure) is used as a comment in the connection description file described in the C ++ language by the sort operation in S33. Are combined and described as func_B0, func_B1, and the like. In S34, a void bar declaration that associates the algorithm description with the class definition file is made, and the upper layer
[0019]
Another method for obtaining inter-module connection information is to obtain information from the netlist 7 generated by the
In the class
[0020]
Even if the class definition file is completed in this way, for example, a new module may be added between modules or a new signal may be added to change the design. In such a case, as a matter of course, it is necessary to recreate the class definition file based on the design change.
To apply a design change to this embodiment, the designer changes both the class definition file and the connection description file. Even in such a case, according to the method of the present embodiment, it will be explained that if the original connection description is changed, the class definition file is changed based on the change.
FIG. 7A is a diagram for explaining the connection state of the upper hierarchy in FIG. 4A. In the case where a
[0021]
As an operation, first, the module definition file 4 is incremented by one, so c is added. In the connection diagram of FIG. 7A, the signal name of the added input is z. However, in the lath definition file 4 in C ++, the input signal is determined sequentially, so it is not necessary to name z. . FIG. 8A shows the connection description file 5 before the change, which becomes the description of FIG. 8B by adding the module of FIG. 7A. That is, a new module z is added, and the intermediate output z is connected to each input of the modules func_B0 and func_B1.
Although the detailed description is omitted, the connection information detection step 8, the upper layer class definition file generation step 9, and the class
Even when the connection information is changed by the
[0022]
FIG. 9 is a flowchart showing the flow of the H / W design method using the C ++ language in the present embodiment. This is an additional operation flow before the creation of the module
[0023]
For a multi-bit multiplier or the like, the processing result may not be in time due to timing constraints unless some stages of pipeline processing are inserted depending on the contents of the logic circuit or the device performance of the hardware. Therefore, in the H / W description in the C ++ language, the number of pipeline stages to be inserted into a multiplier circuit or the like existing inside the module function is defined in the
[0024]
In the
When adding a flip-flop function with two or three stages, change the output port name of the flip-flop function at the final stage and connect the input port of the flip module function to be added. Then, the output port of the added flip-flop function is changed to the output port of the multiplier circuit before the description change.
[0025]
Further, a flip-flop module function is added correspondingly to a circuit existing around a multiplier circuit to which a flip-flop is added, thereby avoiding a timing error of the entire circuit. As an example, the relationship between the multiplier module and peripheral circuits is shown in FIG. When a flip-flop module is added to the
Thus, the module circuit operation algorithm description program 1b in the C ++ language to which the flip-flop function is added is generated. Since the module class definition file creation process using the circuit operation algorithm description file 1b follows the flow of FIG. 1, description thereof is omitted.
[0026]
If the LSI device type to be designed is determined and the number of pipeline stages is set according to the device type, the user defines the device type, function name, and pipeline stage number in the LSI dependent reference table 16. Then, the user declares the LSI device name in the
[0027]
FIG. 14 is a flowchart showing the flow of the H / W design method using the memory in the C ++ language in the present embodiment. Similarly to the second embodiment, this is an additional operation flow in the first stage of creating the module
[0028]
The user sets the access timing for reading and writing memory data in the
[0029]
In the description of FIG. 15, the number of delay stages is 1. In order to delay the access timing for the memory read by one cycle, it can be realized by adding a one-stage flip-flop to the read data and the read address of the memory. As a method for adding the flip-flop function, the number of read delay stages set by the “pragma” declaration is extracted from the
[0030]
The access timing for memory write can be delayed by one cycle by adding a one-stage flip-flop to the memory write data and write address. As a method for adding a flip-flop function, the number of read delay stages set by a “pragma” declaration or the like is extracted from the
[0031]
In addition, the relationship between the memory access timing and the memory type can be defined by the user in the memory timing reference table 30. The memory timing reference table 30 defines memory access timing, the number of read delay stages, and the number of write delay stages. An example is shown in FIG. In this example, “(memory type) −R / W− (number of stages)” is defined. If mem_A and mem_B are memory types and R-1 is set, one stage of flip-flop is added to the read timing. If it is R-2, a two-stage flip-flop is added. If it is W-1, one stage flip-flop is added to the write timing, and if it is W-2, two stages flip-flop is added. It is measured whether the function used in the
[0032]
【The invention's effect】
As described above, according to the present invention, the class definition file necessary for hardware circuit design using the C ++ language is created from the circuit operation description algorithm, so that the designer's circuit design load is reduced.
[Brief description of the drawings]
FIG. 1 is an operation flowchart of a hardware design assistance method according to
FIG. 2 is a diagram showing an example of an algorithm description list in C ++ language according to the first embodiment.
FIG. 3 is a diagram illustrating an operation of an input / output port / internal
FIG. 4 is a diagram illustrating an example of connection between modules and a connection description file between modules described in a C ++ language.
FIG. 5 is a diagram illustrating an operation of an inter-module connection information detection step 8 and an upper layer class definition file generation step 9 and an example of an upper layer class definition file obtained as a result.
FIG. 6 is a diagram illustrating an operation of an upper layer class
7 is a diagram showing an example of adding a module in the first embodiment and a change of a class definition file of the module based on the example. FIG.
FIG. 8 is a diagram showing a change in an inter-module connection description file and a change in a synthesis class definition file by adding a module in the first embodiment.
FIG. 9 is an operation flowchart of pre-processing of a module circuit operation description file according to the second embodiment of the present invention.
FIG. 10 is a diagram illustrating an example of a circuit algorithm description file that is not conscious of pipelines in the second embodiment.
FIG. 11 is a diagram for explaining the operation of a peripheral circuit
12 is a diagram illustrating an example of a circuit algorithm description file that is not conscious of other pipelines in
FIG. 13 is a diagram showing an example of an LSI dependence reference table 16 in the second embodiment.
FIG. 14 is an operation flowchart of preprocessing of a module circuit operation description file according to the third embodiment of the present invention.
FIG. 15 is a diagram illustrating an example of a circuit algorithm description file that is not conscious of pipelines in the third embodiment.
FIG. 16 illustrates an example of a memory timing reference table 30 according to the third embodiment.
[Explanation of symbols]
1, 1a, 1b Description file of circuit operation algorithm in module in C ++ language, 2 Input / output port / internal register specifying processing step (process), 3 Module class definition generating step (process), 8 Inter-module connection information detecting step (Process), 9 Upper layer class definition file generation step (Process), 11 Upper layer class definition synthesis step (Process), 14 Device type detection step (Process), 15a, 15b Pipeline stage number detection step (Process), 16 LSI dependent reference table, 17 pipeline stage number addition step (process) to module, 18 pipeline stage number addition step (process) to peripheral circuit, 30 memory timing reference table.
Claims (5)
C++言語により回路モジュールの機能を関数名として記述したリストに基いて、各モジュール毎に内部出力を特定して抽出するモジュールのクラス定義生成ステップと、
上記モジュール間の接続状況を記述した接続記述ファイルとに基いて、モジュール間接続点を上位階層内部出力として抽出し、かつソートして機能が共通する関数を引用しているモジュールを結合記述して、上位階層のクラス定義ファイルを得るモジュール接続情報検出・上位階層のクラス定義ファイル生成ステップと、
上記モジュールのクラス定義生成ステップで得られたモジュールのクラス定義ファイルを必要な数だけ抽出し、上記モジュール接続情報・上位階層のクラス定義ファイル生成ステップで得られた上位階層のクラス定義とを合成して、合成クラス定義ファイルを得るクラス定義合成ステップ、とを備え、計算機で上記各ステップを実行することを特徴とするC++言語による電子回路設計補助方法。 In a method of assisting electronic circuit design by executing on a computer,
A module class definition generation step for identifying and extracting an internal output for each module based on a list in which the function of the circuit module is described as a function name in C ++ language;
Based on the connection description file that describes the connection status between the modules, extract the connection point between modules as internal output of the upper hierarchy, and combine and describe modules that sort and cite functions that share common functions. Module connection information detection / upper layer class definition file generation step to obtain upper layer class definition file,
Extract the required number of class definition files for the module obtained in the class definition generation step for the module above, and synthesize the module connection information and the class definition for the upper hierarchy obtained in the class definition file generation step for the upper hierarchy. And a class definition synthesis step for obtaining a synthesis class definition file, and executing the above steps by a computer.
モジュールのクラス定義ファイルは、上記パイプラインの出力を内部出力として特定するようにしたことを特徴とする請求項1記載のC++言語による電子回路設計補助方法。 If the list describing the function of the circuit module as a function name by C ++ language pipeline connections are described detects the number of stages of the pipeline from the list describing the function name function of the circuit modules by the C ++ language A pipeline stage number detection step is provided.
2. The electronic circuit design assistance method according to claim 1, wherein the module class definition file specifies the output of the pipeline as an internal output.
LSI依存参照テーブルを設けて、該LSI依存参照テーブルを参照して上記検出したデバイスタイプの上記パイプラインの段数を決めるパイプライン段数検出ステップ、とを備えて、
モジュールのクラス定義ファイルは、上記パイプラインの出力を内部出力として特定するようにしたことを特徴とする請求項1記載のC++言語による電子回路設計補助方法。 When pipeline connection is described in a list in which the function of the circuit module is described as a function name in the C ++ language, device type detection for detecting the device type from the list in which the function of the circuit module is described as a function name in the C ++ language Steps,
Provided LSI dependent reference table, the pipeline stage number detection step by referring to the LSI dependent reference table determines the number of stages of the pipeline device type described above detected, includes a city,
2. The electronic circuit design assistance method according to claim 1, wherein the module class definition file specifies the output of the pipeline as an internal output.
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001398975A JP3705772B2 (en) | 2001-12-28 | 2001-12-28 | Electronic circuit design support method in C ++ language |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001398975A JP3705772B2 (en) | 2001-12-28 | 2001-12-28 | Electronic circuit design support method in C ++ language |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2003196332A JP2003196332A (en) | 2003-07-11 |
JP3705772B2 true JP3705772B2 (en) | 2005-10-12 |
Family
ID=27604185
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2001398975A Expired - Fee Related JP3705772B2 (en) | 2001-12-28 | 2001-12-28 | Electronic circuit design support method in C ++ language |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3705772B2 (en) |
-
2001
- 2001-12-28 JP JP2001398975A patent/JP3705772B2/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2003196332A (en) | 2003-07-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6530073B2 (en) | RTL annotation tool for layout induced netlist changes | |
US7406669B2 (en) | Timing constraints methodology for enabling clock reconvergence pessimism removal in extracted timing models | |
US20010034876A1 (en) | System for converting hardware designs in high-level programming languages to hardware implementations | |
WO2016026328A1 (en) | Information processing method and device and computer storage medium | |
CN113255258B (en) | Logic synthesis method and device, electronic equipment and storage medium | |
WO2018220974A1 (en) | Systemc model generation method and systemc model generation program | |
US7124070B2 (en) | Method of and apparatus for, and program for verifying equivalence between behavioral description and register transfer level description | |
Ataei et al. | An open-source eda flow for asynchronous logic | |
JP2004038617A (en) | Logic verification system and method, logic cone extraction device and method, and logic verification and logic cone extraction program | |
JP2008065382A (en) | Power consumption calculating method for lsi and its calculation program | |
US7472371B2 (en) | Description style conversion method, program, and system of logic circuit | |
US20090222778A1 (en) | Property generating apparatus, property generating method and program | |
US7000206B2 (en) | Timing path detailer | |
US6701510B2 (en) | Computer readable medium with definition of interface recorded thereon, verification method for feasibility to connect given circuit and method of generating signal pattern | |
Drechsler et al. | Gatecomp: Equivalence checking of digital circuits in an industrial environment | |
JP2022536648A (en) | Behavioral design recovery from flattened netlist | |
JP3705772B2 (en) | Electronic circuit design support method in C ++ language | |
US12073159B2 (en) | Computing device and method for detecting clock domain crossing violation in design of memory device | |
US6877140B1 (en) | Method and system for generating a schematic representing bus structures | |
CN116745770A (en) | Method and device for synthesizing digital circuit | |
US20040199889A1 (en) | Modeling integrated circuits | |
US6668359B1 (en) | Verilog to vital translator | |
KR100412964B1 (en) | Method and apparatus for preparing a logic simulation model and recording medium for storing the same | |
JP2845154B2 (en) | How to create a logic simulation model | |
JP2000137745A (en) | System and method for inputting timing specification of logic circuit |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
RD04 | Notification of resignation of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7424 Effective date: 20040518 |
|
RD04 | Notification of resignation of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7424 Effective date: 20041019 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20050301 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20050401 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20050726 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20050726 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
LAPS | Cancellation because of no payment of annual fees |