---------------------------------------------------------------------------- -- horloge fonctionnement clock_fpga=50MHz ---------------------------------------------------------------------------- library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity emission_RS232 is port( clock_fpga : in std_logic; valide_data_envoi: out std_logic; valide_data_recu: out std_logic; envoi_enable :in std_logic; TX : out std_logic; data_envoi : in std_logic_vector(7 downto 0)); end entity emission_RS232; architecture Behavioral of emission_RS232 is ------------------------------------------------------------------------ -- SIGNALS ------------------------------------------------------------------------ signal horloge_envoi : std_logic :='0'; signal mot_complet : std_logic_vector(9 downto 0) :="0000000000"; signal compteur: std_logic_vector(4 downto 0):="00000"; signal compteur_baud: integer:=0; signal horloge_enable : std_logic :='0'; signal data_bis : std_logic_vector(7 downto 0) :="00000000"; begin ---------------------------------------------------------------------------- --reoganisation de la data a envoyer; bit poids faible en premier------------ data_bis(0)<= data_envoi(7); data_bis(1)<= data_envoi(6); data_bis(2)<= data_envoi(5); data_bis(3)<= data_envoi(4); data_bis(4)<= data_envoi(3); data_bis(5)<= data_envoi(2); data_bis(6)<= data_envoi(1); data_bis(7)<= data_envoi(0); ---------------------------------------------------------------------------- definition_horloge_enable: process (envoi_enable,compteur) --mise à 1 lorsque l'on veut envoyer le mot-- --repasse à 0 à la fin de l'envoi-- begin if compteur = "00000" then if (envoi_enable'event and envoi_enable='1') then horloge_enable<='1'; end if; else if compteur="01110" then horloge_enable<='0'; end if; end if; end process definition_horloge_enable; --------------------------------------------------------------------------- ---------------------------------------------------------------------------- definition_valide_envoi: process (compteur) --la mise à 1 de "valide_data_recu" indique que le mot a été envoyé-- --cela permet de sélectionner le futur mot à envoyer-- --la mise à 1 de "valide_data_envoi" permet d'envoyer le futur-- --(celui-ci doit être rebouclé sur l'entree "envoi_enable"-- begin if compteur = "01100" then valide_data_recu<='1'; elsif compteur="00000" then valide_data_envoi<='1'; else valide_data_envoi<='0'; valide_data_recu<='0'; end if; end process definition_valide_envoi; --------------------------------------------------------------------------- --envoi mot complet: ajout des bits start et stop+ envoi du mot en serie -- avec registre à decalage---------------------------------------------- mot_entier_envoi: process (horloge_envoi,compteur) begin if (horloge_envoi'event and horloge_envoi='1') then compteur<=compteur+1; mot_complet <= mot_complet(8 downto 0) & '1'; end if; if compteur ="01110" then compteur<="00000"; elsif compteur ="00000" then mot_complet<= '0' & data_bis & '1'; else TX <= mot_complet(9); end if; end process mot_entier_envoi; ----------------------------------------------------------------------------- --horloge permettant le fonctionnement du registre à decalage--------------- --------------------------------------------------------------------------- generation_horloge_envoi: process(clock_fpga) begin if clock_fpga'event and clock_fpga='1' then if horloge_enable ='1' then compteur_baud<=compteur_baud+1; if (compteur_baud =5208 ) then horloge_envoi<='1'; compteur_baud<=0; else horloge_envoi<='0'; end if; else horloge_envoi<='0'; end if; end if; end process generation_horloge_envoi; ----------------------------------------------------------------------------- end behavioral;