(57)【特許請求の範囲】
【請求項１】
コンピュータにより実行される、算術演算子を細分化した演算記述を作成する第１工程と、前記第１工程で作成した細分化演算記述と等価な記述である演算動作細分化記述部に算術演算子のオーバロード宣言部を追記することでオーバロード用ライブラリを作成する第２工程と、動作記述と演算記述に変更のない等価な記述である演算記述部にオーバロード用ライブラリインクルード部を追記することで動作記述インプリメントファイルを作成する第３工程と、前記第３工程で作成した動作記述インプリメントファイル内の算術演算子を前記第２工程で作成したオーバロード用ライブラリの演算動作細分化記述部に置き換えて高位合成を行いレジスタ転送レベル記述を作成する第４工程と、前記第４工程で作成したレジスタ転送レベル記述を使用して論理合成を行いゲートレベル記述を作成する第５工程とを備えたことを特徴とする集積回路設計方法。
【請求項２】
前記動作記述とは別の動作記述に対して前記第３工程〜第５工程を繰り返し行うことを特徴とする請求項１記載の集積回路設計方法。
【請求項３】
コンピュータに、算術演算子を細分化した演算記述を作成する第１手順、前記第１手順で作成した細分化演算記述と等価な記述である演算動作細分化記述部に算術演算子のオーバロード宣言部を追記することでオーバロード用ライブラリを作成する第２手順、動作記述と演算記述に変更のない等価な記述である演算記述部にオーバロード用ライブラリインクルード部を追記することで動作記述インプリメントファイルを作成する第３手順、前記第３手順で作成した動作記述インプリメントファイル内の算術演算子を前記第２手順で作成したオーバロード用ライブラリの演算動作細分化記述部に置き換えて高位合成を行いレジスタ転送レベル記述を作成する第４手順、前記第４手順で作成したレジスタ転送レベル記述を使用して論理合成を行いゲートレベル記述を作成する第５手順、を実行させるためのプログラム。
【請求項４】
前記動作記述とは別の動作記述に対して前記第３手順〜第５手順を繰り返し実行させるための請求項３記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、高位合成を利用して動作記述からレジスタ転送レベル記述を自動生成する集積回路設計方法及びプログラムに関するものである。
【背景技術】
【０００２】
近年、大規模なＬＳＩを短期間で設計するために有効な技術として、高位合成技術が知られている。高位合成技術とは、ハードウェアの構造に関する情報が含まれず、処理のアルゴリズムのみが記述された動作記述から、レジスタ転送レベル記述であるハードウェアの回路を自動生成する技術である。
【０００３】
高位合成技術では、動作記述中の演算記述をハードウェアの演算器に割り付けることが必要であり、この演算器アロケーション設計方法に関する技術が記載された文献としては下記特許文献１が挙げられ、この特許文献１には、複数の演算をある一つの演算器に割り付ける際に、指定した期間よりも長いフォールスパスが発生するか否かを判定し、フォールスパスが存在する場合は、それらの複数の演算を異なる演算器にそれぞれ割り付けることで、ＬＳＩ上で実際には動作しないパスであるフォールスパスに対して、設計検証ツールで発生する擬似エラーや、論理合成ツールで発生する過剰な最適化を抑止する技術が記載されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００３−０７６７２８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
前記特許文献１に記載された技術は、複数の演算の演算期間が指定した期間よりも長いパスに対しては、それらの複数の演算を異なる演算器にそれぞれ割り付けることでディレイ違反を解消することができる。しかし、単一の演算の演算期間が指定した期間よりも長く、かつ、このパスをフォールスパスにできない場合、すなわち、このパスがＬＳＩ上で実際に動作するパスである場合は、演算器を割り付けることができない、もしくは、演算器を割り付けることができたとしても、この演算器を経由するパスはディレイ違反パスとなり正常動作を保つＬＳＩを生成することができない。そのため、動作記述中の該当する演算記述を、より演算期間の短い演算器を複数回使用して演算する記述、すなわち、細分化した演算記述に変更する必要が生じてしまう。
【０００６】
これを説明するために、まず演算期間と演算器の割り付け方法について説明する。図３（ａ）に示す演算記述３００１を演算するためには、Ａ＋Ｂの演算３００２を図３（ｂ）に示す加算器３００４に、（Ａ＋Ｂの結果）−Ｃの演算３００３を減算器３００５に割り付ける。このとき、加算器３００４の演算期間３００６は、図３（ｃ）に示すように、指定された期間３００７より短いため割り付けが可能であり、かつ、この加算器３００４を経由するパスはディレイ違反パスとならずＬＳＩを生成する上で問題が生じない。同様に、（Ａ＋Ｂの結果）−Ｃの演算３００３を減算器３００５に割り付ける場合も割り付けが可能である。しかし、図４（ａ）に示す演算記述４００１のＡ／Ｂの演算４００２を除算器４００３に割り付ける場合は、図４（ｂ）に示す除算器４００３の演算期間４００４は、図４（ｃ）に示すように、指定された期間４００５より長いため割り付けができない、もしくは、この除算器４００３を経由するパスはディレイ違反パスとなりＬＳＩを生成する上で問題が生じてしまう。そのため、Ａ／Ｂの演算４００２を図５（ａ）に示す細分化した演算記述５００１に変更し、演算記述４００１は演算記述５００２に書き換える。図５（ａ）においてｄｉｖｉｄｅ５００３とは、細分化した演算記述５００１を関数化したものを示す。細分化した演算記述５００１は、除算器４００３は使用せずに図５（ｂ）に示す減算器５００４を複数回使用した演算に書き換えられており、減算器５００４の演算期間５００５は、図５（ｃ）に示すように、指定された期間５００６よりも短いため、割り付けが可能であり、かつ、この減算器５００４を経由するパスはディレイ違反パスとならずＬＳＩを生成する上での問題発生を防ぐことができる。なお、Ａ／Ｂの演算４００２を細分化した演算記述５００１に書き換える方法を詳細に記した文献としては、例えば『Ｃｏｍｐｕｔｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ：Ａ  Ｑｕａｎｔｉｔａｔｉｖｅ  Ａｐｐｒｏａｃｈ』Ｊｏｈｎ  Ｌ．Ｈｅｎｎｅｓｓｙ，Ｄａｖｉｄ  Ａ．Ｐａｔｔｅｒｓｏｎ等が挙げられる。
【０００７】
次に、上記説明した演算器の割り付け方法および演算記述の変更を、すなわち、従来の高位合成を利用したＬＳＩ設計の流れを図１のフローチャートを用いて説明する。初めに動作記述１００１を高位合成１００２し、レジスタ転送レベル記述１００３を生成する。そして、レジスタ転送レベル記述１００３を論理合成１００４し、ゲートレベル記述１００５を生成する。そして、ゲートレベル記述１００５を使用して演算器の演算期間チェック１００６を行い、演算器の演算期間が指定された期間より短い場合はここで処理終了となるが、長い場合は、演算記述の細分化１００７を行い細分化演算記述１００８を作成し、動作記述１００１と細分化演算記述１００８を使用して演算記述部の変更１００９を行い動作記述変更版１０１０を作成する。動作記述変更版１０１０は、高位合成１００２の元となるファイルである動作記述１００１を書き換えたものであるため、再度、高位合成１００２、論理合成１００４をやり直す必要がある。
【０００８】
以上説明したとおり、従来における高位合成を利用したＬＳＩの設計方法では、演算記述４００１中のＡ／Ｂの演算４００２に示すような単一の演算期間が、指定した期間よりも長い場合は、細分化した演算記述に変更する必要が生じ、この記述変更は、指定した期間よりも長い演算期間を有する演算記述全てを変更する必要がある。そのため、演算記述を修正することで修正箇所に論理不良を作り込んでしまう危険性があるという問題点および、演算記述を修正した後で、高位合成を再度実行する必要があるため、設計の後戻りが生じるという問題点があった。
【０００９】
本発明の目的は、ある演算記述における単一の演算期間が、指定した期間よりも長い場合があっても、動作記述中の演算記述の変更を不要とする集積回路設計方法及びプログラムを提供することである。
【課題を解決するための手段】
【００１０】
前記目的を達成するために、本発明は、以下の集積回路設計方法及びプログラムを提供する。
（１）演算子を細分化した演算記述を作成する第１工程と、前記第１工程で作成した細分化演算記述を使用して演算子のオーバロード用ライブラリを作成する第２工程と、動作記述を使用してオーバロード用ライブラリインクルード済み動作記述を作成する第３工程と、前記第３工程で作成したオーバロード用ライブラリインクルード済み動作記述と前記第２工程で作成したオーバロード用ライブラリとを使用して高位合成を行いレジスタ転送レベル記述を作成する第４工程と、前記第４工程で作成したレジスタ転送レベル記述を使用して論理合成を行いゲートレベル記述を作成する第５工程とを備えたことを特徴とする集積回路設計方法。
（２）前記動作記述とは別の動作記述に対して前記第３工程〜第５工程を繰り返し行うことを特徴とする上記（１）記載の集積回路設計方法。
（３）コンピュータに、演算子を細分化した演算記述を作成する第１手順、前記第１手順で作成した細分化演算記述を使用して演算子のオーバロード用ライブラリを作成する第２手順、動作記述を使用してオーバロード用ライブラリインクルード済み動作記述を作成する第３手順、前記第３手順で作成したオーバロード用ライブラリインクルード済み動作記述と前記第２手順で作成したオーバロード用ライブラリとを使用して高位合成を行いレジスタ転送レベル記述を作成する第４手順、前記第４手順で作成したレジスタ転送レベル記述を使用して論理合成を行いゲートレベル記述を作成する第５手順、を実行させるためのプログラム。
（４）前記動作記述とは別の動作記述に対して前記第３手順〜第５手順を繰り返し実行させるための上記（３）記載のプログラム。
【発明の効果】
【００１１】
本発明によれば、ある演算記述における単一の演算期間が、指定した期間よりも長い場合があっても、動作記述中の演算記述の変更を不要とすることができる。これにより、演算記述の変更による論理不良の混入を防ぐことができる。また、高位合成の再実行による設計の後戻りを防ぐことができ、集積回路の設計工数と設計期間を従来に比べて短縮することができる。さらに、複数の集積回路を設計する際には、設計工程の一部は共通して利用可能なので残りの工程を実行するだけで設計することができる。
【図面の簡単な説明】
【００１２】
【図１】従来方式による高位合成を利用したＬＳＩ設計の一例を示すフローチャートである。
【図２】本発明に係る集積回路設計方法の一実施形態を示すフローチャートである。
【図３】（ａ）〜（ｃ）は演算器の割り付け方法の一例を示す構成図である。
【図４】（ａ）〜（ｃ）は演算器の割り付け方法の一例を示す構成図である。
【図５】（ａ）〜（ｃ）は演算器の割り付け方法の一例を示す構成図である。
【図６】演算子のオーバロード用ライブラリ記述の一例を示す図である。
【図７】演算子のオーバロード用ライブラリをインクルードした動作記述の一例を示す図である。
【図８】（ａ）、（ｂ）はレジスタ転送レベル記述の一例を示す図である。
【図９】（ａ）、（ｂ）はゲートレベル記述の一例を示す図である。
【発明を実施するための形態】
【００１３】
以下、本発明の好適な実施の形態を図面を参照しながら詳細に説明する。図２は、本発明に係る集積回路設計方法の一実施形態を示すフローチャートである。本実施形態では集積回路としてＬＳＩを例にとって説明する。また、図６は、演算子のオーバロード方法の一例を示す図、図７はオーバロード用ライブラリインクルード済み動作記述の一例を示す図である。
【００１４】
本実施形態による高位合成を利用したＬＳＩの設計方法は、例えば図２に示す如く、事前処理２００１とゲートレベル記述作成処理２００６の２つの処理で構成されている。なお、本実施形態は一例として処理を区分けしたもので、本発明はこれに限定されるものではない。始めに、事前処理２００１における細分化演算記述作成２００２では、動作記述の記述に適したプログラム言語としてＣ＋＋もしくはＳｙｓｔｅｍＣを使用して、細分化演算記述２００３を作成する。細分化演算記述２００３とは、前述した細分化した演算記述５００１と同等な記述を示しており、すなわち、加算演算子（＋）、減算演算子（−）、乗算演算子（＊）、除算演算子（／）等の算術演算子を細分化した演算記述のことである。次に、細分化演算記述２００３を使用してオーバロード用ライブラリ作成２００４を行い、オーバロード用ライブラリ２００５を作成し、事前処理２００１は処理完了となる。ここで、図６を用いてオーバロード用ライブラリ作成２００４について説明する。
【００１５】
オーバロード用ライブラリ６００１は、演算子のオーバロード宣言部６００４と演算動作細分化記述部６００３で構成される。演算動作細分化記述部６００３は、細分化演算記述２００３と等価な記述であり、すなわち、オーバロード用ライブラリ６００１は、細分化演算記述２００３に演算子のオーバロード宣言部６００４を追記することで作成できる。
【００１６】
次に、ゲートレベル記述作成処理２００６におけるオーバロード用ライブラリインクルード２００９では、動作記述の記述に適したプログラム言語としてＣ＋＋もしくはＳｙｓｔｅｍＣを使用して記述された動作記述２００７を使用して、オーバロード用ライブラリインクルード済み動作記述２０１０を作成する。ここで、図７を用いてオーバロード用ライブラリのインクルードについて、図６と図７を用いて演算子のオーバロード動作について説明する。
【００１７】
動作記述インプリメントファイル７００１は、オーバロード用ライブラリインクルード部７００２と、演算記述部７００４で構成される。演算記述部７００４は、動作記述２００７と等価な記述であり、すなわち、動作記述インプリメントファイル７００１は、動作記述２００７にオーバロード用ライブラリインクルード部７００２を追記することで作成できる。これは、図５で説明した演算記述５００２は、Ａ／Ｂの演算４００２をｄｉｖｉｄｅ５００３に書き換えて作成したことに対し、ここでは、演算記述部７００４は一切変更しておらず、演算記述部７００４にオーバロード用ライブラリインクルード部７００２を追記しただけであるため、動作記述中の演算記述の変更を不要とし、同時に、演算記述の変更による論理不良の混入を防ぐことができることを意味している。
【００１８】
演算子のオーバロード動作は、Ｃ＋＋もしくはＳｙｓｔｅｍＣのプログラム言語仕様に予め用意されている機能である。まず、オーバロード用ライブラリ６００１は、演算子のオーバロード宣言部６００４に記述されている除算演算子６００２を、演算動作細分化記述部６００３に置き換えていることを意味する。そして、動作記述インプリメントファイル７００１は、オーバロード用ライブラリ６００１をオーバロード用ライブラリインクルード部７００２によってインクルードしているため、動作記述インプリメントファイル７００１を実行した場合、除算演算子７００３は、演算動作細分化記述部６００３に置き換えられて実行される。以上説明したように、演算子のオーバロード動作とは、演算子を、動作記述をコーディングするユーザが演算子に対応する動作記述を任意に指定できる機能である。なお、演算子のオーバロード動作および演算子のオーバロード宣言部６００４の記述方法を詳細に記した文献としては、例えば『ＧＮＵ  Ｃ＋＋プログラミング』トム・スワン等が挙げられる。
【００１９】
次に、高位合成２０１１では、オーバロード用ライブラリインクルード済み動作記述２０１０と、オーバロード用ライブラリ２００５を使用して、レジスタ転送レベル記述２０１２を作成する。その一例を図８（ａ）、（ｂ）に示す。図８（ａ）のレジスタ転送レベル記述８００１は、例えば図８（ｂ）のフリップフロップ８００２、加算器８００３および減算器８００４を含む回路図で表わされる。そして、論理合成２０１３では、レジスタ転送レベル記述２０１２を使用して、ゲートレベル記述２０１４を作成する。その一例を図９（ａ）、（ｂ）に示す。図９（ａ）のゲートレベル記述９００１は、例えば図９（ｂ）のフリップフロップ９００２およびアンドゲートやオアゲート等からなるゲート回路９００３を含む回路図で表わされる。以上でゲートレベル記述作成処理２００６が処理完了となる。なお、このゲートレベル記述２０１４を、ＬＳＩチップ生成ベンダに送付することでＬＳＩを生成することができる。複数のＬＳＩを設計する際には、上述の事前処理は一度だけ行えばよく、各ＬＳＩについてそれぞれゲートレベル記述作成処理を行うだけで複数のＬＳＩを設計することが可能である。
【００２０】
以上の各工程の手順は、コンピュータに次のプログラムを実行させることで実施することができる。すなわち、このプログラムは、コンピュータに、演算子を細分化した演算記述を作成する第１手順、第１手順で作成した細分化演算記述を使用して演算子のオーバロード用ライブラリを作成する第２手順、動作記述を使用してオーバロード用ライブラリインクルード済み動作記述を作成する第３手順、第３手順で作成したオーバロード用ライブラリインクルード済み動作記述と第２手順で作成したオーバロード用ライブラリとを使用して高位合成を行いレジスタ転送レベル記述を作成する第４手順、第４手順で作成したレジスタ転送レベル記述を使用して論理合成を行いゲートレベル記述を作成する第５手順、を実行させるためのものである。複数のＬＳＩを設計する際には、前記動作記述とは別の動作記述に対して上述の第３手順〜第５手順を繰り返し実行させることで行うことができる。
【符号の説明】
【００２１】
２００１  事前処理
２００２  細分化演算記述作成
２００３  細分化演算記述
２００４  オーバロード用ライブラリ作成
２００５  オーバロード用ライブラリ
２００６  ゲートレベル記述作成処理
２００７  動作記述
２００９  オーバロード用ライブラリインクルード
２０１０  オーバロード用ライブラリインクルード済み動作記述
２０１１  高位合成
２０１２  レジスタ転送レベル記述
２０１３  論理合成
２０１４  ゲートレベル記述
【図１】
0005571928.tif 000002
【図２】
0005571928.tif 000003
【図３】
0005571928.tif 000004
【図４】
0005571928.tif 000005
【図５】
0005571928.tif 000006
【図６】
0005571928.tif 000007
【図７】
0005571928.tif 000008
【図８】
0005571928.tif 000009
【図９】
0005571928.tif 000010