(57)【特許請求の範囲】
【請求項１】
プログラム可能なハードウェア回路にプログラムされた回路とソフトウェアシミュレータとを協調させて対象システムの動作を検証するハードウェア−ソフトウェア協調検証システムであって、
前記ハードウェア回路と前記ソフトウェアシミュレータが通信媒体で接続され各々のクロックで動作し、前記ソフトウェアシミュレータに構成されるインタフェースモデルと、前記ハードウェア回路に構成されるトランザクタ回路との間でトランザクションを行うことにより同期し、
（１）前記ソフトウェアシミュレータのインタフェースモデルから前記ハードウェア回路のトランザクタ回路に対し、同期サイクル数の指定を伴う事前動作指示である第１のコマンドによるトランザクションを発行し、当該指示に従い前記ハードウェア回路を事前動作させることにより、当該同期サイクル数の複数サイクル単位におけるイベント発生有無及びイベント発生サイクル数を含む情報を先行確認する第１の機能と、
（２）前記先行確認に応じて、イベント有りの場合は当該イベント発生サイクル数に合わせて前記同期サイクル数を調整し、前記ソフトウェアシミュレータのインタフェースモデルから前記ハードウェア回路のトランザクタ回路に対し、当該調整した同期サイクル数の指定を伴う動作指示である第２のコマンドによるトランザクションを発行し、当該指示に従い前記ハードウェア回路を動作させ、発生イベント情報を取得して処理する第２の機能と、を有すること、を特徴とするハードウェア−ソフトウェア協調検証システム。
【請求項２】
請求項１記載のハードウェア−ソフトウェア協調検証システムにおいて、
前記ソフトウェアシミュレータから前記インタフェースモデルに対し、複数サイクル単位の同期動作を指示する単一のコマンドを発行し、
前記単一のコマンドに従い、前記インタフェースモデルから前記トランザクタ回路に対し、前記事前動作指示の第１のコマンドを発行し、当該第１のコマンドの結果を受領し、次に、前記インタフェースモデルから前記トランザクタ回路に対し、前記動作指示の第２のコマンドを発行し、当該第２のコマンドの結果を受領すること、を特徴とするハードウェア−ソフトウェア協調検証システム。
【請求項３】
請求項１記載のハードウェア−ソフトウェア協調検証システムにおいて、
前記ハードウェア回路のトランザクタ回路から前記ソフトウェアシミュレータのインタフェースモデルに対し、前記イベント発生有無を通知し、当該通知により、前記ソフトウェアシミュレータのインタフェースモデルが前記ハードウェア回路のトランザクタ回路から前記イベント発生サイクル数の情報を取得すること、を特徴とするハードウェア−ソフトウェア協調検証システム。
【請求項４】
請求項２記載のハードウェア−ソフトウェア協調検証システムにおいて、
前記ハードウェア回路のトランザクタ回路は、前記第１のコマンドを受けると、接続回路の状態を退避してから前記事前動作し、その後、前記退避に基づき前記接続回路の状態を前記事前動作の前の状態に復元すること、を特徴とするハードウェア−ソフトウェア協調検証システム。
【請求項５】
プログラム可能なハードウェア回路にプログラムされた回路とソフトウェアシミュレータとを協調させて対象システムの動作を検証するハードウェア−ソフトウェア協調検証方法であって、
前記ハードウェア回路と前記ソフトウェアシミュレータが通信媒体で接続され各々のクロックで動作し、前記ソフトウェアシミュレータに構成されるインタフェースモデルと、前記ハードウェア回路に構成されるトランザクタ回路との間でトランザクションを行うことにより同期し、
（１）前記ソフトウェアシミュレータのインタフェースモデルから前記ハードウェア回路のトランザクタ回路に対し、同期サイクル数の指定を伴う事前動作指示である第１のコマンドによるトランザクションを発行し、当該指示に従い前記ハードウェア回路を事前動作させることにより、当該同期サイクル数の複数サイクル単位におけるイベント発生有無及びイベント発生サイクル数を含む情報を先行確認する第１の処理ステップと、
（２）前記先行確認に応じて、イベント有りの場合は当該イベント発生サイクル数に合わせて前記同期サイクル数を調整し、前記ソフトウェアシミュレータのインタフェースモデルから前記ハードウェア回路のトランザクタ回路に対し、当該調整した同期サイクル数の指定を伴う動作指示である第２のコマンドによるトランザクションを発行し、当該指示に従い前記ハードウェア回路を動作させ、発生イベント情報を取得して処理する第２の処理ステップと、を有すること、を特徴とするハードウェア−ソフトウェア協調検証方法。
【請求項６】
プログラム可能なハードウェア回路にプログラムされた回路とソフトウェアシミュレータとを協調させて対象システムの動作を検証するハードウェア−ソフトウェア協調検証システムにおける前記ソフトウェアシミュレータを実現するプログラムであって、
前記ハードウェア回路と前記ソフトウェアシミュレータが通信媒体で接続され各々のクロックで動作し、前記ソフトウェアシミュレータに構成されるインタフェースモデルと、前記ハードウェア回路に構成されるトランザクタ回路との間でトランザクションを行うことにより同期し、
（１）前記ソフトウェアシミュレータのインタフェースモデルから前記ハードウェア回路のトランザクタ回路に対し、同期サイクル数の指定を伴う事前動作指示である第１のコマンドによるトランザクションを発行し、当該指示に従い前記ハードウェア回路を事前動作させることにより、当該同期サイクル数の複数サイクル単位におけるイベント発生有無及びイベント発生サイクル数を含む情報を先行確認する第１の処理と、
（２）前記先行確認に応じて、イベント有りの場合は当該イベント発生サイクル数に合わせて前記同期サイクル数を調整し、前記ソフトウェアシミュレータのインタフェースモデルから前記ハードウェア回路のトランザクタ回路に対し、当該調整した同期サイクル数の指定を伴う動作指示である第２のコマンドによるトランザクションを発行し、当該指示に従い前記ハードウェア回路を動作させ、発生イベント情報を取得して処理する第２の処理と、をコンピュータに実行させること、を特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、組込みシステム開発などにおけるハードウェア−ソフトウェア協調検証方式などに関し、特に、ＦＰＧＡ（Field Programmable Gate Array）ボードとソフトウェアシミュレータの協調検証方式に関する。
【背景技術】
【０００２】
近年の組込みシステムの高機能化・高性能化に伴い、開発すべきハードウェア・ソフトウェアはますます複雑化しており、開発期間・コストが増加する傾向にある。またその一方で開発サイクルは短期化しており、より短期で低コストな組込みシステム開発が求められている。
【０００３】
上記の課題を解決するために、仮想プロトタイピング手法が用いられている。仮想プロトタイピング手法は、ＳｏＣ（System on Chip）の完成前に、仮想ＳｏＣ上でソフトウェアやファームウェアを検証することができる手法であり、開発段階初期でソフトウェアとシステムの統合が可能になり、開発期間・コストを削減し、品質を向上する効果がある。
【０００４】
上記手法では、具体的には、クロックを発生させ、サイクル精度の動作検証が可能なソフトウェアシミュレータ上で、ＣＰＵやメモリといったハードウェアの実動作を模擬したモデルを作成し、そのモデルを組み合わせて実機と同等な機能を持つ仮想ＳｏＣを作成する。この仮想ＳｏＣ上で、ハードウェア開発と並行して、ソフトウェアやファームウェアの検証を行うことができる。
【０００５】
しかし、上記のソフトウェアシミュレータ上でＳｏＣ（仮想ＳｏＣ）を構成するハードウェアについてはモデル化が必須であり、既存のＲＴＬ（Register Transfer Level）で記述されたハードウェア資産などについてはソフトウェアシミュレータ上では扱えないという問題があった。
【０００６】
上記の問題を解決するために、ＦＰＧＡボードのＦＰＧＡに既存のハードウェア資産を実装（プログラミング）し、このＦＰＧＡボード（実装回路）とソフトウェアシミュレータ（仮想ＳｏＣ）とにおける動作の協調検証を行う方式（「ハードウェア−ソフトウェア協調検証方式」）が用いられている。この協調検証方式では、ハードウェアモデルの作成が不要であり、かつ、既存のハードウェア資産やＩＰ（Intellectual Property）をそのまま活用可能である上、ＦＰＧＡで高速に実行（回路動作）が可能であるというメリットがある。
【０００７】
しかし、上記協調検証方式においても以下のような課題がある。ＦＰＧＡボードに実装されたハードウェアはＦＰＧＡ内のクロック（第２の時間軸）で動作しており、一方、ソフトウェアシミュレータ上のハードウェアはソフトウェアシミュレータ内のクロック（第１の時間軸）で動作している（ＦＰＧＡ側のクロックの方が高速）。これら異なる時間軸を持つ２つのシステムの自立制御においては、これら２つが異なるクロックで非同期に動作しており、特にメカなどの高精度かつ高速な検証が求められる環境では、お互いの同期をとることが課題となっている。
【０００８】
上記の課題に対して、従来技術として、（１）毎サイクル同期方式、（２）トランザクション同期方式、及び特開２００９−３５８３号公報（特許文献１）等がある。
【０００９】
（１）毎サイクル同期方式は、ソフトウェアシミュレータが発生させたクロックをＦＰＧＡボード実装回路（ＦＰＧＡで実装された回路）に与え、毎サイクル（クロック単位）で両者の同期をとりながら動作の検証を行う方式である。この方式では１サイクル毎に同期をとるため、高精度な検証が可能となる。
【００１０】
（２）トランザクション同期方式は、ソフトウェアシミュレータからＦＰＧＡボード実装回路へのアクセスをトランザクション単位（ＲＥＡＤ／ＷＲＩＴＥなどのコマンド単位）で行う方式である。ソフトウェアシミュレータからトランザクション（コマンド）が発行されると、ＦＰＧＡボードに実装されたトランザクタ回路が当該コマンドを解析した後、サイクルレベルの信号に変換し、ＦＰＧＡボード実装回路を動作させる。この方式において、ハードウェア−ソフトウェア間の同期は、複数サイクル同期実行指示（例えば５０サイクル分の同期実行）をトランザクション（コマンド）で発行することにより可能となる。
【００１１】
また、特許文献１には、ソフトウェア側（ソフトウェアシミュレータ）からのハードウェア側（ＦＰＧＡボード実装回路）の起動に対し、ソフトウェア側から同期をとる条件として開始条件と終了条件を与え、この条件による同期をとっている区間では毎サイクル同期をとる技術が開示されている。
【先行技術文献】
【特許文献】
【００１２】
【特許文献１】特開２００９−３５８３号公報
【発明の概要】
【発明が解決しようとする課題】
【００１３】
背景技術のハードウェア−ソフトウェア協調検証方式では以下のような問題が挙げられる。
【００１４】
（１）毎サイクル同期方式では、１サイクル毎に同期をとるため、高精度な検証が可能なメリットがあるが、ハードウェア−ソフトウェア間でサイクル毎の通信が必要であるため、シミュレーション速度の低下の問題が挙げられる。
【００１５】
（２）トランザクション同期方式は、複数サイクル単位（トランザクション単位）で同期をとるため、高速な検証が可能であるメリットがある。ハードウェア側は高速なクロックで処理（動作）するため、１トランザクション内の複数サイクル単位の処理（動作）は高速で済む。一方、ＦＰＧＡボード実装回路から割込みなどのイベントが発生する場合に、ソフトウェアシミュレータが正確なタイミングで当該イベント（イベント情報）を取得することが困難であるため、検証精度の低下の問題が挙げられる。従来技術では、ソフトウェア側がハードウェア側からの発生イベント（イベント情報）を適切に取得して処理する手段について考慮されておらず、発生イベント（イベント情報）を取得したサイクル時点よりも後のサイクル時点で処理する仕組みであるため、検証精度が低い。
【００１６】
また、特許文献１では、同期をとる区間が多数ある場合、シミュレーション速度が低下する問題がある。また、（２）の方式と同様に、ソフトウェアシミュレータがＦＰＧＡボードからイベントを適切に取得して処理する手段について考慮されていないため、検証精度の低下の問題がある。
【００１７】
以上を鑑み、本発明の目的は、ハードウェア（ＦＰＧＡボード実装回路）−ソフトウェア（シミュレータ）間の協調検証において、基本的には上記トランザクション同期方式（複数サイクルで同期をとる方式）を前提とすることで高速・短時間での検証を実現し、更に、ソフトウェア側がハードウェア側からの発生イベント（イベント情報）を適切に取得して処理する手段（イベント情報を正確なタイミングで処理する仕組み）を備えることで高精度な検証を実現できる技術、すなわち、高速で高精度な検証を実現できる技術を提供することである。
【課題を解決するための手段】
【００１８】
前記目的を達成するため、本発明の代表的な実施の形態は、プログラム可能なハードウェア回路（ＦＰＧＡボード等）に実装（プログラム）される回路とソフトウェアシミュレータとの間で協調させて対象システム（組込みシステムのＳｏＣ等）の動作を検証するハードウェア−ソフトウェア協調検証システムなどであって、以下に示す構成を有することを特徴とする。
【００１９】
本システムでは、ハードウェア回路とソフトウェアシミュレータが通信媒体で接続され各々のクロックで動作し、ソフトウェアシミュレータに構成されるインタフェースモデルと、ハードウェア回路に構成されるトランザクタ回路との間でトランザクションを行うことにより同期する。
【００２０】
本システムは、（１）ソフトウェアシミュレータ（インタフェースモデル）からハードウェア回路（トランザクタ回路）に対し、同期サイクル数の指定を伴う事前動作指示のトランザクションを発行し、当該事前動作指示に従いハードウェア回路（接続回路）を事前動作させることにより、当該同期サイクル数の複数サイクル単位におけるイベント発生有無及びイベント発生サイクル数を含む情報を先行確認する第１の機能を有する。
【００２１】
本システムは、（２）前記先行確認に応じて、イベント有りの場合は当該イベント発生サイクル数に合わせて前記同期サイクル数を調整し、ソフトウェアシミュレータ（インタフェースモデル）からハードウェア回路（トランザクタ回路）に対し、当該調整した同期サイクル数の指定を伴う動作指示のトランザクションを発行し、当該動作指示に従いハードウェア回路（接続回路）を動作させ、イベント情報を取得して処理する、第２の機能を有する。
【発明の効果】
【００２２】
本発明の代表的な実施の形態によれば、ハードウェア−ソフトウェア間の協調検証において、基本的には上記トランザクション同期方式を前提とすることで高速・短時間での検証を実現し、更に、ソフトウェア側がハードウェア側からの発生イベントを適切に取得して処理する手段（イベント情報を正確なタイミングで処理する仕組み）を備えることで高精度な検証を実現できる。
【図面の簡単な説明】
【００２３】
【図１】本発明の一実施の形態のシステム（ハードウェア−ソフトウェア協調検証システム）の概要を説明するための図であり、（ａ）は、ハードウェア（ＦＰＧＡボード実装回路）−ソフトウェア（ソフトウェアシミュレータ）間の協調検証（シミュレーション）の際の動作概要を示し、（ｂ）は、同期サイクル数などの例を示す。
【図２】本発明の一実施の形態のシステムの構成例を示す図である。
【図３】ソフトウェア側（ＦＰＧＡボードＩ/Ｆモデル）及びハードウェア側（トランザクタ回路）の必要機能の構成例を示す図である。
【図４】ＦＰＧＡボードＩ/Ｆモデルの処理フローを示す図である。
【図５】トランザクタ回路の処理フローを示す図である。
【図６】本実施の形態の適用結果（効果）を説明するための図である。
【図７】従来のトランザクション同期方式の問題点を説明するための図である。
【発明を実施するための形態】
【００２４】
以下、本発明の実施の形態を図面に基づいて詳細に説明する。なお、実施の形態を説明するための全図において、同一部には原則として同一符号を付し、その繰り返しの説明は省略する。以下適宜、ＨＷ：ハードウェア、ＳＷ：ソフトウェア、ＴＲ：トランザクション、Ｅ：イベント、等と略す。
【００２５】
＜概要＞
図１を用いて、本発明の一実施の形態のシステム（ＨＷ−ＳＷ協調検証システム）の概要などを説明する。本方式（ＨＷ−ＳＷ協調検証方式）は、図２，図３等に示すシステム構成（検証環境）上で、図１，図４，図５等に示す動作・処理（ＨＷ−ＳＷ協調検証方法の処理手順）を行う。また図６，図７では本方式での検証の事例・効果について従来技術と比較して示している。
【００２６】
図１（ａ）で、ＳＷシミュレータ（図２、１００）とＦＰＧＡボード実装回路（図２、２００）との間での動作・処理の概要を示している。図１（ｂ）は同期サイクル数（Ｍ）などの例を示す。
【００２７】
（Ａ０）検証の際、ＳＷシミュレータ（図２、１００）では、ＦＰＧＡボードＩ/Ｆモデル（図２、１０１）に対し、複数サイクルで同期をとる協調検証方式における単一のコマンド（Ｃ０）を発行する。Ｃ０は同期サイクル数（Ｍ＝Ｍ１）の指定などを伴う。ＦＰＧＡボードＩ/Ｆモデルでは、コマンド（Ｃ０）をもとに、以下の２種類のコマンド（Ｃ１，Ｃ２）を、ＦＰＧＡボード実装回路のトランザクタ回路（図２、２０１）に対してトランザクションとして順に発行する。
【００２８】
（Ａ１−１）まず、第１のトランザクションにおいて、事前動作指示のコマンドＣ１を発行する。Ｃ１は、事前動作によりイベントを先行確認するためのコマンドである。指定の同期サイクル数（Ｍ＝Ｍ１）と共にＣ１を発行する。
【００２９】
（Ｂ１−１）トランザクタ回路は、Ｃ１｛Ｍ１｝を受領する。（Ｂ１−２）トランザクタ回路は、Ｃ１に従う事前動作の前に接続回路（ユーザ回路Ｂ）の状態を退避しておく。（Ｂ１−３）トランザクタ回路は、Ｃ１｛Ｍ１｝に従い、接続回路（ユーザ回路Ｂ）を複数サイクル（Ｍ１）分で事前動作させることで、当該複数サイクル内におけるイベント有無やイベント発生サイクル数（Ｍ２）を確認・保存する。（Ｂ１−４）トランザクタ回路は、事前動作の後、接続回路（ユーザ回路Ｂ）の状態を、事前動作の前の状態に復元する。（Ｂ１−５）トランザクタ回路は、事前動作の後、事前動作完了やイベント有無を示すＣ１結果応答をＦＰＧＡボードＩ/Ｆモデルへ通知する。
【００３０】
（Ａ１−２）ＳＷシミュレータ（ＦＰＧＡボードＩ/Ｆモデル）は、通知（Ｃ１結果）を受領する。（Ａ１−３）ＦＰＧＡボードＩ/Ｆモデルは、Ｃ１結果から、イベント有無やイベント発生サイクル数（Ｍ２）を取得でき、即ちイベント先行確認ができる。
【００３１】
（Ａ２−１）ＦＰＧＡボードＩ/Ｆモデルは、上記先行確認の結果に応じて、次に、第２のトランザクションとして、本動作指示のコマンドＣ２を発行する。この際、イベント状況（イベント有無）に応じて同期サイクル数Ｍを調整し、調整した同期サイクル数Ｍの指定でＣ２を発行する。イベント無しの場合は、同期サイクル数ＭをＭ１のままとし、イベント有りの場合は、同期サイクル数ＭをＭ２に変更する。
【００３２】
（Ｂ２−１）トランザクタ回路は、Ｃ２｛Ｍ１／Ｍ２｝を受領する。（Ｂ２−２）トランザクタ回路は、Ｃ２で指定された同期サイクル数Ｍ（Ｍ１／Ｍ２）の分、接続回路（ユーザ回路Ｂ）を動作させる。（Ｂ２−３）トランザクタ回路は、Ｃ２結果応答を通知する。（Ａ２−２）ＳＷシミュレータ（ＦＰＧＡボードＩ/Ｆモデル）は、通知（Ｃ２結果）を受領し、イベント情報を取得して処理する。
【００３３】
図１（ｂ）で、Ｃ０での同期サイクル数Ｍの指定が例えば５０である。Ｃ１での同期サイクル数Ｍ１の指定が同じく５０となる。Ｃ１による事前動作（イベント先行確認）により、イベント有りの場合、イベント発生サイクル数Ｍ２が例えば２０とする。これを受けてＣ２の同期サイクル数（Ｍ２）の指定が２０となる。
【００３４】
＜システム＞
図２に示す本システム（検証環境）の構成例において、ＰＣ１０と、ＦＰＧＡボード２０とが、通信媒体３０（ケーブルや無線など）を介して接続される構成である。ＰＣ１０はＳＷシミュレータ１００の実行環境である。ＦＰＧＡボード２０は、ハードウェアシミュレータ（プログラム可能な回路）としてＦＰＧＡ（実装回路）２００を搭載している。
【００３５】
ＳＷシミュレータ１００は、ＣＰＵやメモリといったハードウェアの実動作をシミュレーションしたソフトウェアモデルを組み合わせて仮想ＳｏＣ１１０（対象システム）を構築し、対象システムの動作検証が可能なソフトウェアである。
【００３６】
ＳＷシミュレータ１００は、同期サイクル数Ｍなどのパラメータ情報１０６を入力する。なおＭは任意に指定できる。ＰＣ１０のユーザ（検証者）によりパラメータ情報１０６及び指示などの入力やその設定などが可能である。本システムによる出力（検証状況や検証結果など）は例えばＰＣ１０の画面に表示される。
【００３７】
ＳＷシミュレータ１００（仮想ＳｏＣ１１０）において、バスモデル１０３に、ＣＰＵモデル１０４、メモリモデル１０５、ユーザ回路Ａ１０２、及びＦＰＧＡボードＩ/Ｆ（インタフェース）モデル１０１が接続されている。ユーザ回路Ａ１０２は、ユーザによりＳＷモデルとして設定される。
【００３８】
ＦＰＧＡボード２０のＦＰＧＡ２００において、トランザクタ回路２０１、及びユーザ回路Ｂ２０２（既存回路やＩＰなど）が実装（プログラム）されている。ユーザ回路Ｂ２０２は、ＲＴＬの既存回路など、既存のハードウェア資産やＩＰによる実装回路（接続回路）であり、ユーザにより設定され、検証の対象となる。
【００３９】
ＦＰＧＡボードＩ/Ｆモデル１０１とＦＰＧＡ２００のトランザクタ回路２０１との間で通信（トランザクション）が行われる。詳しくは図３等に示す。
【００４０】
検証の際、ＦＰＧＡ２００実装回路（ユーザ回路Ｂ２０２）への動作指示は、ＳＷシミュレータ１００がＦＰＧＡボードＩ/Ｆモデル１０１に対しトランザクションないしその指示（トランザクション情報）を発行することで開始される。それによりＦＰＧＡボードＩ/Ｆモデル１０１は、トランザクタ回路２０１に対しトランザクション（対応するコマンド信号等）を発行し、これによりトランザクタ回路２０１を介してユーザ回路Ｂ２０２の動作を実行する。ＳＷシミュレータ１００から発行されたトランザクションに対し、ＦＰＧＡボードＩ/Ｆモデル１０１とトランザクタ回路２０１が、指定された同期サイクル数Ｍによる複数サイクル単位（Ｍ≧１）で同期をとって動作・処理を行う。かつ、本システムでは、ユーザ回路Ｂ２０２が発行するイベント（Ｅ情報）を、ＳＷシミュレータ１００側に正確なタイミングで取得するために、ＦＰＧＡボードＩ/Ｆモデル１０１とトランザクタ回路２０１に、必要な機能を備えている（図３）。
【００４１】
＜従来の問題点＞
図７は、従来のトランザクション同期方式の問題点について示す。ＳＷシミュレータ（上側、第１の時間軸Ｔ１（サイクル時点））とＦＰＧＡ実装回路（下側、第２の時間軸Ｔ２（サイクル時点））とにおいて、トランザクション毎に、同期サイクル数Ｍ＝５０サイクルで同期して動作・検証した場合を例に説明する。
【００４２】
シミュレーション開始（０サイクル時点）からＮサイクル時点（７０１）で、ＳＷシミュレータからＦＰＧＡ実装回路へ、動作指示（Ｍ＝５０）のトランザクション（ＴＲ）を発行する（７０２）。ＦＰＧＡ実装回路は、この動作指示を受けて、Ｍ＝５０サイクル分の動作を開始する（７０３）。ＦＰＧＡ実装回路では、開始（７０３）から２０サイクル経ったＮ＋２０サイクル時点（７０４）で、イベントが発行されたとする（７０５）。これにより発生イベントを示す信号がソフトウェア側へ送られる（７０６）。引き続き、ＦＰＧＡ実装回路は、Ｎ＋５０サイクル時点（７０７）で、Ｍ＝５０サイクル分の動作が完了し、これにより動作完了の通知（動作指示への応答）をソフトウェア側へ発行する（７０８）。
【００４３】
ＳＷシミュレータは、Ｎ＋５０サイクル時点（７０７）で、ハードウェア側からの通知（７０８）を受けて、イベント有無を判定しイベント情報を取得する（７０９）。
【００４４】
ここで従来技術の問題として、Ｎ＋２０サイクル時点（７０４）で既にＦＰＧＡ実装回路がイベントを発行しているにもかかわらず（７０６）、ＳＷシミュレータが当該イベントを取得・確認できるのはＮ＋５０サイクル時点（７０７）であり、３０サイクル分遅れている。この遅れ（ズレ）により、検証精度の低下を招いてしまう。
【００４５】
上記の問題点を解決するために、本実施の形態では、図２のＦＰＧＡボードＩ/Ｆモデル１０１とトランザクタ回路２０１に図３に示す機能を具備し、イベント先行確認に応じて同期サイクル数を調整するといった特徴的な検証方式を実現している。
【００４６】
＜機能＞
図３では、特に、ＦＰＧＡボードＩ/Ｆモデル１０１とトランザクタ回路２０１に備える機能（処理部）の構成例を示している（矢印は機能間の処理関係の一例を示す）。これら各機能は、ＦＰＧＡボードＩ/Ｆモデル１０１側はプログラム処理により実現され、トランザクタ回路２０１側は実装回路により実現される。
【００４７】
ＦＰＧＡボードＩ/Ｆモデル１０１は、トランザクション情報解析機能４０１、トランザクタ回路用信号変換機能４０２、事前動作指示機能（＝イベント先行確認機能）４０３、動作指示機能４０４、イベント情報取得・発行機能４０５、等を備える。
【００４８】
ＴＲ情報解析機能４０１は、上位（ＳＷシミュレータ１００）から発行されたＴＲ情報を解析し、ＷＲＩＴＥ、ＲＥＡＤ、複数サイクル同期動作などの発行コマンド（Ｃ０）、及び当該発行コマンドの実行に伴う必要な情報（パラメータ情報１０６）等を取得する。
【００４９】
トランザクタ回路用信号変換機能４０２は、上記ＴＲ情報解析機能４０１で取得したＴＲ情報を、トランザクタ回路２０１に対してトランザクション（対応するコマンド等）として発行するための信号に変換する。
【００５０】
事前動作指示機能４０３は、イベント先行確認機能を含み、上記トランザクタ回路用信号変換機能４０２で変換されたトランザクションの信号を、トランザクタ回路２０１に対し、事前動作指示（第１のコマンド：Ｃ１）として与える。Ｃ１の信号は、同期サイクル数（Ｍ１）の指定を伴う。そして、事前動作指示機能４０３は、ハードウェア側から返される結果（通知）をもとに、イベント発生有無、発生サイクル数（Ｍ２）などの情報を取得し、イベントを先行確認することができる。
【００５１】
動作指示機能４０４は、上記トランザクタ回路用信号変換機能４０２で変換されたトランザクションの信号を、トランザクタ回路２０１に対し、動作指示（第２のコマンド：Ｃ２）として与える。ここで、Ｃ２で指定する同期サイクル数Ｍとして、上記事前動作指示機能４０３で得たイベント有無などの情報に従い、イベントが無い場合は、事前動作指示（Ｃ１）で指定した同期サイクル数（Ｍ１）をそのまま設定し、イベントが有る場合は、イベント発生サイクル数（Ｍ２）に変更するように設定する。
【００５２】
イベント情報取得・発行機能４０５は、上位（ＳＷシミュレータ１００）との間でイベントに関する処理を行う機能であり、上記イベントが有る場合、トランザクタ回路２０１からイベント情報を取得し、ＳＷシミュレータ１００に対し、割込みなどのイベントを発行する（イベント情報を与える）。
【００５３】
トランザクタ回路２０１は、トランザクション情報解析機能５０１、サイクルレベル信号変換機能５０２、状態退避機能５０３、接続回路事前動作機能５０４、状態復元機能５０５、接続回路動作機能５０６、記憶領域５２０等を備える。
【００５４】
ＴＲ情報解析機能５０１は、ＦＰＧＡボードＩ/Ｆモデル１０１から発行されたトランザクションの信号を解析し、ＷＲＩＴＥ、ＲＥＡＤ、複数サイクル動作などの発行コマンド、及び発行コマンドの実行に必要な情報（パラメータ情報１０６など）を取得する。
【００５５】
サイクルレベル信号変換機能５０２は、上記ＴＲ情報解析機能５０１で取得したトランザクションの情報を、トランザクタ回路２０１に接続された回路（ユーザ回路Ｂ２０２）を動作させるためのサイクルレベルの信号に変換する。
【００５６】
状態退避機能５０３は、対象の接続回路（ユーザ回路Ｂ２０２）の現在の状態を、接続回路状態復元情報５１１として記憶領域５２０内に格納（退避）する。接続回路状態復元情報５１１は、上記接続回路の状態を事前動作の直前の状態に復元するための情報である。
【００５７】
接続回路事前動作機能５０４は、イベント先行確認機能を含み、上記トランザクションの情報で取得した同期サイクル数（Ｍ＝Ｍ１）分、接続回路（ユーザ回路Ｂ２０２）を事前動作（区別のためＰ１とする）させる。そして、この同期サイクル数（Ｍ１）内においてイベントが発生した場合は、当該イベントが発生したイベント発生サイクル数（Ｍ２）の情報（５１２）を記憶領域５２０内へ格納する。
【００５８】
状態復元機能５０５は、記憶領域５２０に格納された接続回路状態復元情報５１１を使用して、接続回路における事前動作の後の状態を、事前動作の前の状態へ復元する（戻す）。
【００５９】
接続回路動作機能５０６は、トランザクションの情報で取得した同期サイクル数（Ｍ＝Ｍ１／Ｍ２）分、接続回路（ユーザ回路Ｂ２０２）を動作（区別のためＰ２とする）させる。
【００６０】
なお、上記退避・復元（接続回路状態復元情報５１１の取得など）に関する方法・手段については特に限定されない。例としては、ＦＰＧＡのリードバック機能を使用する方法、または、接続回路に状態退避機能を具備する構成などが挙げられる。
【００６１】
＜条件＞
図１等に基づき、本実施の形態のシステムでの検証（シミュレーション）の処理や回路構成に関し、条件（前提）や事例などについて以下である。本実施の形態では、上位（ＳＷシミュレータ１００）からは、１回の複数サイクル同期動作のために１つのコマンド（Ｃ０）が発行され、これを受けて下位（ＦＰＧＡボードＩ/Ｆモデル１０１、トランザクタ回路２０１）では、事前動作（イベント先行確認）の指示である第１のコマンド（Ｃ１）と、本動作の指示である第２のコマンド（Ｃ２）との２つの処理が自動的に行われる。
【００６２】
ＳＷシミュレータ１００からＦＰＧＡボードＩ/Ｆモデル１０１に対して発行するトランザクション情報に関して、あるサイクル時点Ｎ（シミュレーション開始からＮサイクル後の時点）で、「複数サイクル同期動作」のコマンド（Ｃ０）が発行される。当該コマンド（Ｃ０）には、同期サイクル数Ｍの指定が伴う。事例としてＭ＝５０とする。上記Ｃ０，Ｍ＝５０を含むトランザクション情報がＦＰＧＡボードＩ/Ｆモデル１０１に対して発行される。
【００６３】
ＦＰＧＡボードＩ/Ｆモデル１０１からトランザクタ回路２０１に対するトランザクションにおいては、Ｃ０に基づき、第１の指示（Ｃ１）、第２の指示（Ｃ２）が順に行われる。それぞれで指定される同期サイクル数Ｍは、Ｃ１ではＭ１、Ｃ２ではＭ１／Ｍ２である。これらに対応して、ＦＰＧＡ２００側では、事前動作（Ｐ１）、本動作（Ｐ２）が順に行われる。
【００６４】
また前提・事例として、ＦＰＧＡ２００側のユーザ回路Ｂ２０２は、上記コマンド発行（動作開始）によるＮサイクル時点から例えば２０サイクル後であるＮ＋２０サイクル時点に、イベントが発生する回路であるとする（図１（ｂ），後述の図６）。イベント発生有無は「有り」、イベント発生サイクル数（Ｍ２）は２０である。
【００６５】
＜処理フロー＞
上記条件等に基づく処理フローについて説明する。図４でＦＰＧＡボードＩ/Ｆモデル１０１の処理、及び図５でトランザクタ回路２０１の処理を示す（図１、図３、図６等も対応）。以下Ｓ４０１等は処理ステップを示す。
【００６６】
Ｓ４０１：  図４で、ＦＰＧＡボードＩ/Ｆモデル１０１は、Ｎサイクル時点で上位からトランザクション情報（Ｃ０，Ｍ等を含む）を受けると、ＴＲ情報解析機能４０１によりＴＲ情報を解析する処理を行う。即ち、発行コマンド：Ｃ０、同期サイクル数：Ｍ＝５０、等の情報を取得する。また必要に応じてサイクルレベル信号変換機能５０２により、ハードウェア側のクロックに対応した信号への変換処理を行う。
【００６７】
Ｓ４０２：  トランザクタ回路用信号変換機能４０２により、上記取得情報（Ｃ０，Ｍ）を用いて、トランザクタ回路２０１へ発行するための信号に変換する処理を行う。
【００６８】
Ｓ４０３：  事前動作機能４０３により、上記信号を用いて、トランザクタ回路２０１に対し、指定の同期サイクル数（Ｍ１＝５０）分の事前動作指示を第１のコマンド：Ｃ１（第１のトランザクション）として発行する。
【００６９】
Ｓ４０４：  ＦＰＧＡボードＩ/Ｆモデル１０１（事前動作指示機能４０３）は、トランザクタ回路２０１からのＣ１結果の通知を待ち受ける。この通知は、事前動作完了（イベント先行確認）の通知であり、少なくともイベント有無を示す情報が含まれる。そしてこの通知を受けると、ＦＰＧＡボードＩ/Ｆモデル１０１（事前動作指示機能４０３）は、図３のトランザクタ回路２０１の記憶領域５２０のイベント発生サイクル数（Ｍ２）の情報を参照して取得する。前述のように接続回路（ユーザ回路Ｂ２０２）はＮ＋２０サイクル時点でイベントを発行するので、イベント発生サイクル数（Ｍ２）として２０が取得される。なお、上記Ｃ１結果の通知でイベント有無だけでなくイベント発生サイクル数（Ｍ２）を一緒に通知してもよい。
【００７０】
Ｓ４０５：  事前動作指示機能４０３は、上記通知（イベント情報）をもとに、イベント有無などを判定（確認）する。イベント有りの場合（Ｙ）はＳ４０６へ、イベント無しの場合（Ｎ）はＳ４０９へ進む。
【００７１】
Ｓ４０９：  イベント無しの場合（Ｎ）、動作指示機能４０４により、最初（Ｃ０，Ｃ１）に指定された同期サイクル数（Ｍ＝５０）のままの指定で、動作指示のコマンド（Ｃ２）を第２のトランザクションとしてトランザクタ回路２０１へ発行する。
【００７２】
Ｓ４０６：  イベント有りの場合（Ｙ）、動作指示機能４０４により、動作指示のコマンド（Ｃ２）を発行する前に、指定の同期サイクル数（Ｍ）を、イベント発行サイクル数（Ｍ２＝２０）に合わせて変更する。
【００７３】
Ｓ４０７：  動作指示機能４０４により、上記変更後の同期サイクル数（Ｍ２＝２０）を指定して、動作指示のコマンド（Ｃ２）を第２のトランザクションとしてトランザクタ回路２０１へ発行する。
【００７４】
Ｓ４０８：  イベント有りの場合なので、Ｍ２分のサイクルの動作後に丁度イベントが発生している。イベント情報取得・発行機能４０５は、これによるイベント情報を取得し、ＳＷシミュレータ１００に対して当該イベント情報を発行する。
【００７５】
Ｓ４１０：  動作指示機能４０４は、Ｓ４０９またはＳ４０８におけるＣ２結果（通知）を受領し、処理を終了する。
【００７６】
Ｓ５０１：  図５で、トランザクタ回路２０１に対してＦＰＧＡボードＩ/Ｆモデル１０１からのトランザクションが発行される（対応するコマンド等を受領する）。ＴＲ情報解析機能５０１は、事前動作指示（Ｃ１）（Ｍ１＝５０）、または、動作指示（Ｃ２）（Ｍ１＝５０またはＭ２＝２０）を解析により取得する。
【００７７】
Ｓ５０２:  トランザクタ回路２０１は、上記取得したコマンドがＣ１かＣ２か判定する。Ｃ１の場合（Ｙ）はＳ５０３へ、Ｃ２の場合（Ｎ）はＳ５１０へ進む。
【００７８】
Ｓ５０３：  状態退避機能５０３は、接続回路（ユーザ回路Ｂ２０２）の現在の状態を、接続回路状態復元情報５１１として記憶領域５２０内に保存（退避）する。
【００７９】
Ｓ５０４：  接続回路事前動作機能５０４は、接続回路（ユーザ回路Ｂ２０２）を、Ｃ１で指定された同期サイクル数（Ｍ１＝５０）分、事前動作（Ｐ１）させる。
【００８０】
Ｓ５０５：  上記Ｃ１の事前動作に伴い、接続回路事前動作機能５０４は、接続回路（ユーザ回路Ｂ２０２）で発生するイベントがある場合はそのイベント情報を取得する。
【００８１】
Ｓ５０６：  上記イベント情報に基づきイベント有りの場合（Ｙ）は、Ｓ５０７の処理を行う。前述した例では、接続回路（ユーザ回路Ｂ２０２）が例えばＮ＋２０サイクル時点でイベントを発生する。
【００８２】
Ｓ５０７：  接続回路事前動作機能５０４は、上記発生イベントについて、イベント発生サイクル数（Ｍ２＝２０）の情報を、記憶領域５２０内に設定する。
【００８３】
Ｓ５０８：  状態復元機能５０５は、Ｓ５０３で保存された情報（５１１）を用いて、接続回路（ユーザ回路Ｂ２０２）の状態を、事前動作の前の状態（Ｎサイクル時点の状態）に復元する。
【００８４】
Ｓ５０９：  一方、前記動作指示（Ｃ２）の場合、接続回路動作機能５０６は、接続回路（ユーザ回路Ｂ２０２）を、Ｃ２で指定された同期サイクル数（Ｍ１＝５０またはＭ２＝２０）分、動作（Ｐ２）させる。
【００８５】
Ｓ５１０：  トランザクタ回路２０１は、上記Ｓ５０４の事前動作（Ｐ１）またはＳ５０９の動作（Ｐ２）の結果を、応答として、ＦＰＧＡボードＩ/Ｆモデル１０１へ通知する。
【００８６】
＜効果等＞
本実施の形態によれば、複数サイクルで同期をとることができるため高速・短時間での検証を実現でき、かつ、ソフトウェア側がハードウェア側からの発生イベントを適切に取得して処理する手段（イベント情報を正確なタイミングで処理する仕組み）としてイベント先行確認（事前動作）の機能を備えるため、高精度な検証を実現できる。
【００８７】
従来の毎サイクル同期方式では、複数サイクルの検証のために、ＨＷ−ＳＷ間のトランザクションの数が増えるため、検証速度が遅くなる。一方、本実施の形態では、複数サイクルの検証のために、Ｃ１，Ｃ２の２つのトランザクションで済むため、検証速度が早くなる。また、従来のトランザクション同期方式では、イベントの発生と処理のタイミングが異なるため、検証精度が低い。一方、本実施の形態では、イベントの発生に合わせたタイミングで処理できるため、検証精度が高くなる。
【００８８】
図６，図７等を用いて例を示す。図６は、本実施の形態の方式の適用結果を、図７の従来技術のトランザクション同期方式の場合と比較して示している。図６で、検証の際、ＳＷシミュレータ１００は、シミュレーション開始からＮサイクル時点（６０１）で、「複数サイクル同期動作」の指示（Ｃ０）（Ｍ＝５０）を発行する。この際、ＦＰＧＡボードＩ/Ｆモデル１０１からトランザクタ回路２０１に対し、イベント先行確認のための事前動作指示（Ｃ１）（Ｍ１＝５０）を発行することにより（第１のトランザクション）、イベント情報（イベント有り、Ｍ２＝２０）を取得済みとなる。そのイベント先行確認の結果に応じて、同期サイクル数Ｍを調整して、ＦＰＧＡボードＩ/Ｆモデル１０１からトランザクタ回路２０１に、動作指示（Ｃ２）（Ｍ２＝２０）を発行する（第２のトランザクション）（６０２）。これにより、ＦＰＧＡ２００の接続回路（ユーザ回路Ｂ２０２）を丁度イベントが発生する時点まで動作させることになる。ＦＰＧＡ２００の接続回路では、Ｎサイクル時点（６０１）の動作開始（６０３）から２０サイクル経ったＮ＋２０サイクル時点（６０４）でイベントが発行され（６０５）、動作完了の通知が行われる（６０６）。ＳＷシミュレータ１００は、Ｎ＋２０サイクル時点（６０４）で通知（６０６）を受け、イベント情報を取得して処理することができる（６０７）。
【００８９】
前述した図７の従来技術では、イベント取得及び処理がＮ＋５０サイクル時点であるのに対し、図６の本実施の形態では、Ｎ＋２０サイクル時点ですぐにイベントを取得して処理することができるため、検証の精度が高くなる。
【００９０】
同期サイクル数Ｍはパラメータ（１０６）で制御できる。他の実施の形態として、複数回の同期にあたり、それぞれの同期サイクル数Ｍ（Ｃ１で指定するＭ１）を一定値にするのではなく、パラメータ（１０６）で可変に制御する。例えば前回までの結果（イベント発生状況）を考慮して次回の好適なＭ１値を決定する等。それにより、サイクル精度と動作時間を考慮した検証が可能となる。
【００９１】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることは言うまでもない。
【産業上の利用可能性】
【００９２】
本発明は、組込みシステム開発などにおける検証システム、ＦＰＧＡボード、ソフトウェアシミュレータ、等に利用可能である。
【符号の説明】
【００９３】
１０…ＰＣ、２０…ＦＰＧＡボード、３０…通信媒体、１００…ソフトウェアシミュレータ、１０１…ＦＰＧＡボードＩ/Ｆモデル、１０２…ユーザ回路Ａ、１０３…バスモデル、１０４…ＣＰＵモデル、１０５…メモリモデル、１０６…パラメータ情報、１１０…仮想ＳｏＣ、２００…ＦＰＧＡ（実装回路）、２０１…トランザクタ回路、２０２…ユーザ回路Ｂ、４０１…トランザクション情報解析機能、４０２…トランザクタ回路用信号変換機能、４０３…事前動作指示機能、４０４…動作指示機能、４０５…イベント情報取得・発行機能、５０１…トランザクション情報解析機能、５０２…サイクルレベル信号変換機能、５０３…状態退避機能、５０４…接続回路事前動作機能、５０５…状態復元機能、５０６…接続回路動作機能、５１１…接続回路状態復元情報、５１２…イベント発生サイクル数、５２０…記憶領域。
【図１】
0005492704.tif 000002
【図２】
0005492704.tif 000003
【図３】
0005492704.tif 000004
【図４】
0005492704.tif 000005
【図５】
0005492704.tif 000006
【図６】
0005492704.tif 000007
【図７】
0005492704.tif 000008