реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Написание программы VHDL, для управления светофорами
Fa3a-Ravil
сообщение May 28 2018, 08:03
Сообщение #1





Группа: Новичок
Сообщений: 1
Регистрация: 12-04-18
Пользователь №: 103 163



Здравствуйте!
Мне нужна помощь в написании программы для управления светофорным контроллером, при помощи датчиков движения.
В общем я уже попытался написать нечто похожее, но плохое знание языка приводит к большому количеству ошибок в коде.

CODE
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity det is
port (
vhodA : in std_logic;
vhodB : in std_logic;
VhodC : in std_logic;
VhodD : in std_logic; -- 4 сигнала с датчиков
Error : in std_logic; -- и сигнал ошибки датчиков
svetA, svetB, svetC, svetD : in std_logic; -- сигналы обратной связи светофоров
ErrOut : out std_logic; -- выходной сигнал аварийного отключения
A, B, C, D : out std_logic -- 4 сигнала управления контроллером всетофоров
);
end det;

architecture beh of det is
begin
process
begin
if (vhodA = '1') and (svetA = '0') then -- проверка на наличие сигнала с датчика и запрещающего сигнала светофора
A <= '1'; -- включение соответствующего вывода
wait on svetA'event until (svetA = '1'); -- ожидание изменения сигнала
A <= '0'; -- сброс сигнала
elsif (vhodB = '1') and (svetB = '0') then -- далее последовательный опрос других датчиков
B <= '1';
wait on svetB until (svetB = '1');
B <= '0';
elsif (vhodC = '1') and (svetC = '0') then
C <= '1';
wait on svetC until (svetC = '1');
C <= '0';
elsif (vhodD = '1') and (svetD = '0') then
D <= '1';
wait on svetC until (svetC = '1');
D <= '0';
end if;
end process;
end beh;


В данном варианте выходит ошибка "statement WAIT not allowed in a process with a sensitivity list" тогда как задать задержку на исполнение процедуры?
Заранее благодарю за любую помощь!
Go to the top of the page
 
+Quote Post
iosifk
сообщение May 28 2018, 08:06
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 3 916
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(Fa3a-Ravil @ May 28 2018, 11:03) *
Мне нужна помощь

Напишите мне на почту или в скайп...
Мой адрес - в личной карточке форума.


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение May 28 2018, 08:17
Сообщение #3


В поисках себя...
****

Группа: Свой
Сообщений: 642
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140



Цитата(Fa3a-Ravil @ May 28 2018, 11:03) *
Здравствуйте!
Мне нужна помощь в написании программы для управления светофорным контроллером, при помощи датчиков движения.
В общем я уже попытался написать нечто похожее, но плохое знание языка приводит к большому количеству ошибок в коде.

CODE
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity det is
port (
vhodA : in std_logic;
vhodB : in std_logic;
VhodC : in std_logic;
VhodD : in std_logic; -- 4 сигнала с датчиков
Error : in std_logic; -- и сигнал ошибки датчиков
svetA, svetB, svetC, svetD : in std_logic; -- сигналы обратной связи светофоров
ErrOut : out std_logic; -- выходной сигнал аварийного отключения
A, B, C, D : out std_logic -- 4 сигнала управления контроллером всетофоров
);
end det;

architecture beh of det is
begin
process
begin
if (vhodA = '1') and (svetA = '0') then -- проверка на наличие сигнала с датчика и запрещающего сигнала светофора
A <= '1'; -- включение соответствующего вывода
wait on svetA'event until (svetA = '1'); -- ожидание изменения сигнала
A <= '0'; -- сброс сигнала
elsif (vhodB = '1') and (svetB = '0') then -- далее последовательный опрос других датчиков
B <= '1';
wait on svetB until (svetB = '1');
B <= '0';
elsif (vhodC = '1') and (svetC = '0') then
C <= '1';
wait on svetC until (svetC = '1');
C <= '0';
elsif (vhodD = '1') and (svetD = '0') then
D <= '1';
wait on svetC until (svetC = '1');
D <= '0';
end if;
end process;
end beh;


В данном варианте выходит ошибка "statement WAIT not allowed in a process with a sensitivity list" тогда как задать задержку на исполнение процедуры?
Заранее благодарю за любую помощь!

Слышали про выражение : "Без внятного ТЗ - результат ХЗ" ?
1. На VHDL описывается схема, а не программа.
2. Если у Вас плохое знание языка VHDL, то что Вы хотите получить в итоге ? Если научиться - то это одно. Если сделать и забыть, то Вы ошиблись темой.
3. Где список чувствительности в процессе ?
4. Так не делают.
P.S. Начните сначала с правильной постановки вопроса.
P.S.S Если действительно хотите научиться, не пренебрегайте помощью уважаемого iosifk
Go to the top of the page
 
+Quote Post
syoma
сообщение May 29 2018, 07:59
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 779
Регистрация: 14-02-07
Из: наших, которые работают за бугром
Пользователь №: 25 368



Если знания VHDL хромают, то самый простой способ - сделать и отладить автомат состояний в Matlab/Stateflow(точнее, вот вам уже готовая модель, и еще, и еще, которую нужно только модифицировать под ваши датчики движения), а затем одним кликом сгенерировать HDL код с помошью HDC Coderа, который будет делать в точности то же, что и модель и будет без ошибок. Потратите в 10 раз меньше времени на разработку и отладку, так как все сможете отладить на модели, а в FPGA будете заливать уже рабочую прошивку.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 17th June 2018 - 23:25
Рейтинг@Mail.ru


Страница сгенерированна за 0.01233 секунд с 7
ELECTRONIX ©2004-2016