(57)【特許請求の範囲】
【請求項１】
検証モデルと検証対象を配置するためのエミュレータと接続されている情報処理装置であって、
検証用プログラムのファイル入力に関する記述に基づいて、コンピュータに配置され前記コンピュータから前記エミュレータへデータを転送する第１のデータ転送手段を作成するコンパイル手段と、
前記第１のデータ転送手段からのデータを受信し、受信したデータを前記検証対象に転送する前記検証モデルである第２のデータ転送手段を前記検証用プログラムから生成した動作合成可能な記述に基づいて動作合成及び論理合成することにより生成する生成手段とを有することを特徴とする情報処理装置。
【請求項２】
前記情報処理装置は更に、
前記生成手段によって作成した第２のデータ転送手段を前記コンピュータの入出力手段によって前記エミュレータに配置する出力手段を有することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記生成手段は前記検証モデルと前記検証対象とを生成し、前記出力手段は前記生成手段によって生成した検証モデルと検証対象とを前記エミュレータに配置することを特徴とする請求項２に記載の情報処理装置。
【請求項４】
検証用プログラムの各記述について、動作合成又は論理合成が可能か否かを判定する判定手段と、
前記判定手段により動作合成又は論理合成が可能でないと判定される記述に基づいて第１の論理回路をコンパイルするコンパイル手段と、
前記判定手段により動作合成又は論理合成が可能と判定された記述に基づいて動作合成及び論理合成をして第２の論理回路を生成する生成手段とを有することを特徴とする情報処理装置。
【請求項５】
検証モデルと検証対象を配置するためのエミュレータと接続されている情報処理装置による情報処理方法であって、
検証用プログラムのファイル入力に関する記述に基づいて、コンピュータに配置され前記コンピュータから前記エミュレータへデータを転送する第１のデータ転送手段を作成するコンパイル工程と、
前記第１のデータ転送手段からのデータを受信し、受信したデータを前記検証対象に転送する前記検証モデルである第２のデータ転送手段を前記検証用プログラムから生成した動作合成可能な記述に基づいて動作合成及び論理合成することにより生成する生成工程と
を有することを特徴とする情報処理方法。
【請求項６】
検証用プログラムに基づいてエミュレーション環境を生成する情報処理装置による情報処理方法であって、前記検証用プログラムの各記述について、動作合成又は論理合成が可能か否かを判定する判定工程と、
前記判定工程において動作合成又は論理合成が可能でないと判定される記述に基づいて第１の論理回路をコンパイルするコンパイル工程と、
前記判定工程において動作合成又は論理合成が可能と判定された記述に基づいて動作合成及び論理合成をして第２の論理回路を生成する合成工程と
を有することを特徴とする情報処理方法。
【請求項７】
検証モデルと検証対象を配置するためのエミュレータと接続されている情報処理装置であって、
検証用プログラムのファイル入力に関する記述に基づいて、前記情報処理装置に配置され前記情報処理装置から前記エミュレータへデータを転送する第１のデータ転送手段を作成するコンパイラと、
前記第１のデータ転送手段からのデータを受信し、受信したデータを前記検証対象に転送する前記検証モデルである第２のデータ転送手段を前記検証用プログラムから生成した動作合成可能な記述に基づいて動作合成及び論理合成することにより生成する生成手段と
を有することを特徴とする情報処理装置。
【請求項８】
検証用プログラムに基づいてエミュレーション環境を生成する情報処理装置であって、前記検証用プログラムの各記述について、動作合成又は論理合成が可能か否かを判定する判定手段と、
前記判定手段によって動作合成又は論理合成が可能でないと判定される記述に基づいて第１の論理回路をコンパイルするコンパイル手段と、
前記判定手段によって動作合成又は論理合成が可能と判定された記述に基づいて動作合成及び論理合成をして第２の論理回路を生成する生成手段と
を有することを特徴とする情報処理装置。
【請求項９】
検証用プログラムの各記述について、動作合成又は論理合成が可能か否かを判定する判定手段と、
前記検証用プログラムに動作合成不可能な記述が含まれると判定された場合、前記検証プログラムからコンピュータ上に実装可能なデータ転送に関する記述と動作合成可能な記述とを生成する生成手段と、
前記コンピュータ上に実装可能なデータ転送に関する記述に基づいて第１の論理回路をコンパイルするコンパイル手段と、
前記動作合成可能な記述に基づいて動作合成と論理合成とをして第２の論理回路を合成する合成手段と、を有することを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、論理回路設計において検証モデルを用いてエミュレートする環境を作成する情報処理装置、情報処理方法およびプログラムに関する。
【背景技術】
【０００２】
論理回路設計では、設計した論理回路の動作の検証が必須である。検証に用いるハードウェアとして、再構成可能な論理ＩＣ（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）、または専用ＣＰＵで構成されたハードウェア・エミュレータがある。（以下、ハードウェア・エミュレータを単にエミュレータと記述する。）
ここで、用意した入力データを検証対象に供給して挙動を検証する方法を用いる場合、図２の（Ａ）のようにエミュレータ側に検証対象１１４の回路を配置する。また、コンピュータ（以降、ＰＣと称す）に検証用モデル１１３をプログラムとして実装する。そして、ＰＣから入力データ１０３をエミュレータ側の検証対象１１４に転送する。
【０００３】
しかし、大容量の画像を入力データとする処理などをエミュレートする場合、ＰＣからエミュレータへのデータ転送がエミュレーションのクロックイベント単位で起きるため、エミュレーションの速度がＰＣとエミュレータと間の通信に律速される。
【０００４】
そこで、図２の（Ｂ）のように、検証対象１１４と供にエミュレータ側に検証モデル１１３とメモリ１１２を回路として配置し、ＰＣ側にメモリデータ転送部１１１をプログラムとして実装する方法がある。この方法では最初に、ＰＣ側のメモリデータ転送部１１１が入力データ１０３をエミュレータ側でバッファの役割を果たすメモリ１１２に転送する。次に、検証モデル１１３はメモリ１１２のデータを検証対象１１４に供給する。
【０００５】
この方法により、ＰＣ側のメモリデータ転送部１１１がバッファの役割を果たすメモリ１１２の容量分だけ一括してエミュレータに入力データ１０３を転送することができる。つまり、ＰＣからエミュレータへの通信は、クロックイベント単位で起こす必要がなくなるので、検証を高速化することができる。
【０００６】
図２の（Ｂ）のような高速なエミュレーション環境を構築するには、検証用モデル１１３はレジスタ・トランスファ・レベル（ＲＴＬ）のハードウェア記述言語で設計する必要がある。近年、論理回路の設計では、抽象度の高いレベルで設計し、動作合成によりＲＴＬを生成する設計手法が採用されている。この手法では、論理回路の所望の動作を実現する動作記述を設計し、動作合成ツールを用いて動作記述をＲＴＬに変換する。
【０００７】
また、設計した動作記述が回路の所望の動作を正しく実装しているかを確認する為の検証を行うことが必要である。この動作記述の検証に用いる検証用プログラムはＣ言語等の抽象度の高いレベルの動作記述で設計される。
【０００８】
そこで、検証用プログラムから動作合成してエミュレータに実装するという方法が考えられる。ここで、ファイルで用意した入力データを検証対象に供給する検証の為に、検証用プログラムにはファイル入出力の記述がある。ファイルポインタはソフトウェア特有のものであり、ハードウェアに存在しないものなので、そのまま動作合成することができない。
【０００９】
特許文献１（特開２００５−７８４０２号公報）では、ファイル入出力の記述がある動作記述で設計した検証用プログラムの動作合成を可能としている。動作合成をかけると、検証用プログラムのファイル関数に関する記述は、論理合成可能ではないハードウェア記述言語で記述された検証モデルに変換される。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開２００５−７８４０２
【発明の概要】
【発明が解決しようとする課題】
【００１１】
特許文献１の方法で生成されたファイル関数を含む検証モデルは論理合成可能ではないので、ＰＣ上に実装する際に論理合成を用いることができず、ユーザへの負荷が大きい。また特許文献１の方法では、バッファの役割を果たすメモリ１１２がないので、図２の（Ａ）の構成のように高速なエミュレーション環境が実現できない。
【００１２】
以上のように、ファイル入出力の動作を含む高速なエミュレーション環境を構築するには論理合成による設計を用いることができないので、ユーザへの負荷が大きかった。
【課題を解決するための手段】
【００１３】
上記課題を解決するために、検証モデルと検証対象を配置するためのエミュレータと接続されている情報処理装置は、以下の構成を備える。即ち、検証用プログラムのファイル入力に関する記述に基づいて、コンピュータに配置され前記コンピュータから前記エミュレータへデータを転送する第１のデータ転送手段を作成するコンパイル手段と、前記第１のデータ転送手段からのデータを受信し、受信したデータを前記検証対象に転送する前記検証モデルである第２のデータ転送手段を前記検証用プログラムから生成した動作合成可能な記述に基づいて動作合成及び論理合成することにより生成する生成手段。
【発明の効果】
【００１４】
ファイル入出力に関する記述を含む検証用プログラムからエミュレーション環境を作成する際に、論理合成が困難なファイル関数に関する記述を抽出してコンパイルすることで、簡単に高速なエミュレーション環境を構築できる。
【図面の簡単な説明】
【００１５】
【図１】本発明の実施形態の構成を示す図である。
【図２】エミュレーション環境の概略構成図である。
【図３】エミュレーション環境を構築する手順を示す図である。
【図４】検証用プログラムと検証モデルとメモリデータ転送部の記述例を示す図である。
【図５】解析部と生成部の構成を示す図である。
【図６】配列からメモリへの動作合成を示す図である。
【図７】情報処理装置の概略構成を示すブロック図である。
【発明を実施するための形態】
【００１６】
（実施形態１）
図７は本発明の情報処理装置の概略構成を示す。記憶装置（ＨＤＤなど）７４０やＲＯＭ７３０は検証用プログラムやＯＳ、および動作合成や論理合成をするためのプログラムおよびコンパイラを格納し、必要に応じてこれらのプログラムのコードをＲＡＭ７２０に読み出しＣＰＵ７１０が実行する。ＩＯ７６０は入出力部であり、エミュレータやデータを保持している外部機器に接続されることでデータの入出力が可能なインターフェースである。バス７５０は、ＲＯＭ７３０、ＲＡＭ７２０、ＣＰＵ７１０、ＨＤＤ７４０およびＩＯ７６０間でデータやコマンドを伝達可能に接続する。
【００１７】
以下の本実施形態の説明では、図７に図示している情報処理装置（以下、ＰＣと称す）によって、動作合成可能なＣ言語への変換、動作合成、論理合成およびコンパイルをして、エミュレータに配置するゲート回路（プログラム）やＰＣに配置するインターフェース（プログラム）を作成する。次に、ＩＯ７６０を介して作成したゲート回路（第２のデータ転送手段としてのメモリ１１２、検証モデル１１３、検証対象１１４）をエミュレータ内に配置（出力）し、作成したインターフェース（後述の第１のデータ転送手段としてのメモリデータ転送部１１１やトリガ検出器１２２）をＰＣに配置することでエミュレーション環境を作成する。
【００１８】
図１は、本発明の実施形態１の検証モデル生成システム（又は検証モデル生成装置）の概略構成を示す。図１において、１０１は検証用プログラムでありＣ言語等で記述され、ファイル関数に関する記述を含む。１０２は検証対象であり、信号処理回路、暗号回路、誤り訂正回路、画像処理回路等をアルゴリズムでＣ言語等により記述され、検証用プログラム１０１からの入力データ１０３を対象として供給される。１０３は入力データであり、画像データ等含むファイルである。
【００１９】
１０４は解析部であり、検証用プログラム１０１にファイル関数に関する記述があるか（動作合成又は論理合成が可能であるか不可能であるか）を解析して判定する。１０５は生成部であり、解析部１０４でファイル関数に関する記述を検出した場合に、ファイル関数に関する記述を抽出してＰＣ上に配置されるメモリデータ転送部モデル１０６（以下、単にデータ転送部と称す）とバッファとして機能するエミュレータ上に実装されるメモリモデル１１２（以下、単にメモリ１１２）と検証モデル１１３を生成する。１０９はコンパイラであり、メモリデータ転送部１０６（及びトリガ検出器１２２）を第１の論理回路としてＰＣ上に実装する。１１０はエミュレータ合成部であり、動作合成ツールや論理合成ツールを用いてメモリ１０７と検証モデル１０８と検証対象１０２とを第２の論理回路としてエミュレータに実装する。なお、論理合成はＲＴＬ記述からゲート回路（ネットリスト）を合成することを示し、動作合成はＣ言語等で記述された動作記述からＲＴＬ記述を合成することを示す。動作記述とは、処理順序どおりに動作を記述したものである。
【００２０】
１１１はＰＣにプログラムとして実装されたメモリデータ転送部であり、入力データ１０３をエミュレータ上のメモリ１１２に転送する。１１２はエミュレータに実装されたメモリであり、メモリデータ転送部１１１から受信するデータをバッファリングし検証モデルに送信する。１１３はエミュレータに実装された検証モデルであり、メモリ１１２のデータを検証対象１１４に供給する。
【００２１】
次に、本発明の実施形態１の詳細について、図３〜図５を使って説明する。図３は、本実施形態で使用する環境構築の手順の概略を示す。図４は、本実施形態で使用する検証用プログラムと検証モデルとメモリデータ転送部の記述例を示す。図５は、本実施形態で使用する解析部と生成部の概略構成を示す。なお、本実施形態１では、入力データ１０３のサイズを３２ｂｉｔ×６４０００ｗｏｒｄとし、メモリ１１２のサイズは３２ｂｉｔ×３２ｗｏｒｄとする。また、このメモリ１１２のサイズは図５における制約ファイル１２０で指定する。本実施形態では、メモリ１１２のサイズが入力データ１０３のサイズより小さい条件で説明を行うが、メモリ１１２のサイズは入力データ以上の大きさであってもよい。
【００２２】
まず、図３（Ａ）から図３（Ｂ）への変換の説明を行う。ここでは図４の（Ａ）を用いて、検証用プログラム１０１の入力記述例を説明する。４行目で、入力データ１０３に対応するｉｎｄａｔａ．ｂｉｎというファイルをファイル関数で開く。６行目のｗｈｉｌｅ文は、８行目の記述により７行目で読んだｉｎｄａｔａ．ｂｉｎの最後の行が読み終わる（ＥＯＦ＝Ｅｎｄ  Ｏｆ  Ｆｉｌｅ）までループする。次に検証用プログラム１０１は７行目で読んだ入力データ１０３を９行目の関数で検証対象１０２に供給する。つまり、ｉｎｄａｔａ．ｂｉｎのデータの全てを検証対象１０２に供給するまでデータ転送を継続することを示す。
【００２３】
図３（Ａ）の検証対象１０２は論理回路の動作アルゴリズムで、動作合成可能なＣ言語で記述されている。図３（Ａ）の構成において、検証用プログラム１０１が検証対象１０２に入力データ１０３を供給することにより、検証対象１０２の検証が可能である。
【００２４】
次に、図５を用いて検証モデル（Ｃ言語）１２５とメモリデータ転送部（ｖｅｒｉｌｏｇ）１０６の生成手順を説明する。まず、解析部１０４に検証用プログラム１０１を入力する。解析部１０４は検証用プログラム１０１にファイル関数に関する記述があるかを解析する。解析部１０４は検証用プログラム１０１の図４の（Ａ）の４行目から１１行目のファイル関数に関する記述を検出する。解析部１０４が検出すると、生成部１０５は、検証用プログラム１０１と制約ファイル１２０から、検証モデル（Ｃ言語）１２５とメモリデータ転送部（ｖｅｒｉｌｏｇ）１０６を生成する。このようにすることで、ファイル関数を変換することで、ファイルポインタを不要にすることができる。なお、検証モデル１２５は動作合成可能なＣ言語で記述され、メモリデータ転送部１０６はＰＣ上に実装可能なＶｅｒｉｌｏｇで記述される。
【００２５】
次に、生成部１０５が生成した検証モデル１２５の記述について、図４の（Ｂ）を用いて説明する。１行目は配列ｍｅｍの宣言である。動作合成ツールは図６のように宣言した配列ｍｅｍをメモリとして実装する。また、配列のアドレスはそのままメモリアドレスとして使用することができる。従って、配列のサイズは制約ファイル１２０で指定したメモリ１１２のサイズに基づいて決定する必要がある。つまり、メモリ１１２のサイズが３２ｂｉｔ×３２ｗｏｒｄなので、配列ｍｅｍはｉｎｔ型で３２の要素数になる。ただし、ここではｉｎｔ型は３２ｂｉｔとする。
【００２６】
３行目のｆｏｒ文のループ回数は、配列ｍｅｍの要素数である。４行目のｍｅｍ［ｉ］は配列からｉで指定されたアドレスのデータを読む。ｏｕｔ＿ｄａｔａ（）の関数は検証対象１０２に引数のｍｅｍ［ｉ］の値を供給する。このような記述で、ｍｅｍ［０］からｍｅｍ［３１］までのデータを順次、検証対象１０２に出力することを実現する。６行目のｔｒｉｇ＿ｏｕｔ（）の関数は、動作合成後に検証モデル１２５からＰＣへトリガを出力することを示す。この記述は、検証モデル１１３が配列ｍｅｍの全ての要素を検証対象１０２に供給したら、トリガをＰＣへ出力することを示す。
【００２７】
次に、図５のデータ分割部１３０は入力データ１０３と制約ファイル１２０が入力されると、入力データ１０３をメモリサイズと同じになるように分割する。ここでは、入力データ１０３のサイズが３２ｂｉｔ×６４０００ｗｏｒｄで、メモリサイズが３２ｂｉｔ×３２ｗｏｒｄなので、データ分割部１３０は入力データ１０３を２０，０００個（すみません、）の分割入力データ１２４に分割する。ただし、指定されるメモリ１１２のサイズが入力データ１０３と同じならば、データ分割部１３０で分割する必要がない。
【００２８】
次に、生成部１０５が生成したメモリデータ転送部１０６の記述について、図４の（Ｃ）を用いて説明する。１行目のｆｏｒ文のループ回数は分割入力データ１２４の数を指定する。ループ数は、分割入力データ１２４の数が２０，０００個なので２０，０００を設定する。２行目は転送する分割入力データ１２４のファイルの名前を指定する。３行目は２行目で指定した分割入力データ１２４をメモリ１１２に転送する。以上の記述で、メモリデータ転送部１０６が２０，０００個の分割入力データ１２４を順番に転送するように設定する。
【００２９】
以上のように、図３の（Ａ）の検証用プログラム１０１に基づいて、解析部１０４と生成部１０５によって、図３（Ｂ）の検証モデル１２５と検証モデル１２５内の配列１２３とメモリ制御部１２１、及びメモリデータ転送部１０６が生成される。また、データ分割部１３０により図３（Ａ）の入力データ１０３から図３（Ｂ）の分割入力データ１２４が生成される。
【００３０】
次に、図３の（Ｂ）の状態から図３の（Ｃ）の状態へ変換する処理について説明する。図３の（Ｂ）の検証モデル１２５に動作合成をかけることで、論理合成可能なＲＴＬのハードウェア記述言語で記述された図３の（Ｃ）の検証モデル（ＲＴＬ）１２６を出力する。また、検証対象１０２も同様にして動作合成をかけることで、論理合成可能なＲＴＬのハードウェア記述言語で記述された図３の（Ｃ）の検証対象（ＲＴＬ）１２７を出力する。
【００３１】
次に、図３の（Ｃ）の内容を図３の（Ｄ）のようにＰＣとエミュレータに実装する処理について説明する。図３の（Ｃ）の検証モデル（ＲＴＬ）１２６とメモリ（ＲＴＬ）１０７と検証対象（ＲＴＬ）１２７に論理合成をかけることで、エミュレータ上にメモリ回路１１２、検証モデル１１３、検証対象１１４をゲート回路（ネットリスト）として配置する。また、図３の（Ｃ）のメモリデータ転送部１０６はコンパイラによりＰＣ上にメモリデータ転送部１１１として実装される。
【００３２】
次に、図３の（Ｄ）を用いて、エミュレータでの検証時の動作を説明する。まず、メモリ転送部１１１が分割入力データ１２４の最初のデータをメモリ１１２に転送する。メモリ転送部１１１からメモリ１１２への転送が終了すると、検証モデル１１３はメモリ１１２からデータを読む。検証モデル１１３は図６におけるメモリ１１２のアドレス番地０から３１まで順番に読んで、検証対象１１４に読み込んだデータを供給する。検証モデル１１３は、メモリ１１２のアドレス番地３１を読み、検証対象１０２に供給し終えると、ＰＣ側にトリガを出力する。トリガ検出器１２２が検証モデル１１３からのトリガを検出したら、メモリデータ転送部１１１はメモリ１０７に、次の分割入力データ１２４を転送する。以上の処理を２０，０００個の分割入力データ１２４の転送が終了するまで繰り返して検証する。
【００３３】
以上のように、本実施形態ではファイル入出力に関する記述を含む検証用プログラムからエミュレーション環境を作成する際に、論理合成が困難なファイル関数に関する記述を抽出してコンピュータ側にファイル入出力に関わるインターフェースを生成する。これにより、ファイル関数に関する記述以外の記述に基づいてエミュレータに配置する構成を論理合成により簡単に作成することができるので、ユーザは簡単に高速なエミュレーション環境を構築できる。
【００３４】
なお、本実施形態１では検証用プログラム１０１はＣ言語の記述例を示したが、同様の手順によりＣ＋＋／ＳｙｓｔｅｍＣ等の言語でも、同様の効果が得られる。さらに、動作合成ツールの記述スタイルの変更があっても、同様の効果が得られる。
【００３５】
また、検証対象１０２はＣ言語の記述例を示したが、Ｃ＋＋／ＳｙｓｔｅｍＣ等の言語、もしくはＶｅｒｉｌｏｇ／ＶＨＤＬ等のＲＴＬのハードウェア記述言語でも、同様の効果が得られ。さらに、動作合成ツールの記述スタイルの変更があっても、同様の効果が得られる。
【００３６】
また、生成部１０５で生成される検証モデル１２５はＣ言語の記述例を示したが、Ｃ＋＋／ＳｙｓｔｅｍＣ等の言語、もしくはＶｅｒｉｌｏｇ／ＶＨＤＬ等のＲＴＬのハードウェア記述言語でも同様の効果が得られる。
【００３７】
また、生成部１０５で生成されるメモリデータ転送部１０６はＶｅｒｉｌｏｇの記述例を示したが、Ｃ＋＋／ＳｙｓｔｅｍＣ等の言語、もしくはＶＨＤＬ等のＲＴＬのハードウェア記述言語でも同様の効果が得られる。
【００３８】
以上のように、検証用モデル及びメモリデータ転送部を自動で生成することにより、短期間で高速なエミュレーション環境の構築が可能である。
【００３９】
本発明は前述した実施形態の機能をコンピュータに実現させるプログラムを記憶した記憶媒体を、システム或いは装置に供給することによって実現しても良い。
【００４０】
この記憶媒体として、例えばフレキシブルディスク，光ディスク，光磁気ディスク，ＣＤ−ＲＯＭ，ＣＤ−Ｒ，磁気テープ，不揮発性のメモリカード，フラッシュメモリ，ＳＳＤ（ソリードステートディスク）などを用いることができる。
【図１】
0005729983.tif 000002
【図２】
0005729983.tif 000003
【図３】
0005729983.tif 000004
【図４】
0005729983.tif 000005
【図５】
0005729983.tif 000006
【図６】
0005729983.tif 000007
【図７】
0005729983.tif 000008