Простейший сдвиговый регистр на VHDL

Довльно нужная вещь этот ваш сдвиговый регистр

Напишем простейший вариант реализации на VHDL. Из входов у нас будет: тактирование (С, он же CLK), вход данных (serial input) и выход (serial output).

Принципиальных ограничений на разрядность нет, но мы сегодня будем стереотипными пацанами 😉 сделаем 8-ми битный регистр.

Сдвиговый регистр

Будем использовать тип std_logic. Для чего будем использовать библиотеки:

library ieee;

use ieee.std_logic_1164.all;

Секция entity нашего сдвигового регистра выглядит вот так:

entity shift is
    port(C, SI : in std_logic;
         SO : out std_logic);
end shift;

Тут мы просто описали нужные входы и выходы.

Архитектура ничего крутого тоже не представляет. Тут мы просто создаем внутренний сигнал tmp разрядностью 8 бит, в который собственно и будем вносить данные и сдвигать. Сдвигаем просто проходом цикла, а затем вносим в tmp(0) входящий сигнал SI, а из tmp(7) данные выводим на выход SO.

architecture archi of shift is
    signal tmp: std_logic_vector(7 downto 0);
begin
    process (C)
        begin
            if (C'event and C='1') then
                for i in 0 to 6 loop
                    tmp(i+1) <= tmp(i);
                end loop;
                tmp(0) <= SI;
            end if;
    end process;
    SO <= tmp(7);
end archi;

Таким образом мы получаем весьма абстрактный регистр, который первые 1 Байт данных будет выводить неопределённое состояние на выход.

Как видно из временной диаграммы, всё получилось 😉 Сдвиговый регистр действует.

 

Похожий код:

Фото аватара
Алексей Петров

Программист, разработчик с 5 летним опытом работы. Учусь на разработчика игр на Unity и разработчика VR&AR реальности (виртуальной реальности). Основные языки программирования: C#, C++.

Оцените автора
Бла, бла код
Добавить комментарий