(57)【要約】【課題】自己ループを含む論理回路に対する論理シミュレーション中に自己ループを構成するノードに不定値が検出された場合にも、不定値を伝搬させることを防ぎ、論理シミュレーションを継続することが可能な論理シミュレータを提供する。【解決手段】検証対象である論理回路の論理シミュレーションを実行するシミュレーション実行部と、論理シミュレーションにおいて不定値の検出された不定値検出ノードが存在する場合に、不定値検出ノードの論理値を決定するべきノードのうちから、不定値の原因となる発生原因ノードを特定する発生原因特定部と、不定値検出ノードと発生原因ノードとが同一のノードであるか否かを判定するノード判定部と、不定値検出ノードと発生原因ノードとが同一である場合に、発生原因ノードの不定値を、予め定められて物理的記憶媒体に格納された確定値への書き換えを行う書き換え実行部と、を備える。【選択図】図７
2011022672.tif 000002
【特許請求の範囲】
【請求項１】
検証対象である論理回路の論理シミュレーションを実行するシミュレーション実行部と、
前記論理シミュレーションにおいて不定値の検出された不定値検出ノードが存在する場合に、前記不定値検出ノードの論理値を決定するべきノードのうちから、前記不定値の原因となる発生原因ノードを特定する発生原因特定部と、
前記不定値検出ノードと前記発生原因ノードとが同一のノードであるか否かを判定するノード判定部と、
前記不定値検出ノードと前記発生原因ノードとが同一である場合に、前記発生原因ノードの不定値を、予め定められて物理的記憶媒体に格納された確定値への書き換えを行う書き換え実行部と
を備える論理シミュレータ。
【請求項２】
請求項１に記載の論理シミュレータであって、
前記発生原因特定部は、
前記論理シミュレーションにおける前記不定値検出ノードの有無を判定する不定値検出部と、
前記不定値検出ノードが存在した場合に前記不定値検出ノードの論理値を決定するべき前記不定値検出ノードのロジックコーンに属する全てのノードを抽出するコーン抽出部と、
前記ロジックコーンに属する全てのノードに対してバックトレースを実行して、前記発生原因ノードを特定するバックトレース部と
を備える論理シミュレータ。
【請求項３】
請求項１または請求項２に記載の論理シミュレータであって、
前記確定値は、前記発生原因ノードへ入力されたパルス幅が非常に短く、論理素子のスレッシュホールド電圧を超えない場合であれば「０」へ書き換えられ、論理素子のスレッシュホールド電圧を超える場合には「１」へ書き換えされるように定められる
論理シミュレータ。
【請求項４】
請求項１または請求項２に記載の論理シミュレータであって、
前記書き換え実行部は、前記不定値検出ノードと前記発生原因ノードとが同一である場合に、前記不定値検出ノードと前記発生原因ノードとが同一である旨をユーザへ通知して、前記ユーザからの入力に基づいて、前記発生原因ノードの不定値を、予め定められた確定値への書き換えを行う
論理シミュレータ。
【請求項５】
請求項１から請求項４までのいずれかに記載の論理シミュレータであって、
前記書き換え実行部は、前記発生原因ノードの不定値を確定値へ書き換えを行った場合、書き換えを行った時刻と、書き換え後の確定値の論理値と、書き換えたインスタンス名を含めたメッセージを出力する
論理シミュレータ。
【請求項６】
請求項１から請求項５までのいずれかに記載の論理シミュレータであって、
前記発生原因ノードの不定値を確定値に書き換える処理を行うか否かを判定するシミュレーション処理部
をさらに備える論理シミュレータ。
【請求項７】
請求項６に記載の論理シミュレータであって、
前記シミュレーション処理部は、前記論理シミュレーションにおいて不定値の発生し他旨をユーザへ通知して、前記ユーザからの入力に基づいて、前記発生原因ノードの不定値を確定値に書き換える処理を行うか否かを判定する
論理シミュレータ。
【請求項８】
検証対象である論理回路の論理シミュレーションを実行するステップと、
前記論理シミュレーションにおいて不定値の検出された不定値検出ノードが存在する場合に、前記不定値検出ノードの論理値を決定するべきノードのうちから、前記不定値の原因となる発生原因ノードを特定するステップと、
前記不定値検出ノードと前記発生原因ノードとが同一のノードであるか否かを判定するステップと、
前記不定値検出ノードと前記発生原因ノードとが同一である場合に、前記発生原因ノードの不定値を、予め定められて物理的記憶媒体に格納された確定値への書き換えを行うステップと
を備える論理シミュレーション方法。
【請求項９】
請求項８に記載の論理シミュレーション方法であって、発生原因ノードを特定するステップは、
前記論理シミュレーションにおける前記不定値検出ノードの有無を判定するステップと、
前記不定値検出ノードが存在した場合に前記不定値検出ノードの論理値を決定するべき前記不定値検出ノードのロジックコーンに属する全てのノードを抽出するステップと、
前記ロジックコーンに属する全てのノードに対してバックトレースを実行して、前記発生原因ノードを特定するステップと
を含む論理シミュレーション方法。
【請求項１０】
請求項８または請求項９に記載の論理シミュレーション方法であって、
前記確定値は、前記発生原因ノードへ入力されたパルス幅が非常に短く、論理素子のスレッシュホールド電圧を超えない場合であれば「０」へ書き換えられ、論理素子のスレッシュホールド電圧を超える場合には「１」へ書き換えられるように定められる
論理シミュレーション方法。
【請求項１１】
請求項８または請求項９に記載の論理シミュレーション方法であって、確定値への書き換えを行うステップは、
前記不定値検出ノードと前記発生原因ノードとが同一である場合に、前記不定値検出ノードと前記発生原因ノードとが同一である旨をユーザへ通知するステップと、
前記ユーザからの入力に基づいて、前記発生原因ノードの不定値を、前記確定値への書き換えを行うステップと
を含む論理シミュレーション方法。
【請求項１２】
請求項８から請求項１１までのいずれかに記載の論理シミュレーション方法であって、確定値への書き換えを行うステップは、
前記発生原因ノードの不定値を確定値へ書き換えを行った場合、書き換えを行った時刻と、書き換え後の確定値の論理値と、書き換えたインスタンス名を含めたメッセージを出力するステップ
をさらに備える論理シミュレーション方法。
【請求項１３】
請求項８から請求項１２までのいずれかに記載の論理シミュレーション方法であって、
前記発生原因ノードの不定値を確定値に書き換える処理を行うか否かを判定するステップ
をさらに備える論理シミュレーション方法。
【請求項１４】
請求項１３に記載の論理シミュレーション方法であって、前期確定値に書き換える処理を行うか否かを判定するステップは、
前記論理シミュレーションにおいて不定値の発生し他旨をユーザへ通知するステップと、
前記ユーザからの入力に基づいて、前記発生原因ノードの不定値を確定値に書き換える処理を行うか否かを判定するステップと
を含む論理シミュレーション方法。
【請求項１５】
請求項８から請求項１４までのいずれかに記載の論理シミュレーション方法をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体集積回路の検証を行う論理シミュレータに関する。
【背景技術】
【０００２】
近年、製品の多様化に伴い、製品に搭載される半導体集積回路は、大規模になり、また複雑化している。半導体集積回路の大規模化に伴って、動作検証の方法も複雑になっており、パターン検証のデータも大規模化しているため、検証工数が増加する傾向にある。
【０００３】
論理シミュレーションでは、シミュレーション実行中に、回路内の論理素子であるノードに論理動作上の不定値が発生する場合がある。このような場合、当該ノードの出力を入力するノードも不定値を出力してしまう。従来の論理シミュレーションでは、このような場合もシミュレーションは続行されるため、以降の回路へ不定値を伝搬してしまっていた。そのため、テストパターンの作り直しを行って不定値が発生しないように調整した上で、改めて不定値の発生したノード以降の回路の動作を検証するという手順が必要であった。その結果、回路全体の動作検証を行うために論理シミュレーションを複数回に渡って実行することが必要であった。このような問題に起因して、検証対象の回路に対して１回の論理シミュレーションで問題となる箇所を発見して、シミュレーション時間の短縮を図ることが求められている。
【０００４】
特許文献１は、論理シミュレーションにおいて不定値が及ぼす悪影響を緩和することが可能な論理シミュレーション方法を開示している。以下、図を用いて特許文献１の論理シミュレーション方法を説明する。
【０００５】
図１は、特許文献１における論理シミュレーション方法の動作方法を示すフローチャートである。特許文献１の論理シミュレーションにおいて、ステップＳ１では、論理回路図及び入力信号パターンを入力する。ステップＳ２では、ステップＳ１で入力された情報に基づいて論理シミュレーションをステップ実行する。ここでステップ実行とは、１サイクル分の論理シミュレーションを行うことを意味する。ステップＳ３では、不定値（Ｘ）を検出したノード（以下、不定値検出ノード）の集合Ψ１を検出する。ステップＳ４では、検出されたそれぞれの不定値検出ノードのロジックコーンに属する全てのノード集合Φ１を検出する。ステップＳ５では、ノード集合Φ１のうちから、不定値（Ｘ）の発生原因となるノード集合をバックトレースにより検出する。ステップＳ６では、不定値（Ｘ）の発生原因であったノード集合のそれぞれに対して、論理値「０」と「１」との全ての組み合わせを代入して論理シミュレーションを実行する。ステップＳ７では、ステップＳ６で実行された論理シミュレーションにおいて、代入された論理値の全ての組み合わせに対して、不定値検出ノードの集合Ψ１に属する各々ノードが、同一の論理値を出力するか否かを判定する。ステップＳ８では、代入された論理値のすべての組み合わせに対して同一の論理値を出力する不定値検出ノードの集合Ψに属するノードについて、その不定値検出ノードの論理値を合致した期待値へ書き換える。ステップＳ９では、論理シミュレーションにおける全てのイベントが完了したか否かを判定し、完了していれば論理シミュレーションを終了する。ステップＳ１０では、論理シミュレーションの終了を受けて、シミュレーション結果やメッセージを出力する。
【０００６】
図２は、特許文献１の論理シミュレーション方法を説明するための論理回路の一例である。図２の不定値検出ノード１００は、論理シミュレーションにおいて不定値の検出されたノードである。コーン部１１０は、不定値検出ノード１００の論理を決定するロジックコーンである。また、マルチプレクサ（ＭＵＸ）１３０は、３つの論理素子によって構成されるマルチプレクサである。なお、図３において、ノードＡ、Ｂは、論理値「１」に固定されているものとする。
【０００７】
また、図３Ａ〜Ｄは、論理シミュレーションにおける真理値表を示している。図３Ａは、論理積（ＡＮＤ）の真理値表である。図３Ｂは、論理和（ＯＲ）の真理値表である。図３Ｃは、排他的論理和（Ｅｘ−ＯＲ）の真理値表である。図３Ｄは、ＭＵＸの真理値表である。これらの表における「Ｘ」は、不定値を示している。
【０００８】
ここで、図３Ｄにおいて、ＭＵＸは、Ｓ端子に不定値（Ｘ）が入力されても、入力端子Ａ、Ｂに論理値「１」が入力されていれば、出力端子Ｙは「１」となる。しかし、図２に示されたＭＵＸ１３０は、ノードＣに不定値（Ｘ）が入力されると、ノードＡ及びノードＢから論理値「１」が入力された場合であっても、ノードＦは、不定値（Ｘ）となる。このように、あるノードに不定値（Ｘ）が発生すると、このノードから論理値を入力する論理素子も不定値（Ｘ）を出力してしまう。そのため、論理シミュレーションが暴走してしまい、続行不可能となる。
【０００９】
特許文献１の論理シミュレーション方法では、図２のノードＦの不定値（Ｘ）の原因となるノードＣに論理値「０」と「１」とを代入する論理シミュレーションを実行して、いずれの場合にも不定値検出ノード１００への入力であるノードＦが、例えば「１」という同一の値となることを確認した上で、ノードＦの論理値を固定値「１」へ書き換える。これにより、論理シミュレーションを継続することを可能にしている。
【００１０】
図２の論理回路に図１のフローチャートを適用して説明を行う。まず、図２に示す論理回路図と当該論理回路へ入力する信号パターンが入力され（ステップＳ１）、論理シミュレーションのステップ実行が行われる（ステップＳ２）。ステップ実行が完了すると各論理素子（ノード）において不定値（Ｘ）が発生したか否かを検出する（ステップＳ３）。ここで、図２に示すように不定値の発生した不定値検出ノード１００が検出されたとする。次に、この不定値検出ノード１００の論理を決定するロジックコーンのノード集合Φを検出する（ステップＳ４）。図２では、不定値検出ノード１００のロジックコーンのノード集合Φは、コーン部１１０で示すノード（Ａ、Ｂ、Ｃ、Ｄ、Ｅ、Ｆ、Ｇ、Ｈ、Ｉ、Ｊ、Ｋ）である。次に、ノード集合Φのうちから不定値検出ノード１００の不定値（Ｘ）の発生原因となるノード集合をバックトレースにより検出する（ステップＳ５）。本説明では、コーン部１１０に属するノードのうちで、ノードＣ、Ｄ、Ｅ、Ｆ、Ｈ、Ｋが不定値（Ｘ）をもち、ノードＡ、Ｂは、固定の論理値「１」であるとする。そのため、ノードＦの駆動する論理素子の入力であるノードＤ、Ｅを特定し、ノードＤ、Ｅを駆動する論理素子の入力であるノードＡ、Ｂ、Ｃを特定し、ノードＡ、Ｂ、Ｃのうちで不定値（Ｘ）をもつノードＣを特定するという動作になる。
【００１１】
次に、検出されたノードＣに対して、論理値「０」、「１」の全ての組み合わせを代入して論理シミュレーションを行う（ステップＳ６）。本説明においてノードＡ、Ｂは、論理値「１」に固定であるので、ノードＣが「０」の場合、ノードＦは「１」となる。また、ノードＣが「１」の場合も、ノードＦは「１」となる。次に、ステップＳ６の論理シミュレーション結果が、全ての入力値の組み合わせに対して、同一の出力であるかを判定する（ステップＳ７）。本説明では、ノードＣへの入力が「１」と「０」のいずれであっても、ノードＦへの出力は「１」であり、全ての入力値の組み合わせに対して同一の出力である。そのため、不定値検出ノード１００の値を固定値「１」に書き換える（ステップＳ８）。その後、論理シミュレーションの終了判定（ステップＳ９）、論理シミュレーション結果及びメッセージ出力（ステップＳ１０）へと進む。特許文献１の論理シミュレーション方法は、このような動作方法によって、不定値（Ｘ）が発生しても、不定値発生ノードの論理値を固定値へ書き換えることで、シミュレーションを継続することができる。
【先行技術文献】
【特許文献】
【００１２】
【特許文献１】特開２００６−３３１２１２号公報
【発明の概要】
【発明が解決しようとする課題】
【００１３】
しかしながら、特許文献１の論理シミュレーション方法では、自ノードの出力を帰還入力する自己ループを構成するノードに対して不定値の書き換えを行うことができないという課題がある。
【００１４】
図４は、特許文献１を適用する論理シミュレーションの検査対象となる論理回路の構成図の一例である。図４の論理回路は、フリップフロップ（以下、ＦＦ）１とＦＦ２とを備える。ＦＦ１のクロック入力Ｃは、図示されない外部回路からクロックＣＬを入力している。ＦＦ１の出力Ｑは、Ｑ１Ｑとして外部へ出力される。ＦＦ１の反転出力ＱＢは、分岐されてＦＦ１のデータ入力ＤとＦＦ２のクロック入力Ｃとにそれぞれ接続されている。ＦＦ２の出力Ｑは、Ｑ２Ｑとして外部へ出力される。ＦＦ２の反転出力ＱＢは、分岐されてＦＦ２のデータ入力Ｄと図示されない外部回路と接続される。
【００１５】
このように構成された論理回路は、図５に示すタイミングチャートに示すように動作する。図５は、特許文献１を適用する図４に示された論理回路におけるタイミングチャートの一例である。図５において、ＣＬ、ＦＦ１−Ｑ、ＦＦ１−ＱＢ、ＦＦ２−Ｑ、ＦＦ２−ＱＢは、それぞれ、クロック入力ＣＬ、ＦＦ１のＱ出力、ＦＦ１のＱＢ出力、ＦＦ２のＱ出力、ＦＦ２のＱＢ出力を示している。
【００１６】
まず、時刻Ｔ１において、ＦＦ１のクロック入力Ｃへ入力されるクロックＣＬにおいて、論理を確定することが不可能なパルス幅を有するパルスが入力されて、ＦＦ１がＱＢ出力に不定値を発生したとする。ＦＦ１のＱＢ出力は、ループバックによりＦＦ１のデータ入力Ｄへ入力される。そのため、ＦＦ１の出力Ｑは、不定値を出力する。
【００１７】
次に、時刻Ｔ２において、ＦＦ１のクロック入力Ｃへ入力されるクロックＣＬにおいて、論理を確定することの可能なパルス幅を有するパルス（正常なパルス）が入力されるが、ＦＦ１の出力Ｑと出力ＱＢとは、不定値のままである。これは、ＦＦ１のデータ入力Ｄが不定値となっているためである。
【００１８】
このとき、ＦＦ１のデータ入力Ｄについて、ロジックコーンを抽出すると、不定値の発生原因は、ＦＦ１の出力ＱＢである。そのため、ＦＦ１の出力ＱＢに論理値「０」と「１」とを確定値として代入したとしても、代入される値によってＦＦ１のＱ出力から出力される論理値が、異なる結果となる。そのため、従来技術では、ＦＦ１の出力Ｑ及び出力ＱＢの論理値の書き換えができない。
【００１９】
上述の課題が発生するメカニズムを、図１を用いて説明を行う。図４の論理回路図と、論理回路図へ入力する信号パターンが入力され（ステップＳ１）、論理シミュレーションのステップ実行が行われる（ステップＳ２）。図５においてＦＦ１がクロック入力Ｃの信号に論理を確定することが不可能なパルス幅を有するパルスが入力された場合、ＦＦ１の出力Ｑと出力ＱＢとは、不定値（Ｘ）を出力する。
【００２０】
さらにＦＦ１のＱＢ出力は、ＦＦ２のクロック入力Ｃと接続されており、ＦＦ２はクロック入力Ｃに不定値（Ｘ）を入力する。そのため、ＦＦ２の出力Ｑ及び出力ＱＢも不定値（Ｘ）を出力する。ＦＦ２の出力Ｑに接続されたノードＱ２Ｑも不定値（Ｘ）となり、不定値（Ｘ）は後段へ伝搬する。これらにより不定値が検出される（ステップＳ３）と、不定値を出力するＦＦ１のロジックコーンを抽出する（ステップＳ４）。ＦＦ１のデータ入力Ｄとなるのは、帰還入力されるＦＦ１の出力ＱＢであるため、ＦＦ１のデータ入力Ｄのロジックコーンは、ＦＦ１のみである。
【００２１】
続いて、バックトレースにより不定値（Ｘ）の発生原因を検出する（ステップＳ５）。ＦＦ１の出力Ｑと出力ＱＢとが不定値（Ｘ）であることから、ＦＦ１の入力であるクロック入力Ｃとデータ入力Ｄをバックトレースする。ＦＦ１のデータ入力ＤはＦＦ１の出力ＱＢが接続されており、ＦＦ１の出力ＱＢは不定値（Ｘ）であるため、不定値（Ｘ）の発生原因は、ＦＦ１の出力ＱＢとなる。
【００２２】
ＦＦ１の出力ＱＢに対して、論理値「０」と「１」の全ての組み合わせを代入して、論理シミュレーションを実行する（ステップＳ６）。つまり、ＦＦ１の出力ＱＢへ論理値「０」と「１」を代入して論理シミュレーションを実行する。論理シミュレーションを実行した結果、出力Ｑ及び出力ＱＢの期待値が一致するか否かを判定する（ステップＳ７）。しかし、ＦＦ１の出力ＱＢを論理値「０」あるいは「１」を代入したとしても、ＦＦ１は、図５のタイミングチャートにおいて、置き換え前の時刻Ｔ１のＦＦ１の出力ＱＢをＦＦ１のデータ入力Ｄへ帰還入力するため、出力Ｑ及び出力ＱＢは時刻Ｔ１に入力された不定値を出力する。そのため、出力Ｑ及び出力ＱＢの期待値は一致しない。これにより、図１のフローチャートでは、ステップＳ９へ進み、論理シミュレーションにおける次のステップ実行へ移行するか論理シミュレーションを終了することになり、ＦＦ１の出力ＱＢは確定値に書き換えられない。そのため、再び、不定値（Ｘ）を伝搬することになる。
【課題を解決するための手段】
【００２３】
以下に、（発明を実施するための形態）で使用される番号を用いて、課題を解決するための手段を説明する。これらの番号は、（特許請求の範囲）の記載と（発明を実施するための形態）との対応関係を明らかにするために付加されたものである。ただし、それらの番号を、（特許請求の範囲）に記載されている発明の技術的範囲の解釈に用いてはならない。
【００２４】
本発明の論理シミュレータは、検証対象である論理回路の論理シミュレーションを実行するシミュレーション実行部（２０）と、論理シミュレーションにおいて不定値の検出された不定値検出ノードが存在する場合に、不定値検出ノードの論理値を決定するべきノードのうちから、不定値の原因となる発生原因ノードを特定する発生原因特定部（２２、２３、２４）と、不定値検出ノードと発生原因ノードとが同一のノードであるか否かを判定するノード判定部（２５）と、不定値検出ノードと発生原因ノードとが同一である場合に、発生原因ノードの不定値を、予め定められて物理的記憶媒体（１、２）に格納された確定値への書き換えを行う書き換え実行部（２６）と、を備える。
【００２５】
本発明の論理シミュレーション方法は、検証対象である論理回路の論理シミュレーションを実行するステップ（Ｓ１１０）と、論理シミュレーションにおいて不定値の検出された不定値検出ノードが存在する場合に、不定値検出ノードの論理値を決定するべきノードのうちから、不定値の原因となる発生原因ノードを特定するステップ（Ｓ１２０、Ｓ１４０、Ｓ１５０）と、不定値検出ノードと発生原因ノードとが同一のノードであるか否かを判定するステップ（Ｓ１６０）と、不定値検出ノードと発生原因ノードとが同一である場合に、発生原因ノードの不定値を、予め定められて物理的記憶媒体（１、２）に格納された確定値への書き換えを行うステップ（Ｓ１７０）と、を備える。
【００２６】
本発明のプログラムは、上述の論理シミュレーション方法をコンピュータに実行させる。
【発明の効果】
【００２７】
本発明によれば、論理シミュレーションを行うべき検査対象の論理回路が、自己ループを含む論理回路であって、論理シミュレーション中に自己ループを構成するノードにおいて不定値が検出されたとしても、当該ノードの後段へ不定値を伝搬させることを防ぎ、論理シミュレーションを継続することが可能な論理シミュレータを提供できる。
【図面の簡単な説明】
【００２８】
【図１】特許文献１における論理シミュレーション方法のフローチャートである。
【図２】特許文献１の論理シミュレーション方法を説明するための論理回路の一例である。
【図３Ａ】特許文献１における論理積（ＡＮＤ）の真理値表である。
【図３Ｂ】特許文献１における論理和（ＯＲ）の真理値表である。
【図３Ｃ】特許文献１における排他的論理和（Ｅｘ−ＯＲ）の真理値表である。
【図３Ｄ】特許文献１におけるマルチプレクサの真理値表である。
【図４】特許文献１を適用する論理シミュレーションの検査対象となる論理回路の構成図の一例である。
【図５】特許文献１を適用する図４に示された論理回路におけるタイミングチャートの一例である。
【図６】本発明における論理シミュレータのハードウェア構成を示す図である。
【図７】本発明における論理シミュレータの構成を示す機能ブロック図である。
【図８】本発明における論理シミュレータの動作フローである。
【図９】本実施形態における論理シミュレーションの検査対象となる論理回路の構成図の一例である。
【図１０】本実施形態における図９に示された論理回路におけるタイミングチャートの一例である。
【発明を実施するための形態】
【００２９】
添付図面を参照して、本発明の実施形態による論理シミュレータを以下に説明する。
【００３０】
［構成の説明］
はじめに、本実施形態における論理シミュレータのハードウェア構成の説明を行う。図６は、本実施形態における論理シミュレータのハードウェア構成を示す図である。本実施形態の論理シミュレータは、記憶部１と、処理部２と、表示部３と、入力部４と、通信部５とを備える。
【００３１】
記憶部１は、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）を備え、論理シミュレーションの対象となる論理回路のデータや、論理回路へ入力する信号パターンや、論理シミュレーション結果等の論理シミュレータに関するデータを記憶する。処理部２は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）と、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）やＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）を備えるメモリとで構成される。ＲＯＭは、論理シミュレータの機能を実現するための処理プログラムを格納されており、ＣＰＵは、ＲＯＭに格納された処理用プログラムを、ＲＡＭに一時的に展開して処理を行い、論理シミュレータの機能を実現する。処理部２は、記憶部１、表示部３、入力部４、通信部５の制御も行う。入力部４は、キーボードやマウスで構成され、論理シミュレータへの入力インターフェースである。表示部３は、ＬＣＤ（Ｌｉｑｕｉｄ  Ｃｒｙｓｔａｌ  Ｄｉｓｐｌａｙ）で構成され、論理シミュレーション結果等の、論理シミュレータに関係する表示を行う。通信部５は、通信ポートで構成され、図示されない外部のネットワークと接続されて通信を行うことが可能である。通信部５は、処理部２とも接続されており、外部のサーバから論理シミュレーションの検証対象となる論理回路のデータを送受信する等、論理シミュレータの機能におけるデータ送受信を行う。
【００３２】
なお、処理部１のＲＯＭに格納される処理用プログラムは、図示されない持ち運び可能な記憶媒体に記録可能である。記憶媒体とは、例えば、ＣＤ（Ｃｏｎｐａｃｔ  Ｄｉｓｋ）や、フラッシュメモリ等を備えるＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）メモリである。処理用プログラムは、記憶媒体を入力部５の図示されないＣＤドライブやＵＳＢポート等の読み込み装置を介してＲＯＭへ導入されても良いし、通信部５を介して外部のサーバ等からＲＯＭへ導入されても良い。本実施形態の論理シミュレータは、このようなハードウェア構成により実現される。
【００３３】
次に、本実施形態の論理シミュレータにおける機能ブロック構成の説明を行う。図７は、本実施形態における論理シミュレータの構成を示す機能ブロック図である。図７に示す機能ブロックは、前述したハードウェア構成において、処理部１が処理用プログラムを実行することにより実現される。本実施形態の論理シミュレータは、データ入力部１０と、シミュレーション処理部２０と、データ出力部３０とを備える。また、シミュレーション処理部２０は、シミュレーション実行部２１と、不定値検出部２２と、コーン抽出部２３と、バックトレース部２４と、ノード判定部２５と、書き換え実行部２６とを備える。
【００３４】
データ入力部１０は、論理シミュレーションの検証対象となる論理回路と、当該論理回路へ入力する信号パターンとを入力する。シミュレーション処理部２０のシミュレーション実行部２１は、論理シミュレーションを実行する。不定値検出部２２は、シミュレーション実行部２１により実行された論理シミュレーションにおいて、不定値の発生したノードが存在するか否かを判定する。ここで、ノードとは、論理回路における論理素子である。不定値は、論理回路に含まれる各論理素子（ノード）で検出される。コーン抽出部２３は、不定値検出部２２において、不定値が検出されると、不定の検出されたノード（以下、不定値検出ノード）の論理値を決定するロジックコーンを抽出する。バックトレース部２４は、コーン抽出部２３により抽出されたロジックコーンに属するノードに対してバックトレースを実行して、不定値検出ノードの不定値の原因となったノード（以下、発生原因ノード）を特定する。ノード判定部２５は、バックトレース部２４により検出された発生原因ノードと、不定値検出ノードとが、一致するか（同じノードであるか）否かを判定する。書き換え実行部２６は、ノード判定部２５により、発生原因ノードと不定値検出ノードとが一致すると判定された場合に、発生原因ノードの論理値を、予め設定された確定値へ書き換える。シミュレーション処理部２０は、このようにして、論理シミュレーションを実行し、論理シミュレーションが完了すると、シミュレーション結果を結果出力部３０へ出力する。結果出力部３０は、シミュレーション処理部２０から入力されたシミュレーション結果を、記憶部１へ格納すると共に、表示部３へ表示を行う。
【００３５】
以上が、本実施形態における論理シミュレータの構成の説明である。なお、不定値検出部２２と、コーン抽出部２３と、バックトレース部２４とをまとめて、発生原因特定部とする。
【００３６】
［動作方法の説明］
次に、上述のような構成による本実施形態の論理シミュレータの動作方法の説明を行う。図８は、本実施形態における論理シミュレータの動作フローである。
【００３７】
（ステップＳ１００）
データ入力部１０は、論理シミュレーションの検証対象となる論理回路のデータと、当該論理回路へ入力する信号データとを入力する。データ入力部１０は、検証対象の論理回路データと信号データとを、これらが予め記憶された記憶部１から読込むことで入力する。または、データ入力部１０は、検証対象の論理回路データと信号データとを、通信部５を介して外部のサーバから、あるいは入力部４の図示されない読み込み装置を介して記憶媒体から入力しても良い。データ入力部１０は、論理回路データと信号データとをシミュレーション処理部２０へ出力する。
【００３８】
（ステップＳ１１０）
シミュレーション処理部２０のシミュレーション実行部２１は、論理シミュレーションをステップ実行する。シミュレーション処理部２０は、検証対象の論理回路データと信号データとを入力する。シミュレーション実行部２１は、検証対象の論理回路データに対して信号データを入力して、論理シミュレーションをステップ実行する。ここで、ステップ実行とは、１サイクル分の論理シミュレーションを実行することを意味する。
【００３９】
（ステップＳ１２０）
不定値検出部２２は、シミュレーション実行２１のステップ実行の結果に基づいて、各ノードを確認して、不定値が発生したか否かを判定する。不定値が発生した場合、ステップＳ１３０へ進む。一方、不定値が発生していない場合、論理シミュレーションの終了判定を行うために、ステップＳ１９０へ進む。
【００４０】
（ステップＳ１３０）
シミュレーション処理部２０は、不定値検出部２２により論理シミュレーションのステップ実行の結果において不定値が発生していると判定されると、ノードの論理値を書き換える処理を実行するか否かを決定する。ユーザは、予め論理シミュレーションにおいて不定値が発生した場合に、本発明によって、ノードの論理値書き換え処理を実行するか否かを設定しておく。このような設定はユーザにより入力部４から設定が行われ、処理部２は、記憶部１に設定データを記憶させておく。シミュレーション処理部２０は、記憶部１から設定データを読込んで、論理値の書き換えを行うか否かを決定する。なお、論理値の書き換えを行うか否かの決定は、この方法に限定しない。不定値が発生したときに表示部３へその旨を表示して、ユーザが入力部４へ論理値の書き換えを行うか否かを入力する方法としても良い。論理値の書き換えを行うと決定した場合、一連の書き換え処理を実行するために、ステップＳ１４０へ進む。一方、論理値の書き換えを行わないと決定した場合、論理シミュレーションの終了判定を行うために、ステップＳ１９０へ進む。
【００４１】
（ステップＳ１４０）
コーン抽出部２３は、シミュレーション処理部２０によりノードの論理値の書き換え処理を実行すると決定されると、不定値の検出されたノード（以下、不定値検出ノード）の論理を決定するべきロジックコーンに属する全てのノードを抽出する。
【００４２】
（ステップＳ１５０）
バックトレース部２４は、コーン抽出部２３の抽出したロジックコーンに属する全てのノードに対して、バックトレースを実行して、不定値検出ノードの不定値の原因となったノード（以下、発生原因ノード）を特定する。
【００４３】
（ステップＳ１６０）
ノード判定部２５は、バックトレース部２４により特定された発生原因ノードと、不定値検出ノードとが一致する（同じノードであるか）否かを判定する。発生原因ノードと不定値検出ノードとが一致することは、不定値発生ノードの不定値の発生原因が自ノードにあることを意味する。つまり、不定値発生ノードに自己ループが存在することと同等である。原因ノードと不定値検出ノードとが一致する場合には、不定値（Ｘ）の書き換えを行うために、ステップＳ１７０へ進む。一方、原因ノードと不定値検出ノードとが一致しない場合には、不定値（Ｘ）の発生原因は別にあるため、論理シミュレーションの終了判定を行うために、ステップＳ１９０へ進む。
【００４４】
（ステップＳ１７０）
書き換え実行部２６は、発生原因ノードと不定値検出ノードとが一致した場合、発生原因ノードの論理値を不定値から「０」または「１」の固定値へ書き換える。ユーザは、予め、発生原因ノードと不定値検出ノードとが一致した場合に、不定値を「０」または「１」のいずれに書き換えるかを設定しておく。このような設定はユーザにより入力部４から設定が行われ、処理部２は、記憶部１に書き換えデータを記憶させておく。書き換え実行部２６は、記憶部１から書き換えデータを読込んで、書き換えデータに基づいて発生原因ノードの論理値の書き換えを行う。なお、書き換え実行部２６が、不定値を「０」または「１」のいずれに書き換えるかは、例えば、発生原因ノードへ入力されたパルスのパルス幅が非常に短く、論理素子のスレッシュホールド電圧を超えないような場合であれば「０」へ書き換えを行い、一方、論理素子のスレッシュホールド電圧を超えるような場合には「１」へ書き換えを行うというような条件設定がなされる。なお、書き換え実行部２６は、予め、ユーザにより上述のように設定された条件に基づいて判定を行って、発生原因ノードの論理値を「０」と「１」とのいずれに書き換えるかを決定しても良い。あるいは、書き換えデータは、発生原因ノードと不定値検出ノードとが一致した場合に、その旨を表示部３へ表示して、ユーザが入力部４から入力を行う方法としても良い。
【００４５】
（ステップＳ１８０）
書き換え実行部２６は、発生原因ノードの論理値を、不定値から固定値へ書き換えると、書き換えを行った時刻と、書き換え後の確定値の値と、書き換えたインスタンス名とを含めたメッセージを出力する。表示部３は、書き換え実行部２６から出力されたメッセージを表示する。これによって、ユーザは、どのような処理が行われたのかを確認することができる。なお、メッセージに含まれる内容は、これらの内容に限定せず、より多くの情報を含んでも良い。また、書き換え実行部２６は、メッセージに含まれる内容を、表示部３へ表示させると共に、記憶部１へ記憶させても良い。
【００４６】
（ステップＳ１９０）
シミュレーション実行部２１は、論理シミュレーションの終了判定を行う。シミュレーション実行部２１は、論理回路へ入力される入力信号パターンの全ての変化が完了すると論理シミュレーションの終了と判定する。シミュレーション処理部２０は、シミュレーション実行部２１により論理シミュレーションが終了したと判定した場合、論理シミュレーション結果を結果出力部３０へ出力する。この場合、ステップＳ２００へ進む。一方、論理シミュレーションが終了していないと判定された場合、再度、論理シミュレーションのステップ実行を行うため、ステップＳ１１０へ戻る。
【００４７】
（ステップＳ２００）
結果出力部３０は、論理シミュレーションが終了した旨のメッセージと、シミュレーション結果とを表示部３へ出力する。これによって、論理シミュレーションは、終了となる。
【００４８】
以上が、本実施形態における論理シミュレータの動作方法である。本実施形態の論理シミュレータでは、ノード判定部２５は、発生原因ノードと不定値検出ノードとが一致するかを判定する。発生原因ノードと不定値検出ノードとが一致することで、不定値の発生原因が自ノードであることを特定できる。そのため、発生原因ノードである自ノードの論理値を不定値から確定値に書き換えることで、不定値検出ノード以降のノードに不定値が伝搬することを防ぐことができ、論理シミュレーションを継続することができる。
【００４９】
また、ステップＳ１３０において、不定値の書き換え処理を実行するか否かを決定しているが、このような決定を行わずに、常に書き換え処理を実行する動作方法としても良い。
【００５０】
（実施例）
以下に、本実施形態の論理シミュレータを実際の論理回路に適用した実施例を説明する。図９は、本実施形態における論理シミュレーションの検査対象となる論理回路の構成図の一例である。図１０は、本実施形態における図９に示された論理回路におけるタイミングチャートの一例である。
【００５１】
図９の論理回路は、図４で説明を行った論理回路と同様である。すなわち、図９の論理回路は、ＦＦ１とＦＦ２とを備える。ＦＦ１のクロック入力Ｃは、図示されない外部回路からクロックＣＬを入力している。ＦＦ１の出力Ｑは、Ｑ１Ｑとして外部へ出力される。ＦＦ１の反転出力ＱＢは、分岐されてＦＦ１のデータ入力ＤとＦＦ２のクロック入力Ｃとにそれぞれ接続されている。ＦＦ２の出力Ｑは、Ｑ２Ｑとして外部へ出力される。ＦＦ２の反転出力ＱＢは、分岐されてＦＦ２のデータ入力Ｄと図示されない外部回路と接続される。なお、以下の説明において、図４の論理回路の動作と同様の部分は、説明を簡略して行う場合がある。
【００５２】
このように構成された論理回路は、図１０に示すタイミングチャートに示すように動作する。図１０において、ＣＬ、ＦＦ１−Ｑ、ＦＦ１−ＱＢ、ＦＦ２−Ｑ、ＦＦ２−ＱＢは、それぞれ、クロック入力ＣＬ、ＦＦ１のＱ出力、ＦＦ１のＱＢ出力、ＦＦ２のＱ出力、ＦＦ２のＱＢ出力を示している。
【００５３】
さて、図９のデータ入力部１０へ論理回路データと信号データが入力され（ステップＳ１００）、シミュレーション処理部２０のシミュレーション実行部２１が、論理シミュレーションのステップ実行を行う（ステップＳ１１０）。論理シミュレーションにおいて図１０の時刻Ｔ１では、ＦＦ１のクロック入力へ、論理を確定することが不可能なパルス幅を有するパルスが入力される。ＦＦ１は、ＦＦ１の出力ＱＢがＦＦ１のデータ入力への帰還入力となっているため、ＦＦ１の出力Ｑと出力ＱＢは、不定値を出力する。同様に出力Ｑ１Ｑも不定値となる。また、ＦＦ２は、ＦＦ１の出力ＱＢをＦＦ２のクロック入力としている。そのため、ＦＦ２のクロック入力は不定値を入力し、ＦＦ２の出力ＱＢは、ＦＦ２のデータ入力への帰還入力となっているため、ＦＦ１と同様に、ＦＦ２の出力Ｑと出力ＱＢは、不定値を出力する。同様に、出力Ｑ２Ｑも不定値となる。
【００５４】
不定値検出部２２が、ステップ実行の結果から不定値を検出する（ステップＳ１２０）と、シミュレーション処理部２０は、予め記憶部１へ設定された設定データに基づいて、不定値の書き換えを行うか否かを決定する（ステップＳ１３０）。なお、不定値の書き換えを行うか否かは、実施される論理シミュレーションの目的に合わせて選択される。例えば、不定値が出た場合にも、不定値検出ノードの後段の回路の動作確認を行う場合には、不定値の書き換えを行うように設定される。一方、新たに信号パターンを追加したときに、不定値の存在を確認する場合などで、不定値を出力しない設定を行った場合には、不定値の書き換えを行わないように設定される。これらの設定基準に限定されないことは当然であり、このほかの基準によって設定されてもよい。なお、本説明では、不定値の書き換えを行うように設定されていることとする。
【００５５】
コーン抽出部２３は、不定値検出ノードのロジックコーンを抽出する（ステップＳ１４０）。ＦＦ１のデータ入力Ｄは、ＦＦ１の出力ＱＢと接続されている。そのため、コーン抽出部２３は、ロジックコーンとしてＦＦ１を抽出する。同様に、ＦＦ２のデータ入力は、ＦＦ２の出力ＱＢである。そのため、コーン抽出部２３は、ロジックコーンとしてＦＦ２を抽出する。
【００５６】
バックトレース部２４は、不定値の発生原因ノードをバックトレースにより検出する（ステップＳ１５０）。ＦＦ１の出力Ｑと出力ＱＢとが不定値（Ｘ）となるので、ＦＦ１の入力をバックトレースする。ＦＦ１の入力は、クロック入力Ｃとデータ入力Ｄであり、データ入力ＤにＦＦ１の出力ＱＢが接続されている。ＦＦ１の出力ＱＢは不定値となっているため、ＦＦ１の出力ＱＢが発生原因となり、ＦＦ１が発生原因ノードとなる。
【００５７】
同様に、ＦＦ２の出力Ｑと出力ＱＢとが不定値となるので、ＦＦ２の入力をバックトレースする。ＦＦ２の入力は、クロック入力Ｃとデータ入力Ｄで、データ入力ＤにＦＦ２の出力ＱＢが接続されている。ＦＦ２の出力ＱＢは不定値となっているため、ＦＦ２の出力ＱＢが発生原因となり、ＦＦ２が発生原因ノードとなる。
【００５８】
ノード判定部２５は、不定値検出ノードと発生原因ノードとが一致しているかを判定する（ステップＳ１６０）。ＦＦ１において、発生原因ノードは、ＦＦ１であり、不定値検出ノードもＦＦ１である。そのため、ノード判定部２５は、不定値検出ノードと発生原因ノードとが一致していると判定する。同様に、ＦＦ２において、発生原因ノードは、ＦＦ２であり、不定値検出ノードもＦＦ２である。そのため、ノード判定部２５は、不定値検出ノードと発生原因ノードとが一致していると判定する。
【００５９】
書き換え実行部２６は、発生原因ノードであるＦＦ１及びＦＦ２の出力する不定値を確定値へ書き換える（ステップＳ１７０）。書き換え実行部２６は、時刻Ｔ２において、発生原因ノードであるＦＦ１の出力する不定値を確定値へ書き換える。すなわち、ＦＦ１の出力ＱＢの不定値を確定値「１」へ書きかえ、同時にＦＦ１の出力Ｑの不定値を確定値「０」へ書き換える。同様に、書き換え実行部２６は、時刻Ｔ２において、発生原因ノードであるＦＦ２の出力する不定値を確定値へ書きかえる。すなわち、ＦＦ２の出力ＱＢの不定値を確定値「１」へ書き換え、同時にＦＦ２の出力Ｑの不定値を確定値「０」へ書き換える。これによって、この後、ＦＦ１の出力ＱＢ及び出力Ｑ、及びＦＦ２の出力ＱＢ及び出力Ｑは、確定値を出力することとなり、不定値を出力することがなくなるため、後段の回路へ不定値が伝搬されることが無くなる。
【００６０】
書き換え実行部２６は、不定値の書き換えを行った時刻Ｔ２と、ＦＦ１の出力ＱＢとＦＦ２の出力ＱＢを確定値「１」へ、ＦＦ１の出力ＱとＦＦ２の出力Ｑを確定値「０」へ書き換えたことと、インスタンス名とを含めたメッセージを出力する。表示部３は、書き換え実行部２６から出力されたメッセージを表示する。また、書き換え実行部２６は、メッセージに含まれる内容を、記憶部１へ記憶させても良い。これによって、書き換えが行われた内容を、ユーザが確認でき、また、論理シミュレーション結果として残すことができる。
【００６１】
この後、シミュレーション実行部２１によりシミュレーションの終了判定が行われ（ステップＳ１９０）、論理シミュレーションが終了すると、シミュレーションが終了した旨のメッセージと、シミュレーション結果とを、記憶部１へ記憶する共に、表示部３へ表示する。これによって、論理シミュレーションが終了となる。
【００６２】
以上が、本実施形態における論理シミュレータの動作方法である。
【００６３】
ここまで、本実施形態の論理シミュレータの説明を行ってきた。本実施形態の論理シミュレータによれば、シミュレーション中に不定値が発生した場合に、不定値の発生した不定値検出ノードの論理を決定するロジックコーンに属する各ノードに対して、バックトレースを行って不定値の発生原因ノードを特定し、不定値検出ノードと発生原因ノードとが一致するか否かを判定する。論理シミュレータは、不定値検出ノードと発生原因ノードとが一致する場合に、発生原因ノードの出力する不定値を確定値へ書き換える。これによって、検証対象の論理回路に自己ループを含む回路が含まれていたとしても、発生原因ノードの不定値を確定値へ書き換えることが可能となり、不定値検出ノード以降の回路へ不定値を伝搬することなく、論理シミュレーションを継続することができる。
【００６４】
以上、実施の形態を参照して本願発明を説明したが、本願発明は上記実施の形態に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解できる様々な変更を行うことが可能である。
【符号の説明】
【００６５】
１  記憶部
２  処理部
３  表示部
４  入力部
５  通信部
１０  データ入力部
２０  シミュレーション処理部
２１  シミュレーション実行部
２２  不定値検出部
２３  コーン抽出部
２４  バックトレース部
２５  ノード判定部
２６  書き換え実行部
３０  結果出力部
１００  不定値検出ノード
１１０  マルチプレクサ
１３０  コーン部
【図１】
2011022672.tif 000003
【図２】
2011022672.tif 000004
【図３Ａ】
2011022672.tif 000005
【図３Ｂ】
2011022672.tif 000006
【図３Ｃ】
2011022672.tif 000007
【図３Ｄ】
2011022672.tif 000008
【図４】
2011022672.tif 000009
【図５】
2011022672.tif 000010
【図６】
2011022672.tif 000011
【図７】
2011022672.tif 000012
【図８】
2011022672.tif 000013
【図９】
2011022672.tif 000014
【図１０】
2011022672.tif 000015