La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Interfaces de entrada / salida

Presentaciones similares


Presentación del tema: "Interfaces de entrada / salida"— Transcripción de la presentación:

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

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

3 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;

4 architecture B2 of Salida is
begin process (HCLK, RESET) if RESET = '1' then O ( 7 downto 0 )<= " "; 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;

5 Estimulo para test del puerto de salida

6 Simulación – Puerto de salida

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

8 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;

9 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;

10 Estimulo – Puerto de entrada

11 Simulación – Puerto de entrada

12 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)

13 a f b g e c p d

14 ÁNODOS CÁTODO COMÚN ÁNODOS

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

16 ÁNODOS 5. 8. 8. 8. KHH KMH KML KLL ULN2003

17 ÁNODOS 8. 3. 8. 8. KMH KML KLL ULN2003

18 ÁNODOS 8. 8. 9. 8. KMH KML KLL ULN2003

19 ÁNODOS 8. 8. 8. 6. KMH KML KLL ULN2003

20 ;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 , db 3, 2 ; , db 5, 4 ; , db 7, 8 ;MSD; ;PORT_A : Etiqueta que especifica la dirección del puerto del display PORT_A equ XXXX

21 ;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 , db 3, 2 ; , db 5, 4 ; , db 7, 8 ;MSD; ;PORT_A : Etiqueta que especifica la dirección del puerto del display PORT_A equ XXXX STATUS OFFSET incrementa 1 BUFFER 1 = 3 2 = 5 4 = 7 8 =

22 ;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

23 ;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

24 ;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 = 3 STATUS 2 = 5 4 = 7 8 =

25 ;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

26 ;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

27 ;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

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

29 TECLADO Entradas 1 Salidas

30 TECLADO 1 Entradas 1 Salidas

31 TECLADO Entradas 1 Salidas

32 TECLADO Entradas 1 Salidas

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

34 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)

35 Teclado C0 C1 Entradas C2 C3 Q0 Q1 Teclas Q2 Q3

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

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

38 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

39 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

40 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;

41 architecture B2 of Registro is
Begin process (HCLK, RESET) variable REGISTRO : std_logic_vector (7 downto 0) := " "; 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;

42 Estímulo para test de registro interno

43 Salida del test de registro interno

44 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

45 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;

46 architecture B2 of PWM is
Begin process (HCLK, RESET) variable REGISTRO : std_logic_vector (7 downto 0) := " "; variable CICLO : std_logic_vector (7 downto 0) := " "; variable CONTADOR : std_logic_vector (7 downto 0) := " "; 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"

47 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 = " " then CICLO := REGISTRO; end process; end B2;

48 Test de puerto PWM

49 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

50 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

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

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

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

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

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

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

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

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

59 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

60 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

61 ; 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

62 ; 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

63 entity IOP is port ( HCLK : in std_logic; RESET : in std_logic; CS : in std_logic; AD0 : in std_logic; = 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) :=" "; -- 0 = entrada variable DAT : std_logic_vector ( 7 downto 0) :=" "; if RESET = '1' then ES ( 7 downto 0 )<= "ZZZZZZZZ"; DDR ( 7 downto 0 ) := " "; DAT ( 7 downto 0 ) := " "; 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;

64 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;

65 Estímulo para test de puerto entrada-salida programable

66 Simulación 1 – Puerto de entrada-salida programable

67 Simulación 2 – Puerto de entrada-salida programable

68 Comunicación Serie Asincrónica (puerto serie)

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

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

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

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

73 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

74 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

75 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

76 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

77 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

78 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

79 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

80 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

81 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”

82 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”

83 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: Paridad PAR => (6 unos, número par) Paridad IMPAR => (5 unos, número impar)

84 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

85 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)

86 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

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

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

89 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

90 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

91 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

92 (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

93 (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

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

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

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

97 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) := " "; variable RDR : std_logic_vector ( 10 downto 0) := " "; variable RSR : std_logic_vector ( 7 downto 0) := " "; variable STR : std_logic_vector ( 3 downto 0) := "0000"; variable CR : std_logic_vector ( 15 downto 0) := " "; variable TDR : std_logic_vector ( 8 downto 0) := " "; variable TSR : std_logic_vector ( 7 downto 0) := " "; variable STT : std_logic_vector ( 3 downto 0) := "0000"; variable CT : std_logic_vector ( 15 downto 0) := " "; if RESET = '1' then --BR ( 15 downto 0 ):= " "; --VALOR INICIAL DEL BAUD TX Y RX BR ( 15 downto 0 ):= " "; RDR ( 10 downto 0 ):= " "; --REGISTRO DE RX RDR(8,9,10) FLAGS ( 8=LLENO, 9=OVR, 10=FE) RSR ( 7 downto 0 ):= " "; --REGISTRO DE "DESPLAZAMIENTO" DE RX STR ( 3 downto 0 ):= "1111"; --ESTADO DE RX CR ( 15 downto 0 ):= " "; --CONTADOR DEL BAUD RX

98 begin if RESET = '1' then --BR ( 15 downto 0 ):= " "; --VALOR INICIAL DEL BAUD TX Y RX BR ( 15 downto 0 ):= " "; RDR ( 10 downto 0 ):= " "; --REGISTRO DE RX RDR(8,9,10) FLAGS ( 8=LLENO, 9=OVR, 10=FE) RSR ( 7 downto 0 ):= " "; --REGISTRO DE "DESPLAZAMIENTO" DE RX STR ( 3 downto 0 ):= "1111"; --ESTADO DE RX CR ( 15 downto 0 ):= " "; --CONTADOR DEL BAUD RX TDR ( 8 downto 0 ):= " "; --REGISTRO DE TX TDR(8) FLAG ( 1=LLENO) TSR ( 7 downto 0 ):= " "; --REGISTRO DE "DESPLAZAMIENTO" DE TX STT ( 3 downto 0 ):= "1111"; --ESTADO DE TX CT ( 15 downto 0 ):= " "; --CONTADOR DEL BAUD TX Z ( 8 downto 0 )<= " "; 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;

99 --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 )=" " 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";

100 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

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

102 F I N


Descargar ppt "Interfaces de entrada / salida"

Presentaciones similares


Anuncios Google