以下、図面にしたがって本発明の実施の形態について説明する。ただし、本発明の技術的範囲はこれらの実施の形態に限定されず、特許請求の範囲に記載された事項とその均等物まで及ぶものである。
図1は、集積回路最適化装置の構成の一例を表す図である。同図の集積回路最適化装置1は、CPU11、RAM等のメモリ12、入出力インタフェース13を有するコンピュータである。集積回路最適化プログラム21はRAM等のメモリ12に格納され、CPU11と協働することによって、最適化処理を実現する。本実施の形態例における集積回路最適化装置1が最適化する対象の集積回路記述SXもまた、RAM等のメモリ14に格納される。本実施の形態例において、処理の対象とする集積回路記述SXは、RTLまたはネットリスト、いずれで記述されていてもよい。
そして、本実施の形態例における集積回路最適化プログラム21は、RTLまたはネットリストの集積回路記述SXの記述を変更することにより、当該集積回路記述SXに基づいたLSIを最適化する。この例において、集積回路最適化プログラム21によって最適化のための変更が行われた集積回路記述SYは、同様にしてRAM等のメモリ14に格納される。
図2は、一般的なLSI20の構成の一例を表す図である。同図のLSI20は、CPU31に加えて、DDR32、RAM(Random Access Memory)33、ROM(Read Only Memory)34、入出力(I/O)35、A41、B42、C43等の多数のIPとを有する。このように、LSI20は、多数のIP等31〜43が組み合わされることによって構成される。
各IPは、RTLまたはネットリスト等の集積回路記述の状態で組み合わされる。本実施の形態例における集積回路最適化プログラム21は、集積回路記述SXに基づくLSI20におけるIP間またはひとつのIP内の重複回路をひとつの共有演算回路に置き換える変更を行うことによって、集積回路記述に基づくLSI20を圧縮するものである。
ここで、本実施の形態例における集積回路最適化プログラム21の処理の概要について説明する。
本実施の形態例における集積回路最適化プログラム21は、まず、入力信号に基づいて論理演算する複数の組合せ回路と、複数の組合せ回路からの出力信号を保持条件に基づいてそれぞれ保持する複数のフリップフロップとが記述された集積回路記述SXから、論理等価な組合せ回路であって対応するそれぞれのフリップフロップの保持条件が排他的である第1、2の組合せ回路を検出する(重複回路検出工程)。
そして、集積回路最適化プログラム21は、重複回路圧縮工程として、集積回路記述SXについて、第1、2の組合せ回路と論理等価な共有組合せ回路に第1、2の組合せ回路を置き換えると共に、第1、2の組合せ回路の第1、2の入力信号を、それぞれ対応する第1、2のフリップフロップの第1、2の保持条件に応じて選択し、共有組合せ回路に出力するセレクタ回路の記述を追加する。また、集積回路最適化プログラム21は、集積回路記述SXについて、第1、2の入力信号に基づく共有組合せ回路の出力信号をそれぞれ第1、2のフリップフロップに接続する記述を追加し、第1、2の組合せ回路の記述を削除する。
このように、本実施の形態例における集積回路最適化プログラム21は、第1、2の組合せ回路(重複回路)が検出された場合に、集積回路記述SXの記述を変更することで、集積回路記述SXに基づく回路の圧縮を行う。このため、処理対象の集積回路記述SXが、論理等価な複数の組合せ回路と、その出力信号を保持条件に基づいてそれぞれ保持する複数のフリップフロップとの記述を有し、それぞれのフリップフロップの保持条件が排他関係にあることが、最適化の対象となる集積回路記述SXの条件である。
ここで、組合せ回路とは、現在の入力信号のみで出力信号が決まる回路である。即ち、信号を保持しない回路であって、入力信号の変化が直ちに出力信号に伝搬する回路を示す。論理等価とは、組合せ回路の入力信号及び出力信号の真理値の組合せが同一であることを示す。フリップフロップの値の保持条件とは、例えば、フリップフロップを駆動するクロック信号、または、フリップフロップのイネーブル信号のいずれかまたは両方の信号の値からなり、入力信号を保持することを示す値の状態を示す。保持条件を満たさない場合、フリップフロップは、入力信号を新たに保持しない。これは、保持条件を満たさない場合、当該フリップフロップに信号を出力する組合せ回路は論理使用されないことを意味する。
そして、複数のフリップフロップの保持条件が排他関係にあるとは、複数のフリップフロップが値を保持するタイミングが重複しない、即ち、複数のフリップフロップが同一のタイミングで値を取得しないことを示す。これは、複数のフリップフロップにそれぞれ信号を出力する複数の組合せ回路が、同一のタイミングで論理使用されず、論理使用タイミングについても排他関係にあることを示す。
従って、論理等価な複数の組合せ回路に対応する複数のフリップフロップの保持条件が排他的であることは、当該複数のフリップフロップにそれぞれ信号を出力する複数の組合せ回路の論理使用タイミングも排他関係にある。よって、複数の組合せ回路の論理使用は競合せず、論理等価な複数の組合せ回路を1つの共有演算回路に共通化したとしても、フリップフロップに保持される値には影響がないといえる。
このため、本実施の形態例における集積回路最適化プログラム21では、集積回路記述SXが最適化の条件を満たす場合、重複回路を1つの共有演算回路に置き換える変更を集積回路記述SXに行うことに基づく回路圧縮が可能となる。また、本実施の形態例における集積回路最適化プログラム21は、集積回路記述SXが最適化の条件を満たす場合、条件に対応する記述箇所の定型的、規則的な記述変更によって重複回路の圧縮を可能にする。
続いて、最適化処理の説明の前に、本実施の形態例における集積回路最適化プログラム21による変更前の集積回路記述SXに基づくLSIと、変更後の集積回路記述SYに基づくLSIの一例を説明する。
図3は、本実施の形態例における集積回路最適化プログラム21による変更前の集積回路記述SXであって、最適化の条件を満たす集積回路記述SXに基づいたLSIの構成を表す例図である。同図のLSIが有するA(IP)41及びB(IP)42は、図2のLSI20が有するA(IP)41及びB(IP)42と同様である。
図3において、A(IP)41、B(IP)42は、それぞれ入力端子群Aia、入力端子群Bibからの入力信号に基づいて演算を行う組合せ回路である。この例において、演算回路Aca、Bcbは、入出力信号の真理値の組合せが同一である論理的に等価な組合せ回路である。従って、入力端子群Aia、入力端子群Bibからの入力信号、及び、演算回路Aca、Bcbの出力信号のビット幅は同一である。また、演算回路Aca、Bcbの出力信号は、それぞれフリップフロップ群Afa、群Bfbに出力される。フリップフロップ群Afa、Bfbは、それぞれクロックゲートAga、Bgbからクロック信号CLが出力される場合に、演算回路Aca、Bcbからの出力信号を保持する。続いて、クロックゲートAga、Bgbの動きについて説明する。
クロックゲートAga、Bgbは、クロックイネーブル信号CEがHレベルの場合に、クロック信号CLを出力する。この例において、クロックゲートBgbに入力される信号は、クロックイネーブル信号CEがインバータINによって反転された信号である。即ち、クロックゲートAgaと、クロックゲートBgbとに入力される信号の値は反転関係にある。
従って、クロックイネーブル信号CEがHレベルのとき、クロックゲートAgaからクロック信号CLが出力され、フリップフロップ群Afaの保持条件Aを満たすため、フリップフロップ群Afaは演算回路Acaからの出力信号を保持する。このとき、クロックゲートBgbには、Lレベルの信号が入力され、クロック信号CLをゲートする。このため、保持条件Bを満たさず、フリップフロップ群Bfbは値を保持しない。一方、クロックイネーブル信号CEがLレベルのときフリップフロップ群Bfaの保持条件Bを満たし、フリップフロップ群Bfbは演算回路Bcbからの出力信号を保持し、フリップフロップ群Afaは演算回路Acaからの出力信号を保持しない。
このように、図3のLSIにおいて、フリップフロップ群Afaとフリップフロップ群Bfbの値の保持条件は反転関係、即ち、排他関係にある。これは、演算回路Aca、Bcbが同一のタイミングで論理使用されないことを示す。このため、論理等価である演算回路Aca、Bcbがひとつの共通演算回路に置き換えられたとしても、フリップフロップ群Afa、Bfbが保持する値には影響がない。つまり、重複回路の共通化によって、図3のLSIの論理動作には影響が生じないことを示す。
図4は、図3の集積回路記述SXが、本実施の形態例における集積回路最適化プログラム21によって変更された集積回路記述SYに基づいたLSIの構成を表す例図である。この例において、演算回路Aca、Bcbのうち、ひとつの演算回路Acaが共有演算回路caに置き換えられている。そして、演算回路Acaの共有演算回路化により、入力端子群Aia、Bibの信号をフリップフロップ群Afa、Bfbの保持条件に基づいて選択し共有演算回路caに出力するセレクタ回路slが追加され、さらに共有演算回路caからの出力信号がフリップフロップ群Bfbに接続されている。
図4のLSIの動作について、具体的に説明する。クロックイネーブル信号CEがHレベルのとき(フリップフロップ群Afaの保持条件Aを満たしたとき)、セレクタ回路slは入力端子群Aiaからの信号を選択して共有演算回路caに出力し、共有演算回路caは入力端子群Aiaからの出力信号に基づく演算結果を示す信号を、直ちに(保持条件を満たした)フリップフロップ群Afaに出力する。これにより、フリップフロップ群Afaは、保持条件Aを満たしたとき、入力端子群Aiaに基づく共有演算回路caの演算値を保持する。このとき、保持条件がフリップフロップ群Afaと排他関係にあるフリップフロップ群Bfbは、新たに信号を保持しない。
一方、クロックイネーブル信号CEがLレベルのとき(フリップフロップ群Bfaの保持条件Bを満たしたとき)、セレクタ回路slは入力端子群Bibからの信号を選択して共有演算回路caに出力し、共有演算回路caは入力端子群Bibからの信号に基づく演算結果を示す信号を直ちにフリップフロップ群Bfbに出力する。これにより、フリップフロップ群Bfbは、保持条件Bを満たしたとき、入力端子群Bibに基づく共有演算回路caの演算値を保持する。このとき、フリップフロップ群Afaは新たに信号を保持しない。
このように、フリップフロップ群Afa、Bfbは、それぞれ保持条件を満たしたとき、対応する入力端子群Aia、Bibに基づく共有演算回路の演算結果を保持する。これは、変更前の図3のLSIの処理内容と同じである。本実施の形態例における集積回路最適化プログラム21は、図3のLSIが図4のようなLSIに最適化されるように、集積回路記述SXを記述変更する。この最適化によって、図4のように、重複している複数の論理等価な組合せ回路が1つに集約化され1つ以上の重複回路が削除されるため、消費電力が削減される。また、最適化によって追加されるセレクタ回路slよりも、削除される回路の規模(図4の例では、演算回路Bcb)の方が大きい場合、あわせて回路規模が縮小される。
以下、この最適化のための集積回路記述SXの変更処理について実施例に基づいて述べる。なお、前述したとおり、本実施の形態例における最適化対象の集積回路記述SXは、RTLまたはネットリストのいずれであってもよい。そこで、第1の実施の形態例では、初めにRTLの集積回路記述SXを最適化する処理について述べる。そして、第2の実施の形態例では、ネットリストの集積回路記述SXを最適化する処理について述べる。
[第1の実施の形態例]
第1の実施の形態例では、RTLの集積回路記述に基づくLSIを最適化する処理について例示する。初めに、本実施の形態例における最適化条件を満たすRTLの集積回路記述について例示する。
図5は、最適化対象のRTLの集積回路記述RX(図1のSX)を表す例図である。同図の集積回路記述RXは、本実施の形態例における最適化の条件を満たしており、モジュールF_TESTが記述される。モジュールとは、ひとまとまりの機能、要素である。
図5のモジュールF_TESTは、クロック信号ICLK、リセット信号IXRST、クロックセレクト信号ICKL_sel、信号IN_comm、IN_A、IN_Bを入力とし、信号OUT_A、OUT_Bを出力信号とするモジュールである。具体的に、モジュールF_TESTは、クロック信号ICLK、リセット信号IXRST、クロックセレクト信号ICKL_selに基づいて、入力信号IN_commと入力信号IN_Aの乗算値を出力信号OUT_Aとして、入力信号IN_commと入力信号IN_Bの乗算値を出力信号OUT_Bとして出力する。
より具体的に、モジュールF_TESTには、2つの乗算回路(以下、乗算回路A、乗算回路B)と、各乗算回路の出力信号を保持する2つのフリップフロップ(以下、フリップフロップA、フリップフロップB)が記述されている。また、フリップフロップAの保持条件(以下、保持条件A)とフリップフロップBの保持条件(保持条件B)とは、排他関係にある。以下、コードに基づいて詳細に説明する。
まず、1行目から4行目は、モジュールF_TESTの入出力信号が宣言される。5行目から10行目には、それぞれの入出力信号の型及びビット幅が定義されている。例えば、入力信号IN_commは8ビット(8行目)、入力信号IN_A、IN_Bは3ビット(9行目)、出力信号OUT_A、OUT_Bは11ビットの信号(10行目)であることが定義される。11行目には、11ビットの信号を保持するフリップフロップA(OUT_A)、フリップフロップB(OUT_B)が宣言されている。
続いて、コードc1(13行目から15行目)、コードc2(18行目から20行目)部分には、それぞれ、2つの乗算回路A、Bと、フリップフロップOUT_A、OUT_Bの値の保持条件A、Bについて記述される。
具体的に、コードc1には、信号IN_commと信号IN_Aとを乗算する乗算回路A(コードc5)と、保持条件Aに基づいて乗算回路Aからの出力信号を保持するフリップフロップOUT_Aが記述される。コードc1における13行目の記述は、クロック信号ICLKまたはリセット信号IXRSTに変化があったときに、14行、15行目の処理を行うことを示す。15行目の記述は、クロックセレクト信号ICKL_selがHレベルに変化したときに(コードc3、保持条件Aをみたすときに)、乗算回路Aの演算が行われ、演算結果がフリップフロップOUT_Aに保持される処理を示す。
続いて、コードc2(18行目から20行目)には、信号IN_commと信号IN_Bとを乗算する乗算回路B(コードc6)と、保持条件Bに基づいて乗算回路Bからの出力信号を保持するフリップフロップOUT_Bが記述される。コードc2における18行目の記述は、13行目と同処理を示す。20行目の記述は、クロックセレクト信号ICKL_selがLレベルに変化したときに(コードc4、保持条件Bをみたすときに)、乗算回路Bの演算が行われ、演算結果がフリップフロップOUT_Bに保持される処理を示す。
このように、モジュールF_TESTには、それぞれフリップフロップOUT_A、OUT_Bに信号を出力する乗算回路A、Bが記述される。また、乗算回路A、Bの入力信号のビット幅は同一であるため、論理等価な組合せ回路であるといえる。また、フリップフロップOUT_Aの保持条件Aはクロックセレクト信号ICKL_selがHレベルのとき、フリップフロップOUT_Bの保持条件Bはクロックセレクト信号ICKL_selがLレベルのときを示すため、保持条件Aと保持条件Bとは排他関係にあるといえる。このように、図5の集積回路記述RXは、最適化条件を満たしている。
続いて、図5で示した集積回路記述RXの最適化処理について、フローチャート図に基づいて説明する。
図6は、本実施の形態例における集積回路最適化プログラム21の処理を説明するフローチャート図である。同図のフローチャート図における工程S11〜S14は、重複回路の検出工程である。重複回路検出工程における全ての判定でYESの場合、対象の集積回路記述RXが最適化の条件に適合することを示し、複数の論理等価な組合せ回路(重複回路)が検出される。また、工程S15〜S18は、重複回路の圧縮工程である。集積回路記述RXについて、重複回路検出工程S11〜S14で検出された重複回路がひとつの共有演算回路に置き換わるように記述変更する。
図6において、集積回路最適化プログラム21は、まず、対象の集積回路記述RXから、論理等価な複数の組合せ回路を検出する(S11)。即ち、集積回路最適化プログラム21は、集積回路記述RXから、入出力信号の真理値の対応関係が同一である複数の組合せ回路を検出する。
論理等価な複数の組合せ回路が検出された場合(S11のYES)、集積回路最適化プログラム21は、続いて、検出された複数の組合せ回路を1つの共有の組合せ回路に圧縮することで、集積回路記述RXに基づくLSIの回路規模が縮小されるか否かを判定する(S12)。この工程S12は、集積回路記述RXの圧縮によって、集積回路記述RXに基づくLSIの消費電力の削減だけでなく、回路規模の縮小を目的とする場合に行われる。
組合せ回路は、論理使用されない期間にも電力を消費する。従って、工程S11で検出された論理等価な複数の組合せ回路を1つの共有演算回路に集約することで、LSIの消費電力が減少する。しかしながら、回路規模については、検出された論理等価な複数の組合せ回路の回路規模が小さい場合、1つの共有演算回路に集約したとしても、セレクタ回路が追加されることにより、かえって増大してしまうことがある。従って、消費電力の削減に加えて回路規模の縮小を目的とする場合、工程S12の判定が必要となる。なお、セレクタ回路の消費電力量は、論理等価な組合せ回路1つ分の消費電力量よりも小さいことを前提としている。
回路規模が縮小されることが判定された場合(S12のYES)、集積回路最適化プログラム21は、続いて、工程S11で検出された論理等価な複数の組合せ回路の出力信号がそれぞれフリップフロップに入力されているか否かを判定する(S13)。フリップフロップに入力されている場合(S13のYES)、集積回路最適化プログラム21は、工程S13で検出した複数のフリップフロップの値の保持条件が排他関係にあるか否かを判定する(S14)。排他関係にある場合(S14のYES)、集積回路記述は最適化の条件を満たすことを示す。
一方、工程S11〜S14のいずれかでNOと判定される場合、集積回路記述RXは最適化の条件を満たしていないことを示すため、最適化処理は行われない。ただし、前述したとおり、工程S12の判定については、必ずしも必須条件ではない。また、工程S11〜S14の処理順は、上記の順番に限定されるものではない。
集積回路記述RXが最適化条件を満たす場合(S14のYES)、集積回路最適化プログラム21は、重複回路圧縮工程S15〜S18を行う。
集積回路最適化プログラム21は、まず、集積回路記述RXに対して、論理等価な複数の組合せ回路の1つを共有演算回路に置き換え、共有演算回路への入力信号を保持条件に応じて選択するセレクタ回路の記述を追加する(S15)。次に、集積回路最適化プログラム21は、集積回路記述RXに対して、セレクタ回路からの出力信号を共有演算回路に接続する記述を追加する(S16)。続いて、集積回路最適化プログラム21は、集積回路記述RXに対して、保持条件に応じてセレクタ回路によって選択された信号に基づく共有演算回路からの出力信号を、当該保持条件に対応するフリップフロップに接続する記述を追加する(S17)。
そして、集積回路最適化プログラム21は、共有演算回路に置き換えられた組合せ回路の記述を集積回路記述RXから削除する(S18)。これにより、集積回路記述RXに基づいたLSIが回路圧縮され、最適化される。
続いて、図6のフローチャート図で記述した各工程の処理について、前述した図5の集積回路記述RXと、さらに詳細なフローチャート図(図7)に基づいて説明する。
図7は、本実施の形態例における集積回路最適化プログラム21の処理の各工程を詳細に説明するフローチャート図である。まず、重複回路検出工程S11〜S14の処理の詳細を、図5の集積回路記述RXに基づいて説明する。
まず、工程S11、S12では、集積回路最適化プログラム21は、集積回路記述RXから、論理等価な複数の演算回路の記述を抽出する(S11A)。具体的に、集積回路最適化プログラム21は、例えば、EDA(electronic design automation)ツール等の等価判定機能を用いて、集積回路記述RXから、論理等価な演算回路の記述を抽出する。
そして、集積回路最適化プログラム21は、論理等価な複数の演算回路の共有演算回路への置き換えに当たり、追加されるセレクタ回路の回路規模と、削除される演算回路の回路規模とを比較し、回路規模が削減されるか否かを判定する(S12A)。具体的に、集積回路最適化プログラム21は、回路の入出力ビット幅に応じて、演算回路やセレクタ回路の回路規模が予め保持されたライブラリ等を参照することによって回路規模を見積もり、判定する。
工程S11A、S12Aの結果、集約化によって回路規模が削減される複数の論理等価な演算回路の記述が抽出されると、集積回路最適化プログラム21は、抽出された記述を等価演算回路リストL1として出力する。
図8は、本実施の形態例における集積回路最適化プログラム21が出力するリストL1〜L3の例を表す図である。同図には、図5の集積回路記述RXを処理対象とする場合における等価演算回路リスト(上部)L1、FFリスト(中央部)L2、保持条件リスト(下部)L3の例が表されている。
図5の集積回路記述RXに基づくと、本実施の形態例における集積回路最適化プログラム21は、論理等価な複数の演算回路として、同一の乗算回路を示す2つの乗算回路A(IN_comm*IN_A)、乗算回路B(IN_comm*IN_B)の記述(15行目、20行目)を抽出する(図7のS11A)。このとき、集積回路最適化プログラム21は、乗算回路A、Bの入出力信号のビット幅が同一であることを示すために、入力信号のビット幅を示すコードの記述(8行目、9行目)をあわせて抽出する。
そして、集積回路最適化プログラム21は、最適化によって回路規模が縮小されるか否かを判定する(図7のS12A)。図5の集積回路記述RXにおいて、乗算回路A、Bへの入力信号を選択するセレクタ回路よりも、共通化によって削除される乗算回路ひとつ分の回路規模の方が大きい。従って、集約化によって回路規模が縮小されることが判定される。そのため、乗算回路A、Bを示す記述(8行目、9行目)、乗算回路A、Bの入力信号IN_comm、IN_A、IN_Bのビット幅を示すコード(15行目、20行目)を有する図8の等価演算回路リストL1が出力される。
図7のフローチャート図に戻り、集積回路最適化プログラム21は、工程S13として、等価演算回路リストL1(図8)に基づいて、各等価演算回路の出力信号がフリップフロップに入力されているか否かを判定する。フリップフロップに入力されている場合、集積回路最適化プログラム21は、フリップフロップを示す記述を集積回路記述RXから抽出し、FFリストL2として出力する(S13A)。
具体的に、集積回路最適化プログラム21は、等価演算回路リストL1(図8)における乗算回路A、B(15行目、20行目)の出力信号がフリップフロップに入力されているか否かを判定する。この判定は、例えば、乗算回路A、Bの記述をトレースすることによって行われる。前述したとおり、図5の集積回路記述RXのコードc1、c2によると、乗算回路A、Bの出力信号はフリップフロップOUT_A、OUT_Bに出力されていることがわかる。従って、図5のコードc1(13行目〜15行目)、c2(18行目〜20行目)のコードを有する図8のFFリストL2が出力される。
図7のフローチャート図に戻り、集積回路最適化プログラム21は、工程S14として、前工程で抽出されたFFリストL2に基づいて、FFリストL2のフリップフロップの保持条件が排他関係にあるか否かを判定する。排他関係にある場合、集積回路最適化プログラム21は、保持条件を示す記述を集積回路記述から抽出し、保持条件リストL3として出力する(S14A)。
具体的に、集積回路最適化プログラム21は、FFリストL2(図8)におけるフリップフロップOUT_A、OUT_Bの保持条件を、集積回路記述RXから抽出する。この処理は、例えば、乗算回路A、Bの出力信号のフリップフロップOUT_A、OUT_Bへの入力を示す記述の前後の記述をトレースすることによって行われる。前述したとおり、図5の集積回路記述RXのコードc3、c4によると、フリップフロップOUT_Aの保持条件Aは「ICLK_sel」(15行目)、フリップフロップOUT_Bの保持条件Bは「!ICLK_sel」(20行目)であることがわかる。“!”は、反転値を示すため、フリップフロップOUT_A、OUT_Bの保持条件は反転関係、即ち、排他関係にあるといえる。これにより、図5の15行目、20行目の記述を有する図8の保持条件リストL3が出力される。
図7のS11A〜S14Aの処理により、図5の集積回路記述RXが最適化の条件を満たすことが判定され、図8の各リストL1〜L3が出力される。続いて、集積回路最適化プログラム21は、重複回路圧縮工程S15〜S17として、図8の各リストL1〜L3に基づいて、集積回路記述RXの記述を変更する。
集積回路最適化プログラム21は、工程S15として、論理等価回路リストL1と保持条件リストL3とに基づいて、集積回路記述RXに対してセレクタ回路の記述を追加する。具体的に、集積回路最適化プログラム21は、保持条件リストL3の保持条件に基づいて、論理等価回路リストL1における論理等価な複数の演算回路の入力信号を選択し、置き換えた共有演算回路に出力するセレクタ回路の記述を追加する。
より具体的に、図5の集積回路記述RXに基づいて説明する。まず、集積回路最適化プログラム21は、追加するセレクタ回路のセレクト対象信号を抽出する。セレクト対象信号は、論理等価な複数の演算回路(乗算回路A、B)の入力信号のうち、値の異なる信号を示す。具体的に、乗算回路A、Bの入力信号IN_comm、IN_A、IN_Bのうち、入力信号IN_commは共通であるため、セレクト対象信号として、信号IN_A、IN_Bが抽出される。なお、値の異なる入力信号が複数ある場合は、複数の入力信号がセレクト対象信号となる。
次に、集積回路最適化プログラム21は、保持条件リストL3(図8)に基づいて、保持条件A(15行目)に応答してセレクト対象信号IN_Aを、保持条件B(20行目)に応答してセレクト対象信号IN_Bを選択するセレクタ回路の記述を、集積回路記述RXに追加する。即ち、クロックセレクト信号ICLK_selがHレベルのとき(保持条件Aを満たすとき)信号IN_Aを、クロックセレクト信号ICLK_selがLレベルのとき(保持条件Bを満たすとき)信号IN_Bを選択するセレクタ回路の記述が追加される。
図9は、本実施の形態例における集積回路最適化プログラム21によって変更が加えられた図5の集積回路記述RY(SY)を表す例図である。同図の点線で囲まれたコードm1〜m5は、集積回路最適化プログラム21によって記述が変更されたコードを示す。
図9の変更後の集積回路記述RYにおいて、コードm1、m2の記述が工程S15によって追加される。コードm1の13行目の記述は、セレクタ回路から出力される信号muxed_sigの定義を示す。この例において、セレクタ回路のセレクト対象信号IN_A、IN_Bのビット幅は、3ビットである。従って、3ビットの信号muxed_sigが定義される。そして、コードm2の16行目の記述は、クロックセレクト信号ICLK_selがHレベルのとき(保持条件Aが満たされたとき)、信号IN_Aを、クロックセレクト信号ICLK_selがHレベルではないとき(保持条件Bが満たされたとき)、信号IN_Bを選択し、信号muxed_sigにセットするセレクタ回路の記述である。このように、セレクタ回路の記述が追加される。
図7のフローチャート図に戻り、工程S16として、集積回路最適化プログラム21は、集積回路記述に対して、追加したセレクタ回路からの出力信号muxed_sigを共有演算回路に接続する記述を追加する。
図9の変更後の集積回路記述RYにおいて、コードm3の記述が工程S16によって追加される。この例において、乗算回路A、Bは、信号IN_commと、セレクタ回路によって選択された信号muxed_sigとの乗算を行う共有演算回路comm_calc(IN_comm*muxed_sig)に置き換えられている。そのため、共有演算回路comm_calcの演算対象の信号を、共通信号IN_commと信号muxed_sigとすることによって、セレクタ回路からの出力信号muxed_sigが共有演算回路に接続される。
なお、図9の集積回路記述RYにおいて、集積回路最適化プログラム21は、乗算回路A、Bを、別の共有演算回路comm_calcに置き換えている。しかし、集積回路最適化プログラム21は、乗算回路A、Bのうちいずれかの演算回路を共有演算回路としてもよい。
図7のフローチャート図に戻り、工程S17として、集積回路最適化プログラム21は、集積回路記述に対して、保持条件A、Bに応じてセレクタ回路によって選択された信号muxed_sig(IN_A/IN_B)に基づく共有演算回路comm_calcからの出力信号を、当該保持条件のフリップフロップOUT_A、OUT_Bに接続する記述を追加する。
図9の変更後の集積回路記述RYにおいて、コードm4、m5の記述が、工程S17によって追加される。この例では、コードm4、m5において、フリップフロップに乗算回路の演算結果を出力する記述(21行目、26行目)において、乗算回路A、Bが共有演算回路comm_calcに置き換えられることによって、共有演算回路comm_calcからの各出力信号が各フリップフロップOUT_A、OUT_Bに接続される。
具体的に、21行目では、乗算回路Aの記述が共有演算回路comm_calcに置き換えられ、保持条件Aを満たすとき、セレクタ回路によって選択される信号muxed_sig(IN_A)と信号IN_commとの乗算を行う共有演算回路comm_calcの出力信号がフリップフロップOUT_Aに保持されるようになる。また、26行目では、乗算回路Bの記述が共有演算回路comm_calcに置き換えられ、保持条件Bを満たすとき、セレクタ回路によって選択される信号muxed_sig(IN_B)と信号IN_commとの乗算を行う共有演算回路comm_calcの出力信号がフリップフロップOUT_Bに保持されるようになる。
図7のフローチャート図に戻り、工程S18として、集積回路最適化プログラム21は、共有演算回路comm_calcに置き換えられた複数の論理等価な乗算回路A、Bの記述を集積回路記述から削除する。図9の変更後の集積回路記述RYにおいて、21行、26行目における乗算回路A、Bが乗算回路comm_calcに置き換えられたことにより、乗算回路A、Bの記述が実質的に削除されている。
このような定型的な記述変更処理により、図9の集積回路記述RYにおいて、乗算回路A、Bがひとつの共有演算回路に置き換えられ、乗算回路1つ分の回路が圧縮される。これにより、乗算回路が1つ分削除されるため、消費電力量が削減される。また、削除した乗算回路よりセレクタ回路の回路規模が小さいため、回路規模についても合わせて縮小される。
このようにして、本実施の形態例における集積回路最適化プログラムは、入力信号に基づいて論理演算する複数の組合せ回路と、複数の組合せ回路からの出力信号を保持条件に基づいてそれぞれ保持する複数のフリップフロップとが記述された集積回路記述から、論理等価な組合せ回路であって対応するそれぞれの前記フリップフロップの保持条件が排他関係にある複数の組合せ回路を検出する。
そして、集積回路最適化プログラムは、検出した複数の組合せ回路をそれと論理等価な共有組合せ回路に置き換えると共に、複数の組合せ回路の入力信号をそれぞれ対応する各フリップフロップの保持条件に応じて選択し共有組合せ回路に出力するセレクタ回路を追加し、それぞれの入力信号に基づく共有組合せ回路の出力信号を各フリップフロップに接続するように、集積回路記述の記述を変更する。そして、集積回路最適化プログラムは、複数の組合せ回路の記述を集積回路記述から削除する。
これにより、変更後の集積回路記述に基づくLSIが圧縮され、最適化される。回路が圧縮されることにより、変更後の集積回路記述に基づくLSIの消費電力量が削減される。
このように、本実施の形態例における集積回路最適化プログラムは、効率的に最適化可能な集積回路記述の条件(最適化の条件)を見出したことによって、集積回路記述が条件を満たすか否かを記述に基づいて判定可能とし、条件を満たす場合に、条件に対応する記述箇所を定型的に変更することによって、重複回路の検出処理及び重複回路の圧縮処理を行うことができる。このため、集積回路最適化プログラムは、例えば、集積回路記述が複数の異なる設計者によって記述されている場合や、集積回路記述のアルゴリズムが複雑な場合、さらに、集積回路記述のコード量が膨大な場合であっても、集積回路記述に基づいて、規則的に及び定型的に、重複回路を検出し圧縮のための記述変更を行うことができる。これにより、集積回路の効率的な最適化が可能となる。
さらに、本実施の形態例における集積回路最適化プログラムは、最適化処理によって削除される演算回路よりも、追加するセレクタ回路の規模(面積)が小さいか否かを判定し、回路規模が削減される場合にのみ、最適化処理を行ってもよい。これによると、最適化処理によって、LSIの消費電力量の削減だけでなく、LSIの回路規模の縮小もあわせて実現される。
なお、本実施の形態例では、集積回路記述から、論理等価な2つの組合せ回路を検出して集約化する場合を例示した。しかしながら、集約化する対象の論理等価な組合せ回路は3つ以上であってもよい。続いて、論理等価な組合せ回路が3つ検出される場合の集積回路記述の変更処理について説明する。
この場合、集積回路最適化プログラムは、記述を追加するセレクタ回路について、さらに、第3の組合せ回路の入力信号を、当該組合せ回路の出力信号を保持するフリップフロップの保持条件に応じて選択させ、共有演算回路に入力させる。このとき、セレクタ回路は、第1〜3の組合せ回路に対応する各入力信号のうち、異なる入力信号を、各保持条件に応じて選択する。
そして、集積回路最適化プログラムは、共有演算回路の出力信号を第3の組合せ回路に対応するフリップフロップに接続させるような記述を集積回路記述に追加する。そして、集積回路最適化プログラムは、第1、2の組合せ回路に加えて、第3の組合せ回路の記述を集積回路記述から削除する。
これにより、集積回路最適化プログラムは、論理等価な組合せ回路を3つ以上有するLSIが記述された集積回路記述について、論理等価な組合せ回路を1つの共有演算回路に集約化することができ、LSIをより効果的に圧縮することができる。
続いて、第2の実施の形態例として、RTLの集積回路記述が論理合成されることによって生成されるネットリストの集積回路記述を最適化する処理について述べる。
[第2の実施の形態例]
第2の実施の形態例では、ネットリストの集積回路記述SXに基づくLSIを最適化する処理について例示する。まず、本実施の形態例における最適化条件を満たすネットリストの集積回路記述SXについて例示する。
図10、図11は、最適化対象のネットリストの集積回路記述NX1、NX2(SX)を表す例図である。図10、図11のネットリストの集積回路記述NX1、NX2は、図5のRTLの集積回路記述RXが論理合成され、生成されたネットリストである。従って、図10、図11の集積回路記述NX1、NX2は、図5の集積回路記述RXと同一の処理が記述され、最適化の条件を満たしている。処理の内容については、図5で前述したとおりである。
そこで、図10、図11の集積回路記述NX1、NX2における、乗算回路A、B、フリップフロップOUT_A、OUT_B、フリップフロップOUT_A、OUT_Bの保持条件の関係に関連する記述について説明する。
まず、図10の集積回路記述NX1のコードc11は乗算回路B(mult_B)、コードc12は乗算回路A(mult_A)の記述を示す。具体的に、コードc11には、信号({n170,n150,n13,n110,n90,n70,n50,n30}(以下、信号n170〜n30))と信号IN_Bとを乗算して、出力信号({N25,N24,N23,N22,N21,N20,N19,N18,N17,N16,N15}(以下、N25〜N15))として出力する乗算回路Bが記述される。また、コードc12には、乗算回路Bと同一の信号n170〜n30と、信号IN_Aとを乗算して、出力信号({N12,N11,N10,N9,N8,N7,N6,N5,N4,N3,N2}(以下、N12〜N2))として出力する乗算回路Aが記述される。
続いて、図11の集積回路記述NX2のコードc13は、フリップフロップOUT_A、OUT_Bの記述を示す。具体的に、コードc13の37行目から47行目には、クロック信号net19がHレベルのとき、乗算回路A(mult_A)からの出力信号N12〜N2を保持するフリップフロップOUT_Aが記述される。また、コードc13の49行目から59行目には、クロック信号net26がHレベルのときに、乗算回路B(mult_B)からの出力信号N25〜N15を保持するフリップフロップOUT_Bが記述される。
そして、コードc13の記述によると、フリップフロップOUT_Aの保持条件Aはクロック信号net19がHレベルのときを示し、フリップフロップOUT_Bの保持条件Bはクロック信号net26がHレベルのときを示すことがわかる。続いて、クロック信号net19、net26を出力するクロックゲート回路の記述について説明する。
図11のコードc14は、クロック信号net19、net26を出力するクロックゲート回路の記述である。具体的に、コードc14の34行目において、信号n190がHレベルのとき、モジュールclk_gate_OUT_A_reg(クロックゲート回路A)からHレベルのクロック信号net19が出力されることが記述される。また、35行目において、信号n180がHレベルのとき、モジュールclk_gate_OUT_B_reg(クロックゲート回路B)からHレベルのクロック信号net26が出力されることが記述される。続いて、クロックゲート回路A、Bの入力信号n190、n180を出力する演算モジュールINVERTERの記述について説明する。
図11のコードc15には、クロックゲート回路A、Bの入力信号n190、n180を出力する演算モジュールINVERTERが記述される。具体的に、コードc15の31行目において、演算モジュールINVERTERは、入力とするクロックセレクト信号ICKL_selを反転して信号n180として出力することが記述される。また、32行目において、演算モジュールINVERTERは、入力とする信号n180を反転して信号n190として出力することが記述される。
即ち、Hレベルのクロックセレクト信号ICKL_selが入力されたとき、演算モジュールINVERTER(31行目)は、Lレベルの信号n180を出力し、演算モジュールINVERTER(32行目)は、Lレベルの信号n180に基づいて、Hレベルの信号n190を出力する。一方、Lレベルのクロックセレクト信号ICKL_selが入力されたとき、各演算モジュールINVERTERから、Hレベルの信号n180と、Lレベルの信号n190が出力される。つまり、信号n180と信号n190とは、常に反転関係にあることがわかる。
信号n180と信号n190が反転関係にあるため、信号n190に基づいてクロックゲート回路A(34行目)から出力されるクロック信号net19の値と、信号n180に基づいてクロックゲート回路B(35行目)から出力されるクロック信号net26の値は、同時にHレベルになることがない。コードc13の説明で前述したように、フリップフロップOUT_Aはクロック信号net19がHレベルのとき、フリップフロップOUT_Bの保持条件Bはクロック信号net26がHレベルのとき、値を保持するため、保持条件Aと保持条件Bとは反転関係、即ち、排他関係にあることがわかる。
このように、図10、図11の集積回路記述NX1、NX2の記述によると、図5と同様に、2つの論理等価な組合せ回路(乗算回路A、B)と、保持条件A、Bに基づいて乗算回路A、Bからの出力信号を保持するフリップフロップOUT_A、OUT_Bとが記述されていることがわかる。また、保持条件A、Bは排他関係にある。
続いて、図10、図11で示した集積回路記述NX1、NX2の最適化処理について、フローチャート図に基づいて説明する。
図12は、本実施の形態例における集積回路最適化プログラム21の処理を説明するフローチャート図である。同図のフローチャート図は、第1の実施の形態例における図6のフローチャート図と一部の処理を除いて同じである。図12と図6のフローチャート図は、工程S21及び工程S23についてのみ異なる。そのため、ここでは、工程S21と工程S23についてのみ説明する。
前述したとおり、図6のフローチャート図では、集積回路最適化プログラム21は、ツール等を用いて集積回路記述から論理等価な演算回路の記述を抽出する(S11)。それに対して、図12のフローチャート図では、集積回路最適化プログラム21は、同じ演算モジュールを複数箇所でインスタンスしているか否かを判定することによって、集積回路記述から論理等価な演算回路の記述を抽出する(S21)。
インスタンスとは、定義済みの演算モジュールを実体化することを示す。そのため、同一の演算モジュールを複数箇所でインスタンスすることは、同一の演算モジュールを複数箇所で呼び出すことを示す。同一の演算モジュールにおける演算処理及び入出力信号は、同一である。従って、同一の演算モジュールを複数箇所でインスタンスしている場合、実質的に、集積回路記述NXに論理等価な複数の演算回路が記述されていることを意味する。このため、集積回路最適化プログラム21は、同一の演算モジュールが複数箇所でインスタンスされているか否かを判定することによって、論理等価な演算回路の記述を抽出する。
また、工程S23では、工程S21で検出された論理等価な複数の演算回路を示す演算モジュールの出力信号が、フリップフロップに入力されているか否かが判定される。その他の工程の処理は、図6のフローチャート図と同様である。
なお、この例において、RTLの集積回路記述を対象とする第1の実施の形態例では図6のフローチャート図を、ネットリストの集積回路記述を対象とする第2の実施の形態例では図12のフローチャート図を適用しているが、この例に限定されるものではない。RTLの集積回路記述に図12のフローチャート図を適用してもよいし、ネットリストの集積回路記述に、図6のフローチャート図を適用してもよい。
続いて、図12のフローチャート図で記述した各工程の処理について、図10、図11のネットリストの集積回路記述NX1、NX2と、詳細なフローチャート図(図13)に基づいて説明する。
図13は、本実施の形態例における集積回路最適化プログラム21の処理の各工程を詳細に説明するフローチャート図である。同図のフローチャート図についても、第1の実施の形態例における図7のフローチャート図と工程S21A、S23Aを除いて同じである。
図13のフローチャート図において、集積回路最適化プログラム21は、集積回路記述から、同一の演算モジュールをインスタンスしている記述を抽出し(S21A)、回路規模が削減されると判定された場合(S22A)、等価演算回路リストとして出力する。そして、工程S23Aでは、集積回路最適化プログラム21は、等価演算回路リストL1が有する演算モジュールの記述に基づいて、各演算モジュールの出力信号がフリップフロップに入力されているか否かを判定し、FFリストL2として出力する。その他の工程の処理は、図7のフローチャート図と同様である。
続いて、図10、図11の集積回路記述NX1、NX2に基づいて、図13のフローチャート図における各工程の処理について説明する。
図14、図15は、本実施の形態例における集積回路最適化プログラム21が出力する各リストL1〜L3の例を表す図である。図14には、図10、図11の集積回路記述NX1、NX2を処理対象とする場合の等価演算回路リスト(上部)L1、保持条件リスト(下部)L3の例が表されている。そして、図15には、FFリストL2の例が表されている。
まず、本実施の形態例における集積回路最適化プログラム21は、前述した図10、図11の集積回路記述NX1、NX2から、同一の演算モジュールを複数箇所でインスタンスしている記述を抽出する(図13のS21A)。例えば、集積回路最適化プログラム21は、予め候補として挙げる演算モジュール(MULTIPLIER等)の一覧に基づいて、一覧に挙げられた演算モジュールが、集積回路記述において複数箇所でインスタンスされているときに、当該演算モジュールの記述を抽出する。また、集積回路最適化プログラム21は、第1の実施の形態例と同様に、最適化によって回路規模が縮小される場合に(S22A)、等価演算回路リストを出力する。
図10、図11の集積回路記述NX1、NX2では、演算モジュールMULTIPLIERが、演算モジュールmult_A(乗算回路A)、mult_B(乗算回路B)として複数箇所でインスタンスされている(11行目〜14行目)。これにより、演算モジュールmult_A、mult_Bの記述を有する図14の等価演算回路リストL1が出力される。なお、同一の演算モジュールの場合、入出力信号のビット幅も同一である。そのため、図14の等価演算回路リストL1には、図8の等価演算回路リストL1とは異なり、入力信号のビット幅の定義を示す記述は含まれない。
続いて、集積回路最適化プログラム21は、等価演算回路リストL1が有する演算モジュールmult_A、mult_Bの出力信号が、それぞれフリップフロップに入力されているか否かを判定する(S23A)。この判定は、例えば、演算モジュールmult_A、mult_B出力信号を入力とするフリップフロップの演算モジュールが記述されているか否かが検索されることによって行われる。
前述したとおり、図10の集積回路記述NX1のコードc11、c12の記述と、図11の集積回路記述NX2のコードc13の記述とによると、演算モジュールmult_A、mult_Bの出力信号は、それぞれフリップフロップOUT_A、OUT_Bに入力されることがわかる。これにより、図11のコードc13(37行目〜59行目)を有する図15のFFリストL2が出力される。
続いて、集積回路最適化プログラム21は、図15のFFリストL2が有するフリップフロップOUT_A、OUT_Bの保持条件を、集積回路記述から抽出する(S24A)。この処理は、例えば、フリップフロップOUT_A、OUT_Bへの入力条件を示す信号をバックトレースすることによって行われる。前述したとおり、図11の集積回路記述NX2のコードc14、c15によると、フリップフロップOUT_Aの保持条件Aを示す信号と、フリップフロップOUT_Bの保持条件Bを示す信号の値は反転関係にある。従って、保持条件Aと保持条件Bとは、排他関係にあることがわかる。これにより、保持条件を示す図11のコードc14、c15(31行目〜35行目)を有する図14の保持条件リストL3が出力される。
続いて、集積回路最適化プログラム21は、重複回路圧縮工程S25〜S27として、図14、図15の各リストL1〜L3に基づいて、集積回路記述NX1、NX2の記述を変更する。
集積回路最適化プログラム21は、論理等価回路リストL1と保持条件リストL3とに基づいて、集積回路記述に対してセレクタ回路の記述を追加する(図13のS25)。具体的に、まず、集積回路最適化プログラム21は、セレクタ回路のセレクト対象信号を抽出する。論理等価回路リストL1(図14)が有する演算モジュールmult_A、mult_Bの入力信号のうち、入力信号n170〜n30は共通であるため、セレクト対象信号として、信号IN_A、IN_Bが抽出される。
続いて、集積回路最適化プログラム21は、保持条件リストL3(図14)に基づいて、保持条件Aに応答してセレクト対象信号IN_Aを、保持条件Bに応答してセレクト対象信号IN_Bを選択するセレクタ回路の記述を、集積回路記述NX1、NX2に追加する。
図11で前述したとおり、保持条件Aはクロック信号net19がHレベル、保持条件Bはクロック信号net26がHレベルのときを示し、クロック信号net19がHレベルのとき信号n190はHレベル、クロック信号net26がHレベルのとき信号n190はLレベルである。このため、集積回路最適化プログラム21は、セレクタ回路のセレクト信号を信号n190とする。そこで、信号n190がHレベルのとき(即ち、保持条件Aを満たすとき)セレクト対象信号IN_Aを、信号n190がLレベルのとき(即ち、保持条件Bを満たすとき)セレクト対象信号IN_Bを選択するセレクタ回路の記述が追加される。
図16、図17は、本実施の形態例における集積回路最適化プログラム21によって変更が加えられた図10、図11の集積回路記述LY1、LY2(SY)を表す例図である。同図の点線で囲まれたコードm11〜m13は、集積回路最適化プログラム21によって記述が変更されたコードを示す。
図16の変更後の集積回路記述NY1において、コードm11は、工程S25によって追加されるセレクタ回路の記述を示す。具体的に、コードm11の12行目の記述は、セレクタ回路から出力される3ビットの信号muxedの定義を示す。そして、13行目〜15行目の記述は、信号n190がHレベルのときに信号IN_Aを、信号n190がLレベルのときに信号IN_Bを選択し、信号muxedにセットするセレクタ回路を示す。この記述によりセレクタ回路が追加される。
続いて、追加したセレクタ回路からの出力信号muxedが共有演算回路に接続されるように、集積回路記述が記述変更される(図13のS26)。図16の変更後の集積回路記述NY1において、コードm12の記述が工程S26によって追加される。この例において、演算モジュールmult_A、mult_B(17行目〜20行目)は、共有演算回路mult_C(21、22行目)に置き換えられる。このため、コードm12において、共有演算回路の演算対象の信号を、共通信号n170〜n30と、セレクタ回路によって選択された信号muxedとにすることによって、セレクタ回路からの出力信号muxedが共有演算回路mult_Cに接続される。
続いて、集積回路最適化プログラム21は、集積回路記述に、保持条件A、B(信号n190がHレベル/Lレベル)に応じてセレクタ回路によって選択された信号muxed(IN_A/IN_B)に基づく共有演算回路からの出力信号を、当該保持条件に対応するフリップフロップOUT_A、OUT_Bに接続するように記述を追加する(図13のS27)。
図17の変更後の集積回路記述LY2において、コードm13における下線部の記述が工程S27によって変更される。コードm13の下線部では、保持条件Bを満たすとき(クロック信号net26がHレベルのとき)、共有演算回路mult_C(図16の21、22行目)からの出力信号N12〜N2がフリップフロップOUT_Bに保持されるように変更されている。なお、フリップフロップOUT_Aについては、もともと出力信号N12〜N2を保持するように記述されているため(図17の46〜56行目)、記述は変更されない。
そして、集積回路最適化プログラム21は、共有演算回路mult_C(図16の21、22行目)に置き換えた演算モジュールmult_A、mult_Bの記述(図16の17行目〜20行目)を集積回路記述から削除する(図13のS28)。図16の変更後の集積回路記述LY1において、演算モジュールmult_A、mult_Bの記述が削除されている(図16の17行目〜20行目)。行頭の//は、行のコードが無効であることを示すコードである。
このような定型的な記述変更処理により、図16、図17の集積回路記述LY1、LY2において、乗算回路A(mult_A)、B(mult_B)がひとつの共有演算回路(mult_C)に置き換えられ、乗算回路1つ分の回路が圧縮される。これにより、乗算回路が1つ分削除されるため、消費電力量が削減される。また、削除した乗算回路よりセレクタ回路の回路規模が小さいため、回路規模についても合わせて縮小される。
以上のようにして、本実施の形態例における集積回路最適化プログラムは、入力信号に基づいて論理演算する複数の組合せ回路と、複数の組合せ回路からの出力信号を保持条件に基づいてそれぞれ保持する複数のフリップフロップとが記述された集積回路記述から、論理等価な組合せ回路であって対応するそれぞれの前記フリップフロップの保持条件が排他関係にある複数の組合せ回路を検出する。
そして、集積回路最適化プログラムは、検出した複数の組合せ回路と論理等価な共有組合せ回路に当該複数の組合せ回路を置き換えると共に、複数の組合せ回路の入力信号をそれぞれ対応する各フリップフロップの保持条件に応じて選択し共有組合せ回路に出力するセレクタ回路を追加し、それぞれの入力信号に基づく共有組合せ回路の出力信号を各フリップフロップに接続するように、集積回路記述の記述を変更する。そして、集積回路最適化プログラムは、複数の組合せ回路の記述を集積回路記述から削除する。
このようにして、本実施の形態例における集積回路最適化プログラムは、対象の集積回路記述がRTLであっても、ネットリストであっても、集積回路記述の変更によって、集積回路記述に基づくLSIを圧縮し、最適化することができる。これにより、変更後の集積回路記述に基づくLSIの消費電力が削減される。
また、本実施の形態例における集積回路最適化プログラムは、効率的に最適化可能な集積回路記述の条件(最適化の条件)を見出したことによって、集積回路記述が条件を満たすか否かを記述に基づいて判定可能とし、条件を満たす場合に、条件に対応する記述箇所を定型的に変更することによって、重複回路の検出処理及び重複回路の圧縮処理を行うことができる。このため、集積回路最適化プログラムは、集積回路記述に基づいて、規則的に及び定型的に、重複回路を検出し圧縮のための記述変更を行うことができる。これにより、集積回路の効率的な最適化が可能となる。
さらに、本実施の形態例における集積回路最適化プログラムは、最適化処理によって削除される演算回路よりも、追加するセレクタ回路の規模(面積)が小さいか否かを判定し、回路規模が削減される場合にのみ、最適化処理を行ってもよい。これによると、最適化処理によって、LSIの消費電力量の削減だけでなく、LSIの回路規模の縮小もあわせて実現される。
なお、本実施の形態例においても、集約化対象の論理等価な組合せ回路は3つ以上であってもよい。これにより、集積回路最適化プログラムは、LSIをより効果的に圧縮することができる。
以上の実施の形態をまとめると、次の付記のとおりである。
(付記1)
集積回路が記述された集積回路記述を記述変更によって最適化する最適化処理をコンピュータに実行させるコンピュータ読み取り可能な集積回路最適化プログラムにおいて、
前記最適化処理は、
入力信号に基づいて論理演算する複数の組合せ回路と、前記複数の組合せ回路からの出力信号を保持条件に基づいてそれぞれ保持する複数のフリップフロップとが記述された前記集積回路記述から、論理等価な前記組合せ回路であって対応するそれぞれの前記フリップフロップの前記保持条件が排他関係にある第1、2の組合せ回路を検出する重複回路検出工程と、
前記集積回路記述の重複回路圧縮工程とを有し、
前記重複回路圧縮工程は、
前記第1、2の組合せ回路と論理等価な共有組合せ回路に前記第1、2の組合せ回路を置き換えると共に、前記第1、2の組合せ回路の第1、2の入力信号を、それぞれ対応する第1、2のフリップフロップの第1、2の保持条件に応じて選択し、前記共有組合せ回路に出力するセレクタ回路の記述を前記集積回路記述に追加する追加工程と、
前記第1、2の入力信号に基づく前記共有組合せ回路の出力信号をそれぞれ前記第1、2のフリップフロップに接続する記述を前記集積回路記述に追加する接続工程と、
前記第1、2の組合せ回路の記述を前記集積回路記述から削除する削除工程と、
を有する集積回路最適化プログラム。
(付記2)
付記1において、
前記重複回路検出工程において、前記組合せ回路の前記入力信号及び前記出力信号の真理値の組合せが同一である場合に論理等価である集積回路最適化プログラム。
(付記3)
付記1または2において、
前記保持条件は、前記フリップフロップをそれぞれ駆動するクロック信号、または、前記フリップフロップのイネーブル信号のいずれかまたは両方の状態である集積回路最適化プログラム。
(付記4)
付記1乃至3のいずれかにおいて、
前記セレクタ回路は、第1、2の入力信号のうち異なる入力信号を、前記第1、2の保持条件に応じて選択する集積回路最適化プログラム。
(付記5)
付記1乃至4のいずれかにおいて、
前記重複回路検出工程は、前記第1、2の組合せ回路に加えて、当該第1、2の組合せ回路と論理等価な前記組合せ回路であって対応する前記フリップフロップの前記保持条件が前記第1、2の保持条件とそれぞれ排他関係にある第3の組合せ回路を検出し、
前記追加工程は、さらに、前記第3の組合せ回路の第3の入力信号を第3のフリップフロップの第3の保持条件に応じて選択するような前記セレクタ回路の記述を追加し、
前記接続工程は、さらに、前記第3の入力信号に基づく前記共有組合せ回路の前記出力信号を前記第3のフリップフロップに接続する記述を追加し、
前記削除工程は、さらに、前記第3の組合せ回路の記述を削除する集積回路最適化プログラム。
(付記6)
付記5において、
前記セレクタ回路は、第1乃至3の入力信号のうち異なる入力信号を、前記第1乃至3の保持条件に応じて選択する集積回路最適化プログラム。
(付記7)
付記1乃至6のいずれかにおいて、
前記重複回路圧縮工程は、前記セレクタ回路よりも、前記削除工程で記述が削除される組合せ回路の面積が大きい場合に実行される集積回路最適化プログラム。
(付記8)
付記1乃至7のいずれかにおいて、
前記集積回路記述は、ハードウェア記述言語、またはネットリストによって記述されている集積回路最適化プログラム。
(付記9)
集積回路が記述された集積回路記述を記述変更によって最適化する集積回路最適化装置であって、
入力信号に基づいて論理演算する複数の組合せ回路と、前記複数の組合せ回路からの出力信号を保持条件に基づいてそれぞれ保持する複数のフリップフロップとが記述された前記集積回路記述から、論理等価な前記組合せ回路であって対応するそれぞれの前記フリップフロップの前記保持条件が排他関係にある第1、2の組合せ回路を検出する重複回路検出手段と、
前記集積回路記述の重複回路圧縮手段とを有し、
前記重複回路圧縮手段は、
前記第1、2の組合せ回路と論理等価な共有組合せ回路に前記第1、2の組合せ回路を置き換えると共に、前記第1、2の組合せ回路の第1、2の入力信号を、それぞれ対応する第1、2のフリップフロップの第1、2の保持条件に応じて選択し、前記共有組合せ回路に出力するセレクタ回路の記述を前記集積回路記述に追加する追加手段と、
前記第1、2の入力信号に基づく前記共有組合せ回路の出力信号をそれぞれ前記第1、2のフリップフロップに接続する記述を前記集積回路記述に追加する接続手段と、
前記第1、2の組合せ回路の記述を前記集積回路記述から削除する削除手段と、
を有する集積回路最適化装置。