(57)【特許請求の範囲】
【請求項１】
集積回路が記述された集積回路記述を記述変更によって最適化する最適化処理をコンピュータに実行させるコンピュータ読み取り可能な集積回路最適化プログラムにおいて、
前記最適化処理は、
入力信号に基づいて論理演算する複数の組合せ回路と、前記複数の組合せ回路からの出力信号を保持条件を示す保持信号に基づいてそれぞれ保持する複数のフリップフロップとが記述された前記集積回路記述から、論理等価な前記組合せ回路であって対応するそれぞれの前記フリップフロップの前記保持条件が排他関係にある第１、２の組合せ回路を検出する重複回路検出工程と、
前記集積回路記述の重複回路圧縮工程とを有し、
前記重複回路圧縮工程は、
前記第１、２の組合せ回路と論理等価な共有組合せ回路に前記第１、２の組合せ回路を置き換えると共に、前記第１、２の組合せ回路の第１、２の入力信号を、それぞれ対応する第１、２のフリップフロップの第１、２の保持条件を示す第１、２の保持信号のいずれかに応じて選択し、前記共有組合せ回路に出力するセレクタ回路の記述と、前記第１、２の保持信号のいずれかを前記セレクタ回路に接続する配線の記述とを前記集積回路記述に追加する追加工程と、
前記第１、２の入力信号に基づく前記共有組合せ回路の出力信号をそれぞれ前記第１、２のフリップフロップに接続する記述を前記集積回路記述に追加する接続工程と、
前記第１、２の組合せ回路の記述を前記集積回路記述から削除する削除工程と、
を有する集積回路最適化プログラム。
【請求項２】
請求項１において、
前記重複回路検出工程において、前記組合せ回路の前記入力信号及び前記出力信号の真理値の組合せが同一である場合に論理等価である集積回路最適化プログラム。
【請求項３】
請求項１または２において、
前記保持条件は、前記フリップフロップをそれぞれ駆動するクロック信号、または、前記フリップフロップのイネーブル信号のいずれかまたは両方を示す前記保持信号の状態である集積回路最適化プログラム。
【請求項４】
請求項１乃至３のいずれかにおいて、
前記重複回路検出工程は、前記第１、２の組合せ回路に加えて、当該第１、２の組合せ回路と論理等価な前記組合せ回路であって対応する前記フリップフロップの前記保持条件が前記第１、２の保持条件とそれぞれ排他関係にある第３の組合せ回路を検出し、
前記追加工程は、さらに、前記第３の組合せ回路の第３の入力信号を第３のフリップフロップの第３の保持条件を示す第３の保持信号に応じて選択する前記セレクタ回路の記述と、前記第１乃至前記第３の保持信号のいずれかを前記セレクタ回路に接続する配線の記述とを追加し、
前記接続工程は、さらに、前記第３の入力信号に基づく前記共有組合せ回路の前記出力信号を前記第３のフリップフロップに接続する記述を追加し、
前記削除工程は、さらに、前記第３の組合せ回路の記述を削除する集積回路最適化プログラム。
【請求項５】
請求項１乃至４のいずれかにおいて、
前記重複回路圧縮工程は、前記セレクタ回路よりも、前記削除工程で記述が削除される組合せ回路の面積が大きい場合に実行される集積回路最適化プログラム。
【請求項６】
請求項１乃至５のいずれかにおいて、
前記集積回路記述は、ハードウェア記述言語、またはネットリストによって記述されている集積回路最適化プログラム。
【請求項７】
集積回路が記述された集積回路記述を記述変更によって最適化する集積回路最適化装置
であって、
入力信号に基づいて論理演算する複数の組合せ回路と、前記複数の組合せ回路からの出力信号を保持条件を示す保持信号に基づいてそれぞれ保持する複数のフリップフロップとが記述された前記集積回路記述から、論理等価な前記組合せ回路であって対応するそれぞれの前記フリップフロップの前記保持条件が排他関係にある第１、２の組合せ回路を検出する重複回路検出手段と、
前記集積回路記述の重複回路圧縮手段とを有し、
前記重複回路圧縮手段は、
前記第１、２の組合せ回路と論理等価な共有組合せ回路に前記第１、２の組合せ回路を置き換えると共に、前記第１、２の組合せ回路の第１、２の入力信号を、それぞれ対応する第１、２のフリップフロップの第１、２の保持条件を示す第１、２の保持信号のいずれかに応じて選択し、前記共有組合せ回路に出力するセレクタ回路の記述と、前記第１、２の保持信号のいずれかを前記セレクタ回路に接続する配線の記述とを前記集積回路記述に追加する追加手段と、
前記第１、２の入力信号に基づく前記共有組合せ回路の出力信号をそれぞれ前記第１、２のフリップフロップに接続する記述を前記集積回路記述に追加する接続手段と、
前記第１、２の組合せ回路の記述を前記集積回路記述から削除する削除手段と、
を有する集積回路最適化装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、集積回路最適化プログラム及び集積回路最適化装置に関する。
【背景技術】
【０００２】
近年、ＬＳＩ（Large Scale Integration）の小規模化及び低消費電力化がますます求められている。ＬＳＩの小規模化は、例えば、ＬＳＩに実装する論理回路を最適化し最小限に抑えることによって実現される。そして、ＬＳＩに実装される論理回路が最小限に抑えられることにより、ＬＳＩの消費電力量も減少する。さらに、ＬＳＩの設計者は、一定期間、論理使用されない論理回路がＬＳＩに含まれる場合、その期間、当該論理回路にクロックの供給を行わないことによって低消費電力化を実現する。これらは、例えば、特許文献１、２に記載される。
【０００３】
ところで、ＬＳＩは、ＲＴＬ（Register Transfer Level）またはネットリストで記述された多数のＩＰ（intellectual property）等が、組み上げ担当者によって組み合わされることによって生成される。これらのＩＰ等は、一般的に、設計者が異なっている。そのため、ＩＰ等が組み上げられたことによって、ＬＳＩは、ＩＰ間で論理的に等価な複数の演算回路を有することがある。
【０００４】
そこで、ＬＳＩの組み上げ担当者は、生成したＬＳＩが論理等価な複数の演算回路を有する場合、論理等価な複数の演算回路をひとつに共通化することでＬＳＩを圧縮する。つまり、組み上げ担当者は、ＬＳＩが有する論理等価な複数の演算回路のうち、共有演算回路とする１つの演算回路を除く他の演算回路を省くことにより、ＬＳＩを圧縮化して最適化する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平１０-２９４３７５号公報
【特許文献２】特開平６-１７６１０１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、組み上げ担当者が、設計者の異なる多数のＩＰ等の回路の内容を全て理解することは難しく、論理等価な複数の演算回路を検出することは困難であった。また、仮に論理等価な複数の演算回路を検出できた場合であっても、最適化のための回路変更は、それぞれの演算回路の影響範囲が解析された上で検討されることが望ましい。このため、論理等価な複数の演算回路が検出されたとしても、最適化のための回路変更は容易ではなかった。
【０００７】
このように、ＬＳＩにおける論理等価な複数の演算回路の検出、及び、検出された論理等価な複数の演算回路の最適化は容易ではなかった。このため、ＬＳＩの小規模化や低消費電力化も充分に進んでいなかった。
【０００８】
そこで、本発明は、集積回路を効率的に最適化する集積回路最適化プログラム及び集積回路最適化装置を提供することにある。
【課題を解決するための手段】
【０００９】
第１の側面は、集積回路が記述された集積回路記述を記述変更によって最適化する最適化処理をコンピュータに実行させるコンピュータ読み取り可能な集積回路最適化プログラムにおいて、
前記最適化処理は、
入力信号に基づいて論理演算する複数の組合せ回路と、前記複数の組合せ回路からの出力信号を保持条件に基づいてそれぞれ保持する複数のフリップフロップとが記述された前記集積回路記述から、論理等価な前記組合せ回路であって対応するそれぞれの前記フリップフロップの前記保持条件が排他関係にある第１、２の組合せ回路を検出する重複回路検出工程と、
前記集積回路記述の重複回路圧縮工程とを有し、
前記重複回路圧縮工程は、
前記第１、２の組合せ回路と論理等価な共有組合せ回路に前記第１、２の組合せ回路を置き換えると共に、前記第１、２の組合せ回路の第１、２の入力信号を、それぞれ対応する第１、２のフリップフロップの第１、２の保持条件に応じて選択し、前記共有組合せ回路に出力するセレクタ回路の記述を前記集積回路記述に追加する追加工程と、
前記第１、２の入力信号に基づく前記共有組合せ回路の出力信号をそれぞれ前記第１、２のフリップフロップに接続する記述を前記集積回路記述に追加する接続工程と、
前記第１、２の組合せ回路の記述を前記集積回路記述から削除する削除工程と、を有する。
【発明の効果】
【００１０】
第１の側面によれば、集積回路の最適化を効率的に行うことができる。
【図面の簡単な説明】
【００１１】
【図１】集積回路最適化装置の構成の一例を表す図である。
【図２】一般的なＬＳＩの構成の一例を表す図である。
【図３】集積回路最適化プログラムによる変更前の集積回路記述を表す例図である。
【図４】集積回路最適化プログラムによる変更後の集積回路記述を表す例図である。
【図５】最適化対象のＲＴＬの集積回路記述を表す例図である。
【図６】集積回路最適化プログラムの処理を説明するフローチャート図である。
【図７】集積回路最適化プログラムの処理の詳細を説明するフローチャート図である。
【図８】集積回路最適化プログラムが出力するリストの例を表す図である。
【図９】集積回路最適化プログラムによる変更後の図５の集積回路記述を表す例図である。
【図１０】最適化対象のネットリストの集積回路記述を表す第１の例図である。
【図１１】最適化対象のネットリストの集積回路記述を表す第２の例図である。
【図１２】集積回路最適化プログラムの処理を説明する第２のフローチャート図である。
【図１３】集積回路最適化プログラムの処理の詳細を説明する第２のフローチャート図である。
【図１４】第２の実施の形態例において、集積回路最適化プログラムが出力するリストの例を表す第１の図である。
【図１５】第２の実施の形態例において、集積回路最適化プログラムが出力するリストの例を表す第２の図である。
【図１６】集積回路最適化プログラムによる変更後の図１０、図１１の集積回路記述を表す第１の例図である。
【図１７】集積回路最適化プログラムによる変更後の図１０、図１１の集積回路記述を表す第２の例図である。
【発明を実施するための形態】
【００１２】
以下、図面にしたがって本発明の実施の形態について説明する。ただし、本発明の技術的範囲はこれらの実施の形態に限定されず、特許請求の範囲に記載された事項とその均等物まで及ぶものである。
【００１３】
図１は、集積回路最適化装置の構成の一例を表す図である。同図の集積回路最適化装置１は、ＣＰＵ１１、ＲＡＭ等のメモリ１２、入出力インタフェース１３を有するコンピュータである。集積回路最適化プログラム２１はＲＡＭ等のメモリ１２に格納され、ＣＰＵ１１と協働することによって、最適化処理を実現する。本実施の形態例における集積回路最適化装置１が最適化する対象の集積回路記述ＳＸもまた、ＲＡＭ等のメモリ１４に格納される。本実施の形態例において、処理の対象とする集積回路記述ＳＸは、ＲＴＬまたはネットリスト、いずれで記述されていてもよい。
【００１４】
そして、本実施の形態例における集積回路最適化プログラム２１は、ＲＴＬまたはネットリストの集積回路記述ＳＸの記述を変更することにより、当該集積回路記述ＳＸに基づいたＬＳＩを最適化する。この例において、集積回路最適化プログラム２１によって最適化のための変更が行われた集積回路記述ＳＹは、同様にしてＲＡＭ等のメモリ１４に格納される。
【００１５】
図２は、一般的なＬＳＩ２０の構成の一例を表す図である。同図のＬＳＩ２０は、ＣＰＵ３１に加えて、ＤＤＲ３２、ＲＡＭ（Random Access Memory）３３、ＲＯＭ（Read Only Memory）３４、入出力（Ｉ／Ｏ）３５、Ａ４１、Ｂ４２、Ｃ４３等の多数のＩＰとを有する。このように、ＬＳＩ２０は、多数のＩＰ等３１〜４３が組み合わされることによって構成される。
【００１６】
各ＩＰは、ＲＴＬまたはネットリスト等の集積回路記述の状態で組み合わされる。本実施の形態例における集積回路最適化プログラム２１は、集積回路記述ＳＸに基づくＬＳＩ２０におけるＩＰ間またはひとつのＩＰ内の重複回路をひとつの共有演算回路に置き換える変更を行うことによって、集積回路記述に基づくＬＳＩ２０を圧縮するものである。
【００１７】
ここで、本実施の形態例における集積回路最適化プログラム２１の処理の概要について説明する。
【００１８】
本実施の形態例における集積回路最適化プログラム２１は、まず、入力信号に基づいて論理演算する複数の組合せ回路と、複数の組合せ回路からの出力信号を保持条件に基づいてそれぞれ保持する複数のフリップフロップとが記述された集積回路記述ＳＸから、論理等価な組合せ回路であって対応するそれぞれのフリップフロップの保持条件が排他的である第１、２の組合せ回路を検出する（重複回路検出工程）。
【００１９】
そして、集積回路最適化プログラム２１は、重複回路圧縮工程として、集積回路記述ＳＸについて、第１、２の組合せ回路と論理等価な共有組合せ回路に第１、２の組合せ回路を置き換えると共に、第１、２の組合せ回路の第１、２の入力信号を、それぞれ対応する第１、２のフリップフロップの第１、２の保持条件に応じて選択し、共有組合せ回路に出力するセレクタ回路の記述を追加する。また、集積回路最適化プログラム２１は、集積回路記述ＳＸについて、第１、２の入力信号に基づく共有組合せ回路の出力信号をそれぞれ第１、２のフリップフロップに接続する記述を追加し、第１、２の組合せ回路の記述を削除する。
【００２０】
このように、本実施の形態例における集積回路最適化プログラム２１は、第１、２の組合せ回路（重複回路）が検出された場合に、集積回路記述ＳＸの記述を変更することで、集積回路記述ＳＸに基づく回路の圧縮を行う。このため、処理対象の集積回路記述ＳＸが、論理等価な複数の組合せ回路と、その出力信号を保持条件に基づいてそれぞれ保持する複数のフリップフロップとの記述を有し、それぞれのフリップフロップの保持条件が排他関係にあることが、最適化の対象となる集積回路記述ＳＸの条件である。
【００２１】
ここで、組合せ回路とは、現在の入力信号のみで出力信号が決まる回路である。即ち、信号を保持しない回路であって、入力信号の変化が直ちに出力信号に伝搬する回路を示す。論理等価とは、組合せ回路の入力信号及び出力信号の真理値の組合せが同一であることを示す。フリップフロップの値の保持条件とは、例えば、フリップフロップを駆動するクロック信号、または、フリップフロップのイネーブル信号のいずれかまたは両方の信号の値からなり、入力信号を保持することを示す値の状態を示す。保持条件を満たさない場合、フリップフロップは、入力信号を新たに保持しない。これは、保持条件を満たさない場合、当該フリップフロップに信号を出力する組合せ回路は論理使用されないことを意味する。
【００２２】
そして、複数のフリップフロップの保持条件が排他関係にあるとは、複数のフリップフロップが値を保持するタイミングが重複しない、即ち、複数のフリップフロップが同一のタイミングで値を取得しないことを示す。これは、複数のフリップフロップにそれぞれ信号を出力する複数の組合せ回路が、同一のタイミングで論理使用されず、論理使用タイミングについても排他関係にあることを示す。
【００２３】
従って、論理等価な複数の組合せ回路に対応する複数のフリップフロップの保持条件が排他的であることは、当該複数のフリップフロップにそれぞれ信号を出力する複数の組合せ回路の論理使用タイミングも排他関係にある。よって、複数の組合せ回路の論理使用は競合せず、論理等価な複数の組合せ回路を１つの共有演算回路に共通化したとしても、フリップフロップに保持される値には影響がないといえる。
【００２４】
このため、本実施の形態例における集積回路最適化プログラム２１では、集積回路記述ＳＸが最適化の条件を満たす場合、重複回路を１つの共有演算回路に置き換える変更を集積回路記述ＳＸに行うことに基づく回路圧縮が可能となる。また、本実施の形態例における集積回路最適化プログラム２１は、集積回路記述ＳＸが最適化の条件を満たす場合、条件に対応する記述箇所の定型的、規則的な記述変更によって重複回路の圧縮を可能にする。
【００２５】
続いて、最適化処理の説明の前に、本実施の形態例における集積回路最適化プログラム２１による変更前の集積回路記述ＳＸに基づくＬＳＩと、変更後の集積回路記述ＳＹに基づくＬＳＩの一例を説明する。
【００２６】
図３は、本実施の形態例における集積回路最適化プログラム２１による変更前の集積回路記述ＳＸであって、最適化の条件を満たす集積回路記述ＳＸに基づいたＬＳＩの構成を表す例図である。同図のＬＳＩが有するＡ（ＩＰ）４１及びＢ（ＩＰ）４２は、図２のＬＳＩ２０が有するＡ（ＩＰ）４１及びＢ（ＩＰ）４２と同様である。
【００２７】
図３において、Ａ（ＩＰ）４１、Ｂ（ＩＰ）４２は、それぞれ入力端子群Ａｉａ、入力端子群Ｂｉｂからの入力信号に基づいて演算を行う組合せ回路である。この例において、演算回路Ａｃａ、Ｂｃｂは、入出力信号の真理値の組合せが同一である論理的に等価な組合せ回路である。従って、入力端子群Ａｉａ、入力端子群Ｂｉｂからの入力信号、及び、演算回路Ａｃａ、Ｂｃｂの出力信号のビット幅は同一である。また、演算回路Ａｃａ、Ｂｃｂの出力信号は、それぞれフリップフロップ群Ａｆａ、群Ｂｆｂに出力される。フリップフロップ群Ａｆａ、Ｂｆｂは、それぞれクロックゲートＡｇａ、Ｂｇｂからクロック信号ＣＬが出力される場合に、演算回路Ａｃａ、Ｂｃｂからの出力信号を保持する。続いて、クロックゲートＡｇａ、Ｂｇｂの動きについて説明する。
【００２８】
クロックゲートＡｇａ、Ｂｇｂは、クロックイネーブル信号ＣＥがＨレベルの場合に、クロック信号ＣＬを出力する。この例において、クロックゲートＢｇｂに入力される信号は、クロックイネーブル信号ＣＥがインバータＩＮによって反転された信号である。即ち、クロックゲートＡｇａと、クロックゲートＢｇｂとに入力される信号の値は反転関係にある。
【００２９】
従って、クロックイネーブル信号ＣＥがＨレベルのとき、クロックゲートＡｇａからクロック信号ＣＬが出力され、フリップフロップ群Ａｆａの保持条件Ａを満たすため、フリップフロップ群Ａｆａは演算回路Ａｃａからの出力信号を保持する。このとき、クロックゲートＢｇｂには、Ｌレベルの信号が入力され、クロック信号ＣＬをゲートする。このため、保持条件Ｂを満たさず、フリップフロップ群Ｂｆｂは値を保持しない。一方、クロックイネーブル信号ＣＥがＬレベルのときフリップフロップ群Ｂｆａの保持条件Ｂを満たし、フリップフロップ群Ｂｆｂは演算回路Ｂｃｂからの出力信号を保持し、フリップフロップ群Ａｆａは演算回路Ａｃａからの出力信号を保持しない。
【００３０】
このように、図３のＬＳＩにおいて、フリップフロップ群Ａｆａとフリップフロップ群Ｂｆｂの値の保持条件は反転関係、即ち、排他関係にある。これは、演算回路Ａｃａ、Ｂｃｂが同一のタイミングで論理使用されないことを示す。このため、論理等価である演算回路Ａｃａ、Ｂｃｂがひとつの共通演算回路に置き換えられたとしても、フリップフロップ群Ａｆａ、Ｂｆｂが保持する値には影響がない。つまり、重複回路の共通化によって、図３のＬＳＩの論理動作には影響が生じないことを示す。
【００３１】
図４は、図３の集積回路記述ＳＸが、本実施の形態例における集積回路最適化プログラム２１によって変更された集積回路記述ＳＹに基づいたＬＳＩの構成を表す例図である。この例において、演算回路Ａｃａ、Ｂｃｂのうち、ひとつの演算回路Ａｃａが共有演算回路ｃａに置き換えられている。そして、演算回路Ａｃａの共有演算回路化により、入力端子群Ａｉａ、Ｂｉｂの信号をフリップフロップ群Ａｆａ、Ｂｆｂの保持条件に基づいて選択し共有演算回路ｃａに出力するセレクタ回路ｓｌが追加され、さらに共有演算回路ｃａからの出力信号がフリップフロップ群Ｂｆｂに接続されている。
【００３２】
図４のＬＳＩの動作について、具体的に説明する。クロックイネーブル信号ＣＥがＨレベルのとき（フリップフロップ群Ａｆａの保持条件Ａを満たしたとき）、セレクタ回路ｓｌは入力端子群Ａｉａからの信号を選択して共有演算回路ｃａに出力し、共有演算回路ｃａは入力端子群Ａｉａからの出力信号に基づく演算結果を示す信号を、直ちに（保持条件を満たした）フリップフロップ群Ａｆａに出力する。これにより、フリップフロップ群Ａｆａは、保持条件Ａを満たしたとき、入力端子群Ａｉａに基づく共有演算回路ｃａの演算値を保持する。このとき、保持条件がフリップフロップ群Ａｆａと排他関係にあるフリップフロップ群Ｂｆｂは、新たに信号を保持しない。
【００３３】
一方、クロックイネーブル信号ＣＥがＬレベルのとき（フリップフロップ群Ｂｆａの保持条件Ｂを満たしたとき）、セレクタ回路ｓｌは入力端子群Ｂｉｂからの信号を選択して共有演算回路ｃａに出力し、共有演算回路ｃａは入力端子群Ｂｉｂからの信号に基づく演算結果を示す信号を直ちにフリップフロップ群Ｂｆｂに出力する。これにより、フリップフロップ群Ｂｆｂは、保持条件Ｂを満たしたとき、入力端子群Ｂｉｂに基づく共有演算回路ｃａの演算値を保持する。このとき、フリップフロップ群Ａｆａは新たに信号を保持しない。
【００３４】
このように、フリップフロップ群Ａｆａ、Ｂｆｂは、それぞれ保持条件を満たしたとき、対応する入力端子群Ａｉａ、Ｂｉｂに基づく共有演算回路の演算結果を保持する。これは、変更前の図３のＬＳＩの処理内容と同じである。本実施の形態例における集積回路最適化プログラム２１は、図３のＬＳＩが図４のようなＬＳＩに最適化されるように、集積回路記述ＳＸを記述変更する。この最適化によって、図４のように、重複している複数の論理等価な組合せ回路が１つに集約化され１つ以上の重複回路が削除されるため、消費電力が削減される。また、最適化によって追加されるセレクタ回路ｓｌよりも、削除される回路の規模（図４の例では、演算回路Ｂｃｂ）の方が大きい場合、あわせて回路規模が縮小される。
【００３５】
以下、この最適化のための集積回路記述ＳＸの変更処理について実施例に基づいて述べる。なお、前述したとおり、本実施の形態例における最適化対象の集積回路記述ＳＸは、ＲＴＬまたはネットリストのいずれであってもよい。そこで、第１の実施の形態例では、初めにＲＴＬの集積回路記述ＳＸを最適化する処理について述べる。そして、第２の実施の形態例では、ネットリストの集積回路記述ＳＸを最適化する処理について述べる。
［第１の実施の形態例］
第１の実施の形態例では、ＲＴＬの集積回路記述に基づくＬＳＩを最適化する処理について例示する。初めに、本実施の形態例における最適化条件を満たすＲＴＬの集積回路記述について例示する。
【００３６】
図５は、最適化対象のＲＴＬの集積回路記述ＲＸ（図１のＳＸ）を表す例図である。同図の集積回路記述ＲＸは、本実施の形態例における最適化の条件を満たしており、モジュールＦ＿ＴＥＳＴが記述される。モジュールとは、ひとまとまりの機能、要素である。
【００３７】
図５のモジュールＦ＿ＴＥＳＴは、クロック信号IＣＬＫ、リセット信号IＸＲＳＴ、クロックセレクト信号IＣＫＬ＿ｓｅｌ、信号ＩＮ＿ｃｏｍｍ、ＩＮ＿Ａ、ＩＮ＿Ｂを入力とし、信号ＯＵＴ＿Ａ、ＯＵＴ＿Ｂを出力信号とするモジュールである。具体的に、モジュールＦ＿ＴＥＳＴは、クロック信号IＣＬＫ、リセット信号IＸＲＳＴ、クロックセレクト信号IＣＫＬ＿ｓｅｌに基づいて、入力信号ＩＮ＿ｃｏｍｍと入力信号ＩＮ＿Ａの乗算値を出力信号ＯＵＴ＿Ａとして、入力信号ＩＮ＿ｃｏｍｍと入力信号ＩＮ＿Ｂの乗算値を出力信号ＯＵＴ＿Ｂとして出力する。
【００３８】
より具体的に、モジュールＦ＿ＴＥＳＴには、２つの乗算回路（以下、乗算回路Ａ、乗算回路Ｂ）と、各乗算回路の出力信号を保持する２つのフリップフロップ（以下、フリップフロップＡ、フリップフロップＢ）が記述されている。また、フリップフロップＡの保持条件（以下、保持条件Ａ）とフリップフロップＢの保持条件（保持条件Ｂ）とは、排他関係にある。以下、コードに基づいて詳細に説明する。
【００３９】
まず、１行目から４行目は、モジュールＦ＿ＴＥＳＴの入出力信号が宣言される。５行目から１０行目には、それぞれの入出力信号の型及びビット幅が定義されている。例えば、入力信号ＩＮ＿ｃｏｍｍは８ビット（８行目）、入力信号ＩＮ＿Ａ、ＩＮ＿Ｂは３ビット（９行目）、出力信号ＯＵＴ_Ａ、ＯＵＴ_Ｂは１１ビットの信号（１０行目）であることが定義される。１１行目には、１１ビットの信号を保持するフリップフロップＡ（ＯＵＴ＿Ａ）、フリップフロップＢ（ＯＵＴ＿Ｂ）が宣言されている。
【００４０】
続いて、コードｃ１（１３行目から１５行目）、コードｃ２（１８行目から２０行目）部分には、それぞれ、２つの乗算回路Ａ、Ｂと、フリップフロップＯＵＴ＿Ａ、ＯＵＴ＿Ｂの値の保持条件Ａ、Ｂについて記述される。
【００４１】
具体的に、コードｃ１には、信号ＩＮ＿ｃｏｍｍと信号ＩＮ＿Ａとを乗算する乗算回路Ａ（コードｃ５）と、保持条件Ａに基づいて乗算回路Ａからの出力信号を保持するフリップフロップＯＵＴ＿Ａが記述される。コードｃ１における１３行目の記述は、クロック信号IＣＬＫまたはリセット信号IＸＲＳＴに変化があったときに、１４行、１５行目の処理を行うことを示す。１５行目の記述は、クロックセレクト信号IＣＫＬ＿ｓｅｌがＨレベルに変化したときに（コードｃ３、保持条件Ａをみたすときに）、乗算回路Ａの演算が行われ、演算結果がフリップフロップＯＵＴ＿Ａに保持される処理を示す。
【００４２】
続いて、コードｃ２（１８行目から２０行目）には、信号ＩＮ＿ｃｏｍｍと信号ＩＮ＿Ｂとを乗算する乗算回路Ｂ（コードｃ６）と、保持条件Ｂに基づいて乗算回路Ｂからの出力信号を保持するフリップフロップＯＵＴ＿Ｂが記述される。コードｃ２における１８行目の記述は、１３行目と同処理を示す。２０行目の記述は、クロックセレクト信号IＣＫＬ＿ｓｅｌがＬレベルに変化したときに（コードｃ４、保持条件Ｂをみたすときに）、乗算回路Ｂの演算が行われ、演算結果がフリップフロップＯＵＴ＿Ｂに保持される処理を示す。
【００４３】
このように、モジュールＦ＿ＴＥＳＴには、それぞれフリップフロップＯＵＴ＿Ａ、ＯＵＴ＿Ｂに信号を出力する乗算回路Ａ、Ｂが記述される。また、乗算回路Ａ、Ｂの入力信号のビット幅は同一であるため、論理等価な組合せ回路であるといえる。また、フリップフロップＯＵＴ＿Ａの保持条件Ａはクロックセレクト信号IＣＫＬ＿ｓｅｌがＨレベルのとき、フリップフロップＯＵＴ＿Ｂの保持条件Ｂはクロックセレクト信号IＣＫＬ＿ｓｅｌがＬレベルのときを示すため、保持条件Ａと保持条件Ｂとは排他関係にあるといえる。このように、図５の集積回路記述ＲＸは、最適化条件を満たしている。
【００４４】
続いて、図５で示した集積回路記述ＲＸの最適化処理について、フローチャート図に基づいて説明する。
【００４５】
図６は、本実施の形態例における集積回路最適化プログラム２１の処理を説明するフローチャート図である。同図のフローチャート図における工程Ｓ１１〜Ｓ１４は、重複回路の検出工程である。重複回路検出工程における全ての判定でＹＥＳの場合、対象の集積回路記述ＲＸが最適化の条件に適合することを示し、複数の論理等価な組合せ回路（重複回路）が検出される。また、工程Ｓ１５〜Ｓ１８は、重複回路の圧縮工程である。集積回路記述ＲＸについて、重複回路検出工程Ｓ１１〜Ｓ１４で検出された重複回路がひとつの共有演算回路に置き換わるように記述変更する。
【００４６】
図６において、集積回路最適化プログラム２１は、まず、対象の集積回路記述ＲＸから、論理等価な複数の組合せ回路を検出する（Ｓ１１）。即ち、集積回路最適化プログラム２１は、集積回路記述ＲＸから、入出力信号の真理値の対応関係が同一である複数の組合せ回路を検出する。
【００４７】
論理等価な複数の組合せ回路が検出された場合（Ｓ１１のＹＥＳ）、集積回路最適化プログラム２１は、続いて、検出された複数の組合せ回路を１つの共有の組合せ回路に圧縮することで、集積回路記述ＲＸに基づくＬＳＩの回路規模が縮小されるか否かを判定する（Ｓ１２）。この工程Ｓ１２は、集積回路記述ＲＸの圧縮によって、集積回路記述ＲＸに基づくＬＳＩの消費電力の削減だけでなく、回路規模の縮小を目的とする場合に行われる。
【００４８】
組合せ回路は、論理使用されない期間にも電力を消費する。従って、工程Ｓ１１で検出された論理等価な複数の組合せ回路を１つの共有演算回路に集約することで、ＬＳＩの消費電力が減少する。しかしながら、回路規模については、検出された論理等価な複数の組合せ回路の回路規模が小さい場合、１つの共有演算回路に集約したとしても、セレクタ回路が追加されることにより、かえって増大してしまうことがある。従って、消費電力の削減に加えて回路規模の縮小を目的とする場合、工程Ｓ１２の判定が必要となる。なお、セレクタ回路の消費電力量は、論理等価な組合せ回路１つ分の消費電力量よりも小さいことを前提としている。
【００４９】
回路規模が縮小されることが判定された場合（Ｓ１２のＹＥＳ）、集積回路最適化プログラム２１は、続いて、工程Ｓ１１で検出された論理等価な複数の組合せ回路の出力信号がそれぞれフリップフロップに入力されているか否かを判定する（Ｓ１３）。フリップフロップに入力されている場合（Ｓ１３のＹＥＳ）、集積回路最適化プログラム２１は、工程Ｓ１３で検出した複数のフリップフロップの値の保持条件が排他関係にあるか否かを判定する（Ｓ１４）。排他関係にある場合（Ｓ１４のＹＥＳ）、集積回路記述は最適化の条件を満たすことを示す。
【００５０】
一方、工程Ｓ１１〜Ｓ１４のいずれかでＮＯと判定される場合、集積回路記述ＲＸは最適化の条件を満たしていないことを示すため、最適化処理は行われない。ただし、前述したとおり、工程Ｓ１２の判定については、必ずしも必須条件ではない。また、工程Ｓ１１〜Ｓ１４の処理順は、上記の順番に限定されるものではない。
【００５１】
集積回路記述ＲＸが最適化条件を満たす場合（Ｓ１４のＹＥＳ）、集積回路最適化プログラム２１は、重複回路圧縮工程Ｓ１５〜Ｓ１８を行う。
【００５２】
集積回路最適化プログラム２１は、まず、集積回路記述ＲＸに対して、論理等価な複数の組合せ回路の１つを共有演算回路に置き換え、共有演算回路への入力信号を保持条件に応じて選択するセレクタ回路の記述を追加する（Ｓ１５）。次に、集積回路最適化プログラム２１は、集積回路記述ＲＸに対して、セレクタ回路からの出力信号を共有演算回路に接続する記述を追加する（Ｓ１６）。続いて、集積回路最適化プログラム２１は、集積回路記述ＲＸに対して、保持条件に応じてセレクタ回路によって選択された信号に基づく共有演算回路からの出力信号を、当該保持条件に対応するフリップフロップに接続する記述を追加する（Ｓ１７）。
【００５３】
そして、集積回路最適化プログラム２１は、共有演算回路に置き換えられた組合せ回路の記述を集積回路記述ＲＸから削除する（Ｓ１８）。これにより、集積回路記述ＲＸに基づいたＬＳＩが回路圧縮され、最適化される。
【００５４】
続いて、図６のフローチャート図で記述した各工程の処理について、前述した図５の集積回路記述ＲＸと、さらに詳細なフローチャート図（図７）に基づいて説明する。
【００５５】
図７は、本実施の形態例における集積回路最適化プログラム２１の処理の各工程を詳細に説明するフローチャート図である。まず、重複回路検出工程Ｓ１１〜Ｓ１４の処理の詳細を、図５の集積回路記述ＲＸに基づいて説明する。
【００５６】
まず、工程Ｓ１１、Ｓ１２では、集積回路最適化プログラム２１は、集積回路記述ＲＸから、論理等価な複数の演算回路の記述を抽出する（Ｓ１１Ａ）。具体的に、集積回路最適化プログラム２１は、例えば、ＥＤＡ（electronic design automation）ツール等の等価判定機能を用いて、集積回路記述ＲＸから、論理等価な演算回路の記述を抽出する。
【００５７】
そして、集積回路最適化プログラム２１は、論理等価な複数の演算回路の共有演算回路への置き換えに当たり、追加されるセレクタ回路の回路規模と、削除される演算回路の回路規模とを比較し、回路規模が削減されるか否かを判定する（Ｓ１２Ａ）。具体的に、集積回路最適化プログラム２１は、回路の入出力ビット幅に応じて、演算回路やセレクタ回路の回路規模が予め保持されたライブラリ等を参照することによって回路規模を見積もり、判定する。
【００５８】
工程Ｓ１１Ａ、Ｓ１２Ａの結果、集約化によって回路規模が削減される複数の論理等価な演算回路の記述が抽出されると、集積回路最適化プログラム２１は、抽出された記述を等価演算回路リストＬ１として出力する。
【００５９】
図８は、本実施の形態例における集積回路最適化プログラム２１が出力するリストＬ１〜Ｌ３の例を表す図である。同図には、図５の集積回路記述ＲＸを処理対象とする場合における等価演算回路リスト（上部）Ｌ１、ＦＦリスト（中央部）Ｌ２、保持条件リスト（下部）Ｌ３の例が表されている。
【００６０】
図５の集積回路記述ＲＸに基づくと、本実施の形態例における集積回路最適化プログラム２１は、論理等価な複数の演算回路として、同一の乗算回路を示す２つの乗算回路Ａ（ＩＮ＿ｃｏｍｍ＊ＩＮ＿Ａ）、乗算回路Ｂ（ＩＮ＿ｃｏｍｍ＊ＩＮ＿Ｂ）の記述（１５行目、２０行目）を抽出する（図７のＳ１１Ａ）。このとき、集積回路最適化プログラム２１は、乗算回路Ａ、Ｂの入出力信号のビット幅が同一であることを示すために、入力信号のビット幅を示すコードの記述（８行目、９行目）をあわせて抽出する。
【００６１】
そして、集積回路最適化プログラム２１は、最適化によって回路規模が縮小されるか否かを判定する（図７のＳ１２Ａ）。図５の集積回路記述ＲＸにおいて、乗算回路Ａ、Ｂへの入力信号を選択するセレクタ回路よりも、共通化によって削除される乗算回路ひとつ分の回路規模の方が大きい。従って、集約化によって回路規模が縮小されることが判定される。そのため、乗算回路Ａ、Ｂを示す記述（８行目、９行目）、乗算回路Ａ、Ｂの入力信号ＩＮ＿ｃｏｍｍ、ＩＮ＿Ａ、ＩＮ＿Ｂのビット幅を示すコード（１５行目、２０行目）を有する図８の等価演算回路リストＬ１が出力される。
【００６２】
図７のフローチャート図に戻り、集積回路最適化プログラム２１は、工程Ｓ１３として、等価演算回路リストＬ１（図８）に基づいて、各等価演算回路の出力信号がフリップフロップに入力されているか否かを判定する。フリップフロップに入力されている場合、集積回路最適化プログラム２１は、フリップフロップを示す記述を集積回路記述ＲＸから抽出し、ＦＦリストＬ２として出力する（Ｓ１３Ａ）。
【００６３】
具体的に、集積回路最適化プログラム２１は、等価演算回路リストＬ１（図８）における乗算回路Ａ、Ｂ（１５行目、２０行目）の出力信号がフリップフロップに入力されているか否かを判定する。この判定は、例えば、乗算回路Ａ、Ｂの記述をトレースすることによって行われる。前述したとおり、図５の集積回路記述ＲＸのコードｃ１、ｃ２によると、乗算回路Ａ、Ｂの出力信号はフリップフロップＯＵＴ＿Ａ、ＯＵＴ＿Ｂに出力されていることがわかる。従って、図５のコードｃ１（１３行目〜１５行目）、ｃ２（１８行目〜２０行目）のコードを有する図８のＦＦリストＬ２が出力される。
【００６４】
図７のフローチャート図に戻り、集積回路最適化プログラム２１は、工程Ｓ１４として、前工程で抽出されたＦＦリストＬ２に基づいて、ＦＦリストＬ２のフリップフロップの保持条件が排他関係にあるか否かを判定する。排他関係にある場合、集積回路最適化プログラム２１は、保持条件を示す記述を集積回路記述から抽出し、保持条件リストＬ３として出力する（Ｓ１４Ａ）。
【００６５】
具体的に、集積回路最適化プログラム２１は、ＦＦリストＬ２（図８）におけるフリップフロップＯＵＴ＿Ａ、ＯＵＴ＿Ｂの保持条件を、集積回路記述ＲＸから抽出する。この処理は、例えば、乗算回路Ａ、Ｂの出力信号のフリップフロップＯＵＴ＿Ａ、ＯＵＴ＿Ｂへの入力を示す記述の前後の記述をトレースすることによって行われる。前述したとおり、図５の集積回路記述ＲＸのコードｃ３、ｃ４によると、フリップフロップＯＵＴ＿Ａの保持条件Ａは「ＩＣＬＫ＿ｓｅｌ」（１５行目）、フリップフロップＯＵＴ＿Ｂの保持条件Ｂは「！ＩＣＬＫ＿ｓｅｌ」（２０行目）であることがわかる。“！”は、反転値を示すため、フリップフロップＯＵＴ＿Ａ、ＯＵＴ＿Ｂの保持条件は反転関係、即ち、排他関係にあるといえる。これにより、図５の１５行目、２０行目の記述を有する図８の保持条件リストＬ３が出力される。
【００６６】
図７のＳ１１Ａ〜Ｓ１４Ａの処理により、図５の集積回路記述ＲＸが最適化の条件を満たすことが判定され、図８の各リストＬ１〜Ｌ３が出力される。続いて、集積回路最適化プログラム２１は、重複回路圧縮工程Ｓ１５〜Ｓ１７として、図８の各リストＬ１〜Ｌ３に基づいて、集積回路記述ＲＸの記述を変更する。
【００６７】
集積回路最適化プログラム２１は、工程Ｓ１５として、論理等価回路リストＬ１と保持条件リストＬ３とに基づいて、集積回路記述ＲＸに対してセレクタ回路の記述を追加する。具体的に、集積回路最適化プログラム２１は、保持条件リストＬ３の保持条件に基づいて、論理等価回路リストＬ１における論理等価な複数の演算回路の入力信号を選択し、置き換えた共有演算回路に出力するセレクタ回路の記述を追加する。
【００６８】
より具体的に、図５の集積回路記述ＲＸに基づいて説明する。まず、集積回路最適化プログラム２１は、追加するセレクタ回路のセレクト対象信号を抽出する。セレクト対象信号は、論理等価な複数の演算回路（乗算回路Ａ、Ｂ）の入力信号のうち、値の異なる信号を示す。具体的に、乗算回路Ａ、Ｂの入力信号ＩＮ＿ｃｏｍｍ、ＩＮ＿Ａ、ＩＮ＿Ｂのうち、入力信号ＩＮ＿ｃｏｍｍは共通であるため、セレクト対象信号として、信号ＩＮ＿Ａ、ＩＮ＿Ｂが抽出される。なお、値の異なる入力信号が複数ある場合は、複数の入力信号がセレクト対象信号となる。
【００６９】
次に、集積回路最適化プログラム２１は、保持条件リストＬ３（図８）に基づいて、保持条件Ａ（１５行目）に応答してセレクト対象信号ＩＮ＿Ａを、保持条件Ｂ（２０行目）に応答してセレクト対象信号ＩＮ＿Ｂを選択するセレクタ回路の記述を、集積回路記述ＲＸに追加する。即ち、クロックセレクト信号ＩＣＬＫ＿ｓｅｌがＨレベルのとき（保持条件Ａを満たすとき）信号ＩＮ＿Ａを、クロックセレクト信号ＩＣＬＫ＿ｓｅｌがＬレベルのとき（保持条件Ｂを満たすとき）信号ＩＮ＿Ｂを選択するセレクタ回路の記述が追加される。
【００７０】
図９は、本実施の形態例における集積回路最適化プログラム２１によって変更が加えられた図５の集積回路記述ＲＹ（ＳＹ）を表す例図である。同図の点線で囲まれたコードｍ１〜ｍ５は、集積回路最適化プログラム２１によって記述が変更されたコードを示す。
【００７１】
図９の変更後の集積回路記述ＲＹにおいて、コードｍ１、ｍ２の記述が工程Ｓ１５によって追加される。コードｍ１の１３行目の記述は、セレクタ回路から出力される信号ｍｕｘｅｄ＿ｓｉｇの定義を示す。この例において、セレクタ回路のセレクト対象信号ＩＮ＿Ａ、ＩＮ＿Ｂのビット幅は、３ビットである。従って、３ビットの信号ｍｕｘｅｄ＿ｓｉｇが定義される。そして、コードｍ２の１６行目の記述は、クロックセレクト信号ＩＣＬＫ＿ｓｅｌがＨレベルのとき（保持条件Ａが満たされたとき）、信号ＩＮ＿Ａを、クロックセレクト信号ＩＣＬＫ＿ｓｅｌがＨレベルではないとき（保持条件Ｂが満たされたとき）、信号ＩＮ＿Ｂを選択し、信号ｍｕｘｅｄ＿ｓｉｇにセットするセレクタ回路の記述である。このように、セレクタ回路の記述が追加される。
【００７２】
図７のフローチャート図に戻り、工程Ｓ１６として、集積回路最適化プログラム２１は、集積回路記述に対して、追加したセレクタ回路からの出力信号ｍｕｘｅｄ＿ｓｉｇを共有演算回路に接続する記述を追加する。
【００７３】
図９の変更後の集積回路記述ＲＹにおいて、コードｍ３の記述が工程Ｓ１６によって追加される。この例において、乗算回路Ａ、Ｂは、信号ＩＮ＿ｃｏｍｍと、セレクタ回路によって選択された信号ｍｕｘｅｄ＿ｓｉｇとの乗算を行う共有演算回路ｃｏｍｍ＿ｃａｌｃ（ＩＮ＿ｃｏｍｍ＊ｍｕｘｅｄ＿ｓｉｇ）に置き換えられている。そのため、共有演算回路ｃｏｍｍ＿ｃａｌｃの演算対象の信号を、共通信号ＩＮ＿ｃｏｍｍと信号ｍｕｘｅｄ＿ｓｉｇとすることによって、セレクタ回路からの出力信号ｍｕｘｅｄ＿ｓｉｇが共有演算回路に接続される。
【００７４】
なお、図９の集積回路記述ＲＹにおいて、集積回路最適化プログラム２１は、乗算回路Ａ、Ｂを、別の共有演算回路ｃｏｍｍ＿ｃａｌｃに置き換えている。しかし、集積回路最適化プログラム２１は、乗算回路Ａ、Ｂのうちいずれかの演算回路を共有演算回路としてもよい。
【００７５】
図７のフローチャート図に戻り、工程Ｓ１７として、集積回路最適化プログラム２１は、集積回路記述に対して、保持条件Ａ、Ｂに応じてセレクタ回路によって選択された信号ｍｕｘｅｄ＿ｓｉｇ（ＩＮ＿Ａ／ＩＮ＿Ｂ）に基づく共有演算回路ｃｏｍｍ＿ｃａｌｃからの出力信号を、当該保持条件のフリップフロップＯＵＴ＿Ａ、ＯＵＴ＿Ｂに接続する記述を追加する。
【００７６】
図９の変更後の集積回路記述ＲＹにおいて、コードｍ４、ｍ５の記述が、工程Ｓ１７によって追加される。この例では、コードｍ４、ｍ５において、フリップフロップに乗算回路の演算結果を出力する記述（２１行目、２６行目）において、乗算回路Ａ、Ｂが共有演算回路ｃｏｍｍ＿ｃａｌｃに置き換えられることによって、共有演算回路ｃｏｍｍ＿ｃａｌｃからの各出力信号が各フリップフロップＯＵＴ＿Ａ、ＯＵＴ＿Ｂに接続される。
【００７７】
具体的に、２１行目では、乗算回路Ａの記述が共有演算回路ｃｏｍｍ＿ｃａｌｃに置き換えられ、保持条件Ａを満たすとき、セレクタ回路によって選択される信号ｍｕｘｅｄ＿ｓｉｇ（ＩＮ＿Ａ）と信号ＩＮ＿ｃｏｍｍとの乗算を行う共有演算回路ｃｏｍｍ＿ｃａｌｃの出力信号がフリップフロップＯＵＴ＿Ａに保持されるようになる。また、２６行目では、乗算回路Ｂの記述が共有演算回路ｃｏｍｍ＿ｃａｌｃに置き換えられ、保持条件Ｂを満たすとき、セレクタ回路によって選択される信号ｍｕｘｅｄ＿ｓｉｇ（ＩＮ＿Ｂ）と信号ＩＮ＿ｃｏｍｍとの乗算を行う共有演算回路ｃｏｍｍ＿ｃａｌｃの出力信号がフリップフロップＯＵＴ＿Ｂに保持されるようになる。
【００７８】
図７のフローチャート図に戻り、工程Ｓ１８として、集積回路最適化プログラム２１は、共有演算回路ｃｏｍｍ＿ｃａｌｃに置き換えられた複数の論理等価な乗算回路Ａ、Ｂの記述を集積回路記述から削除する。図９の変更後の集積回路記述ＲＹにおいて、２１行、２６行目における乗算回路Ａ、Ｂが乗算回路ｃｏｍｍ＿ｃａｌｃに置き換えられたことにより、乗算回路Ａ、Ｂの記述が実質的に削除されている。
【００７９】
このような定型的な記述変更処理により、図９の集積回路記述ＲＹにおいて、乗算回路Ａ、Ｂがひとつの共有演算回路に置き換えられ、乗算回路１つ分の回路が圧縮される。これにより、乗算回路が１つ分削除されるため、消費電力量が削減される。また、削除した乗算回路よりセレクタ回路の回路規模が小さいため、回路規模についても合わせて縮小される。
【００８０】
このようにして、本実施の形態例における集積回路最適化プログラムは、入力信号に基づいて論理演算する複数の組合せ回路と、複数の組合せ回路からの出力信号を保持条件に基づいてそれぞれ保持する複数のフリップフロップとが記述された集積回路記述から、論理等価な組合せ回路であって対応するそれぞれの前記フリップフロップの保持条件が排他関係にある複数の組合せ回路を検出する。
【００８１】
そして、集積回路最適化プログラムは、検出した複数の組合せ回路をそれと論理等価な共有組合せ回路に置き換えると共に、複数の組合せ回路の入力信号をそれぞれ対応する各フリップフロップの保持条件に応じて選択し共有組合せ回路に出力するセレクタ回路を追加し、それぞれの入力信号に基づく共有組合せ回路の出力信号を各フリップフロップに接続するように、集積回路記述の記述を変更する。そして、集積回路最適化プログラムは、複数の組合せ回路の記述を集積回路記述から削除する。
【００８２】
これにより、変更後の集積回路記述に基づくＬＳＩが圧縮され、最適化される。回路が圧縮されることにより、変更後の集積回路記述に基づくＬＳＩの消費電力量が削減される。
【００８３】
このように、本実施の形態例における集積回路最適化プログラムは、効率的に最適化可能な集積回路記述の条件（最適化の条件）を見出したことによって、集積回路記述が条件を満たすか否かを記述に基づいて判定可能とし、条件を満たす場合に、条件に対応する記述箇所を定型的に変更することによって、重複回路の検出処理及び重複回路の圧縮処理を行うことができる。このため、集積回路最適化プログラムは、例えば、集積回路記述が複数の異なる設計者によって記述されている場合や、集積回路記述のアルゴリズムが複雑な場合、さらに、集積回路記述のコード量が膨大な場合であっても、集積回路記述に基づいて、規則的に及び定型的に、重複回路を検出し圧縮のための記述変更を行うことができる。これにより、集積回路の効率的な最適化が可能となる。
【００８４】
さらに、本実施の形態例における集積回路最適化プログラムは、最適化処理によって削除される演算回路よりも、追加するセレクタ回路の規模（面積）が小さいか否かを判定し、回路規模が削減される場合にのみ、最適化処理を行ってもよい。これによると、最適化処理によって、ＬＳＩの消費電力量の削減だけでなく、ＬＳＩの回路規模の縮小もあわせて実現される。
【００８５】
なお、本実施の形態例では、集積回路記述から、論理等価な２つの組合せ回路を検出して集約化する場合を例示した。しかしながら、集約化する対象の論理等価な組合せ回路は３つ以上であってもよい。続いて、論理等価な組合せ回路が３つ検出される場合の集積回路記述の変更処理について説明する。
【００８６】
この場合、集積回路最適化プログラムは、記述を追加するセレクタ回路について、さらに、第３の組合せ回路の入力信号を、当該組合せ回路の出力信号を保持するフリップフロップの保持条件に応じて選択させ、共有演算回路に入力させる。このとき、セレクタ回路は、第１〜３の組合せ回路に対応する各入力信号のうち、異なる入力信号を、各保持条件に応じて選択する。
【００８７】
そして、集積回路最適化プログラムは、共有演算回路の出力信号を第３の組合せ回路に対応するフリップフロップに接続させるような記述を集積回路記述に追加する。そして、集積回路最適化プログラムは、第１、２の組合せ回路に加えて、第３の組合せ回路の記述を集積回路記述から削除する。
【００８８】
これにより、集積回路最適化プログラムは、論理等価な組合せ回路を３つ以上有するＬＳＩが記述された集積回路記述について、論理等価な組合せ回路を１つの共有演算回路に集約化することができ、ＬＳＩをより効果的に圧縮することができる。
【００８９】
続いて、第２の実施の形態例として、ＲＴＬの集積回路記述が論理合成されることによって生成されるネットリストの集積回路記述を最適化する処理について述べる。
［第２の実施の形態例］
第２の実施の形態例では、ネットリストの集積回路記述ＳＸに基づくＬＳＩを最適化する処理について例示する。まず、本実施の形態例における最適化条件を満たすネットリストの集積回路記述ＳＸについて例示する。
【００９０】
図１０、図１１は、最適化対象のネットリストの集積回路記述ＮＸ１、ＮＸ２（ＳＸ）を表す例図である。図１０、図１１のネットリストの集積回路記述ＮＸ１、ＮＸ２は、図５のＲＴＬの集積回路記述ＲＸが論理合成され、生成されたネットリストである。従って、図１０、図１１の集積回路記述ＮＸ１、ＮＸ２は、図５の集積回路記述ＲＸと同一の処理が記述され、最適化の条件を満たしている。処理の内容については、図５で前述したとおりである。
【００９１】
そこで、図１０、図１１の集積回路記述ＮＸ１、ＮＸ２における、乗算回路Ａ、Ｂ、フリップフロップＯＵＴ_Ａ、ＯＵＴ_Ｂ、フリップフロップＯＵＴ_Ａ、ＯＵＴ_Ｂの保持条件の関係に関連する記述について説明する。
【００９２】
まず、図１０の集積回路記述ＮＸ１のコードｃ１１は乗算回路Ｂ（ｍｕｌｔ＿Ｂ）、コードｃ１２は乗算回路Ａ（ｍｕｌｔ＿Ａ）の記述を示す。具体的に、コードｃ１１には、信号（｛ｎ１７０,ｎ１５０,ｎ１３,ｎ１１０,ｎ９０,ｎ７０,ｎ５０,ｎ３０｝（以下、信号ｎ１７０〜ｎ３０））と信号ＩＮ＿Ｂとを乗算して、出力信号（｛Ｎ２５,Ｎ２４,Ｎ２３,Ｎ２２,Ｎ２１,Ｎ２０,Ｎ１９,Ｎ１８,Ｎ１７,Ｎ１６,Ｎ１５｝（以下、Ｎ２５〜Ｎ１５））として出力する乗算回路Ｂが記述される。また、コードｃ１２には、乗算回路Ｂと同一の信号ｎ１７０〜ｎ３０と、信号ＩＮ＿Ａとを乗算して、出力信号（｛Ｎ１２,Ｎ１１,Ｎ１０,Ｎ９,Ｎ８,Ｎ７,Ｎ６,Ｎ５,Ｎ４,Ｎ３,Ｎ２｝（以下、Ｎ１２〜Ｎ２））として出力する乗算回路Ａが記述される。
【００９３】
続いて、図１１の集積回路記述ＮＸ２のコードｃ１３は、フリップフロップＯＵＴ＿Ａ、ＯＵＴ_Ｂの記述を示す。具体的に、コードｃ１３の３７行目から４７行目には、クロック信号ｎｅｔ１９がＨレベルのとき、乗算回路Ａ（ｍｕｌｔ＿Ａ）からの出力信号Ｎ１２〜Ｎ２を保持するフリップフロップＯＵＴ＿Ａが記述される。また、コードｃ１３の４９行目から５９行目には、クロック信号ｎｅｔ２６がＨレベルのときに、乗算回路Ｂ（ｍｕｌｔ＿Ｂ）からの出力信号Ｎ２５〜Ｎ１５を保持するフリップフロップＯＵＴ＿Ｂが記述される。
【００９４】
そして、コードｃ１３の記述によると、フリップフロップＯＵＴ＿Ａの保持条件Ａはクロック信号ｎｅｔ１９がＨレベルのときを示し、フリップフロップＯＵＴ＿Ｂの保持条件Ｂはクロック信号ｎｅｔ２６がＨレベルのときを示すことがわかる。続いて、クロック信号ｎｅｔ１９、ｎｅｔ２６を出力するクロックゲート回路の記述について説明する。
【００９５】
図１１のコードｃ１４は、クロック信号ｎｅｔ１９、ｎｅｔ２６を出力するクロックゲート回路の記述である。具体的に、コードｃ１４の３４行目において、信号ｎ１９０がＨレベルのとき、モジュールｃｌｋ＿ｇａｔｅ＿ＯＵＴ＿Ａ＿ｒｅｇ（クロックゲート回路Ａ）からＨレベルのクロック信号ｎｅｔ１９が出力されることが記述される。また、３５行目において、信号ｎ１８０がＨレベルのとき、モジュールｃｌｋ＿ｇａｔｅ＿ＯＵＴ＿Ｂ＿ｒｅｇ（クロックゲート回路Ｂ）からＨレベルのクロック信号ｎｅｔ２６が出力されることが記述される。続いて、クロックゲート回路Ａ、Ｂの入力信号ｎ１９０、ｎ１８０を出力する演算モジュールＩＮＶＥＲＴＥＲの記述について説明する。
【００９６】
図１１のコードｃ１５には、クロックゲート回路Ａ、Ｂの入力信号ｎ１９０、ｎ１８０を出力する演算モジュールＩＮＶＥＲＴＥＲが記述される。具体的に、コードｃ１５の３１行目において、演算モジュールＩＮＶＥＲＴＥＲは、入力とするクロックセレクト信号ＩＣＫＬ＿ｓｅｌを反転して信号ｎ１８０として出力することが記述される。また、３２行目において、演算モジュールＩＮＶＥＲＴＥＲは、入力とする信号ｎ１８０を反転して信号ｎ１９０として出力することが記述される。
【００９７】
即ち、Ｈレベルのクロックセレクト信号ＩＣＫＬ＿ｓｅｌが入力されたとき、演算モジュールＩＮＶＥＲＴＥＲ（３１行目）は、Ｌレベルの信号ｎ１８０を出力し、演算モジュールＩＮＶＥＲＴＥＲ（３２行目）は、Ｌレベルの信号ｎ１８０に基づいて、Ｈレベルの信号ｎ１９０を出力する。一方、Ｌレベルのクロックセレクト信号ＩＣＫＬ＿ｓｅｌが入力されたとき、各演算モジュールＩＮＶＥＲＴＥＲから、Ｈレベルの信号ｎ１８０と、Ｌレベルの信号ｎ１９０が出力される。つまり、信号ｎ１８０と信号ｎ１９０とは、常に反転関係にあることがわかる。
【００９８】
信号ｎ１８０と信号ｎ１９０が反転関係にあるため、信号ｎ１９０に基づいてクロックゲート回路Ａ（３４行目）から出力されるクロック信号ｎｅｔ１９の値と、信号ｎ１８０に基づいてクロックゲート回路Ｂ（３５行目）から出力されるクロック信号ｎｅｔ２６の値は、同時にＨレベルになることがない。コードｃ１３の説明で前述したように、フリップフロップＯＵＴ＿Ａはクロック信号ｎｅｔ１９がＨレベルのとき、フリップフロップＯＵＴ＿Ｂの保持条件Ｂはクロック信号ｎｅｔ２６がＨレベルのとき、値を保持するため、保持条件Ａと保持条件Ｂとは反転関係、即ち、排他関係にあることがわかる。
【００９９】
このように、図１０、図１１の集積回路記述ＮＸ１、ＮＸ２の記述によると、図５と同様に、２つの論理等価な組合せ回路（乗算回路Ａ、Ｂ）と、保持条件Ａ、Ｂに基づいて乗算回路Ａ、Ｂからの出力信号を保持するフリップフロップＯＵＴ＿Ａ、ＯＵＴ＿Ｂとが記述されていることがわかる。また、保持条件Ａ、Ｂは排他関係にある。
【０１００】
続いて、図１０、図１１で示した集積回路記述ＮＸ１、ＮＸ２の最適化処理について、フローチャート図に基づいて説明する。
【０１０１】
図１２は、本実施の形態例における集積回路最適化プログラム２１の処理を説明するフローチャート図である。同図のフローチャート図は、第１の実施の形態例における図６のフローチャート図と一部の処理を除いて同じである。図１２と図６のフローチャート図は、工程Ｓ２１及び工程Ｓ２３についてのみ異なる。そのため、ここでは、工程Ｓ２１と工程Ｓ２３についてのみ説明する。
【０１０２】
前述したとおり、図６のフローチャート図では、集積回路最適化プログラム２１は、ツール等を用いて集積回路記述から論理等価な演算回路の記述を抽出する（Ｓ１１）。それに対して、図１２のフローチャート図では、集積回路最適化プログラム２１は、同じ演算モジュールを複数箇所でインスタンスしているか否かを判定することによって、集積回路記述から論理等価な演算回路の記述を抽出する（Ｓ２１）。
【０１０３】
インスタンスとは、定義済みの演算モジュールを実体化することを示す。そのため、同一の演算モジュールを複数箇所でインスタンスすることは、同一の演算モジュールを複数箇所で呼び出すことを示す。同一の演算モジュールにおける演算処理及び入出力信号は、同一である。従って、同一の演算モジュールを複数箇所でインスタンスしている場合、実質的に、集積回路記述ＮＸに論理等価な複数の演算回路が記述されていることを意味する。このため、集積回路最適化プログラム２１は、同一の演算モジュールが複数箇所でインスタンスされているか否かを判定することによって、論理等価な演算回路の記述を抽出する。
【０１０４】
また、工程Ｓ２３では、工程Ｓ２１で検出された論理等価な複数の演算回路を示す演算モジュールの出力信号が、フリップフロップに入力されているか否かが判定される。その他の工程の処理は、図６のフローチャート図と同様である。
【０１０５】
なお、この例において、ＲＴＬの集積回路記述を対象とする第１の実施の形態例では図６のフローチャート図を、ネットリストの集積回路記述を対象とする第２の実施の形態例では図１２のフローチャート図を適用しているが、この例に限定されるものではない。ＲＴＬの集積回路記述に図１２のフローチャート図を適用してもよいし、ネットリストの集積回路記述に、図６のフローチャート図を適用してもよい。
【０１０６】
続いて、図１２のフローチャート図で記述した各工程の処理について、図１０、図１１のネットリストの集積回路記述ＮＸ１、ＮＸ２と、詳細なフローチャート図（図１３）に基づいて説明する。
【０１０７】
図１３は、本実施の形態例における集積回路最適化プログラム２１の処理の各工程を詳細に説明するフローチャート図である。同図のフローチャート図についても、第１の実施の形態例における図７のフローチャート図と工程Ｓ２１Ａ、Ｓ２３Ａを除いて同じである。
【０１０８】
図１３のフローチャート図において、集積回路最適化プログラム２１は、集積回路記述から、同一の演算モジュールをインスタンスしている記述を抽出し（Ｓ２１Ａ）、回路規模が削減されると判定された場合（Ｓ２２Ａ）、等価演算回路リストとして出力する。そして、工程Ｓ２３Ａでは、集積回路最適化プログラム２１は、等価演算回路リストＬ１が有する演算モジュールの記述に基づいて、各演算モジュールの出力信号がフリップフロップに入力されているか否かを判定し、ＦＦリストＬ２として出力する。その他の工程の処理は、図７のフローチャート図と同様である。
【０１０９】
続いて、図１０、図１１の集積回路記述ＮＸ１、ＮＸ２に基づいて、図１３のフローチャート図における各工程の処理について説明する。
【０１１０】
図１４、図１５は、本実施の形態例における集積回路最適化プログラム２１が出力する各リストＬ１〜Ｌ３の例を表す図である。図１４には、図１０、図１１の集積回路記述ＮＸ１、ＮＸ２を処理対象とする場合の等価演算回路リスト（上部）Ｌ１、保持条件リスト（下部）Ｌ３の例が表されている。そして、図１５には、ＦＦリストＬ２の例が表されている。
【０１１１】
まず、本実施の形態例における集積回路最適化プログラム２１は、前述した図１０、図１１の集積回路記述ＮＸ１、ＮＸ２から、同一の演算モジュールを複数箇所でインスタンスしている記述を抽出する（図１３のＳ２１Ａ）。例えば、集積回路最適化プログラム２１は、予め候補として挙げる演算モジュール（ＭＵＬＴＩＰＬＩＥＲ等）の一覧に基づいて、一覧に挙げられた演算モジュールが、集積回路記述において複数箇所でインスタンスされているときに、当該演算モジュールの記述を抽出する。また、集積回路最適化プログラム２１は、第１の実施の形態例と同様に、最適化によって回路規模が縮小される場合に（Ｓ２２Ａ）、等価演算回路リストを出力する。
【０１１２】
図１０、図１１の集積回路記述ＮＸ１、ＮＸ２では、演算モジュールＭＵＬＴＩＰＬＩＥＲが、演算モジュールｍｕｌｔ＿Ａ（乗算回路Ａ）、ｍｕｌｔ＿Ｂ（乗算回路Ｂ）として複数箇所でインスタンスされている（１１行目〜１４行目）。これにより、演算モジュールｍｕｌｔ＿Ａ、ｍｕｌｔ＿Ｂの記述を有する図１４の等価演算回路リストＬ１が出力される。なお、同一の演算モジュールの場合、入出力信号のビット幅も同一である。そのため、図１４の等価演算回路リストＬ１には、図８の等価演算回路リストＬ１とは異なり、入力信号のビット幅の定義を示す記述は含まれない。
【０１１３】
続いて、集積回路最適化プログラム２１は、等価演算回路リストＬ１が有する演算モジュールｍｕｌｔ＿Ａ、ｍｕｌｔ＿Ｂの出力信号が、それぞれフリップフロップに入力されているか否かを判定する（Ｓ２３Ａ）。この判定は、例えば、演算モジュールｍｕｌｔ＿Ａ、ｍｕｌｔ＿Ｂ出力信号を入力とするフリップフロップの演算モジュールが記述されているか否かが検索されることによって行われる。
【０１１４】
前述したとおり、図１０の集積回路記述ＮＸ１のコードｃ１１、ｃ１２の記述と、図１１の集積回路記述ＮＸ２のコードｃ１３の記述とによると、演算モジュールｍｕｌｔ＿Ａ、ｍｕｌｔ＿Ｂの出力信号は、それぞれフリップフロップＯＵＴ＿Ａ、ＯＵＴ_Ｂに入力されることがわかる。これにより、図１１のコードｃ１３（３７行目〜５９行目）を有する図１５のＦＦリストＬ２が出力される。
【０１１５】
続いて、集積回路最適化プログラム２１は、図１５のＦＦリストＬ２が有するフリップフロップＯＵＴ＿Ａ、ＯＵＴ＿Ｂの保持条件を、集積回路記述から抽出する（Ｓ２４Ａ）。この処理は、例えば、フリップフロップＯＵＴ＿Ａ、ＯＵＴ＿Ｂへの入力条件を示す信号をバックトレースすることによって行われる。前述したとおり、図１１の集積回路記述ＮＸ２のコードｃ１４、ｃ１５によると、フリップフロップＯＵＴ＿Ａの保持条件Ａを示す信号と、フリップフロップＯＵＴ＿Ｂの保持条件Ｂを示す信号の値は反転関係にある。従って、保持条件Ａと保持条件Ｂとは、排他関係にあることがわかる。これにより、保持条件を示す図１１のコードｃ１４、ｃ１５（３１行目〜３５行目）を有する図１４の保持条件リストＬ３が出力される。
【０１１６】
続いて、集積回路最適化プログラム２１は、重複回路圧縮工程Ｓ２５〜Ｓ２７として、図１４、図１５の各リストＬ１〜Ｌ３に基づいて、集積回路記述ＮＸ１、ＮＸ２の記述を変更する。
【０１１７】
集積回路最適化プログラム２１は、論理等価回路リストＬ１と保持条件リストＬ３とに基づいて、集積回路記述に対してセレクタ回路の記述を追加する（図１３のＳ２５）。具体的に、まず、集積回路最適化プログラム２１は、セレクタ回路のセレクト対象信号を抽出する。論理等価回路リストＬ１（図１４）が有する演算モジュールｍｕｌｔ＿Ａ、ｍｕｌｔ＿Ｂの入力信号のうち、入力信号ｎ１７０〜ｎ３０は共通であるため、セレクト対象信号として、信号ＩＮ＿Ａ、ＩＮ＿Ｂが抽出される。
【０１１８】
続いて、集積回路最適化プログラム２１は、保持条件リストＬ３（図１４）に基づいて、保持条件Ａに応答してセレクト対象信号ＩＮ＿Ａを、保持条件Ｂに応答してセレクト対象信号ＩＮ＿Ｂを選択するセレクタ回路の記述を、集積回路記述ＮＸ１、ＮＸ２に追加する。
【０１１９】
図１１で前述したとおり、保持条件Ａはクロック信号ｎｅｔ１９がＨレベル、保持条件Ｂはクロック信号ｎｅｔ２６がＨレベルのときを示し、クロック信号ｎｅｔ１９がＨレベルのとき信号ｎ１９０はＨレベル、クロック信号ｎｅｔ２６がＨレベルのとき信号ｎ１９０はＬレベルである。このため、集積回路最適化プログラム２１は、セレクタ回路のセレクト信号を信号ｎ１９０とする。そこで、信号ｎ１９０がＨレベルのとき（即ち、保持条件Ａを満たすとき）セレクト対象信号ＩＮ＿Ａを、信号ｎ１９０がＬレベルのとき（即ち、保持条件Ｂを満たすとき）セレクト対象信号ＩＮ＿Ｂを選択するセレクタ回路の記述が追加される。
【０１２０】
図１６、図１７は、本実施の形態例における集積回路最適化プログラム２１によって変更が加えられた図１０、図１１の集積回路記述ＬＹ１、ＬＹ２（ＳＹ）を表す例図である。同図の点線で囲まれたコードｍ１１〜ｍ１３は、集積回路最適化プログラム２１によって記述が変更されたコードを示す。
【０１２１】
図１６の変更後の集積回路記述ＮＹ１において、コードｍ１１は、工程Ｓ２５によって追加されるセレクタ回路の記述を示す。具体的に、コードｍ１１の１２行目の記述は、セレクタ回路から出力される３ビットの信号ｍｕｘｅｄの定義を示す。そして、１３行目〜１５行目の記述は、信号ｎ１９０がＨレベルのときに信号ＩＮ＿Ａを、信号ｎ１９０がＬレベルのときに信号ＩＮ＿Ｂを選択し、信号ｍｕｘｅｄにセットするセレクタ回路を示す。この記述によりセレクタ回路が追加される。
【０１２２】
続いて、追加したセレクタ回路からの出力信号ｍｕｘｅｄが共有演算回路に接続されるように、集積回路記述が記述変更される（図１３のＳ２６）。図１６の変更後の集積回路記述ＮＹ１において、コードｍ１２の記述が工程Ｓ２６によって追加される。この例において、演算モジュールｍｕｌｔ＿Ａ、ｍｕｌｔ＿Ｂ（１７行目〜２０行目）は、共有演算回路ｍｕｌｔ＿Ｃ（２１、２２行目）に置き換えられる。このため、コードｍ１２において、共有演算回路の演算対象の信号を、共通信号ｎ１７０〜ｎ３０と、セレクタ回路によって選択された信号ｍｕｘｅｄとにすることによって、セレクタ回路からの出力信号ｍｕｘｅｄが共有演算回路ｍｕｌｔ＿Ｃに接続される。
【０１２３】
続いて、集積回路最適化プログラム２１は、集積回路記述に、保持条件Ａ、Ｂ（信号ｎ１９０がＨレベル／Ｌレベル）に応じてセレクタ回路によって選択された信号ｍｕｘｅｄ（ＩＮ＿Ａ／ＩＮ＿Ｂ）に基づく共有演算回路からの出力信号を、当該保持条件に対応するフリップフロップＯＵＴ＿Ａ、ＯＵＴ＿Ｂに接続するように記述を追加する（図１３のＳ２７）。
【０１２４】
図１７の変更後の集積回路記述ＬＹ２において、コードｍ１３における下線部の記述が工程Ｓ２７によって変更される。コードｍ１３の下線部では、保持条件Ｂを満たすとき（クロック信号ｎｅｔ２６がＨレベルのとき）、共有演算回路ｍｕｌｔ＿Ｃ（図１６の２１、２２行目）からの出力信号Ｎ１２〜Ｎ２がフリップフロップＯＵＴ＿Ｂに保持されるように変更されている。なお、フリップフロップＯＵＴ＿Ａについては、もともと出力信号Ｎ１２〜Ｎ２を保持するように記述されているため（図１７の４６〜５６行目）、記述は変更されない。
【０１２５】
そして、集積回路最適化プログラム２１は、共有演算回路ｍｕｌｔ＿Ｃ（図１６の２１、２２行目）に置き換えた演算モジュールｍｕｌｔ＿Ａ、ｍｕｌｔ＿Ｂの記述（図１６の１７行目〜２０行目）を集積回路記述から削除する（図１３のＳ２８）。図１６の変更後の集積回路記述ＬＹ１において、演算モジュールｍｕｌｔ＿Ａ、ｍｕｌｔ＿Ｂの記述が削除されている（図１６の１７行目〜２０行目）。行頭の／／は、行のコードが無効であることを示すコードである。
【０１２６】
このような定型的な記述変更処理により、図１６、図１７の集積回路記述ＬＹ１、ＬＹ２において、乗算回路Ａ（ｍｕｌｔ＿Ａ）、Ｂ（ｍｕｌｔ＿Ｂ）がひとつの共有演算回路（ｍｕｌｔ＿Ｃ）に置き換えられ、乗算回路１つ分の回路が圧縮される。これにより、乗算回路が１つ分削除されるため、消費電力量が削減される。また、削除した乗算回路よりセレクタ回路の回路規模が小さいため、回路規模についても合わせて縮小される。
【０１２７】
以上のようにして、本実施の形態例における集積回路最適化プログラムは、入力信号に基づいて論理演算する複数の組合せ回路と、複数の組合せ回路からの出力信号を保持条件に基づいてそれぞれ保持する複数のフリップフロップとが記述された集積回路記述から、論理等価な組合せ回路であって対応するそれぞれの前記フリップフロップの保持条件が排他関係にある複数の組合せ回路を検出する。
【０１２８】
そして、集積回路最適化プログラムは、検出した複数の組合せ回路と論理等価な共有組合せ回路に当該複数の組合せ回路を置き換えると共に、複数の組合せ回路の入力信号をそれぞれ対応する各フリップフロップの保持条件に応じて選択し共有組合せ回路に出力するセレクタ回路を追加し、それぞれの入力信号に基づく共有組合せ回路の出力信号を各フリップフロップに接続するように、集積回路記述の記述を変更する。そして、集積回路最適化プログラムは、複数の組合せ回路の記述を集積回路記述から削除する。
【０１２９】
このようにして、本実施の形態例における集積回路最適化プログラムは、対象の集積回路記述がＲＴＬであっても、ネットリストであっても、集積回路記述の変更によって、集積回路記述に基づくＬＳＩを圧縮し、最適化することができる。これにより、変更後の集積回路記述に基づくＬＳＩの消費電力が削減される。
【０１３０】
また、本実施の形態例における集積回路最適化プログラムは、効率的に最適化可能な集積回路記述の条件（最適化の条件）を見出したことによって、集積回路記述が条件を満たすか否かを記述に基づいて判定可能とし、条件を満たす場合に、条件に対応する記述箇所を定型的に変更することによって、重複回路の検出処理及び重複回路の圧縮処理を行うことができる。このため、集積回路最適化プログラムは、集積回路記述に基づいて、規則的に及び定型的に、重複回路を検出し圧縮のための記述変更を行うことができる。これにより、集積回路の効率的な最適化が可能となる。
【０１３１】
さらに、本実施の形態例における集積回路最適化プログラムは、最適化処理によって削除される演算回路よりも、追加するセレクタ回路の規模（面積）が小さいか否かを判定し、回路規模が削減される場合にのみ、最適化処理を行ってもよい。これによると、最適化処理によって、ＬＳＩの消費電力量の削減だけでなく、ＬＳＩの回路規模の縮小もあわせて実現される。
【０１３２】
なお、本実施の形態例においても、集約化対象の論理等価な組合せ回路は３つ以上であってもよい。これにより、集積回路最適化プログラムは、ＬＳＩをより効果的に圧縮することができる。
【０１３３】
以上の実施の形態をまとめると、次の付記のとおりである。
【０１３４】
（付記１）
集積回路が記述された集積回路記述を記述変更によって最適化する最適化処理をコンピュータに実行させるコンピュータ読み取り可能な集積回路最適化プログラムにおいて、
前記最適化処理は、
入力信号に基づいて論理演算する複数の組合せ回路と、前記複数の組合せ回路からの出力信号を保持条件に基づいてそれぞれ保持する複数のフリップフロップとが記述された前記集積回路記述から、論理等価な前記組合せ回路であって対応するそれぞれの前記フリップフロップの前記保持条件が排他関係にある第１、２の組合せ回路を検出する重複回路検出工程と、
前記集積回路記述の重複回路圧縮工程とを有し、
前記重複回路圧縮工程は、
前記第１、２の組合せ回路と論理等価な共有組合せ回路に前記第１、２の組合せ回路を置き換えると共に、前記第１、２の組合せ回路の第１、２の入力信号を、それぞれ対応する第１、２のフリップフロップの第１、２の保持条件に応じて選択し、前記共有組合せ回路に出力するセレクタ回路の記述を前記集積回路記述に追加する追加工程と、
前記第１、２の入力信号に基づく前記共有組合せ回路の出力信号をそれぞれ前記第１、２のフリップフロップに接続する記述を前記集積回路記述に追加する接続工程と、
前記第１、２の組合せ回路の記述を前記集積回路記述から削除する削除工程と、
を有する集積回路最適化プログラム。
【０１３５】
（付記２）
付記１において、
前記重複回路検出工程において、前記組合せ回路の前記入力信号及び前記出力信号の真理値の組合せが同一である場合に論理等価である集積回路最適化プログラム。
【０１３６】
（付記３）
付記１または２において、
前記保持条件は、前記フリップフロップをそれぞれ駆動するクロック信号、または、前記フリップフロップのイネーブル信号のいずれかまたは両方の状態である集積回路最適化プログラム。
【０１３７】
（付記４）
付記１乃至３のいずれかにおいて、
前記セレクタ回路は、第１、２の入力信号のうち異なる入力信号を、前記第１、２の保持条件に応じて選択する集積回路最適化プログラム。
【０１３８】
（付記５）
付記１乃至４のいずれかにおいて、
前記重複回路検出工程は、前記第１、２の組合せ回路に加えて、当該第１、２の組合せ回路と論理等価な前記組合せ回路であって対応する前記フリップフロップの前記保持条件が前記第１、２の保持条件とそれぞれ排他関係にある第３の組合せ回路を検出し、
前記追加工程は、さらに、前記第３の組合せ回路の第３の入力信号を第３のフリップフロップの第３の保持条件に応じて選択するような前記セレクタ回路の記述を追加し、
前記接続工程は、さらに、前記第３の入力信号に基づく前記共有組合せ回路の前記出力信号を前記第３のフリップフロップに接続する記述を追加し、
前記削除工程は、さらに、前記第３の組合せ回路の記述を削除する集積回路最適化プログラム。
【０１３９】
（付記６）
付記５において、
前記セレクタ回路は、第１乃至３の入力信号のうち異なる入力信号を、前記第１乃至３の保持条件に応じて選択する集積回路最適化プログラム。
【０１４０】
（付記７）
付記１乃至６のいずれかにおいて、
前記重複回路圧縮工程は、前記セレクタ回路よりも、前記削除工程で記述が削除される組合せ回路の面積が大きい場合に実行される集積回路最適化プログラム。
【０１４１】
（付記８）
付記１乃至７のいずれかにおいて、
前記集積回路記述は、ハードウェア記述言語、またはネットリストによって記述されている集積回路最適化プログラム。
【０１４２】
（付記９）
集積回路が記述された集積回路記述を記述変更によって最適化する集積回路最適化装置であって、
入力信号に基づいて論理演算する複数の組合せ回路と、前記複数の組合せ回路からの出力信号を保持条件に基づいてそれぞれ保持する複数のフリップフロップとが記述された前記集積回路記述から、論理等価な前記組合せ回路であって対応するそれぞれの前記フリップフロップの前記保持条件が排他関係にある第１、２の組合せ回路を検出する重複回路検出手段と、
前記集積回路記述の重複回路圧縮手段とを有し、
前記重複回路圧縮手段は、
前記第１、２の組合せ回路と論理等価な共有組合せ回路に前記第１、２の組合せ回路を置き換えると共に、前記第１、２の組合せ回路の第１、２の入力信号を、それぞれ対応する第１、２のフリップフロップの第１、２の保持条件に応じて選択し、前記共有組合せ回路に出力するセレクタ回路の記述を前記集積回路記述に追加する追加手段と、
前記第１、２の入力信号に基づく前記共有組合せ回路の出力信号をそれぞれ前記第１、２のフリップフロップに接続する記述を前記集積回路記述に追加する接続手段と、
前記第１、２の組合せ回路の記述を前記集積回路記述から削除する削除手段と、
を有する集積回路最適化装置。
【符号の説明】
【０１４３】
１：コンピュータ、１１：ＣＰＵ、１２：メモリ、１３：入出力インタフェース、２１：集積回路最適化プログラム、ＳＸ：変更前の集積回路記述、ＳＹ：変更後の集積回路記述
【図１】
0005915154.tif 000002
【図２】
0005915154.tif 000003
【図３】
0005915154.tif 000004
【図４】
0005915154.tif 000005
【図５】
0005915154.tif 000006
【図６】
0005915154.tif 000007
【図７】
0005915154.tif 000008
【図８】
0005915154.tif 000009
【図９】
0005915154.tif 000010
【図１０】
0005915154.tif 000011
【図１１】
0005915154.tif 000012
【図１２】
0005915154.tif 000013
【図１３】
0005915154.tif 000014
【図１４】
0005915154.tif 000015
【図１５】
0005915154.tif 000016
【図１６】
0005915154.tif 000017
【図１７】
0005915154.tif 000018