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

VHDL программа светофор.

Здравствуйте. Дали задание написать программу "светофор" на VHDL. Нашел готовый, соответствующий всем условиям ответ Из книги Digital Systems Design Using VHDL Charles H. Roth, Jr, Lizy Kurian John . Код предоставлен в файле. Результат должен быть следующим. У меня такой результат не получается. Есть ли ошибка в коде программы? Спасибо

 

Untitled.png

 

 

 

 

ПС. с VHDL до сегодняшнего дня дела вообще не имел. home.vhd

home.vhd

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Дали задание написать программу "светофор"

Может поможет:

https://youtu.be/4QYPz04kVJs

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здравствуйте. Дали задание написать программу "светофор" на VHDL. Нашел готовый
"Такой" не получается, а какой же получается???

Крайне не рекомендую изучать VHDL таким способом, лучше самому исходя из задачи, из знаний языка, создать такой модуль самостоятельно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здравствуйте. Дали задание написать программу "светофор" на VHDL.

 

ПС. с VHDL до сегодняшнего дня дела вообще не имел.

 

Могу объяснить, как это надо делать, если у Вас есть скайп+камера+микрофон.. Только завтра буду занят...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Могу объяснить, как это надо делать, если у Вас есть скайп+камера+микрофон.. Только завтра буду занят...

Был бы признателен. Как я могу с Вами связаться?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Был бы признателен. Как я могу с Вами связаться?

Скайп-адрес в личной карточке форума. Почтовый адрес узнаете у меня на сайте...

Личные сообщения форума у меня работают...

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Почитайте для начала немного про цифровые автоматы, которым и является светофор. Информации по ссылке https://habrahabr.ru/post/254885/ вполне хватит, чтобы освоить способ описания цифрового автомата на языке VHDL.

Ещё могу посоветовать посмотреть примеры автоматов, представленных в шаблонах кода, предоставленного средой разработки. Например в Quartus 13.1 шаблон можно вставить следующим образом: Edit --> Insert Template --> VHDL --> Full Designs --> State Machines -->

Но, как Вам уже советовали выше, лучше разберитесь сами ничего сложного нет.

Вот Вам для примера возможный вариант графа переходов состояний автомата светофора.

SVET.png

В принципе у меня есть и готовый вариант описания светофора, с которого я и даю рисунок графа переходов.

Но правильно ли я поступлю если выложу его сюда ?

В качестве разумной альтернативы я выложу сюда вариант простейшего светофора с тремя состояниями: желтый, зелёный, красный. Ни один нормальный преподаватель этот вариант не примет поскольку он примитивен до безобразия. Да и назвать его светофором язык не поворачивается.

Но разобравшись в автоматах, сделать из него нормальный светофор, который не стыдно показать преподавателю займет минут 10-15 времени. Удачи !

Вот выложу дополнительно текст схемы в сообщении. Иначе при загрузке возможно повреждение комментариев.

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;

ENTITY SVET IS 
PORT
    (
        BUTTON            :IN  STD_LOGIC;                     --КНОПКА ПЕРЕКЛЮЧЕНИЯ РЕЖИМА РАБОТЫ СФЕТОФОРА
        CLK              :IN  STD_LOGIC;                        --СИНХРА
        OUTPUT_DATA        :OUT STD_LOGIC_VECTOR (1 DOWNTO 0)    --ВЫХОД СОСТОЯНИЯ СФЕТОФОРА
    );
END ENTITY;
ARCHITECTURE RTL OF SVET IS
    TYPE STATE_TYPE  IS     --СОСТОЯНИЯ СВЕТОФОРА
    (
        GREEN,           
        YELLOW, 
        RED
    );
    SIGNAL NEXT_STATE, PRESS_STATE : STATE_TYPE := YELLOW; --СИГНАЛЫ ГДЕ ХРАНЯТСЯ ДАННЫЕ О СОСТОЯНИИ СВЕТОФОРА
BEGIN
    PROCESS
    (
        PRESS_STATE, 
        BUTTON
    )
    BEGIN
        CASE PRESS_STATE IS
            WHEN RED =>                                            -- ПЕРЕКЛЮЧЕНИЕ С КРАСНОГО 
                                IF  (BUTTON      = '1') THEN    -- КОГДА НАЖИМАЕМ КНОПКУ
                                    NEXT_STATE <= GREEN;        -- НА КРАСНО-ЖЕЛТЫЙ
                                ELSE                               
                                    NEXT_STATE <= RED;          -- Иначе остаёмся в текущем состоянии      
                                END IF;                         
            WHEN GREEN =>                                        -- ПЕРЕКЛЮЧАЕМ С ЗЕЛЕНОГО 
                                IF  (BUTTON      = '1') THEN    -- КОГДА НАЖИМАЕМ КНОПКУ
                                    NEXT_STATE <= YELLOW;        -- НА ЗЕЛЁНЫЙ МИГАЮЩИЙ
                                ELSE                               
                                    NEXT_STATE <= GREEN;        -- Иначе остаёмся в текущем состоянии   
                                END IF;                
            WHEN YELLOW =>                                        -- ПЕРЕКЛЮЧАЕМ С ЖЕЛТОГО
                                IF  (BUTTON      = '1') THEN    -- КОГДА НАЖИМАЕМ КНОПКУ
                                    NEXT_STATE <= RED;            -- НА КРАСНЫЙ
                                ELSE 
                                    NEXT_STATE <= YELLOW;       -- Иначе остаёмся в текущем состоянии 
                                END IF;
        END CASE;        
    END PROCESS;
    PROCESS
    (
        CLK
    )
    BEGIN
        IF (RISING_EDGE(CLK)) THEN
            PRESS_STATE <= NEXT_STATE;                -- С КАЖДЫМ ФРОНТОМ CLK МЕНЯЕМ СОСТОЯНИЕ НА NEXT_STATE
        END IF;
    END PROCESS;
    PROCESS 
    (
        PRESS_STATE
    )
    BEGIN
        CASE PRESS_STATE IS
            WHEN GREEN            => OUTPUT_DATA <= "00";  -- Выдаем хоть что-то на выход
            WHEN YELLOW         => OUTPUT_DATA <= "01";  -- Выдаем хоть что-то на выход
            WHEN RED            => OUTPUT_DATA <= "10";  -- Выдаем хоть что-то на выход
        END CASE;
    END PROCESS;
END ARCHITECTURE;

SVET.vhd

Изменено пользователем Flip-fl0p

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...