(57)【要約】【課題】フリップフロップの論理出力が不安定になる現象を抑制することができる論理合成方法、プログラムおよび論理合成装置を提供する。【解決手段】論理合成方法は、複数のフリッププロップの接続関係を示す第１のネットリストに含まれる複数のフリッププロップの中から、入力されるデータ信号およびクロック信号が非同期である非同期フリップフロップを探索する工程と、非同期フリップフロップの後段に接続される非同期後段フリップフロップを並列最適化禁止にする合成制約を付与する工程と、合成制約に基づいて最適化を実行し、第２のネットリストを生成する工程とを包含する。【選択図】図２
2015056092.tif 000002
【特許請求の範囲】
【請求項１】
複数のフリッププロップの接続関係を示す第１のネットリストに含まれる前記複数のフリッププロップの中から、入力されるデータ信号およびクロック信号が非同期である非同期フリップフロップを探索する工程と、
前記非同期フリップフロップの後段に接続される非同期後段フリップフロップを並列最適化禁止にする合成制約を付与する工程と、
前記合成制約に基づいて最適化を実行し、第２のネットリストを生成する工程と
を包含する、論理合成方法。
【請求項２】
前記非同期フリップフロップを探索する工程は、
前記データ信号に基づくクロック信号の周期と前記クロック信号の周期とが整数倍の関係を有していないフリップフロップを前記非同期フリップフロップであると判定する工程を有する、請求項１に記載の論理合成方法。
【請求項３】
前記第１のネットリストは入力端子を含み、
前記入力端子には、クロック信号と同期するか否かを示す情報と、クロック信号と同期する場合、前記入力端子が同期するクロック信号を示す情報とを含むタイミング情報が予め設定されており、
前記非同期フリップフロップを探索する工程は、
前記タイミング情報に基づいて、前記入力端子に接続されているフリップフロップに入力されるデータ信号およびクロック信号が非同期であるか否かを判定する工程を有する、請求項１または請求項２に記載の論理合成方法。
【請求項４】
前記第１のネットリストは入力端子と出力端子とを含み、
前記非同期フリップフロップを探索する工程は、
前記出力端子から前記入力端子に向かう方向に前記非同期フリップフロップを探索する工程を有する、請求項１または請求項２に記載の論理合成方法。
【請求項５】
ハードウェア記述言語で記載された回路記述を論理圧縮して前記第１のネットリストを生成する工程をさらに包含する、請求項１から請求項４のいずれか１項に記載の論理合成方法。
【請求項６】
前記非同期フリップフロップを探索する工程は、
前記第１のネットリストに含まれる全てのフリップフロップに対して探索を行う工程を有する、請求項１から請求項５のいずれか１項に記載の論理合成方法。
【請求項７】
コンピューターに、
複数のフリッププロップの接続関係を示す第１のネットリストに含まれる前記複数のフリッププロップの中から、入力されるデータ信号およびクロック信号が非同期である非同期フリップフロップを探索する手順と、
前記非同期フリップフロップの後段に接続される非同期後段フリップフロップを並列最適化禁止にする合成制約を付与する手順と、
前記合成制約に基づいて最適化を実行し、第２のネットリストを生成する手順と
を実行させるためのプログラム。
【請求項８】
複数のフリッププロップの接続関係を示す第１のネットリストに含まれる前記複数のフリッププロップの中から、入力されるデータ信号およびクロック信号が非同期である非同期フリップフロップを探索する探索部と、
前記非同期フリップフロップの後段に接続される非同期後段フリップフロップを並列最適化禁止にする合成制約を付与する付与部と、
前記合成制約に基づいて最適化を実行し、第２のネットリストを生成する生成部とを備える、論理合成装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、論理合成方法、プログラムおよび論理合成装置に関する。
【背景技術】
【０００２】
従来、論理回路設計の手法として、Ｖｅｒｉｌｏｇ−ＨＤＬおよびＶＨＤＬなどのハードウェア記述言語（ＨＤＬ：Ｈａｒｄｗａｒｅ  Ｄｅｓｃｒｉｐｔｉｏｎ  Ｌａｎｇｕａｇｅ）による回路設計が行われている。ハードウェア記述言語で設計された回路は、論理合成ツールでネットリスト化され、レイアウトを行い、マスクパターンが生成される。
【０００３】
特許文献１には、非同期信号が入力されるフリップフロップに対して複数段化処理を実行する論理回路の設計方法が記載されている。特許文献１の設計方法では、非同期信号が入力されるフリップフロップを複数段化することによって、フリップフロップの論理出力が不安定になる現象（例えば、メタステーブル現象）の発生を抑制している。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平９−２５９１７３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献１に記載の論理回路の設計手法では、最適化処理をした際に、非同期信号の入力されるフリップフロップの出力が複数のフリップフロップに接続される可能性があった。その結果、非同期信号の入力されるフリップフロップの論理出力が不安定になる現象が発生する可能性があった。
【０００６】
本発明は上記課題に鑑みてなされたものであり、その目的はフリップフロップの論理出力が不安定になる現象を抑制することができる論理合成方法、プログラムおよび論理合成装置を提供することにある。
【課題を解決するための手段】
【０００７】
本発明に係る論理合成方法は、複数のフリッププロップの接続関係を示す第１のネットリストに含まれる前記複数のフリッププロップの中から、入力されるデータ信号およびクロック信号が非同期である非同期フリップフロップを探索する工程と、前記非同期フリップフロップの後段に接続される非同期後段フリップフロップを並列最適化禁止にする合成制約を付与する工程と、前記合成制約に基づいて最適化を実行し、第２のネットリストを生成する工程とを包含する。
【０００８】
本発明に係るプログラムは、コンピューターに、複数のフリッププロップの接続関係を示す第１のネットリストに含まれる前記複数のフリッププロップの中から、入力されるデータ信号およびクロック信号が非同期である非同期フリップフロップを探索する手順と、前記非同期フリップフロップの後段に接続される非同期後段フリップフロップを並列最適化禁止にする合成制約を付与する手順と、前記合成制約に基づいて最適化を実行し、第２のネットリストを生成する手順とを実行させるためのプログラム。
【０００９】
本発明に係る論理合成装置は、複数のフリッププロップの接続関係を示す第１のネットリストに含まれる前記複数のフリッププロップの中から、入力されるデータ信号およびクロック信号が非同期である非同期フリップフロップを探索する探索部と、前記非同期フリップフロップの後段に接続される非同期後段フリップフロップを並列最適化禁止にする合成制約を付与する付与部と、前記合成制約に基づいて最適化を実行し、第２のネットリストを生成する生成部とを備える。
【発明の効果】
【００１０】
本発明による論理合成方法は、非同期フリップフロップを探索する工程と、非同期後段フリップフロップを並列最適化禁止にする合成制約を付与する工程と、合成制約に基づいて最適化を実行し、第２のネットリストを生成する工程とを包含する。非同期後段フリップフロップを並列最適化禁止にするため、非同期信号の入力されるフリップフロップの出力が複数のフリップフロップに接続される可能性が低減される。したがって、フリップフロップの論理出力が不安定になる現象を抑制することができる。
【図面の簡単な説明】
【００１１】
【図１】（ａ）は、メタステーブル現象を抑制する回路の一例を示す回路図である。（ｂ）は、メタステーブル現象の対策が不十分な回路の一例を示す回路図である。
【図２】本発明の実施形態に係る論理合成方法を示すフローチャートである。
【図３】本発明の実施形態に係る論理合成方法を説明するための回路図である。
【発明を実施するための形態】
【００１２】
以下、図面を参照して本発明による論理合成方法、プログラムおよび論理合成装置の実施形態を説明する。ただし、本発明は以下の実施形態に限定されない。
【００１３】
図１を参照してメタステーブル現象について説明する。図１（ａ）は、メタステーブル現象を抑制する回路１０を示す回路図である。図１（ｂ）は、メタステーブル現象の対策が不十分な回路２０の一例を示す回路図である。
【００１４】
最初に、図１（ａ）を参照して回路１０について説明をする。図１（ａ）に示す回路１０は、Ｄ型フリップフロップＤＦＦ１、Ｄ型フリップフロップＤＦＦ２およびＤ型フリップフロップＤＦＦ３を有している。クロック信号ＣＬＫ＿Ａは、Ｄ型フリップフロップＤＦＦ１のクロック端子に入力される。クロック信号ＣＬＫ＿Ｂは、Ｄ型フリップフロップＤＦＦ２およびＤ型フリップフロップＤＦＦ３のクロック端子にそれぞれ入力される。クロック信号ＣＬＫ＿Ａとクロック信号ＣＬＫ＿Ｂとは、周期が整数倍の関係を有していない。すなわち、クロック信号ＣＬＫ＿Ａとクロック信号ＣＬＫ＿Ｂとは非同期の関係にある。
【００１５】
Ｄ型フリップフロップＤＦＦ１のデータ端子には、データ信号ＤＡＴＡ＿Ａが入力される。Ｄ型フリップフロップＤＦＦ１の出力端子からは、クロック信号ＣＬＫ＿Ａに同期した出力信号Ｑ１が出力される。出力信号Ｑ１は、Ｄ型フリップフロップＤＦＦ２のデータ端子に入力される。Ｄ型フリップフロップＤＦＦ２において、データ端子に入力されるデータ信号Ｑ１（クロック信号ＣＬＫ＿Ａに同期）とクロック端子に入力されるクロック信号ＣＬＫ＿Ｂは、非同期の関係にある。したがって、Ｄ型フリップフロップＤＦＦ２の出力信号Ｑ２において、論理出力が不安定になる現象、すなわちメタステーブル現象が発生する可能性がある。
【００１６】
一方、Ｄ型フリップフロップＤＦＦ３において、データ端子に入力されるデータ信号Ｑ２（クロック端子にクロック信号ＣＬＫ＿Ｂが入力されるＤ型フリップフロップＤＦＦ２の出力信号のためクロック信号ＣＬＫ＿Ｂに同期）とクロック端子に入力されるクロック信号ＣＬＫ＿Ｂは、同期の関係にある。したがって、Ｄ型フリップフロップＤＦＦ３の出力信号ＤＡＴＡ＿Ｂ０および出力信号ＤＡＴＡ＿Ｂ１には、ハイレベルまたはローレベルの安定した同期出力信号が出力される。
【００１７】
メタステーブル現象対策の回路として、典型的に、図１（ａ）に示すような回路が用いられる。２個のフリップフロップ（Ｄ型フリップフロップＤＦＦ２およびＤ型フリップフロップＤＦＦ３）をカスケード接続することによって、後段のフリップフロップ（Ｄ型フリップフロップＤＦＦ３）の出力においてメタステーブル現象が発生するのを抑制している。
【００１８】
続いて、図１（ｂ）を参照してメタステーブル現象対策が不十分な回路２０について説明をする。図１（ａ）を参照して説明した回路と同様な箇所は説明を省略する。図１（ｂ）に示す回路２０は、Ｄ型フリップフロップＤＦＦ１、Ｄ型フリップフロップＤＦＦ２、Ｄ型フリップフロップＤＦＦ３およびＤ型フリップフロップＤＦＦ４を有している。
【００１９】
Ｄ型フリップフロップＤＦＦ２の出力信号Ｑ２は、Ｄ型フリップフロップＤＦＦ３およびＤ型フリップフロップＤＦＦ４のデータ端子に入力される。回路１０とは異なり、Ｄ型フリップフロップＤＦＦ２の出力信号Ｑ２は、複数のフリップフロップ（Ｄ型フリップフロップＤＦＦ３およびＤ型フリップフロップＤＦＦ４）にそれぞれ入力されている。そのため、メタステーブル現象対策が不十分となり、Ｄ型フリップフロップＤＦＦ４の出力信号ＤＡＴＡ＿Ｂ０および／またはＤ型フリップフロップＤＦＦ３の出力信号ＤＡＴＡ＿Ｂ１において、論理出力が不安定になる現象、すなわちメタステーブル現象が発生する可能性がある。
【００２０】
本発明に係る論理合成方法は、入力されるデータ信号およびクロック信号が非同期である非同期フリップフロップ（図１（ａ）に示すＤ型フリップフロップＤＦＦ２）を探索し、非同期フリップフロップの後段に接続されるフリップフロップ（図１（ａ）に示すＤ型フリップフロップＤＦＦ３）を並列最適化禁止にする。したがって、図１（ｂ）に示すような、非同期信号の入力されるフリップフロップの出力が複数のフリップフロップに接続される可能性が低減される。その結果、フリップフロップの論理出力が不安定になる現象を抑制することができる。
【００２１】
以下、図２を参照して、本発明の実施形態に係る論理合成方法を説明する。図２は、本発明の実施形態に係る論理合成方法を示すフローチャートである。
【００２２】
本実施形態の論理合成方法では、図２に示すように、ステップＳ１００〜ステップＳ１０２を行うことによって第１のネットリストを生成する。ステップＳ１０４〜ステップＳ１１８を行うことによって非同期後段フリップフロップの並列最適化を禁止する。ステップＳ１２０〜ステップＳ１２２を行うことによって第２のネットリストを出力する。第１のネットリストは、ハードウェア記述言語を論理回路に変換したネットリストである。第２のネットリストは、第１のネットリストに対して、タイミングに関する最適化および面積に関する最適化が行われたネットリストである。
【００２３】
ステップＳ１００：ＨＤＬ（ハードウェア記述言語）が入力され、ＨＤＬの解析を行う。Ｖｅｒｉｌｏｇ−ＨＤＬおよびＶＨＤＬなどのハードウェア記述言語によって記載された回路記述が入力される。入力されたＨＤＬに対して、文法の解析が行われる。文法の解析でエラーが発生するとユーザーに通知される。
【００２４】
ステップＳ１０２：論理圧縮が行われ第１のネットリストが生成される。具体的には、回路記述は具体的な回路要素（例えば、ＡＮＤゲート、ＯＲゲートおよびフリップフロップなど）に変換される。そして、論理圧縮が行われ冗長な回路が削減される。論理圧縮が行われ、回路要素が割り当てられた、第１のネットリストが生成される。
【００２５】
ステップＳ１０４：全てのフリップフロップの入力データの経路を探索したか否かを判定する。全てのフリップフロップの入力データの経路を探索したと判定された場合（ステップＳ１０４：Ｙｅｓ）、論理合成方法はステップＳ１２０に進む。全てのフリップフロップの入力データの経路を探索したと判定されない場合（ステップＳ１０４：Ｎｏ）、論理合成方法はステップＳ１０６に進む。
【００２６】
ステップＳ１０６：フリップフロップのデータ入力の上流経路を一本ずつ逆上がる。ここでは、上流経路を逆上がる方向、すなわち第１ネットリストの出力端子から入力端子に向かう方向に経路を逆上がる。
【００２７】
ステップＳ１０８：上流経路を逆上がった到達先がフリップフロップであるか否かを判定する。フリップフロップであると判定された場合（ステップＳ１０８：Ｙｅｓ）、論理合成方法はステップＳ１１２に進む。フリップフロップでないと判定された場合（ステップＳ１０８：Ｎｏ）、論理合成方法はステップＳ１１０に進む。
【００２８】
ステップＳ１１０：上流経路を逆上がった到達先が入力端子であるか否かを判定する。入力端子であると判定された場合（ステップＳ１１０：Ｙｅｓ）、論理合成方法はステップＳ１１２に進む。入力端子でないと判定された場合（ステップＳ１１０：Ｎｏ）、論理合成方法はステップＳ１１８に進む。
【００２９】
ステップＳ１１２：入力されるデータ信号とクロック信号が非同期であるか否か（すなわち、非同期入力か否か）を判定する。非同期入力でないと判定された場合（ステップＳ１１２：Ｎｏ）、論理合成方法はステップＳ１０４に戻る。非同期入力であると判定された場合（ステップＳ１１２：Ｙｅｓ）、そのフロップフロップを非同期フリップフロップと決定し、論理合成方法はステップＳ１１４に進む。
【００３０】
ステップＳ１１４：非同期フリップフロップの出力の下流経路を一本下がる。
【００３１】
ステップＳ１１６：到達したフリップフロップにフリップフロップ並列最適化を禁止する合成制約を付与し、論理合成方法はステップＳ１０４に戻る。
【００３２】
ステップＳ１１８：論理ゲートのデータ入力の上流経路を一本ずつ逆上がり、論理合成方法はステップＳ１０８に戻る。
【００３３】
ステップＳ１０８、ステップＳ１１０、ステップＳ１１２およびステップＳ１１８を繰り返すことによって、非同期フリップフロップまたは入力端子に到達するまで入力の上流経路を探索する。ステップＳ１０４〜ステップＳ１１８を繰り返すことによって、全てのフリップフロップの入力データの経路を探索することができる。
【００３４】
ステップＳ１２０：最適化を実行し、第２のネットリストを生成する。最適化を実行する際、ステップＳ１１６においてフリップフロップ並列最適化を禁止する合成制約を付与されているフリップフロップは、並列化をされることがない。
【００３５】
ステップＳ１２２：第２のネットリストを出力する。
【００３６】
以下、図２および図３を参照して、本発明の実施形態に係る論理合成方法を説明する。図３は、本発明の実施形態に係る論理合成方法を説明するための回路３０を示す図である。
【００３７】
回路３０は、Ｄ型フリップフロップＤＦＦ１〜ＤＦＦ６、ＯＲゲートＯＲ１、ＡＮＤゲートＡＮＤ１およびインバータゲートＩＮＶ１を有している。クロック信号ＣＬＫ＿Ａは、Ｄ型フリップフロップＤＦＦ１のクロック端子に入力される。クロック信号ＣＬＫ＿Ｂは、Ｄ型フリップフロップＤＦＦ２〜ＤＦＦ６のクロック端子にそれぞれ入力される。クロック信号ＣＬＫ＿Ａとクロック信号ＣＬＫ＿Ｂとは、周期が整数倍の関係を有していない。すなわち、クロック信号ＣＬＫ＿Ａとクロック信号ＣＬＫ＿Ｂとは非同期の関係にある。
【００３８】
Ｄ型フリップフロップＤＦＦ１のデータ端子には、データ信号ＤＡＴＡ＿Ａが入力される。Ｄ型フリップフロップＤＦＦ１の出力信号Ｑ１は、Ｄ型フリップフロップＤＦＦ２のデータ端子に入力される。Ｄ型フリップフロップＤＦＦ２の出力信号Ｑ２は、Ｄ型フリップフロップＤＦＦ３のデータ端子に入力される。Ｄ型フリップフロップＤＦＦ３の出力信号Ｑ３は、ＯＲゲートＯＲ１の入力端子に入力される。信号ｎ２はインバータゲートＩＮＶ１の入力端子に接続される。信号ｎ３および信号ｎ１は、ＡＮＤゲートＡＮＤ１の入力端子に接続される。ＡＮＤゲートＡＮＤ１の出力信号ｎ４は、ＯＲゲートＯＲ１の入力端子に接続される。ＯＲゲートＯＲ１の出力信号ｎ５は、Ｄ型フリップフロップＤＦＦ４の入力端子に接続される。Ｄ型フリップフロップＤＦＦ４の出力端子からは、出力信号Ｑ４が出力される。
【００３９】
Ｄ型フリップフロップＤＦＦ５のデータ端子には、入力端子ＩＮ１が接続される。Ｄ型フリップフロップＤＦＦ５の出力信号Ｑ５は、Ｄ型フリップフロップＤＦＦ６のデータ端子に入力される。Ｄ型フリップフロップＤＦＦ６の出力端子からは、出力信号Ｑ６が出力される。
【００４０】
まず、ステップＳ１００〜ステップＳ１０２を行うことによって、第１のネットリストが生成される。
【００４１】
続いて、ステップＳ１０４において、全てのフリップフロップの入力データの経路を検索したか否かを判定する。ここでは、全てのフリップフロップの入力データの経路を検索していないので（ステップＳ１０４：Ｎｏ）、論理合成方法は、ステップＳ１０６に進む。
【００４２】
ステップＳ１０６において、フリップフロップのデータの入力の上流経路を一本ずつ逆上がる。ここでは、逆上った結果、Ｄ型フリップフロップＤＦＦ４に到達したとする。続いてステップＳ１０８において、フリップフロップである（ステップ１０８：Ｙｅｓ）と判定されるため、論理合成方法は、ステップＳ１１２に進む。
【００４３】
続いて、ステップＳ１１２において、非同期入力であるか否かを判定する。Ｄ型フリップフロップＤＦＦ４に入力されるデータ信号ｎ５およびクロック信号ＣＬＫ＿Ｂは同期しているため非同期入力ではない（ステップＳ１１２：Ｎｏ）。したがって、論理合成方法は、ステップＳ１０４に戻る。
【００４４】
ステップＳ１０４において、全てのフリップフロップの入力データの経路を検索していないので（ステップＳ１０４：Ｎｏ）、論理合成方法は、ステップＳ１０６に進む。
【００４５】
ステップＳ１０６において、Ｄ型フリップフロップＤＦＦ４のデータ端子の上流経路を逆上がり、ＯＲゲートＯＲ１に到達する。続いてステップＳ１０８において、フリップフロップでない（ステップＳ１０８：Ｎｏ）と判定されるため、論理合成方法は、ステップＳ１１０に進む。続いてステップＳ１１０において、入力端子でない（ステップＳ１１０：Ｎｏ）と判定されるため、論理合成方法は、ステップＳ１１８に進む。
【００４６】
ステップＳ１１８において、論理ゲートのデータの入力の上流経路を１本ずつ逆上がる。ここでは、まず信号Ｑ３の経路を逆上がった場合を説明する。信号Ｑ３の経路を逆上がった結果、Ｄ型フリップフロップＤＦＦ３に到達したとする。続いてステップＳ１０８において、フリップフロップである（ステップ１０８：Ｙｅｓ）と判定されるため、論理合成方法は、ステップＳ１１２に進む。
【００４７】
続いて、ステップＳ１１２において、非同期入力であるか否かを判定する。Ｄ型フリップフロップＤＦＦ３に入力されるデータ信号Ｑ２およびクロック信号ＣＬＫ＿Ｂは同期しているため非同期入力ではない（ステップＳ１１２：Ｎｏ）。したがって、論理合成方法は、ステップＳ１０４に戻る。
【００４８】
ステップＳ１０４において、全てのフリップフロップの入力データの経路を検索していないので（ステップＳ１０４：Ｎｏ）、論理合成方法は、ステップＳ１０６に進む。
【００４９】
ステップＳ１０６において、Ｄ型フリップフロップＤＦＦ３のデータの入力の上流経路を逆上がり、Ｄ型フリップフロップＤＦＦ２に到達する。続いてステップＳ１０８において、フリップフロップである（ステップ１０８：Ｙｅｓ）と判定されるため、論理合成方法は、ステップＳ１１２に進む。
【００５０】
続いて、ステップＳ１１２において、非同期入力であるか否かを判定する。Ｄ型フリップフロップＤＦＦ２に入力されるデータ信号Ｑ１はクロック信号ＣＬＫ＿Ａに同期しており、クロック信号ＣＬＫ＿Ａとクロック信号ＣＬＫ＿Ｂとは同期していない。したがって、データ信号Ｑ１およびクロック信号ＣＬＫ＿Ｂは非同期である（ステップＳ１１２：Ｙｅｓ）。したがって、論理合成方法は、ステップＳ１１４に進む。
【００５１】
続いて、ステップＳ１１４において、Ｄ型フリップフロップＤＦＦ２、すなわち非同期フリップフロップの出力の下流経路を一本下がり、Ｄ型フリップフロップＤＦＦ３に到達する。そして、ステップＳ１１６において、Ｄ型フリップフロップＤＦＦ３、すなわち非同期後段フリップフロップにフリップフロップ並列最適化を禁止する合成制約を付与する。そして、論理合成方法は、ステップＳ１０４に戻る。
【００５２】
ステップＳ１０４において、全てのフリップフロップの入力データの経路を検索していないので（ステップＳ１０４：Ｎｏ）、論理合成方法は、ステップＳ１０６に進む。
【００５３】
ステップＳ１０６において、Ｄ型フリップフロップＤＦＦ２のデータの入力の上流経路を逆上がり、Ｄ型フリップフロップＤＦＦ１に到達する。続いてステップＳ１０８において、フリップフロップである（ステップ１０８：Ｙｅｓ）と判定されるため、論理合成方法は、ステップＳ１１２に進む。
【００５４】
続いて、ステップＳ１１２において、非同期入力であるか否かを判定する。Ｄ型フリップフロップＤＦＦ１に入力されるデータ信号ＤＡＴＡ＿Ａおよびクロック信号ＣＬＫ＿Ａは同期しているため非同期入力ではない（ステップＳ１１２：Ｎｏ）。したがって、論理合成方法は、ステップＳ１０４に戻る。
【００５５】
ステップＳ１０４において、全てのフリップフロップの入力データの経路を検索していないので（ステップＳ１０４：Ｎｏ）、論理合成方法は、ステップＳ１０６に進む。
【００５６】
Ｄ型フリップフロップＤＦＦ１のデータの入力の上流回路を逆上がり、最終的に入力端子に到達するまで、ステップＳ１０４〜ステップＳ１１８が行われ、非同期後段フリップフロップにフリップフロップ並列最適化を禁止する合成制約を付与する。
【００５７】
次に、ＯＲゲートＯＲ１のもう一方の上流経路（信号ｎ４側）の探索について説明する。ステップＳ１０８、ステップＳ１１０およびステップＳ１１８が繰り返し行われることによって、信号ｎ４、信号ｎ１の経路および信号ｎ３、信号ｎ２の経路が探索される。そして、最終的に入力端子に到達するまで、ステップＳ１０４〜ステップＳ１１８が行われ、非同期後段フリップフロップにフリップフロップ並列最適化を禁止する合成制約を付与する。
【００５８】
次に、Ｄ型フリップフロップＤＦＦ６に着目して論理合成方法について説明する。ステップＳ１０４において、全てのフリップフロップの入力データの経路を検索していないので（ステップＳ１０４：Ｎｏ）、論理合成方法は、ステップＳ１０６に進む。
【００５９】
ステップＳ１０６において、フリップフロップのデータの入力の上流経路を一本ずつ逆上がる。ここでは、逆上った結果、Ｄ型フリップフロップＤＦＦ６に到達したとする。続いてステップＳ１０８において、フリップフロップである（ステップ１０８：Ｙｅｓ）と判定されるため、論理合成方法は、ステップＳ１１２に進む。
【００６０】
続いて、ステップＳ１１２において、非同期入力であるか否かを判定する。Ｄ型フリップフロップＤＦＦ６に入力されるデータ信号Ｑ５およびクロック信号ＣＬＫ＿Ｂは同期しているため非同期入力ではない（ステップＳ１１２：Ｎｏ）。したがって、論理合成方法は、ステップＳ１０４に戻る。
【００６１】
ステップＳ１０４において、全てのフリップフロップの入力データの経路を検索していないので（ステップＳ１０４：Ｎｏ）、論理合成方法は、ステップＳ１０６に進む。
【００６２】
ステップＳ１０６において、Ｄ型フリップフロップＤＦＦ６のデータの入力の上流経路を逆上がり、Ｄ型フリップフロップＤＦＦ５に到達する。続いてステップＳ１０８において、フリップフロップである（ステップ１０８：Ｙｅｓ）と判定されるため、論理合成方法は、ステップＳ１１２に進む。
【００６３】
続いて、ステップＳ１１２において、非同期入力であるか否かを判定する。ここで入力端子ＩＮ１にデータ信号ＩＮ１が入力され、Ｄ型フリップフロップＤＦＦ５に入力されるデータ信号ＩＮ１は、クロック信号（クロック信号ＣＬＫ＿Ａおよびクロック信号ＣＬＫ＿Ｂ）に同期しないとタイミング情報に設定されているとする。Ｄ型フリップフロップＤＦＦ５に入力されるデータ信号ＩＮ１およびクロック信号ＣＬＫ＿Ｂは同期していないため非同期入力である（ステップＳ１１２：Ｙｅｓ）。したがって、論理合成方法は、ステップＳ１１４に進む。
【００６４】
続いて、ステップＳ１１４において、Ｄ型フリップフロップＤＦＦ５（すなわち非同期フリップフロップ）の出力の下流経路を一本下がり、Ｄ型フリップフロップＤＦＦ６に到達する。そして、ステップＳ１１６において、Ｄ型フリップフロップＤＦＦ６（すなわち非同期後段フリップフロップ）にフリップフロップ並列最適化を禁止する合成制約を付与する。そして、論理合成方法は、ステップＳ１０４に戻る。
【００６５】
ステップＳ１０４において、全てのフリップフロップの入力データの経路を検索しているので（ステップＳ１０４：Ｙｅｓ）、論理合成方法は、ステップＳ１２０に進む。
【００６６】
以上、ステップＳ１０４〜ステップＳ１１６が実行されることによって、Ｄ型フリップフロップＤＦＦ３およびＤ型フリップフロップＤＦＦ６にフリップフロップ並列最適化禁止の合成制約が付与される。
【００６７】
ステップＳ１２０において、ステップＳ１１６で付与されたフリップフロップ並列最適化禁止の合成制約に基づいて最適化が実行され、第２のネットリストが生成される。したがって、Ｄ型フリップフロップＤＦＦ３およびＤ型フリップフロップＤＦＦ６は並列化されない。
【００６８】
ステップＳ１２２において、第２のネットリストが出力される。
【００６９】
以上、図１〜図３を参照して説明したように、本発明に係る論理合成方法は、第１のネットリストに含まれる複数のフリッププロップの中から、非同期フリップフロップを探索する工程と、非同期後段フリップフロップを並列最適化禁止にする合成制約を付与する工程と、合成制約に基づいて最適化を実行し、第２のネットリストを生成する工程とを包含する。非同期後段フリップフロップを並列最適化禁止にするため、非同期信号に入力されるフリップフロップの出力が複数のフリップフロップに接続される可能性が低減される。したがって、フリップフロップの論理出力が不安定になる現象を抑制することができる。
【００７０】
また、非同期フリップフロップを探索する工程は、データ信号に基づくクロック信号の周期とクロック信号の周期とが整数倍の関係を有していないフリップフロップを非同期フリップフロップであると判定する工程を有する。
【００７１】
また、入力端子（例えば、図３示す入力端子ＩＮ１）には、クロック信号と同期するか否かを示す情報と、クロック信号と同期する場合、入力端子が同期するクロック信号を示す情報とを含むタイミング情報が予め設定されている。非同期フリップフロップを探索する工程は、タイミング情報に基づいて、入力端子に接続されているフリップフロップに入力されるデータ信号およびクロック信号が非同期であるか否かを判定する工程を有する。したがって、入力端子に接続するフリップフロップに対しても、適切に非同期フリップフロップであるか否かを決定することができる。
【００７２】
また、本発明の論理合成装置は、探索部と、付与部と、生成部とを備える。探索部は、複数のフリッププロップの接続関係を示す第１のネットリストに含まれる複数のフリッププロップの中から、入力されるデータ信号およびクロック信号が非同期である非同期フリップフロップを探索する。付与部は、非同期フリップフロップの後段に接続される非同期後段フリップフロップを並列最適化禁止にする合成制約を付与する。本発明の論理合成装置は、例えば、コンピューターである。本発明の論理合成装置は、非同期後段フリップフロップを並列最適化禁止にするため、非同期信号に入力されるフリップフロップの出力が複数のフリップフロップに接続される可能性が低減される。したがって、フリップフロップの論理出力が不安定になる現象を抑制することができる。
【００７３】
また、図２および図３を参照して説明した論理合成方法は、コンピューター（論理合成装置）に、非同期フリップフロップを探索する手順と、並列最適化禁止にする合成制約を付与する手順と、第２のネットリストを生成する手順とを実行させるためのプログラムを実行することによって実現される。非同期フリップフロップを探索する手順は、複数のフリッププロップの接続関係を示す第１のネットリストに含まれる複数のフリッププロップの中から、入力されるデータ信号およびクロック信号が非同期である非同期フリップフロップを探索する。並列最適化禁止にする合成制約を付与する手順は、非同期フリップフロップの後段に接続される非同期後段フリップフロップを並列最適化禁止にする。第２のネットリストを生成する手順は、合成制約に基づいて最適化を実行し、第２のネットリストを生成する。本発明のプログラムは、非同期後段フリップフロップを並列最適化禁止にするため、非同期信号に入力されるフリップフロップの出力が複数のフリップフロップに接続される可能性が低減される。したがって、フリップフロップの論理出力が不安定になる現象を抑制することができる。
【００７４】
なお、本発明は、上記の実施の形態に限られるものではなく、その要旨を逸脱しない範囲で種々の態様において実施することが可能であり、例えば、以下のような変形も可能である。
【００７５】
（１）図１〜図３を参照して説明した論理合成方法では、第１のネットリストの出力端子から入力端子に向かう方向に非同期フリップフロップを探索していたが、非同期フリップフロップを探索する方向はこれに限定されない。第１のネットリストの入力端子から出力端子に向かう方向に非同期フリップフロップを探索してもよい。
【００７６】
（２）図１〜図３を参照して説明した論理合成方法では、第１のネットリストは、ハードウェア記述言語で記載された回路記述を論理圧縮して第１のネットリストを生成していたが、これに限定されない。第１のネットリストはレイアウト設計後に出力されたネットリストであってもよい。
【産業上の利用可能性】
【００７７】
本発明の論理合成方法によれば、フリップフロップの論理出力が不安定になる現象を抑制することができる。
【符号の説明】
【００７８】
１０、２０、３０  回路
ＤＦＦ１、ＤＦＦ２、ＤＦＦ３、ＤＦＦ４、ＤＦＦ５、ＤＦＦ６  Ｄ型フリップフロップ
ＯＲ１      ＯＲゲート
ＡＮＤ１    ＡＮＤゲート
ＩＮＶ１    インバータゲート
【図１】
2015056092.tif 000003
【図２】
2015056092.tif 000004
【図３】
2015056092.tif 000005