Périphérique UART
Périphérique UART
Nous considérons l’architecture suivante permettant d’envoyer des données sur une liaison série de type RS232 :
- Les données présentes sur le bus 8 bits data_so_send sont chargée de manière synchrone dans le registre reg_tampon si ld_t = ‘1’.
- start donne l’ordre de copier la donnée dans le registre reg_serial la donnée présente dans reg_tampon
- Quand tous les bits de la donnée ont été envoyés, le signal ready est à 1.
L’architecture utilise 2 compteur :
- compteur_nb_bits : nombre de bits à envoyer pour une donnée ( en considérant les bits de start et de stop )
- compteur_baudrate : l’envoi de chaque bit sur TX doit se faire à une fréquence ( Baudrate ) plus lente que l’horloge CLK (12 MHz).
Ce compteur permet de gérer un état d’attente WAIT_BAUD, pendant lequel on compte jusqu’à
Test du périphérique UART
Afin de tester le périphérique, on peut envisager de transmettre différents caractères contenus dans une mémoire.
L’action sur les boutons permet d’agir sur le chargement du registre tampon de l’uart, et l’ordre d’envoyer la donnée.
A chaque fois que le registre tampon est chargé, l’adresse de la mémoire évolue via l’incrémentation de compteur_2b.
Mémoire
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;
entity rom is
port( addr : in std_logic_vector(taille_bit-1 downto 0);
data : out std_logic_vector(7 downto 0));
end rom;
architecture arch_rom of rom is
type memory is array(integer range 0 to 3) of std_logic_vector(7 downto 0);
constant mem : memory :=(
x"61", x"62", x"63", x"64"
);
begin
data <= mem(to_integer(unsigned(addr)));
end arch_rom;