JP4400358B2 - 論理シミュレーション方法、論理シミュレーション装置、論理シミュレーション用プログラム - Google Patents

論理シミュレーション方法、論理シミュレーション装置、論理シミュレーション用プログラム Download PDF

Info

Publication number
JP4400358B2
JP4400358B2 JP2004218930A JP2004218930A JP4400358B2 JP 4400358 B2 JP4400358 B2 JP 4400358B2 JP 2004218930 A JP2004218930 A JP 2004218930A JP 2004218930 A JP2004218930 A JP 2004218930A JP 4400358 B2 JP4400358 B2 JP 4400358B2
Authority
JP
Japan
Prior art keywords
instance
simulator
logic
file
simulation
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2004218930A
Other languages
English (en)
Other versions
JP2006039950A (ja
Inventor
敏勝 中嶋
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Yamaha Corp
Original Assignee
Yamaha Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Yamaha Corp filed Critical Yamaha Corp
Priority to JP2004218930A priority Critical patent/JP4400358B2/ja
Publication of JP2006039950A publication Critical patent/JP2006039950A/ja
Application granted granted Critical
Publication of JP4400358B2 publication Critical patent/JP4400358B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Description

この発明は、論理回路の動作を模擬するためのシミュレーション方法及びシミュレーション装置並びにシミュレーション用プログラムに関し、更に詳しくは、回路を構成する特定のインスタンスの状態値を模擬するための技術に関する。
従来、論理回路の動作を模擬するための論理シミュレータがあり、この論理シミュレータは、ワークステーション(EWS)やパソコン(PC)上で動作するソフトウェアプログラムとしてユーザに提供される。論理シミュレータの代表例として、標準化されたハードウェア記述言語“Verilog(登録商標)-HDL”を処理するVerilog(登録商標)シミュレータが知られている。
ところで、一般に論理回路は多数の内部レジスタやメモリを含んで構成され、この論理回路の動作検証においては、論理回路内部に状態値が不定となっている部分が存在するか否かを把握することは極めて重要であり、このため、論理回路の内部状態を観測する技術が要請されている。
その技術として、シミュレーションを途中で停止させ、その時点での論理回路内部の状態値を観測する手法がある。即ち、Verilog(登録商標)シミュレータによれば、出力結果を見ることができるだけでなく、論理シミュレータの入力情報の一つであるネットリスト中のインスタンス名を特定すれば、任意の時刻における論理回路内部の状態値を観測することもできる。このような論理シミュレータの機能を活用すれば、論理回路の内部状態を観測することができる。
この手法では、ネットリスト中のインスタンス名を特定する必要があるため、観測すべき内部回路に対応するインスタンス名を事前に調べてておく必要がある。一般にはエディタや専用ツールを用いてネットリスト中のインスタンス名を調べている。
特開平11−53418号公報
しかしながら、ネットリスト中のインスタンスを調べる上述の従来手法によれば、論理回路の規模が著しく大きくなると、そのネットリストのデータ量も膨大になり、それをエディタで開くことすら困難になる。また、専用ツールを用いるとしても、ネットリストのデータ量が膨大になると、その処理に多くの時間を要するようになる。さらに、仮にエディタや専用ツールを用いてインスタンス名を調べることができたとしても、多くのインスタンス名の中から特定の状態値にあるインスタンス名のみを探し出すことは極めて困難である。しかも、ネットリストの階層数が増える程、そのネットリスト中のインスタンス名を探し出すことが困難になる。従って、インスタンス名を調べるための従来手法によれば、ネットリスト中の特定のインスタンスの状態値をシミュレータで検証するのに多くの時間を費やし、大規模な論理回路における内部状態を観測することが困難であるという問題がある。
また、他の従来手法として、シミュレーション結果を波形表示ツールに読み込んで波形表示する手法がある。しかしながら、この手法によれば、仮に全てのインスタンスの内部信号を波形表示させることができたとしても、ユーザが膨大な信号波形を解析することは現実的ではなく、また、その中から、特定の状態値(例えば「不定値」)を有するインスタンス名を特定することも困難である。
本発明は、上記事情に鑑みてなされたもので、論理回路の内部状態を容易に観測することができ、論理回路の検証を正確かつ迅速に行うことを可能とする論理シミュレーション方法及び論理シミュレーション装置並びに論理シミュレーション用プログラムを提供することを目的とする。
上記課題を解決するため、この発明は以下の構成を有する。
即ち、本発明に係る論理シミュレーション方法は、インスタンス名を抽出するためのステートメントが予め記述されたセルライブラリを用いて所定のシミュレータによるシミュレーションを実行することにより、該シミュレータに入力されたネットリストから該ネットリストで使用されているインスタンス名を抽出する第1ステップと、前記ネットリストから抽出されたインスタンス名を用いて、該インスタンス名で特定されるインスタンスの状態値を観測するためのステートメントが記述されたファイルを生成する第2ステップと、前記ファイルを前記シミュレータ上で実行し、その実行結果として得られる前記インスタンスの状態を出力する第3ステップと、を含む。
この構成によれば、観測対象のインスタンス名が記述されたセルライブラリを参照してシミュレータがシミュレーションを実行し、このシミュレータの機能を用いて、ネットリストで使用されているインスタンス名の中から、観測対象のインスタンス名が抽出される(第1ステップ)。続いて、この抽出されたインスタンス名を用いて、ネットリストで表現された論理回路の内部状態を観測するためのステートメントを含むファイルが生成される(第2ステップ)。そして、そのファイルを用いてシミュレーションが再度実行される。これにより、論理回路の内部状態が再現され、その内部状態がシミュレーションの実行結果として出力される(第3ステップ)。従って、観測対象のインスタンスで表される論理回路内部の論理状態を観測することが可能になる。
また、上記論理シミュレーション方法において、前記第1ステップでは、前記インスタンス名として、レジスタまたはメモリのインスタンス名を抽出することを特徴とする。
また、上記シミュレーション方法において、前記第2ステップでは、前記シミュレータがサポートする所定の関数に、第1ステップで抽出されたインスタンス名を組み込むことにより前記ファイルを生成することを特徴とする。
また、上記シミュレーション方法において、前記第3のステップでは、前記実行結果として、前記インスタンスの状態が不定か否かを表す情報を出力することを特徴とする。
本発明に係る論理シミュレーション装置は、インスタンス名を抽出するためのステートメントが予め記述されたセルライブラリを用いて所定のシミュレータによるシミュレーションを実行することにより、該シミュレータに入力されたネットリストから該ネットリストで使用されているインスタンス名を抽出する第1処理部と、前記ネットリストから抽出されたインスタンス名を用いて、該インスタンス名で特定されるインスタンスの状態値を観測するためのステートメントが記述されたファイルを生成する第2処理部と、前記ファイルを前記シミュレータ上で実行し、その実行結果として得られる前記インスタンスの状態を出力する第3処理部と、を具備する。
さらに、本発明に係る論理シミュレーション用プログラムは、インスタンス名を抽出するためのステートメントが予め記述されたセルライブラリを用いて所定のシミュレータによるシミュレーションを実行することにより、該シミュレータに入力されたネットリストから該ネットリストで使用されているインスタンス名を抽出する第1ステップと、前記ネットリストから抽出されたインスタンス名を用いて、該インスタンス名で特定されるインスタンスの状態値を観測するためのステートメントが記述されたファイルを生成する第2ステップと、前記ファイルを前記シミュレータ上で実行し、その実行結果として得られる前記インスタンスの状態を出力する第3ステップとを実行させるためのものである。
本発明によれば、論理シミュレータが自動的にインスタンス名を取得して、そのシミュレーション結果が出力されるので、論理回路内部の論理状態を容易に把握することが可能になる。従って、人手によりインスタンス名を調べる必要がなくなり、検証を短時間で効率的に実行することができる。
以下、図面を参照しながら、本発明の実施形態に係る論理シミュレーション方法を説明する。
先ず、図1ないし図12を参照しながら、Verilog(登録商標)シミュレータ(以下、「論理シミュレータ」と称す)を例として、論理シミュレーションの概要と、論理シミュレーションを実行するに先だってユーザが予め準備すべきネットリスト等の入力情報についてを説明する。なお、本実施形態に係る論理シミュレーション方法は、論理シミュレータ自体に特徴を有するものではなく、その利用形態に特徴を有している。従って、論理シミュレータとしてはVerilog(登録商標)シミュレータに限定されない。
図1に、論理シミュレータ100の入出力情報を示す。同図において、論理シミュレータ100は、エンジニアリングワークステーション(EWS)やパソコン(PC)上で動作するソフトウェアプログラムである。論理シミュレータ100には、入力情報101として、ネットリスト、テストパターン、セルライブラリの3種類の情報が入力される。この入力情報101はユーザによって予め準備される。
ここで、ネットリストは、各種のゲート回路や内部レジスタ等の要素回路に対応するライブラリセルの接続情報である。このライブラリセルを用いてインスタンスを構成し、複数のインスタンスを用いて一つのインスタンスを定義することもできるため、一般にネットリストはインスタンスによって階層化されている。
テストパターンは、シミュレーション対象の論理回路に与えられる入力パターンや、出力値の期待値を発生させるために必要とされる情報である。セルライブラリは、ネットリスト内でインスタンスとして取り扱われる要素回路を特徴づけるための情報であり、端子情報、動作情報(機能)、タイミング情報(遅延時間、セットアップ/ホールド)等の情報を含む。これらネットリスト、テストパターン、およびセルライブラリからなる入力情報101は、論理シミュレータ100をハンドルするハードウェア記述言語で記述されている。この入力情報101に基づき、論理シミュレータ100は、論理シミュレーションを実行してシミュレーション結果102を出力する。ユーザは、シミュレーション結果102から、LSI設計データにバグなどの不具合がないかどうかを検証する。
図2を参照して、ネットリストの階層化について補足説明する。同図において、符号2000はLSIの全体回路を表す。全体回路2000は、ネットリスト上で最上位階層のインスタンスに対応し、このインスタンスには、インスタンス名として「TOP」が付与されている。本実施形態では、インスタンス名が「TOP」のインスタンスを「インスタンスTOP」と表記する。以下、他のインスタンスについても同様の表記法を用いる。
全体回路2000は、3つの回路ブロック2100,2200,2300を含み、これら回路ブロックは、インスタンスTOPの下位階層に属するインスタンスABLOCK,BBLOCK,CBLOCKに対応している。ここで、回路ブロック2100は、インスタンスABLOCKの下の階層のインスタンスSRAM1に対応するスタティックメモリ2110を含み、回路ブロック2200は、インスタンスBBLOCKの下の階層のインスタンスSRAM2に対応するスタティックメモリ2210を含んでいる。
回路ブロック2300は、インスタンスCBLOCKの下の階層のインスタンスA,B,Cに対応する回路ブロック2310,2320,2330を含む。このうち、回路ブロック2310は、インスタンスAの下の階層のインスタンスaに対応する回路ブロック2311を含み、回路ブロック2311はレジスタ2312を含んでいる。回路ブロック2320,2330はレジスタ2321,2331をそれぞれ含んでいる。各回路ブロックは図示しない配線を介して互いに接続されており、この配線による各インスタンスの接続関係がネットリストで記述されている。特に図示しないが、レジスタ2312,2321,2331に対応するインスタンスとして、インスタンス2311,2320,2330の下の階層のインスタンスが存在する。
このように、回路機能に基づきインスタンスを階層化することにより、ネットリストもインスタンスによって階層化されたものとなっている。以上で、ネットリストの階層化の概念を説明した。
続いて、図3に示す論理回路を例として、ネットリストの内容を説明する。同図に示す論理回路は、論理合成ツールを用いて自動生成されたネットリストを回路図として表現し直したものである。同図において、モジュール310は、信号SELを入力するレジスタ311から構成される。モジュール320は、データDIX0,DIX1をそれぞれ入力するレジスタ321,322と、これらレジスタの出力をモジュール310の出力に基づき選択するセレクタ323と、このセレクタの出力を保持するレジスタ324から構成され、このレジスタ324の出力はモジュール320の出力とされる。
また、モジュール330は、データDIY0,DIY1をそれぞれ入力するレジスタ331,332と、これらレジスタの出力をモジュール310の出力に基づき選択するセレクタ333と、このセレクタの出力を保持するレジスタ334から構成される。さらに、モジュール340は、上記モジュール320,330の出力を加算する加算器341と、この加算器の出力を保持するレジスタ342から構成される。クロックCK及び初期化信号RSTが全体に与えられている。
本実施形態では、モジュール310,320,330,340のモジュール名を、それぞれ、「MOD_A」,「MOD_B_0」,「MOD_B_1」,「MOD_C」とする。また、以下において、モジュール名に着目して説明する場合には、モジュール名「MOD_A」を有するモジュール310を「モジュールMOD_A」と表現し直す。即ち、「モジュール310」と「モジュールMOD_A」は互いに同じ意味である。他のモジュールについても同様の表記法を用いる。
ここで、レジスタ311のセルライブラリからモジュール310のインスタンスBLOCKAが構成され、レジスタ321,322,324およびセレクタ323の各セルライブラリからモジュール320のインスタンスBLOCKB0が構成される。また、レジスタ331,332,334およびセレクタ333の各セルライブラリからモジュール330のインスタンスBLOCKB1が構成され、加算器341およびレジスタ342の各セルライブラリからモジュール340のインスタンスBLOCKCが構成される。これらモジュールのインスタンスBLOCKA,BLOCKB0,BLOCKB1,BLOCKCにより、最上位階層のインスタンスCHIPが構成される。ネットリスト上では、図3に示す配線関係が各インスタンスの接続情報として記述される。
なお、図3では、説明の便宜上、小規模な論理回路を例としているが、本発明は、大規模な論理回路に適用した場合に顕著な効果が得られる。
図4ないし図8に、論理合成ツールにより自動生成されたネットリストの一例を示す。このネットリストは、図3に示す論理回路に対応するものであり、図4は、図3に示す最上位階層のインスタンスCHIPのネットリストを示す。このネットリストは、インスタンスCHIPの下の階層のインスタンスの接続関係を規定し、先頭行の「module」と最終行の「endmodule」との間に具体的情報が記述される。この例では、先頭行の「module」の後に、インスタンス名「CHIP」と、端子宣言文(i_CK,i_RST,i_DIX0,i_DIX1,i_DIY0,i_DIY1,o_D0)が記述されている。この端子宣言文で宣言される端子は、図3に示すインスタンスCHIPの入出力信号(SEL,DIX0,DIX1,DIY0,DIY1)の仮想的な端子(図示なし)に対応している。
また、その第2行目から第7行目には、入出力宣言文が記述されている。この例では、端子「i_DIX0」は4ビット[3:0]の入力端子であることが宣言され、端子「o_D0」は5ビット[4:0]の出力端子であることが宣言されている。さらに、第8行目には、内部配線に使用されるノードを規定する「wire」文が記述され、第9行目から第15行目には、上述のモジュール名「MOD_A」,「MOD_B0」,「MOD_B1」,「MOD_C」を有する図3に示すモジュール310,320,330,340に対応するインスタンスBLOCKA,BLOCKB0,BLOCKB1,BLOCKCの接続関係が記述されている。
図5は、図4のネットリストで参照されるモジュールMOD_A(図3のモジュール310)のネットリストを示す。図5において、「FDPRBQ_2」は、あらかじめ定義されているレジスタのセル名(ライブラリセル名)を表し、「sel_reg_reg」は、ネットリストを自動生成する過程で付与されたユニークなインスタンス名を表す。このネットリストにおいて、「MOD_A」はインスタンスsel_reg_regから構成され、このインスタンスsel_reg_regは、セル名「FDPRBQ_2」で特定されるレジスタとして動作する。このレジスタの動作の詳細は、後述するセルライブラリに記述される。
図6ないし図8に、モジュールMOD_B0(図3に示すモジュール320)、モジュールMOD_B1(図3に示すモジュール330)、モジュールMOD_C(図3に示すモジュール340)のネットリストをそれぞれ示す。これらネットリストの内容も基本的には同様である。
図9に、セルライブラリの一例を示す。このセルライブラリはレジスタの特性を記述したものであり、先頭行には、レジスタのセル名「FDPRBQ_2」と、端子宣言文(Q,CK,D,RN)が記述されている。また、第2行目から第5行目には、端子の入出力宣言文が記述されている。この例では、端子「Q」は出力端子であることが宣言され、端子「CK」,「D」,「RN」は入力端子であることが宣言されている。第6行目から第8行目にはレジスタの機能(論理)が記述されている。この他、必要に応じて遅延やセットアップ/ホールド時間等のタイミングに関する情報が記述される。
図9に示すセルライブラリは、図5ないし図8に示すネットリスト内に記述されたレジスタのインスタンスの情報として参照され、このインスタンスから構成されるモジュールが図4に示す最上位のネットリストで参照されることにより、図3に示す論理回路がシミュレータ上に構築されるようになっている。
ここで、図9に示すセルライブラリの第9行目から第13行目には、本発明の特徴部である、ネットリストからインスタンス名を抽出するためのステートメントが追加記述されている。この例では、出力「Q」を有する内部レジスタのインスタンス名を抽出するためのステートメントが記述されている。以下では、この追加記述されたステートメントを「インスタンス抽出用ステートメント」と称す。
図10を参照して、インスタンス抽出用ステートメントについて更に詳細に説明する。
図10(a)に、内部レジスタのインスタンス名を抽出するためのインスタンス抽出用ステートメントの一例を示す。この例において、先頭行の「`ifdef REG_LIST」は、後述するシミュレータのコマンドラインにオプションとして記述される引数「REG_LIST」を規定し、コマンドライン内に引数「REG_LIST」が存在すると、第2行目以下に記述されるステートメントがシミュレータに実行されてインスタンス名が抽出されるようになっている。即ち、コマンドラインに引数「REG_LIST」を記述するか否かにより、レジスタのインスタンス名を抽出する処理を実行するか否かを任意に切り替えることができる。
第2行目の「initial」は、その後に記述された「$fdisplay」を1回だけ実行することを表す。「$fdisplay」が実行されると、「$display」が処理される。「$display」が処理されると、「%m.Q」なる記述により、インスタンス抽出用ステートメントが追加されたセルライブラリを参照するインスタンスのうち、出力「Q」を有するレジスタのインスタンス名のみがリストアップされる。このリストはファイルポインタ「LIST_MODULE.LIST_FP」によって開かれたファイルに格納される。同様に、第4行目の「initial」の後のステートメントが実行されると、「%m.QN」なる記述部分により、出力「QN」を有するレジスタのインスタンス名のみがリストアップされ、このリストがファイルポインタ「LIST_MODULE.LIST_FP」によって開かれたファイルに格納される。結局、図10(a)に示すインスタンス抽出用ステートメントが実行されることにより、出力「Q」または「QN」を有する全ての内部レジスタのインスタンス名が自動的に抽出されて所定のファイルに格納される。
図10(b)に、メモリのインスタンス名を抽出するためのインスタンス抽出用ステートメントの一例を示す。この例では、「%m.arry」なる記述部分により、メモリ内部の各アドレスに対応するインスタンス名が抽出される。また、この例では、メモリのワード数「16」に関する記述「WORD:16」が設けられており、このワード数と共に上述のメモリ内部の各アドレスに対応するインスタンス名が抽出される。このようにワード数に関する記述を追加することにより、後述するように、メモリの状態値を観測するための処理においてワード数に応じたループ処理が実行され、1回の処理で全アドレスの状態値を出力することが可能になる。
図10に示すインスタンス抽出用ステートメントは、ユーザが観測を希望するインスタンス、即ち抽出すべきインスタンスに対応する全てのセルライブラリに記述される。
上述のネットリスト及びセルライブラリのほかに、論理シミュレータの入力情報101として、シミュレーション対象の論理回路の入力データや期待値データを生成するために使用されるテストパターンを準備する必要がある。このテストパターンについては詳細に説明しないが、ハードウェア記述言語を用いて記述される。
なお、本実施形態では、レジスタおよびメモリの各インスタンス抽出用ステートメントを例として説明したが、これに限定されることなく、抽出すべきインスタンスの種類に応じてインスタンス抽出用ステートメントを適宜準備し、該当するインスタンスのセルライブラリに追加記述すればよい。
以上で、ネットリスト、セルライブラリ、テストパターンについて説明した。
本実施形態では、上述のネットリスト、セルライブラリ、テストパターンの各ファイルに加え、論理シミュレータに一連の処理を実行させるための実行プログラムを準備する。図11に実行プログラムの一例を示す。この実行プログラムは、例えばシェルを用いて作成され、論理シミュレーションの実行に必要とされるネットリスト等の各種の情報を引数として論理シミュレータに受け渡すためのものであって、この引数を受け渡すことのより、論理シミュレータに、インスタンス名のリストを格納するためのファイルを開かせ、シミュレーションを実行させ、その実行結果として得られるインスタンス名のリストを上記ファイルに出力させた後、論理シミュレーションを終了させる。
この実行プログラムの第2行目には、論理シミュレータ本体の実行コマンド「Verilog(登録商標)」を変数「YEXEC_CMD」に格納するためのステートメントが記述されている。第3行目から第5行目には、この実行プログラムに与えられる引数の中に特定の引数「state_observe」があるか否かをチェックするためのステートメントが記述されている。この引数「state_observe」は、論理シミュレーションにおいて論理回路の内部状態を観測するための処理を実行するか否かを指示するフラグとしての意義を有する。なお、引数「state_observe」自体はユーザが任意に取り決めたものである。
上述の引数「state_observe」がある場合の処理は、第8行目から第10行目に記述されており、この処理において、引数「state_observe」がある場合に、上述の変数「YEXEC_CMD」の内容(実行コマンド「Verilog」)とコマンドオプション等とを変数「EXEname」に格納する。この例では、変数「YEXEC_CMD」の内容に加えて、図10に示すインスタンス抽出用ステートメントのファイル「REG_LIST」,「MEM_LIST」を指定するコマンドオプション「+define+REG_LIST+MEM_LIST」と、リストアップされたインスタンス名を格納するためのファイルを開くためのファイルポインタ「LIST_MODULE.v」とが変数「EXEname」に格納される。
図12に、ファイルポインタ「LIST_MODULE.v」の一例を示す。この例に示すファイルポインタによれば、インスタンス名のリストを格納するためのファイルとしてファイル「X_FIND.list」が開かれる。このファイルポインタ「LIST_MODULE.v」は、シミュレーションに先だって予め準備しておく必要はあるが、一度作成しておきさえすれば、シミュレーションの度に作成し直す必要はない。
このファイルポインタの第14行目には、ユーザデータである上述のネットリストとセルライブラリとテストパターンとを変数「EXEname」に格納するためのステートメント「$*」が記述されている。これにより、最終的に、変数「EXEname」には、シミュレータコマンド「Verilog」(=変数「YEXEC」)と、内部観測用のコマンドオプション「+define+REG_LIST+MEM_LIST」およびファイルポインタ「LIST_MODULE.v」と、ネットリスト等のユーザデータとが格納され、インスタンス名を抽出する処理に必要な全ての引数を含むコマンドラインが変数「EXEname」の中に存在することになる。
また、第15行目には、変数「EXEname」に格納されたコマンドラインを実行するステートメントが記述されている。このコマンドラインの実行により、シミュレーションが実行され、このシミュレーションの実行に伴って、レジスタおよびメモリのインスタンス名のリストがファイル「X_FIND.list」に順次格納される。
さらに、第16行目から第21行目には、第15行目のステートメントによるシミュレーションの実行結果として得られるリストを加工処理して内部状態観測用のプログラムファイルを生成するためのコマンドに関するステートメントが記述されている。このコマンドを実行することにより、ファイル「X_FIND.list」に格納されたレジスタおよびメモリの各インスタンス名のリストが、インスタンスの状態値を出力するための関数(task)に組み込まれて、内部状態観測用プログラムファイルとして生成される。
この例では、第19行目のステートメントが、内部レジスタのリストを内部状態観測用の関数(task)に組み込むためのコマンドを表し、第21行目のステートメントが、メモリのリストを内部状態観測用の関数(task)に組み込むためのコマンドを表している。
なお、第23行目のステートメントは、引数「state_observe」がない場合の処理を表し、この場合、上記第8行目から第21行目に記述されたインスタンス名を抽出するための処理は実行されず、シミュレーション本体の実行コマンド「Verilog」のみが実行される。
上述の実行プログラムを実行することにより、この実行プログラム中に引数「state_observe」がある場合、この引数をそのまま論理シミュレータに引き渡さずに、代わりに、第10行目のオプション「+define+REG_LIST+MEM_LIST」とファイルポインタ「LIST_MODULE.v」を引数として引き渡す。これにより、ネットリストからインスタンス名を抽出するための一連の処理と、その処理結果を加工するための処理がシミュレータ上で実行され、その実行結果として、論理回路の内部状態を観測するためのプログラムファイルが出力される。このプログラムファイルが出力された時点で実行プログラムはシミュレーションを終了させるが、出力されたプログラムファイルを用いて、各インスタンスの状態値を観測するためのシミュレーションを改めて実行する必要がある。これについては後述する。
次に、本実施形態に係る論理シミュレーション方法を説明する。
図13に、本論理シミュレーション方法の概要を示す。本論理シミュレーション方法によれば、ネットリスト、テストパターン、およびセルライブラリを入力情報として用いると共にファイル指定リストを参照して第1回目の論理シミュレーションが実行される。これによりレジスタおよびメモリの各インスタンス名を抽出し、レジスタリストおよびメモリリストとして出力する。そして、これらレジスタリストとメモリリストを用いて第2回目の論理シミュレーションが実行され、論理回路を構成するレジスタの状態値のリストと、メモリの状態値のリストとが生成される。これら各状態値のリストから、ユーザが回路の内部状態を把握することが可能になる。この一連の論理シミュレーションは、上述の図11に示す実行プログラムの制御の下に実行される。
以下では、前述の図11に示す実行プログラムの制御による論理シミュレーションの一連の手順を、図14に示すフローに沿って詳細に説明する。
前述した実行プログラムが実行されると、論理シミュレータは、実行プログラムから各種の情報を引数として受け取って第1回目の論理シミュレーションを実行し、この論理シミュレーションにおいて、ネットリストからインスタンス名を抽出するための処理を行う(ステップS1)。このとき、論理シミュレータは、インスタンス名を抽出するためのステートメントが予め記述された図9に例示するセルライブラリを参照して論理シミュレーションを実行する。
ここで、実行プログラムの中に引数「state_observe」があると、インスタンス名のリストを抽出する処理に必要な情報と、このリストを内部状態観測用プログラムに加工するための処理に必要な情報とが、上述の変数「EXEname」に格納される。論理シミュレータは、この変数「EXEname」に格納された情報を引数として受け取り、この引数を参照して論理シミュレーションを実行する。具体的には、論理シミュレータは、引数「REG_LIST」および「MEM_LIST」により特定される図10に示すインスタンス抽出用ステートメントを実行し、図4ないし図8に示すネットリストから内部レジスタとメモリの各インスタンス名を抽出する。
上述のインスタンス名の抽出処理に加え、論理シミュレータは、引数「LIST_MODULE.v」により特定される図12に示すファイルポインタを実行することによりファイル「X_FIND.list」を開き、そして上記抽出したインスタンス名のリストをファイル「X_FIND.list」に格納する。これにより、論理シミュレータに入力された図4ないし図8に示すネットリストから、内部レジスタの全インスタンス名と、メモリの全アドレスのインスタンス名とが自動的に抽出される。図15に、レジスタのインスタンス名のリスト(レジスタリスト)の一例を示す。同図に示す例では、例えば第2行目の「T_CHIP.CHIP.BLOCKB0.\data0_reg_reg[0]」が、ネットリストから抽出されたインスタンス名を表す。
続いて、論理シミュレータは、ネットリストから抽出されたインスタンス名のリストを、このインスタンス名で特定されるインスタンスの状態値を観測するためのステートメントが記述されたファイルに加工し、内部観測用プログラムファイルを生成する(ステップS2)。具体的には、上述のファイル「X_FIND.list」に格納されたインスタンス名を、論理シミュレータがサポートする所定の関数(例えばtask文)に組み込むことにより、上記内部状態観測用プログラムファイルを生成する。本実施形態では、内部状態観測用プログラムファイルとして、3つのファイル「reg_dp.task」,「mem_dp.task」,「mem_dp_all.list」が作成されるものとする。
ここで、ファイル「reg_dp.task」は、レジスタの内部状態観測用プログラムファイルである。また、ファイル「mem_dp.task」は、メモリの各アドレスに対応するインスタン毎の内部状態観測用プログラムファイルであり、1つのアドレスのインスタンスに対して1つのファイル「mem_dp.task」が作成される。さらに、ファイル「mem_dp_all.list」は、メモリ内の個々のアドレスのインスタンスに対応する上述のファイル「mem_dp.task」を1つのファイルに階層化して合成したものである。このように合成されたファイルを準備することにより、全アドレスの状態値を一回のループ処理で出力することが可能になる。
図16に、レジスタの内部状態観測用プログラムファイルの一例を示す。同図に示す例は、Verilog(登録商標)HDLの「task」文に、ステップS1で抽出された内部レジスタのインスタンス名のリストを組み込んだものであり、内部レジスタの各出力毎に「$display」文が1つずつ設けられている。この「$display」文を論理シミュレータが実行することにより、内部レジスタの状態値を標準出力することができる。「$display」の後に記述されたステートメントは、ネットリストから抽出された図15に示すレジスタのインスタンス名のリストに対応している。なお、特に図示しないが、同様にメモリの内部状態観測用プログラムファイルも生成される。ただし、メモリの場合には、1回の処理で全アドレスに対応するインスタンスの値を出力するために、ワード数に相当する回数だけループ処理を繰り返すステートメントが付け加えられる。
続いて、論理シミュレータは、ユーザによるコマンド入力に基づき第2回目の論理シミュレーションを実行し、上述の内部状態観測用プログラムファイルを実行する。この2回目の論理シミュレーションにより、上述の図16に例示する内部状態観測用プログラムファイルが実行され、前述のステップ1で抽出された各インスタンスの状態値が演算される(ステップS3)。この第2回目の論理シミュレーションを実行する時にユーザから論理シミュレータに与えられるコマンドの一例を次に記す。
%yamaha_verilog verilognet testpattern -y veriloglib reg_dp.task mem__dp.task mem_dp_all.list
このコマンドラインにおいて、「yamaha_verilog」は上述の図11に示す実行プログラムのプログラム名を表し、「reg_dp.task」、「mem_dp.task」、及び「mem_dp_all.list」は上述のステップS2で生成された内部状態観測用プログラムファイル名を表す。また、このコマンドラインでは、上述の図11に示す実行プログラムで用いられている引数「state_observe」が削除されている。従って、第2回目の論理シミュレーションでは、内部観測用プログラムファイルを生成するための処理(インスタンス名の抽出処理とリストの加工処理)は省かれる。それ以外の引数については、上述の3つの内部状態観測用プログラムのファイル名が追加されたことを除いて第1回目の実行コマンドでの引数と基本的に同じである。
次に、論理シミュレータは、第2回目の論理シミュレーションの実行中に、指定された任意の時刻にシミュレーションを中断し、そのときのユーザからのコマンド入力に基づき、第2回目のシミュレーションの実行結果を出力する。このとき、ユーザは、コマンド「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」は、互いに独立したコマンドであり、連続して実行させる必要はなく、またその実行順序も任意である。任意の時刻でシミュレーションを中断させ、観測対象に応じたコマンドを入力して実行すればよい。
図17ないし図19に、第2回目の論理シミュレーションの実行結果の表示例を示す。図17は、論理シミュレーションにおいて論理回路が初期化される前の各インスタンスの状態値の表示例を表す。この例では、第6行目の「$stop」文により、時刻「200ns」でシミュレーションが自動的に中断するように設定されている。中断されたときに現れるプロンプト「C1>」に対し、ユーザがコマンド「reg_display.reg_all」を入力すると、「REG List」文に続いて、メモリの全アドレスに対応するインスタンス名と、その状態値がディスプレイに順次的に表示される。この表示内容から、ユーザは、例えばインスタンス「T_CHIP.CHIP.BLOCKA.sel_reg_reg」の出力「Q」は不定「x」であることを把握することができる。
図18は、同一の論理回路を初期化した後の状態値の表示例を示す。この表示例から、ユーザは、時刻「4401ns」において全てのインスタンスの出力「Q」が論理値「0」に初期化された状態にあることを把握できる。図19は、同一の論理回路を初期化した後に、一定時間が経過したときの状態値を表示しており、各インスタンスの状態値が、動作に応じて論理値「0」または論理値「1」となっている。この表示例から、ユーザは、各インスタンスの状態値を把握することができる。
実際の論理回路の検証では、バグ等の存在により論理回路が正常に機能せず、部分的にインスタンスの状態値が不定になり、出力結果のログには、論理値「0」、論理値「1」、不定「x」が混在することが予想される。このようなログの中から、特定の状態値のインスタンスを抽出したい場合、例えばUNIX(登録商標)の「grep」コマンドを利用することができる。このコマンドを実行すれば、例えば状態値が不定値「x」の内部レジスタやメモリアドレスを即座に把握することができ、初期化不良などの解析を容易に行うことができ、不良部分を即座に特定することができる。
なお、論理シミュレータは、インタラクティブにオペレーション可能な機能を備えており、ユーザがシミュレーションを中断してコマンドを任意に発行することが可能となっているため、上述の「$stop」文に代えて、ユーザがキー入力することによりシミュレーションを任意に中断させるようにしてもよい。
レジスタやメモリの値が不定の場合は、シミュレーション結果のログから該当するインスタンス名を抜き出し、これにより、初期化が行われたか否かなどの検証を効率良く行うことができる。レジスタの状態値を出力する際に、状態値が不定値の場合にはその状態値がログに出力される。このため、状態値が不定のインスタンスをログから一括してリストアップすることができ、ログ中の同じ記述を一括して抽出することにより、状態値が不定のレジスタやメモリのインスタンス名を一括して表示させることができる。
上述した実施形態では、シミュレーション方法として本発明を説明したが、シミュレーション用プログラムとして本発明を構成することも可能である。シミュレーション用のプログラムとして構成された本発明は、上述の図14に示す各ステップを実行させるものであり、具体的には、インスタンス名を抽出するためのステートメントが予め記述されたセルライブラリを用いて所定のシミュレータによるシミュレーションを実行することにより、ネットリストからインスタンス名を抽出する第1ステップと、ネットリストから抽出されたインスタンス名を用いて、このインスタンス名で特定されるインスタンスの状態値を観測するためのステートメントが記述されたファイルを生成する第2ステップと、このファイルを前記シミュレータ上で実行し、その実行結果として得られる前記インスタンスの状態を出力する第3ステップとを実行させるものである。
また、上述した実施形態のシミュレーション方法は、上述の図14に示すステップを処理するための機能ブロックを有するシミュレーション装置として構成することも可能である。シミュレーション装置として構成された本発明は、インスタンス名を抽出するためのステートメントが予め記述されたセルライブラリを用いて所定のシミュレータによるシミュレーションを実行することにより、ネットリストからインスタンス名を抽出する第1処理部と、前記ネットリストから抽出されたインスタンス名を用いて、該インスタンス名で特定されるインスタンスの状態値を観測するためのステートメントが記述されたファイルを生成する第2処理部と、このファイルを前記シミュレータ上で実行し、その実行結果として得られるインスタンスの状態を出力する第3処理部とを具備するものである。
以下に、本実施形態を要約する。
セルライブラリにインスタンス抽出用ステートメントを組み込むことにより、論理シミュレータに入力されるネットリスト中の全てのレジスタやメモリのインスタンス名を自動的にリストアップする。そのリストを基に内部状態観測用の関数(例えばVerilog-HDLのtask)を生成する。ネットリストからインスタンス名をリストアップし、そのリストを内部状態観測用の関数に組み込むまでは、実行プログラムにより自動的に行われる。内部状態観測用の関数を実行することにより、シミュレーション中の任意の時刻における全レジスタまたはメモリの状態値を観測する。
以下に、本実施形態の効果をまとめる。
(1)セルライブラリにインスタンス抽出用ステートメントと追加すると共にシミュレーション結果のログを加工することにより、自動的に、レジスタやメモリのインスタンス名を取得し、その情報を基にレジスタやメモリの状態値を観測することができる。従って、人手作業によりインスタンス名を調べる必要がなくなり、論理回路の検証を短期間で行うことができる。
(2)メモリの全アドレスについて状態値を観測することもできる。メモリの全アドレスのうち、一部のアドレスの値が不定の場合、ログからそれらのアドレスを選び出すことにより、レジスタと同様に、メモリが初期化されているか否かを容易に検証することができる。
(3)シミュレータを任意の時刻で停止させることができるため、任意の時刻におけるインスタンスの値を観測することができ、例えば初期化後に初期化が行われたかどうか、或るオペレーション後の値はどうなっているか等を簡単に把握することができる。
(4)Verilog-HDL記述によりテストパターン内で期待値を与えることにより、期待値と不一致のときにシミュレータを停止させることも可能である。そして、このときのレジスタやメモリの状態値を観測することにより、デバッグを効率的に行うことも可能になる。
(5)検証を容易に行うことができ、開発期間を短縮することが可能になる。
(6)Verilog(登録商標)-HDL等のハードウェア記述言語に関する知識がなくても、ネットリスト中のインスタンスの状態値を観測することができる。
以上、この発明の一実施形態を説明したが、この発明は、上述の実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲で変形が可能である。例えば、上述の実施形態では、理解を容易にするため、論理シミュレーションを2回に分けて実行するものとしたが、これに限定されることなく、1つの実行プログラムで、インスタンス名の抽出から状態値の出力までの一連の処理を実行するように構成することも可能である。
本発明の実施形態に係る論理シミュレータの概要とその入力情報およびシミュレーション結果を説明するための図である。 本発明の実施形態に係るインスタンスの階層化を説明するための図である。 本発明の実施形態に係るインスタンスが階層化された論理回路の一例を示す回路図である。 本発明の実施形態に係る最上位階層のネットリストの一例(CHIP)を示す図である。 本発明の実施形態に係る下位階層のネットリストの一例(MOD_A)を示す図である。 本発明の実施形態に係る下位階層のネットリストの一例(MOD_B_0)を示す図である。 本発明の実施形態に係る下位階層のネットリストの一例(MOD_B_1)を示す図である。 本発明の実施形態に係る下位階層のネットリストの一例(MOD_C)を示す図である。 本発明の実施形態に係るセルライブラリの一例を示す図である。 本発明の実施形態に係るインスタンス抽出用ステートメントの一例を示す図である。 本発明の実施形態に係る実行プログラムの一例を示す図である。 本発明の実施形態に係るファイルポインタの一例を示す図である。 本発明の実施形態に係る論理シミュレーションの概要を示す図である。 本発明の実施形態に係る論理シミュレーションの手順を示すフロー図である。 本発明の実施形態に係る内部レジスタのリストの一例を示す図である。 本発明の実施形態に係る内部状態観測用プログラムファイルの一例を示す図である。 本発明の実施形態に係る論理シミュレーション方法によるシミュレーション結果(論理回路を初期化する前)の一例を示す図である。 本発明の実施形態に係る論理シミュレーション方法によるシミュレーション結果(論理回路を初期化した後)の一例を示す図である。 本発明の実施形態に係る論理シミュレーション方法によるシミュレーション結果(論理回路を初期化して一定時間経過した後)の一例を示す図である。
符号の説明
100;論理シミュレータ、101;入力情報、102;シミュレーション結果、310,320,330,340;モジュール、311,321,322,324,331,332,334,342;レジスタ、323,333;セレクタ、341;加算器、S1〜S3;ステップ。

Claims (6)

  1. インスタンス名を抽出するためのステートメントが予め記述されたセルライブラリを用いて所定のシミュレータによるシミュレーションを実行することにより、該シミュレータに入力されたネットリストから該ネットリストで使用されているインスタンス名を抽出する第1ステップと、
    前記ネットリストから抽出されたインスタンス名を用いて、該インスタンス名で特定されるインスタンスの状態値を観測するためのステートメントが記述されたファイルを生成する第2ステップと、
    前記ファイルを前記シミュレータ上で実行し、その実行結果として得られる前記インスタンスの状態を出力する第3ステップと、
    を含む論理シミュレーション方法。
  2. 前記第1ステップでは、前記インスタンス名として、レジスタまたはメモリのインスタンス名を抽出することを特徴とする請求項1に記載された論理シミュレーション方法。
  3. 前記第2ステップでは、前記シミュレータがサポートする所定の関数に、第1ステップで抽出されたインスタンス名を組み込むことにより前記ファイルを生成することを特徴とする請求項1または2の何れか1項に記載された論理シミュレーション方法。
  4. 前記第3のステップでは、前記実行結果として、前記インスタンスの状態が不定か否かを表す情報を出力することを特徴とする請求項1ないし3の何れか1項に記載された論理シミュレーション方法。
  5. インスタンス名を抽出するためのステートメントが予め記述されたセルライブラリを用いて所定のシミュレータによるシミュレーションを実行することにより、該シミュレータに入力されたネットリストから該ネットリストで使用されているインスタンス名を抽出する第1処理部と、
    前記ネットリストから抽出されたインスタンス名を用いて、該インスタンス名で特定されるインスタンスの状態値を観測するためのステートメントが記述されたファイルを生成する第2処理部と、
    前記ファイルを前記シミュレータ上で実行し、その実行結果として得られる前記インスタンスの状態を出力する第3処理部と、
    を具備する論理シミュレーション装置。
  6. インスタンス名を抽出するためのステートメントが予め記述されたセルライブラリを用いて所定のシミュレータによるシミュレーションを実行することにより、該シミュレータに入力されたネットリストから該ネットリストで使用されているインスタンス名を抽出する第1ステップと、
    前記ネットリストから抽出されたインスタンス名を用いて、該インスタンス名で特定されるインスタンスの状態値を観測するためのステートメントが記述されたファイルを生成する第2ステップと、
    前記ファイルを前記シミュレータ上で実行し、その実行結果として得られる前記インスタンスの状態を出力する第3ステップと、
    を実行させるための論理シミュレーション用プログラム。
JP2004218930A 2004-07-27 2004-07-27 論理シミュレーション方法、論理シミュレーション装置、論理シミュレーション用プログラム Expired - Fee Related JP4400358B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2004218930A JP4400358B2 (ja) 2004-07-27 2004-07-27 論理シミュレーション方法、論理シミュレーション装置、論理シミュレーション用プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2004218930A JP4400358B2 (ja) 2004-07-27 2004-07-27 論理シミュレーション方法、論理シミュレーション装置、論理シミュレーション用プログラム

Publications (2)

Publication Number Publication Date
JP2006039950A JP2006039950A (ja) 2006-02-09
JP4400358B2 true JP4400358B2 (ja) 2010-01-20

Family

ID=35904885

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004218930A Expired - Fee Related JP4400358B2 (ja) 2004-07-27 2004-07-27 論理シミュレーション方法、論理シミュレーション装置、論理シミュレーション用プログラム

Country Status (1)

Country Link
JP (1) JP4400358B2 (ja)

Also Published As

Publication number Publication date
JP2006039950A (ja) 2006-02-09

Similar Documents

Publication Publication Date Title
Chen et al. A scalable software-based self-test methodology for programmable processors
US6061283A (en) Semiconductor integrated circuit evaluation system
US8392859B2 (en) Method and system for debugging using replicated logic and trigger logic
Graham et al. Instrumenting bitstreams for debugging FPGA circuits
US7478346B2 (en) Debugging system for gate level IC designs
US7962869B2 (en) Method and system for debug and test using replicated logic
US6754862B1 (en) Gaining access to internal nodes in a PLD
CN112949233B (zh) Fpga芯片的自动化开发方法及装置、电子设备
EP1913410B1 (en) Method and system for debug and test using replicated logic
JP2009230451A (ja) 等価性検証方法、等価性検証プログラム及び等価性検証プログラムの生成方法
JP2006323706A (ja) 半導体試験用プログラムデバッグ装置
WO2019056935A1 (zh) 基于ft4222的spi闪存测试系统及方法
JP4213306B2 (ja) 半導体試験用プログラムデバッグ装置
WO2009022276A2 (en) Software-based verification of system-on-chip direct interconnect through additional registers
JP4400358B2 (ja) 論理シミュレーション方法、論理シミュレーション装置、論理シミュレーション用プログラム
US7703054B2 (en) Circuit emulation and debugging method
JP2004145670A (ja) テストベンチ生成方法、テストベンチ生成装置、及びコンピュータプログラム
Ivannikov Comparative analysis of methods for digital system debugging at the design stage
Komichi Design Article S. Komichi
Narnur Model Development, Synthesis and Validation Using the Modeler's Assistant
JPH0319085A (ja) 論理設計支援装置
UUT 11. FUNCTIONAL MODELS AND TESTBENCHES
Dushina et al. Semi-formal test generation for a block of industrial DSP
Wouters et al. A versatile, multipurpose, high-speed digital data acquisition and generation systemPULSAR'
Trung et al. Soft core based model of a microcomputer family

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20070531

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20091002

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20091006

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20091019

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20121106

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees