CHAPITRE 5.
IMPLéMENTATION DU
CODE EN VHDL ET TEST
DE L'INSTRUMENT
Chapitre 5. Implémentation du code en
VHDL et test de l'instrument.
5.1 Introduction
Dans la phase de réalisation, on a définit le
protocole RS232 suivant afin d'assurer la communication entre la carte
SPARTAN-3 et l'ordinateur. :
Ø Un bit de start
Ø Longueur des mots à transmettre : 8
bits
Ø Un bit de stop
La première partie consiste à réaliser
ce protocole contenant à la fois les modules d'émission, de
réception et la variation de vitesse de communication. Puis, on a
simulé le fonctionnement de chaque partie.
5.2 Configuration de la carte SPARTAN-3
La figure ci-dessous représente la connexion entre la
carte SPARTAN-3 et l'ordinateur à travers le câble RS232. La
liaison entre l'instrument et la carte d'acquisition est assurée par les
connecteurs extérieurs du SPARTAN-3.
Figure 5-1 : Câblage des
diverses composantes.
Avant l'implémentation du programme, on doit
configurer les broches entrées/sorties de la carte SPARTAN-3 comme suit
[3]:
Tableau 5-1 : Affectation des
broches.
5.3 La communication entre PC et
SPARTAN-3
L'objectif de cette partie est de réaliser une liaison
série entre la carte SPARTAN-3 et PC, également appelée
UART (Universal Asynchronous Receiver/Transmitter), cette liaison série
est capable d'envoyer une donnée bit par bit sur un bus. Elle est
composée de 5 modules principaux : Ø Module top.
Ø Module Gen_UART_Clk.
Ø Module émission.
Ø Module réception.
converter.
Ø Module baud_
5.3.1 Le module top
Le module top gère tous les autres modules. Il assure
la synchronisation entre les différentes
parties. Il est composé de 4 entrées (Clk,
reset, Baud et Rx) et une sortie (Tx) comme l'indique la
figure 5-2. La description détaillée de chaque
module sera développée par la suite.
Ce Module fait appel aux autres modules comme suit :
S_BAUD : baud_converter port map
(clk,reset,baud,divisor);
S_CLK : Gen_UART_Clk port map
(clk,reset,divisor,clk_user);
S_TX : emission port map(clk_user, reset,rx_data, begin_tx,
tx, end_tx);
S_RX : reception port map(clk,reset,rx_data, rx,
end_rx,divisor);
Figure 5-3 : Le module
Gen_UART_Clk.
Figure 5-2 : Module du
TOP.
5.3.2 Module Gen_UART_Clk
L'horloge de la carte est de 50Mhz alors, pour transmettre
une trame de donnée a une vitesse de 9600bauds (bits par secondes) par
exemple, chaque bit prendra 104ìs pour être transmit. La
période de l'horloge est donc de 20ns, ce qui implique qu'il faut
5200tops d'horloge pour transmettre un bit. On utilise pour cela un compteur
comme la montre la figure 5.3.
Figure 5-5: Module
Baud_converter.
if clk = '1' and clk'event then
count <= count + 1;
if (count = DIV_16MEG-1) then
clk_user <= not clk_user;
count <= (others =>'0');
end if;
end if;
La figure ci-dessous représente la simulation de ce
module :
Figure 5-4 Simulation du module
Gen_UART_Clk. 5.3.3 Module baud_converter
Dans notre cas la vitesse de transmission est variable,
d'où un module de conversion est nécessaire pour élargir
la plage de la vitesse de transmission qui aura la possibilité de varier
de 1200 jusqu'à 115200bauds. Pour cela nous allons utiliser un module
appelé baud_converter, qui reçoit comme entrée le signal
d'horloge Clk, reset et le choix de la vitesse de transmission par
l'entrée baud (La figure 5.5)
end if; end if;
case baud is
when "0000" => Divisor<= CONV_STD_LOGIC_VECTOR(217,32);
--115.200 when "0001" => Divisor <= CONV_STD_LOGIC_VECTOR(434,32);
--57.600 when "0010" => Divisor <= CONV_STD_LOGIC_VECTOR(651,32);
--38.400
when "0011" => Divisor <=
CONV_STD_LOGIC_VECTOR(1302,32); -- 19.200
when "0100"=> Divisor <=
CONV_STD_LOGIC_VECTOR(2500,32); 9.600-when "0101" => Divisor <=
CONV_STD_LOGIC_VECTOR(5208,32); -- 4.800 when "0110" => Divisor <=
CONV_STD_LOGIC_VECTOR(10416,32); --2.400 when "0111" => Divisor <=
CONV_STD_LOGIC_VECTOR(20833,32);--1.200 when others => Divisor <=
(others=> '0');
end case;
|