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

Profile picture for user lamazavr
Опубликовано lamazavr - сб, 06/15/2013 - 11:41
Body

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

Напишем простейший вариант реализации на 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 Байт данных будет выводить неопределённое состояние на выход.

Временная диаграмма работы сдвигового регистра

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

Категория

Добавить комментарий

Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.