(57)【特許請求の範囲】
【請求項１】
各々独立に制御され他の算術論理演算回路と同時に動作可能な複数の算術論理演算回路をカスケード接続して成るシリアル演算パイプラインであって、
前記複数の算術論理演算回路の全部又は一部が、後段へデータを出力するための第１ラインと、前段へデータをフィードバックするための第２ラインと、各ライン上のデータをラッチするラッチ回路とを有しており、
前記複数の算術論理演算回路の各々が、外部から入力されたインストラクションの内容に応じた演算を含む処理を実行し、その実行結果を表すデータを所望のライン宛に出力するデコーダを有しており、
前記第１ラインが、第１の出力データおよび第２の出力データを後段に出力するための一対のラインであり、
前記ラッチ回路が、前記第１の出力データをラッチする第１のデータラッチ回路と、前記第２の出力データをラッチする第２のデータラッチ回路と、前記デコーダによる演算の結果生じるキャリーを次の桁の演算のためにラッチするキャリーラッチ回路と、前記第１の出力データおよび前記第２の出力データの一方を所定期間遅延させて他方との参照を可能にするシフトラッチ回路と、を含む、
シリアル演算パイプライン。
【請求項２】
前記ラッチ回路が、さらに、前段にフィードバックするリバースデータをラッチするリバースラッチ回路と、前記第１および第２のデータラッチ回路および前記リバースラッチ回路にラッチされているデータの演算を制御するコントロールデータをラッチするコントロールラッチ回路とを含むことを特徴とする、
請求項１記載のシリアル演算パイプライン。
【請求項３】
前記デコーダにより処理されるデータが、単位処理サイズのデータであることを特徴とする、請求項１記載のシリアル演算パイプライン。
【請求項４】
前記単位処理サイズが、前記複数の算術論理演算回路の動作タイミングを定める一つのクロックで処理可能な最低ビット長ないし同等のビット長であることを特徴とする、
請求項３記載のシリアル演算パイプライン。
【請求項５】
前記第１ラインが前段から受け取ったデータないしそれに基づく演算結果を後段に出力するための順方向ラインであり、前記第２ラインが後段から受け取ったデータないしそれに基づく演算結果を前段に出力するための逆方向ラインであることを特徴とする、請求項１ないし４のいずれかの項記載のシリアル演算パイプライン。
【請求項６】
複数系統のデータ入出力ラインを切替接続する切替接続手段と、この切替接続手段に対して並列に接続された複数のシリアル演算パイプラインと、外部から入力された前記複数のシリアル演算パイプライン宛のインストラクションを受け付けるインストラクション受付機構とを備え、
前記複数のシリアル演算パイプラインの各々は、他の算術論理演算回路と同時に動作可能な複数の算術論理演算回路をカスケード接続して構成されたシリアル演算パイプラインであり、
前記複数の算術論理演算回路の各々は、前段から受け取ったデータないしそれに基づく演算結果を後段に出力するための順方向ラインと、後段から受け取ったデータないしそれに基づく演算結果を前段にフィードバックするための逆方向ラインと、入力された前記インストラクションに応じた処理を実行し実行結果を所望のラインに出力するデコーダと、他の算術論理演算回路との間で各ライン上のデータ出力の同期をとるためのラッチ回路とを有するものであり、
前記複数の算術論理演算回路の各々のデコーダにおける順方向ライン上のデータおよび逆方向ライン上のデータが単位処理サイズのデータである、
演算装置。
【請求項７】
ｎ行ｍ列の前記インストラクションの集合であるインストラクションアレイを保持し、このインストラクションアレイを列毎にｍ回前記複数の算術論理演算回路宛に出力するとともにパイプラインが後段に１段ずつｎ回移行させる際に、実行済みのインストラクションを１段毎に１つ減ずるコントローラをさらに備えてなる、
請求項６記載の演算装置。
【請求項８】
前記インストラクションアレイには、１パスで演算を実行するための演算手順が定められている、
請求項７記載の演算装置。
【請求項９】
複数系統のデータ入出力ラインを切替接続する切替接続手段と、この切替接続手段に対して並列に接続された複数のシリアル演算パイプラインと、外部から入力された前記複数のシリアル演算パイプライン宛のインストラクションを受け付けるインストラクション受付機構とを備え、
前記複数のシリアル演算パイプラインの各々は、他の算術論理演算回路と同時に動作可能な複数の算術論理演算回路をカスケード接続して構成されたシリアル演算パイプラインであり、
前記複数の算術論理演算回路の各々は、前段から受け取ったデータないしそれに基づく演算結果を後段に出力するための順方向ラインと、後段から受け取ったデータないしそれに基づく演算結果を前段にフィードバックするための逆方向ラインと、入力された前記インストラクションに応じた処理を実行し実行結果を所望のラインに出力するデコーダと、他の算術論理演算回路との間で各ライン上のデータ出力の同期をとるためのラッチ回路とを有するものであり、
前記順方向ラインが、第１の出力データおよび第２の出力データを後段に出力するための一対のライン、前記逆方向ラインがリバースデータを出力するラインであり、
前記複数の算術論理演算回路の各々のラッチ回路が、後段に出力する第１の出力データをラッチする第１のデータラッチ回路と、
後段に出力する第２の出力データをラッチする第２のデータラッチ回路と、
前段に出力するデータをラッチするリバースラッチ回路と、
演算結果のキャリーを次の桁の演算のためにラッチするキャリーラッチ回路と、
前記第１の出力データおよび前記第２の出力データの一方を所定期間遅延させて他方との参照を可能にするシフトラッチ回路と、を含むことを特徴とする、演算装置。
【請求項１０】
前記切替接続手段、前記複数のシリアル演算パイプライン、および前記インストラクション受付機構が一つの半導体デバイスの中に組み込まれていることを特徴とする、
請求項６記載の演算装置。
【請求項１１】
シリアル演算パイプラインの構成要素となるカスケード接続可能な算術論理演算回路であって、前記シリアル演算パイプラインの前段から受け取ったデータないしそれに基づく演算結果を後段に出力するための１又は複数の順方向ラインと、後段から受け取ったデータないしそれに基づく演算結果を前段にフィードバックするための逆方向ラインと、外部から入力されたインストラクションに応じた処理を実行し実行結果を表すデータを所望のラインに出力するデコーダと、他の算術論理演算回路との間で各ライン上のデータ出力のタイミングを同期させるためのラッチ回路とを備え、
前記順方向ラインが、第１の出力データおよび第２の出力データを出力する一対のライン、前記逆方向ラインがリバースデータを一つの出力するラインであり、
前記ラッチ回路が、前記第１の出力データをラッチする第１のデータラッチ回路と、前記第２の出力データをラッチする第２のデータラッチ回路と、前記リバースデータをラッチするリバースラッチ回路と、前記デコーダによる演算結果のキャリーを次の桁の演算のためにラッチするキャリーラッチ回路と、第１の出力データおよび第２の出力データの一方を所定期間遅延させて他方との参照を可能にするシフトラッチ回路と、前記第１および第２のデータラッチ回路およびリバースラッチ回路にラッチされているデータの演算を制御するためのコントロールデータをラッチするコントロールラッチ回路とを含んで成る、算術論理演算回路。
【請求項１２】
後段にデータを出力するための１又は複数の第１ラインと、前段にデータをフィードバックするための第２ラインとを有し、シリアル演算を行うとともに演算結果を表すデータの出力対象となるラインを各々独立に選択することができる算術論理演算回路を複数段カスケード接続してシリアル演算パイプラインを構築し、前記シリアル演算パイプラインに接続された外部コントローラで、前記複数の算術論理演算回路による１パスによる同時実行の手順を反映したｍ行ｎ列のインストラクションの集合であるインストラクションアレイを列毎にｍ回前記複数の算術論理演算回路宛に個別に出力するとともに、パイプラインが後段に１段ずつｎ回移行させる際に、実行済みのインストラクションを１段毎に１つ減ずる制御を行うことを特徴とする、シリアル演算パイプラインによる演算方法。
【請求項１３】
前記複数の算術論理演算回路の各々のデコーダにおける各ライン上のデータが、単位処理サイズのデータであることを特徴とする、請求項１２記載の演算方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、例えば頻繁に動くオブジェクトをコンピュータ・グラフィクスによって表現するような、突発的かつ爆発的に膨らむ離散演算を必要とする用途に適したシリアル演算パイプライン（pipeline）及びその構成要素に関する。
ここで、シリアル演算パイプラインは、命令取り出し（fetch）、命令解読（decode）、その実行（execute）のような、別々の作業を順次同時に行なうことによって処理の高速化を図るものであり、少数の命令群を扱う演算器をカスケード接続して構成される。カスケード接続された複数の演算器のうち使用するものの組み合わせを適宜変えることにより、加減剰、浮動小数点演算、比較、ブール代数、選択（IF文）等、様々な演算処理を実現することができる。
【０００２】
【発明の背景】
コンピュータ・グラフィクスの作成に際しては、通常、２次元ピクセル内・ピクセル間の演算、空間把握（コリジョン・デテクション等）、オブジェクト生成・合成、ジオメトリ演算等、多種の離散的演算を伴う。このような用途では、コンピュータのメインＣＰＵだけでは、到底不可能なほどの大量演算パワーが必要となる。例えば、しばしば数１００[Mpolygon /sec］、 数１０［Gpixel / sec］のオーダのレンダリング処理能力が必要になる。
そのため、従来より、演算パイプラインを搭載した専用のプロセッサが使用されてきた。
【０００３】
従来のこの種のプロセッサの殆どは、単一のデバイスで構成され、見込まれる演算量に応じて演算パイプラインを並列化して組み込まれている。演算パイプラインを構築する個々の演算器にも所定の機能が固定的に割り当てられている。いわゆる「１機能１演算器」である。このような１機能１演算器によるパイプラインは、例えば固定長のデータサイズを短スループットで処理する用途には、非常に適している。
【０００４】
しかし、「１機能１演算器」では、多様的な用途には、使い回しが利きにくい。例えば用途に応じてパイプライン構成を変更しようとする場合は、演算対象となるデータの通り道と割り当てられた機能とを結びつけるためのセレクタ（バス）が別途必要となる。そのため、単一デバイス内での並列化には限界があった。また、演算器又は演算パイプラインを一定数以上並列化するとクラスタ化が避けられず、そのための制御やデータパス（キャッシュ又はバス）がそれぞれ必要となって、集積効率が悪化してしまう。
【０００５】
用途の多様化に対応するために、プログラマブル・データ・フロー・グラフ（ＤＦＧ）を構成することが考えられる。しかし、プログラマブルＤＦＧは、演算器に対して、セレクタのような非演算要素の占める割合が比較的高い。演算のプログラマビリティを上げるほど、その比率が高まることは、よく知られていることである。プログラマブルＤＦＧは、また、機能（function）が細分化されているため、すべての機能を常時稼動させることは困難である。稼働効率を上げるためには、ある程度固定された機能の塊にせざるを得ず、様々なタイプのデータを処理すること用途には不向きとなる。
【０００６】
一方、より高い演算能力を確保する観点からは、演算器の２次元並列化も考えられる。「２次元的並列化」とは、演算器をパラレル及びカスケードに並列化することである。いわば、深パイプラインによるデータフローの並列化である。特殊なインプリメントとしては、並列化されたレンダリング・パイプラインがある。２次元並列化に際してはパイプライン内で必要な機能のみを盛り込み、プログラマビリティを極力排除して、専用演算器のカスケード接続で効率を上げている。
【０００７】
今後は、離散演算の多様化が予想される。その際、様々なデータサイズに対して突発的かつ爆発的な演算量を伴う複雑な処理フローを実現する汎用的なパイプラインが望まれる。汎用的な演算パイプラインを構築するためには、データパスを単純（一直線）にし、無駄なくカスケード接続する必要がある。また、多種多様な演算を１演算器で実現できるような仕組みが必要となる。
【０００８】
本発明は、このような仕組みを、コスト上昇を伴わずに実現しようとするものである。
【０００９】
【課題を解決するための手段】
本発明は、各々独立に制御され他の算術論理演算回路と同時に動作可能な複数の算術論理演算回路をカスケード接続して成るシリアル演算パイプラインを提供する。
このシリアル演算パイプラインにおいて、前記複数の算術論理演算回路の全部又は一部は、後段へデータを出力するための第１ラインと、前段へデータをフィードバックするための第２ラインと、各ライン上のデータをラッチするラッチ回路とを有しており、複数の算術論理演算回路の各々は、外部から入力されたインストラクションの内容に応じた演算を含む処理を実行し、その実行結果を表すデータを所望のライン宛に出力するデコーダを有している。
前記第１ラインは、第１の出力データおよび第２の出力データを後段に出力するための一対のラインであり、前記ラッチ回路は、前記第１の出力データをラッチする第１のデータラッチ回路と、前記第２の出力データをラッチする第２のデータラッチ回路と、前記デコーダによる演算の結果生じるキャリーを次の桁の演算のためにラッチするキャリーラッチ回路と、前記第１の出力データおよび前記第２の出力データの一方を所定期間遅延させて他方との参照を可能にするシフトラッチ回路と、を含んでいる。
【００１０】
前記複数の算術論理演算回路の各々は、外部から入力されたインストラクション（命令）の内容に応じた演算を含む処理を実行し、その実行結果を所望のライン宛に出力するデコーダを有するものである。
また、前記ラッチ回路は、後段に出力する第１の出力データをラッチする第１のデータラッチ回路と、後段に出力する第２の出力データをラッチする第２のデータラッチ回路と、前記デコーダによる演算の結果生じたキャリーを次の桁の演算のためにラッチするキャリーラッチ回路と、第１の出力データおよび第２の出力データの一方を所定期間遅延させて他方との参照を可能にするシフトラッチ回路とを含むものである。
前段にフィードバックするリバースデータをラッチするリバースラッチ回路と、前記第１および第２のデータラッチ回路およびリバースラッチ回路にラッチされているデータの出力タイミングを決めるコントロールデータをラッチするコントロールラッチ回路とをさらに含むようにしてもよい。
【００１１】
回路面積を縮小とするとともに、パイプライン全体の処理速度を高める観点からは、前記デコーダにより処理されるデータを、単位処理サイズのデータ、例えば、前記複数の算術論理演算回路の動作タイミングを定める一つのクロックで処理可能な最低ビット長ないし同等のビット長のデータとする。
【００１２】
本発明は、また、複数系統のデータ入出力ラインを切替接続する切替接続手段と、この切替接続手段に対して並列に接続された複数のシリアル演算パイプラインと、外部から入力された前記複数のシリアル演算パイプライン宛のインストラクションを受け付けるインストラクション受付機構とを備えた演算装置を提供する。
この演算装置において、前記複数のシリアル演算パイプラインの各々は、他の算術論理演算回路と同時に動作可能な複数の算術論理演算回路をカスケード接続して構成されたシリアル演算パイプラインであり、前記複数の算術論理演算回路の各々は、前段から受け取ったデータないしそれに基づく演算結果を後段に出力するための順方向ラインと、後段から受け取ったデータないしそれに基づく演算結果を前段にフィードバックするための逆方向ラインと、入力された前記インストラクションに応じた処理を実行し実行結果を所望のラインに出力するデコーダと、他の算術論理演算回路との間で各ライン上のデータ出力の同期をとるためのラッチ回路とを有するものである。前記複数の算術論理演算回路の各々のデコーダにおける順方向ライン上のデータおよび逆方向ライン上のデータは、単位処理サイズのデータである。
【００１３】
この演算装置にコントローラを備え、ｎ行ｍ列の前記インストラクションの集合であるインストラクションアレイをコントローラに保持しておき、コントローラで、インストラクションアレイを列毎にｍ回前記複数の算術論理演算回路宛に出力するとともにパイプラインが後段に１段ずつｎ回移行させる際に、実行済みのインストラクションを１段毎に１つ減ずるようにしてもよい。
前記インストラクションアレイは、好ましくは、１パスで演算を実行するための演算手順が定められるようにする。
【００１４】
また、前記複数の算術論理演算回路の各々のラッチ回路は、後段に出力する第１の出力データをラッチする第１のデータラッチ回路と、後段に出力する第２の出力データをラッチする第２のデータラッチ回路と、前段に出力するデータをラッチするリバースラッチ回路と、演算結果のキャリーを次の桁の演算のためにラッチするキャリーラッチ回路と、第１の出力データおよび第２の出力データの一方を所定期間遅延させて他方との参照を可能にするシフトラッチ回路とを含むものである。この演算装置においても、装置全体の処理速度を高める観点からは、前記複数の算術論理演算回路の各々のデコーダにおける順方向ライン上のデータおよび逆方向ライン上のデータを単位処理サイズのデータとする。
【００１５】
この演算装置は、前記切替接続手段、前記複数のシリアル演算パイプライン、および前記インストラクション受付機構を一つの半導体デバイスの中に組み込んでおき、用途に応じて切替接続手段の制御信号とインストラクションアレイを入力することにより、用途の汎用性を持たせることができる。
【００１６】
本発明は、シリアル演算パイプラインによる演算方法を提供する。この方法は、後段にデータを出力するための１又は複数の第１ラインと、前段にデータをフィードバックするための第２ラインとを有し、シリアル演算を行うとともに演算結果を表すデータの出力対象となるラインを各々独立に選択することができる算術論理演算回路を複数段カスケード接続してシリアル演算パイプラインを構築し、前記シリアル演算パイプラインに接続された外部コントローラで、前記複数の算術論理演算回路による１パスによる同時実行の手順を反映したｎ行ｍ列のインストラクションの集合であるインストラクションアレイを列毎にｍ回前記複数の算術論理演算回路宛に個別に出力するとともに、パイプラインが後段に１段ずつｎ回移行させる際に、実行済みのインストラクションを１段毎に１つ減ずる制御を行うことを特徴とする演算方法である。
【００１７】
【発明の実施の形態】
本発明の実施形態を説明するに当たり、図１を参照して、本発明の基本原理について説明する。
シリアル演算器は、例えば１〜３ビット程度のシリアル演算を行うもので、１６ビット程度の多ビット演算を行うパラレル演算器と比較して、スループットが、データ幅分の１（１ビットのシリアル演算の場合）となるが、演算器面積もその分小さい。スループットが小さい分をパイプラインの並列度を上げるようにすれば、両者の製造コストは実質的に変わらない。
例えば、図１（ａ）のように、１６ビットレジスタを二つパラレルにし、その出力を一つの１６ビットアダーで加算して、加算結果を一つの１６ビットレジスタに格納する構成の１６ビット演算器と、（ｂ）のように１ビットレジスタを３２個並列にし、それぞれ２つの１ビットレジスタの出力を加算する１ビット加算器を１６個設け、各々の加算機の出力を格納する１６個の１ビットレジスタからなる１６個の１ビット演算器とは実質的に同一コストとなる。後者の場合は、パイプの各ステージが短くなるため、その分高速化が可能になる利点もある。
【００１８】
この実施形態では、以上の原理に基づき、様々な多ビット演算命令の実行環境を、単位処理サイズのフィードバック付シリアル算術論理演算回路（Serial-ALCell、以下「ＳＡＬＣ」と称する）の組み合せによって実現する場合の例を挙げる。単位処理サイズとは、ＳＡＬＣにおいて一つのクロックで処理可能な最低ビット長であり、最も単純な例では１ビット、上記のように、通常は１〜３ビット程度である。
【００１９】
＜ＳＡＬＣ＞
ＳＡＬＣの構成例を図２に示す。図２からわかるように、この実施形態によるＳＡＬＣ１は、２系統のデータ入力端D1i、D2iおよび２系統のデータ出力端D1o、D2oと、１系統のリバースデータ入力端Riおよびリバースデータ出力端Roとを有し、前段（図の左側）から後段（図の右側）へ２系統のデータを出力するための順方向ラインと、後段から前段へデータをフィードバックするための逆方向ラインとが形成されている。
以後の説明では、データ出力端D1oから出力されるライン上のデータを「出力データ」、データ出力端D2oから出力されるライン上のデータを「参照データ」、リバースデータ出力端Roから出力（フィードバック）されるライン上のデータを「リバースデータ」とする。
ＳＡＬＣ１において、後述するシリアル演算パイプラインを構成する他のＳＡＬＣとの同期をとるため、出力データはデータラッチ回路１１でラッチされ、参照データはリファレンスラッチ回路１２でラッチされ、リバースデータはリバースラッチ回路１２でラッチされる。
【００２０】
ＳＡＬＣ１は、また、インストラクション入力端CONから入力されるインストラクションの内容をデコードし、デコード結果に応じた処理を実行するとともに、実行結果を出力するラインの選定等を行うためのデコーダ１０を有する。処理の例としては、例えば、四則演算、論理演算のような演算処理のほか、パス制御、ラッチ制御、条件付命令等の制御処理が挙げられる。デコーダ１０は、また、前段から受け取ったデータが後段の方向に向かう順方向ラインと、後段から受け取ったデータが前段の方向に向かう逆方向ラインとの選択も行う。他の複数のＳＡＬＣ１のデコーダとの協働によって、マクロ命令の実行を行うことができる。
【００２１】
デコーダ１０には、上記の演算等を容易にするための種々のラッチ回路、すなわち、シフトラッチ回路１４と、コントロールラッチ回路１５と、キャリーラッチ回路１６とが接続されている。
シフトラッチ回路１４は、出力データのラインよりも参照データのラインが所定時間だけ遅れるようにするために、参照データをラッチし、例えば演算の際に次の桁でこれを出力するように動作する。キャリーラッチ回路１５は、演算結果のキャリーを次の桁の演算時までラッチする。コントロールラッチ回路１５は、出力データ、参照データ、リバースデータの出力タイミングをコントロールするコントロールデータをデコーダ１０から出力の指示が出されるまでラッチする。
【００２２】
以上のように構成されるＳＡＬＣ１では、デコーダ１０によって順方向と逆方向の入れ替えができるため、複数のＳＡＬＣ１をカスケード接続してシリアル演算パイプラインを構築した場合に、順方向ラインと逆方向ラインとを適宜セレクトしてフレキシブルなデータレンジで論理演算を行うことができる。
また、乗算器や除算器、積和演算器、フロート演算器（指数・仮数を分けて演算し、それらの結果を互いに反映させる）などを容易に構築できるようになる。
【００２３】
＜ＳＡＬＰ＞
次に、上記のＳＡＬＣ１を用いたシリアル演算パイプラインの実施形態を説明する。
図３は、複数のＳＡＬＣ１をカスケード接続してなるシリアル演算パイプライン（Serial - ALPipeline、以下、「ＳＡＬＰ」と称する）の構成例を示した図である。ＳＡＬＰ２は、様々な多ビット演算命令を単純なシリアル命令の組み合わせで実現するものである。
なお、１パスで論理演算を完了させる場合、ＳＡＬＣ１の連結数は、加算器では１以上あれば済むが、乗算器では、桁数分のＳＡＬＣ１が必要となる。さらに、多項式演算などを行わせる場合は、同時演算分やデータラッチ分（これらは共通化できる場合がある）が必要である。
【００２４】
多項式を実現する場合は、ＳＡＬＰ２を図４のように、ＳＡＬＣ１の出力を数段前のＳＡＬＣ１のデータ入力端にフィードバックすればよい。これにより、前に演算した結果と新たに投入するデータ間で、論理演算ができるようになり、各々の中間値（入出力間の中間のデータ）同士を演算させるなどの複雑な多項式を１パスで演算することができるようになる。
【００２５】
ＳＡＬＰ２では、複数のＳＡＬＣ１の協働によって種々のマクロ命令を実行することができる。この場合の動作例を具体的に説明する。ここでは、単純な例として、４ビット乗算（Multiplier）の例を挙げる。
【００２６】
図５〜図７は、４つのＳＡＬＣ１をカスケード接続したＳＡＬＰ２における各ＳＡＬＣ１の状態とそのときのデータの内容を示した図である。
４ビット乗算は、図５（ａ）の０サイクルで最初のデータが入力され、１クロック毎に次のデータの入力・インストラクションのデコード・論理演算・ラッチ・出力が行われた後、図７（ｐ）の１６サイクル目で完結する。図中、個々のＳＡＬＣ１のうち面積が拾い部分はデコーダ１０であり、デコーダ１０の上部はキャリーラッチ回路１６であり、デコーダ１０の下部左側はシフトラッチ回路１４、下部右側はコントロールラッチ回路１５である。各々、空白になっている部分および破線部分にはデータ等が存在しないことを表している。０，Ａ０〜Ａ３，Ｂ０〜Ｂ３は演算対象データ、ＳＭ０〜ＳＭ７は演算結果データである。デコーダ１０の部分に記入されている文字はインストラクションであり、「ＳＥＴ」はデータセット（data set：シフトラッチ回路１４、コントロールラッチ回路１５へのデータ格納）、「ＴＨＲ」はスルー（through：データを格納せず、そのまま通過させる）、「ＡＤＳ」はデータ加算＆シフト（add＆shift）を表している。「carry」はキャリーラッチ回路１６にラッチされるキャリービットを表している。
【００２７】
最初のサイクル（０サイクル）で最初のデータ（0,A0）が初段のＳＡＬＣ１に入力され、デコーダ１０でインストラクション解読および論理演算がなされた後（スルーを含む）、演算結果データ（スルーを含む）が後段のＳＡＬＣ１に出力される。この動作をすべてのＳＡＬＣ１に共通のクロックタイミングで同時に入力されるインストラクションに従って繰り返し、最終的に４ビット乗算の結果が最終段のＳＡＬＣ１からＳＭ１〜ＳＭ７として出力される。
【００２８】
マクロ命令の中には、フロート加算（Float Add）のような特殊な演算形態をとるものもある。この場合は、各ＳＡＬＣ１に入力するインストラクションを変えるだけで、容易にそれを実現することができる。因みに、フロート加算において用いるインストラクションは、上記のＡＤＳのほか、ＦＳＵＢ（subtract for float）、ＳＢＳ（subtract & set）、ＣＣＨＧ（controled change）、ＣＳＦＴ（controled shift）、ＩＮＶ（inverse）、ＲＥＶ（reverse）、ＳＦＴ（shift）、ＯＲ、ＳＵＢ（substract&envset）、ＮＳＵＢ（substract&RESET）を用いる。なお、上述したインストラクションの種類は例示であって、その他にもデコーダ１０で実行可能な処理の種類に応じて任意に選定することができる。
【００２９】
本実施形態のＳＡＬＰ２は、ＳＡＬＣ１を基本構成とし、その連結状態を適宜変えながらフレキシブルなデータレンジで論理演算を行うことができるので、データレンジに比例した処理性能を実現することができる（例えば、８ビット演算は１６ビット演算の倍の性能）。また、入出力間の中間データなどのビットを膨らませ，精度を保つことができるようになる。また、処理途上の上位・下位ビットを削除することで，データの質に合わせ効率的な有効桁数を持てるようになる。さらに、指数，仮数を別処理することで、フロート（float）演算が可能となる。
上述したように、ＳＡＬＰ２では、パラレル演算パイプラインに比べてスループットがデータ幅分の１となるが、演算器面積もその分少ない。スループットが減少した分をパイプラインの並列度に割り振れば、原理的に（制御を考えなければ）コストは変わらない。その上、パイプ各ステージは短くなるため、その分を高速化できる。
【００３０】
本実施形態のＳＡＬＰ２では、割り算、飽和演算、積和演算、多項式など、ほとんどの論理演算を実行することができる。単演算子としてのコストパフォーマンスをカスケード接続の演算器と比較すると、１要素の演算に対する比較では、スループットがデータ幅分の１であるためコスト上昇を伴うように見えるが、多量なデータに対する演算では、演算素子を並列に割り振ることによって同一コストとなる。また、クロック間のロジックは、単位処理サイズ（例えば１〜３ビット）毎で切ることができ、また、いわゆるファンアウトが非常に小さいので、周波数を大幅に上げることができる。また、都合のいいことに、パイプラインの先頭に、非常に小さい構成のクロスバを接続することができる。これにより、演算要素の並列ラインの判定、パイプライン末尾ラインのビット判定を非常に小さい構成で実現することができる。アドレス計算、ブランチの条件を算出する等のスカラ処理、処理領域が小領域でパラメータがその領域ごとに変化するような処理に対しては、領域をバインドすることによって実現することができる。
そのため、このようなＳＡＬＰ２を複数用いることにより、効率的な論理演算を行う演算装置を構成することができる。
【００３１】
＜演算装置＞
図８は、３２個のＳＡＬＣ（図１に示したＳＡＬＣ１）をカスケード接続したＳＡＬＰ２を２５６個含んでなる演算装置の構成図である。
各ＳＡＬＰ２は、例えば外部コントローラ、あるいはネットワーク等と接続されるシリアルクロスバ（ＳＣＢ）３に対して、並列に接続されている。ＳＣＢ３は、アドレスデコーダと複数のクロスバスイッチとを有し、小面積で２５６ラインの交換を行うもので、外部コントローラ等からのバスのアドレス投入（コントロールフェーズ）とデータ投入（データフェーズ）の２フェーズで、所望のラインにデータを分配することができる。
【００３２】
２５６個の各々のＳＡＬＰ２には、インストラクションコントローラ（ｉＣＯＮ）４からｎ行ｍ列のインストラクションの集合であるインストラクションアレイが入力され、このインストラクションアレイによって、論理演算およびデータの入出力ラインがそれぞれ独立に制御されるようになっている。
インストラクションアレイは、すべてのＳＡＬＰ２に共通内容のものを同時に入力してもよく、個々のＳＡＬＰ２のアドレスを指定したうえで共通内容のインストラクションアレイを同時に入力してもよく、個々のＳＡＬＰ２に個別的に個別内容のインストラクションアレイを入力してもよい。
ｉＣＯＮ４は、インストラクションアレイを列毎にｍ回、各ＳＡＬＰ２の個々のＳＡＬＣ宛に出力するとともにパイプラインが後段にｎ回移行する際に、実行済みのインストラクションを減ずる。
【００３３】
このことを、１つのＳＡＬＰ２の場合の例を挙げた図９により説明する。
図９の左側に破線ブロックで示されているインストラクションアレイは、ｉＣＯＮ４（図８参照）のメモリに保持されており、１クロック毎に、破線ブロックの右列のインストラクションから順次読み出されてＳＡＬＰ２のＳＡＬＣに入力される。先頭のインストラクションが実行されると、そのインストラクションが１つ削除されて後段のＳＡＬＣに入力され、前段のＳＡＬＣには、次の列のインストラクションのすべてが入力される。これをインストラクションがなくなるまで繰り返す。
インストラクションアレイには、フェッチやデータループを埋め込むことができる。この場合には、従来技術において説明した複雑なＤＦＧを１パスで記述することができるようになり、演算パイプライン動作の制御形態を簡略化させることができる。
【００３４】
次に、この演算装置の動作例を説明する。
ここでは、一例として、ある一つのＳＡＬＰ２を用いて図１０（ａ）に示す「１０１０」（Ａデータ）×「１１００」（Ｂデータ）＋「００１０１１０１」（Ｃデータ）の乗算および加算を行う場合の例を挙げる。
出力される演算結果データは「１１０００１０１」となるのであるが、その演算過程が特徴的なので、最初のサイクルから演算結果データが出力されるまでの過程を図示して説明する。
用意されるデータは、図１０（ｂ）のように、２段に並べられ、その右側から順次演算装置（ＳＡＬＰ２）に入力される。
なお、データサイズを合わせるために、データ取得時にＭＳＢを４回取得し、これをＡデータの先頭に付加する。この付加したデータは、演算結果には影響を及ぼさないものである。図１０（ｂ）右側のデータ説明において「intermediate  data」は、演算過程で使用するいわゆる中間データであり、これも演算結果に影響を及ぼさないものである。
【００３５】
インストラクションアレイは、図１０（ｃ）のようなものが用意される。
この例において乗算と加算に使用するインストラクションは、「ＳＥＴ」（データセット）、「ＡＤＳ」（加算およびシフト）、「ＴＨＲ」の３種類である。
「ＳＥＴ」は、シフトラッチ回路１４に参照データ（下段のデータ入力端に入力されたデータ）、コントロールラッチ回路１５に出力データ（上段のデータ入力端に入力されたデータ）、キャリーラッチ回路１６に「０」をセットすることを、その内容とする。
「ＡＤＳ」はコントロールラッチ回路１５にラッチされているデータが「０」の場合にはシフトのみ、それ以外は加算およびシフトを行うことを、その内容とする。シフトとは、参照データとしてシフトラッチ回路１４にラッチされているデータを使用することをいう。加算のときには、キャリービットのチェンジが行われる（change carry）。
「ＴＨＲ］は入力されたデータ（出力データおよび参照データ）をそのまま後段に送ることを、その内容とする。
【００３６】
最初のサイクルでは、図１１に示すように、その先頭に「ＳＥＴ」が割り当てられた８個インストラクションの列が初段のＳＡＬＣのインストラクション入力端CONに入力され、また、図１０（ｂ）の最右列の２つのデータがデータ入力端D1i、D2iの各々に入力される。インストラクションが「ＳＥＴ」なので、これらの２つのデータ「０」、「０」が、ＳＡＬＣのシフトラッチ回路１４およびコントロールラッチ回路１５にセットされる。キャリーラッチ回路１６には、キャリービットが発生しないので、「０」がセットされる。
【００３７】
２番目のサイクルでは、図１２に示すように、次の列の２つのデータが初段のＳＡＬＣのデータ入力端D1i、D2iの各々に入力され、前のサイクルで入力された２つのデータ「０」、「０」がデータラッチ回路１１およびリファレンスラッチ回路１２から２段目のＳＡＬＣに入力されるようになる。インストラクションは、前のサイクルで初段のＳＡＬＣに入力されたもののうち既に実行された「ＳＥＴ」が除かれたものが２段目のＳＡＬＣに出力され、初段のＳＡＬＣには、図１０（ｃ）の次の列のインストラクションが入力される。初段および２段目のＳＡＬＣのインストラクションとも「ＴＨＲ」なので、それぞれ入力された２つのデータ「０」、「０」は、後段のＳＡＬＣにそのまま送られる。
【００３８】
３番目のサイクルでは、図１３に示すように、さらに次の列の２つのデータが初段のＳＡＬＣのデータ入力端D1i、D2iの各々に入力される。インストラクションは、初段のＳＡＬＣ以外のＳＡＬＣには、２番目のサイクルで入力されたもののうち既に実行された分が除かれたものが入力され、初段のＳＡＬＣには、図１０（ｃ）のさらに次の列のインストラクションが入力される。初段および３段目のＳＡＬＣのインストラクションは「ＴＨＲ」、２段目のＳＡＬＣのインストラクションは「ＳＥＴ」なので、２段目のＳＡＬＣに入力されたデータ「０」、「０」は、そのＳＡＬＣのシフトラッチ回路１４およびコントロールラッチ回路１５にセットされ、初段および３段目のＳＡＬＣについては、それぞれ入力された２つのデータ「０」、「０」が後段のＳＡＬＣにそのまま送られる。４番目のサイクルでの動作は図１４のようになり、上記と同様の手順でＳＡＬＣによる演算実行およびデータ移動が行われる。
【００３９】
５番目のサイクルでは、図１５に示すように、「ＡＤＳ」のインストラクションが初段のＳＡＬＣが入力される点以外は、上記と同様の手順でＳＡＬＣ間による演算実行およびデータ移動が行われる。初段のＳＡＬＣでは、コントロールラッチ回路１５にラッチされているデータが「０」なので、シフトのみとなる。６番目のサイクル（図１６）〜１１番目のサイクル（図２２）についても、上記と同様の手順で、ＳＡＬＣによる演算実行およびデータ移動が行われる。
【００４０】
１２番目のサイクル（図２３）からは、初段のＳＡＬＣに入力されるデータがなくなり、前段のＳＡＬＣ（図２３の場合は初段のＳＡＬＣ）のデータラッチ回路１１およびリファレンスラッチ回路１２にラッチされているデータが後段のＳＡＬＣ（図２３の場合は２段目のＳＡＬＣ）に入力されるようになる。インストラクションについては、上記と同様、実行された分が削除されて、後段のＳＡＬＣに入力される。最終段のＳＡＬＣのデータラッチ回路１１にラッチされているデータが最終演算結果を表すデータのＬＳＢとなる。
【００４１】
１３番目のサイクル（図２４）から２０番目のサイクル（図３１）まで、上記の動作を繰り返し、それぞれ最終段のＳＡＬＣ１のデータラッチ回路１１にラッチされているデータを取り出すことにより、図３１の上段に示される最終演算結果が得られる。
【００４２】
このように、本実施形態の演算装置では、フィードバック機能付きのＳＡＬＣが複数段カスケード接続されたＳＡＬＰ２をＳＣＢ３に対して複数ライン並列に接続し、個々のＳＡＬＣによる演算動作をｉＣＯＮ４からのインストラクションアレイによって個別的に制御できるようにしたので、多種多様な論理演算（四則演算およびその組合せ、飽和演算、積和演算、多項式等）を共通のハードウエアによって容易且つフレキシブルに実現することができる。そのため、論理演算の用途が変わったときでもコストの増加を伴わずにそれに対応することができる。
【００４３】
また、個々のＳＡＬＣ１がフィードバック機能を有しているので（ひいては、ＳＡＬＰ２がそのような機能を有しているので）、様々なデータサイズに対して突発的かつ爆発的な演算量を伴う複雑な処理フローを実現する汎用的なシリアル演算パイプラインを容易に構築することができる。
【００４４】
また、インストラクションアレイの中に、データの並び、その実行手順等を任意に組み込むことができるので、データパスを単純（一直線）にすることができる利点がある。
【００４５】
上記の演算装置は、入出力データに対してインストラクションの量が相対的に多い論理演算に対しては、特に有効なツールとなり得る。この演算装置は、例えばテクスチャマッピングのような複雑な演算を何らのハードウエアを代えずに実施することができる。この場合、テクスチャが１フラグメントに収まらない場合は、周囲フラグメントが複数回投入される。
【００４６】
演算装置は、また、複数の関数を定義したルックアップテーブルと、アドレスサイクル分のスループットでルックアップテーブルの内容を書き換える機能とを有し、様々な関数を多重に演算することもできる。
【００４７】
【発明の効果】
以上の説明から明らかなように、本発明によれば、様々なデータサイズに対して突発的かつ爆発的な演算量を伴う複雑な処理フローを実現する汎用的なシリアル演算パイプラインを構築することができる。
【図面の簡単な説明】
【図１】  本発明の原理を示す図で、（ａ）は１つの１６ビット演算器、（ｂ）は１６個の１ビット演算器の例を示す。
【図２】本発明の一実施形態による算術論理演算回路（SALC）の構成図。
【図３】本発明の一実施形態によるシリアル演算パイプライン（SALP）の構成図。
【図４】多項式を実行するときのＳＡＬＰの構成例を示した図。
【図５】（ａ）〜（ｆ）はシリアル演算パイプラインの動作の一例を示す説明図。
【図６】（ｇ）〜（ｌ）はシリアル演算パイプラインの動作の一例を示す説明図。
【図７】（ｍ）〜（ｐ）はシリアル演算パイプラインの動作の一例を示す説明図。
【図８】本発明の演算装置の一実施形態を表す構成図。
【図９】本発明の演算装置に含まれるシリアル演算パイプライン（SALP）の動作概要図。
【図１０】（ａ）は本発明の演算装置の動作例を説明するための論理演算式、（ｂ）は入力するデータ列の構造説明図、（ｃ）は入力するインストラクションアレイの構造説明図。
【図１１】本発明の演算装置の動作状態説明図（最初のサイクル）。
【図１２】本発明の演算装置の動作状態説明図（２番目のサイクル）。
【図１３】本発明の演算装置の動作状態説明図（３番目のサイクル）。
【図１４】本発明の演算装置の動作状態説明図（４番目のサイクル）。
【図１５】本発明の演算装置の動作状態説明図（５番目のサイクル）。
【図１６】本発明の演算装置の動作状態説明図（６番目のサイクル）。
【図１７】本発明の演算装置の動作状態説明図（７番目のサイクル）。
【図１８】本発明の演算装置の動作状態説明図（８番目のサイクル）。
【図１９】本発明の演算装置の動作状態説明図（９番目のサイクル）。
【図２０】本発明の演算装置の動作状態説明図（10番目のサイクル）。
【図２１】本発明の演算装置の動作状態説明図（11番目のサイクル）。
【図２２】本発明の演算装置の動作状態説明図（12番目のサイクル）。
【図２３】本発明の演算装置の動作状態説明図（13番目のサイクル）。
【図２４】本発明の演算装置の動作状態説明図（14番目のサイクル）。
【図２５】本発明の演算装置の動作状態説明図（15番目のサイクル）。
【図２６】本発明の演算装置の動作状態説明図（16番目のサイクル）。
【図２７】本発明の演算装置の動作状態説明図（17番目のサイクル）。
【図２８】本発明の演算装置の動作状態説明図（18番目のサイクル）。
【図２９】本発明の演算装置の動作状態説明図（19番目のサイクル）。
【図３０】本発明の演算装置の動作状態説明図（20番目のサイクル）。
【図３１】本発明の演算装置の動作状態説明図（21番目のサイクル）。
【符号の説明】
１    算術論理演算回路（ＳＡＬＣ）
１０  デコーダ
１１  データラッチ回路
１２  リファレンスラッチ回路
１３  リバースラッチ回路
１４  シフトラッチ回路
１５  コントロールラッチ回路
１６  キャリーラッチ回路
２  シリアル演算パイプライン（ＳＡＬＰ）
３  シリアル・クロスバ（ＳＣＢ）
４  インストラクションコントローラ（ｉＣＯＮ）
【図１】
0003719509.tif 000002
【図２】
0003719509.tif 000003
【図３】
0003719509.tif 000004
【図４】
0003719509.tif 000005
【図５】
0003719509.tif 000006
【図６】
0003719509.tif 000007
【図７】
0003719509.tif 000008
【図８】
0003719509.tif 000009
【図９】
0003719509.tif 000010
【図１０】
0003719509.tif 000011
【図１１】
0003719509.tif 000012
【図１２】
0003719509.tif 000013
【図１３】
0003719509.tif 000014
【図１４】
0003719509.tif 000015
【図１５】
0003719509.tif 000016
【図１６】
0003719509.tif 000017
【図１７】
0003719509.tif 000018
【図１８】
0003719509.tif 000019
【図１９】
0003719509.tif 000020
【図２０】
0003719509.tif 000021
【図２１】
0003719509.tif 000022
【図２２】
0003719509.tif 000023
【図２３】
0003719509.tif 000024
【図２４】
0003719509.tif 000025
【図２５】
0003719509.tif 000026
【図２６】
0003719509.tif 000027
【図２７】
0003719509.tif 000028
【図２８】
0003719509.tif 000029
【図２９】
0003719509.tif 000030
【図３０】
0003719509.tif 000031
【図３１】
0003719509.tif 000032