(57)【要約】【課題】消費電力および動作周波数などの設計仕様に応じたＲＴＬ回路データの設計変更を容易に行う。【解決手段】半導体集積回路のＲＴＬ回路データ３１２は、特定のモジュールＭＣまたは特定の回路要素Ａ，Ｂ，Ｃを表現する第１の記述と、第１の記述の少なくとも一部を置換することによって特定のモジュールまたは回路要素に新たな機能α，β，γ，δを追加する第２の記述とを含む。コンピュータがＲＴＬ回路データ３１２を論理合成する際には、第１の記述をそのまま論理合成するか、第１の記述の一部を第２の記述で置換してから論理合成するかが、選択情報３１３に従って決定される。【選択図】図３
2016045726.tif 000002
【特許請求の範囲】
【請求項１】
半導体集積回路の設計データのデータ構造であって、
前記設計データは、ハードウェア記述言語で記述されたレジスタ転送レベルの回路データを含み、
前記回路データは、
特定のモジュールまたは特定の回路要素を表現する第１の記述と、
前記第１の記述の少なくとも一部と置換されることによって、前記特定のモジュールまたは前記特定の回路要素に新たな機能を追加する第２の記述とを含み、
コンピュータは、前記回路データの論理合成を行う際に、前記第１の記述をそのまま論理合成するか、前記第１の記述の少なくとも一部を前記第２の記述で置換してから論理合成するかを予め定められた選択情報に基づいて決定する、半導体集積回路の設計データのデータ構造。
【請求項２】
前記設計データは前記選択情報を含む、請求項１に記載の半導体集積回路の設計データのデータ構造。
【請求項３】
前記回路データは、
複数の特定のモジュールおよび複数の特定の回路要素の少なくとも一方をそれぞれ表現する複数の第１の記述と、
前記複数の第１の記述にそれぞれ対応する複数の第２の記述とを含み、
各前記第２の記述は、対応する第１の記述の少なくとも一部と置換されることによって、対応する特定のモジュールまたは回路要素に新たな機能を追加し、
前記回路データは、
各前記第１の記述をそのまま論理合成するか、各前記第１の記述の少なくとも一部を対応する第２の記述で置換してから論理合成するかを決定するための選択情報について、各前記特定のモジュールまたは回路要素ごとの選択情報の組み合わせを表す複数の選択パターンの情報を含み、
前記コンピュータは、前記複数の選択パターンのうち指定された選択パターンに従って前記回路データの論理合成を行う、請求項２に記載の半導体集積回路の設計データのデータ構造。
【請求項４】
前記複数の選択パターンは、前記回路データに基づいて作製された半導体体集積回路の消費電力および最大の動作周波数が、前記複数の選択パターンの選択結果に応じて段階的に変化するように予め設定される、請求項３に記載の半導体集積回路の設計データのデータ構造。
【請求項５】
前記特定の回路要素は、クロック信号が入力されるレジスタを含み、
前記特定の回路要素に追加される新たな機能は、前記クロック信号のゲーティング機能である、請求項１に記載の半導体集積回路の設計データのデータ構造。
【請求項６】
前記特定のモジュールは、オペランドデータが入力される演算回路を含み、
前記特定のモジュールに追加される新たな機能は、前記オペランドデータの分離機能である、請求項１に記載の半導体集積回路の設計データのデータ構造。
【請求項７】
前記特定のモジュールは、アドレス信号およびデータ信号が入力される複数のメモリ回路を含み、
前記特定のモジュールに追加される新たな機能は、各前記メモリ回路に入力されるアドレス信号およびデータ信号のゲーティング機能である、請求項１に記載の半導体集積回路の設計データのデータ構造。
【請求項８】
前記特定のモジュールは、パイプライン方式による演算回路を含み、
前記特定のモジュールに追加される新たな機能は、データのフォワーディング機能である、請求項１に記載の半導体集積回路の設計データのデータ構造。
【請求項９】
前記ハードウェア記述言語は、Ｖｅｒｉｌｏｇ−ＨＤＬであり、
前記第２の記述と前記第１の記述の対応部分の記述とは、マクロ名が定義されているかに応じてコンパイルするコードを指定するコンパイラ指示子によって選択可能に記述され、
前記選択情報は、前記マクロ名を定義する記述を含む、請求項２に記載の半導体集積回路の設計データのデータ構造。
【請求項１０】
ハードウェア記述言語で記述されたレジスタ転送レベルの回路データを記憶する記憶部と、
前記回路データの論理合成を行うことによってネットリストを生成するデータ処理部とを備え、
前記回路データは、
特定のモジュールまたは特定の回路要素を表現する第１の記述と、
前記第１の記述の少なくとも一部と置換されることによって、前記特定のモジュールまたは前記特定の回路要素に新たな機能を追加する第２の記述とを含み、
前記データ処理部は、前記回路データの論理合成を行う際に、前記第１の記述をそのまま論理合成するか、前記第１の記述の少なくとも一部を前記第２の記述に置換してから論理合成するかを予め定められた選択情報に基づいて決定する、半導体集積回路の設計装置。
【請求項１１】
コンピュータが、ハードウェア記述言語で記述されたレジスタ転送レベルの回路データの論理合成を行うことによってネットリストを生成するステップと、
前記コンピュータが、前記ネットリストに基づいて自動配置配線を行うことによってレイアウトパターンを生成するステップとを備え、
前記回路データは、
特定のモジュールまたは特定の回路要素を表現する第１の記述と、
前記第１の記述の少なくとも一部と置換されることによって、前記特定のモジュールまたは前記特定の回路要素に新たな機能を追加する第２の記述とを含み、
前記ネットリストを生成するステップは、前記第１の記述をそのまま論理合成するか、前記第１の記述の少なくとも一部を前記第２の記述に置換してから論理合成するかを予め定められた選択情報に基づいて決定するステップを含む、半導体集積回路の設計方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、半導体集積回路の設計データのデータ構造ならびに半導体集積回路の設計装置および設計方法に関し、たとえば、レジスタ転送レベルの回路データとして提供されるソフトマクロを利用した回路設計に好適に用いられるものである。
【背景技術】
【０００２】
近年のＬＳＩ（Large  Scale  Integration）の設計ではハードウェア記述言語を利用した開発が一般的に行われている。この場合、開発効率の向上のために、回路情報を機能ブロック単位でまとめたＩＰコア（Intellectual  Property  Core）がベンダーから提供されることが多い。開発者は提供されたＩＰコア利用して回路設計を行う。
【０００３】
ＩＰコアには、マスクを作製するためのレイアウトデータとして提供されるハードマクロと、ハードウェア記述言語（ＨＤＬ：Hardware  Description  Language）で記述されたレジスタ転送レベル（ＲＴＬ：Resister  Transfer  Level）の回路データであるソフトマクロとがある。ハードマクロは半導体製造プロセスに依存しているため、カスタマイズは困難であるが、ソフトマクロは、ある程度のカスタマイズが可能である。
【０００４】
ＬＳＩ設計を効率化するためのその他の手法も種々提案されている。たとえば、特表２００３−５１８２８０号公報（特許文献１）は、ハードウェアのＨＤＬ記述データおよびソフトウェア開発ツールの生成を自動化することによってマイクロプロセッサの開発を迅速化するためのシステムを開示する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特表２００３−５１８２８０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ベンダーから供給されたソフトマクロをユーザ側で設計仕様に応じてカスタマイズすることは、実際上は困難な点が多い。ユーザはソフトマクロの細部まで精通しているわけでないので、ソフトマクロに改変を加えることによる動作不具合のリスクがあるからである。さらに、動作周波数および消費電力などの設計仕様に合致するようにソフトマクロをカスタマイズしようとすると、回路データの修正とシミュレーションによる評価とを繰り返して行う必要があり、コストおよび開発時間の点で現実的ではない。
【０００７】
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【０００８】
一実施形態による半導体集積回路のＲＴＬ回路データは、特定のモジュールまたは特定の回路要素を表現する第１の記述と、第１の記述の少なくとも一部を置換することによって特定のモジュールまたは回路要素に新たな機能を追加する第２の記述とを含む。コンピュータがＲＴＬ回路データを論理合成する際には、第１の記述をそのまま論理合成するか、第１の記述の一部を第２の記述で置換してから論理合成するかが、選択情報に従って決定される。
【発明の効果】
【０００９】
上記の一実施形態によれば、消費電力および動作周波数などの設計仕様に応じてＲＴＬ回路データの設計変更を容易に行うことができる。
【図面の簡単な説明】
【００１０】
【図１】半導体集積回路の設計装置の全体構成を概略的に示す図である。
【図２】半導体集積回路の設計手順を示すフローチャートである。
【図３】図１の設計データのデータ構造を示す図である。
【図４】フリップフロップに対してクロックゲーティングを行う場合の回路図である。
【図５】クロックゲーティングを行わないフリーランのフリップフロップの回路図である。
【図６】図４の回路と図５の回路とが選択可能なＨＤＬ記述の一例を示す図である。
【図７】演算器の入力データに対してオペランドアイソレーションを行う場合の一例を示す回路図である。
【図８】演算器の入力データに対してオペランドアイソレーションを行わない場合の一例を示す回路図である。
【図９】図７の回路２５Ａと図８の回路２５Ｂとが選択可能なＨＤＬ記述の一例を示す図である。
【図１０】メモリに入力されるアドレスおよびデータのゲーティングを行う場合の一例を示す回路図である。
【図１１】メモリに入力されるアドレスおよびデータのゲーティングを行わない場合の一例を示す回路図である。
【図１２】図１０の回路３７Ａと図１１の回路３７Ｂとが選択可能なＨＤＬ記述の一例を示す図である。
【図１３】ＣＰＵのデータパスにおいて、演算データのバイパス経路を設けた場合の一例を示す回路図である。
【図１４】ＣＰＵのデータパスにおいて、演算データのバイパス経路を設けない場合の一例を示す回路図である。
【図１５】図１３の演算ステージ５０Ａと図１４の演算ステージ５０Ｂとが選択可能なＨＤＬ記述の一例を示す図である。
【図１６】トップモジュールのＨＤＬ記述の一例を示す図である（ファイル名：ｔｏｐ．ｖ）。
【図１７】図１６のトップモジュールに組み込まれたモジュールＡのＨＤＬ記述例を示す図である。
【図１８】図１６のトップモジュールに組み込まれたモジュールＢのＨＤＬ記述例を示す図である。
【図１９】図１６のトップモジュールに組み込まれたモジュールＣのＨＤＬ記述例を示す図である。
【図２０】マクロ定義の記述例を示す図である。
【図２１】第３の実施形態による半導体集積回路の設計データで用いられる選択情報について説明するための図である。
【図２２】図２１の各選択パターンについて消費電力と動作周波数との関係を示す図である。
【図２３】半導体集積回路の設計データを作成する方法を示すフローチャートである。
【図２４】図２３のステップＳ１１５の手順についてさらに詳しく説明するためのフローチャートである。
【図２５】第４の実施形態の場合におけるモジュールＡのＨＤＬ記述例を示す図である。
【図２６】第４の実施形態の場合におけるマクロ定義の記述例を示す図である。
【図２７】図２６で定義したマクロ名と、回路の消費電力および最大動作周波数（高速動作性）との関係を表形式で示した図である。
【発明を実施するための形態】
【００１１】
以下、各実施形態について図面を参照して詳しく説明する。なお、同一または相当する部分には同一の参照符号を付して、その説明を繰返さない。
【００１２】
＜第１の実施形態＞
図１は、半導体集積回路の設計装置の全体構成を概略的に示す図である。図２は、半導体集積回路の設計手順を示すフローチャートである。
【００１３】
図１を参照して、設計装置３００は、コンピュータをベースに構成され、ＣＰＵ（Central  Processing  Unit）３０１、ＲＡＭ（Random  Access  Memory）３０２、ＲＯＭ（Read  Only  Memory）３０３、入力装置３０４、表示装置３０５、外部記憶装置３０８、光ディスク装置３０６、通信装置３０７などを含む。
【００１４】
ハードディスクなどの外部記憶装置３０８には、半導体集積回路の設計データ３１０と、設計支援プログラム（論理合成ツール、シミュレーションツール、自動配置配線ツールなど）３１１とが格納されている。設計データ３１０には、ＨＤＬで記述されたＲＴＬ回路データ３１２が含まれる。ＲＴＬ回路データ３１２は、ベンダーから提供されたソフトマクロなどによって構成されたものである。なお、ソフトマクロは、ＤＶＤまたはＣＤ−ＲＯＭなどの非一時的な記憶媒体として、もしくは通信装置３０７に接続されたネットワークを介して入手され、コンピュータに取り込まれる。
【００１５】
ＣＰＵ３０１は、設計データ３１０を処理するデータ処理装置として機能する。ＲＡＭ３０２およびＲＯＭ３０３は、ＣＰＵ３０１が動作する際の主記憶として用いられる。具体的に、ＣＰＵ３０１は、ユーザからの指示入力に従って、ＲＴＬ回路データ３１２の論理合成を行うことによってネットリスト３１４を生成する（図２のステップＳ４００）。ＣＰＵ３０１は、さらに、ネットリスト３１４に基づいて配置配線を行うことによってレイアウトパターン３１５を生成する（図２のステップＳ４００）。ユーザは、キーボードおよびマウスなどの入力装置３０４と、液晶ディスプレイ装置などの表示装置３０５とを利用して、上記の半導体集積回路の設計を対話的に進めることができる。
【００１６】
図３は、図１の設計データのデータ構造を示す図である。図３を参照して、ＲＴＬ回路データ３１２は、ハードウェア記述言語（ＨＤＬ）を用いてレジスタ転送レベル（ＲＴＬ）で記述された半導体集積回路のデータであり、複数のモジュールＭＡ，ＭＢ，ＭＣ，ＴＭが階層化された構造を有している。各モジュールの機能は、レジスタトランスファレベル（ＲＴＬ）のＨＤＬによって表現されている。ここで、ＲＴＬでは、データを保持するレジスタ（順序素子）の位置を明確に定義され、レジスタ間のデータの流れが記述される。すなわち、レジスタ間に存在する組合わせ回路が記述される。
【００１７】
この明細書では、半導体集積回路を構成する演算回路、制御回路、およびメモリ回路などの回路ブロックをモジュールと称する。各モジュールは、レジスタ（フリップフロップ）、マルチプレクサ、コンパレータ、および状態マシンなどの複数の回路要素によって構成されている。
【００１８】
具体的に図３の場合、ＲＴＬ回路データ３１２は、トップモジュールＴＭと、トップモジュールＴＭから呼び出される複数のモジュールＭＡ，ＭＢ，ＭＣ，…を含む。モジュールＭＡは、複数の回路要素Ａ，Ｂ，…をそれぞれ表現するＨＤＬ記述を含む。同様に、モジュールＭＢは、複数の回路要素Ｃ，Ｄ，…をそれぞれ表現するＨＤＬ記述を含む。によって構成される。
【００１９】
さらに、ＲＴＬ回路データ３１２には、回路要素Ａを表現するＨＤＬ記述の少なくとも一部と置換されることによって、回路要素Ａに新たな機能αを追加するＨＤＬ記述が含まれる。同様に、ＲＴＬ回路データ３１２には、回路要素Ｂを表現するＨＤＬ記述の少なくとも一部と置換されることによって回路要素Ｂに新たな機能βを追加するＨＤＬ記述、および回路要素Ｃを表現するＨＤＬ記述の少なくとも一部と置換されることによって回路要素Ｃに新たな機能γを追加するＨＤＬ記述が含まれる。さらに、モジュールＭＣを表現するＨＤＬ記述の少なくとも一部と置換されることによってモジュールＭＣに新たな機能δを追加するＨＤＬ記述が含まれる。
【００２０】
追加される機能α，β，γ，δは、たとえば、クロックゲーティングである。クロックゲーティング機能を追加することによってＲＴＬ回路データ３１２によって表される半導体集積回路の消費電力が低減させることができる。
【００２１】
図１のＣＰＵ３０１は、ＲＴＬ回路データ３１２の論理合成を行う際に、機能α，β，γ，δを追加せずに回路要素Ａ，Ｂ，ＣおよびモジュールＭＣを表現するＨＤＬ記述をそのまま論理合成する場合と、機能α，β，γ，δを表すＨＤＬ記述で対応する部分を置換してから論理合成する場合とを選択可能である。機能α，β，γ，δの各々を追加するか否かはユーザから予め与えられた選択情報に従って決定される。
【００２２】
半導体集積回路の設計データ３１０には、上記の選択情報３１３が予め含まれている。たとえば、図３の場合には、選択情報としてスイッチＳＷ１，ＳＷ２，ＳＷ３，ＳＷ４が定められている（この場合のスイッチとは、物理的なスイッチではなく、選択情報を表すパラメータ等を意味する）。スイッチＳＷ１が“０”の場合には、機能αを付加しない回路要素Ａのみを表現するＨＤＬ記述が選択され、スイッチＳＷ１が“１”の場合には、回路要素Ａを表現するＨＤＬ記述の少なくとも一部を、機能αを表すＨＤＬ記述で置換したものが選択される。他のスイッチＳＷ２，ＳＷ３，ＳＷ４についても同様である。機能α，β，γ，δがクロックゲーティングなど消費電力を低減させるための機能である場合には、すべてのスイッチＳＷ１〜ＳＷ４について“１”を選択することによって、半導体集積回路の消費電力を最も低減させることができる。
【００２３】
なお、ハードウェア記述言語としてＶｅｒｉｌｏｇ  ＨＤＬが用いられる場合には、マクロ名が定義されているか否かに応じてコンパイルするコードを指定することができるコンパイラ指示子を用いることによって、上記の機能α，β，γ，δを追加するか否かを選択することができる。この場合、上記のスイッチＳＷ０〜ＳＷ４にはマクロ名が対応する。
【００２４】
半導体集積回路の設計データのデータ構造を上記のように構成すれば、消費電力および動作周波数などの設計仕様に応じてスイッチＳＷ１〜ＳＷ４の設定を変更するだけで、特定の回路要素の設計を容易に変更することが可能になる。したがって、ベンダーが上記のデータ構造のソフトマクロを提供することによって、ソフトマクロのユーザは、設計仕様に応じて容易かつ低コストかつ低リスクでソフトマクロをカスタマイズすることが可能になる。
【００２５】
＜第２の実施形態＞
第２の実施形態では、第１の実施形態で説明した半導体集積回路の設計データのデータ構造について、具体例を挙げて説明する。
【００２６】
［クロックゲーティング］
図４は、フリップフロップに対してクロックゲーティングを行う場合の回路図である。図５は、クロックゲーティングを行わないフリーランのフリップフロップの回路図である。
【００２７】
図５を参照して、クロックゲーティングを行わない場合、フリップフロップ（ＦＦ：Flip-Flop）１１の出力信号（ＦＦ）は、クロック信号ＣＬＫの立ち上がりエッジにおけるデータ信号Ｄａｔａに等しくなる。さらに、図示しないリセット信号ＲＳＴ＿ｎの立下がりエッジにおいて、フリップフロップ１１の出力信号（ＦＦ）は、“０”に等しくなる。
【００２８】
図４を参照して、クロックゲーティングを行う場合の回路１０Ａは、フリップフロップ１１の他に、ラッチ回路（ＬＡＴＣＨ）１２とＡＮＤゲート１３とをさらに含む点で、図５の回路１０Ｂと異なる。ラッチ回路１２は、クロック信号ＣＬＫの立下がりエッジにおいて、イネーブル信号ＥＮを保持する。ＡＮＤゲート１３は、ラッチ回路１２の出力信号とクロック信号ＣＬＫとの論理和をフリップフロップ１１に出力する。ラッチ回路１２に保持されているイネーブル信号ＥＮが“１”の場合（すなわち、ラッチ回路１２の出力信号が“１”の場合）、フリップフロップ１１の出力信号（ＦＦ）は、クロック信号ＣＬＫの立ち上がりエッジにおけるデータ信号Ｄａｔａに等しくなる。ラッチ回路１２に保持されているイネーブル信号ＥＮが“０”の場合、フリップフリップ１１の出力信号（ＦＦ）は更新されない。
【００２９】
図６は、図４の回路と図５の回路とが選択可能なＨＤＬ記述の一例を示す図である。この明細書では、ＨＤＬとしてVerilog  HDL（Verilog  Hardware  Description  Language）が用いられている。Verilog  HDLに代えて、SystemVerilog、SystemC，ＶＨＤＬなど他のＨＤＬを用いてもよい。
【００３０】
図６を参照して、図４の回路１０ＡをVerilog  HDLで記述した一例がＨＤＬ記述１０１である。図５の回路１０ＢをVerilog  HDLで記述した一例がＨＤＬ記述１０２である。ＨＤＬ記述１００では、同じ入力信号（すなわち、クロック信号ＣＬＫ、リセット信号ＲＳＴ＿ｎ）を有するＨＤＬ記述１０１とＨＤＬ記述１０２とが併記されている。「`ifdef〜`else〜`endif」で表される条件コンパイル用のコンパイラ指示子において、マクロ名（ＳＷ＿Ｇａｔｉｎｇ）が定義されているかによって、どちらか一方のＨＤＬ記述を選択することができる。具体的には、「`define SW_Gating」が設計データ内に記載されていると、コンパイル時にＨＤＬ記述１０１が選択される。「`define SW_Gating」が設計データ内に記載されていないとＨＤＬ記述１０２が選択される。すなわち、マクロ名（ＳＷ＿Ｇａｔｉｎｇ）が定義されている場合には、図５に示すレジスタ（フリップフロップ）１１を表すＨＤＬ記述１０２がＨＤＬ記述１０１と置換されることによって、レジスタにクロックゲーティング機能が追加される。
【００３１】
なお、条件コンパイル用のコンパイラ指示子を使用せずに、ＨＤＬ記述１０１，１０２の選択を行うことも可能である。たとえば、ＨＤＬ記述１０１とＨＤＬ記述１０２とをそれぞれモジュール化して別ファイルの形で格納しておく。その後、Ｖｅｒｉｌｏｇシミュレータまたは論理合成ツール等のＥＤＡ（Electronic  Design  Automation）ツールを使用する場合においてＨＤＬ記述ファイルが読み込まれる際に、所望のモジュールファイルを読み込ませるという方法でＨＤＬ記述の選択を行うことができる。
【００３２】
上記の例ではフリップフロップ等の論理回路を対象にしたクロックゲーティングを示しているが、メモリ等のモジュールレベルの回路に対するクロックゲーティングも可能である。この場合も上記と同様に、クロックゲーティングを行うモジュールと、クロックゲーティングを行わないモジュールとの一方が選択可能であり、選択されたモジュールがコンパイルされる。
【００３３】
以下、上記の効果について説明する。ソフトマクロのユーザがクロックゲーティングを使用した回路と使用していない回路を選択できる機能を用意することにより、高速化が要求される半導体集積回路では高速化の実現が容易になり、低消費電力化が要求される半導体集積回路では低消費電力化の実現が容易になる。
【００３４】
たとえば、信号の伝搬遅延等のために、クロックゲーティングを制御する制御信号ＥＮが回路１０Ａのセットアップタイムのタイミング制約を満たさない場合には、図６のＨＤＬ記述１０２を選択することによってクロックゲーティングを止めるようにする。クロックゲーティングを止めることによって、ゲートを一段省略することができるので制御信号ＥＮの伝搬時間を短くすることができる。
【００３５】
逆に、実装する半導体集積回路の動作周波数が低い場合には、動作タイミングに余裕がある。このような場合には、図６のＨＤＬ記述１０１を選択することによって、クロックゲーティングによる低消費電力実装を実現できる。
【００３６】
［オペランドアイソレーション］
図７は、演算器の入力データに対してオペランドアイソレーション（オペランド分離）を行う場合の一例を示す回路図である。図８は、演算器の入力データに対してオペランドアイソレーションを行わない場合の一例を示す回路図である。図７の回路２０Ａおよび図８の回路２０Ｂは、ＣＰＵ（Central  Processing  Unit）のデータパスなど、データ処理を行う回路のデータパスの一部を示す。
【００３７】
図８の回路２０Ｂは、セレクタ２１と、演算器２２と、制御回路２６とを含む。演算器２２は、入力信号ＤＩＮ１ｂ，ＤＩＮ２ｂ（本来の入力信号ＤＩＮ１，ＤＩＮ２にそれぞれ等しい）に対して演算を行い、演算結果ＤＯＵＴをセレクタ２１に出力する。セレクタ２１は、制御回路２６から出力された制御信号Ｓに応じて、複数の入力信号のいずれか１つを選択して出力する。
【００３８】
図７の回路２０Ａは、演算器２２の本来の入力信号ＤＩＮ１，ＤＩＮ２に対してオペランドアイソレーションを行うための回路２５Ａをさらに含む点で、図８の回路２０Ｂと異なる。オペランドアイソレーション用の回路２５ＡはＡＮＤゲート２３，２４を含む。ＡＮＤゲート２３は、本来の入力信号ＤＩＮ１と制御信号ＳとのＡＮＤ演算結果を実際の入力信号ＤＩＮ１ｂとして演算器２２に出力する。ＡＮＤゲート２４は、本来の入力信号ＤＩＮ２と制御信号ＳとのＡＮＤ演算結果を実際の入力信号ＤＩＮ２ｂとして演算器２２に出力する。
【００３９】
上記の回路２０Ａの構成によって、制御信号Ｓが“１”であり、演算器２２の出力信号ＤＯＵＴがセレクタ２１によって選択されている場合には、本来の入力信号ＤＩＮ１，ＤＩＮ２が演算器２２にそのまま入力される。制御信号Ｓが“０”であり、演算器２２の出力信号ＤＯＵＴがセレクタ２１によって選択されていない場合には、演算器２２の実際の入力信号ＤＩＮ１ａ，ＤＩＮ２ｂは“０”に等しくなる。
【００４０】
なお、図８の回路２０Ｂには、本来の入力信号ＤＩＮ１，ＤＩＮ２をそれぞれ実際の入力信号ＤＩＮ１ｂ，ＤＩＮ２ｂとしてそのまま演算器２２に出力する回路２５Ｂが設けられていると考えることができる。
【００４１】
図９は、図７の回路２５Ａと図８の回路２５Ｂとが選択可能なＨＤＬ記述の一例を示す図である。図９を参照して、図７の回路２５ＡをVerilog  HDLで記述した一例がＨＤＬ記述１１１である。図８の回路２５ＢをVerilog  HDLで記述した一例がＨＤＬ記述１１２である。ＨＤＬ記述１１０では、同じ入力信号ＤＩＮ１，ＤＩＮ２を有するＨＤＬ記述１１１とＨＤＬ記述１１２とが併記されている。「`ifdef〜`else〜`endif」で表される条件コンパイル用のコンパイラ指示子において、マクロ名（ＳＷ＿ＯｐｅＩｓｏ）が定義されている場合にはＨＤＬ記述１１１が選択され、マクロ名（ＳＷ＿ＯｐｅＩｓｏ）が定義されていない場合にはＨＤＬ記述１１２が選択される。すなわち、マクロ名（ＳＷ＿ＯｐｅＩｓｏ）が定義されている場合には、図８の回路２０Ｂを表すＨＤＬ記述の一部であるＨＤＬ記述１１２がＨＤＬ記述１１１と置換されることによって、クロックアイソレーション機能が追加される。
【００４２】
なお、前述したように、条件コンパイル用のコンパイラ指示子を使用せずに、ＨＤＬ記述１１１，１１２の選択を行うことも可能である。たとえば、ＨＤＬ記述１１１とＨＤＬ記述１１２とをそれぞれモジュール化して別ファイルとして格納しておき、コンパイル時に所望のモジュールファイルを読み出すようにすればよい。
【００４３】
上記のようにソフトマクロのユーザがオペランドアイソレーションを使用した回路と使用していない回路を選択できる機能を用意することによって、半導体集積回路の最適化が容易になる。すなわち、高速化が要求される半導体集積回路ではオペランドアイソレーションを採用しないことによって高速化を容易に実現でき、低消費電力化が要求される半導体集積回路ではオペランドアイソレーションを採用することによって低消費電力化を容易に実現できる。
【００４４】
具体的に、図７の回路２０Ａでは、オペランドアイソレーションを採用することによって、演算器２２を使用しない場合には前段のＡＮＤゲート２３，２４によって演算器２２の入力信号がローレベル（“０”）で固定されるので（ＯＲゲートを用いることによってハイレベル（“１”）に固定してもよい）、演算器２２の消費電力がより小さくなる。しかしながら、ＡＮＤゲート２３，２４によってゲート段数が一段増えるために遅延時間が増加し、この遅延時間の分だけ高速動作が困難になる。
【００４５】
［メモリ回路のアドレスおよびデータのゲーティング］
図１０は、メモリに入力されるアドレスおよびデータのゲーティングを行う場合の一例を示す回路図である。図１１は、メモリに入力されるアドレスおよびデータのゲーティングを行わない場合の一例を示す回路図である。
【００４６】
図１１の回路３０Ｂは、ＣＰＵ３２と、モジュールＡ，Ｂ，Ｃ（３１，３３，３４）と、メモリ３５＿１〜３５＿１０とを含む半導体集積回路である。ＣＰＵ３２の出力信号ＳＩＧ（アドレスＡｄｒおよびデータＤａｔａの少なくとも一方）は信号ＳＩＧａ〜ＳＩＧｅに分岐する。回路３０Ｂでは、出力信号ＳＩＧをそのまま複数の信号に分岐するための回路３７Ｂが設けられていると考えることができる。分岐した信号ＳＩＧａはメモリ３５＿１，３５＿２に入力され、信号ＳＩＧｂはメモリ３５＿３，３５＿４に入力され、信号ＳＩＧｃはメモリ３５＿５，３５＿６に入力され、信号ＳＩＧｄはメモリ３５＿７，３５＿８に入力され、信号ＳＩＧｅはメモリ３５＿９，３５＿１０に入力される。回路３０Ｂには信号ＳＩＧ，ＳＩＧａ〜ＳＩＧｅを増幅するためのバッファ回路３６も設けられている。
【００４７】
一方、図１０の回路３０Ａは、メモリの入力信号のゲーティングを行うための回路３７Ａをさらに含む点で図１１の回路３０Ｂと異なる。ゲーティング用の回路３７Ａは、ＡＮＤゲート３８ａ〜３８ｅを含む。ＡＮＤゲート３８ａは出力信号ＳＩＧとＣＰＵ３２から出力された制御信号ＣＮＴａとのＡＮＤ演算結果を信号ＳＩＧａとしてメモリ３５＿１，３５＿２に出力する。同様に、ＡＮＤゲート３８ｂは出力信号ＳＩＧと制御信号ＣＮＴｂとのＡＮＤ演算結果を信号ＳＩＧｂとしてメモリ３５＿３，３５＿４に出力する。ＡＮＤゲート３８ｃは出力信号ＳＩＧと制御信号ＣＮＴｃとのＡＮＤ演算結果を信号ＳＩＧｃとしてメモリ３５＿５，３５＿６に出力する。ＡＮＤゲート３８ｄは出力信号ＳＩＧと制御信号ＣＮＴｄとのＡＮＤ演算結果を信号ＳＩＧｄとしてメモリ３５＿７，３５＿８に出力する。ＡＮＤゲート３８ｅは出力信号ＳＩＧと制御信号ＣＮＴｅとのＡＮＤ演算結果を信号ＳＩＧｅとしてメモリ３５＿９，３５＿１０に出力する。
【００４８】
上記の回路３０Ａの構成によって、制御信号ＣＮＴａ〜ＣＮＴｅのうちいずれを“１”にするかによって、出力信号ＳＩＧのゲーティングが可能になる。たとえば、制御信号ＣＮＴａを“１”とし、他の制御信号ＣＮＴｂ〜ＣＮＴｅを“０”にすれば、出力信号ＳＩＧはメモリ３５＿１，３５＿２に供給され、他のメモリ３５＿３〜３５＿１０には供給されなくなる。
【００４９】
図１２は、図１０の回路３７Ａと図１１の回路３７Ｂとが選択可能なＨＤＬ記述の一例を示す図である。図１２を参照して、図１０の回路３７ＡをVerilog  HDLで記述した一例がＨＤＬ記述１２１である。図１１の回路３７ＢをVerilog  HDLで記述した一例がＨＤＬ記述１２２である。
【００５０】
ＨＤＬ記述１２０では、同じ入力信号ＳＩＧを有するＨＤＬ記述１２１とＨＤＬ記述１２２とが併記されている。「`ifdef〜`else〜`endif」で表される条件コンパイル用のコンパイラ指示子において、マクロ名（ＳＷ＿ＭｅｍＧａｔｉｎｇ）が定義されている場合にはＨＤＬ記述１２１が選択され、マクロ名（ＳＷ＿ＭｅｍＧａｔｉｎｇ）が定義されていない場合にはＨＤＬ記述１２２が選択される。すなわち、マクロ名（ＳＷ＿ＭｅｍＧａｔｉｎｇ）が定義されている場合には、複数のメモリ３５＿１〜３５＿１０を含む回路３０Ａを表すＨＤＬ記述の一部１２２がＨＤＬ記述１２１と置換されることによって、データおよびアドレスのゲーティング機能が追加される。
【００５１】
なお、前述したように、条件コンパイル用のコンパイラ指示子を使用せずに、ＨＤＬ記述１２１，１２２の選択を行うことも可能である。たとえば、ＨＤＬ記述１２１とＨＤＬ記述１２２とをそれぞれモジュール化して別ファイルとして格納しておき、コンパイル時に所望のモジュールファイルを読み出すようにすればよい。
【００５２】
上記のようにソフトマクロのユーザがアドレスまたはデータまたはその両方のゲーティングを行う回路と、ゲーティングが行えない回路とを選択できる機能を用意することによって、半導体集積回路を実装する条件に応じた最適化が容易になる。すなわち、高速化が要求される半導体集積回路ではゲーティングを採用しないことによって高速化を容易に実現でき、低消費電力化が要求される半導体集積回路ではゲーティングを採用することによって低消費電力化を容易に実現できる。
【００５３】
具体的に図１０の回路３０Ａでは、アクセスしないメモリモジュールに対するアドレスまたはデータまたはその両方の供給を止めることよって、アクセスしないメモリモジュールにおける消費電力を低減させることができる。しかしながら、ゲーティングセル分の信号伝搬遅延が増加するので、タイミングの制約に応じて動作速度と消費電力とのトレードオフの最適化が必要である。
【００５４】
［データバスのバイパス］
図１３は、ＣＰＵのデータパスにおいて、演算データのバイパス経路を設けた場合の一例を示す回路図である。図１４は、ＣＰＵのデータパスにおいて、演算データのバイパス経路を設けない場合の一例を示す回路図である。
【００５５】
図１４の回路４０Ｂは、パイプライン処理を行うＣＰＵの一例を示し、フリップフロップ（ＦＦ１〜ＦＦ４）４１〜４４と、レジスタ４５と、メモリ４６と、ＡＬＵ（Arithmetic  Logic  Unit：算術論理演算装置）５３とを含む。レジスタ４５から読み出されたデータＳｉｇＯＰ１，ＳｉｇＯＰ２は、フリップフロップ４２を介してＡＬＵ５３の入力ノードｉｎ１，ｉｎ２にそれぞれ入力される。ＡＬＵ５３は、データＳｉｇＯＰ１，ＳｉｇＯＰ２を用いて演算を行い、演算結果を出力ノードｏｕｔから出力する。ＡＬＵ５３から出力されたデータＳｉｇＡＬＵは、フリップフロップ４３を介してメモリ４６に書き込まれる。さらに、メモリ４６から読み出されたデータＳｉｇＷＢは、フリップフロップ４４を介してレジスタ４５に書き込まれる。
【００５６】
図１３の回路４０Ａは、メモリ４６に書込む前のデータＳｉｇＭＥＭおよびレジスタ４５に書込む前のデータＳｉｇＷＢを直接ＡＬＵ５３に入力するためのバイパス経路（フォワーディング経路）を含む点で、図１４の回路４０Ｂと異なる。さらに、図１３の回路４０Ａの演算ステージ５０Ａは、ＡＬＵ５３の他にマルチプレクサ（ＭＵＸ１，ＭＵＸ２）５１，５２をさらに含む点で図１４の回路４０Ｂの演算ステージ５０Ｂと異なる。マルチプレクサ（ＭＵＸ１）５１は、データＳｉｇＯＰ１，ＳｉｇＷＢ，ＳｉｇＭＥＭが入力される入力ノードｉｎ１，ｉｎ２，ｉｎ３を有し、入力されたデータのうちの１つを選択し、選択されたデータＳｉｇＭＵＸ１をＡＬＵ５３の入力ノードｉｎ１に入力する。同様に、マルチプレクサ（ＭＵＸ２）５２は、データＳｉｇＯＰ２，ＳｉｇＷＢ，ＳｉｇＭＥＭが入力される入力ノードｉｎ１，ｉｎ２，ｉｎ３を有し、入力されたデータのうちの１つを選択し、選択されたデータＳｉｇＭＵＸ２をＡＬＵ５３の入力ノードｉｎ２に入力する。ＡＬＵ５３は、入力ノードｉｎ１，ｉｎ２に入力されたデータＳｉｇＭＵＸ１，ＳｉｇＭＵＸ２を用いて演算を行い、演算結果を出力ノードｏｕｔから出力する。
【００５７】
図１５は、図１３の演算ステージ５０Ａと図１４の演算ステージ５０Ｂとが選択可能なＨＤＬ記述の一例を示す図である。図１５を参照して、図１３の演算ステージ５０ＡをVerilog  HDLで記述した一例がＨＤＬ記述１３１である。図１４の演算ステージ５０ＢをVerilog  HDLで記述した一例がＨＤＬ記述１３２である。ＨＤＬ記述１３１，１３２では、マルチプレクサを表す下位モジュール（モジュール名：ＭＵＸ）と、ＡＬＵを表す下位モジュール（モジュール名：ＡＬＵ）とが組み込まれている。
【００５８】
ＨＤＬ記述１３０では、同じ入力信号ＳｉｇＯＰ１，ＳｉｇＯＰ２を有するＨＤＬ記述１３１とＨＤＬ記述１３２とが併記されている。「`ifdef〜`else〜`endif」で表される条件コンパイル用のコンパイラ指示子において、マクロ名（ＳＷ＿Ｂｙｐａｔｈ）が定義されている場合にはＨＤＬ記述１３１が選択され、マクロ名（ＳＷ＿Ｂｙｐａｔｈ）が定義されていない場合にはＨＤＬ記述１３２が選択される。すなわち、マクロ名（ＳＷ＿Ｂｙｐａｔｈ）が定義されている場合には、図１４のＡＬＵ５３を表すＨＤＬ記述１３２がＨＤＬ記述１３１と置換されることによって、データフォワーディング機能が追加される。
【００５９】
なお、前述したように、条件コンパイル用のコンパイラ指示子を使用せずに、ＨＤＬ記述１３１，１３２の選択を行うことも可能である。たとえば、ＨＤＬ記述１３１とＨＤＬ記述１３２とをそれぞれモジュール化して別ファイルとして格納しておき、コンパイル時に所望のモジュールファイルを読み出すようにすればよい。
【００６０】
ＨＤＬ記述１３２に対応する図１４の回路４０Ｂにおいて、ＡＬＵ５３で演算を実行するためには、一度メモリ４６およびレジスタ４５に書き込まれたデータを読み出す必要であるので、先行する命令に従って実行されているレジスタ４５およびメモリ４６へのデータ書き込みが完了するのを待つ必要があった。
【００６１】
これに対して、ＨＤＬ記述１３１に対応する図１３の回路４０Ａでは、メモリ４６およびレジスタ４５に書き込まれる前のデータＳｉｇＭＥＭ，ＳｉｇＷＢがマルチプレクサ（ＭＵＸ１，ＭＵＸ２）５１，５２を介してＡＬＵ５３の入力ノードｉｎ１，ｉｎ２にバイパスされるので、先行する命令に従って実行されているレジスタ４５およびメモリ４６へのデータ書き込みの完了を待たずに次の命令に従う演算をＡＬＵ５３で実行することができる。しかしながら、マルチプレクサ５１，５２の追加によってＡＬＵ５３に入力されるデータの遅延時間の増加および回路面積の増加の問題が発生するので、周波数、面積、電力、サイクル性能等の間でのトレードオフの見極めが必要である。
【００６２】
以上のとおり、ソフトマクロのユーザがパイプライン回路においてバイパス経路が追加された回路と、バイパスを行わない回路とを選択できる機能を用意することによって、半導体集積回路を実装する条件に応じた最適化が容易になる。具体的には、サイクル性能の向上よりも高速化が要求される半導体集積回路では、フォワーディング経路によるバイパスを行わないパイプライン回路を選択することによって容易に高速化を実現できる。逆に、サイクル性能が要求される半導体集積回路ではフォワーディング経路を用いてバイパスを行うパイプライン回路を選択することによって容易にサイクル性能を向上させることができる。一方、サイクル性能および動作速度よりも、小面積化および低消費電力化が優先される半導体集積回路では、フォワーディング経路によるバイパスを行わないパイプライン回路を選択するともに動作周波数を下げることによって、小面積、低消費電力化を優先的に実現できる。
【００６３】
［半導体集積回路の設計データの例］
以下、図１６〜図２０を参照して、これまで述べたＨＤＬ記述を組み合わせることによって得られる半導体集積回路の設計データの一例について説明する。以下の例は、図４〜図６で説明したクロックゲーティング機能、図７〜図９で説明したオペランドアイソレーション機能、および図１０〜図１２で説明したメモリ用のアドレスおよびデータのゲーティング機能を選択できるようにしたものである。
【００６４】
なお、以下の例では、トップモジュール、モジュールＡ，Ｂ，Ｃ、およびマクロ定義をそれぞれ個別のファイル（ファイル名はそれぞれ「ｔｏｐ．ｖ」、「Ａ．ｖ」、「Ｂ．ｖ」、「Ｃ．ｖ」、「ｔｏｐ．ｄｅｆ」）にしているが、これらを同一ファイルにまとめることもできる。
【００６５】
図１６は、トップモジュールのＨＤＬ記述の一例を示す図である（ファイル名：ｔｏｐ．ｖ）。なお、図１６のトップモジュールは、図３のモジュールＴＭに対応する。図１６の場合、トップモジュールには下位モジュールＡ，Ｂ，Ｃが組み込まれている。
【００６６】
図１７は、図１６のトップモジュールに組み込まれたモジュールＡのＨＤＬ記述例を示す図である。図１７を参照して、モジュールＡのＨＤＬ記述１６０は、条件コンパイル用のコンパイラ指示子による選択肢を有するＨＤＬ記述を複数（１６１〜１６３）含む。
【００６７】
具体的に、ＨＤＬ記述１６１では、２つのＨＤＬ記述（クロックゲーティング実施記述およびクロックゲーティング非実施記述）が併記されており、これらのＨＤＬ記述はマクロ名ＳＷ＿Ｇａｔｉｎｇ＿Ａが定義されているか否かに応じて選択的にコンパイルされる。ＨＤＬ記述１６１は図６のＨＤＬ記述１００に対応するものである。
【００６８】
ＨＤＬ記述１６２では、２つのＨＤＬ記述（オペランドアイソレーション実施記述およびオペランドアイソレーション非実施記述）が併記されており、これらのＨＤＬ記述はマクロ名ＳＷ＿ＯｐｅＩｓｏ＿Ａが定義されているか否かに応じて選択的にコンパイルされる。ＨＤＬ記述１６２は図９のＨＤＬ記述１１０に対応するものである。
【００６９】
ＨＤＬ記述１６３では、２つのＨＤＬ記述（メモリアドレスゲーティング実施記述およびメモリアドレスゲーティング非実施記述）が併記されており、これらのＨＤＬ記述はマクロ名ＳＷ＿ＭｅｍＧａｔｉｎｇ＿Ａが定義されているか否かに応じて選択的にコンパイルされる。ＨＤＬ記述１６３は図１２のＨＤＬ記述１２０に対応するものである。
【００７０】
図１８は、図１６のトップモジュールに組み込まれたモジュールＢのＨＤＬ記述例を示す図である。図１８のモジュールＢのＨＤＬ記述１７０には、条件コンパイル用のコンパイラ指示子による選択肢を有するＨＤＬ記述が複数（１７１〜１７４）存在する。
【００７１】
具体的に、ＨＤＬ記述１７１では、２つのＨＤＬ記述（クロックゲーティング実施記述およびクロックゲーティング非実施記述）が併記されており、これらのＨＤＬ記述はマクロ名ＳＷ＿Ｇａｔｉｎｇ＿Ｂが定義されているか否かに応じて選択的にコンパイルされる。
【００７２】
ＨＤＬ記述１７２では、２つのＨＤＬ記述（オペランドアイソレーション実施記述およびオペランドアイソレーション非実施記述）が併記されており、これらのＨＤＬ記述はマクロ名ＳＷ＿ＯｐｅＩｓｏ＿Ｂが定義されているか否かに応じて選択的にコンパイルされる。
【００７３】
ＨＤＬ記述１７３，１７４の各々では、２つのＨＤＬ記述（メモリアドレスゲーティング実施記述およびメモリアドレスゲーティング非実施記述）が併記されている。これらのＨＤＬ記述は、マクロ名ＳＷ＿ＭｅｍＧａｔｉｎｇ＿Ｂ１またはＢ２（それぞれＨＤＬ記述１７３，１７４に対応する）が定義されているか否かに応じて選択的にコンパイルされる。
【００７４】
図１９は、図１６のトップモジュールに組み込まれたモジュールＣのＨＤＬ記述例を示す図である。図１９のモジュールＣのＨＤＬ記述１８０には、条件コンパイル用のコンパイラ指示子による選択肢を有するＨＤＬ記述が複数（１８１〜１８３）存在する。
【００７５】
具体的に、ＨＤＬ記述１８１〜１８３の各々には、２つのＨＤＬ記述（クロックゲーティング実施記述およびクロックゲーティング非実施記述）が併記されている。これらのＨＤＬ記述は、マクロ名ＳＷ＿Ｇａｔｉｎｇ＿Ｃ１またはＣ２またはＣ３（ＨＤＬ記述１８１，１８２，１８３にそれぞれ対応する）が定義されているか否かに応じて選択的にコンパイルされる。
【００７６】
図２０は、マクロ定義の記述例を示す図である。図２０のマクロ定義の記述１４０は、図１７〜図１９のコンパイラ指示子で使用したマクロ名をまとめて定義するもので、図３の選択情報３１３に相当する。特に、図２０の場合には、条件コンパイル用のコンパイラ指示子「`ifdef〜`endif」用いることによって、１種類マクロ名ＳＷ＿ＬｏｗＰｏｗｅｒの定義によって、図１７〜図１９のモジュールＡ，Ｂ，Ｃ内に記載したマクロ名ＳＷ＿Ｇａｔｉｎｇ＿ＸＸ，ＳＷ＿ＯｐｅＩｓｏ＿ＸＸ，ＳＷ＿ＭｅｍＧａｔｉｎｇ＿ＸＸを全て定義することができる。
【００７７】
この明細書では、マクロ名「ＳＷ＿ＬｏｗＰｏｗｅｒ」をメインスイッチと称し、個別回路を選択するためのマクロ名ＳＷ＿Ｇａｔｉｎｇ＿ＸＸ，ＳＷ＿ＯｐｅＩｓｏ＿ＸＸ，ＳＷ＿ＭｅｍＧａｔｉｎｇ＿ＸＸをサブスイッチと称する。メインスイッチ、サブスイッチの用語は選択手段を意味する概念的なものであり、実際のスイッチ回路とは無関係である。
【００７８】
図２０に示すように、マクロ名ＳＷ＿ＬｏｗＰｏｗｅｒを定義する「`define  SW_LowPower」が記載されていれば、コンパイル時にはモジュールＡ，Ｂ，Ｃ内のクロックゲーティング実施記述、オペランドアイソレーション実施記述、メモリアドレスゲーティング実施記述（すなわち、低消費電力化を行っている回路）がまとめて選択されることになる。ここで、コンパイル時とは、たとえば、ファイル「ｔｏｐ．ｖ」、「Ａ．ｖ」、「Ｂ．ｖ」、「Ｃ．ｖ」、「ｔｏｐ．ｄｅｆ」をまとめてＶｅｒｉｌｏｇシミュレータまたは論理合成ルールに読み込ませたときに相当する。
【００７９】
逆に、マクロ名ＳＷ＿ＬｏｗＰｏｗｅｒを定義する「`define  SW_LowPower」が記載されていなければ、コンパイル時には、モジュールＡ，Ｂ，Ｃ内のクロックゲーティング非実施記述、オペランドアイソレーション非実施記述、メモリアドレスゲーティング非実施記述（すなわち、低消費電力化を行っていない回路）がまとめて選択されることになる。
【００８０】
上記のように、ソフトマクロに低消費電力化のための回路を選択するか否かの選択肢を設けておくことによって、ベンダーからソフトマクロを提供されたユーザが、短期間、低リスク、低コストで、設計仕様に合致した回路（ＨＤＬ記述）を選択して最適化された実装を行うことができる。
【００８１】
たとえば、上記の例では、マクロ名ＳＷ＿ＬｏｗＰｏｗｅｒを定義することによって選択されたＨＤＬ記述で記述される機能は、低消費電力化には有効であるが、ゲーティングに追加によって遅延時間が増大するために高速動作を妨げる要因にもなり得る。したがって、ユーザの製品仕様において動作周波数が比較的低く高速動作が不要な場合には、マクロ名ＳＷ＿ＬｏｗＰｏｗｅｒを定義することによって、低消費電力化の可能な回路を用いた実装が実現できる。一方、ユーザの製品仕様において動作周波数が比較的高く高速動作を必要とする場合には、マクロ名ＳＷ＿ＬｏｗＰｏｗｅｒを定義しないことで、高速動作が可能な回路（ＨＤＬ記述）を用いた実装が実現できる。
【００８２】
なお、図１７〜図１９に示したモジュールＡ，Ｂ，Ｃ内のコンパイラ指示子で用いるマクロ名を全て「ＳＷ＿ＬｏｗＰｏｗｅｒ」に変更することも可能である。この場合には、図２０の参照符号１４１で示した部分の記載は不要になる。あるいは、図２０において、「`define  SW_LowPower」、「`ifdef  SW_LowPower」、および「`endif」を削除することによって、マクロ名ＳＷ＿Ｇａｔｉｎｇ＿ＸＸ，ＳＷ＿ＯｐｅＩｓｏ＿ＸＸ，ＳＷ＿ＭｅｍＧａｔｉｎｇ＿ＸＸを直接定義するようにしてもよい。
【００８３】
上記の例では、図４〜図１２で説明した回路機能を選択できるようにしたものであるが、当然ながら、上記以外の回路を選択できるようにしてもよい。
【００８４】
＜第３の実施形態＞
第１の実施形態の図３で説明したように、ＲＴＬ回路データ３１２に含まれる特定のモジュールおよび特定の回路要素に対しては、追加機能が付加された回路要素を表すＨＤＬ記述が他の選択肢として用意されている。ＲＴＬ回路データ３１２の論理合成の際には、選択情報３１３に従って特定のモジュールまたは回路要素ごとに追加機能を付加するか否かが選択され、選択されたＨＤＬ記述を用いて論理合成が行われる。
【００８５】
第３の実施形態では、選択情報３１３の新たな構成例が提示される。具体的に、選択情報３１３は、特定のモジュールまたは回路要素ごとに選択可能な選択肢の組合わせである複数の選択パターンを含む。ＣＰＵ３０１は、複数の選択パターンのうちでユーザによって選択されたパターンに従って、ＲＴＬ回路データ３１２の論理合成を行う。
【００８６】
以下、第３の実施形態について図面を参照して詳しく説明する。なお、以下の説明では、特定の回路要素ごとの選択肢の選択手段をサブスイッチＳＷと称する。サブスイッチＳＷの設定（“０”または“１”）に従って、対応する特定の回路要素の選択肢のうち１つが選択される。さらに、メインスイッチに従って複数の選択パターンのうち１つが選択される。サブスイッチ、メインスイッチは選択手段（たとえば、Ｖｅｒｉｌｏｇ  ＨＤＬの場合のマクロ名）を表す概念的なもので、実際のスイッチとは無関係である。
【００８７】
図２１は、第３の実施形態による半導体集積回路の設計データで用いられる選択情報について説明するための図である。図２１の例では、サブスイッチＳＷ１〜ＳＷ６の各設定について７通りの選択パターン（メインスイッチ）が用意されている。
【００８８】
たとえば、メインスイッチとして選択パターンＣ７が選択された場合には、サブスイッチＳＷ１〜ＳＷ７について全て“１”が選択される。サブスイッチＳＷに“１”が設定された場合に選択される回路要素では、サブスイッチＳＷに“０”が設定された場合に選択される回路要素と比較して、消費電力を低減させるための機能が付加されているとすれば、選択パターンＣ７を選択することによって、半導体集積回路の消費電力を最も低減させることができる。ただし、追加の機能によって信号の遅延が生じるので、動作周波数は最も低くなる。一方、メインスイッチとして選択パターンＣ１が選択された場合には、サブスイッチＳＷ１〜ＳＷ７について全て“０”が選択される。この場合は、半導体集積回路の消費電力は最も大きくなるが、動作周波数を最も高くすることができる。
【００８９】
選択パターンＣ２〜Ｃ６は、選択パターンＣ１と選択パターンＣ７との中間的な場合である。この場合、選択パターンごとにどのサブスイッチＳＷを“１”に設定し、どのサブスイッチＳＷを“０”に設定するかについては、ＲＴＬ回路データ３１２から生成された半導体集積回路の消費電力および最大動作周波数が選択パターンに応じて段階的に変化するように決定するのが望ましい。
【００９０】
図２２は、図２１の各選択パターンについて消費電力と動作周波数との関係を示す図である。上述のように、メインスイッチとして選択パターンＣ１が選択された場合には、消費電力が最も大きくなるとともに、最大動作周波数が最も高くなる。メインスイッチとして選択パターンＣ７が選択された場合には、消費電力が最も小さくなるとともに、最大動作周波数が最も低くなる。選択パターンＣ２〜Ｃ６については、図２２に示すように、選択パターンに応じて最大動作周波数および消費電力が徐々に線形的に変化するように設定するのが望ましい。これによって、ユーザは、消費電力および最大動作周波数などの設計仕様に応じて容易に回路データをカスタマイズすることができる。
【００９１】
図２３は、半導体集積回路の設計データを作成する方法を示すフローチャートである。図２３では、従来のＲＴＬ回路データに基づいて、特定の回路要素についての選択肢を含むＲＴＬ回路データを設計する方法と、最大動作周波数および消費電力が段階的に変化するように複数の選択パターンを決定する方法とが示されている。
【００９２】
まず、従来のＲＴＬ回路データ（Ｓ１００）に基づいて、サブスイッチの挿入箇所、すなわち、Ｖｅｒｉｌｏｇ  ＨＤＬの場合には、条件コンパイル用のコンパライラ指示子を用いて代替的なＨＤＬ記述と置換すべき箇所を検討する（Ｓ１０５）。
【００９３】
次に検討結果に基づいて、サブスイッチＡ〜Ｅを個別に適用したＲＴＬ回路データを作成し（Ｓ１１０）、作成した各ＲＴＬ回路データについて性能評価を行う（Ｓ１１５）。
【００９４】
図２４は、図２３のステップＳ１１５の手順についてさらに詳しく説明するためのフローチャートである。以下の工程は、ＥＤＡ（Electronic  Design  Automation）ツールによって実行される。まず、作成されたＲＴＬ回路データに対して、論理合成（Ｓ２００）および自動配置配線（Ｓ２１０）が行われ、パターンレイアウトが生成される。次に、生成されたパターンレイアウトに基づいて、タイミング検証（Ｓ２２０）、消費電力の評価（Ｓ２３０）、および回路面積の評価（Ｓ２４０）が実行される。
【００９５】
再び、図２３を参照して、性能評価の結果（Ｓ１２０）に基づき、消費電力の低下の程度および最大動作周波数の低下の程度などの効果の程度に応じて、サブスイッチＡ〜Ｅを分類する（Ｓ１２５）。サブスイッチＡ〜Ｅに分類結果に基づいて、サブスイッチＡ〜Ｅの組み合わせパターン、すなわち、選択パターン（メインスイッチ）が決定される（Ｓ１３０）。
【００９６】
次に、決定された各選択パターン（メインスイッチ）が適用されたＲＴＬ回路データについて、ステップＳ１１５と同様の性能評価を行う（Ｓ１３５）。性能評価の結果（Ｓ１４０）が所望の結果であった場合には（Ｓ１４５でＹＥＳ）、設計データ（ＲＴＬ回路データおよび選択パターン）を出力して（Ｓ１５０）処理が終了する。所望の結果が得られない場合には（Ｓ１４５でＮＯ）、ステップＳ１３０に戻ってサブスイッチの組み合わせを変更するか（Ｓ１５５でＹＥＳ）、ステップＳ１０５に戻ってサブスイッチの挿入箇所を再検討する（Ｓ１５５でＮＯ）。
【００９７】
＜第４の実施形態＞
第４の実施形態では、第３の実施形態で説明した半導体集積回路の設計データ、特に選択情報について、具体例を挙げて説明する。以下で説明する設計データは、第２の実施形態の図１６〜図２０で説明した設計データのうち、図１７のモジュールＡのＨＤＬ記述と図２０のマクロ名の定義方法を変更したものである。図１６に示すトップモジュールのＨＤＬ記述および図１８、図１９で説明したモジュールＢ，ＣのＨＤＬ記述について変更はない。
【００９８】
図２５は、第４の実施形態の場合におけるモジュールＡのＨＤＬ記述例を示す図である。図２５を参照して、モジュールＡのＨＤＬ記述２００は、条件コンパイル用のコンパイラ指示子による選択肢を有するＨＤＬ記述を複数（２０１〜２０４）含む。このうち、ＨＤＬ記述２０１〜２０３は、図１７のＨＤＬ記述１６１〜１６３とそれぞれ同じであるので説明を繰り返さない。
【００９９】
ＨＤＬ記述２０４では、２つのＨＤＬ記述（データパスバイパス実施記述およびデータパスバイパス非実施記述）が併記されており、これらのＨＤＬ記述はマクロ名ＳＷ＿Ｂｙｐａｔｈ＿Ａが定義されているか否かに応じて選択的にコンパイルされる。ＨＤＬ記述２０４は、図１５のＨＤＬ記述１３０に対応するものである。
【０１００】
図２６は、第４の実施形態の場合におけるマクロ定義の記述例を示す図である。図２６のマクロ定義の記述１９０は、図３の選択情報３１３に相当する。
【０１０１】
図２６に示すマクロ定義の記述１９０の特徴は、図２５のモジュールＡ内に記載したコンパイラ指示子で使用したマクロ名、図１８のモジュールＢ内に記載したコンパイラ指示子で使用したマクロ名、および図１９のモジュールＣ内に記載したコンパイラ指示子で使用したマクロ名のうち、選択されたマクロ名のみが定義可能である点にある。具体的には、図２６の参照符号１９１の部分に記載されているように、条件コンパイル用のコンパライラ指示子を用いることによって、４つのマクロ名（ＳＷ＿Ｌｏｗ，ＳＷ＿Ｎｏｒｍａｌ，ＳＷ＿Ｈｉｇｈ，ＳＷ＿Ｈｉｇｈ２）のうちいずれが定義されているかに応じて、モジュールＡ，Ｂ，Ｃ内に記載したマクロ名を選択的に定義できるようになっている。すなわち、４つのマクロ名（ＳＷ＿Ｌｏｗ，ＳＷ＿Ｎｏｒｍａｌ，ＳＷ＿Ｈｉｇｈ，ＳＷ＿Ｈｉｇｈ２）が図２１の選択パターン名に相当する。
【０１０２】
図２７は、図２６で定義したマクロ名と、回路の消費電力および最大動作周波数（高速動作性）との関係を表形式で示した図である。図２７では、マクロ名をコンパイラ指示子「`define」によって定義した場合を「ＯＮ」と記載し、定義していない場合を「ＯＦＦ」と記載している。また、図２７では、４つのマクロ名（ＳＷ＿Ｌｏｗ，ＳＷ＿Ｎｏｒｍａｌ，ＳＷ＿Ｈｉｇｈ，ＳＷ＿Ｈｉｇｈ２）をメインスイッチと称し、モジュールＡ，Ｂ，Ｃ内に記載したマクロ名をサブスイッチと称している。スイッチという用語は、選択手段を意味する抽象的な概念であり、実際の回路のスイッチを意味しているのではない。
【０１０３】
図２６および図２７を参照して、マクロ名ＳＷ＿Ｌｏｗをコンパイラ指示子「`define」を用いて定義した場合には、モジュールＡ，Ｂ，Ｃ（ｍｏｄｕｌｅ＿Ａ，Ｂ，Ｃ）に記載されている全てのマクロ名が定義されるようになる。これによって、半導体集積回路の消費電力は最も小さくなるが（ＬｏｗＰｏｗｅｒ）、最大動作周波数も低下する（ＬｏｗＳｐｅｅｄ）。
【０１０４】
マクロ名ＳＷ＿Ｎｏｒｍａｌをコンパイラ指示子「`define」を用いて定義した場合には、モジュールＡに記載したマクロ名は定義されるようになるが、モジュールＢ，Ｃに記載したマクロ名は定義されない。これによって、半導体集積回路の消費電力および最大動作周波数は中程度（Ｎｏｒｍａｌ）に調整される。なお、図２６の例では、「`define  SW_Normal」とあるようにマクロ名ＳＷ＿Ｎｏｒｍａｌが定義されている。
【０１０５】
マクロ名ＳＷ＿Ｈｉｇｈをコンパイラ指示子「`define」を用いて定義した場合には、モジュールＡに記載したマクロ名ＳＷ＿Ｂｙｐａｔｈ＿Ａのみが定義されるようになり、その他のマクロ名は定義されない。これによって、消費電力は増加するものの（ＨｉｇｈＰｏｗｅｒ）、さらに高速動作性（ＨｉｇｈＳｐｅｅｄ）が得られる。マクロ名ＳＷ＿Ｂｙｐａｔｈ＿Ａが定義されているので、パイプライン回路にはバイパス経路が付加されている。これによって、高サイクル性能が得られる。
【０１０６】
マクロ名ＳＷ＿Ｈｉｇｈ２をコンパイラ指示子「`define」を用いて定義した場合には、モジュールＡ，Ｂ，Ｃ内に記載したすべてのマクロ名が定義されない。これによって、消費電力がさらに増加し（ＨｉｇｈＰｏｗｅｒ）、さらなる高速動作性（ＨｉｇｈＳｐｅｅｄ）も得られる。ただし、マクロ名ＳＷ＿Ｂｙｐａｔｈ＿Ａが定義されていないので、パイプライン回路のサイクル性能が低下している。たとえば、パイプライン回路におけるバイパス経路がタイミング設計上のクリティカルパスになったとしても、マクロ名ＳＷ＿Ｂｙｐａｔｈ＿Ａを非定義（オフ）にすることよって、タイミングを緩和することができ、さらなる高速動作（動作周波数の増加）を実現できる。
【０１０７】
以上のとおり、４つのマクロ名（ＳＷ＿Ｌｏｗ，ＳＷ＿Ｎｏｒｍａｌ，ＳＷ＿Ｈｉｇｈ，ＳＷ＿Ｈｉｇｈ２）を選択手段（メインスイッチ）として設定することによって、１つのソフトマクロを設計仕様（消費電力、最大動作電力）に基づいて容易に最適化できる。
【０１０８】
なお、上記の例では、図４〜図１５で説明した回路機能を選択できるようにしたものであるが、当然ながら、上記以外の回路を選択できるようにしてもよい。また、上記の例では、メインスイッチとして４段階の選択ができるようにしているが、さらに選択肢を増やすようにしてもよい。
【０１０９】
以上、本発明者によってなされた発明を実施形態に基づき具体的に説明したが、本発明は上記実施形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることは言うまでもない。
【符号の説明】
【０１１０】
３００  半導体集積回路装置の設計装置、３０１  ＣＰＵ、３１０  設計データ、３１１  設計支援プログラム、３１２  ＲＴＬ回路データ、３１３  選択情報。
【図１】
2016045726.tif 000003
【図２】
2016045726.tif 000004
【図３】
2016045726.tif 000005
【図４】
2016045726.tif 000006
【図５】
2016045726.tif 000007
【図６】
2016045726.tif 000008
【図７】
2016045726.tif 000009
【図８】
2016045726.tif 000010
【図９】
2016045726.tif 000011
【図１０】
2016045726.tif 000012
【図１１】
2016045726.tif 000013
【図１２】
2016045726.tif 000014
【図１３】
2016045726.tif 000015
【図１４】
2016045726.tif 000016
【図１５】
2016045726.tif 000017
【図１６】
2016045726.tif 000018
【図１７】
2016045726.tif 000019
【図１８】
2016045726.tif 000020
【図１９】
2016045726.tif 000021
【図２０】
2016045726.tif 000022
【図２１】
2016045726.tif 000023
【図２２】
2016045726.tif 000024
【図２３】
2016045726.tif 000025
【図２４】
2016045726.tif 000026
【図２５】
2016045726.tif 000027
【図２６】
2016045726.tif 000028
【図２７】
2016045726.tif 000029