(57)【要約】【課題】複数のＮビットバレルシフタに対して僅かなハードウェアを追加することで、ビット幅のより広いＰビットバレルシフタを実現したバレルシフタ装置及びバレルシフト方法を提供する。【解決手段】Ｐ個のMto1セレクタ２と、シフト方向及びシフト幅を基に各Mto1セレクタ２のセレクト信号を生成するシフト量制御部３とを備え、下位Ｋ番目のMto1セレクタ２には、Ｍ個のＮビットバレルシフタ１の下位(K mod N)ビット目のシフト結果が接続されており、下位Ｋ番目のMto1セレクタ２のセレクト信号がＬである場合に、下位Ｋ番目のMto1セレクタ２は、下位Ｒ(K/N≧Lの場合はR=K/N-L、K/N＜Lの場合はR=K/N-L+M)番目のＮビットバレルシフタ１の下位(K mod N)番目のシフト結果を選択し、下位Ｋ番目のMto1セレクタ２の選択結果を、Ｐビットバレルシフタ１０の下位Ｋビット目のシフト結果とする。【選択図】図１
2010140192.tif 000002
【特許請求の範囲】
【請求項１】
Ｍ個のＮ（２のべき乗）ビットバレルシフタを組み合わせによってＰ(=M×N)ビットのバレルシフトを行うバレルシフタ装置であって、
Ｐ個のMto1セレクタと、
シフト方向とシフト幅とに基づいて、前記各Mto1セレクタのセレクト信号を生成するシフト量制御部とを備え、
下位Ｋ番目の前記Mto1セレクタには、Ｍ個のＮビットバレルシフタの下位(K mod N)ビット目のシフト結果が接続されており、
前記シフト量制御部が生成した下位Ｋ番目のMto1セレクタのセレクト信号がＬである場合に、下位Ｋ番目のMto1セレクタは、下位Ｒ(K/N≧Lの場合はR=K/N-L、K/N＜Lの場合にはR=K/N-L+M)番目のＮビットバレルシフタの下位(K mod N)番目のシフト結果を選択し、下位Ｋ番目のMto1セレクタの選択結果を、Ｐビットバレルシフタの下位Ｋビット目のシフト結果とすることを特徴とするバレルシフタ装置。
【請求項２】
前記Nビットバレルシフタの各々は、
左右方向のローテートに加え、左右方向の論理シフトを実行可能であり、
左論理シフト用のＮビット左ゼロマスクと右論理シフト用Ｎビット右ゼロマスクとを生成するＮビットゼロマスク生成部と、
前記Ｎビット左ゼロマスクと前記Ｎビット右ゼロマスクを選択するＮビットのＮビット左右ゼロマスクセレクタと、
前記Ｎビット左右ゼロマスクセレクタの選択結果と、左右方向のローテート用の全ビットが１であるＮビットのワンマスクとを選択するＮビットのＮビットシフトマスクセレクタと、
前記Ｎビットシフトマスクセレクタの選択結果と前記Ｎビットバレルシフタのシフト結果との論理積を生成するＮビットアンド回路を備えることを特徴とする請求項１記載のバレルシフタ装置。
【請求項３】
前記シフト量制御部は、
任意の前記Ｎビットバレルシフタが備える前記Ｎビット左ゼロマスクと前記Ｎビット右ゼロマスクと前記Ｎビット左右ゼロマスクセレクタとを用いて、下位Ｋ番目の前記Mto1セレクタのＨ(=[log2M]、[log2M]はlog2Mを超えない最大の整数)ビットからなるセレクト信号を生成し、
左にswPビットシフトする際の下位Ｋ番目の前記Mto1セレクタのセレクト信号の下位０ビット目は、シフト量swPの下位Ｑ(=[log2N]、[log2N]はlog2Nを超えない最大の整数)ビット目が０である場合には、前記Ｎビット左右ゼロマスクセレクタを用いて選択した前記Ｎビット右ゼロマスクの下位(K mod N)ビット目を選択し、シフト量swPの下位Ｑビット目が１である場合には、前記Ｎビット左右ゼロマスクセレクタを用いて選択した前記Ｎビット左ゼロマスクの下位(K mod N)ビット目を選択し、
右にswPビットシフトする際の下位Ｋ番目の前記Mto1セレクタのセレクト信号の下位０ビット目は、シフト量swPの下位Ｑビット目が０である場合には、前記Ｎビット左右ゼロマスクセレクタを用いて選択した前記Ｎビット左ゼロマスクの下位(K mod N)ビット目を選択し、シフト量swPの下位Ｑビット目が１である場合には、前記Ｎビット左右ゼロマスクセレクタを用いて選択した前記Ｎビット右ゼロマスクの下位(K mod N)ビット目を選択することを特徴とする請求項２記載のバレルシフタ装置。
【請求項４】
左にswPビットシフトする際の下位Ｋ番目の前記Mto1セレクタのセレクト信号の下位Ｔビット目として、シフト量swPの下位Ｑビット目から、下位(Q+T-1)ビット目までのビットが全て１でなく、且つ下位(Q+T)ビット目が０である場合には０を選択し、シフト量swPの下位Qビット目から下位(Q+T-1)ビット目までのビットが全て１でなく、且つ下位(Q+T)ビット目が１である場合には前記Ｎビット右ゼロマスクの下位(K mod N)ビット目を選択し、シフト量swPの下位Ｑビット目から、下位(Q+T-1)ビット目までのビットが全て１、且つ下位(Q+T)ビット目が０である場合には１を選択し、シフト量swPの下位Ｑビット目から、下位(Q+T-1)ビット目までのビットが全て１、且つ下位(Q+T)ビット目が１である場合には前記Ｎビット左ゼロマスクの下位(K mod N)ビット目を選択し、
右にswPビットシフトする際の下位Ｋ番目のMto1セレクタのセレクト信号の下位Ｔビット目として、シフト量swPの下位Ｑビット目から、下位(Q+T-1)ビット目までのビットが全て１ではなく、かつ下位(Q+T)ビット目が０である場合には０を選択し、シフト量swPの下位Ｑビット目から、下位(Q+T-1)ビット目までのビットが全て１ではなく、且つ下位(Q+T)ビット目が１である場合には前記Ｎビット左ゼロマスクの下位(K mod N)ビット目を選択し、シフト量swPの下位Ｑビット目から、下位(Q+T-1)ビット目までのビットが全て１、且つ下位(Q+T)ビット目が０である場合には１を選択し、シフト量swPの下位Ｑビット目から下位(Q+T-1)ビット目までのビットが全て１、且つ下位(Q+T)ビット目が１である場合には前記Ｎビット右ゼロマスクの下位(K mod N)ビット目を選択することを特徴とする請求項３記載のバレルシフタ装置。
【請求項５】
左論理シフト用のＰビット左ゼロマスクと右論理シフト用のＰビット右ゼロマスクとを生成するＰビットゼロマスク生成部と、前記Ｐビット左ゼロマスクと前記Ｐビット右ゼロマスクとを選択するＰビット左右ゼロマスクセレクタと、前記Ｐビット左右ゼロマスクセレクタの選択結果と左右方向のローテート用の全ビットが１であるＰビットのワンマスクとを選択するＰビットのＰビットシフトマスクセレクタと、前記Ｐ個のMto1セレクタの出力と前記Pビットシフトマスクセレクタの選択結果との論理積を生成するＰビットアンド回路とを備え、左右方向のローテートに加え左右方向の論理シフトを行うことを特徴とする請求項１から４のいずれか１項記載のバレルシフタ装置。
【請求項６】
前記Ｎビットバレルシフタの各々は、前記Ｎビット左ゼロマスクと前記Ｎビット右ゼロマスクの少なくとも一方の全ビットが０となるように前記Ｎビットゼロマスク生成部の制御信号を選択するゼロマスク生成制御信号セレクタと、全ビットが０である前記Ｎビット左ゼロマスク又は前記Ｎビット右ゼロマスクを選択するように前記Ｎビット左右ゼロマスクセレクタの制御信号を選択する左右ゼロマスク制御信号セレクタと、前記各Ｎビットバレルシフタで実行するシフトがローテート及び論理シフトのいずれであるかを指定するシフトモードを選択するシフトモードセレクタと、Ｍ個の前記ゼロマスク制御信号を生成するゼロマスク拡張部とを備えることを特徴とする請求項２から４のいずれか１項記載のバレルシフタ装置。
【請求項７】
Ａビット左右ローテートを実行する際には、前記各Ｎビットバレルシフタのシフトモードが左右ローテートとなるように前記ゼロマスク拡張部が前記シフトモードセレクタを制御し、
Ａビット左論理シフトを実行する際には、下位Ｂ番目の前記Ｎビットバレルシフタに対して、（Ｎ×（Ｍ−Ｂ−１））＞Ａである場合には、シフトモードが左ローテートとなるように前記ゼロマスク拡張部が前記シフトモードセレクタを制御し、（Ｎ×（Ｍ−Ｂ））＞Ａ≧（Ｎ×（Ｍ−Ｂ−１））である場合には、シフトモードが左論理シフトとなるように前記ゼロマスク拡張部が前記シフトモードセレクタを制御し、Ａ≧（Ｎ×（Ｍ−Ｂ））である場合には、下位Ｂ番目の前記Ｎビットバレルシフタの前記Ｎビットゼロマスク生成部が生成する前記Ｎビット左ゼロマスクと前記Ｎビット右ゼロマスクとの少なくとも一方の全ビットが０となるように前記ゼロマスク拡張部が前記ゼロマスク生成制御信号セレクタを制御し、前記Ｎビット左右セレクタが全ビット０である前記Ｎビット左ゼロマスク又は前記Ｎビット右ゼロマスクを選択するように、前記ゼロマスク拡張部が前記左右ゼロマスク制御信号セレクタを制御し、
Ａビット右論理シフトを実行する際に、下位Ｂ番目の前記Ｎビットバレルシフタに対して（Ｎ×Ｂ）＞Ａである場合には、シフトモードが右ローテートとなるように前記ゼロマスク拡張部が前記シフトモードセレクタを制御し、（Ｎ×（Ｂ＋１））＞Ａ≧（Ｎ×Ｂ）である場合には、シフトモードが右論理シフトとなるように前記ゼロマスク拡張部が前記シフトモードセレクタを制御し、Ａ≧（Ｎ×（Ｂ＋１））である場合には、下位Ｂ番目の前記Ｎビットバレルシフタの前記Ｎビットゼロマスク生成部が生成する前記Ｎビット左ゼロマスクと前記Ｎビット右ゼロマスクとの少なくとも一方が全て０となるように、Ｐビットゼロマスク制御部が前記ゼロマスク生成制御信号セレクタを制御し、前記Ｎビット左ゼロマスクと前記Ｎビット右ゼロマスクとの少なくとも一方の全ビットが０となるように前記ゼロマスク拡張部が前記ゼロマスク生成制御信号セレクタを制御し、前記Ｎビット左右ゼロマスクセレクタが、全ビットが０である前記Ｎビット左ゼロマスク又は前記Ｎビット右ゼロマスクを選択するように、前記ゼロマスク拡張部が前記左右ゼロマスク制御信号セレクタを制御することを特徴とする請求項６項記載のバレルシフタ装置。
【請求項８】
前記シフト量制御部は、
左論理シフト実行時には、下位０番目の前記ＮビットバレルシフタのＮビット左ゼロマスクと前記Ｎビット右ゼロマスクと前記Ｎビット左右ゼロマスクのセレクト結果とを用いて、前記Ｎビットバレルシフタを組み合わせたＰビットバレルシフタの論理シフトを実現し、
右論理シフト実行時には、下位（Ｍ−１）番目の前記Ｎビットバレルシフタの前記Ｎビット左マスクと前記Ｎビット右ゼロマスクと前記Ｎビット左右ゼロマスクのセレクト結果とを用いて、前記Ｎビットバレルシフタを組み合わせたＰビットバレルシフタの論理シフトを実現することを特徴とする請求項７記載のバレルシフタ装置。
【請求項９】
Ｍ個のＮ（２のべき乗）ビットバレルシフタを組み合わせによってＰ(=M×N)ビットのバレルシフトを行うバレルシフト方法であって、
Ｐ個のMto1セレクタのうち下位Ｋ番目のセレクタに、Ｍ個のＮビットバレルシフタの下位(K mod N)ビット目のシフト結果を接続し、
シフト方向とシフト幅とに基づいて生成された下位Ｋ番目のMto1セレクタのセレクト信号がＬである場合に、下位Ｋ番目のMto1セレクタによって下位Ｒ(K/N≧Lの場合はR=K/N-L、K/N＜Lの場合にはR=K/N-L+M)番目のＮビットバレルシフタの下位(K mod N)番目のシフト結果を選択し、下位Ｋ番目のMto1セレクタの選択結果を、Ｐビットバレルシフタの下位Ｋビット目のシフト結果とすることを特徴とするバレルシフト方法。
【請求項１０】
任意の前記Ｎビットバレルシフタが備える左論理シフト用のＮビット左ゼロマスクと、右論理シフト用のＮビット右ゼロマスクと、前記Ｎビット左ゼロマスクと前記Ｎビット右ゼロマスクを選択するＮビット左右ゼロマスクセレクタとを用いて、下位Ｋ番目の前記Mto1セレクタのＨ(=[log2M])ビットからなるセレクト信号を生成し、
左にswPビットシフトする際の下位Ｋ番目の前記Mto1セレクタのセレクト信号の下位０ビット目は、シフト量swPの下位Ｑ(=[log2N])ビット目が０である場合には、前記Ｎビット左右ゼロマスクセレクタを用いて選択した前記Ｎビット右ゼロマスクの下位(K mod N)ビット目を選択し、シフト量swPの下位Ｑビット目が１である場合には、前記Ｎビット左右ゼロマスクセレクタを用いて選択した前記Ｎビット左ゼロマスクの下位(K mod N)ビット目を選択し、
右にswPビットシフトする際の下位Ｋ番目の前記Mto1セレクタのセレクト信号の下位０ビット目は、シフト量swPの下位Ｑビット目が０である場合には、前記Ｎビット左右ゼロマスクセレクタを用いて選択した前記Ｎビット左ゼロマスクの下位(K mod N)ビット目を選択し、シフト量swPの下位Ｑビット目が１である場合には、前記Ｎビット左右ゼロマスクセレクタを用いて選択した前記Ｎビット右ゼロマスクの下位(K mod N)ビット目を選択することを特徴とする請求項９記載のバレルシフト方法。
【請求項１１】
左にswPビットシフトする際の下位Ｋ番目の前記Mto1セレクタのセレクト信号の下位Ｔビット目として、シフト量swPの下位Ｑビット目から、下位(Q+T-1)ビット目までのビットが全て１でなく、且つ下位(Q+T)ビット目が０である場合には０を選択し、シフト量swPの下位Qビット目から下位(Q+T-1)ビット目までのビットが全て１でなく、且つ下位(Q+T)ビット目が１である場合には前記Ｎビット右ゼロマスクの下位(K mod N)ビット目を選択し、シフト量swPの下位Ｑビット目から、下位(Q+T-1)ビット目までのビットが全て１、且つ下位(Q+T)ビット目が０である場合には１を選択し、シフト量swPの下位Ｑビット目から、下位(Q+T-1)ビット目までのビットが全て１、且つ下位(Q+T)ビット目が１である場合には前記Ｎビット左ゼロマスクの下位(K mod N)ビット目を選択し、
右にswPビットシフトする際の下位Ｋ番目のMto1セレクタのセレクト信号の下位Ｔビット目として、シフト量swPの下位Ｑビット目から、下位(Q+T-1)ビット目までのビットが全て１ではなく、かつ下位(Q+T)ビット目が０である場合には０を選択し、シフト量swPの下位Ｑビット目から、下位(Q+T-1)ビット目までのビットが全て１ではなく、且つ下位(Q+T)ビット目が１である場合には前記Ｎビット左ゼロマスクの下位(K mod N)ビット目を選択し、シフト量swPの下位Ｑビット目から、下位(Q+T-1)ビット目までのビットが全て１、且つ下位(Q+T)ビット目が０である場合には１を選択し、シフト量swPの下位Ｑビット目から下位(Q+T-1)ビット目までのビットが全て１、且つ下位(Q+T)ビット目が１である場合には前記Ｎビット右ゼロマスクの下位(K mod N)ビット目を選択することを特徴とする請求項１０記載のバレルシフト方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のバレルシフタを組み合わせたバレルシフタに関し、特に、複数のバレルシフタの組み合わせ、ビット幅よりも広いバレルシフタを低コストに実現するバレルシフタ装置及びバレルシフト方法に関する。
【背景技術】
【０００２】
様々な汎用プロセッサやＤＳＰ（Digital Signal Processor）には、数値のシフトやローテートを実現するためのビットシフタが実装されてきた。
【０００３】
ビットシフタは、数値の乗算や除算の高速化、数値からの所望ビットパターンの切り出しやビットパターンの合成、シリアルパラレル変換などに利用されてきた。
【０００４】
これまでは、ハードウェア資源の節約などから、１ビット単位のシフトやローテートを実現する１ビットシフタがプロセッサに実装されてきた。
【０００５】
しかし近年では、半導体スケーリング則の進展に伴い、ハードウェア資源の制約が緩やかになり、一度に任意ビットのシフトやローテートを実現するバレルシフタがプロセッサに実装されている。これにより、数値の乗算や除算、数値からの所望ビットパターンの切り出しやビットパターンの合成、シリアルパラレル変換などの高速化が実現され、浮動小数点演算における小数点位置合わせや、浮動小数点演算結果の正規化処理なども高速に処理できるようになった。
【０００６】
図２７に、非特許文献１に開示されているような標準的なバレルシフタの構成例を示す。バレルシフタ１００は、4bitの入力データ（In[3:0]）に対して、左・右ローテート、左・右論理シフトを行う。図２７に示すように、４ビットバレルシフタ１００は、４個の2to1セレクタが２段カスケードされており、各段の４個の2to1セレクタは、それぞれ前段の同じビット位置の2to1セレクタの出力（又は入力データ）か、１〜２ビット離れた位置の2to1セレクタの出力（又は入力データ）を選択する。
【０００７】
０段目の各2to1セレクタ１０１は、入力データ（In[3:0]）の同じビット位置のデータか、１ビット離れたビット位置の入力データを選択する。一方、１段目の各2to1セレクタ１０２は、前段の2to1セレクタ１０１の同じビット位置のデータか、前段の2to1セレクタ１０１の２ビット離れたビット位置のデータを選択する。
【０００８】
一般的に、Ｎビットのバレルシフタは、Ｎ個の2to1セレクタを（log2N）段カスケードし、各段のＮ個の2to1セレクタは、前段の同じビット位置の2to1セレクタの出力（又は入力データ）か、１〜２＾（log2N-1）ビット離れた位置の2to1セレクタの出力（又は入力データ）を選択する。
【０００９】
また、シフト量制御部１０３により、４ビットバレルシフタのシフト方向（lr0、左：１、右：０）とシフト幅（sw0[1:0]）とから、各段の2to1セレクタの制御信号（s0[1:0]）を生成する。なお、図２７においては、シフト量制御部１０３と2to1セレクタ１０１及び１０２との接続は省略している。
【００１０】
Ｎビットバレルシフタを構成する（log2N）段の各Ｎ個の2to1セレクタは、一般的には、左又は右の一方のみのローテート（シフト）をサポートする。このため、入力データ（In）をシフトさせたい方向（Ir0、左：１、右：０）と、2to1セレクタのシフト方向とが一致しない場合には、図２８に示すように、シフト量制御部１０３において（N-sw0）を計算し、その結果を2to1セレクタの制御信号（s0）とすることにより、左右方向のローテート（シフト）を実現している。なお、図２８においてsubへの入力の一方である“3'b100”の“3'b”の部分は３ビットの入力であることを示しており、“100”の部分は３ビットの値が100であることを示している。同様に、subへの入力の他方に含まれる“1'b0”の“１'b”の部分は１ビットの入力であることを示しており、“0”の部分は１ビットの値が0であることを示している。これは本明細書の他の図に関しても同様である。
【００１１】
次に、ゼロマスク制御部１０４により、４ビットバレルシフタのシフト方向（lr0）とローテートフラグ（rot0）とシフト幅（sw0）とから、左論理シフト時のシフト結果の下位ビットに０を、右論理シフト時のシフト結果の上位ビットに０を挿入するための４ビットゼロマスク（ZM0）を生成する。
【００１２】
図２９に、ゼロマスク制御部１０４の詳細を示す。まず図２９に示したように、ゼロマスク制御部１０４は、ゼロマスク生成部１０５により、４ビットバレルシフタのシフト方向（lr0）とシフト幅（sw0）とから、左論理シフト時のシフト結果の下位ビットに０を挿入するための４ビットの左ゼロマスク(LZM0)、右論理シフト時のシフト結果の上位ビットに０を挿入するための４ビットのゼロマスク（RZM0）を生成する。
【００１３】
そして、シフト方向（lr0、左：１、右：０）に基づき、左ゼロマスク（LZM0）又は右ゼロマスク（RZM0）をセレクタ１０６によって選択し、ローテートフラグ（rot0、ローテート：１、論理シフト：０）に基づいて、セレクタ１０６の選択結果か全ビットが１であるローテート用のワンマスク（ONE）かをセレクタ１０７によって選択する。
【００１４】
最後に、ゼロマスク制御部１０４が生成したゼロマスク（ZM0）と、１段目の2to1セレクタ１０２の出力のシフト結果との論理積をＡＮＤ回路１０８によって計算し、シフト結果（Out）として出力する。
【００１５】
以上により、４ビットバレルシフタ１００は、左右方向のローテートや左右方向の論理シフトを実現する。
【００１６】
一方、近年では、複数（Ｍ、M:２以上の整数）個のＮ（２のべき乗）ビットバレルシフタを組み合わせ、ビット幅のより広いバレルシフタとして利用する実装が増えている。例えば、非特許文献２には、4×16bit、2×32bit、1×64bit単位や、4×32bit、2×64bit単位でのシフトの機能が開示されている。また、特許文献１には、Ｎビットのバレルシフタ単位回路をＭ段有するバレルシフタが開示されている。
【００１７】
非特許文献２や特許文献１に開示される発明の一例として、４ビットバレルシフタを二つ組み合わせた、８ビットバレルシフタの一般的な構成例を図３０に示す。８ビットバレルシフタ２００は、4bitの入力データ（In[3:0]）に対して、左・右ローテート、左・右論理シフトを行う二つの４ビットバレルシフタ２０１、２０２を組み合わせたものである。
【００１８】
図３０に示すように、８ビットバレルシフタ２００は、二つの４ビットバレルシフタ２０１、２０２、及びこれらに対応するシフト量制御部２０５ａ、２０５ｂ及びゼロマスク制御部２０６ａ、２０６ｂに加えて、６個の2to1セレクタ２０３と、８個の2to1セレクタ２０４と、８ビットバレルシフタのシフト方向（lr3）とシフト幅（sw3[2:0]）とから、８個のセレクタ２０４の制御信号（s3）を生成するシフト量制御部２０５ｃと、８ビットバレルシフトのシフト方向（lr3）とローテートフラグ（rot3）とシフト幅（sw3）とから、左論理シフト時のシフト結果の下位ビットに０を、右論理シフトのシフト結果の上位ビットに０を挿入するための８ビットゼロマスク（ZM3）を生成するゼロマスク制御部２０６ｃと、ゼロマスク制御部２０６が生成したゼロマスク（ZM3）と８個の2to1セレクタ２０４の出力との論理積を計算する８個のＡＮＤ回路２０７とを有する。
【００１９】
シフト量制御部２０５ｃ及びゼロマスク制御部２０６ｃは、ビット数の違いを除けば図２７のシフト量制御部１０３、ゼロマスク制御部１０４とほぼ同様である。ただし、シフト量制御部２０５ｃは８個の2to1セレクタ２０４の制御信号（s3）のみを生成する点で、シフト量制御部１０３と異なる。また、図３０には示していないが、８ビットバレルシフタ時にシフト量制御部２０５ａ、２０５ｂとゼロマスク制御部２０６ａ、２０６ｂとに入力するシフト方向（lr1、lr2）、シフト幅（sw1、sw2）、及びローテートフラグ（rot1、rot2）を、それぞれ８ビットバレルシフタのシフト方向（lr3）とシフト幅（sw3）とローテートフラグ（rot3）とに切り替えるセレクタを備えている。
【００２０】
０段目及び１段目の各2to1セレクタ２０１、２０２内に追加された2to1セレクタ２０３は、前段の１〜２ビット離れた位置の2to1セレクタの出力（又は入力データ）の位置が、４ビットバレルシフタの時と８ビットバレルシフタの時とで異なるため、それらを選択するために追加されている。一方、２段目として追加された８個の2to1セレクタ２０４は、８ビットバレルシフタ時に必要となる４ビット離れた位置の４ビットバレルシフタのシフト結果を選択するために追加されている。
【００２１】
一般的に、Ｍ個のＮビットバレルシフタを用いて、Ｐ（=M×N）ビットのバレルシフタを構成する場合には、（M×(N+log2N-1)）個の2to1セレクタと、追加した2to1セレクタを制御するためのシフト量制御部と、Ｐビットのゼロマスクを生成するゼロマスク生成部と、ゼロマスクと追加した2to1セレクタの選択結果との論理積を計算するＰビットのＡＮＤ回路とが必要となる。
【特許文献１】特許第３２７２７２４号公報
【非特許文献１】Matthew R. Pillmeier, atc,"Design Alternatives for Barrel Shifters", Proceedings of the SPIE, Vol.4791, pp.436-446, 2002
【非特許文献２】Intel.Corp,"IA-32 インテル アーキテクチャ ソフトウェア・デベロッパーズ・マニュアル 上巻：基本アーキテクチャ",http://download.intel.com/jp/developer/jpdoc/IA32_Arh_Dev_Man_Vol1_Online_i.pdf, 2004
【非特許文献３】ARM.Limited, "Cortex-A8 Technical Reference Manual", Rev.r1p1, http://infocenter.arm.com/help/topic/com.arm.doc.ddi0344b/DDI0344.pdf, 2006
【発明の開示】
【発明が解決しようとする課題】
【００２２】
上記のように、複数（Ｍ：２以上の整数）個のＮ（２のべき乗）ビットバレルシフタを組み合わせ、ビット幅のより広いＰ（=M×N）ビットバレルシフタとして利用する実装が増えている。
一方で、このような実装とする場合には、図３０に示したように、（M×(N+log2N-1)）個の2to1セレクタと、追加した2to1セレクタを制御するためのシフト量制御部と、Ｐビットのゼロマスクを生成するゼロマスク制御部と、ゼロマスクと追加した2to1セレクタの選択結果との論理積を計算するＰビットのＡＮＤ回路とが必要となる。
【００２３】
このため、複数個のバレルシフタを組み合わせて、ビット幅のより広いバレルシフタを作るための追加ハードウェアコストは、必ずしも安いとは言えない。また、組み合わせるバレルシフタの個数（Ｍ）や、ビット幅（Ｎ）が増えるに従って、追加ハードウェアコストがより高くなるという問題がある。
【００２４】
昨今では、携帯電話端末を始めとするモバイル機器においても、様々なメディア処理を高速に処理することが求められており、非特許文献３に開示されるように、ＳＳＥ（Streaming SIMD Extensions）と同様のＳＩＭＤ（Single instruction multiple data）型の実行ユニットが取り入れられている。このようなモバイル機器では、ハードウェアコストを抑えるため、ひいては消費電力を下げるために、最小限のハードウェアで機器を構成する必要がある。このため、複数個のバレルシフタを組み合わせてビット幅のより広いバレルシフタを作る場合においても、追加で必要となるハードウェア数をできる限り少なく抑えることが求められている。
【００２５】
本発明は係る問題に鑑みてなされたものであり、複数（Ｍ：２以上の整数）個のＮ（２のべき乗）ビットバレルシフタに対して僅かなハードウェアを追加することで、ビット幅のより広いＰ（=M×N）ビットバレルシフタを低コストに実現したバレルシフタ装置及びバレルシフト方法を提供することを目的とする。
【課題を解決するための手段】
【００２６】
上記目的を達成するため、本発明は、第１の態様として、Ｍ個のＮ（２のべき乗）ビットバレルシフタを組み合わせによってＰ(=M×N)ビットのバレルシフトを行うバレルシフタ装置であって、Ｐ個のMto1セレクタと、シフト方向とシフト幅とに基づいて、各Mto1セレクタのセレクト信号を生成するシフト量制御部とを備え、下位Ｋ番目のMto1セレクタには、Ｍ個のＮビットバレルシフタの下位(K mod N)ビット目のシフト結果が接続されており、シフト量制御部が生成した下位Ｋ番目のMto1セレクタのセレクト信号がＬである場合に、下位Ｋ番目のMto1セレクタは、下位Ｒ(K/N≧Lの場合はR=K/N-L、K/N＜Lの場合にはR=K/N-L+M)番目のＮビットバレルシフタの下位(K mod N)番目のシフト結果を選択し、下位Ｋ番目のMto1セレクタの選択結果を、Ｐビットバレルシフタの下位Ｋビット目のシフト結果とすることを特徴とするバレルシフタ装置を提供するものである。
【００２７】
また、上記目的を達成するため、本発明は、第２の態様として、Ｍ個のＮ（２のべき乗）ビットバレルシフタを組み合わせによってＰ(=M×N)ビットのバレルシフトを行うバレルシフト方法であって、Ｐ個のMto1セレクタのうち下位Ｋ番目のセレクタに、Ｍ個のＮビットバレルシフタの下位(K mod N)ビット目のシフト結果を接続し、シフト方向とシフト幅とに基づいて生成された下位Ｋ番目のMto1セレクタのセレクト信号がＬである場合に、下位Ｋ番目のMto1セレクタによって下位Ｒ(K/N≧Lの場合はR=K/N-L、K/N＜Lの場合にはR=K/N-L+M)番目のＮビットバレルシフタの下位(K mod N)番目のシフト結果を選択し、下位Ｋ番目のMto1セレクタの選択結果を、Ｐビットバレルシフタの下位Ｋビット目のシフト結果とすることを特徴とするバレルシフト方法を提供するものである。
【発明の効果】
【００２８】
本発明によれば、複数（Ｍ：２以上の整数）個のＮ（２のべき乗）ビットバレルシフタに対して僅かなハードウェアを追加することで、ビット幅のより広いＰ（=M×N）ビットバレルシフタを低コストに実現したバレルシフタ装置及びバレルシフト方法を提供できる。
【発明を実施するための最良の形態】
【００２９】
図１に示すように、本発明に係るバレルシフタ装置としてのＰビットバレルシフタ１０は、Ｍ個のＮ（２のべき乗）ビットバレルシフタ１を組み合わせによってＰ(=M×N)ビットのバレルシフトを行うバレルシフタ装置であって、Ｐ個のMto1セレクタ２と、シフト方向とシフト幅とに基づいて、各Mto1セレクタ２のセレクト信号を生成するシフト量制御部３とを備え、下位Ｋ番目のMto1セレクタ２には、Ｍ個のＮビットバレルシフタ１の下位(K mod N)ビット目のシフト結果が接続されており、シフト量制御部３が生成した下位Ｋ番目のMto1セレクタ２のセレクト信号がＬである場合に、下位Ｋ番目のMto1セレクタ２は、下位Ｒ(K/N≧Lの場合はR=K/N-L、K/N＜Lの場合にはR=K/N-L+M)番目のＮビットバレルシフタ１の下位(K mod N)番目のシフト結果を選択し、下位Ｋ番目のMto1セレクタ２の選択結果を、Ｐビットバレルシフタ１０の下位Ｋビット目のシフト結果とすることを特徴とする。
【００３０】
Ｍ個のＮビットバレルシフタ１の境界で、１〜（Ｎ−１）ビット離れた位置のデータを選択するMto1セレクタ２への入力は、Ｍ個のＮビットバレルシフタ時とＰビットバレルシフタ時とでは異なるが、このような構成とすることにより、それらを選択するためにMto1セレクタを追加する必要がない。これにより、Ｎビットバレルシフタを複数組み合わせによってＰビットバレルシフタを構成するにあたって、追加で必要となるハードウェア数を最小限に抑えることができる。
【００３１】
以下、本発明の好適な実施の形態について説明する。
【００３２】
〔第１の実施形態〕
本発明を好適に実施した第１の実施形態について説明する。
図２に、本実施形態に係るＰビットバレルシフタの構成を示す。バレルシフタ装置としてのＰビットバレルシフタ３００は、Ｍ（M:２以上の整数）個のＮ（２のべき乗）ビットバレルシフタ３０１を組み合わせることにより、ビット幅がＰ（=M×N）ビットとより広くなっている。
【００３３】
ここで、図２に示す構成は、左シフトを基本（右シフトは左シフトを応用して実現）とするＭ個のＮビットバレルシフタを用いた例であるが、右シフトを基本とする構成であっても良い。
【００３４】
Ｐビットバレルシフタ３００は、Ｍ個のＮビットバレルシフタ３０１に、Ｐ個のMto1セレクタ３０２と、シフト量制御部３０３と、ゼロマスク制御部３０４と、Ｐ個のＡＮＤ回路３０５とを追加することによって構成されている。なお、Ｎビットバレルシフタ３０１は図１のＮビットバレルシフタ１に相当する。また、Ｐ個のMto1セレクタ３０２は図１のMto1セレクタ２に相当する。さらに、シフト量制御部３０３は図１のシフト量制御部３に相当する。
シフト量制御部３０３は、Ｐビットバレルシフタ３００のシフト方向（lrP, 左：１、右：０）とシフト量swP(P>swP≧0)とから、Ｐ個のMto1セレクタ３０２のセレクト信号を生成する。ゼロマスク制御部３０４は、Ｐビットバレルシフタ３００のシフト方向（lrP）とシフト量（swP）とローテートフラグ（rotP）とから論理シフト時に利用するＰビットのゼロマスクを生成する。ＡＮＤ回路３０５は、Ｐ個のMto1セレクタ３０２の選択結果とゼロマスクとの論理積を計算する。
【００３５】
図３に、Ｎビットバレルシフタ３０１の構成を示す。Ｎビットバレルシフタ３０１は、図２７に示した４ビットバレルシフタをＮビットに拡張した構成となっており、左右ローテートに加え、左右論理シフトを実行する。
Ｎビットバレルシフタ３０１は、2to1セレクタ３０１０、シフト量制御部３０１１、ゼロマスク制御部３０１２、及びＡＮＤ回路３０１３を有する。
2to1セレクタ３０１０は、１段につきＮ個がＱ（Q=[log2N]、[log2N]はlog2Nを超えない最大の整数）段カスケードされる。なお、図３においては、シフト量制御部３０１１と各段の2to1セレクタ３０１０との接続は省略している。
【００３６】
図４に、ゼロマスク制御部３０１２の構成を示す。ゼロマスク制御部３０１２は、Ｎビットバレルシフタのシフト方向（lr）とシフト幅（sw）とを基に、左論理シフト時のシフト結果の下位ビットの０を挿入するためのＮビットの左ゼロマスク（LZM）と、右論理シフト時のシフト結果の上位ビットの０を挿入するためのＮビットの右ゼロマスク（RZM）とを、ゼロマスク生成部３０１４によって生成する。そして、シフト方向（lr、左：１、右：０）に基づき、セレクタ３０１５により、左ゼロマスク（LZM）又は右ゼロマスク（RZM）を選択し、ローテートフラグ（rot、ローテート：１、論理シフト：０）に基づきセレクタ３０１６により、セレクタ３０１５の選択結果か、ローテート用の全ビットが１であるワンマスク（ONE）かを選択し、その選択結果をゼロマスクとして出力する。
【００３７】
Ｐビットバレルシフタの基本動作原理について、２個の４ビットバレルシフタを組み合わせた８ビットバレルシフタを例に説明する。８ビットバレルシフタと、２個の４ビットバレルシフタのそれぞれとにおいて、abcdefghの８ビットデータを０〜７ビットだけ左ローテートした際のシフト結果と、２個の４ビットバレルシフタを組み合わせる際に利用するセレクト信号の様子とを図５に示す。
【００３８】
セレクト信号は、２個の４ビットバレルシフタのシフト結果の一方を選択する８個のセレクタを制御する（図２のＰ個のMto1セレクタ３０２に相当）。下位０〜３ビット目のセレクタは、セレクト信号が０である場合には右側（自身）の４ビットバレルシフタのシフト結果をそれぞれ選択する。また、セレクト信号が１である場合には、左側（自身より一つ右側、この場合は左側に折り返し）の４ビットバレルシフトのシフト結果をそれぞれ選択する。
【００３９】
一方、下位４〜７ビット目のセレクタは、セレクト信号が０である場合には、左側（自身）の４ビットバレルシフタのシフト結果をそれぞれ選択する。また、セレクト信号が１である場合には、右側（自身より一つ右側）の４ビットバレルシフタのシフト結果をそれぞれ選択する。
【００４０】
図５では、左ローテートを基本とするバレルシフタの組み合わせているため、セレクト信号が１である場合は、自身よりも一つ右側のバレルシフタのシフト結果を選択しているが、右ローテートを基本とするバレルシフタを組み合わせる場合には、自身よりも一つ左側のバレルシフタのシフト結果を選択する。
【００４１】
また、図５では、２個の４ビットバレルシフタを組み合わせているが、例えばＭ個のＮビットバレルシフタを組み合わせる場合では、セレクト信号をＳ（=[log2M]）ビットに拡張する。
【００４２】
そして、セレクト信号が０である場合には自身のバレルシフタのシフト結果を、セレクト信号がＬ(M＞L≧0)である場合にはＬ個右側のバレルシフタのシフト結果を選択するように拡張する。ただし、Ｌ個右側のバレルシフタが存在しない場合には、右側のバレルシフタから左側のバレルシフタへ折り返して（右端のバレルシフタの右隣には左端のバレルシフタがあると仮定して）、Ｌ個目のバレルシフタのシフト結果を選択する。
【００４３】
図５に示すように、左０ビットシフト時には、２個の４ビットバレルシフタのシフト結果は、８ビットバレルシフタのシフト結果と一致するため、２個の４ビットバレルシフタシフト結果をそのまま８ビットバレルシフタのシフト結果として選択すれば良く、各ビット位置におけるセレクト信号は、0000|0000となる。
【００４４】
左１ビットシフト時には、２個の４ビットバレルシフタのシフト結果のうち、それぞれの下位３〜１ビット目（bcd、fgh）は、８ビットバレルシフタのシフト結果と一致する。一方で、それぞれの下位０ビット目（a、e）を８ビットバレルシフタのシフト結果と一致させるためには、それぞれの下位０ビット目（a、e）を交換する必要がある。
【００４５】
具体的には、左の４ビットバレルシフタの下位０ビット目(a)を、右の４ビットバレルシフタの下位０ビット目として選択し、右の４ビットバレルシフタの下位０ビット目(e)を、左の４ビットバレルシフタの下位０ビット目として選択すればよい。このためには、各ビット位置におけるセレクト信号は、0001|0001となる。
【００４６】
左２ビットシフト時には、２個の４ビットバレルシフタのシフト結果のうち、それぞれの下位３〜２ビット目（cd、gh）は、８ビットバレルシフタのシフト結果と一致する。一方で、それぞれの下位１〜０ビット目（ab、ef）を、それぞれ交換する必要がある。
【００４７】
具体的には、左の４ビットバレルシフタの下位１〜０ビット目(ab)を、右の４ビットバレルシフタの下位１〜０ビット目として選択し、右の４ビットバレルシフタの下位１〜０ビット目(ef)を、左の４ビットバレルシフタの下位１〜０ビット目として選択すればよい。このためには、各ビット位置におけるセレクト信号は、0011|0011となる。
【００４８】
以下同様に、２個の４ビットバレルシフタのシフト結果を、図５のセレクト信号に基づいて選択することにより、８ビットバレルシフタを実現する。また、２個の４ビットバレルシフタに供給するセレクト信号は、同様の信号となっており、一つの４ビットセレクト信号を、２個の４ビットバレルシフタのシフト結果を選択するセレクタへ分配すればよい。
【００４９】
以下では、図５の例で説明した基本動作原理を実装し、一般化した図２のＰビットバレルシフタ３００の詳細について説明する。
まず、Ｍ個のＮビットバレルシフタ３０１のシフト結果と、Ｐ個のMto1セレクタ３０２との接続方法について説明する。
下位Ｋ（P＞K≧0）番目のMto1セレクタには、Ｍ個の各ビットバレルシフタの下位（K%N、%：剰余）ビット目のシフト結果が接続され、Ｋ番目のMto1セレクタのセレクト信号がＬ（M＞L≧0）である場合に、下位Ｋ番目のMto1セレクタは、下位Ｓ（S=K/N-L、S<0となる場合にはS=K/N-L+M）番目のＮビットバレルシフタの下位(K%N)番目のシフト結果を選択する。
【００５０】
図２におけるＫ（K=P-1）番目のMto1セレクタを例とすると、Mto1セレクタのセレクト信号Ｌが０である場合には、下位(M-1)番目のＮビットバレルシフタの下位(N-1)ビット目のシフト結果を選択し、セレクト信号Ｌが１である場合には、下位(M-2)番目のＮビットバレルシフタの下位(N-1)ビット目のシフト結果を選択し、セレクト信号Ｌが(M-1)である場合には、下位０番目のＮビットバレルシフタの下位(N-1)ビット目のシフト結果を選択する。
【００５１】
図２におけるＫ（K=P-2）番目のMto1セレクタを例とすると、Mto1セレクタのセレクト信号Ｌが０である場合には、下位(M-1)番目のＮビットバレルシフタの下位(N-2)ビット目のシフト結果を選択し、セレクト信号Ｌが１である場合には、下位(M-2)番目のＮビットバレルシフタの下位(N-2)ビット目のシフト結果を選択し、セレクト信号Ｌが(M-1)である場合には、下位０番目のＮビットバレルシフタの下位(N-2)ビット目のシフト結果を選択する。
【００５２】
図２におけるＫ（K=P-N-1）番目のMto1セレクタを例とすると、Mto1セレクタのセレクト信号Ｌが０である場合には、下位(M-2)番目のＮビットバレルシフタの下位(N-1)ビット目のシフト結果を選択し、セレクト信号Ｌが１である場合には、下位(M-3)番目のＮビットバレルシフタの下位(N-1)ビット目のシフト結果を選択し、セレクト信号Ｌが(M-1)である場合には、下位(M-1)番目のＮビットバレルシフタの下位(N-1)ビット目のシフト結果を選択する。
【００５３】
図２におけるＫ（K=P-N-2）番目のMto1セレクタを例とすると、Mto1セレクタのセレクト信号Ｌが０である場合には、下位(M-2)番目のＮビットバレルシフタの下位(N-2)ビット目のシフト結果を選択し、セレクト信号Ｌが１である場合には、下位(M-3)番目のＮビットバレルシフタの下位(N-2)ビット目のシフト結果を選択し、セレクト信号Ｌが(M-1)である場合には、下位(M-1)番目のＮビットバレルシフタの下位(N-2)ビット目のシフト結果を選択する。
【００５４】
図２におけるＫ（K=N-1）番目のMto1セレクタを例とすると、Mto1セレクタのセレクト信号Ｌが０である場合には、下位０番目のＮビットバレルシフタの下位(N-1)ビット目のシフト結果を選択し、セレクト信号Ｌが１である場合には、下位(M-1)番目のＮビットバレルシフタの下位(N-1)ビット目のシフト結果を選択し、セレクト信号Ｌが(M-2)である場合には、下位２番目のＮビットバレルシフタの下位(N-1)ビット目のシフト結果を選択し、セレクト信号Ｌが(M-1)である場合には、下位１番目のＮビットバレルシフタの下位(N-1)ビット目のシフト結果を選択する。
【００５５】
図２におけるＫ（K=N-2）番目のMto1セレクタを例とすると、Mto1セレクタのセレクト信号Ｌが０である場合には、下位０番目のＮビットバレルシフタの下位(N-2)ビット目のシフト結果を選択し、セレクト信号Ｌが１である場合には、下位(M-1)番目のＮビットバレルシフタの下位(N-2)ビット目のシフト結果を選択し、セレクト信号Ｌが(M-2)である場合には、下位２番目のＮビットバレルシフタの下位(N-2)ビット目のシフト結果を選択し、セレクト信号Ｌが(M-1)である場合には、下位１番目のＮビットバレルシフタの下位(N-2)ビット目のシフト結果を選択する。
【００５６】
次に、シフト量制御部３０３によって生成される、Ｐ個のMto1セレクタ３０２の各セレクト信号Ｌ（M＞L≧0）について説明する。ここで、セレクト信号Ｌは、Ｈ(=[log2M])ビットからなる信号である。
【００５７】
図５を用いて説明したように、図２に示すＰ個のMto1セレクタ３０２のうち、Ｍ個のバレルシフタが直下にあるＮ個ずつのMto1セレクタには、共通のＮセットのセレクト信号Ｌを分配すればよい。
【００５８】
一般的には、下位Ｋ（P＞K≧0）番目のMto1セレクタのうち、（K%N）が同一であるMto1セレクタには、同一のセレクト信号Ｌを分配する。
【００５９】
Ｎセットのセレクト信号Ｌを、Ｐビットバレルシフタのシフト方向（lrP）とシフト量swP（P＞swP≧0）とから直接生成するのではなく、Ｎビットバレルシフタのゼロマスク生成部３０１２が生成するゼロマスクを流用することにより、Ｎセットのセレクト信号Ｌを生成するハードウェアコストを低減する。
【００６０】
以下では、Ｎセットのセレクト信号Ｌの規則性について説明し、その一部がＮビットバレルシフタのゼロマスク制御部３０１２が生成するゼロマスクと同等であることを説明する。そして、Ｎセットのセレクト信号Ｌの生成方法について説明する。
【００６１】
図６に、８個の４ビットバレルシフタを組み合わせる場合に、左ローテート（シフト）時にシフト量制御部３０３が生成するＮセットのセレクト信号Ｌを示す。また、図７に、Ｎビットバレルシフタ３０１で左ローテート（シフト）時に生成される右ゼロマスク（RZM）と左ゼロマスク（LZM）とを示す。
【００６２】
図６に示すように、８個の４ビットバレルシフタを組み合わせるため、４セットのセレクト信号が生成される。各セレクト信号は、８個の４ビットバレルシフタのシフト結果を選択するため、各３bit必要である。また、４セットのセレクト信号の各下位２ビット目、各下位１ビット目、各下位０ビット目を取り出したビット列を表の右側にまとめる。
【００６３】
図６、図７を参照すると、図６の縦線部は右ゼロマスクRZMと、図６の網掛け部は左ゼロマスクLZMとそれぞれ同じビットパターンとなっている。よって、図７の４ビットバレルシフタが生成する左右ゼロマスク（LZM、RZM）を左ローテート（シフト）時のセレクト信号Ｌの生成に利用する。
【００６４】
図６の例では、セレクト信号Ｌの下位０ビット目を生成するのに、シフト量の下位２ビット目（swP[2]）が０である場合には右ゼロマスク（RZM）を選択し、シフト量の下位２ビット目（swP[2]）が１である場合には左ゼロマスク（LZM）を選択する。
【００６５】
一般化すると、Ｐビットバレルシフタが左にswP（P＞swP≧0）ビットシフトする際に、下位Ｋ（P＞K≧0）番目のMto1セレクタのセレクト信号の下位０ビット目として、シフト量swPの下位Ｑ（=[log2N]）ビット目が０である場合には、任意のＮビットバレルシフタの左右ゼロマスクセレクタを用いて選択した右ゼロマスク(RZM)の下位（K%N）ビット目を選択する。シフト量swPの下位Ｑビット目が１である場合には、下位Ｋ（P＞K≧0）番目のMto1セレクタのセレクト信号の下位０ビット目として、任意のＮビットバレルシフタの左右ゼロマスクセレクタを用いて選択した左ゼロマスク(LZM)の下位(K%N)ビット目を選択する。
【００６６】
RZMかLZMかの選択は、図８に示すように、Ｎビットバレルシフタのゼロマスク制御部が持っているRZMかLZMかを選択するための左右ゼロマスクセレクタ４００のセレクト信号を、シフト量swPの下位Ｑビット目に切り替えるためのセレクタ４０２を図４に示した構成に追加するだけでよい。また、セレクタ４０２は、Ｐビットバレルシフタ実行時に１となるmode信号によって切り替えられる。
【００６７】
図６の例では、セレクト信号Ｌの下位１ビット目を生成するのに、シフト量の下位３〜２ビット目（swP[3:2]）が００である場合には００００を選択し、シフト量の下位３〜２ビット目（swP[3:2]）が０１である場合にはRZMを選択し、シフト量の下位３〜２ビット目（swP[3:2]）が１０である場合には１１１１を選択し、シフト量の下位３〜２ビット目（swP[3:2]）が１１である場合にはLZMを選択する。これらの選択には、４個の4to1セレクタを実装し、swP[3:2]をそのセレクト信号として利用するだけで良い。
【００６８】
図６の例では、セレクト信号Ｌの下位２ビット目を生成するのに、シフト量の下位３〜２ビット目（swP[3:2]）の論理積の結果をResAとして、シフト量の下位４ビット目（swP[4]）とResAが００である場合には００００を選択し、シフト量の下位４ビット目（swP[4]）とResAが０１である場合にはRZMを選択し、シフト量の下位４ビット目（swP[4]）とResAが１０である場合には１１１１を選択し、シフト量の下位４ビット目（swP[4]）とResAが１１である場合にはLZMを選択する。
【００６９】
一般化すると、Ｐビットバレルシフタが左にswP（P＞swP≧0）ビットシフトする際に、下位Ｋ番目のMto1セレクタのセレクト信号の下位Ｔ（Q＞T＞0）ビット目は、シフト量swPの下位Ｑ（=[log2N]）ビット目から、下位（Q+T-1）ビット目までのビット値の論理積の結果をResAとして、ResAと下位（Q+T）ビット目が００である場合には全ビット０（ZERO）を選択し、ResAと下位（Q+T）ビット目が０１である場合にはRZMを選択し、ResAと下位（Q+T）ビット目が１０である場合には全ビット１（ONE）を選択し、ResAと下位（Q+T）ビット目が１１である場合にはLZMを選択する。
【００７０】
セレクト信号Ｌの下位(H-1)(H=[log2M])〜0ビット目の生成は、図９に示すように、ResAを生成するＴ(H＞T≧1)ビット入力のＡＮＤ素子４０３と、Ｎ個の4to1セレクタ４０４を(H-1)組実装し、sw[Q+T]とResAをそのセレクト信号として実装することにより実現する。
【００７１】
シフト量制御部３０３が利用するゼロマスク(LZM、RZM)は、Ｍ個のＮビットバレルシフタの任意の一つであればよい。なお、図２においては、シフト量制御部３０３とＮビットバレルシフタ３０１間でのゼロマスクや制御の配線は明示していない。
【００７２】
図１０に、８個の４ビットバレルシフタを組み合わせる場合に、右ローテート（シフト）時にシフト量制御部３０３が生成するＮセットのセレクト信号Ｌを示す。また、図１１に、Ｎビットバレルシフタ３０１で、右ローテート（シフト）時に生成される右ゼロマスク(RZM)と左ゼロマスク(LZM)とを示す。
【００７３】
図１０に示すように、８個の４ビットバレルシフタを組み合わせるため、４セットのセレクト信号が生成される。各セレクト信号は、８個の４ビットバレルシフタのシフト結果を選択するため、各3bit必要である。また、４セットのセレクト信号の各下位２ビット目、各下位１ビット目、各下位０ビット目を取り出したビット列を表の右側にまとめる。
【００７４】
図１０、図１１を参照すると、図１０の縦線部は右ゼロマスク(RZM)と、図１０の網掛け部は左ゼロマスク(LZM)とそれぞれ同じビットパターンとなっている。よって、４ビットバレルシフタが生成するゼロマスク(RZM、LZM)を、右ローテート（シフト）時のセレクト信号Ｌの生成に利用する。
【００７５】
図１０の例では、セレクト信号Ｌの下位０ビット目を生成するのに、シフト量の下位２ビット目（swP[2]）が０である場合には、左ゼロマスク(LZM)を選択し、シフト量の下位２ビット目（swP[2]）が１である場合には右ゼロマスク(RZM)を選択する。
【００７６】
一般化すると、Ｐビットバレルシフタが右にswP（P＞swP≧0）ビットシフトする際に、下位Ｋ（P＞K≧0）番目のMto1セレクタのセレクト信号の下位０ビット目として、シフト量swPの下位Ｑ（=[log2N]）ビット目が０である場合には、任意のＮビットバレルシフタの左右ゼロマスクセレクタを用いて選択した左ゼロマスク(LZM)の下位(K%N)ビット目を選択する。シフト量swPの下位Ｑビット目が１である場合には、下位Ｋ番目のMto1セレクタのセレクト信号の下位０ビット目として、任意のＮビットバレルシフタの左右ゼロマスクセレクタを用いて選択した右ゼロマスク(RZM)の下位(K%N)ビット目を選択する。
【００７７】
RZMとLZMとの選択は、図１２に示すように、図８に示した左ローテート（シフト）時のRZMとLZMとの選択回路を拡張したものとなる。シフト量swPの下位Ｑビット目と、Ｐビットバレルシフタのシフト方向(lrP)との否定排他的論理和(XNOR)５０３を計算し、Ｎビットバレルシフタが持っているRZMとLZMとを選択するための左右ゼロマスクセレクタ５０１のセレクト信号を否定排他的論理和５０３に切り替えるためのセレクタ５０２が必要となる。また、セレクタ５０１は、Ｐビットバレルシフタ実行時に１となるmode信号によって切り替えられる。
【００７８】
図１０の例では、セレクト信号Ｌの下位１ビット目を生成するのに、シフト量の下位３〜２ビット目（swP[3:2]）が００である場合には００００を選択し、シフト量の下位３〜２ビット目（swP[3:2]）が０１である場合にはLZMを選択し、シフト量の下位３〜２ビット目（swP[3:2]）が１０である場合には１１１１を選択し、シフト量の下位３〜２ビット目（swP[3:2]）が１１である場合にはRZMを選択する。これらの選択には、４個の4to1セレクタを実装し、swP[3:2]をそのセレクト信号として利用するだけでよい。
【００７９】
図１０の例では、セレクト信号Ｌの下位２ビット目を生成するのに、シフト量の下位３〜２ビット目（swP[3:2]）の論理積の結果をResAとして、シフト量の下位４ビット目（swP[4]）とResAが００である場合には００００を選択し、シフト量の下位４ビット目（swP[4]）とResAが０１である場合にはLZMを選択し、シフト量の下位４ビット目（swP[4]）とResAが１０である場合には１１１１を選択し、シフト量の下位４ビット目（swP[4]）とResAが１１である場合にはRZMを選択する。
【００８０】
一般化すると、Ｐビットバレルシフタが右にswPビットシフトする際に、下位Ｋ番目のMto1セレクタのセレクト信号の下位Ｔビット目は、シフト量swPの下位Ｑ（=[log2N]）ビット目から、下位（Q+T-1）ビット目までのビットの論理積の結果をResAとして、ResAと下位（Q+T）ビット目が００である場合には全ビット０(ZERO)を選択し、ResAと下位（Q+T）ビット目が０１である場合にはLZNを選択し、ResAと下位（Q+T）ビット目が１０である場合には全ビット１(ONE)を選択し、ResAと下位（Q+T）ビット目が１１である場合にはRZMを選択する。
【００８１】
セレクト信号Ｌの下位(H-1)(H=[log2M])〜0ビット目の生成は、図１３に示すように、図９に示した左ローテート（シフト）時のRZMとLZMとの選択回路を拡張することによって実現する。Ｐビットバレルシフタのシフト方向(lrP)に基づき、[swP[Q+T],ResA]より生成される選択信号(Sel4[1:0])を切り替える。具体的には、シフト方向が左である場合には直線の矢印でSel4を生成し、シフト方向が右である場合にはクロスする矢印でSel4を生成する。
【００８２】
図１３に示すように、図９のResAを生成するＴビット入力のＡＮＤ素子５０４と、(H-1)組のＮ個の4to1セレクタ５０５に、シフト量swPの下位(Q+T)ビット目とResAとから、Ｎ個の4to1セレクタ５０５の制御信号(sel4)を生成するデコーダ５０６とを加えることにより、セレクト信号Ｌの下位(H-1)〜0ビット目を生成する。
【００８３】
次に、Ｐビットバレルシフタ３００のシフト方向(lrP)とシフト量(swP)とローテートフラグ(rotP)とから論理シフト時に利用するＰビットのゼロマスクを生成するゼロマスク制御部３０４について説明する。
【００８４】
図１４に、ゼロマスク制御部３０４の構成を示す。ゼロマスク制御部３０４は、Ｐビットバレルシフタのシフト方向(lrP)とシフト量(swP)とから、左ゼロマスク(LZM)と右ゼロマスク(RZM)とを生成するゼロマスク生成部６００と、生成されたゼロマスク(LZM、RZM)をシフト方向lrPに基づき選択する左右ゼロマスクセレクタ６０１と、ローテートフラグrotPに基づき選択結果又は全ビットマスク(ONE)を選択するシフトマスクセレクタ６０２とから構成される。
ゼロマスク制御部３０４は、シフトマスクセレクタ６０２の選択結果をゼロマスク(ZMP)として、Ｐ個のMto1セレクタ３０２の選択結果との論理和をＡＮＤ回路３０５によって計算し、最終的なＰビットバレルシフタのシフト結果(Out)を得る。
【００８５】
図１５に、ゼロマスク生成部６００の構成を示す。ゼロマスク生成部６００は、(P-swP)を計算する減算器６０３と、Ｐビットバレルシフタのシフト方向lrPに基づき、左シフト時にはＰビットバレルシフタのシフト量swPを選択し、右シフト時には(P-swP)を選択するセレクタ６０４と、その選択結果swZに基づきデコードを行うデコーダ６０５と、デコード結果LZMの各々のビットを反転させる否定回路６０６から構成される。
【００８６】
本実施形態に係るバレルシフト装置は、ゼロマスク制御部３０４及びＡＮＤ回路３０５を備えることにより、２以上のＮビットバレルシフタにまたがる左右論理シフトを実行する場合に、シフト結果の上位ビット又は下位ビットに０を挿入可能である。
【００８７】
このように、本実施形態に係るバレルシフト装置は、Ｍ個のＮビットバレルシフタを組み合わせたＰ（＝Ｍ×Ｎ）ビットバレルシフタを構成する場合に、Ｍ個のＮビットバレルシフタのシフト結果から、同じビット位置のデータ又はＮ×Ｒ（Ｍ＞Ｒ≧１）ビット離れたビット位置のデータを選択するMto1セレクタを、シフト方向とシフト幅swPとに応じて個別に制御する。Ｍ個のＮビットバレルシフタの境界で、１〜（Ｎ−１）ビット離れた位置のデータを選択するMto1セレクタへの入力は、Ｍ個のＮビットバレルシフタ時とＰビットバレルシフタ時とでは異なるが、M×(N-1)個の2to1セレクタを追加する必要がない。
【００８８】
また、Ｍ個のＮビットバレルシフタのシフト結果から、同じビット位置のデータ又はＮ×Ｒ（Ｍ＞Ｒ≧１）ビット離れたビット位置のデータを選択するMto1セレクタのセレクト信号を、ＮビットバレルシフタのＮビット左ゼロマスクとＮビット右ゼロマスクとＮビット左右ゼロマスクセレクタを用いて生成することにより、セレクト信号を生成するハードウェアコストを低減できる。
【００８９】
〔第２の実施形態〕
本発明を好適に実施した第２の実施形態について説明する。図１６に、本実施形態に係るＰビットバレルシフタの構成を示す。バレルシフタ装置としてのＰビットバレルシフタ７００は、複数（Ｍ）個のＮビットバレルシフタ７０１を組み合わせて、ビット幅のより広いＰ(=M×N)ビットバレルシフタを低コストに実現するものである。
【００９０】
ここで、図１６に示す構成は、左シフトを基本とする（右シフトは左シフトを応用して実現する）Ｍ個のＮビットバレルシフタを用いた例であるが、右シフトを基本とする構成であっても良い。
【００９１】
本実施形態においては、Ｍ個のＮビットバレルシフタのゼロマスク制御部を拡張することにより、図２に示した第１の実施形態に係るＰビットバレルシフタ装置での論理シフト時のゼロマスク処理を行うためのゼロマスク制御部３０４とＰ個のＡＮＤ回路３０５とを削減する。
【００９２】
本実施形態に係るバレルシフタ装置の動作原理について、２個の４ビットバレルシフタを組み合わせた８ビットバレルシフタを例に説明する。８ビットバレルシフタと２個の４ビットバレルシフタとのそれぞれにおいて、abcdefghの８ビットデータを０〜７ビットだけ、単純に左・右論理シフトした際のシフト結果と、２個の４ビットバレルシフタを組み合わせたシフト結果（組み合わせ結果）を図１７及び図１８に示す。
【００９３】
図１７と図１８から分かるように、各４ビットバレルシフタで、単純に左・右論理シフトし組み合わせただけでは、８ビットバレルシフタでの左・右論理シフトの結果と一致しない。２個の4ビットバレルシフタを組み合わせた８ビットバレルシフタの結果と、８ビットバレルシフタでの左・右論理シフトの結果を一致させるには、２個の４ビットバレルシフタの左・右論理シフト結果が図１９、図２０となるように制御する必要がある。また、図１９及び図２０には、その際に４ビットバレルシフタが利用するゼロマスクも併記する。
【００９４】
左論理シフト時の図１９では、シフト量が３（０１１）以下の場合には、左側の４ビットバレルシフタのみ左論理シフトを行い、右側の４ビットバレルシフタは左ローテートを行うように制御することにより、８ビットバレルシフタと組み合わせ結果の左論理シフト結果とが一致する。また、シフト量が４（１００）以上の場合には、左側の４ビットバレルシフタの結果の全ビットが０となるように制御し、右側の４ビットバレルシフタは左論理シフトを行うように制御することにより、８ビットバレルシフタと組み合わせ結果の左論理シフト結果とが一致する。
【００９５】
右論理シフト時の図２０では、シフト量が３（０１１）以下の場合には、右側の４ビットバレルシフタのみ右論理シフトを行い、左側の４ビットバレルシフタは右ローテートを行うように制御することにより、８ビットバレルシフタと組み合わせ結果の右論理シフト結果とが一致する。また、シフト量が４（１００）以上の場合には、右側の４ビットバレルシフタの結果の全ビットが０となるように制御し、左側の４ビットバレルシフタは右論理シフトを行うように制御することにより、８ビットバレルシフタと組み合わせ結果の右論理シフト結果とが一致する。
【００９６】
以下の説明においては、図１７〜図２０で説明した基本動作原理に基づき、一般化した図１６のＰビットバレルシフタ７００について説明する。
【００９７】
図１６に示すように、Ｐビットバレルシフタ７００は、Ｍ個のＮ（２のべき乗）ビットバレルシフタ７０１に、Ｐ(=M×N)個のMto1セレクタ７０２と、Ｐビットバレルシフタのシフト方向(lrP)とシフト量swPとから、Ｐ個のMto1セレクタ７０２のセレクト信号を生成するシフト量制御部７０３と、Ｎビットバレルシフタ７０１のゼロマスク制御部を拡張し、その制御をすることにより、Ｐビットバレルシフタでの論理シフトを実現するゼロマスク拡張部７０４とから構成される。なお、Ｎビットバレルシフタ７０１は図１のＮビットバレルシフタ１に相当する。また、Ｐ個のMto1セレクタ７０２は図１のMto1セレクタ２に相当する。さらに、シフト量制御部７０３は図１のシフト量制御部３に相当する。
【００９８】
Ｎビットバレルシフタ７０１のゼロマスク制御部を拡張し、Ｐビットバレルシフタ７００での論理シフトを実行させるため、拡張したＮビットバレルシフタ７０１のゼロマスク制御部を図２１に示す。
【００９９】
図２１に示すゼロマスク制御部８００は、図４に示したＮビットバレルシフタのゼロマスク制御部３０１２に、セレクタ群が追加されている。これらの追加されたセレクタ群の制御信号であるsel_lr、sel_sw、sel_lzm、sel_rotは、図１４に示すゼロマスク拡張部７０４により、Ｐビットバレルシフタのローテートフラグ(rotP)、シフト方向(lrP)、シフト量(swP)から生成する。
【０１００】
まず、図２１に示したＭ個のＮビットバレルシフタのゼロマスク制御部８００の構成について説明する。
【０１０１】
図１９、図２０のゼロマスクが示すように、論理シフトを実行した際の、Ｍ個のＮビットバレルシフタのシフト結果と、Ｐビットバレルシフトの結果とを一致させるには、シフト方向とシフト量とに応じて、各Ｎビットバレルシフタのゼロマスク制御部８００が生成するゼロマスク(ZM)を、全ビット１(ONE)、全ビット０(ZERO)、左ゼロマスク(LZM)、右ゼロマスク(RZM)のいずれかに指定する構成が必要となる。
【０１０２】
まず、ゼロマスク(ZM)を全ビット１(ONE)とするために、ローテート時にゼロマスク(ZM)を全ビット１(ONE)に指定するためのセレクタ８０１の制御信号を、ローテート制御信号(sel_rot)に基づいて生成するセレクタ８０２を追加し、sel_rotが１である場合には、全ビット１(ONE)がゼロマスク(ZM)となるようにする。これにより、Ｐビットバレルシフタが論理シフトを実行している際に、rotが０となっていても、全ビット１(ONE)がゼロマスク(ZM)として選択できるようになる。
【０１０３】
次に、ゼロマスク(ZM)を全ビット０(ZERO)とするために、ゼロマスク生成部８０３が生成する左ゼロマスク(LZM)が、１１・・・０００となるように、シフト方向制御信号(sel_Lr)に基づき、ゼロマスク生成部８０３に入力するシフト方向を左（１）に設定するセレクタ８０４と、シフト量制御信号(sel_sw)に基づき、ゼロマスク生成部８０３に入力するシフト量をONE(１１・・・１１１)に設定するセレクタ８０５と、左ゼロマスク制御信号(sel_lzm)に基づき、ゼロマスク生成部８０３が生成した左ゼロマスク（１１・・・０００）の最上位ビットのみ、０を選択するようにするセレクタ８０６と、セレクタ８０６の選択結果と右ゼロマスクを選択するセレクタ８０７の制御信号を、シフト方向制御信号(sel_lr)に基づき、セレクタ８０６の選択結果を選択するためのセレクタ８０８を追加する。
【０１０４】
最後に、ゼロマスク(ZM)を左ゼロマスク(LZM)、又は右ゼロマスク(RZM)とするためには、シフト方向制御信号(sel_lr)を０、シフト量制御信号(sel_sw)を０、ローテート制御信号(sel_rot)を０、左ゼロマスク制御信号(sel_lzm)を０とすることにより実現する。
【０１０５】
また、図２１では、全ビット０(ZERO)とするために、左ゼロマスク(LZM)を拡張した構成をとっているが、右ゼロマスク(RZM)を拡張した構成をとっても構わない。
【０１０６】
以下では、Ｐビットバレルシフタのローテートフラグ(rotP)、シフト量(swP)から、図２１の各種制御信号（sel_lr、sel_sw、sel_lzm、sel_rzm、sel_rot）を生成する図１６のゼロマスク拡張部７０４について、その詳細を説明する。
【０１０７】
まず、ゼロマスク拡張部７０４の構成方法について、４個の４ビットバレルシフタを組み合わせた１６ビットバレルシフタを例に説明する。a〜pからなる１６ビットデータを、０〜１６ビット左論理シフトしたシフト結果と、その際の各４ビットバレルシフタが利用するゼロマスクを図２２に示す。
【０１０８】
図２２に示すゼロマスクを参照すると、縦線部が全ビット１(ONE)、網掛け部が全ビット０(ZERO)となっており、他の部分は、通常の左論理シフト時に生成される左ゼロマスク(LZM)となっている。
【０１０９】
図２２の下位３番目（一番左側）の４ビットバレルシフタのゼロマスクに着目すると、シフト量の下位３〜２ビット目（sw[3:2]）が００の場合に左ゼロマスク(LZM)を選択し、sw[3:2]が０１以上の場合には全ビット０(ZERO)を選択する。
【０１１０】
図２２の下位２番目の４ビットバレルシフタのゼロマスクに着目すると、シフト量の下位３〜２ビット目(sw[3:2])が００の場合に全ビット１(ONE)を選択し、sw[3:2]が０１の場合には左ゼロマスク(LZM)を選択し、sw[3:2]が１０以上の場合には全ビット０(ZERO)を選択する。
【０１１１】
図２２の下位１番目の４ビットバレルシフタのゼロマスクに着目すると、シフト量の下位３〜２ビット目（sw[3:2]）が０１以下の場合に全ビット１(ONE)を選択し、sw[3:2]が１０の場合には左ゼロマスク(LZM)を選択し、SW[3:2]が１１の場合には全ビット０(ZERO)を選択する。
【０１１２】
図２２の下位０番目（一番右側）の４ビットバレルシフタのゼロマスクに着目すると、シフト量の下位３〜２ビット目(sw[3:2])１０以下の場合に全ビット１(ONE)を選択し、sw[3:2]が１１の場合には左ゼロマスク(LZM)を選択する。
【０１１３】
以上をまとめると、下位Ｂ（M＞B≧0）番目の４ビットバレルシフタのゼロマスクは、シフト量の下位３〜２ビット目とＢとの大小関係に基づき、全ビット１(ONE)、全ビット０（ZERO）、左ゼロマスク(LZM)を選択していることが分かる。
【０１１４】
一般化すると、swP（P＞swP≧0）ビット左論理シフトを実行する際に、下位Ｂ(M＞B≧0)番目のＮビットバレルシフタのゼロマスクが(N×(M-B-1))＞swPである場合には全ビット１(ONE)となるようにバレルシフタのゼロマスク制御部８００へのローテート制御信号(sel_rot)を１とし、(N×(M-B))＞swP≧(N×(M-B-1))である場合には左ゼロマスク(LZM)となるようにバレルシフタのゼロマスク制御部８００へのローテート制御信号(sel_rot)を０とし、シフト制御信号(sel_sw)を０とし、シフト量制御方向制御信号(sel_lr)を０とし、左シフト制御信号(sel_lzm)を０とし、swP≧(N×(M-B))である場合には、全ビット０(ZERO)となるようにバレルシフタのゼロマスク制御部８００へのローテート制御信号(sel_rot)を０とし、シフト量制御信号(sel_sw)を１とし、シフト方向制御信号(sel_lr)を１とし、左シフト制御信号(sel_lzm)を１とするようにゼロマスク制御部７０４を構成する。
【０１１５】
上記機能を実現する回路の構成を図２３に示す。図示するのは、Ｍ個のＮビットバレルシフタのうちの下位Ｂ(M＞B≧0)番目のＮビットバレルシフタのゼロマスク制御部８００を制御する回路であり、ゼロマスク拡張部７０４は、Ｍ個のＮビットバレルシフタのゼロマスク制御部を制御するため、図２３の回路をＭセット持つ構成となる。
【０１１６】
図２３に示すように、シフト量(swP)と、(N×(M-B-1))又は(N×(M-B))との大小関係（大又は等しい：０、小：１）を比較するための減算器９００、９０１と、Ｐビットバレルシフタのローテートフラグ(rotP)に基づき、f0又は1をローテート制御信号(sel_rot)として選択するセレクタ９０２と、大小関係(f0、f1)の否定の論理積を計算するＡＮＤ回路９０３とにより、１セットの回路を構成する。
ここで、(N×(M-B-1))又は（N×(M-B)）は各Ｎビットバレルシフタのゼロマスク制御部ごとに定数となるため、ゼロマスク拡張部７０４でオンラインに計算する（シフト実行時に逐一計算する）必要はない。
【０１１７】
次に、ゼロマスク拡張部７０４の構成方法について、４個の４ビットバレルシフタを組み合わせた１６ビットバレルシフタにおいて、a〜pからなる１６ビットデータを０〜１６ビット右論理シフトする場合を例に説明する。右論理シフトしたシフト結果とその際の各４ビットバレルシフタが利用するゼロマスクとを図２４に示す。
【０１１８】
図２４に示すゼロマスクを参照すると、縦線部が全ビット１(ONE)、網掛け部が０(ZERO)になっており、他の部分は通常の右論理シフト時に生成される右ゼロマスク(RZM)となっている。
【０１１９】
図２４の下位３番目（一番左側）の４ビットバレルシフタのゼロマスクに着目すると、シフト量の下位３〜２ビット目(sw[3:2])が１１の場合に右ゼロマスクを選択し、sw[3:2]が１０以下の場合には全ビット１(ONE)を選択する。
【０１２０】
図２４の下位２番目の４ビットバレルシフタのゼロマスクに着目すると、シフト量の下位３〜２ビット目(sw[3:2])が０１以下の場合に全ビット１(ONE)を選択し、sw[3:2]が１０の場合には右ゼロマスク(RZM)を選択し、sw[3:2]が１１の場合には全ビット０(ZERO)を選択する。
【０１２１】
図２４の下位１番目の４ビットバレルシフタのゼロマスクに着目すると、シフト量の下位３〜２ビット目(sw[3:2])が００の場合に全ビット1(ONE)を選択し、sw[3:2]が０１の場合には右ゼロマスク(RZM)を選択し、sw[3:2]が１０以上の場合には全ビット０(ZERO)を選択する。
【０１２２】
図２４の下位０番目（一番右側）の４ビットバレルシフタのゼロマスクに着目すると、シフト量の下位３〜２ビット目(sw[3:2])が００の場合に右ゼロマスク(RZM)を選択し、sw[3:2]が０１以上の場合には全ビット０(ZERO)を選択する。
【０１２３】
以上をまとめると、下位Ｂ(M＞B≧0)番目の４ビットバレルシフタのゼロマスクは、シフト量の下位３〜２ビット目とＢとの大小関係に基づき、全ビット１(ONE)、全ビット０(ZERO)、右ゼロマスク(RZM)を選択していることが分かる。
一般化すると、swP(P＞swP≧0)ビット右論理シフトを実行する際に、下位Ｂ(M＞B≧0)番目のＮビットバレルシフタのゼロマスタが(N×B)＞swPである場合には全ビット１(ONE)となるようにバレルシフタのゼロマスク制御部８００へのローテート制御信号(sel_rot)を１とし、(N×(B+1))＞swP≧(N×B)である場合には右ゼロマスク(RZM)となるようにバレルシフタのゼロマスク制御部８００へのローテート制御信号(sel_rot)を０とし、シフト量制御信号(sel_sw)を０とし、シフト方向制御信号(sel_lr)を０とし、左シフト制御信号(sel_lzm)を０とし、swP≧(N×(B-1))である場合には全ビット０(ZERO)となるようにバレルシフタのゼロマスタ制御部８００へのローテート制御信号(sel_rot)を０とし、シフト量制御信号(sel_sw)を１とし、シフト方向制御信号(sel_lr)を１とし、左シフト制御信号(sel_lzm)と１とするように、ゼロマスク制御部７０４を構成すればよい。
【０１２４】
上記機能を実現する回路の構成を図２５に示す。図２５に示すのは、Ｍ個のＮビットバレルシフタのうちの下位Ｂ（M＞B≧0）番目のＮビットバレルシフタのゼロマスク制御部８００を制御する回路であり、図２３で示した左論理シフト用の制御回路を右論理シフトにも利用できるように拡張している。なお、ゼロマスク拡張部７０４は、Ｍ個のＮビットバレルシフタのゼロマスク制御部を制御するため、図２５の回路をＭセット持つ構成となる。
【０１２５】
以上のように、Ｎビットバレルシフタのゼロマスク制御部を図２１のように拡張し、ゼロマスク制御部を制御する図２５に示すようなゼロマスク拡張部７０４を用いることにより、図２に示したＰビットバレルシフタでの論理シフト時のゼロマスク処理を行うためのゼロマスク制御部３０４及びＰ個のＡＮＤ回路３０５とを削減できる。
【０１２６】
一方で、図１６におけるシフト量制御部７０３は、図２におけるシフト量制御部３０３と同様に、Ｍ個のＮビットバレルシフタのゼロマスク制御部の一つを図１２のように拡張し、ゼロマスク制御部が生成したゼロマスク(ZM)を用いて図１６におけるＰ個のMto1セレクタ７０２の制御信号の０ビット目として利用している。
【０１２７】
また、図１３に示すように、ゼロマスク制御部が生成した右ゼロマスク(RZM)と左ゼロマスク(LZM)とを用いて、図１６におけるＰ個のMto1セレクタ７０２の制御信号の(H-1)〜１ビット目の生成に利用している。ここで、H=[log2M]とする。
【０１２８】
このため、Ｎビットバレルシフタのゼロマスク制御部の拡張による、Ｐビットバレルシフタでの論理シフト時のゼロマスク処理と、Ｎビットバレルシフタのゼロマスク制御部の一つを用いたＰ個のMto1セレクタの制御信号の生成は、ともにＮビットバレルシフタのゼロマスク制御部の出力であるゼロマスク(ZM)と、左右ゼロマスク(LZM、RZM)を利用するため、単純に組み合わせて実装することはできない。
【０１２９】
そこで、図２２、図２４に示す左・右論理シフト時に利用するゼロマスクの発生パターンに着目し、図２１のゼロマスク制御部８００を以下のように拡張する。
【０１３０】
左論理シフトする際に、図２２における下位３〜１番目の４ビットバレルシフタは、シフト量によっては、全ビット０(ZERO)を論理シフトのゼロマスク(ZM)として選択する場合がある。一方、下位０番目の４ビットバレルシフタは、全ビット０(ZERO)を論理シフトのゼロマスク(ZM)として選択することがない。
【０１３１】
また、下位０番目の４ビットバレルシフタは、シフト量に応じて左ゼロマスク(LZM)又は全ビット１(ONE)をゼロマスク(ZM)として選択するが、全ビット１(ONE)の選択は、図２１のセレクタ８０１で行われるため、シフト量に関わらずセレクタ８０７の出力が左ゼロマスク(LZM)となるように、sel_sw、sel_lzm、sel_lrを０としても構わない。
【０１３２】
そうすることにより、左論理シフト時において、シフト量に関わらず、下位０番目の４ビットバレルシフタの図２１のゼロマスク生成部８０３から、シフト量制御部７０３が所望する左右ゼロマスク(LZM、RZM)を得ることができる。さらには、シフト量に関わらず、図２１のセレクタ８０７から、シフト量制御部７０３が所望する左右ゼロマスク(LZM、RZM)の選択結果を得ることができる。
【０１３３】
これを実現するため、Ｍ個のＮバレルシフタのうちの下位０番目のゼロマスク制御部を、図２６に示すように拡張する。図２６に示すように、シフト量制御部７０３が所望するゼロマスクを生成するために、セレクタ１１００と否定的排他論理和１１０１とを図２１に示したゼロマスク制御部に追加する。また、シフト量に関わらず、シフト量制御部７０３が所望する左右ゼロマスク(LZM、RZM)の選択結果を得るため、図２６のセレクタ１１０２の出力(SWZM)を取り出し、シフト量制御部７０３において図１６におけるＰ個のMto1セレクタ７０２の制御信号の０ビット目の生成に利用する。
ゼロマスク制御部に追加する。
【０１３４】
また、下位０番目のゼロマスク制御部のゼロマスク生成部８０３が生成する左右ゼロマスク(LZM,RZM)を、図１６におけるＰ個のMto1セレクタ７０２の制御信号の(H-1)〜１ビット目の生成に利用している。ここで、H=[log2M]とする。
【０１３５】
右論理シフトする際に、図２４における下位２〜０番目の４ビットバレルシフタは、シフト量によっては、全ビット０(ZERO)を論理シフトのゼロマスク(ZM)として選択する場合がある。一方、下位３番目の４ビットバレルシフタは、全ビット０(ZERO)を論理シフトのゼロマスク(ZM)として選択することがない。
【０１３６】
また、下位３番目の４ビットバレルシフタは、シフト量に応じて、右ゼロマスク(RZM)又は全ビット１(ONE)をゼロマスク(ZM)として選択するが、全ビット１(ONE)の選択は、図１８のセレクタ８０１で行われるため、シフト量に関わらずセレクタ８０７の出力を右ゼロマスク(RZM)となるように、sel_sw、sel_lzm、sel_lrを０としても構わない。
【０１３７】
そうすることにより、右論理シフト時において、シフト量に関わらず、下位０番目の４ビットバレルシフタの図２１のゼロマスク生成部８０３からシフト量制御部７０３が所望する左右ゼロマスク(LZM、RZM)を得ることができる。さらには、シフト量に関わらず、図２１のセレクタ８０７からシフト量制御部７０３が所望する左右ゼロマスク(LZM、RZM)の選択結果を得ることができる。
【０１３８】
上記を実現するため、Ｍ個のＮビットバレルシフタのうちの下位(M-1)番目のゼロマスク制御部を、図２６に示すように拡張する。図２６に示すように、シフト量制御部７０３が所望するゼロマスクを生成するために、セレクタ１１００と否定的排他論理和１１０１とを、図２１に示したゼロマスク制御部に追加する。また、シフト量に関わらず、シフト量制御部７０３が所望する左右ゼロマスク(LZM、RZM)の選択結果を得るため、図２６のセレクタ１１０２の出力(SWZM)を取り出し、シフト量制御部７０３において図１６におけるＰ個のMto1セレクタ７０２の制御信号の０ビット目の生成に利用する。
【０１３９】
また、下位(M-1)番目のゼロマスク制御部のゼロマスク生成部８０３が生成する左右ゼロマスク(LZM、RZM)を、図１６におけるＰ個のMto1セレクタ７０２の制御信号(H-1)〜１ビット目の生成に利用している。ここで、H=[log2M]とする。
【０１４０】
このように、左論理シフトする場合と右論理シフトする場合とでは、図１６のＰ個のMto1セレクタ７０２の制御信号を生成するシフト量制御部７０３で利用可能なゼロマスク(ZM)と左右ゼロマスク(LZM、RZM)を生成するＮビットバレルシフタが異なる。左論理シフト時には下位０番目のＮビットバレルシフタ、右論理シフト時には下位(M-1)番目のＮビットバレルシフタである。
【０１４１】
このため、Ｐビットバレルシフタのシフト方向(lrP)に応じて、下位(M-1)番目のＮビットバレルシフタのゼロマスク制御部が生成するシフトゼロマスク(SWZM)、左右ゼロマスク(LZM、RZM)とを選択するセレクタを、ゼロマスク制御部７０３に追加する。これにより、論理シフト時であっても、シフト量制御部に所望のシフトゼロマスク(SWZM)を提供できる。
【０１４２】
このように、Ｍ個のＮビットバレルシフタの論理シフト用のＮビットゼロマスクを生成するゼロマスク制御部に、Ｐビットバレルシフタのシフト幅に応じて、各Ｎビットゼロマスクが、左・右ゼロマスク、全Ｎビット０又は全Ｎビット１となるように、各Ｍ個のゼロマスク制御部を拡張し、ゼロマスク制御部を制御するゼロマスク拡張部を設けることにより、Ｐビットバレルシフタ用にＰビットのゼロマスクを生成するゼロマスク制御部とＰビットのＡＮＤ回路とを削減できる。
【０１４３】
なお、上記各実施形態は本発明の好適の一例であり、本発明はこれらに限定されることなく様々な変形が可能である。
【図面の簡単な説明】
【０１４４】
【図１】本発明に係るＰビットバレルシフタの構成を示す図である。
【図２】本発明を好適に実施した第１の実施形態に係るＰビットバレルシフタの構成を示すである。
【図３】Ｎビットバレルシフタの構成を示す図である。
【図４】Ｎビットバレルシフタのゼロマスク制御部の構成を示す図である。
【図５】２個の４ビットバレルシフタを組み合わせ、左ローテート（シフト）時に利用するセレクト信号を示す図である。
【図６】８個の４ビットバレルシフタを組み合わせ、左ローテート（シフト）させた際の4to1セレクタの制御信号を示す図である。
【図７】４ビットバレルシフタで左ローテート（シフト）時に生成される左右ゼロマスクを示す図である。
【図８】第１の実施形態に係るＰビットバレルシフタ（左ローテート（シフト）のみを実行）に適用されるＮビットバレルシフタのゼロマスク制御部の構成を示す図である。
【図９】第１の実施形態に係るＰビットバレルシフタ（左ローテート（シフト）のみを実行）に適用されるシフト量制御部の構成を示す図である。
【図１０】８個の４ビットバレルシフタを組み合わせ、右ローテート（シフト）させた際の4to1セレクタの制御信号を示す図である。
【図１１】４ビットバレルシフタで右ローテート（シフト）時に生成される左右ゼロマスクを示す図である。
【図１２】第１の実施形態に係るＰビットバレルシフタ（左右ローテート（シフト）を実行）に適用されるＮビットバレルシフタのゼロマスク制御部の構成を示す図である。
【図１３】第１の実施形態に係るＰビットバレルシフタ（左右ローテート（シフト）を実行）に適用されるシフト量制御部の構成を示す図である。
【図１４】第１の実施形態に係るＰビットバレルシフタに適用されるゼロマスク制御部の構成を示す図である。
【図１５】第１の実施形態に係るＰビットバレルシフタに適用されるゼロマスク生成部の構成を示す図である。
【図１６】本発明を好適に実施した第２の実施形態に係るＰビットバレルシフタの構成を示す図である。
【図１７】２個の４ビットバレルシフタを単純に組み合わせて左論理シフトさせた結果を示す図である。
【図１８】２個の４ビットバレルシフタを単純に組み合わせて右論理シフトさせた結果を示す図である。
【図１９】第２の実施形態に係るＰビットバレルシフタが備える２個の４ビットバレルシフタの左論理シフト結果を示す図である。
【図２０】第２の実施形態に係るＰビットバレルシフタが備える２個の４ビットバレルシフタの右論理シフト結果を示す図である。
【図２１】第２の実施形態に係るＰビットバレルシフタに適用されるＮビットバレルシフタのゼロマスク制御部の構成を示す図である。
【図２２】４個の４ビットバレルシフタを組み合わせて左論理シフトさせた結果を示す図である。
【図２３】第２の実施形態に係るＰビットバレルシフタ（左論理シフトのみを実行）に適用されるゼロマスク拡張部の構成を示す図である。
【図２４】４個の４ビットバレルシフタを組み合わせて右論理シフトさせた結果を示す図である。
【図２５】第２の実施形態に係るＰビットバレルシフタ（左右論理シフトを実行）に適用されるゼロマスク拡張部の構成を示す図である。
【図２６】第２の実施形態に係るＰビットバレルシフタに適用されるＮビットバレルシフタのゼロマスク制御部の構成を示す図である。
【図２７】４ビットバレルシフタの構成を示す図である。
【図２８】４ビットバレルシフタのシフト量制御部の構成を示す図である。
【図２９】４ビットバレルシフタのゼロマスク制御部の構成を示す図である。
【図３０】二つの４ビットバレルシフタを組み合わせた８ビットバレルシフタの構成を示す図である。
【符号の説明】
【０１４５】
１、３０１、７０１    Ｎビットバレルシフタ
２、３０２、７０２    Mto1セレクタ
３、１０３、２０５、３０３、７０３、３０１１    シフト量制御部
１０、３００、７００    Ｐビットバレルシフタ
１００、２０１、２０２    ４ビットバレルシフタ
１０１、１０２、３０１０    2to1セレクタ
１０４、２０６、３０４、８００、８０３、３０１２    ゼロマスク制御部
１０５、６００、３０１４    ゼロマスク生成部
１０６、４００、５００、６０１、８０７、３０１５    左右ゼロマスクセレクタ
１０７、４０１、５０１、６０２、８０１、３０１６    ワンマスクセレクタ
１０８、２０７、３０５、３０１３    ＡＮＤ回路
２００    ８ビットバレルシフタ
２０３、２０４、４０２、５０２、６０４、８０２、８０４、８０５、８０６、８０８、９０２、９０３、１０００、１００１、１１００、１１０１、１１０２    セレクタ
４０３、５０４    Ｔビット入力のＡＮＤ素子
４０４、５０５    4to1セレクタ
５０３    否定的排他論理和
６０３、９００、９０１    減算器
６０５    デコーダ
６０６    ＮＯＴ回路
７０４    ゼロマスク拡張部
【図１】
2010140192.tif 000003
【図２】
2010140192.tif 000004
【図３】
2010140192.tif 000005
【図４】
2010140192.tif 000006
【図５】
2010140192.tif 000007
【図６】
2010140192.tif 000008
【図７】
2010140192.tif 000009
【図８】
2010140192.tif 000010
【図９】
2010140192.tif 000011
【図１０】
2010140192.tif 000012
【図１１】
2010140192.tif 000013
【図１２】
2010140192.tif 000014
【図１３】
2010140192.tif 000015
【図１４】
2010140192.tif 000016
【図１５】
2010140192.tif 000017
【図１６】
2010140192.tif 000018
【図１７】
2010140192.tif 000019
【図１８】
2010140192.tif 000020
【図１９】
2010140192.tif 000021
【図２０】
2010140192.tif 000022
【図２１】
2010140192.tif 000023
【図２２】
2010140192.tif 000024
【図２３】
2010140192.tif 000025
【図２４】
2010140192.tif 000026
【図２５】
2010140192.tif 000027
【図２６】
2010140192.tif 000028
【図２７】
2010140192.tif 000029
【図２８】
2010140192.tif 000030
【図２９】
2010140192.tif 000031
【図３０】
2010140192.tif 000032