Descargar la presentación
La descarga está en progreso. Por favor, espere
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
Presentaciones similares
© 2024 SlidePlayer.es Inc.
All rights reserved.