(57)【要約】本発明は、データ処理装置においてパイプライン間を同期する手法を提供する。データ処理装置は、一連のインストラクションを実行するよう動作可能なメインプロセッサーであって、複数の第一パイプラインステージを有する第一のパイプラインを備えるメインプロセッサーと、前記一連のインストラクションの中のコプロセッサーインストラクションを実行するよう動作可能なコプロセッサーとを備える。コプロセッサーは、複数の第二パイプラインステージを有する第二のパイプラインを備え、そして各コプロセッサーインストラクションは、第一のパイプラインおよび第二のパイプラインの双方を通って経路付けられるようアレンジされている。更に、少なくとも１つの同期キューが提供されて、１つのパイプラインの所定のパイプラインステージを別のパイプラインのパートナーパイプラインステージと結合し、その所定のパイプラインステージは、コプロセッサーインストラクションを処理するとき同期キューにトークンが入れられるように動作可能であり、かつパートナーパイプラインステージは、同期キューからトークンを受け取ってそのコプロセッサーインストラクションを処理するよう動作可能である。このアプローチによって、第一および第二のパイプラインが、所定のパイプラインステージとパートナーパイプラインステージとの間で同期され、そうして、確実に、パイプラインが重大な情報の転送のために正しく同期されるものとし、その厳格な同期が全てのステージでは必要とされなくなる。
2005538439.tif 000002
【特許請求の範囲】
【請求項１】
一連のインストラクションを実行するよう動作可能なメインプロセッサーであって、複数の第一パイプラインステージを有する第一のパイプラインを備えるメインプロセッサーと、
前記一連のインストラクションにおけるコプロセッサーインストラクションを実行するよう動作可能なコプロセッサーであって、複数の第二パイプラインステージを有する第二のパイプラインを備え、かつ各コプロセッサーインストラクションは第一のパイプラインおよび第二のパイプラインの双方を通って経路付けられるようアレンジされているコプロセッサーと、
１つのパイプラインにおける所定のパイプラインステージを別のパイプラインにおけるパートナーパイプラインステージと結合する少なくとも１つの同期キューであって、その所定のパイプラインステージは、コプロセッサーインストラクションを処理するとき同期キューにトークンが置かれるように動作可能であり、かつパートナーパイプラインステージは、同期キューからのトークンを受け取ってそのコプロセッサーインストラクションを処理するよう動作可能であり、それによって、所定のパイプラインステージとパートナーパイプラインステージとの間で第一および第二のパイプラインの同期させる同期キューと
を備えるデータ処理装置。
【請求項２】
更に前記同期キューを複数備え、前記同期キューの各々は１つのパイプラインにおける所定のパイプラインステージを別のパイプラインにおけるパートナーパイプラインステージと結合する請求項１に記載のデータ処理装置。
【請求項３】
少なくとも１つの同期キューの１つはインストラクションキューであり、前記所定のパイプラインステージは、第一のパイプラインにあって、コプロセッサーインストラクションを識別するトークンがインストラクションキューに入れられるようにアレンジされており、かつパートナーパイプラインステージは、第二のパイプラインにあって、トークンを受け取ってトークンの識別するコプロセッサーインストラクションを処理し始めるよう動作可能である請求項１または２に記載のデータ処理装置。
【請求項４】
前記所定のパイプラインステージは、第一のパイプラインにおけるフェッチステージであり、かつパートナーパイプラインステージは、第二のパイプラインにおける復号ステージであり、その復号ステージは、トークンを受け取ってコプロセッサーインストラクションを復号するよう動作可能である請求項３に記載のデータ処理装置。
【請求項５】
前記第一のパイプラインのフェッチステージは、トークンが、一連のインストラクションにおける各インストラクションのインストラクションキューに入れられるよう動作可能であり、かつ前記第二のパイプラインの復号ステージは、関連するトークンを受け取って各インストラクションを復号し、そのインストラクションが、コプロセッサーによる更なる処理を必要とするコプロセッサーインストラクションであるかどうかを判断するようアレンジされている請求項４に記載のデータ処理装置。
【請求項６】
少なくとも１つの同期キューの１つがキャンセルキューであり、前記所定のパイプラインステージが、第一のパイプラインにあって、その所定のパイプラインステージのコプロセッサーインストラクションがキャンセルされるべきかどうかを識別するトークンが、キャンセルキューに入れられるようにアレンジされており、かつパートナーパイプラインステージが、第二のパイプラインにあって、キャンセルキューからトークンを受け取って、かつトークンがコプロセッサーインストラクションはキャンセルされるべきであると識別するならば、そのコプロセッサーインストラクションがキャンセルされるように動作可能である先の請求項のいずれかに記載のデータ処理装置。
【請求項７】
前記所定のパイプラインステージが、第一のパイプラインの発行ステージであり、かつパートナーパイプラインステージが、第二のパイプラインの発行ステージに続くステージである請求項６に記載のデータ処理装置。
【請求項８】
前記パートナーパイプラインステージは、キャンセルキューからトークンを受け取って、かつトークンがコプロセッサーインストラクションはキャンセルされるべきであると識別するならば、コプロセッサーインストラクションを第二のパイプラインから取り除くよう動作可能である請求項６または７に記載のデータ処理装置。
【請求項９】
少なくとも１つの同期キューの１つが、フィニッシュキューであり、前記所定のパイプラインステージが、第一のパイプラインにあって、その所定のパイプラインステージのコプロセッサーインストラクションが、第二のパイプラインから後退するための許可を識別するトークンがフィニッシュキューに入れられるようにアレンジされ、かつパートナーパイプラインステージが、第二のパイプラインにあって、フィニッシュキューからトークンを受け取って、かつトークンがコプロセッサーインストラクションは後退されるよう許可されることを識別するならば、そのコプロセッサーインストラクションが後退されるように動作可能である先の請求項のいずれかに記載のデータ処理装置。
【請求項１０】
前記所定のパイプラインステージが、第一のパイプラインのライトバックステージであり、かつパートナーパイプラインステージが、第二のパイプラインのライトバックステージである請求項９に記載のデータ処理装置。
【請求項１１】
少なくとも１つの同期キューの１つが、長さキューであり、前記所定のパイプラインステージが、第二のパイプラインにあって、ベクトル化コプロセッサーインストラクションについて、そのベクトル化コプロセッサーインストラクションの長さ情報を識別するトークンが長さキューに入れられるようにアレンジされ、かつパートナーパイプラインステージが、第一のパイプラインにあって、長さキューからトークンを受け取って、長さ情報を、第一のパイプライン内のベクトル化コプロセッサーインストラクションをさらに処理する要因として盛り込むよう動作可能である先の請求項のいずれかに記載のデータ処理装置。
【請求項１２】
前記所定のパイプラインステージが、第二のパイプラインの復号ステージであり、かつパートナーパイプラインステージが、第一のパイプラインの第一実行ステージである請求項１１に記載のデータ処理装置。
【請求項１３】
少なくとも１つの同期キューの１つがアクセプトキューであり、前記所定のパイプラインステージが、第二のパイプラインにあって、その所定のパイプラインステージのコプロセッサーインストラクションがコプロセッサーによって実行されるようアクセプトされるべきかどうかを識別するトークンが、アクセプトキューに入れられるようにアレンジされており、かつパートナーパイプラインステージが、第一のパイプラインにあって、アクセプトキューからトークンを受け取って、かつトークンがコプロセッサーインストラクションはアクセプトされるべきではないと識別するならば、そのコプロセッサーインストラクションがメインプロセッサーによって拒絶されるものとするよう動作可能である先の請求項のいずれかに記載のデータ処理装置。
【請求項１４】
前記所定のパイプラインステージが、第二のパイプラインの発行ステージであり、かつパートナーパイプラインステージが、第一のパイプラインの第二実行ステージである請求項１３に記載のデータ処理装置。
【請求項１５】
パートナーパイプラインステージが、アクセプトキューからトークンを受け取って、かつトークンがコプロセッサーインストラクションはアクセプトされるべきではないと識別するならば、第一のパイプラインからコプロセッサーインストラクションを取り除くよう動作可能である請求項１３または１４に記載のデータ処理装置。
【請求項１６】
少なくとも１つの同期キューの１つが、コプロセッサーインストラクションが、コプロセッサーからメインプロセッサーのアクセスの可能なメモリーにデータアイテムが転送されるように動作可能な蓄積インストラクションであるときに用いられる蓄積キューであり、前記所定のパイプラインステージが、第二のパイプラインにあって、前記蓄積インストラクションの１つを処理するとき、転送されるべき各データアイテムを識別するトークンが蓄積キューに入れられるようにアレンジされており、かつパートナーパイプラインステージが、第一のパイプラインにあって、蓄積キューから各トークンを受け取って、対応するデータアイテムがメモリーに転送されるように動作可能である先の請求項のいずれかに記載のデータ処理装置。
【請求項１７】
前記所定のパイプラインステージが、第二のパイプラインの発行ステージにあり、かつパートナーパイプラインステージが、第一のパイプラインのアドレス生成ステージである請求項１６に記載のデータ処理装置。
【請求項１８】
少なくとも１つの同期キューの１つが、コプロセッサーインストラクションが、メインプロセッサーのアクセスの可能なメモリーからコプロセッサーにデータアイテムが転送されるように動作可能であるロードインストラクションであるとき用いられるロードキューであり、前記所定のパイプラインステージが、第一のパイプラインにあって、前記ロードインストラクションの１つを処理するとき、転送されるべき各データアイテムを識別するトークンがロードキューに入れられるようにアレンジされており、かつパートナーパイプラインステージが、第二のパイプラインにあって、ロードキューから各トークンを受け取って、対応するデータアイテムがコプロセッサーに転送されるように動作可能である先の請求項のいずれかに記載のデータ処理装置。
【請求項１９】
前記所定のパイプラインステージは、第一パイプラインのライトバックステージであり、かつパートナーパイプラインステージは、第二パイプラインのライトバックステージである請求項１７に記載のデータ処理装置。
【請求項２０】
ロードインストラクションおよび蓄積インストラクションが、転送されるべき複数のデータアイテムを定義するベクトル化コプロセッサーインストラクションであり、かつロードキューおよび蓄積キューの少なくとも一方と関連し、制御信号を前記所定のパイプラインステージに送って、前記所定のパイプラインステージによるトークンの発行を停止させ、その間に前記関連するロードまたは蓄積キューが一杯になると判定されるフロー制御ロジックを更に備える、請求項１６に依存する請求項１８に記載のデータ処理装置。
【請求項２１】
フロー制御ロジックが、蓄積キューに備えられ、フロー制御ロジックは、パートナーパイプラインステージがデータアイテムをアクセプトできないメインプロセッサーからの指示を受け取って制御信号を発行するよう動作可能である請求項２０に記載のデータ処理装置。
【請求項２２】
ロードキューがダブルバッファである請求項２１に記載のデータ処理装置。
【請求項２３】
各トークンが、そのトークンの関係するコプロセッサーインストラクションを定義するタグを含んでいる先の請求項のいずれかに記載のデータ処理装置。
【請求項２４】
メインプロセッサーは、第一および第二のパイプライン双方からコプロセッサーインストラクションをフラッシュする必要があるとき、フラッシュされる必要のある最も古いインストラクションに関係するタグを識別するコプロセッサーにフラッシュ信号を放送するよう動作可能であり、コプロセッサーは、タグからの最も古いインストラクションを識別して、第二のパイプラインからコプロセッサー内のその最も古いインストラクションおよびそれより後のいずれのインストラクションをもフラッシュするよう動作可能である請求項２３に記載のデータ処理装置。
【請求項２５】
タグをキュー内のどのトークンがフラッシュされるべきかを識別するのに用いて、前記少なくとも１つの同期キューの１つ以上が、前記フラッシュ信号に応答してフラッシュされる請求項２４に記載のデータ処理装置。
【請求項２６】
少なくとも１つの同期キューが、トークンを蓄積するために所定数のエントリーを有するファーストインファーストアウト（ＦＩＦＯ）バッファを備える先の請求項のいずれかに記載のデータ処理装置。
【請求項２７】
前記コプロセッサーを複数備え、各同期キューが、メインプロセッサーのパイプラインステージを１つのコプロセッサーのパイプラインステージと結合させる先の請求項のいずれかに記載のデータ処理装置。
【請求項２８】
トークンが、前記所定のパイプラインステージによってキューに入れられ、かつクロックサイクルの変化端でパートナーパイプラインステージによってキューから受け取られるような同期設計を有する先の請求項のいずれかに記載のデータ処理装置。
【請求項２９】
データ処理装置におけるパイプライン間の同期方法であって、そのデータ処理装置は、一連のインストラクションを実行するよう動作可能なメインプロセッサーと、前記一連のインストラクションの中のコプロセッサーインストラクションを実行するよう動作可能なコプロセッサーとを備え、そのメインプロセッサーは、複数の第一パイプラインステージを有する第一のパイプラインを備え、コプロセッサーは、複数の第二パイプラインステージを有する第二パイプラインを備え、かつ各コプロセッサーインストラクションは、その第一のパイプラインおよび第二のパイプラインの双方を通って経路付けられるようアレンジされており、
（ａ）１つのパイプラインの所定のパイプラインステージを、同期キューを介して別のパイプラインのパートナーパイプラインステージと結合させ、
（ｂ）前記所定のパイプラインステージがコプロセッサーインストラクションを処理しているとき、同期キューにトークンを入れ、
（ｃ）パートナーパイプラインステージが同期キューからトークンを受け取ると、パートナーパイプラインステージ内でコプロセッサーインストラクションを処理する
ステップを備え、
それによって、前記所定のパイプラインステージとパートナーパイプラインステージとの間で第一および第二のパイプラインの同期が得られる
方法。
【請求項３０】
前記同期キューが複数備えられ、かつ前記ステップ（ａ）乃至（ｃ）が各同期キューについて行われる請求項２９に記載の方法。
【請求項３１】
少なくとも１つの同期キューの１つがインストラクションキューであり、前記所定のパイプラインステージが第一のパイプラインにあって、かつパートナーパイプラインステージが第二のパイプラインにあり、
前記ステップ（ｂ）で、コプロセッサーインストラクションを識別するインストラクションキューにトークンを入れ、
前記ステップ（ｃ）で、トークンを受け取って、パートナーパイプラインステージ内でトークンによって識別されるコプロセッサーインストラクションの処理を開始する
ステップを備える請求項２９または３０に記載の方法。
【請求項３２】
少なくとも１つの同期キューの１つがキャンセルキューであり、前記所定のパイプラインステージが第一のパイプラインにあって、かつパートナーパイプラインステージが第二のパイプラインにあり、
前記ステップ（ｂ）で、キャンセルキューにトークンを入れて、その所定のパイプラインステージのコプロセッサーインストラクションがキャンセルされるべきかどうかを識別し、
前記ステップ（ｃ）で、パートナーパイプラインステージがキャンセルキューからトークンを受け取り、かつコプロセッサーインストラクションがキャンセルされるべきであることをそのトークンが識別するならば、そのコプロセッサーインストラクションがキャンセルされるものとする
ステップを備える請求項２９乃至３１のいずれかに記載の方法。
【請求項３３】
少なくとも１つの同期キューの１つがフィニッシュキューであり、前記所定のパイプラインステージが第一のパイプラインにあって、かつパートナーパイプラインステージが第二のパイプラインにあり、
前記ステップ（ｂ）で、トークンをフィニッシュキューに入れて、その所定のパイプラインステージのコプロセッサーインストラクションを第二のパイプラインから後退させる許可を識別し、
前記ステップ（ｃ）で、パートナーパイプラインステージがフィニッシュキューからトークンを受け取り、かつコプロセッサーインストラクションが後退されるよう許可されることをそのトークンが識別するならば、そのコプロセッサーインストラクションが後退されるものとする
ステップを備える請求項２９乃至３２のいずれかに記載の方法。
【請求項３４】
少なくとも１つの同期キューの１つが長さキューであり、前記所定のパイプラインステージが第二のパイプラインにあって、かつパートナーパイプラインステージが第一のパイプラインにあり、
前記ステップ（ｂ）で、ベクトル化コプロセッサーインストラクションについて、長さキューにトークンを入れて、ベクトル化コプロセッサーインストラクションについて長さ情報を識別し、
前記ステップ（ｃ）で、パートナーパイプラインステージが長さキューからトークンを受け取ると、長さ情報を、第一のパイプライン内でのベクトル化コプロセッサーインストラクションの更なる処理に要因として盛り込む
ステップを備える請求項２９乃至３３のいずれかに記載の方法。
【請求項３５】
少なくとも１つの同期キューの１つがアクセプトキューであり、前記所定のパイプラインステージが第二のパイプラインにあって、かつパートナーパイプラインステージが第一のパイプラインにあり、
前記ステップ（ｂ）で、アクセプトキューにトークンを入れて、その所定のパイプラインステージのコプロセッサーインストラクションがコプロセッサーによって実行されるようアクセプトされるべきであるかどうかを識別し、
前記ステップ（ｃ）で、パートナーパイプラインステージがアクセプトキューからトークンを受け取り、かつコプロセッサーインストラクションがアクセプトされるべきでないとそのトークンが識別するならば、コプロセッサーインストラクションがメインプロセッサーによって拒絶されるものとする
ステップを備える請求項２９乃至３４のいずれかに記載の方法。
【請求項３６】
少なくとも１つの同期キューの１つが、コプロセッサーインストラクションが、コプロセッサーからメインプロセッサーのアクセスが可能なメモリーにデータアイテムが転送されるものとするように動作可能な蓄積インストラクションであるとき用いられる蓄積キューであり、所定のパイプラインステージが第二のパイプラインにあって、かつパートナーパイプラインステージが第一のパイプラインにあり、
前記ステップ（ｂ）で、前記蓄積インストラクションの１つを処理するとき、蓄積キューにトークンを入れて、転送されるべき各データアイテムを識別し、
前記ステップ（ｃ）で、パートナーパイプラインステージが蓄積キューから各トークンを受け取ると、対応するデータアイテムがメモリーに転送されるようにする
ステップを備える請求項２９乃至３５のいずれかに記載の方法。
【請求項３７】
少なくとも１つの同期キューの１つが、コプロセッサーインストラクションが、メインプロセッサーのアクセスが可能なメモリーからコプロセッサーにデータアイテムが転送されるように動作可能なロードインストラクションであるとき用いられるロードキューであり、前記所定のパイプラインステージが第一のパイプラインにあって、かつパートナーパイプラインステージが第二のパイプラインにあり、
前記ステップ（ｂ）で、前記ロードインストラクションの１つを処理するとき、ロードキューにトークンを入れて、転送されるべき各データアイテムを識別し、
前記ステップ（ｃ）で、パートナーパイプラインステージがロードキューから各トークンを受け取ると、対応するデータアイテムがコプロセッサーに転送されるものとする
ステップを備える請求項２９乃至３６のいずれかに記載の方法。
【請求項３８】
ロードインストラクションおよび蓄積インストラクションが転送されるべき複数のデータアイテムを定義するベクトル化コプロセッサーインストラクションであり、
（ｄ）ロードキューおよび蓄積キューの少なくとも一方について、制御信号を所定のパイプラインステージに送って所定のパイプラインステージによるトークンの発行を停止させ、その間関連するロードまたは蓄積キューが一杯になると判定される
ステップを更に備える、請求項３６に依存する請求項３７に記載の方法。
【請求項３９】
前記ステップ（ｄ）が蓄積キューについて行われ、前記ステップ（ｄ）で、前記方法が、パートナーパイプラインステージがデータアイテムをアクセプトできないとメインプロセッサーから指示を受け取ると、制御信号を発行するステップを備える
請求項３８に記載の方法。
【請求項４０】
各トークンには、そのトークンの関係するコプロセッサーインストラクションを識別するタグが含まれている請求項２９乃至３９のいずれかに記載の方法。
【請求項４１】
コプロセッサーインストラクションを第一および第二のパイプラインの双方からフラッシュすることが必要であるとき、
フラッシュ信号をメインプロセッサーからコプロセッサーへと放送して、フラッシュされる必要のある最も古いインストラクションに関係するタグを識別し、
コプロセッサー内で、タグからその最も古いインストラクションを識別して、かつコプロセッサー内のその最も古いインストラクションおよびそれより後のいずれのインストラクションをも第二のパイプラインからフラッシュする
ステップを更に備える請求項４０に記載の方法。
【請求項４２】
タグを用いてキュー内のどのトークンがフラッシュされるべきかを識別し、前記フラッシュ信号に応答して、前記少なくとも１つの同期キューの１つ以上をフラッシュするステップを更に備える請求項４１に記載の方法。
【請求項４３】
少なくとも１つの同期キューが、トークンを蓄積するために所定数のエントリーを有するファーストインファーストアウト（ＦＩＦＯ）バッファを備える請求項２９乃至４２のいずれかに記載の方法。
【請求項４４】
前記コプロセッサーを複数備え、各同期キューが、メインプロセッサーのパイプラインステージを１つのコプロセッサーのパイプラインステージと結合する請求項２９乃至４３のいずれかに記載の方法。
【請求項４５】
トークンは、前記所定のパイプラインステージがキューに入れ、かつクロックサイクルの変化端でパートナーパイプラインステージがキューから受け取るようにデータ処理装置が同期設計を有する請求項２９乃至４４のいずれかに記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
（発明の分野）
本発明は、データ処理装置におけるパイプライン間の同期を達成する技法に関する。
【背景技術】
【０００２】
（従来技術の説明）
複数のパイプラインステージを有するパイプラインの敷設されたプロセッサーの形をとるメインプロセッサーを、データ処理装置に備えることが知られている。これによって、複数のインストラクションが、いかなる時点においても、メインプロセッサーでの実行の処理中とすることができる。どの特定のインストラクションを実行する間も、そのインストラクションはメインプロセッサーの種々のパイプラインステージを通り、そのインストラクションの実行は、典型的には、インストラクションがメインプロセッサーの最後のパイプラインステージを経て処理されるとき完了し、その時点で、データ処理装置の状態は、そのインストラクションの実行の結果を反映するよう更新されている。一例として、メインプロセッサーのアクセス可能なレジスターバンクの１つ以上のレジスターの内容は、インストラクションの実行の結果に依存して更新される。
【０００３】
データ処理装置によって実行される一連のインストラクションに現れる特定のコプロセッサーインストラクションを実行する１つ以上のコプロセッサーを、データ処理装置に備えることもまた知られている。メインプロセッサーがパイプラインの敷設されたアーキテクチャーを有する状況においては、コプロセッサーが、パイプラインの敷設されたアーキテクチャーを有することもまた普通であり、そしてそれ故、コプロセッサーが、コプロセッサーインストラクションを実行するために、そのコプロセッサーインストラクションが処理される複数のパイプラインステージを有することもまた普通である。典型的には、各コプロセッサーインストラクションは、メインプロセッサーのパイプラインとコプロセッサーのパイプラインとの双方を通って経路付けられるよう配置される。コプロセッサーは、多かれ少なかれメインプロセッサーと調和して動くよう意図されており、したがってコプロセッサーのパイプラインがメインプロセッサーのパイプラインと同期され続けられるよう措置が講じられている。
【０００４】
コプロセッサーインストラクションを実行する間に、メインプロセッサーの種々のパイプラインステージとコプロセッサーのパイプラインステージとの間の相互作用の必要性があるという事実から、同期の必要性が発生している。例えば、コプロセッサーインストラクションによって特定される条件符号が合致しないならば、コプロセッサーインストラクションは、メインプロセッサーによってキャンセルされるか、またはコプロセッサーインストラクションが実行された結果ブランチが誤って予測された場合には、コプロセッサーのパイプライン全体をフラッシュする（どっと流す）必要がある。さらにはコプロセッサーインストラクションがロードを定義するか演算を蓄積する場合には、メインプロセッサーとコプロセッサーとの間でデータを受け渡す必要がある。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
現在に至るまで、一方のパイプラインから他方のパイプラインへと固定したタイミングで信号を受け渡すことによって、コプロセッサーパイプラインは、メインプロセッサーパイプラインと同期され続けている。同期を維持するために、これらの信号は主として、一方のパイプラインがストールする（止まる）とき、他方のパイプラインにおいてもストールを引き起こす。しかしながら、他にも複雑な要因があり、例えば、メインパイプラインがコプロセッサーインストラクションをキャンセルする必要があるか、またはパイプラインがフラッシュされる必要があるとき、それによってメインプロセッサーとコプロセッサーとの間の相互作用が著しく複雑になり、そのときそれらはストールと相互に作用する。パイプラインの敷設されたプロセッサーが長くなると、パイプライン間の固定したタイミングでの信号の受け渡しを含む、この緊密に結合した構成を用いてパイプライン間に同期を達成するのはさらに困難となる。
【０００６】
コプロセッサーのインターフェースに課せられる主な制約は、それが、２サイクルの遅延にわたって作動しなければならないというもので、すなわち、メインプロセッサーからコプロセッサーへと受け渡されるまたはその逆のいかなる信号も、一方から他方に伝播するのに、クロックサイクル全体が与えられなければならず、それ故、次のクロックサイクルまで実行できないというものである。これが意味するのは、インターフェースを横切る信号は、インターフェースの一方の側のレジスターからクロックアウトされて、他方の側の別のレジスターに直接クロックインされなければならず、かつ組み合わせの処理が介入してはならない。この制約は、メインプロセッサー（ここではプロセッサーコアとも称する）およびコプロセッサーが相当の距離を離して置かれるので、信号の伝播時間をカバーするために大きなタイミングマージンを許容しなければならないという事実から生じるものである。このことがとりわけ真実であるのは、コプロセッサーが、メインプロセッサーの設計とは別に、例えば別の関係者によって、設計される状況においてである。この、信号の伝播における遅延のために、先に記述した緊密な結合の同期技法を用いてパイプラインの同期を維持するのは困難となる。
【０００７】
したがって、データ処理装置において、パイプライン間の同期を得る技法を改善することが望ましい。
【課題を解決するための手段】
【０００８】
（発明の概要）
第一の観点から見ると、本発明は、一連のインストラクションを実行するよう動作可能なメインプロセッサーであって、複数の第一パイプラインステージを有する第一のパイプラインを備えるメインプロセッサーと、前記一連のインストラクションにおけるコプロセッサーインストラクションを実行するよう動作可能なコプロセッサーであって、複数の第二パイプラインステージを有する第二のパイプラインを備え、かつ各コプロセッサーインストラクションは第一のパイプラインおよび第二のパイプラインの双方を通って経路付けられるようアレンジされているコプロセッサーと、１つのパイプラインにおける所定のパイプラインステージを別のパイプラインにおけるパートナーパイプラインステージと結合する少なくとも１つの同期キュー（待ち行列）であって、その所定のパイプラインステージは、コプロセッサーインストラクションを処理するとき同期キューにトークンが置かれるように動作可能であり、かつパートナーパイプラインステージは、同期キューからのトークンを受け取ってそのコプロセッサーインストラクションを処理するよう動作可能であり、それによって、所定のパイプラインステージとパートナーパイプラインステージとの間で第一および第二のパイプラインを同期させる同期キューとを備えるデータ処理装置を提供する。
【０００９】
本発明によると、データ処理装置は、少なくとも１つの同期キューを備え、１つのパイプラインの所定のパイプラインステージを別のパイプラインのパートナーパイプラインステージと結合している。その所定のパイプラインステージは、コプロセッサーインストラクションを処理するとき、トークンが同期キューに入れられるようにアレンジされており、そして、パートナーパイプラインステージは、同期キューからトークンを受け取ると、そのコプロセッサーインストラクションを処理するよう動作可能であり、それによって、その時点で第一および第二のパイプラインを同期させている。
【００１０】
したがって、発明は、２つのパイプライン間でいくぶんの緩みを許容するトークンをベースとしたパイプライン同期技法を提供しており、そこでは全てのステージでの厳格な同期が必要とされておらず、一方確実に重大な情報の転送のためにパイプラインが正しく同期されるものとしている。発明の技法は、パイプライン間に固定したタイミングで信号を送ることを必要とした、制御駆動、緊密結合の、従来技術の構成と対比して、データ駆動、緩やかな結合の同期構成と見ることができる。
【００１１】
ある実施例においては、唯一の同期キューのみがあるということも可能であるが、好ましい実施例において、データ処理装置はさらに、前記同期キューを複数備えていて、前記同期キューの各々は、１つのパイプラインの所定のパイプラインステージを他のパイプラインのパートナーパイプラインステージと結合する。
【００１２】
好ましい実施例において、少なくとも１つの同期キューの１つは、インストラクションキューであり、前記所定のパイプラインステージは、第一のパイプラインにあって、コプロセッサーインストラクションを識別するトークンがインストラクションキューに入れられるようにアレンジされており、かつパートナーパイプラインステージは、第二のパイプラインにあって、トークンを受け取ると、そのトークンの識別するコプロセッサーインストラクションを処理し始めるよう動作可能である。
【００１３】
インストラクションキューに関して、所定のパイプラインステージとパートナーパイプラインステージの双方が、好ましくは、それら各々のパイプラインの第一パイプラインステージの１つである。より特定すると、好ましい実施例において、所定のパイプラインステージは、第一のパイプラインのフェッチ（取り出し）ステージであり、かつパートナーパイプラインステージは、第二のパイプラインの復号ステージであり、その復号ステージは、トークンを受け取るとコプロセッサーインストラクションを復号するよう動作可能である。
【００１４】
そのような好ましい実施例において、第一のパイプラインのフェッチステージは、好ましくは、一連のインストラクションの中の各インストラクションについてトークンがインストラクションキューに入れられるように動作可能であり、かつ第二のパイプラインの復号ステージは、関連するトークンを受け取ると、各インストラクションを復号して、そのインストラクションがコプロセッサーによる更なる処理を要求するコプロセッサーインストラクションであるかどうかを判定するようにアレンジされている。
【００１５】
前記のアプローチの代案として、代わりに、インストラクションの各々が、まず、第一のパイプラインの復号ステージによって復号されるようにし、そして、実際に、コプロセッサーによって実行されるべきコプロセッサーインストラクションであったインストラクションのみを、インストラクションキューを介して送ることが可能であることが理解される。この瞬間において、所定のパイプラインステージが、第一のパイプラインの復号ステージであるかまたは復号ステージに続くステージである必要があるということが明らかである。
【００１６】
好ましい実施例において、少なくとも１つの同期キューの１つがキャンセルキューであり、所定のパイプラインステージが、第一のパイプラインにあって、かつトークンがキャンセルキューに入れられるようにアレンジされていて、その所定のパイプラインステージのコプロセッサーインストラクションがキャンセルされるべきかどうかを識別し、またパートナーパイプラインステージが、第二のパイプラインにあって、キャンセルキューからトークンを受け取り、かつそのトークンが、コプロセッサーインストラクションがキャンセルされるべきであることを識別するならば、そのコプロセッサーインストラクションがキャンセルされるように動作可能である。
【００１７】
したがって、メインプロセッサーはそれがすでにコプロセッサーに渡してしまったインストラクションをキャンセルするよう望むことになる。このことが起こるのは、例えば、インストラクションがその条件符号のいずれかを満たさず、それによってメインプロセッサーとコプロセッサーの双方でキャンセルされるべきインストラクションを実行することが必要となるときである。キャンセルキューは、この情報をメインプロセッサーからコプロセッサーへと運ぶ。
【００１８】
好ましい実施例において、キャンセルキューに関して、前記所定のパイプラインステージは、第一のパイプラインの発行ステージであり、かつパートナーパイプラインステージは、第二のパイプラインの発行ステージに続くステージである。より特定すると、好ましい実施例において、パートナーパイプラインステージは、コプロセッサーパイプラインの第一の実行ステージである。
【００１９】
好ましい実施例において、パートナーパイプラインステージは、キャンセルキューからトークンを受け取り、かつコプロセッサーインストラクションがキャンセルされるべきであることをそのトークンが識別するならば、第二のパイプラインからコプロセッサーインストラクションを取り除くよう動作可能である。インストラクションが第二のパイプラインから取り除かれ、あるいは浄化されるのに、多くの方法があるということが理解される。例えば、そのインストラクションをパイプラインから実際に取り除いて直ちに効力を発することが可能である。しかしながら、好ましい実施例において、その代わりに、インストラクションがパイプラインの残りのステージのいくつかを通ることが可能であるが、インストラクションが実行されるべきでないことを指示するフラッグが設定されていて、インストラクションがなおもキューからトークンを選ぶものとされる。
【００２０】
好ましい実施例において、少なくとも１つの同期キューの１つは、フィニッシュキューであり、前記所定のパイプラインステージは、第一のパイプラインにあって、かつトークンがフィニッシュキューに入れられるようにアレンジされていて、その所定のパイプラインステージのコプロセッサーインストラクションを第二のパイプラインから後退させる許可を識別し、またパートナーパイプラインステージが、第二のパイプラインにあって、フィニッシュキューからトークンを受け取り、かつコプロセッサーインストラクションを後退させることが許可されていることをそのトークンが識別するならば、そのコプロセッサーインストラクションを後退させるように動作可能である。
【００２１】
したがって、コプロセッサーパイプラインの各インストラクションを後退させるよう許可することによって、フィニッシュキューは、パイプラインの端で同期を維持する。好ましい実施例において、コプロセッサーパイプラインの長さは、フィニッシュキューの端から現れる対応するトークンを受け取ることが可能なだけ十分長くコプロセッサーインストラクションの後退を遅延させる必要性によって指令される。
【００２２】
フィニッシュキューに関して、所定のパイプラインステージは、好ましくは第一のパイプラインのライトバックステージであり、かつパートナーパイプラインステージは、好ましくは第二のパイプラインのライトバックステージである。
【００２３】
好ましい実施例において、少なくとも１つの同期キューの１つは、長さキューであり、前記所定のパイプラインステージは、第二のパイプラインにあって、かつベクトル化コプロセッサーインストラクションについて、トークンが長さキューに入れられるようにアレンジされていて、そのベクトル化コプロセッサーインストラクションについて長さ情報を識別し、またパートナーパイプラインステージは、第一のパイプラインにあって、かつ長さキューからトークンを受け取って、その長さ情報を、第一のパイプライン内でベクトル化コプロセッサーインストラクションを更に処理する要因として盛り込むように動作可能である。
【００２４】
コプロセッサーインストラクションによってはベクトル化されるものがあり、それらによって、インストラクションの幾度かの反復が、単一のインストラクションの中で特定できるものとなる。典型的な例は、ロードおよび蓄積インストラクション、いくつかのデータ値を単一のインストラクションで転送できるベクトル化ロードまたはベクトル化蓄積インストラクションである。これには、典型的には、コプロセッサーの一組のレジスターとメモリーの連続したひとまとまりの位置との間で、またはその反対に、何語かのデータを転送することが含まれている。
【００２５】
コプロセッサーがコプロセッサーインストラクションを復号したとき、ベクトル化ロードまたは蓄積演算がどれだけ長いかを知るものとなり、この情報は、同期トークンとして、長さキューを介してメインプロセッサーに送り返される。
【００２６】
長さキューに関して、好ましい実施例において、前記所定のパイプラインステージは、第二のパイプラインの復号ステージであり、かつパートナーパイプラインステージは、第一のパイプラインの第一の実行ステージである。
【００２７】
本発明の好ましい実施例において、少なくとも１つの同期キューの１つは、アクセプトキューであり、前記所定のパイプラインステージは、第二のパイプラインにあって、かつトークンがアクセプトキューに入れられるようにアレンジされて、その所定のパイプラインステージのコプロセッサーインストラクションがコプロセッサーによって実行されることをアクセプトするべきかどうか識別し、またパートナーパイプラインステージは、第一のパイプラインにあって、アクセプトキューからトークンを受け取り、かつコプロセッサーインストラクションがアクセプトされるべきでないことをそのトークンが識別するならば、そのコプロセッサーインストラクションがメインプロセッサーによって拒絶されるものとなるように動作可能である。
【００２８】
コプロセッサーは、前記所定のパイプラインステージで、さもなければ有効なコプロセッサーインストラクションをアクセプトできないと判断し、この情報を、同期トークンとして、アクセプトキューを介してメインプロセッサーに送る。インストラクションをコプロセッサーがアクセプトできないならば、「バウンス（返送）された」と言われる。好ましい実施例において、コプロセッサーがインストラクションをバウンスするならば、それは、パイプラインからインストラクションを取り除かないで、それを「ファントム」インストラクションに変換し、そのインストラクションの実行が確実に完了しないものとなる。
【００２９】
アクセプトキューに関して、好ましい実施例において、前記所定のパイプラインステージは、第二のパイプラインの発行ステージであり、かつパートナーパイプラインステージは、第一のパイプラインの第二の実行ステージである。
【００３０】
更には、パートナーパイプラインステージは、好ましくはアクセプトキューからトークンを受け取り、かつコプロセッサーインストラクションがアクセプトされるべきではないことを識別するならば、コプロセッサーインストラクションを第一のパイプラインから取り除くように動作可能である。キャンセルキューに関して先に記述したとおり、インストラクションをパイプラインから取り除き、または浄化するのに多くの方法がある。好ましい実施例において、第一のパイプラインのパートナーパイプラインステージは、アクセプトキューからトークンを受け取って対応するコプロセッサーインストラクションがアクセプトされるべきではないことを識別し、インストラクションが第一のパイプラインの残りのステージのいくつかを通るが、フラッグを設定してそのインストラクションが実行されるべきではないことを指示するようにアレンジされる。
【００３１】
本発明の好ましい実施例において用いられる前述の種々の制御キューと同様に、一つ以上の同期キューもまた提供されて、メインプロセッサーとコプロセッサーの間のデータキューとして働く。より特定すると、好ましい実施例において、少なくとも１つの同期キューの１つは、コプロセッサーインストラクションが、コプロセッサーからメインプロセッサーのアクセスが可能なメモリーにデータアイテムが転送されるように動作可能である蓄積インストラクションであるときに用いられる蓄積キューであり、前記所定のパイプラインステージが第二のパイプラインにあって、かつ前記蓄積インストラクションの１つを処理するとき、トークンが蓄積キューに入れられるようにアレンジされて転送されるべき各データアイテムを識別し、またパートナーパイプラインステージは、第一のパイプラインにあって、かつ各トークンを蓄積キューから受け取って、対応するデータアイテムがメモリーへと転送されるように動作可能である。
【００３２】
好ましい実施例において、蓄積キューに関して、前記所定のパイプラインステージは、第二のパイプラインの発行ステージであり、かつパートナーパイプラインステージは、第一のパイプラインのアドレス生成ステージである。
【００３３】
蓄積転送は、単一の値またはベクトルであり得る。後者の場合には、コプロセッサーは、第二のパイプラインの発行ステージのインストラクションを反復することによって、多重転送を有効に一連の単一転送へと変換する。これによって、蓄積インストラクションには、各アイテムを転送する瞬間が作り出される。インストラクションは、それが反復する間、コプロセッサー発行ステージに留まり、パイプラインを下って行くそれ自体のコピーを作り出す。反復されるインストラクションの最初のものは「ヘッド」と称され、他のものは「テール」と称される。
【００３４】
好ましい実施例において、少なくとも１つの同期キューの１つは、コプロセッサーインストラクションが、メインプロセッサーのアクセスが可能なメモリーからコプロセッサーへとデータアイテムが転送されるように動作可能なロードインストラクションであるときに用いられるロードキューであり、前記所定のパイプラインステージは、第一のパイプラインにあって、かつ前記ロードインストラクションの１つを処理するとき、トークンがロードキューに入れられるようにアレンジされていて、転送されるべき各データアイテムを識別し、またパートナーパイプラインステージが、第二のパイプラインにあって、かつロードキューから各トークンを受け取って、対応するデータアイテムがコプロセッサーに転送されるように動作可能である。
【００３５】
好ましい実施例において、ロードキューに関して、前記所定のパイプラインステージは、第一のパイプラインのライトバックステージであり、かつパートナーパイプラインステージは、第二のパイプラインのライトバックステージである。
【００３６】
蓄積インストラクションと共にあるとき、ロードインストラクションは、単一のデータ値またはベクトルロードインストラクションを介しての複数のデータ値の転送を特定する。したがって、好ましい実施例において、ロードデータは、メインプロセッサーのライトバックステージによってインターフェースを横切って送られ、コプロセッサーパイプラインのライトバックステージによって受け取られる。好ましい実施例において、コプロセッサーパイプラインは、フィニッシュトークンがライトバックステージのインストラクションが退却できるものとするのを待つことを除いては、発行ステージを越えてストールできないので、ロードインストラクションは常に、コプロセッサーにデータが到着するのと同期してコプロセッサーパイプラインのライトバックステージに到着する。したがって、好ましい実施例において、ライトバックステージのロードインストラクションが到着してデータを再編成するのに用いられるダブルバッファで、ロードキューは単純に形成される。
【００３７】
好ましい実施例において、先に記述したとおり、ロードインストラクションと蓄積インストラクションは、転送されるべき複数のデータアイテムを定義するベクトル化コプロセッサーインストラクションであり、装置は、ロードキューおよび蓄積キューの少なくとも一方と関係し、制御信号を所定のパイプラインステージに送って所定のパイプラインステージによるトークンの発行を停止させるよう動作可能で、一方関連するロードまたは蓄積キューは一杯になったと判定されるフロー制御ロジックを更に備える。
【００３８】
フロー制御ロジックは、受け取りパイプラインがデータを処理できないならば、データの流れを止めることができる。好ましい実施例において、フロー制御ロジックは、蓄積キューに提供され、フロー制御ロジックは、パートナーパイプラインステージがデータアイテムをアクセプトできないメインプロセッサーから指示を受け取って制御信号を発行するよう動作可能である。好ましい実施例において、ロードインストラクションは常に、ロードキューを介してコプロセッサーにデータが到着するのと同期して、コプロセッサーパイプラインのライトバックステージに到着するという先に記述した事実があるので、好ましい実施例において、フロー制御ロジックをロードキューと関連付ける必要は無い。しかしながら、そのような同期を保証することのできない実施例においては、フロー制御ロジックもまた、必要ならばロードキューを備えることができるということが理解される。
【００３９】
好ましい実施例において、メインプロセッサーのロード蓄積ユニットが、コプロセッサーからのデータの流れを止めることができるよう名フロー制御を、蓄積データは要求する。これは、停止信号をコプロセッサーに送ることで行われる。好ましい実施例において、この信号は、コプロセッサーに到着するのに２クロックサイクルかかるので、それは、好ましくは、蓄積キューが一杯になるという危険が起こり次第生成される。比較的短いキューでは、この危険はメインプロセッサーのロード蓄積ユニットがデータアイテムをアクセプトできなくなるやいなや現実のものとなり、したがって、好ましい実施例では、メインプロセッサーのロード蓄積ユニットがデータをアクセプトできなくなるごとに、停止信号がコプロセッサーに送られる。
【００４０】
メインプロセッサーは、コプロセッサーパイプラインのインストラクションを識別できるようになることが時には必要である。これは、例えば、メインプロセッサーがどのインストラクションをフラッシュするべきであるかをコプロセッサーに指示できるように、フラッシュを行う上で必要である。したがって、メインプロセッサーはコプロセッサーに送られる各インストラクションにタグを与え、それは、好ましい実施例において、パイプラインのタグの全てがいかなる瞬間でも一意性を有するだけ十分大きな値のプールから引き出される。
【００４１】
したがって、好ましい実施例において、各トークンには、そのトークンの関係するコプロセッサーインストラクションを識別するタグが含まれている。
【００４２】
したがって、好ましい実施例において、メインプロセッサーは、第一および第二の双方のパイプラインからコプロセッサーインストラクションをフラッシュする必要があるとき、フラッシュ信号をコプロセッサーへと放送して、フラッシュされる必要のある最も古いインストラクションに関係するタグを識別するよう動作可能であり、コプロセッサーは、タグからその最も古いインストラクションを識別して、コプロセッサー内でその最も古いインストラクションおよびその後のいかなるインストラクションをも第二のパイプラインからフラッシュするよう動作可能である。
【００４３】
更に、好ましい実施例において、前記少なくとも１つの同期キューの１つ以上は、前記フラッシュ信号に応答してフラッシュされ、タグを用いてそのキューの中のどのトークンがフラッシュされるべきかを識別する。
【００４４】
好ましい実施例において、連続するコプロセッサーインストラクションが連続したタグを有するならば、フラッシュを行う機構が簡略化される。これは、好ましい実施例において、コプロセッサーに送られたインストラクションがコプロセッサーインストラクションであるときにタグ番号を増やすだけのことで達成される。これは、インストラクションを送った後に行われ、そうであるので、コプロセッサーインストラクションが送られる前よりもむしろ送られた後に、タグが変わる。好ましい実施例において、メインプロセッサーは、どのような種類のインストラクションであるのかを判定するためにインストラクションを復号する時間がまだ無いので、インストラクションを送る前にタグを増やすことが可能なわけではない。コプロセッサー復号ステージがノンコプロセッサーインストラクションを取り除くとき、それは、連続するタグを担持するインストラクションの流れと一緒に無くなってしまう。
【００４５】
同期キューは種々の形を取り得ることが理解される。しかしながら、好ましい実施例において、各同期キューは、トークンを蓄積する所定数のエントリーを有するファーストインファーストアウト（ＦＩＦＯ）バッファを備える。好ましい実施例において、ロードキュー以外のキューの各々は、トークンを蓄積する３つのエントリーまたはスロットを有する。先に記述したとおり、好ましい実施例のロードキューは、好ましくはダブルバッファによって提供される。
【００４６】
ある実施例においては、複数のコプロセッサーが提供され、各同期キューは、メインプロセッサーのパイプラインステージをコプロセッサーの１つにおけるパイプラインステージと結合する。経済的な理由から、好ましい実施例においては、確実に、できる限り少ししかコプロセッサーインターフェースが複製されないようになっている。とりわけ、好ましい実施例のコプロセッサーは長さを共有し、データキューをアクセプトして蓄積するが、それらはメインプロセッサーが保持する。これらのキューが共有されるならば、１つのコプロセッサーだけがいつでもキューを使えるであろうが、それは、１つのコプロセッサーだけをいつもアクティブにすることによってほとんど直ちに保証される。しかしながら、一般にこれは大きな制限とはならず、それは、一般的に言って、いつも１つのコプロセッサーしか用いられていないからである。更に詳しく言うと、プロセッサーは典型的にはドライバソフトウェアで駆動されるが、それは、１つのプロセッサーしか駆動しない。ドライバソフトウェアを呼び出してそこから戻ることによって、一般に、１つのコプロセッサーを用いることと異なるコプロセッサーを用いることとの間に、いくつかのコアインストラクションがあることが確実なものとなる。
【００４７】
本発明のトークンをベースとしたパイプライン同期技法は、データ処理装置の非同期および同期設計の双方に適用可能であることが理解される。しかしながら、好ましい実施例においては、データ処理装置は同期設計を有しており、トークンは、所定のパイプラインステージによって、キューに入れられるようになり、かつクロックサイクルの変化端でパートナーパイプラインステージによってキューから受け取られるものとなっている。
【００４８】
第二の観点から見ると、本発明によって、データ処理装置のパイプライン間の同期方法が提供され、そのデータ処理装置は、一連のインストラクションを実行するよう動作可能なメインプロセッサーと前記一連のインストラクションの中のコプロセッサーインストラクションを実行するよう動作可能なコプロセッサーとを備え、そのメインプロセッサーは、複数の第一パイプラインステージを有する第一のパイプラインを備え、かつコプロセッサーは、複数の第二パイプラインステージを有する第二のパイプラインを備え、各コプロセッサーインストラクションは、第一のパイプラインおよび第二のパイプラインの双方を通って経路付けされるようアレンジされており、その方法は、（ａ）１つのパイプラインの所定のパイプラインステージを、他のパイプラインのパートナーパイプラインステージと同期キューを介して結合し、（ｂ）その所定のパイプラインステージがコプロセッサーインストラクションを処理しているときにトークンを同期キューに入れ、（ｃ）パートナーパイプラインステージが同期キューからトークンを受け取ると、パートナーパイプラインステージ内でコプロセッサーインストラクションを処理するステップを備え、それによって、所定のパイプラインステージとパートナーパイプラインステージの間で第一および第二のパイプラインの同期が得られる。
【００４９】
本発明は更に、単に例として、添付する図面に例示されるようなそれの好ましい実施例を参照して記述される。
【実施例】
【００５０】
（好ましい実施例の説明）
図１は、本発明の好ましい実施例の同期技法が使用されるデータ処理システムを示す。図１に示されるように、プロセッサーコア４０は、プロセッサーコア４０によって要求されるインストラクションのアクセスされるインストラクションキャッシュまたは他のメモリー装置１０に結合されている。プロセッサーコア４０内には、プリフェッチ（先取り）ユニット２０が提供されていて、パイプライン化プロセッサー３０によって要求されると、プリフェッチユニットの判断するインストラクションの要求が経路５０を通って発行される。そして、インストラクションが検索されるインストラクションメモリー１０が、インストラクションを出力して、経路６０を通してプリフェッチユニット２０に戻し、そしてそこから、それらは経路７０を通してパイプライン化プロセッサー３０へと送られる。インストラクションを実行しているとき、パイプライン化プロセッサー３０は、データ値を収容するレジスターバンク３５のレジスターとインターフェースで接続して、インストラクションによって操作される。ロードインストラクションが用いられて、データ値をデータメモリー８７からレジスターバンクへとローディングし、そして蓄積インストラクションが用いられて、データ値をレジスターバンク３５からデータメモリー８７へと蓄積する。そしてデータ処理インストラクションが、レジスターバンク３５の特定のレジスターに蓄積されるデータ値で実行される。
【００５１】
プリフェッチユニットによってプリフェッチ（先取り）されるインストラクションシーケンスのインストラクションには、インストラクションの流れにおいて変化を生じるようアレンジされるブランチインストラクションがある。ブランチインストラクションには、インストラクション自体の操作符号内のブランチについてターゲットアドレスを特定するものがあり、そうしてこれらのブランチインストラクションの予測が行われると、そのようなブランチインストラクションに続いてどのインストラクションをプリフェッチすべきかを決定する上でプリフェッチユニット２０の助けとなるものがある。そのようなブランチ予測は、ブランチ予測ロジック２５によって行われる。ブランチ予測ロジック２５が、そのようなブランチインストラクションが実行されると予測し、そうしてそのブランチが取られるならば、プリフェッチユニット２０は、次のインストラクションとして、ターゲットアドレスの特定するインストラクションを検索するようアレンジされる。反対に、ブランチ予測ロジック２５がブランチインストラクションは実行されず、したがってそのブランチが取られないと予測するならば、フェッチユニット２０は、次のインストラクションとして、インストラクションメモリー１０の次に続くアドレスのインストラクションを検索する。
【００５２】
パイプライン化プロセッサー３０内で、そのようなブランチインストラクションのいずれかを実行するかどうかが究極的に決定されるとき、なんらかの動作を行うようプリフェッチユニット２０が要求されるとすれば、関係する情報がプリフェッチユニット２０に送り返されることは、明らかに重要である。例えば、予測可能なブランチインストラクションについて、行われた予測が間違っていたならば、プリフェッチユニット２０に知らせる必要がある。例えば、ブランチ予測ロジック２５が、ブランチが取られると予測し、そうしてターゲットアドレスのインストラクションを検索したが、インストラクションがパイプライン化プロセッサー３０によって続いて実行されるとき、そのブランチインストラクションは実際には実行されるべきではないと判断されるならば、回復アドレスが、強制ＰＣ信号として経路８０を通して出力される必要があり、この場合、その回復アドレスは、そのブランチインストラクションの後、次に続くアドレスである。同様に、ブランチ予測ロジック２５が、ブランチインストラクションを実行されないと予測したが、実際は、パイプライン化プロセッサー３０が、それは実行されるべきであると続いて判断するならば、回復アドレスが、経路８０を経てプリフェッチユニット２０へと再発行される必要があり、この場合、その回復アドレスは、そのブランチのターゲットアドレスである。そうでなくて、ブランチ予測が正しかったならば、更なる動作が必要とはされず、強制ＰＣ信号も、経路８０を通してプリフェッチユニット２０に発行される必要は無い。
【００５３】
ブランチインストラクションが実際に実行されない１つの理由は、ブランチインストラクションはしばしば、実行時にある条件が存在するときのみに実行される条件付インストラクションであると特定されるからである。これらの様々な条件は、一組の条件符号を参照して特定され、そうして、インストラクションが実行されるならば、１つ以上の条件符号が特定の値を有さなければならないと特定する。条件符号の状態についてある予測を行い、したがってブランチインストラクションが実行されるかどうかについての予測を行うことが可能である一方で、そのブランチインストラクションがパイプライン化プロセッサー３０内の所定のポイントに到達するときのみ、条件符号の絶対的な評価を行うことができ、それは、条件符号が、インストラクションシーケンスの条件符号設定インストラクションによって更新され、そうして、条件符号の状態が、時間を経て変わるからである。
【００５４】
インストラクションシーケンス内のあるインストラクションもまた、コプロセッサーインストラクションであり、それらは、コプロセッサー１１０のパイプライン化プロセッサー１３０内で実行される。そのようなコプロセッサーインストラクションは、経路９５を通してコプロセッサー１１０のパイプライン化プロセッサー１３０へと発行される。そして、パイプライン化プロセッサー１３０は、必要であればコプロセッサーレジスター１２０を参照してコプロセッサーインストラクションを実行し、コプロセッサーインストラクションの結果をコア４０に戻す必要があるならば、それらは経路１００を通して戻される。
【００５５】
コプロセッサーインストラクションは、経路９０を通してコプロセッサーに送られるが、それはまた、コア４０のパイプライン化プロセッサー３０の種々のパイプラインステージを通されて、例えば、そのコプロセッサーインストラクションが、実行時に条件符号の状態に依存する条件付コプロセッサーインストラクションであるならば、そのコプロセッサーインストラクションが実際に実行されるべきであるかどうかについて決定をなすことが可能となる。制御信号は、所定のキューを介してパイプライン化プロセッサー３０とパイプライン化プロセッサー１３０との間を通されて、確実に、双方のパイプラインを通るコプロセッサーインストラクションの進行が、必要なポイントで同期したままであるようにする。このプロセスは、以下でより詳細に説明される。
【００５６】
図２Ａは、本発明の好ましい実施例による、図１のパイプライン化プロセッサー３０内に提供されるパイプラインの種々のパイプラインステージを例示するブロック図である。ステージ１９０では、プリフェッチユニット２０からインストラクションがフェッチされ、その後それは、復号ステージ２００で復号され、そして続いて、発行ステージ２１０に送られ、そこでインストラクションの必要とするデータが、レジスターバンク３５の適切なレジスターから得られる。
【００５７】
この時点で、プロセッサーは、２つの補助パイプラインへと、すなわち、パイプラインステージ２２０、２３０、２４０および２５０を収容する第一の補助パイプラインと、パイプラインステージ２６０、２７０、２８０および２９０を収容する第二の補助パイプラインとに枝分かれする。第一の補助パイプラインは、ロード／蓄積パイプライン２２２であり、ここでは、ロード／蓄積ユニット（ＬＳＵ）とも称する。ロード／蓄積パイプラインは、ロードまたは蓄積インストラクションを処理するのに用いられ、したがって、ロードまたは蓄積インストラクションは、パイプラインステージ２１０からパイプラインステージ２２０へと経路付けられる。パイプラインステージ２２０で行われる処理は、ロードまたは蓄積動作を有効とするのに用いられるメモリーアクセスに必要とされるアドレスを生成するものである。このプロセスは、典型的には、２つのレジスターの値を加え合わせること、またはレジスターの値をインストラクションなどの中で特定される「直接の」値に加えることを含んでいる。ステージ２３０および２４０は、２つのメモリーパイプラインステージであって、その間、ロードまたは蓄積インストラクションによって必要とされるメモリーアクセスが生じる。図２Ａに例示される発明の好ましい実施例には、２つのメモリーステージ２３０、２４０があるが、それは、ロードおよび蓄積動作が、そのような実施例においては典型的に少なくとも２クロックサイクルかかるからである。
【００５８】
メモリーアクセスが完了するとき、インストラクションは、メモリー２パイプラインステージ２４０から、ここではまた退却ステージとも称するライトバックステージ２５０へと移動する。ライトバックステージにおいては、レジスターバンク３５は、ロードまたは蓄積動作の結果を反映するよう更新の用意がなされ、その更新は、ライトバックステージの終わりに起こる。
【００５９】
加算または減算インストラクションのような算数ロジックインストラクションは、いずれもパイプラインステージ２１０から第二の補助パイプライン２６２（ここではまたＡＬＵパイプラインとも称する）のパイプラインステージ２６０へと経路付けられ、このステージは、シフトロジックを提供して演算子の要求されるシフティングを行うことを可能とする。そしてインストラクションが、パイプラインステージ２７０へと経路付けられ、それは、その算数ロジックインストラクションを実行する算数ロジックユニットを組み込んでいる。この実行ステージの後、インストラクションは、パイプラインの飽和ステージ２８０へと送られ、そこでは、必要とされる結果の飽和が行われる。例えば、算数論理インストラクションによっては、結果が所定数のビットに飽和されることを要求するものがあり、そうして一例として、１６ビットの結果が９ビットの結果へと飽和されることを必要とする。そのようなプロセスは、パイプラインステージ２８０内で行われる。要求された飽和の後、続いてインストラクションは、ライトバックステージ２９０へと送られるが、ここではそれはまた退却ステージと称される。ライトバックステージ２５０を参照して先に説明したとおり、ライトバックステージの目的は、データ処理装置の状態を更新することであり、とりわけ、ライトバックステージのインストラクションの実行の結果を考慮してレジスターバンク３５を更新することである。
【００６０】
図２Ｂは、本発明の好ましい実施例による、図１のコプロセッサー１１０のパイプライン化プロセッサー１３０内に備えられるパイプラインの種々のパイプラインステージを例示する。最初の２つのステージは、復号ステージ２０５と発行ステージ２１５である。そして、インストラクションは、５つの実行ステージ２２５、２３５、２４５、２５５および２６５を通り、その後、インストラクションは、ライトバックステージ２７５に入り、そこでコプロセッサーレジスター１２０が、ライトバックステージのコプロセッサーインストラクションを実行した結果を考慮して更新される。
【００６１】
残りの図面を参照してより詳細に説明されるとおり、プロセッサーコアとコプロセッサーの特定のパイプラインステージ間に種々のキューが備えられて、トークンをベースとした構成を用いる各キューによって結合されるパイプラインステージ間に同期が生じることが可能となる。より特定すると、１つ以上の制御キュー２８５が、ＡＬＵパイプライン２６２とコプロセッサーパイプラインとの間に備えられ、加えて、１つ以上のデータキュー２９５が、コアのＬＳＵパイプライン２２２とコプロセッサーパイプラインとの間に備えられる。
【００６２】
重大な情報の送信のために、確実に、パイプラインが正しく同期されるものとする、本発明の好ましい実施例で用いられるトークンをベースとしたパイプライン同期技法が、図３乃至１９を参照してここに説明される。以下の記述において、メインプロセッサーはコアと称され、かつまたコプロセッサーは「ＧＣＰ」または一般コプロセッサーと称される。図３乃至図１９は、以下の、番号を付けた段落を参照して説明される。
【００６３】
１  序論
コアは、インストラクションを複数のコプロセッサーに送って、それらとデータを交換する必要がある。これらのコプロセッサーは、多かれ少なかれコアと調和することが意図されており、同様にコアにパイプライン化されている。インストラクションは、コアパイプラインのフェッチステージから送り出されてコプロセッサーによって復号され、そしてそれは、復号されたインストラクションをそれ自体のパイプラインへと下す。コプロセッサーインストラクションは、条件符号がうまくいかなければ、コアによってキャンセルされ、あるいはコプロセッサーパイプライン全体が、ブランチが誤って予測された場合にはフラッシュされる。ロードおよび蓄積データもまた、コアＬＳＵとコプロセッサーパイプラインの間を通る必要がある。
【００６４】
コプロセッサーインターフェースに課せられた大きな制約は、それが、２サイクルの遅延にわたって動作しなければならないというものであり、すなわち、コアからコプロセッサーへと送られる、あるいはその逆の信号はいずれも、一方から他方へと伝播するためにクロックサイクル全体が与えられなければならない。これが意味するのは、インターフェースを横切る信号は、インターフェースの一方の側のレジスターからクロックを送られなければならず、かつ他方の側の別のレジスターへと直接クロックを送らなければならず、組み合わせのプロセスが介入してはならない。この制約が生じるのは、コアおよびコプロセッサーが相当距離離されて配置され、信号伝播時間をカバーするために大きなタイミングマージンが許容されなければならないからである。信号伝播におけるこの遅延によって、パイプラインの同期を維持するのが困難となり、緊密に結合した同期方法を除外してしまう。
【００６５】
以下の記述では、２つのパイプラインの間にいくぶんの緩みを許容し、一方確実に、重大な情報の送信のためにパイプラインが正しく配列されるようにする、トークンをベースとするパイプライン同期方法が説明される。
【００６６】
２  説明
ＧＣＰインターフェースは、一方のパイプラインから他方のパイプラインへとトークンを交換することによって、２つのパイプライン間の緩やかな同期を達成する。これらのトークンは、パイプライン間のキューを下り、また更なる情報を運搬する。多くの場合、キューの主要な目的は、処理されているインストラクションについての情報を運搬し、または一方のパイプラインに他方のパイプラインで生じている事象のことを知らせるものである。トークンは、コプロセッサーインストラクションが、関係するパイプラインステージから次のステージへと送られるたびごとに生成される。これらのトークンは、他方のパイプラインでパートナーステージによって選択され、そのステージの対応するインストラクションが動き続けることを許可するのに用いられる。各パイプラインを下るコプロセッサーインストラクションの動きは、パイプラインを接続する種々のキューに沿ったトークンの動きによって正確に整合される。そうして、一般的なコプロセッサーインターフェースは、制御駆動よりもむしろデータ駆動である。
【００６７】
２．１  コプロセッサーインストラクション
ＧＣＰは、コプロセッサーに特有の一組のインストラクションから取られる複数のインストラクションを実行する必要がある。所定のコプロセッサーは、必ずしも全ての可能なコプロセッサーインストラクションを実行するものではなく、また取り扱うことのできないこれらのインストラクションを拒絶する。以下の表１は、特定の１つのプロセッサーコア、すなわち英国ケンブリッジのＡＲＭリミティッドによって開発されたＡＲＭプロセッサーコアの１つによって支援されるコプロセッサーインストラクションを全て列挙し、各々を簡潔に説明する。
【００６８】
【表１】
2005538439.tif 000003
【００６９】
コプロセッサーインストラクションは、３つのメイングループ、すなわち、ロード、蓄積および処理インストラクションに属する。ロードおよび蓄積インストラクションは、情報がコアとコプロセッサーとの間を通ることを許可する。それらの中にはベクトル化されたものもあり、すなわち、それらは、いくつかの値が単一のインストラクションに転送されることを許可する。これには、典型的には、コプロセッサーの一組のレジスターとメモリーの連続する一組の領域との間で数語のデータを転送することが含まれている。他のインストラクション、例えば、ＭＣＲおよびＭＲＣは、コアとコプロセッサーのレジスター間でデータの転送を許可する。ＣＤＰインストラクションは、コプロセッサー内に既に保持されているデータに特定の操作を実行することを制御し、その結果をコプロセッサーレジスターに書き戻すか、または他の何らかの方法でコプロセッサーの状態を変える。どの操作が行われるべきかは、インストラクション内の操作符号フィールドによって特定される。
【００７０】
コアパイプラインは、全てのインストラクション、コアおよびコプロセッサーインストラクションの双方を取り扱う。他方コプロセッサーは、コプロセッサーインストラクションを取り扱うのみであり、それでコプロセッサーパイプラインは、時間的に大きな割合で空になっていそうである。
【００７１】
２．２  コプロセッサーパイプライン
ＧＣＰパイプラインは、コアパイプラインに非常に類似するが、フェッチステージを欠く。代わりに、インストラクションは、コアからＧＣＰパイプラインの復号ステージへと送られる。そして復号ステージは、インストラクションを復号し、ノンコプロセッサーインストラクションおよび、整合しないコプロセッサー番号を収容するいかなるコプロセッサーインストラクションをも拒絶する。いずれのベクトル化データ転送の長さもまた、この時点で決定されてコアへと返送される。そして、復号されたインストラクションは、発行ステージへと送られる。このステージは、インストラクションのこの特定の事例がアクセプトされるかどうかを決定する。そうできなければ、おそらくはそれが存在していないレジスターをアドレスするからであり、インストラクションがバウンスされて、コアにそれをアクセプトできないと知らせる。インストラクションが有効でもあり、かつ実行可能でもあるならば、それは実行パイプラインＥＸ１乃至ＥＸ６を下る。ＥＸ６（ここではまたライトバック（ＷＢ）ステージとも称する）のパイプラインの底で、インストラクションは退却を待ち、それが整合トークンをコアによって送り込まれた別のキューから受け取るときにそれを行うことができる。
【００７２】
２．３  トークンをベースとするパイプライン同期
図３は、コアおよびＧＣＰパイプライン並びにそれらの間で通信を行う同期キューを示す。各キューは、非常に短いファーストインファーストアウト（ＦＩＦＯ）バッファとして実行される。キューには、明確なフロー制御が必要とされず、それは、キューの間のパイプライン長によって、いずれのキューも任意の時間に保持できる項目の数が制限されるからである。図示されている形状では、各キューにおいて３つを超えるスロットが使用可能である必要はない。必要とされる状態情報は、キューが空であるときに指示するフラッグのみである。これは、キューの受信端でモニターされることしか必要でなく、そして関係するパイプラインステージが動き続けることができるかどうかを判定する。キューによって運搬されるいかなる情報もまた、同時に読み、作用することができる。
【００７３】
パイプライン同期の動作は、各キューの目的を説明することで記述される。
【００７４】
２．３．１  インストラクションキュー
コアは、全てのインストラクションを、そのフェッチステージ１９０を残してインストラクションキュー３００に送る。理想的には、それはコプロセッサーインストラクションで送るのみであるが、このステージにはインストラクションを復号する時間が無い。インストラクションがＧＣＰ自体の復号ステージ２０５に到着するとインストラクションを復号し、かつノンコプロセッサーインストラクションを拒絶することがＧＣＰにゆだねられている。それは、これを静かに行うことができるが、コアがこれらのインストラクションを取り除くことを知る必要がないからであって、それは、その復号ステージ２００において各インストラクションのタイプを決定することとなるからである。インストラクションキュー３００は、３スロット長である。
【００７５】
２．３．２  キャンセルキュー
コアは、それが既にコプロセッサーへと送ったインストラクションを、キャンセルすることを望むかもしれない。このようなことが起こるのは、インストラクションがその条件符号を達成できないときであって、それによって、インストラクションは、コアおよびコプロセッサーの双方におけるインストラクションの流れから取り除かれることが必要となる。キャンセルキュー３１０は、この情報をコプロセッサーへと運び、それは３スロット長である。
【００７６】
２．３．３  フィニッシュキュー
フィニッシュキュー３２０は、３スロット長であって、コプロセッサーパイプラインの各インストラクションに退却するよう許可することによって、パイプラインの端で同期性を維持する。コプロセッサーインストラクションの退却を、フィニッシュキュー３２０の端から現れるトークンに合致させるのに十分な長さだけ遅延させる必要性によって、コプロセッサーパイプラインの長さが決定される。ロードおよび蓄積インストラクションは、フィニッシュキューを利用するものではないので、ＣＤＰインストラクションのみがこのキューを必要とすることになる。ロードおよび蓄積インストラクションがどのように退却するかは、後の章で説明される。
【００７７】
２．３．４  長さキュー
コプロセッサーがインストラクションを復号したとき、それは、ベクトル化ロードまたは蓄積動作がどれだけ長くなるのかを知ることとなる。この情報は、同期トークンと一緒に長さキュー３３０に送られる。一般的な場合において、インストラクションを、フェッチステージ１９０から、情報が必要とされるＥＸ１ステージ２６０（ここではシフトステージとも称される）までコアパイプラインで送るよりも、インストラクションを受け取り、それを復号して長さを戻すほうが長くかかる。コアＥＸ１ステージにトークンが到着するのが遅れると、そのステージが１サイクルだけストールすることになる。これによって、余分なサイクルがコプロセッサーインストラクションの実行に加えられる。幸運なことに、この罰則が全てのコプロセッサーインストラクションについて被られるわけではないが、この理由は後の章で詳述する。長さキューは、３スロット長である。
【００７８】
２．３．５  アクセプトキュー
コプロセッサーは、それがインストラクションをアクセプトできず、そしてこの情報を同期トークンと一緒にアクセプトキュー３４０へと送ることを、発行ステージで決定する。コアＥＸ２ステージ２７０（ここではまたＡＬＵステージとも称される）が、対応するインストラクションを拒絶するようにそれに告げるトークンを受け取ると、それは、ＥＸ２ステージをクリアすることによって、パイプラインからインストラクションを取り除く。アクセプトキューは、３スロット長である。
【００７９】
２．３．６  フラッシュ放送
ブランチが誤って予測されているならば、コアが双方のパイプラインをフラッシュすることが必要となる。この動作は、潜在的にパイプライン全体に影響を及ぼすので、それは、キューにおいて送られるものではなく、コアからコプロセッサーへと放送され、キューと同じタイミングの制約を受ける。フラッシュ信号は、コプロセッサーによって受け取られるとき、パイプラインおよびインストラクションキュー３００がクリアされて、インストラクションにフラッシュを引き起こさせる。
【００８０】
図４は、コアおよびパイプラインステージ並びに両者を接続するキューをより詳細に示す図である。コアのロード／蓄積ユニット（ＬＳＵ）２２２もまた示されている。ＬＳＵは、蓄積キュー４００を介してコプロセッサーから蓄積データをアクセプトし、そしてロードキュー４１０を介してコプロセッサーに送るロードデータを生成する。
【００８１】
インストラクションキュー３００およびコプロセッサー復号ステージ２０５が、別々に示されているが、実際にはそれらは好ましい実施例において、単一のブロックを形成する。この理由は、２．５．４章で説明される。
【００８２】
２．４  データ転送
たいていのコプロセッサーインストラクションは、結果的に、単一の値かまたはベクトルとして、インターフェースを横切るデータの転送を生じる。したがって、データを送るのに経路が必要とされる。これらの経路によって、コアＬＳＵ２２２がコプロセッサーパイプラインと通信できるようになる。コプロセッサーは、一般的に別個のＬＳＵを有してはいないので、ロードデータの蓄積および受け取りのためのデータの生成が、直接パイプラインによって行われる。
【００８３】
図５は、コアＬＳＵ２２２とコプロセッサーパイプラインとの間の通信の概略を示す図である。
ロードおよび蓄積は、以下の章で別々に記述される。
【００８４】
２．４．１  ロード
ロードデータは、図５に示されるように、コアＬＳＵ２２２のＷＢステージ２５０によってインターフェースを横切って送られ、コプロセッサーパイプラインのＥＸ６ステージ２７５（すなわちＷＢステージ）によって受け取られる。ＥＸ６のインストラクションが退却できるようにするフィニッシュトークンを待つこと以外には、コプロセッサーパイプラインは、発行ステージを超えてストールできないので、ロードインストラクションは、常にデータがコプロセッサーに到着するのと同期してＥＸ６に到着する。したがって、ロードキューは、ダブルバッファ４１０によって実行され、それは、ＥＸ６へのロードインストラクションの到着でデータを再調整するように働く。このダブルバッファ４１０は、図４に示されている。
【００８５】
２．４．２  蓄積
コアＬＳＵは、データが到着するときにそれをアクセプトすることを保証できないので、蓄積キュー４００が必要となる。このキューは、ＬＳＵ２２２のＤＣ１ステージ２３０（ここではまたメモリー１ステージとも称される）を、コプロセッサーの発行ステージ２１５に接続する。様々な量のデータが転送されるので、ＬＳＵ２２２がデータの転送を一時的に停止できるようにするよう、蓄積キュー４００にフロー制御が必要となる。これについては、後でより詳細に記述される。
【００８６】
２．５  トークンキュー管理
トークンキュー（すなわち、ロードキュー４１０以外のキューの全て）は、その全てが３スロット長であり、同一の機能を有するが、短いＦＩＦＯとして実行される。たいていのキューは、同期したパイプラインの自己制限的な性質のために、フロー制御が必要ではないが、蓄積データキュー４００は、コプロセッサーからそこへの情報のフローが制御可能である必要がある。キューの形およびフロー制御を加えることについては、以下の章で説明される。
【００８７】
２．５．１  キューの実行
キューＦＩＦＯは、マルチプレクサ６６０、６７０を用いることによって選択される現在の出力で、３つのレジスター６００、６１０、６２０として実行される。図６は、この配置を例示する。キューは、３つのレジスター６００、６１０、６２０からなり、その各々は、それぞれフラッグ６３０、６４０、６５０と関係していて、レジスターが有効なデータを収容しているかどうかを指示する。新しいデータが、バッファＡ、すなわちレジスター６００に書き込まれることによって、キューへと移動され、そして次のレジスターが空であるもしくは空になろうとしている限り、キューに沿って移動し続ける。キューがいっぱいであるならば、最も古いデータ、したがってキューから読み出されるべき最初のものがバッファＣを占め、かつ最も新しいものがバッファＡを占める。
マルチプレクサ６６０、６７０もまた現在のフラッグを選択し、そしてそれらは、選択された出力が有効であるかどうかを指示する。
【００８８】
２．５．２  キュー変更
キューは、各サイクルでバッファＡ６００に書き込まれ、インターフェースを横切って到着するデータをアクセプトし、かつバッファＡフラッグ６３０は、データと関連する有効ビットをアクセプトする。キューが一杯でない限り、この結果、データの損失を生じることは無く、それは、バッファＡの内容が、同じサイクルの間にバッファＢ６１０へと移されるからである。キューが一杯であるならば、バッファＡ６００のローディングが抑制されてデータの損失を防止する。いずれにしても、先に記述したとおり、図３および図４に示されるパイプラインの形は、３を超えるスロットが各キューで利用可能である必要はなく、そうすると、キューが一杯であるときにインターフェースによって有効なデータが提供されることもなく、データ損失が続いて起こることも無い。３つのバッファフラッグ６３０、６４０、６５０の状態が用いられて、どのバッファが各サイクルの間にキュー出力を提供するのかが決定される。出力は常に、最も古いデータを収容するバッファによって提供される。これは、それが一杯であるならばバッファＣであり、またはバッファＢであり、あるいはそれが空であるならばバッファＡである。単一の優先符号器は、３つのフラッグを見て正しいマルチプレクサ選択信号を提供できる。また３つのフラッグの状態によって、データがキューにおいて１つのバッファから別のものへとどのように移されるのかが決定される。表２は、３つのフラッグがどのように復号されるのかを示す（「Ｘ」は「関心無し」状態を示す）。
【００８９】
【表２】
2005538439.tif 000004
【００９０】
キューが一杯でないならば、たとえそのフラッグが設定されていても、バッファＡの現在の内容はバッファＢへと移されるので、新しいデータをバッファＡへと移すことができることに注意する。
【００９１】
キューが読み取られるとき、情報を提供するバッファに関係するフラッグがクリアされなければならない。この動作は、入力動作と結合されてサイクルの終わりにバッファが上書きされるものとなるが、その間、それはキュー出力を提供する。このことは、読み取りイネーブル信号を用いて実行され、選択されたステージのフラッグをマスクし、それが入力に利用できるようにする。図７は、キューの読み取りおよび書き込みを例示する。
【００９２】
４つの有効な入力（「１」、「２」、「３」および「４」）がキューに書き込まれ、そしてそれらが到着するとバッファＡ６００にクロックを送り込む。図は、最初の入力がバッファＣ６２０に到着するまで、３つの入力がバッファからバッファへとどのようにクロックされるのかを示す。この時点で、キューからの読み取りが要求される。バッファＣが一杯であるので、データを供給することが選択される。それが読み取られているとき、更なる入力をアクセプトするのは自由であるので、それはバッファＢから値「２」を受け取り、バッファＢは、バッファＡから値「３」を受け取る。バッファＡは、バッファＢに書き込みを行うことで自由になっているので、それは、入力から値「４」をアクセプトすることができる。
【００９３】
２．５．３  フロー制御
前述したとおり、コアＬＳＵ２２２がコプロセッサーからのデータの流れを停止できるようにするのに、蓄積データは、フロー制御を必要とする。これは、停止信号をコプロセッサーに送ることによって行われる。この信号は、コプロセッサーに到達するのに２クロックサイクルかかるので、蓄積キュー４００が一杯になるという危険が起こり次第、それが生成されなければならない。キュー長が３であると、コアＬＳＵがデータ項目をアクセプトできなくなり次第、この危険が現実のものとなる。そうしてＬＳＵがデータをアクセプトできないときはいつでも、停止信号がコプロセッサーに送られる。遅延があるために、コプロセッサーは、停止信号が生じた後データを更に２サイクル送り続ける。停止信号が送られるときにもまた項目「飛行中」があるならば、キューは、それを送った後３項目をアクセプトしなければならない。図８は、この状況を例示する。
【００９４】
ＬＳＵは、最初の２つの転送ＡおよびＢをアクセプトする。しかしながら、第３の項目Ｃをアクセプトして、停止信号をポイント８００で生じさせることはできない。この信号がポイント８１０でコプロセッサーに到達するまでに、更に３つの項目Ｃ、ＤおよびＥを送っており、かつ既に６番目の項目Ｆをインターフェースに入れている。ここで停止信号を受け取っているので、コプロセッサーは、項目Ｆをインターフェースに残す。この新しい項目を見るとそれをアクセプトすることができないので、ＬＳＵ２２２は、ポイント８２０でペンディングフラッグを設定してその存在を記録する。ＬＳＵが更なるデータをアクセプトできるとき、それは、キューをアンローディングし始め、ポイント８３０で停止信号を放棄する。この放棄がポイント８４０でコプロセッサーに到達するまでに、キューは空となっていて通常のサービスを再開できる。
【００９５】
２．５．４  インストラクションの復号
メモリーからフェッチされる全てのインストラクションを、コアは、ＧＣＰインターフェース越しに送り、そこでそれはインストラクションキュー３００に入る。理想的には、それはコプロセッサーインストラクションのみで送られるべきであるが、このステージではインストラクションを復号するのに十分な時間を有していない。インストラクションが、それ自体の復号ステージ２０５に到着すると復号し、かつノンコプロセッサーインストラクションを拒絶することが、ＧＣＰにゆだねられる。それは、これを静かに行うことができるが、コアがこれらのインストラクションを取り除くのに承認を必要としないからであって、それは、それがそのときまでに、それ自体の復号ステージ２００において各インストラクションのタイプを決定するからである。これが意味するのは、コアから受け取られるインストラクションは、それがインストラクションキューに入るや否や復号されなければならないということである。したがって、インストラクションキュー３００は、標準キューの変更化バージョンであって、それは、インストラクション復号器２０５を組み込んでいる。図９は、インストラクションキューがどのように実行されるのかを示す。
【００９６】
復号器２０５は、バッファＡ９００に書き込まれるインストラクションをそれが到着するや否や復号し、そしてそれに続くバッファＢ９１０およびＣ９２０は、バッファＡのインストラクションの復号化バージョンを受け取る。ここでＡフラッグ９３０は、Ａにおけるデータが有効で、コプロセッサーインストラクションをも表すことを示す。そうして、ノンコプロセッサーまたは認識されていないインストラクションが、直ちにインストラクションキューから落とされ、決して送り続けられることはない。コプロセッサーはまた、コプロセッサーインストラクションにおけるコプロセッサー番号フィールドを比較し、かつそれをそれ自体と比べる。番号が整合しなければインストラクションは無効である。
【００９７】
２．６  インストラクションのタグ付け
時折、コアは、コプロセッサーパイプラインにおいてインストラクションを特定できるようになる必要がある。これは、どのインストラクションがフラッシュされるべきかを、コアがコプロセッサーに指示できるようにフラッシング（詳細は後でカバーされる）に必要である。したがって、コアは、コプロセッサーに送られる各インストラクションにタグを付与し、それは、任意の瞬間にパイプラインの全てのタグが一意的であるだけ十分に大きな値のプールから引き出される。好ましい実施例において、これを達成するのに１６のタグが十分であり、４ビットのタグフィールドを必要としている。タグがインストラクションに割り当てられるごとに、モジュロ１６でタグ番号が増加されて次のタグを生成する。
【００９８】
連続するコプロセッサーインストラクションが、引き続くタグを有するならば、フラッシング機構が簡略化される。これは、コプロセッサーに送られるインストラクションがコプロセッサーインストラクションであるとき、タグ番号を増加するだけで達成される。これは、インストラクションを送った後に行われ、それで、コプロセッサーインストラクションが送られる前ではなくむしろ後にタグが変わる。コアは、インストラクションを復号してそれがどんな種類のインストラクションであるかを判定するだけの時間をまだ有していないので、インストラクションを送る前にタグを増大させることはできない。コプロセッサー復号ステージ２０５がノンコプロセッサーインストラクションを取り除くとき、それは連続するタグを運ぶインストラクションの流れで取り去られる。
【００９９】
タグはまた、キューを下るトークンのシーケンスがコアおよびコプロセッサーパイプラインを下るインストラクションのシーケンスと整合することを確かめるのにも用いられる。
【０１００】
３  動作
ここで、ＧＣＰインターフェースの機能の仕方を、行われる種々の動作と起こる事象とを例示して説明する。説明に伴う図は、トークンが種々のキューを下って２つのパイプライン間のインターフェースを横切ることを示す。各キューの識別は、開始および終了ポイントを観察し、図３を参照することによって推定される。
【０１０１】
３．１  通常動作
図１０は、コアおよびコプロセッサーパイプラインの通常の動作を示す。
通常の動作において、コアは、全てのインストラクションを、インストラクションキュー３００を介してコプロセッサーへと送り、そしてインストラクションがコプロセッサーインストラクションであるならば、タグを増加させる。コプロセッサーは、インストラクションを復号して、それがコプロセッサーインストラクションではないならば、もしくはそれが誤ったコプロセッサー番号を収容しているならば、それを捨てる。そして各コプロセッサーインストラクションは、パイプラインを下ってそれが発行ステージへと入っていくとき、トークンを長さキュー３３０に送る。そして、インストラクションは、それがキャンセルキュー３１０からトークンを受け取るまで発行ステージに残る。インストラクションがキャンセルされることをキャンセルトークンが要求しないならば、それはＥＸ１ステージにまで移行し続け、トークンをアクセプトキュー３４０へと入れる。そしてインストラクションは、それがＥＸ６ステージに到達するまでパイプラインを下る。この時点でそれはフィニッシュキュー３２０からトークンを受け取るのを待っているが、フィニッシュキューはそれを退却させることができる。
【０１０２】
図１０は、長さキュー３３０を下るトークンにコプロセッサーが応答するのにかかる時間によって、トークンを待つ間に、コアパイプラインが、どのように、インストラクションＡについてそのＥＸ１ステージでストールするようになるのかを示す。続いて、この遅延によって、インストラクションＢがその発行ステージを離れるときコアの送るトークンを、コプロセッサーパイプラインステージＥＸ１においてＢが待つようになる。結果として、インストラクションＢは、ＥＸ６に到着するのが遅れ、そしてフィニッシュキューのトークンがそこで１サイクル待っていることを見出す。しかしながら、インストラクションＣがパイプラインの底に到着するまでに、２つのパイプラインは一旦より一層同期する。
【０１０３】
図１０から、コプロセッサーパイプラインを実行することで１サイクルのタイミングペナルティが生じることが明らかであるが、それは、インストラクションがコアの発行ステージでストールするからである。しかしながら、次の２つのインストラクションは、ペナルティが共有されるようにこのストールを利用する。パイプラインを下る全てのインストラクションがコプロセッサーインストラクションであるならば、３つ目のインストラクションごとにストールが起こり、そうしてペナルティは、コプロセッサーインストラクションごとにサイクルの余分な３分の１にまで下がる。他方、コプロセッサーインストラクションがパイプラインにおいてまばらであるならば、各コプロセッサーインストラクションについて、単一サイクルペナルティが被られる。そうして平均タイミングペナルティは、コプロセッサーインストラクションの割合が上がると低下する。
【０１０４】
３．２  ストール
図１１は、コプロセッサーがその発行ステージにおいてストールするとき、コアおよびコプロセッサーパイプラインがどのように振舞うのかを示す。
【０１０５】
コプロセッサーインストラクションＡがパイプラインを下る経路は、インストラクションがコアの発行ステージおよびコプロセッサーの復号ステージから送り出されるとき、トークンの交換があって、通常の方法で開始する。そして、インストラクションはコプロセッサーの発行ステージでストールし、トークンがアクセプトキュー３４０を介してコアのＥＸ２ステージに送られるのを遅延させ、したがってそれは、それがそれを待つ間ストールする。インストラクションが結局はコプロセッサーのＥＸ１ステージへと移行し続けるとき、それは、キャンセルキュー３１０を介してインストラクションによって前もって掲示されていたトークンを、それがコアの発行ステージを離れるときにピックアップする。
【０１０６】
図１１はまた、一度にキューにおいて待つことのできる項目の数を、パイプラインそれ自体が、どのように制限するのかを示す。インストラクションＡがＥＸ２においてストールされて、トークンがアクセプトキュー３４０に現れるのを待つ間、それは、インストラクションＣが移行し続けてトークンをキャンセルキュー３１０に入れるのを防止するがしかし、インストラクションＢは既にそれを行っている。それによって、キャンセルキューで待っている項目の数は２に限定される。同様の機構が、トークンをパイプライン間で送る他のキューにおいても働いている。
【０１０７】
３．３  キャンセル
図１２は、コプロセッサーインストラクションが、その発行ステージにおいてコアによってキャンセルされるとき、どのように、コアおよびコプロセッサーパイプラインが振舞うのかを示す。
インストラクションＣは、通常コアパイプラインを下って進み、それが発行ステージに到達するまで、トークンをインストラクションキュー３００に送る。この時点で、それはトークンをキャンセルキュー３１０に送り、インストラクションがキャンセルされるべきであることを指示する。これを行うと、それは（影によって指示されるように）コアパイプライン内のファントムに変わり、ＥＸ２ステージまで通常通りパイプラインを下り続ける。これが行われて、それが、長さキュー３３０およびアクセプトキュー３４０を介してコプロセッサーパイプラインのそれの相手方によって送られるトークンをピックアップできるものとなる。これらは、コプロセッサーキューのインストラクションが、キャンセルキュー３１０からのトークンを読む前に送られている。これによって、送っているインストラクションの各々に対応するインストラクションが、他方のパイプラインで受け取られていることを確認することで、キューを下るトークンの経路が正しいものであり続ける。インストラクションＣは、最終的に、それがコアのＥＸ２ステージを離れるとき終了するが、それは、もはやトークンをピックアップする必要が無くなるからである。ＥＸ１ステージのキャンセルキュー３１０からキャンセルトークンをピックアップすると直ちに、コプロセッサーパイプラインのインストラクションは終了する。
【０１０８】
３．４  バウンス
図１３は、コプロセッサーインストラクションがコプロセッサーによってバウンスされる（アクセプトされない）とき、コアおよびコプロセッサーパイプラインがどのように振舞うのかを示す。
インストラクションＣは、通常のやり方でコプロセッサーパイプラインを通り、それが発行ステージに到達するまでトークンを長さキュー３３０に送る。この時点で、それは、トークンをアクセプトキュー３４０に送り、インストラクションがコプロセッサーによってアクセプトされないことを指示する。これを行うと、それはファントムに変わって、それが終了するときにステージＥＸ１を離れるまで、それは通常通りパイプラインを下り続ける。これを行って、それが、コアパイプラインの相手方によってキャンセルキュー３１０に送られるトークンをピックアップできるようにする。コアパイプラインのインストラクションは、ＥＸ２ステージのアクセプトキュー３４０からアクセプトトークンをピックアップすると直ちに終了する。
【０１０９】
コプロセッサーパイプラインでバウンスされているインストラクションの振る舞いは、コアパイプラインでキャンセルされているものとほとんど同じであり、そしてこの機構の良い例が、コアによってキャンセルされ、およびまたコプロセッサーによってバウンスされるインストラクションをパイプラインが取り扱う方法で示される。図１４は、この状態を示す。
【０１１０】
この状態において、唯一の目的が、他のパイプラインからトークンをピックアップすることであるか、またはコプロセッサーの場合には、フラッシュの間に整合のためのタグを提供することである、ファントムを、双方のパイプラインが作り出している。各々が、トークンを受け取ってそれに終了するよう告げるが、この情報は冗長であり、それは、ファントムとしてそれが既に終りを決定付けられているからである。
【０１１１】
３．５  フラッシュ
図１５は、コアがコプロセッサーにフラッシュ信号を送るとき、コアおよびコプロセッサーパイプラインがどのように振舞うのかを示す。
発行からＥＸ４に含まれるまでのいずれのステージでも、コアによってフラッシュが誘発される。この情報は、一連のキューを通してコプロセッサーパイプラインに送ることができるが、この構成は、不必要にキューを増加させる。その代わりにタグ付けが用いられて、単一の放送信号がコプロセッサーに送られて、対応するタグを送ることによってフラッシュされるべきインストラクションを識別できる。そして、コプロセッサーは、フラッシュタグと同じまたはそれより後のタグを有する全てのインストラクションを見出し、そしてそれらを取り除かなければならない。キューを下るトークンと違い、フラッシュ信号は固定遅延を有していて、コアにおけるフラッシュとコプロセッサーにおけるフラッシュとの間のタイミング関係が正確に知られるものとなっている。
【０１１２】
図１５において、インストラクションＣは、それがコアのＥＸ１ステージに到達するとき、フラッシュを誘発する。したがって、それは次のサイクルで終了し、パイプラインにおいてそれに続く全てのインストラクションをそれと一緒に持ち去る。それが終了すると、それは放送信号４５０（図において点線の矢印で示されている）をコプロセッサーパイプラインに送る。コプロセッサーがこの信号を受け取るとき、それは整合するタグを求めてパイプラインを調べ、そしてそのポイントから上の全てのインストラクションを取り除き、それらは、図１５においてインストラクションＣ、ＤおよびＦ（いずれにしても終了しかかっている復号ステージのコアインストラクション）である。インストラクションＡおよびＢは、フラッシングポイントに先行してパイプラインを下り続ける。
【０１１３】
たいていのトークンキューもまた、フラッシングを必要とし、そしてこれもまた、各インストラクションに添付されるタグを用いて行われる。トークンキューの受け取り端でステージが通される前に整合が見出されるならば、トークンキューは単純にクリアされる。そうでなければ、それは、キューのタグを整合することによって適切にフラッシュされなければならない。この動作は、蓄積キュー４００を含んで、フィニッシュキュー３２０を除く全てのキューで行われなければならない。したがって、コプロセッサーは、インストラクション３００およびキャンセル３１０キューをフラッシュしなければならず、かつコアは、長さ３３０、アクセプト３４０および蓄積４００キューをフラッシュしなければならない。
【０１１４】
フラッシング動作は、フラッシュ信号が受け取られるや否やコプロセッサーによって行われ、そして簡略化されるが、それはキューが他の動作を行わないからである。これが意味するのは、フラッシングはキューの更新と結合される必要はないということである。図１５を吟味すると、フラッシュされるキューに何も影響することが起こらないフラッシュに続いて単一のサイクルがあることが示されており、それは、キューをフラッシュする動作を行うのによい機会である。しかしながら、このことは、ロードまたは蓄積キューには当てはまらず、それらは後で説明される。
【０１１５】
フラッシュコマンドは、それと関連して、フラッシュがどこから始まるべきかを指示するタグ値を有する。これは、全てのインストラクションによって運ばれるタグと整合される。キューがフラッシュされるべきであるならば、同じまたはより新しいタグを備える各バッファがクリアされる。図１６は、キューのフラッシングを例示する。
【０１１６】
キューの各バッファ６００、６１０、６２０は、それと関連してタグ比較器６０４、６１４、６２４を有する。フラッシュタグ６３２は、各比較器に提示されて、キューに保持される有効なインストラクションの各々に属するタグ６０２、６１２、６２２と比較される。バッファのタグがフラッシュタグ以上であれば、キューのバッファは、その満杯フラッグがクリアされており、それが現在空であることを指示する。
【０１１７】
３．６  退却
インストラクションがコプロセッサーパイプラインの底に到達するとき、それは退却することを望む。それがどのように退却するかは、そのインストラクションの種類およびそれが反復されるか否かに依存する。ＣＤＰインストラクションは、それが、フィニッシュキュー３２０でそれに合致するトークンを見出すときに退却する。
ロードおよび蓄積インストラクションが退却する条件は、後の章で説明される。
【０１１８】
４  データ転送
４．１  一般原理
データ転送は、コア側では、ＬＳＵ２２２によって管理され、またコプロセッサー側では、パイプライン自体に管理される。転送は、単一の値であるかベクトルであり得る。後者の場合、コプロセッサーは、発行ステージでインストラクションを反復することによって、多重転送を有効に一連の単一転送へと変換する。これによって、転送されるべき、各項目についてのロードまたは蓄積インストラクションの実例が作り出される。インストラクションは、それが反復する間、コプロセッサー発行ステージに留まり、それ自体のコピーを作り出す。ロードについて、これらはパイプラインを下って、それらがロードキュー４１０から各データ項目を、それがＥＸ６ステージに到達するときにピックアップできるようにする。蓄積について、反復されるインストラクションは、発行ステージから出されないが、それらが作り出されると消失して、反復するごとに蓄積キュー４００に入れるために蓄積データを生成する。図１７は、ロードインストラクションＣの例を示す。反復されるインストラクション（大文字で示されている）の最初はヘッドであり、他のもの（小文字で示されている）はテールである。示されている例において、ベクトル長が４であり、それで１つのヘッドと３つのテールがある。
【０１１９】
ヘッドインストラクションのみが、コアパイプラインとのトークン交換に関係し、それは、この方法でインストラクションを反復するものではなく、テールインストラクションは、コプロセッサーパイプラインを静かに下る。反復されるロードインストラクションがキャンセルされるかフラッシュされるとき、全てのテールインストラクション（同じタグを持っている）は、パイプラインから取り除かれなければならない。ヘッドインストラクションのみが、キャンセルされるときファントムとなり、テールは完全に取り除かれる。
【０１２０】
４．２  ロード
ロードデータは、コアＬＳＵ２２２のＷＢステージ２５０から現れ、ロードキュー４１０からコプロセッサーＥＸ６ステージ２７５によって受け取られる。ベクトル化されたロードの各項目は、反復されるロードインストラクションの１つの実例によってピックアップされる。パイプラインのタイミングは、ロードインストラクションが常に用意されているか、各データ項目をピックアップするようＥＸ６に丁度到着したというようなものである。ロードインストラクションがＥＸ６に到着しているが、ロード情報がまだ現れないならば、ロードインストラクションはＥＸ６でストールしなければならず、コプロセッサーパイプラインの残りをストールする。そうして、ロードインストラクションは、それがロードデータに合致するとき、退却する。
【０１２１】
４．２．１  ロードバッファ
コプロセッサーＥＸ６ステージにおいてロードインストラクションでロードデータの正しい配列を達成するために、データはコプロセッサーに到達するとき、二重にバッファされる必要がある。図１８により例示されている。
【０１２２】
ロードデータバッファは、パイプラインレジスターとして機能し、それでフロー制御を必要とせず、またタグを運ぶ必要も無い。唯一の要件は、データと有効ビットである。コアＬＳＵ２２２のＷＢステージ２５０から現れるロードデータの各項目はコアバッファ１０００に入れられ、それの対応する有効ビットがバッファ１０３０に蓄積される。そして、データ項目と関連する有効ビットがインターフェースを超えてＧＣＰへと送られ、そこでそれは、今度はバッファ１０１０、１０４０および１０２０、１０５０を通って送られる。図１９は、コアのロードインストラクションが、どのように、コアＬＳＵに入り、ロードデータの一項目の生成を開始し、そしてそれがコアインターフェースバッファ１０１０とＧＣＰの二重バッファ１０２０、１０３０を介してコプロセッサーへと送られ、ＥＸ６でコプロセッサーロードインストラクションと合致するのかを示している。
【０１２３】
ロード転送のために働くこの形のデータバッファリングについて、インストラクションが常に、コアＥＸ４ステージの対応するインストラクションが到着するのと同時またはその前に、コプロセッサーＥＸ６に到着するような方法で、２つのパイプラインを同期する必要がある。コアからフィニッシュキュー３２０を下るトークンが、対応するロードデータ項目がロードデータパイプラインバッファの端に到着するのと同時に到着することもまた必要である。これらの条件は、コプロセッサーパイプラインが、フィニッシュキュー３２０にトークンが無いことに応答して、発行ステージの後にストールするだけであるならば、かつ、ＬＳＵ２２２が、アクセプトキュー３４０からのトークンを、それによってロードインストラクションがそのＡＤＤステージ２２０から動き続けることができるようになる前に見るならば、満足される。加えて、ＷＢストールは、ＬＳＵからロードデータを送るのを遅延させなければならない。
【０１２４】
４．２．２  フラッシュ
コアＥＸ４ステージ２９０を含まないフラッシュは、ロードデータバッファに影響を及ぼすことができず、ロード転送は正常に完了する。フラッシュがコアＥＸ４ステージのインストラクションによって開始されるならば、これはロードインストラクションではなく、それは、ロードインストラクションがフラッシュを誘発できないからである。フラッシュポイントの後ろのコプロセッサーロードインストラクションはいずれも、それらがコプロセッサーパイプラインのＥＸ６ステージ２７５までにも至るならば、フィニッシュトークンが無いためにストールすることとなり、そうしてデータ転送は全く起こることとはならない。ロードデータバッファ４１０のいずれのデータも、パイプラインが再ローディングする間のフラッシュデッド期間に自然に終了する。
【０１２５】
４．２．３  キャンセル
ロードインストラクションがキャンセルされるならば、ヘッドおよびいずれのテールの双方とも取り除かれなければならず、ヘッドは、ファントムで置き換えられるのみである。コプロセッサーＥＸ１ステージ２２５でキャンセルが生じると、データ転送が起こることにはならず、したがってロードデータを取り扱うのに特別な方策が講じられるものではない。
【０１２６】
４．２．４  退却
ロードインストラクションがコプロセッサーパイプラインの底に到達するとき、それは、ロードデータバッファ４１０の端で、データ項目を見出さなければならない。インストラクションがヘッドインストラクションであるならば、それはまた、フィニッシュキュー３２０でトークンを見出さなければならない。テールインストラクションは、そのロードデータが提示されていることのみを必要とし、フィニッシュキューからのトークンを必要としない。
【０１２７】
４．３  蓄積
蓄積データは、コプロセッサー発行ステージ２１５から現れ、コアＬＳＵ  ＤＣ１ステージ２３０によって受け取られる。ベクトル化された蓄積の各項目は、蓄積インストラクションがコプロセッサー発行ステージで反復すると生成される。反復された蓄積インストラクションは、さらに使われることは無く、コプロセッサーパイプラインを下されない。ヘッドインストラクションのみがパイプラインを下る。これが意味するのは、蓄積反復が一旦開始されると、コアによって明確に止められるまで止まらないというものである。とりわけ、蓄積ヘッドインストラクションが、コプロセッサーパイプラインのＥＸ１ステージでストールされるならば、反復が続き、そしてストールによって影響されない。
【０１２８】
４．３．１  蓄積データキュー
蓄積データ転送は、ＬＳＵ２２２によって任意の時間に止められるので、蓄積データキュー４００が必要とされる。更には、蓄積データベクトルが任意の長さであるので、フロー制御が必要とされ、これについては２．５．３章で既に説明されている。３つのスロットのキューの長さは、丁度、データを損失せずにフロー制御を用いることができるのに充分である。
【０１２９】
４．３．２  フラッシュ
蓄積インストラクションがフラッシュに含まれるとき、蓄積データキュー４００は、コアによってフラッシュされなければならない。コアがコプロセッサーにフラッシュを通知した後、２サイクル間キューは充填し続けるので（信号伝播遅延による）、コアは、蓄積データキュー４００フラッシュを行う前に、２サイクル間遅延しなければならない。フラッシュの後のデッド期間は、これを行うのに充分なだけ長く続く。
【０１３０】
４．３．３  キャンセル
コアが蓄積インストラクションをキャンセルするならば、それは、それが蓄積データを受け取り始める前にインストラクションがキャンセルされることに気付く。コプロセッサーがキャンセル信号を受け取ってそれに働きかけるまでに、それは、既に１つのデータ項目を蓄積データキュー４００に送っている。したがって、コアは、キャンセルの後、この信号項目を取り除き、かつ処理しなければならない。これが達成されるのは、デッドデータをピックアップするために、単一の蓄積インストラクションファントムを、ＬＳＵ２２２を通して送ることによってである。代わりに、発行ステージがキャンセルキューを見越して、蓄積インストラクションがデータを送り始める前にキャンセルされないということを決定してもよい。
【０１３１】
４．３．４  退却
蓄積インストラクションは、フィニッシュトークンキュー３２０を利用しないので、コプロセッサーパイプラインの底に到達するや否や退却する。
【０１３２】
５．  複数のコプロセッサー
コアに取り付けられるコプロセッサーが２つ以上あってもよく、そうして複数のコプロセッサーを取り扱うのに何らかの手段が必要とされる。経済的な理由から、コプロセッサーインターフェースはできる限り複製されないようにすることを確認するのが重要である。とりわけ、コプロセッサーは、長さ３３０、アクセプト３４０および蓄積データ４００キューを共有し、それらはコアによって維持される。これらのキューが共有されることとなると、１つのコプロセッサーのみが任意の時間にキューを用いることとなる。このようなことが最も容易に保証されるのは、任意の時間に１つのコプロセッサーしかアクティブでないようにすることによってである。一般的に言って、これは重大な制限ではなく、それは、１つのコプロセッサーしか任意の時間に用いられないからである。典型的には、プロセッサーは、ドライバソフトウェアを通して駆動され、それは１つのコプロセッサーだけを駆動する。ドライバソフトウェアを呼び出してそれから戻ることで、１つのコプロセッサーを使うことと異なるコプロセッサーを使うこととの間に、確実にいくつかのコアインストラクションがあるようにする。
【０１３３】
５．１  相互結合の配慮
１つのコプロセッサーしか任意の時間にコアと通信できないならば、全てのコプロセッサーは、コアからのＧＣＰインターフェース信号を共有する。コプロセッサーからコアへの信号は、全てのコプロセッサーがインアクティブのとき出力をゼロに保持するならば、単に一緒にＯＲ化されている。
【０１３４】
５．２  コプロセッサーの選択
コプロセッサーは、コアからの信号によってイネーブルされる。好ましい実施例には、これらの信号が１６あり、各々のコプロセッサーに１つずつであって、任意の時間に１つだけがアクティブである。加えて、コプロセッサーへのインストラクションにはコプロセッサー番号が含まれていて、コプロセッサーがそれら自身の番号と整合しないインストラクションを拒絶できるようにし、またコアインストラクションを拒絶する。
【０１３５】
５．３  コプロセッサーの切り替え
異なるコプロセッサーについてその最後にアドレスされたものに向かうコプロセッサーインストラクションを、コアが復号するとき、それは、先のコプロセッサーインストラクションが退却してしまうまで、このインストラクションをストールする。これによって、確実に、現在選択されているコプロセッサーの全ての活動が止まってしまう。そして、コプロセッサーの選択が切り替えられて、最後にアクティブであったコプロセッサーをディスエーブルし、新しいコプロセッサーをアクティベートする。新しいコプロセッサーインストラクションを受け取っているコプロセッサーは、それを無視してディスエーブルされる。したがって、インストラクションは、コアに嫌われる必要があり、ここで新しくアクティベートされたコプロセッサーによってアクセプトされる。
【０１３６】
ここには発明の特定の実施例が記述されているが、発明はそれらに限定されるものではなく、かつ発明の範囲内で多くの変更および付加がなされることが明らかである。例えば、添付した従属請求項の特長は、本発明の範囲から逸脱することなく、独立請求項の特長と様々に組み合わせることができる。
【図面の簡単な説明】
【０１３７】
【図１】本発明の好ましい実施例の同期技法が実行されるシステムのブロック図である。
【図２Ａ】本発明の好ましい実施例によるパイプライン化プロセッサーを概略的に示す図である。
【図２Ｂ】本発明の好ましい実施例によるパイプライン化コプロセッサーを概略的に示す図である。
【図３】本発明の好ましい実施例によるプロセッサーコアのパイプラインステージ、コプロセッサーのパイプラインステージおよびそれらの間を通信する同期制御キューを概略的に示す図である。
【図４】種々のパイプラインおよびそれらを接続するキューを示すより詳細なブロック図である。
【図５】メインプロセッサーのロード蓄積ユニットとロードおよび蓄積動作のためのコプロセッサーパイプラインの間の通信を概略的に示す図である。
【図６】本発明の好ましい実施例によるキューの構造を示す図である。
【図７】キューの読み取りおよび書き込みを示すタイミング図である。
【図８】本発明の好ましい実施例において用いられるフロー制御の概念を示す図である。
【図９】本発明の好ましい実施例においてどのようにインストラクションキューが実行されるのかを示す図である。
【図１０】コアとコプロセッサーパイプラインとの間の相互作用の通常の動作を概略的に示す図である。
【図１１】本発明の１つの実施例によって、コプロセッサーがその発行ステージでストールするとき、コアおよびコプロセッサーパイプラインがどのように振舞うかを示す図である。
【図１２】本発明の１つの実施例によって、コプロセッサーインストラクションがその発行ステージでコアによってキャンセルされるとき、コアおよびコプロセッサーパイプラインがどのように振舞うかを示す図である。
【図１３】本発明の１つの実施例によって、コプロセッサーインストラクションがコプロセッサーによってバウンスされるとき、コアおよびコプロセッサーパイプラインがどのように振舞うかを示す図である。
【図１４】本発明の１つの実施例によって、コアによってキャンセルされ、またコプロセッサーによってバウンスされるインストラクションをパイプラインが取り扱う方法を示す図である。
【図１５】本発明の１つの実施例によって、コアがコプロセッサーにフラッシュ信号を送るとき、コアおよびコプロセッサーパイプラインがどのように振舞うかを示す図である。
【図１６】本発明の１つの実施例で用いられる、キューをフラッシュするアプローチを概略的に示す図である。
【図１７】本発明の１つの実施例による、ベクトル化ロードインストラクション「Ｃ」についてのインストラクション反復を示す図である。
【図１８】本発明の１つの実施例による、ロードデータのバッファリングを概略的に示す図である。
【図１９】本発明の１つの実施例による、どのようにして、コアのロードインストラクションが、コアのロード蓄積ユニットに入ってロードデータの１つの項目の生成を開始し、そしてそれがコプロセッサーに送られるのかを示す図である。
【図１】
2005538439.tif 000005
【図２Ａ】
2005538439.tif 000006
【図２Ｂ】
2005538439.tif 000007
【図３】
2005538439.tif 000008
【図４】
2005538439.tif 000009
【図５】
2005538439.tif 000010
【図６】
2005538439.tif 000011
【図７】
2005538439.tif 000012
【図８】
2005538439.tif 000013
【図９】
2005538439.tif 000014
【図１０】
2005538439.tif 000015
【図１１】
2005538439.tif 000016
【図１２】
2005538439.tif 000017
【図１３】
2005538439.tif 000018
【図１４】
2005538439.tif 000019
【図１５】
2005538439.tif 000020
【図１６】
2005538439.tif 000021
【図１７】
2005538439.tif 000022
【図１８】
2005538439.tif 000023
【図１９】
2005538439.tif 000024
【国際調査報告】
2005538439.tif 000025
2005538439.tif 000026
2005538439.tif 000027