JP2013196245A - シミュレーション方法、シミュレーション装置及びシミュレーションプログラム - Google Patents

シミュレーション方法、シミュレーション装置及びシミュレーションプログラム Download PDF

Info

Publication number
JP2013196245A
JP2013196245A JP2012061434A JP2012061434A JP2013196245A JP 2013196245 A JP2013196245 A JP 2013196245A JP 2012061434 A JP2012061434 A JP 2012061434A JP 2012061434 A JP2012061434 A JP 2012061434A JP 2013196245 A JP2013196245 A JP 2013196245A
Authority
JP
Japan
Prior art keywords
simulation
transaction
unit
mode
block
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.)
Pending
Application number
JP2012061434A
Other languages
English (en)
Inventor
Hidekazu Arai
英一 新井
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Renesas Electronics Corp
Original Assignee
Renesas Electronics Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Renesas Electronics Corp filed Critical Renesas Electronics Corp
Priority to JP2012061434A priority Critical patent/JP2013196245A/ja
Publication of JP2013196245A publication Critical patent/JP2013196245A/ja
Pending legal-status Critical Current

Links

Images

Abstract

【課題】シミュレーションの高精度化及び高速化を可能にするとともに、シミュレーションの誤動作を防止することが可能なシミュレーション方法を提供する。
【解決手段】本発明に係るシミュレーション方法は、コア部1と、バス部2及びメモリ部3と、を有するシステムLSI部40のシミュレーション方法であって、高精度モード、あるいは、高速モードのいずれかのシミュレーションモードに切り替え、バス部2及びメモリ部3は、シミュレーションモードが高精度モードから高速モードに切り替えられた場合、すでに高精度モードでコア部1から受け付けている受付済トランザクションを、切り替え後に高速モードでコア部1から受け付ける切替後トランザクションよりも優先的に実行するものである。
【選択図】図10

Description

本発明は、シミュレーション方法、シミュレーション装置及びシミュレーションプログラムに関し、特に、高速モードまたは高精度モードでシミュレーションを行うシミュレーション方法、シミュレーション装置及びシミュレーションプログラムに関する。
近年、半導体集積回路の大規模集積化に伴い、複数のプロセッサコア、バス、メモリ等、多数の機能ブロックを1チップに搭載したシステムLSI、あるいは、System on Chip(SoC)と呼ばれる半導体集積回路が広く知られている。
システムLSIなどの半導体集積回路の設計においては、システムの動作を検証するためにコンピュータを用いたシミュレーションが行われている。シミュレーションでは、できるだけ実機と同様な動作をシミュレーションし精度よく動作検証することが要求される一方、半導体集積回路の大規模化・複雑化によりシミュレーション時間が長くなるため、高速にシミュレーションを行うことも要求されている。
このようなシミュレーションを実現するため、システムを記述する言語としてSystemCが使用されている。SystemCでは、機能ブロック間のトランザクションをモデリングしたTLM(Transaction Level Modeling)により、機能ブロック間の通信動作を表現することができる。TLMは、非特許文献1や非特許文献2などに記載のように、OSCI(The Open SystemC Initiative)によって標準化が進められている。なお、トランザクションとは、メモリデータの読み出し処理や書き込み処理などのまとまった1つの処理単位において、機能ブロック間でやり取りされる一連のデータ通信処理である。
TLMには、トランザクションのアクセス方式(インタフェース)として、ノンブロッキングアクセスとブロッキングアクセスとが規定されている。ノンブロッキングアクセスは、複数に分離した通信フェーズによりトランザクションをシミュレーションする方式であり、ブロッキングアクセスは、通信フェーズが複数に分かれず、連続した通信フェーズによりトランザクションをシミュレーションする方式である。
非特許文献2(「2.5 TLM標準化団体が提唱する抽象レベルとの関係」第2−15頁)には、ATコーディングスタイル(Approximately-timed coding style)では、ノンブロッキングアクセスを使用し、LTコーディングスタイル(Loosely-timed coding style)では、ブロッキングアクセスを使用することが記載されている。LTコーディングスタイルとは、サイクル時間と無関係なシミュレーションにより高速化を可能とする高速モードであり、ATコーディングスタイルとは、サイクル時間に合わせたシミュレーションにより高精度化を可能とする高精度モードである。
図23、図24は、非特許文献2に記載された、ATコーディングスタイル(高精度モード)、LTコーディングスタイル(高速モード)における、イニシエータ910とターゲット920間の各トランザクションシーケンスを示している。なお、イニシエータのように、トランザクションを自ら要求する側の機能ブロックをマスターブロックといい、ターゲットのように、トランザクションを他から要求される側の機能ブロックをスレーブブロックという。
図23に示されるように、ノンブロッキングアクセスを行う高精度モードの場合、まず、シミュレーション時間t0において、イニシエータ910が、ノンブロッキング関数であるnb_transport_fw(p,BEGIN,t)を関数コールすることで、イニシエータ910からターゲット920へノンブロッキングアクセス要求を通知し、ターゲット920からイニシエータ910に関数リターンし(901)、イニシエータ910はターゲット920からの完了通知を待つ。このノンブロッキングアクセスを要求し、この要求を受け付けるフェーズが、ノンブロッキングアクセスの開始フェーズである。
ノンブロッキングアクセス要求を受けたターゲット920は、アクセス処理によって消費すべき時間t1の経過を待って(902)、t1経過後、ターゲット920は、ノンブロッキング関数であるnb_transport_bw(p,END,t)を関数コールすることで、ターゲット920からイニシエータ910へノンブロッキング完了通知を通知し、ターゲット920からイニシエータ910に関数リターンする(903)。このノンブロッキングアクセスの完了を通知し、この通知を受け付けるフェーズが、ノンブロッキングアクセスの終了フェーズである。
このように、ノンブロッキングアクセスでは、アクセス要求によりトランザクションを開始する開始フェーズと、完了通知によりトランザクションを終了する終了フェーズとが分かれており、開始フェーズと終了フェーズを経てトランザクションが完了する。なお、開始フェーズから終了フェーズまでの期間では、イニシエータ910は、トランザクション完了待ちの状態であり、ターゲット920は、トランザクション処理中の状態である。
ノンブロッキングアクセスでは、イニシエータ910が完了通知を受けた時、シミュレーション時間はt0+t1となり、トランザクション処理で消費されるべき時間とシミュレーション時間とが同期している。したがって、シミュレーション時間に合わせた精度の良いシミュレーションが可能である。
図24に示されるように、ブロッキングアクセスを行う高速モードの場合、シミュレーション時間t0において、イニシエータ910が、ブロッキング関数であるb_transport(p, t)を関数コールすることで、イニシエータ910からターゲット920へブロッキングアクセス要求が通知される(904)。
このとき、ターゲット920は、b_transport()に対し、ターゲット920がアクセス処理によって消費すべき時間t2を引数tに設定し(905)、関数リターンすることで、ターゲット920からイニシエータ910へt2を含めたブロッキング完了通知を通知する(906)。
このように、ブロッキングアクセスでは、アクセス要求によりトランザクションを開始するフェーズと、完了通知によりトランザクションを終了するフェーズとが分かれず、連続した通信フェーズによりトランザクションが完了する。
ブロッキングアクセスでは、イニシエータ910が完了通知を受けた時、シミュレーション時間は進まずにt0のままであり、トランザクション処理で消費すべき時間とシミュレーション時間とがずれている。このため、イニシエータ910は、ずれている時間t2が設定されたtを引数としてwait()を関数コールすることで、時間をt2進めて時間を同期させる(907)。
ノンブロッキングアクセスとブロッキングアクセスとのシミュレーション速度の違いについて説明する。図23,24では、イニシエータとターゲットのみの構成を示しているが、速度の違いを分かりやすく説明するため、ここでは、マスタ(コア)とメモリとがバスを介して接続されているとする。
ノンブロッキングアクセスでは、マスタは、nb_transport_fw()を関数コールし完了待ちに入った後、バスは、既定時間経過後アービトレーションを実施し、メモリへnb_transport_fw()を関数コールし完了待ちとなる。さらに、メモリは、レーテンシ経過を待って、nb_transport_bw()を関数コールし、バスもnb_transport_fw()を関数コールすることにより、完了通知がバス経由でマスタに通知される。
このときシミュレーション時間の待ちがバスにおけるアービトレーションの前の待ちとメモリのレーテンシ待ちの2回発生するが、この間他に動作するプロセスがない場合、シミュレーションの待ち時間として実際にその時間待つのではなく、シミュレーション時間にその時間を単に加算するだけで、シミュレーションは一瞬で終了する。但し、このメモリアクセス間に起動されているプロセスはマスタのnb_transport_fw()を関数コールし完了待ちを行うプロセス、バスのアービトレーション後メモリへ送信するプロセス、メモリのレーテンシ経過待ち後完了を送信するプロセスの3つとなる。
ブロッキングアクセスでは、マスタがバス内に実装されているb_transport()を関数コールし、バスがメモリに実装されているb_transport()を関数コールし、これらの関数のリターンによりレーテンシを伝えて完了となる。ブロッキングアクセスでは、全て関数コールのみで行われるため、起動するプロセスはマスタの1プロセスだけとなる。
シミュレーション速度は、起動しているプロセスの数により影響を受ける。複数のプロセスが起動しているということはプロセスの切替が発生していることを意味する。このプロセスの切り替え時には、シミュレーションカーネルが動き、データの退避や、次にどのプロセスを動かすかのスケジューリングなど、時間のかかる複雑な処理が行われる。このプロセスの切り替えは、"コンテキストスイッチング"と呼ばれる。一般的にシミュレーション速度を向上させる一つの手段として、コンテキストスイッチングの回数を減らすことが行われている。コンテキストスイッチはプロセスがwaitに入った場合やプロセスが終了した際に発生する。
したがって、ノンブロッキングアクセスでは、プロセス数が多く、コンテキストスイッチング回数が多いため、シミュレーション速度が遅くなり、ブロッキングアクセスでは、プロセス数が少なく、コンテキストスイッチング回数も少ないため、シミュレーション速度が速くなる。例えば、10回のメモリアクセスが実施される場合、ノンブロッキングアクセスの場合、3×10回コンテキストスイッチングが発生するのに対し、ブロッキングアクセスの場合、レーテンシ時間を加算して、最後に一回だけ同期を取るようにすれば1回のコンテキストスイッチングですむということになりシミュレーションを高速化できる。
このように、ブロッキングアクセスでは、予め決まったレーテンシを関数の戻りと共にマスタへ伝達するため、マスタ側で後でまとめて同期をとることにより、コンテキストスイッチングの回数を減らすことができるため、シミュレーション速度を速くすることができる。
一方で、精度の高いノンブロッキングアクセスに対し、ブロッキングアクセスでは、精度を保つことが難しい。
これは、ブロッキングアクセスでは、バスやメモリにおけるアクセスの衝突を考慮できないためである。すなわち、上述のように、レーテンシを後でまとめてマスタ側で消費する(同期を取る)方式のブロッキングアクセスでは、マスタからの関数コールのみでアクセスが完了する。この間他のプロセスは動けないため、メモリやバスは予め決まった経過時間しかマスタへ返すことができない。これに対し、ノンブロッキングアクセスでは、マスタはnb_transport_fw()を関数コールした後、完了待ち(wait等)に入る。バスのアービトレーションを行うプロセスが起動するまでに、他のマスタプロセスが起動できるため、この間他のアクセスが発生した場合、他のマスタからもnb_transport_fw()が関数コールされる。バスは複数のアクセスを受け付けた後アービトレーションを実施し、バス調停を行うことができる。調停で負けたアクセスについては、新たに遅延が発生し、実機同様の時間経過を表現することができる。
また、ブロッキングアクセスのように、コンテキストスイッチングの回数を減らすため、同期の回数(waitをコールする回数)を減らし、一つのマスタプロセスの処理を次々に進めた場合、他のマスタプロセスの動ける隙間がなくなり、アクセス順序を狂わせる要因にもなり得る。
なお、ブロッキングアクセスとして図25のようなアクセス方法もある。これは非特許文献2に記載された同期LTコーディングスタイルである。この方法では、イニシエータ910は、b_transport()を関数コールすると(908)、ターゲット920は、消費すべき時間t2の経過を待って(909)、関数リターンする(910)。このブロッキングアクセスでは、ノンブロッキングアクセスと同様に時間にずれが生じないため、ブロッキングアクセスにおいて、シミュレーション時間に同期して高精度なシミュレーションを行うことができる。本明細書では、特に断らない限り、ブロッキングアクセスとは図24のような高速なアクセス方法をいう。
なお、特許文献1には、プロセッサの命令ごとにシミュレーションを行う命令レベルモデルと、クロックに同期してシミュレーションを行うサイクルアキュレートモデルとが記載されている。特許文献2には、バスを介してアクセスする高精度シミュレーションと、バスを介さずアクセスする抽象化シミュレーションとが記載されている。特許文献3には、実行サイクルごとにシミュレーションを行う論理シミュレーションと、命令ごとにシミュレーションを行う命令セットシミュレーションとが記載されている。特許文献4には、マルチプロセッサシステムのシミュレーションにおいて、ノンブロッキングアクセスを行うことが記載されている。
特開2000−11022号公報 特開2007−207176号公報 特開2009−252113号公報 特開2000−132528号公報
The Open SystemC Initiative (OSCI)、"TLM-2.0 Reference Manual (TLM_2_0_LRM.pdf)"、インターネット<URL:http://www.systemc.org/downloads/standards/> 株式会社半導体理工学研究センター(STARC)、「TLモデリングガイド」、第2版 第2訂、2011年
上記のように、従来の半導体集積回路のシミュレーション方法では、高速モードでブロッキングアクセスを行うことにより高速なシミュレーションが可能であり、また、高精度モードでノンブロッキングアクセスを行うことにより高精度なシミュレーションが可能である。
しかしながら、高精度モードの場合、速度を速くすることは困難であり、また、高速モードの場合、精度を良くすることは困難である。すなわち、シミュレーションにおける精度と速度はトレードオフの関係にある。
そこで、本願発明者は、半導体集積回路のシミュレーション方法において、高速モードと高精度モードとを切り替え可能にすることで、高い精度を保ちつつ高速化を図ることができることを見出した。例えば、ユーザにとってあまり重要視しないシミュレーション期間は高速モードで素早く実行し、注目の必要な期間になった場合、高精度モードに切り替えて実行することで、シミュレーションの高精度化と高速化を両立することができる。
一方、上記のように、高速モードのブロッキングアクセスと高精度モードのノンブロッキングアクセスとでは、トランザクション処理が異なるため、モードを切り替えるタイミングによっては、シミュレータが誤動作するおそれがある。
したがって、従来のシミュレーション方法では、高精度かつ高速にシミュレーションを行うとともに、誤動作することなくシミュレーションを行うことが困難であるという問題があった。
本発明に係るシミュレーション方法は、マスターブロックと、前記マスターブロックと通信を行うスレーブブロックと、を有する半導体集積回路のシミュレーション方法であって、前記マスターブロックと前記スレーブブロック間のトランザクションを、前記スレーブブロック側でシミュレーション時間を消費することによりシミュレーションする高精度モード、あるいは、前記マスターブロックと前記スレーブブロック間のトランザクションを、前記マスターブロック側でシミュレーション時間を消費することによりシミュレーションする高速モード、のいずれかのシミュレーションモードに切り替え、前記スレーブブロックは、前記シミュレーションモードが前記高精度モードから前記高速モードに切り替えられた場合、すでに前記高精度モードで前記マスターブロックから受け付けている受付済トランザクションを、当該切り替え後に前記高速モードで前記マスターブロックから受け付ける切替後トランザクションよりも優先的に実行するものである。
本発明に係るシミュレーション装置は、マスターブロックと、前記マスターブロックと通信を行うスレーブブロックと、を有する半導体集積回路のシミュレーション装置であって、前記マスターブロックと前記スレーブブロック間のトランザクションを、前記スレーブブロック側でシミュレーション時間を消費することによりシミュレーションする高精度モード、あるいは、前記マスターブロックと前記スレーブブロック間のトランザクションを、前記マスターブロック側でシミュレーション時間を消費することによりシミュレーションする高速モード、のいずれかのシミュレーションモードに切り替るモード切替部と、前記スレーブブロックにおいて、前記シミュレーションモードが前記高精度モードから前記高速モードに切り替えられた場合、すでに前記高精度モードで前記マスターブロックから受け付けている受付済トランザクションを、当該切り替え後に前記高速モードで前記マスターブロックから受け付ける切替後トランザクションよりも優先的に実行するスレーブ通信部と、を備えるものである。
本発明に係るシミュレーションプログラムは、マスターブロックと、前記マスターブロックと通信を行うスレーブブロックと、を有する半導体集積回路のシミュレーション処理をコンピュータに実行させるシミュレーションプログラムであって、前記シミュレーション処理は、前記マスターブロックと前記スレーブブロック間のトランザクションを、前記スレーブブロック側でシミュレーション時間を消費することによりシミュレーションする高精度モード、あるいは、前記マスターブロックと前記スレーブブロック間のトランザクションを、前記マスターブロック側でシミュレーション時間を消費することによりシミュレーションする高速モード、のいずれかのシミュレーションモードに切り替え、前記スレーブブロックは、前記シミュレーションモードが前記高精度モードから前記高速モードに切り替えられた場合、すでに前記高精度モードで前記マスターブロックから受け付けている受付済トランザクションを、当該切り替え後に前記高速モードで前記マスターブロックから受け付ける切替後トランザクションよりも優先的に実行するものである。
本発明では、シミュレーションモードを切り替え可能とすることにより、シミュレーションの高精度化及び高速化を図ることができ、さらに、シミュレーションモードを高精度モードから高速モードに切り替えた場合、すでに受け付けている受付済トランザクションを、モード切り替え後に受け付ける切替後トランザクションよりも優先的に実行することから、トランザクションの順序が保たれるため、シミュレーションの誤動作を防止することができる。
本発明によれば、シミュレーションの高精度化及び高速化を可能にするとともに、シミュレーションの誤動作を防止することが可能なシミュレーション方法、シミュレーション装置及びシミュレーションプログラムを提供することができる。
本発明の前提例に係るシミュレータを実現するコンピュータシステムのハードウェア構成を説明するための図である。 本発明の前提例に係るシミュレータの機能ブロックを説明するための図である。 本発明の前提例に係るシミュレータにおける各通信部の構成を説明するための図である。 本発明の前提例に係るシミュレータにおけるコア通信部の動作を説明するための図である。 本発明の前提例に係るシミュレータにおけるバス通信部の動作を説明するための図である。 本発明の前提例に係るシミュレータにおけるメモリ通信部の動作を説明するための図である。 本発明の前提例に係るシミュレータのコーディング例を説明するための図である。 本発明の前提例に係るシミュレータのコーディング例を説明するための図である。 本発明の前提例に係るシミュレータの動作を説明するための図である。 本発明の実施の形態1に係るシミュレータの機能ブロックを説明するための図である。 本発明の実施の形態1に係るシミュレータにおける各通信部の構成を説明するための図である。 本発明の実施の形態1に係るシミュレータにおけるコア通信部の動作を説明するための図である。 本発明の実施の形態1に係るシミュレータにおけるバス通信部の動作を説明するための図である。 本発明の実施の形態1に係るシミュレータにおけるメモリ通信部の動作を説明するための図である。 本発明の実施の形態1に係るシミュレータのコーディング例を説明するための図である。 本発明の実施の形態1に係るシミュレータの動作を説明するための図である。 本発明の実施の形態2に係るシミュレータの機能ブロックを説明するための図である。 本発明の実施の形態2に係るシミュレータにおける各通信部の構成を説明するための図である。 本発明の実施の形態2に係るシミュレータにおけるコア通信部の動作を説明するための図である。 本発明の実施の形態2に係るシミュレータにおけるバス通信部の動作を説明するための図である。 本発明の実施の形態2に係るシミュレータにおけるメモリ通信部の動作を説明するための図である。 本発明の実施の形態2に係るシミュレータの動作を説明するための図である。 従来のシミュレータの動作を説明するための図である。 従来のシミュレータの動作を説明するための図である。 従来のシミュレータの動作を説明するための図である。
本発明の前提例
本発明の実施の形態について説明する前に、まず、本発明が適用されるに至るシミュレータ(シミュレーション装置)の前提例の問題点について、図1〜図9を用いて説明する。この前提例は、高精度モードと高速モードの切り替えを可能にするシミュレータの例である。
図1は、前提例におけるシミュレータが実現されるコンピュータシステムのハードウェア構成を示す図である。なお、後述する本発明の実施の形態に係るシミュレータも、図1のコンピュータシステムによって実現される。
このコンピュータシステム100は、パーソナルコンピュータ等の情報処理装置である。図に示されるように、コンピュータシステム100は、CPU102、メインメモリ103、ハードディスク104等を内蔵した本体部101、本体部101からの指示により画面表示を行う表示装置105、このコンピュータシステムにユーザの指示や文字情報を入力するためのキーボード106、および表示装置の画面上における任意の位置を指定し、その位置に表示されていたアイコン等に応じた指示を入力するマウス107から構成される。
なお、CPU102及びメインメモリ103は、プログラムを実行し各部を制御する制御部の一例であり、ハードディスク104は、プログラム等を記憶する記憶部の一例である。制御部と記憶部は、一つの装置でもよいし、複数の装置であってもよい。例えば、複数の制御装置や複数の記憶装置に分散されていてもよい。また、表示装置105は、ユーザに対し種々の出力を行う出力装置の一例であり、キーボード106、マウス107は、ユーザが種々の入力操作を行う入力装置の一例である。
ハードディスク104には、前提例のシミュレータの各機能を実現するためのシミュレーションプログラム108、シミュレーション等に必要なその他の各種データ109が格納される。なお、後述する本発明の実施の形態に係るシミュレータの場合には、そのシミュレータの各機能を実現するためのシミュレーションプログラム108が格納される。
シミュレーションを実行する際、シミュレーションプログラム108および各種データ109をメインメモリ103にロードし、CPU102はメインメモリ103にロードされたシミュレーションプログラム108を実行することで、前提例のシミュレータが実現される。また、コンピュータシステム100の基本動作は、ハードディスク104に格納された基本プログラムであるオペレーティングシステム(OS)を介して実行される。
図2は、前提例におけるシミュレータの機能構成を示すブロック図である。このシミュレータ200は、コンピュータシステム100上でシミュレーションプログラムが実行されて実現される。
図に示されるように、このシミュレータ200は、システムLSIの動作をシミュレーションするシステムLSI部40と、システムLSI部40のシミュレーション動作を制御するシミュレーション制御部50とを備えている。
システムLSI部40は、プロセッサコアの動作をシミュレーションするコア部1a〜1c(いずれか一つをコア部1とも言う)、コアとメモリ間を接続するバスの動作をシミュレーションするバス部2a〜2b(いずれか一つをバス部2とも言う)、メモリの動作をシミュレーションするメモリ部3a〜3b(いずれかをメモリ部3とも言う)を備えている。この例では、コア部1aは、バス部2aを介して、メモリ部3a及び3bにアクセスし、コア部1b及び1cは、バス部2bを介して、メモリ部3a及び3bにアクセスする。
コア部1、バス部2、メモリ部3は、システムLSIの各機能を実現する機能ブロックである。また、コア部1がバス部2及びメモリ部3へ、トランザクションを要求するため、コア部1がマスターブロックとして動作し、バス部2もしくはメモリ部3がスレーブブロックとして動作する。
コア部1は、演算処理などプロセッサコアの基本機能を実行するコア機能部10と、バスを介したメモリとの間でトランザクション処理(通信処理)を実行するコア通信部11とを備えている。バス部2は、複数のコア部1からのバスアクセスに対し調停制御を実行するアービトレーション部20と、コア及びメモリとの間でトランザクション処理を実行するバス通信部21とを備えている。メモリ部3は、データの記憶処理などメモリの基本機能を実行するメモリ機能部30と、バスを介したコアとの間でトランザクション処理を実行するメモリ通信部31とを備えている。
すなわち、コア機能部10、アービトレーション部20、メモリ機能部30は、各機能ブロックの主要な機能の動作をシミュレーションする機能部であり、コア通信部11、バス通信部21、メモリ通信部31は、TLMのトランザクションアクセス(インタフェース)により、機能ブロック間の通信をシミュレーションする通信部である。
シミュレーション制御部50は、シミュレーション時間やシミュレーションの基本動作を制御するシミュレーションカーネル部4と、シミュレーションモードを切り替えるモード切替部5とを備えている。ここでは、モード切替部5は、コア部1a〜1cに対して、高精度モードまたは高速モードに切り替えるモード切替命令を出力する。モード切替部5がシミュレーションモードを切り替えるタイミングは、ユーザが任意に設定できる。ユーザが切替操作するタイミングでもよいし、あらかじめ設定されたタイミングでもよい。精度が要求される部分のみ高精度モードでシミュレーションし、精度が要求されない部分は高速モードでシミュレーションすることで、要求される精度を保ちつつ、高速なシミュレーションが可能である。
図3は、前提例であるシミュレータ200の各通信部の構成を示している。図に示されるように、コア通信部11は、バス部2との間で高速モードにおけるトランザクション処理を実行する高速モード処理部111と、バス部2との間で高精度モードにおけるトランザクション処理を実行する高精度モード処理部112とから構成されている。コア通信部11では、モード切替部5からの命令に従って、高速モード処理部111または高精度モード処理部112が動作する。高速モード処理部111では、ブロッキングアクセスによりデータ通信が行われ、高精度モード処理部112では、ノンブロッキングアクセスによりデータ通信が行われる。
バス通信部21は、コア部1及びメモリ部3との間でブロッキングアクセスによるトランザクション処理を実行するブロッキングアクセス処理部211と、コア部1及びメモリ部3との間でノンブロッキングアクセスにおけるトランザクション処理を実行するノンブロッキングアクセス処理部212とから構成されている。コア部1からのアクセスがブロッキングであるかノンブロッキングであるかに応じてどちらかの処理部が実行される。また、コア部1からノンブロッキングアクセス要求により受け付けたトランザクションをトランザクション完了まで保持するトランザクション保持部215も備えている。トランザクション保持部215にはアービトレーションに負けたトランザクション等が保持される。
メモリ通信部31は、バス部2との間でブロッキングアクセスによるトランザクション処理を実行するブロッキングアクセス処理部311と、バス部2との間でノンブロッキングアクセスによるトランザクション処理を実行するノンブロッキングアクセス処理部312とから構成されている。バス部2からのアクセスがブロッキングであるかノンブロッキングであるかに応じてどちらかの処理部が実行される。また、バス部2からノンブロッキングアクセス要求により受け付けたトランザクションをトランザクション完了まで保持するトランザクション保持部315も備えている。トランザクション保持部315にはアービトレーションに負けたトランザクション等が保持される。
図4は、前提例であるシミュレータ200のコア通信部11のトランザクション処理を示している。
コア通信部11にて、コアメモリアクセス処理(S100)が開始される。例えば、コアメモリアクセス処理は、コアからメモリにアクセスして、メモリからのデータ読み出しやデータ書き込みを行うためのトランザクション処理であり、コア機能部10の要求によって開始する。
次いで、コア通信部11にて、シミュレーションモードが高速モードかどうか判定される(S101)。
S101において、高速モードであると判定された場合、高速モード処理部111にて、バス部2に対しブロッキングアクセス処理が実行される(S102)。すなわち、バス部2のブロッキングアクセス処理(図5のS200)の関数コールを行う。
次いで、高速モード処理部111にて、バス部2からブロッキングアクセスの完了通知を受けると、メモリアクセスで消費されるべきレーテンシ時間を計上し(S103)、ブロッキングアクセス処理(トランザクション)が終了する(S107)。すなわち、バス部2から関数リターンによって得られるメモリ及びバスのレーテンシ時間を保持し、必要に応じてシミュレーション時間に同期させる。
S101において、高速モードではなく、高精度モードであると判定された場合、高精度モード処理部112にて、バス部2に対しノンブロッキングアクセス処理が実行される(S104)。すなわち、バス部2のノンブロッキングアクセス処理(図5のS210)の関数コールを行う。これにより、バス部2へノンブロッキングアクセスが要求され開始フェーズが実行されたことになる。
次いで、高精度モード処理部112にて、バス部2からノンブロッキングアクセスの完了通知の受信を判定し(S105)、完了通知の受信を待ち続け(S106)、完了通知を受信するとブロッキングアクセス処理が終了する(S107)。すなわち、バス部2からの完了通知によりノンブロッキングアクセスの終了フェーズが実行されることになり、トランザクションが完了する。
図5は、前提例であるシミュレータ200のバス通信部21のトランザクション処理を示している。
バス通信部21では、ブロッキングアクセス処理部211が、ブロッキングアクセス処理(S200)を実行し、ノンブロッキングアクセス処理部212が、ノンブロッキングアクセス処理(S210)、アービトレーション処理(S220)、完了通知処理(S230)を実行する。なお、アービトレーションの具体的な調停処理は、アービトレーション部20で行われるものであり、ここでは主にトランザクションに関連する部分について説明する。
ブロッキングアクセス処理部211では、ブロッキングアクセス処理が開始される(S200)。このブロッキングアクセス処理(S200)は、コア部1からの関数コールにより開始される。
次いで、ブロッキングアクセス処理部211にて、メモリ部3に対しブロッキングアクセス処理が実行される(S201)。すなわち、メモリ部3のブロッキングアクセス処理(図6のS300)の関数コールを行う。
次いで、ブロッキングアクセス処理部211は、メモリ部3からブロッキングアクセスの完了通知を受けると、レーテンシ時間を含めてコア部1へ完了通知を行い(S202)、アクセス処理が終了する(S203)。すなわち、メモリから関数リターンによって得られるメモリのレーテンシ時間に、バスで消費されるべきバスのレーテンシ時間を加算した時間を、関数リターンによりコアへ伝達する。これにより、バス部2のブロッキングアクセス(トランザクション)が終了する。
また、ノンブロッキングアクセス処理部212では、ノンブロッキングアクセス処理が開始される(S210)。このノンブロッキングアクセス処理(S210)は、コア部1からの関数コールにより開始される。
次いで、ノンブロッキングアクセス処理部212にて、所定時間経過後にアービトレーション処理を起動する(S211)。すなわち、アービトレーション処理(S220)が所定時間後に起動されるように、イベント要求を行う。
次いで、ノンブロッキングアクセス処理部212にて、コア部1に対し、アクセスの受け付けをAckの返信により通知する(S212)。すなわち、コア部1へ関数リターンによりAckを通知する。
S211により、所定時間経過後にアービトレーション処理が開始されると(S220)、アービトレーションが実施される(S221)。そして、調停に勝った、すなわち、調停によりバス使用権を取得したトランザクションについて、ノンブロッキングアクセス処理部212は、メモリ部3に対しノンブロッキングアクセス処理を実行し(S222)、処理が終了する(S223)。すなわち、メモリ部3のノンブロッキングアクセス処理(図6のS310)の関数コールを行い、メモリ部3から完了通知を待つ。これにより、メモリ部3へノンブロッキングアクセスが要求され、バス部2における開始フェーズが実行されたことになる。
メモリ部3から完了通知を受けると、ノンブロッキングアクセス処理部212にて、完了通知処理が開始する(S230)。この処理は、メモリ部3からの関数コールにより開始される。
次いで、ノンブロッキングアクセス処理部212にて、コア部1へ完了通知を行い(S231)、処理が終了する(S232)。すなわち、メモリ部3からの完了通知によりノンブロッキングアクセスの終了フェーズが実行されことになり、バス部2におけるトランザクションが完了する。
図6は、前提例であるシミュレータ200のメモリ通信部31のトランザクション処理を示している。
メモリ通信部31では、ブロッキングアクセス処理部311が、ブロッキングアクセス処理(S300)を実行し、ノンブロッキングアクセス処理部312が、ノンブロッキングアクセス処理(S310)、完了通知処理(S320)を実行する。
ブロッキングアクセス処理部311では、ブロッキングアクセス処理が開始される(S300)。このブロッキングアクセス処理(S300)は、バス部2からの関数コールにより開始される。
次いで、ブロッキングアクセス処理部311にて、メモリで消費されるべきレーテンシ時間を含めてバス部2へ完了通知を行い(S301)、処理が終了する(S302)。すなわち、メモリで消費されるべきレーテンシ時間を、関数リターンにより伝達する。これにより、メモリ部3のブロッキングアクセス(トランザクション)が終了する。
また、ノンブロッキングアクセス処理部312にて、ノンブロッキングアクセス処理が開始される(S310)。このノンブロッキングアクセス処理(S310)は、バス部2からの関数コールにより開始される。
次いで、ノンブロッキングアクセス処理部312にて、レーテンシ時間経過後に完了通知処理を起動する(S311)。すなわち、完了通知処理(S320)がレーテンシ時間経過後に起動されるように、イベント要求を行う。
次いで、バス部2に対し、アクセスの受け付けをAckの返信により通知する(S312)。すなわち、バス部2へ関数リターンによりAckを通知する。バス部2からノンブロッキングアクセスが要求され、メモリ部3における開始フェーズが実行されたことになる。
S311により、レーテンシ時間経過後に完了通知処理が開始されると(S320)、ノンブロッキングアクセス処理部312にて、バス部2へ完了通知を行い(S321)、処理が終了する(S322)。すなわち、レーテンシ時間後にバス部2の完了通知処理(図5のS230)の関数コールを行う。バス部2への完了通知によりノンブロッキングアクセスの終了フェーズが実行されことになり、メモリ部3におけるトランザクションが完了する。
図7及び図8は、前提例であるシミュレータ200のコーディング例を示している。
図7を用いて、図4〜図6で示した、高速モードにおけるブロッキングアクセスのトランザクションの流れを説明する。符号401はコア部1におけるプロセス関数であるprocess()、符号402はバス部2におけるブロッキング関数であるb_transport()、符号403はメモリ部3におけるブロッキング関数であるb_transport()についての各コーディング例である。
高速モードの場合、コア部1のprocess()において、メモリアクセスが発生すると、バス部2にブロッキングアクセスを要求するためバス部2のb_transport()を関数コールし(C1)、バス部2のb_transport()では、さらに、メモリ部3にブロッキングアクセスを要求するためb_transport()を関数コールする(C2)。
関数コールされたメモリ部3のb_transport()では、メモリに記憶されたデータを、b_transport()の引数pに設定し(C3)、メモリのレーテンシ時間αを引数tに設定し(C4)、関数リターンし、バス部2に完了を通知する(C5)。なお、図7は、メモリのデータを読み出すreadトランザクションの例である。メモリへデータを書き込むwriteトランザクションの場合には、メモリ部3のb_transport()は、b_transport()の引数pに設定されたデータを、メモリに書き込む(C3)。
バス部2のb_transport()では、メモリ部3のb_transport()から関数リターンすることで完了通知を受けると、引数tにバスのレーテンシ時間βを加算して(C6)、関数リターンし、コア部1に完了を通知する(C7)。
コア部1のprocess()では、バス部2のb_transport()から関数リターンすることで完了通知を受けると、その引数であるメモリ及びバスのレーテンシ時間tを判定する(C8)。これにより、ブロッキングアクセスのトランザクションが終了し、シミュレーション時間との同期が必要であれば、wait()を関数コールして時間を進め、シミュレーション時間と同期させる(C9)。
図8を用いて、図4〜図6で示した、高精度モードにおけるノンブロッキングアクセスのトランザクションの流れを説明する。符号411はコア部1におけるプロセス関数であるprocess()、符号412はコア部1におけるノンブロッキングバックワード関数であるnb_transport_bw()、符号413はバス部2におけるノンブロッキングフォワード関数であるnb_transport_fw()、符号414はバス部2におけるアービトレーション関数であるarb()、符号415はバス部2におけるノンブロッキングバックワード関数であるnb_transport_bw()、符号416はメモリ部3におけるノンブロッキングフォワード関数であるnb_transport_fw()、符号417はメモリ部3におけるプロセス関数であるprocess()についての各コーディング例である。
高精度モードの場合、コア部1のprocess()において、メモリアクセスが発生すると、バス部2にノンブロッキングアクセスを要求するためバス部2のnb_transport_fw()を関数コールする(C11)。
そうすると、バス部2のnb_transport_fw()では、arb()によりアービトレーションを行うためarb_event.notify()によりイベント要求し(C12)、コア部1に関数リターンして、アクセスを受け付けたことを通知する(C13)。コア部1のprocess()では、バス部2のnb_transport_fw()が関数リターンすると、完了通知を待つために例えばwait()を関数コールする(C14)。
バス部2のC12で、arb()のイベントが要求されたため、所定時間経過後、アービトレーションが行われ、調停に勝ったトランザクションについて、メモリ部3にノンブロッキングアクセス要求するためメモリ部3のnb_transport_fw()を関数コールする(C15)。
そうすると、メモリ部3のnb_transport_fw()では、メモリに記憶されたデータを、nb_transport_fw()の引数pに設定し(C16)、process()により完了通知を行うためprocess_event.notify()によりレーテンシ時間αを設定してイベント要求し(C17)、バス部2に関数リターンして、アクセスを受け付けたことを通知する(C18)。これにより、ノンブロッキングアクセスについて、トランザクションの開始フェーズが終了する。なお、図8は、図7と同様にreadトランザクションの例である。writeトランザクションの場合には、メモリ部3のnb_transport_fw()は、nb_transport_fw ()の引数pに設定されたデータを、メモリに書き込む(C16)。
メモリ部3のC17で、process()のイベントが要求されたため、レーテンシ時間α経過後process()が起動される。process()では、ノンブロッキング完了通知を通知するため、バス部2のnb_transport_bw()を関数コールする(C20)。バス部2のnb_transport_bw()では、さらに、コア部1にノンブロッキング完了通知を通知するため、コア部1のnb_transport_bw()を関数コールする(C21)。
そうすると、コア部1のnb_transport_bw()では、完了通知を受けた状態に遷移するため、変数completeをnotifyし(C22)、バス部2に関数リターンして、完了通知を受け付けたことを通知する(C23)。バス部2のnb_transport_bw()では、コア部1のnb_transport_bw()がリターンすると、さらに、メモリ部3に関数リターンして、完了通知を受け付けたことを通知する(C24)。
さらに、コア部1のprocess()では、wait()により完了通知を待っている状態で(C14)、完了通知の受信によりcompleteがnotifyされたため、wait()による受信待ちが終了する。これにより、ノンブロッキングアクセスについて、トランザクションの終了フェーズが終わり、トランザクションが完了する。
次に、図9を用いて、前提例であるシミュレータ200において、メモリアクセス実施中に高精度モードから高速モードへの切り替えが発生した場合の問題について説明する。
まず、シミュレーション時間t10において、コア部1bが、バス部2bに対しノンブロッキングアクセスを要求すると(501)、バス部2bは、アービトレーション後のt11において、メモリ部3aに対しノンブロッキングアクセスを要求する(502)。
次いで、t12において、コア部1cが、バス部2bに対しノンブロッキングアクセスを要求すると(503)、バス部2bは、コア部1bのアクセスによるメモリ部3aからの完了待ちであるため、メモリ部3aへのアクセスが保留される(503)。
メモリ部3aからの完了通知を待っている状態であるt13において、高精度モードから高速モードに切り替えが発生したとする(504)。このとき、コア部1a〜コア部1cに、高速モードへの切り替えが通知され、この後に発生するトランザクションがブロッキングアクセスに切り替わる。
そして、t14において、コア部1aが、バス部2aに対しブロッキングアクセスを要求すると(505)、バス部2aは、メモリ部3aに対しブロッキングアクセスを要求し(507)、バス部2aに関数リターンにより完了が通知され(508)、さらに、コア部1aに関数リターンにより完了が通知される(506)。すなわち、シミュレーションモード切り替え後のt14において、切り替え後に発生したブロッキングアクセスの切替後トランザクションが完了する。
その後、t15において、t11からレーテンシ時間が経過したため、メモリ部3aは、コア部1bのアクセス要求に対しバス部2bへノンブロッキング完了を通知し(509)、バス部2bは、コア部1bにノンブロッキング完了を通知する(510)。
さらに、t16において、バス部2bは、コア部1bのアクセスが終了したため、保留しておいたコア部1cのアクセスを開始し、アービトレーション後のt16において、メモリ部3aにノンブロッキングアクセスを要求する(511)。
次いで、t17において、t16からレーテンシ時間が経過したため、メモリ部3aは、バス部2bにノンブロッキング完了を通知し(512)、バス部2bは、コア部1cにノンブロッキング完了を通知する(513)。すなわち、シミュレーションモード切り替え後のt17において、切り替え前に受け付けたノンブロッキングアクセスの受付済トランザクションが完了する。
このように、前提例では、高精度モードにおいて、ノンブロッキング完了を待っている状態で、シミュレーションモードが高速モードに切り替わり、さらに、ブロッキングアクセスが発生すると、切替後トランザクション(図9(1))のブロッキングアクセスが完了した後に、切り替え前に発生した受付済トランザクション(図9(2))のノンブロッキングアクセスが完了してしまう。
すなわち、本来、図9(1)の切替後トランザクションは、図9(2)の受付済トランザクション完了後に完了するべきであり、トランザクション完了の順序が逆転することになる。同じメモリに対して、アクセス要求の順序とアクセス完了の順序が異なると、メモリのデータや処理結果が保証されなくなるため、コアやメモリのシミュレーションが誤動作する可能性がある。
したがって、前提例では、メモリアクセス実施中に高精度モードから高速モードへの切り替えが発生した場合、ノンブロッキングトランザクションが瞬時に完了しないため、データ通信のトランザクション完了順序が逆転し、シミュレーションの実行結果に悪影響を及ぼすという問題がある。
そこで、本発明では、以下に説明するように、メモリアクセス実施中に高精度モードから高速モードへの切り替えが発生した場合でも、データ通信のトランザクションの順序を保ち、シミュレーションの誤動作を防止することを可能にする。
本発明の実施の形態1
以下、図10〜図16を用いて、本発明の実施の形態1に係るシミュレータについて説明する。なお、これらの図では、主に、上記前提例と同様の構成・動作について同じ符号が付されており、同様の構成・動作については説明を適宜省略する。
図10は、本発明の実施の形態1における、シミュレータの機能構成を示すブロック図である。このシミュレータ201は、上記前提例と同様に、コンピュータシステム100上でシミュレーションプログラムが実行されて実現される。
図に示されるように、このシミュレータ201は、システムLSI部40とシミュレーション制御部50とを備えており、システムLSI部40は、コア部1a〜1c、バス部2a〜2b、メモリ部3a〜3bを備えている。コア部1aは、バス部2aを介して、メモリ部3a及び3bにアクセスし、コア部1b及び1cは、バス部2bを介して、メモリ部3a及び3bにアクセスする。
コア部1は、コア機能部10とコア通信部12とを備えており、バス部2は、アービトレーション部20とバス通信部22とを備えており、メモリ部3は、メモリ機能部30とメモリ通信部32とを備えている。本実施形態では、バス通信部22及びメモリ通信部32は、高精度モードから高速モードに切り替えた場合に、既に受け付けている受付済トランザクションを、切り替え後に受け付ける切替後トランザクションよりも、優先的に実行する機能を有しており、特に、コア部から切替後トランザクションが要求可能となる前に、受付済トランザクションを完了させるものである。
シミュレーション制御部50は、シミュレーションカーネル部4とモード切替部51とを備えている。本実施形態では、モード切替部51は、コア部1a〜1c、バス部2a〜2b、メモリ部3a〜3bの全てに対して、高精度モードまたは高速モードに切り替えるモード切替命令を出力する。
図11は、本発明の実施の形態1に係るシミュレータ201の各通信部の構成を示している。
図に示されるように、コア通信部12は、上記前提例と同様に、ブロッキングアクセスを行う高速モード処理部111とノンブロッキングアクセスを行う高精度モード処理部112とから構成されており、モード切替部51からの命令に従って、高速モード処理部111または高精度モード処理部112が動作する。
バス通信部22は、ブロッキングアクセス処理部211とノンブロッキングアクセス処理部212に加えて、モード切替部51からの命令に従って高精度モードから高速モードに切り替えを行う高速/高精度モード切替部213、高精度モードから高速モードに切り替わった場合に、既に受け付けているノンブロッキングアクセスを優先的に実行する高速モード時ノンブロッキングアクセス処理部214を備えている。また、コア部1からノンブロッキングアクセス要求により受け付けたトランザクションをトランザクション完了まで保持するトランザクション保持部215も備えている。トランザクション保持部215にはアービトレーションに負けたトランザクション等が保持される。
メモリ通信部32は、ブロッキングアクセス処理部311とノンブロッキングアクセス処理部312に加えて、モード切替部51からの命令に従って高精度モードから高速モードに切り替えを行う高速/高精度モード切替部313、高精度モードから高速モードに切り替わった場合に、既に受け付けているノンブロッキングアクセスを優先的に実行する高速モード時ノンブロッキングアクセス処理部314を備えている。また、バス部2からノンブロッキングアクセス要求により受け付けたトランザクションをトランザクション完了まで保持するトランザクション保持部315も備えている。トランザクション保持部315にはアービトレーションに負けたトランザクション等が保持される。
図12は、本発明の実施の形態1に係るシミュレータ201のコア通信部12のトランザクション処理を示している。
このコアメモリアクセス処理(S100)は、図4の前提例と同様であり、シミュレーションモードが高速モードであれば(S101のY)、高速モード処理部111にて、バス部2に対しブロッキングアクセス処理(図13のS200)が実行され(S102)、バス部2から受けたメモリ及びバスのレーテンシ時間が計上されて(S103)、ブロッキングアクセスのトランザクションが終了する(S107)。
また、シミュレーションモードが高精度モードであれば(S101のN)、高精度モード処理部112にて、バス部2に対しノンブロッキングアクセス処理(図13のS210)が実行され(S104)、バス部2から完了通知の受信を待った後、完了通知を受信して(S105、S106)、ノンブロッキングアクセスのトランザクションが終了する(S107)。
図13は、本発明の実施の形態1に係るシミュレータ201のバス通信部22のトランザクション処理を示している。
バス通信部22では、ブロッキングアクセス処理部211が、ブロッキングアクセス処理(S200)を実行し、ノンブロッキングアクセス処理部212が、ノンブロッキングアクセス処理(S210)、アービトレーション処理(S220)、完了通知処理(S230)を実行する。
さらに、図10のモード切替部51からのモード切替命令が高速/高精度モード切替部213の切替と、高速モード時ノンブロッキングアクセス処理(S240)の起動を行い、高速モード時ノンブロッキングアクセス処理部214が、高速モード時ノンブロッキングアクセス処理(S240)の実行と、完了通知処理(S230)における高速モード時の完了通知を行う。
ブロッキングアクセス処理(S200)は、図5の前提例と同様であり、ブロッキングアクセス処理部211にて、メモリ部3に対しブロッキングアクセス処理(図14のS300)が実行され(S201)、レーテンシ時間を含めてコア部1へ完了通知を行い(S202)、バス部2におけるブロッキングアクセスのトランザクションが終了する(S203)。
ノンブロッキングアクセス処理(S210)及びアービトレーション処理(S220)も、図5の前提例と同様である。ノンブロッキングアクセス処理(S210)では、ノンブロッキングアクセス処理部212にて、所定時間経過後にアービトレーション処理を起動し(S211)、コア部1に対し、アクセス受信をAckの返信により通知する(S212)。アービトレーション処理(S220)では、アービトレーション部20にて所定時間経過後にアービトレーションが実施され(S221)、調停に勝ったトランザクションについて、ノンブロッキングアクセス処理部212にて、メモリ部3に対しノンブロッキングアクセス処理(図14のS310)を実行する(S222)。
また、メモリ部3からノンブロッキングの完了通知により完了通知処理が開始すると(S230)、ここでは、シミュレーションモードが切り替わっている可能性があるため、高速/高精度モード切替部213により、シミュレーションモードが高速モードであるかどうか判定される(S233)。
S233において、シミュレーションモードが高速モードではなく高精度モードの場合、シミュレーションモードが変更されていないため、図5と同様に、ノンブロッキングアクセス処理部212にて、コア部1へ完了通知を行い(S231)、処理が終了する(S232)。
S233において、シミュレーションモードが高速モードである場合、高速モード時ノンブロッキングアクセス処理部214にて、レーテンシ時間を含めてコア部1へ完了通知を行い(S234)、処理が終了する(S232)。すなわち、ノンブロッキングの完了通知であっても、高速モードの場合には、メモリから完了通知によって得られるレーテンシ時間に、バスで消費されるべきレーテンシ時間を加算した時間を、完了通知により伝達する。これにより、バス部2におけるノンブロッキングアクセスのトランザクションが終了する(S232)。
また、高速モード時ノンブロッキングアクセス処理部214では、高速モード時ノンブロッキングアクセス処理が開始される(S240)。この処理は、図10のモード切替部51からのモード切替命令により起動する。
次いで、メモリ部3からノンブロッキングアクセスの完了待ちの状態であるかどうか判定する(S241)。例えば、トランザクション保持部215を参照し、完了待ち中のトランザクションがあるかどうか確認する。
S241において、完了待ちの場合、ノンブロッキングアクセスが完了するまで待つために、再度、本処理(S240)を再起動する(S245)。すなわち、イベント要求により、高速モード時ノンブロッキングアクセス処理(S240)が再起動される。
S241において、完了待ちではない場合、メモリ部3へ未送信のトランザクションがあるかどうか判定する(S242)。すなわち、すでにコア部1からノンブロッキングアクセス要求を受け付け、メモリ部3へノンブロッキングアクセス要求を送信する前の受付済トランザクションの有無を、例えば、トランザクション保持部215を参照し確認する。
S242において、未送信のトランザクションが無い場合、処理を終了し(S246)、S242において、未送信のトランザクションが有る場合、すぐにアービトレーションを実施する(S243)。すなわち、ノンブロッキングアクセス処理(S210)では、所定時間後にアービトレーションを行うが、高速モード時の場合には、所定時間待たずにアービトレーションを行う。そして、アービトレーション後、メモリ部3に対しノンブロッキングアクセス処理(図14のS310)を実行する。さらに、本処理(S240)を再起動し(S245)、未送信のトランザクションが無くなるまで繰り返す。
つまり、本実施形態では、バス部2は、アービトレーションに勝つ必要はあるものの、少なくとも、高精度モードから高速モードに切り替えられたタイミングで、受付済である未送信のトランザクションについて、メモリ部3へアクセスを要求する。また、完了待ちのトランザクションが存在する場合には、完了通知を受けたタイミングで、未送信のトランザクションについて、メモリ部3へアクセスを要求する。
図14は、本発明の実施の形態1に係るシミュレータ201のメモリ通信部32のトランザクション処理を示している。
メモリ通信部32では、ブロッキングアクセス処理部311が、ブロッキングアクセス処理(S300)を実行し、ノンブロッキングアクセス処理部312が、ノンブロッキングアクセス処理(S310)、完了通知処理(S320)を実行する。
さらに、図10のモード切替部51からのモード切替命令が高速/高精度モード切替部213の切替と、高速モード時ノンブロッキングアクセス処理(S330)の起動を行い、高速モード時ノンブロッキングアクセス処理部314が、高速モード時ノンブロッキングアクセス処理(S330)の実行と、ノンブロッキングアクセス処理(S310)及び完了通知処理(S320)における高速モード時の完了通知を行う。
ブロッキングアクセス処理(S300)は、図6の前提例と同様であり、ブロッキングアクセス処理部311にて、メモリで消費されるべきレーテンシ時間を含めてバス部2へ完了通知が行われ(S301)、メモリ部3におけるブロッキングアクセスのトランザクションが終了する(S302)。
また、バス部2からの要求によりノンブロッキングアクセス処理が開始される(S310)と、ここでは、シミュレーションモードが切り替わっている可能性があるため、高速/高精度モード切替部313により、シミュレーションモードが高速モードであるかどうか判定される(S313)。
S313において、シミュレーションモードが高速モードではなく高精度モードの場合、シミュレーションモードが変更されていないため、図6と同様に、ノンブロッキングアクセス処理部312にて、レーテンシ時間経過後に完了通知処理(S320)を起動し(S311)、バス部2に対しアクセス受け付けをAckの返信により通知する(S312)。
S313において、シミュレーションモードが高速モードである場合、直ちに完了通知処理を起動する(S314)。すなわち、レーテンシ時間を待たずに、イベント要求により完了通知処理(S320)が起動される。
S311またはS314,S333にて起動されることにより完了通知処理が開始されると(S320)、高速/高精度モード切替部313により、シミュレーションモードが高速モードであるかどうか判定される(S323)。
S323において、シミュレーションモードが高速モードではなく高精度モードの場合、図6と同様に、ノンブロッキングアクセス処理部312にて、バス部2に対し完了通知処理を(図13のS230)を実行し(S321)、処理が終了する(S322)。
S323において、シミュレーションモードが高速モードである場合、高速モード時ノンブロッキングアクセス処理部314にて、バス部2に対し完了通知処理を(図13のS230)を実行する(S324)。このとき、レーテンシ時間の経過を待たずに完了通知を行うため、メモリで消費されるべきレーテンシ時間も伝達する。これにより、メモリ部3におけるノンブロッキングアクセスのトランザクションが終了する(S322)。
また、高速モード時ノンブロッキングアクセス処理部314では、高速モード時ノンブロッキングアクセス処理が開始される(S330)。この処理は、図10のモード切替部51からのモード切替命令により起動する。
次いで、処理中のトランザクションがあるかどうか判定する(S331)。すなわち、すでにバス部2からノンブロッキングアクセス要求を受け付け、完了通知を送信する前の受付済トランザクションの有無を、例えば、トランザクション保持部315を参照し確認する。
S331において、処理中のトランザクションが無い場合、処理を終了し(S334)、S331において、処理中のトランザクションが有る場合、レーテンシ処理を中止する(S332)。すなわち、S311にて発行されている、レーテンシ時間経過後に完了通知処理を起動するイベント要求を取り消す。
そして、直ちに完了通知処理を起動する(S333)。すなわち、レーテンシ時間の経過を待たずに、イベント要求により完了通知処理(S320)が起動され、バス部2へレーテンシ時間を含む完了通知が通知される。
つまり、本実施形態では、メモリ部3は、高精度モードから高速モードに切り替えられたタイミングで、受付済トランザクションについて、レーテンシ時間経過を待たずに処理を中断して、バス部2へ完了を通知する。また、バス部2から、受付済トランザクションの要求を受けた場合も、レーテンシ時間経過を待たずに、完了を通知する。レーテンシ時間経過を待たずに完了を通知する場合、レーテンシ時間を含めて完了を通知し、すでにレーテンシ時間が消費されている場合には、すでに消費された時間を差し引いた残りの時間を通知する。
図15は、本発明の実施の形態1に係るシミュレータ200のコーディング例を示している。図15を用いて、図12〜図14で示した、高精度モードにおけるノンブロッキングアクセスのトランザクションの流れ、高精度モードから高速モードに切り替えられた場合のトランザクションの流れを説明する。なお、高速モードにおけるブロッキングアクセスの動作は、図7の前提例と同様であるため、説明を省略する。
符号420はコア部1におけるプロセス関数であるprocess()、符号421はコア部1におけるノンブロッキングバックワード関数であるnb_transport_bw()、符号422はバス部2におけるノンブロッキングフォワード関数であるnb_transport_fw()、符号423はバス部2におけるアービトレーション関数であるarb()のコーディング例であり、符号424はバス部2におけるノンブロッキングバックワード関数であるnb_transport_bw()、符号425はバス部2におけるモード切替関数であるchange()、符号426はメモリ部3におけるノンブロッキングフォワード関数であるnb_transport_fw()、符号427はメモリ部3におけるプロセス関数であるprocess()、符号428はメモリ部3におけるモード切替関数であるchange()についての各コーディング例である。
まず、高精度モードの場合の動作について説明する。高精度モードの場合、コア部1のprocess()において、メモリアクセスが発生すると、バス部2にノンブロッキングアクセス要求するためバス部2のnb_transport_fw()を関数コールする(C21)。
そうすると、バス部2のnb_transport_fw()では、arb()によりアービトレーションを行うためarb_event.notify()によりイベント要求し(C22)、コア部1に関数リターンして、アクセスを受け付けたことを通知する(C23)。コア部1のprocess()では、バス部2のnb_transport_fw()が関数リターンすると、完了通知を待つためにwait()を関数コールする(C24)。
バス部2のC22で、arb()のイベントが要求されたため、所定時間経過後、アービトレーションが行われ、調停に勝ったトランザクションについて、メモリ部3にノンブロッキングアクセス要求するためメモリ部3のnb_transport_fw()を関数コールする(C25)。
そうすると、メモリ部3のnb_transport_fw()では、メモリに記憶されたデータを、nb_transport_fw()の引数pに設定し(C26)、シミュレーションモードが高速モードであるか判定し(C27)、ここでは、高精度モードであるため、process()によりレーテンシ時間経過後に完了通知を行うようにprocess_event.notify()によりイベント要求し(C28)、バス部2に関数リターンして、アクセスを受け付けたことを通知する(C29)。これにより、ノンブロッキングアクセスについて、トランザクションの開始フェーズが終了する。
メモリ部3のC28で、process()のイベントが要求されたため、レーテンシ時間α経過後process()が起動される。メモリ部3のprocess()では、シミュレーションモードが高速モードであるか判定し(C30)、ここでは高精度モードであるため、レーテンシ時間は設定せずノンブロッキング完了通知を通知するため、バス部2のnb_transport_bw()を関数コールする(C32)。
そうすると、バス部2のnb_transport_bw()では、シミュレーションモードが高速モードであるか判定し(S33)、ここでは、高精度モードであり、コア部1にノンブロッキング完了通知を通知するため、コア部1のnb_transport_bw()を関数コールする(C34)。
さらに、コア部1のnb_transport_bw()では、シミュレーションモードが高速モードであるか判定し(C35)、ここでは、高精度モードであり、完了通知を受けた状態に遷移するため、変数completeをnotifyし(C36)、バス部2に関数リターンして、完了通知を受け付けたことを通知する(C37)。バス部2のnb_transport_bw()では、コア部1のnb_transport_bw()が関数リターンすると、さらに、メモリ部3に関数リターンして、完了通知を受け付けたことを通知する(C38)。
また、コア部1のprocess()では、wait()により完了通知を待っている状態で(C24)、完了通知の受信によりcompleteがnotifyされたため、wait()による受信待ちが終了する。これにより、ノンブロッキングアクセスについて、トランザクションの終了フェーズが終わり、トランザクションが完了する。
次に、高精度モードのトランザクション処理中に高速モードに切り替わった場合の動作について説明する。
メモリ部3では、高精度モードから高速モードに切り替わるとchange()が起動する。ここでは、処理中の受付済トランザクションが存在するとして、処理中のトランザクションのイベントをprocess_event.cancel()によりキャンセルし(C40)、process()によりすぐに完了通知を行うためprocess_event.notify()によりイベント要求する(C41)。例えば、レーテンシの残り時間αをprocess()の引数に設定する。なお、実際には処理中のトランザクションの有無を判定する必要があるが(図14のS331)、ここでは省略する。
これにより、直ちにprocess()が起動される。メモリ部3のprocess()では、シミュレーションモードが高速モードであるか判定され(C30)、ここでは高速モードであるため、レーテンシ時間tに引数t1を設定する(C42)。そして、ノンブロッキング完了通知を通知するため、バス部2のnb_transport_bw()を関数コールする(C32)。
そうすると、バス部2のnb_transport_bw()では、シミュレーションモードが高速モードであるか判定され(C33)、ここでは高速モードであるため、引数tのメモリのレーテンシ時間にバスのレーテンシ時間βを加算して(C43)、コア部1にノンブロッキング完了通知を通知するため、コア部1のnb_transport_bw()を関数コールする(C34)。
さらに、コア部1のnb_transport_bw()では、シミュレーションモードが高速モードであるか判定し(C35)、ここでは、高速モードであるため、メモリアクセスのレーテンシ時間を設定し(C44)、完了通知を受けた状態に遷移するため、変数completeをnotifyし(C36)、バス部2に関数リターンして、完了通知を受け付けたことを通知する(C37)。バス部2のnb_transport_bw()では、コア部1のnb_transport_bw()が関数リターンすると、さらに、メモリ部3に関数リターンして、完了通知を受け付けたことを通知する(C38)。
また、コア部1のprocess()では、wait()により完了通知を待っている状態で(C24)、完了通知の受信によりcompleteがnotifyされたため、wait()による受信待ちが終了する。これにより、高速モードに切り替えた場合に、すでに受け付け済みのノンブロッキングアクセスについて、トランザクションの終了フェーズが終わり、トランザクションが完了する。
この場合、レーテンシ時間を計上するため、コア部1のprocess()では、レーテンシ時間tを判定し(C45)、シミュレーション時間との同期が必要であれば、wait()を関数コールして時間を進め、シミュレーション時間と同期させる(C46)。
一方、バス部2でも、高精度モードから高速モードに切り替わると、change()が起動する。ここでは、完了待ちは無く未送信のトランザクションが存在するとして、受け付け済みで未送信のトランザクションについて、メモリ部3にノンブロッキングアクセス要求するためメモリ部3のnb_transport_fw()を関数コールする(C50)。なお、実際には完了待ちのトランザクションの有無の判定、未送信トランザクションの有無の判定、アービトレーションが必要であるが(図13のS241〜S243)、ここでは省略する。
そうすると、メモリ部3のnb_transport_fw()では、メモリに記憶されたデータを、nb_transport_fw()の引数pに設定し(C26)、シミュレーションモードが高速モードであるか判定し(C27)、ここでは、高速モードであるため、process()によりすぐに完了通知を行うためprocess_event.notify()によりイベント要求し(C51)、バス部2に関数リターンして、アクセスを受け付けたことを通知する(C29)。ここでは、メモリで消費すべきレーテンシ時間αをprocess()の引数に設定する。その後、上記と同様に、メモリ部3のprocess()、バス部2のnb_transport_bw()、コア部1のnb_transport_bw()により、高速モード時のノンブロッキング完了通知が通知される。
次に、図16を用いて、本発明の実施の形態1に係るシミュレータ201において、メモリアクセス実施中に高精度モードから高速モードへの切り替えが発生した場合の動作について説明する。
シミュレーション時間t20において、コア部1bが、バス部2bに対しノンブロッキングアクセスを要求すると(501)、バス部2bは、アービトレーション後のt21において、メモリ部3aに対しノンブロッキングアクセスを要求する(502)。
次いで、t22において、コア部1cが、バス部2bに対しノンブロッキングアクセスを要求すると(503)、バス部2bは、コア部1bのアクセスによるメモリ部3aからの完了待ちであるため、メモリ部3aへのアクセスが保留される(503)。
メモリ部3aからの完了通知を待っている状態であるt23において、高精度モードから高速モードに切り替えが発生する(504)。このとき、コア部1a〜コア部1c、バス部2a〜2b、メモリ部3a〜3bに高速モードへの切り替えが通知され、この後に発生するトランザクションがブロッキングアクセスに切り替わる。
本実施形態では、高精度モードから高速モードに切り替わった際に、メモリ及びバスにおいて受け付け済みのトランザクションを優先的に実行する。特に、コアがトランザクションの要求可能となる前、すなわち、シミュレーション時間が進む前に(図16のt23のうちに)、受け付け済みのトランザクションを完了させる。
t23において、高精度モードから高速モードに切り替わると、メモリ部3aでは、この切替により高速モード時ノンブロッキングアクセス処理が起動され(図16(a))、処理中の受付済トランザクションであるコア部1bからのアクセス要求に対し、レーテンシ時間経過を待たず、すぐにバス部2bにノンブロッキング完了を通知し(520)、バス部2bは、コア部1bにノンブロッキング完了を通知する(521)。
また、バス部2bでは、t23の切り替えにより高速モード時ノンブロッキングアクセス処理が起動され(図16(b))、完了待ちであるコア部1bのアクセス完了を待ち、コア部1bのアクセス終了後(図16(c))、保留しておいたコア部1cのアクセスを開始し、すぐにメモリ部3aにノンブロッキングアクセスを要求する(522)。メモリ部3aは、レーテンシ時間経過を待たず、すぐにバス部2bにノンブロッキング完了を通知し(523)、バス部2bは、コア部1cにノンブロッキング完了を通知する(524)。このときに、切り替え前に受け付けたノンブロッキングアクセスの受付済トランザクションが完了する。
シミュレーションモードの切り替え前に受け付けた受付済トランザクションの処理が全て終了したため、シミュレータ時間が進み始める。例えば、シミュレーションカーネル部4は、コア部1、バス部2、メモリ部3の全てのプロセスにおいて、wait()が発生した場合に、シミュレーション時間を進めるように制御するものとする。本実施形態では、シミュレーションモードの切り替え時、受付済トランザクションの処理が全て終了した後に、wait()を発行することで、受付済トランザクションの処理終了後に、シミュレーション時間が進むようにする。
シミュレーションモード切り替え後のt24において、コア部1aが、バス部2aに対しブロッキングアクセスを要求すると(525)、バス部2aは、メモリ部3aに対しブロッキングアクセスを要求し(527)、バス部2aに関数リターンにより完了が通知され(528)、さらに、コア部1aに関数リターンにより完了が通知される(526)。このときに、シミュレーションモードの切り替え後に発生したブロッキングアクセスの切替後トランザクションが完了する。
このように、本実施形態では、高精度モードから高速モードへ切り替えが発生した場合、全てのバス、メモリは切り替えによって起動される高速モード時ノンブロッキングアクセス処理により、シミュレーション時刻を進めることなく切り替え前に受信した受付済トランザクションを完了させる。メモリは、受付済みで処理中のトランザクションについて処理を中断しレーテンシ時間を待たずにトランザクションを完了させ、バスは、受付済みでメモリへ要求する前のトランザクションについて所定時間待たずにメモリへ要求することでトランザクションを完了させる。
したがって、図16(2)の受付済トランザクション完了後、図16(1)の切替後トランザクションを実施するため、データ通信の順序が、アクセス要求の順序通りとなる。このため、トランザクションの順序が逆転することはなく、メモリのデータや処理結果も保証されることから、誤動作を防ぐことができる。
すなわち、本実施形態では、シミュレーションモードを高精度モードまたは高速モードに切り替えることができるため、シミュレーションの高精度化及び高速化が可能であるとともに、さらに、シミュレーションモードを高精度モードから高速モードに切り替えた場合、受付済トランザクションをレーテンシ時間経過を待たずに切替後トランザクションよりも先に完了させるため、シミュレーションの誤動作を防止することができる。
本発明の実施の形態2
以下、図17〜図22を用いて、本発明の実施の形態2に係るシミュレータについて説明する。なお、これらの図では、主に、上記前提例と同様の構成・動作について同じ符号が付されており、同様の構成・動作については説明を適宜省略する。
図17は、本発明の実施の形態2における、シミュレータの機能構成を示すブロック図である。このシミュレータ202は、上記前提例と同様に、コンピュータシステム100上でシミュレーションプログラムが実行されて実現される。
図に示されるように、このシミュレータ202は、システムLSI部40とシミュレーション制御部50とを備えており、システムLSI部40は、コア部1a〜1c、バス部2a〜2b、メモリ部3a〜3bを備えている。コア部1aは、バス部2aを介して、メモリ部3a及び3bにアクセスし、コア部1b及び1cは、バス部2bを介して、メモリ部3a及び3bにアクセスする。
コア部1は、コア機能部10とコア通信部13とを備えており、バス部2は、アービトレーション部20とバス通信部23とを備えており、メモリ部3は、メモリ機能部30とメモリ通信部33とを備えている。本実施形態では、バス通信部23及びメモリ通信部33は、高精度モードから高速モードに切り替えた場合に、既に受け付けている受付済トランザクションを、切り替え後に受け付ける切替後トランザクションよりも、優先的に実行する機能を有しており、特に、バス通信部23及びメモリ通信部33は、切り替え前に受け付けたノンブロッキングアクセスが処理中の場合、切り替え後のブロッキングアクセスを拒絶する。また、コア通信部13は、高速モードにおいてブロッキングアクセスが失敗した場合にアクセスをリトライする機能を有している。
シミュレーション制御部50は、シミュレーションカーネル部4とモード切替部5とを備えている。本実施形態では、モード切替部5は、上記前提例と同様に、コア部1a〜1cに対して、高精度モードまたは高速モードに切り替えるモード切替命令を出力する。
図18は、本発明の実施の形態2に係るシミュレータ202の各通信部の構成を示している。
図に示されるように、コア通信部13は、ブロッキングアクセスを行う高速モード処理部111とノンブロッキングアクセスを行う高精度モード処理部112とに加えて、ブロッキングアクセスが失敗した場合にアクセスをリトライするブロッキングアクセスリトライ処理部113を備えている。
バス通信部23は、ブロッキングアクセス処理部211とノンブロッキングアクセス処理部212に加えて、ノンブロッキングアクセス処理中の場合にコア部1からのブロッキングアクセスを拒絶するブロッキングアクセス拒絶部216を備えている。また、ブロッキングアクセス拒絶部216は、ノンブロッキングアクセス処理中の場合にブロッキングアクセスを拒絶することで、高精度モードから高速モードに切り替わった場合に、既に受け付けているノンブロッキングアクセスを優先的に実行するものである。
メモリ通信部33は、ブロッキングアクセス処理部311とノンブロッキングアクセス処理部312に加えて、ノンブロッキングアクセス処理中の場合にバス部2からのブロッキングアクセスを拒絶するブロッキングアクセス拒絶部316を備えている。また、ブロッキングアクセス拒絶部316は、ノンブロッキングアクセス処理中の場合にブロッキングアクセスを拒絶することで、高精度モードから高速モードに切り替わった場合に、既に受け付けているノンブロッキングアクセスを優先的に実行するものである。
図19は、本発明の実施の形態2に係るシミュレータ202のコア通信部13のトランザクション処理を示している。なお、高精度モード時の動作は、図4の前提例と同様であるため説明を省略する。
このコアメモリアクセス処理(S100)は、シミュレーションモードが高速モードであれば(S101のY)、高速モード処理部111にて、バス部2に対しブロッキングアクセス処理(図20のS200)が実行される(S102)。
次いで、ブロッキングアクセスリトライ処理部113にて、ブロッキングアクセスが拒絶されたかどうか判定される(S108)。すなわち、ブロッキングアクセスに対しバス部2から拒絶通知を受信したかどうか判定する。
S108において、アクセスが拒絶された場合、ブロッキングアクセスリトライ処理部113にて、一定時間待った後(S109)、バス部2へブロッキングアクセスを再度行う(S102)。
ブロッキングアクセスが正常に終了するまでリトライを繰り返し、S108において、アクセスが拒絶されない場合に、バス部2から受けたメモリ及びバスのレーテンシ時間が計上されて(S103)、ブロッキングアクセスのトランザクションが終了する(S107)。
なお、ブロッキングアクセスが拒絶された場合に、コア部がリトライするまでのリトライ間隔は任意に設定可能である。リトライ間隔が短すぎると無駄なブロッキングアクセスを繰り返すことによりコンテキストスイッチングが増加し、シミュレーション速度が低下する。また、リトライ間隔が長すぎると、次のリトライを待っている間に、その他のマスタ(コア)から送信される後に発生するべきアクセスが先に受け付けられてしまう可能性があり、アクセス順序が逆転してしまう恐れがある。例えば、ノンブロッキングアクセスの平均的な待ち時間などを考慮してもよい。また、ブロッキング要求に対する拒絶通知の際に、リトライ時間を設定してもよい。例えば、メモリであれば残りのレーテンシ時間を通知したり、バスであれば送信待ちのトランザクションの数やレーテンシ時間を通知し、コアは、通知された時間経過後、ブロッキングアクセスをリトライすれば、アクセスが成功する可能性が高く、無駄なリトライを防げる。
図20は、本発明の実施の形態2に係るシミュレータ202のバス通信部23のトランザクション処理を示している。
ブロッキングアクセス処理(S200)では、ブロッキングアクセス拒絶部216にて、ノンブロッキングアクセス中であるかどうか判定する(S204)。例えば、ノンブロッキングアクセス処理の開始時に、ノンブロッキングアクセス中の状態を保持しておき、この状態により判定する。
S204において、ノンブロッキングアクセス中であると判定された場合、ブロッキングアクセス拒絶部216にて、コア部1へ拒絶通知を行う(S205)。すなわち、コア部1からのブロッキングアクセスの関数コールに対して、関数リターンにより拒絶を通知する。
S204において、ノンブロッキングアクセス中ではないと判定された場合、図5と同様に、ブロッキングアクセス処理部211にて、メモリ部3へブロッキングアクセス処理(図21のS300)が実行され(S201)、レーテンシ時間を含めてコア部1へ完了通知を行い(S202)、バス部2におけるブロッキングアクセスのトランザクションが終了する(S203)。
また、メモリ部3からブロッキングアクセスの拒絶通知を受けると、ブロッキングアクセス処理部211(もしくはブロッキングアクセス拒絶部216)にて拒絶通知処理が開始され(S250)、コア部1へ拒絶通知を行い(S251)、処理が終了する(S252)。
なお、ノンブロッキングアクセス処理(S210)、アービトレーション処理(S220)、完了通知処理(S230)については、図5の前提例と同様であり説明を省略する。
図21は、本発明の実施の形態2に係るシミュレータ202のメモリ通信部33のトランザクション処理を示している。
ブロッキングアクセス処理(S300)では、ブロッキングアクセス拒絶部316にて、ノンブロッキングアクセス中であるかどうか判定する(S303)。例えば、ノンブロッキングアクセス処理の開始時に、ノンブロッキングアクセス中の状態を保持しておき、この状態により判定する。
S303において、ノンブロッキングアクセス中であると判定された場合、ブロッキングアクセス拒絶部316にて、バス部2へ拒絶通知を行う(S304)。すなわち、バス部2からのブロッキングアクセスの関数コールに対して、関数リターンにより拒絶を通知する。
S303において、ノンブロッキングアクセス中ではないと判定された場合、図6と同様に、ブロッキングアクセス処理部311にて、メモリで消費されるべきレーテンシ時間を含めてバス部2へ完了通知が行われ(S301)、メモリ部3におけるブロッキングアクセスのトランザクションが終了する(S302)。
なお、ノンブロッキングアクセス処理(S310)、完了通知処理(S320)については、図6の前提例と同様であり説明を省略する。
次に、図22を用いて、本発明の実施の形態2に係るシミュレータ202において、メモリアクセス実施中に高精度モードから高速モードへの切り替えが発生した場合の動作について説明する。
シミュレーション時間t30において、コア部1bが、バス部2bに対しノンブロッキングアクセスを要求すると(501)、バス部2bは、アービトレーション後のt31において、メモリ部3aに対しノンブロッキングアクセスを要求する(502)。
次いで、t32において、コア部1cが、バス部2bに対しノンブロッキングアクセスを要求すると(503)、バス部2bは、コア部1bのアクセスによるメモリ部3aからの完了待ちであるため、メモリ部3aへのアクセスが保留される(503)。
メモリ部3aからの完了通知を待っている状態であるt33において、高精度モードから高速モードに切り替えが発生する(504)。このとき、コア部1a〜コア部1cに高速モードへの切り替えが通知され、この後に発生するトランザクションがブロッキングアクセスに切り替わる。
次いで、t34において、コア部1aが、メモリ部3bへアクセスするため、バス部2aに対しブロッキングアクセスを要求すると(530)、バス部2aは、ノンブロッキングアクセス処理中ではないため、メモリ部3bに対しブロッキングアクセスを要求し(532)、メモリ部3bは、ノンブロッキングアクセス処理中ではないため、バス部2aに関数リターンにより完了が通知され(533)、さらに、コア部1aに関数リターンにより完了が通知される(531)。
t35において、コア部1aが、メモリ部3aへアクセスするため、バス部2aに対しブロッキングアクセスを要求すると(534)、バス部2aは、ノンブロッキングアクセス処理中ではないため、メモリ部3aに対しブロッキングアクセスを要求し(536)、メモリ部3aは、t31で受け付けたアクセスのレーテンシ時間経過待ちであり、ノンブロッキングアクセス処理中のため、バス部2aに関数リターンにより拒絶が通知され(537)、さらに、コア部1aに関数リターンにより拒絶が通知される(535)。なお、仮に、コア部1aとバス部2bが接続されているとして、t35で、コア部1aがバス部2bへブロッキングアクセス要求すると、バス部2bは、ノンブロッキングアクセス処理中のため、コア部1aのアクセスを拒絶する。
その後、t36において、t31からレーテンシ時間が経過したため、メモリ部3aは、コア部1bのアクセス要求に対しバス部2bへノンブロッキング完了を通知し(538)、バス部2bは、コア部1bにノンブロッキング完了を通知する(539)。
さらに、t37において、バス部2bは、コア部1bのアクセスが終了したため、保留しておいたコア部1cのアクセスを開始し、アービトレーション後のt37において、メモリ部3aにノンブロッキングアクセスを要求する(540)。
次いで、t38において、t37からレーテンシ時間が経過したため、メモリ部3aは、バス部2bにノンブロッキング完了を通知し(541)、バス部2bは、コア部1cにノンブロッキング完了を通知する(542)。
t39において、ブロッキングアクセスが拒絶されたt35から一定時間経過すると、コア部1aが、メモリ部3aへ再度アクセスするため、バス部2aに対しブロッキングアクセスを要求すると(543)、バス部2aは、ノンブロッキングアクセス処理中ではないため、メモリ部3aに対しブロッキングアクセスを要求し(545)、メモリ部3aは、ノンブロッキングアクセス処理中ではないため、バス部2aに関数リターンにより完了が通知され(546)、さらに、コア部1aに関数リターンにより完了が通知される(544)。
このように、本実施形態では、高精度から高速モードへ切り替えが発生した場合、受付済トランザクションについて、ノンブロッキングアクセス処理中のバス及びメモリは、コアからのブロッキングアクセスを拒絶するため、処理中のノンブロッキングアクセスよりも、先にブロッキングアクセスが完了することはない。さらに、コアは、ブロッキングアクセスが拒絶されると、ブロッキングアクセスをリトライする。
したがって、図22(2)の受付済トランザクション完了後、図22(1)の切替後トランザクションを実施するため、データ通信の順序が、アクセス要求の順序通りとなる。このため、トランザクションの順序が逆転することはなく、メモリのデータや処理結果も保証されることから、誤動作を防ぐことができる。
すなわち、本実施形態では、シミュレーションモードを高精度モードまたは高速モードに切り替えることができるため、シミュレーションの高精度化及び高速化が可能であるとともに、さらに、シミュレーションモードを高精度モードから高速モードに切り替えた場合、受付済トランザクション処理中は切替後トランザクションを拒絶し、受付済トランザクションを切替後トランザクションよりも先に完了させるため、シミュレーションの誤動作を防止することができる。
なお、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。上記の例では、コアとメモリとをバスにより接続する構成について説明したが、マスターブロックとスレーブブロックの関係となっていればよい。例えば、コアの代わりにDMA(Direct Memory Access)でもよいし、メモリの代わりにレジスタを有する他の機能ブロックでもよい。また、コアとメモリ間を、複数段に階層接続されたバスを介して接続してもよい。上記の例でバスは、コアからメモリへの送信に対してアービトレーションを行っているが、メモリからコアへの送信に対してアービトレーションを行ってもよい。また、マスターブロックとスレーブブロックとがバス等を介さずに直接接続されてもよい。
また、上記の例では、ノンブロッキングアクセスを2つの通信フェーズのトランザクションとして説明したが、その他の複数の通信フェーズを有していてもよい。例えば、トランザクション開始を通知するフェーズ、トランザクション開始の受け付けを通知するフェーズ、トランザクション終了を通知するフェーズ、トランザクション終了の受け付けを通知するフェーズの4つのフェーズを有していてもよい。例えば、シミュレーションモードの切り替え時には、受付済トランザクションについて、全てのフェーズではなく、フェーズを省略することで、少ないフェーズですぐにトランザクションが終了するようにしてもよい。また、ノンブロッキングアクセスの受付済トランザクションについて、ブロッキングアクセスによりアクセス要求や完了通知を行うことで、すぐにトランザクションが終了するようにしてもよい。
また、上記の例では、高精度モードと高速モードの切り替えの例として、図23に示したような高精度なノンブロッキングアクセス(高精度モード)と図24に示したような高速なブロッキングアクセス(高速モード)との切り替えについて説明したが、これに限らず、図25に示したような高精度なブロッキングアクセス(これも高精度モードに含まれる)と図24に示したような高速なブロッキングアクセス(高速モード)との切り替えについても、上記の例と同様に本発明を適用することが可能である。
すなわち、図25の高精度なブロッキングアクセスでもターゲットにおいてwait()を関数コールしている間、シミュレーションカーネルの割り込みが生じる。このため、ノンブロッキングアクセスと同様、図9のようにアクセス完了の順序に影響を及ぼす可能性がある。したがって、図25の高精度なブロッキングアクセスから図24の高速なブロッキングアクセスに切り替える際に、実施の形態1のように受付済トランザクションを先に完了させるようにしたり、実施の形態2のように切替後トランザクションを拒絶することで、シミュレーションの誤動作を防止することができる。
1,1a,1b,1c コア部
2,2a,2b バス部
3,3a,3b メモリ部
4 シミュレーションカーネル部
5,51 モード切替部
10 コア機能部
11,12,13 コア通信部
20 アービトレーション部
21,22,23 バス通信部
30 メモリ機能部
31,32,33 メモリ通信部
40 システムLSI部
50 シミュレーション制御部
100 コンピュータシステム
101 本体部
102 CPU
103 メインメモリ
104 ハードディスク
105 表示装置
106 キーボード
107 マウス
108 シミュレーションプログラム
109 各種データ
111 高速モード処理部
112 高精度モード処理部
113 ブロッキングアクセスリトライ処理部
200,201,202 シミュレータ
211 ブロッキングアクセス処理部
212 ノンブロッキングアクセス処理部
213 高速/高精度モード切替部
214 高速モード時ノンブロッキングアクセス処理部
215 トランザクション保持部
216 ブロッキングアクセス拒絶部
311 ブロッキングアクセス処理部
312 ノンブロッキングアクセス処理部
313 高速/高精度モード切替部
314 高速モード時ノンブロッキングアクセス処理部
315 トランザクション保持部
316 ブロッキングアクセス拒絶部

Claims (24)

  1. マスターブロックと、前記マスターブロックと通信を行うスレーブブロックと、を有する半導体集積回路のシミュレーション方法であって、
    前記マスターブロックと前記スレーブブロック間のトランザクションを、前記スレーブブロック側でシミュレーション時間を消費することによりシミュレーションする高精度モード、あるいは、前記マスターブロックと前記スレーブブロック間のトランザクションを、前記マスターブロック側でシミュレーション時間を消費することによりシミュレーションする高速モード、のいずれかのシミュレーションモードに切り替え、
    前記スレーブブロックは、前記シミュレーションモードが前記高精度モードから前記高速モードに切り替えられた場合、すでに前記高精度モードで前記マスターブロックから受け付けている受付済トランザクションを、当該切り替え後に前記高速モードで前記マスターブロックから受け付ける切替後トランザクションよりも優先的に実行する、
    シミュレーション方法。
  2. 前記受付済トランザクションの優先的な実行では、前記マスターブロックが前記切替後トランザクションを要求可能となる前に、前記受付済トランザクションを完了させる、請求項1に記載のシミュレーション方法。
  3. 前記受付済トランザクションの優先的な実行では、前記シミュレーションモードが切り替えられた時刻からシミュレーション時間が進む前に、前記受付済トランザクションを完了させる、請求項2に記載のシミュレーション方法。
  4. 前記受付済トランザクションの優先的な実行では、前記スレーブブロックは、前記シミュレーションモードが切り替えられたタイミングで、前記受付済トランザクションの処理を中断し、前記マスターブロックへ前記受付済トランザクションの完了を通知する、請求項2または3に記載のシミュレーション方法。
  5. 前記受付済トランザクションの優先的な実行では、前記スレーブブロックは、前記シミュレーションモードが切り替えられたタイミングで、当該スレーブブロックとは別の他のスレーブブロックに対し、前記受付済トランザクションの要求を通知する、請求項2乃至4のいずれか一項に記載のシミュレーション方法。
  6. 前記受付済トランザクションの優先的な実行では、前記スレーブブロックは、当該スレーブブロックとは別の他のスレーブブロックから完了待ちのトランザクションが存在する場合、前記シミュレーションモードが切り替えられ、かつ、前記他のスレーブブロックからの完了通知を受けたタイミングで、前記他のスレーブブロックに対し、前記受付済トランザクションの要求を通知する、請求項5に記載のシミュレーション方法。
  7. 前記他のスレーブブロックは、前記受付済トランザクションの要求を受けたタイミングで、前記受付済トランザクションの要求を通知したスレーブブロックに対し、前記受付済トランザクションの完了を通知する、請求項5または6に記載のシミュレーション方法。
  8. 前記受付済トランザクションの優先的な実行では、
    前記スレーブブロックは、前記スレーブブロックにおいて前記受付済トランザクションにより消費すべきシミュレーション時間を前記マスターブロックに通知し、
    前記マスターブロックは、前記通知されたシミュレーション時間を所定のタイミングで消費する、請求項2乃至7のいずれかに記載のシミュレーション方法。
  9. 前記通知されるシミュレーション時間は、前記受付済トランザクションの開始から終了までに消費すべき時間から、すでに消費された時間を差し引いた残りの時間である、請求項8に記載のシミュレーション方法。
  10. 前記受付済トランザクションの優先的な実行では、前記スレーブブロックは、前記受付済トランザクションが完了するまで、前記マスターブロックからの前記切替後トランザクションの要求を拒絶する、請求項1に記載のシミュレーション方法。
  11. 前記マスターブロックは、前記切替後トランザクションの要求が拒絶された場合、所定時間経過後に、前記スレーブブロックに対し前記切替後トランザクションを再度要求する、請求項10に記載のシミュレーション方法。
  12. マスターブロックと、前記マスターブロックと通信を行うスレーブブロックと、を有する半導体集積回路のシミュレーション装置であって、
    前記マスターブロックと前記スレーブブロック間のトランザクションを、前記スレーブブロック側でシミュレーション時間を消費することによりシミュレーションする高精度モード、あるいは、前記マスターブロックと前記スレーブブロック間のトランザクションを、前記マスターブロック側でシミュレーション時間を消費することによりシミュレーションする高速モード、のいずれかのシミュレーションモードに切り替るモード切替部と、
    前記スレーブブロックにおいて、前記シミュレーションモードが前記高精度モードから前記高速モードに切り替えられた場合、すでに前記高精度モードで前記マスターブロックから受け付けている受付済トランザクションを、当該切り替え後に前記高速モードで前記マスターブロックから受け付ける切替後トランザクションよりも優先的に実行するスレーブ通信部と、
    を備えるシミュレーション装置。
  13. 前記スレーブ通信部は、前記マスターブロックが前記切替後トランザクションを要求可能となる前に、前記受付済トランザクションを完了させる、請求項12に記載のシミュレーション装置。
  14. 前記スレーブ通信部は、前記シミュレーションモードが切り替えられた時刻からシミュレーション時間が進む前に、前記受付済トランザクションを完了させる、請求項13に記載のシミュレーション装置。
  15. 前記スレーブ通信部は、前記受付済トランザクションが完了するまで、前記マスターブロックからの前記切替後トランザクションの要求を拒絶する、請求項12記載のシミュレーション装置。
  16. 前記マスターブロックは、前記切替後トランザクションの要求が拒絶された場合、所定時間経過後に、前記スレーブブロックに対し前記切替後トランザクションを再度要求する、請求項15に記載のシミュレーション装置。
  17. マスターブロックと、前記マスターブロックと通信を行うスレーブブロックと、を有する半導体集積回路のシミュレーション処理をコンピュータに実行させるシミュレーションプログラムであって、前記シミュレーション処理は、
    前記マスターブロックと前記スレーブブロック間のトランザクションを、前記スレーブブロック側でシミュレーション時間を消費することによりシミュレーションする高精度モード、あるいは、前記マスターブロックと前記スレーブブロック間のトランザクションを、前記マスターブロック側でシミュレーション時間を消費することによりシミュレーションする高速モード、のいずれかのシミュレーションモードに切り替え、
    前記スレーブブロックは、前記シミュレーションモードが前記高精度モードから前記高速モードに切り替えられた場合、すでに前記高精度モードで前記マスターブロックから受け付けている受付済トランザクションを、当該切り替え後に前記高速モードで前記マスターブロックから受け付ける切替後トランザクションよりも優先的に実行する、
    シミュレーションプログラム。
  18. 前記受付済トランザクションの優先的な実行では、前記マスターブロックが前記切替後トランザクションを要求可能となる前に、前記受付済トランザクションを完了させる、請求項17に記載のシミュレーションプログラム。
  19. 前記受付済トランザクションの優先的な実行では、前記シミュレーションモードが切り替えられた時刻からシミュレーション時間が進む前に、前記受付済トランザクションを完了させる、請求項18に記載のシミュレーションプログラム。
  20. 前記受付済トランザクションの優先的な実行では、前記スレーブブロックは、前記受付済トランザクションが完了するまで、前記マスターブロックからの前記切替後トランザクションの要求を拒絶する、請求項17に記載のシミュレーションプログラム。
  21. 前記マスターブロックは、前記切替後トランザクションの要求が拒絶された場合、所定時間経過後に、前記スレーブブロックに対し前記切替後トランザクションを再度要求する、請求項20に記載のシミュレーションプログラム。
  22. マスターブロックと、前記マスターブロックとバスを介して接続するスレーブブロックと、を有する半導体集積回路のシミュレーション方法であって、
    前記マスターブロックと前記スレーブブロック間のトランザクションを、前記スレーブブロック側でシミュレーション時間を消費することによりシミュレーションする高精度モード、あるいは、前記マスターブロックと前記スレーブブロック間のトランザクションを、前記マスターブロック側でシミュレーション時間を消費することによりシミュレーションする高速モード、のいずれかのシミュレーションモードに切り替え、
    前記スレーブブロックまたは前記バスは、前記シミュレーションモードが前記高精度モードから前記高速モードに切り替えられた場合、すでに前記高精度モードで前記マスターブロックから受け付けている受付済トランザクションを、当該切り替え後に前記高速モードで前記マスターブロックから受け付ける切替後トランザクションよりも優先的に実行する、
    シミュレーション方法。
  23. 前記受付済トランザクションの優先的な実行では、前記スレーブブロックは、前記シミュレーションモードが切り替えられたタイミングで、前記受付済トランザクションの処理を中断し、前記マスターブロックへ前記受付済トランザクションの完了を通知する、請求項22に記載のシミュレーション方法。
  24. 前記受付済トランザクションの優先的な実行では、前記バスは、前記シミュレーションモードが切り替えられたタイミングで、前記スレーブブロックに対し、前記受付済トランザクションの要求を通知する、請求項22または23に記載のシミュレーション方法。
JP2012061434A 2012-03-19 2012-03-19 シミュレーション方法、シミュレーション装置及びシミュレーションプログラム Pending JP2013196245A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2012061434A JP2013196245A (ja) 2012-03-19 2012-03-19 シミュレーション方法、シミュレーション装置及びシミュレーションプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012061434A JP2013196245A (ja) 2012-03-19 2012-03-19 シミュレーション方法、シミュレーション装置及びシミュレーションプログラム

Publications (1)

Publication Number Publication Date
JP2013196245A true JP2013196245A (ja) 2013-09-30

Family

ID=49395147

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012061434A Pending JP2013196245A (ja) 2012-03-19 2012-03-19 シミュレーション方法、シミュレーション装置及びシミュレーションプログラム

Country Status (1)

Country Link
JP (1) JP2013196245A (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2017021743A (ja) * 2015-07-15 2017-01-26 三菱電機株式会社 シミュレーション装置及びシミュレーション方法及びシミュレーションプログラム
CN109446709A (zh) * 2018-11-12 2019-03-08 温州大学 一种减速机的摆线齿廓曲线仿真方法及系统
JP2020144765A (ja) * 2019-03-08 2020-09-10 富士通株式会社 記述変換方法、シミュレーション方法及び記述変換プログラム
EP3910521A1 (en) 2020-05-12 2021-11-17 Renesas Electronics Corporation Simulator and simulation method

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2017021743A (ja) * 2015-07-15 2017-01-26 三菱電機株式会社 シミュレーション装置及びシミュレーション方法及びシミュレーションプログラム
CN109446709A (zh) * 2018-11-12 2019-03-08 温州大学 一种减速机的摆线齿廓曲线仿真方法及系统
JP2020144765A (ja) * 2019-03-08 2020-09-10 富士通株式会社 記述変換方法、シミュレーション方法及び記述変換プログラム
JP7215244B2 (ja) 2019-03-08 2023-01-31 富士通株式会社 記述変換方法、シミュレーション方法及び記述変換プログラム
EP3910521A1 (en) 2020-05-12 2021-11-17 Renesas Electronics Corporation Simulator and simulation method
US11537769B2 (en) 2020-05-12 2022-12-27 Renesas Electronics Corporation Simulator and simulation method

Similar Documents

Publication Publication Date Title
JP5787629B2 (ja) マシンビジョン用マルチプロセッサシステムオンチップ
US7814243B2 (en) Shared storage for multi-threaded ordered queues in an interconnect
US9009711B2 (en) Grouping and parallel execution of tasks based on functional dependencies and immediate transmission of data results upon availability
CN110109847B (zh) Apb总线多个主设备的仲裁方法、系统及存储介质
CN107346351A (zh) 用于基于源代码中定义的硬件要求来设计fpga的方法和系统
US6601126B1 (en) Chip-core framework for systems-on-a-chip
JP4667206B2 (ja) マルチコアモデルシミュレーションプログラム、該プログラムを記録した記録媒体、マルチコアモデルシミュレータ、およびマルチコアモデルシミュレーション方法
US10509740B2 (en) Mutual exclusion in a non-coherent memory hierarchy
CN101176066B (zh) 用于操作系统服务的透明支持
JP2012038293A5 (ja)
EP3254199B1 (en) System and method for generating cross-core breakpoints in a multi-core microcontroller
US7957950B2 (en) Hard/soft cooperative verifying simulator
JPH07105146A (ja) 共有メモリ装置
JP2012008919A (ja) 情報処理装置
JP2013196245A (ja) シミュレーション方法、シミュレーション装置及びシミュレーションプログラム
CN117836750A (zh) 可扩展片上系统
CN116028413A (zh) 一种总线仲裁器、总线仲裁的方法、装置及介质
JP2008059192A (ja) ハード・ソフト協調検証用シミュレータ
US20130054854A1 (en) Full Bus Transaction Level Modeling Approach for Fast and Accurate Contention Analysis
US8786332B1 (en) Reset extender for divided clock domains
JP2007048019A (ja) エミュレーション方法、エミュレータ、コンピュータ組込型デバイスおよびエミュレータ用プログラム
Divekar et al. Interconnect matrix for multichannel AMBA AHB with multiple arbitration technique
US20240134718A1 (en) Apparatus and method for synchronizing participants of a simulation
US20230205452A1 (en) Circular buffer architecture using local memories with limited resources
Drótos et al. Interrupt driven parallel processing