(57)【要約】【課題】パイプライン回路において、各ステージの中間レジスタにアクセスでき、さらに、パイプラインの連続する任意のステージを利用できるようにする。【解決手段】入力レジスタ１、中間レジスタ４１，４２，・・・，４Ｎ−１，出力レジスタ２にはデータバス６が接続され、かつレジスタの特定とレジスタに対する操作を決定するストローブ信号がストローブバス５から供給される。パイプライン構成テーブル７は各中間レジスタ４１〜４Ｎ−１と出力レジスタ２に対応したビットからなる。ＡＮＤゲート８１，８２，・・・，８Ｎはパイプラインコントローラ９の出力信号Ｓ２１，Ｓ２２，・・・，Ｓ２Ｎとパイプライン構成テーブル７の各ビット出力Ｓ３１，Ｓ３２，・・・，Ｓ３Ｎの論理積をとり、中間レジスタ４１，４２，・・・，出力レジスタ２への各ステージの演算結果の書き込みを制御する。【選択図】　図１
2004062591.tif 000002
【特許請求の範囲】
【請求項１】
入力レジスタから出力レジスタまでの回路が複数のステージで構成され、最終ステージを除く各ステージの演算結果を保持する中間レジスタを有し、
前記入力レジスタ、前記各中間レジスタ、および前記出力レジスタにはデータバスが接続され、かつレジスタの特定とレジスタに対する操作を決定するストローブ信号が供給され、
各ステージの演算結果を中間レジスタ、最終ステージの場合には前記出力レジスタに記憶するタイミングを制御する信号を出力するパイプラインコントローラと、前記各中間レジスタおよび出力レジスタに対応したビットからなるパイプライン構成テーブルと、前記各中間レジスタ、出力レジスタ毎に設けられ、前記パイプラインコントローラから出力された当該レジスタへの信号と、前記パイプライン構成テーブルの、当該レジスタのビット出力の論理積をとり、出力を当該レジスタに出力するゲート回路を有するパイプライン回路。
【発明の詳細な説明】
【０００１】
本発明は、入力レジスタから出力レジスタまでの回路が複数のステージで構成され、各ステージ（最終段は除く）の演算結果を保持する中間レジスタを有するパイプライン回路に関する。
【０００２】
【従来の技術】
パイプライン処理は、回路をステージと呼ぶ複数のブロックに分割でき、その各ステージ間が並列に動作可能な場合に、回路のスループットを向上させる目的でよく利用される。パイプライン処理を利用した回路構成（以下、パイプライン回路と称す）はマイクロプロセッサでよくみられる。
【０００３】
図３はパイプライン回路の従来例のブロック図である。このパイプライン回路は入力レジスタ１と出力レジスタ２とステージ１，ステージ２，・・・，ステージＮのステージ回路３１，３２，・・・，３Ｎと中間レジスタ４１，４２，・・・，４Ｎ−１とストローブバス５とデータバス６とパイプラインコントローラ９を有している。
【０００４】
入力データを入力レジスタ１に書き込むため、外部のマイクロプロセッサ等から与えられるアドレス信号とチップセレクト／リード／ライトの各ストローブ信号から内部レジスタ用のストローブ信号を作成し、データバス６上のデータを入力レジスタ１に書込む。この入力レジスタ１のデータに対してステージ回路３１で演算が行なわれる。この演算結果はパイプラインコントローラ９で作成されたラッチ信号Ｓ２１により中間レジスタ４１に記憶される。次に、ステージ２では中間レジスタ４１に記憶されているデータを元にステージ回路３２で演算が行なわれる。その演算結果はパイプラインコントローラ９により作成されたラッチ信号Ｓ２２により中間レジスタ４２に記憶される。同様にして、ステージＮ−１ではステージ回路３Ｎ−１（図示せず）で演算された結果が、パイプラインコントローラ９で作成されたラッチ信号Ｓ２（Ｎ−１）により中間レジスタ４Ｎ−１に記憶される。パイプラインの最終段であるステージＮでは、中間レジスタ４Ｎ−１のデータを元にステージ回路３Ｎで演算が行なわれる。その結果は、パイプラインコントローラ９により作成されたラッチ信号Ｓ２Ｎにより出力レジスタ２に記憶され、１つの入力データに対する演算が終了する。
【０００５】
このようにパイプライン処理では、データに対して流れ作業的に演算が行なわれて最終的な結果が得られる。ここで、データは各ステージ間を一定間隔で流れるが、その間隔で入力データを供給することにより、各ステージ間は並列に動作することができるため、回路全体のスループットの向上に寄与できる。
【０００６】
パイプライン回路の実際の例を説明する前に、図４に重み付き移動平均演算回路のブロック線図を示す。遅延器１１，１２は一つ前の時間にサンプリングされた値を用いることを示す。遅延器１１はＸ［ｎ−１］、遅延器１２はＸ［ｎ−２］をそれぞれあらわす。また、乗算器１３，１４，１５は任意の数をかけることで重みをあらわし、それぞれＡ＝１／４、Ｂ＝１／２、Ｃ＝１／４を乗数とするものである。加算器１６，１７は入力となる値を加えるものである。つまり、この回路は重み付き移動平均
Ｙ［ｎ］＝Ａ×Ｘ［ｎ］＋Ｂ×Ｘ［ｎ−１］＋Ｃ×Ｘ［ｎ−２］
を求めるものである。
【０００７】
図５は図４に示した重み付き重み付き移動平均演算回路をパイプラインで構成した回路図である。この場合、３つのステージで構成されるパイプライン回路となる。
【０００８】
重みであるＡ，Ｂ，Ｃはそれぞれレジスタ１０１，１０２，１０３に即値としてセットされ、変更することができない構成になっている。時間ｎにおける移動平均を求めるために、データＸ［ｎ］，Ｘ［ｎ−１］，Ｘ［ｎ−２］をそれぞれ入力レジスタ１１，１２，１３の入力とする。データＸ［ｎ］はデータバス６から、ストローブバス５の信号Ｓ１１によりレジスタ１１に書込まれる。同様に、データＸ［ｎ−１］はデータバス６よりストローブバス５の信号Ｓ１２によりレジスタ１２に、データＸ［ｎ−２］はデータバス６よりストローブバス５の信号Ｓ１３によりレジスタ１３に書込まれる。入力レジスタ１１とレジスタ１０１、入力レジスタ１２とレジスタ１０２、入力レジスタ１３とレジスタ１０３のそれぞれの間で乗算が行なわれ、ステージ１の演算結果がパイプラインコントローラ９からの出力Ｓ２１でそれぞれ中間レジスタ４１１，４１２，４１３に記憶されることになる。それらの値はそれぞれ
ｔｍｐ０＝Ａ×Ｘ［ｎ］
ｔｍｐ１＝Ｂ×Ｘ［ｎ−１］
ｔｍｐ２＝Ｃ×Ｘ［ｎ−２］
である。ステージ１の終了後、引き続き時間ｎ＋１の入力を与え、ステージ１で乗算を行ない、その結果をパイプラインコントローラ９の出力Ｓ２１で中間レジスタ４１１、４１２，４１３に書込むことにより、移動平均の処理をパイプライン的に実行できる。ステージ２では中間レジスタ４１１と４１２の値ｔｍｐ０，ｔｍｐ１を元に、
ｔｍｐ３＝ｔｍｐ０＋ｔｍｐ１
という演算が行なわれる。ステージ２の結果はパイプラインコントローラ９の出力Ｓ２２で中間レジスタ４２に記憶される。パイプラインの最終段であるステージ３では、中間レジスタ４１３と４２の値ｔｍｐ２、ｔｍｐ３をもとに、
Ｙ［ｎ］＝ｔｍｐ３＋ｔｍｐ２
という演算が行なわれ、パイプラインコントローラ９の出力Ｓ２３で演算結果が出力レジスタ２に記憶される。この一連の流れにより重み付き移動平均Ｙ［ｎ］の値を得ることができる。出力レジスタ２に記憶された重み付き移動平均Ｙ［ｎ］はストローブバス５のストローブ信号Ｓ１８によりデータバス６に読み出すことができる。
【０００９】
この例でわかるように、パイプラインをデータが詰まることなく流れるように入力データを与えることができれば、入力から出力を一つの回路として処理を実行するのに比べて、１／（パイプラインのステージ数）、スループットの向上を図ることができる。
【００１０】
【発明が解決しようとする課題】
しかしながら、上述した従来のパイプライン回路は、入力レジスタと出力レジスタしか外部からはアクセスすることができないような回路構成をとっており、ステージ間の中間レジスタにはアクセスできない。さらに、パイプラインの構成を変更したり、一部のステージだけを利用することなどは考えられていない。
【００１１】
したがって、本発明の目的は、パイプラインの各ステージの中間レジスタにアクセスし、さらに、パイプラインの連続する任意のステージだけを利用できる、高速な処理と処理内容の柔軟な変更を可能にしたパイプライン回路を提供することである。
【００１２】
【課題を解決するための手段】
本発明のパイプライン回路は、入力レジスタから出力レジスタまでの回路が複数のステージで構成され、最終ステージを除く各ステージの演算結果を保持する中間レジスタを有し、入力レジスタ、各中間レジスタ、および出力レジスタにはデータバスが接続され、かつレジスタの特定とレジスタに対する操作を決定するストローブ信号が供給され、各ステージの演算結果を中間レジスタ、最終ステージの場合には出力レジスタに記憶するタイミングを制御する信号を出力するパイプラインコントローラと、各中間レジスタと出力レジスタに対応したビットからなるパイプライン構成テーブルと、各中間レジスタと出力レジスタ毎に設けられ、パイプラインコントローラから出力された当該レジスタへの信号と、パイプライン構成テーブルの、当該レジスタのビット出力の論理積をとり、出力を当該レジスタに出力するゲート回路を有する。
【００１３】
中間レジスタにはストローブ信号が供給され、かつデータバスに接続されているので、任意の中間レジスタに対して任意の時点でデータの読み書きができる。また、各中間レジスタ（最終ステージの場合は出力レジスタ）への演算結果を記憶するかしないかを、パイプライン構成テーブルによりゲート回路を介して制御することにより、パイプライン回路の任意の連続するステージによる演算結果を得ることができる。これにより、ハードウェアで構成されていたアルゴリズムを、ソフトウェアと協調することで変更することができる。さらに、ステージ間の中間レジスタの値を任意の時点で読み出すことができ、パイプライン回路のデバッグを効率的に実行することができる。これは、特にＦＰＧＡ（Ｆｉｅｌｄ　Ｐｒｏｇｒａｍｍａｂｌｅ　Ｇａｔｅ　Ａｒｒａｙ）において有効である。
【００１４】
【発明の実施の形態】
次に、本発明の実施の形態について図面を参照して説明する。
【００１５】
図１は本発明の一実施形態のパイプライン回路のブロック図である。
【００１６】
本実施形態のパイプライン回路は、パイプライン構成テーブル７と、その出力Ｓ３１，Ｓ３２，・・・，Ｓ３Ｎとパイプラインコントローラ９の出力Ｓ２１，Ｓ２２，・・・，Ｓ２Ｎの論理積をとり、出力Ｓ４１，Ｓ４２，・・・，Ｓ４Ｎをそれぞれ中間レジスタ４１，４２，・・・，出力レジスタ２に出力するＡＮＤゲート８１，８２，・・・，８Ｎを備え、中間レジスタ４１，４２，・・・，出力レジスタ２での記憶の制御を行なう点が、図３の従来例のパイプライン回路と異なる。本実施形態ではパイプライン構成テーブル７のビットが１のときは、従来例と同じように演算結果がステージ終了後に中間レジスタまたは出力レジスタ２に記憶される。ビットが０の場合は、ゲート８１〜８Ｎの出力は常に０となるため演算結果は記憶されない。
【００１７】
パイプライン構成テーブル７のビット出力Ｓ３１，Ｓ３２，・・・，Ｓ３（Ｎ−１），Ｓ３Ｎがそれぞれ０，１，１，０の場合の図１のパイプライン回路の動作を説明する。
【００１８】
本実施形態では入力データは入力レジスタ１ではなく、中間レジスタ４１に書込む。そのため、デコーダ（不図示）はアドレス信号とチップセレクト／リード／ライトの各ストローブ信号からストローブ信号Ｓ１４を作成し、データバス６から入力データを中間レジスタ４１に書込む。ステージ１では演算が行なわれるが、ＡＮＤゲート８１の出力Ｓ４１が常に０であるため、演算結果は中間レジスタ４１に記憶されない。次に、ステージ２では、データバス６より中間レジスタ４１に書き込まれているデータを元にステージ回路３２で演算が行なわれる、ＡＮＤゲート８２の出力Ｓ４２は１であるため、演算結果が中間レジスタ４２に記憶される。以下、ＡＮＤゲート８１〜８Ｎの出力に応じた動作が繰返される。ステージＮ−１ではステージ回路３Ｎ−１で演算された結果は、ＡＮＤゲート８Ｎ−１の出力Ｓ４（Ｎ−１）が１であるため、中間レジスタ４Ｎ−１に記憶される。パイプラインの最終段であるステージＮでは、中間レジスタ４Ｎ−１に記憶されている演算結果を元にステージ回路３Ｎで演算が行なわれるが、ＡＮＤゲート８Ｎの出力Ｓ４Ｎが０であるため、演算結果は出力レジスタ２に記憶されない。よって、本実施形態のパイプライン回路は中間レジスタ４１を入力レジスタと、中間レジスタ４Ｎ−１を出力レジスタとする演算を行なう。
【００１９】
このように、本実施形態においては、パイプライン構成テーブル７の各ビットの値を適切に設定することにより、任意の中間レジスタを入力レジスタとして利用できると同時に、この入力レジスタとして利用した中間レジスタ以降の任意の中間レジスタを出力レジスタとして利用できる。この入力に対する出力結果は、このパイプライン回路の部分的な演算を利用している。そのため、入力データおよび出力データをソフトウェアにより加工することにより、パイプライン回路の一部を利用し、アルゴリズムを柔軟に変更することができる。
【００２０】
図４の従来例で説明した移動平均演算回路において、本実施形態を用いてアルゴリズムを変更する例を図２で説明する。重みであるＡ，Ｂ，Ｃは、それぞれレジスタ１０１，１０２，１０３に即値としてセットされ、変更することができない構成になっている。時間ｎにおける移動平均は、
Ｙ［ｎ］＝Ａ×Ｘ［ｎ］＋Ｂ×Ｘ［ｎ−１］＋Ｃ×Ｘ［ｎ−２］
であったが、
Ｙ［ｎ］＝Ａ×Ｘ［ｎ］−Ｂ×Ｘ［ｎ−１］−Ｃ×Ｘ［ｎ−２］…（１）
を求めることにする。これは、ステージ１の結果として、ｔｍｐ０、ｔｍｐ１、ｔｍｐ２をそれぞれ得る。この結果を読み出しソフトウェアにより
ｔｍｐ０−ｔｍｐ１−ｔｍｐ２
の演算を行なうことにより得ることができる。そのためパイプライン構成テーブル７は、ステージ１のみ結果を記憶するように構成する。すなわち、パイプライン構成レジスタ７の最下位ビットの出力信号Ｓ３１を１に、真ん中のビットの出力信号Ｓ３２と最上位ビットの出力信号Ｓ２３を０にする。前記式（１）の結果を得るためにまず、データＸ［ｎ］、Ｘ［ｎ−１］、Ｘ［ｎ−２］をそれぞれ入力する。Ｘ［ｎ］のデータはデータバス６から、ストローブバス５の信号Ｓ１１によりレジスタ１１に書き込む。Ｘ［ｎ−１］、Ｘ［ｎ−２］も同じように、Ｘ［ｎ−１］のデータをデータバス６からストローブバス５の信号Ｓ１２によりレジスタ１２に、また、Ｘ［ｎ−２］のデータをデータバス６からストローブバス５の信号Ｓ１３によりレジスタ１３に書き込む。中間レジスタ４１１，４１２，４１３に、ステージ１での計算結果が記憶されることになる。それらは、
ｔｍｐ０＝Ａ×Ｘ［ｎ］
ｔｍｐ１＝Ｂ×Ｘ［ｎ−１］
ｔｍｐ２＝Ｃ×Ｘ［ｎ−２］
である。この結果を記憶する信号は、パイプラインコントローラ９の出力Ｓ２１とパイプライン構成テーブル７の出力Ｓ３１をＡＮＤゲート８１により論理積をとった出力Ｓ４１である。パイプライン構成テーブル７の出力Ｓ３１は１であるので、中間レジスタ４１１，４１２，４１３に結果が書き込まれる。ステージ２，３ではパイプライン構成テーブル７の出力Ｓ３２，Ｓ３３が０のため、演算結果は中間レジスタ４２と出力レジスタ２には記憶されない。この結果を元にソフトウェアにより式（１）を満たす計算を行なう。中間レジスタ４１１，４１２，４１３は、それぞれを指定するストローブ信号Ｓ１４，Ｓ１５，Ｓ１６により指定され、データバス６からそれぞれデータが読み出される。この読み出しのタイミングはパイプライン自体が動作していても、目的とする中間レジスタ４１１，４１２，４１３の結果が保証されていれば、ステージ１終了後であればいつでもよい。
【００２１】
読み出した結果を元に、ソフトウェアで
ｔｍｐ０−ｔｍｐ１−ｔｍｐ２
を実行し、Ｙ［ｎ］を得ることができる。
【００２２】
つまり、パイプライン回路で任意の区間を利用することでハードウェアとソフトウェアを協調して動作させる。これにより、ハードウェアとして固定されているアルゴリズムを、ソフトウェアを介在させて柔軟に変更できる。特に、パイプラインとして実装されたアルゴリズムの本質的な部分はハードウェアで実行させ、ハードウェアで実行させる入力の前処理や、ハードウェアで実行した結果の後処理を行なうことに対して、処理速度、柔軟性において有効にはたらく。
【００２３】
次に、パイプライン回路のデバッグについて説明する。パイプライン構成レジスタをすべて１にしてパイプラインを動作させる。このときに得られるＹ［ｎ］の値がおかしい場合、回路デバッグの作業が発生する。特に、回路設計者が大規模な回路を作り込め、さらにその回路を容易に変更できるＦＰＧＡの場合には、このデバッグの作業が生じる可能性が高い。物事を考える場合において、大きな問題をそのまま扱うよりも部分問題に分解し、これを一つづつ解決していくほうが、問題解決の効率が良い場合が多い。デバッグにおいても同様のことがいえ、デバッグ対象を入力と出力間のパイプライン回路全体で考えるより、各ステージという部分問題に分け、各ステージの入力と出力の関係でデバッグする方が効率がよい。
【００２４】
まず、パイプライン構成テーブル７の最下位ビットの出力信号Ｓ３１を１に、真ん中のビットの出力信号Ｓ３２と最上位ビットの出力信号Ｓ３３を０にする。これによりステージ１の演算結果のみが中間レジスタ４１１，４１２，４１３に記憶されることになる。これら演算結果は、
ｔｍｐ０＝Ａ×Ｘ［ｎ］
ｔｍｐ１＝Ｂ×Ｘ［ｎ−１］
ｔｍｐ２＝Ｃ×Ｘ［ｎ−２］
であり、入力に対するｔｍｐ０、ｔｍｐ１、ｔｍｐ２の値をそれぞれ評価する。間違いがある場合はその回路を修正する。たとえば、ｔｍｐ１の値がおかしい場合、データＸ［ｎ−１］と値Ｂから中間レジスタ４１１までの間に問題が絞り込め、デバッグの効率が向上する。次に、ステージ２の場合、パイプライン構成テーブル７の最下位ビットの出力信号Ｓ３１を０に、真ん中のビットの出力信号Ｓ３２を１に、最上位ビットの出力信号Ｓ３３を０にする。これにより、演算結果ｔｍｐ０、ｔｍｐ１をそれぞれ入力して演算を行い、ｔｍｐ３を結果として得ることができる。最後に、ステージ３の場合、パイプライン構成テーブル７の最下位ビットの出力信号Ｓ３１を０に、真ん中のビットの出力信号Ｓ３２を０に、最上位ビットの出力信号Ｓ３３を１にする。ここでは、演算結果ｔｍｐ３、ｔｍｐ２をそれぞれ入力とする演算を行い、Ｙ［ｎ］を結果として得ることができる。
【００２５】
以上のように、パイプライン構成テーブルの値を適切に設定することで、任意のステージの演算結果を得られるようにパイプラインを動作させることができる。これにより、問題点の絞り込みを容易にし、本来は複雑なパイプラインのデバッグの効率を向上させることができる。
【００２６】
【発明の効果】
以上説明したように、本発明によれば、ステージ間の中間レジスタの値を任意の時点で読み書きできること、前ステージの結果が中間レジスタに記憶されるのをパイプライン構成テーブルとゲートにより制御することにより、パイプライン回路の任意の連続するステージによる演算を実行結果を得ることができる。これにより、ハードウェアで構成されていたアルゴリズムを、ソフトウェアと協調することで変更することができ、さらに、ステージ間の中間レジスタの値を任意の時点で読み出すことができることにより、パイプライン回路のデバッグを効率的に実行することができるという効果がある。後者は、特にＦＰＧＡにおいて有効である。
【図面の簡単な説明】
【図１】
本発明の一実施形態のパイプライン回路の構成を示すブロック図である。
【図２】
図１のパイプライン回路の具体例（移動平均回路）のブロック図である。
【図３】
従来のパイプライン回路の構成を示すブロック図である。
【図４】
移動平均回路の構成を示すブロック線図である。
【図５】
従来のパイプライン重み付きによる移動平均回路の構成を示すブロック図である。
【符号の説明】
１，１１，１２，１３　　入力レジスタ
２　　出力レジスタ
３１，３２，・・・，３Ｎ　　ステージ回路
４１，４２，・・・，４Ｎ−１　　中間レジスタ
５　　ストローブバス
６　　データバス
７　　パイプライン構成テーブル
８１，８２，・・・，８Ｎ　　ＡＮＤゲート
９　　パイプラインコントローラ
１０１，１０２，１０３　　レジスタ
Ｓ１１〜Ｓ１７　　書込みストローブ信号
Ｓ１８　　読出しストローブ信号
Ｓ２１，Ｓ２２，・・・，Ｓ２Ｎ　　パイプラインコントローラ９の出力
Ｓ３１，Ｓ３２，・・・，Ｓ３Ｎ　　パイプライン構成テーブル７の出力
Ｓ４１，Ｓ４２，・・・，Ｓ４Ｎ　　ゲート出力
【図１】
2004062591.tif 000003
【図２】
2004062591.tif 000004
【図３】
2004062591.tif 000005
【図４】
2004062591.tif 000006
【図５】
2004062591.tif 000007
【手続補正書】
【提出日】平成14年8月16日(2002.8.16)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】０００１
【補正方法】変更
【補正の内容】
【０００１】
【発明の属する技術分野】
本発明は、入力レジスタから出力レジスタまでの回路が複数のステージで構成され、各ステージ（最終段は除く）の演算結果を保持する中間レジスタを有するパイプライン回路に関する。