Sei sulla pagina 1di 10

Informe del Proyecto de Sistemas Digitales Modulo RS-232. Carlos A. Angulo J. 16 de Abril de 2012.

UNIVERSIDAD INDUSTRIAL DE SANTANDER


ESCUELA
DE

INGENIERAS ELCTRICA, ELECTRNICA

Y DE

TELECOMUNICACIONES

Perfecta Combinacin entre Energa e Intelecto

Diseo de un UART (Transmisor y Receptor Asncrono Universal) basado en el estndar RS-232


Gonzalo Alberto Franklin Gonzlez 2071915, Juan Manuel Parra Saavedra 2071945. Grupo J1
Resumen El siguiente documento es un informe detallado acerca de los aspectos ms relevantes del proyecto del laboratorio de la asignatura de sistemas digitales el cual se dividi en diferentes mdulos de los cuales se escogi el que se ocupa de la transmisin de datos mediante el protocolo RS-232. El objetivo principal de este documento es darle a entender al lector el funcionamiento del esta parte del proyecto mediante una breve especificacin, una descripcin, diagramas, y una presentacin de la lgica estructurada que se utiliz para su implementacin. Palabras Clave Transmisin, datos, frecuencia, contador, registro, paridad, estados, protocolo, reloj, baudios, reset, ordenador, bits.

Para disear el circuito de es necesario tener en cuenta que el proceso de transmisin de datos es asncrono debido a que la tarjeta con la cual se implementara el circuito trabaja con valores de frecuencia distintos los cuales se deben transmitir los datos segn el estndar. Entre los valores en que trabaja la tarjeta se escogi 10MHz para disear el circuito y entre la gama de valores a los cuales se deben transmitir los datos se escogi una velocidad de transmisin de 9600 baudios.

ESPECIFICACIN DEL CIRCUITO

a implementacin de este mdulo surge a raz de la necesidad de un circuito que pueda transmitir los datos ledos de la memoria SPI hacia un ordenador en el cual se puedan visualizar ms fcilmente mediante alguna interfaz grfica . Para ello fue necesario disear e implementar solo la parte que se encarga de la transmisin de datos propuesto por el estndar RS-232. El circuito a disear es un transmisor de datos paralelo-serie que consta de dos lneas de transmisin principales una que va desde el modulo hacia el ordenador y otra lnea que se conecta a tierra. En cuanto al hardware que se va a utilizar para la implementacin del circuito el estndar propone el uso de un conector DB-9 que se muestra en la Figura 1. Adems de una etapa de adecuacin de seales que en conjunto hacen necesario el modelo del PMOD mostrado en la Figura 2. En el proyecto la fabricacin del hardware estuvo a cargo de integrantes del grupo de investigacin ERA de la escuela de ingenieras elctrica, electrnica y telecomunicaciones.

Figura 1. Conector DB-9 usado para la implementacin del circuito.

Figura 2. P-MOD El objetivo del circuito es poder transmitir los 8 bits que se reciben de los mdulos de lectura y escritura de la memoria SPI mediante un formato de datos que sugiere el estndar en el

Informe del Proyecto de Sistemas Digitales Modulo RS-232. Carlos A. Angulo J. 16 de Abril de 2012. UNIVERSIDAD INDUSTRIAL DE SANTANDER
ESCUELA
DE

INGENIERAS ELCTRICA, ELECTRNICA

Y DE

TELECOMUNICACIONES

Perfecta Combinacin entre Energa e Intelecto

que la trama de datos comienza por un bit 0 de arranque siguen los 8 bits de datos y luego un bit de paridad para deteccin de errores y un ltimo bit 1 de fin que indica que se han transmitido todos los datos. En la Figura 3 se muestra la trama de datos especificada.

E. CLK: Seal de reloj de la tarjeta de 10 MHz. F. Bit_Tx: Trama de datos de 11 bits que son enviados al ordenador por medio del P-MOD. G. Ocupado: Indica al sistema que el modulo est transmitiendo y por ende el circuito no podr recibir ninguna nueva orden.

DIAGRAMA DE BLOQUES

Figura 3. Trama de datos de transmisin. El circuito general de transmisin tiene las siguientes entradas y salidas que se muestran en la Figura 4 y a continuacin se explican las funciones de cada una en el sistema.

Figura 5. Diagrama de Bloques Figura 4. Esquema general de entradas y salidas del circuito de transmisin. A. Inicio: Seal del sistema que le indica al mdulo que salga de su estado de reposo para posteriormente empezar a enviar datos esta seal contiene un bit. B. Dato enviar: Grupo de 8 bits que conforman el dato completo que se quiere transmitir. C. Control lectura: Es una seal de 2 bits que viene de los mdulos de memoria y la cual indica las caractersticas de salida del dato de la memoria. D. Reset: Seal de reset asncrono. Permite reiniciar todo el sistema en cualquier instante. El funcionamiento de los bloques de la Figura 5 se ha visto en las prcticas anteriores: Div_Frec: Contador encargado de generar la seal de transmisin. FMS: Controla los mdulos restantes. Registro: Carga los datos en paralelo y lo saca en serie. Contador_1: Cuenta los bits de la informacin a transmitir. Contador_2: Es un contador que cuenta los bits de paridad

Informe del Proyecto de Sistemas Digitales Modulo RS-232. Carlos A. Angulo J. 16 de Abril de 2012. UNIVERSIDAD INDUSTRIAL DE SANTANDER
ESCUELA
DE

INGENIERAS ELCTRICA, ELECTRNICA

Y DE

TELECOMUNICACIONES

Perfecta Combinacin entre Energa e Intelecto

DIAGRAMA ESQUEMATICO

CONTADOR DE LOS 8 BITS

COMPONENTES DEL MODULO

CONTADOR BIT PARIDAD

MAQUINA DE ESTADOS

DIVISOR DE FRECUENCIA

Informe del Proyecto de Sistemas Digitales Modulo RS-232. Carlos A. Angulo J. 16 de Abril de 2012. UNIVERSIDAD INDUSTRIAL DE SANTANDER
ESCUELA
DE

INGENIERAS ELCTRICA, ELECTRNICA

Y DE

TELECOMUNICACIONES

Perfecta Combinacin entre Energa e Intelecto

REGISTRO

bit_Tx downto 0));

: out STD_LOGIC_VECTOR (10

end Modulo_completo_RS_232; architecture Behavioral of Modulo_completo_RS_232 is COMPONENT Maquina_de_Estados PORT( CLK : in STD_LOGIC; RST : in STD_LOGIC; INICIO : in STD_LOGIC; BAUDIO : in STD_LOGIC; OCHO_BITS : in STD_LOGIC; PAR : in STD_LOGIC; OCUPADO : out STD_LOGIC; CARGA : out STD_LOGIC; DESPLAZA : out STD_LOGIC; CONT_0 : out STD_LOGIC; CONT_1 : out STD_LOGIC; CONT_2 : out STD_LOGIC; CONT_3 : out STD_LOGIC); END COMPONENT; signal signal signal signal signal signal signal DESCRIPCIN DE DISPOSITIVO DE LGICA ESTRUCTURADA MODULO_COMPLETO ---------------------------------------------------------------------------library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; ---- Uncomment the following library declaration if instantiating ---- any Xilinx primitives in this code. --library UNISIM; --use UNISIM.VComponents.all; entity Modulo_completo_RS_232 is Port ( INICIO : in STD_LOGIC; dato_enviar : in STD_LOGIC_VECTOR (7 downto 0); control_lectura : in STD_LOGIC_VECTOR (1 downto 0); RST : in STD_LOGIC; CLK : in STD_LOGIC; OCUPADO : out STD_LOGIC; senal_ocupado : std_logic; senal_carga : std_logic; senal_desplaza: std_logic; senal_cont_0 : std_logic; senal_cont_1 : std_logic; senal_cont_2 : std_logic; senal_cont_3 : std_logic;

COMPONENT Registro_Universal generic (num_bits : natural :=11); PORT( CLK : in std_logic; RST : in std_logic; ENABLE : in std_logic; SR : in std_logic; DATO : in std_logic_vector(7 downto 0); S : in std_logic_vector(1 downto 0); bit_Tx : out std_logic_vector(num_bits-1 downto 0)); END COMPONENT; COMPONENT Divisor generic (num_bits : natural := 11; modulo : natural := 1041); PORT ( CLK : in STD_LOGIC; RST : in STD_LOGIC; CLR : in STD_LOGIC; TARGETA : in STD_LOGIC; BAUDIO : out STD_LOGIC; CUENTA : out STD_LOGIC_VECTOR (num_bits-1 downto 0)); END COMPONENT;

Informe del Proyecto de Sistemas Digitales Modulo RS-232. Carlos A. Angulo J. 16 de Abril de 2012. UNIVERSIDAD INDUSTRIAL DE SANTANDER
ESCUELA
DE

INGENIERAS ELCTRICA, ELECTRNICA

Y DE

TELECOMUNICACIONES

Perfecta Combinacin entre Energa e Intelecto

signal senal_baudio : std_logic; COMPONENT Contador_1 generic (num_bits : natural := 11; modulo : natural := 1041); PORT( CLK : in STD_LOGIC; RST : in STD_LOGIC; CLR_1 : in STD_LOGIC; BAUDIO_1 : in STD_LOGIC; OCHO_BITS : out STD_LOGIC; CUENTA : out STD_LOGIC_VECTOR (num_bits-1 downto 0)); END COMPONENT; signal senal_ocho_bits : std_logic; signal senal_baudio_1 : std_logic; COMPONENT Contador_2 generic (num_bits : natural := 11; modulo : natural := 1041); PORT ( CLK : in STD_LOGIC; RST : in STD_LOGIC; CLR_2 : in STD_LOGIC; BAUDIO_2 : in STD_LOGIC; PAR : out STD_LOGIC; CUENTA : out STD_LOGIC_VECTOR (num_bits-1 downto 0)); END COMPONENT; signal senal_par : std_logic; signal senal_baudio_2 : std_logic; begin ---------------------------------------------------------------------------FSM: Maquina_de_Estados PORT MAP( CLK => CLK, RST => RST, INICIO => INICIO, BAUDIO => senal_baudio, OCHO_BITS => senal_ocho_bits, PAR => senal_par, OCUPADO => OCUPADO, CARGA => senal_carga, DESPLAZA => senal_desplaza, CONT_0 => senal_cont_0, CONT_1 => senal_cont_1, CONT_2 => senal_cont_2, CONT_3 => senal_cont_3); ----------------------------------------------------------------------------

DIVISOR_1: Divisor generic map( num_bits => 11, modulo => 1041) PORT MAP( CLK => CLK, RST => RST, CLR => control_lectura(1), TARGETA => control_lectura(0), BAUDIO => senal_baudio, CUENTA => open); ---------------------------------------------------------------------------REGISTRO: Registro_Universal generic map (num_bits => 11) PORT MAP( CLK => CLK, RST => RST, ENABLE => '1', SR => '0', DATO => dato_enviar, S(1) => senal_carga, S(0) => senal_desplaza, bit_Tx => bit_Tx); ---------------------------------------------------------------------------senal_baudio_1 <= senal_baudio and senal_cont_0; CONTADOR1: Contador_1 generic map(num_bits => 11, modulo => 1041) PORT MAP( CLK => CLK, RST => RST, CLR_1 => senal_cont_1, BAUDIO_1 => senal_baudio_1, OCHO_BITS => senal_ocho_bits, CUENTA => open); ---------------------------------------------------------------------------senal_baudio_2 <= senal_baudio and senal_cont_2; CONTADOR2: Contador_2 generic map( num_bits => 11, modulo => 1041) PORT MAP( CLK => CLK, RST => RST, CLR_2 => senal_cont_3,

Informe del Proyecto de Sistemas Digitales Modulo RS-232. Carlos A. Angulo J. 16 de Abril de 2012. UNIVERSIDAD INDUSTRIAL DE SANTANDER
ESCUELA
DE

INGENIERAS ELCTRICA, ELECTRNICA

Y DE

TELECOMUNICACIONES

Perfecta Combinacin entre Energa e Intelecto

BAUDIO_2 => senal_baudio_2, PAR => senal_par, CUENTA => open); end Behavioral; DIVISOR library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; ---- Uncomment the following library declaration if instantiating ---- any Xilinx primitives in this code. --library UNISIM; --use UNISIM.VComponents.all; entity Divisor is generic ( num_bits : natural := 11; modulo : natural := 1041); Port ( CLK : in STD_LOGIC; RST : in STD_LOGIC; CLR : in STD_LOGIC; TARGETA : in STD_LOGIC; BAUDIO : out STD_LOGIC; CUENTA : out STD_LOGIC_VECTOR (num_bits-1 downto 0)); end Divisor; architecture Behavioral of Divisor is constant limite : natural := modulo-1; signal compara : STD_LOGIC; signal q : STD_LOGIC_VECTOR(num_bits-1 downto 0) := (others => '0'); signal q_mas1, q_next : STD_LOGIC_VECTOR(num_bits-1 downto 0); begin COMPARADOR: compara <= '1' when q = limite else '0'; SUMADOR: q_mas1 <= q+1; MUX_QNEXT: q_next <= (others => '0') when clr = '1' else

(others => '0') when compara = '1' else q_mas1; REGISTRO: process (rst, clk) begin if rst = '1' then q <= (others => '0'); elsif rising_edge(clk) then if targeta = '1' then q <= q_next; else q <= q; end if; end if; end process; SALIDAS: CUENTA <= q; BAUDIO <= compara; end Behavioral; CONTADOR 1 library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; ---- Uncomment the following library declaration if instantiating ---- any Xilinx primitives in this code. --library UNISIM; --use UNISIM.VComponents.all; entity Contador_1 is generic ( NUM_BITS : natural := 11; MODULO : natural := 1041); Port ( CLK : in STD_LOGIC; RST : in STD_LOGIC; CLR_1 : in STD_LOGIC; BAUDIO_1 : in STD_LOGIC; OCHO_BITS : out STD_LOGIC; CUENTA : out STD_LOGIC_VECTOR (num_bits-1 downto 0)); end Contador_1; architecture Behavioral of Contador_1 is constant limite : natural := modulo-1;

Informe del Proyecto de Sistemas Digitales Modulo RS-232. Carlos A. Angulo J. 16 de Abril de 2012. UNIVERSIDAD INDUSTRIAL DE SANTANDER
ESCUELA
DE

INGENIERAS ELCTRICA, ELECTRNICA

Y DE

TELECOMUNICACIONES

Perfecta Combinacin entre Energa e Intelecto

signal compara : STD_LOGIC; signal q : STD_LOGIC_VECTOR(num_bits-1 downto 0) := (others => '0'); signal q_mas1, q_next : STD_LOGIC_VECTOR(num_bits-1 downto 0); begin COMPARADOR: compara <= '1' when q = limite else '0'; SUMADOR: q_mas1 <= q+1; MUX_QNEXT: q_next <= (others => '0') when clr_1 = '1' else (others => '0') when compara = '1' else q_mas1; REGISTRO: process (rst, clk) begin if rst = '1' then q <= (others => '0'); elsif rising_edge(clk) then if baudio_1 = '1' then q <= q_next; else q <= q; end if; end if; end process; SALIDAS: cuenta <= q; ocho_bits <= compara; end Behavioral; CONTADOR 2 ---------------------------------------------------------------------------library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; ---- Uncomment the following library declaration if instantiating ---- any Xilinx primitives in this code.

--library UNISIM; --use UNISIM.VComponents.all; entity Contador_2 is generic ( NUM_BITS : natural := 11; MODULO : natural := 1041); Port ( CLK : in STD_LOGIC; RST : in STD_LOGIC; CLR_2 : in STD_LOGIC; BAUDIO_2 : in STD_LOGIC; PAR : out STD_LOGIC; CUENTA : out STD_LOGIC_VECTOR (num_bits-1 downto 0)); end Contador_2; architecture Behavioral of Contador_2 is constant limite : natural := modulo-1; signal compara : STD_LOGIC; signal q : STD_LOGIC_VECTOR(num_bits-1 downto 0) := (others => '0'); signal q_mas1, q_next : STD_LOGIC_VECTOR(num_bits-1 downto 0); begin COMPARADOR: compara <= '1' when q = limite else '0'; SUMADOR: q_mas1 <= q+1; MUX_QNEXT: q_next <= (others => '0') when clr_2 = '1' else (others => '0') when compara = '1' else q_mas1; REGISTRO: process (rst, clk) begin if rst = '1' then q <= (others => '0'); elsif rising_edge(clk) then if baudio_2 = '1' then q <= q_next; else q <= q; end if; end if; end process;

Informe del Proyecto de Sistemas Digitales Modulo RS-232. Carlos A. Angulo J. 16 de Abril de 2012. UNIVERSIDAD INDUSTRIAL DE SANTANDER
ESCUELA
DE

INGENIERAS ELCTRICA, ELECTRNICA

Y DE

TELECOMUNICACIONES

Perfecta Combinacin entre Energa e Intelecto

SALIDAS: cuenta <= q; par <= compara; end Behavioral; MAQUINA DE ESTADOS library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; ---- Uncomment the following library declaration if instantiating ---- any Xilinx primitives in this code. --library UNISIM; --use UNISIM.VComponents.all; entity Maquina_de_Estados is Port ( CLK : in STD_LOGIC; RST : in STD_LOGIC; INICIO : in STD_LOGIC; BAUDIO : in STD_LOGIC; OCUPADO : out STD_LOGIC; -- conexion con el registro CARGA : out STD_LOGIC; DESPLAZA : out STD_LOGIC; -- conexion con el contador 1 OCHO_BITS : in STD_LOGIC; CONT_0 : out STD_LOGIC; CONT_1 : out STD_LOGIC; -- conexion con el contador 2 PAR : in STD_LOGIC; CONT_2 : out STD_LOGIC; CONT_3 : out STD_LOGIC); attribute FSM_EXTRACT : string; attribute FSM_EXTRACT of Maquina_de_Estados: entity is "N0"; end Maquina_de_Estados; architecture Behavioral of Maquina_de_Estados is constant n_bits: natural := 2+2+2+1; --numero de bits de estado contador 1 contador 2 registro ocupado constant reposo : STD_LOGIC_VECTOR (n_bits downto 1):="00"&"00"&"11"&'0'; --- No cambia No cambia Borra no constant arranque : STD_LOGIC_VECTOR (n_bits downto 1):="01"&"01"&"10"&'1'; -- No cambia No cambia carga si constant datos : STD_LOGIC_VECTOR (n_bits downto 1):="10"&"01"&"01"&'1'; -- cuenta No cambia desplaza si

constant paridad : STD_LOGIC_VECTOR (n_bits downto 1):="01"&"10"&"10"&'1'; --- No cambia cuenta carga si constant fin : STD_LOGIC_VECTOR (n_bits downto 1):="11"&"11"&"10"&'1'; --- Borra Borra carga si signal e_presente : STD_LOGIC_VECTOR (n_bits downto 1):= reposo; signal e_futuro : STD_LOGIC_VECTOR (n_bits downto 1); begin ----------------------------------------------------------------------------- logica del estado siguiente process(e_presente, inicio, baudio, ocho_bits, par) begin case e_presente is when reposo => if inicio = '1' then e_futuro <= arranque; else e_futuro <= reposo; end if; when arranque => if baudio = '1' then e_futuro <= datos; else e_futuro <= arranque; end if; when datos => if ocho_bits = '1' then e_futuro <= paridad; else e_futuro <= datos; end if; when paridad => if par = '1' then e_futuro <= fin; else e_futuro <= paridad; end if; when fin => if baudio = '1' then e_futuro <= reposo; else e_futuro <= fin; end if;

when others => e_futuro <= reposo; end case; end process; ----------------------------------------------------------------------------- logica del estado siguiente process(clk, rst) begin if rst = '1' then e_presente <= reposo;

Informe del Proyecto de Sistemas Digitales Modulo RS-232. Carlos A. Angulo J. 16 de Abril de 2012. UNIVERSIDAD INDUSTRIAL DE SANTANDER
ESCUELA
DE

INGENIERAS ELCTRICA, ELECTRNICA

Y DE

TELECOMUNICACIONES

Perfecta Combinacin entre Energa e Intelecto

elsif rising_edge (clk) then if baudio = '1' then e_presente <= e_futuro; end if; end if; end process; ----------------------------------------------------------------------------- Asignacion de las salidas cont_0 <= e_presente(7); cont_1 <= e_presente(6); cont_2 <= e_presente(5); cont_3 <= e_presente(4); carga <= e_presente(3); desplaza <= e_presente(2); ocupado <= e_presente(1); end Behavioral; REGISTRO library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity Registro_Universal is generic (num_bits : natural :=11); port( CLK : in std_logic; RST : in std_logic; ENABLE : in std_logic; SR : in std_logic; DATO : in std_logic_vector(7 downto 0); S : in std_logic_vector(1 downto 0); bit_Tx : out std_logic_vector(num_bits-1 downto 0)); end Registro_Universal; architecture Behavioral of Registro_Universal is signal reg : std_logic_vector (num_bits-1 downto 0):=(others => '0'); begin process (CLK,RST) begin if RST = '1' then reg <= (others => '0'); elsif rising_edge (CLK) then if ENABLE = '0' then reg <= reg; else case S is

when "11" => reg <= (others => '0'); when "10" => reg <= '1'&DATO&S(1)&'0'; when "01" => reg <= SR & reg(num_bits-1 downto 0); when others => reg <= reg; end case; end if; end if; end process; bit_Tx <= reg; end Behavioral; DESCRIPCIN DEL CIRCUITO El circuito de transmisin de datos consta un divisor de frecuencia, 2 contadores, una mquina de estados y un registro paralelo serie. A continuacin se especifica cada uno de los componentes del circuito y su funcionamiento. DIVISOR DE FRECUENCIA: Fue necesario la implementacin de este circuito debido a que las frecuencias de recepcin y transmisin de datos son diferentes es por esto que este circuito se encarga de generar una seal de salida con una frecuencia de 9600 baudios (bits/segundo) con la cual se transmitirn los datos al ordenador. No obstante se escogi trabajar la tarjeta con una frecuencia de 10MHz. Para hacer esta divisin de frecuencia se usaron seales genricas con el fin de que no se tuviera que redisear el circuito si se decidiera trabajar con otros valores frecuencia lo cual ahorrara tiempo y recursos. En nuestro caso, el diseo genrico tambin nos puede hacer ahorrar tiempo de simulacin, ya que para simular se pueden poner frecuencias mayores, y as no tener que esperar los largos tiempos de simulacin. A partir del reloj de la tarjeta de 10MHz (CLK) queremos proporcionar una seal con frecuencia de 9600Hz (Baudio), que es la velocidad de transmisin escogida. Este reloj tendr por tanto un periodo de 104,167 s, y estar un slo ciclo de reloj a uno el resto del tiempo a cero. A continuacin se muestran los esquemas de las seales.

Figura 6. Esquema seales de la tarjeta y de transmisin de datos.

Informe del Proyecto de Sistemas Digitales Modulo RS-232. Carlos A. Angulo J. 16 de Abril de 2012. UNIVERSIDAD INDUSTRIAL DE SANTANDER
ESCUELA
DE

10

INGENIERAS ELCTRICA, ELECTRNICA

Y DE

TELECOMUNICACIONES

Perfecta Combinacin entre Energa e Intelecto

Para disear el divisor de frecuencia se divide la frecuencia de entrada entre la frecuencia de salida (10MHz/9,6kHz = 1041,671041,2) y el nmero resultante nos dar el contador que se necesitar para obtener la frecuencia de salida. Hacindolo de manera inversa, 1042 cuentas de 100ns (CLK) nos da un periodo de 104,17s, que es una buena aproximacin de la frecuencia que queremos: queremos 9600Hz y obtenemos 9599,69Hz. Con un error del 0.032%. En vez de crear un contador con rango de 0 a 1041 que no tiene ninguna correspondencia fsica. Lo haramos con el rango que delimite el ancho del bus. Como log2 (1041) = 10,02; necesitaramos 11 bits para el contador. Aunque en este ejemplo no es tan importante contar un ciclo ms o menos, ya que 100ns es despreciable frente a 104,167s, en general hay que ser cuidadosos para hacer un contador que cuente el nmero de ciclos que queremos.

Paridad: este estado enva el bit de paridad, al llegar una seal (par) pasaramos al estado fin. Fin: este estado enva el bit de fin, al llegar un Baudio pasaramos al estado inicial. NOTA: Se usaron 2 compuertas and para sincronizar las entradas de los contadores con la frecuencia generada por el divisor de frecuencia.

Figura 8. Esquema mquina de estados. REFERENCIAS [1] Dto. de Tecnologa Electrnica. U. Rey Juan Carlos, Diseo de una Figura 7. Diagrama de tiempos del divisor de frecuencia. MAQUINA DE ESTADOS: Es el circuito de control encargado de dirigir al resto de bloques. Si el circuito no se encuentra enviando ningn dato, cuando se recibe la indicacin de transmitir (Inicio ='1') el circuito empieza una secuencia de envo, esta secuencia de envo determinar la mquina de estados. La secuencia de estados es la siguiente: Reposo: este estado es el inicial, el sistema est como su nombre lo dice en reposo esperando la orden de transmitir, cuando la seal Inicio='1' se pasar a enviar el bit de inicio. En este momento se dar la orden de cargar el dato (cargar) en el registro de desplazamiento. En este momento tambin se sincronizara el contador del divisor de frecuencia, para ello hubo dos opciones, o inicializar el contador o hacer que en el estado inicial no contara, y al cambiar de estado se habilita el contador. Arranque: en este estado se est enviando el bit de inicio. Se saldr de este estado al recibir la seal Baudio que nos dir que debemos de pasar a enviar los bits de dato. Por tanto, el estado siguiente ser Datos. Datos: este estado se encarga de enviar los 8 bits de dato. Una alternativa a esta opcin sera poner un estado para cada bit. Sin embargo, usamos un estado para los 8 bits y, mediante un contador, se llev la cuenta del nmero de bits que se enviaron. Cuando se envan los 8 bits (ocho_bits) cambiaremos de estado, y pasaremos a enviar el bit de paridad.
UART, Versin: 20/11/2007.

[2]http://laimbio08.escet.urjc.es/assets/files/docencia/DCSE/d cse_prac_1a7_v21_UART.pdf

Potrebbero piacerti anche