(57)【特許請求の範囲】
【請求項１】
入力データを複数のフィールドに分割し、分割されたそれぞれのフィールドの入力データを同時にシフト処理して所定のビットに符号又は０を拡張するデータ分割並列シフタにおいて、
入力データを分割するすることなく所定のシフト量だけシフトするシフト回路と、
入力データを分割するモードに応じて、分割された入力データのそれぞれのフィールドに対応した符号拡張データ又は０拡張データを生成する符号拡張データ生成回路と、
入力データのシフト量ならびに入力データを分割するモードに応じて、前記シフト回路によりシフトされた入力データ又は前記符号拡張データ生成回路により生成された符号拡張データを選択するマスク信号を生成するマスク信号生成回路と、
前記マスク信号生成回路により生成されたマスク信号にしたがって前記シフト回路によりシフトされた入力データ又は前記符号拡張データ生成回路により生成された符号拡張データを選択し、符号を拡張した入力データのシフト結果を出力する出力選択回路
を有することを特徴とするデータ分割並列シフタ。
【請求項２】
前記シフト回路は、入力データの上位方向及び下位方向の双方のシフト方向に入力データをシフトするバレルシフタからなり、
前記マスク信号生成回路は、入力データのシフト量ならびに入力データを分割するモードにシフト方向を加えてマスク信号を生成する
ことを特徴とする請求項１記載のデータ分割並列シフタ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、マイクロプロセッサの演算処理に関連してデータを分割してシフト処理を行うデータ分割並列シフタに関する。
【０００２】
【従来の技術】
データ処理を行うプロセッサの演算処理装置において、データ処理効率を向上する手法としてデータを複数のフィールドに分割し各々のデータを一括して演算を行う処理方式がある。例えば６４ビットのデータを１６ビット単位の４個のデータに分割し、加算命令では同時に４個の加算を行うものである。
【０００３】
0003540136.tif 000002
これは、旧来の科学技術計算や事務処理計算などよりも、画像処理や音声処理などの分野に性能を発揮する。これらの演算は、加減乗除演算、論理演算のほか、シフト処理も必要となる。通常シフト処理にはシフトにより空いた部分に０を詰める論理シフト（ｌｏｇｉｃａｌ  ｓｈｉｆｔ）と符号拡張を行う演算シフト（Ａｒｉｔｈｍｅｔｉｃ  ｓｈｉｆｔ）がある。データを複数のフィールドに分割してシフト処理を行うことを可能とするには、分割のモードに合わせてどの部分を符号拡張するかの切り替え処理が必要となる。例えば３２ビットデータを３２ビットモード、（１６ビット×２）モード、（８ビット×４）モードの各々で３ビット右方向演算シフトを行った場合の結果を以下に示す。
【０００４】
【表１】
0003540136.tif 000003
上記データの内、下線で示した部分が符号拡張の部分である。すなわち、３２ビットシフトモードでは、ビット３１を符号拡張する。（１６ビット×２）モードでは、上位１６ビットの符号拡張はビット３１を拡張し、下位１６ビットにはビット１５を拡張する。（８ビット×４）モードでは、ビット３１からビット２４まではビット３１を拡張し、ビット２３からビット１６まではビット２３を拡張し、ビット１５からビット８まではビット１５を拡張し、ビット７からビット０まではビット７を拡張する。論理シフトでは上記下線部が０に拡張される。
【０００５】
次に、シフト回路の構成を説明する。説明の明瞭化のため右方向のシフト処理について説明する。
【０００６】
まず始めに、分割機能のない通常のシフタに関して説明する。通常の３２ビット右方向シフト回路を図５に示す。図５において、３２ビットシフタでは、１ビット、２ビット、４ビット、８ビット、１６ビットの各々のビットシフト回路１０１〜１０５が多段に接続されている。各々のシフト回路は単純な選択回路で構成されている。シフト回路はこれらの選択回路を多段に積むことで構成される。１ビットシフト回路１０１は、シフトを行う場合は１ビット左隣のデータを出力し、シフトしない場合はデータをそのまま出力する。隣のデータを出力するか、データをそのまま出力するかの選択信号はシフト量の最下位ビットと、左右シフト方向を示す信号から生成される。すなわちシフト量の最下位ビットに１が立っている場合は１ビットシフトを行い、０の場合はシフトを行う必要が無く、データをそのまま下方に出力する。２ビットシフト回路１０２では、２ビット左のデータを出力するか、そのまま出力するかの選択になる。２ビットシフト回路１０２の選択信号は、シフト量の下位から２ビット目の値となる。シフト量信号に従い各々のシフト回路を動作させるかどうかで、０ビットから３１ビットまでの任意のシフト量のシフト動作を行う。例えば３ビットシフトでは、１ビットシフト及び２ビットシフト回路１０１、１０２でシフトを行い、他のビットシフト回路１０３、１０４、１０５はシフトを行わない。
【０００７】
フィールドが分割されない場合、符号拡張処理は、各シフト回路で対応する左隣のデータが無いポートに、演算シフトの場合は元データの一番左の値を、論理シフトの場合は０を拡張することで実現される。
【０００８】
符号拡張に使用されるデータは、演算シフト又は論理シフトのどちらのシフトを行うかを示す制御信号で、符号拡張データ生成回路において予め生成される。例えば１ビットシフト回路１０１の内、一番左端の選択回路ではとってくる左隣のデータがない。そこで、そのポートに符号拡張データ生成回路からの符号拡張データを挿入することで、１ビットシフトが起こった場合は同選択回路は符号拡張データを出力する。
【０００９】
符号拡張データは、例えば図６に示すように、マルチプレクサ１０６〜１０８と論理ゲート１０９〜１１２を備えて構成される。このような構成において、演算シフト信号がハイレベルの演算シフトにおいて、３２ビットシフト時は、元データのビット３１を３２ビットすべての符号拡張データとして出力し、（１６ビット×２）モードでは、上位ビット３１からビット１６までは元データのビット３１を、下位ビット１５からビット０までは、元データのビット１５を符号拡張データとして出力し、（８ビット×４）モードでは、ビット３１からビット２４までは元データのビット３１を、ビット２３からビット１６までは元データのビット２３を、ビット１５からビット８までは元データのビット１５を、ビット７からビット０までは元データのビット７を出力する。一方、演算シフト信号（Ａｒｉｔｈｍｅｔｉｃ）がロウレベルの論理シフト時は、全てのビットに対して符号拡張データとして０を出力する。
【００１０】
図５に示す回路に上記（１６ビットシフト×２）モード、（８ビットシフト×４）モードの追加を行う場合には、上記符号拡張の処理をどう行うかが問題となる。符号拡張機能を加えるには、図７に示すように、前記ビットシフト回路１０１〜１０５の各段の間に符号拡張を行うか通常のシフトを行うかの符号拡張選択回路１１３を挿入することで行うことができる。
【００１１】
（１６ビット×２）モードの時は、１６ビットシフト回路１０５は、全ての符号拡張選択回路が符号拡張を選択するように制御する。８ビットシフト回路１０４では、同回路のビット１５からビット８までの符号拡張選択回路１１３が符号拡張を選択するように制御する。同様に４ビットシフト回路１０３ではビット１５からビット４までを、２ビットシフト回路１０２ではビット１５からビット２までを、１ビットシフト回路１０１ではビット１５からビット１までを符号拡張を選択するように制御する。
【００１２】
（８ビット×４モード）の時、１６ビットシフト回路１０５および８ビットシフト回路１０４は、全ての符号拡張選択回路１１３が符号拡張を選択するように制御する。４ビットシフト回路１０３では、ビット２３からビット２０、ビット１５からビット１２、ビット７からビット４の符号化拡張回路が符号拡張データを選択するように制御する。２ビットシフト回路１０２では、ビット２３からビット１８、ビット１５からビット１０、ビット７からビット２の各々の符号拡張選択回路１１３が符号拡張データを選択するように制御する。１ビットシフト回路１０１では、ビット２３からビット１７、ビット１５からビット９、ビット７からビット１の符号拡張選択回路１１３が符号拡張データを選択するように制御する。
【００１３】
このように、符号拡張選択回路１１３を各ビットシフト回路の間に挿入することで、データフィールドを分割しての並列シフトが可能となる。しかし、符号拡張選択回路１１３は、シフト回路と同様選択器で実現されるため、回路の通過段数だけを見ても通常のシフト回路の２倍となり、処理速度も非常に遅くなる。また、符号拡張データ生成回路を設けることを説明したが、この場合は同回路により符号拡張データを生成する遅延時間はそのまま全体の遅延時間に加わることになる。符号拡張データ生成回路を使わない方法として、各符号拡張選択回路１１３にモードによりどのデータを符号拡張データとして用いるかを選択する選択回路を付加することも考えられるが、この場合には、符号拡張データ生成回路を用いた場合以上の速度遅延ならびに回路規模の増大を招くことになる。
【００１４】
また、通常のシフト回路では、３２ビットシフトのために、選択回路を５段通過する必要があるが、これを、速度向上のため、選択機能を合わせて２入力選択回路に代えて４入力選択回路を使い、例えば１段で１ビットシフトと２ビットシフトを選択回路の入力として左３ビット、１ビット、シフト無しからの選択を行うようにし一度に２段分の処理を行うように回路を組むことも可能である。しかし、同回路に並列シフト機能を付加する場合は、１ビットあたりの符号拡張選択回路が３倍となり回路の構成が難しくなる。また、左方向シフト、右方向シフトの双方が行えるバレルシフタにおいては、同符号拡張選択回路も２倍必要となり、面積及び速度とも更に回路構成が難しくなる。
【００１５】
【発明が解決しようとする課題】
以上説明したように、分割されたデータをそれぞれ並列にシフト処理する従来のデータ分割並列シフタにおいて、符号拡張処理を行う場合は、符号拡張を行わない通常のシフト回路の２倍の選択器が必要となり、構成の大型化ならびに処理速度の低下を招いていた。さらに、拡張しようとする符号を予め生成する生成時間は、シフト回路全体の動作時間に加わるため、処理速度のさらなる低下を招いていた。
【００１６】
そこで、この発明は、上記に鑑みてなされたものであり、その目的とするところは、符号拡張を含めたデータ分割並列シフト処理の処理時間の短縮化を達成し得るデータ分割並列シフタを提供することを目的とする。
【００１７】
【課題を解決するための手段】
上記目的を達成するために、請求項１記載の発明は、入力データを複数のフィールドに分割し、分割されたそれぞれのフィールドの入力データを同時にシフト処理して所定のビットに符号又は０を拡張するデータ分割並列シフタにおいて、入力データを分割するすることなく所定のシフト量だけシフトするシフト回路と、入力データを分割するモードに応じて、分割された入力データのそれぞれのフィールドに対応した符号拡張データ又は０拡張データを生成する符号拡張データ生成回路と、入力データのシフト量ならびに入力データを分割するモードに応じて、前記シフト回路によりシフトされた入力データ又は前記符号拡張データ生成回路により生成された符号拡張データを選択するマスク信号を生成するマスク信号生成回路と、前記マスク信号生成回路により生成されたマスク信号にしたがって前記シフト回路によりシフトされた入力データ又は前記符号拡張データ生成回路により生成された符号拡張データを選択し、符号を拡張した入力データのシフト結果を出力する出力選択回路を有することを特徴とする。
【００１８】
請求項２記載の発明は、請求項１記載のデータ分割並列シフト回路において、前記シフト回路は、入力データの上位方向及び下位方向の双方のシフト方向に入力データをシフトするバレルシフタからなり、前記マスク信号生成回路は、入力データのシフト量ならびに入力データを分割するモードにシフト方向を加えてマスク信号を生成することを特徴とする。
【００１９】
【発明の実施の形態】
以下、図面を用いてこの発明の実施形態を説明する。
【００２０】
図１は請求項１記載の発明の一実施形態に係るデータ分割並列シフタの構成を示す図である。
【００２１】
図１において、データ分割並列シフタは、分割シフト機能を持たない通常のシフト回路１と、分割モードに対応して符号拡張データを生成する符号拡張データ生成回路２と、シフト量をデコードすることによりどこまで符号拡張を行うかを決定するマスク信号を生成するマスク信号生成回路３、マスク信号生成回路３からのマスク信号により通常にシフトしたデータ又は符号拡張データ生成回路２の符号拡張データを選択する選択回路４を備えて構成され、シフト処理、符号拡張データ生成、マスク信号の生成を並列に行うことにより、シフト処理遅延時間を通常のシフト処理の遅延に最終段の遅延が加わるのみでフィールド分割並列シフト機能を実現するようにしている。
【００２２】
この実施形態のデータ分割並列シフタは、３２ビットシフトモード、（１６ビット×２）シフトモード、（８ビット×４）シフトモードを有し、演算右シフト、論理右シフトを行う３２ビット右方向のシフタである。図１に示すシフト回路１は左右両方向へのシフトを行うことのできるバレルシフタを示しているが、本実施形態では右方向シフトのみであるため図１のバレルシフタを右方向専用シフト回路１とし、左右シフト方向を示す制御信号を削除する。
【００２３】
シフト回路１は従来例の説明でも用いた、図５に示すシフト回路を用いる。符号拡張データ生成回路２も同様に、従来例の説明で用いた図６に示す符号拡張データ生成回路を用いる。
【００２４】
次に、この発明の特徴となるマスク信号生成回路３について説明する。
【００２５】
この実施形態のにおいて想定している３２ビットの入力データの分割モードは、３２ビット、１６ビット×２、８ビット×４の３モードである。このため、まず分割最小単位である８ビットのマスク信号を、シフト量の下位３２ビットから生成し、更にシフト量の上位２ビットと、３つのモード信号から４つの８ビットフィールド毎に８ビット全てをマスクするか、８ビットのマスク信号でマスクするか、８ビット全てをマスクしないかを選択することにより３２ビットのマスク信号を生成する構成が回路として容易である。
【００２６】
図２にシフト量の下位３ビットから８ビット単位のマスク信号を生成する８ビットマスク信号生成回路８を示す。図２において、マスク信号生成回路８は一種のデコーダであり、シフト量又は反転シフト量を受ける否定論理積ゲート（ＮＡＮＤ）５と、ＮＡＮＤ５の出力により導通制御される直列接続されたトランジスタ６と、トランジスタ６のそれぞれの直列接続点の信号を受けて８ビットのマスク信号Ｍａｓｋ０〜Ｍａｓｋ７を出力するインバータ７を備えて構成される。
【００２７】
このような構成において、シフト量の下位３ビットであるＭ２，Ｍ１，Ｍ０の値が確定すると、同値に対応したＮＡＮＤ５の出力のみ０となり、このＮＡＮＤ５の出力が接続されたトランジスタ６のゲートを閉じる。他のＮＡＮＤ５は１を出力しており、各々の出力が接続されたトランジスタ６はＯＮ状態となる。このため、閉じたトランジスタ６の左側のトランジスタ６間の各ノードは全て０となり、右側の各ノードは１となる。各ノードに接続されたインバータ７は閉じたトランジスタ６の左側は１を、右側は０を出力する。例えばＭ２，１，０が０１１であった場合、左から４番目のＮＡＮＤ５の出力のみ０となる。そのため、Ｍａｓｋ７からＭａｓｋ５までのインバータ７の入力ノードは０となり、Ｍａｓｋ４からＭａｓｋ０のインバータ７の入力ノードは１となる。結果として、Ｍａｓｋ７〜Ｍａｓｋ０は１１１００００となる。
【００２８】
次に、８ビット単位よりも上位のマスク信号の生成論理を説明する。各８ビット単位でのマスク信号がとりうる状態は、８ビット全てがマスクされている状態、８ビットマスク信号生成回路８の出力によりマスクされるかどうかが決まる状態、８ビット全てがマスクされない状態の３状態をとりうる。例えばシフト量が０１０１１での３２ビットモードでは、マスク信号は、
0003540136.tif 000004
となる。最上位の８ビットは全てマスクされる状態、上位より２番目の８ビットは８ビットマスク信号生成回路８のマスク信号を用いる状態、３番目および最下位の８ビットは各々全てマスクされない状態となる。同じシフト量で、（１６ビット×２）モードの場合のマスク信号は、
0003540136.tif 000005
となる。シフト量の上位２ビットであるＭ４，Ｍ３、シフトモード信号ｍｏｄｅ３２、ｍｏｄｅ１６、ｍｏｄｅ８、８ビットマスク信号生成回路８の出力Ｍａｓｋ［７：０］より、マスク信号ｍａｓｋ［３１：０］を生成する式を以下に示す。なお、以下に示す式において、｜は論理和を示し、＆は論理積を示し、b は信号の反転を示すものとする。
【００２９】
【数１】
0003540136.tif 000006
となる。上式のｉｆ文の条件が選択信号の論理となり、この選択信号にしたがって図３に示すマスク信号生成回路３のマルチプレクサ９により各々８ビット全て１かＭａｓｋ［７：０］か全て０の選択を行い、マスク信号生成回路３の出力となる。
【００３０】
シフト回路１によりシフトデータ、符号拡張データ生成回路３により符号拡張データが出力され、マスク信号生成回路３により生成されたマスク信号に従いマスク信号が１ならば符号拡張データを、０ならばシフトデータを、最終段出力選択回路４において各々のビット単位で選択することで最終出力を得る。
【００３１】
上記シフト回路１、符号拡張データ生成回路２、マスク信号生成回路３は最終出力選択回路４まで各々全く独立に処理を行うことができる。このため、回路の遅延は従来例で示したようなお互いの遅延の累積加算とはならなず、シフト回路１、符号拡張データ生成回路２、マスク信号生成回路３の内の最大遅延のものに、最終段の出力選択回路４の遅延が付加されるだけとなる。マスク信号生成回路３内部においても、８ビットマスク信号生成回路８と、上位の選択信号を生成する論理回路とは並列に処理することができる。そのため、本実施形態のシフト回路１は、通常のシフト回路に最終段の出力選択回路４の遅延を加える程度の遅延時間でシフト処理を行うことができ、従来に比べてデータ分割並列シフト処理の処理時間を短縮することが可能となる。
【００３２】
次に、請求項２記載の発明の一実施形態を説明する。
【００３３】
この実施形態では、マスク信号生成回路３の構成を除いて前記実施形態とほぼ同様に構成され、シフト回路１は図１に示す実施形態に使用した従来のバレルシフタを使用できる。図１に示す右方向シフトのみのシフト回路では左方向からのシフトデータかデータをそのまま通過させるかの２入力選択回路であったのに対し、この実施形態のバレルシフタは、右方向からの入力シフトデータも選択できる３入力選択回路を用いることになる。すなわち、１ビットシフト回路では、１ビット右隣のデータ、１ビット左隣のデータ、シフトなしのデータの３つから１つを選択することになる。右方向シフト回路では２段分の処理を１度で行うために、４入力選択回路を用いたのと同じように、バレルシフタでは３入力選択回路の代わりに７入力選択回路を用いる。
【００３４】
符号拡張データ生成回路であるが、通常データの符号ビットはＭＳＢであり、本実施形態では最も左側のビットとなる。このため、左方向シフトの場合には、シフトにより空白となる部分は通常０を詰めることとなる。そのため、左方向シフトは論理シフトのみとなり、符号拡張データ生成回路は、前記実施形態で用いたものをそのまま使用できる。
【００３５】
マスク信号生成回路は、左右のシフト方向による切り替えに対応するために、回路の付加が必要となり、８ビットマスク信号生成回路は、例えば図４に示すように、下位３ビットのシフト量Ｍ０〜Ｍ２のいずれか１ビットと左右シフト方向を切り替える切り替え信号を受ける排他的論理和ゲート（ＥＸＯＲ）１０と、ＥＸＯＲ１０の出力又はその反転信号を受けるＮＡＮＤ１１と、ＮＡＮＤ１１の出力により導通制御されて直列接続されたトランジスタ１２と、トランジスタ１２の直列接続点の出力を反転するインバータ１３と、トランジスタ１２の直列接続点の出力を受けるバッファ１４と、左右シフト方向の切り替え信号に基づいてインバータ１３の出力又はバッファ１４の出力を選択してマスク信号Ｍａｓｋ０〜Ｍａｓｋ７を出力する選択器１５を備えて構成され、左右シフト切り替え信号によりシフト量データを反転して入力し、出力も反転しかつ１ビットシフトする。これにより、シフト量の最下位３ビットが０１１の時、右方向シフトでは、
Mask[7:0] = 11100000
左方向シフトでは、
Mask[7:0] = 00000111
となる。
【００３６】
８ビット単位よりも上位のマスク信号生成回路は、前記実施形態と同様に全て１、全て０、８ビットマスク信号生成回路の出力の３つの出力のいずれかを選択することは同じてある。ただし、選択制御信号のロジックは８ビットマスク信号生成回路の場合と同様に変更する必要がある。その実施形態は様々考えられるが、基本的に上位と下位が線対称になればよい。すなわち右方向シフト時、ビット［３１：２４］のマスク信号生成のための選択信号を、ビット［７：０］に使い、ビット［２３：１６］に使う選択信号を、ビット［１５：８］に使えばよい。
【００３７】
バレルシフタ１のシフトデータ又は符号拡張データ生成回路２により生成された符号拡張データの選択は、前記実施形態の出力選択回路４と同様に構成される。
【００３８】
この実施形態にあっては、入力データの左右いずれのシフト方向に対しても前記実施形態と同様の効果を得ることができる。
【００３９】
なお、上記実施形態では、入力データを３２ビット、分割モードを３２ビット、（１６ビット×２）、（８ビット×４）としているが、入力データのビット数や分割モードに制約を受けることはなく、例えば６４ビットの入力データに対して分割モードを６４ビット、（３２ビット×２）、（１６ビット×４）、（８ビット×８）であっても、上述した実施形態を拡張して同様に実施することは可能である。
【００４０】
【発明の効果】
以上説明したように、この発明によれば、データのシフト処理と、符号拡張データの生成と、符号拡張をどのビットまで行うかを確定するマスク信号の生成を並行して行うようにしたので、従来のシフト回路の遅延に選択回路１段分の遅延の増加程度で、データを複数のフィールドに分割して同時にシフト処理する機能が実現でき、符号拡張を含めたデータ分割並列シフト処理の処理時間を短縮することができる。
【図面の簡単な説明】
【図１】請求項１記載の発明の一実施形態に係るデータ分割並列シフタの構成を示す図である。
【図２】８ビットマスク信号生成回路の構成を示す図である。
【図３】マスク信号生成回路の構成を示す図である。
【図４】請求項２記載の発明の一実施形態に係るデータ分割並列シフタの８ビットマスク信号生成回路の構成を示す図である。
【図５】入力データの分離機能のない３２ビット右方向シフト回路の構成を示す図である。
【図６】符号拡張データ生成回路の構成を示す図である。
【図７】従来のデータ分割並列シフタの構成を示す図である。
【符号の説明】
１  シフト回路
２  符号拡張データ生成回路
３  マスク信号生成回路
４  出力選択回路
５，７，１０，１１  論理ゲート
６，１２，１３  トランジスタ
８  ８ビットマスク信号生成回路
９  選択器
１４  バッファ
【図１】
0003540136.tif 000007
【図２】
0003540136.tif 000008
【図３】
0003540136.tif 000009
【図４】
0003540136.tif 000010
【図５】
0003540136.tif 000011
【図６】
0003540136.tif 000012
【図７】
0003540136.tif 000013