emission.Vhd
4.33 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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
----------------------------------------------------------------------------
-- 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;