バレルシフタとは
バレルシフタは、デジタル回路における重要な構成要素であり、
ワードデータ(一連の
ビット)を特定
ビット数だけシフトさせる機能を持つ回路です。このシフト操作は、データの回転や位置調整に利用され、特に高速なデータ処理が求められる場面で重宝されます。
実装方法
バレルシフタは、複数の
マルチプレクサを組み合わせることで実装されます。基本的な構成は、2入力1出力の
マルチプレクサを段階的に接続し、各段の
マルチプレクサがシフト量に応じて入力を選択する仕組みです。具体的には、n
ビットの
ワードをシフトさせるには、およそn log2(n) 個の
マルチプレクサが必要となります。
以下に、一般的な
ワードサイズと必要な
マルチプレクサ数の例を示します。
64
ビット: 64 log2(64) = 64 6 = 384個
32
ビット: 32 log2(32) = 32 5 = 160個
16
ビット: 16 log2(16) = 16 4 = 64個
8
ビット: 8 log2(8) = 8 3 = 24個
動作原理
例えば、4
ビットのバレルシフタを考えます。入力がA, B, C, D の場合、このバレルシフタはABCDの順で
ビットを回転させるようにシフトできます。つまり、右に3
ビットシフトすると、DABCとなり、すべての
ビットを循環させることが可能です。
バレルシフタは、2x1
マルチプレクサをカスケード接続することで実現できます。例えば、シフト量が2
ビットである場合、S[1]の値が1であれば、2
ビットシフトされたデータを出力し、0であればそのままのデータを出力します。そして、この出力はS[0]の値によって、さらに1
ビットシフトされるか、そのまま出力されます。
具体例として、以下の動作が挙げられます。
im = IN (if S[1] == 0)
im = IN << 2 (if S[1] == 1)
OUT = im (if S[0] == 0)
* OUT = im << 1 (if S[0] == 1)
より大きなバレルシフタでは、上記のようなステージが追加されます。
応用分野
バレルシフタは、
マイクロプロセッサのALU(算術論理演算装置)において、シフト演算を高速に行うために不可欠な部品です。また、浮動小数点数の演算ハードウェアにも広く利用されています。浮動小数点数の加減算では、仮数部を正規化する必要があります。この正規化の際、小さい方の数を大きい方の数の指数部に合わせるために、仮数部を右シフトする操作が必要になります。バレルシフタを使用すれば、このシフト操作を1クロックサイクルで完了させることが可能となり、高速な演算処理に貢献します。
単純なシフタの場合、n
ビットシフトするのにnクロックサイクルが必要ですが、バレルシフタならば、どのようなシフト量でも1サイクルで処理できるため、計算速度の向上に大きく貢献します。
まとめ
バレルシフタは、デジタル回路において高速なデータシフトを可能にする重要な回路です。その効率的な構造と幅広い応用性から、様々な電子機器やコンピュータシステムで欠かせない要素となっています。特に、
マイクロプロセッサの性能向上において、バレルシフタの役割は非常に大きいといえるでしょう。
参考文献
本記事は、2008年11月1日以前にFree On-line Dictionary of Computingから取得した項目を元に、GFDL バージョン1.3以降の「RELICENSING」(再ライセンス) 条件に基づいて組み込まれています。