(57)【要約】【課題】処理パイプラインを含み、その処理パイプラインを通る命令のフローの制御に関する、データを処理する装置及び方法を提供する。【解決手段】処理システム２は、実行すべき命令をメモリ６，８からフェッチするフェッチ回路１２を含んだ処理パイプライン１２，１４，１６，１８，２８を含む。バッファ制御回路３４は、命令バーストを区切る明確なヒント命令、又は同期命令と共にバーストのパラメータを指定する所定の構成データといった、バッファ制御回路に対してトリガーするプログラマブルトリガーに応答して、処理パイプライン（例えば発行回路１６）のストール可能箇所をストールさせ、所定の開始命令から開始するフェッチされた命令を１つ以上のバッファ内に蓄積し、これらの命令が蓄積されると、パイプラインのストール可能箇所を再開させる。【選択図】図１
2018206375.tif 000002
【特許請求の範囲】
【請求項１】
実行すべき命令をメモリからフェッチするフェッチ回路を有する処理パイプラインと、
前記フェッチ回路によって前記メモリからフェッチされた命令を格納する１つ以上のバッファと、
プログラマブルトリガーに応答して、
前記１つ以上のバッファの下流にある前記処理パイプラインのストール可能箇所をストールさせ、
所定の開始命令から開始する或る数の命令を備えた命令バーストを前記１つ以上のバッファ内に蓄積し、
前記１つ以上のバッファ内に前記或る数の命令が蓄積されると、前記処理パイプラインの前記ストール可能箇所を再開させる
バッファ制御回路とを備える、データを処理する装置。
【請求項２】
前記処理パイプラインが、
前記命令を実行する実行回路と、
前記フェッチ回路によって前記メモリからフェッチされた命令を、実行のために、前記実行回路に発行する発行回路とを備える、請求項１に記載の装置。
【請求項３】
前記ストール可能箇所が前記発行回路を備える、請求項２に記載の装置。
【請求項４】
前記プログラマブルトリガーが、
前記所定の開始命令をプログラマブルに指定する開始点パラメータ及び
前記或る数の命令をプログラマブルに指定するバースト長パラメータの少なくとも１つを備える、請求項１に記載の装置。
【請求項５】
前記或る数が固定されたバースト長を備える、請求項１に記載の装置。
【請求項６】
前記プログラマブルトリガーが、
前記命令バーストの開始をマークするヒント命令及び
前記命令バーストの終了をマークするヒント命令の少なくとも１つを実行することを含む、請求項１〜５のいずれか一項に記載の装置。
【請求項７】
前記プログラマブルトリガーが、
プログラマブルフラグを構成レジスタ内に設定して、前記ストール、前記蓄積及び前記再開の動作を、実行すべき命令の流れの中の同期命令と同期して行うように、前記バッファ制御回路を準備することを含む、請求項１〜５のいずれか一項に記載の装置。
【請求項８】
前記処理パイプラインが、前記フェッチ回路によってフェッチされた命令をデコードするデコード回路を備える、請求項１〜７のいずれか一項に記載の装置。
【請求項９】
前記１つ以上のバッファが、前記フェッチ回路によってフェッチされた命令を、前記命令が前記フェッチ回路の下流にある前記処理パイプラインに供給される前に格納する、請求項１〜８のいずれか一項に記載の装置。
【請求項１０】
前記１つ以上のバッファが、前記デコード回路によってデコードされた命令を、前記命令が前記デコード回路の下流にある前記処理パイプラインに供給される前に格納する、請求項８に記載の装置。
【請求項１１】
前記１つ以上のバッファが、前記プログラマブルトリガーと関係なく、前記処理パイプラインの動作中に、命令の一時的な格納も行う、請求項１〜１０のいずれか一項に記載の装置。
【請求項１２】
前記１つ以上のバッファが、前記フェッチ回路による、前記メモリから前記１つ以上のバッファへの前記命令バースト内の前記命令のフェッチのレイテンシと関係なく、決定的タイミングで、前記命令バースト内の命令を前記処理パイプラインに供給する、請求項１〜１１のいずれか一項に記載の装置。
【請求項１３】
前記命令バーストが、前記装置内の障害をテストするための内蔵セルフテスト命令を備える、請求項１〜１２のいずれか一項に記載の装置。
【請求項１４】
前記実行回路が前記命令バーストをアトミックに実行する、請求項１〜１３のいずれか一項に記載の装置。
【請求項１５】
格納フォワーディング回路であって、
進行中のデータ書き込みの既定の書き込みデータを、前記既定の書き込みデータが前記メモリに書き込まれる前に、既定のメモリアドレスにバッファし、
前記データ書き込みがまだ進行中の間、前記格納フォワーディング回路内に格納された前記既定の書き込みデータによって、前記既定のアドレスの後続のデータ読み取りを処理する格納フォワーディング回路を備える、請求項１〜１４のいずれか一項に記載の装置。
【請求項１６】
前記バッファ制御回路が、エスケープイベントを検出し、前記エスケープイベントが検出されると前記１つ以上のバッファ内への前記蓄積を停止させ、前記ストール可能箇所を再開させるエスケープ回路を備える、請求項１〜１５のいずれか一項に記載の装置。
【請求項１７】
前記エスケープイベントが、
前記メモリから前記或る数の命令がフェッチされるのに要する時間が閾値時間を超えること及び
１つ以上のモニタイベントが発生していることの少なくとも１つを備える、請求項１６に記載の装置。
【請求項１８】
実行すべき命令をメモリからフェッチするフェッチ手段を有する処理パイプラインと、
前記フェッチ手段によって前記メモリからフェッチされた命令を格納する１つ以上のバッファ手段と、
プログラマブルトリガーに応答して、
前記１つ以上のバッファ手段の下流にある前記処理パイプラインのストール可能箇所をストールさせ、
所定の開始命令から開始する或る数の命令を備えた命令バーストを前記１つ以上のバッファ手段内に蓄積し、
前記１つ以上のバッファ手段内に前記或る数の命令が蓄積されると、前記処理パイプラインの前記ストール可能箇所を再開させる
バッファ制御手段とを備える、データを処理する装置。
【請求項１９】
実行すべき命令をメモリからフェッチすることと、
プログラマブルトリガーに応答して、
１つ以上のバッファの下流にある処理パイプラインのストール可能箇所をストールさせ、
所定の開始命令から開始する或る数の命令を備えた命令バーストを、前記１つ以上のバッファ内に蓄積し、
前記１つ以上のバッファ内に前記或る数の命令が蓄積されると、前記処理パイプラインの前記ストール可能箇所を再開させることとを含む、データを処理する方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示はデータ処理システムの分野に関する。より具体的には、本開示は、処理パイプラインを含むデータ処理システム、及び、その処理パイプラインを通る命令のフローの制御に関する。
【背景技術】
【０００２】
命令フェッチ、命令デコード、命令発行、命令実行及びライトバックに対応するステージといった複数のステージを含んだ処理パイプラインを含むデータ処理システムの提供が知られている。こうしたパイプライン化された処理は、並列処理により、命令処理能力の向上に貢献する。処理パイプラインの命令フェッチステージは、これらの命令を格納しているメモリシステムから、実行すべき命令をフェッチするように機能する。命令をフェッチするのに要する時間は、命令がキャッシュされているか否か、命令を遅いメインメモリからフェッチしなければならないか否か、或いは命令のフェッチによって仮想から物理へのページマッピング障害が引き起こされるか否か等の要因に応じて、大幅に変動しうる。このため、命令をフェッチするのに要する時間は数桁分も変動することがある。
【０００３】
この変動のために、或るときには全ての命令が遅延なくキャッシュできて使用可能となるのが、別の場合では同じ命令について、命令フェッチステージにおいてメインメモリ及び場合によりページテーブルウォークを伴う複数の高レイテンシフェッチ操作を行うことが必要となるといったように、所定の一連の命令の実行に要する時間に差異が生じる。フェッチは、様々なソース、又はフラッシュやＤＤＲメモリといった遅延の異なる様々な種類のメインメモリから行われうる。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本開示の少なくとも幾つかの実施例では、実行すべき命令をメモリからフェッチするフェッチ回路を有する処理パイプラインと、フェッチ回路によってメモリからフェッチされた命令を格納する１つ以上のバッファと、プログラマブルトリガーに応答するバッファ制御回路であって、１つ以上のバッファの下流にある処理パイプラインのストール可能箇所をストールさせ、所定の開始命令から開始する複数の命令を備えた命令バーストを、１つ以上のバッファ内に蓄積し、１つ以上のバッファ内に複数の命令が蓄積されると、処理パイプラインのストール可能箇所を再開させるバッファ制御回路とを備える、データを処理する装置が提供される。
【０００５】
本開示の少なくとも幾つかの実施例では、実行すべき命令をメモリからフェッチするフェッチ手段を有する処理パイプラインと、フェッチ手段によってメモリからフェッチされた命令を格納する１つ以上のバッファ手段と、プログラマブルトリガーに応答するバッファ制御手段であって、１つ以上のバッファ手段の下流にある処理パイプラインのストール可能箇所をストールさせ、所定の開始命令から開始する複数の命令を備えた命令バーストを、１つ以上のバッファ手段内に蓄積し、１つ以上のバッファ手段内に複数の命令が蓄積されると、処理パイプラインのストール可能箇所を再開させるバッファ制御手段とを備える、データを処理する装置。
【０００６】
本開示の少なくとも幾つかの実施例では、実行すべき命令をメモリからフェッチすることと、プログラマブルトリガーに応答して、１つ以上のバッファの下流にある処理パイプラインのストール可能箇所をストールさせ、所定の開始命令から開始する複数の命令を備えた命令バーストを、１つ以上のバッファ内に蓄積し、１つ以上のバッファ内に複数の命令が蓄積されると、処理パイプラインのストール可能箇所を再開させることとを含む、データを処理する方法。
【０００７】
ここで、実施例の例は、添付の図面を参照しながら例として説明される。
【図面の簡単な説明】
【０００８】
【図１】処理パイプラインを有するプロセッサコアを含むデータ処理システムを概略的に示す。
【図２】プログラマブルトリガーの形態の様々な例のひとつを概略的に示す。
【図３】プログラマブルトリガーの形態の様々な例のひとつを概略的に示す。
【図４】プログラマブルトリガーの形態の様々な例のひとつを概略的に示す。
【図５】開始点及びバースト長を指定するヒント命令を用いたバッファ制御を概略的に示すフロー図である。
【図６】ヒント開始命令及びヒント停止命令を用いるバッファ制御を概略的に示すフロー図である。
【発明を実施するための形態】
【実施例１】
【０００９】
図１は、メインメモリ６と、命令キャッシュ８と、データキャッシュ１０とを含むメモリシステムに接続された４を含むデータ処理システム２を概略的に示す。プロセッサコア４は、命令キャッシュ８又はメインメモリ６からプログラム命令をフェッチするフェッチ回路１２と、プログラム命令をデコードして、それらのプログラム命令が指定する処理操作を制御する制御信号を生成するデコード回路１４と、デコードされた命令が実行のために発行される際に制御を行う発行回路１６と、整数パイプライン２０や、浮動小数点パイプライン２２、単一命令複数データ（ＳＩＭＤ）パイプライン２４、ロードストアユニット２６といった様々な機能ユニットを用いた命令の実行と連動する実行回路１８と、最後に、実行された命令の結果をシステム及びメモリ内にライトバックするように機能するライトバック回路２８とが含まれた複数のパイプラインステージを含んだ処理パイプラインを含む。
【００１０】
動作中、命令は、命令キャッシュ８からフェッチ回路１２によってフェッチされる。命令キャッシュ８内で失敗が生じた場合は、命令はメインメモリ６からフェッチされる。こうしたメインメモリ命令フェッチは、命令キャッシュ８からのフェッチよりも更に時間を要する。フェッチ回路１２は、フェッチした命令を第１バッファに格納する。デコード回路１４は、第１バッファ３０から命令を読み取り、それらをデコードすることでデコードされた命令を形成して、その後、デコードされた命令は第２バッファ３２に格納される。発行回路１６は、第２バッファ３２からデコードされた命令を読み取り、スロットがこれらの命令を関連機能ユニット内で実行することが可能な場合、これらを実行回路１８，２０，２２，２４及び２６に発行する。最後に、ライトバック回路２８は、命令の実行結果をライトバックして、これらの結果に伴ってプロセッサコアの状態を更新するように機能する。
【００１１】
デコード回路１４に接続されたバッファ制御回路３４は、デコード回路１４が、プログラマブルトリガーとして機能するプログラム命令をデコードすると、デコード回路１４から信号を受信して、処理パイプラインのストール可能箇所をストールさせ、命令バーストを１つ以上のバッファ内に蓄積し、その後、１つ以上のバッファ内に（所定でもよい）複数のプログラム命令が蓄積されると、処理パイプラインのストール可能箇所を再開させる。
【００１２】
この実施例の例では、処理パイプラインのストール可能箇所は発行回路１６を含む。このストール可能箇所がプログラマブルトリガーに応答してストールすると、命令（及びデコードされた命令）がバッファ３０及び３２内に蓄積される。他の実施例では、処理パイプラインの他の部分がストール可能箇所として機能してもよいことが理解されよう。例えば、デコード回路１４が、命令が第１バッファ３０内に蓄積するようにストールしてもよい。他の実施例では、実行回路１８、又は整数パイプライン２０、浮動小数点パイプライン２２、単一命令複数データパイプライン２４若しくはロードストアユニット２６といった個別の機能処理ブロックを、少なくとも、これらのストールされた箇所によって実行されるようになっている命令に関しては、こうしたストールされた箇所の上流で命令がバッファされる影響によってストールできる（例えば、実行回路内の他のパイプライン２２，２４及び２６によって実行される命令の継続を許容しながら、ストールし且つ整数パイプライン２０によって実行されるようになっている命令を蓄積することが可能となりうる）。
【００１３】
フェッチされた命令バーストを蓄積するための処理パイプラインのストールは、データ処理システムの動作テストを試みる用途を含む、様々な用途を有することができる。例えば、メインメモリ６に格納された内蔵セルフテストライブラリコード３６を実行させて、データ処理システムの一部が正しく機能するかをテストしてもよい。テストが適切に行われ、且つプログラム命令のフェッチのタイミングに影響されないことが確実となるように、内蔵セルフテストライブラリコード３６は、上記のストール、蓄積及び再開動作のためのプログラマブルトリガーとして機能する命令を含むことで、その内蔵セルフテストコード内の特定の一連／バーストの命令を、どの命令フェッチ遅延変動とも無関係な決定的タイミングで実行できるようにしてもよい。本技術の用途の他の例では、決定的タイミングで特定の一連／バーストの命令を実行して、タイミングが極めて近い様々な周辺機器／装置から複数のデータ点をサンプリングする。
【００１４】
一例として、ロードストアユニット２６は、進行中のデータ書き込みの既定の書き込みデータを、その既定の書き込みデータがメモリに書き込まれる前に、既定のメモリアドレスにバッファするように機能する格納フォワーディング回路３８を含んでもよく、この格納フォワーディング回路３８は、こうした書き込みが進行中で、既定の書き込みデータが格納フォワーディング回路に格納されている間は、メモリシステムに書き込まれる書き込みデータを待つ遅延を被って、メモリシステムからそのデータを読み取るよりも、むしろ、格納フォワーディング回路３８に格納されているデータのコピーを用いて、既定のアドレスに対する後続のデータ読み込みを処理するように機能する。しかしながら、こうした格納フォワーディング回路を適切にテストするには、メモリへの格納が行われることなく、格納フォワーディング回路が読み取りの処理で活動するように、書き込み操作の後に読み取り操作が素早く行われることが重要である。これは、フェッチ回路１２の下流の処理パイプライン内にまとめられて、処理される命令バーストとして開放される命令バースト内に、書き込み命令と後続の読み取り命令とを含むことで、変動するフェッチ遅延と関係なく、書き込み命令と読み取り命令との間の決定的タイミングで、書き込み命令の後に読み取り命令が続くようにすることで実現されてもよい。
【００１５】
バッファ制御回路３４は、エスケープイベントを検出するように機能して、こうしたエスケープイベントが検出されると１つ以上のバッファ３０，３２内への命令の蓄積を全て停止させ、ストール可能箇所（例えばこの実施例の例では発行回路）を再開させる、エスケープ回路４０を含む。例えばこうしたエスケープ回路４０は、例えば、フェッチされた命令が、それらの命令がフェッチされるのを妨げる他のプロセスによって到着しないことで、処理パイプラインが永久にストールしてしまうことによる、デッドロックといった病的状態が生じないことを確実とするのに有用となりうる。エスケープ回路４０の用途の他の例では、パイプラインがストールしている間に蓄積される命令バーストに所定の長さがない場合、命令は、例えば、ハードウェアトリガーイベントが生じる（実施によってバッファ全信号からバッファサイズまでが異なる等）まで、所定のプログラムされたモニタイベントが設計（又はバッファ制御回路）内で生じるまで、割り込み若しくは中断がトリガーされるまで、又はこれらの組み合わせが生じるまで、むしろ蓄積される。こうして、エスケープ回路は、ストールを止めるバックドア若しくは意図的にストールを止める主要設計特徴のいずれか又は両方を提供できる。
【００１６】
エスケープ回路４０によって検出されるエスケープイベントは、様々な異なる形態をとってもよい。例えば、エスケープイベントは、メモリから複数の命令がフェッチされるのに要する時間が、タイムアウトタイマー等の閾値時間を超えることを含んでもよい。或いは、エスケープイベントは、処理パイプラインを再開すべき／ストールしないべきといった問題を示すことができる、（例えば、行われようとしている所定の数のメモリフェッチや、所定の数のメモリ中断等）発生中の１つ以上のモニタイベントを検出するように機能してもよい。
【００１７】
プログラマブルトリガーに続いて複数の命令が蓄積される１つ以上のバッファ３０，３２は、処理パイプラインの通常動作のためにその処理パイプライン内に既に設けられているバッファであってもよい。この場合、決定的な命令フェッチのために処理パイプラインのストール可能箇所をストール、蓄積及び再開させる設備の提供と関連する更なるオーバーヘッドを、比較的低くできる。他の実施例の例では、蓄積された命令を、パイプラインのストールされた箇所が再開される前に格納するように機能する、専用のバッファを提供することが可能である。
【００１８】
ストールされた箇所が再開されると、１つ以上のバッファ内に蓄積されている命令バーストを、例えば割り込み又は他の遅延を介在させることなく、アトミックに実行することができる。こうしたアトミックな実行は、１つ以上のバッファ内に命令が蓄積されることで、命令フェッチ内のメモリ障害に起因して、アトミックなシーケンスの実行中にメモリ中断が途中まで生じる可能性をなくすように、支援される。
【００１９】
バッファ制御回路３４を制御して処理パイプラインをストール、蓄積及び再開工程を行うように制御するプログラマブルトリガーは、以下に更に説明するように様々な異なる形態をとってもよい。プログラマブルトリガーの制御及び提供の形態の一部には、プログラマブルトリガーに関するパラメータを格納できる構成レジスタ４２を利用してもよい。例えば、プログラマブルフラグを構成レジスタ４２内に設定して、ストール、蓄積及び再開の動作を、まだ受信されていない同期命令と同期して行うように、バッファ制御回路３４を準備してもよい。構成レジスタ４２は、幾つかの実施例では、蓄積される命令バーストの長さを指定するパラメータも格納してもよい。
【００２０】
図２は、プログラマブルトリガーの第１の形態を概略的に示す。この例では、一連のプログラム命令は、プログラマブル開始点パラメータ及びプログラマブルバースト長パラメータを指定するヒント命令４４を含む。こうしたヒント命令がデコード回路１４によってデコードされると、その後、バッファ制御回路３４を制御して、処理パイプラインを、デコードされた開始点パラメータ及びバースト長パラメータに関連付けてストール、蓄積及び再開を行うように制御する。
【００２１】
図３は、プログラマブルトリガーの他の形態を概略的に示す。この例では、一連のプログラム命令が、命令バーストの開始をマークするヒント命令４６と、命令バーストの終了をマークするヒント命令４８とを含む。こうして、命令バーストは、プログラム命令の流れの中に組み込まれた開始命令４６及び停止命令４８のそれぞれによって区切られる。
【００２２】
図４は、使用できるプログラマブルトリガーの更なる例を概略的に示す。この例では、実行すべきプログラムが構成レジスタ４２内にプログラマブルフラグを設定して、バッファ制御回路３４を、蓄積されるバースト長を指定するパラメータといった適当なパラメータによってストール、蓄積及び再開の動作を行うように準備する。準備ができると、バッファ制御回路３４は、こうしたバースト蓄積を、実行すべき一連のプログラム命令内の同期命令５０によって起動するようにトリガーされてもよい。
【００２３】
上記の例は、本技術の実施に使用できる回路及びプログラマブルトリガーの幾つかの形態でしかないことが理解されよう。他の形態の回路及びプログラマブルトリガーも可能である。
【００２４】
図５は、プログラマブル開始点パラメータ及びプログラマブルバースト長パラメータを指定するヒント命令を用いたバッファ制御を概略的に示すフロー図である。処理は、こうしたヒント命令が受信されるまでステップ５２で待機する。ステップ５４は、発行回路１６をストールさせる（他の実施例の例では、処理パイプラインの他のストール可能箇所が採用されてもよい）。ステップ５６は、フェッチ回路１２によってフェッチされ続けるようにしたまま、命令をバッファ３０，３２内に蓄積する。ステップ５８は、バッファ３０，３２が、ステップ５２でデコードされたヒント命令内のバースト長パラメータによって指定される所定の長さの命令バーストを現在格納しているか否かを判断する。ステップ５８で命令バーストが完全に蓄積されていると判断された場合は、処理は、発行回路１６が再開される（ストールされなくなる）ステップ６０に進む。ステップ５８で命令バーストがまだ完全に蓄積されていないと判断された場合は、処理は、エスケープ回路４０がエスケープイベント（例えばタイムアウト）を検出しているか否かを判断するステップ６２に進む。こうしたエスケープイベントが検出されていない場合は、処理はステップ５６に戻る。こうしたエスケープイベントが検出されている場合は、動作は、発行回路１６が再開されるステップ６０に進む。
【００２５】
図６は、蓄積される命令バーストを個別のヒント開始命令及びヒント停止命令によって区切るバッファ制御を概略的に示すフロー図である。処理は、ヒント開始命令がデコードされるまでステップ６４で待機する。こうしたヒント開始命令がデコードされると、ステップ６６で、バッファ制御回路３４が、発行回路１６をストールさせるように機能する。ステップ６８は、フェッチ回路がストールせずそのフェッチ操作を継続しながら、命令をバッファ３０，３２内に蓄積する。ステップ７０は、エスケープ回路４０がエスケープイベントを検出しているか否かを判断する。エスケープイベントが検出されていない場合は、処理は、ヒント停止命令がデコードされているか否かを判断するステップ７２に進む。ヒント停止命令がデコードされていない場合は、処理はステップ６８に戻る。ヒント停止命令がデコードされている場合は、バッファ３０，３２内に必要な命令バーストが蓄積されており、処理は、発行回路１６が再開されるステップ７４に進む。エスケープイベントが検出されている場合は、ステップ７２が迂回されて、処理は、発行回路が再開されるステップ７４に進む。
【００２６】
本明細書では、「〜するように構成され」という単語は、装置の要素が、定義された動作を実行可能な構成を有することを意味するように用いられる。この文脈では、「構成」は、ハードウェア又はソフトウェアの相互接続の構造又は様式を意味する。例えば、装置は、定義された動作を提供する専用ハードウェアを有してもよいし、プロセッサ又は他の処理装置が、機能を実行するようにプログラムされてもよい。「〜するように構成され」は、定義された動作を提供するために装置要素を任意の方法で変更しなければならないことを暗示するものではない。
【００２７】
本発明の例示的な実施例が、添付の図面と関連して本明細書に詳細に説明されているが、本発明はこれらの正確な実施例に限定されるものではなく、添付の請求項で定義されるような本発明の範囲及び精神から逸脱することなく、当業者が実施例への様々な変更及び修正を行うことができるものと理解されよう。
【図１】
2018206375.tif 000003
【図２】
2018206375.tif 000004
【図３】
2018206375.tif 000005
【図４】
2018206375.tif 000006
【図５】
2018206375.tif 000007
【図６】
2018206375.tif 000008
【外国語明細書】
2018206375000001.pdf