Interfaces de entrada / salida

Slides:



Advertisements
Presentaciones similares
Lenguajes de Descripción de Hardware
Advertisements

Equipo #3 Unidad III: ALU Efraín Corral Eduardo Castillo Elías Alarcón
Métodos de diseño en VHDL.
Clase Teórica N°3 Procesador de Pardo y Boluda
SENTENCIAS SECUENCIALES
LENGUAJES DE DESCRIPCION DE HARDWARE (HDL)
Autor: Sergio García López Director: Francesc Josep Sánchez i Robert
Síntesis Lógica con HDL
Circuitos Digitales II
Introducción al VHDL VHDL orientado a la síntesis de circuitos en Dispositivo Lógicos Programables.
Programación de sistemas reconfigurables
RESUMEN: Softmicro de 8 bits Xilinx
Semáforo Versión .TDF AHDL
Seminario de Actualización - Excel Avanzado y Macros
1. Introducción Estructura básica de un computador.
Vhdl para síntesis Alfredo Rosado Muñoz Universidad de Valencia Ingeniería Electrónica Diseño de Circuitos y Sistemas Electrónicos.
1. Algoritmo 2. Arquitectura 3. Implementación 4. Conclusiones  IMPLEMENTACIÓN VLSI DEL ALGORITMO CORDIC EN MODO VECTORIZACIÓN UTILIZANDO RADIX ALTO 
Registros de Desplazamiento
VHDL.
Interfases de Entrada / Salida
GESTION DE LA JERARQUIA
ESTRUCTURA GENERAL DE UN SISTEMA DE TRANSFERENCIA DE REGISTROS
Placa de expansión para Comunicaciones C ommunication B oard T ask F orce.
Capítulo.2 - Fundamentos del Lenguaje VHDL
Laboratorio de Microprocesadores - ITBA -Daniel Jacoby 1 REV LABORATORIO DE MICROPROCESADORES Daniel A Jacoby Abril 2009 Instituto.
DSL Domain Specific Language (Lenguaje Especifico del Dominio)
VHDL Breve introducción.
Others, soporte para síntesis. Los agregados tienen la habilidad de usar la sentencia others, la cual asignará un valor a todos los otros elementos de.
Diseño lógico combinacional mediante VHDL
Programación I Arreglos II- Matrices.
Introducción a la Electrónica
Introducción Electrónica Digital
Introducción a las Interfaces de entrada / salida.
Lógica de Tres Estados (TRI-STATE)
Diseño Lógico Combinacional con VHDL
VHDL El nombre proviene de VHSIC Hardware Description Language, donde VHSIC significa Very High Speed Integrated Circuits. Es un lenguaje formal de especificación.
Proyecto de Sistemas Informáticos Curso Carlos Sánchez-Vellisco Sánchez Antonio José García Martínez David Fernández Máiquez.
Introducción a VHDL Agenda Un poco de historia Definiciones generales Entidades Arquitecturas Configuraciones.
Integración de entidades en VHDL
Librerías y packages (paquetes)
Introducción a las Interfaces de entrada / salida.
Capítulo.3 - Diseño Lógico Combinacional con VHDL
Diseño lógico secuencial con VHDL
DIPLOMADO EN SISTEMAS DIGITALES USO DE LOS PERIFERICOS DEL SISTEMA DE DESARROLLO SPARTAN 3E Instructor: MC. Rodrigo Lucio Maya Ramírez.
Proyecto de Sistemas Informáticos Curso Carlos Sánchez-Vellisco Sánchez Antonio José García Martínez David Fernández Máiquez.
FPGA - Flujo de Diseño UBA - Sistemas Embebidos - FPGA – SoftCores – 2010 – Franco Ferrucci, Sebastián García.
LA ARQUITECTURA O LA FUNCIONALIDAD DEL SISTEMA DefiniciónDefiniciónDefinición Declaración y reglas sintácticas.Declaración y reglas sintácticas.Declaración.
29/5/2002 Sesión 18 Tipos de datos Estruturados Archivos de Caracteres Prof:Eridan Otto Programación de Computadores Lenguaje Pascal.
La Familia Click to Begin. Hola! Me llamo Juan. This activity is all about mi familia. On each page, read the family member word at the top and then click.
PUESTO-TRABAJO (Código-Puesto, Empresa, Sueldo, DNI- Contratado) TITULADO (DNI-Titulado, Nombre, Apellidos, Dirección) TITULACION (Iden-Titulación, Nombre,
BANCOS DE PRUEBAS CON VHDL (TESTBENCHES). Sistemas Digitales - FIUBA Bancos de prueba ¿Cómo realizar la prueba de un dispositivo descripto en VHDL? DUT.
Diseño Lógico 2 Metodología de Diseño
Clase Número 1 Introducción a la computación.. Componentes Externos.
VHDL. Indice Sistemas Digitales - FIUBA VHDL Lenguajes descriptores de hardware VHDL - Introducción - Entidad de diseño (declaración de entidad y cuerpo.
NCO (Numerically Controlled Oscillator). NCO: Oscilador controlado numéricamente Aplicaciones Conversores digitales up/down PLLs digitales Sistemas de.
1 LENGUAJE DE DESCRIPCION DE HARDWARE ELECTRONICA DIGITAL NAYIBE CHIO CHO NAYIBE CHIO CHO.
BANCOS DE PRUEBA CON VHDL (TESTBENCHES). Sistemas Digitales - FIUBA Bancos de prueba ¿Cómo realizar la prueba de un dispositivo descripto en VHDL? DUT.
Asignación de señales en VHDL. VHDL: Asignación de señales La asignación a una señal establece una o más transacciones sobre la misma Cada señal tiene.
U.M.S.A. ETN-601 Sistemas Digitales Decodificador 3 a 8 Aux. David Marza Herrera.
CONSIDERACIONES DE RUIDO EN SISTEMAS PCM ING. JAVIER GARCIA.
Pablo Huerta Pellitero
Diseño de Circuitos Lógicos Secuenciales
Diseño de Circuitos Lógicos Combinatorios (2)
Hardware Description Language
Programación en VHDL.
ispLSI1032E- Estructura Disseny Electrònic Assistit per Ordinador
Registro.
(Numerically Controlled Oscillator)
Diego Hernández R. Archivos Diego Hernández R.
END.
Transcripción de la presentación:

Interfaces de entrada / salida Introducción a las Interfaces de entrada / salida

Puerto de Salida Básico Registro (Latch) #CE CLK #WR #OE D0 D7 Q0 Q7 Bus de Datos del Sistema Salidas

Sintesis en vhdl de un puerto de salida Entity Salida is port ( HCLK : in std_logic; RESET : in std_logic; CS : in std_logic; WR : in std_logic; D : in std_logic_vector (7 downto 0); --Bus datos es siempre entrada O : out std_logic_vector (7 downto 0) --Salidas al exterior ); end Salida;

architecture B2 of Salida is begin process (HCLK, RESET) if RESET = '1' then O ( 7 downto 0 )<= "00000000"; else if HCLK = '1' and HCLK'event then -- Flanco de ascendente if CS = '0' then if WR = '0' then O (7 downto 0) <= D ( 7 downto 0 ); end if; end process; end B2;

Estimulo para test del puerto de salida

Simulación – Puerto de salida

Puerto de Entrada Básico Puerta de 3 estados (Transceiver) #CE #RD #OE O0 O7 I0 I7 Bus de Datos del Sistema Entradas

Sintesis en vhdl de un puerto de entrada entity Entrada is port ( HCLK : in std_logic; RESET : in std_logic; CS : in std_logic; RD : in std_logic; D : out std_logic_vector (7 downto 0); -- Bus Datos es siempre salida I : in std_logic_vector (7 downto 0) -- Entradas externas ); end Entrada;

architecture B2 of Entrada is Begin process (HCLK, RESET) if RESET = '1' then D ( 7 downto 0 )<= "ZZZZZZZZ"; else if HCLK = '1' and HCLK'event then -- Flanco de ascendente if CS = '0' then -- Acceso al registro solo si CS es 0 if RD = '0' then D ( 7 downto 0 ) <= I (7 downto 0); D ( 7 downto 0 ) <="ZZZZZZZZ"; -- Si RD esta en 1 el bus esta en "Z" end if; -- Si CS esta en 1 el bus esta en "Z" end process; end B2;

Estimulo – Puerto de entrada

Simulación – Puerto de entrada

8. 8. 8. 8. Aplicación Puerto “A” Excitación (Ánodos) Puerto “B” Q7 CE1 WL CLK Excitación (Ánodos) D7 … D0 OE Q0 8. 8. 8. 8. CE1 Puerto “B” WH CLK K3 K2 K1 K0 D15 … D8 Q3 Q0 OE Habilitaciones (Cátodos)

a f b g e c p d

ÁNODOS CÁTODO COMÚN ÁNODOS

Vcc a b c d e f g p CÁTODO COMÚN ÁNODOS

ÁNODOS 5. 8. 8. 8. KHH KMH KML KLL ULN2003 1 0 0 0

ÁNODOS 8. 3. 8. 8. KMH KML KLL ULN2003 0 1 0 0

ÁNODOS 8. 8. 9. 8. KMH KML KLL ULN2003 0 0 1 0

ÁNODOS 8. 8. 8. 6. KMH KML KLL ULN2003 0 0 0 1

;Subrutina DISP ;Variables utilizadas: ;STATUS : Próximo dígito de Buffer que es necesario refrescar ;BUFFER : Tabla de 8 bytes que contiene los datos para el display y los códigos de habilitación correspondientes STATUS dw 0 BUFFER db 1, 1 ;LSD , 00000001 db 3, 2 ; , 00000010 db 5, 4 ; , 00000100 db 7, 8 ;MSD; 00001000 ;PORT_A : Etiqueta que especifica la dirección del puerto del display PORT_A equ XXXX

;Variables utilizadas: ;Subrutina DISP ;Variables utilizadas: ;STATUS : Próximo dígito de Buffer que es necesario refrescar ;BUFFER : Tabla de 8 bytes que contiene los datos para el display y los códigos de habilitación correspondientes STATUS dw 0 BUFFER db 1, 1 ;LSD , 00000001 db 3, 2 ; , 00000010 db 5, 4 ; , 00000100 db 7, 8 ;MSD; 00001000 ;PORT_A : Etiqueta que especifica la dirección del puerto del display PORT_A equ XXXX STATUS OFFSET incrementa 1 BUFFER 1 = 00000001 3 2 = 00000010 5 4 = 00000100 7 8 =00001000

;SUB. DE REFRESCO------------ DISP PROC NEAR XOR AX,AX MOV DX, PORT_A OUT DX,AX ;APAGA DISPLAY MOV BX, STATUS ;BUSCA DATOS EN BUFFER MOV SI, OFFSET BUFFER MOV AX,(BX+SI) OUT DX,AX ;ENCIENDE DIGITO ADD BX, 2 ;APUNTA AL PROXIMO DIGITO EN MEMORIA AND BX, 7 MOV STATUS,BX RET

;SUB. DE REFRESCO------------ DISP PROC NEAR XOR AX,AX MOV DX, PORT_A OUT DX,AX ;APAGA DISPLAY MOV BX, STATUS ;BUSCA DATOS EN BUFFER MOV SI, OFFSET BUFFER MOV AX,(BX+SI) OUT DX,AX ;ENCIENDE DIGITO ADD BX, 2 ;APUNTA AL PROXIMO DIGITO EN MEMORIA AND BX, 7 MOV STATUS,BX RET

;SUB. DE REFRESCO------------ DISP PROC NEAR XOR AX,AX MOV DX, PORT_A OUT DX,AX ;APAGA DISPLAY MOV BX, STATUS ;BUSCA DATOS EN BUFFER MOV SI, OFFSET BUFFER MOV AX,(BX+SI) OUT DX,AX ;ENCIENDE DIGITO ADD BX, 2 ;APUNTA AL PROXIMO DIGITO EN MEMORIA AND BX, 7 MOV STATUS,BX RET OFFSET BUFFER 1 1 = 00000001 3 STATUS 2 = 00000010 5 4 = 00000100 7 8 =00001000

;SUB. DE REFRESCO------------ DISP PROC NEAR XOR AX,AX MOV DX, PORT_A OUT DX,AX ;APAGA DISPLAY MOV BX, STATUS ;BUSCA DATOS EN TRABLA MOV SI, OFFSET BUFFER MOV AX,(BX+SI) OUT DX,AX ;ENCIENDE DIGITO ADD BX, 2 ;APUNTA AL PROXIMO DIGITO EN MEMORIA AND BX, 7 MOV STATUS,BX RET

;SUB. DE REFRESCO------------ DISP PROC NEAR XOR AX,AX MOV DX, PORT_A OUT DX,AX ;APAGA DISPLAY MOV BX, STATUS ;BUSCA DATOS EN TRABLA MOV SI, OFFSET BUFFER MOV AX,(BX+SI) OUT DX,AX ;ENCIENDE DIGITO ADD BX, 2 ;APUNTA AL PROXIMO DIGITO EN MEMORIA AND BX, 7 MOV STATUS,BX RET

;SUB. DE REFRESCO------------ DISP PROC NEAR XOR AX,AX MOV DX, PORT_A OUT DX,AX ;APAGA DISPLAY MOV BX, STATUS ;BUSCA DATOS EN TRABLA MOV SI, OFFSET BUFFER MOV AX,(BX+SI) OUT DX,AX ;ENCIENDE DIGITO ADD BX, 2 ;APUNTA AL PROXIMO DIGITO EN MEMORIA AND BX, 7 MOV STATUS,BX RET

Teclado C0 C1 Entradas C2 C3 F0 F1 Teclas Salidas F2 F3

TECLADO Entradas 1 Salidas

TECLADO 1 Entradas 1 Salidas

TECLADO Entradas 1 Salidas

TECLADO Entradas 1 Salidas

Teclado C0 C1 Entradas C2 C3 F0 F1 Teclas Salidas F2 F3

8. 8. 8. 8. Aplicación Excitación (Ánodos) Habilitaciones (Cátodos) Q7 CE1 WL CLK Excitación (Ánodos) D7 … D0 OE Q0 8. 8. 8. 8. CE1 WH CLK K3 K2 K1 K0 D15 … D8 Q3 Q0 OE Habilitaciones (Cátodos)

Teclado C0 C1 Entradas C2 C3 Q0 Q1 Teclas Q2 Q3

Teclado I0 I1 Entradas I2 I3 P U E R T O B Q0 Q1 Teclas Q2 Q3

PUERTO_C Puerta de 3 estados CE OE1 RDL OE2 Entradas D0 D7 O0 O7 I0 I7

Teclado I3 I2 I1 I0 I4 I5 I6 I7 Entradas PUERTO_C P U E R T O Q0 Q1 B Q0 Q1 Teclas Q2 Q3

Subrutina SCAN : Variables utilizadas : TECLA : Código ultima tecla presionada TECLA db 0 ;SUB. DE EXPLORACION DE TECLADO SCAN PROC NEAR MOV DX, PORT_B IN AL, DX TEST AL, 0F0h JZ notec MOV TECLA, AL notec: RET

Registros internos Síntesis en vhdl de un registro interno (sin líneas de entrada ni salida) entity Registro is port ( HCLK : in std_logic; RESET : in std_logic; CS : in std_logic; RD : in std_logic; WR : in std_logic; D : inout std_logic_vector (7 downto 0) -- Bus de datos es Entrada/Salida ); end Registro;

architecture B2 of Registro is Begin process (HCLK, RESET) variable REGISTRO : std_logic_vector (7 downto 0) := "00000000"; if RESET = '1' then D ( 7 downto 0 )<= "ZZZZZZZZ"; else if HCLK = '1' and HCLK'event then -- Flanco de ascendente if CS = '0' then -- Acceso al registro solo si CS es 0 if RD = '0' then D ( 7 downto 0 ) <= REGISTRO (7 downto 0); D ( 7 downto 0 ) <="ZZZZZZZZ"; -- Si RD = 1, bus en "Z" if WR = '0' then REGISTRO (7 downto 0) := D ( 7 downto 0 ); end if; D ( 7 downto 0 ) <="ZZZZZZZZ"; -- Si CS = 1, bus en "Z" end process; end B2;

Estímulo para test de registro interno

Salida del test de registro interno

Generador PWM Contador Comparador HCLK CLK Q0 Q7 Salida PWM Registro =1 si Registro > Contador Registro #CE #WR CLK #OE D0 D7 Q0 Q7 Bus de Datos del Sistema

Síntesis VHDL de Generador PWM entity PWM is port ( HCLK : in std_logic; RESET : in std_logic; CS : in std_logic; RD : in std_logic; WR : in std_logic; D : inout std_logic_vector (7 downto 0); PWM : out std_logic ); end PWM;

architecture B2 of PWM is Begin process (HCLK, RESET) variable REGISTRO : std_logic_vector (7 downto 0) := "00000000"; variable CICLO : std_logic_vector (7 downto 0) := "00000000"; variable CONTADOR : std_logic_vector (7 downto 0) := "00000000"; if RESET = '1' then D ( 7 downto 0 )<= "ZZZZZZZZ"; PWM <= '0'; else if HCLK = '1' and HCLK'event then -- Flanco de ascendente if CS = '0' then -- Acceso al registro solo si CS es 0 if RD = '0' then D ( 7 downto 0 ) <= REGISTRO (7 downto 0); D ( 7 downto 0 ) <="ZZZZZZZZ"; -- Si RD es 1 el bus es "Z" if WR = '0' then REGISTRO (7 downto 0) := D ( 7 downto 0 ); end if; D ( 7 downto 0 ) <="ZZZZZZZZ"; -- Si CS es 1 el bus es "Z"

if CONTADOR > CICLO then PWM <= '0'; else PWM <= '1'; end if; CONTADOR := CONTADOR +1; if CONTADOR > CICLO then PWM <= '0'; else PWM <= '1'; end if; if CONTADOR = "00000000" then CICLO := REGISTRO; end process; end B2;

Test de puerto PWM

Puertos programables, líneas de control Puerto de Entrada + Salida Básico #CE #WR Registro (Latch) #OE Salida Bus de Datos Entrada #RD Puerta de 3 estados (Transceiver) #OE

Puertos programables, lineas de control Puerto de Entrada + Salida Básico #CE #WR Registro (Latch) #OE Salida Bus de Datos Entrada #RD Puerta de 3 estados (Transceiver) #OE

Puerto de Entrada / Salida Programable #CE Registro (Latch) #WR #OE Exterior Salida Bus de Datos Entrada Puerta de 3 estados (Transceiver) #OE #RD

Puerto de Entrada / Salida Programable #CE 1 #WR #OE Exterior #CE #WR #OE Salida Bus de Datos Entrada #OE #RD

Puerto de Entrada / Salida Programable A0 #WR #OE #CE Exterior #WR #OE Salida Bus de Datos Entrada #OE #RD

Puerto de Entrada / Salida Programable #CE #WR A0 #RD #OE Lógica de control de lectura y escritura (LCLE) Exterior #OE Salida Bus de Datos Entrada #OE

Puerto de Entrada / Salida Programable #CE #WR A0 #RD #OE Lógica de control de lectura y escritura (LCLE) Exterior #OE Salida Bus de Datos Entrada #OE

Puerto de Entrada / Salida Programable #CE #WR A0 #RD #OE LCLE Puerta bidireccional de 3 estados (Transceiver) #OE Salida #OE Dd Entrada Bus de Datos del sistema #OE

Puerto de Entrada / Salida Programable con Reset #CE #WR A0 #RD RESET #OE LCLE Puerta bidireccional de 3 estados (Transceiver) #OE Salida #OE Dd Entrada Bus de Datos del sistema #OE

Puerto de Entrada / Salida Programable con Reset #CE #WR A0 #RD RESET #OE LCLE Puerta bidireccional de 3 estados (Transceiver) #OE Salida #OE Dd Entrada Bus de Datos del sistema #OE

Puerto de E / S con Pedido de Atención y Bandera Habilitación INTR Bandera Puertas de 3 estados (Transceiver) 1 #OE D Q #R Bus de Datos #OE Entrada

Puerto de Entrada con Líneas de control y con capacidad de solicitar interrupciones Bandera INTR #OE0 #CE A0 #WR #RD #OE1 LCLE Habilitación 1 CLK1 D Q DAV #R #OE Bus de Datos #OE1 #OE DAC #E #OE0 Entradas

; PUNTERO variable que apunta al lugar de almacenamiento ; SUB. HS_INP ; PUNTERO variable que apunta al lugar de almacenamiento ; N variable que contiene el numero de bytes que se van a recibir ; CRSR etiqueta con la dirección del registro de control/estados (Wr/Rd) ; DATR etiqueta con la dirección del registro de entrada ; FLAG etiqueta con todos “0” y un solo “1” en posición de la “Flag” HS_INP PROC NEAR TEST N,0FFFFh JNZ OK_DAT ;salta a recepción MOV DX, CRSR ;apunta al registro de control XOR AL,AL OUT DX,AL ;deshabilita pedido de interrupción SALE RET OK_DAT MOV DX, CRSR ;Apunta al registro de estados IN AL,DX ;verifica si hay dato para leer TEST AL, FLAG ; “ JZ SALE ;si no hay dato sale MOV DX, DATR ;apunta al registro de entrada MOV SI, PUNTERO ;carga el puntero para guardar el dato IN AL,DX MOV (SI),AL ;guarda el dato DEC N ;actualiza contador INC PUNTERO ;actualiza puntero RET ENDP

; SUB. INI_HS_INP ; Parámetros de entrada: BX puntero al área de memoria libre CX cantidad de datos para almacenar AL configuración del puerto ; PUNTERO variable que apunta al lugar de almacenamiento ; N variable que contiene el numero de bytes que se van a recibir ;CRSR etiqueta con la dirección del registro de control/estados (Wr/Rd) INI_HS_INP PROC NEAR MOV N, CX MOV PUNTERO, BX MOV DX, CRSR OUT DX,AL RET ENDP

entity IOP is port ( HCLK : in std_logic; RESET : in std_logic; CS : in std_logic; AD0 : in std_logic; --0 = DATOS 1 = DDR WR : in std_logic; RD : in std_logic D : inout std_logic_vector (7 downto 0); -- El bus de datos es Entrada/Salida ES : inout std_logic_vector (7 downto 0) -- Entradas/Salidas al exterior ); end IOP; architecture B2 of IOP is Begin process (HCLK, RESET) variable DDR : std_logic_vector ( 7 downto 0) :="00000000"; -- 0 = entrada variable DAT : std_logic_vector ( 7 downto 0) :="00000000"; if RESET = '1' then ES ( 7 downto 0 )<= "ZZZZZZZZ"; DDR ( 7 downto 0 ) := "00000000"; DAT ( 7 downto 0 ) := "00000000"; D ( 7 downto 0 )<= "ZZZZZZZZ"; else if HCLK = '1' and HCLK'event then -- Flanco de ascendente if CS = '0' then if WR = '0' then if AD0 = '0' then DAT( 7 downto 0 ) := D( 7 downto 0 ); n1: for i in 0 to 7 loop if DDR(i) = '1' then ES (i) <= D (i); ES (i) <= 'Z'; end if; end loop n1;

else DDR( 7 downto 0 ) := D( 7 downto 0 ); n2: for i in 0 to 7 loop if D(i) = '1' then ES (i) <= DAT (i); ES (i) <= 'Z'; end if; end loop n2; if RD = '0' then if AD0 = '0' then n3: for i in 0 to 7 loop if DDR(i) = '1' then D (i) <= DAT (i); D (i) <= ES(i); end loop n3; D(7 downto 0) <= DDR(7 downto 0); D( 7 downto 0 ) <= "ZZZZZZZZ"; end process; end B2;

Estímulo para test de puerto entrada-salida programable

Simulación 1 – Puerto de entrada-salida programable

Simulación 2 – Puerto de entrada-salida programable

Comunicación Serie Asincrónica (puerto serie)

Esquema básico para una comunicación serie asincrónica TX RX Información multiplexada en el tiempo Bits Tb tiempo

Esquema básico para una comunicación serie asincrónica TX RX CLKTX CLKRX Información multiplexada en el tiempo Bits Tb tiempo

Comunicación serie asincrónica Duplex TX-RX_1 TX-RX_2 TX RX RX TX CLK_1 CLK_2

Comunicación serie asincrónica Duplex TX-RX_1 TX-RX_2 TX RX RX TX CLK_1T CLK_2T CLK_1R CLK_2R

Comunicación con adaptadores RS 232 TX-RX_1 TX-RX_2 TX RX RX TX RS 232 RS 232 CLK_1 CLK_2 Niveles RS 232

Comunicación con adaptadores RS 232 TX-RX_1 TX-RX_2 TX RX RX TX RS 232 RS 232 V +18V 0 lógico +3V Banda prohibida -3V 1 lógico -18V

Comunicación con MODEM TX-RX_1 TX-RX_2 TX TX- RX RX RX TX RS 232 M O D E M O D E RS 232 CLK_1 CLK_2

Comunicación con MODEM TX-RX_1 TX-RX_2 TX TX- RX RX RX TX RS 232 M O D E M O D E RS 232 DTR DSR TX- RX RTS CTS DCD RI CLK_1 CLK_2

Comunicación con MODEM TX-RX_1 TX M O D E RX RS 232 Data Terminal Ready DTR DSR DataSet Ready RTS CTS DCD RI CLK_1

Comunicación con MODEM TX-RX_1 TX M O D E RX RS 232 DTR DSR Request To Send RTS Control de transmisión CTS Clear To Send DCD RI CLK_1

Comunicación con MODEM TX-RX_1 TX M O D E RX RS 232 DTR DSR RTS CTS Data Carrier Detect DCD Control de recepción RI Ring Indicator CLK_1

Comunicación con MODEM TX-RX_1 TX-RX_2 TX TX- RX RX RX TX RS 232 M O D E M O D E RS 232 DTR DTR DSR DSR TX- RX RTS RTS CTS CTS DCD DCD RI RI CLK_1 CLK_2

Fundamentos del modo de transmisión En un sistema de transmisión serie asincrónico, la información se transmite utilizando pequeños grupos de bits denominados “CARACTERES”

Fundamentos del modo de transmisión En un sistema de transmisión serie asincrónico, la información se transmite utilizando pequeños grupos de bits denominados “CARACTERES” Formato de un “Caracter ” Bit de arranque Bit de paridad Bit de parada Bits de datos b0 bn 1 Tb tiempo “Bit time” o “Tiempo de bit”

b b b b b b b b P Cálculo de Paridad Bits de datos Bit de paridad Paridad PAR => el número total de “1”, debe ser PAR. Paridad IMPAR => el número total de “1”, debe ser IMPAR. Ejemplo para dato: 1 1 1 0 1 0 1 0 Paridad PAR => 1 1 1 0 1 0 1 0 1 (6 unos, número par) Paridad IMPAR => 1 1 1 0 1 0 1 0 0 (5 unos, número impar)

THR 1 P bn - - - - - - - b0 0 TSR Bit de arranque Bit de paridad parada Bits de datos b0 bn 1 Tb tiempo THR 1 P bn - - - - - - - b0 0 Carga en paralelo SOUT TSR Desplazamiento en serie de período Tb = 1 / Baud rate

RDR 1 P bn - - - - - - b0 0 RSR Muestreos tiempo Carga en paralelo Tb tiempo RDR Carga en paralelo 1 P bn - - - - - - b0 0 SIN RSR Desplazamiento en serie ( RCLK)

Bit de arranque Bit de datos ( b0 ) Tb Flanco descendente ... tiempo Muestreo rápido Inicio de muestreo de período Tb Flanco descendente ... tiempo Tb / 2 Tb

Bit de arranque Bit de datos ( b0 ) TbRx ... TbRx / 2 tiempo TbTx TbTx

TbTx + dTbTx TbTx + dTbTx 2 TbTx TbTx Bit de arranque Bit de datos ( b0 ) TbTx + dTbTx ... tiempo TbTx + dTbTx 2 TbTx TbTx

7(TbTx + dTbTx) 2 5(TbTx + dTbTx) 2 3(TbTx + dTbTx) (2b -1)(TbTx + dTbTx) 2 2 TbTx + dTbTx 2 Muestreos b0 bn 1 tiempo b bits

TbTx + dTbTx TbTx + dTbTx = 2 2 2 b bits Instante de muestreo correcto Error o desplazamiento del Instante de lectura Muestreos b0 bn 1 tiempo b bits

3(TbTx + dTbTx) 3TbTx + 3dTbTx = 2 2 2 b bits Instante de muestreo correcto 3(TbTx + dTbTx) 3TbTx + 3dTbTx = 2 2 2 Error o desplazamiento del Instante de lectura Muestreos b0 bn 1 tiempo b bits

(2b -1)(TbTx + dTbTx) (2b-1)TbTx + (2b-1)dTbTx = 2 2 2 b bits Instante de muestreo correcto (2b -1)(TbTx + dTbTx) (2b-1)TbTx + (2b-1)dTbTx = 2 2 2 Error o desplazamiento del Instante de lectura Muestreos b0 bn 1 tiempo b bits

(2b-1)dTbTx TbTx < 2 2 TbTx TbTx 2 2 Error o desplazamiento del Instante de lectura máximo Desplazamiento máximo para lectura sin error de enmarque. (2b-1)dTbTx TbTx < 2 2 Instante de muestreo correcto TbTx TbTx 2 2 ( bit de parada ) tiempo

er TbTx (2b-1)dTbTx TbTx < 2 2 (2b-1)dTbTx TbTx < 2 2 dTbTx

Señales de estilulo para transmisor Salida de simulacion del transmisor

Entrada y lectura de caracter Entrada y lectura de carácter con error de enmarque

use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity xxx is port ( HCLK : in std_logic; RESET : in std_logic; WR : in std_logic; RD : in std_logic; D : in std_logic_vector (7 downto 0); -- bus de datos de entrada O : out std_logic_vector (7 downto 0); -- bus de datos de salida AD : in std_logic_vector (1 downto 0); TXD : out std_logic; RXD : in std_logic; CS : in std_logic; Z : inout std_logic_vector (8 downto 0) ); end xxx; ------------------------------------------------------------------------------------------------- architecture B2 of xxx is begin process (HCLK, RESET) variable BR : std_logic_vector ( 15 downto 0) := "1111111111111111"; variable RDR : std_logic_vector ( 10 downto 0) := "00000000000"; variable RSR : std_logic_vector ( 7 downto 0) := "00000000"; variable STR : std_logic_vector ( 3 downto 0) := "0000"; variable CR : std_logic_vector ( 15 downto 0) := "1111111111111111"; variable TDR : std_logic_vector ( 8 downto 0) := "000000000"; variable TSR : std_logic_vector ( 7 downto 0) := "00000000"; variable STT : std_logic_vector ( 3 downto 0) := "0000"; variable CT : std_logic_vector ( 15 downto 0) := "1111111111111111"; if RESET = '1' then --BR ( 15 downto 0 ):= "1111111111111111"; --VALOR INICIAL DEL BAUD TX Y RX BR ( 15 downto 0 ):= "0000000000010000"; RDR ( 10 downto 0 ):= "00000000000"; --REGISTRO DE RX RDR(8,9,10) FLAGS ( 8=LLENO, 9=OVR, 10=FE) RSR ( 7 downto 0 ):= "00000000"; --REGISTRO DE "DESPLAZAMIENTO" DE RX STR ( 3 downto 0 ):= "1111"; --ESTADO DE RX CR ( 15 downto 0 ):= "1111111111111111"; --CONTADOR DEL BAUD RX

begin if RESET = '1' then --BR ( 15 downto 0 ):= "1111111111111111"; --VALOR INICIAL DEL BAUD TX Y RX BR ( 15 downto 0 ):= "0000000000010000"; RDR ( 10 downto 0 ):= "00000000000"; --REGISTRO DE RX RDR(8,9,10) FLAGS ( 8=LLENO, 9=OVR, 10=FE) RSR ( 7 downto 0 ):= "00000000"; --REGISTRO DE "DESPLAZAMIENTO" DE RX STR ( 3 downto 0 ):= "1111"; --ESTADO DE RX CR ( 15 downto 0 ):= "1111111111111111"; --CONTADOR DEL BAUD RX TDR ( 8 downto 0 ):= "000000000"; --REGISTRO DE TX TDR(8) FLAG ( 1=LLENO) TSR ( 7 downto 0 ):= "00000000"; --REGISTRO DE "DESPLAZAMIENTO" DE TX STT ( 3 downto 0 ):= "1111"; --ESTADO DE TX CT ( 15 downto 0 ):= "0000000000000011"; --CONTADOR DEL BAUD TX Z ( 8 downto 0 )<= "000000000"; TXD <= '1'; else if HCLK = '1' and HCLK'event then -- Flanco de ascendente if CS = '0' then if WR = '0' then case AD is when "00" => TDR (7 downto 0) := D ( 7 downto 0 ); --CARGA EL TRANSMISOR TDR (8) := '1'; when "01" => BR (7 downto 0) := D ( 7 downto 0 ); --CARGA EL DIVISOR DE BAUD BAJO when others => BR (15 downto 8) := D ( 7 downto 0 ); --CARGA EL DIVISOR DE BAUD ALTO end case; if RD = '0' then O (7 downto 0) <= RDR ( 7 downto 0 ); --CARGA EL RECEPTOR RDR (10 downto 8) := "000"; O (7 downto 0) <= "111111"& TDR(8)& RDR(8); --CARGA EL DIVI DE BAUD BAJO BR (15 downto 8) := D ( 7 downto 0 ); --CARGA EL DIVI DE BAUD ALTO end if;

--O (7 DOWNTO 4) <= CTH (3 DOWNTO 0); --O (3 DOWNTO 0) <= STT (3 DOWNTO 0); case STR is when "1111" => if RXD='0' then STR := "1100"; CR ( 15 downto 0 ):= '0' & BR ( 15 downto 1 ); end if; when "1100" => if CR ( 15 downto 0 )="0000000000000000" then STR := "0000"; CR ( 15 downto 0 ):= BR ( 15 downto 0 ); else if CR ( 1 downto 0 )= "00" then if RXD='1' then STR := "1111"; when "1000" => RDR(9) := RDR(8) OR RDR(9); --error de sobrevelocidad RDR(10):= not(RXD); --error de enmarque RDR(8 downto 0):= '1'& RSR (7 downto 0 ); when others => RSR (7 downto 0 ):= RXD & RSR (7 downto 1 ); STR := STR+1; end case; --test p/ transmisión -- Z(3 downto 0)<= STR (3 downto 0 ); -- Z(7 downto 4)<= STT (3 downto 0 ); -- Z(8)<= RDR(8); --test p/ recepción Z(3 downto 0)<= STR (3 downto 0 ); Z(8 downto 6)<= RDR (10 downto 8 ); Z(5 downto 4)<= "00";

if (CT = "0000000000000000")OR(STT = "1111") then --BAUD RATE TX CT(15 downto 0) := BR(15 downto 0); case STT is --TRANSMISOR when "0000" => TXD <= '0'; STT := STT +1; when "0001" => TXD <= TSR(0); when "0010" => TXD <= TSR(1); when "0011" => TXD <= TSR(2); when "0100" => TXD <= TSR(3); when "0101" => TXD <= TSR(4); when "0110" => TXD <= TSR(5); when "0111" => TXD <= TSR(6); when "1000" => TXD <= TSR(7); when "1001" => TXD <= '1'; if TDR(8) = '1' then TSR( 7 downto 0) :=TDR( 7 downto 0); TDR(8) := '0'; STT := "0000"; else end if; when others => STT := "0001"; STT := "1111"; end case; --FIN DE TRANSMISOR

end if; CT := CT-1; CR := CR-1; end process; end B2;

F I N