JP2007048020A - エミュレーション方法、エミュレータ、コンピュータ組込型デバイスおよびエミュレータ用プログラム - Google Patents

エミュレーション方法、エミュレータ、コンピュータ組込型デバイスおよびエミュレータ用プログラム Download PDF

Info

Publication number
JP2007048020A
JP2007048020A JP2005231529A JP2005231529A JP2007048020A JP 2007048020 A JP2007048020 A JP 2007048020A JP 2005231529 A JP2005231529 A JP 2005231529A JP 2005231529 A JP2005231529 A JP 2005231529A JP 2007048020 A JP2007048020 A JP 2007048020A
Authority
JP
Japan
Prior art keywords
processor
pipeline
cycle number
phase
instruction
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
JP2005231529A
Other languages
English (en)
Inventor
Takayoshi Koizumi
貴義 小泉
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.)
Sony Interactive Entertainment Inc
Original Assignee
Sony Computer Entertainment Inc
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 Sony Computer Entertainment Inc filed Critical Sony Computer Entertainment Inc
Priority to JP2005231529A priority Critical patent/JP2007048020A/ja
Priority to US11/498,046 priority patent/US20070038435A1/en
Priority to CN200610114917XA priority patent/CN1912838B/zh
Publication of JP2007048020A publication Critical patent/JP2007048020A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Advance Control (AREA)

Abstract

【課題】 パイプラインを有するプロセッサの動作サイクル数を正しく見積もることができるエミュレータを提供する。
【解決手段】
MIPSコアに対応するMIPSオブジェクト102と、パイプラインに対応してその前後が関連付けられ、MIPSオブジェクト102の制御に従ってそれぞれ並列かつ独立に動作可能な複数段の処理ブロック103〜106と、入力されたインストラクションのステップ毎に、複数段の処理ブロック103〜106のうち最も動作した処理ブロックの動作サイクル数を保持するステップサイクル数保持用レジスタ101とを備えてエミュレータを構成する。MIPSオブジェクト102は、ステップサイクル数保持用レジスタ101に保持されている動作サイクル数を当該ステップにおけるパイプラインの実行ステップサイクル数として出力する。
【選択図】 図7

Description

本発明はエミュレータに係り、特に、あるコンピュータシステムが有する複数のハードウエア資源の機能を、性能等が異なる他のコンピュータシステム上で実現する際の各ハードウエア資源同士の動作タイミングを正しく合わせるための手法に関する。
あるコンピュータシステム向けに作成されたプログラムを、処理性能等の異なる他のコンピュータシステムで動作させるために、エミュレータが用いられている。このエミュレータを用いて汎用的なプログラムが動くコンピュータシステムをエミュレートする場合、プログラムによっては、ハードウエア資源との動作タイミングが非常にシビアなものがある。これをエミュレートするためには、何らかの方法でハードウエア資源の動作タイミングとプログラムの動作タイミングとを同期させる必要がある。この場合、従来は、エミュレータで、各ハードウエア資源の仮想動作サイクル数を見積もり、この仮想動作サイクル数と各ハードウエア資源の動作サイクル数とを比較することにより、エミュレート後のプログラムの動作タイミングを調節していた。
従来のエミュレータのうち、最も単純なものは、一つ々の命令をシリアルに処理する。つまり、ひとつの命令が完了するまで、後ろの命令は実行しない。しかし、最近のプロセッサ、例えばRISC(Reduced Instruction Set Computer) CPUは、インストラクションをパイプラインで処理している。パイプラインの場合、各段階の動作サイクル数は一定ではなく、前後の状態に左右される。少なくともキャッシュヒットしない限り、一般命令が1サイクルで完了することはない。
そのため、パイプライン動作するプロセッサを有するコンピュータをエミュレートしたときに、エミュレート後のプログラムの動作タイミングの調節が非常に難しいという問題があった。
本発明の主たる課題は、インストラクションをパイプラインで処理するプロセッサを有するコンピュータをエミュレートした後のプログラムの動作タイミングの調節を容易にする、エミュレーション方法を提供することにある。
本発明の他の課題は、エミュレーション方法を好適に実施することができるエミュレータ、コンピュータ組込型のデバイス、ならびに、このエミュレータをコンピュータ上で実行させるためのエミュレータ用プログラムを提供することにある。
本発明のエミュレーション方法は、インストラクションをパイプラインにより実行するプロセッサの機能をエミュレートする方法であって、その前後が関連付けられた複数段の処理ブロックにより前記パイプラインを構成し、各処理ブロックを、前記プロセッサに対応するプロセッサオブジェクトが並列かつ独立に動作可能にする過程と、前記プロセッサオブジェクトが、前記インストラクションを前記複数段の処理ブロックに入力する過程と、前記インストラクションのステップ毎に、前記複数段の処理ブロックのうち動作した処理ブロックが、動作する度に増加する動作サイクル数を保持する過程と、前記保持されている動作サイクル数の最大値を当該ステップにおける前記パイプラインの実行ステップサイクル数として出力する過程とを含む方法である。
前記複数段の処理ブロックがアクセス可能なレジスタを設け、いずれかの処理ブロックが前記レジスタに自己の動作サイクル数を保持するとともに、既に保持されている動作サイクル数よりも多く動作した処理ブロックが、前記レジスタに保持されている動作サイクル数を自己の動作サイクル数に更新するようにしてもよい。
本発明のエミュレータは、インストラクションをパイプラインにより実行するプロセッサの動作をエミュレートするエミュレータであって、前記プロセッサに対応するプロセッサオブジェクトと、前記パイプラインに対応してその前後が関連付けられ、前記プロセッサオブジェクトの制御に従ってそれぞれ並列かつ独立に動作可能な複数段の処理ブロックと、入力された前記インストラクションのステップ毎に、前記複数段の処理ブロックのうち最も動作した処理ブロックの動作サイクル数を保持するサイクル数保持手段とを備えており、前記プロセッサオブジェクトは、前記サイクル数保持手段に保持されている動作サイクル数を当該ステップにおける前記パイプラインの実行ステップサイクル数として出力するものである。
ある実施の態様では、前記プロセッサオブジェクトは、前記インストラクションの最初のステップでは前記サイクル数保持手段に保持される動作サイクル数を初期値にセットするとともに、各段の処理ブロックが動作する度に、動作した処理ブロックの動作サイクル数が既に前記サイクル数保持手段に保持されている動作サイクル数よりも大きいかどうかを判定し、大きいときに前記サイクル数保持手段に保持されている動作サイクル数を更新可能にする。なお、前記複数段の処理ブロックは、動作サイクル数が前記インストラクションに関わらず固定となる処理ブロックを含むものであってもよい。
本発明の組込型のデバイスは、インストラクションをパイプラインにより実行するプロセッサの機能を前記プロセッサが搭載されたものと異なる装置においてエミュレートするためのデバイスであって、前記装置に組み込まれたときに当該装置のハードウエア資源との協働により、当該装置に、前記プロセッサに対応するプロセッサオブジェクトと、前記パイプラインに対応してその前後が関連付けられ、前記プロセッサオブジェクトの制御に従ってそれぞれ並列かつ独立に動作可能な複数段の処理ブロックと、入力された前記インストラクションのステップ毎に、前記複数段の処理ブロックのうち最も動作した処理ブロックの動作サイクル数を保持するサイクル数保持手段とを形成し、前記プロセッサオブジェクトに、前記サイクル数保持手段に保持されている動作サイクル数を当該ステップにおける前記パイプラインの実行ステップサイクル数として出力させるものである。
本発明のエミュレータ用プログラムは、コンピュータを、インストラクションをパイプラインにより実行するプロセッサの動作をエミュレートするエミュレータとして動作させるためのプログラムであって、前記コンピュータを、前記プロセッサに対応するプロセッサオブジェクト;前記パイプラインに対応してその前後が関連付けられ、前記プロセッサオブジェクトの制御に従ってそれぞれ並列かつ独立に動作可能な複数段の処理ブロック;入力された前記インストラクションのステップ毎に、前記複数段の処理ブロックのうち最も動作した処理ブロックの動作サイクル数を保持するサイクル数保持手段;として動作させ、前記プロセッサオブジェクトに、前記サイクル数保持手段に保持されている動作サイクル数を当該ステップにおける前記パイプラインの実行ステップサイクル数として出力させるプログラムである。
本発明によれば、複数段の処理ブロックによりパイプラインを構成し、各処理ブロックを、プロセッサに対応するプロセッサオブジェクトが並列かつ独立に動作可能にするとともに、入力されたインストラクションのステップ毎に、複数段の処理ブロックのうち動作した処理ブロックの動作サイクル数の最大値を特定し、その最大値を当該ステップにおけるパイプラインの実行ステップサイクル数として出力するようにしたので、前後の処理が関連するパイプラインによりインストラクションを実行するプロセッサであっても、エミュレート先においてその動作サイクル数を見積もることができるので、エミュレート先における動作サイクル数の同期が容易になる、という優れた効果がある。
以下、本発明の実施の形態例を説明する。まず、エミュレート対象となるコンピュータシステム(以下、「対象システム」について説明する。対象システムは、図1にその構成例が示されるように、システムLSI10、すなわち、多数の機能を1つのチップ上に集積した超多機能LSI(Large Scale Integration)と、RAM(Random Access Memory)により構成されるシステムメモリ20とを含んで構成されたものである。
システムLSI10には、バスブリッジ11を介してGPU(Graphics Processing Unit)30が接続されている。また、バスブリッジ12および外部バスB2を介して外部ペリフェラルIC40,50等が接続される。2つのバスブリッジ11,12の間は、内部バスB1が接続されている。この内部バスB1には、CPU13、DMA(ダイレクト・メモリ・アクセス)コントローラ15、および複数の内部ペリフェラルブロック16〜19が接続されている。
この例では、CPU13は、MIPSコア(MIPS社が設計したCPUコア)であるものとする。MIPSコアなので、CPU13は、ベクトル演算用のコプロセッサ14を備えている。また、命令セットを簡略化することで高速処理を可能にするRISCプロセッサである。DMAコントローラ15は、CPU13からのDMAを可能にするとともにバスアービタ(調停)の機能をも有するものである。システムメモリ20は、このDMAコントローラ15に接続される。内部ペリフェラルブロック16〜19は、それぞれCPU13と連携して特有のハードウェア機能を実行するものである。
CPU13とDMAコントローラ15は、それぞれバスマスタとして動作する。従って、内部バスB1のアクセス権を、CPU13とDMAコントローラ15とでとり合う。外部ペリフェラルIC40,50は、外部バスB2およびバスブリッジ12を介して内部バスB1に接続されると、システムメモリ20のメモリマップ上に、それらの外部ペリフェラルIC40,50についてのレジスタ群がマップされる。
CPU13が内部バスB1を介してシステムメモリ20等のブロックにアクセスする場合、CPU13は、まず、バス・アービトレーションによって、バスアクセス権を取得しなければならない。CPU13によるバスアクセス権を取得するためのアクセスを「マスターアクセス」という。その際、内部バスB1が、DMAコントローラ15によって使用されている最中であった場合、CPU13からのアクセスは待たされる。CPU13がアクセス権を取得すると、アクセス対象のブロックにアクセスが通知される。CPU13がアクセス権を取得した後のアクセスを「スレーブアクセス」という。このとき、アクセス対象となるブロックの状態に応じて、そのアクセスサイクル数が異なる。また、アクセス対象となるブロックが外部バスB2にある場合、バスブリッジ12のレイテンシも必要になる。
以上のことから、CPU13の動作タイミング、例えばバスアクセスサイクル数は、内部バスB1のアクセス権取得までのサイクル数、バスアクセスを行うためのサイクル数、そして、アクセス対象となるブロックの応答サイクル数の3つの要素によって決定される。
[エミュレータの構成例]
次に、対象システムをエミュレートする本発明のエミュレータの構成例を説明する。
本発明のエミュレータは、エミュレータ用プログラムと、メモリを有するコンピュータないしコンピュータシステムとの協働により実現される。すなわち、エミュレートしようとするコンピュータ等(以下、「第2コンピュータ」という)のプロセッサがエミュレータ用プログラムを読み込んで実行することにより、あるいは、第2コンピュータに組込型デバイスが装着されることにより、当該第2コンピュータがエミュレータとして動作する。本発明のエミュレータは、また、組込型デバイスを第2コンピュータの内部バスあるいは外部バスに接続することにより、あるいは、第2コンピュータのプロセッサにつながる所定のスロットに装着することによっても実現が可能である。
エミュレータは、図1の対象システムのCPU13およびバス接続構成を含むハードウエア資源並びにその動きを、それぞれ独自の役割を持ったオブジェクトの集合として表すことができる。図2は、このエミュレータのオブジェクト図である。図2において、矢線は継承関係、線分は関連関係、起点付線分は起点に所属する所有関係を表している。
図2のオブジェクト図を参照すると、CPU13に対応して形成されるMIPSオブジェクトは、他のオブジェクト間の関連接続のための接続端子として、Cop0,Cop2、I−BUS、D−BUSおよびINSTを有する。
Cop0は、MIPSのシステムコプロセッサ(System Co-Processer)として設けられる。システムコプロセッサは、MIPSコアと密接な関連があるため、MIPSオブジェクト自身でその機能を担う。そのため、Cop0は、図2に示されるようにMIPSオブジェクト自体が接続される。対象システムでは、コプロセッサにベクトル演算ユニットが接続される。これをエミュレートするための接続端子が、もう一つのコプロセッサ(Co-Processer:Cop2)である。Cop2には、図1のコプロセッサ14に相当するベクトル演算コプロセッサオブジェクトが接続される。
良く知られているように、MIPSはハーバードアーキテクチャを採用している。そのため、対象システムでは、外部バスB2に、インストラクションバス(I−BUS)とデータバス(D−BUS)の2つのバス(Bus)が介在する。これをエミュレートするため、図2に示されるように、MIPSオブジェクトには、I−BUS接続端子およびD−BUS接続端子が存在し、それぞれ、I−BUS接続端子はI−BUSオブジェクト、D−BUS接続端子はD−BUSオブジェクトに接続される。
MIPSオブジェクトのINST接続端子は、外部割込をエミュレートするために、外部の割込コントローラとのインタフェースを行うためのもので、INT Controllerオブジェクトに接続される。
I−BUSオブジェクトは、インストラクションバス(I−BUS)のMMU(Memory Management Unit)をエミュレートするものである。I−BUSオブジェクトは、インストラクションバスからのアドレス変換(物理アドレス/論理アドレス変換)、および、インストラクションキャッシュ(図2のCache オブジェクト)のヒット・ミスヒットを判断する。I−BUSオブジェクトには、バスマスタ(BusMaster)としての機能をエミュレートするために、Master接続端子が存在し、ここにBusArbiterオブジェクトが接続される。
D−BUSオブジェクトは、データバス(D−BUS)のMMUをエミュレートするものであり、データバスからのアドレス変換(物理アドレス/論理アドレス変換)、および、4段のライトバッファを管理する。D−BUSオブジェクトには、バスマスタ(BusMaster)としての機能をエミュレートするために、Master接続端子が存在し、ここにBusArbiterオブジェクトが接続される。
BusArbiterオブジェクトは、I−BUSオブジェクトもしくはD−BUSオブジェクトからのバスアクセス要求があったときに、DMA_Controllerの状態に応じて、バスアクセス権を取得するまでのバスアクセスサイクル数を見積もる。そのため、DMAC接続端子を持ち、DMA_Controllerオブジェクトに接続される。
BusArbiterオブジェクトは、また、複数のPeripheralオブジェクトに接続するために、Slaves接続端子を持つ。このSlaves接続端子は、1対多接続のものである。BusArbiterオブジェクトは、各Peripheralオブジェクトを、例えばメモリマップにマッピングすることで管理する。例えばI−BUSオブジェクトもしくはD−BUSオブジェクトからバスアクセスがあると、このメモリマップに従って、適切なPeripheralオブジェクトを割り出し、バスアクセスを行う。
Peripheralオブジェクトのうち、本発明のエミュレータで特別な機能を担うのが、DMA_ControllerオブジェクトとINT Controllerオブジェクトである。
DMA_Controllerオブジェクトは、対象システムのDMAコントローラのエミュレートを行うもので、現時点で起動中のDMAの状態を監視している。そのため、バス・アービトレーションのサイクル数を見積もるために、BusArbiterオブジェクトからDMA状態取得のリクエストが来る。
INT Controllerオブジェクトは、割込を管理するオブジェクトである。より具体的には、各ペリフェラルブロックからの割込要求に応じてMIPSオブジェクトへの割込フラグを管理する。このため、図2のPeripheralクラスから派生した各Peripheral#1〜#nオブジェクトは、割り込み要求のためのINTC接続端子を持ち、それぞれがINT Controllerオブジェクトに接続されている。また、INT Controllerオブジェクトは、MIPSオブジェクトのINTC接続端子にも接続される。MIPSオブジェクトは、割込受付タイミングが来ると、INT Controllerオブジェクトに対して割り込みフラグの状態取得を要求する。
[仮想動作サイクル数の見積もり]
次に、上記のように構成されるエミュレータにおいて、エミュレート後のバスアクセスサイクル数の見積もり方法について説明する。バスアクセスサイクル数とは、バスマスタ(BusMaster)が、バスアクセスを要求してからそのバスアクセスが完了するまでの動作サイクル数である。ここでは、インストラクションバス・リードアクセス、データバス・リードアクセス、データバス・ライトアクセスの3種類のアクセスが起きた場合の動作と、バス・レイテンシの見積もり方法を説明する。
<インストラクションバス・リードアクセス>
図3は、インストラクションバス・リードアクセスのシーケンス図である。上段はオブジェクト名を示している。図3を参照すると、MIPSオブジェクトは、インストラクションリードアクセスをI−BUSオブジェクトに向けて発行する(iRA1)。このときI−BUSオブジェクトへ送出される要求コマンドは「ReadBus()」である。I−BUSオブジェクトは、所定のアドレス変換を行った後、インストラクション要求、例えばデータ要求をBusArbiterオブジェクトに向けて送出する(iRA2)。このときBusArbiterオブジェクトへ送出される要求コマンドは「ReadBus()」である。
BusArbiterオブジェクトは、アドレスマップ照合対象となるペリフェラルブロック(オブジェクト)へデータを要求する(iRA3)。このとき、各ペリフェラルブロック#1〜#nへ送出される要求コマンドは「ReadBus()」である。該当するペリフェラルブロックは、要求された番地の読出データおよび読み出しにかかったアクセスサイクル数のデータ(AS11)を要求元であるBusArbiterオブジェクトに返す(iRA4)。
BusArbiterオブジェクトは、また、DMA_ControllerオブジェクトにDMAの状態を表すデータを要求する(iRA5)。このときDMA_Controllerオブジェクトへ送出される要求コマンドは「GetDMAStatus()」である。DMA_Controllerオブジェクトは、DMAの状態を表すDMAステータス(ST11)をBusArbiterオブジェクトへ返す(iRA5)。これにより、BusArbiterオブジェクトは、現在のDMAの状態を把握することができる(iRA6)。そこで、BusArbiterオブジェクトは、DMAの状態からアービトレーションのサイクル数を決定し、これを読み出しにかかったアクセスサイクル数に上乗せし、読出データおよび上乗せ後のアクセスサイクル数のデータ(AS12)をI−BUSオブジェクトへ送出する(iRA7)。
I−BUSオブジェクトは、キャッシュ判定を行い、MIPSオブジェクトに返すアクセスサイクル数の算定を開始する(iRA8)。このとき、ミスキャッシュであれば読出データと共に得たサイクル数、ヒットであれば1サイクルを、それぞれMIPSオブジェクトに返すアクセスサイクル数として決定する。そして、読出データおよび決定したアクセスサイクル数のデータ(AS13)をMIPSオブジェクトへ送出する(iRA9)。 これにより、MIPSオブジェクトは、現在のDMAの状態およびキャッシュの状態を反映した正確なバスアクセスサイクル数を得るので、自己の仮想動作サイクル数をそれに合わせて調整することができる。
<データバス・リードアクセス>
図4は、データバス・リードアクセスのシーケンス図である。上段はオブジェクト名を示している。図4を参照すると、MIPSオブジェクトは、データリードアクセスをD−BUSオブジェクトに向けて発行する(dRA1)。このときD−BUSオブジェクトへ送出される要求コマンドは「ReadBus()」である。D−BUSオブジェクトは、所定のアドレス変換を行った後、データ読出要求をBusArbiterオブジェクトに向けて送出する(dRA2)。このときBusArbiterオブジェクトへ送出される要求コマンドは「ReadBus()」である。
BusArbiterオブジェクトは、アドレスマップ照合対象となるペリフェラルブロック(オブジェクト)へデータを要求する(dRA3)。このとき、各ペリフェラルブロック#1〜#nへ送出される要求コマンドは「ReadBus()」である。該当するペリフェラルブロックは、要求された番地の読出データおよび読み出しにかかったアクセスサイクル数のデータ(AS21)を要求元であるBusArbiterオブジェクトに返す(dRA4)。BusArbiterオブジェクトは、また、DMA_ControllerオブジェクトにDMAの状態を表すデータを要求する(dRA5)。このときDMA_Controllerオブジェクトへ送出される要求コマンドは「GetDMAStatus()」である。DMA_Controllerオブジェクトは、DMAの状態を表すDMAステータス(ST21)をBusArbiterオブジェクトへ返す(dRA5)。BusArbiterオブジェクトは、DMAの状態からアービトレーションのサイクル数を決定し、これを読み出しにかかったアクセスサイクル数に上乗せし、読出データおよび上乗せ後のアクセスサイクル数のデータ(AS22)をD−BUSオブジェクトへ送出する(dRA6)。
D−BUSオブジェクトは、読出データおよび上乗せ後のアクセスサイクル数のデータ(AS22)をそのまま(AS23)MIPSオブジェクトへ送出する(dRA7)。これにより、MIPSオブジェクトは、現在のDMAの状態およびキャッシュの状態を反映した正確なバスアクセスサイクル数を把握することができる。
なお、データバス・リードアクセスにおいても、インストラクションバス・リードアクセスと同様、キャッシュ管理機能を考慮してアクセスサイクル数を上乗せするようにしてもよい。
<データバス・ライトアクセス>
図5は、データバス・ライトアクセスのシーケンス図である。上段はオブジェクト名を示している。図5を参照すると、MIPSオブジェクトは、データライトアクセスをD−BUSオブジェクトに向けて発行する(dWA1)。このときD−BUSオブジェクトへ送出される要求コマンドは「WriteBus()」である。D−BUSオブジェクトは、所定のアドレス変換を行った後、データ書込要求をBusArbiterオブジェクトに向けて送出する(dWA2)。このときBusArbiterオブジェクトへ送出される要求コマンドは「WriteBus()」である。
BusArbiterオブジェクトは、アドレスマップ照合対象となるペリフェラルブロック(オブジェクト)へデータ書込を要求する(dWA3)。このとき、各ペリフェラルブロック#1〜#nへ送出される要求コマンドは「WriteBus()」である。該当するペリフェラルブロックは、要求された番地のデータ書込およびアクセスにかかったアクセスサイクル数のデータ(AS31)を要求元であるBusArbiterオブジェクトに返す(dWA4)。BusArbiterオブジェクトは、また、DMA_ControllerオブジェクトにDMAの状態を表すデータを要求する(dWA5)。このときDMA_Controllerオブジェクトへ送出される要求コマンドは「GetDMAStatus()」である。DMA_Controllerオブジェクトは、DMAの状態を表すDMAステータス(ST31)をBusArbiterオブジェクトへ返す(dWA5)。BusArbiterオブジェクトは、DMAの状態からアービトレーションのサイクル数を決定し、これを書き込みにかかったアクセスサイクル数に上乗せし、上乗せ後のアクセスサイクル数のデータ(AS32)をD−BUSオブジェクトへ送出する(dWA6)。
D−BUSオブジェクトは、WriteBufferに空きがあれば、サイクル数を1とし、そうでない場合に返ってきたサイクル数のデータ(AS33)をMIPSオブジェクトへ送出する(dWA7)。これにより、MIPSオブジェクトは、現在のDMAの状態およびWriteBufferの状態を反映した正確なバスアクセスサイクル数を見積もることができる。
このように、本実施形態のエミュレータでは、対象システムが有する複数のハードウエア資源の機能を実現するために、対象システムのCPU13に対応して形成されるMIPSオブジェクト、対象システムのペリフェラルに対応して形成されるペリフェラルオブジェクト、内部バスB1および外部バスB2に対応して形成されるI−BUSバスオブジェクトおよびD−BUSオブジェクト、DMAコントローラ15に対応して形成されるDMA_contrllerオブジェクトを備えるようにし、さらに、バスアクセス調停機能を有するBusArbterオブジェクトとキャッシュ管理を行うオブジェクトとを備えるようにしたので、エミュレート後のコンピュータにおいて、対象システムで動くプログラムを動作させたときの仮想動作サイクル数を正確に見積もることができる。そのため、エミュレート後のMIPSの仮想動作タイミングを容易に制御することができる。
また、バスアクセスにかかるサイクル数の要因ごとにブロックを分割し、それぞれのブロックでかかるサイクル数の総和として、そのバスアクセスサイクル数を見積もるようにしたので、見積もり精度が高まるという効果がある。
[パイプラインを考慮した動作タイミングの見積もり]
MIPSのようなRISCプロセッサでは、動作の並列性を高め、見かけ上のインストラクションの実行サイクル数を減らすために、上述したハーバードアーキテクチャのほか、パイプラインをも採用している。パイプラインは、インストラクション動作を適当な段数のフェーズに分け、それぞれフェーズを並列に動作させることで、インストラクションの動作を高速にするものである。MIPSコアの動作をエミュレートするにあたり、このパイプラインの動作をも考慮することで、より確度の高いインストラクション実行の動作サイクル数を見積もり、それを外部に出力することが可能となる。
そこで、ここでは、MIPSオブジェクトのパイプラインをエミュレートし、I−BUS、D−BUSそれぞれのアクセスを独立させ、インストラクションの動作クロック数をより正確に見積もる場合の動作例を説明する。
パイプラインの一般的な動作フェーズは、F(fetch)フェーズ、D(Decode)フェーズ、E(Execute)フェーズ、M(MemoryAccess)フェーズ、W(WriteBack)フェーズの5段フェーズである。このうち、Fフェーズと、Mフェーズを独立のバスにしたものが、上述したハーバードアーキテクチャとなる。
これらのフェーズはそれぞれ並行に動作するが、前後が関連付けられる。そのため、独走することができない。歩調を合わせる必要がある。つまり、それぞれのフェーズでかかったサイクル数のうち最大のものが、そのときにかかったサイクル数となる。この様子を図6に示す。
図6において、横軸は時間(t)、縦軸は処理オーダである。処理オーダは、Fフェーズ、Dフェーズ、Eフェーズ、Mフェーズ、Wフェーズである。すべてのフェーズが並列に動作し、命令を順次流して実行する。図6の最下段の数値は、当該時点での動作サイクル数である。図6において、i101で示される部分は、命令#4でメモリアクセスが起き、アクセスサイクル数が1でなかった場合に、すべてのフェーズがアクセス完了まで待たされる様子を示している。
また、図6において、i102は、命令#9のインストラクションフェッチが遅れたために、すべてのフェーズがフェッチ完了まで待たされる様子を示している。同じくi103は、命令#9の実行が2サイクル必要となるため、他のフェーズが実行完了まで待たされる様子を示している。
5段フェーズのうち、DフェーズとWフェーズは、1サイクル固定の時間しかかからない。従って、図1のCPU13に対応するMIPSオブジェクトの実行サイクル数を決定付けるのは、Fフェーズにかかったサイクル数(Iバスアクセスレイテンシ)、Eフェーズにかかったサイクル数(通常の命令は1サイクルであるが、まれに数サイクルかかる場合がある)、Mフェーズにかかったサイクル数(Dバスアクセスレイテンシ)の3つの要素である。
つまり、パイプラインにおけるこれら3つの要素のサイクル数を独立に見積もり、それらのうちサイクル数の最大値をそのときの実行ステップサイクル数とすることで、より確度の高い動作サイクル数を見積もることが可能となる。
このパイプラインの動作を説明するために、上述したMIPSオブジェクトについて、詳しく説明する。図7は、このMIPSオブジェクトの内部構成例を示す図である。
MIPSオブジェクト100の内部には、ステップサイクル数保持用レジスタ101、MIPSレジスタブロック102、Fetch処理ブロック103、Decode・Execute処理ブロック104、MemoryAccess処理ブロック105、WriteBack処理ブロック106および各処理ブロック103〜106の処理結果を動作時に一時的に保持するための3つのExecDataオブジェクト113,114,115が存在する。これらのブロック101〜106の動作は、図示しないMIPSオブジェクト100の制御機構により制御される。
ステップサイクル数保持用レジスタ101は、ステップ実行開始時に0になり、各フェーズの処理ブロックが自己のフェーズにかかった処理サイクル数の更新要求によって、最大値を保持するためのレジスタ(変数)である。
MIPSレジスタブロック102は、MIPSのハードウエアレジスタをエミュレートするブロックである。MIPSオブジェクトの「PC」、「Hi」、「Low」および32本の「GPR(汎用レジスタ)」を持つ。「PC」はプログラムカウンタの値、「Hi」および「Low」は固有の値である。
3つのExecDataオブジェクト113,114,115には、それぞれ「PC」、「Inst」、「Decode」、「TReg」、「Result」、「AccessType」のようなメンバが存在する。
「PC」は「Inst」を読み込んだときのアドレスである。「Inst」はインストラクションコードである。「Decode」はインストラクションの解析結果である。Load・Store命令、ターゲットレジスタのブロックは何か(MIPSレジスタ又はコプロセッサレジスタ)、分岐命令か等の判別に用いられる。「TReg」には、Store命令の場合、書き込むデータが格納される。それ以外の場合は、ターゲットレジスタ番号が格納される。「Result」には、Load・Store命令の場合、アクセス対象アドレスが格納される。それ以外の場合は、演算結果データが格納される。「AccessType」には、Load・Store命令の場合、アクセスデータ長もしくはアクセス対象となるコプロセッサの番号が格納される。コプロセッサ命令の場合、アクセス対象となるコプロセッサの番号が格納される。それ以外の場合は、未使用となる。
Fetch処理ブロック103は、MIPSレジスタブロック102の「PC」を参照し、その「PC」が示すアドレスのデータをI−BUSオブジェクトを利用して取得し、読み出したデータを「PC」の値と共にExecDataオブジェクト113の「PC」と「Inst」に格納する。この際、I−BUSブロックから得られるデータ読み出しサイクル数を用いて、ステップサイクル数保持用レジスタ101を更新する。
Decode・Execute処理ブロック104は、ExecDataオブジェクト114の「Inst」に格納されているインストラクションを参照し、どのようなインストラクションかを判別し、必要に応じてMIPSレジスタブロック102、各コプロセッサオブジェクト121のコプロレジスタを参照し、ExecDataオブジェクト114の「Decode」、「TReg」、「Result」および「AccessType」の値を更新する。その際、実行にかかったサイクル数を見積もり、ステップサイクル数保持用レジスタ101を更新する。
MemoryAccess処理ブロック105は、まず、ExecDataオブジェクト115の「Decode」を参照し、メモリアクセス命令かどうかを判別する。メモリアクセス命令でない場合、何もせずに終了する。メモリアクセス命令であった場合、「Decode」のLoad/Storeを判別する。また、「Result」に格納されているアクセス対象アドレスを参照し、Read・Writeアクセス要求をD−Busオブジェクトに発行する。Storeの場合、Writeされるデータは「TReg」に格納されている。Loadの場合、Writeしたデータは、「AccessType」と「TReg」を参照して格納先ブロックとレジスタ番号を識別し、指定のレジスタに格納される。この際、D−Busブロックから得られるデータ読み出しサイクル数を用いて、ステップサイクル数保持用レジスタ101を更新する。
WriteBack処理ブロック106は、MIPSのディレイスロットを実現するために存在する。このブロックは、Decode・Execute処理ブロック104との間で、ExecDataオブジェクト114を共有しており、MemoryAccess処理ブロック105の実行後にメモリアクセス命令以外の実行結果をレジスタに更新することで、MIPSのディレイスロットをエミュレートする。
このWriteBack処理ブロック106は、まず、MIPSレジスタブロック102の「PC」のインクリメントを行う。次に、ExecDataオブジェクト114の「Decode」を参照し、メモリアクセス命令かどうかを判別する。メモリアクセス命令の場合、何も処理をせず、終了する。メモリアクセス命令でない場合、「AccessType」と「TReg」を参照し、どのブロックのどのレジスタを更新するかを判別する。そして、「Result」の値を対象レジスタに更新する。この処理は、MIPSでは、必ず1サイクルで処理が完了するため、特にステップサイクル数保持用レジスタ101を更新する必要はない。
Fetch処理ブロック103による処理をF処理、Decode・Execute処理ブロック104による処理をD・E処理、MemoryAccess処理ブロック105による処理をM処理、WriteBack処理ブロック106による処理をW処理とすると、この実施形態のエミュレータによりF処理、D・E処理、M処理そしてW処理という順に実行することで、ステップサイクル数保持用レジスタ101のデータから、最終的にそのステップにかかったサイクル数を得ることが可能となる。
また、一つのステップの実行が完了した後、ExecDataオブジェクトと各フェーズとの対比を、図8のようにシフトさせることにより、順次、命令が実行されることになる。図8は、左側がシフト前、右側がシフト後のExecDataオブジェクトである。
なお、図7に示したMIPSオブジェクトでは、D・E処理のようにDフェーズでの処理とEフェーズでの処理を1つにするとともに、W処理専用のExecDataオブジェクトを設けていない。これは、以下の理由による。
=第1の理由=
パイプライン段数を考慮したものである。パイプラインは、その段数が深いと処理が重くなる。例えば、データハザードを回避するためのフォワーディングなども考慮しなければならなくなる。そのため、なるべく浅い段数で処理した方が得策である。MIPSは、1段の遅延分岐と、1段のロード遅延とを取り入れている。遅延分岐とは、分岐がTaken(分岐が成立)した場合であっても、分岐命令の次の命令は、分岐先の命令ではなく、分岐命令の後ろの命令が実行されるというものである。MIPSでは、後ろの1つの命令が実行される(1段)。また、ロード遅延とは、ロード命令を実行した場合、ロード命令の次の命令では、ロードしてきた値を使用できないが、そのケアはソフトウエアに任せるというものである。この2つを取り入れることのメリットは、ハードウエアの実装がシンプルになり、動作周波数をあげることが可能というものである。
=第2の理由=
データハザードとフォワーディングを考慮したものである。
例えば以下のような2つの命令があったとする。
$1=$2+$3 (命令1 )
$4=$1+$1 (命令2 )
最初の条件として、$1=0、$2=1、$3=2となっていた場合、$4には、結果として6が入らなければならない。ハードウエアでは、これらの命令が上述の5段のパイプラインを通るが、レジスタファイルに書き出されるのは、Wフェーズである。
命令2がDフェーズに入り、レジスタファイルにアクセスして$1の値を読み出そうとしたとき、命令1はまだEフェーズにあり、Wフェーズにない。そのため、レジスタファイルにある$1は、まだ、0のままである。このまま処理を行うと、$4には0が入る。つまり、この処理を正確に行うためには、命令1がWフェーズに来るまで命令2はDフェーズで待たなければならなくなる。この現象が、データハザードである。このデータハザードを避けるための技術がフォワーディングである。
フォワーディングは、Dフェーズでの結果をEフェーズに渡す箇所に、Eフェーズ内の演算器出力と、Mフェーズに入力されるラッチ、Wフェーズの入力をループバックさせる。このようにして、まだレジスタファイルに書かれていない最新のレジスタの値をDフェーズで使用することができるようにする。このフォワーディングを実装することで、Dフェーズにある命令2は、Eフェーズにある命令3の結果(つまり、3)を$1レジスタの値として持ってくることができる。そのため、何らかの待ち状態になることなく、つまりストールすることなく、$4レジスタには、正しく6が格納される。
エミュレータでパイプラインをエミュレートする際、DフェーズとEフェーズとWフェーズを分割、すなわちExecDataオブジェクトを分けて実行すると、同様の問題が発生し、それに対する処理を行う必要が出てくる。
つまり、エミュレータでは、EフェーズとDフェーズとWフェーズを一つの処理として行いたい。これによって、データハザードを考慮する必要がなくなる。
=第3の理由=
遅延分岐を考慮したものである。遅延分岐をエミュレートするためには、Fフェーズの次のフェーズで分岐の実行が行われればよい。分岐命令の実行は、PCに分岐先のアドレスを書き込むことであり、Wフェーズで実行されるのがシンプルな実装となる。レジスタの値を書き換えるのは、Wフェーズのみというポリシーを維持できるためである。
第2の理由で示したように、DフェーズとEフェーズとWフェーズが一つになれば、Fフェーズの次のサイクルでWフェーズが実行されるため、遅延分岐に関しては、第2の理由と利害が一致する。
=第4の理由=
ロード遅延を考慮したものである。ロード遅延は、ロード命令の次の命令でのロード対象レジスタのアクセスをハードウエアで保障しないというものである。つまり、ソフトウエアで保障しなければならない。仮に、ロード命令の次の命令に、ロード対象レジスタを参照するような命令がきた場合、ロード命令が実行される前の値が読み出される。このエミュレートは、Dフェーズ及びEフェーズとMフェーズとを分けることで、実装が可能である。ロード命令の次の命令でのロード対象レジスタの上書き命令を考慮したものである。
このような場合、命令の順序は守られなければならない。そのためには、WフェーズはMフェーズの実行後に実行される必要がある。
=総括=
MIPSオブジェクトで行いたいのは、サイクル数の見積もりである。サイクル数を見積もる上で必要になるのがFフェーズ、Eフェーズ、Mフェーズであることは、前述のとおりである。これらのフェーズは、それぞれが独立に動く必要がある。一方で、DフェーズとWフェーズは、Eフェーズと同時に動くことが望ましい。更に、Wフェーズは、Mフェーズの後に実行されなければならない。そのため、DフェーズはEフェーズと同時に実行させる。また、WフェーズはMフェーズの実行後に実行させなければならないが、仮想ステップとしては、Eフェーズと同時に行う。これにより、DフェーズとEフェーズは一つになり、Wフェーズ用のExecDataオブジェクトは、D/Eフェーズ共通に使用するという方式を採用したものである。以上の各理由から、本実施形態では、D/Eフェーズの処理を一つにまとめ、WフェーズのExecDataオブジェクトは、D/Eフェーズのものと共有することとした。
次に、本実施形態のエミュレータにおいて、パイプラインをエミュレートする場合の例を具体的に説明する。ここでは、便宜上、図9のような単純な計算例を、MIPS命令を用いて説明する。
各パイプラインフェーズのうち、Fフェーズでは、「PC」が示すアドレスから命令を読み出してくる。Dフェーズでは、読み出した命令を解釈し、次のフェーズで必要となる、元データを選択する。このDフェーズのデコード結果は、この後ろのフェーズでも使用される。Eフェーズでは、Dフェーズで選択されたデータに対して、演算を行う。演算の種類等は、順次送られてくるDフェーズの処理結果によって選択される。Mフェーズでは、演算結果に対して、メモリアクセスを行う。アクセスの種類およびアクセスを行うかどうかという情報は、順次送られてくるDフェーズの処理結果によって選択される。メモリアクセスが行われない場合は、Eフェーズの結果がそのまま次に送られる。Wフェーズでは、最終結果をもとに、汎用レジスタファイルを更新する。更新対象のレジスタファイルは、順次送られてくるDフェーズの処理結果によって選択される。Dフェーズの処理結果によっては、更新されずに終了する場合もある。なお、「PC」は、ジャンプ命令でない限り、+1され、更新され続ける。
上記の5つのフェーズのうち、DフェーズとMフェーズは、それぞれ1サイクル固定となる。そのため、ステップ実行サイクル数に影響するのは、Fフェーズ、EフェーズおよびMフェーズの3つとなる。
命令の順番は、当然、ハードウエアと同様にしなければならないため、以下の4つのステップでパイプラインをエミュレートすることになる。
Fetch→Decode&Execute→Memory→WriteBackおよびPCの更新
このような前提のもと、図9に示したMIPS命令をエミュレータで動作させた場合の動作サイクル数を見てみる。命令は、以下の4つとなる。
ORI $r1, $r0, 0x300
LW $r2, 0($r1)
ADDI $r1, $r1, 4
LW $r3, 0($r1)
キャッシュのライン数を「4」とすると、上記の4つの命令のうち、最初の命令以外の3つの命令はキャッシュヒットする確率がかなり高い。但し、MIPSでは、$r0の値は0固定という仕様になっている。
図10(a)は、ステップサイクル数保持用レジスタ101、MIPSレジスタブロック102、Fフェーズ用のExecDataオブジェクト113、D・E/Wフェーズ用のExecDataオブジェクト114、Mフェーズ用のExecDataオブジェクト115の構造例が示されている。MIPSレジスタブロック102は、実際には図7左上に示したように、多くのレジスタブロックが存在するが、ここでは、必要な箇所だけを示してある。ステップサイクル数時用レジスタ101には、ステップ実行サイクル数が保持される。
ステップ実行の最初は、MIPSレジスタブロック102の「PC」は0、ステップカウンタを「1」に初期化する。ステップカウンタの値「1」はステップサイクル数保持用レジスタ101に格納される。Fフェーズでは、これらのPC値0,1を参照し、インストラクションコードを取得する。そして、F関連されているExecDataブロック113に格納する(図10(b))。
その後、バスアクセスにかかったサイクル数をステップ実行サイクル数とする(ここでは、仮に「5」であったとする)。その結果、ステップ実行サイクル数は「1」から「5」に更新される(図11(a))。
Dフェーズでは、D・E/Wフェーズ用のExecDataオブジェクト114の「Inst」を読み込み、デコードする。現時点では「Inst」は空なので、無処理、実行サイクル数は「1」とする。ステップ実行サイクル数「5」と比較して小さいので、更新しない。
Mフェーズでは、Mフェーズ用のExecDataオブジェクト115の「Decode」を読み込み、メモリアクセスの有無を確認する。現時点では「Decord」は空なので無処理、実行サイクル数は「1」とする。ステップ実行サイクル数「5」と比較して小さいので、更新しない。Wフェーズでは、MIPSレジスタブロック102の「PC」に「4」を加算し、結果を更新する(図11(b))。この処理では、メモリアクセス以外の命令かどうかをチェックする。現時点では「Inst」は空なので無処理となる。ここで、次のステップに進むために、各ExecDataオブジェクト113〜115の関連をシフトさせる。つまり、Fフェーズ用のExecDataオブジェクト113の内容がD・E/Wフェーズ用のExecDataオブジェクト114にシフトする(図12(a))。
以上のエミュレート動作の結果、各フェーズでの実行サイクル数は、図20(a)に示されるように、Fフェーズの処理に引っ張られ、動作サイクル数は「5」、つまりステップサイクル数保持レジスタ101に格納されている値となる。
次のステップでは、まず、Fフェーズにおいて、PC値「5」を参照し、インストラクションコードを取得する。そして、ExecDataブロック113に格納する(図12(b))。その後、バスアクセスにかかったサイクル数をステップサイクル数保持用レジスタ101に書き込む(キャッシュヒットとして「1」とする:図13(a))。Dフェーズでは、ExecDataブロック114の「Inst」を読み込み、「ORI $r1,$r0,0×300」を解釈する。そして、「Decode」に通常命令という情報(normal)、「Treg」に更新対象レジスタである「1」、「Result」に$r0(=0)、論理和「0×300」の結果をそれぞれ格納する(図13(b))。ORI命令は、1サイクルでDecordExecを終了するため、「1」としてカウンタ値「1」と比較する。この例の場合、カウンタ値以下なので無更新とする。Mフェーズでは無処理のため状態の変化はない。Wフェーズでは、まず、「PC」を更新する(図14(a))。次いで、ExecDataブロック114から「Decord」を読み込み、メモリアクセスでないことを確認する。「Decord」が「normal」なので、「TReg」の値が示すレジスタを「Result」の値で更新する。つまり、MIPSレジスタブロック102の$r1に「0×300」を入れる(図15(b))。次のステップに進むために、各ExecDataオブジェクト113〜115の関連をシフトさせる(図15(a))。
以上のエミュレート動作の結果、各フェーズでの実行サイクル数は、図21(b)に示されるように、すべてのフェーズの処理が「1」で完了したため、この場合のステップサイクル数保持レジスタ101に格納される値は「1」となる。
3番目のステップでは、まず、Fフェーズにおいて、PC値「8」を参照し、インストラクションコードを取得する。そして、ExecDataブロック113に格納する(図15(b))。バスアクセスサイクル数は、今回もキャッシュヒットとして「1」とし、カウンタ値を書き換える。Dフェーズでは、ExecDataブロック114から「Inst」を読み込み、LW $2,0($r1)を解釈する。そして「Decord」に「Load」、「TReg」に「2」、「Result」に0+$r1で「0×300」、「accessType」に「Word」をそれぞれ格納する(図16(a))。LWのDフェーズの処理は1サイクルで完了するため、「1」としてカウント値と比較する。カウント値以下なので、無更新とする。Mフェーズでは、ExecDataブロック115の「Decord」を読み込む。「normal」なので、メモリアクセスなしと判断する。Wフェーズでは、「PC」を「12」に更新した後、ExecDataブロック114の「Decord」を読み込む(図16(b))。「Load」なので、メモリアクセス命令と判断する。処理としては何も行わない。次のステップに進むために、各ExecDataオブジェクト113〜115の関連をシフトさせる(図17(a))。
以上のエミュレート動作の結果、各フェーズでの実行サイクル数は、図20(c)に示されるように、すべてのフェーズの処理が「1」で完了したため、この場合のステップサイクル数保持レジスタ101に格納される値は「1」となる。
最後のステップでは、まず、Fフェーズにおいて、これまでと同様、「PC」と「Inst」を書き込む。バスアクセスは、再度キャッシュヒットとし、1サイクルとしてカウンタ値を「1」に更新する(図17(b))。Dフェーズでは、ExecDataブロック114から「Inst」を読み込み、「$1+4」を演算し、その結果を「Result」に格納する。「TReg」に「1」、「Decord」に「normal」を格納する。サイクル数は「1」である(図18(a))。Mフェーズでは、ExecDataブロック115の「Decord」を読み込み、「Load」であることを確認する。そして、「Result」の示すアドレスに、「AccessType」が示すサイズ(Word=4Byte)でバスアクセスを行う。そして、その結果を「TReg」が示すレジスタに書き出す。0×300番地へのバスアクセスには5サイクルかかったとする。この場合、カウンタ値よりも大きいため、カウンタ値を「5」に更新する(図18(b))。Wフェーズでは、「PC」を「16」に更新した後、ExecDataブロック114の「Decord」を読み込む。「normal」なので、「TReg」が示すレジスタに、「Result」の値を書き込む(図19)。
以上のエミュレート動作の結果、各フェーズでの実行サイクル数は、図20(d)に示されるように、Mフェーズの処理に引っ張られ、動作サイクル数は「5」となる。
このように、MIPSコアをエミュレートする場合、RISCプロセッサの持つパイプラインもエミュレートすることで、確度の高いサイクル数を算出することが可能になる。パイプラインをエミュレートするということは、つまり、命令の実行を1命令ごとにやるのではなく、パイプラインフェーズごとに処理を切って、順次実行するということであり、その際、各フェーズにかかった時間の大小関係から、一番大きいものを選択し、それがそのステップにかかった実行サイクル数とすることで、他のハードウエア資源との動作サイクル数の同期が確実になされるようになる。
なお、本実施形態および実施例では、オブジェクト指向ツールを用いてエミュレータを構成した場合の例を示したが、本発明は、必ずしもこのようなツールによってのみ実施されるものではない。例えば、ソフトウエアエミュレータとして実施する場合のほか、エミュレータの一部の機能をソフトウエアとし、残部をハードウエアにより構成することもできる。
本発明は、エンタテインメント装置、通信装置等、性能等が異なる他のコンピュータ用のプログラムを正しい動作タイミングで動作させる装置おいて広く利用が可能である。
エミュレート対象となる対象システムの構成図。 本発明のエミュレータのオブジェクト図。 インストラクションバス・リードアクセスのシーケンス図。 データバス・リードアクセスのシーケンス図。 データバス・ライトアクセスのシーケンス図。 パイプラインの動作が歩調を合わせる必要があることを示した図。 MIPSオブジェクト(クラス)の内部構成例を示す図。 ExecDataオブジェクトとフェーズとの対比をシフトさせた図。 パイプラインをエミュレートする場合の命令の例を示した図。 (a),(b)は実際にエミュレートした場合の、ステップサイクル数保持用レジスタの値、MIPSレジスタブロックに格納される値、ExecDataオブジェクトに格納されるデータ等の内容説明図。 同上 同上 同上 同上 同上 同上 同上 同上 実際にエミュレートした場合の、ステップサイクル数保持用レジスタの値、MIPSレジスタブロックに格納される値、ExecDataオブジェクトに格納されるデータ等の内容説明図。 (a)は図9の命令をパイプライン動作するときの最初のステップの動作サイクル数、(b)は2番目のステップの動作サイクル数、(c)は3番目のステップの動作サイクル数、(d)は最後のステップの動作サイクル数を示した図。
符号の説明
10 システムLSI
11 バスブリッジ
12 バスブリッジ
13 CPU
14 コプロセッサ
15 DMAコントローラ
16〜19 内部ペリフェラルブロック
20 システムメモリ
30 GPU
40,50外部ペリフェラルIC
B1 内部バス
B2 外部バス
100 MIPSオブジェクト
101 ステップサイクル数保持用レジスタ
102 MIPSレジスタブロック
103 Fetch処理ブロック
104 Decode・Execute処理ブロック
105 MemoryAccess処理ブロック
106 WriteBack処理ブロック
113,114,115 ExecDataオブジェクト

Claims (7)

  1. インストラクションをパイプラインにより実行するプロセッサの機能をエミュレートする方法であって、
    その前後が関連付けられた複数段の処理ブロックにより前記パイプラインを構成し、各処理ブロックを、前記プロセッサに対応するプロセッサオブジェクトが並列かつ独立に動作可能にする過程と、
    前記プロセッサオブジェクトが、前記インストラクションを前記複数段の処理ブロックに入力する過程と、
    前記インストラクションのステップ毎に、前記複数段の処理ブロックのうち動作した処理ブロックが、動作する度に増加する動作サイクル数を保持する過程と、
    前記保持されている動作サイクル数の最大値を当該ステップにおける前記パイプラインの実行ステップサイクル数として出力する過程とを含む、
    エミュレーション方法。
  2. 前記複数段の処理ブロックがアクセス可能なレジスタを設け、いずれかの処理ブロックが前記レジスタに自己の動作サイクル数を保持するとともに、既に保持されている動作サイクル数よりも多く動作した処理ブロックが、前記レジスタに保持されている動作サイクル数を自己の動作サイクル数に更新する、
    請求項1記載のエミュレーション方法。
  3. インストラクションをパイプラインにより実行するプロセッサの動作をエミュレートするエミュレータであって、
    前記プロセッサに対応するプロセッサオブジェクトと、
    前記パイプラインに対応してその前後が関連付けられ、前記プロセッサオブジェクトの制御に従ってそれぞれ並列かつ独立に動作可能な複数段の処理ブロックと、
    入力された前記インストラクションのステップ毎に、前記複数段の処理ブロックのうち最も動作した処理ブロックの動作サイクル数を保持するサイクル数保持手段とを備えており、
    前記プロセッサオブジェクトは、前記サイクル数保持手段に保持されている動作サイクル数を当該ステップにおける前記パイプラインの実行ステップサイクル数として出力する、
    エミュレータ。
  4. 前記プロセッサオブジェクトは、前記インストラクションの最初のステップでは前記サイクル数保持手段に保持される動作サイクル数を初期値にセットするとともに、各段の処理ブロックが動作する度に、動作した処理ブロックの動作サイクル数が既に前記サイクル数保持手段に保持されている動作サイクル数よりも大きいかどうかを判定し、大きいときに前記サイクル数保持手段に保持されている動作サイクル数を更新可能にする、
    請求項3記載のエミュレータ。
  5. 前記複数段の処理ブロックは、動作サイクル数が前記インストラクションに関わらず固定となる処理ブロックを含む、
    請求項3記載のエミュレータ。
  6. インストラクションをパイプラインにより実行するプロセッサの機能を前記プロセッサが搭載されたものと異なる装置においてエミュレートするためのデバイスであって、
    前記装置に組み込まれたときに当該装置のハードウエア資源との協働により、
    当該装置に、
    前記プロセッサに対応するプロセッサオブジェクトと、
    前記パイプラインに対応してその前後が関連付けられ、前記プロセッサオブジェクトの制御に従ってそれぞれ並列かつ独立に動作可能な複数段の処理ブロックと、
    入力された前記インストラクションのステップ毎に、前記複数段の処理ブロックのうち最も動作した処理ブロックの動作サイクル数を保持するサイクル数保持手段とを形成し、
    前記プロセッサオブジェクトに、前記サイクル数保持手段に保持されている動作サイクル数を当該ステップにおける前記パイプラインの実行ステップサイクル数として出力させる、
    コンピュータ組込型デバイス。
  7. コンピュータを、インストラクションをパイプラインにより実行するプロセッサの動作をエミュレートするエミュレータとして動作させるためのプログラムであって、
    前記コンピュータを、
    前記プロセッサに対応するプロセッサオブジェクト;
    前記パイプラインに対応してその前後が関連付けられ、前記プロセッサオブジェクトの制御に従ってそれぞれ並列かつ独立に動作可能な複数段の処理ブロック;
    入力された前記インストラクションのステップ毎に、前記複数段の処理ブロックのうち最も動作した処理ブロックの動作サイクル数を保持するサイクル数保持手段;として動作させ、
    前記プロセッサオブジェクトに、前記サイクル数保持手段に保持されている動作サイクル数を当該ステップにおける前記パイプラインの実行ステップサイクル数として出力させる、
    エミュレータ用プログラム。
JP2005231529A 2005-08-10 2005-08-10 エミュレーション方法、エミュレータ、コンピュータ組込型デバイスおよびエミュレータ用プログラム Pending JP2007048020A (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2005231529A JP2007048020A (ja) 2005-08-10 2005-08-10 エミュレーション方法、エミュレータ、コンピュータ組込型デバイスおよびエミュレータ用プログラム
US11/498,046 US20070038435A1 (en) 2005-08-10 2006-08-03 Emulation method, emulator, computer-attachable device, and emulator program
CN200610114917XA CN1912838B (zh) 2005-08-10 2006-08-10 仿真方法、仿真器、计算机可连接设备及仿真器程序

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2005231529A JP2007048020A (ja) 2005-08-10 2005-08-10 エミュレーション方法、エミュレータ、コンピュータ組込型デバイスおよびエミュレータ用プログラム

Publications (1)

Publication Number Publication Date
JP2007048020A true JP2007048020A (ja) 2007-02-22

Family

ID=37850793

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2005231529A Pending JP2007048020A (ja) 2005-08-10 2005-08-10 エミュレーション方法、エミュレータ、コンピュータ組込型デバイスおよびエミュレータ用プログラム

Country Status (1)

Country Link
JP (1) JP2007048020A (ja)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH11238004A (ja) * 1998-02-20 1999-08-31 Ricoh Co Ltd システムシミュレータ
JP2003216678A (ja) * 2001-04-06 2003-07-31 Pacific Design Kk データ処理システムおよび設計システム
JP2004206699A (ja) * 2002-12-12 2004-07-22 Matsushita Electric Ind Co Ltd シミュレーション装置、シミュレーション方法及びプログラム
JP2005135436A (ja) * 2000-10-17 2005-05-26 Nec Corp 電子回路と制御プログラムとのコバリデーション方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH11238004A (ja) * 1998-02-20 1999-08-31 Ricoh Co Ltd システムシミュレータ
JP2005135436A (ja) * 2000-10-17 2005-05-26 Nec Corp 電子回路と制御プログラムとのコバリデーション方法
JP2003216678A (ja) * 2001-04-06 2003-07-31 Pacific Design Kk データ処理システムおよび設計システム
JP2004206699A (ja) * 2002-12-12 2004-07-22 Matsushita Electric Ind Co Ltd シミュレーション装置、シミュレーション方法及びプログラム

Similar Documents

Publication Publication Date Title
US8312254B2 (en) Indirect function call instructions in a synchronous parallel thread processor
US9830158B2 (en) Speculative execution and rollback
US7617384B1 (en) Structured programming control flow using a disable mask in a SIMD architecture
US9195786B2 (en) Hardware simulation controller, system and method for functional verification
JP5787629B2 (ja) マシンビジョン用マルチプロセッサシステムオンチップ
JP5035277B2 (ja) 共有メモリに対するアトミックな更新を可能にするロックメカニズム
EP2483772B1 (en) Trap handler architecture for a parallel processing unit
WO2012068494A2 (en) Context switch method and apparatus
JP2012038293A5 (ja)
EP2480979A1 (en) Unanimous branch instructions in a parallel thread processor
US20130198759A1 (en) Controlling work distribution for processing tasks
US9395997B2 (en) Request coalescing for instruction streams
US8572355B2 (en) Support for non-local returns in parallel thread SIMD engine
US20200319893A1 (en) Booting Tiles of Processing Units
CN114579188A (zh) 一种risc-v向量访存处理系统及处理方法
JP4130465B2 (ja) メモリ転送処理サイズが異なるプロセッサに関してアトミックな処理を実行するための技術
JP2007048019A (ja) エミュレーション方法、エミュレータ、コンピュータ組込型デバイスおよびエミュレータ用プログラム
US7155718B1 (en) Method and apparatus to suspend and resume on next instruction for a microcontroller
US20080172507A1 (en) Methods and Apparatus for Synchronizing a Plurality of Processors
US20070038435A1 (en) Emulation method, emulator, computer-attachable device, and emulator program
JP2007048020A (ja) エミュレーション方法、エミュレータ、コンピュータ組込型デバイスおよびエミュレータ用プログラム
JPH0384632A (ja) データ処理装置
JP2668987B2 (ja) データ処理装置
JP7137058B2 (ja) 演算処理装置、情報処理装置及び情報処理装置の制御方法
US20070288675A1 (en) Bus system, bus slave and bus control method

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20071105

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20100225

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20100714

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20100818

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A712

Effective date: 20101125

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110106

RD02 Notification of acceptance of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7422

Effective date: 20110111

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20110426