(57)【要約】【課題】ＨＤＬで記述された検証対象回路のソフトウェアレベルでの検証処理時間を短縮することができるシミュレーション装置を提供する。【解決手段】所定の回路を表すＨＤＬ等による記述情報を用いてシミュレーションを行う装置であって、検証対象の回路を表す情報３１１と、この情報３１１によって表される検証対象の回路に対して接続され、検証対象回路との間で、自回路内で自動的に生成した検証用情報の入力又は出力を行うテストベクタ回路を表す情報３１２とを一体として記述情報３１を構成する。【選択図】図１
2006268606.tif 000002
【特許請求の範囲】
【請求項１】
所定の回路を表す記述情報を用いてシミュレーションを行う装置であって、
検証対象の回路を表す検証対象回路情報と、
検証対象回路情報によって表される検証対象の回路に対して接続され、検証対象回路との間で、自回路内で自動的に生成した検証用情報の入力又は出力を行う回路を表す検証情報生成回路情報と
を一体として前記記述情報を構成したことを特徴とするシミュレーション装置。
【請求項２】
所定の回路を表す記述情報を用いてシミュレーションを行う装置であって、
クロック信号を発生するクロック発生回路を表す第１の要素と、
前記クロック信号に応じて作動するように記述された検証対象の回路を表す第２の要素と、
第２の要素によって表された検証対象の回路に対するデータ入出力命令やその際用いられるデータを複数組記憶した記憶回路を表す第３の要素と、
第３の要素によって表された記憶回路から命令やデータを順次読み込み、その命令に基づいて、第２の要素によって表された検証対象の回路に対するデータ入力指示やデータ出力指示を、前記クロック信号に同期して発行する信号処理回路を表す第４の要素と
から前記記述情報が構成されていることを特徴とするシミュレーション装置。
【請求項３】
前記第４の要素によって表された信号処理回路が、前記第３の要素によって表された記憶回路に記憶されている命令に基づいて、データ出力状態、データ入力状態、待機状態、及び停止状態の４つの作動態様を取るものであることを特徴とする請求項２記載のシミュレーション装置。
【請求項４】
前記各要素が論理合成可能なレベルで記述されていることを特徴とする請求項２又は３記載のシミュレーション装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、ハードウェア記述言語等の所定の言語で記述された回路記述情報を用いて回路をシミュレーションする際に用いて好適なシミュレーション装置に関する。
【背景技術】
【０００２】
従来、ＬＳＩ（Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）の論理検証は、ＥＷＳ（Ｅｎｇｉｎｅｅｒｉｎｇ  Ｗｏｒｋｓｔａｔｉｏｎ）上で動作するソフトウエアシミュレータによる検証が主流である。シミュレーションの際にＬＳＩなどのハードウェアを記述する言語としては、ＨＤＬ（Ｈａｒｄｗａｒｅ  Ｄｅｓｃｒｉｐｔｉｏｎ  Ｌａｎｇｕａｇｅ）などが用いられている。ＨＤＬによるＬＳＩの設計手順では、一般に、ＨＤＬで設計しようとするＬＳＩをＲＴＬ（Ｒｅｇｉｓｔｅｒ  Ｔｒａｎｓｆｅｒ  Ｌｅｖｅｌ）で記述している。ＲＴＬは、回路を、レジスタと組み合わせ論理回路とから構成するレベルのことであり、このレベルでの記述によってＬＳＩ内のレジスタ間の動作が定義される。ＲＴＬで記述したＬＳＩ記述に対してはＨＤＬシミュレータによって論理的な動作が検証される。検証が終了すると、次に論理合成を行って（すなわち論理回路によって記述可能なレベルに展開することで）、ＨＤＬによる記述から論理回路を生成する。その後、各回路モジュールのレイアウトを行い、最後にＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）、ＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）等として実装が行われる。
【０００３】
ＨＤＬで記述された回路情報の検証をＨＤＬシミュレータ（シミュレーションプログラム）によって行う際には、テストパターンやテストベンチを予め用意する必要がある。テストパターンは、検証用の入力信号パターンである。テストベンチは、周辺回路の動作等を模擬するための検証用プログラムである。この検証用プログラムがＨＤＬシミュレータによって実行されることで、テスト用信号の入出力が実行されたり、出力結果の比較検証が行われたりする。
【０００４】
図１１は、この発明の背景となるシミュレーション装置の構成を示すブロック図である。シミュレーションプログラム１は、ＥＷＳ等のコンピュータ上で実行され、データベース２にアクセスしながら検証対象の回路の動作をシミュレート（検証）する。データベース２にはファイル２１とファイル２２が格納されている。ファイル２１は、検証対象の回路をＨＤＬによって記述したデータから構成されている。ファイル２２は、テストベンチを記述した複数のファイルから構成されている。ファイル２２を構成するファイルの一例を図１２〜図１４に示した。
【０００５】
図１２は、テストベンチのメインルーチンとなるプログラムを記述したファイル２２１を示している。ファイル２２１において、１０行目にある「ｉｎｉｔｉａｌ  ｂｅｇｉｎ」と４７行目にある「ｅｎｄ」がＣ言語の関数の「（  ）」と同じ意味を有している。また、２５行目等にある「ｔ＿ｗｒｉｔｅ」は、検証対象がＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）等のデジタル信号処理装置である場合に、ＣＰＵインターフェースへのデータ書き込みを模擬する関数である。３２行目等にある「ｔ＿ｒｅａｄ」は、ＣＰＵインターフェースからのデータリードを模擬する関数である。そして、４６行目の「＄ｆｉｎｉｓｈ」が、シミュレーション終了を指示する命令である。
【０００６】
図１３は、図１２の２５行目等にある関数「ｔ＿ｗｒｉｔｅ」の内容を記述したサブルーチンのファイル２２２であり、図１４は、図１２の３２行目等にある関数「ｔ＿ｒｅａｄ」の内容を記述したサブルーチンのファイル２２３である。例えば、図１３において、１１行目の「ｉｎｐｕｔ  ［１３：０］  ａｄｄｒｅｓｓ；」は、関数「ｔ＿ｗｒｉｔｅ」の１番目の引数が１４ビット（［１３：０］）のアドレス信号（ａｄｄｒｅｓｓ）であることを示している。また、１７行目〜１９行目は、チップセレクト信号（ＣＳ＿Ｎ）に１ビットの「０」を出力し、アドレスバスＡにアドレス（ａｄｄｒｅｓｓ)の値を出力し、データバス（ｏｕｔ＿ｄａｔａ）にデータ（ｗｒｉｔｅ＿ｄａｔａ）を出力するという記述である。
【０００７】
図１１のシミュレーションプログラム１は、図１２〜図１４のように記述されたテストベンチ２２における各ステップを逐次実行する。テストベンチ２２を実行すると、検証対象の回路に対して所定の入力が与えられ、検証対象の出力を見て次の入力が選択され、さらに検証対象の出力を見て所定のデータが所定のファイルに格納されるといった処理が行われる。そして、検証対象の出力を見たり、所定の設定に従って、シミュレーションが終了される。その際、入力の付与や選択、出力のファイルへの格納は、繰り返し実行される。
【０００８】
従来のＨＤＬによるシミュレーション装置では、テストベンチの実行の際に、実行メモリ容量の制限等のため、検証処理の途中で、所定のファイルからデータの読み込みこんだり、出力データを所定のファイルへ書き込みんだりする処理が、複数回発生する場合があった。このようなファイルの読み書きには一定の時間を必要とするため、検証処理時間が比較的長くなるという場合があった。
【０００９】
例えば特許文献１には、そのような課題の解決を図った装置の一例が記載されている。特許文献１に記載されている装置では、テストベンチを論理合成可能なデータに変換して、それをプログラマブルデバイスにマッピングすることで、テストベンチによるソフトウェア処理をハードウェア化できるようにしている。
【００１０】
なお、ＨＤＬによる回路の検証方法については、特許文献２〜特許文献５にテストベクタの作成手法等の技術が記載されている。
【特許文献１】特許第３１６２３１６号公報
【特許文献２】特許第２８０９６３１号公報
【特許文献３】特開２００２−４９６５５号公報
【特許文献４】特開２００１−３１８９５９号公報
【特許文献５】特開２００１−１４３６５号公報
【発明の開示】
【発明が解決しようとする課題】
【００１１】
特許文献１に記載されている装置では、ＨＤＬによるシミュレーションで検証された検証対象回路を実機に実装した後の検査等の処理の効率化を図ったものである。そのため、ソフトウェアによるテストベンチを用いた検証処理については対策が図られていなかった。つまり、テストベンチを用いた検証処理においては、ファイルへのアクセス等によって処理時間が長くなるという問題が残されていた。
【００１２】
この発明は、このような事情に鑑み、ＨＤＬで記述された検証対象回路のソフトウェアレベルでの検証処理時間を短縮することができるシミュレーション装置を提供することを課題とする。
【課題を解決するための手段】
【００１３】
上記の課題を解決するために請求項１記載の発明は、所定の回路を表す記述情報を用いてシミュレーションを行う装置であって、検証対象の回路を表す検証対象回路情報と、検証対象回路情報によって表される検証対象の回路に対して接続され、検証対象回路との間で、自回路内で自動的に生成した検証用情報の入力又は出力を行う回路を表す検証情報生成回路情報とを一体として前記記述情報を構成したことを特徴とする。
【００１４】
また、請求項２記載の発明は、所定の回路を表す記述情報を用いてシミュレーションを行う装置であって、クロック信号を発生するクロック発生回路を表す第１の要素と、前記クロック信号に応じて作動するように記述された検証対象の回路を表す第２の要素と、第２の要素によって表された検証対象の回路に対するデータ入出力命令やその際用いられるデータを複数組記憶した記憶回路を表す第３の要素と、第３の要素によって表された記憶回路から命令やデータを順次読み込み、その命令に基づいて、第２の要素によって表された検証対象の回路に対するデータ入力指示やデータ出力指示を、前記クロック信号に同期して発行する信号処理回路を表す第４の要素とから前記記述情報が構成されていることを特徴とする。
【００１５】
また、請求項３記載の発明は、前記第４の要素によって表された信号処理回路が、前記第３の要素によって表された記憶回路に記憶されている命令に基づいて、データ出力状態、データ入力状態、待機状態、及び停止状態の４つの作動態様を取るものであることを特徴とする。
【００１６】
また、請求項４記載の発明は、前記各要素が論理合成可能なものとして構成されていることを特徴とする。
【発明の効果】
【００１７】
請求項１記載の発明によれば、検証対象の回路と、検証情報生成回路情報とを一体として記述情報が構成されていて、かつ検証用情報が検証情報生成回路内で自動的に生成されるようになっている。そのため、その記述情報を用いて検証処理を行う場合には、検証用入力情報等、外部から入力する情報の量を少なくすることができる。したがって、テストベンチ等のプログラムの容量を小さくすることができ、検証処理時間を容易に短縮することができる。
【００１８】
また、請求項２又は５に記載の発明によれば、検証対象の回路に対するデータ入力指示やデータ出力指示が、クロック信号に同期して動作する信号処理回路によって発行されるので、記述情報を用いて検証処理を行う際に、検証用入力情報等、外部から入力する情報の量を少なくすることができる。したがって、テストベンチ等のプログラムの容量を小さくすることができ、検証処理時間を容易に短縮することができる。また、記憶回路内に記憶する情報によって信号処理回路の動作が設定されるので、記憶回路の記憶内容（記憶データ）を変更するだけで検証用情報の内容を容易に変更することができる。
【００１９】
また、請求項３記載の発明によれば、信号処理回路が、データ出力状態、データ入力状態、待機状態、及び停止状態の４つの状態で動作するので、構成を単純化することが容易であり、また、例えば、待機状態の時間を調節することで検証処理のタイミング調整が容易であったり、停止状態を設けることによって検証処理の終了を容易に把握することができたりする。
【００２０】
また、請求項４記載の発明によれば、各要素が論理合成可能なレベルで記述されているので、ＦＰＧＡ等のマッピングデータを容易に生成することができる。
【発明を実施するための最良の形態】
【００２１】
以下、図面を用いてこの発明の実施形態を説明する。
図１は、この発明の第１の実施形態にかかるシミュレーション装置の構成を示すブロック図である。同図に示すシミュレーション装置は、ＥＷＳ等のコンピュータにおいて所定のＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）で実行されるシミュレーションプログラム１と、シミュレーションプログラム１がアクセスするデータベース２とから構成されている。シミュレーションプログラム１は、ＨＤＬによって記述された回路のシミュレーションを行うプログラムであり、ＶＨＤＬ（Ｖｅｒｙ  Ｈｉｇｈ  Ｓｐｅｅｄ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ  ＨＤＬ）、Ｖｅｒｉｌｏｇ  ＨＤＬ等の種々の仕様で実用化されている。
【００２２】
データベース２内にはＨＤＬによって記述された回路情報から構成されている回路情報ファイル３１と、テストベンチの記述情報から構成されているテストベンチファイル３２とが格納されている。回路情報ファイル３１には、ＨＤＬでＲＴＬ（レジスタトランスファレベル）で記述されたものであって、検証対象の回路を表す検証対象回路情報３１１と、テストベクタ生成回路を表すテストベクタ生成回路情報３１２とが、所定の接続定義情報によって一体として接続された状態で含まれている。テストベクタ生成回路情報３１２によって表されるテストベクタ生成回路は、検証対象回路情報３１１によって表される検証対象の回路の所定の入出力端子に対して接続されている入出力端子を有していて、検証対象回路との間でテストベクタ生成回路内で自動的に生成した検証用情報の入力又は出力を行う機能を有している。この実施形態では、テストベクタ生成回路情報３１２によって表されるテストベクタ生成回路によって検証用の入力信号等のテストベクタが自動的に生成される。したがって、テストベンチファイル３２の内容は、テストベクタ生成回路を起動する過程と、テストベクタ生成回路等の出力信号を見てシミュレーションを終了する過程とを実行するためのものが主要な過程（ステップ）となる。すなわち、検証対象回路に対するデータ入出力のための過程（ステップ）は基本的に必須の要素ではない。
【００２３】
なお、この明細書において、検証対象回路情報３１１によって表される検証対象の回路とは、ＬＳＩ等の回路の本来の機能（例えば製品化する際に実装する機能）を実現する部分の回路を意味するものとする。
【００２４】
図２は、図１の回路情報ファイル３１が表す回路（仮想回路）３１Ｃを示すブロック図である。回路３１Ｃは、検証対象回路情報３１１によって表される検証対象回路３１１Ｃと、テストベクタ生成回路情報３１２によって表されるテストベクタ生成回路３１２Ｃとから構成されている。この場合、検証対象回路３１１Ｃは、アドレスバス（Ａ）、データバス（ｏｕｔ＿ｄａｔａ）等からなるＣＰＵインターフェースを持ち、ＣＰＵインターフェースを介した外部からの制御信号によって内部設定を行い、クロック信号（ＳＹＣＫ、ＤＴＣＫ等）に同期して動作するＬＳＩであるとする。
【００２５】
テストベクタ生成回路３１２Ｃは、インストラクションメモリ３１２１、簡易ＣＰＵ３１２２及びクロック発生回路３１２３から構成されている。インストラクションメモリ３１２１は、図１１の従来のテストベンチ２２で検証対象回路３１１ＣのＣＰＵインターフェースへ与えられる値をＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）化して記憶するとともに、簡易ＣＰＵ３１２２においてその値の入出力等の動作のために用いられるインストラクション（命令）を複数組記憶した記憶回路である。簡易ＣＰＵ３１２２は、インストラクションメモリ３１２１から命令やデータ（以下、命令データとする。）を順次読み込み、内部にあるステートマシン等を制御し、クロック発生回路３１２３から供給されるクロック信号（ＣＰＵＣＬＫ）のタイミングに同期して、検証対象回路３１１Ｃに対するデータ入力指示やデータ出力指示を発行する。クロック発生回路３１２３は、シミュレーションプログラム１によって供給される所定のタイミング信号又は自回路内に記述されている発振回路と、分周回路等の回路から構成されていて、クロック信号（ＣＰＵＣＬＫ、ＳＹＣＫ、ＤＴＣＫ等）を発生する。図２では、検証対象回路３１１Ｃに対してクロック信号ＳＹＣＫ、ＤＴＣＫが供給され、インストラクションメモリ３１２１及び簡易ＣＰＵ３１２２へはクロック信号ＣＰＵＣＬＫが供給されている。ただし、これらのクロック信号は少なくとも互いに同期していて、場合によって同一のクロック信号（例えばＣＰＵＣＬＫ＝ＳＹＣＫ）であってもよい。
【００２６】
また、検証対象回路３１１Ｃと簡易ＣＰＵ３１２２へはリセット信号ＲＳＴ＿Ｎが供給されるようになっている。このリセット信号ＲＳＴ＿Ｎが「０」（Ｌｏｗ）レベルになった場合、各回路は初期化される。図２に示す回路における他の各信号の機能は次の通りである。各信号の入出力方向は矢印の向きである。ただし、この図に示すデータバスやアドレスバスのバス幅（ビット数）や、チップセレクト等の制御信号については適宜変更可能であり、以下の例はこの実施の形態における一設計値である。
【００２７】
インストラクションメモリチップセレクト信号（ｉｎｓｔｍｅｍ＿ｃｓｎ＿ｒ）は、インストラクションメモリ３１２１のチップセレクト信号であり、インストラクションメモリ３１２１を選択する際に「０」レベルにセットされる。インストラクションメモリアドレス信号（ｉｎｓｔｍｅｍ＿ａｄｒ＿ｒ）は、インストラクションメモリ３１２１のアドレス信号であり、ビット幅が１０ビットの信号列であるとする。すなわち、インストラクションメモリ３１２１は１０２４ワードの記憶領域を有している。インストラクションメモリデータ信号（ｍｅｍｄ）は、インストラクションメモリ３１２１のデータ信号であり、ビット幅が３５ビットの信号列である。
【００２８】
チップセレクト信号（ＣＳ＿Ｎ）は検証対象回路３１１Ｃのチップセレクト信号である。アドレスバス（Ａ）は検証対象回路３１１Ｃ及び簡易ＣＰＵ３１２２間の１４ビットのアドレス信号である。データバス（ｄａｔａ＿ｏｕｔ）は検証対象回路３１１Ｃ及び簡易ＣＰＵ３１２２間の１６ビットのデータ信号である。ライトイネーブル信号（ＷＲＨ＿N／ＷＲＬ＿Ｎ）は、検証対象回路３１１Ｃに対してデータの書き込みを指示する信号である。２ビットの信号としているのは、例えば検証対象回路３１１Ｃのデータバス（ｄａｔａ＿ｏｕｔ）を時分割して使用することでバス幅を２倍の３２ビットとすることができるような使い方にも対応できるようにするためである。その場合には、各信号が上位・下位のどちらのデータを書き込んでいるかということを示すために用いられる。リードイネーブル信号（ＲＤ＿Ｎ）は、検証対象回路３１１Ｃに対して検証対象回路３１１Ｃからのデータの読み出しを指示する信号である。出力データイネーブル信号（ｄｔｏｅｎ）は、簡易ＣＰＵ３１２２が出力するデータが準備できたことを示す信号である。
【００２９】
ウエイト信号（ＷＡＩＴ＿Ｎ）は、検証対象回路３１１Ｃが待機状態であることを示す信号であり、レディ信号（ＲＥＡＤＹ＿Ｎ）は、検証対象回路３１１Ｃが準備のできた状態であることを示す信号である。シミュレーション終了信号（ｏ＿ｅｎｄ）は、検証処理が終了したことをシミュレーションプログラム１に対して通知するためのフラグである。この実施の形態では、簡易ＣＰＵ３１２２がインストラクションメモリ３１２１からシミュレーション終了命令を受け取ったときに「１」にセットされる。
【００３０】
次に、図３〜図６を参照して、図２の簡易ＣＰＵ３１２２の仕様について説明する。図３は、簡易ＣＰＵ３１２２の内部構成を説明するためのブロック図である。図４は、簡易ＣＰＵ３１２２が実行可能な命令の種類の一覧を示す図である。図５は、インストラクションメモリ３１２１内のデータの１ワード内の各ビットの内訳を説明するための図である。そして、図６は、簡易ＣＰＵ３１２２の動作の状態遷移図である。
【００３１】
図２の簡易ＣＰＵ３１２２は、図３に示すように、ステートマシンＳＴ１と、複数のレジスタＲ１〜Ｒ３及びＲ１０〜Ｒ２０を有して構成されている。ステートマシンＳＴ１は、内部に図示していない複数のレジスタやカウンタ、比較回路等を有して構成されている。ステートマシンＳＴ１は、インストラクションメモリ３１２１から読み出された３５ビットの命令データのうち、上位３ビットで表される命令（ｉｎｓｔｒｕｃｔｉｏｎ）（ｍｅｍｄ［３４：３２］）を入力し、図４に示す６種類の命令を実行するため、図６に示すような四角で囲って示す１６の状態（ステップ）を取りながら動作する。
【００３２】
レジスタＲ１及びＲ２は、ウエイト信号（ＷＡＩＴ＿Ｎ）及びレディ信号（ＲＥＡＤＹ＿Ｎ）を入力するための各１ビットのレジスタである。レジスタＲ３は、データバス（ｄａｔａ＿ｏｕｔ）を介して入力したデータを保持するための１６ビットのレジスタである。
【００３３】
レジスタＲ１０は、インストラクションメモリチップセレクト信号（ｉｎｓｔｍｅｍ＿ｃｓｎ＿ｒ）を出力するための１ビットのレジスタである。レジスタＲ１１は、インストラクションメモリアドレス信号（ｉｎｓｔｍｅｍ＿ａｄｒ＿ｒ）を出力するための１０ビットのレジスタである。レジスタＲ１２は、シミュレーション終了信号（ｏ＿ｅｎｄ）を出力するための１ビットのレジスタである。レジスタＲ１３は、３２ビットのカウンタ機能を備えたレジスタであり、設定された値をクロック信号（ＣＰＵＣＬＫ）に同期して１ずつデクリメントする。レジスタＲ１４は、チップセレクト信号（ＣＳ＿Ｎ）を出力するための１ビットのレジスタである。レジスタＲ１５は、アドレスバス（Ａ）にアドレス信号を出力するための１４ビットのレジスタである。レジスタＲ１６及びＲ１７は、ライトイネーブル信号（ＷＲＨ＿Ｎ）及び（ＷＲＬ＿Ｎ）を出力するための各１ビットのレジスタである。レジスタＲ１８は、リードイネーブル信号（ＲＤ＿Ｎ）を出力するための１ビットのレジスタである。レジスタＲ１９は、データバス（ｄａｔａ＿ｏｕｔ）を介して出力するデータを保持するための１６ビットのレジスタである。そして、レジスタＲ２０は、出力データイネーブル信号（ｄｔｏｅｎ）を出力するための１ビットのレジスタである。
【００３４】
図２の簡易ＣＰＵ３１２２が実行可能な命令は、図４に示すＮＯＰ（Ｎｏ Ｏｐｅｒａｔｉｏｎ）命令（ＩＮＳＴ＿ＮＯＮ）、書き込み命令（ＩＮＳＴ＿WＲ）、読み出し命令（ＩＮＳＴ＿ＲＤ）、ウエイト命令（ＩＮＳＴ＿ＷＡＩＴ）、シミュレーション終了命令（ＩＮＳＴ＿ＥＮＤ）、及びコンペアリード命令（ＩＮＳＴ＿ＲＤＣＭＰ）の６種類である。これらの命令は、図１２に示すテストベンチプログラムの各処理に対応するものであり、例えば、図１２のファイル２２１の１８行目等にある関数ｔ＿ｗｒｉｔｅが書き込み命令（ＩＮＳＴ＿WＲ）に、３２行目等にある関数ｔ＿ｒｅａｄが読み出し命令（ＩＮＳＴ＿ＲＤ）に、１９行目にある関数ｔ＿nＣＬＫ＿ｗａｉｔがウエイト命令（ＩＮＳＴ＿ＷＡＩＴ）に、４６行目にある命令＄ｆｉｎｉｓｈがシミュレーション終了命令（ＩＮＳＴ＿ＥＮＤ）に、そして、３３行目〜３５行目等にある関数ｔ＿ｒｅａｄによって読み出した値が所定の値と一致するまで読み出しを繰り返し実行する処理がコンペアリード命令（ＩＮＳＴ＿ＲＤＣＭＰ）に、それぞれ対応している。つまり、図１２のファイル２２１に記述されたテストベンチによって実行される検証用情報に関する処理を、簡易ＣＰＵ３１２２がインストラクションメモリ３１２１に記憶されている命令を実行する処理に置き換えることができるのである。
【００３５】
なお、図２のインストラクションメモリ３１２１は１ワードが３５ビット［３４：０］で構成されているが、その内訳は図５に示すようになっている。インストラクションメモリ３１２１のワードデータ（命令データ）の上位３ビット［３４：３２］は命令の種類を表している。例えば上位３ビットが「００１」の場合は書き込み命令、「０１０」の場合は読み出し命令である。図２のインストラクションメモリ３１２１から簡易ＣＰＵ３１２２へのデータ出力は、簡易ＣＰＵ３１２２がインストラクションメモリチップセレクト信号（ｉｎｓｔｍｅｍ＿ｃｓｎ＿ｒ）と、インストラクションメモリアドレス信号（ｉｎｓｔｍｅｍ＿ａｄｒ＿ｒ）とをクロック信号（ＣＰＵＣＬＫ）に同期して制御することで行われる。
【００３６】
簡易ＣＰＵ３１２２は、リセット信号（ＲＳＴ＿Ｎ）が「０」となった時、非同期リセットされ、図３のレジスタＲ１１を「０」にリセットしてインストラクションメモリアドレス（ｉｎｓｔｍｅｍ＿ａｄＲ＿ｒ）を「０」にリセットするとともに、図６のアイドル状態（ＳＴ＿ＩＤＬＥ）に移行する。リセット信号（ＲＳＴ＿Ｎ）が「１」となってリセットが解除されると、アイドル状態（ＳＴ＿ＩＤＬＥ）のまま（ただし以降は、この状態をインストラクション状態（ＩＮＳＴ）と呼ぶことにする）、レジスタＲ１０が「０」に、１０ビットのレジスタＲ１１がインクリメントされて「１」になる。ここで、レジスタＲ１０からインストラクションチップセレクト信号（ｉｎｓｔｍｅｍ＿ｃｓｎ＿ｒ）として「０」が出力され、レジスタＲ１１からインストラクションメモリアドレスバスに「１」が出力される。
【００３７】
次に図６のアイドル状態（ＳＴ＿ＩＤＬＥ）に続く２つの未使用状態（ＳＴ＿ＮＯＰ１、ＳＴ＿ＮＯＰ２）でインストラクションメモリ３１２１から命令データが読み出しされるとともに、読み出された命令の判定が行われる。そして、命令の種類に応じて、各状態への遷移が行われる。
【００３８】
命令が未使用命令（ＩＮＳＴ＿ＮＯＮ）の場合、状態（ＳＴ＿ＮＯＰ２）の後、そのまま状態（ＩＮＳＴ）に復帰する。命令が書き込み命令（ＩＮＳＴ＿WＲ）の場合、状態（ＳＴ＿Ｗ１）〜状態（ＳＴ＿Ｗ５）の５つのステップによって書き込み命令が実行され、状態（ＩＮＳＴ）に復帰する。命令が読み出し命令（ＩＮＳＴ＿ＲＤ）の場合、状態（ＳＴ＿Ｒ１）〜状態（ＳＴ＿Ｒ６）の６つのステップによって読み出し命令が実行され、状態（ＩＮＳＴ）に復帰する。ただし、状態（ＳＴ＿Ｒ３）は、検証対象回路３１１Ｃから出力されるウエイト信号（ＷＡＩＴ＿Ｎ）及びレディ信号（ＲＥＡＤＹ＿Ｎ）の状態に基づいて、読み出しデータの準備ができるまで繰り返されることになる。命令が読み出し命令（ＩＮＳＴ＿ＲＤＣＭＰ）の場合、状態（ＳＴ＿Ｒ１）〜状態（ＳＴ＿Ｒ５）でデータを読み出した後、読み出したデータが所定の値と一致しない場合には再度、状態（ＳＴ＿Ｒ１）〜状態（ＳＴ＿Ｒ５）が繰り返される。データが一致した場合には、状態（ＳＴ＿Ｒ６）を経て、状態（ＩＮＳＴ）に復帰する。
【００３９】
命令がウエイト命令（ＩＮＳＴ＿ＷＡＩＴ）の場合は、状態（ＳＴ＿ＷＡＩＴ）でクロック信号（ＣＰＵＣＬＫ）の所定回数分待機した後、状態（ＩＮＳＴ）に復帰する。そして、命令がシミュレーション終了命令（ＩＮＳＴ＿ＥＮＤ）の場合は、状態（ＳＴ＿ＥＮＤ）でシミュレーション終了信号（ｏ＿ｅｎｄ）を「１」にした後、状態（ＩＮＳＴ）に復帰する。また、命令が入力されていない場合や命令が判定できない場合は、状態（ＩＮＳＴ）、状態（ＮＯＰ１）、状態（ＮＯＰ２）、状態（ＩＮＳＴ）、状態（ＮＯＰ１）、状態（ＮＯＰ２）、…が繰り返されることになる。
【００４０】
なお、書き込み命令（ＩＮＳＴ＿WＲ）においては、図５に示すように、インストラクションメモリ３１２１内の３５ビットの命令データの内、第４ビット〜第１７ビット（ｍｅｍｄ［３１：１８］）の１４ビットの値が書き込みアドレス値であり、第１８ビット〜第３３ビット（ｍｅｍｄ［１７：０２］）１６ビットの値が書き込みデータ値である。書き込みアドレス値は図３のレジスタＲ１５に入力されて、書き込みデータ値はレジスタＲ１９に入力される。また、書き込み命令における第３４〜第３５ビット（ｍｅｍｄ［０１：００］）は、ライトイネーブル信号（ＷＲＨ＿Ｎ）及び（ＷＲＬ＿Ｎ）の値であり、それぞれレジスタＲ１６及びＲ１７に入力される。
【００４１】
また、ウエイト命令（ＩＮＳＴ＿ＷＡＩＴ）においては、インストラクションメモリ３１２１内の３５ビットの命令データの内第６ビット〜第３５ビット（ｍｅｍｄ［３１：００］）の３２ビットの値がカウンタ値（クロック信号（ＣＰＵＣＬＫ）分の待機回数）であり、その値がレジスタＲ１３に入力される。
【００４２】
次に図７〜図９を参照して、主な命令の動作タイミングについて具体的に説明する。図７はインストラクションメモリ３１２１の記憶内容の一例を示している。左端にインストラクションメモリのアドレス値ｉを、右の枠内に各アドレスの命令データ（ＣＭＤ（ｉ）とする。）を示している。アドレス０の命令データはＮＯＰ命令（ＩＮＳＴ＿ＮＯＮ）、アドレス１は書き込み命令（ＩＮＳＴ＿WＲ）で書き込みアドレスが「ｘ」及び書き込みデータが「ｐ」、アドレス２は読み出し命令（ＩＮＳＴ＿ＲＤ）で読み出しアドレスが「ｙ」である。また、アドレス（ｎ−１）が書き込み命令（ＩＮＳＴ＿WＲ）、アドレスｎがウエイト命令（ＩＮＳＴ＿ＷＡＩＴ）でウエイト回数が「４」、アドレス（ｎ＋１）が読み出し命令（ＩＮＳＴ＿ＲＤ）である。そしてアドレスｋがシミュレーション終了命令（ＩＮＳＴ＿ＥＮＤ）である。図８はアドレス値０〜２の命令データに関する動作、図９はアドレス値ｎ−１〜ｎ＋１の命令データに関する動作を示している。
【００４３】
図８は、図２の簡易ＣＰＵ３１２２の動作を示すタイミングチャートであり、クロック信号（ＣＰＵＣＬＫ）、リセット信号（ＲＳＴ＿Ｎ）、図３のステートマシンＳＴ１の遷移状態（図６）（ただし状態を示す「ＳＴ＿」の符号は一部省略して示している。）と、各入出力信号の状態変化を示している。時刻ｔ１〜ｔ４の間にリセット信号が入力され動作状態が状態（ＳＴ＿ＩＤＬＥ）となっている。リセット信号が解除された後は、状態（ＮＯＰ１）となるたびに、インストラクションメモリ３１２１のアドレス信号（ｉｎｓｔｍｅｍ＿ａｄｒ＿ｒ）が１ずつインクリメントされるとともに、チップセレクト信号（ｉｎｓｔｍｅｍ＿ｃｓｎ＿ｒ）が「０」となって、命令データ（ＣＭＤ（ｉ））が読み出されている。書き込み命令（ＩＮＳＴ＿WＲ）では、時刻ｔ８〜ｔ１２の間、検証対象回路３１１Ｃのチップセレクト信号（ＣＳ＿Ｎ）が「０」に設定されて選択が行われて、その間の時刻ｔ９〜ｔ１１に書き込みイネーブル信号（ＷＲＨ＿Ｎ／ＷＲＬ＿Ｎ）が出力されて、データの書き込み処理が行われている。一方、読み出し命令（ＩＮＳＴ＿ＲＤ）では、時刻ｔ１６〜ｔ２０の間、検証対象回路３１１Ｃのチップセレクト信号（ＣＳ＿Ｎ）が「０」に設定されて選択が行われて、その間の時刻ｔ１７〜ｔ１９に読み出しイネーブル信号（ＲＤ＿Ｎ）が出力されて、データの読み出し処理が行われている。
【００４４】
図９は、図２の簡易ＣＰＵ３１２２の動作を示すタイミングチャートであり、ウエイト命令（ＩＮＳＴ＿ＷＡＩＴ）に関連する各信号の変化を示している。この場合、時刻ｔ５でウエイトカウント値「４」がカウンタ機能を有するレジスタＲ１３（カウンタ値ｗａｉｔ＿ｃｎｔ＿ｒ）に書き込まれる。その後、各クロック信号（ＣＰＵＣＬＫ）の立ち上がりで、カウンタ値がデクリメントされる。時刻ｔ８でカウンタ値が「１」に一致した後、次の時刻ｔ９で状態（ＩＮＳＴ）に復帰している。
【００４５】
次に、図１０を参照して、図１に示すシミュレーション装置の他の実施の形態（回路情報ファイル３１の構成が異なる例）について説明する。なお、図１０において、図２に示すものと同一の構成には同一の符号を付けて説明を省略する。図１０に示す回路情報ファイル３１が表す回路３１Ｄには、図２に示す簡易ＣＰＵ３１２２等の構成に加え、インターフェース回路５０、入力データメモリ５１、出力データメモリ５２、データ入力回路５３、データメモリ５４、期待値メモリ５５、及び比較検証回路５６が設けられている。
【００４６】
インターフェース５０は、簡易ＣＰＵ３１２２と検証対象回路３１１Ｃとの間のインターフェース回路であり、検証対象回路３１１Ｃの入出力部の仕様が、標準的なＣＰＵインターフェース以外の仕様を有する場合に、簡易ＣＰＵ３１２２の入出力部の仕様を変更せずに接続可能とするために設けられた回路である。インターフェース５０は、例えば、パラレル信号をシリアル信号に変換する回路であったり、あるいはデジタル信号をアナログ信号に変換する回路であったりするものを含んでいる。
【００４７】
入力データメモリ５１は、検証対象回路３１１Ｃに対して、簡易ＣＰＵ３１２２以外から入力する方が好ましいデータを入力するためのメモリである。例えば、初期値や、モード設定等、切替信号をある程度、継続的に入力し続ける必要がある場合等に用いることができる。出力データメモリ５２は、検証対象回路３１１Ｃから出力されるデータを時系列で記憶するメモリである。検証処理が終了した段階などの所定のタイミングで、出力データメモリ５２の値は、データベース２内の所定のファイルに出力される。
【００４８】
また、期待値メモリ５５は、出力データメモリ５２に出力されるであろう値の期待値をあらかじめ記憶するメモリである。比較検証回路５６によって出力データメモリ５２のデータと期待値メモリ５５のデータを比較し、その結果をデータベース２内の所定のファイルに出力する。上述した簡易ＣＰＵ３１２２が実行可能なコンペアリード命令（ＩＮＳＴ＿ＲＤＣＭＰ）によっても検証対象回路３１１Ｃの出力データの期待値との比較検証は可能である。しかし、データ量が大きくなる場合等には期待値メモリ５５、比較検証回路５６等を別途設けた方が設計処理の効率化が図れる場合がある。
【００４９】
一方、データメモリ５４は、マルチメディアデータ等の比較的大きなあるいは連続性のあるデータを、例えば専用の入力端子等から検証対象回路３１１Ｃに対して入力する場合に使用される。データストリーム入力回路５３は、検証対象回路３１１Ｃと単独で通信を行い、データの入力タイミングを制御する。
【００５０】
図１０に示すような構成によれば、検証対象回路３１１Ｃの検証（シミュレーション）時に必要な情報が様々に変化する場合でも、入力データメモリ５１、データメモリ５５、期待値メモリ５５の内容を変更するだけで、種々のテストベンチに相当する回路をＲＴＬで記述することが可能となる。
【００５１】
上述したように、この発明においては、シミュレーションの際に、従来テストベンチによって生成していたテストベクタやテストパターンを、ＲＴＬで記述したＨＤＬによる回路情報を用いて生成できるようにしている。汎用のシミュレーションプログラムでは、ＨＤＬによって記述した回路情報に対しては、省略化、効率化によってシミュレーションの最適化手法が準備されていることが多く、他方テストベンチのプログラム実行にはそこまでの最適化が図られていない場合がある。そのような場合には、この実施の形態のように検証対象回路とテストベクタ生成回路とを一体の回路として構成し、回路情報を記述することで、シミュレーションプログラムの種々の最適化機能を最大限に利用してシミュレーション時間の短縮化を図ることができる。
【００５２】
さらに、上記のように簡易ＣＰＵ（ステートマシンあるいはシーケンサ）、インストラクションメモリ（ＲＯＭ）、クロック生成回路等の各回路は、容易にＲＴＬ（レジスタトランスファレベル）で記述可能なので、ＦＰＧＡ等に実装する場合に容易にマッピングデータを作成することができる。そのため、検証対象回路をＦＰＧＡ等に実装した場合に、その検証のためのベクタ（パターン）生成回路も、容易にハードウェアで実現することができる。
【００５３】
なお、上述したようにして作成した回路情報を用いたシミュレーションを行った結果、シミュレーションプログラムが有するモデル最適化機能等を利用することで、テストベンチを用いてテストベクタを作成する場合に比べ、シミュレーション時間を約半減することが可能であった。
【００５４】
また、この発明のテストパターン生成回路は、エミュレータのようなハードウエアの検証システムにそのまま使用できるが、その場合にはテストベンチを用いたソフトウェアによるものに比べ、約１／１２０の検証時間とできることが確認された。
【００５５】
なお、この発明の実施の形態は、上記のものに限定されず、例えば、簡易ＣＰＵで実行可能な命令の種類を増やしたり、あるいは減らしたりすることも可能である。また、クロック生成回路等の一部の回路や、図１０に示す一部のメモリ等の回路を省略することも可能である。また、この発明の回路情報ファイル３１は、コンピュータ読み取り可能な記録媒体、あるいは通信回線を介して提供可能であり、また、それを利用するためのシミュレーションプログラムについてもコンピュータ読み取り可能な記録媒体、あるいは通信回線を介して提供可能である。
【図面の簡単な説明】
【００５６】
【図１】この発明によるシミュレーション装置の実施の形態の全体構成を示すブロック図である。
【図２】図１の回路情報ファイル３１に含まれている回路情報が表す回路の内容を示すブロック図である。
【図３】図２の簡易ＣＰＵ３１２２の構成例を示すブロック図である。
【図４】図２の簡易ＣＰＵ３１２２が実行可能な命令の種類の一例を示す図である。
【図５】図２のインストラクションメモリ３１２１に記憶されるデータの構成例を示す図である。
【図６】図２の簡易ＣＰＵ３１２２の動作の状態遷移図である。
【図７】図２のインストラクションメモリ３１２１に複数のデータを記憶した場合の一例を示す図である。
【図８】図２の回路情報ファイル３１に含まれている回路の動作タイミングの一例（書き込み命令／読み出し命令の場合）を示すタイミングチャートである。
【図９】図２の回路情報ファイル３１に含まれている回路の動作タイミングの一例（ウエイト命令の場合）を示すタイミングチャートである。
【図１０】図１の回路情報ファイル３１に含まれている回路情報が表す回路の内容の他の例（他の実施の形態）を示すブロック図である。
【図１１】背景となるシミュレーション装置の一例を示すブロック図である。
【図１２】図１１のテストベンチファイル３２の記述例（メインルーチン）を示す図である。
【図１３】図１２のテストベンチファイル３２に含まれる関数ｔ＿ｗｒｉｔｅの記述例を示す図である。
【図１４】図１２のテストベンチファイル３２に含まれる関数ｔ＿ｒｅａｄの記述例を示す図である。
【符号の説明】
【００５７】
１…シミュレーションプログラム  ２…データベース  ３１…回路情報ファイル  ３２…テストベンチファイル  ３１１…検証対象回路情報  ３１２…テストベクタ生成回路情報  ３１Ｃ、３１Ｄ…回路  ３１１Ｃ…検証対象回路  ３１２Ｃ…テストベクタ生成回路  ３１２１…インストラクションメモリ  ３１２２…簡易ＣＰＵ  ３１２３…クロック発生回路  ５０…インターフェース  ５１…入力データメモリ  ５２…出力データメモリ  ５３…データストリーム入力回路  ５４…データメモリ  ５５…期待値メモリ  ５６…比較検証回路
【図１】
2006268606.tif 000003
【図２】
2006268606.tif 000004
【図３】
2006268606.tif 000005
【図４】
2006268606.tif 000006
【図５】
2006268606.tif 000007
【図６】
2006268606.tif 000008
【図７】
2006268606.tif 000009
【図８】
2006268606.tif 000010
【図９】
2006268606.tif 000011
【図１０】
2006268606.tif 000012
【図１１】
2006268606.tif 000013
【図１２】
2006268606.tif 000014
【図１３】
2006268606.tif 000015
【図１４】
2006268606.tif 000016