JP4529063B2 - システムシミュレータ、シミュレーション方法及びシミュレーションプログラム - Google Patents
システムシミュレータ、シミュレーション方法及びシミュレーションプログラム Download PDFInfo
- Publication number
- JP4529063B2 JP4529063B2 JP2001098738A JP2001098738A JP4529063B2 JP 4529063 B2 JP4529063 B2 JP 4529063B2 JP 2001098738 A JP2001098738 A JP 2001098738A JP 2001098738 A JP2001098738 A JP 2001098738A JP 4529063 B2 JP4529063 B2 JP 4529063B2
- Authority
- JP
- Japan
- Prior art keywords
- master
- thread
- manager
- function
- simulator
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 title claims description 78
- 238000004088 simulation Methods 0.000 title claims description 40
- 230000006870 function Effects 0.000 claims description 169
- 230000000903 blocking effect Effects 0.000 claims description 68
- 230000008569 process Effects 0.000 claims description 64
- 238000010586 diagram Methods 0.000 description 20
- 230000007704 transition Effects 0.000 description 11
- 230000018109 developmental process Effects 0.000 description 9
- 230000004044 response Effects 0.000 description 8
- 230000001360 synchronised effect Effects 0.000 description 3
- 230000010365 information processing Effects 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 230000000694 effects Effects 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000033772 system development Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/30—Circuit design
- G06F30/32—Circuit design at the digital level
- G06F30/33—Design verification, e.g. functional simulation or model checking
Landscapes
- Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Evolutionary Computation (AREA)
- Geometry (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
- Test And Diagnosis Of Digital Computers (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Description
【発明の属する技術分野】
本発明は、システムシミュレータ、シミュレーション方法及びシミュレーションプログラムに関し、特にバスマスタとバススレーブとがバスを介して接続されたシステムをシミュレーションする技術に関する。
【0002】
【従来の技術】
従来、マイクロプロセッサを応用した装置として、バスマスタ(以下、単に「マスタ」という)とバススレーブ(以下、単に「スレーブ」という)とがバスによって接続されることにより構成されるシステムが知られている。このようなシステムの開発におけるソフトウェアの開発は、一般に、該ソフトウェアを動作させるためのハードウェア環境が整ってから、換言すれば、ハードウェアの開発が完了した後に、そのハードウェアを用いて行われる。
【0003】
しかしながら、このような従来の開発方法では、システムの開発に長期間を必要とする。そこで、最近は、開発期間を短縮するために、ソフトウェアの開発をシミュレータ上で行い、以てハードウェアの開発とソフトウェアの開発とを並行して行う方法が採用されている。
【0004】
図17は、このようなソフトウェアの開発に使用される従来のシステムシミュレータ(以下、「第1の従来技術に係るシステムシミュレータ」という)の構成を示す。このシステムシミュレータは、第1マスタ、第2マスタ、スレーブ及びマネージャから構成されている。
【0005】
第1マスタは、例えばCPUやDMAといったマスタとして使用されるデバイスをシミュレーションするためのプログラムで構成されたシミュレータである。第2マスタは、同じくマスタとして使用される他のデバイスをシミュレーションするためのプログラムで構成されたシミュレータである。スレーブは、例えばタイマ、シリアル入出力ポート、汎用入出力ポート、メモリといったスレーブとして使用される周辺回路をシミュレーションするためのプログラムで構成されたシミュレータである。マネージャは、第1マスタ、第2マスタ及びスレーブを同期して動作させるための制御プログラムである。
【0006】
このように構成される第1の従来技術に係るシステムシミュレータは、第1マスタ、第2マスタ及びスレーブの各々に組み込まれるプログラムの正当性を検証するために使用される。
【0007】
この第1の従来技術に係るシステムシミュレータでは、シミュレーションは、マネージャが第1マスタ、第2マスタ及びスレーブに対して関数呼び出しを順次実行することにより進められる。より詳しくは、マネージャは、先ず第1マスタに対して関数呼び出しを実行する。これにより、第1マスタは、1クロックに相当する処理を実行する。例えば、関数呼び出しの対象が1クロックで完了する命令であれば、1命令が実行され、その後、制御はマネージャに戻される。関数呼び出しの対象が複数クロックを必要とする命令であれば、1クロック分の処理が完了した時点で、制御はマネージャに戻される。
【0008】
次いで、上記と同様にして、第2マスタに対して関数呼び出しが実行され、引き続いて、スレーブに対して関数呼び出しが実行される。以下、第1マスタ→第2マスタ→スレーブ→第1マスタ→・・・と関数呼び出しがサイクリックに実行されることにより、シミュレーションが進行する。なお、関数呼び出しの対象が複数クロックを必要とする命令の場合は、その対象に対して複数のサイクルにわたって複数回の関数呼び出しが実行されることにより、1命令が完了する。
【0009】
このように、第1マスタ、第2マスタ及びスレーブは、マネージャから関数呼び出しが行われる毎に1クロック分に相当する処理を順次実行する。従って、第1マスタ、第2マスタ及びスレーブは恰もクロックに同期しているように動作する。即ち、第1マスタ、第2マスタ及びスレーブは、マネージャから動作タイミングを貰って動作すると考えることができる。これにより、タイミングを考慮したシミュレーションが可能になっている。
【0010】
図18は、複数のシミュレータを同期させるための同期機構としてセマフォ(semaphore)を用いた従来の他のシステムシミュレータ(以下、「第2の従来技術に係るシステムシミュレータ」という)の構成を示す図である。この第2の従来技術に係るシステムシミュレータは、常にマルチスレッドな動作を行う。
【0011】
この第2の従来技術に係るシステムシミュレータは、第1マスタ、第2マスタ、スレーブ、マネージャ及びバスから構成されている。これら第1マスタ、第2マスタ、スレーブ及びマネージャは、上述した実施例のそれらと同様の機能を有する。バスは、図17では図示を省略したが、第1マスタ及び第2マスタがスレーブにアクセスする際のバスの動作をシミュレーションするためのシミュレータである。
【0012】
図18において、第1マスタ、第2マスタ、マネージャ及びバス中の記号○は、セマフォを表す。記号Pはポストを、Wはウエイトを、Tはトライウエイトをそれぞれ表す。トライウエイトは、バスに対して問い合わせをする機能である。この第2の従来技術に係るシステムシミュレータでは、第1マスタ、第2マスタ及びマネージャの何れか1つのみが起動されるように制御される。
【0013】
基本的には、マネージャは、第1マスタ及び第2マスタ(以下、単に「マスタ」と総称する場合がある)のセマフォに対してポスト(P)を行うことによりマスタのスレッドを起動し、自身はウエイト(W)する。また、マスタは、マネージャのセマフォに対してポスト(P)を行うことにより制御をマネージャに戻し、自身はウエイト(W)する。スレーブは、上述した第1の従来技術に係るシミュレータと同様に、マネージャがスレーブに対して関数呼び出しを実行することにより起動される。
【0014】
この第2の従来技術に係るシミュレータの具体的な動作を、図19〜図21を参照しながら説明する。
【0015】
図19は、マネージャと第1マスタとの間の遷移動作を説明するための図であり、点線は制御の流れを示す。マネージャは、先ず、第1マスタのセマフォに対してポストを行い、自身はウエイトする。このポストにより、ウエイトしている第1マスタのスレッドが起動され、バスのセマフォに対してトライウエイトを行う。そして、このトライウエイトが失敗すれば、第1マスタは、マネージャのセマフォに対してポストを行い、第1マスタはウエイトする。
【0016】
図20は、マネージャと第2マスタとの間の遷移動作を説明するための図であり、点線は制御の流れを示す。上述したように、第1マスタがマネージャのセマフォに対してポストを行うことにより制御がマネージャに移ると、次いで、マネージャは、第2マスタのセマフォに対してポストを行い、自身はウエイトする。このポストにより、ウエイトしている第2マスタのスレッドが起動され、バスのセマフォに対してトライウエイトを行う。そして、このトライウエイトが失敗すれば、マネージャのセマフォに対してポストを行い、第2マスタはウエイトする。
【0017】
図21は、マネージャとスレーブとの間の遷移動作を説明するための図であり、点線は制御の流れを示す。上述したように、第2マスタがマネージャのセマフォに対してポストを行うことにより制御がマネージャに移ると、次いで、マネージャは、スレーブに対して関数呼出を実行する。スレーブは、第1マスタ及び第2マスタからのアクセス要求に対して応答可能になったらバスのセマフォに対してポストする。これにより、第1マスタ及び第2マスタによる次回のトライウエイトは成功することになる。その後、制御は、スレーブからマネージャに戻される。以下、上述した動作が繰り返される。
【0018】
このように、第1マスタ及び第2マスタはスレッド切り替えを行いながら各スレッドで1クロック分に相当する処理を順次実行し、スレーブは、マネージャから関数呼び出しが行われる毎に1クロック分に相当する処理を実行する。従って、第1マスタ、第2マスタ及びスレーブは恰もクロックに同期しているように動作するので、タイミングを考慮したシミュレーションが可能になっている。
【0019】
この第2の従来技術に係るシステムシミュレータによれば、マスタがスレーブにアクセスする際に、アクセスブロッキングが発生しても、つまりマスタがバスのトライウエイトに失敗しても、マスタが応答待ちを継続することが無いので、デッドロック状態に陥ることはない。
【0020】
なお、関連する技術として、特開平11−296408号公報は、ハードウェアのシミュレーションを複数のアプリケーションで実現し、それらを連携動作させることにより、ハードウェアの動作の記述を容易にすると共に、ソフトウェアのデバッグ効率を向上させる組み込み機器用ソフトウェア論理シミュレータを開示している。このシミュレータによれば、ハードウェアシミュレータとソフトウェアとを協調してデバッグする場合に、ハードウェアの動作のシミュレーションが非常に遅かったり、ハードウェアの記述に難があるという点が解消される。
【0021】
【発明が解決しようとする課題】
しかしながら、上述した第1の従来技術に係るシステムシミュレータは、次のような問題を有する。即ち、マスタのプログラムには、スレーブにアクセスする命令が含まれる。マスタがこの命令を実行した場合にスレーブが1クロックに相当する時間で応答できる場合は問題ないが、スレーブの多くは応答に数クロックを必要とする。このように、マスタからのアクセスにスレーブが直ちに応答できない現象を「アクセスブロッキング」と呼ぶ。アクセスブロッキングには、リードアクセスブロッキング及びライトアクセスブロッキングが含まれる。
【0022】
このアクセスブロッキングが発生すると、マスタはスレーブからの応答待ちに入り、制御がマネージャに返されなくなる。その結果、スレーブにクロックが与えられなくなるので、マスタの応答待ちは継続されたままでシステムシミュレータはデッドロック状態に陥る。
【0023】
この問題は、システムシミュレータ上におけるスレーブの仕様を変更して1クロックで応答を返すようにすれば解消される。しかし、この場合は、システムシミュレータ上でのスレーブと実際のスレーブとの仕様が異なることになり、タイミングを考慮したシミュレーションを行うことができない。或いはまた、上記問題は、スレーブの応答待ちになったマスタは、制御をマネージャに強制的に返すようにマスタのプログラムを構成することにより解消できる。しかし、この場合は、従来のマスタのプログラムを作り直す必要があり、更に、作り直しにあたっては、マスタのプログラムが複雑になるのでその開発に多大な工数を必要とする。
【0024】
また、上述した第2の従来技術に係るシステムシミュレータは、デッドロックに陥ることはないが、次のような問題を有する。即ち、このシステムシミュレータでは、スレッド制御部の制御の下に常にスレッド切り替えが行われるのでオーバーヘッドによるロス時間が発生する。このオーバーヘッドの大きさは、マスタに搭載されるプログラムによって異なる。シミュレーション時間で比較した場合、本発明者等の測定によれば、第2の従来技術に係るシミュレータによるシミュレーション時間は、第1の従来技術に係るシミュレータによるシミュレーション時間の2〜40倍程度である。
【0025】
そこで、本発明の目的は、従来のバスマスタをシミュレーションするシミュレータを変更することなく、高速で且つアクセスブロッキングによるデッドロック状態に陥らずにシミュレーションを行うことのできるシステムシミュレータ、シミュレーション方法及びシミュレーションプログラムを提供することにある。
【0026】
【課題を解決するための手段】
本発明の第1の態様に係るシステムシミュレータは、上記目的を達成するために、バスマスタをシミュレートするマスタシミュレータと、バススレーブをシミュレートするスレーブシミュレータと、前記マスタシミュレータ及び前記スレーブシミュレータを関数呼び出しにより順次実行させる関数用マネージャと、前記マスタシミュレータをスレッド切り替えにより実行させるスレッド用マネージャ、とを備え、前記関数用マネージャからの関数呼び出しにより実行される前記マスタシミュレータが前記スレーブシミュレータにアクセスした際にアクセスブロッキングが発生すると、前記マスタシミュレータは、前記スレッド用マネージャによるスレッド切り替えで実行されるように前記スレッド用マネージャを制御するように構成されている。
【0027】
このシステムシミュレータにおいては、前記スレッド用マネージャは、更に、前記スレーブシミュレータを関数呼び出しにより実行させるように構成できる。また、前記アクセスブロッキングが解消された後は、前記スレッド用マネージャは、関数呼び出しにより前記マスタシミュレータが実行されるように前記関数用マネージャを制御するように構成できる。
【0028】
また、本発明の第2の態様に係るシミュレーション方法は、バスマスタをシミュレートするマスタシミュレータと、バススレーブをシミュレートするスレーブシミュレータ、とを備え、前記マスタシミュレータ及び前記スレーブシミュレータを関数呼び出しにより順次実行させるステップと、該関数呼び出しによる実行において前記マスタシミュレータが前記スレーブシミュレータにアクセスすることによりアクセスブロッキングが発生すると、前記マスタシミュレータをスレッド切り替えで実行させるステップ、とを備えている。
【0029】
このシミュレーション方法においては、前記スレッド切り替えで実行させるステップは、前記スレーブシミュレータを関数呼び出しにより実行させるステップ、を更に備えて構成できる。また、前記アクセスブロッキングが解消された後は、スレッド切り替えから関数呼び出しに戻って前記マスタシミュレータを実行させるステップを更に備えて構成できる。
【0030】
更に、本発明の第3の態様に係るシミュレーションプログラムは、バスマスタをシミュレートするマスタシミュレーションプログラムと、バススレーブをシミュレートするスレーブシミュレーションプログラムと、前記マスタシミュレーションプログラム及び前記スレーブシミュレーションプログラムを関数呼び出しにより順次実行させる関数用マネージャプログラムと、前記マスタシミュレータをスレッド切り替えにより実行させるスレッド用マネージャプログラム、を備え、前記関数用マネージャプログラムからの関数呼び出しにより実行される前記マスタシミュレーションプログラムが前記スレーブシミュレーションプログラムにアクセスした際にアクセスブロッキングが発生すると、前記マスタシミュレーションプログラムは、前記スレッド用マネージャプログラムによるスレッド切り替えで実行されるように前記スレッド用マネージャプログラムを制御するように構成されている。
【0031】
このシミュレーションプログラムにおいては、前記スレッド用マネージャプログラムは、更に、前記スレーブシミュレーションプログラムを関数呼び出しにより実行させるように構成できる。また、前記アクセスブロッキングが解消された後は、前記スレッド用マネージャプログラムは、関数呼び出しにより前記マスタシミュレーションプログラムが実行されるように前記関数用マネージャプログラムを制御するように構成できる。
【0032】
【発明の実施の形態】
以下、本発明の実施の形態を図面を参照しながら詳細に説明する。
【0033】
図1は、本発明の実施の形態に係るシステムシミュレータの構成を示す機能ブロック図である。このシミュレータは、パーソナルコンピュータ、ワークステーション、汎用コンピュータといった情報処理装置の上にソフトウェアによって構築される。情報処理装置の構成及び動作は周知であるので説明は省略する。
【0034】
このシステムシミュレータは、関数用第1マスタ1f、スレッド用第1マスタ1s、関数用第2マスタ2f、スレッド用第2マスタ2s、関数用マネージャF、スレッド用マネージャS、スレーブL及びバスBから構成されている。
【0035】
図1には、このシステムシミュレータにおける制御の遷移も示されている。即ち、スレッド用第1マスタ1s、スレッド用第2マスタ2s、関数用マネージャF、スレッド用マネージャS及びバスBに含まれる記号○はセマフォを表す。また、記号Pはポスト、Wはウエイト、Tはトライウエイトを行うことをそれぞれ表す。また、図1中の一点鎖線矢印は関数呼び出し、実線矢印はポスト、破線矢印はウエイト、2点鎖線矢印はトライウエイトがそれぞれ行われることによる制御の遷移を示す。更に、二重線矢印はスレッドが実行されることを示す。
【0036】
関数用第1マスタ1fは、例えばCPUやDMAといったマスタとして使用されるデバイスの動作をシミュレーションするためのプログラムで構成されたシミュレータである。この関数用第1マスタ1fは、バスBを介してスレーブLにリード及びライトのアクセス動作を行う。この関数用第1マスタ1fは、関数用マネージャFと同じスレッドであり、関数用マネージャFから1クロック毎に関数呼び出しされることにより実行される。そして、1クロックに相当するシミュレーションを実行後、リターンすることにより制御が関数用マネージャFに戻される。
【0037】
スレッド用第1マスタ1sは、上記と同様にマスタとして使用されるデバイスの動作をシミュレーションするためのプログラムで構成されたシミュレータである。このスレッド用第1マスタ1sは、バスBを介してスレーブLにリード及びライトのアクセス動作を行う。このスレッド用第1マスタ1sは、関数用マネージャFとは別のスレッドであり、やはり別のスレッドであるスレッド用マネージャSからセマフォに対してポストが行われることにより実行される。実行後は、セマフォをウエイトすることにより制御がスレッド用マネージャSに移される。
【0038】
これら関数用第1マスタ1fとスレッド用第1マスタ1sとは同一のモジュールで構成されており、同じテキストの異なるスレッドである。具体的には、関数用第1マスタ1fとスレッド用第1マスタ1sとはモジュール中の実行開始位置が異なるのみである。
【0039】
関数用第2マスタ2fは、上記と同様にマスタとして使用されるデバイスの動作をシミュレーションするためのプログラムで構成されたシミュレータである。この関数用第2マスタ2fは、バスBを介してスレーブLにリード及びライトのアクセス動作を行う。この関数用第2マスタ2fは、関数用マネージャFと同じスレッドであり、関数用マネージャFから1クロック毎に関数呼び出しされることにより実行される。そして、1クロックに相当するシミュレーションを実行後、リターンすることにより制御が関数用マネージャFに戻される。
【0040】
スレッド用第2マスタ2sは、上記と同様にマスタとして使用されるデバイスの動作をシミュレーションするためのプログラムで構成されたシミュレータである。このスレッド用第2マスタ2sは、バスBを介してスレーブLにリード及びライトのアクセス動作を行う。このスレッド用第2マスタ2sは、関数用マネージャFとは別のスレッドであり、やはり別のスレッドであるスレッド用マネージャSからセマフォに対してポストが行われることにより実行される。実行後は、セマフォをウエイトすることにより制御がスレッド用マネージャSに移される。
【0041】
これら関数用第2マスタ2fとスレッド用第2マスタ2sとは同一のモジュールで構成されており、同じテキストの異なるスレッドである。具体的には、関数用第2マスタ2fとスレッド用第2マスタ2sとはモジュール中の実行開始位置が異なるのみである。
【0042】
スレーブLは、例えばタイマ、シリアルポート、汎用入出力ポートといったスレーブとして使用される周辺回路をシミュレーションするためのプログラムで構成されたシミュレータである。このスレーブLは、関数用第1マスタ1f、スレッド用第1マスタ1s、関数用第2マスタ2f及びスレッド用第2マスタ2sからバスBを介して行われるリードアクセス及びライトアクセスに応答して所定の動作を行う。このスレーブLは、関数用マネージャF及びスレッド用マネージャSから関数呼び出しされることにより実行される。
【0043】
バスBは、関数用第1マスタ1f、スレッド用第1マスタ1s、関数用第2マスタ2f及びスレッド用第2マスタ2sと、スレーブLとを接続するバスをシミュレートするためのプログラムで構成されたシミュレータである。このバスBは、関数用第1マスタ1f、スレッド用第1マスタ1s、関数用第2マスタ2f及びスレッド用第2マスタ2sからのトライウエイトによる問い合わせに応答して、スレーブLが直ちに応答可能であるかどうか、即ち、アクセスブロッキングが発生したかどうかを表す情報を返す。
【0044】
関数用マネージャFは、関数用第1マスタ1f、関数用第2マスタ2f及びスレーブLを順番に関数呼び出しすることにより、これらを同期して実行させるための制御プログラムである。
【0045】
スレッド用マネージャSは、スレッド用第1マスタ1s及びスレッド用第2マスタ2sをスレッド切り替えにより実行させると共に、スレーブを関数呼び出しにより実行するための制御プログラムである。
【0046】
次に、上記のように構成される本発明の実施の形態に係るシステムシミュレータの動作を説明する。このシステムシミュレータでは、関数用第1マスタ1f、スレッド用第1マネージャ1s、関数用第2マスタ1s、スレッド用第2マスタ2s、関数用マネージャF及びスレッド用マネージャSの何れか1つのみが起動されるように制御される。
【0047】
最初に、アクセスブロッキングが発生しない場合の動作を、図2を参照しながら説明する。この場合、このシステムシミュレータは、上述した第1の従来技術に係るシミュレータと同様に動作する。即ち、シミュレーションは、関数用マネージャFが関数用第1マスタ1f、関数用第2マスタ2f及びスレーブLに対して関数呼び出しを順次実行することにより進められる。
【0048】
より詳しくは、関数用マネージャFは、先ず関数用第1マスタ1fに対して関数呼び出しを実行する。これにより、関数用第1マスタ1fは、1クロックに相当する処理を実行する。例えば、関数呼び出しの対象が1クロックで完了する命令であれば、1命令が実行された後に、制御は関数用マネージャFに戻される。この処理ではアクセスブロッキングは発生しないものと仮定しているので、バスBにアクセスする処理であっても1クロックで処理は完了する。なお、関数呼び出しの対象が複数クロックを必要とする命令であれば、1クロック分の処理が完了した時点で、制御は関数用マネージャFに戻される。
【0049】
次に、上記と同様にして、関数用マネージャFは、関数用第2マスタ2fに対し関数呼び出しを実行し、引き続いて、スレーブLに対して関数呼び出しを実行する。以下、関数用第1マスタ1f→関数用第2マスタ2f→スレーブL→関数用第1マスタ1f→・・・と関数呼び出しがサイクリックに実行されることにより、シミュレーションが進行する。なお、関数呼び出しの対象が複数クロックを必要とする命令の場合は、その対象に対して複数のサイクルにわたって複数回の関数呼び出しが実行されることにより、1命令が完了する。
【0050】
以上のように、アクセスブロッキングが発生しない限り、関数用第1マスタ1f、関数用第2マスタ2f及びスレーブLは、マネージャから関数呼び出しが行われる毎に1クロック分に相当する処理を順次実行するので、恰もクロックに同期しているように動作する。これにより、タイミングを考慮したシミュレーションが可能になっている。
【0051】
次に、アクセスブロッキングが発生する場合の動作を図3〜図6を参照しながら説明する。この場合、この実施の形態に係るシステムシミュレータは、上述した第2の従来技術に係るシミュレータと同様に動作する。
【0052】
図3は、関数用マネージャFから関数呼び出しされた関数用第1マスタ1fの処理においてアクセスブロッキングが発生し、制御がスレッド用マネージャSに遷移する様子を示す図である。点線は制御の流れを示す。
【0053】
関数用マネージャFは、先ず関数用第1マスタ1fに対して関数呼び出しを実行する。これにより、関数用第1マスタ1fは、1クロックに相当する処理を実行する。この処理において、関数用第1マスタ1fは、バスBのセマフォに対してトライウエイトを行う。ここで、トライウエイトが成功すれば、つまりアクセスブロッキングが発生しなければ、関数用第1マスタ1fは、上述したように、1クロックに相当する処理を完了して制御は関数用マネージャFに戻る。
【0054】
一方、トライウエイトが失敗すれば、つまりアクセスブロッキングが発生すれば、図3の点線矢印で示すように、関数用第1マスタ1fは、スレッド用マネージャSのセマフォに対してポストを行い、関数用マネージャFのセマフォに対してウエイトを行う。これにより、制御は、関数用マネージャFからスレッド用マネージャSに移る。即ち、スレッド用マネージャSが起動され、関数用マネージャFはスリープ状態に入る。以後、スレッド用マネージャSの制御下でスレッド切り替えによるシミュレーションが開始される。
【0055】
図4は、スレッド用マネージャSによってスレッドが起動されたスレッド用第2マスタ2sの処理においてアクセスブロッキングが発生し、制御がスレッド用マネージャSに遷移する様子を示す図である。点線は制御の流れを示す。
【0056】
図3に示した動作に引き続いて、スレッド用マネージャSは、スレッド用第2マスタ2sのセマフォに対してポストすることにより該スレッド用第2マスタ2sのスレッドを起動し、自身はウエイトする。スレッド用第2マスタ2sのスレッドは、バスBのセマフォに対してトライウエイトを行う。
【0057】
ここで、図4の点線矢印で示すように、トライウエイトが成功すれば、つまりアクセスブロッキングが発生しなければ、1クロック分の処理を完了した後に、スレッド用マネージャSのセマフォに対してポストを行い、自身はウエイトする。一方、トライウエイトが失敗すれば、つまりアクセスブロッキングが発生すれば、直ちにスレッド用マネージャSのセマフォに対してポストを行い、自身はウエイトする。
【0058】
図5は、スレッド用マネージャSから関数呼び出しされたスレーブLが処理を完了し、その後、制御がスレッド用マネージャSに遷移する様子を示す図である。点線は制御の流れを示す。
【0059】
図4に示した動作に引き続いて、スレッド用マネージャSは、スレーブLに対して関数呼び出しを実行する。これにより、スレーブLは、1クロックに相当する処理を実行する。例えば関数用第1マスタ1f、スレッド用第1マスタ1s、関数用第2マスタ2f及びスレッド用第2マスタ2sからのリード要求に対するデータが用意できると、スレーブLは、バスBのセマフォに対してポストを行う。これにより、バスBにおけるアクセスブロッキング状態が解除される。その後、制御はスレッド用マネージャSに戻される。
【0060】
図6は、スレッド用マネージャSから関数呼び出しされたスレッド用第1マスタ1sの処理においてアクセスブロッキングが発生せず、制御が関数用マネージャFに遷移する様子を示す図である。点線は制御の流れを示す。
【0061】
図5に引き続いて、スレッド用マネージャSは、関数用マネージャFのセマフォに対してポストを行う。これにより、トライウエイトに失敗してウエイトしていた関数用第1マスタ1fが起動され、再び、バスBのセマフォに対してトライウエイトを行う。ここで、トライウエイトが成功すれば、つまりアクセスブロッキングが発生しなければ、関数用第1マスタ1fは、1クロックに相当する処理を完了して制御は関数用マネージャFに戻る。
【0062】
一方、トライウエイトが失敗すれば、つまりアクセスブロッキングが解消されていなければ、図3を参照しながら説明したように、関数用第1マスタ1fは、スレッド用マネージャSのセマフォに対してポストを行う。以後、上述したと同様の動作が繰り返される。そして、アクセスブロッキングが解消した時点で、全てのマスタが関数呼び出しによって実行される。
【0063】
以上説明した本発明の実施の形態に係るシステムシミュレータによれば、例えばCPU単体のシミュレーションを目的として作成された既開発の命令セットシミュレータを、マスタのシミュレータとしてそのまま利用できる。従って、シミュレータの作り直しは不要である。
【0064】
また、アクセスブロッキングが発生したときは、関数呼び出しによるシミュレーションからスレッド切り替えによるシミュレーションに切り替えられるので、従来のように、アクセスブロッキングの発生に起因してシステムシミュレータがデッドロックに陥ることがない。
【0065】
更に、アクセスブロッキングが発生しない限り、シミュレーションは関数呼び出しにより実行され、スレッド切り替えによる動作は行われない。その結果、スレッド切り替えによるオーバーヘッドを最小限に抑えることができ、高速なシミュレーションを実現できる。
【0066】
次に、本発明の理解をより深めるために、上述した動作を実現するための処理を、関数用マネージャFとスレッド用マネージャSとの切り替え部分の動作を中心に、フローチャートを参照しながら説明する。
【0067】
図7は、この実施の形態に係るシステムシミュレータのメイン処理を示すフローチャートである。
【0068】
このシステムシミュレータにおいて、関数用マネージャF(以下、単に「マネージャF」という)及びスレッド用マネージャS(以下、単に「マネージャS」という)では、関数用第1マスタ1f、スレッド用第1マスタ1s、関数用第2マスタ2f及びスレッド用第2マスタ2s(以下、単に「マスタ」と総称する場合がある)は、テーブルにより管理されている。なお、以下では、関数用第1マスタ1f及び関数用第2マスタ2fを単に「マスタf」と呼び、スレッド用第1マスタ1s及びスレッド用第2マスタ2sを単に「マスタs」と呼ぶ場合がある。
【0069】
カレントマスタテーブルインデックス(current_master_table_index)は、マネージャFとマネージャSとで共有する、次にクロックを進めるためのマスタのテーブルインデックスである。
【0070】
システムシミュレータによるシミュレーションが開始されると、先ず、カレントマスタテーブルインデックス(current_master_table_index)及びカレントスレーブテーブルインデックス(current_slave_table_index)がゼロに初期設定される(ステップS10及びS11)。次いで、シミュレーションに使用されるマネージャSのスレッドが生成される(ステップS12)。
【0071】
次いで、後述するマスタsのスレッド生成処理(ステップS13)を行った後に、マネージャFに関して、マネージャFのシステムの時間を1クロック進める処理が、シミュレーション終了指示があるまで繰り返される(ステップS14及びS15)。一方、マネージャSに関しては、マネージャSのセマフォでウエイトさせ(ステップS16)、その後、マネージャSのシステムの時間を1クロック進める処理が、シミュレーション終了指示があるまで繰り返される(ステップS17及びS18)。
【0072】
従って、初期状態では、ステップS14及びS15により、関数用マネージャFによる関数呼び出しが実行されることによってシミュレーションが開始される。その後は、ステップS14の処理及びステップS17の処理がアクセスブロッキングの有無に応じて適宜実行される。
【0073】
次に、上記ステップS13で行われる「マスタsのスレッド生成処理」の詳細を図8に示したフローチャートを参照しながら説明する。
【0074】
ここで、カレントマスタインデックス(current_master_index)は、マネージャSによって、次にクロックを進めるマスタsのインデックスである。
【0075】
マスタsのスレッドの生成処理においては、先ず、カレントマスタインデックス(current_master_index)がゼロに初期設定される(ステップS20)。次いで、カレントマスタインデックスがマスタテーブルサイズ(master_table_size)より小さいかどうかが調べられる(ステップS21)。ここで小さいことが判断されると、カレントマスタインデックス(current_master_index)に対応するマスタsのスレッドが生成される(ステップS22)。
【0076】
次いで、後述するマスタsの時間を1クロック進めるための処理(ステップS24)を行う一方で、カレントマスタインデックス(current_master_index)の値をプラス1(ステップS23)した後に、次のマスタsのスレッド生成のために、ステップS21に戻り、上述した動作が繰り返される。上記ステップS21で、カレントマスタインデックスがマスタテーブルサイズ以上であることが判断されると、マスタsのスレッド生成処理を終了する。
【0077】
次に、上記ステップS14で行われる「マネージャFのシステムの時間を1クロック進める処理」の詳細を、図9に示したフローチャートを参照しながら説明する。
【0078】
この処理では、先ず、カレントマスタテーブルインデックス(current_master_table_index)がマスタテーブルサイズ(master_table_size)より小さいかどうかが調べられる(ステップS25)。ここで、小さいことが判断されると、カレントインデックス(cur_index)に、カレントマスタテーブルインデックス(current_master_table_index)の値を代入してからカレントマスタテーブルインデックス(current_master_table_index)の値を1だけインクリメントする処理(cur_index=current_master_table_index++)が実行される(ステップS26)。
【0079】
次いで、マスタのテーブルインデックスがカレントインデックス(cur_index)のマスタを関数呼び出しすることにより時間を1クロック進める処理が行われる(ステップS27)。この処理の詳細は後述する。次いで、アクセスブロッキングが発生しているマスタの情報を格納している連想配列が空かどうかが調べられる(ステップS28)。ここで、連想配列が空であることが判断されると、アクセスブロッキングは発生していないものと認識され、シーケンスはステップS25に戻り、次のマスタに対して上述した動作が繰り返される。
【0080】
一方、連想配列が空でないことが判断されると、アクセスブロッキングが発生しているものと認識され、マネージャSのセマフォに対してポストを行い(ステップS29)、マネージャFのセマフォに対してウエイトを行う(ステップS30)。これにより、制御は、マネージャFからマネージャSに移行し、以後、マネージャSの制御下でスレッド切り替えによるシミュレーションが開始される。その後、シーケンスはステップS25に戻り、次のマスタに対して上述した動作が繰り返される。
【0081】
上記ステップS25で、カレントマスタテーブルインデックス(current_master_table_index)がマスタテーブルサイズ(master_table_size)以上であることが判断されると、カレントマスタテーブルインデックス(current_master_table_index)がゼロにリセットされる(ステップS31)。
【0082】
次いで、カレントスレーブテーブルインデックス(current_slave_table_index)がスレーブテーブルサイズ(slave_table_size)より小さいかどうかが調べられる(ステップS32)。ここで、小さいことが判断されると、カレントインデックス(cur_index)にカレントスレーブテーブルインデックス(current_slave_table_index)の値を代入してからカレントスレーブテーブルインデックス(current_slave_table_index)の値を1だけインクリメントする処理(cur_index=current_slave_table_index++)が実行される(ステップS33)。
【0083】
次いで、スレーブのテーブルインデックスがカレントインデックス(cur_index)のスレーブを関数呼び出しすることにより時間を1クロック進める処理が行われる(ステップS34)。その後シーケンスはステップS25に戻り、次のスレーブに対して上述した動作が繰り返される。
【0084】
上記ステップS32で、カレントスレーブテーブルインデックス(current_slave_table_index)がスレーブテーブルサイズ(slave_table_size)以上であることが判断されると、カレントスレーブテーブルインデックス(current_slave_table_index)がゼロにリセットされる(ステップS35)。以上により、マネージャFのシステムの時間を1クロック進める処理が終了し、シーケンスはメイン処理に戻る。
【0085】
次に、上記ステップS17で行われる「マネージャSのシステムの時間を1クロック進める処理」の詳細を、図10に示したフローチャートを参照しながら説明する。
【0086】
この処理では、先ず、カレントマスタテーブルインデックス(current_master_table_index)がマスタテーブルサイズ(master_table_size)より小さいかどうかが調べられる(ステップS40)。ここで、小さいことが判断されると、カレントインデックス(cur_index)にカレントマスタテーブルインデックス(current_master_table_index)の値を代入してからカレントマスタテーブルインデックス(current_master_table_index)の値を1だけインクリメントする処理(cur_index=current_master_table_index++)が実行される(ステップS41)。
【0087】
次いで、マスタのテーブルインデックスがカレントインデックス(cur_index)のマスタsの時間を1クロック進める処理が行われる(ステップS42)。但し、アクセスブロッキングが発生した旨の通知によって、マネージャFのセマフォに対してポストを行うように設定されていれば、マネージャFのセマフォに対してポストを行い、そうでなければ、該当するマスタsに対してポストを行う。この処理の詳細については後述する。
【0088】
次いで、マネージャSのセマフォでウエイトする(ステップS43)。次いで、連想配列が空かどうかが調べられる(ステップS44)。ここで、連想配列が空であることが判断されると、アクセスブロッキングは発生していないものと認識され、シーケンスはステップS40に戻り、次のマスタに対して上述した動作が繰り返される。
【0089】
一方、連想配列が空でないことが判断されると、アクセスブロッキングが発生しているものと認識され、マネージャFのセマフォに対してポストを行い(ステップS45)、マネージャSのセマフォに対してウエイトする(ステップS46)。これにより、制御は、マネージャSからマネージャFに移行し、以後、マネージャFの制御下で関数呼び出しによるシミュレーションが行われる。その後、シーケンスはステップS40に戻り、次のマスタに対して上述した動作が繰り返される。
【0090】
上記ステップS40で、カレントマスタテーブルインデックス(current_master_table_index)がマスタテーブルサイズ(master_table_size)以上であることが判断されると、カレントマスタテーブルインデックス(current_master_table_index)がゼロにリセットされる(ステップS47)。
【0091】
次いで、カレントスレーブテーブルインデックス(current_slave_table_index)がスレーブテーブルサイズ(slave_table_size)より小さいかどうかが調べられる(ステップS48)。ここで、小さいことが判断されると、カレントインデックス(cur_index)にカレントスレーブテーブルインデックス(current_slave_table_index)の値を代入してからカレントスレーブテーブルインデックス(current_slave_table_index)の値を1だけインクリメントする処理(cur_index=current_slave_table_index++)が実行される(ステップS49)。
【0092】
次いで、スレーブのテーブルインデックスがカレントインデックス(cur_index)のスレーブを関数呼び出しすることにより時間を1クロック進める処理が行われる(ステップS50)。その後シーケンスはステップS48に戻り、次のスレーブに対して上述した動作が繰り返される。
【0093】
一方、上記ステップS48で、カレントスレーブテーブルインデックス(current_slave_table_index)がスレーブテーブルサイズ(slave_table_size)以上であることが判断されると、カレントスレーブテーブルインデックス(current_slave_table_index)がゼロにリセットされる(ステップS51)。以上により、マネージャSのシステムの時間を1クロック進める処理が終了し、シーケンスはメイン処理に戻る。
【0094】
次に、上述した図9に示したステップS27で行われる「マスタの時間を1クロック進めるための処理」の詳細を、図11に示したフローチャートを参照しながら説明する。なお、以下では、マスタとしてCPUが使用される場合を例示して説明する。
【0095】
この処理では、先ず、命令のフェッチが行われる(ステップS60)。次いで、フェッチされた命令がデコードされる(ステップS61)。そして、デコードの結果に基づいて、NOP命令(ステップS62)、ADD命令(ステップS63)、LOAD命令(ステップS64)、・・・の何れかの実行が行われる。なお、デコードの結果、該当する命令が存在しなければエラー処理が行われる(ステップS65)。
【0096】
次に、マネージャFから関数呼び出しによって実行される命令の一例を、LOAD命令を例にとって、図12に示したフローチャートを参照しながら説明する。
【0097】
このLOAD命令の実行では、先ず、スレーブからバスを経由してデータが得られるかどうかが調べられる(ステップS70)。ここで、データが得られないことが判断されると、マスタfとマスタsとで共通のアクセスブロッキング発生の通知処理が行われる(ステップS71)。このアクセスブロッキング発生の通知処理の詳細は、図13のフローチャートに示されている。
【0098】
このアクセスブロッキング発生の通知処理では、先ず、ブロッキングしているマスタの情報を格納する連想配列が空かどうかが調べられる(ステップS80)。そして、空であることが判断されると、マネージャSが、このマスタの時間を進めるときは、マネージャFのセマフォに対してポストを行うように設定する(ステップS81)。一方、空でないことが判断されると、ステップS81の処理はスキップされる。次いで、ブロッキングをしているマスタの情報を格納する連想配列にマスタを登録する(ステップS82)。その後、シーケンスは、図12のステップS72に戻る。
【0099】
ステップS72では、マネージャSのセマフォに対してポストが行われる。次いで、マネージャFのセマフォでウエイトする(ステップS73)。その後、シーケンスはステップS70に戻り、上述した動作が繰り返され、1クロック毎に、スレーブからデータが得られているかどうかをチェックする。
【0100】
上記ステップS70で、スレーブからバスを経由してデータを得られることが判断されると、次いで、マスタfとマスタsとで共通のアクセスブロッキング発生の通知処理を呼んでいたかどうか、つまりステップS71を実行していたかどうかが調べられる(ステップS74)。ここで、マスタfとマスタsとで共通のアクセスブロッキング発生の通知処理を呼んでいたことが判断されると、マスタfとマスタsとで共通のアクセスブロッキング終了の通知処理が実行される(ステップS75)。このアクセスブロッキング終了の通知処理の詳細は、図14のフローチャートに示されている。
【0101】
このアクセスブロッキング終了の通知処理では、ブロッキングをしているマスタの情報を格納する連想配列からマスタが削除される(ステップS85)。次いで、マネージャSが、このマスタの時間を進めるときは、このマスタsのセマフォに対してポストを行うように設定する(ステップS86)。その後、シーケンスは、図12のステップS76に戻る。
【0102】
ステップS76では、スレーブからバスを経由して得られたデータを、LOAD命令で指定されたレジスタ(図示せず)にライトする。これにより、LOAD命令の実行が完了する。
【0103】
次に、上記ステップS24で行われる「マスタの時間を1クロック進める処理」の詳細を、図15に示したフローチャートを参照しながら説明する。なお、以下では、マスタとしてCPUが使用される場合を例示して説明する。
【0104】
この処理では、先ず、マスタsのセマフォでウエイトする(ステップS90)。次いで、命令のフェッチが行われる(ステップS91)。次いで、フェッチされた命令がデコードされる(ステップS92)。そして、デコードの結果に基づいて、NOP命令(ステップS93)、ADD命令(ステップS94)、LOAD命令(ステップS95)、・・・の何れかの実行が行われる。なお、デコードの結果、該当する命令が存在しなければエラー処理が行われる(ステップS96)。次いで、マネージャSのセマフォに対してポストが行われる(ステップS97)。
【0105】
マスタsから起動される命令の一例を、LOAD命令を例にとって、図16に示したフローチャートを参照しながら説明する。
【0106】
このLOAD命令の実行では、先ず、スレーブからバスを経由してデータが得られるかどうかが調べられる(ステップS100)。ここで、データが得られないことが判断されると、マスタfとマスタsとで共通のアクセスブロッキング発生の通知処理が行われる(ステップS101)。このアクセスブロッキング発生の通知処理の詳細は、図13のフローチャートを参照して説明した。
【0107】
次いで、マネージャSのセマフォに対してポストが行われる(ステップS102)。次いで、マスタsのセマフォでウエイトする(ステップS103)。その後、シーケンスはステップS100に戻り、上述した動作が繰り返され、1クロック毎にスレーブからデータが得られているかをチェックする。
【0108】
上記ステップS100で、スレーブからバスを経由してデータを得られることが判断されると、次いで、マスタfとマスタsとで共通のアクセスブロッキング発生の通知処理を呼んでいたかどうか、つまりステップS101が実行されていたかどうかが調べられる(ステップS104)。ここで、マスタfとマスタsとで共通のアクセスブロッキング発生の通知処理を呼んでいたことが判断されると、マスタfとマスタsとで共通のアクセスブロッキング終了の通知処理が実行される(ステップS75)。このアクセスブロッキング終了の通知処理の詳細は、図14のフローチャートを参照して説明した。
【0109】
次いで、スレーブからバスを経由して得られたデータを、LOAD命令で指定されたレジスタ(図示せず)にライトする(ステップS106)。これにより、LOAD命令の実行が完了する。
【0110】
以上の処理により、図2〜図6を参照しながら説明した動作が実現されている。
【0111】
なお、上述した実施の形態では、2つのマスタと1つのスレーブを備えた装置をシミュレーションする場合を例に挙げて説明したが、本発明では、マスタの数及びスレーブの数はこれらに限定されず、任意の数とすることができる。
【0112】
【発明の効果】
以上詳述したように本発明によれば、従来のバスマスタをシミュレーションするシミュレータを変更することなく、高速で且つアクセスブロッキングによるデッドロック状態に陥らずにシミュレーションを行うことのできるシステムシミュレータ、シミュレーション方法及びシミュレーションプログラムを提供できる。
【図面の簡単な説明】
【図1】本発明の実施の形態に係るシステムシミュレータの構成を示す機能ブロック図である。
【図2】本発明の実施の形態に係るシステムシミュレータにおいて、アクセスブロッキングが発生しない場合の動作を説明するための図である。
【図3】本発明の実施の形態に係るシステムシミュレータにおいて、アクセスブロッキングが発生する場合の動作(その1)を説明するための図である。
【図4】本発明の実施の形態に係るシステムシミュレータにおいて、アクセスブロッキングが発生する場合の動作(その2)を説明するための図である。
【図5】本発明の実施の形態に係るシステムシミュレータにおいて、アクセスブロッキングが発生する場合の動作(その3)を説明するための図である。
【図6】本発明の実施の形態に係るシステムシミュレータにおいて、アクセスブロッキングが発生する場合の動作(その4)を説明するための図である。
【図7】本発明の実施の形態に係るシステムシミュレータのメイン処理を示すフローチャートである。
【図8】図7のマスタsのスレッド生成処理の詳細を示すフローチャートである。
【図9】図7のマネージャFのシステムの時間を1クロック進める処理の詳細を示すフローチャートである。
【図10】図7のマネージャSのシステムの時間を1クロック進める処理の詳細を示すフローチャートである。
【図11】図9のステップS27の処理の詳細を示すフローチャートである。
【図12】図11のステップS64の処理の詳細を示すフローチャートである。
【図13】図12のステップS71の処理の詳細を示すフローチャートである。
【図14】図12のステップS75の処理の詳細を示すフローチャートである。
【図15】図10のステップS42の処理の詳細を示すフローチャートである。
【図16】図15のステップS95の処理の詳細を示すフローチャートである。
【図17】第1の従来技術に係るシステムシミュレータを説明するための図である。
【図18】第2の従来技術に係るシステムシミュレータを説明するための図である。
【図19】図18に示したシステムシミュレータにおけるマネージャと第1マスタとの間の遷移動作を説明するための図である。
【図20】図18に示したシステムシミュレータにおけるマネージャと第2マスタとの間の遷移動作を説明するための図である。
【図21】図18に示したシステムシミュレータにおけるマネージャとスレーブとの間の遷移動作を説明するための図である。
【符号の説明】
1f 関数用第1マスタ
1s スレッド用第1マスタ
2f 関数用第2マスタ
2s スレッド用第2マスタ
L スレーブ
B バス
F 関数用マネージャ
S スレッド用マネージャ
Claims (9)
- 関数として実装され、バスマスタの動作をシミュレートするマスタシミュレータと、
関数として実装され、バススレーブの動作をシミュレートするスレーブシミュレータと、
前記マスタシミュレータ及び前記スレーブシミュレータを順次サイクリックに関数呼び出しする処理が記述される関数用マネージャと、
前記マスタシミュレータを実行するスレッドにセマフォを用いてサイクリックに制御を移す処理が記述されるスレッド用マネージャと
を具備し、
前記関数用マネージャと前記スレッド用マネージャとは各々スレッドとしてあらかじめ起動され、前記関数用マネージャは、前記マスタシミュレータを実行するスレッドを起動し、
前記関数用マネージャに関数呼び出しされた前記マスタシミュレータにアクセスブロッキングが発生すると、前記マスタシミュレータは、セマフォを用いて前記スレッド用マネージャを実行するスレッドに制御を移し、
制御を移された前記スレッド用マネージャは、前記マスタシミュレータを実行するスレッドにサイクリックに制御を移す処理を開始する
システムシミュレータ。 - 前記スレッド用マネージャは、更に、前記スレーブシミュレータを関数呼び出しにより実行させる
請求項1に記載のシステムシミュレータ。 - 前記アクセスブロッキングが解消された後は、前記スレッド用マネージャは、関数呼び出しにより前記関数用マネージャに制御を戻す
請求項1又は2に記載のシステムシミュレータ。 - 関数として実装されるマスタシミュレータによりバスマスタの動作をシミュレートするステップと、
関数として実装されるスレーブシミュレータによりバススレーブの動作をシミュレートするステップと、
前記マスタシミュレータ及び前記スレーブシミュレータを順次サイクリックに関数呼び出しして実行させるステップと、
前記マスタシミュレータを実行するスレッドにセマフォを用いてサイクリックに制御を移すステップと、
前記関数呼び出しして実行させるステップと前記セマフォを用いてサイクリックに制御を移すステップとを各々スレッドとして予め起動するステップと
を具備し、
前記予め起動するステップにおいて起動された前記関数呼び出しして実行させるステップは、前記マスタシミュレータを実行するスレッドを起動するステップを備え、
前記バスマスタの動作をシミュレートするステップは、関数呼び出しされた前記マスタシミュレータにアクセスブロッキングが発生したとき、前記セマフォを用いてサイクリックに制御を移すステップに制御を移すステップを備え、
制御を移された前記セマフォを用いてサイクリックに制御を移すステップは、前記マスタシミュレータを実行するスレッドに制御を移す処理を開始するステップを備える
シミュレーション方法。 - 前記セマフォを用いてサイクリックに制御を移すステップは、前記スレーブシミュレータを関数呼び出しにより実行させるステップを更に備える
請求項4に記載のシミュレーション方法。 - 前記アクセスブロッキングが解消された後は、前記マスタシミュレータを前記関数呼び出しして実行させるステップに制御を戻すステップを更に備える
請求項4又は5に記載のシミュレーション方法。 - バスマスタの動作をシミュレートするマスタシミュレーションプログラムと、
バススレーブの動作をシミュレートするスレーブシミュレーションプログラムと、
前記マスタシミュレーションプログラム及び前記スレーブシミュレーションプログラムを順次サイクリックに関数呼び出しする処理が記述される関数用マネージャプログラムと、
前記マスタシミュレータを実行するスレッドにセマフォを用いてサイクリックに制御を移す処理が記述されるスレッド用マネージャプログラムと、
前記関数用マネージャプログラムと前記スレッド用マネージャプログラムとを各々スレッドとして予め起動するプログラムと
を具備し、
前記関数用マネージャプログラムは、前記マスタシミュレーションプログラムを実行するスレッドを起動する処理を含み、
前記関数マネージャプログラムに関数呼び出しされる前記マスタシミュレーションプログラムは、実行時にアクセスブロッキングが発生すると、セマフォを用いて前記スレッド用マネージャプログラムを実行するスレッドに制御を移す処理を含み、
前記スレッド用マネージャプログラムは、制御を移されると前記マスタシミュレーションプログラムを実行するスレッドにサイクリックに制御を移す処理を含む
コンピュータに実行させるためのシミュレーションプログラム。 - 前記スレッド用マネージャプログラムは、更に、前記スレーブシミュレーションプログラムを関数呼び出しにより実行させる処理が記述される
請求項7に記載のシミュレーションプログラム。 - 前記アクセスブロッキングが解消された後は、前記スレッド用マネージャプログラムは、関数呼び出しにより前記関数用マネージャプログラムに制御を戻す処理が記述される
請求項7又は8に記載のシミュレーションプログラム。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001098738A JP4529063B2 (ja) | 2001-03-30 | 2001-03-30 | システムシミュレータ、シミュレーション方法及びシミュレーションプログラム |
DE10213837A DE10213837A1 (de) | 2001-03-30 | 2002-03-27 | Systemsimulator, Simulationsverfahren und Simulationsprogramm |
US10/107,056 US7246052B2 (en) | 2001-03-30 | 2002-03-28 | Bus master and bus slave simulation using function manager and thread manager |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001098738A JP4529063B2 (ja) | 2001-03-30 | 2001-03-30 | システムシミュレータ、シミュレーション方法及びシミュレーションプログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2002297414A JP2002297414A (ja) | 2002-10-11 |
JP4529063B2 true JP4529063B2 (ja) | 2010-08-25 |
Family
ID=18952360
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2001098738A Expired - Fee Related JP4529063B2 (ja) | 2001-03-30 | 2001-03-30 | システムシミュレータ、シミュレーション方法及びシミュレーションプログラム |
Country Status (3)
Country | Link |
---|---|
US (1) | US7246052B2 (ja) |
JP (1) | JP4529063B2 (ja) |
DE (1) | DE10213837A1 (ja) |
Families Citing this family (46)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7366708B2 (en) | 1999-02-18 | 2008-04-29 | Oracle Corporation | Mechanism to efficiently index structured data that provides hierarchical access in a relational database system |
US7321900B1 (en) | 2001-06-15 | 2008-01-22 | Oracle International Corporation | Reducing memory requirements needed to represent XML entities |
AU2002334721B2 (en) | 2001-09-28 | 2008-10-23 | Oracle International Corporation | An index structure to access hierarchical data in a relational database system |
US7047250B1 (en) | 2001-09-28 | 2006-05-16 | Oracle International Corporation | Indexing to efficiently manage versioned data in a database system |
US7092967B1 (en) * | 2001-09-28 | 2006-08-15 | Oracle International Corporation | Loadable units for lazy manifestation of XML documents |
US7308474B2 (en) * | 2002-11-06 | 2007-12-11 | Oracle International Corporation | Techniques for scalably accessing data in an arbitrarily large document by a device with limited resources |
JP2004334410A (ja) * | 2003-05-06 | 2004-11-25 | Hitachi Ltd | 情報処理装置及びプロセッサ |
US8694510B2 (en) | 2003-09-04 | 2014-04-08 | Oracle International Corporation | Indexing XML documents efficiently |
US8229932B2 (en) | 2003-09-04 | 2012-07-24 | Oracle International Corporation | Storing XML documents efficiently in an RDBMS |
US7398265B2 (en) | 2004-04-09 | 2008-07-08 | Oracle International Corporation | Efficient query processing of XML data using XML index |
US7493305B2 (en) | 2004-04-09 | 2009-02-17 | Oracle International Corporation | Efficient queribility and manageability of an XML index with path subsetting |
US7366735B2 (en) | 2004-04-09 | 2008-04-29 | Oracle International Corporation | Efficient extraction of XML content stored in a LOB |
US7440954B2 (en) | 2004-04-09 | 2008-10-21 | Oracle International Corporation | Index maintenance for operations involving indexed XML data |
US7499915B2 (en) * | 2004-04-09 | 2009-03-03 | Oracle International Corporation | Index for accessing XML data |
US7930277B2 (en) | 2004-04-21 | 2011-04-19 | Oracle International Corporation | Cost-based optimizer for an XML data repository within a database |
US20050289175A1 (en) * | 2004-06-23 | 2005-12-29 | Oracle International Corporation | Providing XML node identity based operations in a value based SQL system |
DE602005022069D1 (de) | 2004-06-23 | 2010-08-12 | Oracle Int Corp | Effiziente auswertung von abfragen mittels übersetzung |
US8566300B2 (en) | 2004-07-02 | 2013-10-22 | Oracle International Corporation | Mechanism for efficient maintenance of XML index structures in a database system |
US7885980B2 (en) | 2004-07-02 | 2011-02-08 | Oracle International Corporation | Mechanism for improving performance on XML over XML data using path subsetting |
US7523131B2 (en) | 2005-02-10 | 2009-04-21 | Oracle International Corporation | Techniques for efficiently storing and querying in a relational database, XML documents conforming to schemas that contain cyclic constructs |
US20060212450A1 (en) * | 2005-03-18 | 2006-09-21 | Microsoft Corporation | Temporary master thread |
JP2006343942A (ja) * | 2005-06-08 | 2006-12-21 | Nec Electronics Corp | バスシステム設計方法と装置 |
US7406478B2 (en) * | 2005-08-11 | 2008-07-29 | Oracle International Corporation | Flexible handling of datetime XML datatype in a database system |
US8024368B2 (en) * | 2005-10-07 | 2011-09-20 | Oracle International Corporation | Generating XML instances from flat files |
US9367642B2 (en) | 2005-10-07 | 2016-06-14 | Oracle International Corporation | Flexible storage of XML collections within an object-relational database |
US8554789B2 (en) * | 2005-10-07 | 2013-10-08 | Oracle International Corporation | Managing cyclic constructs of XML schema in a rdbms |
US8073841B2 (en) | 2005-10-07 | 2011-12-06 | Oracle International Corporation | Optimizing correlated XML extracts |
US8949455B2 (en) | 2005-11-21 | 2015-02-03 | Oracle International Corporation | Path-caching mechanism to improve performance of path-related operations in a repository |
US7933928B2 (en) | 2005-12-22 | 2011-04-26 | Oracle International Corporation | Method and mechanism for loading XML documents into memory |
US7730032B2 (en) | 2006-01-12 | 2010-06-01 | Oracle International Corporation | Efficient queriability of version histories in a repository |
US9229967B2 (en) * | 2006-02-22 | 2016-01-05 | Oracle International Corporation | Efficient processing of path related operations on data organized hierarchically in an RDBMS |
US8510292B2 (en) * | 2006-05-25 | 2013-08-13 | Oracle International Coporation | Isolation for applications working on shared XML data |
US7933935B2 (en) * | 2006-10-16 | 2011-04-26 | Oracle International Corporation | Efficient partitioning technique while managing large XML documents |
US7797310B2 (en) | 2006-10-16 | 2010-09-14 | Oracle International Corporation | Technique to estimate the cost of streaming evaluation of XPaths |
US7836098B2 (en) * | 2007-07-13 | 2010-11-16 | Oracle International Corporation | Accelerating value-based lookup of XML document in XQuery |
JP4888272B2 (ja) * | 2007-07-30 | 2012-02-29 | 富士通セミコンダクター株式会社 | ソフトウェアのシミュレーション方法、ソフトウェアのシミュレーションのためのプログラム、及びソフトウェアのシミュレーション装置 |
US7840609B2 (en) * | 2007-07-31 | 2010-11-23 | Oracle International Corporation | Using sibling-count in XML indexes to optimize single-path queries |
US7991768B2 (en) | 2007-11-08 | 2011-08-02 | Oracle International Corporation | Global query normalization to improve XML index based rewrites for path subsetted index |
US8543898B2 (en) | 2007-11-09 | 2013-09-24 | Oracle International Corporation | Techniques for more efficient generation of XML events from XML data sources |
US8250062B2 (en) | 2007-11-09 | 2012-08-21 | Oracle International Corporation | Optimized streaming evaluation of XML queries |
US9842090B2 (en) | 2007-12-05 | 2017-12-12 | Oracle International Corporation | Efficient streaming evaluation of XPaths on binary-encoded XML schema-based documents |
US8429196B2 (en) | 2008-06-06 | 2013-04-23 | Oracle International Corporation | Fast extraction of scalar values from binary encoded XML |
CN101645057B (zh) * | 2008-08-06 | 2012-07-18 | 中兴通讯股份有限公司 | 一种防止cpu局域总线挂死的方法及装置 |
US7958112B2 (en) | 2008-08-08 | 2011-06-07 | Oracle International Corporation | Interleaving query transformations for XML indexes |
US8126932B2 (en) * | 2008-12-30 | 2012-02-28 | Oracle International Corporation | Indexing strategy with improved DML performance and space usage for node-aware full-text search over XML |
US8219563B2 (en) * | 2008-12-30 | 2012-07-10 | Oracle International Corporation | Indexing mechanism for efficient node-aware full-text search over XML |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH07281925A (ja) * | 1994-04-06 | 1995-10-27 | Fujitsu Ltd | マルチプロセッサシミュレーション装置 |
JPH10111815A (ja) * | 1996-08-13 | 1998-04-28 | Nec Corp | デバッグシステム |
JPH11296408A (ja) * | 1998-04-08 | 1999-10-29 | Matsushita Electric Ind Co Ltd | 組み込み機器用ソフトウエア論理シミュレータ |
Family Cites Families (36)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4506324A (en) * | 1982-03-08 | 1985-03-19 | The United States Of America As Represented By The Secretary Of The Navy | Simulator interface system |
US4868741A (en) * | 1983-07-22 | 1989-09-19 | Texas Instruments Incorporated | Computer bus deadlock prevention |
EP0357075A3 (en) * | 1988-09-02 | 1991-12-11 | Fujitsu Limited | Data control device and system using the same |
JPH0561951A (ja) * | 1991-08-30 | 1993-03-12 | Fujitsu Ltd | イメージ処理装置 |
JP3466212B2 (ja) * | 1991-09-17 | 2003-11-10 | インテル・コーポレーション | コンピュータシステム |
DE69230428T2 (de) * | 1991-09-27 | 2000-08-03 | Sun Microsystems Inc | Verklemmungserkennung und Maskierung enthaltende Busarbitrierungsarchitektur |
US5355455A (en) * | 1991-11-19 | 1994-10-11 | International Business Machines Corporation | Method and apparatus for avoiding deadlock in a computer system with two or more protocol-controlled buses interconnected by a bus adaptor |
US5448709A (en) * | 1992-10-13 | 1995-09-05 | Compaq Computer Corporation | Disk array controller having command descriptor blocks utilized by bus master and bus slave for respectively performing data transfer operations |
US5717873A (en) * | 1993-09-30 | 1998-02-10 | Intel Corporation | Deadlock avoidance mechanism and method for multiple bus topology |
US5469435A (en) * | 1994-01-25 | 1995-11-21 | Apple Computer, Inc. | Bus deadlock avoidance during master split-transactions |
US5493672A (en) * | 1994-05-16 | 1996-02-20 | Sun Microsystems, Inc. | Concurrent simulation of host system at instruction level and input/output system at logic level with two-way communication deadlock resolution |
US6279124B1 (en) * | 1996-06-17 | 2001-08-21 | Qwest Communications International Inc. | Method and system for testing hardware and/or software applications |
US6058465A (en) * | 1996-08-19 | 2000-05-02 | Nguyen; Le Trong | Single-instruction-multiple-data processing in a multimedia signal processor |
JP2830857B2 (ja) * | 1996-09-09 | 1998-12-02 | 三菱電機株式会社 | データストレージシステム及びデータストレージ管理方法 |
US5832276A (en) * | 1996-10-07 | 1998-11-03 | International Business Machines Corporation | Resolving processor and system bus address collision in a high-level cache |
BR9914200A (pt) * | 1998-09-30 | 2002-01-22 | Cadence Design Systems Inc | Métodos para projetar um sistema de circuito, para expandir uma metodologia existente para avaliar a viabilidade de um projeto de circuito, para realizar uma avaliação de viabilidade para um projeto de circuito, para refinar uma primeira regra de decisão para um projeto de circuito, para formar uma segunda regra de decisão para um projeto de circuito, para organizar os dados de experiência de um projetista relativos a uma pluralidade de blocos de circuito pré-projetados, para aumentar a eficiência de distribuição de lógica de cola e para distribuir uma pluralidade de elementos lógicos de cola entre os blocos de projeto e distribuir lógica de cola para execução em um esquema de projeto de dispositivo de circuito integrado, para converter uma interface especìfica de um bloco de circuito, para selecionar um coletor de circuito, para projetar um dispositivo que incorpora o projeto e habilitar um teste do dispositivo, para verificar o correto funcionamento de um projeto de circuito e para desenvolver uma bancada de teste de nìvel comportamental, interface de colar e sistema de interface |
US6826749B2 (en) * | 1998-12-08 | 2004-11-30 | Nazomi Communications, Inc. | Java hardware accelerator using thread manager |
US6466898B1 (en) * | 1999-01-12 | 2002-10-15 | Terence Chan | Multithreaded, mixed hardware description languages logic simulation on engineering workstations |
JP2000276359A (ja) * | 1999-03-23 | 2000-10-06 | Sony Corp | 情報処理装置、プログラム初期化方法及びプログラム提供媒体 |
US6507808B1 (en) * | 1999-06-23 | 2003-01-14 | International Business Machines Corporation | Hardware logic verification data transfer checking apparatus and method therefor |
US6714958B1 (en) * | 1999-07-28 | 2004-03-30 | International Business Machines Corporation | Detecting and causing latent deadlocks in multi-threaded programs |
US6490642B1 (en) * | 1999-08-12 | 2002-12-03 | Mips Technologies, Inc. | Locked read/write on separate address/data bus using write barrier |
JP2001160080A (ja) * | 1999-12-02 | 2001-06-12 | Nec Corp | オブジェクト指向言語によるシステムのシミュレーション方法、装置及びそのプログラムを記録した記録媒体 |
GB2362729B (en) * | 1999-12-23 | 2004-02-11 | St Microelectronics Sa | Memory access debug facility |
KR100392569B1 (ko) * | 2000-10-28 | 2003-07-23 | (주)다이나릿시스템 | 반도체 칩의 논리 기능 검증용 에뮬레이터 장치 및 방법 |
US6981077B2 (en) * | 2000-12-22 | 2005-12-27 | Nortel Networks Limited | Global access bus architecture |
US7069422B2 (en) * | 2000-12-22 | 2006-06-27 | Modelski Richard P | Load-shift carry instruction |
US20020124085A1 (en) * | 2000-12-28 | 2002-09-05 | Fujitsu Limited | Method of simulating operation of logical unit, and computer-readable recording medium retaining program for simulating operation of logical unit |
US7165094B2 (en) * | 2001-03-09 | 2007-01-16 | Sonics, Inc. | Communications system and method with non-blocking shared interface |
US7103887B2 (en) * | 2001-06-27 | 2006-09-05 | Sun Microsystems, Inc. | Load-balancing queues employing LIFO/FIFO work stealing |
US6834365B2 (en) * | 2001-07-17 | 2004-12-21 | International Business Machines Corporation | Integrated real-time data tracing with low pin count output |
US7076416B2 (en) * | 2001-08-20 | 2006-07-11 | Sun Microsystems, Inc. | Method and apparatus for evaluating logic states of design nodes for cycle-based simulation |
US7054910B1 (en) * | 2001-12-20 | 2006-05-30 | Emc Corporation | Data replication facility for distributed computing environments |
US6981081B2 (en) * | 2002-12-19 | 2005-12-27 | Intel Corporation | Method for SMI arbitration timeliness in a cooperative SMI/driver use mechanism |
US7089340B2 (en) * | 2002-12-31 | 2006-08-08 | Intel Corporation | Hardware management of java threads utilizing a thread processor to manage a plurality of active threads with synchronization primitives |
US7000047B2 (en) * | 2003-04-23 | 2006-02-14 | International Business Machines Corporation | Mechanism for effectively handling livelocks in a simultaneous multithreading processor |
-
2001
- 2001-03-30 JP JP2001098738A patent/JP4529063B2/ja not_active Expired - Fee Related
-
2002
- 2002-03-27 DE DE10213837A patent/DE10213837A1/de not_active Withdrawn
- 2002-03-28 US US10/107,056 patent/US7246052B2/en not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH07281925A (ja) * | 1994-04-06 | 1995-10-27 | Fujitsu Ltd | マルチプロセッサシミュレーション装置 |
JPH10111815A (ja) * | 1996-08-13 | 1998-04-28 | Nec Corp | デバッグシステム |
JPH11296408A (ja) * | 1998-04-08 | 1999-10-29 | Matsushita Electric Ind Co Ltd | 組み込み機器用ソフトウエア論理シミュレータ |
Also Published As
Publication number | Publication date |
---|---|
DE10213837A1 (de) | 2002-12-12 |
US7246052B2 (en) | 2007-07-17 |
US20020143512A1 (en) | 2002-10-03 |
JP2002297414A (ja) | 2002-10-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4529063B2 (ja) | システムシミュレータ、シミュレーション方法及びシミュレーションプログラム | |
US4112490A (en) | Data transfer control apparatus and method | |
US6356862B2 (en) | Hardware and software co-verification employing deferred synchronization | |
JP4667206B2 (ja) | マルチコアモデルシミュレーションプログラム、該プログラムを記録した記録媒体、マルチコアモデルシミュレータ、およびマルチコアモデルシミュレーション方法 | |
US20030040896A1 (en) | Method and apparatus for cycle-based computation | |
JP4599266B2 (ja) | シミュレーション装置及びシミュレーション方法 | |
US9047427B1 (en) | Method and system for performing verification of an electronic design | |
US6336088B1 (en) | Method and apparatus for synchronizing independently executing test lists for design verification | |
JP2513417B2 (ja) | 情報処理装置 | |
CN115017845A (zh) | 用于ip单元级别验证的总线驱动式芯片仿真激励模型 | |
US10430215B1 (en) | Method and system to transfer data between hardware emulator and host workstation | |
US7228513B2 (en) | Circuit operation verification device and method | |
JP2007058813A (ja) | 検証装置及び検証方法 | |
JPH10312315A (ja) | ソフトウェア/ハードウェア協調シミュレーション方式 | |
JP3953243B2 (ja) | システム分析のためにバス・アービトレーション制御を使用する同期方法及び装置 | |
JP2000276502A (ja) | ソフトウエアシミュレータ | |
JP2004021907A (ja) | 性能評価用シミュレーションシステム | |
US8914274B1 (en) | Method and system for instruction set simulation with concurrent attachment of multiple debuggers | |
JP2005301981A (ja) | エミュレーションシステムとエミュレータの間でのシミュレーション及び可視化データ転送のための最適化インターフェース | |
JP2002082813A (ja) | プログラムロジック装置 | |
CN111694697B (zh) | 半导体装置及调试系统 | |
JP5228552B2 (ja) | プロセス間通信機構 | |
CN111143141B (zh) | 一种状态机设置方法及系统 | |
TW200426594A (en) | Method for dynamically arranging an operating speed of a microprocessor | |
JPH10221410A (ja) | Lsiの自動論理検証方式 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20080118 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20091023 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20091110 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20100112 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20100526 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20100526 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130618 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130618 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20140618 Year of fee payment: 4 |
|
S531 | Written request for registration of change of domicile |
Free format text: JAPANESE INTERMEDIATE CODE: R313531 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
LAPS | Cancellation because of no payment of annual fees |