バレルシフタ

バレルシフタ（）は、ある特定のビット数分だけワードデータをシフトできるデジタル回路である。これはマルチプレクサを並べたものとして実装できる。この実装では一つのマルチプレクサの出力はシフト距離に依存するウェイ数分離れた段のマルチプレクサの入力に接続されている。必要なマルチプレクサの数はnビットワードに対しては、n*log2(n)である。よくある４つのワードサイズとそれに必要なマルチプレクサの数を以下に示す。

 64-bit — 
 32-bit — 
 16-bit — 
 8-bit — 

例えば、4入力A、B、C、Dを持つ4ビットのバレルシフタは、ABCDの順にビットを回転させることができる。つまり、3つのビット位置をすべて右にシフトすることができる(したがってA、B、C、Dのいずれも循環させることができる)。バレルシフタは(ALUと並んで)マイクロプロセッサ内の非常に重要なパーツに含まれ、様々な分野に応用されている。

実装
しばしばバレルシフタは並列に並べた2x1マルチプレクサをカスケード接続することで実装されている。中間の信号は、2ビットシフトするか同じデータを出力するか、S[1]の値によってどちらかを選択するかに使われる。この信号はS[0]によって制御される別のマルチプレクサによってシフトされる。

  im  = IN, if S[1] == 0
      = IN << 2, if S[1] == 1

  OUT = im, if S[0] == 0
      = im << 1, if S[0] == 1

より大きなバレルシフタは追加のステージを持っている。

使用法
バレルシフタは浮動小数点ハードウェアに使われている。浮動小数点の加減算では、数の仮数部は必ず正規化されていなければならず、大きい方の数の指数部に合うまで小さい方の数を右シフトしてその数の指数部を増やさないといけない。これにより指数部の引き算が行われ、１サイクルで、仮数部の差を計算するためにバレルシフタを使って小さい方の数を右シフトする。もし単純なシフタが使われたならば、nビットシフトするのにnクロック必要になる。

参考文献 

デジタル回路
コンピュータの算術