Bonjour,
j'essaye d'implementer une machine à états en VHDL : voici ça description ainsi qu'un diagramme en pièce jointe:
--raz_n: rest actif à 0 => initialise le circuit
--continu : si=0 mode monocoup, si=1 mode continu
-- en mode continu la donnée est rafraîchie toute les secondes
--start_stop: en monocoup si=1 démarre une acquisition, si =0
-- remet à 0 le signal data_valid
ce qui ce passe quand je met le code sur la carte est:Code:library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; use ieee.numeric_std.all; entity state_machine is port( continu, start_stop, raz_n: in std_logic; data_valid : out std_logic; nbr_front : in std_logic_vector(7 downto 0); Data_anemometre : out std_logic_vector(7 downto 0) ); end state_machine; architecture arch of state_machine is TYPE State_type IS (init, cont, mono,acq); SIGNAL State : State_Type; signal temp1: std_logic; signal temp2 : std_logic_vector(7 downto 0); begin process(raz_n, continu, start_stop) begin if (raz_n='0') then temp1 <='0'; temp2 <=(others=> '0'); state <=init; else case state is when init => if (continu='1') then state <= cont; else state <= mono; end if; when cont => if (continu='0') then state <= mono; end if; temp1 <= '1'; temp2 <= nbr_front; when mono => if (continu='1') then state <= cont; elsif(start_stop= '1')then state <= acq; end if; temp2 <=(others=> '0'); temp1 <= '0'; when acq => if (start_stop= '0')then state <= mono; end if; temp1 <= '1'; temp2 <= nbr_front; -- when others => -- state <= init; end case; end if; end process; Data_anemometre <= temp2; data_valid <= temp1; end arch;
la donnée ne se rafraishit pas toute les secondes
en passant de mode continu vers monocoup, l'appuye sur le boutton start_stop ne fait rien, il faut chaque fois changer l'état de l'interrupteur raz_n.
qu'est ce que je peux modifier pour que mon code fonctionne.
merci
-----