(57)【要約】【課題】  順序回路構成の違いを考慮する必要が無く、メモリ使用量を抑制して適切にシミュレーションを実行することが可能な非同期回路の検証方法をコンピュータに実行させるプログラムを提供する。【解決手段】  非同期回路の検証方法をコンピュータに実行させるプログラムは、（ａ）記憶装置２２に予め記憶された順序回路１を含む非同期回路の回路情報に基づいて、シミュレーションを行うステップと、（ｂ）順序回路１の出力ノードの出力値を単位時刻毎に監視して、任意の時刻ｎにおける出力値が、時刻ｎ−１の出力値から変化したとき、時刻ｎの出力値をメタステーブル状態の値とするステップとを具備する。【選択図】      図７
2007052640.tif 000002
【特許請求の範囲】
【請求項１】
（ａ）記憶装置に予め記憶された順序回路を含む非同期回路の回路情報に基づいて、シミュレーションを行うステップと、
（ｂ）前記順序回路の出力ノードの出力値を単位時刻毎に監視して、任意の時刻ｎにおける前記出力値が、時刻ｎ−１の前記出力値から変化したとき、前記時刻ｎの前記出力値をメタステーブル状態の値とするステップと
を具備する非同期回路の検証方法をコンピュータに実行させるプログラム。
【請求項２】
請求項１に記載のプログラムにおいて、
前記非同期回路は、
前記順序回路としての第１順序回路と、
前記第１順序回路と非同期である第２順序回路と
を含み、
前記第１順序回路における前記出力ノードとしての第１出力ノードは、前記第２順序回路の入力ノードに接続され、
前記（ｂ）ステップは、
（ｂ１）前記時刻ｎにおける前記第１出力ノードの前記出力値としての第１出力値が、前記時刻ｎ−１の前記第１出力値から変化したとき、前記時刻ｎの前記第１出力値を前記メタステーブル状態の値として、前記第２順序回路へ出力するステップを含む
プログラム。
【請求項３】
請求項１又は２に記載のプログラムにおいて、
前記（ａ）ステップは、
（ａ１）前記非同期回路が、同一のネットに接続された複数の順序回路を含むとき、前記複数の順序回路の各々毎に前記ネットを分離するステップと、
（ａ２）前記非同期回路のうち、前記複数の順序回路のうちの分離された前記ネットに接続されたものとしての分離順序回路を含む第１非同期回路に対して前記機能シミュレーションを行うステップと
を備え、
前記（ｂ）ステップは、
（ｂ２）前記分離順序回路の前記出力値が、前記時刻ｎ−１の前記出力値から変化したとき、前記時刻ｎの前記出力値を前記メタステーブル状態の値とする
プログラム。
【請求項４】
請求項３に記載のプログラムにおいて、
前記（ａ２）ステップは、
（ａ２１）前記第１非同期回路として、非同期の順序回路の出力データが、直接又は所定の回路を介して、次の順序回路へ接続している接続ノードを有するものを抽出するステップを含む
プログラム。
【請求項５】
（ａ）記憶装置に予め記憶された順序回路を含む非同期回路の回路情報に基づいて、シミュレーションを行うステップと、
（ｂ）前記順序回路の出力ノードの出力値を単位時刻毎に監視して、任意の時刻ｎにおける前記出力値が、時刻ｎ−１の前記出力値から変化したとき、前記時刻ｎの前記出力値をメタステーブル状態の値とするステップと
を具備する
非同期回路の検証方法。
【請求項６】
請求項５に記載の非同期回路の検証方法において、
前記非同期回路は、
前記順序回路としての第１順序回路と、
前記第１順序回路と非同期である第２順序回路と
を含み、
前記第１順序回路における前記出力ノードとしての第１出力ノードは、前記第２順序回路の入力ノードに接続され、
前記（ｂ）ステップは、
（ｂ１）前記時刻ｎにおける前記第１出力ノードの前記出力値としての第１出力値が、前記時刻ｎ−１の前記第１出力値から変化したとき、前記時刻ｎの前記第１出力値を前記メタステーブル状態の値として、前記第２順序回路へ出力するステップを含む
非同期回路の検証方法。
【請求項７】
請求項５又は６に記載の非同期回路の検証方法において、
前記（ａ）ステップは、
（ａ１）前記非同期回路が、同一のネットに接続された複数の順序回路を含むとき、前記複数の順序回路の各々毎に前記ネットを分離するステップと、
（ａ２）前記非同期回路のうち、前記複数の順序回路のうちの分離された前記ネットに接続されたものとしての分離順序回路を含む第１非同期回路に対して前記機能シミュレーションを行うステップと
を備え、
前記（ｂ）ステップは、
（ｂ２）前記分離順序回路の前記出力値が、前記時刻ｎ−１の前記出力値から変化したとき、前記時刻ｎの前記出力値を前記メタステーブル状態の値とする
非同期回路の検証方法。
【請求項８】
請求項７に記載の非同期回路の検証方法において、
前記（ａ２）ステップは、
（ａ２１）前記第１非同期回路として、非同期の順序回路の出力データが、直接又は所定の回路を介して、次の順序回路へ接続している接続ノードを有するものを抽出するステップを含む
非同期回路の検証方法。
【請求項９】
記憶装置に予め記憶された順序回路を含む非同期回路の回路情報に基づいて、シミュレーションを行う第１機能シミュレータと、
前記順序回路の出力ノードの出力値を単位時刻毎に監視して、任意の時刻ｎにおける前記出力値が、時刻ｎ−１の前記出力値から変化したとき、前記時刻ｎの前記出力値をメタステーブル状態の値とする第２機能シミュレータと
を具備する
非同期回路の検証装置。
【請求項１０】
請求項９に記載の非同期回路の検証装置において、
前記非同期回路は、
前記順序回路としての第１順序回路と、
前記第１順序回路と非同期である第２順序回路と
を含み、
前記第１順序回路における前記出力ノードとしての第１出力ノードは、前記第２順序回路の入力ノードに接続され、
前記第２機能シミュレータは、前記時刻ｎにおける前記第１出力ノードの前記出力値としての第１出力値が、前記時刻ｎ−１の前記第１出力値から変化したとき、前記時刻ｎの前記第１出力値を前記メタステーブル状態の値として、前記第２順序回路へ出力する
非同期回路の検証装置。
【請求項１１】
請求項９又は１０に記載の非同期回路の検証装置において、
前記第１機能シミュレータは、
前記非同期回路が、同一のネットに接続された複数の順序回路を含むとき、前記複数の順序回路の各々毎に前記ネットを分離し、
前記非同期回路のうち、前記複数の順序回路のうちの分離された前記ネットに接続されたものとしての分離順序回路を含む第１非同期回路に対して前記機能シミュレーションを行い、
前記第２機能シミュレータは、前記分離順序回路の前記出力値が、前記時刻ｎ−１の前記出力値から変化したとき、前記時刻ｎの前記出力値を前記メタステーブル状態の値とする
非同期回路の検証装置。
【請求項１２】
請求項１１に記載の非同期回路の検証装置において、
前記第１機能シミュレータは、前記第１非同期回路として、非同期の順序回路の出力データが、直接又は所定の回路を介して、次の順序回路へ接続している接続ノードを有するものを抽出する
非同期回路の検証装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、非同期回路の検証装置、非同期回路の検証方法およびその検証プログラムに関し、特に、非同期回路の検証を言語レベルで機能シミュレーションする非同期回路の検証装置、非同期回路の検証方法およびその検証プログラムに関する。
【背景技術】
【０００２】
最近の半導体テクノロジの進化は顕著である。例えば、微細化が進むことにより半導体に搭載可能な回路規模は膨大な大きさになっている。それに伴い、大規模な回路設計が行われ、コンピューターによる機能シミュレーションに要する処理時間が膨大化している。機能シミュレーションにおいて、非同期回路を含む場合、非同期な入力信号の周期を可変にして機能シミュレータに与える必要があり、さらに処理時間が膨大化する。
【０００３】
その解決策として、従来技術として特開２００３−２３３６３８号公報に、非同期回路の検証方法及びそのプログラムが開示されている。この非同期回路の検証方法は、検証対象の順序回路で構成する非同期回路に対し言語レベルの機能シミュレーション装置を用いて行う。入力データの値を複数時刻分保持するために前記順序回路に予め設けた内部配列要素に対し、１クロック周期内におけるイベント発生時刻毎に入力データを一時記憶させること、クロック信号のアクティブエッジ検出時に前記入力データが前記アクティブエッジ検出の１時刻前の値に対して変化していればメタステーブル状態と定義してそのメタステーブル状態の値を発生して出力すること、次の一時刻後に、前記イベント発生時刻毎に一時記憶した入力データのうち任意の１時刻の入力データを出力すること、を特徴とする。
【０００４】
特開２００３−２３３６３８号公報について、より具体的に説明する。図１は、従来技術における非同期回路の検証方法を示すフロー図である。本図は、順序回路のコンピュータでの機能シミュレーション動作フローを示している。
【０００５】
まず、Ｓ１１１で、順序回路は、現時刻の入力データの値Ｄｉｎを内部配列要素Ｄ［０］に保持する。ここでの内部配列要素は、順序回路を構成するＦＦ（Ｆｌｉｐ  Ｆｌｏｐ、以下同じ）１、ＦＦ２、ＦＦ３のそれぞれが持つ配列要素である。内部配列要素は、各ＦＦの入力データＤｉｎの値をｎ時刻分保持する。内部配列要素Ｄは、ｎ個の配列要素がある。ｎは、機能シミュレーションで用いる１クロック周期内のイベント数よりも小さい値とする。内部配列要素は、入力データ値を以下のように保持する。すなわち、内部配列要素において、時刻の経過とともに、Ｄ［０］の値はＤ［１］へ移動され、Ｄ［ｎ−１］の値はＤ［ｎ］へと移動されるというように順番に移動する。それにより、内部配列要素は、ｎ時刻分の値Ｄ［０］〜Ｄ［ｎ］を保持する。
【０００６】
次に、Ｓ１１２のクロック信号アクティブエッジ検出処理では、順序回路に入力されるクロック信号のエッジ検出を行う。エッジが検出された場合（Ｓ１１２：Ｙｅｓ）、Ｓ１１３の入力データ変化検出処理を行う。エッジが検出されない場合（Ｓ１１２：Ｎｏ）、Ｓ１２３、Ｓ１２２の処理を行う。
【０００７】
Ｓ１１３の入力データ変化検出処理では、順序回路に入力される入力データの変化検出を行う。変化が検出された場合（Ｓ１１３：Ｙｅｓ）、Ｓ１１４のメタステーブル状態検出処理を行う。入力データの変化が検出されない場合（Ｓ１１３：Ｎｏ）、Ｓ１２０、Ｓ１２１、Ｓ１２２の処理を行う。
【０００８】
Ｓ１１４のメタステーブル状態検出処理では、メタステーブル状態フラグの値をチェックする。メタステーブル状態フラグの値がｔｒｕｅ＝メタステーブル状態である場合（Ｓ１１４：Ｙｅｓ）、Ｓ１１５で、メタステーブル状態フラグをｆａｌｓｅに設定する。その後、Ｓ１１６で、順序回路への入力データとして前述のＳ１１１で保持した内部配列要素Ｄ［ｍ］（０≦ｍ≦ｎ）の任意要素ｍの値を記憶変数ｄに保持する。続いて、Ｓ１１７で、乱数を用いてメタステーブル状態の値を発生して、その値を変数ｍｅｔａに保持する。そして最後にＳ１１８で、変数ｍｅｔａのメタステーブル状態の値を順序回路の出力Ｑｏｕｔに出力する。また、メタステーブル状態フラグの値がｆａｌｓｅ＝メタステーブル状態でない場合（Ｓ１１４：Ｎｏ）、Ｓ１１９でメタステーブル状態フラグをｔｒｕｅに設定した後、前述同様のＳ１１６、Ｓ１１７、Ｓ１１８の処理を順次行う。
【０００９】
ただし、メタステーブル（ｍｅｔａ−ｓｔａｂｌｅ）状態とは、ラッチやフリップフロップ（ＦＦ）の入力信号において、セットアップ時間やホールド時間が守られなかった場合に、出力信号が不安定な状態になることをいう。外部からの非同期信号をフリップフロップで同期化するような場合、入力信号は何処で変化するか分からないので、メタステーブルの発生を防ぐことは困難である。しかし、メタステーブルの発生現象を見れば、メタステーブルが発生してもかまわない回路構成にすることが可能である。ここでは、メタステーブル状態の値は、乱数、任意の固定値、一定の初期値による擬似乱数などに例示される。
【００１０】
Ｓ１２０、Ｓ１２３の処理では、前述のＳ１１５と同様に、メタステーブル状態フラグの値をメタステーブル状態でない場合＝ｆａｌｓｅに設定する。Ｓ１２１の処理では、前述のＳ１１６と同様に、順序回路への入力データＤｉｎの値を変数ｄに保持する。Ｓ１２２の処理では、変数ｄに保持された値を順序回路の出力Ｑｏｕｔに出力する。これにより、Ｓ１１４のメタステーブル状態検出処理後にＳ１１６の処理で、本発明の特徴である、同じクロック信号でトリガされる同一データ信号を入力データとする順序回路間に、互いに異なった入力データを保持する動作を実現することができる。加えて、Ｓ１１７、Ｓ１１８の一連の処理で、クロック信号がアクティブな状態で入力データの値が一時刻前の値に対して変化がある場合のメタステーブル状態の値を出力する動作を行うことができる。
【００１１】
また、Ｓ１１３の入力データ変化検出処理後のＳ１２０、Ｓ１２１、Ｓ１２２の一連の処理によりクロック信号がアクティブな場合で入力データの値が一時刻前の値に対して変化がない場合の動作を行うことができる。加えて、Ｓ１１２のクロック信号アクティブエッジ検出処理後のＳ１２３、Ｓ１２２の一連の処理によりクロック信号が非アクティブな場合の動作を行うことができる。これらにより、メタステーブル状態の値を出力した後、次の一時刻後に内部配列要素から保持された入力データの出力動作を行うことができる。
【００１２】
図２は、図１の動作フローを実行する機能ブロックを示す構成図である。順序回路１０１は、順序回路ＦＦ１〜ＦＦ３に対応し、通常のＦＦの動作をシミュレーションする。入力データ保持部１０２とメタステーブル状態値発生部１０３と切替制御部１０４とを備える。入力データ保持部１０２は、入力データＤｉｎを保持する。メタステーブル状態値発生部１０３は、メタステーブル状態値を発生する。切替制御部１０４は、保持された入力データと発生されたメタステーブル状態値とに基づいて、基本サイクル単位で、図１の機能シミュレーション動作フローに従って、順序回路の出力Ｄｏｕｔを決定する。ここで、基本サイクルとは、クロックの１周期以下である。
【００１３】
次に、ある非同期回路に図１の機能シミュレーション動作フローを適用した場合について説明する。
図３は、機能シミュレーション動作フローを適用する非同期回路の一例を示す回路図である。この非同期回路は、順序回路としてのＦＦ１、ＦＦ２、ＦＦ３及び加算器ＡＬＵ１を備える。ＦＦ１の入力データＤ１は、ＦＦ１の出力データＱ１に加算器ＡＬＵ１で＋１された値である。ＦＦ２の入力データＤ２及びＦＦ３の入力データＤ３は、ＦＦ１の出力データＱ１である。ＦＦ１にはクロック信号ＣＬＫ１が供給される。ＦＦ２、ＦＦ３にはクロック信号ＣＬＫ２が供給される。すなわちｍ、ＦＦ１の入力信号はクロック信号ＣＬＫ１及び入力データＤ１であり、出力信号は出力データＱ１である。ＦＦ２の入力信号はクロック信号ＣＬＫ２及び入力データＤ２（＝Ｑ１）であり、出力信号は出力データＱ２である。ＦＦ３の入力信号はクロック信号ＣＬＫ２及び入力データＤ３（＝Ｑ１）であり、出力信号は出力データＱ３である。また、ＦＦ１のメタステーブル状態フラグＭＦ１、ＦＦ２のメタステーブル状態フラグＭＦ２、ＦＦ３のメタステーブル状態フラグＭＦ３とする。
【００１４】
図４は、機能シミュレーション動作フローにおける各信号の状態を示すタイミング図である。横軸は時刻である。図４に示すようにクロック信号ＣＬＫ１は３時刻毎に変化し、クロック信号ＣＬＫ２は４時刻毎に変化するものとする。
【００１５】
まず、順序回路ＦＦ１は、ＦＦ１のＱｏｕｔの出力Ｑ１（＝０）に加算器ＡＬＵ１で＋１した値を入力データＤ１（＝１）される。そして、その３時刻間の値、つまり時刻ｔ０の値（＝１）、時刻ｔ１の値（＝１）、時刻ｔ２の値（＝１）を内部配列要素に保持する（Ｓ１１１）。次に、時刻３において、ＣＬＫ１の立ち上がりエッジがアクティブな状態（Ｓ１１２：Ｙｅｓ）で、かつ、Ｄ１の値（＝１）が一時刻前の値（すなわちＦＦ１の初期状態の値（＝０））に対して変化している（Ｓ１１３：Ｙｅｓ）。ここで、初期状態ではＭＦ１はｆａｌｓｅ（＝０）なので（Ｓ１１４：Ｎｏ）、時刻３におけるＦＦ１のメタステーブル状態フラグＭＦ１の値はｔｕｒｅ（＝１）になる（Ｓ１１９）。そして、ＦＦ１の内部配列要素における任意時刻（＝時刻ｔ２）の値（＝１）を通常値ｄとして選択する（Ｓ１１６）。その後、メタステーブル状態の値ｍｅｔａ（＝６）を発生させ（Ｓ１１７）、ＱｏｕｔからＱ１にメタステーブル状態の値ｍｅｔａ（＝６）を出力する（Ｓ１１８）。
【００１６】
続いて、時刻ｔ４において、ＣＬＫ１の立ち上がりエッジが非アクティブな状態になる（Ｓ１１２：Ｎｏ）になる。そのため、ＦＦ１のメタステーブル状態フラグＭＦ１の値はｆａｌｓｅ（＝０）になる（Ｓ１２３）。その後、Ｑｏｕｔから、ＦＦ１の内部配列要素で選択された任意時刻の値を通常値ｄ（＝１）を出力Ｑ１として出力する（Ｓ１２２）。
【００１７】
同様に、時刻ｔ９、ｔ１０、および時刻ｔ１５、ｔ１６、時刻ｔ２１、ｔ２２において、１クロック周期間にメタステーブル状態フラグＭＦ１の値はｔｒｕｅ（＝１）になり（Ｓ１１９）、Ｑｏｕｔの出力Ｑ１においてメタステーブル状態の値（それぞれ、４、４、５）を出力（Ｓ１１８）後、内部配列要素に保持された３時刻間のうち、任意の一時刻の値を通常値として出力する（Ｓ１２２）。
【００１８】
次に、順序回路ＦＦ２は、ＦＦ１の出力Ｑ１と同じ値である入力データＤ２を入力される。そして、ＦＦ１と同様に、入力データＤ２の３時刻間の値、つまり時刻１の値（＝０）、時刻２の値（＝０）、時刻３の値（＝６）を内部配列要素に保持する（Ｓ１１１）。次に、時刻４において、ＣＬＫ２の立ち上がりエッジがアクティブな状態（Ｓ１１２：Ｙｅｓ）で、かつ、Ｄ２の値（＝６）が一時刻前の値（すなわちＦＦ２の初期状態の値（＝０））に対して変化している（Ｓ１１３：Ｙｅｓ）。ここで、初期状態ではＭＦ２はｆａｌｓｅ（＝０）なので（Ｓ１１４：Ｎｏ）、時刻４におけるＦＦ２のメタステーブル状態フラグＭＦ２の値はｔｕｒｅ（＝１）になる（Ｓ１１９）。そして、ＦＦ２の内部配列要素における任意時刻（＝時刻ｔ１）の値（＝０）を通常値ｄとして選択する（Ｓ１１６）。その後、メタステーブル状態の値ｍｅｔａ（＝３）を発生させ（Ｓ１１７）、ＱｏｕｔからＱ１にメタステーブル状態の値ｍｅｔａ（＝３）を出力する（Ｓ１１８）。
【００１９】
続いて、時刻ｔ５において、ＣＬＫ２の立ち上がりエッジが非アクティブな状態になる（Ｓ１１２：Ｎｏ）になる。そのため、ＦＦ２のメタステーブル状態フラグＭＦ２の値はｆａｌｓｅ（＝０）になる（Ｓ１２３）。その後、Ｑｏｕｔから、ＦＦ２の内部配列要素で選択された任意時刻の値を通常値ｄ（＝０）を出力Ｑ２として出力する（Ｓ１２２）。
【００２０】
時刻ｔ１２、ｔ１３、および時刻ｔ２０、ｔ２１において、ＣＬＫ２の立ち上がりエッジがアクティブな状態の時（Ｓ１１２：Ｙｅｓ）、Ｄ２の値に変化がない（Ｓ１１３：Ｎｏ）。そのため、１クロック周期間にメタステーブル状態フラグＭＦ２の値はｆａｌｓｅ（＝０）になり（Ｓ１２０）、Ｑｏｕｔの出力Ｑ２において、内部配列要素に保持（Ｓ１２１）された３時刻間（ｔ９、ｔ１０、ｔ１１／ｔ１７、ｔ１８、ｔ１９）のうち、最後に保持された時刻（ｔ１１／ｔ１９）の値を通常値ｄとして出力する（Ｓ１２２）。
【００２１】
次に、順序回路ＦＦ３は、ＦＦ１の出力Ｑ１と同じ値である入力データＤ３を入力される。そして、ＦＦ１と同様に、入力データＤ３の３時刻間の値、つまり時刻１の値（＝０）、時刻２の値（＝０）、時刻３の値（＝６）を内部配列要素に保持する（Ｓ１１１）。次に、時刻４において、ＣＬＫ２の立ち上がりエッジがアクティブな状態（Ｓ１１２：Ｙｅｓ）で、かつ、Ｄ３の値（＝６）が一時刻前の値（すなわちＦＦ３の初期状態の値（＝０））に対して変化している（Ｓ１１３：Ｙｅｓ）。ここで、初期状態ではＭＦ３はｆａｌｓｅ（＝０）なので（Ｓ１１４：Ｎｏ）、時刻４におけるＦＦ３のメタステーブル状態フラグＭＦ３の値はｔｕｒｅ（＝１）になる（Ｓ１１９）。そして、ＦＦ３の内部配列要素における任意時刻（＝時刻ｔ３）の値（＝６）を通常値ｄとして選択する（Ｓ１１６）。その後、メタステーブル状態の値ｍｅｔａ（＝７）を発生させ（Ｓ１１７）、ＱｏｕｔからＱ１にメタステーブル状態の値ｍｅｔａ（＝７）を出力する（Ｓ１１８）。
【００２２】
続いて、時刻ｔ５において、ＣＬＫ２の立ち上がりエッジが非アクティブな状態になる（Ｓ１１２：Ｎｏ）になる。そのため、ＦＦ３のメタステーブル状態フラグＭＦ３の値はｆａｌｓｅ（＝０）になる（Ｓ１２３）。その後、Ｑｏｕｔから、ＦＦ３の内部配列要素で選択された任意時刻の値を通常値ｄ（＝６）を出力Ｑ３として出力する（Ｓ１２２）。
【００２３】
時刻ｔ１２、ｔ１３、および時刻ｔ２０、ｔ２１において、ＣＬＫ２の立ち上がりエッジがアクティブな状態の時（Ｓ１１２：Ｙｅｓ）、Ｄ３の値に変化がない（Ｓ１１３：Ｎｏ）。そのため、１クロック周期間にメタステーブル状態フラグＭＦ３の値はｆａｌｓｅ（＝０）になり（Ｓ１２０）、Ｑｏｕｔの出力Ｑ３において、内部配列要素に保持（Ｓ１２１）された３時刻間（ｔ９、ｔ１０、ｔ１１／ｔ１７、ｔ１８、ｔ１９）のうち、最後に保持された時刻（ｔ１１／ｔ１９）の値を通常値ｄとして出力する（Ｓ１２２）。
【００２４】
ここで、時刻４における順序回路ＦＦ２とＦＦ３は、ＣＬＫ２の立ち上がりエッジにより同一データ信号であるＦＦ１の出力Ｑ１の値を入力データＤ２、Ｄ３として取り込む。しかし、それぞれ３時刻間の値として保持された内部配列要素から任意時刻で選択された値は、ＦＦ２においては時刻ｔ１の値（＝０）、ＦＦ３においては時刻ｔ３の値（＝６）のように異なる値であるため、ＦＦ２とＦＦ３の順序回路間で保持される値が異なる現象を起こしたことになる。
【００２５】
このことは、時刻ｔ４のタイミングで、ＦＦ２への入力データＤ２の信号伝播遅延とＦＦ３への入力データＤ３の信号伝播遅延との時間差をシミュレーションし、同じクロック信号でトリガされる同一データ信号が、入力される順序回路間においてタイミング問題による不具合動作が起こることを示す。
【００２６】
また、ＦＦ３が通常値として選択したＤ３の値（＝６）は、順序回路ＦＦ１で発生したメタステーブル状態の値である。そのため、ＦＦ３には本来の期待される入力データ、すなわち時刻ｔ４における出力Ｑ１の値（＝１）と異なる値が入力されたことになる。したがって、時刻５から時刻１２まで、この非同期回路は不具合動作を起こしたことになり、時刻ｔ３のＣＬＫ１の変化と、時刻ｔ４のＣＬＫ２の変化はこの非同期回路において不具合動作が起こるタイミングであることを示す。
【００２７】
以上のように、特開２００３−２３３６３８号公報の非同期回路の検証方法は、クロック信号の周期が異なる複数の順序回路の出力データが相互に順序回路の入力データとなる回路構成の動作を検証することができる。
【００２８】
【特許文献１】特開２００３−２３３６３８号公報
【発明の開示】
【発明が解決しようとする課題】
【００２９】
上記の従来の非同期回路の検証方法では、機能シミュレーションの１基本サイクル単位において、順序回路ＦＦへの入力データとメタステーブル状態の値とに基づいて、機能シミュレーション動作フロー（従来のアルゴリズム）に従って、順序回路の出力値を決定している。すなわち、順序回路ＦＦへ入力され得るリセット信号は考慮されていない。そのため、 この検証方法では、非同期なリセット信号を含む順序回路に対して出力値は変更されない。したがって、非同期なリセット信号を考慮した、順序回路の機能シミュレーションを適切に実行することが困難であった。リセット信号や、クロック信号を考慮しなくても適切に順序回路の機能シミュレーションを実行可能な技術が望まれる。
【００３０】
従来の非同期回路の検証方法では、ｎ時刻前の入力データを保持するための内部配列要素Ｄ［０］〜Ｄ［ｎ］が必要で、これがクロック信号の周期が異なる順序回路毎に必要となる。そのため、検証対象の回路規模の大きくなるほど、回路シミュレーション実行時に内部配列要素のために消費されるメモリ量が膨大になる。通常、機能シミュレーションを実行するコンピュータのメモリ資源には制限がある。そのため、その量的制限により従来技術が適用できる回路規模に制約が生じている。メモリ使用量を抑制した回路シミュレーションを実行可能な技術が望まれる。
【課題を解決するための手段】
【００３１】
以下に、発明を実施するための最良の形態で使用される番号・符号を用いて、課題を解決するための手段を説明する。これらの番号・符号は、特許請求の範囲の記載と発明を実施するための最良の形態との対応関係を明らかにするために括弧付きで付加されたものである。ただし、それらの番号・符号を、特許請求の範囲に記載されている発明の技術的範囲の解釈に用いてはならない。
【００３２】
従って、上記課題を解決するために、本発明の非同期回路の検証方法をコンピュータに実行させるプログラムは、（ａ）記憶装置（２２）に予め記憶された順序回路（１）を含む非同期回路の回路情報に基づいて、シミュレーションを行うステップと、（ｂ）順序回路（１）の出力ノードの出力値を単位時刻毎に監視して、任意の時刻ｎにおける出力値が、時刻ｎ−１の出力値から変化したとき、時刻ｎの出力値をメタステーブル状態の値とするステップとを具備する。
【００３３】
本発明では、出力値を監視し、順序回路（１）の出力ノードの出力値が変化した直後に、当該出力値をメタステーブル状態の値とすることで、リセット信号、クロック信号等を考慮することなく、メタステーブル状態をシミュレーションすることができる。それにより、リセット信号の有無のような順序回路構成の違いを考慮しなくても適切に順序回路の機能シミュレーションを実行することができる。ｎ時刻前の出力値を保持するための内部配列要素Ｄ［０］〜Ｄ［ｎ］が不要となる。それにより、メモリ使用量を抑制した回路シミュレーションを実行することができる。
【発明の効果】
【００３４】
本発明により、順序回路構成の違いを考慮する必要が無く、メモリ使用量を抑制して適切にシミュレーションを実行することが可能となる。
【発明を実施するための最良の形態】
【００３５】
以下、本発明の非同期回路の検証装置、非同期回路の検証方法およびその検証プログラムの実施の形態に関して、添付図面を参照して説明する。
【００３６】
まず、本発明の非同期回路の検証装置における実施の形態の構成について説明する。図５は、本発明の非同期回路の検証装置の実施の形態の構成を示すブロック図である。非同期回路の検証装置２０は、コンピュータ２１、記憶装置２２、表示装置２３及び入力装置２４を具備する。コンピュータ２１は、ワークステーションやパーソナルコンピュータに例示される情報処理装置である。ＣＰＵ３１及びメモリ３２を備え、記憶装置２２、表示装置２３及び入力装置２４との情報の授受を行う。記憶装置２２は、検証する回路を示す検証回路データ４１、既存の機能シミュレータを含む機能シミュレータＡ４２、及び、本発明の機能シミュレータを含む機能シミュレータＢ４３を含む。検証回路データ４１、機能シミュレータＡ４２及び機能シミュレータＢ４３は、例えばメモリ３２に展開され、ＣＰＵ３１により実行される。
【００３７】
図６は、本発明の非同期回路の検証装置の実施の形態の構成を示す機能ブロック図である。非同期回路の検証装置は、順序回路１−１、１−２、…、（１−ｎ）（ただし、ｎは２以上の整数）と、切替回路４−１、４−２、…、（４−（ｎ−１））と、メタステーブル状態値発生部３−１、３−２、…、（３−（ｎ−１））とを具備する。
【００３８】
順序回路１−１、１−２、…、（１−ｎ）は、順序回路ＦＦ１、ＦＦ２、…、ＦＦｎに対応し、通常のＦＦの動作をシミュレーションする。それぞれ、入力データ保持部２−１、２−２、…、（２−ｎ）を含む。入力データ保持部２−１、２−２、…、（２−ｎ）は、入力データＤｉｎを保持する。前段の順序回路１−ｉ（１≦ｉ≦ｎ、整数）の出力と後段の順序回路１−（ｉ＋１）の入力とは、ネット（以下、「接続ノード」という）１１−１、１１−２、…、（１１−（ｎ−１））で接続されている。
【００３９】
切替回路４−１、４−２、…、（４−（ｎ−１））の各々は、隣り合う順序回路１の間であって、接続ノード１１の途中に設けられている。例えば、切替回路４−１は、順序回路１−１と順序回路１−２との間の接続ノード１１−１の途中に設けられている。接続ノード１１の入力データＤｉｎの値を監視（モニタ）する。そして、その値が変化した時は、１基本サイクル時刻間その値をメタステーブル状態値と置き換える。それ以外の時は、その値自身を入力データとする。メタステーブル状態値発生部３−１、３−２、…、（３−（ｎ−１））は、それぞれ切替回路４−１、４−２、…、（４−（ｎ−１））へメタステーブル状態値を供給する。
【００４０】
上記の順序回路１−１、１−２、…、（１−ｎ）及び接続ノード１１−１、１１−２、…、（１１−（ｎ−１）は、機能シミュレータＡ４２に対応する。機能シミュレータＡ４２は、検証対象の回路（検証回路データ４１）の回路の動作をシミュレーションする。上記の切替回路４−１、４−２、…、（４−（ｎ−１））及びメタステーブル状態値発生部３−１、３−２、…、（３−（ｎ−１））は、本発明の機能シミュレータＢ４３に対応する。
【００４１】
次に、本発明の非同期回路の検証方法（検証プログラム）の実施の形態について説明する。図７は、本発明の非同期回路の検証方法（検証プログラム）の実施の形態を示すフロー図である。本図は、非同期回路の機能シミュレーション動作フローを示している。ここでは、図６における順序回路１−１、１−２、切替回路４−１、メタステーブル状態値発生部３−１、接続ノード１１−１を例として説明する。
【００４２】
まず、Ｓ１で、切替制御部４−１は、順序回路１−１から出力された接続ノード１１−１の値をＶａｌｕｅに保持する。次に、Ｓ２で、切替制御部４−１は、接続ノード１１−１の値が変化しているかを判断する。接続ノード１１−１の値が変化している場合（Ｓ２：Ｙｅｓ）、切替制御部４−１は、Ｓ３のメタステーブル状態検出処理を行う。接続ノード１１−１の値が変化していない場合（Ｓ２：Ｎｏ）、Ｓ７、Ｓ８の処理を行う。
【００４３】
Ｓ３のメタステーブル状態検出処理では、切替制御部４−１は、メタステーブル状態フラグの値をチェックする。メタステーブル状態フラグの値がｆａｌｓｅ＝メタステーブル状態でない場合（Ｓ３：Ｙｅｓ）、Ｓ４で、切替制御部４−１は、メタステーブル状態フラグを立てる（ｔｒｕｅに設定する）。なお、初期状態では、メタステーブル状態フラグの値はｆａｌｓｅである。メタステーブル状態フラグの値がｆａｌｓｅ＝メタステーブル状態である場合（Ｓ３：Ｎｏ）、Ｓ７、Ｓ８の処理を行う。
【００４４】
その後、Ｓ５で、メタステーブル状態発生部３−１は、乱数を用いてメタステーブル状態の値を発生して、その値を変数ｍｅｔａに保持する。Ｓ６で、切替制御部４−１は、変数ｍｅｔａのメタステーブル状態の値を接続ノード１１−１の値に設定する。そして、順序回路１−２の入力へ出力する。
【００４５】
接続ノード１１−１の値が変化していない場合（Ｓ２：Ｎｏ）、またはメタステーブル状態フラグの値がｆａｌｓｅ＝メタステーブル状態である場合（Ｓ３：Ｎｏ）、Ｓ７で、切替制御部４−１は、メタステーブル状態のフラグを下げる（ｆａｌｓｅに設定する）。そして、Ｓ８で、切替制御部４−１は、Ｓ１でＶａｌｕｅに保持した接続ノード１１−１の値をそのまま接続ノード１１−１の値に設定する。そして、順序回路１−２の入力へ出力する。
【００４６】
図３の非同期回路を例として、本発明の非同期回路の検証方法（検証プログラム）の動作を説明する。図８は、本発明の非同期回路の検証方法（検証プログラム）における各信号の状態を示すタイミング図である。横軸は時刻である。
【００４７】
まず、順序回路ＦＦ２に関して説明する。
時刻ｔ０、ｔ１、ｔ２、ｔ３において、接続ノードＤ２の値は、Ｖａｌｕｅ２に更新され保持される（０→０→０→１）（Ｓ１）。そして、時刻３において、接続ノードＤ２の値が０から１へ変化したとき（Ｓ２：Ｙｅｓ）、順序回路ＦＦ２のメタステーブル状態フラグＭＦ２の値がチェックされる（Ｓ３）。メタステーブル状態フラグＭＦ２がｆａｌｓｅの場合（Ｓ３：Ｙｅｓ）、メタステーブル状態フラグＭＦ２はｔｒｕｅに設定される（Ｓ４）。そして、メタステーブル状態の値＝Ｍ１が発生される（Ｓ５）。その後、メタステーブル状態の値＝Ｍ１が接続ノードＤ２に設定される（Ｓ６）。そして、Ｍ１が順序回路ＦＦ２のＤｉｎにへ入力される。次に、時刻４において、接続ノードＤ２の値は変化しないため（Ｓ２：Ｎｏ）、メタスステーブル状態フラグＭＦ２がｆａｌｓｅに設定される（Ｓ７）。Ｖａｌｕｅ２で保持された値（＝１）が接続ノードＤ２に設定される（Ｓ８）。その時、ＣＬＫ２が立ち上がり変化（アクティブエッジ）に変化するため、順序回路ＦＦ２は、接続ノードＤ２の値（＝Ｍ１）をラッチする（Ｑ２＝Ｍ１となる）。 
【００４８】
次に、順序回路ＦＦ３に関して説明する。
時刻ｔ０、ｔ１、ｔ２、ｔ３において、接続ノードＤ３の値は、Ｖａｌｕｅ３に更新され保持される（０→０→０→１）（Ｓ１）。そして、時刻３において、接続ノードＤ３の値が０から１へ変化したとき（Ｓ２：Ｙｅｓ）、順序回路ＦＦ３のメタステーブル状態フラグＭＦ３の値がチェックされる（Ｓ３）。メタステーブル状態フラグＭＦ３がｆａｌｓｅの場合（Ｓ３：Ｙｅｓ）、メタステーブル状態フラグＭＦ３はｔｒｕｅに設定される（Ｓ４）。そして、メタステーブル状態の値＝Ｍ５が発生される（Ｓ５）。その後、メタステーブル状態の値＝Ｍ５が接続ノードＤ３に設定される（Ｓ６）。そして、Ｍ５が順序回路ＦＦ３のＤｉｎにへ入力される。次に、時刻４において、接続ノードＤ３の値は変化しないため（Ｓ２：Ｎｏ）、メタスステーブル状態フラグＭＦ３がｆａｌｓｅに設定される（Ｓ７）。Ｖａｌｕｅ３で保持された値（＝１）が接続ノードＤ３に設定される（Ｓ８）。その時、ＣＬＫ２が立ち上がり変化（アクティブエッジ）に変化するため、順序回路ＦＦ３は、接続ノードＤ３の値（＝Ｍ５）をラッチする（Ｑ３＝Ｍ５となる）。 
【００４９】
このように、順序回路ＦＦ１の出力Ｑ１の値が設定される接続ノードＤ２、Ｄ３において、異なるメタステーブル状態の値（Ｍ１とＭ５）がそれぞれにラッチされることにより、配線長の相違によって生ずる信号伝播遅延差を等価的に表現できるようになる。
【００５０】
本発明により、非同期のリセット信号やクロック信号含む複数の順序回路の機能シミュレーションを的確に実行することが可能となる。すなわち、非同期回路の回路構成に関わらず機能シミュレーションを実施でき、その非同期回路を的確に検証することが可能となる。
【００５１】
また、本発明により、接続ネット毎にそのネットの値とメタステーブル状態値を使用するように変更したため、従来技術で必要であったｎ時刻前の入力データを保持するための内部配列要素Ｄ［０］〜Ｄ［ｎ］が不要となり、コンピュータ資源であるメモリ消費量の増大を抑えることが可能となる。
【００５２】
図３で示した非同期回路の回路図において、順序回路ＦＦ２の接続ノードと順序回路ＦＦ３の接続ノードとが同一になる場合がある。その場合は、図７の本発明の非同期回路の検証方法（検証プログラム）の動作フローを適用する前に、順序回路ＦＦ２の接続ノードと順序回路ＦＦ３の接続ノードとを分離させる処理を追加することが好ましい。
【００５３】
図９は、順序回路ＦＦ２の接続ノードと順序回路ＦＦ３が同一接続ノードに接続されるＲＴＬソースの記述例である。図１０は、順序回路ＦＦ２の接続ノードと順序回路ＦＦ３の接続ノードとが互いに独立しているように変更したＲＴＬソースの記述例である。
【００５４】
図９では、クロック信号ｃｌｋ２のアクティブエッジ検出時に、順序回路ＦＦ１の出力信号Ｑ１を順序回路ＦＦ２の出力Ｑ２、及び順序回路ＦＦ３の出力Ｑ３へ出力する記述になっている。一方、図１０では順序回路ＦＦ１の出力信号Ｑ１を独立した内部変数Ｑ１＿ｔ１およびＱ１＿ｔ２に出力した後に、それぞれ順序回路ＦＦ２の出力Ｑ２及び順序回路ＦＦ３の出力Ｑ３へ出力するように変更する。
【００５５】
図７の本発明の非同期回路の検証方法は、同一のネット（接続ノード）に複数の順序回路が接続されていた場合でも、同一の処理フロー内で処理する。そのため、同一ネットに複数の順序回路が接続されていた場合、複数の順序回路間で、配線長の相違によって生ずる信号伝播遅延差を考慮できなくなる。これを回避する方法として、上述の図１０のように、接続ネット（接続ノード）を分離することで、各々の順序回路へ接続している接続ネット毎に本発明を実施することができる。この場合、乱数で発生するメタステーブル状態値と変更前の接続ノードの値の相関的な状態は、順序回路間での信号伝播遅延差を考慮することと等価である。そのため、期待する機能シミュレーション結果が得られる。
【００５６】
本発明の非同期回路の検証方法をプログラムとしてコンピュータシステムに組み込んだ時のシステム構成図を図５に示したが、この検証プログラムを利用して、ＲＴＬで記述した非同期回路を含む回路を検証する場合の一例について説明する。図１１は、本発明の非同期回路の検証プログラムを用いてＲＴＬ記述の非同期回路を含む回路を検証する方法を示すフロー図である。
【００５７】
まず、ＲＴＬ（Ｒｅｓｉｓｔｅｒ  Ｔｒａｎｓｆｅｒ  Ｌｅｖｅｌ）の記述を用いて回路を設計する（Ｓ１１）。次に、設計した回路内の同一ネットに複数の順序回路が存在する否かを判断する（Ｓ１２）。同一ネットに複数の順序回路が存在する場合（Ｓ１２：Ｙｅｓ）、図１０で説明したように、各順序回路の接続ノードが互いに独立するように、接続ノードを分離する処理を行う（Ｓ１３）。同一ネットに複数の順序回路が存在しない場合（Ｓ１２：Ｎｏ）、Ｓ１２の処理をせずにＳ１３の処理へ移る。続いて、分離された各接続ノードごとに、クロック信号の周期が異なる順序回路の出力データが、組み合わせ回路等を介して次の順序回路へ接続している接続ノードを抽出する（Ｓ１４）。このＳ１４の処理については、例えば、市販ＥＤＡ（Ｅｌｅｃｔｒｏｎｉｃ  Ｄｅｓｉｇｎ  Ａｕｔｏｍａｔｉｏｎ）ツール等により抽出可能である。次に、Ｓ１４で抽出した接続ノードに対して、機能シミュレータＢ４３は、既述の機能シミュレータＡ４２で決定した値を監視（モニタ）し、ネットの値が変化した時に、１基本サイクル時刻間その接続ネットの値をメタステーブル状態値と置き換え、それ以外の時は接続ネットの値自身を入力データ信号とする（Ｓ１５）。Ｓ１５の詳細は、図７及び図８において説明したとおりである。その後、以上説明した方法で回路の検証が全て終了するまで、Ｓ１１に戻り繰り返し処理を行う（Ｓ１６）。
【００５８】
このような本発明の非同期回路の検証プログラムにより、上述のように非同期回路の検証を回路構成に関わらず的確に実施でき、メモリ消費量の増大を抑えることも可能となる。
【図面の簡単な説明】
【００５９】
【図１】図１は、従来技術における非同期回路の検証方法を示すフロー図である。
【図２】図２は、図１の動作フローを実行する機能ブロックを示す構成図である。
【図３】図３は、機能シミュレーション動作フローを適用する非同期回路の一例を示す回路図である。
【図４】図４は、機能シミュレーション動作フローにおける各信号の状態を示すタイミング図である。
【図５】図５は、本発明の非同期回路の検証装置の実施の形態の構成を示すブロック図である。
【図６】図６は、本発明の非同期回路の検証装置の実施の形態の構成を示す機能ブロック図である。
【図７】図７は、本発明の非同期回路の検証方法（検証プログラム）の実施の形態を示すフロー図である。
【図８】図８は、本発明の非同期回路の検証方法（検証プログラム）における各信号の状態を示すタイミング図である。
【図９】図９は、順序回路ＦＦ２の接続ノードと順序回路ＦＦ３が同一接続ノードに接続されるＲＴＬソースの記述例である。
【図１０】図１０は、順序回路ＦＦ２の接続ノードと順序回路ＦＦ３の接続ノードとが互いに独立しているように変更したＲＴＬソースの記述例である。
【図１１】図１１は、本発明の非同期回路の検証プログラムを用いてＲＴＬ記述の非同期回路を含む回路を検証する方法を示すフロー図である。
【符号の説明】
【００６０】
１、１−１、１−２、…、１−ｎ（ただし、ｎは２以上の整数）    順序回路
２、２−１、２−２、…、（２−ｎ）    入力データ保持部
３、３−１、３−２、…、３−（ｎ−１）    メタステーブル状態値発生部
４、４−１、４−２、…、４−（ｎ−１）    切替回路
１１、１１−１、１１−２、…、１１−（ｎ−１）    接続ノード
２０    非同期回路の検証装置
２１    コンピュータ
２２    記憶装置
２３    表示装置
２４    入力装置
３１    ＣＰＵ
３２    メモリ
４１    検証回路データ
４２    機能シミュレータＡ
４３    機能シミュレータＢ
１０１    順序回路
１０２    入力データ保持部
１０３    メタステーブル状態値発生部
１０４    切替制御部
【図１】
2007052640.tif 000003
【図２】
2007052640.tif 000004
【図３】
2007052640.tif 000005
【図４】
2007052640.tif 000006
【図５】
2007052640.tif 000007
【図６】
2007052640.tif 000008
【図７】
2007052640.tif 000009
【図８】
2007052640.tif 000010
【図９】
2007052640.tif 000011
【図１０】
2007052640.tif 000012
【図１１】
2007052640.tif 000013