(57)【要約】【課題】論理検証において不定値が発生したときに、その不定値が意図せず消去されるのを防止することが可能な論理検証装置を提供すること。【解決手段】シミュレーション部６３は、ハードウェア記述言語による論理機能の記述に基づいてシミュレーションを行なう。第２記号置換部６４は、シミュレーション部６３によるシミュレーションにおいて発生した不定値を記号に置換する。そして、シミュレーション部６３は、第２記号置換部６４によって置換された記号が処理中の素子に到達したときに、記号式を生成して後段の素子に伝播する。したがって、シミュレーション中に発生した不定値が意図せず消去されてしまうのを防止することができる。【選択図】図５
2010134598.tif 000002
【特許請求の範囲】
【請求項１】
ハードウェア記述言語によって記述された論理機能の検証を行なう論理検証装置であって、
前記論理機能の記述に基づいてシミュレーションを行なうシミュレーション手段と、
前記シミュレーション手段によるシミュレーションにおいて発生した不定値を記号に置換する第１の置換手段とを含み、
前記シミュレーション手段は、前記第１の置換手段によって置換された記号が処理中の素子に到達したときに、記号式を生成して後段の素子に伝播する、論理検証装置。
【請求項２】
前記論理検証装置はさらに、前記論理機能の記述からレジスタを抽出し、その初期値として記号を付加する記号付加手段を含み、
前記シミュレーション手段は、前記第１の置換手段によって置換された記号または前記記号付加手段によって付加された記号が処理中の素子に到達したときに、記号式を生成して後段の素子に伝播する、請求項１記載の論理検証装置。
【請求項３】
前記論理検証装置はさらに、前記論理機能の記述から不定値の代入部を抽出し、該不定値の代入部を記号の代入部に置換する第２の置換手段を含み、
前記シミュレーション手段は、前記第１の置換手段によって置換された記号、前記記号付加手段によって付加された記号または前記第２の置換手段によって置換された記号が処理中の素子に到達したときに、記号式を生成して後段の素子に伝播する、請求項２記載の論理検証装置。
【請求項４】
前記論理検証装置はさらに、指定された観測ポイントに記号式が到達したときに、当該記号式が期待式と一致するか否かを判定する判定手段を含む、請求項１〜３のいずれかに記載の論理検証装置。
【請求項５】
前記論理検証装置はさらに、前記判定手段によって期待式と一致しないと判定された記号式を構成する記号に基づいて不定値の発生源を特定する特定手段を含む、請求項４記載の論理検証装置。
【請求項６】
ハードウェア記述言語によって記述された論理機能の検証を行なう論理検証装置であって、
前記論理機能の記述に基づいてシミュレーションを行なうシミュレーション手段と、
不定値をマスクする信号を抽出する抽出手段と、
前記シミュレーション手段によるシミュレーション結果に不定値が含まれる場合、当該不定値が前記抽出手段によって抽出された不定値をマスクする信号によって正しくマスクされているか否かを判定する判定手段とを含む、論理検証装置。
【請求項７】
前記判定手段は、前記不定値と前記不定値をマスクする信号とが入力される素子において、前記不定値が入力される側の入力端子を０および１にして出力が同一値になるか否かによって、前記不定値が正しくマスクされているか否かを判定する、請求項６記載の論理検証装置。
【請求項８】
前記論理検証装置はさらに、前記論理機能の記述からレジスタを抽出し、レジスタとレジスタとの間を区切ることにより組合せ論理単位を認識する認識手段を含み、
前記判定手段は、前記認識手段によって認識された第１の組合せ論理単位において不定値が正しくマスクされていないと判定した場合には、当該不定値が伝播する後段の第２の組合せ論理単位において不定値が正しくマスクされているか否かを判定する、請求項６または７記載の論理検証装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、Verilog HDL(Hardware Description Language）などのハードウェア記述言語で作成された論理機能の検証を行なう技術に関し、特に、不定値が発生したときに、その不定値が意図せず消去されるのを防止でき、その発生源を特定することが可能な論理検証装置に関する。
【背景技術】
【０００２】
近年、半導体集積回路の高機能化、多機能化が進んでおり、大規模論理回路を短期間で設計する必要が生じてきている。また、論理合成ツールが実用レベルに達した、ワークステーション、パーソナル・コンピュータの低価格化、多機能化が進んでいる、などの理由によりＨＤＬが脚光を浴びてきている。
【０００３】
特に、Verilog HDLは、Ｃ言語をベースにした文法体系であり、記述が簡潔である、シミュレーション向けの記述力が充実しているなどの理由から、ＨＤＬの中でも盛んに用いられている。これに関連する技術として、下記の特許文献１に開示された発明がある。
【０００４】
特許文献１に開示された発明は、論理記述言語で記述された設計データとネットリストで記述された設計データとで不定値の取り扱いを同じにすることにより、論理記述言語で記述された設計データの論理検証のみを行い、ネットリストで記述された設計データの検証を不要にすることを目的とする。このプログラムは、論理記述言語で記述された論理回路設計データを入力する入力手順と、論理回路設計データ内の信号が不定値であるか否かをチェックし、不定値である場合にはその信号を不定値として論理回路の後段に伝播するように論理回路設計データを変更する変更手順とをコンピュータに実行させる。
【特許文献１】特開２００３−３１６８４０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
たとえば、Verilog HDLで信号の分岐を記述した場合、分岐ポイントへの入力値が不定値（以下、Ｘとも記載する。）であっても、分岐後の出力値が確定値となってしまう、すなわち、何らかの要因によってＸが消去されてしまう場合がある。そのため、論理検証を行なっても、ユーザが回路内で発生した「意図しない不定値」を見逃してしまう場合がある。
【０００６】
特に、論理検証後に行なわれる論理合成においては不定値が考慮されない、すなわち不定値が「Don’t Care」として扱われてしまい、合成結果においては「０」または「１」のいずれかに確定してしまうことが多い。したがって、ＲＴＬ（Register Transfer Level）シミュレーション時には、不定値が回路の仕様に影響を与えていないことを十分に確認しなければならない。
【０００７】
しかしながら、上述のように回路中でＸが消去されてしまうことがあるため、ユーザが「Don’t Careでない異常な不定値」の発生を見逃してしまい、論理合成によって生成されるネットリストまたはそれ以降で不具合が発見されてしまい、論理検証などをやり直さなければならないといった問題点があった。
【０００８】
また、ＲＴＬ設計においては、回路仕様に影響しない分岐、たとえば選択されない分岐に対して不定値を割当てることが多い。そして、論理合成においては、不定値を「Don’t Care」として扱い、「０」または「１」を出力する回路のうち面積的に有利な方に割当てることが多い。
【０００９】
本来、「Don’t Care」分岐がＲＴＬシミュレーションにおいて選択されてはならないが、何らかの要因でそれが選択されてしまうこともあり得る。そして、上述のようにVerilog HDLの分岐文でＸが消去されてしまい、ユーザは不定値が発生したことを見逃すことも少なくない。また、ＲＴＬコードによって作成されたＸだけでなく、初期化されていないレジスタなどで不定値が発生する場合もあり、ユーザがその不定値が適切に処理されて消滅したのかなどを確認する必要がある。
【００１０】
このような問題点は、上述の特許文献１に開示された発明を用いたとしても解決することはできない。
【００１１】
本発明は、上記問題点を解決するためになされたものであり、その目的は、論理検証において不定値が発生したときに、その不定値が意図せず消去されるのを防止することが可能な論理検証装置を提供することである。
【課題を解決するための手段】
【００１２】
本発明の一実施例によれば、ハードウェア記述言語によって記述された論理機能の検証を行なう論理検証装置が提供される。シミュレーション部は、論理機能の記述に基づいてシミュレーションを行なう。第２記号置換部は、シミュレーション部によるシミュレーションにおいて発生した不定値を記号に置換する。そして、シミュレーション部は、第２記号置換部によって置換された記号が処理中の素子に到達したときに、記号式を生成して後段の素子に伝播する、
【発明の効果】
【００１３】
シミュレーション部は、第２記号置換部によって置換された記号が処理中の素子に到達したときに、記号式を生成して後段の素子に伝播するので、シミュレーション中に発生した不定値が意図せず消去されてしまうのを防止することができる。
【発明を実施するための最良の形態】
【００１４】
本発明の実施の形態における論理検証装置の説明をする前に、論理検証において不定値が意図せず消去されてしまう場合の例について説明する。
【００１５】
（ｉｆ文で不定値が意図せず消去される場合）
たとえば、以下の記述によって論理機能を規定した場合について考える。
【００１６】
ｉｆ（ｂ）ｃ＝４’ｈ３；
ｅｌｓｅ  ｃ＝４’ｈｃ；
この記述は、ｂ＝１’ｂ１のときにｃ＝４’ｈ３を出力し、それ以外のときにｃ＝４’ｈｃを出力するものである。たとえば、ｂが不定値（ｂ＝１’ｂｘ）の場合、ｂ＝１’ｂ０およびｂ＝１’ｂ１のいずれの場合もあり得るため、出力ｃは４’ｈ３または４’ｈｃのいずれかの値をとることになる。しかしながら、シミュレーション結果においてはｂ＝１’ｂｘの場合にｅｌｓｅ節が選択されてしまうため、確定値ｃ＝４’ｈｃが以降に伝播されることになる。この場合、不定値が消去されたことになる。
【００１７】
（ｃａｓｅ文で不定値が意図せず消去される場合）
ｃａｓｅｚ（ｄ）
３’ｂ０００：ｅ＝２’ｂ００；
３’ｂ００１：ｅ＝２’ｂ０１；
３’ｂ０１？：ｅ＝２’ｂ１０；
３’ｂ１？？：ｅ＝２’ｂ１１；
ｅｎｄｃａｓｅ
この記述は、ｄ＝３’ｂ０００のときにｅ＝２’ｂ００を出力し、ｄ＝３’ｂ００１のときにｅ＝２’ｂ０１を出力し、ｄ＝３’ｂ０１？のときにｅ＝２’１０を出力し、ｄ＝３’ｂ１？？のときにｅ＝２’ｂ１１を出力するものである。たとえば、ｄの最下位ビットが不定値（ｄ＝３’ｂ００ｘ）である場合、ｄ＝３’ｂ０００およびｄ＝３’００１のいずれの場合もあり得るため、出力ｅは２’ｂ００または２’ｂ０１のいずれかの値をとることになる。しかしながら、シミュレーション結果においては該当する分岐がないため、ｅへの代入は行なわれない。すなわち、ｅの前の値が保持されるため、前の値が確定値の場合には不定値が消去されたことになる。
【００１８】
図１は、論理検証において不定値が意図せず消去される場合の一例を示す図である。図１（ａ）は、ｉｆ文の記述を含んだ論理回路の一例であり、本来の正しい回路を示している。なお、この論理回路は、論理合成する前のものであるが、理解を容易にするためにゲート回路やフリップフロップ（ＦＦ）などの記述を含んだものとしている。
【００１９】
この論理回路は、組合わせ回路１１と、ＦＦ１（１２）と、ＡＮＤゲート１３と、ブロック１（１４）とを含んでいる。ＡＮＤゲート１３は、電源投入直後にＦＦ１（１２）から出力される不定値（１’ｂｘ）をリセット信号（１’ｂ１）によってマスクしている。このとき、ＡＮＤゲート１３からａ＝１’ｂ０が出力される。
【００２０】
ブロック１（１４）は、ａ＝１’ｂ１のときにｂ＝２’ｂ００を出力し、ａ＝１’ｂ０のときにｂ＝２’ｂ０１を出力する。したがって、ブロック１（１４）からｂ＝２’ｂ０１が出力され、ＦＦ１（１２）から出力される不定値が正しくマスクされている。
【００２１】
図１（ｂ）は、ｉｆ文の記述を含んだ論理回路の一例であり、バグを含んだ回路を示している。図１（ｂ）に示す論理回路は、図１（ａ）に示す論理回路と比較して、ＦＦ１（１２）からの不定値をマスクするＡＮＤゲート１３が削除されたものとなっている。したがって、ＦＦ１（１２）から出力される不定値（１’ｂｘ）がそのままブロック１（１４）に入力される。
【００２２】
ブロック１（１４）は、ＦＦ１（１２）からの不定値（１’ｂｘ）によってｅｌｓｅ節を選択し、ｂ＝２’ｂ０１を出力する。したがって、ＦＦ１（１２）からの不定値が正しくマスクされている場合と同じ値を出力することになる。これにより、ユーザがｉｆ分岐でｘが消去されたことを見逃してしまう。
【００２３】
図２は、論理検証において不定値が意図せず消去される場合の他の一例を示す図である。図２（ａ）は、ｉｆ文およびｃａｓｅ文の記述を含んだ論理回路の一例であり、本来の正しい回路を示している。ブロック２（２１）は、ｏｎｅ−ｈｏｔ信号出力ブロックであり、ａ＝２’ｂ０１またはａ＝２’ｂ１０を出力する。
【００２４】
ブロック３（２２）は、ａ＝２’ｂ０１のときにｂ＝１’ｂ１を出力し、ａ＝２’ｂ１０のときにｂ＝１’ｂ０を出力し、デフォルトとしてｂ＝１’ｂｘを出力する。また、ブロック４（２３）は、ｂ＝１’ｂ１のときにｃ＝４’ｈ３を出力し、ｂ＝１’ｂ０のときにｃ＝４’ｈｃを出力する。
【００２５】
したがって、ブロック２（２１）から正しくａ＝２’ｂ０１またはａ＝２’ｂ１０が出力される場合には、ブロック４（２３）からｃ＝４’ｈ３またはｃ＝４’ｈｃが出力されることになる。
【００２６】
図２（ｂ）は、ｉｆ文およびｃａｓｅ文の記述を含んだ論理回路の一例であり、バグを含んだ回路を示している。図２（ｂ）に示すブロック２（２１）は、バグによってｏｎｅ−ｈｏｔではないａ＝２’ｂ１１を出力する。このとき、ブロック３（２２）から不定値（ｂ＝１’ｂｘ）が出力される。しかしながら、ブロック４（２３）は、ｃ＝４’ｈｃを出力するため、ブロック２（２１）からｏｎｅ−ｈｏｔ信号２’ｂ１０が出力された場合と同じ結果が得られてしまう。これにより、ユーザがｉｆ分岐でｘが消去されたことを見逃してしまう。
【００２７】
図３は、論理検証において不定値が意図せず消去される場合のさらに他の一例を示す図である。図３（ａ）は、ｃａｓｅ文の記述を含んだ論理回路の一例であり、本来の正しい回路を示している。ブロック５（３１）は、ｓｅｌ［２：０］にｏｎｅ−ｈｏｔ（３’ｂ００１，３’ｂ０１０，３’ｂ１００）またはすべてのビットが“０”（３’ｂ０００）を出力する論理機能である。
【００２８】
ブロック６（３２）は、ｃａｓｅ文で記述された論理機能であり、ｓｅｌ＝３’ｂ００１のときにＯ＝Ｉ１を出力し、ｓｅｌ＝３’０１０のときにＯ＝Ｉ２を出力し、ｓｅｌ＝３’ｂ１００のときにＯ＝Ｉ３を出力する。また、ブロック６（３２）は、デフォルトとしてＯ＝Ｉ０を出力する。
【００２９】
たとえば、ブロック５（３１）からｓｅｌ＝３’ｂ０００が出力されると、ブロック６（３２）からデフォルトであるＯ＝Ｉ０が出力される。
【００３０】
図３（ｂ）は、ｃａｓｅ文の記述を含んだ論理回路の一例であり、バグを含んだ回路を示している。図３（ｂ）に示すブロック５（３１）は、バグによってｓｅｌ＝３’ｂ００ｘを出力する。このとき、ブロック６（３２）は、デフォルトのＯ＝Ｉ０を出力するため、ｓｅｌ＝３’ｂ０００と同じ結果が出力されることになる。これにより、ユーザがｃａｓｅ分岐でｘが消去されたことを見逃してしまう。
【００３１】
しかしながら、図３（ｂ）に示す論理機能を論理合成して回路にマッピングした場合、ブロック５（３１）がｓｅｌ＝３’ｂ００１を出力する回路に合成される可能性がある。この場合、ブロック６（３２）は、Ｏ＝Ｉ１を出力することになり、誤動作（期待する動作とは異なる動作）の原因となる。
【００３２】
（第１の実施の形態）
図４は、本発明の第１の実施の形態における論理検証装置のハードウェア構成の一例を示すブロック図である。この論理検証装置は、コンピュータ本体４１、ディスプレイ装置４２、ＦＤ（Flexible Disk）４４が装着されるＦＤドライブ４３、キーボード４５、マウス４６、ＣＤ−ＲＯＭ（Compact Disc-Read Only Memory）４８が装着されるＣＤ−ＲＯＭ装置４７、およびネットワーク通信装置４９を含む。論理検証プログラムは、ＦＤ４４またはＣＤ−ＲＯＭ４８等の記録媒体によって供給される。
【００３３】
論理検証プログラムがコンピュータ本体４１によって実行されることによって、論理検証が行なわれる。また、論理検証プログラムは他のコンピュータより通信回線を経由し、コンピュータ本体４１に供給されてもよい。
【００３４】
図４に示すコンピュータ本体４１は、ＣＰＵ（Central Processing Unit）５０、ＲＯＭ（Read Only Memory）５１、ＲＡＭ（Random Access Memory）５２およびハードディスク５３を含む。ＣＰＵ５０は、ディスプレイ装置４２、ＦＤドライブ４３、キーボード４５、マウス４６、ＣＤ−ＲＯＭ装置４７、ネットワーク通信装置４９、ＲＯＭ５１、ＲＡＭ５２またはハードディスク５３との間でデータを入出力しながら処理を行なう。ＦＤ４４またはＣＤ−ＲＯＭ４８に記録された論理検証プログラムは、ＣＰＵ５０によりＦＤドライブ４３またはＣＤ−ＲＯＭ装置４７を介してハードディスク５３に格納される。ＣＰＵ５０は、ハードディスク５３から適宜論理検証プログラムをＲＡＭ５２にロードして実行することにより、論理検証を行なう。
【００３５】
図５は、本発明の第１の実施の形態における論理検証装置の機能的構成を示すブロック図である。この論理検証装置は、記号付加部６１と、第１記号置換部６２と、シミュレーション部６３と、第２記号置換部６４と、真偽判定部６５と、不具合原因探索部６６とを含む。
【００３６】
記号付加部６１は、ＲＴＬコードが入力されると、ＲＴＬコードからレジスタを抽出し、その初期値として記号を割当てる。また、第１記号置換部６２は、ＲＴＬコードからＸ代入部を抽出し、記号の代入に置換する。これらの記号は、「０」および「１」の両方を評価するシンボルに置換され、ユニークな記号、たとえばｓｙｍｂｏｌ１，ｓｙｍｂｏｌ２，...などを割当てることにより、後述のように不具合の発生源を特定することができるようになる。
【００３７】
シミュレーション部６３は、論理値０，１，ｘまたはｚ（ハイインピーダンス）が処理中の素子に到達した場合、従来の論理シミュレーションと同様の処理を行なう。また、シミュレーション部６３は、記号、記号式が処理中の素子に到着した場合、論理演算を実施して記号式として以降の素子に伝播する。
【００３８】
第２記号置換部６４は、シミュレーション部６３によるシミュレーション結果として発生した不定値を記号に置換する。たとえば、ドライバの出力が衝突する場合や、ｗｉｒｅｄ−ＯＲでバスがドライブされない場合などにおいて、この不定状態が発生する。第２記号置換部６４は、記号付加部６１や第１記号置換部６２と同様に、不定値を記号に置換するときにユニークな記号を割当てる。
【００３９】
真偽判定部６５は、観測ポイントに到達した記号式が期待式と一致しているか否かを判定する。なお、この観測ポイントおよび期待式は、ユーザによって指定される。
【００４０】
不具合原因探索部６６は、真偽判定部６５によって期待式と一致しないと判定された記号式を構成する記号を抽出し、その発生源を特定する。上述のように、記号としてユニークな記号が付加されるため、発生源を容易に特定することができる。
【００４１】
図６は、本発明の第１の実施の形態における論理検証装置の処理手順を説明するためのフローチャートである。また、図７は、図１（ｂ）に示すバグを含んだ回路においてどのように不具合が検証されるかを説明するための図である。図７を適宜参照して、本実施の形態における論理検証装置の処理手順を説明する。
【００４２】
まず、記号付加部６１は、ＲＴＬコードからレジスタを抽出し、その初期値として記号を割当てる（Ｓ１１）。図７に示す回路においては、ＦＦ１（１２）が抽出され、ＦＦ１（１２）の初期値として１’ｂｘが記号に置換される。
【００４３】
次に、第１記号置換部６２は、ＲＴＬコードからＸ代入部を抽出し、記号の代入に置換する（Ｓ１２）。この処理については、図９を用いて後述する。
【００４４】
次に、シミュレーション部６３は、論理値、記号または記号式が処理中の素子に到達すると、その論理演算を行なう（Ｓ１３）。図７に示す回路においては、たとえば、ＦＦ１（１２）から出力される記号がブロック１（１４）に到達したときに、シミュレーション部６３は「０」および「１」の両方の場合を評価し、出力ｂには２’ｂ００および２’ｂ０１をとり得る記号式を割当てる。このとき、上位ビットはいずれも「０」であるので、下位ビットのみが記号式として扱われる。たとえば、Verilogの連接式のような値｛１’ｂ０，記号式｝が割当てられる。
【００４５】
次に、第２記号置換部６４は、シミュレーションの結果として発生したＸを記号に置換する（Ｓ１４）。この処理については、図８を用いて後述する。
【００４６】
次に、真偽判定部６５は、ユーザによって指定された観測ポイントに記号式が到達したか否かを判定する（Ｓ１５）。観測ポイントに記号式が到達していなければ（Ｓ１５，Ｎｏ）、ステップＳ１３に戻って以降の処理を繰り返す。
【００４７】
また、観測ポイントに記号式が到達していれば（Ｓ１５，Ｙｅｓ）、真偽判定部６５は、観測ポイントに到達した記号式が、ユーザによって指定された期待式と一致しているか否かを判定する（Ｓ１６）。記号式が期待式と一致していれば（Ｓ１６，Ｙｅｓ）、処理を終了する。
【００４８】
また、記号式が期待式と一致していなければ（Ｓ１６，Ｎｏ）、不具合原因探索部６６は、期待式と一致しなかった記号式を構成する記号を抽出し、その発生源を特定する（Ｓ１７）。図７に示す回路において、観測ポイントとしてブロック１（１４）の出力が選択されていた場合、ブロック１（１４）からは記号式が伝播してくるため、ユーザによって指定された期待式と一致しない。このとき、不具合原因探索部６６は、ブロック１（１４）から出力される記号式を構成する記号を抽出することにより、不定値の発生源がＦＦ１（１４）であることを特定する。
【００４９】
なお、素子に記号が入力され、その素子の出力が記号式となる場合、すなわち、１個以上の記号で構成される式であり、最適化しても定数値とはならない場合には、式を新たな１つの記号に置換しなおして以降に伝播させるようにしてもよい。これによって、式の複雑化を抑えることができ、シミュレーション時における使用メモリ量の増大を抑えることが可能となる。
【００５０】
図８は、図２（ｂ）に示すバグを含んだ回路においてどのように不具合が検証されるかを説明するための図である。図６に示すフローチャートのステップＳ１３において、シミュレーション部６３は、ブロック３（２２）の論理シミュレーションを行なうことにより、ｂ＝１’ｂｘを出力する。そして、ステップＳ１４において、第２記号置換部６４は、ブロック３（２２）から出力される不定値を記号に置換する。
【００５１】
そして、ブロック３（２２）から出力される記号がブロック４（２３）に到達したときに、シミュレーション部６３は「０」および「１」の両方の場合を評価し、出力ｃには４’ｈ３および４’ｈｃをとり得る記号式が割当てられる。
【００５２】
観測ポイントとしてブロック４（２３）の出力が選択されていた場合、ブロック４（２３）からは記号式が伝播してくるため、ユーザによって指定された期待式と一致しない。このとき、不具合原因探索部６６は、ブロック４（２３）から出力される記号式を構成する記号を抽出することにより、不定値の発生源がブロック３（２２）であることを特定する。
【００５３】
図９は、図３（ｂ）に示すバグを含んだ回路においてどのように不具合が検証されるかを説明するための図である。図６に示すフローチャートのステップＳ１２において、第１記号置換部６２は、Ｘ代入部を抽出することにより、ブロック５（３１）からの出力ｓｅｌ［２：０］＝３’ｂ００ｘを抽出し、その１ビット目を記号に置換して｛２’ｂ００，記号｝を出力する。
【００５４】
そして、ブロック５（３１）から出力される記号がブロック６（３２）に到達したときに、シミュレーション部６３は、１ビット目が「０」および「１」の両方の場合を評価し、出力ＯにはＩ０およびＩ１のＯＲを表す記号式が割当てられる。
【００５５】
観測ポイントとしてブロック６（３２）の出力が選択されていた場合、ブロック６（３２）からは記号式が伝播してくるため、ユーザによって指定された期待式と一致しない。このとき、不具合原因探索部６６は、ブロック６（３２）から出力される記号式を構成する記号を抽出することにより、不定値の発生源がブロック５（３１）であることを特定する。
【００５６】
以上説明したように、本実施の形態における論理検証装置によれば、不定値が記号に置換され、記号または記号式が処理中の素子に到達したときに、シミュレーション部６３が論理演算を行なって記号式として以降の素子に伝播するようにしたので、シミュレーションの際に不定値が消去されるのを防止でき、ユーザは容易に問題点を把握することが可能となった。
【００５７】
また、観測ポイントに到達した記号式が期待式と一致しない場合に、不具合原因探索部６６が記号式を構成する記号を抽出して、その発生源を特定するようにしたので、ユーザは回路のどこで問題が発生したのかを容易に特定することが可能となった。
【００５８】
（第２の実施の形態）
本発明の第２の実施の形態における論理検証装置のハードウェア構成は、図４に示す第１の実施の形態における論理検証装置のハードウェア構成と同様である。したがって、重複する構成および機能の詳細な説明は繰り返さない。
【００５９】
図１０は、本発明の第２の実施の形態における論理検証装置の機能的構成を示すブロック図である。この論理検証装置は、ＲＴＬシミュレーション部７１と、組合せ論理単位認識部７２と、不定値マスク信号抽出部７３と、不定値確認部７４と、ルート探索部７５と、マスク判定部７６とを含む。
【００６０】
ＲＴＬシミュレーション部７１は、ＲＴＬコードが入力されると、ＲＴＬコードの記述にしたがってシミュレーションを行ない、シミュレーション結果（波形データ）を作成する。このシミュレーションは、ＶＣＳ（登録商標）、ＮＣ−Ｖｅｒｉｌｏｇ（登録商標）などの従来の機能検証が用いられる。
【００６１】
組合せ論理単位認識部７２は、ＲＴＬコードを読み込み、レジスタとレジスタとの間で区切って、組合せ論理単位を認識する。
【００６２】
不定値マスク信号抽出部７３は、不定値をマスクする信号を抽出する。この信号は、ユーザによって指定されたユーザ指定マスク信号、ＲＴＬコードから認識できるセット／リセット信号などである。
【００６３】
不定値確認部７４は、ＲＴＬシミュレーション部７１によって作成された波形データを参照して、不定値の発生を確認する。そして、不定値の発生を確認した場合には、その不定値をマスクする信号値が、不定値が発生した同一サイクル内に存在するか否かを確認する。また、不定値確認部７４は、組合せ論理単位認識部７２によって認識された組合せ論理単位を参照して、その不定値が発生した組合せ論理単位内に、その不定値をマスクする信号が存在するか否かを確認する。
【００６４】
ルート探索部７５は、不定値が発生したノードからレジスタまでのルートを探索し、そのルートが、不定値マスク信号抽出部７３によって抽出された不定値マスク信号と交わるか否かを判定する。この判定は、単に不定値と不定値マスク信号とがつながるルートがあるか否かを判定するだけでもよいが、第１の実施の形態において説明したように、不定値（Ｘ）を記号に置換し、記号を伝播させることにより探索するようにすると、より精度を向上させることができる。
【００６５】
マスク判定部７６は、不定値が組合せ論理単位内で正しくマスクされているか否かを判定する。たとえば、不定値と不定値マスク信号とが交わるポイントのセルにおいて、不定値が伝播してきた入力端子を「０」および「１」にし、そのセルの出力値が同一となるか否かによって判定する。これは、第１の実施の形態において説明した記号による確認と同様である。
【００６６】
図１１は、本発明の第２の実施の形態における論理検証装置の処理手順を説明するためのフローチャートである。また、図１２は、本発明の第２の実施の形態における論理検証装置によって論理検証が行なわれる回路の一例を示す図である。図１２を適宜参照して、本実施の形態における論理検証装置の処理手順を説明する。
【００６７】
まず、ＲＴＬシミュレーション部７１は、シミュレーションを行なって波形データを作成する（Ｓ２１）。
【００６８】
次に、組合せ論理単位認識部７２は、レジスタとレジスタとの間で区切って組合せ論理単位を認識する（Ｓ２２）。図１２に示す回路においては、ＦＦ１（８１）とＦＦ２（８３）との間で区切られ、その間にある回路が組合せ論理単位８２として認識される。また、ＦＦ３（８５）とＦＦ４（８７）との間で区切られ、その間にある回路が組合せ論理単位８６として認識される。なお、図１２において、組合せ論理単位８２は、組合せ回路９１および９２と、ＡＮＤゲート９３とを含む。また、組合せ論理単位８６は、組合せ回路９４と、ＡＮＤゲート９５とを含む。
【００６９】
次に、不定値マスク信号抽出部７３は、ＲＴＬコードの中から不定値をマスクする信号を抽出する（Ｓ２３）。図１２においては、ＡＮＤゲート９３に接続される第１リセット信号（１’ｂ１）と、ＡＮＤゲート９５に接続される第２リセット信号（１’ｂ０）とが抽出される。
【００７０】
次に、不定値確認部７４は、ＲＴＬシミュレーション部７１によって作成された波形データを参照して、不定値の発生を確認する。そして、不定値確認部７４は、その不定値をマスクする信号値が、不定値が発生した同一サイクル内に存在するか否かを確認する（Ｓ２４）。不定値をマスクする信号値が不定値が発生した同一サイクル内に存在しない場合には（Ｓ２４，Ｎｏ）、ステップＳ３０に処理が進む。
【００７１】
また、不定値をマスクする信号値が不定値が発生した同一サイクル内に存在する場合には（Ｓ２４，Ｙｅｓ）、ステップＳ２５に処理が進む。たとえば、図１２においては、組合せ回路９１において不定値が発生している。この不定値が発生したサイクルが、第１リセットの信号値（１’ｂ１）または第２リセットの信号値（１’ｂ０）のサイクル内にあるか否かが判定される。
【００７２】
ステップＳ２５において、不定値確認部７４は、組合せ論理単位認識部７２によって認識された組合せ論理単位を参照して、その不定値が発生した組合せ論理単位内に、その不定値をマスクする信号が存在するか否かを確認する（Ｓ２５）。不定値が発生した組合せ論理単位内に、その不定値をマスクする信号が存在しない場合には（Ｓ２５，Ｎｏ）、ステップＳ３０に処理が進む。
【００７３】
また、不定値が発生した組合せ論理単位内に、その不定値をマスクする信号が存在する場合には（Ｓ２５，Ｙｅｓ）、ステップＳ２６に処理が進む。たとえば、図１２においては、不定値が発生した組合せ回路９１を含む組合せ論理単位８２内に第１リセット信号が存在すると判定される。
【００７４】
ステップＳ２６において、ルート探索部７５は、不定値が発生したノードからレジスタまでのルートを探索する（Ｓ２６）。そして、そのルートが不定値マスク信号抽出部７３によって抽出された不定値マスク信号と交わるかを否かを判定する（Ｓ２７）。そのルートが不定値マスク信号と交わらない場合には（Ｓ２７，Ｎｏ）、ステップＳ３０に処理が進む。
【００７５】
また、そのルートが不定値マスク信号と交わる場合には（Ｓ２７，Ｙｅｓ）、ステップＳ２８に処理が進む。たとえば、図１２においては、組合せ回路９１内の不定値が発生したノードからＦＦ２（８３）までのルートが探索され、ＡＮＤゲート９３において第１リセット信号と交わると判定される。
【００７６】
一方、組合せ回路９１内の不定値が発生したノードからＦＦ３（８５）までのルートも探索されるが、不定値マスク信号と交わらないため、後段の組合せ論理単位８６に不定値を伝播させる。
【００７７】
ステップＳ２８において、マスク判定部７６は、交わるポイントのセルにおいて、不定値が伝播してきた入力端子を「０」および「１」にして、そのセルの出力が同一値となるか否かを判定することにより、不定値が正しくマスクされているか否かを判定する（Ｓ２８）。不定値が正しくマスクされていれば（Ｓ２８，Ｙｅｓ）、処理を終了する。たとえば、図１２においては、ＡＮＤゲート９３の不定値が入力される側の入力端子を「０」および「１」にする。そして、ＡＮＤゲート９３の出力が同一値（１’ｂ０）であれば、不定値が正しくマスクされていると判定される。
【００７８】
また、不定値が正しくマスクされていなければ（Ｓ２８，Ｎｏ）、不定値が出力端子に伝播したか否かが判定される（Ｓ２９）。不定値が出力端子に伝播していれば（Ｓ２９，Ｙｅｓ）、処理を終了する。この場合、ＲＴＬコードに不具合があるため、ユーザはＲＴＬコードの修正などを行なう。
【００７９】
また、不定値が出力端子に伝播していなければ（Ｓ２９，Ｎｏ）、後段の組合せ論理単位に不定値を伝播し（Ｓ３０）、ステップＳ２４に戻って以降の処理を繰り返す。たとえば、図１２においては、組合せ論理単位８２で発生した不定値がマスクされずにＦＦ３（８５）まで伝播されるので、その不定値が後段の組合せ論理単位８６に伝播される。そして、組合せ論理単位８６内で不定値が発生したものとして、ステップＳ２４以降の処理が行なわれる。
【００８０】
以上説明したように、本実施の形態における論理検証装置によれば、ＲＴＬシミュレーションによって不定値が発生した場合に、その不定値が不定値マスク信号と交わるポイントのセルを抽出し、そのセルで不定値が正しくマスクされているか否かを判定する。そして、正しくマスクされていない場合には不定値を後段の組合せ論理単位に伝播するようにしたので、不定値が出力端子まで伝播される場合には、ユーザは容易に問題点を把握することが可能となった。
【００８１】
今回開示された実施の形態は、すべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【図面の簡単な説明】
【００８２】
【図１】論理検証において不定値が意図せず消去される場合の一例を示す図である。
【図２】論理検証において不定値が意図せず消去される場合の他の一例を示す図である。
【図３】論理検証において不定値が意図せず消去される場合のさらに他の一例を示す図である。
【図４】本発明の第１の実施の形態における論理検証装置のハードウェア構成の一例を示すブロック図である。
【図５】本発明の第１の実施の形態における論理検証装置の機能的構成を示すブロック図である。
【図６】本発明の第１の実施の形態における論理検証装置の処理手順を説明するためのフローチャートである。
【図７】図１（ｂ）に示すバグを含んだ回路においてどのように不具合が検証されるかを説明するための図である。
【図８】図２（ｂ）に示すバグを含んだ回路においてどのように不具合が検証されるかを説明するための図である。
【図９】図３（ｂ）に示すバグを含んだ回路においてどのように不具合が検証されるかを説明するための図である。
【図１０】本発明の第２の実施の形態における論理検証装置の機能的構成を示すブロック図である。
【図１１】本発明の第２の実施の形態における論理検証装置の処理手順を説明するためのフローチャートである。
【図１２】本発明の第２の実施の形態における論理検証装置によって論理検証が行なわれる回路の一例を示す図である。
【符号の説明】
【００８３】
１１，８４，８８，９１，９２，９４  組合せ回路、１２，８１，８３，８５，８７  ＦＦ、１３，９３，９５  ＡＮＤゲート、１４，２１〜２３，３１，３２  論理機能ブロック、４１  コンピュータ本体、４２  ディスプレイ装置、４３  ＦＤドライブ、４４  ＦＤ、４５  キーボード、４６  マウス、４７  ＣＤ−ＲＯＭ装置、４８  ＣＤ−ＲＯＭ、４９  ネットワーク通信装置、５０  ＣＰＵ、５１  ＲＯＭ、５２  ＲＡＭ、５３  ハードディスク、６１  記号付加部、６２  第１記号置換部、６３  シミュレーション部、６４  第２記号置換部、６５  真偽判定部、６６  不具合原因探索部、７１  ＲＴＬシミュレーション部、７２  組合せ論理単位認識部、７３  不定値マスク信号抽出部、７４  不定値確認部、７５  ルート探索部、７６  マスク判定部、８２，８６  組合せ論理単位。
【図１】
2010134598.tif 000003
【図２】
2010134598.tif 000004
【図３】
2010134598.tif 000005
【図４】
2010134598.tif 000006
【図５】
2010134598.tif 000007
【図６】
2010134598.tif 000008
【図７】
2010134598.tif 000009
【図８】
2010134598.tif 000010
【図９】
2010134598.tif 000011
【図１０】
2010134598.tif 000012
【図１１】
2010134598.tif 000013
【図１２】
2010134598.tif 000014