(57)【要約】【課題】  論理回路内部の内部状態（状態値）を容易に観測することを可能とするシミュレーション方法及びシミュレーション装置並びにシミュレーション用プログラムを提供すること。【解決手段】  本発明は、インスタンス名を抽出するためのステートメントが予め記述されたセルライブラリを用いて所定のシミュレータによるシミュレーションを実行することにより、ネットリストからインスタンス名を抽出する第１ステップＳ１と、前記ネットリストから抽出されたインスタンス名を用いて、該インスタンス名で特定されるインスタンスの状態値を観測するためのステートメントが記述されたファイルを生成する第２ステップＳ２と、前記ファイルを前記所定のシミュレータ上で実行し、その実行結果として得られる前記インスタンスの状態値を出力する第３ステップＳ３とを含む。【選択図】      図１４
2006039950.tif 000002
【特許請求の範囲】
【請求項１】
インスタンス名を抽出するためのステートメントが予め記述されたセルライブラリを用いて所定のシミュレータによるシミュレーションを実行することにより、該シミュレータに入力されたネットリストから該ネットリストで使用されているインスタンス名を抽出する第１ステップと、
前記ネットリストから抽出されたインスタンス名を用いて、該インスタンス名で特定されるインスタンスの状態値を観測するためのステートメントが記述されたファイルを生成する第２ステップと、
前記ファイルを前記シミュレータ上で実行し、その実行結果として得られる前記インスタンスの状態を出力する第３ステップと、
を含む論理シミュレーション方法。
【請求項２】
前記第１ステップでは、前記インスタンス名として、レジスタまたはメモリのインスタンス名を抽出することを特徴とする請求項１に記載された論理シミュレーション方法。
【請求項３】
前記第２ステップでは、前記シミュレータがサポートする所定の関数に、第１ステップで抽出されたインスタンス名を組み込むことにより前記ファイルを生成することを特徴とする請求項１または２の何れか１項に記載された論理シミュレーション方法。
【請求項４】
前記第３のステップでは、前記実行結果として、前記インスタンスの状態が不定か否かを表す情報を出力することを特徴とする請求項１ないし３の何れか１項に記載された論理シミュレーション方法。
【請求項５】
インスタンス名を抽出するためのステートメントが予め記述されたセルライブラリを用いて所定のシミュレータによるシミュレーションを実行することにより、該シミュレータに入力されたネットリストから該ネットリストで使用されているインスタンス名を抽出する第１処理部と、
前記ネットリストから抽出されたインスタンス名を用いて、該インスタンス名で特定されるインスタンスの状態値を観測するためのステートメントが記述されたファイルを生成する第２処理部と、
前記ファイルを前記シミュレータ上で実行し、その実行結果として得られる前記インスタンスの状態を出力する第３処理部と、
を具備する論理シミュレーション装置。
【請求項６】
インスタンス名を抽出するためのステートメントが予め記述されたセルライブラリを用いて所定のシミュレータによるシミュレーションを実行することにより、該シミュレータに入力されたネットリストから該ネットリストで使用されているインスタンス名を抽出する第１ステップと、
前記ネットリストから抽出されたインスタンス名を用いて、該インスタンス名で特定されるインスタンスの状態値を観測するためのステートメントが記述されたファイルを生成する第２ステップと、
前記ファイルを前記シミュレータ上で実行し、その実行結果として得られる前記インスタンスの状態を出力する第３ステップと、
を実行させるための論理シミュレーション用プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、論理回路の動作を模擬するためのシミュレーション方法及びシミュレーション装置並びにシミュレーション用プログラムに関し、更に詳しくは、回路を構成する特定のインスタンスの状態値を模擬するための技術に関する。
【背景技術】
【０００２】
従来、論理回路の動作を模擬するための論理シミュレータがあり、この論理シミュレータは、ワークステーション（ＥＷＳ）やパソコン（ＰＣ）上で動作するソフトウェアプログラムとしてユーザに提供される。論理シミュレータの代表例として、標準化されたハードウェア記述言語“Verilog（登録商標）-HDL”を処理するVerilog（登録商標）シミュレータが知られている。
【０００３】
ところで、一般に論理回路は多数の内部レジスタやメモリを含んで構成され、この論理回路の動作検証においては、論理回路内部に状態値が不定となっている部分が存在するか否かを把握することは極めて重要であり、このため、論理回路の内部状態を観測する技術が要請されている。
その技術として、シミュレーションを途中で停止させ、その時点での論理回路内部の状態値を観測する手法がある。即ち、Verilog（登録商標）シミュレータによれば、出力結果を見ることができるだけでなく、論理シミュレータの入力情報の一つであるネットリスト中のインスタンス名を特定すれば、任意の時刻における論理回路内部の状態値を観測することもできる。このような論理シミュレータの機能を活用すれば、論理回路の内部状態を観測することができる。
この手法では、ネットリスト中のインスタンス名を特定する必要があるため、観測すべき内部回路に対応するインスタンス名を事前に調べてておく必要がある。一般にはエディタや専用ツールを用いてネットリスト中のインスタンス名を調べている。
【特許文献１】特開平１１−５３４１８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、ネットリスト中のインスタンスを調べる上述の従来手法によれば、論理回路の規模が著しく大きくなると、そのネットリストのデータ量も膨大になり、それをエディタで開くことすら困難になる。また、専用ツールを用いるとしても、ネットリストのデータ量が膨大になると、その処理に多くの時間を要するようになる。さらに、仮にエディタや専用ツールを用いてインスタンス名を調べることができたとしても、多くのインスタンス名の中から特定の状態値にあるインスタンス名のみを探し出すことは極めて困難である。しかも、ネットリストの階層数が増える程、そのネットリスト中のインスタンス名を探し出すことが困難になる。従って、インスタンス名を調べるための従来手法によれば、ネットリスト中の特定のインスタンスの状態値をシミュレータで検証するのに多くの時間を費やし、大規模な論理回路における内部状態を観測することが困難であるという問題がある。
【０００５】
また、他の従来手法として、シミュレーション結果を波形表示ツールに読み込んで波形表示する手法がある。しかしながら、この手法によれば、仮に全てのインスタンスの内部信号を波形表示させることができたとしても、ユーザが膨大な信号波形を解析することは現実的ではなく、また、その中から、特定の状態値（例えば「不定値」）を有するインスタンス名を特定することも困難である。
【０００６】
本発明は、上記事情に鑑みてなされたもので、論理回路の内部状態を容易に観測することができ、論理回路の検証を正確かつ迅速に行うことを可能とする論理シミュレーション方法及び論理シミュレーション装置並びに論理シミュレーション用プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
上記課題を解決するため、この発明は以下の構成を有する。
即ち、本発明に係る論理シミュレーション方法は、インスタンス名を抽出するためのステートメントが予め記述されたセルライブラリを用いて所定のシミュレータによるシミュレーションを実行することにより、該シミュレータに入力されたネットリストから該ネットリストで使用されているインスタンス名を抽出する第１ステップと、前記ネットリストから抽出されたインスタンス名を用いて、該インスタンス名で特定されるインスタンスの状態値を観測するためのステートメントが記述されたファイルを生成する第２ステップと、前記ファイルを前記シミュレータ上で実行し、その実行結果として得られる前記インスタンスの状態を出力する第３ステップと、を含む。
【０００８】
この構成によれば、観測対象のインスタンス名が記述されたセルライブラリを参照してシミュレータがシミュレーションを実行し、このシミュレータの機能を用いて、ネットリストで使用されているインスタンス名の中から、観測対象のインスタンス名が抽出される（第１ステップ）。続いて、この抽出されたインスタンス名を用いて、ネットリストで表現された論理回路の内部状態を観測するためのステートメントを含むファイルが生成される（第２ステップ）。そして、そのファイルを用いてシミュレーションが再度実行される。これにより、論理回路の内部状態が再現され、その内部状態がシミュレーションの実行結果として出力される（第３ステップ）。従って、観測対象のインスタンスで表される論理回路内部の論理状態を観測することが可能になる。
【０００９】
また、上記論理シミュレーション方法において、前記第１ステップでは、前記インスタンス名として、レジスタまたはメモリのインスタンス名を抽出することを特徴とする。
また、上記シミュレーション方法において、前記第２ステップでは、前記シミュレータがサポートする所定の関数に、第１ステップで抽出されたインスタンス名を組み込むことにより前記ファイルを生成することを特徴とする。
また、上記シミュレーション方法において、前記第３のステップでは、前記実行結果として、前記インスタンスの状態が不定か否かを表す情報を出力することを特徴とする。
【００１０】
本発明に係る論理シミュレーション装置は、インスタンス名を抽出するためのステートメントが予め記述されたセルライブラリを用いて所定のシミュレータによるシミュレーションを実行することにより、該シミュレータに入力されたネットリストから該ネットリストで使用されているインスタンス名を抽出する第１処理部と、前記ネットリストから抽出されたインスタンス名を用いて、該インスタンス名で特定されるインスタンスの状態値を観測するためのステートメントが記述されたファイルを生成する第２処理部と、前記ファイルを前記シミュレータ上で実行し、その実行結果として得られる前記インスタンスの状態を出力する第３処理部と、を具備する。
【００１１】
さらに、本発明に係る論理シミュレーション用プログラムは、インスタンス名を抽出するためのステートメントが予め記述されたセルライブラリを用いて所定のシミュレータによるシミュレーションを実行することにより、該シミュレータに入力されたネットリストから該ネットリストで使用されているインスタンス名を抽出する第１ステップと、前記ネットリストから抽出されたインスタンス名を用いて、該インスタンス名で特定されるインスタンスの状態値を観測するためのステートメントが記述されたファイルを生成する第２ステップと、前記ファイルを前記シミュレータ上で実行し、その実行結果として得られる前記インスタンスの状態を出力する第３ステップとを実行させるためのものである。
【発明の効果】
【００１２】
本発明によれば、論理シミュレータが自動的にインスタンス名を取得して、そのシミュレーション結果が出力されるので、論理回路内部の論理状態を容易に把握することが可能になる。従って、人手によりインスタンス名を調べる必要がなくなり、検証を短時間で効率的に実行することができる。
【発明を実施するための最良の形態】
【００１３】
以下、図面を参照しながら、本発明の実施形態に係る論理シミュレーション方法を説明する。
先ず、図１ないし図１２を参照しながら、Verilog（登録商標）シミュレータ（以下、「論理シミュレータ」と称す）を例として、論理シミュレーションの概要と、論理シミュレーションを実行するに先だってユーザが予め準備すべきネットリスト等の入力情報についてを説明する。なお、本実施形態に係る論理シミュレーション方法は、論理シミュレータ自体に特徴を有するものではなく、その利用形態に特徴を有している。従って、論理シミュレータとしてはVerilog（登録商標）シミュレータに限定されない。
【００１４】
図１に、論理シミュレータ１００の入出力情報を示す。同図において、論理シミュレータ１００は、エンジニアリングワークステーション（ＥＷＳ）やパソコン（ＰＣ）上で動作するソフトウェアプログラムである。論理シミュレータ１００には、入力情報１０１として、ネットリスト、テストパターン、セルライブラリの３種類の情報が入力される。この入力情報１０１はユーザによって予め準備される。
ここで、ネットリストは、各種のゲート回路や内部レジスタ等の要素回路に対応するライブラリセルの接続情報である。このライブラリセルを用いてインスタンスを構成し、複数のインスタンスを用いて一つのインスタンスを定義することもできるため、一般にネットリストはインスタンスによって階層化されている。
【００１５】
テストパターンは、シミュレーション対象の論理回路に与えられる入力パターンや、出力値の期待値を発生させるために必要とされる情報である。セルライブラリは、ネットリスト内でインスタンスとして取り扱われる要素回路を特徴づけるための情報であり、端子情報、動作情報（機能）、タイミング情報（遅延時間、セットアップ／ホールド）等の情報を含む。これらネットリスト、テストパターン、およびセルライブラリからなる入力情報１０１は、論理シミュレータ１００をハンドルするハードウェア記述言語で記述されている。この入力情報１０１に基づき、論理シミュレータ１００は、論理シミュレーションを実行してシミュレーション結果１０２を出力する。ユーザは、シミュレーション結果１０２から、ＬＳＩ設計データにバグなどの不具合がないかどうかを検証する。
【００１６】
図２を参照して、ネットリストの階層化について補足説明する。同図において、符号２０００はＬＳＩの全体回路を表す。全体回路２０００は、ネットリスト上で最上位階層のインスタンスに対応し、このインスタンスには、インスタンス名として「ＴＯＰ」が付与されている。本実施形態では、インスタンス名が「ＴＯＰ」のインスタンスを「インスタンスＴＯＰ」と表記する。以下、他のインスタンスについても同様の表記法を用いる。
【００１７】
全体回路２０００は、３つの回路ブロック２１００，２２００，２３００を含み、これら回路ブロックは、インスタンスＴＯＰの下位階層に属するインスタンスＡＢＬＯＣＫ，ＢＢＬＯＣＫ，ＣＢＬＯＣＫに対応している。ここで、回路ブロック２１００は、インスタンスＡＢＬＯＣＫの下の階層のインスタンスＳＲＡＭ１に対応するスタティックメモリ２１１０を含み、回路ブロック２２００は、インスタンスＢＢＬＯＣＫの下の階層のインスタンスＳＲＡＭ２に対応するスタティックメモリ２２１０を含んでいる。
【００１８】
回路ブロック２３００は、インスタンスＣＢＬＯＣＫの下の階層のインスタンスＡ，Ｂ，Ｃに対応する回路ブロック２３１０，２３２０，２３３０を含む。このうち、回路ブロック２３１０は、インスタンスＡの下の階層のインスタンスａに対応する回路ブロック２３１１を含み、回路ブロック２３１１はレジスタ２３１２を含んでいる。回路ブロック２３２０，２３３０はレジスタ２３２１，２３３１をそれぞれ含んでいる。各回路ブロックは図示しない配線を介して互いに接続されており、この配線による各インスタンスの接続関係がネットリストで記述されている。特に図示しないが、レジスタ２３１２，２３２１，２３３１に対応するインスタンスとして、インスタンス２３１１，２３２０，２３３０の下の階層のインスタンスが存在する。
このように、回路機能に基づきインスタンスを階層化することにより、ネットリストもインスタンスによって階層化されたものとなっている。以上で、ネットリストの階層化の概念を説明した。
【００１９】
続いて、図３に示す論理回路を例として、ネットリストの内容を説明する。同図に示す論理回路は、論理合成ツールを用いて自動生成されたネットリストを回路図として表現し直したものである。同図において、モジュール３１０は、信号ＳＥＬを入力するレジスタ３１１から構成される。モジュール３２０は、データＤＩＸ０，ＤＩＸ１をそれぞれ入力するレジスタ３２１，３２２と、これらレジスタの出力をモジュール３１０の出力に基づき選択するセレクタ３２３と、このセレクタの出力を保持するレジスタ３２４から構成され、このレジスタ３２４の出力はモジュール３２０の出力とされる。
【００２０】
また、モジュール３３０は、データＤＩＹ０，ＤＩＹ１をそれぞれ入力するレジスタ３３１，３３２と、これらレジスタの出力をモジュール３１０の出力に基づき選択するセレクタ３３３と、このセレクタの出力を保持するレジスタ３３４から構成される。さらに、モジュール３４０は、上記モジュール３２０，３３０の出力を加算する加算器３４１と、この加算器の出力を保持するレジスタ３４２から構成される。クロックＣＫ及び初期化信号ＲＳＴが全体に与えられている。  
本実施形態では、モジュール３１０，３２０，３３０，３４０のモジュール名を、それぞれ、「MOD_A」，「MOD_B_0」，「MOD_B_1」，「MOD_C」とする。また、以下において、モジュール名に着目して説明する場合には、モジュール名「MOD_A」を有するモジュール３１０を「モジュールMOD_A」と表現し直す。即ち、「モジュール３１０」と「モジュールMOD_A」は互いに同じ意味である。他のモジュールについても同様の表記法を用いる。
【００２１】
ここで、レジスタ３１１のセルライブラリからモジュール３１０のインスタンスＢＬＯＣＫＡが構成され、レジスタ３２１，３２２，３２４およびセレクタ３２３の各セルライブラリからモジュール３２０のインスタンスＢＬＯＣＫＢ０が構成される。また、レジスタ３３１，３３２，３３４およびセレクタ３３３の各セルライブラリからモジュール３３０のインスタンスＢＬＯＣＫＢ１が構成され、加算器３４１およびレジスタ３４２の各セルライブラリからモジュール３４０のインスタンスＢＬＯＣＫＣが構成される。これらモジュールのインスタンスＢＬＯＣＫＡ，ＢＬＯＣＫＢ０，ＢＬＯＣＫＢ１，ＢＬＯＣＫＣにより、最上位階層のインスタンスＣＨＩＰが構成される。ネットリスト上では、図３に示す配線関係が各インスタンスの接続情報として記述される。
なお、図３では、説明の便宜上、小規模な論理回路を例としているが、本発明は、大規模な論理回路に適用した場合に顕著な効果が得られる。
【００２２】
図４ないし図８に、論理合成ツールにより自動生成されたネットリストの一例を示す。このネットリストは、図３に示す論理回路に対応するものであり、図４は、図３に示す最上位階層のインスタンスＣＨＩＰのネットリストを示す。このネットリストは、インスタンスＣＨＩＰの下の階層のインスタンスの接続関係を規定し、先頭行の「module」と最終行の「endmodule」との間に具体的情報が記述される。この例では、先頭行の「module」の後に、インスタンス名「ＣＨＩＰ」と、端子宣言文(i_CK,i_RST,i_DIX0,i_DIX1,i_DIY0,i_DIY1,o_D0)が記述されている。この端子宣言文で宣言される端子は、図３に示すインスタンスＣＨＩＰの入出力信号（SEL,DIX0,DIX1,DIY0,DIY1）の仮想的な端子（図示なし）に対応している。
【００２３】
また、その第２行目から第７行目には、入出力宣言文が記述されている。この例では、端子「i_DIX0」は４ビット[3:0]の入力端子であることが宣言され、端子「o_D0」は５ビット[4:0]の出力端子であることが宣言されている。さらに、第８行目には、内部配線に使用されるノードを規定する「wire」文が記述され、第９行目から第１５行目には、上述のモジュール名「MOD_A」,「MOD_B0」,「MOD_B1」,「MOD_C」を有する図３に示すモジュール３１０，３２０，３３０，３４０に対応するインスタンスＢＬＯＣＫＡ，ＢＬＯＣＫＢ０，ＢＬＯＣＫＢ１，ＢＬＯＣＫＣの接続関係が記述されている。
【００２４】
図５は、図４のネットリストで参照されるモジュールMOD_A（図３のモジュール３１０）のネットリストを示す。図５において、「FDPRBQ_2」は、あらかじめ定義されているレジスタのセル名（ライブラリセル名）を表し、「sel_reg_reg」は、ネットリストを自動生成する過程で付与されたユニークなインスタンス名を表す。このネットリストにおいて、「MOD_A」はインスタンスsel_reg_regから構成され、このインスタンスsel_reg_regは、セル名「FDPRBQ_2」で特定されるレジスタとして動作する。このレジスタの動作の詳細は、後述するセルライブラリに記述される。
図６ないし図８に、モジュールMOD_B0（図３に示すモジュール３２０）、モジュールMOD_B1（図３に示すモジュール３３０）、モジュールMOD_C（図３に示すモジュール３４０）のネットリストをそれぞれ示す。これらネットリストの内容も基本的には同様である。
【００２５】
図９に、セルライブラリの一例を示す。このセルライブラリはレジスタの特性を記述したものであり、先頭行には、レジスタのセル名「FDPRBQ_2」と、端子宣言文(Q,CK,D,RN)が記述されている。また、第２行目から第５行目には、端子の入出力宣言文が記述されている。この例では、端子「Q」は出力端子であることが宣言され、端子「CK」，「D」，「RN」は入力端子であることが宣言されている。第６行目から第８行目にはレジスタの機能（論理）が記述されている。この他、必要に応じて遅延やセットアップ／ホールド時間等のタイミングに関する情報が記述される。
【００２６】
図９に示すセルライブラリは、図５ないし図８に示すネットリスト内に記述されたレジスタのインスタンスの情報として参照され、このインスタンスから構成されるモジュールが図４に示す最上位のネットリストで参照されることにより、図３に示す論理回路がシミュレータ上に構築されるようになっている。
ここで、図９に示すセルライブラリの第９行目から第１３行目には、本発明の特徴部である、ネットリストからインスタンス名を抽出するためのステートメントが追加記述されている。この例では、出力「Q」を有する内部レジスタのインスタンス名を抽出するためのステートメントが記述されている。以下では、この追加記述されたステートメントを「インスタンス抽出用ステートメント」と称す。
【００２７】
図１０を参照して、インスタンス抽出用ステートメントについて更に詳細に説明する。
図１０（ａ）に、内部レジスタのインスタンス名を抽出するためのインスタンス抽出用ステートメントの一例を示す。この例において、先頭行の「`ifdef REG_LIST」は、後述するシミュレータのコマンドラインにオプションとして記述される引数「REG_LIST」を規定し、コマンドライン内に引数「REG_LIST」が存在すると、第２行目以下に記述されるステートメントがシミュレータに実行されてインスタンス名が抽出されるようになっている。即ち、コマンドラインに引数「REG_LIST」を記述するか否かにより、レジスタのインスタンス名を抽出する処理を実行するか否かを任意に切り替えることができる。
【００２８】
第２行目の「initial」は、その後に記述された「$fdisplay」を１回だけ実行することを表す。「$fdisplay」が実行されると、「$display」が処理される。「$display」が処理されると、「%m.Q」なる記述により、インスタンス抽出用ステートメントが追加されたセルライブラリを参照するインスタンスのうち、出力「Q」を有するレジスタのインスタンス名のみがリストアップされる。このリストはファイルポインタ「LIST_MODULE.LIST_FP」によって開かれたファイルに格納される。同様に、第４行目の「initial」の後のステートメントが実行されると、「%m.QN」なる記述部分により、出力「QN」を有するレジスタのインスタンス名のみがリストアップされ、このリストがファイルポインタ「LIST_MODULE.LIST_FP」によって開かれたファイルに格納される。結局、図１０（ａ）に示すインスタンス抽出用ステートメントが実行されることにより、出力「Q」または「QN」を有する全ての内部レジスタのインスタンス名が自動的に抽出されて所定のファイルに格納される。
【００２９】
図１０（ｂ）に、メモリのインスタンス名を抽出するためのインスタンス抽出用ステートメントの一例を示す。この例では、「%m.arry」なる記述部分により、メモリ内部の各アドレスに対応するインスタンス名が抽出される。また、この例では、メモリのワード数「１６」に関する記述「WORD:16」が設けられており、このワード数と共に上述のメモリ内部の各アドレスに対応するインスタンス名が抽出される。このようにワード数に関する記述を追加することにより、後述するように、メモリの状態値を観測するための処理においてワード数に応じたループ処理が実行され、１回の処理で全アドレスの状態値を出力することが可能になる。
図１０に示すインスタンス抽出用ステートメントは、ユーザが観測を希望するインスタンス、即ち抽出すべきインスタンスに対応する全てのセルライブラリに記述される。
【００３０】
上述のネットリスト及びセルライブラリのほかに、論理シミュレータの入力情報１０１として、シミュレーション対象の論理回路の入力データや期待値データを生成するために使用されるテストパターンを準備する必要がある。このテストパターンについては詳細に説明しないが、ハードウェア記述言語を用いて記述される。
なお、本実施形態では、レジスタおよびメモリの各インスタンス抽出用ステートメントを例として説明したが、これに限定されることなく、抽出すべきインスタンスの種類に応じてインスタンス抽出用ステートメントを適宜準備し、該当するインスタンスのセルライブラリに追加記述すればよい。
以上で、ネットリスト、セルライブラリ、テストパターンについて説明した。
【００３１】
本実施形態では、上述のネットリスト、セルライブラリ、テストパターンの各ファイルに加え、論理シミュレータに一連の処理を実行させるための実行プログラムを準備する。図１１に実行プログラムの一例を示す。この実行プログラムは、例えばシェルを用いて作成され、論理シミュレーションの実行に必要とされるネットリスト等の各種の情報を引数として論理シミュレータに受け渡すためのものであって、この引数を受け渡すことのより、論理シミュレータに、インスタンス名のリストを格納するためのファイルを開かせ、シミュレーションを実行させ、その実行結果として得られるインスタンス名のリストを上記ファイルに出力させた後、論理シミュレーションを終了させる。
【００３２】
この実行プログラムの第２行目には、論理シミュレータ本体の実行コマンド「Verilog（登録商標）」を変数「YEXEC_CMD」に格納するためのステートメントが記述されている。第３行目から第５行目には、この実行プログラムに与えられる引数の中に特定の引数「state_observe」があるか否かをチェックするためのステートメントが記述されている。この引数「state_observe」は、論理シミュレーションにおいて論理回路の内部状態を観測するための処理を実行するか否かを指示するフラグとしての意義を有する。なお、引数「state_observe」自体はユーザが任意に取り決めたものである。
【００３３】
上述の引数「state_observe」がある場合の処理は、第８行目から第１０行目に記述されており、この処理において、引数「state_observe」がある場合に、上述の変数「YEXEC_CMD」の内容（実行コマンド「Verilog」）とコマンドオプション等とを変数「EXEname」に格納する。この例では、変数「YEXEC_CMD」の内容に加えて、図１０に示すインスタンス抽出用ステートメントのファイル「REG_LIST」,「MEM_LIST」を指定するコマンドオプション「+define+REG_LIST+MEM_LIST」と、リストアップされたインスタンス名を格納するためのファイルを開くためのファイルポインタ「LIST_MODULE.v」とが変数「EXEname」に格納される。
【００３４】
図１２に、ファイルポインタ「LIST_MODULE.v」の一例を示す。この例に示すファイルポインタによれば、インスタンス名のリストを格納するためのファイルとしてファイル「X_FIND.list」が開かれる。このファイルポインタ「LIST_MODULE.v」は、シミュレーションに先だって予め準備しておく必要はあるが、一度作成しておきさえすれば、シミュレーションの度に作成し直す必要はない。
このファイルポインタの第１４行目には、ユーザデータである上述のネットリストとセルライブラリとテストパターンとを変数「EXEname」に格納するためのステートメント「$*」が記述されている。これにより、最終的に、変数「EXEname」には、シミュレータコマンド「Verilog」（＝変数「YEXEC」）と、内部観測用のコマンドオプション「+define+REG_LIST+MEM_LIST」およびファイルポインタ「LIST_MODULE.v」と、ネットリスト等のユーザデータとが格納され、インスタンス名を抽出する処理に必要な全ての引数を含むコマンドラインが変数「EXEname」の中に存在することになる。
【００３５】
また、第１５行目には、変数「EXEname」に格納されたコマンドラインを実行するステートメントが記述されている。このコマンドラインの実行により、シミュレーションが実行され、このシミュレーションの実行に伴って、レジスタおよびメモリのインスタンス名のリストがファイル「X_FIND.list」に順次格納される。
さらに、第１６行目から第２１行目には、第１５行目のステートメントによるシミュレーションの実行結果として得られるリストを加工処理して内部状態観測用のプログラムファイルを生成するためのコマンドに関するステートメントが記述されている。このコマンドを実行することにより、ファイル「X_FIND.list」に格納されたレジスタおよびメモリの各インスタンス名のリストが、インスタンスの状態値を出力するための関数(task)に組み込まれて、内部状態観測用プログラムファイルとして生成される。
【００３６】
この例では、第１９行目のステートメントが、内部レジスタのリストを内部状態観測用の関数(task)に組み込むためのコマンドを表し、第２１行目のステートメントが、メモリのリストを内部状態観測用の関数(task)に組み込むためのコマンドを表している。
なお、第２３行目のステートメントは、引数「state_observe」がない場合の処理を表し、この場合、上記第８行目から第２１行目に記述されたインスタンス名を抽出するための処理は実行されず、シミュレーション本体の実行コマンド「Verilog」のみが実行される。
【００３７】
上述の実行プログラムを実行することにより、この実行プログラム中に引数「state_observe」がある場合、この引数をそのまま論理シミュレータに引き渡さずに、代わりに、第１０行目のオプション「+define+REG_LIST+MEM_LIST」とファイルポインタ「LIST_MODULE.v」を引数として引き渡す。これにより、ネットリストからインスタンス名を抽出するための一連の処理と、その処理結果を加工するための処理がシミュレータ上で実行され、その実行結果として、論理回路の内部状態を観測するためのプログラムファイルが出力される。このプログラムファイルが出力された時点で実行プログラムはシミュレーションを終了させるが、出力されたプログラムファイルを用いて、各インスタンスの状態値を観測するためのシミュレーションを改めて実行する必要がある。これについては後述する。
【００３８】
次に、本実施形態に係る論理シミュレーション方法を説明する。
図１３に、本論理シミュレーション方法の概要を示す。本論理シミュレーション方法によれば、ネットリスト、テストパターン、およびセルライブラリを入力情報として用いると共にファイル指定リストを参照して第１回目の論理シミュレーションが実行される。これによりレジスタおよびメモリの各インスタンス名を抽出し、レジスタリストおよびメモリリストとして出力する。そして、これらレジスタリストとメモリリストを用いて第２回目の論理シミュレーションが実行され、論理回路を構成するレジスタの状態値のリストと、メモリの状態値のリストとが生成される。これら各状態値のリストから、ユーザが回路の内部状態を把握することが可能になる。この一連の論理シミュレーションは、上述の図１１に示す実行プログラムの制御の下に実行される。
【００３９】
以下では、前述の図１１に示す実行プログラムの制御による論理シミュレーションの一連の手順を、図１４に示すフローに沿って詳細に説明する。
前述した実行プログラムが実行されると、論理シミュレータは、実行プログラムから各種の情報を引数として受け取って第１回目の論理シミュレーションを実行し、この論理シミュレーションにおいて、ネットリストからインスタンス名を抽出するための処理を行う（ステップＳ１）。このとき、論理シミュレータは、インスタンス名を抽出するためのステートメントが予め記述された図９に例示するセルライブラリを参照して論理シミュレーションを実行する。
【００４０】
ここで、実行プログラムの中に引数「state_observe」があると、インスタンス名のリストを抽出する処理に必要な情報と、このリストを内部状態観測用プログラムに加工するための処理に必要な情報とが、上述の変数「EXEname」に格納される。論理シミュレータは、この変数「EXEname」に格納された情報を引数として受け取り、この引数を参照して論理シミュレーションを実行する。具体的には、論理シミュレータは、引数「REG_LIST」および「MEM_LIST」により特定される図１０に示すインスタンス抽出用ステートメントを実行し、図４ないし図８に示すネットリストから内部レジスタとメモリの各インスタンス名を抽出する。
【００４１】
上述のインスタンス名の抽出処理に加え、論理シミュレータは、引数「LIST_MODULE.v」により特定される図１２に示すファイルポインタを実行することによりファイル「X_FIND.list」を開き、そして上記抽出したインスタンス名のリストをファイル「X_FIND.list」に格納する。これにより、論理シミュレータに入力された図４ないし図８に示すネットリストから、内部レジスタの全インスタンス名と、メモリの全アドレスのインスタンス名とが自動的に抽出される。図１５に、レジスタのインスタンス名のリスト（レジスタリスト）の一例を示す。同図に示す例では、例えば第２行目の「T_CHIP.CHIP.BLOCKB0.\data0_reg_reg[0]」が、ネットリストから抽出されたインスタンス名を表す。
【００４２】
続いて、論理シミュレータは、ネットリストから抽出されたインスタンス名のリストを、このインスタンス名で特定されるインスタンスの状態値を観測するためのステートメントが記述されたファイルに加工し、内部観測用プログラムファイルを生成する（ステップＳ２）。具体的には、上述のファイル「X_FIND.list」に格納されたインスタンス名を、論理シミュレータがサポートする所定の関数(例えばtask文)に組み込むことにより、上記内部状態観測用プログラムファイルを生成する。本実施形態では、内部状態観測用プログラムファイルとして、３つのファイル「reg_dp.task」，「mem_dp.task」，「mem_dp_all.list」が作成されるものとする。
【００４３】
ここで、ファイル「reg_dp.task」は、レジスタの内部状態観測用プログラムファイルである。また、ファイル「mem_dp.task」は、メモリの各アドレスに対応するインスタン毎の内部状態観測用プログラムファイルであり、１つのアドレスのインスタンスに対して１つのファイル「mem_dp.task」が作成される。さらに、ファイル「mem_dp_all.list」は、メモリ内の個々のアドレスのインスタンスに対応する上述のファイル「mem_dp.task」を１つのファイルに階層化して合成したものである。このように合成されたファイルを準備することにより、全アドレスの状態値を一回のループ処理で出力することが可能になる。
【００４４】
図１６に、レジスタの内部状態観測用プログラムファイルの一例を示す。同図に示す例は、Verilog（登録商標）HDLの「task」文に、ステップＳ１で抽出された内部レジスタのインスタンス名のリストを組み込んだものであり、内部レジスタの各出力毎に「$display」文が１つずつ設けられている。この「$display」文を論理シミュレータが実行することにより、内部レジスタの状態値を標準出力することができる。「$display」の後に記述されたステートメントは、ネットリストから抽出された図１５に示すレジスタのインスタンス名のリストに対応している。なお、特に図示しないが、同様にメモリの内部状態観測用プログラムファイルも生成される。ただし、メモリの場合には、１回の処理で全アドレスに対応するインスタンスの値を出力するために、ワード数に相当する回数だけループ処理を繰り返すステートメントが付け加えられる。
【００４５】
続いて、論理シミュレータは、ユーザによるコマンド入力に基づき第２回目の論理シミュレーションを実行し、上述の内部状態観測用プログラムファイルを実行する。この２回目の論理シミュレーションにより、上述の図１６に例示する内部状態観測用プログラムファイルが実行され、前述のステップ１で抽出された各インスタンスの状態値が演算される（ステップＳ３）。この第２回目の論理シミュレーションを実行する時にユーザから論理シミュレータに与えられるコマンドの一例を次に記す。
【００４６】
%yamaha_verilog verilognet testpattern -y veriloglib reg_dp.task mem__dp.task mem_dp_all.list
このコマンドラインにおいて、「yamaha_verilog」は上述の図１１に示す実行プログラムのプログラム名を表し、「reg_dp.task」、「mem_dp.task」、及び「mem_dp_all.list」は上述のステップＳ２で生成された内部状態観測用プログラムファイル名を表す。また、このコマンドラインでは、上述の図１１に示す実行プログラムで用いられている引数「state_observe」が削除されている。従って、第２回目の論理シミュレーションでは、内部観測用プログラムファイルを生成するための処理（インスタンス名の抽出処理とリストの加工処理）は省かれる。それ以外の引数については、上述の３つの内部状態観測用プログラムのファイル名が追加されたことを除いて第１回目の実行コマンドでの引数と基本的に同じである。
【００４７】
次に、論理シミュレータは、第２回目の論理シミュレーションの実行中に、指定された任意の時刻にシミュレーションを中断し、そのときのユーザからのコマンド入力に基づき、第２回目のシミュレーションの実行結果を出力する。このとき、ユーザは、コマンド「reg_displsay.reg_all」、「mem_display.mem_all」をそれぞれ論理シミュレータに入力することにより、シミュレーションを中断したときの内部レジスタおよびメモリの各インスタンスの状態値を出力する。
【００４８】
ここで、コマンド「reg_display.reg_all」および「mem_display.mem_all」は、上述のファイル「reg_dp.task」、「mem_dp.task」、及び「mem_dp_all.list」の中にある内部状態観測用の関数（task）を呼び出すものであり、このうち、コマンド「reg_displsay.reg_all」は、全レジスタのインスタンの値を出力させ、「mem_display.mem_all」は、メモリの全アドレスに対応するインスタンスの値を出力させるものである。
なお、コマンド「reg_displsay.reg_all」および「mem_display.mem_all」は、互いに独立したコマンドであり、連続して実行させる必要はなく、またその実行順序も任意である。任意の時刻でシミュレーションを中断させ、観測対象に応じたコマンドを入力して実行すればよい。
【００４９】
図１７ないし図１９に、第２回目の論理シミュレーションの実行結果の表示例を示す。図１７は、論理シミュレーションにおいて論理回路が初期化される前の各インスタンスの状態値の表示例を表す。この例では、第６行目の「$stop」文により、時刻「200ns」でシミュレーションが自動的に中断するように設定されている。中断されたときに現れるプロンプト「C1>」に対し、ユーザがコマンド「reg_display.reg_all」を入力すると、「REG List」文に続いて、メモリの全アドレスに対応するインスタンス名と、その状態値がディスプレイに順次的に表示される。この表示内容から、ユーザは、例えばインスタンス「T_CHIP.CHIP.BLOCKA.sel_reg_reg」の出力「Ｑ」は不定「ｘ」であることを把握することができる。
【００５０】
図１８は、同一の論理回路を初期化した後の状態値の表示例を示す。この表示例から、ユーザは、時刻「4401ns」において全てのインスタンスの出力「Ｑ」が論理値「０」に初期化された状態にあることを把握できる。図１９は、同一の論理回路を初期化した後に、一定時間が経過したときの状態値を表示しており、各インスタンスの状態値が、動作に応じて論理値「０」または論理値「１」となっている。この表示例から、ユーザは、各インスタンスの状態値を把握することができる。
【００５１】
実際の論理回路の検証では、バグ等の存在により論理回路が正常に機能せず、部分的にインスタンスの状態値が不定になり、出力結果のログには、論理値「０」、論理値「１」、不定「ｘ」が混在することが予想される。このようなログの中から、特定の状態値のインスタンスを抽出したい場合、例えばＵＮＩＸ（登録商標）の「grep」コマンドを利用することができる。このコマンドを実行すれば、例えば状態値が不定値「ｘ」の内部レジスタやメモリアドレスを即座に把握することができ、初期化不良などの解析を容易に行うことができ、不良部分を即座に特定することができる。
なお、論理シミュレータは、インタラクティブにオペレーション可能な機能を備えており、ユーザがシミュレーションを中断してコマンドを任意に発行することが可能となっているため、上述の「$stop」文に代えて、ユーザがキー入力することによりシミュレーションを任意に中断させるようにしてもよい。
【００５２】
レジスタやメモリの値が不定の場合は、シミュレーション結果のログから該当するインスタンス名を抜き出し、これにより、初期化が行われたか否かなどの検証を効率良く行うことができる。レジスタの状態値を出力する際に、状態値が不定値の場合にはその状態値がログに出力される。このため、状態値が不定のインスタンスをログから一括してリストアップすることができ、ログ中の同じ記述を一括して抽出することにより、状態値が不定のレジスタやメモリのインスタンス名を一括して表示させることができる。
【００５３】
上述した実施形態では、シミュレーション方法として本発明を説明したが、シミュレーション用プログラムとして本発明を構成することも可能である。シミュレーション用のプログラムとして構成された本発明は、上述の図１４に示す各ステップを実行させるものであり、具体的には、インスタンス名を抽出するためのステートメントが予め記述されたセルライブラリを用いて所定のシミュレータによるシミュレーションを実行することにより、ネットリストからインスタンス名を抽出する第１ステップと、ネットリストから抽出されたインスタンス名を用いて、このインスタンス名で特定されるインスタンスの状態値を観測するためのステートメントが記述されたファイルを生成する第２ステップと、このファイルを前記シミュレータ上で実行し、その実行結果として得られる前記インスタンスの状態を出力する第３ステップとを実行させるものである。
【００５４】
また、上述した実施形態のシミュレーション方法は、上述の図１４に示すステップを処理するための機能ブロックを有するシミュレーション装置として構成することも可能である。シミュレーション装置として構成された本発明は、インスタンス名を抽出するためのステートメントが予め記述されたセルライブラリを用いて所定のシミュレータによるシミュレーションを実行することにより、ネットリストからインスタンス名を抽出する第１処理部と、前記ネットリストから抽出されたインスタンス名を用いて、該インスタンス名で特定されるインスタンスの状態値を観測するためのステートメントが記述されたファイルを生成する第２処理部と、このファイルを前記シミュレータ上で実行し、その実行結果として得られるインスタンスの状態を出力する第３処理部とを具備するものである。
【００５５】
以下に、本実施形態を要約する。
セルライブラリにインスタンス抽出用ステートメントを組み込むことにより、論理シミュレータに入力されるネットリスト中の全てのレジスタやメモリのインスタンス名を自動的にリストアップする。そのリストを基に内部状態観測用の関数（例えばVerilog-HDLのtask）を生成する。ネットリストからインスタンス名をリストアップし、そのリストを内部状態観測用の関数に組み込むまでは、実行プログラムにより自動的に行われる。内部状態観測用の関数を実行することにより、シミュレーション中の任意の時刻における全レジスタまたはメモリの状態値を観測する。
【００５６】
以下に、本実施形態の効果をまとめる。
（１）セルライブラリにインスタンス抽出用ステートメントと追加すると共にシミュレーション結果のログを加工することにより、自動的に、レジスタやメモリのインスタンス名を取得し、その情報を基にレジスタやメモリの状態値を観測することができる。従って、人手作業によりインスタンス名を調べる必要がなくなり、論理回路の検証を短期間で行うことができる。
（２）メモリの全アドレスについて状態値を観測することもできる。メモリの全アドレスのうち、一部のアドレスの値が不定の場合、ログからそれらのアドレスを選び出すことにより、レジスタと同様に、メモリが初期化されているか否かを容易に検証することができる。
【００５７】
（３）シミュレータを任意の時刻で停止させることができるため、任意の時刻におけるインスタンスの値を観測することができ、例えば初期化後に初期化が行われたかどうか、或るオペレーション後の値はどうなっているか等を簡単に把握することができる。
（４）Verilog-HDL記述によりテストパターン内で期待値を与えることにより、期待値と不一致のときにシミュレータを停止させることも可能である。そして、このときのレジスタやメモリの状態値を観測することにより、デバッグを効率的に行うことも可能になる。
（５）検証を容易に行うことができ、開発期間を短縮することが可能になる。
（６）Verilog（登録商標）-HDL等のハードウェア記述言語に関する知識がなくても、ネットリスト中のインスタンスの状態値を観測することができる。
【００５８】
以上、この発明の一実施形態を説明したが、この発明は、上述の実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲で変形が可能である。例えば、上述の実施形態では、理解を容易にするため、論理シミュレーションを２回に分けて実行するものとしたが、これに限定されることなく、１つの実行プログラムで、インスタンス名の抽出から状態値の出力までの一連の処理を実行するように構成することも可能である。
【図面の簡単な説明】
【００５９】
【図１】本発明の実施形態に係る論理シミュレータの概要とその入力情報およびシミュレーション結果を説明するための図である。
【図２】本発明の実施形態に係るインスタンスの階層化を説明するための図である。
【図３】本発明の実施形態に係るインスタンスが階層化された論理回路の一例を示す回路図である。
【図４】本発明の実施形態に係る最上位階層のネットリストの一例（ＣＨＩＰ）を示す図である。
【図５】本発明の実施形態に係る下位階層のネットリストの一例（ＭＯＤ＿Ａ）を示す図である。
【図６】本発明の実施形態に係る下位階層のネットリストの一例（ＭＯＤ＿Ｂ＿０）を示す図である。
【図７】本発明の実施形態に係る下位階層のネットリストの一例（ＭＯＤ＿Ｂ＿１）を示す図である。
【図８】本発明の実施形態に係る下位階層のネットリストの一例（ＭＯＤ＿Ｃ）を示す図である。
【図９】本発明の実施形態に係るセルライブラリの一例を示す図である。
【図１０】本発明の実施形態に係るインスタンス抽出用ステートメントの一例を示す図である。
【図１１】本発明の実施形態に係る実行プログラムの一例を示す図である。
【図１２】本発明の実施形態に係るファイルポインタの一例を示す図である。
【図１３】本発明の実施形態に係る論理シミュレーションの概要を示す図である。
【図１４】本発明の実施形態に係る論理シミュレーションの手順を示すフロー図である。
【図１５】本発明の実施形態に係る内部レジスタのリストの一例を示す図である。
【図１６】本発明の実施形態に係る内部状態観測用プログラムファイルの一例を示す図である。
【図１７】本発明の実施形態に係る論理シミュレーション方法によるシミュレーション結果（論理回路を初期化する前）の一例を示す図である。
【図１８】本発明の実施形態に係る論理シミュレーション方法によるシミュレーション結果（論理回路を初期化した後）の一例を示す図である。
【図１９】本発明の実施形態に係る論理シミュレーション方法によるシミュレーション結果（論理回路を初期化して一定時間経過した後）の一例を示す図である。
【符号の説明】
【００６０】
１００；論理シミュレータ、１０１；入力情報、１０２；シミュレーション結果、３１０，３２０，３３０，３４０；モジュール、３１１，３２１，３２２，３２４，３３１，３３２，３３４，３４２；レジスタ、３２３，３３３；セレクタ、３４１；加算器、Ｓ１〜Ｓ３；ステップ。
【図１】
2006039950.tif 000003
【図２】
2006039950.tif 000004
【図３】
2006039950.tif 000005
【図４】
2006039950.tif 000006
【図５】
2006039950.tif 000007
【図６】
2006039950.tif 000008
【図７】
2006039950.tif 000009
【図８】
2006039950.tif 000010
【図９】
2006039950.tif 000011
【図１０】
2006039950.tif 000012
【図１１】
2006039950.tif 000013
【図１２】
2006039950.tif 000014
【図１３】
2006039950.tif 000015
【図１４】
2006039950.tif 000016
【図１５】
2006039950.tif 000017
【図１６】
2006039950.tif 000018
【図１７】
2006039950.tif 000019
【図１８】
2006039950.tif 000020
【図１９】
2006039950.tif 000021