(57)【要約】【課題】  トランザクションレベルのシミュレーションにおいて、大規模、且つ複雑なシステムに対応でき、性能解析及び検証を容易に行う。【解決手段】  システム記述言語によりバス上の通信をトランザクションにより行うトランザクションレベルで記述されたシミュレーション装置であって、ハードウェアにマッピングする情報であるか否かを示す情報とハードウェアにマッピングしないアトリビュート情報を含むトランザクションを受信し、そのトランザクションを送信する。【選択図】      図７
2006079370.tif 000002
【特許請求の範囲】
【請求項１】
システム記述言語によりバス上の通信をトランザクションにより行うトランザクションレベルで記述されたシミュレーション装置であって、
ハードウェアにマッピングする情報であるか否かを示す情報と、ハードウェアにマッピングしないアトリビュート情報を含むトランザクションを受信する受信手段と、
前記トランザクションを送信する送信手段とを備えることを特徴とするシミュレーション装置。
【請求項２】
前記トランザクションを送信する前に、該トランザクションに対して、ハードウェアにマッピングしないアトリビュート情報を付加する付加手段を備えることを特徴とする請求項１記載のシミュレーション装置。
【請求項３】
前記トランザクションを送信する前に、該トランザクションに対して、ハードウェアにマッピングしないアトリビュート情報を削除する削除手段を備えることを特徴とする請求項１記載のシミュレーション装置。
【請求項４】
前記トランザクションを送信する前に、該トランザクションを複数に分割する分割手段を備えることを特徴とする請求項１記載のシミュレーション装置。
【請求項５】
前記複数のトランザクションを１つに結合する結合手段を備えることを特徴とする請求項４記載のシミュレーション装置。
【請求項６】
前記トランザクションを送信する前に、該トランザクションに対して、ハードウェアにマッピングしないアトリビュート情報の内容を変更する変更手段を備えることを特徴とする請求項１記載のシミュレーション装置。
【請求項７】
前記変更手段は、中継段数の値を変更することを特徴とする請求項６記載のシミュレーション装置。
【請求項８】
システム記述言語によりバス上の通信をトランザクションにより行うトランザクションレベルで記述されたシミュレーション装置のシミュレーション方法であって、
ハードウェアにマッピングする情報であるか否かを示す情報と、ハードウェアにマッピングしないアトリビュート情報を含むトランザクションを受信する工程と、
前記トランザクションを送信する前に、該トランザクションに対して、ハードウェアにマッピングしないアトリビュート情報を付加する工程と、
前記ハードウェアにマッピングしないアトリビュート情報を付加したトランザクションを送信する工程とを有することを特徴とするシミュレーション方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、論理回路から構成されるハードウェアシステムを、システム記述言語により高速シミュレーション可能なモデルとして高い抽象度で記述されたシミュレーション装置に関するものである。
【背景技術】
【０００２】
プロセス技術の進歩によりＬＳＩの集積度が増大し、これまではボードで実現していたシステムをシステムＬＳＩとして１チップ上に搭載することが可能となっている。また、チップ上に搭載する機能モジュールも多様化し、回路規模も増大している。これに伴い、システムＬＳＩを効率的に設計するための手法として、従来のVerilog-HDLやVHDLといったハードウェア記述言語を使用した設計から、SystemCやSpecCといったシステム記述言語による設計が普及してきている。
【０００３】
システム記述言語による設計支援ツールとしては、Synopsys社のCoCentricやCoWare社のConvergenSCが知られている。そして、システム記述言語により記述したモジュールをブロック図入力画面で入力し、システムＬＳＩの設計を行うことが可能になっている。
【０００４】
このシステムＬＳＩの設計が終了すると、設計支援ツールからシミュレーションモデルを生成し、シミュレータを起動してシステムシミュレーションを行い、設計したシステムＬＳＩの機能や性能を確認することができる。即ち、実際のハードウェアを作成する前に、シミュレーションによりシステムの評価を行うことにより、仕様の不具合や性能不足を回避している。
【０００５】
上述のシステム記述言語によるモジュール記述には、記述の抽象度により以下の３種類の記述レベルが一般に知られている。
【０００６】
トランザクションレベル（TL）：
モジュール間のバス通信を捉えて機能を記述する抽象度レベルである。通信の開始及び終了の時間、通信データにより動作するため、クロックに対する精度は低い。イベントにより機能をシミュレートするため、シミュレーション速度は非常に速い。システムとしての動作が実際のハードウェアと一致するため、システム全体の評価に適している。
【０００７】
ARM社による定義では、更に細かく分類されておりPV（プログラマーズビュー）、PVT（プログラマーズビュー＋タイミング）、CL（サイクルレベル）に相当する。
【０００８】
バスサイクルアキュレート（BCA）：
モジュールの入力及び出力のイベントとして機能を記述する抽象度レベルである。動作クロックに対して、入力及び出力部で正確にシミュレートすることができる。
【０００９】
ARM社による定義では、CC（サイクルコーラブル）に相当する。
【００１０】
レジスタトランスファレベル（RTL）：
レジスタファイル間の同期転送を捉えて回路を記述する抽象度レベルである。動作クロックに対して、正確に機能動作をシミュレートすることができ、精度が非常に高い。１クロック毎に機能をシミュレートするため、シミュレーション速度は非常に遅い。
【００１１】
ARM社による定義ではRT（RTLイベントドリブン）に相当する。
【００１２】
一般的に、抽象度が高いほどシミュレーション速度は速くなり、また抽象度が低いほどシミュレーション精度は高くなる。
【００１３】
システムのシミュレーションを行うためのシミュレーションモデルは、トランザクションレベルにより記述される。
【００１４】
トランザクションレベルによるシミュレーションモデルとして、ARM社により公開されているAMBAバスモデルが広く知られている（AMBA AHB Cycle Level Interface (AHB CLI) Specification, 2003年7月15日公開）。
【００１５】
図１は、AHB CLIで定義されているバストランザクションを示す図である。図１に示すトランザクションメソッドは、AMBA AHBバスプロトコルで規定されたハードウェア信号に対応させることができる。図２は、トランザクションメソッド、アトリビュート、ハードウェアの対応を示す図である。図２に示すように、アトリビュート及びメソッド自身が、少なくとも１つのハードウェア信号に対応している。これらのメソッドを使用してバスの動作をシミュレーションすることが可能である。
【００１６】
図３、図４を用いてバスの動作をシミュレーションする方法を説明する。図３は、トランザクションメソッドと信号波形の対応を示す図である。図４は、トランザクションメソッドを用いたシミュレーションを説明するための図である。
【００１７】
時刻Ｔ１において、バスマスター１がバスへのリクエスト要求を行う。このとき、バスマスター１はrequest()メソッドを呼び出し、バスに対して発行する。これはHBUSREQ_M1信号のアサートに相当する。また、バスはアービターに対してアービトレーションを開始させる（arbitrate()）。また、バスからマスターに対してresponse()[OKAY,READY]メソッドが発行される。これはHREADY及びHRESP信号に相当する。
【００１８】
時刻Ｔ２において、マスター２がバスへのリクエスト要求を行う（request()）。これはHBUSREQ_M2信号のアサートに相当する。同時に、バスからマスター１に対してグラントが与えられる（arbitrate()[grant M1]）。これはHGRANT_M1のアサートに相当する。
【００１９】
時刻Ｔ３において、マスター１はグラントを検知（has_grant()[TRUE]）し、バスへのリクエストを取り下げる（end_request()）。これはHBUSREQ_M1信号のデアサートに相当する。また、トランザクションを開始する（set_protection()、init_transaction()）。これらはHPROTO、HTRANS、HADDR、HBURST、HWRITE、HSIZEといった信号に相当する。また同時に、バスはアドレスデコードを行い、スレーブに対してトランザクションを発行する（write()[address A1]、control_info[NONSEQ,INCR4]）。
【００２０】
時刻Ｔ４からＴ７でマスター１は、バスに対してデータを送る（set_data()）。これはHWDATA信号に相当する。そして、バスは、スレーブに対してマスターからのデータを送付する（set_data()）。
【００２１】
時刻Ｔ６でバスはマスター２に対してグラントを与える（arbitrate()[grant M2]）。時刻Ｔ７でマスター２はグラントを検知し、バスアクセスを開始する。
【００２２】
このように、各トランザクションメソッドは、ハードウェア信号の挙動と同じ機能を有しており、メソッド及びアトリビュートはハードウェア信号にマッピングできるものであることがわかる。
【００２３】
AHB CLIでは、トランザクションメソッドの他にバスのコンフィギュレーションを変更するためのメソッドが用意されている。このメソッドにより、バスのアドレス幅、データ幅、アドレスマップを変更することが可能である。
【００２４】
図５は、ハードウェアコンフィギュレーションメソッドを示す図である。図５に示すようにシミュレータがシステムモデルを読み出すエラボレーション時に実行されるメソッドと、シミュレーション実行時に使用することができるメソッドとに分けられる。ここで、シミュレーション実行を行いながら、バスのコンフィギュレーションを変更するメソッドは、デコーダのinitialize_map()及びアービターのpriority()、set_default_master()である。
【００２５】
これらは、実際のハードウェアの動作に関係しており、initialize_map()はremap信号に相当し、priority()、set_dafulat_maste()はアービター内のレジスタアクセス信号に相当する。
【００２６】
また、AHB CLIには、検証目的で使用するメソッドが用意されている。ハードウェアの検証に一般的に使用されているバックドア機能に対応するメソッドである。バスのプロトコルとは無関係に、指定したアドレスのデータを直接読書きすることが可能である。
【００２７】
図６は、検証メソッドを示す図である。マスターが使用する引数はアドレス、データへのポインタ、転送サイズの３つであり、ハードウェアと関連したものである。スレーブが使用する引数は、マスターＩＤ、アドレス、データへのポインタ、転送サイズの４つであり、これらもハードウェアと関連したものである。
【非特許文献１】AMBA AHB Cycle Level Interface (AHB CLI) Specification, 2003年7月15日公開
【発明の開示】
【発明が解決しようとする課題】
【００２８】
しかしながら、上記従来の技術では、システムや各モジュールの検証を行うために、各トランザクションを監視するためのモニタを別途作成する必要があった。一般的に、より低い抽象度であるRTLにおいても、検証用にモニタを作成する必要があり、モニタ開発が二度手間になるという問題があった。
【００２９】
また、一般的に、モニタはそれ自体が一つのモジュールとして実装されるが、モニタの対象とする情報の解析に機能モジュールのみが保持している情報を必要とする場合がある。例えば、バスモデルは内部にアドレスデコーダの機能が含まれるが、アドレスマップの情報は外側からトランザクションを観測しても取得することはできない。このような場合には、機能モジュールとモニタとの間で情報の共有を必要とし、このようなモニタを実装することは非常に手間がかかる。
【００３０】
また、トランザクションレベルでは、各モジュールのメソッドと呼ばれる関数を呼び出すことにより行われるため、容易にモニタを作成することはできなかった。AHB CLIでは、モニタのためのメソッドが用意されているが、モニタ用のメソッドが用意されていないことが殆どである。
【００３１】
また、AHB CLIにあるように検証用のメソッドが定義されていることもあるが、実際のハードウェア動作のシミュレーションを実行している間に、シミュレーション結果に影響を及ぼさないように、メソッドを呼び出す必要があり、これらのメソッドを使用して検証を行うのは手間がかかるものであった。
【００３２】
また、メソッドを多用して検証を行うことは、シミュレーション時のイベントの増加を招き、シミュレーション速度への影響が大きくなり、結果としてシミュレーション速度を低下させるものであった。
【００３３】
一方、システムや各モジュールの検証にメソッドを使わない方法として、各モジュールのトランザクション情報を波形としてダンプし、その波形を観測する方法が知られているが、システムの膨大なシミュレーション結果を波形により検証していくのはほぼ不可能に近い状況であった。また、波形情報をファイルに保持していくためには、膨大なディスク容量を必要とし、充分な時間シミュレーションを実行させることが困難であるという問題もあった。
【００３４】
近年のシステムＬＤＩの大規模化、高機能化により、システム内部に存在する機能モジュール数、バスの本数は増大している。このような複雑なシステムを性能解析及び検証していくのには、上で挙げた従来の手法では非常に困難である。
【００３５】
本発明は、トランザクションレベルのシミュレーションにおいて、大規模、且つ複雑なシステムに対応でき、性能解析及び検証を容易に行うことを目的とする。
【課題を解決するための手段】
【００３６】
本発明は、システム記述言語によりバス上の通信をトランザクションにより行うトランザクションレベルで記述されたシミュレーション装置であって、ハードウェアにマッピングする情報であるか否かを示す情報と、ハードウェアにマッピングしないアトリビュート情報を含むトランザクションを受信する受信手段と、前記トランザクションを送信する送信手段とを備えることを特徴とする。
【００３７】
また、本発明は、システム記述言語によりバス上の通信をトランザクションにより行うトランザクションレベルで記述されたシミュレーション装置のシミュレーション方法であって、ハードウェアにマッピングする情報であるか否かを示す情報と、ハードウェアにマッピングしないアトリビュート情報を含むトランザクションを受信する工程と、前記トランザクションを送信する前に、該トランザクションに対して、ハードウェアにマッピングしないアトリビュート情報を付加する工程と、前記ハードウェアにマッピングしないアトリビュート情報を付加したトランザクションを送信する工程とを有することを特徴とする。
【発明の効果】
【００３８】
本発明によれば、トランザクションレベルのシミュレーションにおいて、大規模、且つ複雑なシステムに対応でき、性能解析及び検証を容易に行うことができる。
【発明を実施するための最良の形態】
【００３９】
以下、図面を参照しながら発明を実施するための最良の形態について詳細に説明する。本実施例では、トランザクションを中継するバス、ブリッジがハードウェアにマッピングしないアトリビュート情報としてトランザクション処理時間、処理モデル名称、中継段数をそのトランザクションに付加するものである。
【００４０】
図７は、本実施例におけるシミュレーションモデルで使用するトランザクションの構成の一例を示す図である。図７において、７００はアドレストランザクションであり、バスにより通信され、マスタもしくはバスからスレーブに対するアクセス要求に相当するトランザクションである。このアドレストランザクション７００において、７０１〜７０３はハードウェアであるバス信号にマッピングされないアトリビュート情報であり、本実施例では以下の情報が保持される。
【００４１】
即ち、トランザクション処理時刻７０１、トランザクションを発行した機能モジュール名称又は受け取ったトランザクションの中継を行った機能モジュール名称７０２、中継段数７０３が保持される。
【００４２】
７０４〜７０８はハードウェアであるバス信号にマッピングされるアトリビュート情報である。アトリビュート情報７０４〜７０８はバスのプロトコルに依存するものであり、バスの種類によってアドレストランザクション７００に含まれるアトリビュート情報も異なってくる。
【００４３】
７０９はハードウェアマッピングフラグであり、アトリビュート情報７０１〜７０８がハードウェアであるバス信号にマッピングされるか否かを示すフラグである。本実施例では、ハードウェアマッピングフラグ７０９において、黒丸で示されるものがハードウェアにマッピングされることを、黒丸が無いものがハードウェアにマッピングされないことを示している。
【００４４】
７１０はリードデータトランザクションであり、バスにより通信され、マスタもしくはバスからのリードアクセス要求に対するリードデータに相当するトランザクションである。このリードデータトランザクション７１０において、７１１〜７１３は上述した７０１〜７０３に対応するアトリビュート情報である。７１４はハードウェアであるバス信号にマッピングされるアトリビュート情報である。７１９は上述した７０９に対応するハードウェアマッピングフラグである。
【００４５】
図８は、本実施例におけるシミュレーションモデルのシステム構成の一例を示す図である。図８において、８０１はクロック生成器であり、システムの各機能モジュール（後述するマスタ、スレーブ、ブリッジなど）に対してクロックを供給する。８１１、８１２、８１３は対象とするシステムを構成する第１、第２、第３のバスであり、各バスに対してマスタとして接続する機能モジュールからのトランザクションを受信し、バスのアービトレーション、アドレスデコードを行い、アービトレーションによって選択された機能モジュールのトランザクションを、各バスに対してスレーブとして接続する機能モジュールに対して中継する。
【００４６】
尚、第１のバス８１１と第３のバス８１３はアドレスビット幅32-bits、データビット幅32-bits、最大バーストデータ転送長4のバスである。また第２のバス８１２はアドレスビット幅32-bits、データビット幅32-bits、最大バーストデータ転送長16のバスである。
【００４７】
８０２はシステムを構成する機能モジュールの１つである第１のマスタである。第１のマスタ８０２は第１のバス８１１に対してマスタとして接続しており、第１のバス８１１に対してトランザクションを発行し、スレーブからのトランザクションを受信する。
【００４８】
８０３はシステムを構成する機能モジュールの１つである第２のマスタである。第２のマスタ８０３は第２のバス８１２に対してマスタとして接続しており、第２のバス８１２に対してトランザクションを発行し、スレーブからのトランザクションを受信する。
【００４９】
８０４はシステムを構成する機能モジュールの１つである第３のマスタである。第３のマスタ８０４は第３のバス８１３に対してマスタとして接続しており、第３のバス８１３に対してトランザクションを発行し、スレーブからのトランザクションを受信する。
【００５０】
８０５はシステムを構成する機能モジュールの１つである第１のスレーブである。第１のスレーブ８０５は第１のバス８１１に対してスレーブとして接続しており、第１のバス８１１からトランザクションを受信し、マスタからのリードに相当するトランザクションに対してはリードデータに相当するトランザクションを発行する。
【００５１】
８０６はシステムを構成する機能モジュールの１つである第２のスレーブである。第２のスレーブ８０６は第２のバス８１２に対してスレーブとして接続しており、第２のバス８１２からトランザクションを受信し、マスタからのリードに相当するトランザクションに対してはリードデータに相当するトランザクションを発行する。
【００５２】
８０７はシステムを構成する機能モジュールの１つである第３のスレーブである。第３のスレーブ８０７は第３のバス８１３に対してスレーブとして接続しており、第３のバス８１３からトランザクションを受信し、マスタからのリードに相当するトランザクションに対してはリードデータに相当するトランザクションを発行する。
【００５３】
８０８はシステムを構成する機能モジュールの１つである第１のブリッジである。第１のブリッジ８０８は第１のバス８１１に対してスレーブとして接続しており、第２のバス８１２に対してマスタとして接続している。そして第１のバス８１１から受信したトランザクションを第２のバス８１２に適合したトランザクション形式として第２のバス８１２に対して発行する。また、第２のバス８１２から受信したリードデータに相当するトランザクションを第１のバス８１１に適合したトランザクション形式として第１のバス８１１に対して発行する。
【００５４】
８０９はシステムを構成する機能モジュールの１つである第２のブリッジである。第２のブリッジ８０９は第２のバス８１２に対してスレーブとして接続しており、第３のバス８１３に対してマスタとして接続している。そして第２のバス８１２から受信したトランザクションを第３のバス８１３に適合したトランザクション形式として第３のバス８１３に対して発行する。また、第３のバス８１３から受信したリードデータに相当するトランザクションを第２のバス８１２に適合したトランザクション形式として第２のバス８１２に対して発行する。
【００５５】
８１０はシステムを構成する機能モジュールの１つである第３のブリッジである。第３のブリッジ８１０は第１のバス８１１に対してスレーブとして接続しており、第３のバス８１３に対してマスタとして接続している。そして第１のバス８１１から受信したトランザクションを第３のバス８１３に対して発行する。また、第３のバス８１３から受信したリードデータに相当するトランザクションを第１のバス８１１に対して発行する。
【００５６】
８１４はトランザクションにより通信を行うポートである。第１のマスタ８０２、第２のマスタ８０３、第３のマスタ８０４、第１のスレーブ８０５、第２のスレーブ８０６、第３のスレーブ８０７、第１のブリッジ８０８、第２のブリッジ８０９、第３のブリッジ８１０、第１のバス８１１、第２のバス８１２、第３のバス８１３に存在する。
【００５７】
８１５は信号ポートであり、クロック生成器８０１からのクロックを受信するポートである。第１のマスタ８０２、第２のマスタ８０３、第３のマスタ８０４、第１のスレーブ８０５、第２のスレーブ８０６、第３のスレーブ８０７、第１のブリッジ８０８、第２のブリッジ８０９、第３のブリッジ８１０に存在する。
【００５８】
以上の構成において、まず、第１のマスタ８０２が第３のブリッジ８１０を介して第３のスレーブ８０７に対して書き込みを行う場合の処理について説明する。
【００５９】
シミュレーションが開始されると、第１のマスタ８０２が、第１のバス８１１に対してトランザクションを発行できる状態であれば、アドレストランザクションの発行を行う。第１のマスタ８０２は、アドレストランザクション７００のハードウェアにマッピングされるアトリビュート情報７０４〜７０８の値を以下のように設定する。
【００６０】
transaction.read_write.value    = WRITE;
transaction.address.value       = 0x08000000;
transaction.write_data.value[0] = 0x76543210;
transaction.byte_enable.value   = 0xf;
transaction.burst_length.value  = 1;
また、第１のマスタ８０２はアドレストランザクション７００のハードウェアにマッピングされないアトリビュート情報７０１〜７０３の値を以下のように設定する。
【００６１】
transaction.time.value[0]       = 456;
transaction.model_name.value[0] = MASTER1;
transaction.hop.value           = 0;
尚、アドレストランザクション７００のハードウェアマッピングフラグ７０９は、読み出し専用情報として以下に示す値が予め保持されており、第１のマスタ８０２が変更することはできない。
【００６２】
transaction.read_write.hw_flag   == true
transaction.address.hw_flag      == true
transaction.write_data.hw_flag   == true
transaction.byte_enable.hw_flag  == true
transaction.burst_length.hw_flag == true
transaction.time.hw_flag         == false
transaction.model_name.hw_flag   == false
transaction.hop.hw_flag          == false
第１のマスタ８０２は、ハードウェアにマッピングされるアトリビュート情報７０４〜７０８と、ハードウェアにマッピングされないアトリビュート情報７０１〜７０３の設定を行うと、第１のバス８１１に対してアドレストランザクション７００を発行する。
【００６３】
この時点では、図９に示す９０１のように、アトリビュート情報７０１〜７０８の値がアドレストランザクション７００に保持されている。
【００６４】
これにより、第１のバス８１１は第１のマスタ８０２からのアドレストランザクション７００を受け取り、アドレストランザクション７００のハードウェアにマッピングされるアトリビュート情報７０４〜７０８の値とハードウェアにマッピングされないアトリビュート情報７０１〜７０３の値を読み出す。
【００６５】
そして、第１のバス８１１はハードウェアにマッピングされるアトリビュート情報７０４〜７０８のうちアドレス７０５の値をデコードし、第３のブリッジ８１０に対して第１のマスタ８０２からのトランザクション７００を中継する。
【００６６】
また、第１のバス８１１は、ハードウェアにマッピングされないアトリビュート情報として以下の情報をアドレストランザクション７００に追加する。
【００６７】
transaction.model_name.value[1] = BRIDGE3;
transaction.time.value[1]       = 460;
この処理により、図９に示す９０２のように、アトリビュート情報７０１、７０２の値が追加されてアドレストランザクション７００に保持される。
【００６８】
一方、第３のブリッジ８１０では、第１のバス８１１からのトランザクションを受け取り可能な状態であればアドレストランザクション７００を受け取り、そのアドレストランザクション７００におけるハードウェアにマッピングされるアトリビュート情報７０４〜７０８の値と、ハードウェアにマッピングされないアトリビュート情報７０１〜７０３の値を読み出す。
【００６９】
ここで、第３のブリッジ８１０は、第３のバス８１３に対してトランザクションを発行できる状態であれば、受け取ったアドレストランザクション７００の第３のバス８１３に対する発行を開始する。
【００７０】
そして、第３のブリッジ８１０は、ハードウェアにマッピングされないアトリビュート情報として以下の情報をトランザクション処理時刻７０１とトランザクション処理モデル名称７０２に追加し、中継段数７０３の値の変更を行う。
【００７１】
transaction.time.value[2]       = 464;
transaction.model_name.value[2] = BRIDGE3;
transaction.hop.value++;
この処理により、図９に示す９０３のように、アトリビュート情報７０１〜７０３の値が追加及び変更されてアドレストランザクション７００に保持される。
【００７２】
第３のバス８１３がバスアービトレーションを開始し、第３のブリッジ８１０に対してバス権を与えると、第３のブリッジ８１０からのアドレストランザクション７００を受け取り、アドレストランザクション７００におけるハードウェアにマッピングされるアトリビュート情報７０４〜７０８の値と、ハードウェアにマッピングされないアトリビュート情報７０１〜７０３の値を読み出す。
【００７３】
次に、第３のバス８１３はハードウェアにマッピングされるアトリビュート情報７０４〜７０８のうちアドレス７０５の値をデコードし、第３のスレーブ８０７に対して第３のブリッジ８１０からのトランザクション７００を中継する。
【００７４】
そして、第３のバス８１３は、ハードウェアにマッピングされないアトリビュート情報として以下の情報をトランザクション処理時刻７０１とトランザクション処理モデル名称７０２に追加する。
【００７５】
transaction.time.value[3]       = 469;
transaction.model_name.value[3] = SLAVE3;
この処理により、図９に示す９０４のように、アトリビュート情報７０１、７０２の値が追加されてアドレストランザクション７００に保持される。
【００７６】
一方、第３のスレーブ８０７では、第３のバス８１３からのトランザクションを受け取り可能な状態であればアドレストランザクション７００を受け取り、そのアドレストランザクション７００におけるハードウェアにマッピングされるアトリビュート情報７０４〜７０８の値と、ハードウェアにマッピングされないアトリビュート情報７０１〜７０３の値を読み出す。
【００７７】
そして、第３のスレーブ８０７はハードウェアにマッピングされるアトリビュート情報のアドレス７０５、ライトデータ７０６、バイトイネーブル７０７、バースト長７０８に従って該当するアドレスへデータを書き込む。
【００７８】
次に、第２のマスタ８０３が、第２のブリッジ８０９を介して第３のスレーブ８０７に対して読み込みを行う場合の処理について説明する。
【００７９】
第２のマスタ８０３は、上述した書き込みの場合と同様に、アドレストランザクション７００におけるハードウェアにマッピングされるアトリビュート情報７０４〜７０８の値と、ハードウェアにマッピングされないアトリビュート情報７０１〜７０３の値を以下のように設定し、アドレストランザクション７００を第２のバス８１２に対して発行する。
【００８０】
transaction.read_write.value    = READ;
transaction.address.value       = 0x0c000000;
transaction.byte_enable.value   = 0xf;
transaction.burst_length.value  = 16;
transaction.model_name.value[0] = MASTER2;
transaction.time.value[0]       = 478;
transaction.hop.value           = 0;
第２のバス８１２も同様に、以下のアドレストランザクション７００のハードウェアにマッピングされないアトリビュート情報として以下の情報を追加し、アドレストランザクション７００を第２のブリッジ８０９へ中継する。
【００８１】
transaction.time.value[1]       = 481;
transaction.model_name.value[1] = BRIDGE2;
一方、第２のブリッジ８０９では、第２のバス８１２からのトランザクションを受け取り可能な状態であればアドレストランザクション７００を受け取り、そのアドレストランザクション７００におけるハードウェアにマッピングされるアトリビュート情報７０４〜７０８の値と、ハードウェアにマッピングされないアトリビュート情報７０１〜７０３の値を読み出す。
【００８２】
ここで、第２のブリッジ８０９は、第３のバス８１３に対してトランザクションを発行できる状態であれば、受け取ったアドレストランザクション７００の第３のバス８１３に対する発行を開始する。
【００８３】
このアドレストランザクション７００のアトリビュート情報のバースト長７０８の値が16となっているが、第３のバス８１３の最大バースト長は４である。そこで、バースト長16のリードをバースト長４のリード四回に分割して発行する。また、ハードウェアにマッピングされないアトリビュート情報７０１〜７０３の追加も行う。トランザクション分割の際には、元のアドレストランザクション７００が保持しているハードウェアにマッピングされるアトリビュート情報７０４〜７０８の値と、ハードウェアにマッピングされないアトリビュート情報７０１〜７０３の値を引き継いだ上で、アトリビュート情報の追加、変更を行う。
【００８４】
transaction0 = transaction;
transaction0.address.value       = 0x0c000000;
transaction0.burst_length.value  = 4;
transaction0.time.value[2]       = 485;
transaction0.model_name.value[2] = BRIDGE2;
transaction0.hop.value++;
transaction1 = transaction;
transaction1.address.value       = 0x0c000010;
transaction1.burst_length.value  = 4;
transaction1.time.value[2]       = 487;
transaction1.model_name.value[2] = BRIDGE2;
transaction1.hop.value++;
transaction2 = transaction;
transaction2.address.value       = 0x0c000020;
transaction2.burst_length.value  = 4;
transaction2.time.value[2]       = 489;
transaction2.model_name.value[2] = BRIDGE2;
transaction2.hop.value++;
transaction3 = transaction;
transaction3.address.value       = 0x0c000030;
transaction3.burst_length.value  = 4;
transaction3.time.value[2]       = 491;
transaction3.model_name.value[2] = BRIDGE2;
transaction3.hop.value++;
一方、第３のスレーブ８０７では、第３のバス８１３からのトランザクションを受け取り可能な状態であればアドレストランザクション７００を受け取り、そのアドレストランザクション７００におけるハードウェアにマッピングされるアトリビュート情報７０４〜７０８の値と、ハードウェアにマッピングされないアトリビュート情報７０１〜７０３の値を読み出す。
【００８５】
そして、第３のスレーブ８０７はハードウェアにマッピングされるアトリビュート情報のアドレス７０５、バイトイネーブル７０７、バースト長７０８に従って該当するアドレスのデータを読み出す。
【００８６】
その後、第３のスレーブ８０７は、第３のバス８１３に対してリードデータトランザクション７１０の発行を開始する。
【００８７】
リードデータトランザクション７１０のハードウェアにマッピングされるアトリビュート情報７１４に以下のような値を設定する。
【００８８】
transaction0.read_data.value[0] = 0x77776600;
transaction0.read_data.value[1] = 0x77776611;
transaction0.read_data.value[2] = 0x77776622;
transaction0.read_data.value[3] = 0x77776633;
また、リードデータトランザクション７１０のハードウェアにマッピングされないアトリビュート情報７１１〜７１３に以下のような値を設定する。
【００８９】
transaction0.time.value[0]       = 495;
transaction0.model_name.value[0] = SLAVE3;
transaction0.hop.value           = 0;
尚、リードトランザクション７１０のハードウェアマッピングフラグ７１９は読み出し専用情報として以下に示す値が予め保持されており、第３のスレーブ８０７が変更することはできない。
【００９０】
transaction0.read_data.hw_flag  == true
transaction0.time.hw_flag       == false
transaction0.model_name.hw_flag == false
transaction0.hop.hw_flag        == false
ここで、第３のスレーブ８０７はハードウェアにマッピングされるアトリビュート情報７１４とハードウェアにマッピングされないアトリビュート情報７１１〜７１３の設定を行うと、第３のバス８１３に対してリードデータトランザクション７１０を発行する。
【００９１】
第３のスレーブ８０７は同様に、残り３つのアドレストランザクション７００に対しても、以下のようなアトリビュート情報を保持したリードデータトランザクション７１０を発行する。
【００９２】
transaction1.read_data.value[0]  = 0x55554400;
transaction1.read_data.value[1]  = 0x55554411;
transaction1.read_data.value[2]  = 0x55554422;
transaction1.read_data.value[3]  = 0x55554433;
transaction1.time.value[0]       = 498;
transaction1.model_name.value[0] = SLAVE3;
transaction1.hop.value           = 0;
transaction2.read_data.value[0]  = 0x33332200;
transaction2.read_data.value[1]  = 0x33332211;
transaction2.read_data.value[2]  = 0x33332222;
transaction2.read_data.value[3]  = 0x33332233;
transaction2.time.value[0]       = 501;
transaction2.model_name.value[0] = SLAVE3;
transaction2.hop.value           = 0;
transaction3.read_data.value[0]  = 0x11110000;
transaction3.read_data.value[1]  = 0x11110011;
transaction3.read_data.value[2]  = 0x11110022;
transaction3.read_data.value[3]  = 0x11110033;
transaction3.time.value[0]       = 504;
transaction3.model_name.value[0] = SLAVE3;
transaction3.hop.value           = 0;
第３のバス８１３は、第３のスレーブ８０７から四つのリードデータトランザクション７１０をそれぞれ受け取ると、上述したアドレストランザクション７００の場合と同様に、アトリビュート情報の追加を行い、第２のブリッジ８０９にリードデータトランザクション７１０の中継を行う。
【００９３】
第２のブリッジ８０９は、第３のバス８１３からリードデータトランザクション７１０を受け取り、ハードウェアにマッピングされるアトリビュート情報７１４の値とハードウェアにマッピングされないアトリビュート情報７１１〜７１３の値を読み出す。
【００９４】
第２のブリッジ８１０は、先にバースト長16のアドレストランザクション７００をバースト長4のアドレストランザクション７００四つに分割して発行したので、受け取ったリードデータトランザクション７１０四つを結合して一つのリードデータトランザクション７１０とする。
【００９５】
transaction.read_data[0]        = transaction0.read_data.value[0];
transaction.read_data[1]        = transaction0.read_data.value[1];
transaction.read_data[2]        = transaction0.read_data.value[2];
transaction.read_data[3]        = transaction0.read_data.value[3];
transaction.read_data[4]        = transaction1.read_data.value[0];
transaction.read_data[5]        = transaction1.read_data.value[1];
transaction.read_data[6]        = transaction1.read_data.value[2];
transaction.read_data[7]        = transaction1.read_data.value[3];
transaction.read_data[8]        = transaction2.read_data.value[0];
transaction.read_data[9]        = transaction2.read_data.value[1];
transaction.read_data[10]       = transaction2.read_data.value[2];
transaction.read_data[11]       = transaction2.read_data.value[3];
transaction.read_data[12]       = transaction4.read_data.value[0];
transaction.read_data[13]       = transaction4.read_data.value[1];
transaction.read_data[14]       = transaction4.read_data.value[2];
transaction.read_data[15]       = transaction4.read_data.value[3];
transaction.time.value[0]       = transaction0.time.value[0];
transaction.time.value[1]       = transaction1.time.value[0];
transaction.time.value[2]       = transaction2.time.value[0];
transaction.time.value[3]       = transaction3.time.value[0];
transaction.model_name.value[0] = transaction0.model_name.value[0];
transaction.model_name.value[1] = transaction1.model_name.value[0];
transaction.model_name.value[2] = transaction2.model_name.value[0];
transaction.model_name.value[3] = transaction3.model_name.value[0];
transaction.hop.value           = transaction0.hop.value;
また、第２のブリッジ８１０はハードウェアにマッピングされないアトリビュート情報として以下の情報を追加し、変更を行う。
【００９６】
transaction.time.value[4]       = 509;
transaction.model_name.value[4] = BRIDGE2;
transaction.hop.value++;
その後、第２のブリッジ８１０は、第２のバス８１２に対してリードデータトランザクション７１０の発行を行う。
【００９７】
第２のマスタ８０３は、第２のバス８１２からリードデータトランザクション７１０を受け取り、ハードウェアにマッピングされるアトリビュート情報７１４の値とハードウェアにマッピングされないアトリビュート情報７１１〜７１３の値を読み出し、第２のマスタ８０３内部の所定の処理を行うことでリード処理が完了する。
【００９８】
このように、トランザクションが通過する可能性のある個所全てにモニタを設置し、各モニタ間で情報の共有を行うといったような複雑な仕組みを用いることなく、トランザクションを受けた機能モジュールがそのトランザクションのアトリビュート情報を参照するだけで、どの経路をシミュレーション時間でいつ通過したか、いくつのバス、ブリッジが中継を行ったかという情報を取得することが可能となる。
【００９９】
また、バス、ブリッジによってトランザクションが分割又は結合された場合は、分割又は結合の前後の各トランザクションの正確な対応情報を保持しているのはバス、ブリッジのみである。外部のモニタがこの情報を取得するための特殊なメソッドを設けることなく他のトランザクションのアトリビュート情報に対する操作と同様の処理を行い、トランザクションを受け取った機能モジュールが分割又は結合後のトランザクションを参照するだけで、分割又は結合前のトランザクションに関する情報も取得することが可能となる。
【０１００】
そして、これらの情報を履歴として蓄積しておくことで、シミュレーション終了後に、設計者は図１１に示すトランザクション履歴１１０１によりシステムが所望の動作を得られたか否かを確認することが可能である。また、設計者はトランザクションの種類、トランザクション処理時刻、トランザクション処理モデル名称、トランザクション中継段数等を参照し、これらの情報に基づきトランザクション履歴１１０１の検索・並び替えを行うことで動作の確認を実施していく。
【０１０１】
次に、第１のマスタが第３のブリッジを介して第３のスレーブに対して書き込みを行うべきところを、バスのアドレスデコーダの間違いにより第１のブリッジ、第２のブリッジを経由してしまう現象を検出する場合について説明する。
【０１０２】
第１のマスタ８０２が、第１のバス８１１に対してトランザクションを発行できる状態であれば、アドレストランザクション７００の発行を行う。第１のマスタ８０２は、アドレストランザクション７００のハードウェアにマッピングされるアトリビュート情報７０４〜７０８の値を以下のように設定する。
【０１０３】
transaction.read_write.value    = WRITE;
transaction.address.value       = 0x14000000;
transaction.write_data.value[0] = 0x76543210;
transaction.byte_enable.value   = 0xf;
transaction.burst_length.value  = 1;
また、第１のマスタ８０２はアドレストランザクション７００のハードウェアにマッピングされないアトリビュート情報のトランザクション処理モデル名称７０２の値として、トランザクション発行後に経由すべきモデル名称を設定する。
【０１０４】
transaction.model_name.value[0] = SLAVE2;
transaction.model_name.value[1] = BRIDGE1;
第１のマスタ８０２は、ハードウェアにマッピングされるアトリビュート情報７０４〜７０８と、ハードウェアにマッピングされないアトリビュート情報７０１〜７０３の設定を行うと、第１のバス８１１に対してアドレストランザクション７００を発行する。
【０１０５】
この時点では、図１０に示す１００１のように、アトリビュート情報７０２の値がアドレストランザクション７００に保持される。
【０１０６】
これにより、第１のバス８１１は第１のマスタ８０２からのアドレストランザクション７００を受け取り、アドレストランザクション７００のハードウェアにマッピングされるアトリビュート情報７０４〜７０８の値とハードウェアにマッピングされないアトリビュート情報７０１〜７０３の値を読み出す。
【０１０７】
そして、第１のバス８１１はハードウェアにマッピングされるアトリビュート情報７０４〜７０８のうちアドレス７０５の値をデコードし、第１のブリッジ８０８に対して第１のマスタ８０２からのトランザクション７００を中継する。
【０１０８】
一方、第１のブリッジ８０８では、第１のバス８１１からのトランザクションを受け取り可能な状態であればアドレストランザクション７００を受け取り、そのアドレストランザクション７００におけるハードウェアにマッピングされるアトリビュート情報７０４〜７０８の値と、ハードウェアにマッピングされないアトリビュート情報７０１〜７０３の値を読み出す。
【０１０９】
そして、ハードウェアにマッピングされないアトリビュート情報７０１〜７０３のうちトランザクション処理モデル名称７０２（この場合、以下の情報）が自分のモデル名称と合致しているか否かをチェックする。
【０１１０】
transaction.model_name.value[1] == BRIDGE1
その結果、合致しているので、アドレストランザクション７００のハードウェアにマッピングされないアトリビュート情報から以下の情報を削除する。
【０１１１】
transaction.model_name.value[1] == BRIDGE1
この処理により、図１０に示す１００２のように、アトリビュート情報７０２から情報が削除されてアドレストランザクション７００に保持される。
【０１１２】
その後、第１のブリッジ８０８は、第２のバス８１２に対して情報の確認及び削除を行ったアドレストランザクション７００を発行する。
【０１１３】
第２のバス８１２は、第１のブリッジ８０８からのアドレストランザクション７００を受け取り、アドレストランザクション７００のハードウェアにマッピングされるアトリビュート情報７０４〜７０８の値とハードウェアにマッピングされないアトリビュート情報７０１〜７０３の値を読み出す。
【０１１４】
そして、第２のバス８１２は、ハードウェアにマッピングされるアトリビュート情報のアドレス７０５の値をデコードするが、アドレスデコードの設定の間違いにより、本来第２のスレーブ８０６に対して中継するところを、第２のブリッジ８０９に対してアドレストランザクション７００を中継してしまったとする。
【０１１５】
ここで、第２のブリッジ８０９が、第２のバス８１２からのトランザクションを受け取り可能な状態であればアドレストランザクション７００を受け取り、そのアドレストランザクション７００におけるハードウェアにマッピングされるアトリビュート情報７０４〜７０８の値と、ハードウェアにマッピングされないアトリビュート情報７０１〜７０３の値を読み出す。
【０１１６】
そして、ハードウェアにマッピングされないアトリビュート情報７０１〜７０３のうちトランザクション処理モデル名称７０２（この場合、以下の情報）が自分のモデル名称と合致しているか否かをチェックする。
【０１１７】
transaction.model_name.value[0] == SLAVE2
その結果、合致していないことが分かるので、第２のバス８１２のアドレスデコードに問題があることをシミュレーション中に検知し、設計者に通知する、或いは設計者が後で確認可能なようにログに記録する。
【０１１８】
以上説明したように本実施例によれば、バスを介して通信されるトランザクションに、ハードウェアの信号に相当することを示すハードウェアマッピングフラグと、ハードウェアの信号に無関係な情報を付加できるようにし、トランザクションを発行するモジュールにおいて情報を付加し、トランザクションを受信したモジュールにおいて付加情報を利用できるようにし、トランザクションを中継した機能モジュールがその情報を加工することを可能にしたため、以下のような効果が得られる。
（１）複数のバス及びブリッジを持つようなシステムのシミュレーションにおいて、バスモニタを一切使うこと無く、シミュレーション履歴を容易に蓄積でき、シミュレーション履歴を視認し易くすることができる。このため、検証にかかる時間を短縮することが可能となる。
（２）バス及び機能モジュール内に保持されている情報を用いなければ発見できないような間違いを、バスモニタを一切使うこと無く、シミュレーション中に動的に発見することが可能となる。
（３）バス及び機能モジュールに、必要な情報を取得するためのモニタ専用メソッドを用意することなく、既存のトランザクション操作メソッドを拡張することで、設計者がシミュレーション中のバス及び機能モジュール内の必要な情報を確認することが可能となる。また、これによってモニタ専用メソッドを呼ぶことによるイベントの増加、更にはシミュレーション速度の低下を避けることが可能となる。
（４）付加情報によりシミュレーション履歴を容易に蓄積でき、シミュレーション履歴を設計者が理解し易い情報によって参照することができる。このため、検証にかかる時間を短縮することが可能である。
（５）バス及び機能モジュールが、トランザクション処理と同時にその内部の情報を利用してエラーチェック等の処理を行うことができ、シミュレーション後ではなくシミュレーション中に動的にそれらの情報を設計者に通知することが可能となる。また、これによってエラー発生後の無駄なシミュレーション実行を回避し、設計時間の短縮が可能となる。
【０１１９】
尚、本発明は複数の機器（例えば、ホストコンピュータ，インターフェース機器，リーダ，プリンタなど）から構成されるシステムに適用しても、１つの機器からなる装置（例えば、複写機，ファクシミリ装置など）に適用しても良い。
【０１２０】
また、本発明の目的は前述した実施形態の機能を実現するソフトウェアのプログラムコードを記録した記録媒体を、システム或いは装置に供給し、そのシステム或いは装置のコンピュータ（ＣＰＵ若しくはＭＰＵ）が記録媒体に格納されたプログラムコードを読出し実行することによっても、達成されることは言うまでもない。
【０１２１】
この場合、記録媒体から読出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコードを記憶した記録媒体は本発明を構成することになる。
【０１２２】
このプログラムコードを供給するための記録媒体としては、例えばフロッピー（登録商標）ディスク，ハードディスク，光ディスク，光磁気ディスク，ＣＤ−ＲＯＭ，ＣＤ−Ｒ，磁気テープ，不揮発性のメモリカード，ＲＯＭなどを用いることができる。
【０１２３】
また、コンピュータが読出したプログラムコードを実行することにより、前述した実施形態の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼働しているＯＳ（オペレーティングシステム）などが実際の処理の一部又は全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【０１２４】
更に、記録媒体から読出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書込まれた後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるＣＰＵなどが実際の処理の一部又は全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【図面の簡単な説明】
【０１２５】
【図１】AHB CLIで定義されているバストランザクションを示す図である。
【図２】トランザクションメソッド、アトリビュート、ハードウェアの対応を示す図である。
【図３】トランザクションメソッドと信号波形の対応を示す図である。
【図４】トランザクションメソッドを用いたシミュレーションを説明するための図である。
【図５】ハードウェアコンフィギュレーションメソッドを示す図である。
【図６】検証メソッドを示す図である。
【図７】本実施例におけるシミュレーションモデルで使用するトランザクションの構成の一例を示す図である。
【図８】本実施例におけるシミュレーションモデルのシステム構成の一例を示す図である。
【図９】バス又はブリッジがハードウェアにマッピングされないアトリビュート情報を追加及び変更した状態を示す図である。
【図１０】ハードウェアにマッピングされないアトリビュート情報を追加及び削除した状態を示す図である。
【図１１】トランザクション履歴を示す図である。
【符号の説明】
【０１２６】
７００  アドレストランザクション
７０１  トランザクション処理時刻
７０２  トランザクション処理モデル名称
７０３  中継段数
７０４  リード／ライト
７０５  アドレス
７０６  ライトデータ
７０７  バイトイネーブル
７０８  バースト長
７０９  ハードウェアマッピングフラグ
７１０  リードデータトランザクション
７１１  トランザクション処理時刻
７１２  トランザクション処理モデル名称
７１３  中継段数
７１４  リードデータ
７１９  ハードウェアマッピングフラグ
８０１  クロック生成器
８０２  第１のマスタ
８０３  第２のマスタ
８０４  第３のマスタ
８０５  第１のスレーブ
８０６  第２のスレーブ
８０７  第３のスレーブ
８０８  第１のブリッジ
８０９  第２のブリッジ
８１０  第３のブリッジ
８１１  第１のバス
８１２  第２のバス
８１３  第３のバス
８１４  トランザクションポート
８１５  信号ポート
【図１】
2006079370.tif 000003
【図２】
2006079370.tif 000004
【図３】
2006079370.tif 000005
【図４】
2006079370.tif 000006
【図５】
2006079370.tif 000007
【図６】
2006079370.tif 000008
【図７】
2006079370.tif 000009
【図８】
2006079370.tif 000010
【図９】
2006079370.tif 000011
【図１０】
2006079370.tif 000012
【図１１】
2006079370.tif 000013