Barrel shifter (устройство быстрого сдвига) — цифровая электронная схема, производящая сдвиг данных на указанное число позиций за один такт синхронизации. Устройство быстрого сдвига также может производить циклический сдвиг и расширение знакового бита.
На вход устройства подаётся две группы входных данных по N бит каждая и N управляющих сигналов, на выходе получается N бит данных. Количество разрядов, на которые производится сдвиг, определяется позицией управляющего сигнала высокого уровня (все остальные управляющие сигналы должны иметь низкий уровень), выполняемая операция определяется подачей входных данных. Например:
- при подаче данных на «вход 1» и нулей на «вход 0» будет произведён правый сдвиг;
- при подаче данных на оба входа будет произведён циклический сдвиг.
Устройство быстрого сдвига применяется в целочисленных арифметических операциях (где сдвиг на один разряд эквивалентен умножению или делению на два) и в операциях над числами с плавающей запятой для выравнивания операндов при выполнении сложения и вычитания. Мантисса числа, имеющего меньший порядок, сдвигается вправо, количество позиций, на которые производится сдвиг, равно разнице порядков чисел. После сдвига порядки чисел становятся равными.
Недостатки (для barrel shift, реализующего циклический сдвиг):
- Входная ёмкость пропорциональна разрядности N.
- Количество транзисторов пропорционально квадрату разрядности N2
- Требуется декодер для формирования управляющих сигналов.
В процессорах x86 применяются, начиная с Intel 80386.
Ресурсоёмкость
Количество мультиплексоров, необходимое для реализации n-битового устройства сдвига, по схеме barrel составляет n log 2 n {displaystyle scriptstyle nlog _{2}n} . Для пяти часто используемых размеров количество мультиплексоров составляет:
- 128-бит — 128 × log 2 ( 128 ) = 128 × 7 = 896 {displaystyle scriptstyle 128 imes log _{2}(128)=128 imes 7=896}
- 64-бит — 64 × log 2 ( 64 ) = 64 × 6 = 384 {displaystyle scriptstyle 64 imes log _{2}(64)=64 imes 6=384}
- 32-бит — 32 × log 2 ( 32 ) = 32 × 5 = 160 {displaystyle scriptstyle 32 imes log _{2}(32)=32 imes 5=160}
- 16-бит — 16 × log 2 ( 16 ) = 16 × 4 = 64 {displaystyle scriptstyle 16 imes log _{2}(16)=16 imes 4=64}
- 8-бит — 8 × log 2 ( 8 ) = 8 × 3 = 24 {displaystyle scriptstyle 8 imes log _{2}(8)=8 imes 3=24}
Стоимость критического пути в единицах Fan-out-of-4 (FO4) оценивается (без учёта задержки в проводниках) как:
- 32-bit: от 18 FO4 до 14 FO4