Vous êtes sur la page 1sur 18

Ecole Polytechnique de Tunisie

Mini projet base de microprocesseurs

Traitement dimages sur FPGA


23 juin 2008

Rapport labor par :

BOUSSETTA Hichem FEHRI Bilel Elves 2me anne (Option SISY)

Anne universitaire 2007/2008

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.

1. Module UART (Universal Asynchronous Receiver Transmitter)


Ce module a pour fonction de recevoir et de transmettre des donnes travers un port srie. Il est constitu de deux units : une unit de rception qui dtecte larrive des donnes sur un support de transmission en srie et les transforme en donnes parallles, et une unit dmission qui srialise les donnes parallles. Avant dexpliquer larchitecture de chacune de ces deux units, il est ncessaire de dcrire le protocole srie. En fait, il existe plusieurs normes pour la transmission srie, chacune ayant ses spcificits. Dans notre projet, on se restreindra au cas le plus simple, o lon transmet 8 bits avec un bit de stop (gal 1) et sans contrle de parit dnomm 8N1. La figure ci-dessous reprsente une transmission srie en mode 8N1. La ligne est toujours ltat 1. Pour signaler larrive dun nouvel octet, on transmet dabord un bit de start gal 0 pour servir de repre. Par la suite, la lecture des autres bits se fait une certaine cadence fixe lavance par le rcepteur et lmetteur. Linverse de la priode qui spare deux bits conscutifs est appel Baud Rate. Cest la frquence laquelle les bits sont transmis.

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-

Unit dmission srie

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.

Fig3 : Schma-bloc de lunit de rception

On note lutilisation de signaux de notification pour rendre compte de la disponibilit des donnes.

2. Module affichage sur un cran VGA


Il existe plusieurs modes pour la norme VGA, et nous allons utiliser celle dont la dfinition de limage est de 640480 fonctionnant 60 Hz et dont les canaux de rouge, vert et bleu sont cods chacun sur un bit, ce qui dfinit 8 couleurs possibles. Le protocole VGA consiste utiliser deux signaux de synchronisation horizontale HS et verticale VS et 3 signaux pour dfinir la couleur dun pixel. Pour une frquence de rafrachissement de lcran de 60 Hz, linformation de la couleur doit parvenir tous les pixels de lcran une frquence de 25 MHz (soit une priode de 40 ns). Le module daffichage VGA lit une image partir dune mmoire et laffiche sur un cran. Les contraintes prendre en compte sont les contraintes de temps daccs aux donnes des pixels et leur transmission sur un cble VGA dans les dlais requis. Dautres difficults se prsentent aussi, surtout lorsque limage en question stocke dans la mmoire est lue partir dun PC travers un cble srie. Dans ce cas, il faut grer et organiser laccs en lecture et en criture la mmoire par les diffrentes units. Le module daffichage VGA comporte les composants suivants : Une unit de rception srie (dcrite dans les paragraphes prcdents). Un contrleur dcriture dans la mmoire : cette entit est charge de la sauvegarde en mmoire des donnes reues en srie. Elle comprend, donc, un compteur pour effectuer un accs squentiel la mmoire. Une unit de contrle qui gre le fonctionnement interne de lunit et les signaux de contrle de la mmoire. Cette unit est aussi pourvue dune entit de calcul dadresse qui peut servir pour des applications plus tendues comme par exemple segmenter la mmoire en plusieurs blocs pour y stocker plusieurs images, et afficher une animation en fonction de ces images. La segmentation de la mmoire simplifie, dans ce cas, laccs cette dernire sur une base et un index. Une unit daffichage VGA qui comme dcrite prcdemment met les signaux de synchronisation et des couleurs sur la sortie VGA. Un contrleur de lecture partir de la mmoire qui gre laccs de lunit daffichage la mmoire en lui faisant parvenir les informations sur la couleur dun pixel. Des multiplexeurs pour les fils dadresse et de donnes correspondant aux units de rception et daffichage VGA. Ces multiplexeurs garantissent lunicit de lentit accdant la mmoire.

Fig4 : Schma-bloc du module daffichage VGA La figure qui suit montre en dtail la constitution du contrleur dcriture en mmoire.

Fig5 : Schma-bloc 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

1. Module dmission-rception srie 1.1Module dmission (TX)

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.

1.1.1- Les compteurs


On a utilis 3 compteurs : - un compteur modulo 16 - un compteur modulo 325 - un compteur modulo 10 (pour compter les bits constituant la trame transmettre)

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.

Fig7 : compteur modulo 16 Le code associ cette entit est le suivant :


-- Diviseur de diviseur d'horloge (/16) process(h,raz) is variable reg_div_16 : natural range 0 to 15; begin if raz = '1' then reg_div_16 := 0; elsif rising_edge(h) then if top_325 = '1' then if reg_div_16 = 15 then reg_div_16 := 0;

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;

1.1.2- Module de dcalage


Ce module est une ralisation dun registre de dcalage. Il permet deffectuer 4 actions sur la donne en fonction du signal de commande cmd envoye par la partie contrle du systme. Cmd 00 01 10 Action Dcalage du registre de sortie Mmorisation de la valeur sur la sortie Chargement de la donne entrante

11

Remise 1 du registre Tableau 1 : Actions de lentit de dcalage

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;

1.1.3- Partie contrle


La machine de contrle est le noyau de lunit dmission. Cest une reprsentation logique des tats de fonctionnement de cette unit, dfinit les transitions entre ces tats et assure une synergie entre les divers constituants de lunit en les commandant. La machine de contrle peut tre reprsente laide de la machine dtats suivante :

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-

Module de rception (RX)

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;

De cette manire, on rduit remarquablement la taille du code et le nombre de fichiers utiliser.

2. Module daffichage VGA dune image stocke en mmoire


Ce module rassemble les units suivantes : - Une unit de rception (RX) pour recevoir une image (640480) sur le port srie - Une unit daffichage VGA dune image sur un cran VGA (donne par Xilinx) - Un contrleur dcriture en mmoire associ lunit RX - Un contrleur de lecture de la mmoire associ lunit daffichage - Des multiplexeurs pour la sparation physique des deux circuits (rception et affichage) Le schma-bloc dcrivant ce module est reprsent dans la figure 4. Les principales difficults rencontres lors de llaboration du module daffichage sont dues aux contraintes de temps lies la recherche des informations sur les pixels de la mmoire pour les transmettre sur la sortie VGA. Il sest avr difficile et fastidieux de faire un chronogramme qui dcrit les tapes suivre et dessayer de le dcrire par une machine dtats. De plus, la simulation de tout le design est difficile, vu quil faut simuler la transmission srie et quon na pas eu le temps de trouver une solution pour simuler le fonctionnement de la mmoire. La solution serait de simuler chaque composant part, ce qui prend beaucoup de temps.

2.1. Contrleur dcriture en mmoire


Ce composant gre laccs de lunit de rception la mmoire. Il dtermine laide dun compteur ladresse laquelle loctet reu sera plac et active tous les signaux ncessaires pour commander la mmoire. Le schma-bloc de cette unit est reprsent sur la figure 5. La machine dtats dcrivant le fonctionnement de ce compteur est donne ci-contre :

Fig12 : machine dtats du contrleur dcriture en mmoire

2.2. Gestion des adresses mmoires


La mmoire prsente sur la carte FPGA est une RAM statique de capacit 256k 16 bits. Elle est, donc, adresse par 18 bits avec la possibilit de slectionner loctet de poids faible ou de poids fort. Les pixels de limage envoye partir dun PC sont cods sur 3 bits. On utilise, donc, un octet pour y stocker 2 pixels la fois. Pour accder seulement lun des deux blocs dun mot mmoire, on a adress la mmoire sur 19 bits comme si elle tait filiforme et que chaque case tait dune taille dun octet. Ainsi, le bit 0 de ladresse mmoire sert slectionner loctet de poids faible ou de poids fort, et le reste sert slectionner la ligne de la mmoire. A lintrieur de du contrleur dcriture, nous avons mis un additionneur pour calculer ladresse physique de la mmoire partir dune adresse logique. Ladresse logique servira, donc, pour index et sa valeur sera ajoute une base. Nous avons, pens cela au dbut quand nous voulions raliser une animation sur un cran VGA.

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 :

Fig13 : Simulation de lunit dmission

Fig14 : Simulation de lunit de rception

Fig15 : Simulation dun contrleur de mmoire

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.

Vous aimerez peut-être aussi