(VHDL)错误(10028):无法在riconoscitore.vhd解析网络“current_st.X1”的多个常量驱动程序(163)

时间:2018-04-24 10:19:18

标签: vhdl

我正在尝试在识别序列时实现序列识别器并最终改变状态,但是存在一些错误。 我是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;

0 个答案:

没有答案