(57)【要約】      （修正有）【課題】バスが提供するトランザクションと異なる抽象度のバストランザクションを前提とするバス周辺モデルをバスに接続する場合、抽象度変換アダプタを不要とし、処理のオーバヘッドを縮減する。            【解決手段】トランスファレイヤのバストランザクションを生成するバスマスタ１０Ａと、トランザクションレイヤのバストランザクションを生成するバスマスタ１０Ｂと、バスマスタからのバストランザクションをバススレーブに転送するバス２０を備え、トランスファレイヤのバスインタフェースを有するスレーブのベースモデル３０Ａが、転送されたトランザクションレイヤのバストランザクションを受け取って転送情報をトランスファレイヤのバストランザクション対応に変換しトランスファレイヤのトランザクションに対応する関数を呼び出す。また、トランザクションレイヤのバスインタフェースを有するスレーブのベースモデル３０Ｂも同様。【選択図】図１
2006343942.tif 000002
【特許請求の範囲】
【請求項１】
バスマスタからのバストランザクションがバスを介してバススレーブに転送されるバスシステムのシミュレーションを行うバスシステム設計装置であって、
シミュレーション・モデルの抽象度が互いに異なる少なくとも２つのレベルのうち一のレベルに対応したバスインタフェースを有し前記一のレベルのバストランザクションを受信するバススレーブが、他のレベルに対応したバストランザクションを受信するトランザクション受信手段を備え、
前記バスマスタから前記バスを介して前記バススレーブに前記他のレベルのバストランザクションが転送された場合、前記バススレーブの前記トランザクション受信手段は、転送された前記他のレベルのバストランザクションを受け取って前記バストランザクションの情報の一部を、前記一のレベルのバストランザクション対応のものに変換し、前記一のレベルのバストランザクションに対応する処理を実行する、ことを特徴とするバスシステム設計装置。
【請求項２】
前記バスには、前記抽象度が互いに異なる少なくとも２つのレベルのバストランザクションをそれぞれ生成する少なくとも２つのバスマスタが接続自在とされる、ことを特徴とする請求項１記載のバスシステム設計装置。
【請求項３】
前記バススレーブにおいて、前記一のレベルの基本クラスが、前記他のレベルのバストランザクションを受信する関数を実装し、前記基本クラスにおいて、前記抽象度の変換を行う、ことを特徴とする請求項１記載のバスシステム設計装置。
【請求項４】
前記一のレベルの基本クラスにおいて、前記一のレベルのバストランザクションを受信する関数は純粋仮想関数として宣言され、前記バススレーブにおいて、前記一のレベルのバストランザクションに対応する処理を実行するにあたり、前記基本クラスを継承した前記一のレベルのバストランザクション関数が呼び出される、ことを特徴とする請求項３記載のバスシステム設計装置。
【請求項５】
前記バスマスタとして、
ＲＴＬ（Register  Transfer  Level）よりも抽象度が高く、バスサイクルとして、リード、ライトのアドレスフェーズとデータフェーズを規定するトランスファレベルのバストランザクションを前記バスに対して発行する第１のバスマスタと、
前記トランスファレベルよりも抽象度が高く、バスサイクルとして、リード、ライトを規定するトランザクションレベルのバストランザクションを前記バスに対して発行する第２のバスマスタと、
を含み、
前記バスは、前記第１及び第２のバスマスタから発行されたバストランザクションを、宛先のバススレーブに転送し、
トランスファレベルのバスインタフェースを有するスレーブのベースモデルが、トランザクションレベルのバストランザクションを受信するトランザクションレイヤ・トランザクション受信関数を含み、前記バススレーブにおいて、トランザクションレベルのバストランザクションが転送された場合、前記トランザクションレイヤ・トランザクション受信手段は、転送された前記トランザクションレベルのバストランザクションを受け取って転送情報を、前記トランスファレベルのバストランザクション対応に変換して、前記トランスファレベルのトランザクションに対応する関数を呼び出し、
前記トランスファレベルのバストランザクションが転送された場合、トランスファレベルのトランザクション受信関数を呼び出す、ことを特徴とする請求項１記載のバスシステム設計装置。
【請求項６】
トランザクションレベルのバスインタフェースを有するスレーブのベースモデルが、トランスファレベルのバストランザクションを受信するトランスファレイヤ・トランザクション受信関数を含み、前記バススレーブにおいて、トランスファレベルのバストランザクションが転送された場合、前記トランスファレイヤ・トランザクション受信手段は、転送された前記トランスファレベルのバストランザクションを受け取って、転送情報を、前記トランザクションレベルのバストランザクション対応に変換して、前記トランザクションレベルのトランザクションに対応する関数を呼び出し、
前記トランザクションレベルのバストランザクションが転送された場合、トランザクションレベルのトランザクション受信関数を呼び出す、ことを特徴とする請求項１又は５記載のバスシステム設計装置。
【請求項７】
バスを含むシステムのシミュレーションを行う装置を用いたバスシステムの設計方法において、
バスマスタが、シミュレーション・モデルの抽象度が互いに異なる少なくとも２つのレベルの少なくとも一方のバストランザクションをバスに対して発行する工程と、
前記バスが、前記バスマスタからのバストランザクションをバススレーブに転送する工程と、
を有し、
前記２つのレベルのうち一のレベルに対応するバスインタフェースを有するバススレーブに、他のレベルのバストランザクションを受信するトランザクション受信関数をあらかじめ設けておき、
前記バススレーブにおいて、前記バスマスタから前記バスを介して前記他のレベルのバストランザクションが転送された場合、前記他のレベルのバストランザクションを受信する前記トランザクション受信関数は、前記他のレベルのバストランザクションを受け取って、前記一のレベルのバストランザクションに変換し、前記一のレベルのバストランザクションに対応する関数を呼び出す工程を含む、ことを特徴とするバスシステム設計方法。
【請求項８】
前記バススレーブにおいて、前記一のレベルの基本クラスが、前記他のレベルのバストランザクションを受信する関数を実装し、前記基本クラスにおいて、前記抽象度の変換を行う、ことを特徴とする請求項７記載のバスシステム設計方法。
【請求項９】
前記一のレベルの基本クラスにおいて、前記一のレベルのバストランザクションを受信する関数は、純粋仮想関数として宣言されており、前記一のレベルのバストランザクションに対応する処理を実行するにあたり、前記基本クラスを継承した前記一のバストランザクション関数が呼び出される、ことを特徴とする請求項８記載のバスシステム設計方法。
【請求項１０】
前記バスマスタとして、
ＲＴＬ（Register  Transfer  Level）よりも抽象度が高く、バスサイクルとして、リード、ライトのアドレスフェーズとデータフェーズを規定するトランスファレベルのバストランザクションを前記バスに対して発行する第１のバスマスタと、
前記トランスファレベルよりも抽象度が高く、バスサイクルとして、リード、ライトを規定するトランザクションレベルのバストランザクションを前記バスに対して発行する第２のバスマスタと、
が前記バスに接続され、
前記バスは、前記第１及び第２のバスマスタからのバストランザクションを、宛先のバススレーブに転送し、
トランスファレベルのバスインタフェースを有するスレーブのベースモデルが、トランザクションレベルのバストランザクションを受信するトランザクションレイヤ・トランザクション受信関数を含み、前記バススレーブにおいて、トランザクションレベルのバストランザクションが転送された場合、前記トランザクションレイヤ・トランザクション受信手段は、転送された前記トランザクションレベルのバストランザクションを受け取って、転送情報を、前記トランスファレベルのバストランザクション対応に変換して、前記トランスファレベルのトランザクションに対応する関数を呼び出し、
前記トランスファレベルのバストランザクションが転送された場合、トランスファレベルのトランザクション受信関数を呼び出す、ことを特徴とする請求項８記載のバスシステム設計方法。
【請求項１１】
トランザクションレベルのバスインタフェースを有するスレーブのベースモデルが、トランスファレベルのバストランザクションを受信するトランスファレイヤ・トランザクション受信関数を含み、
前記バススレーブにおいて、トランスファレベルのバストランザクションが転送された場合、前記トランスファレイヤ・トランザクション受信手段は、転送された前記トランスファレベルのバストランザクションを受け取って、転送情報を、前記トランザクションレベルのバストランザクション対応に変換し、前記トランザクションレベルのトランザクションに対応する関数を呼び出し、
前記トランザクションレベルのバストランザクションが転送された場合、トランザクションレベルのトランザクション受信関数を呼び出す、ことを特徴とする請求項８又は１０記載のバスシステム設計方法。
【請求項１２】
バスを含むシステムのシミュレーションを行う装置を構成するコンピュータに、
バスマスタが、シミュレーション・モデルの抽象度が互いに異なる少なくとも２つのレベルの少なくとも一方のバストランザクションを前記バスに対して発行する処理と、
前記バスが、前記バスマスタからのバストランザクションをバススレーブに転送する処理と、
前記２つのレベルのうち一のレベルに対応するバスインタフェースを有するバススレーブに、他のレベルのバストランザクションを受信するトランザクション受信関数をあらかじめ設け、前記バススレーブにおいて、前記バスマスタから前記バスを介して前記他のレベルのバストランザクションが転送された場合、前記他のレベルのバストランザクションを受信する前記トランザクション受信関数は、前記他のレベルのバストランザクションを受け取って、前記一のレベルのバストランザクションに変換し、前記一のレベルのバストランザクションに対応する関数を呼び出す処理と、
を実行させるプログラム。
【請求項１３】
請求項１２記載のプログラムにおいて、
前記バススレーブにおいて、前記一のレベルの基本クラスが、前記他のレベルのバストランザクションを受信する関数を実装し、前記基本クラスにおいて、前記抽象度の変換を行う処理を前記コンピュータに実行させるプログラム。
【請求項１４】
請求項１３記載のプログラムにおいて、
前記一のレベルの基本モデルにおいて、前記一のレベルのバストランザクションを受信する関数について純粋仮想関数として宣言されており、前記一のレベルのバストランザクションに対応する処理を実行するにあたり、前記基本クラスを継承した前記一のバストランザクション関数が呼び出される、ことを特徴とするプログラム。
【請求項１５】
請求項１２記載のプログラムにおいて、
前記バスマスタとして、ＲＴＬ（Register  Transfer  Level）よりも抽象度が高くバスサイクルとしてリード、ライトのアドレスフェーズ、データフェーズを規定するトランスファレベルのバストランザクションを前記バスに対して発行する第１のバスマスタと、
トランスファレベルよりも抽象度が高くバスサイクルとしてリード、ライトを規定するトランザクションレベルのバストランザクションを前記バスに対して発行する第２のバスマスタと、
を備え、
前記バスは、前記バスマスタからのバストランザクションを前記バススレーブに転送し、
トランスファレベルのバスインタフェースを有するスレーブのベースモデルが、トランザクションレベルのバストランザクションを受信するトランザクションレイヤ・トランザクション受信関数を含み、
前記バススレーブにおいて、トランザクションレベルのバストランザクションが転送された場合、前記トランザクションレイヤ・トランザクション受信手段は、転送された前記トランザクションレベルのバストランザクションを受け取って、転送情報を、前記トランスファレベルのバストランザクション対応に変換し、前記トランスファレベルのトランザクションに対応する関数を呼び出し、前記トランスファレベルのバストランザクションが転送された場合、トランスファレベルのトランザクション受信関数を呼び出す処理を、前記コンピュータに実行させるプログラム。
【請求項１６】
請求項１２又は１５記載のプログラムにおいて、
トランザクションレベルのバスインタフェースを有するスレーブのベースモデルが、トランスファレベルのバストランザクションを受信するトランスファレイヤ・トランザクション受信関数を含み、
前記バススレーブにおいて、トランスファレベルのバストランザクションが転送された場合、前記トランスファレイヤ・トランザクション受信手段は、転送された前記トランスファレベルのバストランザクションを受け取って、転送情報を、前記トランザクションレベルのバストランザクション対応に変換し、前記トランザクションレベルのトランザクションに対応する関数を呼び出し、
前記トランザクションレベルのバストランザクションが転送された場合、トランザクションレベルのトランザクション受信関数を呼び出す処理を、前記コンピュータに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、システム設計環境に関し、特に、バスシステムの検証、性能評価等に適用して好適な、シミュレーション用の装置、方法並びにプログラムに関する。
【背景技術】
【０００２】
近時、半導体集積回路の微細化の進展、集積度の向上により、ＳＯＣ（システムオンチップ）等の設計工程において、例えばアーキテクチャの検証をＲＴＬ（Register  Transfer  Level）のレベルで行うことは困難となりつつある。特に、アプリケーションコードを実行するプロセッサ等の性能をＲＴＬレベルで検証することは困難である。アーキテクチャの検証等の高速化の一つにシミュレーション・モデルの抽象化がある。これは、ＲＴＬよりも抽象度の高い機能レベル等でモデリングし、当該レベルでシミュレーションすることでシミュレーションを高速化し、検証の高速化を図るものである。バスを含むシステムのアーキテクチャの設計及び検証（例えばバスの性能評価・解析等）において、例えばサイクル精度のトランザクションレベル・モデル（Transaction  Level  Modeling：ＴＬＭ）が用いられる。プロセッサ、バス、Ｉ／Ｏ装置、メモリ等は、トランザクションレベルモデルとしてライブラリ等で提供される。トランザクションレベルモデリングではバス・プロトコルはバスモデルの中にモデリングされており、各ＩＰは、ＡＰＩ（Application  Programming  Interface）を通してバスモデルと通信を行う。ＴＬＭバスモデルでは、バスサイクル精度を有しＲＴＬと比較して数桁の高速シミュレーションを可能としているものもある。
【０００３】
ＲＴＬよりも高いレベルのモデルを抽象化する場合、該モデルの抽象度は、ユニークではない。シミュレーション・モデルには複数の抽象度があり、各モデルならびにモデルのバスインタフェースは、検証したいレベルで、モデリングされる。この場合、バスモデルは、バストランザクションの抽象度に応じて、用意しておく必要がある。例えばサイクル精度のバスとサイクルカウンタブルなバスとをそれぞれ用意しておく。これは、バスモデルは、単一の抽象度のプロトコルをサポートしているためである。そして、バスが提供するバストランザクションの抽象度と異なる抽象度のバストランザクションを前提とした周辺モデルを当該バスに接続する場合、バスと周辺モデルの間に、抽象度変換アダプタが挿入される。すなわち、バスマスタとバスの間に、バスマスタからのトランザクションの抽象度をバスが提供するトランザクションの抽象度に変換する抽象度変換アダプタが挿入され、バスとバススレーブの間に、バスからのトランザクションの抽象度をバススレーブでサポートするトランザクションの抽象度に変換する抽象度変換アダプタが挿入される（例えば図７（Ａ）、図７（Ｂ）参照）。
【０００４】
なお、オブジェクト指向言語でモデリングされたバス、周辺モデルについては、特許文献１、２等の記載が参照される。ただし、特許文献１、２には、１つのバスで抽象度の異なるバストランザクションを扱うことについてはいっさい開示も示唆もされていない。
【０００５】
【特許文献１】特開２００３−１５９６８号公報
【特許文献２】特開２００４−３４１７３７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
ところで、バスシステムの動作を検証する場合、抽象度の異なるバスインタフェースの間をどのように接続して動作させるかが問題となる。検証対象のバスシステムを構成するバス周辺装置のモデルを、異なる抽象度（のレベル）ごとに用意しておけばよいが、現実的ではない。
【０００７】
また、上記したように、バスを通して通信する装置が、抽象度の異なるバスインタフェースを有し、抽象度の異なるバストランザクションを発行する場合、バストランザクションの抽象度ごとにバスモデルを用意しておく必要がある。
【０００８】
そして、バスが提供するトランザクションと異なる抽象度のバストランザクションを前提とするバス周辺モデルをバスに接続する場合、バスと周辺モデル間に抽象度変換アダプタを挿入する必要があり、処理のオーバヘッドが大きくなる。
【０００９】
さらに、バスマスタとバススレーブとが同じ抽象度のバストランザクションを前提としていても、接続するバスモデルがサポートするトランザクションの抽象度と異なれば、バスマスタ、バススレーブ側の双方に、抽象度変換アダプタを設けることが必要とされ、オーバヘッドが増大する。例えば、バスが、サイクルカウンタブル精度のモデルであるとき、サイクル精度のバスマスタとスレーブが通信するためには、マスタ、スレーブ双方に、抽象度変換アダプタが必要とされる。
【課題を解決するための手段】
【００１０】
本願で開示される発明は、上記課題を解決するために概略以下の構成とされる。
【００１１】
本発明の１つのアスペクトに係る装置は、バスマスタからのバストランザクションがバスを介してバススレーブに転送されるバスシステムの設計・検証を行うバスシステム設計装置であって、シミュレーション・モデルの抽象度が互いに異なる少なくとも２つのレベルのうち一のレベルに対応したバスインタフェースを有し、前記一のレベルのバストランザクションを受信するバススレーブが、他のレベルに対応したバストランザクションを受信するトランザクション受信手段を備え、前記バスマスタから前記バススレーブに、前記他のレベルのバストランザクションが転送された場合、前記バススレーブにおいて、前記トランザクション受信手段は、転送された前記他のレベルのバストランザクションを受け取って前記バストランザクションの情報の一部を、前記一のレベルのバストランザクション対応のものに変換し、前記一のレベルのバストランザクションに対応する処理を実行する。
【００１２】
本発明の１つのアスペクトに係る方法は、
バスマスタが、シミュレーション・モデルの抽象度が互いに異なる少なくとも２つのレベルの少なくとも一方のバストランザクションを生成する工程と、
バスが、前記バスマスタからのバストランザクションをバススレーブに転送する工程と、
を有し、
前記２つのレベルのうち一のレベルに対応するバスインタフェースを有するバススレーブに、他のレベルのバストランザクションを受信するトランザクション受信関数をあらかじめ設けておき、
前記バススレーブにおいて、前記バスマスタから前記バスを介して前記他のレベルのバストランザクションが転送された場合、前記他のレベルのバストランザクションを受信する前記トランザクション受信関数は、前記他のレベルのバストランザクションを受け取って、前記一のレベルのバストランザクションに変換し、前記一のレベルのバストランザクションに対応する関数を呼び出す工程を含む。
【００１３】
本発明の他のアスペクトに係るコンピュータプログラム（例えばコンピュータで読み出し可能な蓄積媒体に格納される）は、
バスを含むシステムの設計装置を構成するコンピュータに、
バスマスタが、シミュレーション・モデルの抽象度が互いに異なる少なくとも２つのレベルの少なくとも一方のバストランザクションを生成する処理と、
バスが、前記バスマスタからのバストランザクションをバススレーブに転送する処理と、
前記２つのレベルのうち一のレベルに対応するバスインタフェースを有するバススレーブに、他のレベルのバストランザクションを受信するトランザクション受信関数をあらかじめ設け、前記バススレーブにおいて、前記バスマスタから前記バスを介して前記他のレベルのバストランザクションが転送された場合、前記他のレベルのバストランザクションを受信する前記トランザクション受信関数は、前記他のレベルのバストランザクションを受け取って、前記一のレベルのバストランザクションに変換し、前記一のレベルのバストランザクションに対応する関数を呼び出す処理と、を実行させるプログラムよりなる。
【００１４】
本発明において、前記バススレーブにおいて、前記一のレベルの基本モデルが、前記他のレベルのバストランザクションを受信する関数について実装しており、前記一のレベルのバストランザクションを受信する関数については純粋仮想関数として宣言されている。
【００１５】
本発明において、前記一のレベルのバストランザクションに対応する処理を実行するにあたり、前記基本クラスを継承した派生クラスの前記一のバストランザクション関数が呼び出される。
【発明の効果】
【００１６】
本発明によれば、バストランザクションの抽象度ごとにバスモデルを用意することを不要としている。
【００１７】
また、本発明によれば、バスが提供するトランザクションと異なる抽象度のバストランザクションを前提とする周辺モデル（バスマスタ、バススレーブ）をバスに接続する場合、バスと周辺モデル間に抽象度変換アダプタを挿入することを不要とし、処理のオーバヘッドを縮減可能としている。
【発明を実施するための最良の形態】
【００１８】
上記した本発明についてさらに詳細に説述すべく、添付図面を参照して以下に説明する。図１を参照すると、本発明においては、ＲＴＬより抽象度が高くバスサイクルとしてリード、ライトのアドレス、データフェーズを規定するTransfer-Level（トランスファレベル）のバストランザクションを生成してバス２０に発行する第１のバスマスタ１０Ａと、Transfer-Levelよりも抽象度が高くバスサイクルとしてリード、ライトを規定するTransaction-Level（トランザクションレベル）のバストランザクションを生成してバス２０に発行するバスマスタ１０Ｂとを備え、バス２０は、バスマスタ１０Ａ、１０Ｂからのバストランザクションをデコードして宛先のバススレーブに転送する。
【００１９】
Transfer-Levelのバスインタフェースを有するバススレーブ３０Ａのベースモデル（基本クラス）は、Transaction-Levelのバストランザクションを受信するTransaction-Layer（トランザクションレイヤ）トランザクション受信関数を含み、このバススレーブ３０Ａにおいて、Transaction-Levelのバストランザクションが転送された場合、Transaction-Layerトランザクション受信関数は、転送された前記Transaction-Levelのバストランザクションを受け取って、転送オブジェクトから、Transfer-Levelのバストランザクション対応のアドレス、データを取り出し、前記Transfer-Levelのトランザクションに対応する関数を呼び出す。またTransfer-Levelのバストランザクションが転送された場合、基本モデルを継承したスレーブモデルのTransfer-Levelのトランザクション受信関数が起動される。
【００２０】
Transaction-Levelのバスインタフェースを有するバススレーブ３０Ｂのベースモデル（基本クラス）は、Transfer-Levelのバストランザクションを受信するTransfer-Layer（トランスファレイヤ）トランザクション受信関数を含み、このバススレーブ３０Ｂにおいて、Transfer-Levelのバストランザクションが転送された場合、Transfer-Layerトランザクション受信関数は、転送された前記Transfer-Levelのバストランザクションを受け取って、アドレス、データ情報から、前記Transaction-Levelのバストランザクション対応の転送オブジェクトに変換し、前記Transaction-Levelのトランザクションに対応する関数を呼び出す。またTransaction-Levelのバストランザクションが転送された場合、基本モデルを継承したスレーブモデルのTransaction-Levelのトランザクション受信関数が起動される。
【００２１】
このように、本発明は、バストランザクションの抽象度変換機能を備えたモデルをベースに、オブジェクト指向言語の派生（継承）を利用してスレーブモデルをモデリングしている。すなわち、本発明によれば、バストランザクションの抽象度変換モジュールを必要とせずに、複数の異なる抽象度のバストランザクションを、１つのバスモデルで扱うことができる。
【００２２】
前述したように、ＳＯＣ等の大規模集積回路の設計工程等において、検証の高速化するため、バスマスタ、バススレーブをオブジェクト指向言語で、ＲＴＬよりも高い抽象度でモデル化する。バスマスタ、バススレーブと、バスの周辺モデルを個別にモデル化しているため、バストランザクションの抽象度は必ずしも一致しない。
【００２３】
以下、バストランザクションの抽象度について説明しておく（OCP-IP；OCP  InternationalPartnershipAssociationInc.）。モデルの抽象度として、ＲＴＬレイヤ、Transfer-Layer、Transaction-Layer、Message-Layerが存在する。
【００２４】
図２に、バストランザクションの抽象度について、ＲＴＬ、Transfer-Layer、Transaction-Layerの各レイヤ（Layer）の一例を示す。
【００２５】
図２のＲＴＬは、ＲＴＬの抽象度を表している。
【００２６】
図２のTransfer-Layerは、バスのインタフェースピンは抽象化され隠蔽されているが、サイクル単位でのバストランザクションを評価した際に、ＲＴＬと同じ精度である。
【００２７】
図２のTransaction-Layerは、Transfer-Layerよりも抽象度が高く、サイクル単位でバストランザクションを評価した際に、ＲＴＬとは必ずしも同じでないが、トランザクションの開始から終了までのタイミングは、ＲＴＬと等価である。
【００２８】
Message-Layerは、Transaction-Layerよりも抽象度が高く、通信に時間概念がなく、送信側と受信側で直接データのやりとりが行われ、バスを必ずしも必要としないレベルである。なお、本明細書ではMessage-Layerは扱わない。
【００２９】
本発明は、バスマスタ、バススレーブが、Transfer-Layer、Transaction-Layerのいずれであっても、アダプタを備えることなく、バスとの接続を可能としたバスシステムを実現している。
【００３０】
オブジェクト指向言語でモデリングされるTransfer-Layer、Transaction-Layerのバスマスタ、バススレーブ間の通信は、通信用の関数をコールすることで実現される。バスマスタからスレーブへのリード時、Transfer-Layerのバスマスタは、アドレスフェーズ用の関数ReadAdr()と、データフェーズ用の関数ReadData()をコールする（呼び出す）。Transaction-Layerのバスマスタは、関数Read()のみをコールする。バスマスタからスレーブへのライト時、Transfer-Layerのバスマスタは、アドレスフェーズ用の関数WriteAdr()と、データフェーズ用の関数WriteData()をコールする（呼び出す）。Transaction-Layerのバスマスタは、関数Write()をコールする。
【００３１】
バスマスタは、バストランザクションの送信先のバススレーブのバスインタフェースの抽象度に関係なく、バスに対してトランザクションを発行する。バスマスタが、Transfer-Layer、Transaction-Layerのバスインタフェースをもつ場合、Transfer-Layer、Transaction-Layerのバストランザクションをそれぞれ発行する。
【００３２】
バスは、Transfer-Layer、Transaction-Layerのいずれのバストランザクションであっても、宛先のバススレーブに対して該トランザクションを転送する。
【００３３】
本実施形態では、バススレーブは、スレーブモデルが必要とするバスのトランザクション抽象度に応じて、ベースモデルが用意されている。
【００３４】
バススレーブは、Transfer-Layerのバスインタフェースをもつ場合には、Transfer-Layer用のベースモデル（基本クラス）を備え、Transaction-Layerのバスインタフェースをもつ場合には、Transaction-Layer用のベースモデル（基本クラス）が用意される。スレーブモデルは、このベースモデルを継承する。
【００３５】
スレーブのベースモデル（基本クラス）における処理内容は、抽象度変換を行うことである。Transfer-Layerのバスインタフェースを有するスレーブにバスマスタから、Transaction-Layerバストランザクションが転送された場合、Transaction-LayerバストランザクションをTransfer-Layerのバストランザクションに変換する。Transfer-Layerのバスインタフェースを有するスレーブにバスマスタから、Transfer-Layerのバストランザクションが転送された場合、変換は行わない。
【００３６】
図３は、Transfer-Layerのバススレーブベースモデル（基本クラス）を模式的に示す図である。Transfer-Layerのバススレーブベースモデルでは、Transaction-Layerトランザクションを受信する関数を実装し、Transfer-Layerトランザクションを受信する関数は純粋仮想関数で宣言しておく。
【００３７】
そして、Transfer-Layerのバススレーブベースモデル（基本クラス）は、Transaction-Layerトランザクション受信用関数を備えている。Transaction-Layerトランザクション受信用関数で行われる処理は、Transfer-Layerトランザクションへの変換である。しかるべきタイミングで、純粋仮想関数で定義されているTransfer-Layerのトランザクション受信関数をコールする。純粋仮想関数であるTransfer-Layerトランザクション用関数のコールは、スレーブベースモデルを継承するスレーブモデルにおけるTransfer-Layerのトランザクション受信関数のコールである。
【００３８】
ここでは、Transfer-Layerのトランザクション受信ライト関数を以下のように定める。
response_type WriteAddress( address_type address );
response_type WriteData( data_type data );
【００３９】
また、Transaction-Layerのトランザクション受信ライト関数を以下のように定める。
response_type Write( transaction_type  *trans );
【００４０】
Transfer-Layerのバススレーブのベースモデル（基本クラス）のクラス名をslave_base_ctlmとする。スレーブモデルのクラス名をslave_module_ctlmとする。
【００４１】
図４は、Transfer-LayerのバススレーブのベースモデルをC++で記述した一例を示す図である。このTransfer-Layerのバススレーブのベースモデルにおいて、Transfer-Layerトランザクション受信関数は、純粋仮想関数（他のクラスの基本クラスとなることが目的であり、当該クラスではオブジェクトを生成しないクラス、すなわち、メンバ関数の定義が省略されインスタンス化できない）として定義されている。コンストラクタ（constructor）は、クラス名（図４では、"slave_base_ctlm"）と同じメンバ関数として定義され、インスタンス生成時自動的に呼び出される。virtual response_type WriteAddress( address_type address )=0;  の"Virtual"が仮想関数、"=0"が、純粋仮想関数であることを規定している。Transaction-Layerでは、バスの転送アドレスや転送データをカプセル化し、抽象度の高い転送オブジェクトでの通信となる。トランザクションのタイプが、transaction_typeである。
【００４２】
図４に示すように、Transaction-Layerの転送受信関数Writeは、抽象化された転送オブジェクト*transから、アドレス情報の取り出し（trans->Address）、データ情報の取り出し（trans->data）を行う。
【００４３】
転送情報の抽象度変換を行った上で、Transfer-Layerの転送受信関数WriteAddress、WriteDataといった関数をコールしている。
【００４４】
なお、図４に示す例では、Transaction-Layerの転送受信関数であるWrite関数から、Transfer-Layerの転送受信関数WriteAddress、WriteDataを順番にコールしているが、かかる構成にのみ制限されるものではない。Transaction-Layerの転送受信関数ReadについてもWriteと同様に、抽象化された転送オブジェクト*transから、アドレス情報の取り出し（trans->Address）、データ情報の取り出し（trans->data）を行い、Transfer-Layerの転送受信関数ReadAddress、ReadDataといった関数がコールされる。
【００４５】
図５は、SystemCを用いてモデリングした場合の一例を示す図である。図５において、sc_eventで宣言されたwrite_address_event、write_data_eventというイベントの発行（notify）に応答して起動されるプロセスWriteAddressProcess、WriteDataProcessを用意する。Transaction-Layerの関数Writeでは、イベントを発行するタイミングを調整することにより、Transfer-Layerの関数をコールすべきタイミングを計る。発行タイミングは、イベント発行関数notifyの引数として与えることができる。しかるべきタイミングでイベントが発行されると、該イベントに応じて、WriteAddressProcess、WriteDataProcessが起動され（SC_METHOD(WriteAddressProcess); sensitive<<write_address_event; SC_METHOD(WriteDataProcess); sensitive<<write_data_event）、Transfer-Layerの関数WriteAddressやWriteDataがコールされる。
【００４６】
図６に、ベースモデル（基本クラス）を継承するスレーブモデル（派生クラス）を示す。Transaction-Layerのバストランザクションを受信した場合、スレーブのベースモデル（基本クラス）で実装されたTransaction-Layerトランザクション受信関数から派生クラスのバススレーブモデルのTransfer-Layerトランザクション受信関数がコールされる。Transfer-Layerのバストランザクションを受信した場合、スレーブベースモデルでは、Transfer-Layerトランザクション受信関数が純粋仮想関数として定義されているため、スレーブベースモデルでは何も行うことなく、スレーブモデルのTransfer-Layerトランザクション受信関数がコールされる。
【００４７】
なお、Transaction-Layerのバススレーブベースモデルについても同様にして、Transaction-Layerのトランザクション、Transfer-Layerのトランザクションを扱うことができる（図１３参照）。
【００４８】
本実施形態によれば、バスを抽象度に依存せず、バススレーブの基本クラスにおいて、抽象度の変換を行うため抽象度変換アダプタを具備することなく、抽象度の異なるインタフェースを有するバスマスタ、バススレーブをバスに接続することができる。
【００４９】
抽象度の異なるインタフェースを有するバスマスタ、バススレーブを、抽象度変換アダプタを用いて接続する場合と比較して、処理のオーバヘッドを少なくし、シミュレーションを高速化することができる。
【００５０】
Transfer-LayerからTransaction-Layerへの抽象度変換処理のオーバヘッドと、Transaction-LayerからTransfer-Layerへの抽象度変換処理のオーバヘッドをともにXとする。
【００５１】
図７（Ａ）を参照すると、このシステムは、Transfer-Layerバスを備え、Transaction-Layerのバスインタフェースのバスマスタ（Transaction-Layer Master）からのバストランザクションは、Transaction-Layer->Transfer-Layerアダプタで、Transaction-LayerからTransfer-Layerへの抽象度変換処理が施され、Transfer-Layerバスからのトランザクションは、Transfer-Layer->Transaction-LayerアダプタでTransaction-Layerへの抽象度変換処理が施され、Transaction-Layerのバスインタフェースのバススレーブ（Transaction-Layer Slave）に転送される。以下、Transfer-Layer MasterとTransaction-Layer Master、Transfer-Layer Slave、Transaction-Layer Slave間の転送のオーバヘッドは以下のようになる。
【００５２】
Transfer-Layer Master ⇒Transfer-Layer Slave +０
Transfer-Layer Master ⇒Transaction-Layer Slave +X
Transaction-Layer Master⇒Transfer-Layer Slave +X
Transaction-Layer Master⇒Transaction-Layer Slave +2X
【００５３】
上記オーバヘッドの単純和は＋４Xとなる。
【００５４】
図７（Ｂ）を参照すると、このシステムは、Transaction-Layerバスを備え、Transfer-Layerのバスインタフェースのバスマスタ（Transfer-Layer Master）からのバストランザクションは、Transfer-Layer->Transaction-Layerアダプタで、Transfer-LayerからTransaction-Layerへの抽象度変換処理が施され、Transaction-Layerバスからのトランザクションは、Transaction-Layer->Transfer-LayerアダプタでTransfer-Layerへの抽象度変換処理が施され、Transfer-Layerのバスインタフェースのバススレーブ（Transfer-Layer Slave）に転送される。以下、Transfer-Layer MasterとTransaction-Layer Master、Transfer-Layer Slave、Transaction-Layer Slave間の転送のオーバヘッドは以下のようになる。
【００５５】
Transfer-Layer Master⇒Transfer-Layer Slave +２X
Transfer-Layer Master⇒Transaction-Layer Slave +X
Transaction-Layer Master⇒Transfer-Layer Slave +X
Transaction-Layer Master⇒Transaction-Layer Slave +０
【００５６】
上記オーバヘッドの単純和は＋４Xとなる。
【００５７】
図７（Ｃ）に示すように、本発明のシステムにおいて、オーバヘッドは以下のようになる。
【００５８】
Transfer-Layer Master⇒Transfer-Layer Slave +０
Transfer-Layer Master⇒Transaction-Layer Slave +X
Transaction-Layer Master⇒Transfer-Layer Slave +X
Transaction-Layer Master⇒Transaction-Layer Slave +０
【００５９】
上記オーバヘッドの単純和は＋２Xとなる。このように、本発明によれば、オーバヘッドが削減される。以下実施例に即して説明する。
【実施例】
【００６０】
本発明の一実施例について説明する。図８は、本発明の一実施例の設計方法を示す図である。ステップＳ１２において、バス仕様からバストランザクションＡＰＩ（Application Programming Interface）の定義が行われる。図９に、Transaction-LayerのＡＰＩ（write及びread）と、Transfer-LayerのＡＰＩ（write_address、write_data及びread_address、read_data）を示す。
【００６１】
ステップＳ１３において、バスの仕様に基づいてアービトレーション、デコーダ等のバス固有の機能を実現する。なお、図１０に示すように、バストランザクションＡＰＩを用いて、バス使用権を持つバスマスタからバススレーブ（バスデコーダで選択されたスレーブ）への通信が行われる。
【００６２】
ステップＳ１４において、バススレーブの基本クラスの作成が行われる。
【００６３】
Transaction-Layerスレーブベースモデルにおいて、Transaction-LayerＡＰＩは、純粋仮想関数で宣言される。Transfer-LayerＡＰＩは、Transaction-LayerＡＰＩをコールするように実装される。
【００６４】
図１１は、本発明の一実施例として、Transaction-LayerスレーブベースモデルをSystemCで記述した一例を示す図である。図11に示すように、Transaction-Layerスレーブベースモデルでは、Transfer-Layerトランザクション受信関数を実装されている。Transfer-Layerトランザクション受信関数の実装記述（関数write_address、write_data）において、アドレスとデータから、Transaction-Layerのオブジェクトtransを作成する（例えば関数write_addressにおけるtrans.address = address；trans.size = size;関数write_dataにおけるtrans.data = data）。そして、Transaction-Layerトランザクション受信関数write(trans)を呼び出す。Transaction-Layerトランザクション受信関数readについても同様である。Transaction-Layerトランザクション受信関数write、read等は純粋仮想関数として宣言しておく。
【００６５】
図１２は、本発明の一実施例として、Transfer-LayerスレーブベースモデルをSystemCで記述した一例を示す図である。イベントの発行に対応して起動するプロセスSC_METHODプロセスが登録される。例えば、write_address_event(書き込みアドレスイベント)に応じて、SC_METHOD(WriteAddressProcess)が起動される。Transaction-Layerトランザクション受信関数の実装では、引数*transより、アドレスとデータを取り出して設定する（_address=trans->address; _data=trans->data）。そして遅延時間、w_address_delay_time時間後に、write_address_event、またw_data_delay_time時間後に、write_data_eventを発行する。WriteAddressProcess、WriteDataProcessは、Transfer-Layerのwrite_address(_address)、write_data(_data)を呼び出す。Transaction-Layerトランザクション受信関数Readについても同様である。また、Transfer-Layerトランザクション受信関数write_address、write_data、read_address、read_data等を純粋仮想関数として宣言しておく。
【００６６】
再び図８を参照して、ステップＳ１５において、バススレーブのベースクラスを継承したバススレーブモデルを作成する。
【００６７】
図１３は、Transaction-LayerスレーブモデルをSystemCで記述した一例を示す図である。Transaction-Layerトランザクション受信関数を実装する。Transaction-Layerトランザクション受信関数writeでは、転送オブジェクトからの情報の取り出し（_address=trans->address; _data=trans->data; _size=trans->size）を行う。
【００６８】
Transaction-Layerトランザクション受信関数readでは、転送オブジェクトからの情報の取り出し（_address=trans->address; _data=trans->data; _size=trans->size）を行う。
【００６９】
Transaction-Layerスレーブベースクラスを継承したTransaction-Layerスレーブモデルは、Transaction-LayerのＡＰＩを実装するだけで、Transaction-Layerのトランザクション、及び、Transfer-Layerのトランザクションを受信することができる。
【００７０】
図１４は、Transfer-LayerスレーブモデルをSystemCで記述した一例を示す図である。Transfer-Layerスレーブモデルは、Transfer-Layerトランザクション受信関数（write_address, write_data, read_address, read_data）を実装する。Transfer-Layerスレーブベースクラスを継承したTransfer-Layerスレーブモデルは、Transfer-LayerのＡＰＩを実装するだけで、Transaction-Layerのトランザクション、及び、Transfer-Layerのトランザクションを受信することができる。
【００７１】
以上、本発明を上記実施例に即して説明したが、本発明は上記実施例の構成にのみ限定されるものでなく、本発明の範囲内で当業者であればなし得るであろう各種変形、修正を含むことは勿論である。
【図面の簡単な説明】
【００７２】
【図１】本発明の一実施形態の構成を示す図である。
【図２】バストランザクションの抽象度を説明する図である。
【図３】Transfer-Layerスレーブベースモデルの動作を説明する図である。
【図４】Transfer-Layerスレーブベースモデル（基本クラス）の記述の一例を示す図である。
【図５】Transfer-Layerスレーブベースモデルの記述の一例を示す図である。
【図６】Transfer-Layerスレーブモデル（派生クラス）の記述の一例を示す図である。
【図７】（A）、（B）は比較例のオーバヘッド、（C）は本発明のオーバヘッドを説明するための図である。
【図８】本発明の一実施例におけるバスシステムの設計工程を説明する図である。
【図９】バストランザクションＡＰＩの定義の一例を示す図である。
【図１０】バスの構成を示す図である。
【図１１】Transaction-Layerスレーブベースクラスの記述の一例（ＳｙｓｔｅｍＣ）を示す図である。
【図１２】Transfer-Layerスレーブベースクラスの記述の一例（ＳｙｓｔｅｍＣ）を示す図である。
【図１３】Transaction-Layerスレーブクラスの記述の一例（ＳｙｓｔｅｍＣ）を示す図である。
【図１４】Transfer-Layerスレーブクラスの記述の一例（ＳｙｓｔｅｍＣ）を示す図である。
【符号の説明】
【００７３】
１０Ａ、１０Ｂ  バスマスタ
２０  バス
３０Ａ、３０Ｂ  バススレーブ
【図１】
2006343942.tif 000003
【図２】
2006343942.tif 000004
【図３】
2006343942.tif 000005
【図４】
2006343942.tif 000006
【図５】
2006343942.tif 000007
【図６】
2006343942.tif 000008
【図７】
2006343942.tif 000009
【図８】
2006343942.tif 000010
【図９】
2006343942.tif 000011
【図１０】
2006343942.tif 000012
【図１１】
2006343942.tif 000013
【図１２】
2006343942.tif 000014
【図１３】
2006343942.tif 000015
【図１４】
2006343942.tif 000016