2 Computational Units
2 – 22
2.4
BARREL SHIFTER
The shifter provides a complete set of shifting functions for 16-bit inputs,
yielding a 32-bit output. These include arithmetic shift, logical shift and
normalization. The shifter also performs derivation of exponent and
derivation of common exponent for an entire block of numbers. These
basic functions can be combined to efficiently implement any degree of
numerical format control, including full floating-point representation.
2.4.1
Shifter Block Diagram Discussion
Figure 2.9 shows a block diagram of the shifter. The shifter can be divided
into the following components: the shifter array, the OR/PASS logic, the
exponent detector, and the exponent compare logic.
The shifter array is a 16x32 barrel shifter. It accepts a 16-bit input and can
place it anywhere in the 32-bit output field, from off-scale right to off-scale
left, in a single cycle. This gives 49 possible placements within the 32-bit
field. The placement of the 16 input bits is determined by a control code
(C) and a HI/LO reference signal.
The shifter array and its associated logic are surrounded by a set of
registers. The shifter input (SI) register provides input to the shifter array
and the exponent detector. The SI register is 16 bits wide and is readable
and writable from the DMD bus. The shifter array and the exponent
detector also take as inputs AR, SR or MR via the R bus. The shifter result
(SR) register is 32 bits wide and is divided into two 16-bit sections, SR0
and SR1. The SR0 and SR1 registers can be loaded from the DMD bus and
output to either the DMD bus or the R bus. The SR register is also fed back
to the OR/PASS logic to allow double-precision shift operations.
The SE register (“shifter exponent”) is 8 bits wide and holds the exponent
during the normalize and denormalize operations. The SE register is
loadable and readable from the lower 8 bits of the DMD bus. It is a twos-
complement, 8.0 value.
The SB register (“shifter block”) is important in block floating-point
operations where it holds the block exponent value, that is, the value by
which the block values must be shifted to normalize the largest value. SB
is 5 bits wide and holds the most recent block exponent value. The SB
register is loadable and readable from the lower 5 bits of the DMD bus. It
is a twos-complement, 5.0 value.
Whenever the SE or SB registers are output onto the DMD bus, they are
sign-extended to form a 16-bit value.