OCP(Open Core Protocol)技術解説 ―― CPUに依存しないオンチップ・バス・プロトコルがマルチコアを効率良く動作させる
このように,すべての転送はリクエスト・フェーズから始まります.また,マスタがMCmdを発行することからリクエスト・フェーズは始まります.つまりOCP規格では,マスタがコマンドを発行することで,あらゆる転送が開始されます.また,すべてのフェーズにはそれぞれ,フェーズを開始させる信号とフェーズを終了させる信号があり(一部はオプション信号だが),マスタ・スレーブのつごうに合わせて自由に各フェーズを開始・終了できるようになっています.これにより,マスタ・スレーブともにオーバ・ラン(バッファあふれ)注2を防ぐことができ,余計なバッファを持たずにすみます.
各フェーズは独立して動作可能です.例えば,読み出し転送のレスポンス・フェーズは,リクエスト・フェーズの後のどのタイミングからでも開始できます.また,あるリクエストに対するレスポンスが返る前に,さらにリクエストを発行することもできます(このように,コマンドとレスポンスを独立したタイミングにできることを「スプリット・トランザクション」と呼ぶ).これにより,IPコアのパイプライン処理に対応することができます.
注2;データを受ける側の処理速度が送る側の速度より遅いため,処理できない命令が受け側のバッファにたまってしまい,最後にはバッファからあふれてしまうこと.
2)オプション信号
オプションで用意されている信号を表1に示します.オプション信号の一つとして,スレッド信号(MThreadID,SThreadID,MDataThreadID)があります.一般的に,IPコア内では同時に複数の処理が行われ,それぞれの処理のコマンドやデータがそれぞれのタイミングで共通のインターフェースに現れてきます.スレッド信号を使うことにより,それぞれの処理を独立した処理単位(スレッド)として扱うことができます.
データフロー信号(基本機能拡張) | |
アドレス空間 | MAddrSpace |
バイト・イネーブル | MByteEn |
バースト | MBurst |
データ・ハンドシェイク | MDataValid,SDataAccept |
マスタ・レスポンス受領 | MRespAccept |
データ・フロー信号(応用機能拡張) | |
スレッド | MThreadID,SThreadID,MDataThreadID |
スレッド・ビジー | MThreadBusy,SThreadBusy |
コネクション | MConnID |
サイドバンド信号 | |
リセット | Reset |
割り込み | SInterrupt |
エラー | SError |
フラグ | MFlag,SFlag |
コントロール,ステータス | Control,Status |
テスト信号 | |
スキャン | Scanctrl,Scanin,Scanout |
JTAG | TCK,TDI,TDO,TMS,TRST_N |
〔表1〕OCP 1.0のオプション信号
前述のようにOCP 1.0では,マスタがレスポンスを受け取る前に複数のリクエストを発行することが可能です.一方,スレーブは(OCP 1.0のデフォルトでは)リクエストの発行順にレスポンスを返さなければなりません.これに対して,オプションのスレッド信号を使う(マルチスレッドにする)ことにより,リクエストの発行順とは異なった順序でレスポンスを返すことができます(図5).つまり,レスポンスが遅いコアに対してリクエストを先に出していた場合にも,そのレスポンスがほかのレスポンスを妨げる状況を防ぐことができ,転送の効率化を図れます.
〔図5〕OCP 1.0のタイミング図
AとBは別のスレッドを表す.スレッド信号を使うことにより,B1とスレッドが異なるA2のレスポンスを,先に発行されたB1よりも早く返すこともできる.