L’objectif de cet exercice est de décrire en partie un périphérique liaison série simplifié de type UART.
On considère les hypothèses simplificatrices suivantes :
Le Débit sur la ligne correspond à l’horloge du périphérique
On considère uniquement l’envoi des données (et pas la réception)
Un Décodeur permet, à partir de l’adresse figurant sur le bus d’adresses, de sélectionner un registre afin de charger une donnée
présente sur le bus de données ou de forcer la valeur de ce bus.
Les registres accessibles par l’utilisateur (le microcprocesseurs) sont :
Le registre tampon : Permet de stocker une donnée en vue de la transmettre
Le registre de Contrôle : Le bit de poids faible est le bit start : La donnée présente dans le registre tampon doit être sérialisée
Le registre d’état : Permet d’indiquer au microprocesseur que le registre tampon contient une donnée qui n’a pas encore été envoyée.
Le bit de parité est fourni par le détecteur de parité (1 pour un nombre impair de 1 dans la donnée à envoyer).
libraryIEEE;useIEEE.std_logic_1164.all;useIEEE.numeric_std.all;entitycompteurisport(clk,raz,ce:instd_logic;count:outstd_logic_vector(3downto0));endcompteur;architecturearch_compteurofcompteurissignalcount_int:unsigned(3downto0);beginprocess(clk)beginifrising_edge(clk)thenifraz='1'thencount_int<=(others=>'0');elsifce='1'thenifcount_int="1111"thencount_int<=(others=>'0');-- fin de comptageelsecount_int<=count_int+1;-- "+"(unsigned,int)endif;endif;endif;endprocess;count<=std_logic_vector(count_int);-- count copie de count_intendarch_compteur;
libraryIEEE;useIEEE.std_logic_1164.all;useIEEE.numeric_std.all;entityreg_serialisateurisport(raz,clk,load,rotate:instd_logic;d_in:instd_logic_vector(8downto0);TX:outstd_logic);endreg_serialisateur;architecturearch_reg_serialisateurofreg_serialisateuris--************************************-- A COMPLETER --************************************begin--************************************-- A COMPLETER --************************************endarch_reg_serialisateur;
Séquenceur
Proposer un diagramme d’états, et la description VHDL correspondante pour le fonctionnement suivant :
Initialement, le compteur doit être remis à zéro
Si un chargement du tampon est demandé, le registre d’état doit être forcé à 1
Si un Start est demandé :
la donnée présente dans le tampon doit être copiée dans le registre sérialisateur
Le Registre d’Etat doit être remis à zéro
Les données doivent être sérialisée sur TX
Proposer un nouveau diagramme d’états permettant de prendre en compte le chargement d’une donnée dans le tampon alors qu’une sérialisation est en cours.
libraryIEEE;useIEEE.std_logic_1164.all;entitysequenceur_serialisport(clk,reset,start,ld_t:instd_logic;comptage:instd_logic_vector(3downto0);set_st,raz_st,raz_ctl,raz_ser,ld_ser,ser,raz_count,ce:outstd_logic);endsequenceur_serial;architecturearch_sequenceur_serialofsequenceur_serialis--************************************-- A COMPLETER --************************************begin--************************************-- A COMPLETER --************************************endarch_sequenceur_serial;
Sérialisateur et mu0
Relier le sérialisateur au processeur mu0 (lab2) ( an ajoutant au passage un décodeur pour le bus d’adresse ) ; modifier le programme dans la mémoire de mu0 pour montrer le bon fonctionnement de l’ensemble.