(57)【特許請求の範囲】
【請求項１】
ｎ個（ｎは２以上の整数）の左シフト、右シフト、シフト無の各状態を選択可能な双方向ビットシフタを縦続接続し、前記ｎ個の双方向ビットシフタの各々のシフト動作をシフト方向制御信号およびシフト量制御信号に基づいて選択することで、前記ｎ個の双方向ビットシフタの全体で前記シフト方向制御信号で指定された方向に前記シフト量制御信号で指定されたシフト量だけシフトする双方向バレルシフタであって、
少なくとも最大シフト量を左もしくは右方向に設定している双方向ビットシフタについて左シフトの場合と右シフトの場合でシフト量を異なる値に設定したことを特徴とする双方向バレルシフタ。
【請求項２】
ｎ個の双方向ビットシフタは、左シフト状態ではｍビット（ｍは２以上の整数）の入力データをＸj ビット（ｊ＝０，１，…，ｎ−１）だけ左方向にシフトして出力し、右シフト状態では前記ｍビットの入力データをＹj ビット（ｊ＝０，１，…，ｎ−１）だけ右方向にシフトして出力し、シフト無状態では前記ｍビットの入力データをシフトせずにそのまま出力し、
前記ｎ個の双方向ビットシフタの左方向のシフト量Ｘ0 ，Ｘ1 ，…，Ｘn-2 ，Ｘn-1 は、０から（Ｘ0 ＋Ｘ1 ＋…＋Ｘn-2 ＋Ｘn-1 ）までの範囲の全てのシフト量を表現できるような値の組み合わせに設定され、前記ｎ個の双方向ビットシフタの右方向のシフト量Ｙ0 ，Ｙ1 ，…，Ｙn-2 ，Ｙn-1 は、０から（Ｙ0 ＋Ｙ1 ＋…＋Ｙn-2 ＋Ｙn-1 ）までの範囲の全てのシフト量を表現できるような値の組み合わせに設定されることを特徴とする請求項１記載の双方向バレルシフタ。
【請求項３】
シフト方向制御信号およびシフト量制御信号を入力として、ｎ個の双方向ビットシフタの動作状態をそれぞれ選択するｎ個のデコーダを前記ｎ個の双方向ビットシフタに対応して設けたことを特徴とする請求項１または２記載の双方向バレルシフタ。
【請求項４】
デコーダは、シフト方向制御信号が左シフトを指定し、そのときのシフト量制御信号が示すシフト量ＳＬであるときに、シフト量ＳＬを、１または０の２進数で表される係数Ｌi とｎ個の双方向ビットシフタの左方向のシフト量Ｘ0 ，Ｘ1 ，…，Ｘn-2 ，Ｘn-1 とを用いて、
ＳＬ＝Ｌn-1 ・Ｘn-1 ＋Ｌn-2 ・Ｘn-2 ＋  …＋Ｌ1 ・Ｘ1 ＋Ｌ0 ・Ｘ0 
で表される多項式に分解したときに、値が１である係数Ｌi に対応した双方向ビットシフタに左シフト状態を選択し、値が０である係数Ｌi に対応した双方向ビットシフタにシフト無状態を選択し、
シフト方向制御信号が右シフトを指定し、そのときのシフト量制御信号が示すシフト量ＳＲであるときに、シフト量ＳＲを、１または０の２進数で表される係数Ｒi とｎ個の双方向ビットシフタの右方向のシフト量Ｙ0 ，Ｙ1 ，…，Ｙn-2 ，Ｙn-1 とを用いて、
ＳＲ＝Ｒn-1 ・Ｙn-1 ＋Ｒn-2 ・Ｙn-2 ＋  …＋Ｒ1 ・Ｙ1 ＋Ｒ0 ・Ｙ0 
で表される多項式に分解したときに、値が１である係数Ｒi に対応した双方向ビットシフタに右シフト状態を選択し、値が０である係数Ｒi に対応した双方向ビットシフタにシフト無状態を選択するようにしたことを特徴とする請求項３記載の双方向バレルシフタ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、マイクロプロセッサ等のデータ処理で用いられる双方向バレルシフタに関するもので、高速化が容易な双方向バレルシフタに係る。
【０００２】
【従来の技術】
マイクロプロセッサ等のデータ処理装置においては、データ処理の高速化のため、１動作で任意の方向に任意の量のビットシフト動作を行う双方向バレルシフタ回路が広く用いられている。シフト回路の高速化実現のため、ビット単位で対称的なレイアウト構造をもつビットスライス型の回路設計が行われることが多く、またシフト動作を複数のステージに分割して処理するパイプライン処理も考案されている（例えば特開平１０−１９８５５０号公報など）。
【０００３】
ビットスライス構造を特徴とする双方向バレルシフタ回路の従来例について、以下に説明する。
【０００４】
図４は８ビットのデータを左方向（ＭＳＢ側）または右方向（ＬＳＢ側）に１ビット、２ビット、もしくは３ビットの何れかシフトする従来の双方向バレルシフタの一例を示すブロック図である。
【０００５】
この双方向バレルシフタは、図４に示すように、８個のフリップフロップ付３入力セレクタＳ００〜Ｓ０７、Ｓ１０〜Ｓ１７、２個のデコーダＤ０，Ｄ１、８個のフリップフロップＦ０〜Ｆ７、クロックバッファＣＢとを含んで構成されていて、被シフトデータとなる８ビットのデータ信号Ａ（７）〜Ａ（０）を、左方向または右方向に１ビット、２ビット、もしくは３ビットの何れかシフトして、データ信号Ｒ（７）〜Ｒ（０）として出力する。
【０００６】
上記のクロックバッファＣＢは、クロック信号ＣＬＯＣＫがクロック信号入力Ｅとして加えられ、クロック信号ＣＬＯＣＫと同期したフリップフロップ制御出力信号ＢＥを出力する。
【０００７】
また、フリップフロップＦ０〜Ｆ７は、データ信号Ａ（７）〜Ａ（０）を入力し、フリップフロップ制御出力信号ＢＥがクロック入力ＣＫとして加えられることによって、クロック信号ＣＬＯＣＫに同期して被シフトデータを出力する。
【０００８】
また、フリップフロップ付３入力セレクタＳ００〜Ｓ０７は左１ビット／右１ビットシフタＢＳ１１を構成し、左右両方向に１ビットシフトを実行可能である。つまり、フリップフロップＦ０〜Ｆ７のＱ出力を左方向に１ビットシフトして出力する状態と、フリップフロップＦ０〜Ｆ７のＱ出力を右方向に１ビットシフトして出力する状態と、フリップフロップＦ０〜Ｆ７のＱ出力をシフトせずにそのまま出力する状態とを選択可能である。
【０００９】
この場合、フリップフロップ付３入力セレクタＳ００〜Ｓ０７の入力端子Ｌ，Ｃ，ＲにはフリップフロップＦ０〜Ｆ７の出力Ｑまたは符号データＬ０，Ｍ０が図１に示すように接続される。
【００１０】
なお、上述の符号データＬ０，Ｍ０および後述の符号データＬ１，Ｍ１は、シフト動作により生じる空きビットに入力する値を指定するためのデータである。例えば左シフトの場合、シフト結果の０ビット位置の値は、シフトされるデータ（入力データ）だけでは決まらないので、何らかの手段で指定する必要がある。
【００１１】
そして、制御信号ＳＬがＨレベルの時には入力端子Ｌからの入力が、制御信号ＳＣがＨレベルの時は入力端子Ｃからの入力が、制御信号ＳＲがＨレベルの時は入力端子Ｒからの入力が選択され、選択結果は制御信号ＣＬＫに同期した出力信号Ｙとして出力される。
【００１２】
また、フリップフロップ付３入力セレクタＳ１０〜Ｓ１７は、左２ビット／右２ビットシフタＢＳ２２を構成し、左右両方向に２ビットシフトを実行可能である。つまり、フリップフロップ付３入力セレクタＳ００〜Ｓ０７の出力を左方向に２ビットシフトして出力する状態と、フリップフロップ付３入力セレクタＳ００〜Ｓ０７の出力を右方向に２ビットシフトして出力する状態と、フリップフロップ付３入力セレクタＳ００〜Ｓ０７の出力をシフトせずにそのまま出力する状態とを選択可能である。
【００１３】
この場合、フリップフロップ付３入力セレクタＳ１０〜Ｓ１７の入力端子Ｌ，Ｃ，Ｒにはフリップフロップ付３入力セレクタＳ００〜Ｓ０７の出力Ｑまたは符号データＬ１，Ｍ１が図１に示すように接続される。
【００１４】
そして、制御信号ＳＬがＨレベルの時には入力端子Ｌからの入力が、制御信号ＳＣがＨレベルの時は入力端子Ｃからの入力が、制御信号ＳＲがＨレベルの時は入力端子Ｒからの入力が選択され、選択結果は制御信号ＣＬＫに同期した出力信号Ｙとして出力される。
【００１５】
デコーダＤ０はシフト量信号Ｂ（０）、シフト方向制御信号ＬＦＴ（Ｈレベルのときに、左シフトを意味し、Ｌレベルのときに右シフトを意味する）およびフリップフロップ制御用のクロック信号ＣＬＯＣＫを入力し、制御信号ＳＬ，ＳＣ，ＳＲ，ＢＥを出力してフリップフロップ付３入力セレクタＳ００〜Ｓ０７を制御する。
【００１６】
デコーダＤ１はシフト量信号Ｂ（１）、シフト方向制御信号ＬＦＴおよびフリップフロップ制御用のクロック信号ＣＬＯＣＫを入力し、制御信号ＳＬ，ＳＣ，ＳＲ，ＢＥを出力してフリップフロップ付３入力セレクタＳ１０〜Ｓ１７を制御する。
【００１７】
シフト量制御信号が２ビットの２進数で表されておれば、シフト量制御信号の下位ビットがシフト量信号Ｂ（０）に対応し、上位ビットがシフト量信号Ｂ（１）に対応する。
【００１８】
なお、フリップフロップＦ０〜Ｆ７、フリップフロップ付３入力セレクタＳ００〜Ｓ０７，Ｓ１０〜Ｓ１７、はビット単位で対称的にレイアウトされており、８ビットのビットスライスを構成する。
【００１９】
フリップフロップ付３入力セレクタＳ００〜Ｓ０７，Ｓ１０〜Ｓ１７の具体的な構成は、後述する実施の形態の場合と同じであり、図２に示す通りである。
【００２０】
デコーダの具体的な構成は、後述する実施の形態の場合と同じであり、図２に示す通りである。
【００２１】
以上のような構成の双方向バレルシフタにおいては、被シフトデータとなる８ビットのデータ信号Ａ（７）〜Ａ（０）はフリップフロップＦ０〜Ｆ７を経由してフリップフロップ付３入力セレクタＳ００〜Ｓ０７，Ｓ１０〜Ｓ１７に入力され、２ビットのデータＢ（１），Ｂ（０）で示される値だけビットシフトされる。
【００２２】
シフト方向制御信号ＬＦＴは上記のように、シフト方向を決める信号で、Ｈレベルの時はＭＳＢ側へシフトされ、Ｌレベルの時はＬＳＢ側へシフトされる。この場合、シフト処理は２ステージに分かれており、最初のサイクルではフリップフロップ付３入力セレクタＳ００〜Ｓ０７を経由し、第２のサイクルではフリップフロップ付３入力セレクタＳ１０〜Ｓ１７を経由する。最初のサイクルは双方向１ビットシフトが実行され（左右１ビットシフタ）、第２のサイクルは双方向２ビットシフトが実行される（左右２ビットシフタ）。
【００２３】
この従来例の特徴点は次の通りである。上記フリップフロップＦｉ（ｉ＝０〜７）の出力Ｑは、同じビットｉのフリップフロップ付３入力セレクタＳ０ｉのＣ入力、１ビットＭＳＢ側のフリップフロップ付３入力セレクタＳ０（ｉ＋１）のＬ入力および１ビットＬＳＢ側のフリップフロップ付３入力セレクタＳ０（ｉ−１）のＲ入力に接続される。
【００２４】
また、上記フリップフロップ付３入力セレクタＳ０ｉ（ｉ＝０〜７）の出力Ｙは、同じビットｉのフリップフロップ付３入力セレクタＳ１ｉのＣ入力、２ビットＭＳＢ側のフリップフロップ付３入力セレクタＳ１（ｉ＋２）のＬ入力および２ビットＬＳＢ側のフリップフロップ付３入力セレクタＳ１（ｉ−２）のＲ入力に接続される。
【００２５】
【発明が解決しようとする課題】
図４の構成の場合、フリップフロップ付３入力セレクタＳ００〜Ｓ０７の出力Ｙの配線長が、フリップフロップＦ０〜Ｆ７の出力Ｑの配線長よりも大きくなるため、第２のサイクルでのシフト処理実行時間が第１のサイクルでのシフト処理実行時間に比べて大きくなり、その分パイプラインの動作周波数小さくなり動作速度が低下するという問題点がある。
【００２６】
【課題を解決するための手段】
本発明の目的は、フリップフロップ付３入力セレクタの入力信号配線長を短縮して配線遅延時間を小さくし、高速にシフト動作する双方向バレルシフタを提供することにある。
【００２７】
上記目的を達成するために、本発明では、ビットシフト方向がパイプラインの各ステージで変化しない点、例えば第１のステージで右シフトする場合は以後のステージで左シフトしない点に着目し、各ステージの出力信号配線を、少なくとも最大シフト量を左もしくは右方向に設定している双方向ビットシフタまたは全ての双方向ビットシフタについて左シフトの場合と右シフトの場合でシフト量を異なる値にして各ステージの出力信号配線負荷の均等化を図ることにより、出力配線長の最大値が小さくなる配線接続を構成する。つまり、ｎ個の双方向ビットシフタにおける各々の左方向のシフト量と右方向のシフト量との組み合わせを、左右両方向のシフト量の和の最大値がｎ個の双方向ビットシフタにおける左右の最大シフト量の和より小さくなるように設定して各ステージの出力信号配線負荷の均等化を図ることにより、出力配線長の最大値が小さくなる配線接続を構成する。
【００２８】
本発明の請求項１記載の発明の双方向バレルシフタは、ｎ個（ｎは２以上の整数）の左シフト、右シフト、シフト無の各状態を選択可能な双方向ビットシフタを縦続接続し、ｎ個の双方向ビットシフタの各々のシフト動作をシフト方向制御信号およびシフト量制御信号に基づいて選択することで、ｎ個の双方向ビットシフタの全体でシフト方向制御信号で指定された方向にシフト量制御信号で指定されたシフト量だけシフトする双方向バレルシフタであって、
少なくとも最大シフト量を左もしくは右方向に設定している双方向ビットシフタについて左シフトの場合と右シフトの場合でシフト量を異なる値に設定したことを特徴とする。
【００２９】
この構成によれば、各ビットシフタの入力データ信号配線長の最大値を小さくすることで処理速度の遅いビットシフタの動作速度を向上させ、配線遅延時間を小さくでき、双方向バレルシフタのシフト処理を高速化させるができる。その結果、高速にシフト動作する双方向バレルシフタを得ることができる。
【００３０】
本発明の請求項２記載の双方向バレルシフタは、請求項１記載の双方向バレルシフタにおいて、ｎ個の双方向ビットシフタは、左シフト状態ではｍビット（ｍは２以上の整数）の入力データをＸj ビット（ｊ＝０，１，…，ｎ−１）だけ左方向にシフトして出力し、右シフト状態ではｍビットの入力データをＹj ビット（ｊ＝０，１，…，ｎ−１）だけ右方向にシフトして出力し、シフト無状態ではｍビットの入力データをシフトせずにそのまま出力し、
ｎ個の双方向ビットシフタの左方向のシフト量Ｘ0 ，Ｘ1 ，…，Ｘn-2 ，Ｘn-1 は、０から（Ｘ0 ＋Ｘ1 ＋…＋Ｘn-2 ＋Ｘn-1 ）までの範囲の全てのシフト量を表現できるような値の組み合わせに設定され、ｎ個の双方向ビットシフタの右方向のシフト量Ｙ0 ，Ｙ1 ，…，Ｙn-2 ，Ｙn-1 は、０から（Ｙ0 ＋Ｙ1 ＋…＋Ｙn-2 ＋Ｙn-1 ）までの範囲の全てのシフト量を表現できるような値の組み合わせに設定されることを特徴とする。
【００３１】
請求項２記載の双方向バレルシフタによれば、請求項１記載の双方向バレルシフタと同様の作用を有する。
【００３２】
本発明の請求項３記載の双方向バレルシフタは、請求項１または２記載の双方向バレルシフタにおいて、シフト方向制御信号およびシフト量制御信号を入力として、ｎ個の双方向ビットシフタの動作状態をそれぞれ選択するｎ個のデコーダをｎ個の双方向ビットシフタに対応して設けたことを特徴とする。
【００３３】
請求項３記載の双方向バレルシフタによれば、請求項１記載の双方向バレルシフタと同様の作用を有する。
【００３４】
本発明の請求項４記載の双方向バレルシフタは、請求項３記載の双方向バレルシフタにおいて、デコーダは、シフト方向制御信号が左シフトを指定し、そのときのシフト量制御信号が示すシフト量ＳＬであるときに、シフト量ＳＬを、１または０の２進数で表される係数Ｌi とｎ個の双方向ビットシフタの左方向のシフト量Ｘ0 ，Ｘ1 ，…，Ｘn-2 ，Ｘn-1 とを用いて、
ＳＬ＝Ｌn-1 ・Ｘn-1 ＋Ｌn-2 ・Ｘn-2 ＋  …＋Ｌ1 ・Ｘ1 ＋Ｌ0 ・Ｘ0 
で表される多項式に分解したときに、値が１である係数Ｌi に対応した双方向ビットシフタに左シフト状態を選択し、値が０である係数Ｌi に対応した双方向ビットシフタにシフト無状態を選択し、
シフト方向制御信号が右シフトを指定し、そのときのシフト量制御信号が示すシフト量ＳＲであるときに、シフト量ＳＲを、１または０の２進数で表される係数Ｒi とｎ個の双方向ビットシフタの右方向のシフト量Ｙ0 ，Ｙ1 ，…，Ｙn-2 ，Ｙn-1 とを用いて、
ＳＲ＝Ｒn-1 ・Ｙn-1 ＋Ｒn-2 ・Ｙn-2 ＋  …＋Ｒ1 ・Ｙ1 ＋Ｒ0 ・Ｙ0 
で表される多項式に分解したときに、値が１である係数Ｒi に対応した双方向ビットシフタに右シフト状態を選択し、値が０である係数Ｒi に対応した双方向ビットシフタにシフト無状態を選択するようにしたことを特徴とする。
【００３５】
請求項４記載の双方向バレルシフタによれば、請求項１記載の双方向バレルシフタと同様の作用を有する。
【００３６】
【発明の実施の形態】
以下、本発明の実施の形態について図面を参照しながら説明する。
【００３７】
図１は８ビットのデータを左方向（ＭＳＢ側）または右方向（ＬＳＢ側）に１ビット、２ビットもしくは３ビットの何れかシフトする本発明の実施の形態における双方向バレルシフタの一例を示すブロック図である。つまり、図１はｍ＝８、ｎ＝２、ｊ＝０，１、Ｘ0 ＝２0 ＝１、Ｘ1 ＝２1 ＝２、Ｙ0 ＝２1 ＝２、Ｙ1 ＝２0 ＝１の場合の例を示している。
【００３８】
この双方向バレルシフタは、図１に示すように、８個のフリップフロップ付３入力セレクタＳ００〜Ｓ０７、Ｓ１０〜Ｓ１７、２個のデコーダＤ０，Ｄ１、８個のフリップフロップＦ０〜Ｆ７、クロックバッファＣＢとを含んで構成されていて、被シフトデータとなる８ビットのデータ信号Ａ（７）〜Ａ（０）を、左方向または右方向に１ビット、２ビット、もしくは３ビットの何れかシフトして、データ信号Ｒ（７）〜Ｒ（０）として出力する。
【００３９】
上記のクロックバッファＣＢは、クロック信号ＣＬＯＣＫがクロック信号入力Ｅとして加えられ、クロック信号ＣＬＯＣＫと同期したフリップフロップ制御出力信号ＢＥを出力する。
【００４０】
また、フリップフロップＦ０〜Ｆ７は、データ信号Ａ（７）〜Ａ（０）を入力し、フリップフロップ制御出力信号ＢＥがクロック入力ＣＫとして加えられることによって、クロック信号ＣＬＯＣＫに同期して被シフトデータを出力する。
【００４１】
また、フリップフロップ付３入力セレクタＳ００〜Ｓ０７は左１ビット／右２ビットシフタＢＳ１２を構成し、左方向には１ビットシフト、右方向には２ビットシフトを実行する。つまり、フリップフロップＦ０〜Ｆ７のＱ出力を左方向に１ビットシフトして出力する状態と、フリップフロップＦ０〜Ｆ７のＱ出力を右方向に２ビットシフトして出力する状態と、フリップフロップＦ０〜Ｆ７のＱ出力をシフトせずにそのまま出力する状態とを選択可能である。
【００４２】
この場合、フリップフロップ付３入力セレクタＳ００〜Ｓ０７の入力端子Ｌ，Ｃ，ＲにはフリップフロップＦ０〜Ｆ７の出力Ｑまたは符号データＬ０，Ｍ０が図１に示すように接続される。
【００４３】
そして、制御信号ＳＬがＨレベルの時には入力端子Ｌからの入力が、制御信号ＳＣがＨレベルの時は入力端子Ｃからの入力が、制御信号ＳＲがＨレベルの時は入力端子Ｒからの入力が選択され、選択結果は制御信号ＣＬＫに同期した出力信号Ｙとして出力される。
【００４４】
また、フリップフロップ付３入力セレクタＳ１０〜Ｓ１７は左２ビット／右１ビットシフタＢＳ２１を構成し、左方向には２ビットシフト、右方向には１ビットシフトを実行する。つまり、フリップフロップ付３入力セレクタＳ００〜Ｓ０７の出力を左方向に２ビットシフトして出力する状態と、フリップフロップ付３入力セレクタＳ００〜Ｓ０７の出力を右方向に１ビットシフトして出力する状態と、フリップフロップ付３入力セレクタＳ００〜Ｓ０７の出力をシフトせずにそのまま出力する状態とを選択可能である。
【００４５】
この場合、フリップフロップ付３入力セレクタＳ１０〜Ｓ１７の入力端子Ｌ，Ｃ，Ｒにはフリップフロップ付３入力セレクタＳ００〜Ｓ０７の出力Ｑまたは符号データＬ１，Ｍ１が図１に示すように接続される。
【００４６】
そして、制御信号ＳＬがＨレベルの時には入力端子Ｌからの入力が、制御信号ＳＣがＨレベルの時は入力端子Ｃからの入力が、制御信号ＳＲがＨレベルの時は入力端子Ｒからの入力が選択され、選択結果は制御信号ＣＬＫに同期した出力信号Ｙとして出力される。
【００４７】
デコーダＤ０はシフト量信号Ｂ（０），Ｂ（１）、シフト方向制御信号ＬＦＴ（Ｈレベルのときに、左シフトを意味し、Ｌレベルのときに右シフトを意味する）およびフリップフロップ制御用のクロック信号ＣＬＯＣＫを入力し、制御信号ＳＬ，ＳＣ，ＳＲ，ＢＥを出力してフリップフロップ付３入力セレクタＳ００〜Ｓ０７を制御する。
【００４８】
デコーダＤ１はシフト量信号Ｂ（０），Ｂ（１）、シフト方向制御信号ＬＦＴおよびフリップフロップ制御用のクロック信号ＣＬＯＣＫを入力し、制御信号ＳＬ，ＳＣ，ＳＲ，ＢＥを出力してフリップフロップ付３入力セレクタＳ１０〜Ｓ１７を制御する。
【００４９】
シフト量制御信号が２ビットの２進数で表されておれば、シフト量制御信号の下位ビットがシフト量信号Ｂ（０）に対応し、上位ビットがシフト量信号Ｂ（１）に対応する。上記のシフト量信号Ｂ（０），Ｂ（１）と課題を解決するための手段で示した数式中の係数Ｌj ，Ｒj との関係を、実施の形態に即して表現すると、Ｌ0 ＝Ｂ（０）、Ｌ1 ＝Ｂ（１）、Ｒ0 ＝Ｂ（１）、Ｒ1 ＝Ｂ（０）となる。
【００５０】
比較のために、従来例では、シフト量信号Ｂ（０），Ｂ（１）と課題を解決するための手段で示した数式中の係数Ｌj ，Ｒj との関係は、Ｌ0 ＝Ｂ（０）、Ｌ1 ＝Ｂ（０）、Ｒ0 ＝Ｂ（１）、Ｒ1 ＝Ｂ（１）となる。
【００５１】
なお、フリップフロップＦ０〜Ｆ７、フリップフロップ付３入力セレクタＳ００〜Ｓ０７、Ｓ１０〜Ｓ１７、はビット単位で対称的にレイアウトされており、８ビットのビットスライスを構成する。
【００５２】
図２はフリップフロップ付３入力セレクタＳ００〜Ｓ０７，Ｓ１０〜Ｓ１７の具体的な構成の一例を示すブロック図である。図２において、Ｌは左シフト選択時のデータ入力、Ｃはシフトしない場合のデータ入力、Ｒは右シフト選択時のデータ入力であり、ＳＬはデータ入力Ｌを選択する制御信号、ＳＣはデータ入力Ｃを選択する制御信号、ＳＲはデータ入力Ｒを選択する制御信号、ＣＬＫはフリップフロップ制御信号入力である。出力信号Ｙはフリップフロップ制御信号入力ＣＬＫに同期して更新される。
【００５３】
図３はデコーダの具体的な構成の一例を示すブロック図である。図３において、Ｂはシフト量信号入力、Ｄはシフト方向制御信号入力、Ｅはクロック信号入力であり、ＳＬは左シフト選択のための制御信号、ＳＣはシフト無選択のための制御信号、ＳＲは右シフト選択のための制御信号、ＢＥはフリップフロップ制御出力信号である。制御信号ＳＬ、ＳＣ、ＳＲはいずれか一つが必ずＨレベルを出力し、残りの２つはＬレベルを出力する。
【００５４】
以上のような構成の双方向バレルシフタにおいては、被シフトデータとなる８ビットのデータ信号Ａ（７）〜Ａ（０）はフリップフロップＦ０〜Ｆ７を経由してフリップフロップ付３入力セレクタＳ００〜Ｓ０７、Ｓ１０〜Ｓ１７に入力され、２ビットのデータＢ（１），Ｂ（０）で示される値だけビットシフトされる。
【００５５】
シフト方向制御信号ＬＦＴは上記したように、シフト方向を決める信号で、Ｈレベルの時はＭＳＢ側へシフトされ、Ｌレベルの時はＬＳＢ側へシフトされる。この場合、シフト処理は２ステージに分かれており、最初のサイクルではフリップフロップ付３入力セレクタＳ００〜Ｓ０７を経由し、第２のサイクルではフリップフロップ付３入力セレクタＳ１０〜Ｓ１７を経由する。最初のサイクルは左方向１ビットシフト／右方向２ビットシフトが実行され（左１ビット／右２ビットシフタ）、第２のサイクルは左方向２ビットシフト／右方向１ビットシフトが実行される（左２ビット／右１ビットシフタ）。
【００５６】
本発明の特徴点は次の通りである。上記フリップフロップＦｉ（ｉ＝０〜７）の出力Ｑは、同じビットｉのフリップフロップ付３入力セレクタＳ０ｉのＣ入力、１ビットＭＳＢ側のフリップフロップ付３入力セレクタＳ０（ｉ＋１）のＬ入力および２ビットＬＳＢ側のフリップフロップ付３入力セレクタＳ０（ｉ−２）のＲ入力に接続される。
【００５７】
また、上記フリップフロップ付３入力セレクタＳ０ｉ（ｉ＝０〜７）の出力Ｙは、同じビットｉのフリップフロップ付３入力セレクタＳ１ｉのＣ入力、２ビットＭＳＢ側のフリップフロップ付３入力セレクタＳ１（ｉ＋２）のＬ入力および１ビットＬＳＢ側のフリップフロップ付３入力セレクタＳ１（ｉ−１）のＲ入力に接続される。
【００５８】
ここで、図１の実施の形態と図４の従来例との信号配線長について比較する。図４の構成の場合、先述したように、フリップフロップ付３入力セレクタＳ０ｉ（ｉ＝０〜７）の接続先は、フリップフロップ付３入力セレクタＳ１（ｉ＋２）のＬ入力、フリップフロップ付３入力セレクタＳ１ｉのＣ入力、フリップフロップ付３入力セレクタＳ１（ｉ−２）のＲ入力である。
【００５９】
図４の構成では、左右ともに２ビットシフトを行うので、図１の構成に比べて、フリップフロップ付３入力セレクタＳ０ｉの出力信号配線長が長く、配線負荷による動作速度低下の度合いが大きい。このとき、フリップフロップＦｉ（ｉ＝０〜７）の出力信号配線長は図１の場合の方が長くなるが、図４の場合のフリップフロップ付３入力セレクタＳ０ｉ（ｉ＝０〜７）の出力配線長よりは短くなるため、パイプライン処理した場合のクロック周波数は図１の方が高くできる。
【００６０】
続いて、本実施の形態の効果を説明する。本実施の形態の効果をゲート遅延時間で考察すると、以下のようになる。無負荷時遅延Ｔ０、遅延負荷依存係数Δｔ、出力負荷容量Ｃの場合、ゲート遅延値Ｔは
Ｔ＝Ｔ０＋Ｃ・Δｔ
で近似できる。単位配線長あたりの配線負荷容量をΔｃとすると、配線長Ｌの場合の配線容量Ｃは
Ｃ＝Ｌ・Δｃ
で近似できる。
【００６１】
図１で１ビット当りの幅をｄとし、フリップフロップ付３入力セレクタＳ０ｉ，Ｓ１ｉのＴ０、ΔｔをそれぞれＴ０ｓ、Δｔｓとする。図１の構成でシフト量信号Ｂのビット幅がｎビットの場合、クロック信号ＣＬＯＣＫの立ち上がりから左１ビット／右２n-1 ビットシフタの入力データ信号Ｌ、Ｃ、Ｒが確定するまでの遅延時間Ｔｃ１は
Ｔｃ１＝Ｔ０ｓ＋（２n-1 ＋１）・ｄ・Δｔｓ・Δｃ
となる。
【００６２】
一方、図４の構成の場合、左２n-1 ビット／右２n-1 ビットシフタの入力データ信号が配線長がもっとも長くなり、この場合の対応する遅延時間Ｔｃ４は
Ｔｃ４＝Ｔ０ｓ＋（２n-1 ＋２n-1 ）・ｄ・Δｔｓ・Δｃ
となるので、遅延時間の差（Ｔｃ４−Ｔｃ１）は
Ｔｃ４−Ｔｃ１＝（２n-1 −１）・ｄ・Δｔｓ・Δｃ
となる。
【００６３】
例えば、
Δｔｓ＝４ｐｓｅｃ／ｆＦ
Δｃ＝０．２ｆＦ／μｍ
ｍ＝３２，ｎ＝５
ｄ＝３０μｍ
に示すような具体的数値をとれば、図１の構成の方が図４の構成に比べて
Ｔｃ４−Ｔｃ１＝０．３６ｎｓｅｃ
だけ高速になる。クロック周波数が５００ＭＨｚの場合には、１サイクルは２ｎｓｅｃであるので、この高速化できる時間は１サイクルの１８％に相当し、高速化の効果は大きい。
【００６４】
なお本発明はデータ信号Ａ、シフト量信号Ｂのビット数は図１の値と異なっている場合でも有効である。例えば、データ信号Ａのビット数が３２ビットでシフト量信号Ｂのビット数が５ビットの場合には、例えば、例えば以下のように構成される。すなわち、３２個のフリップフロップの出力端に、各々３２個のフリップフロップ付３入力セレクタからなる左１（＝２0 ビット）ビット／右１６（＝２4 ビット）シフタと、左２（＝２1 ビット）ビット／右８（＝２3 ビット）ビットシフタと、左４（＝２2 ビット）ビット／右４（＝２2 ビット）ビットシフタと、左８（＝２3 ビット）ビット／右２（＝２1 ビット）ビットシフタと、左１６（＝２4 ビット）ビット／右１（＝２0 ビット）ビットシフタを縦続接続することにより構成される。
【００６５】
この場合、左方向のシフト量と右方向のシフト量の組み合わせ方は、各ステージの双方向ビットシフタにおける左方向のシフト量と右方向のシフト量の和の最大値ができるだけ小さい値をとるように、左方向のシフト量と右方向のシフト量とを組み合わせればよい。結局、少なくとも左方向のシフト量が最大の双方向ビットシフタにおける右方向のシフト量を左方向のシフト量とは異なる値、すなわち最大値以外の値とすれば、左方向のシフト量と右方向のシフト量と同じ値に設定する従来例に比べて、データ信号の配線負荷容量が減少し、シフト処理を高速化できる。
【００６６】
【発明の効果】
以上説明したように、本発明の双方向バレルシフタによれば、同一ステージにおいて実行する右方向と左方向のシフト量を、少なくとも最大シフト量を左もしくは右方向に設定している双方向ビットシフタについて異なる値にすることにより、複数のバレルシフタにおけるデータ信号の配線負荷容量の最大値が減少し、シフト処理を高速化できるという有利な効果が得られる。
【図面の簡単な説明】
【図１】本発明の実施の形態の双方向バレルシフタの全体構成を示すブロック図である。
【図２】同バレルシフタに備えるフリップフロップ付３入力セレクタの内部構成を示すブロック図である。
【図３】同バレルシフタに備えるデコーダの内部構成を示すブロック図である。
【図４】従来の双方向バレルシフタの全体構成を示すブロック図である。
【符号の説明】
Ａ（０）〜Ａ（７）  信号データ
Ｂ（０）〜Ｂ（１）  シフト量信号
ＬＦＴ  シフト方向制御信号
ＣＬＯＣＫ  クロック信号
Ｆ０〜Ｆ７  フリップフロップ
Ｓ００〜Ｓ０７  フリップフロップ付３入力セレクタ
Ｓ１０〜Ｓ１７  フリップフロップ付３入力セレクタ
Ｄ０，Ｄ１  デコーダ
Ｍ０，Ｍ１  符号データ
Ｌ０，Ｌ１  符号データ
ＢＳ１１  左１ビット／右１ビットシフタ
ＢＳ２２  左２ビット／右２ビットシフタ
ＢＳ１２  左１ビット／右２ビットシフタ
ＢＳ２１  左２ビット／右１ビットシフタ
【図１】
0003683449.tif 000002
【図２】
0003683449.tif 000003
【図３】
0003683449.tif 000004
【図４】
0003683449.tif 000005