(57)【特許請求の範囲】
【請求項１】
検証対象回路に対する論理検証を行うソフトウェアシミュレーション装置であって、
前記検証対象回路に含まれる第１の回路を模擬する第１シミュレーション部と、
前記第１シミュレーション部からの出力が不定値であるか否かを判定し、不定値である場合に、０または１に変換して後段のシミュレータに出力する不定値変換手段と、
前記不定値変換手段の後段に配置され、入力値をリセット設定時にリセット値にリセットするリセット回路を模擬するリセットシミュレータと、を備え、
前記不定値変換手段は、前記リセット値が０である場合に、前記不定値を１に変換し、前記リセット値が１である場合に、前記不定値を０に変換する、
ソフトウェアシミュレーション装置。
【請求項２】
前記第１の回路は、フリップフロップ回路であることを特徴とする請求項１に記載のソフトウェアシミュレーション装置。
【請求項３】
前記第１の回路は、メモリ回路であることを特徴とする請求項１に記載のソフトウェアシミュレーション装置。
【請求項４】
第１の回路と、前記第１の回路の後段に配置され、入力値をリセット設定時にリセット値にリセットするリセット回路と、を有する検証対象回路に対する論理検証を行うソフトウェアシミュレーション方法であって、
前記第１の回路を模擬し、
前記第１の回路からの出力が不定値であるか否かを判定し、判定結果が不定値であり前記リセット値が０である場合には前記不定値を１に変換し、判定結果が不定値であり前記リセット値が１である場合に前記不定値を０に変換し、前記リセット回路に変換値を供給する、
ソフトウェアシミュレーション方法。
【請求項５】
前記第１の回路は、フリップフロップ回路であることを特徴とする請求項４に記載のソフトウェアシミュレーション方法。
【請求項６】
前記第１の回路は、メモリ回路であることを特徴とする請求項４に記載のソフトウェアシミュレーション方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はソフトウェアシミュレーション装置、及びシミュレーション方法に関し、特に不定値を扱うソフトウェアシミュレーション装置、及びシミュレーション方法に関する。
【背景技術】
【０００２】
現在、フリップフロップ回路やメモリ回路等の回路を模擬して、その動作を確認する論理シミュレーション装置、論理シミュレーション方法が一般的に用いられている。一般的に用いられている論理シミュレーション装置や論理シミュレーション方法では、フリップフロップ回路やメモリ回路等を模擬するシミュレータが不定値を出力した場合、その不定値を後段回路のシミュレータにそのまま伝搬させている。後段回路のシミュレータでは、この不定値が初期化されていないことにより発生する装置の不具合を検出することが行われている。
【０００３】
たとえば、図６のＲＴＬ（Register Transfer Level）記述により示されるデジタル回路のシミュレーションでは、リセット信号が"１"になればフリップフロップ回路のシミュレータからの出力を"０"に初期化していた。この初期化された値を用いることにより、リセット回路の後段回路のシミュレータに不具合（不定値）が伝搬されることが回避でき、回路動作の不具合を回避することができた。
【０００４】
ここで、論理シミュレーション装置、論理シミュレーション方法に関連する技術を開示した文献について以下に説明する。特許文献１は、フリップフロップの初期状態が不定状態である論理シミュレータについての技術を開示している。この論理シミュレータは、論理シミュレーションの開示時に全て（または特定の）フリップフロップの初期状態を不定状態から"０"レベルまたは"１"レベルに固定する。
【０００５】
特許文献２には、回路及びテストベンチ中に不定値に関連する情報があるか否かを検索し、不定値に関する情報があればそれを出力し、不定値を"０"または"１"に置き換えて２値シミュレーションモデルを生成し、２値シミュレーションを実行する論理シミュレーション方法が開示されている。
【０００６】
なお、特許文献３は、ハードウェア化された論理シミュレータに関する技術が開示されている。そのため、不定値の扱いがソフトウェアシミュレータでの扱いと異なる。特許文献３には、本発明が対象とするソフトウェアシミュレータに関する示唆、教示が全くない。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開平０３−１３８７７４号公報
【特許文献２】特開２０００−２３５５９０号公報
【特許文献３】特開昭６１−１４７３４８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
近年、回路設計の自動化及び高機能化が進んでいる。このため、図７のＲＴＬ（Register Transfer Level）記述により示されるデジタル回路のように、リセット信号が"１"に設定される場合でも、フリップフロップ回路のシミュレータからの出力が"１"に初期化されない回路が設計されるようになってきている。そのため、上述した手法のように、不定値を後段回路のシミュレータにそのまま伝搬させても回路動作の不具合が検出できないという問題が生じている。
【０００９】
特許文献２に記載の手法は、上述のように回路及びテストベンチ内に不定値に関連する情報があるか否かを検索している。しかし、図７のＲＴＬ記述により示されるデジタル回路は、不定値を扱っているもの認識されず、検索にヒットしない。そのため、特許文献２に記載の手法は、図７のＲＴＬ記述により示されるデジタル回路に対応できないという問題がある。
【００１０】
さらに、特許文献１の手法は、フリップフロップ回路の初期状態のみを考察しているため、一定期間続く不定状態については対応できない。さらにまた、特許文献１の手法は、既存のシミュレーションツール（シミュレーションソフトウェア）自体に機能を追加する必要があり、既存のシミュレーションツールに適用することが困難である。
【００１１】
本発明は、上述した課題を鑑みてなされたものであり、不定値を適切に扱うことができるソフトウェアシミュレーションを実現するシミュレーション装置、シミュレーション方法、及びプログラムを提供することを主たる目的とする。
【課題を解決するための手段】
【００１２】
本発明にかかるシミュレーション装置の一態様は、
検証対象回路に対する論理検証を行うソフトウェアシミュレーション装置であって、
前記検証対象回路に含まれる第１の回路を模擬する第１シミュレーション部と、
前記第１シミュレーション部からの出力が不定値であるか否かを判定し、不定値である場合に、０または１に変換して後段のシミュレータに出力する不定値変換手段と、を備えるものである。
【００１３】
本発明にかかるシミュレーション方法の一態様は、
第１の回路を有する検証対象回路に対する論理検証を行うソフトウェアシミュレーション方法であって、
前記第１の回路を模擬し、
前記第１の回路からの出力が不定値であるか否かを判定し、不定値である場合に、０または１に変換して後段のシミュレータに出力する、ものである。
【００１４】
本発明にかかるプログラムの一態様は、上記したシミュレーション方法をコンピュータに行わせるためのプログラムである。
【発明の効果】
【００１５】
本発明によれば、不定値を適切に扱うことができるソフトウェアシミュレーションを実現するシミュレーション装置、シミュレーション方法、及びプログラムを提供することができる。
【図面の簡単な説明】
【００１６】
【図１】実施の形態１にかかる論理シミュレーション装置の構成を示すブロック図である。
【図２】実施の形態１にかかる論理シミュレーション装置の構成を示すブロック図である。
【図３】実施の形態２にかかる論理シミュレーション装置の構成を示すブロック図である。
【図４】本発明にかかる論理シミュレーション装置の構成を示すブロック図である。
【図５】本発明にかかる論理シミュレーション装置をプログラムとして実現する場合のコンピュータシステムの構成を示すブロック図である。
【図６】ＲＴＬ記述の一例を示す図である。
【図７】ＲＴＬ記述の一例を示す図である。
【発明を実施するための形態】
【００１７】
＜実施の形態１＞
以下、図面を参照して本発明の実施の形態について説明する。図１は、本実施の形態にかかるシミュレーション装置１の構成を示すブロック図である。シミュレーション装置１は、フリップフロップモジュール１０を有する。フリップフロップモジュール１０は、フリップフロップシミュレータ２０と、不定値変換手段３０と、を備える。
【００１８】
シミュレーション装置１は、Ｖｅｒｉｌｏｇ等のハードウェア記述言語により設計された回路をシミュレーションするソフトウェアシミュレータである。一般に、シミュレーション装置１は、複数のライブラリ（フリップフロップ回路を模擬する処理部、メモリ回路を模擬する処理部等）から構成される。
【００１９】
フリップフロップモジュール１０は、フリップフロップ回路をシミュレーションするライブラリ（ソフトウェアシミュレータを構成する一処理部）である。フリップフロップモジュール１０には、データ信号４０と、クロック信号４１と、が入力される。フリップフロップモジュール１０は、出力信号として信号４３を後段回路（のシミュレータ）に出力する。なお、シミュレーション装置１内で扱われる信号は、実際には回路内で伝搬する信号を模擬した情報である。以下の説明においても同様である。
【００２０】
フリップフロップシミュレータ２０は、Ｄ型フリップフロップ回路を模擬する処理部である。フリップフロップシミュレータ２０には、データ信号４０と、クロック信号４１と、が入力される。
【００２１】
フリップフロップシミュレータ２０は、クロック信号４１の立ち上がりタイミングでデータ信号４０を保持し、当該保持データを信号４２として不定値変換手段３０に出力する。ここで、フリップフロップシミュレータ２０の出力する信号４２の初期値は"Ｘ"（不定値）である。例えば、シミュレーション実行当初（電源投入時）に出力される信号４２は、"Ｘ" （不定値）である。
【００２２】
なお、フリップフロップシミュレータ２０は、一般的なＤ型フリップフロップを模擬するものであり、当業者にとってその動作等はよく知られている。そのため、これ以上の詳細な説明は省略する。
【００２３】
不定値変換手段３０には、フリップフロップシミュレータ２０から出力された信号４２が入力される。不定値変換手段３０は、入力された信号４２の値が不定値であるか否かを判定する。不定値であった場合、不定値変換手段３０は、不定値を"０"または"１"に変換し、変換した値を信号４３として出力する。一方、不定値ではなかった場合、不定値変換手段３０は、入力された信号４２をそのまま信号４３として出力する。
【００２４】
なお、不定値変換手段３０は、不定値をランダムに"０"または"１"に変換しても良く、他のフリップフロップ回路が接続する他の回路を考慮して"０"、"１"の発生確率を変更しても良い。さらに、不定値変換手段３０は、不定値を"０"のみに変換しても良く、"１"のみに変換しても良い。
【００２５】
次に、不定値変換手段３０を他の回路のシミュレータに適応した例を説明する。図２は、メモリ回路のシミュレータに不定値変換手段３０を適応した例を示すブロック図である。シミュレーション装置１は、メモリモジュール５０を有する。メモリモジュール５０は、メモリ回路シミュレータ６０と、不定値変換手段３０と、を有する。
【００２６】
メモリモジュール５０は、メモリ回路をシミュレーションするライブラリ（ソフトウェアシミュレータを構成する一処理部）である。メモリモジュール５０には、クロック信号７０と、ライトデータ信号７１と、ライトイネーブル信号７２と、アドレス信号７３と、が入力される。メモリモジュール５０は、出力信号として信号７５を後段回路（のシミュレータ）に出力する。
【００２７】
メモリシミュレータ６０には、クロック信号７０と、ライトデータ信号７１と、ライトイネーブル信号７２と、アドレス信号７３と、が入力される。メモリシミュレータ６０は、一般的なメモリ回路（１ポートＲＡＭ（Random Access Memory））を模擬する処理部である。
【００２８】
メモリシミュレータ６０は、クロック信号７０の立ち上がりタイミングでライトイネーブル信号７２の値を判定する。ライトイネーブル信号が"１"である場合、メモリシミュレータ６０は、アドレス信号７３が示すアドレスにライトデータ信号７１の値を書き込む。一方、ライトイネーブル信号が"０"である場合、メモリシミュレータ６０は、アドレス信号７３が示すアドレスに書き込まれているデータをリードデータ信号７４として不定値変換手段３０に出力する。ここで、メモリシミュレータ６０の出力するリードデータ信号７４の初期値は"Ｘ"（不定値）である。
【００２９】
不定値変換手段３０は、図１での動作と略同一の動作を行う。すなわち、不定値変換手段３０は、入力されたリードデータ信号７４が不定値であるかを判定し、不定値であった場合に、"０"または"１"に変換して信号７５として出力する。
【００３０】
次に本実施の形態にかかるシミュレーション装置１の効果について説明する。本実施の形態にかかるシミュレーション装置１では、ある回路を模擬するシミュレータからの出力が不定値である場合に、不定値を"０"または"１"に変換している。この変換により、不定値状態が後段回路のシミュレータに伝搬しないようにしたシミュレーションが実現できる。このため、より精度の高い回路の論理シミュレーションが実現できる。
【００３１】
また、上述したように、不定値変換手段３０は、ソフトウェアシミュレータのライブラリ（フリップフロップモジュール１０、メモリモジュール５０等）に組み込むことが可能である。そのため、既存の論理シミュレーションツールとの適合性が高い。
【００３２】
さらに、不定値変換手段３０は、入力値が不定値であるか否かを逐次判定している。そのため、シミュレーション対象の回路設計の内容に依存せず、適切に不定値を変換することができる。換言すると、不定値変換手段３０は、図７に示すような設計の回路であっても、適切に不定値を変換することができる。これにより、本実施の形態にかかるシミュレーション装置１は、特許文献１、２等の手法では適切にシミュレーションができなかった回路を対象としても適切にシミュレーションを実行することができる。
【００３３】
＜実施の形態２＞
実施の形態２にかかるシミュレーション装置１では、不定値変換手段３０の後段にリセット回路を模擬するリセット回路シミュレータがある場合に、不定値変換手段３０が不定値から変換する値を特定値に固定することを特徴とする。以下、本実施の形態２にかかるシミュレーション装置１について、実施の形態１にかかるシミュレーション装置１と異なる点を中心に説明する。
【００３４】
図３は、本実施の形態にかかるシミュレーション装置１の構成を示すブロック図である。シミュレーション装置１は、フリップフロップモジュール１０と、リセット回路シミュレータ８０と、を有する。
【００３５】
リセット回路シミュレータ８０は、いかなる入力であっても、リセット設定時（リセット信号が有効化されている場合）には特定値に変換して出力するリセット回路を模擬するシミュレータである。例えば、リセット回路は、入力として"０"または"１"が入力された場合、常に"１"を出力する回路である。
【００３６】
不定値変換手段３０は、不定値が入力された場合に、不定値をリセット回路シミュレータ８０の出力に応じて変更する。詳細には、不定値変換手段３０は、不定値が入力された場合に、不定値をリセット回路のリセット値とは異なる値に変換して出力する。以下の説明では、リセット回路シミュレータ８０がリセット設定時に"１"を出力すると仮定する。不定値変換手段３０は、不定値が入力された場合に、リセット回路シミュレータ８０の出力とは異なる値、すなわち"０"を常に出力するように構成される。
【００３７】
たとえば、電源投入時には、フリップフロップ回路、メモリ回路等の出力が不定値となることが多い。不定値変換手段３０は、不定値を"０"に変換してリセット回路シミュレータ８０に供給する。ここで、リセット回路シミュレータ８０、ひいてはリセット回路が正常な場合には、リセット回路シミュレータ８０への入力値"０"（不定値を変換した値）は"１"に変換される。
【００３８】
そのため、電源投入後であり、リセット設定時の出力としてリセット回路シミュレータ８０が"０"を出力する場合には、リセット回路シミュレータ８０の動作、ひいてはリセット回路の動作に不具合がある可能性が高いことを認識できる。すなわち、不定値変換手段３０は、不定値が入力された場合に、不定値をリセット回路シミュレータ８０の出力に応じて変換することにより、リセット回路の動作を検証できるという効果を奏する。
【００３９】
なお、図３の構成では、不定値変換手段３０の前段にフリップフロップモジュール１０を配置したが、必ずしもこれに限られず、メモリモジュール５０、または他のモジュールを配置しても良い。
【００４０】
以上、実施の形態に即して本発明を説明した。本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。例えば、上述の説明では、Ｄ型フリップフロップ回路、１ポートＲＡＭを例示して動作を説明したが必ずしもこれに限られない。本発明は、他の一般的なフリップフロップ回路、メモリ回路を対象とした不定値変換に応用することができる。
【００４１】
本発明の主要な動作を図４に示す概念図を用いて再度説明する。シミュレーション装置１は、所定回路（第１の回路）シミュレータ９０と、不定値変換手段３０と、を備える。シミュレーション装置１は、ハードウェア記述言語により記載された回路設計をシミュレーションするソフトウェアシミュレータである。
【００４２】
なお、所定回路シミュレータ９０は、例えば上述のフリップフロップシミュレータ２０やメモリシミュレータ６０に相当する。
【００４３】
不定値変換手段３０は、所定回路シミュレータ９０からの出力が不定値である場合に"０"または"１"に変換して出力する。
【００４４】
このように、図４に示す最小構成であっても、所定回路を模擬するシミュレータからの出力が不定値である場合に、不定値を"０"または"１"に変換できる。この変換により、不定値状態を除外したシミュレーションが実現できる。このため、より精度の高い回路の論理シミュレーションが実現できる。
【００４５】
上記したシミュレーション装置１の各処理は、任意のコンピュータ内で動作するプログラムとして実現することが可能である。プログラムは、様々なタイプの非一時的なコンピュータ可読媒体（non-transitory computer readable medium）を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体（tangible storage medium）を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体（例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ）、光磁気記録媒体（例えば光磁気ディスク）、ＣＤ−ＲＯＭ（Read Only Memory）、ＣＤ−Ｒ、ＣＤ−Ｒ／Ｗ、半導体メモリ（例えば、マスクＲＯＭ、ＰＲＯＭ（Programmable ROM）、ＥＰＲＯＭ（Erasable PROM）、フラッシュＲＯＭ、ＲＡＭ（random access memory））を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体（transitory computer readable medium）によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【００４６】
図５は、シミュレーション装置１の各処理をプログラムとして実現するためのコンピュータシステムのハードウェア構成例を示している。例えば、中央処理装置（ＣＰＵ）１０１とメモリ１０２とを含んでいる。ＣＰＵ１０１とメモリ１０２とは、バスを介して補助記憶装置としてのハードディスク装置（ＨＤＤ）１０３に接続される。このシステムは、典型的には、ユーザ・インターフェース・ハードウェアを備える。ユーザ・インターフェース・ハードウェアとしては、例えば、入力をするためのポインティング・デバイス（マウス、ジョイスティック等）やキーボード等の入力装置１０４や、視覚データをユーザに提示するための液晶ディスプレイなどの表示装置１０５がある。ハードディスク装置１０３等の記憶媒体にはオペレーティングシステムと共同してＣＰＵ１０１等に命令を与え、このシステムの各部の機能を実施するためのコンピュータ・プログラムを記憶することができる。すなわち、プログラムがメモリ１０２上に展開され、ＣＰＵ１０１がプログラムに従って処理を行い、他のハードウェア構成と協働することによって、シミュレーション装置１の各ブロックが構成されている。そして、シミュレーション装置１による各処理は、ＣＰＵ１０１において所定のプログラムが実行されることで実現されている。尚、これらのシステムは、単一のコンピュータでなくとも、複数のコンピュータによって構成することも可能である。
【００４７】
上記実施形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
【００４８】
（付記１）
検証対象回路に対する論理検証を行うソフトウェアシミュレーション装置であって、
前記検証対象回路に含まれる第１の回路を模擬する第１シミュレーション部と、
前記第１シミュレーション部からの出力が不定値であるか否かを判定し、不定値である場合に、０または１に変換して後段のシミュレータに出力する不定値変換手段と、を備えるソフトウェアシミュレーション装置。
【００４９】
（付記２）
不定値変換手段の後段に配置され、入力値をリセット設定時にリセット値にリセットするリセット回路を模擬するリセットシミュレータを更に備え、
前記不定値変換手段は、前記リセット値が０である場合に、前記不定値を１に変換し、前記リセット値が１である場合に、前記不定値を０に変換する、
付記１に記載のソフトウェアシミュレーション装置。
【００５０】
（付記３）
前記不定値変換手段は、前記不定値をランダムな確率で０または１に変換して出力することを特徴とする付記１に記載のソフトウェアシミュレーション装置。
【００５１】
（付記４）
前記第１の回路は、フリップフロップ回路であることを特徴とする付記１乃至付記３のいずれか１項に記載のソフトウェアシミュレーション装置。
【００５２】
（付記５）
前記第１の回路は、メモリ回路であることを特徴とする付記１乃至付記３のいずれか１項に記載のソフトウェアシミュレーション装置。
【００５３】
（付記６）
第１の回路を有する検証対象回路に対する論理検証を行うソフトウェアシミュレーション方法であって、
前記第１の回路を模擬し、
前記第１の回路からの出力が不定値であるか否かを判定し、不定値である場合に、０または１に変換して後段のシミュレータに出力する、ソフトウェアシミュレーション方法。
【００５４】
（付記７）
前記検証対象回路は、前記第１の回路の後段に配置され、入力値をリセット設定時にリセット値にリセットするリセット回路を備え、
前記不定値の変換処理では、前記リセット値が０である場合に、前記不定値を１に変換し、前記リセット値が１である場合に、前記不定値を０に変換し、前記リセット回路に変換値を供給する、付記６に記載のソフトウェアシミュレーション方法。
【００５５】
（付記８）
前記不定値の変換処理では、前記不定値をランダムな確率で０または１に変換して出力することを特徴とする付記６に記載のソフトウェアシミュレーション方法。
【００５６】
（付記９）
前記第１の回路は、フリップフロップ回路であることを特徴とする付記６乃至付記８のいずれか１項に記載のソフトウェアシミュレーション方法。
【００５７】
（付記１０）
前記第１の回路は、メモリ回路であることを特徴とする付記６乃至付記８のいずれか１項に記載のソフトウェアシミュレーション方法。
【００５８】
（付記１１）
付記６乃至付記１０のいずれか１項に記載されたソフトウェアシミュレーション方法をコンピュータに行わせるためのプログラム。
【符号の説明】
【００５９】
１  シミュレーション装置
１０  フリップフロップモジュール
２０  フリップフロップシミュレータ
３０  不定値変換手段
４０  データ信号
４１  クロック信号
４２、４３  信号
５０  メモリモジュール
６０  メモリ回路シミュレータ
７０  クロック信号
７１  ライトデータ信号
７２  ライトイネーブル信号
７３  アドレス信号
７４、７５  信号
８０  リセット回路シミュレータ
９０  所定回路（第１の回路）シミュレータ
１０１  ＣＰＵ
１０２  メモリ
１０３  ＨＤＤ
１０４  入力装置
１０５  表示装置
【図１】
0005392862.tif 000002
【図２】
0005392862.tif 000003
【図３】
0005392862.tif 000004
【図４】
0005392862.tif 000005
【図５】
0005392862.tif 000006
【図６】
0005392862.tif 000007
【図７】
0005392862.tif 000008