Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
Introduction
Le but de ce projet est dexploiter le FPGA Spartan 3 de Xilinx pour faire des applications basiques dentre sortie (module UART) pour passer par la suite des architectures relativement complexes rassemblant plusieurs composants quil faut synchroniser et grer laccs la mmoire.
I.
Architectures
Dans cette partie, nous allons prsenter et dcrire les architectures des units que nous avons conues et expliquer les dmarches que nous avons adoptes pour y parvenir.
Trame srie 1
Bit de start
8 bits
Bit de stop
Fig1 : Schma dune trame srie en mode 8N1 Donc, la ralisation dun module UART consiste traquer une trame srie et en dgager les bits de donnes tout en respectant la vitesse de transmission.
1.1-
Cette unit reoit des donnes parallles (en provenance dune mmoire par exemple), et elle est charge de les transmettre en srie un un selon un dbit fix de 9600 bauds soit 9600 bits/s. Cette entit aura, donc, besoin dun registre de dcalage pour extraire successivement les bits dun mot. Ce registre doit tre cadenc par une horloge de frquence gale au baud rate. Il devient, ainsi,
ncessaire dintroduire des compteurs pour chronomtrer les moments des dcalages, c'est--dire ceux de lmissions des donnes sur la liaison srie. Le tout doit tre gr par une entit de contrle qui selon ltat de lunit dmission commande les diffrents organes. Lunit dmission peut tre, donc, dcrite par le schma-bloc suivant : Fig2 : Schma-bloc de lunit de rception
Cette unit est cadence par une horloge (clk). Elle dcale les donnes parallles en entre et met les bits une frquence gale au dbit de transmission. Le signal Go donne le signal de dpart lunit pour lenvoi des donnes. Lunit de contrle control_sm dtient les informations sur ltat de lunit et dcide des traitements quelle va effectuer. Lentit compteurs rassemble les compteurs dont on a besoin pour chronomtrer le fonctionnement de lunit. Certains sont utiliss pour faire le dcompte le nombre de cycles dhorloge quil faut pour conditionner lenvoi des donnes une priode bien dtermine et compter le nombre de bits transmettre.
1.2-
Unit de rception
Le rle de cette unit est de dceler larrive dune trame transmise sur un support srie et dy extraire les 8 bits recherchs. Cette unit ressemble lunit dmission et comporte elle, aussi, une entit de contrle qui dtecte le bit de start pour dclencher le processus de mise en parallle des donnes. Lentit de contrle synchronise le fonctionnement des autres composants savoir le registre de dcalage et les compteurs. Loctet obtenu est stock dans un buffer jusqu ce quil soit lu par dautres composants. Le schma-bloc dcrivant cette unit est donn dans la figure ci-contre.
On note lutilisation de signaux de notification pour rendre compte de la disponibilit des donnes.
Fig4 : Schma-bloc du module daffichage VGA La figure qui suit montre en dtail la constitution du contrleur dcriture en mmoire.
II.
Implantation
Cette partie est consacre la description des techniques utilises pour la ralisation des units voques prcdemment et explicitera leur fonctionnement laide de machines dtats et quelques exemples de code VHDL. Avant de donner limplantation des units, il est ncessaire davoir un aperu sur les caractristiques de la carte FPGA utilise. Caractristiques Un FPGA (Spartan 3 de Xilinx) Une horloge de frquence 50 MHz (temps de cycle = 20 ns) Un port srie RS232 Une sortie VGA 8 interrupteurs et 4 boutons poussoirs 4 afficheurs 7 segment et 8 LEDs Une entre PS/2 pour clavier et souris 2 mmoires RAM statiques 3 connecteurs dextension pour des applications avances
Le module TX permet de transmettre une donne sur 8 bits sur la liaison srie suivant un protocole impos. La vitesse de transmission est de 9600 bauds (bits par secondes) pour une horloge du FPGA de 50 Mhz. Chaque bit prend, donc, 104 s pour tre transmis. La priode de lhorloge tant de 20 ns, il faut 5200 tops dhorloge pour transmettre un bit. On utilisera pour cela deux compteurs : un compteur modulo 16 et un compteur modulo 325. On obtient ainsi un compteur global de 16*325 = 5200. Une machine dtat contrle le transfert en grant les diffrents modules, dont le module de dcalage qui permet de transformer linformation parallle en information srie. Le schma dcrivant cette architecture est reprsent dans la figure 2.
Lintrt derrire lutilisation de compteurs en cascade est dviter dessayer de minimiser la taille du compteur (de point de vue nombre de pins) et sapprocher toujours des modles standards. Compteur modulo 325 Le schma RTL de ce compteur est donn par la figure suivante :
Fig6 : compteur modulo 325 Le code VHDL dcrivant ce compteur est le suivant :
-- Diviseur d'horloge (/325) process(h,raz) is variable reg_div : natural range 0 to 324; begin if raz = '1' then reg_div := 0; elsif rising_edge(h) then if reg_div = 324 then reg_div := 0; top_325 <= '1'; else reg_div := reg_div + 1; top_325 <= '0'; end if; end if; end process;
Compteur modulo 16 Trs semblable au compteur prcdent, ce compteur sincrmente lorsque le signal top_325 est 1. Arriv 15, le processus envoie le signal fin_bit_tmp au compteur modulo 10 ainsi qu la machine dtat du systme.
fin_bit_tmp <= '1'; else reg_div_16 := reg_div_16 + 1; fin_bit_tmp <= '0'; end if; else reg_div_16 := reg_div_16; fin_bit_tmp <= '0'; end if; end if; end process; fin_bit<=fin_bit_tmp;
Le signal fin_bit est utilis pour notifi la machine de contrle de la fin du dcompte des 5200 tops dhorloge. Le compteur de bits (modulo 10) Contrairement aux compteurs prcdents, ce compteur possde une remise zro synchrone contrle par la machine dtat du systme via le signal rst_cpt_bit. Lorsque rst_cpt_bit est ltat bas, le compteur sincrmente lorsque fin_bit_tmp est gal 1.
Fig8 : compteur modulo 10 Le code dcrivant le fonctionnement de ce compteur est donn ci-contre.
-- Compte le nombre de bit's process(h,raz) is variable cpt_bit : natural range 0 to 10; begin if raz = '1' then cpt_bit := 0; elsif rising_edge(h) then if rst_cpt_bit = '1' then cpt_bit := 0; elsif fin_bit_tmp = '1' then if cpt_bit = 9 then cpt_bit := 0; fin_transmit <= '1'; else cpt_bit := cpt_bit + 1; fin_transmit <= '0'; end if; else cpt_bit := cpt_bit; fin_transmit <= '0'; end if; end if; end process;
11
La donne parallle a envoyer se trouve sur le bus din compos de 8 bits. Pour pouvoir mettre une premire valeur, il faut en premier lieu charger la valeur de din en rajoutant les bits de Start et de Stop propres la liaison srie dans un registre que nous appellerons reg. La valeur de sortie sera le bit 0 du registre. Comme la valeur doit rester sur le fil pendant un temps dpendant de la vitesse de communication, une mmorisation est effectue lorsque la commande cmd est 01.
Fig9 : module de dcalage Le corps de cette entit crit en VHDL est le suivant :
--Decalage process (h,raz) is begin if raz = '1' then reg <= (others => '1'); elsif rising_edge(h) then case cmd is when "00" => reg <= '1'& reg(9 downto 1); -- Decalage when "10" => reg <= '1'& din & '0'; -- Formatage -> Bits --de Start et de Stop when "01" => sout <= reg(0) ; reg <= reg; -- Ne fait rien. -> Continu la transmission when "11" => reg <= (others => '1'); when others => reg <= (others => '1'); end case; end if; end process;
Fig10 : machine dtats du module TX Cette machine est constitue par 5 tats : - Attente : Durant cet tat, la sortie sout est ltat haut. Le module attend le signal go pour passer ltat suivant. Attd_bit : Cet tat effectue un reset du compteur de bit modulo 10. Le module attend ensuite que le compteur modulo 16 soit revenu zro (indiqu par le signal fin_bit) pour passer ltat suivant et pour librer le compteur. Chargement : Une fois le systme prt, lentit dcalage charge la valeur de la donne parallle din dans le registre reg grce la commande cmd 10. Une fois la valeur charge, la machine dtat rentre dans une boucle jusqu' ce que les 10 bits de linformation soient transmis. Mmorisation : Ltat attend que la valeur mise sur sout soit finie de transmettre. Ceci est indiqu par le signal fin_bit. Dcalage : Le dcalage de la donne parallle est effectu grce la commande 00. Si tous les bits sont transmis, la machine dtat retourne dans ltat Attente sinon, elle recommence la boucle Mmorisation/Dcalage. A la fin de lexcution, la machine dtat fait un dernier dcalage avant de retourner dans ltat attente. Cependant, ce dcalage ne gnre aucune erreur sur le signal de sortie car ce niveau tous les bits de reg sont 1. On observe sur le chronogramme de simulation suivant le passage de ltat dcalage ltat attente.
1.2-
Ce module est charg de la rcupration de convertir les donnes transitant en srie en des donnes srie. Lentit rception ressemble beaucoup celle de lmission de point de vue architecture, la seule diffrence rside dans le fonctionnement de lentit de contrle et des tats internes. Elle comprend, donc, des compteurs, un module de dcalage et une entit de contrle. Le schma-bloc de cette unit est reprsent sur la figure 3. La machine dtats dcrivant le fonctionnement de cette entit est la suivante :
Fig11 : machine dtats du module RX Ayant remarqu limportance des compteurs et leur utilisation massive, on a eu recours lutilisation dun compteur gnrique. Son utilit rside dans le fait quau moment de linstanciation, on fixe la valeur sa valeur de dcompte. Le code de ce compteur est donn ci-contre :
entity compteur_N is generic ( N : integer := 4) ; Port ( clk : in std_logic; raz : in std_logic; enable : in std_logic; rst_cpt_bit : in std_logic; fin_N_cycles : out std_logic); end compteur_N; architecture Behavioral of compteur_N is begin -- Compte le nombre de bit's process(clk,raz) is
variable cpt_bit : natural range 0 to N-1; begin if raz = '1' then cpt_bit := 0; elsif rising_edge(clk) then if rst_cpt_bit = '1' then cpt_bit := 0; elsif enable = '1' then if cpt_bit = N-1 then cpt_bit := 0; fin_N_cycles <= '1'; else cpt_bit := cpt_bit + 1; fin_N_cycles <= '0'; end if; else cpt_bit := cpt_bit; fin_N_cycles <= '0'; end if; end if; end process; end Behavioral;
III.
Simulation
La simulation est une tape importante pour un design en VHDL car elle tablit des chronogrammes permettant de suivre les signaux chaque coup dhorloge et de vrifier le bon fonctionnement du design. Pour simuler une entit en VHDL, on ralise une entit fictive appele TestBench qui est une sorte de plateforme de test permettant de stimuler les entres de lentit tester. Le code suivant (TestBench de lunit dmission) donne un aperu sur la faon de raliser un TestBench.
ENTITY conv_parallel_serie_tb IS END conv_parallel_serie_tb; ARCHITECTURE behavior OF conv_parallel_serie_tb IS COMPONENT conv_parallel_serie PORT( clk : IN std_logic; raz : IN std_logic; go : IN std_logic; din : IN std_logic_vector(7 downto 0); sout : OUT std_logic ); END COMPONENT; SIGNAL clk : std_logic; SIGNAL raz : std_logic; SIGNAL go : std_logic; SIGNAL din : std_logic_vector(7 downto 0); SIGNAL sout : std_logic; constant demi_periode : time := 10 ns; BEGIN uut: conv_parallel_serie PORT MAP( clk => clk, raz => raz, go => go, din => din, sout => sout ); clock:process begin clk <= '1'; wait for demi_periode; clk <= '0'; wait for demi_periode; end process; raz <= '1', '0' after 2*demi_periode; go <= '0', '1' after 4*demi_periode, '0' after 6*demi_periode; din <= "01110110"; END;
Aprs une simulation sur une dure suffisante, on obtient les rsultats suivants :
Cette figure met en vidence limportance de la simulation car on voit clairement larrive des octets de donnes sur le signal data_in et on vrifie que les signaux de contrle de la mmoire ont les valeurs quil faut pour y crire la donne (bien quon ait commis lerreur de laisser le chip select de la premire SRAM toujours 1). On remarque, aussi, que ladresse sincrmente aprs la lecture de deux octets.
Conclusion
Au cours de ce projet, nous avons fait limplantation en VHDL de circuits basiques, savoir le module UART dmission et de rception srie. Nous avions pu galement raliser un circuit dcriture dans la mmoire, tel que les octets sont affichs sur 8 LEDs. Cependant, nous navions pas pu valider larchitecture de laffichage sur cran VGA pour des raisons qui sont probablement dues la difficult de synchronisation entre les diverses entits qui coexistent ainsi que les difficults pour tester le design en entier.