我正在尝试在识别序列时实现序列识别器并最终改变状态,但是存在一些错误。 我是vhdl的初学者,所以我希望你能帮助我。
这些是编译时发生的错误: (此错误:“错误(10028):无法解析net的多个常量驱动程序 riconoscitore.vhd(163)的“current_st.X1”“适用于每个州(X1-X17)”
Error (10028): Can't resolve multiple constant drivers for net
"current_st.X0" at riconoscitore.vhd(163)
Error (10029): Constant driver at riconoscitore.vhd(15)
Error (10028): Can't resolve multiple constant drivers for net
"current_st.X1" at riconoscitore.vhd(163)
这是代码:
library IEEE;
use IEEE.std_logic_1164.all;
entity riconoscitore is
port( clock,reset:in std_logic;
simbolo:in std_logic_vector(5 downto 0);
esito:inout std_logic
);
end riconoscitore;
architecture myriconosc of riconoscitore is
type state_values is
(X0,X1,X2,X3,X4,X5,X6,X7,X8,X9,X10,X11,X12,X13,X14,X15,X16,X17,X18,X19);
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)
begin
next_st<=X0;
case current_st is
when X0 =>
if(simbolo="000010")then
next_st<=X1;
else
next_st<=X0;
end if;
when X1 =>
if(simbolo="010001")then
next_st<=X2;
else
next_st<=X0;
end if;
when X2 =>
if(simbolo="010011")then
next_st<=X3;
else
next_st<=X0;
end if;
when X3 =>
if(simbolo="001100")then
next_st<=X4;
else
next_st<=X0;
end if;
when X4 =>
if(simbolo="000111")then
next_st<=X5;
else
next_st<=X0;
end if;
when X5 =>
if(simbolo="001011")then
next_st<=X6;
else
next_st<=X0;
end if;
when X6 =>
if(simbolo="100011")then
next_st<=X7;
else
next_st<=X0;
end if;
when X7 =>
if(simbolo="011110")then
next_st<=X8;
else
next_st<=X0;
end if;
when X8 =>
if(simbolo="000001")then
next_st<=X9;
else
next_st<=X0;
end if;
when X9 =>
if(simbolo="011100")then
next_st<=X10;
else
next_st<=X0;
end if;
when X10 =>
if(simbolo="100001")then
next_st<=X11;
else
next_st<=X0;
end if;
when X11 =>
if(simbolo="001011")then
next_st<=X12;
else
next_st<=X0;
end if;
when X12 =>
if(simbolo="011011")then
next_st<=X13;
else
next_st<=X0;
end if;
when X13 =>
if(simbolo="011010")then
next_st<=X14;
else
next_st<=X0;
end if;
when X14 =>
if(simbolo="100011")then
next_st<=X15;
else
next_st<=X0;
end if;
when X15 =>
if(simbolo="001100")then
next_st<=X16;
else
next_st<=X0;
end if;
when X16 =>
if(simbolo="011100")then
next_st<=X17;
else
next_st<=X0;
end if;
when others=>
next_st<=X0;
end case;
end process;
process(current_st)
begin
case current_st is
when X17=>
esito<='1';
when others=>
esito<='0';
end case;
end process;
process(esito)
begin
if (esito= '1')then
current_st<=X18;
timer<= transport '1' after 500 ps;
else
current_st<=X0;
end if;
end process;
process(timer)
begin
if(timer='1') then
current_st<=X19;
end if;
end process;
end myriconosc;