2014-11-27 2 views
0

Я пытаюсь написать код VHDL я это дает мне больше пытаюсь написать код для последовательного с 5 состояний (S0, S1, S2, S3, S4)Xillinx VHDL код ошибки

library IEEE; 
use IEEE.STD_LOGIC_1164.ALL; 

entity Seqq is 
PORT (seq , clk , reset : IN std_logic; 
     output : OUT std_logic; 
     leds : OUT std_logic_vector(2 downto 0)); 
end Seqq; 


architecture Behavioral of Seqq is 
type states IS (S0 , S1 , S2 , S3 , S4); 
signal nxt , prst : states ; 
begin 
FB:PROCESS(reset, clk) 
begin 
if Rising_edge(clk) then 
if reset = '1' then prst <='0'; 

else prst <= nxt ; 
end if ; 
end if ; 
end process FB;comb:PROCESS(prst) 
begin 
case prst IS 
when S0 => 
If seq = '0' then nxt <= S0; 
elsif seq = '1' then nxt <= S1; 
end if ; 
leds <= "000"; 
output <= '0'; 

when S1 => 
If seq = '0' then nxt <= S2; 
elsif seq = '1' then nxt <= S1; 
end if ; 
leds <= "001"; 
output <= '0'; 

when S2 => 
If seq = '0' then nxt <= S2; 
elsif seq = '1' then nxt <= S1; 
end if ; 
leds <= "010"; 
output <= '0'; 

when S3 => 
If seq = '0' then nxt <= S0; 
elsif seq = '1' then nxt <= S4; 
end if ; 
leds <= "011"; 
output <= '0'; 

when S4 => 
If seq = '0' then nxt <= S0; 
output <= '1'; 
elsif seq = '1' then nxt <= S1; 
end if ; 
leds <= "100"; 
output <= '0'; 
end case ; 
end process comb; 


end Behavioral; 

и я получаю ошибку

Type of prst is incompatible with type of '0'. 

что мне делать?

ответ

2

В этой строке

if reset = '1' then prst <='0'; 

вы присваиваете '0' к PRST. Если вы посмотрите на свое сообщение об ошибке prst is incompatible with type of '0', вы увидите, что типы не совпадают.

Изучив ваш тип prst, вы увидите, что он имеет тип states, перечисление от S0 до S4. '0' однако имеет тип std_logic или bit, который не конвертируется в state.

Итак, что вы хотите Propably (если это еще нормально с вашей логикой), чтобы изменить назначение prst в S0 вместо:

if reset = '1' then prst <= S0; 
Смежные вопросы