next up previous contents index
Next: 算術論理回路ALU Up: データ処理部 Previous: 制御線   Contents   Index

シフタ

シフタは乗除算や論理演算などでしばしば使われる。 シフトには,シフトして空いたところへ何を埋めるかによって, いくつかの種類がある。 空いたところへ0を埋める場合もあれば, 回転シフトと言って,溢れたビットを,逆から埋めていく場合もある。 こうしたことを考慮し,本書に紹介するシフタは, 基本的にはAバスの内容をシフトするが, 下からBバスの内容を埋めていくものとする。 つまり,AバスとBバスを繋いでシフトするのがよい。 もう少し正確に言うと,AバスとBバスの内容を並べて2wordとし, その任意の位置から1wordを切り出して,出力する機能を有するようにする。 Bバスに0を入れておけば,シフトの結果空いたところには0がつまり, BバスにAバスと同じ内容を入れておけば,回転シフトとなる。

Figure 9.4: シフタ(見やすいように制御用関連の配線は破線で示した)
\begin{figure}\centering
%
\unitlength 1pt
\begin{picture}(276,217)
\put(0,0){\...
...,23.0){\makebox(0,0)[lb]{{\footnotesize\rm$ShL_0$}}}
\end{picture}
\end{figure}

こうしたことを考慮し, 図 9.4のようなシフタ(shifter)が完成する。 なお,16bitバスでは図が大き過ぎるので,4bitバスを仮定した。 実際,$ShL_0$$ShL_1$$ShL_2$$ShL_3$(ShLはShiftLeftの意味)を順に1にすると, $(Out_3, Out_2, Out_1, Out_0)$ $(A_3, A_2, A_1, A_0)$ $(A_2, A_1, A_0, B_3)$ $(A_1, A_0, B_3, B_2)$ $(A_0, B_3, B_2, B_1)$と変化していく。

なお,乗除算では1bitのシフトしかないが,シフト溢れを利用することがある。 これは実は,シフト前のMSBまたはLSBであるので,簡単な作業で取り出すことができ, $S_{out}$という形で記憶しておく。


next up previous contents index
Next: 算術論理回路ALU Up: データ処理部 Previous: 制御線   Contents   Index
Yoichi OKABE 2008-03-29