emission.Vhd
3.52 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
----------------------------------------------------------------------------
-- 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;
envoie_enable :in std_logic;
TX : out std_logic;
data_envoie : in std_logic_vector(7 downto 0));
end entity emission_RS232;
architecture Behavioral of emission_RS232 is
------------------------------------------------------------------------
-- SIGNALS
------------------------------------------------------------------------
signal horloge_envoie : std_logic :='0';
signal mot_complet : std_logic_vector(9 downto 0) :="0000000000";
signal compteur: std_logic_vector(3 downto 0):="0000";
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 poid faible en premier------------
data_bis(0)<= data_envoie(7);
data_bis(1)<= data_envoie(6);
data_bis(2)<= data_envoie(5);
data_bis(3)<= data_envoie(4);
data_bis(4)<= data_envoie(3);
data_bis(5)<= data_envoie(2);
data_bis(6)<= data_envoie(1);
data_bis(7)<= data_envoie(0);
----------------------------------------------------------------------------
definition_horloge_enable: process (envoie_enable,compteur)
--mise à 1 lorsque l'on veut envoyer le mot--
--repasse à 0 à la fin de l'envoie--
begin
if compteur = "0000" then
if (envoie_enable'event and envoie_enable='1') then
horloge_enable<='1';
end if;
else
if compteur="1010" then
horloge_enable<='0';
end if;
end if;
end process definition_horloge_enable;
---------------------------------------------------------------------------
--envoie mot complet: ajout des bits start et stop+ envoie du mot en serie
-- avec registre à decalage----------------------------------------------
mot_entier_envoi: process (horloge_envoie,compteur)
begin
if (horloge_envoie'event and horloge_envoie='1') then
compteur<=compteur+1;
mot_complet <= mot_complet(8 downto 0) & '1';
end if;
if compteur ="1010" then
compteur<="0000";
elsif compteur ="0000" 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_envoie: 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_envoie<='1';
compteur_baud<=0;
else
horloge_envoie<='0';
end if;
else
horloge_envoie<='0';
end if;
end if;
end process generation_horloge_envoie;
-----------------------------------------------------------------------------
end behavioral;