Сдвиговый регистр представляет собой разновидность регистра, для которого по фронту тактового сигнала происходит сдвиг содержимого на один или несколько разрядов в какую-либо сторону.

Сдвиговый регистр можно представить следующим текстом.

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

 

entityshift_reg is

    Port ( clk : in  STD_LOGIC;

din : in  STD_LOGIC;

dout : out  STD_LOGIC);

endshift_reg;

 

architecture Behavioral of shift_reg is

 

signalsr : std_logic_vector(7 downto 0) := x”00”;

 

begin

 

process(clk)

begin

ifrising_edge(clk) then

sr<= sr(6 downto 0) & din;

dout<= sr(7);

end if;

end process;

 

end Behavioral;

 

В примере производится сдвиг содержимого внутреннего регистра data на один разряд влево. В младший разряд при этом помещается значение, подающееся на вход d_in, а старший разряд теряется. Работа сдвигового регистра управляется входом ce, низкий уровень на котором запрещает сдвиг.

Выход сдвигового регистра q является копией внутреннего сигнала data (в отличие от примера на VHDL значение выходного сигнала устанавливается асинхронно, т.е. появляется на такт раньше) Такое решение выбрано потому, что в строке data<= {data[15:1], d_in} производится как запись, так и чтение переменной data. Таким образом, эта переменная не может быть портом типа output, так как для такого порта допустима только операция записи.

Регистр, сдвигающий свое содержимое на регулируемое число разрядов, называется регистром (устройством) барабанного сдвига (barrelshifter). Это более сложное для реализации устройство, чем обычный сдвиговый регистр, поскольку требует дополнительного мультиплексора, из-за чего занимаемый в ПЛИС объем существенно возрастает. Регистр барабанного сдвига применяется, например, для сложения и вычитания чисел с плавающей точкой, где он производит нормализацию мантисс – сдвиг одной из мантисс на число разрядов, равное разнице двоичных порядков складываемых чисел. Поскольку для операций с плавающей точкой желательна высокая производительность, а обычный сдвиговый регистр может потребовать от 1 до N тактов для нормализации (где N – число двоичных разрядов мантиссы, которое для чисел двойной точности равно 53), применение устройства барабанного сдвига для этой цели является оправданным. Пример описания устройства барабанного сдвига показан ниже:

withselselect

q<= dwhen “00”,

       dshl 1 when “01”,

       dshl 2 when “10”,

       dshl 3 whenothers;

 

Приведенный пример может быть дополнен регистром, поскольку в описании показан только асинхронный мультиплексор, сдвигающий входной сигнал d на 0, 1, 2 или 3 разряда.

 = Перейти к содержанию =