Я новичок с VHDL.Я создал автомат распознавания (Мур) последовательности 000010 для доступа к лифту.После распознавания всей последовательности в состоянии X1 двери лифта открываются и загораются два светодиода, двери закрываются через 5 секунд в X2 и в X3, а через 10 секунд лифт достигает нужного этажа.Имитируя все с помощью Modelsim, ошибок нет.
Моя проблема в том, что я хочу сбросить все переменные (а затем вернуться в исходное состояние X0) в случае, например, если вы находитесь в каком-либо состоянии.Например, в X1 переменные «esito», led1 и led2 должны возвращаться к 0.
Так как невозможно сбросить эти переменные в первом процессе (где есть условие сброса = 1), потому чтоУ меня будет ошибка «Не удается разрешить несколько постоянных драйверов для сети» (в обоих процессах используются одни и те же переменные), я хотел бы спросить вас, было ли правильное решение, принятое мной в следующем коде (сбросьте переменные в X0 раньшеконтроль выполняется на вставленной последовательности).
Надеюсь, я был ясен, и вы можете мне помочь.
Это код:
library IEEE;
use IEEE.std_logic_1164.all;
entity riconoscitore is
port(
simbolo:inout std_logic_vector(5 downto 0);
clock,esito,reset:inout std_logic;
led1,led2:out std_logic
);
end riconoscitore;
architecture myriconosc of riconoscitore is
type state_values is
(X0,X1,X2,X3);
signal current_st,next_st:state_values;
signal timer:std_logic;
begin
process(clock,reset)
begin
if(reset='1') then
current_st<=X0;
elsif(rising_edge(clock))then
current_st<=next_st;
end if;
end process;
process(current_st,simbolo,timer,reset)
begin
next_st<=X0;
case current_st is
when X0 =>
esito<='0';
led1<='0';
led2<='0';
reset<='0';
timer<='0';
simbolo<=('U','U','U','U','U','U');
if(simbolo="000010")then
next_st<=X1;
else
next_st<=X0;
end if;
when X1 =>
esito<='1';
led1<='1';
led2<='1';
timer<= transport '1' after 5 sec;
next_st<=X2;
when X2=>
led1<='0';
if(timer='1') then
next_st<=X3;
reset<= transport '1' after 10 sec;
else next_st<=X2;
end if;
when X3=>
if (reset='1') then
next_st<=X0;
esito<='U';
reset<='U';
timer<='U';
simbolo<=('U','U','U','U','U','U');
led2<='0';
else
next_st<=X3;
end if;
end case;
end process;
end myriconosc;