seminario de titulaciÓn “procesamiento digital de seÑales
TRANSCRIPT
SEMINARIO DE TITULACIÓN “PROCESAMIENTO DIGITAL DE SEÑALES”
SISTEMA DIGITAL PARA COMUNICACIONES EN FPGA
T E S I N A
Que para obtener el grado de:
INGENIERO EN COMUNICACIONES Y ELECTRÓNICA.
Presentan:
ISAEL JAIMES GONZALEZ
ASESORES:
M. en C. BRAULIO SANCHEZ ZAMORA M. en C. ORLANDO BELTRÁN NAVARRO.
México, D. F. Mayo de 2008.
INSTITUTO POLITÉCNICO NACIONAL ESCUELA SUPERIOR DE INGENIERÍA MECÁNICA Y ELÉCTRICA
UNIDAD CULHUACAN INGENIERÍA EN COMUNICACIONES Y ELECTRÓNICA
INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE INGENIERÍA MECÁNICA ELÉCTRICA
UNIDAD CULHUACAN
TESINA
SISTEMA DIGITAL PARA COMUNICACIONES EN FPGA
QUE PRESENTAN LOS CC.
ISAEL JAIMES GONZALEZ
M. en C. Orlando Beltrán Navarro M. en C. Braulio Sánchez Zamora
Coordinador del seminario Asesor
M. en C. Héctor Becerril Zamora Jefe de Carrera de ICE
CONTENIDOCONTENIDOCONTENIDOCONTENIDO
IntroducciónIntroducciónIntroducciónIntroducción 5
ObjetivosObjetivosObjetivosObjetivos 6
JustificaciónJustificaciónJustificaciónJustificación 6
CAPITULOCAPITULOCAPITULOCAPITULO I I I I.... Tecnología FPGA Tecnología FPGA Tecnología FPGA Tecnología FPGA
RESUMEN 7
1.1 FPLD (Field Programmable Logic Devices). 7
1.1.1 Características de los FPLD. 9
1.1.2 Tipos de FPLD’s. 12
1.1.2.1 CPLD 15
1.1.2.2 Static RAM FPGAs 16
1.1.2.3 Antifuse FPGA 17
1.2 FPGA. 18
1.2.1 Ventajas de los FPGA’s. 19
1.2.2 Desventajas de los FPGA’s. 20
1.2.3 Comparando arquitecturas FPGA 21
1.2.4 El flujo de diseño en el FPGA. 23
CAPÌTULO II. Elementos DigitalesCAPÌTULO II. Elementos DigitalesCAPÌTULO II. Elementos DigitalesCAPÌTULO II. Elementos Digitales
RESUMEN 29
2.1 Elementos biestables 29
2.1.1 Latchs y Flip-Flops 30
2.1.2 Latch S-R 31
2.1.3 Latch R-S &&&&&& 32
2.1.4 Latch S-R con habilitación 33
2.1.5 Latch D 34
2.1.5.1 Flip-flop D con disparo de flanco 35
2.1.5.2 Flip-flop D con dispara de flanco con de habilitación. 38
2.2 Registros de corrimiento 39
2.2.1 Aplicaciones de los registros de corrimiento. 42
2.2.2 Contadores de registro de corrimiento. 43
2.2.2.1Contador Anillo 44
2.2.2.2 Contador Johnson 44
2.2 Registro de Corrimiento Retroalimentado (FSR - FEEDBACK SHIFT
REGISTER).
45
2.4 LFSR (Registro de Desplazamiento con Retroalimentación Lineal). 46
2.5 Implementación de los LFSR. 48
2.5.1 Implementación de Galois. 48
2.5.2 Implementación de Fibonacci 48
CAPITULO CAPITULO CAPITULO CAPITULO III III III III. . . . Sistemas CriptográficosSistemas CriptográficosSistemas CriptográficosSistemas Criptográficos
RESUMEN 50
3.1 Cifrado de flujo 50
3.1.1 Estructura general 51
3.1.2 Ventajas del cifrado de flujo sobre el cifrado de bloque 52
3.2 Generadores de secuencias pseudoaleatorias 53
3.2.1 Seguridad en los generadores de secuencias pseudoaleatorias 54
3.2.2 Tipos de generadores de secuencias pseudoaleatorias 54
3.3 Propiedades de las secuencias pseudoaleatorias 55
3.3.1 Postulados de Golomb 56
3.3.2 Complejidad lineal 56
3.4 Cifrado de flujo basado en LFSR 58
3.4.1 Esquema general del LFSR con configuración de Galois 59
CAPITULO ICAPITULO ICAPITULO ICAPITULO IVVVV. Detección de Errores. Detección de Errores. Detección de Errores. Detección de Errores por CRC por CRC por CRC por CRC
RESUMEN 61
4.1 Métodos de detección de errores 61
4.1.1 Paridad 62
4.1.2 Verificación de suma de bloque 64
4.1.3 Comprobación de redundancia cíclica (CRC) 66
4.2 Creando CRC 68
4.2.1 Detección de errores. 70
4.2.2 Calculo de CRC serial 72
4.2.3 Calculo del CRC en paralelo. 73
CAPÍTULO CAPÍTULO CAPÍTULO CAPÍTULO V.V.V.V. Diseño , Pruebas y Resultados Diseño , Pruebas y Resultados Diseño , Pruebas y Resultados Diseño , Pruebas y Resultados
RESUMEN 74
5.1 Lenguaje de descripción de hardware (VHDL) 74
5.1.1 Antecedentes 74
5.1.2 Definición 75
5.2 Construcción de LFSR. 77
5.2.1 Condiciones de los LFSR para la generación de secuencias
pseudoaleatorias
77
5.2.1.1 LFSR que genera una secuencia de longitud 2L-1. 78
5.2.1.2 LFSR controlado por el reloj y una señal de habilitación. 80
5.3 Generadores basados en el control de reloj. 82
5.3.1 Generador bilateral de control de paso (Bilateral Stop-and-Go
Generator).
82
5.3.1.1 Diseño en VHDL del Generador bilateral de control de
paso
83
5.3.1.2 Resultados del generador bilateral de paso 84
5.4 Construcción del CRC-32 86
5.4.1 Diseño VHDL del CRC-32 87
5.4.2 Resultados del CRC-32 90
5.5 Construcción de los dispositivos para la transmisión y recepción de datos 91
CONCLUSIONES 95
TRABAJO A FUTURO 96
INDICE ACRONIMOS 97
BIBLIOGRAFÍA 98
Introducción Introducción Introducción Introducción
El presente escrito tiene como finalidad dar a conocer los elementos básicos e
indispensables que se utilizaran para el llevar acabo el proyecto denominado: “Sistema
digital para comunicaciones en FPGA”. El cual surgió con la necesidad de la eliminación
de errores de transmisión por ruido y la protección de la información en un medio de
comunicaciones.
La estructura de este escrito esta encaminada hacia la introducción de los conceptos
básicos que se manejaran durante la realización del trabajo. De forma mas concreta los
temas principales a tratar para el conocimiento teórico de este proyecto son la
programación en lenguaje VDHL, la tecnología programable FPGA, así como generadores
de secuencia pseudoaleatoria que están constituidos por Registros de Desplazamiento
Realimentados Linealmente (LFSR) y el código de redundancia cíclica (CRC).
Es importante señalar que los temas antes mencionados son extensos y que engloban
una gran cantidad de términos complejos; sin embargo para nuestros propósitos no es
necesario profundizar en esos temas, por lo que solamente resaltaremos los aspectos
convenientes y de trascendencia para nuestro proyecto y entendimiento de este.
JUSTIFICACION Y
OBEJTIVOS
Justificación.Justificación.Justificación.Justificación.
Este proyecto surge de la necesidad de dar a conocer, una de varias tecnologías que se
pueden utilizar en diferentes rubros con varias aplicaciones, como es el caso de la
tecnología FPGA aplicada para un enlace de comunicaciones punto a punto teniendo la
necesidad de implementar un sistema que nos brinde un alto nivel de confiabilidad y
seguridad para la transmisión de información entre estas dos terminales.
Durante muchos años el problema de la seguridad en la transmisión de datos, por
cualquier medio guiado, ha sido determinante para la creación de nuevas técnicas de
encriptación mas eficaces para resguardar nuestra información y evitar que se ha obtenida
por agentes externos. Otro factor importante para la transmisión de información es la
corrección de errores, ya que estos se presentan en todo canal de transmisión, debido
diferentes factores como el ruido (principalmente), temperatura, etc. A partir de estos
factores se elaborara un hardware capaz de proporcionarnos dichos aspectos.
Objetivo.Objetivo.Objetivo.Objetivo.
La finalidad del proyecto es la transmisión de información entre dos equipos terminales de
datos. La variante que existirá en esta transmisión, respecto a la transmisión tradicional,
será el uso de FPGA como dispositivos de acoplamiento entre los equipos terminales. Las
aplicaciones que se asignarán a los FPGA serán las de encriptación de información, lo
cual nos garantiza una transmisión segura y confiable. Además de la corrección de errores
de acuerdo con la norma de la CCITT (Comité Consultivo Internacional Telegráfico y
Telefónico) antiguo nombre del comité de normalización de las telecomunicaciones dentro
de la UIT ahora conocido como UIT-T.
Objetivos particulares.Objetivos particulares.Objetivos particulares.Objetivos particulares.
Los objetivos a desarrollar dentro de esta Tesina se describen a continuación:
• Desarrollar varios programas en VHDL; entre los que se encuentra el diseño de un
LFSR, generadores para cifrado de información y un CRC de 32 bits.
CAPÍTULO I
Capitulo I Tecnología FPGA
7
CAPITULO I. Tecnología FPGA.CAPITULO I. Tecnología FPGA.CAPITULO I. Tecnología FPGA.CAPITULO I. Tecnología FPGA.
Resumen.Resumen.Resumen.Resumen.
Este capitulo nos introduce al conocimiento de la tecnología FPGA, sus orígenes,
características de esta, ventajas y desventajas al hacer uso de esta tecnología así como la
flexibilidad que nos brinda esta para llevar acabo la el diseño, simulación e
implementación de sistemas complejos.
1.1 FPLD (Field Programmable Log1.1 FPLD (Field Programmable Log1.1 FPLD (Field Programmable Log1.1 FPLD (Field Programmable Logic Devices)ic Devices)ic Devices)ic Devices)
Los FPLDs representan un desarrollo relativamente en el campo de los circuitos VLSI.
Estos implementan miles de compuertas lógicas en estructuras multinivel. La estructura de
un FPLD, es similar a la de un MPLD (Mask-Programmable Logic Device), consiste de un
arreglo de celdas lógicas que pueden ser interconectadas por programación para la
implementación de diferentes diseños. La mayor diferencia entre un FPLD y una MPLD es
que un MPLD es programado usando técnicas de fabricación de circuitos integrados para
formar interconexiones de metal mientras que un FPLD es programado usando switches
programables eléctricamente similares a los tradicionales PLD (Programmable Logic
Devices). Un FPLD puede alcanzar numero de niveles de integración mucho mas grandes
que un PLD tradicional debido a su implementación lógica y arquitecturas de
enrutamiento. El primer PLD desarrollado para implementar circuitos lógicos fue el PLA
(Field-Programmable Logic Array). Este es realizado usando lógica AND-OR con varias
compuertas AND con entradas programables seguidas por una compuerta OR
programable. Las arquitecturas de enrutamiento de un PLA son muy simples con crossbar
ineficientes como estructuras en las cuales todas las salidas están conectadas a todas las
entradas a través de un switch. Como tal, los PLD son adecuados para implementar lógica
de dos niveles en forma de suma productos. El siguiente paso en el desarrollo de los
PLDs fue la introducción de dispositivos de arreglos lógicos programables (PLA) con un
solo nivel de programabilidad – compuertas AND programables seguidas por compuertas
OR fijas. En orden para permitir la implementación de circuitos secuenciales, las
compuertas OR son usualmente seguidas por Flip-Flops. Una variante de la arquitectura
Capitulo I Tecnología FPGA
8
PLD básica aparece en muchos FPLDs hoy en día. Múltiples FPLD combinan sencillos
PLDs en un solo chip usando estructuras interconectadas programables. Hoy tales
combinaciones son conocidas como Complex PDL (CPDLs) con capacidades
equivalentes a diez de un FPDL. Las arquitecturas de enrutamiento de un FPDL
proporcionan un enrutamiento mas eficiente tipo MPLD donde cada conexión típica pasa a
través de varios switches. La lógica FPLD es implementada usando múltiples niveles de
compuertas de mas bajo fan-in los cuales a menudo son mas compactas que
implementaciones de dos niveles. La construcción de un FPLD con muy alta capacidad
requiere un diferente enfoque, muy similar a los conjuntos de compuertas programables
por mascaras (Mask-Programable Gate Arrays – MPGAs) que son chips lógicos de muy
alta capacidad de propósito general. Como un MPGA consiste de unos conjuntos de
transistores prefabricados, estos son personalizados por logica del usuario por medio de
las uniones de cables, necesitando la personalización durante la fabricación del chip. Un
FPLD el cual es de campo programable equivalente de un MPGA es conocido como un
FPGA. El usuario final configura un FPGA por la programación. En este texto nosotros
usamos el FPLD como una expresión que cubre todos los dispositivos lógicos
programables en campo incluyendo CPLDs y FPGAs.
¿Por qué un FPLD? Los FPLD pueden ser programados en segundos mejor que en
semanas, en minutos que en los meses requeridos para la producción de partes
programadas por mascaras. Un fabricante de FPLD realiza un solo dispositivo estándar
donde la programación es hecha por los usuarios finales en su lugar de trabajo. Estos
dispositivos actualmente están disponibles en densidades sobre 100,000 compuertas en
un solo dispositivo. Este tamaño es bastante largo para implementar algunos sistemas
digitales en un solo chip y sistemas largos pueden ser implementados en múltiples FPLD
sobre un PCB estándar o en forma de Módulos Multi-Chip (Multi-Chip Modules – MCM).
Hasta hace poco solo dos opciones principales fueron disponibles para diseñadores de
sistemas digitales.
• Primero, podrían usar circuitos de integración a pequeña escala (Small-Scale
Integrated - SSI) y integración a media escala (Médium-Scale Integrated - MSI)
para implementar una cantidad relativamente pequeña de lógica con un gran
numero de dispositivos.
Capitulo I Tecnología FPGA
9
• Segundo, podrían usar unos conjuntos de compuertas enmascaradas
programables (Mask-Programable Gate Arrays – MPGA) o simplemente un arreglo
de compuertas para implementar diez o cien o mil compuertas lógicas o un solo
circuito integrado en lógica multinivel con alambrado entre los niveles lógicos. Este
alambrado de lógica es construido durante el proceso de manufacturación
requiriendo una mascara para dicho propósito.
Como solución intermedia varios tipos de sencillos PLD estaban disponibles como (PLA,
PAL). Un PLD simple es un dispositivo lógico de propósito general capaz de implementar
la logica de diez o cien de circuitos SSI y realizar funciones lógicas en el campo usando
hardware de programación barata [1].
1.1.1 Características de los FPLD1.1.1 Características de los FPLD1.1.1 Características de los FPLD1.1.1 Características de los FPLD
Los FPLDs ofrecen los beneficios de PLDs y MPLDs. También permiten la
implementación de miles de compuertas lógicas en un solo circuito y poder ser
programados por diseñadores en sitios que no requieran procesos de manufacturación
costosos. La figura 1.1 proporciona algunas de las principales opciones actualmente
usadas para diseño de sistema digital y mostrar porque consideramos los FPLDs como la
tecnología más prometedora para la implementación de un número muy grande de
sistemas digitales. Así como las ventajas de los FPLD sobre otros tipos de lógica
disponible.
Capitulo I Tecnología FPGA
10
Figura 1.1 Opciones para tecnologías de dispositivos diferentes
Dadas las características anteriores las orientaremos a la comparación de FPLD y MPLD
como las tecnologías más aceptables para diseño de sistema digital complejo así como la
implementación.
Velocidad. Los FPLDs ofrecen dispositivos que operan a velocidades excediendo a lo 200
MHz en algunas aplicaciones. Obviamente, las velocidades son más altas que en
sistemas implementados por circuitos SSI, pero aun mas baja que la velocidad de los
MPDLs. La principal razón para esto llega a ser por la programabilidad del FPLD, devido a
los puntos pogramables interconectados que agregan resistencia al camino interno,
mientras que los puntos de programación en el mecanismo de interconexión agregan
capacitancia al camino interno.
Densidad. Así para dar un número de puertas el tamaño de un MPLD y un FPLD están
dadas por la cuenta de I/O también la capacidad de estos puede llegar a ser igual
Tiempo de desarrollo. El desarrollo del FPLD es seguido por el desarrollo de las
herramientas para diseñar sistemas. Todas esas herramientas pertenecen a herramientas
Capitulo I Tecnología FPGA
11
de alto nivel económico jamás para pequeños diseños. Este tiempo de desarrollo incluye
principalmente realización de prototipos y simulación mientras las otras fases, incluyen la
generación del modelo de prueba tiempo de consumo, la oblea de fabricación, ensamblaje
y las pruebas son evitadas. Esto conduce a veces al desarrollo típico para el diseño del
FPLD pausando en días o semanas, en contraste al MPLD a veces el desarrollo toma
muchas semanas o meses.
Realización de prototipos y tiempo de simulación. Mientras el proceso de manufacturación
de MPLD toma semanas o meses desde la finalización del diseño hasta la entrega de las
partes finalizadas, los FPLD solo requieren finalización del diseño. Las modificaciones
para corregir un diseño de flujo son rápidamente y sencillamente hechas suministradas en
un corto tiempo esto da ventaja para el mas rápido desarrollo del producto y en corto
tiempo a mercado de nuevos productos basados en FPLD. Un prototipo FPLD proporciona
bajo costo, mientras que los MPLD proporcionan un bajo costo en cuanto el volumen de
producción
La verificación apropiada de un MPLD requiere que los usuarios para verificar sus diseños
por simulación extensa antes de la introducción de fabricación de todos los
inconvenientes de la velocidad / exactitud, compensación conectadas con alguna
simulación. En contraste las simulaciones de los FPDLs son mucho mas simples debido al
hecho que las características de temporizacion y los modelos son conocidos de antemano.
Tiempo de fabricación. Los usuarios no requieren que escriban pruebas de diseño
específicas porque la prueba del fabricante verifica que cada FPLD funcione para todos
los posibles diseños implementados. Las consecuencias de la fabricación de chips de
ambas categorías es obvia. Una vez verificado, el FPLD puede ser fabricado en cualquier
cantidad y entregar como partes completamente probadas listas para la implementación
del diseño, en un MPLD requiere una preparación de producción separada para cada
nuevo diseño.
Modificaciones futuras. En vez de personalizar la parte en el proceso de fabricación como
para los MPLD y FPLS estos son personalizados por modificaciones eléctricas. La
personalización eléctrica toma milisegundos o minutos y puede aun ser realizado sin
dispositivos especiales con dispositivo s de programación de bajo costo. Aun mas, este
puede ser realizado en un sistema, que significa la parte que puede ser impresa en la
tarjeta del circuito, reduciendo el peligro de daño debido a una orientación incorrecta. En
Capitulo I Tecnología FPGA
12
otro aspecto, cada modificación del diseño para ser implementado en un MPLD requiere
una mascara personalizada que cuesta muchos miles de dólares que solo puede ser
costeadas por el numero total de unidades fabricadas.
Seguridad de inventario. Una característica importante de los FPLD es el bajo costo de
inventario, similar a las partes SSI y MSI. Desde la fabricación actual esta hecha en el
momento de programar un dispositivo, la misma parte puede ser usada para diferentes
funcionalidades y diferentes diseños. Esto no se encuentra en un MPLD desde la
funcionalidad y aplicación están fijos aun solo producto. También la decisión en el
volumen de los MPLD debe ser hecha por adelantado de la fecha de entrega, teniendo en
cuenta la probabilidad de que también algunas o insuficientes partes sean ordenadas a
producir. Generalmente los FPLD son conectados con muy bajo riesgo de diseño en
términos de dinero y retraso.
Desarrollo de herramientas usadas para diseños en FPLD usualmente integran el rango
de entrada del diseño, procedimiento y herramientas de simulación la cuales permiten una
fácil reusabilidad de todas las partes de un diseño correcto.
Costo. El mayor beneficio de un diseño barato en un MPLD es el bajo costo en cantidades
grandes. Los FPLD tienen mucho menor costo desarrollo y modificación del diseño,
incluyendo cambios iniciales en el NRE, utilidades y costos de pruebas. Sin embargo, la
gran área sin usarse y la baja densidad del circuito resultan en costos de fabricación por
unidad altos [1].
1.1.2 Tipos de FPLD’s1.1.2 Tipos de FPLD’s1.1.2 Tipos de FPLD’s1.1.2 Tipos de FPLD’s
La arquitectura general de un FPLD se muestra en la figura 1.2 Un FPLD típicamente
consiste de un numero de celdas lógicas que son usadas par la implementación de
funciones lógicas. Las celdas lógicas son organizadas en forma de matriz. La
interconexión de los recursos se conectan a las entradas y salidas de una celda lógica tan
bien como bloques de entrada / salida usadas para conectar un FPLD con el mundo
exterior.
Capitulo I Tecnología FPGA
13
Figura 1.2 Arquitectura de un FPLD
A pesar de la misma estructura general, implementaciones concretas de FPLDs difieren
entre los competidores principales. Debido en cuanto al acceso de la programabilidad del
circuito, estructura interna de la celda lógica, bloques de entrada / salida y mecanismos de
enrutamiento.
Una celda lógica de un FPLD puede ser un transistor o un microprocesador complejo.
Típicamente es capaz de implementación combinacional y funciones lógicas secuenciales
de diferentes complejidades.
Los FPLD comerciales emplean celdas lógicas que son basadas en uno o mas de las
siguientes partes como son un par de transistores, compuertas pequeñas básicas (NANDs
o XORs de dos entradas), multiplexores, tablas look-up, estructuras AND-OR con wide-
fan-in.
Tres tecnologías de programación son asociadas con costos de área y redimiendo,
comúnmente son usados para implementar el switch programables par los FPLDs. Esos
son:
Capitulo I Tecnología FPGA
14
• Memoria estática de acceso variable (Static Random Access Memory-SRAM),
donde el switch es un transistor controlado por el estado de un bit SRAM.
• EPROM, donde el switch es un transistor de compuerta flotante que puede ser
apagado por un cambio de inyección en la compuerta flotante.
• Antifuse, en el cual, cuando es programado eléctricamente, forman un camino bajo
en resistencia.
En todos los casos, un switch programable ocupa un área grande y muestra una alta
resistencia parásita y capacitancia que un contacto típico usado en un MPLDs. Un área
adicional también es requerida para programación de circuiteria, resultando una densidad
mayor y una velocidad muy baja de FPLDs comprada con un MPLD.
Una arquitectura de enrutamiento de un FPLD incorpora segmentos de unión de varias
longitudes las cuales pueden ser interconectadas con switches eléctricamente
programables. La densidad lograda por un FPLD depende del numero de uniones
incorporadas. Si el numero de los segmentos de uniones son insuficientes, solo una
fracción pequeña de las celda lógica puede ser utilizada. Un excesivo numero de los
segmentos de uniones es un área desperdiciada. La distribución de los segmentos de
unión afecta grandemente a la densidad como al rendimiento de un FPLD. Estos pueden
ser optimizados eligiendo la apropiada gradualidad y funcionalidad de la celda lógica.
Como diseñando arquitecturas de enrutamiento para lograr un alto grado de enrutabilidad
mientras se minimizan los números de los switches [1].
Si la tecnología de programación y el desarrollo de la arquitectura son combinadas, tres
principales categorías de FPLDs abarcaríamos como son:
• Dispositivo complejo lógico programable (Complex Programable Logic Device-
CPLD).
• Static RAM Programmable Logic Arrays, o simplemente FPGAs
• FPGAs difusos.
Capitulo I Tecnología FPGA
15
1.1.21.1.21.1.21.1.2.1.1.1.1 CPLDs.CPLDs.CPLDs.CPLDs.
La arquitectura típica de un CPLD se muestra en la figura 1.3. El usuario crea
interconexiones para programara al el EPROM o transistores EEPROM para formar varios
fan-in en las compuertas.
Los bloques de función (Function Block-FB) son similares para un solo PLD de dos
niveles. Cada FB contiene un PLD con un arreglo AND que se suministran a las
macroceldas (macrocells - MC) el arreglo AND consiste de un numero de términos del
producto. El usuario programa el arreglo AND encendiendo los transistores de la EPROM
que permiten seleccionar las entradas hasta ser incluidas en un termino del producto.
Figura 1.3 Arquitectura típica de un CPLD
Una macrocelda incluye una compuerta OR para completar la lógica AND-OR y también
incluye registros y una pista de I/O. Este también puede contener celdas EPROM
adicionales para multiplexores de control que seleccionan un registro o una salida no
registrada y decide si el resultado de la macrocelda es la salida en la pista de I/O en esa
localización. Las salidas de las macroceldas son conectadas con entradas de FB
adicionales o como las entradas en un mecanismo universal de interconexión (universal
interconnect mechanism – UIM) global que llegan a todos los FB en el chip. Las
Capitulo I Tecnología FPGA
16
macroceldas FB, y los mecanismos de interconexión varían de un producto a otro dando
un rango de capacidad de dispositivos y velocidades.
1.1.2.2 1.1.2.2 1.1.2.2 1.1.2.2 Static RAM FPGAs.Static RAM FPGAs.Static RAM FPGAs.Static RAM FPGAs.
En un SRAM FPGA, las celdas de memoria estática guardan el programa que representa
el diseño del usuario. Los SRAM FPGA implementan lógica como tablas lookup (lookup
tables - LUTs) hechas de celdas de memoria en las que las entradas de la función
controlan las líneas de direccionamiento. Cada LUT de 2n celdas de memoria implementan
cualquier función de “n” entradas. Una o mas LUT, se unen con flip flops para formar un
bloque lógico (logic block – LB). Los LB están organizados en un conjunto de dos
dimensiones con segmentos de interconexión en canales como se muestra en la figura
1.4.
Figura 1.4 Arquitectura típica de una SRAM FPGA
Capitulo I Tecnología FPGA
17
Los segmentos de interconexión se conectan a los pines de los LB en los canales y otros
segmentos en las cajas de interconexión, a través de transistores de paso controlados por
celdas de memoria de configuración. Las cajas de interconexión, debido a su complejidad
alta, no son interconexiones de crossbar entero.
Un programa SRAM FPGA consiste de una simple programa de palabra larga. La
circuiteria del chip carga esta palabra, leyéndola de forma serial de una memoria externa
todo el tiempo que este encendida es aplicada al chip. Los bits del programa colocan los
valores de todas las celdas de memoria de configuración en el chip. Así chocando los
valores de las LUT y seleccionado cual segmento conecta con cada uno al otro. Los
SRAM FPGA son intrínsicamente reprogramables. Estos pueden ser fácilmente
actualizados proporcionados por los diseñadores con nuevas capacidades tales como la
reconfigurabilidad.
1.1.2.3 1.1.2.3 1.1.2.3 1.1.2.3 Antifuse FPGAAntifuse FPGAAntifuse FPGAAntifuse FPGA
Un Antifuse es un dispositivo de dos terminales que cuando es expuesto a muy alto voltaje
forma un corto circuito permanente entre los nodos de cualquiera de las dos terminales.
Los antifuse individuales son pequeños, permitiendo una arquitectura basada en base
antifuse para tener miles de millones de antifuses, un FPGA antifuse, se encuentra
ilustrado en la figura 1.5, usualmente consiste de raíces de elementos lógicos
configurables con canales de interconexión entre ellos como los tradicionales arreglos de
compuertas.
Figura 1.5 Arquitectura FPGA Antifuse
Capitulo I Tecnología FPGA
18
Las termínales de los bloques lógicos (logic block – LB) se amplían en el canal. Un LB es
usualmente una simple red de compuerta-nivel, la cual el usuario programa mediante la
conexión de sus terminales de entrada o para la interconexión de redes. Hay antifuses en
toda la unión a unión de los puntos de interconexión en el canal y en toda la unión a unión
de los puntos de interconexión cuando se interceptan los canales.
1.2 FPGA1.2 FPGA1.2 FPGA1.2 FPGA
Un FPGA (Arreglos de compuertas programables en el campo) es un dispositivo múltinivel
programable de propósito general. Integra una gran cantidad de dispositivos lógicos
programables en un chip. El tamaño y velocidad de los FPGA’s es equiparable a los
Circuitos Integrados para Aplicaciones Específicas (ASIC’s), pero los FPGA’s son más
flexibles y su ciclo de diseño es más corto [2].
Un FPGA es un a arreglo de bloques lógicos programables colocados en una
infraestructura de interconexiones programable; es posible programar la funcionalidad de
los bloques lógicos, las interconexiones entre bloques y las conexiones entre entradas y
salidas. Un FPGA es programable a nivel hardware, por lo que proporciona las ventajas de
un procesador de propósito general y un circuito especializado.
La aplicación de los FPGA va más allá de la implementación de lógica digital, pueden ser
utilizados para la implementación de arquitecturas específicas. Los sistemas basados en
FPGA’s proporcionan un mejor desempeño que sus correspondientes implementaciones
en software. Las aplicaciones que requieren de un gran numero de operaciones simples
son adecuadas para su implementación en FPGA’s puesto que un elemento de
procesamiento puede diseñarse para efectuar esta operación y varias instancias de este
pueden reproducirse para llevar a cabo procesamiento paralelo [2].
Para implementar diseños con miles o decenas de miles de compuertas, los diseñadores
pueden valerse de Arreglos de compuertas programadas por máscaras (MPGAs),
comúnmente llamados arreglos de compuertas. Un MPGA puede implementar decenas de
miles e incluso cientos de miles de compuertas en un chip. Un MPGA consiste de una
base de transistores prediseñados con sus cableados. El cableado es construido durante
el proceso de fabricación, por esto cada diseño necesita de mascaras adecuadas para el
cableado. El desarrollo de las mascaras para los MPGAs eleva el costo para volúmenes
Capitulo I Tecnología FPGA
19
pequeños de producción. Los tiempos típicos de desarrollo de estos dispositivos son de 4
a 6 semanas.
Los FPGA ofrecen los beneficios de los arreglos de lógica programable y arreglos de
compuertas. De manera similar a los MPGA’s, los FPGA’s implementan miles de
compuertas lógicas en un circuito integrado. Análogamente a los PLD’s, los FPGA’s son
programados por los diseñadores reduciendo los tiempos y costos. Estas ventajas han
hecho que los FPGA se popularicen [2] [3].
Implementación Instantánea. . . . Debido a que el cableado en memoria es usualmente corto,
los diseños pueden efectivamente ser implementados “instantáneamente”. Esto es una
distinción del convencional diseño VLSI, donde toma varias semanas desde el diseño a la
fabricación.
Reconfiguración Dinámica. Con algunas arquitecturas parte del FPGA puede ser
configurado en tiempo de ejecución. Los circuitos podrían incluso ser auto modificados.
Seguridad del Diseño. . . . La configuración de un FPGA desaparece cuando el chip es
apagado. Existe un rango de aplicaciones donde este nivel adicional de seguridad del
diseño es importante. Sin embargo, existe otra familia de FPGA’s donde la configuración
puede programarse una sola vez permaneciendo de manera fija.
1.2.1 Ventajas de los FPGA’s.1.2.1 Ventajas de los FPGA’s.1.2.1 Ventajas de los FPGA’s.1.2.1 Ventajas de los FPGA’s.
Costos de Tooling bajos. Cada diseño a ser implementado en un MPGA requiere
desarrollar una máscara de acuerdo a los patrones de cableado. El costo de cada
máscara es de alrededor de miles de dólares, costo que debe ser amortizado sobre el
número total de unidades fabricadas. Entre mas unidades sean construidas se reduce el
impacto del costo de desarrollo. Los FPGA’s no requieren de este proceso, por lo que no
tiene asociado el costo, además son excelentes para volúmenes relativamente pequeños
(1000 a 10000 unidades).
Rápido Desarrollo. El proceso de manufactura de MPGA’s toma varias semanas desde la
finalización del diseño hasta la liberación de las partes desarrolladas. Un FPGA puede ser
Capitulo I Tecnología FPGA
20
programado en minutos por el usuario. En un FPGA, una modificación para corregir el
diseño puede realizarse rápidamente y de manera barata. El rápido desarrollo produce a
su vez que la aparición de nuevos productos sea mas rápida y reduce el tiempo para
venta de un nuevo producto FPGA.
Verificación Efectiva del Diseño. Debido a los costos de la ingeniería no recurrente (NRE)
y retardos de manufactura, los usuarios de MPGA’s deben verificar sus diseños por
simulación extensiva antes de la fabricación. Para verificar la funcionalidad del diseño en
un sistema, debe simularse durante grandes periodos de tiempo. Los FPGA’s reducen
estos problemas. En lugar de simular por grandes periodos de tiempo, los usuarios de
FPGA’s pueden elegir realizar una verificación en el circuito. Los diseñadores pueden
implementar el diseño y usar partes funcionales como un prototipo. El prototipo opera a
velocidad completa y con excelente precisión del tiempo.
Bajo Costo de Pruebas. Todos los circuitos integrados deben ser probados para verificar
la fabricación correcta y empaquetamiento. El test es diferente para cada diseño. Los
diseños implementados en un MPGA incurren en costos asociados, además que el
desarrollo de test efectivos es difícil, por lo que puede ocurrir que algunos chips
defectuosos pasen los tests y solo hasta que fallan en un sistema es como se detectan los
errores generando mas costos. En contraste, el programa test es el mismo para todos los
diseños FPGA’s. Los programas test de los fabricantes verifican que cada FPGA pueda
funcionar para cualquier posible diseño que pueda ser
implementado en él. Los usuarios solo necesitan test específicos para sus arquitecturas
programadas [2].
1.2.2 Desventajas de los FPGA’s.1.2.2 Desventajas de los FPGA’s.1.2.2 Desventajas de los FPGA’s.1.2.2 Desventajas de los FPGA’s.
FPGA’s tienen en el chip un área de programación que no puede ser usada por los
diseñadores. Los switches programables incrementan el retardo de la señal agregando
resistencia y capacitancia a las interconexiones. Como resultado, los FPGA’s son mas
grandes y lentos que sus equivalentes MPGA’s.
Tamaño del chip y costo. Algunos FPGA’s son alrededor de 10 veces más grandes para la
misma capacidad de compuertas que sus equivalentes MPGA, y son
correspondientemente mas caros. Para
Capitulo I Tecnología FPGA
21
diseños mayores, los diseñadores deben particionar el diseño en varios FPGA’s o mudar
el diseño a un MPGA.
Velocidad de circuitería. Las conexiones en un FPGA se retardan por la circuitería de
programación. Los puntos de interconexión programables a lo largo de una ruta de
cableado agregan resistencia a la ruta. Todos los puntos de programación en las
interconexiones agregan capacitancia a las rutas internas. Finalmente debido a que mas
área es necesaria para el mismo monto de lógica, líneas de interconexión entre
dispositivos lógicos es mas grande. Líneas mas largas tienen mayor resistencia y
capacitancia. Los FPGA’s actuales son 2 o 3 veces más lentos que MPGAs [2].
1.2.3 Comparando arquitecturas FPGA 1.2.3 Comparando arquitecturas FPGA 1.2.3 Comparando arquitecturas FPGA 1.2.3 Comparando arquitecturas FPGA
Sobre los años varias tecnologías de arquitecturas han emergido para convenir a
diferentes requerimientos por parte de lo usuarios; los FPGA son programados por estos
para conectar los recursos del chip, de la manera mas apropiada para implementar la
función deseada. Algunos FPGA solo pueden ser programados un sola vez; estos
dispositivos emplean la tecnología llamada antifuse, también existen dispositivos basados
en tecnología flash que pueden ser programados y reprogramados una y otra vez después
de eliminar errores, algunos otros pueden ser dinámicamente programados gracias a la
tecnología basada en SRAM. Cada una de estas tecnologías de arquitecturas tienen
algunas ventajas y desventajas uno con respecto del otro como se muestran en la tabla
1.1 [1].
CaracteristicaCaracteristicaCaracteristicaCaracteristica SRAMSRAMSRAMSRAM ANTIFUSEANTIFUSEANTIFUSEANTIFUSE FLASHFLASHFLASHFLASH
Reprogramable Si (en un sistema) No Si (fuera del sistema)
Velocidad de
reprogramación
(incluyendo borrado)
Rapido No aplicable 3 ves mas que la
SRAM
Volátil Si No No (pero puede ser si
asi es requerido)
Archivo de
configuración externo Si No No
Excelente para
prototipo Si No Si
Instant-on No Si Si
Capitulo I Tecnología FPGA
22
Seguridad IP Pobre Muy buena Muy buena
Tamaño de
configuración de
celda
Larga (seis
transistores) Muy pequeña
Pequeña (dos
transistores)
Consumo Alto Bajo Medio
Dureza de radiación No Si No
Tabla No 1.1. Ventajas y desventajas de varias tecnologías FPGA
Los FPGA modernos son basados en configuración de celdas SRAMceldas SRAMceldas SRAMceldas SRAM, las cuales ofrecen el
beneficio de ilimitada reprogramabilidad. Cuando son encendidos, pueden ser
configurados para realizar una tarea dada. El flip site, a través de los FPGA basados en
SRAM deben ser reconfigurado cada vez que le host del sistema sea encendido y la
circuiteria adicional necesaria para hacerlo. Además porque el archivo de programación
usado para programar el FPGA es almacenado en una memoria externa, las cuestiones
de seguridad acerca de la propiedad intelectual surgen.
Los FPGA basados en atintifuseatintifuseatintifuseatintifuse no son sistemas programables pero además son
programados fuera de línea usando un dispositivo programador. Una vez el chip es
configurado, este no puede ser alterado. Sin embargo en la tecnología antifuse, la
configuración del dispositivo no permanece sin necesidad de una memoria externa. Esto
es virtualmente imposible para un diseñador que reserva su programación; por lo regular
trabajan con reemplazos para ASIC en volúmenes más pequeños.
En un sentido, los FPGA basados en flash cumplen la promesa de los FPGA en que estos
pueden ser programados varias veces. Estos son permanentes conservando su
configuración aun cuando son apagados. La programación es hecha en cualquier sistema
o con un programador. En algunos caos la seguridad IP puede ser archivada usando una
llave multibit que cierra los datos de configuración después de la programación.
Pero los FPGA basados en tecnología flash requieren pasos de proceso extras por encima
y mas allá de la tecnología CMOS estándar, dejando al menos una generación atrás.
Además algunos resistores pull-up resultan con lato consumo estático.
Los FPGA pueden también ser caracterizados por cualquiera de las dos siguientes
arquitecturas grano fino y grano medio o grueso. La arquitectura de grano fino contiene un
Capitulo I Tecnología FPGA
23
gran número de bloques lógicos relativamente sencillos. Cada bloque lógico usualmente
contiene cada uno una función lógica de dos entradas o una función de cuatro entradas a
un multiplexor y un flip flop. Los bloques solo pueden ser usados para implementar
funciones sencillas. Pero las arquitecturas de grano fino se presentan para funciones de
excursión. La arquitectura de grano grueso consiste de grandes bloques lógicos,
relativamente a menudo contiene dos o mas tablas de lookup y dos o mas flip flops. Es
mas estas arquitecturas implementan una lógica actual de una tabla lookup de cuatro
entradas (ROM de 16x1) [3].
1.2.4 El flujo de diseño en el FPGA1.2.4 El flujo de diseño en el FPGA1.2.4 El flujo de diseño en el FPGA1.2.4 El flujo de diseño en el FPGA
Después de completar todas las opciones de implementación debemos considerar el flujo
de diseño. El proceso de implementación de un diseño en un FPGA puede ser dividido
dentro de muchas etapas. Aproximadamente definido como captura o entrada del diseño,
síntesis, enrutamiento y colocación, como se muestra en la figura 1.6. De esta manera, el
diseño es simulado en varios niveles de abstracción como en un diseño ASIC. La
disponibilidad de sofisticadas y herramientas coherentes para el diseño del FPGA los hace
mas atractivos.
Figura 1.6 Los pasos del flujo de diseño de un FPGA
Capitulo I Tecnología FPGA
24
En un tiempo, el ingreso al diseño fue realizado en la forma de captura esquemática. La
mayor parte de los diseñadores han cambiado a lenguajes de descripción de hardware
(HDL-Hardware Description Languaje) para el ingreso del diseño. Algunos prefieren una
combinación de las dos técnicas. Las herramientas de captura del diseño basada en
forma esquemática da a los diseñadores mucho control sobre la colocación física y la
división de la lógica en el dispositivo pero esto llega a ser manos probables que los
diseñadores tomen ese ruta mientras tanto, el diseño de entrada basada en este lenguaje
es mas rápido, pero a menudo a costo de densidad o enrutamiento. Para algunos
diseñadores, la elección de si se usa el ingreso del diseño basado en un esquema o
basado en HDL baja su concepción de su propio diseño.
Los HDL son un bien para diseños altamente complejos, especialmente cuando el
diseñador tiene una herramienta de cómo la lógica debe ser estructurada. Pueden
también ser muy útiles para el diseño de funciones mas pequeñas cuando no tienen el
tiempo o la inclinación para trabajar a través de la implementación actual del hardware.
Por otro lado los HDL representan un nivel de abstracción que pueden aislar los
diseñadores de los detalles de la implementación del hardware. El ingreso basado en un
esquema por parte de los diseñadores proporciona una mayor visibilidad en el hardware.
El inconveniente del ingreso basado en un esquema es que este hace el diseño mas difícil
para modificar o un puerto a otro FPGA.
Una tercera opción para el ingreso del diseño, es el ingreso del estado de maquina,
funciona para diseñadores quienes pueden ver su diseño lógico como una serie de etapas
a través de los pasos del sistema. A menudo en el área del control del sistema. Que
puede ser representado claramente en forma visual, la herramienta de soporte par aun
estado de maquina finita.
Algunos diseñadores enfocan el inicio de su diseño de un nivel de abstracción mas alto
que los HDL, el cual es un diseño algorítmico usando lenguajes de programación (C/C++).
Generalmente el diseño algorítmico ha sido pensado como una herramienta para
exploración arquitectónica. Pero cada vez mas como herramientas de flujo surgen para
síntesis de nivel C aceptándolo como primer paso para la implementación en hardware.
Capitulo I Tecnología FPGA
25
Después del diseño de entrada, el diseño en el registro de transferencia de nivel (RTL-
Register-Transfer Level) es la primera de todas las etapas de simulación porque el diseño
ha de ser simulado en niveles sucesivos de abstracción como este movimiento caen hacia
la cadena de la implementación física en el mismo FPGA.
La simulación RTL ofrece el más alto desempeño en términos de velocidad. Como un
resultado, los diseñadores pueden realizar algunas simulaciones en un esfuerzo para
retocar la lógica. En esta etapa, el desarrollo del FPGA no es una diferencia del desarrollo
del software, variables y señales son observadas, funciones y procesamientos son
trazados y “breakpoint set”. En esta parte la simulación es muy rápida; pero porque el
diseño aun no ha sido sintetizado al nivel de compuerta las propiedades como la
temporizacion y el uso de los recursos son todavía desconocidos.
El siguiente paso de la simulación RTL es convertir la representación RTL del diseño en
un archivo “bit-stream” que puede ser leído en el FPGA. El paso provisional es la síntesis
FPGA, el cual traslada el VHDL o el código verilog dentro de un dispositivo en un formato
netlist que puede ser entendido por un convertidor bit stream.
Este proceso de síntesis puede ser divido en tres pasos. El primero, el HDL es convertido
en el dispositivo en formato netlist. Entonces el resultado del archivo es convertido dentro
de un archivo bit-stream hexadecimal o un archivo .bit. este paso es necesario para
cambiar la lista de dispositivos requeridos e interconectar en los bits hexadecimales para
cargar en el FPGA. Por ultimo el archivo .bit es leído en el FPGA físico. Este paso final
completa el procedimiento de la síntesis de un FPGA para programar el diseño sobre el
FPGA físico.
Esto es importante para la limitación del diseño completamente después de la síntesis
(figura 1.7). Un archivo de limitación es una entrada del proceso de síntesis solo con el
mismo código RTL. Las limitaciones pueden ser aplicadas globalmente para porciones
especificas del diseño. El “engine” usa estas limitaciones para optimizar el netlist. Sin
embargo esto es igualmente importante para no “over-constrain” del diseño, el cual
generalmente resulta en menos de resultados óptimos del siguiente paso en el proceso de
implementación, la colocación del dispositivo físico y el enrutamiento a interconectar las
limitaciones de la síntesis también llegan a ser limitaciones de lugar y enrutamiento.
Capitulo I Tecnología FPGA
26
Figura 1.7 Herramientas que desempeñan la optimización antes de la creación del netlist
que pasara por la herramientas de enrutamiento y colocación.
Este flujo tradicional trabajara, pero esto puede conducir a numerosas interacciones antes
de llevar a cabo el cierre de la temporizacion. Algunos vendedores de EDA ha incorporado
más técnicas de síntesis físicas modernas las cuales el dispositivo automiza la re-
temporizacion moviendo las tablas lookup, a través de los registros para balancear el
stack de tiempo. La síntesis física también anticipa el enrutamiento y el lugar para detener
el retraso de la información.
La siguiente síntesis, comienza en la implementación del dispositivo. Después el netlist de
la síntesis, el diseño es convertido automáticamente en un formato soportado
internamente por el vendedor de las herramientas de FPGA de enrutamiento y lugar. La
regla de diseño de comprobación y optimización es realizada en el netlist entrante y el
software que particiona el diseño en los recursos lógicos disponibles. La buena partición
es requerida para archivar la conclusión del enrutamiento alto y el rendimiento alto.
Cada vez mas, los diseñadores de FPGA recurren al floorplanning después de la síntesis y
el diseño particionado. Los floorplanner de FPGA trabajan desde la jerarquía del netlist
como definido por el código RTL. El floorplaning, puede ayudar si el área es ajustada,
cuando es posible esto es una buena idea para la colocación de la lógica crítica en
bloques separados.
Capitulo I Tecnología FPGA
27
La simulación funcional es realizada después de la síntesis y antes de la implementación
física. Este paso asegura la correcta funcionalidad lógica. Después de la implementación
hay un paso final de verificación con la información de tiempo completa. Después de la
colocación y el enrutamiento la lógica y los retrasos de enrutamiento son colocados en el
netlist a nivel de compuerta para la simulación. En este punto la simulación es un proceso
muy largo, porque el tiempo es también un factor (figura 1.8). A menudo los diseñadores
sustituyen el análisis de tiempo estático por el tiempo de las trayectorias combinacionales
entre los registros y los compara en contra del tiempo del diseñador.
Una vez que diseño es verificado satisfactoriamente y hallado la temporizacion deseada,
el paso final es para programar realmente el mismo FPGA. En la culminación de
colocación y enrutamiento, un archivo de programación binaria es creado. No importa que
tecnología sea subyacente al dispositivo, el FPGA interconecta la estructura teniendo
celdas que configuran al dispositivo para conectar las entradas y las salidas de los
bloques lógicos. Por su parte, las celdas configuran esos bloques lógicos el uno a otro.
Las tecnologías de lógica programable incluyendo las PROM para FPGA basadas en
SRAM, requieren alguna clase de un dispositivo programador. Los dispositivos también
pueden ser programados a través de la configuración de sus puertos usando un conjunto
de terminales dedicadas.
Figura 1.8 Etapas de la simulación del FPGA durante el proceso del diseño.
Los FPGA modernos también incorporan un puerto “JTAG” que puede ser usado para más
que pruebas de boundary-scan. El puerto JTAG puede ser conectado para el registro de
desplazamiento de la configuración de la celda interna del dispositivo SRAM, el cual por
su parte puede ser orientado para conectar una cadena de chips de exploración JTAG.
Capitulo I Tecnología FPGA
28
Para la terminación del FPGA, hay mas de un paso para el proceso, como el unir el
dispositivo a un tarjeta de circuito impresa (PCB-Printed circuit board) en un sistema.
Más que nunca, los diseñadores deben considerar fuertemente un flujo integrado que
toma de la concepción del FPGA a través del diseño de una tarjeta. Algunos flujos
mantienen completo la conectividad entre el diseño a nivel de sistema y el FPGA, esto
también se hace entre las interacciones del diseño. No solo hoy en día el flujo crea el
esquema de conectividad necesaria para la verificación y el layout de la tarjeta integrada
de un FPGA, pero también documentan las señales de conexión las cuales son hechas a
las terminales del dispositivo y con esto estructurar el mapa original del bus del nivel de la
tarjeta. El flujo integrado para los FPGA hace en un sentido general, que distribuidores de
FPGA consideren continuar a introducir mas dispositivos complejo, poderosos y
económicos.
CAPÍTULO II
Capitulo II Elementos Biestables
29
CAPÌTULO II. Elementos Digitales.CAPÌTULO II. Elementos Digitales.CAPÌTULO II. Elementos Digitales.CAPÌTULO II. Elementos Digitales.
ResumenResumenResumenResumen....
En este capitulo se presentan de forma individual todos los elementos que se encuentran
a nuestro alcance para el diseño de nuestros sistemas mejor conocidos como Flip-flops,
así como las características de cada uno, como lo son comportamiento y desempeño de
estos. También se muestra la configuración de los registros de corrimiento donde cada
registro consta de una cadena de flip-flops conectados en cascada, ya que estos son el
principio del diseño de nuestro proyecto.
2.1 2.1 2.1 2.1 Elementos biestablesElementos biestablesElementos biestablesElementos biestables
El circuito lógico secuencial es aquel cuyas salidas dependen no solo de sus entradas
actuales, sino también de la secuencia pasada de entradas, el más sencillo consiste de un
par de inversores que forman un lazo de retroalimentación, como se muestra en la figura
2.1. No tiene entradas y tiene dos salidas Q y Q_L.
Figura 2.1. un par de inversores formando un elemento biestable.
Análisis digital. El circuito de la figura 2.1 se denomina con frecuencia un biestable, puesto
que un análisis estrictamente digital muestra que tiene dos estados estables. Si Q es
ALTO, entonces el inversor inferior tienen una entrada en ALTO y una salida en BAJO, lo
que fuerza al nivel ALTO la salida del inversor superior, pero si Q esta en BAJO, entonces
el inversor inferior tienen una entrada en BAJO y una salida en ALTO, lo que fuerza Q a
BAJO, en situación estable. Podríamos utilizar una variante de estado simple, el estado de
la señal A, para describir el estado del circuito; existen dos estados posibles, Q=0 y Q=1.
Capitulo II Elementos Biestables
30
El elemento biestable es tan simple que no tiene entradas y por consiguiente no hay
manera de controlar o modificar su estado, cuando se aplica inicialmente la energía al
circuito, llega aleatoriamente a un estado al otro y se mantiene ahí permanentemente.
2.1.1 Latchs y Flip2.1.1 Latchs y Flip2.1.1 Latchs y Flip2.1.1 Latchs y Flip----FlopsFlopsFlopsFlops
Los latchs y flip-flop son los bloques de construcción básicos de la mayoría de los circuitos
secuénciales. Los sistemas digitales típicos hacen uso de latchs y flip-flops que son
dispositivos preencapsulados, específicos funcionalmente en un circuito integrado
estándar. En ambientes de diseño ASIC, los latchs y flip-flops son por lo regular celdas
predefinidas especificadas por el vendedor de ASIC. Sin embargo, dentro de un CI o ASIC
estándar, cada latch o flip-flop se diseña típicamente como si fuera un circuito secuencial
de retroalimentación (utiliza compuertas lógicas individuales y lazos de retroalimentación
para obtener memoria en un circuito lógico).
Los diseñadores digitales utilizan el nombre de flip-flop (elemento biestable) para un
dispositivo secuencial que normalmente muestra sus entradas y cambia sus salidas
solamente en ocasiones determinadas por una señal de reloj. Por otra parte, la mayoría de
los diseñadores utilizan el nombre de latch para un dispositivo secuencial que monitorea
todas sus entradas continuamente y modifica sus salidas en cualquier momento, de
manera independiente de una señal de reloj.
Debido a los comportamientos funcionales de los latchs y filp-flops estos son bastante
diferentes es importante saber cual tipo esta siendo empleado en un diseño como a
continuación se describen los tipos de latchs y flip-flops: [4]
• Latch S-R
• Latch S-R con habilitacion
• Latch D
• Flip-flop D con disparo de flanco
• Flip-flop D con disparo de flanco con habilitación
• Flip-flop de exploracion
• Flip-flop S/R (maestro/esclavo)
• Flip-flop J/K maestro/esclavo
Capitulo II Elementos Biestables
31
• Flip-flop J/K con disparo de flanco
• Flip-flop tipo T (toggle – Conmutación)
2.1.2 Latch S2.1.2 Latch S2.1.2 Latch S2.1.2 Latch S----R.R.R.R.
Un latch S-R (set-reset, establecimiento-restablecimiento) basado en compuertas NOR se
ilustra en la figura 2.2(a). El circuito tiene dos entradas, S y R, y dos salidas, etiquetadas
como Q y QN, donde QN es normalmente el complemento de Q. La señal QN se
representa en ocasiones como Q o Q_L.
(a) (b) (c)
Figura 2.2 Latch S-R (a) Diseño del circuito, (b) Tabla de funcion del circuito y (c)
funcionamiento tipico del match S-R
Si tanto R como R son 0, el circuito se comporta como el elemento biestable: tendremos
un lazoo de retroalimentación que retiene uno o dos estados lógicos, Q=0 o Q=1, como se
muestra en la figura 2.2(b), tanto S como R pueden ser asertivas para forzar al alzo de
retroalimentación a un estado deseado. S establece o preestablece la salida Q a 1; R
restablece o limpia la salida Q a 0. Después de que la entrada S o R es negada, el latch
permanece en el estado al cual fue forzado. La figura 2.2 (c) ilustra el comportamiento
funcional de un latch S-R para una secuencia típica de entradas.
La figura 2.3 define los parámetros de temporizacion para un latch S-R. El retardo de
propagación es el tiempo que le toma a una transición en una señal de entrada producir
una transición en una señal de salida. Un latch o flip-flop dados pueden tener varias
especificaciones de retardo de propagación diferentes, una para cada par de señales de
entrada y salida. Tambien el retardo de propagación puede ser diferente dependiendo si la
salida implica una transición BAJO a ALTO en S puede ocasionar una transición BAJO a
ALTO en Q, de modo que se presenta un retardo de propagación ( )SQpLHt , como se
Capitulo II Elementos Biestables
32
muestra en la transición 1 de la figura 2.3. De manera semejante, una transición de BAJO
a ALTO en R puede provocar una transición ALTO a BAJO en Q, con un retardo de
propagación ( )RQpHLt como se muestra en la transición 2. En la figura 2.3 no se muestran
las transiciones correspondientes a QN, que tendrían retardos de propagación ( )SQNpHLt y
( )RQNpHLt [4].
Figura 2.3 Parámetros de temporizacion para un match S-R (resultados realizados en el
software de Max plus II – Altera)
2.1.2 Latch 2.1.2 Latch 2.1.2 Latch 2.1.2 Latch RS − ....
Un latch con entradas de establecimiento y restablecimiento de nivel activo bajo puede
construirse a partir de compuertas NAND como se ilustra en la figura 2.4(a). Como se
muestra en la tabla de función, en la figura 2.4(b). El funcionamiento del latch RS − es
semejante al del S-R, con dos principales diferencias. La primera, RyS son de nivel
Capitulo II Elementos Biestables
33
activo bajo, de modo que el latch recuerda su estado anterior cuando 1== RS . En
segundo lugar, cuando S como R son afirmadas de manera simultanea, ambas salidas
del latch se van a 1 no a 0 como en el latch RS − .exceptuando estas diferencias, el
funcionamiento del S-R es el mismo del RS − , incluyendo las consideraciones de
temporizacion [4].
(a) (b) (c)
Figura 2.4 Latch RS − : (a) Circuito diseñado con compuerta NAND, (b) Tabla de
funcionamiento y (c) símbolo lógico
2.1.4 Latch S2.1.4 Latch S2.1.4 Latch S2.1.4 Latch S----R con habilitación.R con habilitación.R con habilitación.R con habilitación.
Un latch S- R o un latch RS − es sensible a sus entradas S y R en todo momento. Sin
embargo, puede ser fácilmente modificado para crear un dispositivo que sea sensible a
estas entradas solamente cuando una entrada C de habilitación sea afirmada. Un latch S-
R con habilitación de esta clase se muestra en la figura 2.5 (a); misma que presenta la
tabla de funciona mediante la cual, el circuito se comporta como un latch S-R cuando C es
1, retiene su estado anterior cuando C es 0. El comportamiento del latch para un conjunto
típico de entradas se muestra en la figura 2.6. Si tanto S como R son 1 cuando C cambia
de 1 a 0, el circuito se comporta como un latch S-R en el cual S y R son negadas
simultáneamente y por tanto la salida es impredecible [4].
Figura 2.5 Latch S-R con habilitación: (a) diseño del circuito (b) tabla de funcionamiento y
(c) símbolo lógico.
Capitulo II Elementos Biestables
34
Figura 2.6 Funcionamiento típico de un match S-R con habilitación.
2.1.5 Latch D.2.1.5 Latch D.2.1.5 Latch D.2.1.5 Latch D.
Con frecuencia necesitamos latchs simplemente para almacenar bits de información: cada
bit es presentado en un alinea de señal, y nos gustaría almacenarlo en alguna parte; para
este tipo de aplicación esta el latch tipo D como se puede observar en la figura 2.7(a), su
diagrama lógico se reconoce como el de un latch S-R con habilitacion, con un inversor
agrgado para generar entradas S y R a partir de la entrada simple (de datos) D. Esto
elimina la situación en los latch S-R, donde S y R pueden afirmarse de manera
simultanea. Al entada de control de un latch D, etiquetada como C en el inciso c de la
figura 2.7, se llama en ocasiones ENABLE o CLK y es de nivel activo bajo en algunos
diseños del uso del latch D [4].
(a) (b) (c)
Figura 2.7. Latch D: (a) Diseño del circuito, (b) tabla de funcionamiento y (c) símbolo
logico.
El comportamiento funcional del latch D se muestra en la figura 2.8. Cuando la entrada C
es afirmativa (valor 1 logico), la salida Q sigue la entrada D; en esta situación se dice que
el latch esta “abierto” y la trayectoria desde la entrada D hasta la salida Q es
“transparente”; el circuito se denomina con frecuencia un latch transparente por esta
Capitulo II Elementos Biestables
35
razón, cuando la entrada C es negada, el latch se “cierra”; la salida Q retiene su ultimo
valor y ya no cambia en respuesta a D, mientras que C permanece negada.
Figura 2.8.- Comportamiento funcional de un match D
El comportamiento de temporizacion mas detallado se muestra en la figura 2.9. Cuatro
diferentes parámetros de retardo se ilustra para señales que se propagan desde la
entrada C o D hasta la salida Q. Por ejemplo, para las transiciones 1 y 4 el latch se
encuentra inicialmente “cerrado” y la entrada D es la opuesta de la salida Q, de modo que
cuando C tiende a 1 el latch “se abre” y la salida Q cambia después del retardo ( )CQpLHt o
( )CQpHLt . Para las transiciones 2 y 3 la entrada C ya es 1 y el latch se encuentra ya abierto,
de modo que Q sigue de manera transparente las transciones en D con retardo ( )DQpHLt y
( )DQpLHt [4].
Figura 2.9. Parámetros de temporizacion para un match tipo D
2.1.5.1 Flip2.1.5.1 Flip2.1.5.1 Flip2.1.5.1 Flip----flop D con disparo de flanco flop D con disparo de flanco flop D con disparo de flanco flop D con disparo de flanco
Un flipflipflipflip----flop disparado con flanco positivoflop disparado con flanco positivoflop disparado con flanco positivoflop disparado con flanco positivo combina un par de latchs D como se ilustra en la
figura 2.10(a) para crear un circuito que muestrea su entrada D y cambia sus salidas Q y
QN solo para el flanco ascendente de una señal de reloj (CLK) de control. El primer latch
se conoce como el maestro; se abre y sigue la entrada cuando CLK es 0, cuando CLK
Capitulo II Elementos Biestables
36
sube a 1, el latch maestro se cierra y su salida se transfiere al segundo latch conocido
como el esclavo. El match esclavo se encuentra abierto todo el tiempo que CLK es 1, que
solamente cambia al principio de este intervalo, porque el maestro esta cerrado y sin
modificaciones durante el resto del intervalo [4].
(a) (b) (c)
Figura 2.10 Flip-flop tipo D disparado con flanco positivo: (a) diseño del circuito, (b) tabla
de funcionamiento y (c) Símbolo logico.
El inversor en la entrada del reloj de los flip-flop D indica un comportamiento de disparo de
flanco y se denomina indicador de entrada dinámica. En la figura No 2.11 se muestra el
comportamiento funcional del flip-flop para diversas transiciones de entrada, donde la
señal QM es la salida del match maestro. Nótese que QM cambia solamente cuando el
reloj es 0, cuando se va a 1, el valor actual de QM se transfiere a Q y se evita que QM
cambie hasta que el reloj regresa de nuevo al valor de 0.
Figura 2.11 Comportamiento funcional de un flip-flop D disparado con flanco positivo.
Capitulo II Elementos Biestables
37
En la figura No 2.12 se muestra un comportamiento de temporizacion mas detallado para
el flip-flop D. todos los retardos de propagación se miden desde el flanco ascendente del
reloj puesto que se es el único evento que ocasiona un cambio en la salida. Los diferentes
retardos pueden especificarse para cambios de salida BAJO a ALTO y ALTO a BAJO.
Figura 2.12 comportamiento de temporizacion de un flip-flop tipo D disparado por flanco
positivo
Como un latch tipo D, el flip-flop D disparado por flanco tiene una ventana de tiempos de
establecimiento y de retención durante los cuales las entradas D no deben cambiar. Esta
ventana se presenta en torno del flanco de disparo del reloj, y se indica mediante un
sombreado en la figura 2.12. Si los tiempos de establecimiento y retención no se
satisfacen, la salida del flip-flop por lo regular se ira a un estado estable, aunque
impredecible, de 0 a 1.
Un flip-flop D disparado con flanco negativo simplemente invierte la entrada de reloj, de
modo que toda la acción se desarrolla sobre el flanco descendente del reloj (CLK_L) por
convención, un disparador de flanco descendente se considera como de nivel activo bajo.
La tabla de función y el símbolo lógico de flip-flop se muestran en la figura 2.13. Algunos
flip-flops D tienen entradas asincrónicas que se pueden utilizar para llevar al fli-flop a un
estado particular, independiente de las entradas del reloj y de la entrada del flip-flop (D).
Estas entradas, generalmente se identifican como PR (present-preestablecido) y CLR
(clear-borrado), se comportan como las entradas de establecimiento y restablecimiento en
un latch S-R.
Capitulo II Elementos Biestables
38
(a) (b) (c)
Figura 2.13 Flip-flop tipo D disparado con flanco positivo: (a) diseño del circuito, (b) tabla
de funcionamiento y (c) Símbolo logico.
El símbolo lógico y el circuito NAND para un flip-flop D disparado por flanco con entradas
como se ilustra en la figura anterior. aunque la entradas asincrónicas son utilizadas por
algunos diseñadores lógicos para realizar funciones secuenciales difíciles, se reservan
mejor para propósitos de inicialización y prueba, para forzar un circuito secuencial a un
estado de inicio conocido [4].
2.1.5.2 Flip2.1.5.2 Flip2.1.5.2 Flip2.1.5.2 Flip----flop D con dispara de flanco con de habilitación.flop D con dispara de flanco con de habilitación.flop D con dispara de flanco con de habilitación.flop D con dispara de flanco con de habilitación.
Una función comúnmente deseada, en los flip-flops D es la habilidad para mantener el
ultimo valor almacenado, mas que cargar un nuevo valor, durante el flanco de reloj. Esto
se cumple al agregar una entrada de habilitación, llamada EN o CE (clock enable-
habilitación de reloj). Mientras que el nombre de “habilitación de reloj” es descriptivo, la
función de entrada extra extra es obtenida en lo absoluto controlando el reloj de aluna
manera. En vez de ello, como se muestra en la figura 2.14(a), un multiplexor de 2 entradas
controla el valor aplicado a la entrada D del flip-flop interno. Si EN es afirmada, la entrada
D externa se selecciona; si EN es negada, se utiliza la salida actual del flip-flop. La tabla
de función resultante se muestra en la figura 2.14(b). El símbolo del flip-flop se ilustra en la
figura 2.14(c); en algunos flip-flops, la entrada de habilitación es de nivel activo bajo,
denotada mediante una burbuja de inversión en esta entrada [4].
Capitulo II Elementos Biestables
39
(a) (b) (c)
Figura 2.14: Flip-flop tipo D disparado con flanco de habilitación: (a) diseño del circuito, (b)
tabla de funcionamiento y (c) Símbolo lógico.
2.2 Registros de corrimiento 2.2 Registros de corrimiento 2.2 Registros de corrimiento 2.2 Registros de corrimiento
Un registro de corrimiento es un registro de n bits con una disposición para recorrer
información binaria ya sea a la derecha o a la izquierda. La configuración lógica de un
registro con corrimiento consta de una cadena de flip-flops conectados en cascada, con la
salida de un flip-flop conectada a la entrada del siguiente flip-flop. Todos los flip-flops
reciben un pulso común de reloj que causa el corrimiento de una etapa a la siguiente.
La figura 2.15(a) muestra la estructura de un registro de corrimiento de cuatro bits que es
usado para desplazar el contenido de un bit una posición a la derecha. Los bits de los
datos son cargados en el registro de corrimiento usando la entrada (IN) que
posteriormente aparecerá en la salida (OUT), por lo que se denomina a este tipo de
registro de corrimiento registro de entrada serie y salida serie. El contenido de cada flip-
flop es transferido al siguiente flip-flop con cada filo positivo del reloj. Una manera de
observar la transferencia de información se encuentra en la figura 2.15b, el cual muestra
que pasa cuando los valores de las señales de entrada durante ocho consecutivos ciclos
de reloj son 1,0,1,1,1,0,0,0 asumiendo que el estado inicial de todos los flip-flop es cero.
(a)
Capitulo II Elementos Biestables
40
(b)
Figura 2.15 Registro de corrimiento simple: (a) Estructura de un registro de corrimiento de
cuatro bits y (b) Tabla de funcionamiento
Un registro de corrimiento de entrada serie y salida paralelo, es mostrado en la figura
2.16, tiene salidas para todos sus bits almacenados, haciéndolos quedar disponibles para
todos los circuitos. A la inversa, es posible construir un registro de corrimiento de entrada
en paralelo y salida serie. La figura 2.17 ilustra la estructura general de un dispositivo de
esta naturaleza. Para cada filo de reloj el registro carga nuevos datos de las entradas 1D
hasta ND o recorre su contenido actual, dependiendo del valor de la entrada de control
Load/Shift. Internamente, el dispositivo utiliza un multiplexor de dos entradas en cada
entrada D del Flip-flop para seleccionar entre los dos casos. Un registro de corrimiento de
entrada en paralelo y salida serie puede ser empleado para realizar conversión paralelo a
serie. Caso contrario el registro de corrimiento de entrada serie y salida paralelo pueden
ser empleados para efectuar conversión serie a paralelo.
En los sistemas de computación es necesario a menudo la transferencia de artículos n-bits
de datos. Esto es posible hacerlo transmitiendo todos los bits inmediatamente usando n
uniones separadas, en cuyo caso decimos que se trata de una transferencia en paralelo.
Pero también es posible transferir todos los bits usando una simple unión, para realizar la
transferencia de un bit a la vez, en n consecutivos ciclos de reloj; nosotros nos referimos a
este esquema con transferencia serial. Para transferir serialmente un articulo de n-bits de
datos, usamos un registro de corrimiento que pueda ser cargado con todos los n bits en
paralelo (en un ciclo de reloj). Así que durante el siguiente n ciclo de reloj, el contenido del
registro puede ser desplazado para la transferencia serial. Si los bits son recibidos
serialmente, después del n ciclo de reloj el contenido del registro puede ser consultado en
paralelo como un articulo de n-bits.
Capitulo II Elementos Biestables
41
Figura 2.16. Registro de corrimiento de entrada serie, salida paralelo
Figura 2.17. Regisitro de corrimiento en entrada paralelo, salida serie
En la figura 2.18 muestra un registro de corrimiento de cuatro bits que permite el acceso
en paralelo. En cambio de usar una conexión de un registro de corrimiento normal, la
entrada de D de cada flip-flop es conectado en dos diferentes fuentes. Una de las cuales
es el flip-flop precedente, el cual es necesario para la operación de corrimiento del
registro. La otra fuente es la entrada externa que corresponde al bit que será cargado en
el flip-flop como una parte de la operación de carga en paralelo. La señal de control
Load/Shift es usada para seleccionar el modo de operación. Si Load/Shift = 0, el circuito
opera como un registro de corrimiento. Si Load/Shift = 1, la entrada paralela de datos es
cargada en el registro. En ambos casos la acción es tomada con el filo positivo del ciclo de
reloj.
Capitulo II Elementos Biestables
42
Figura 2.18. Registro de corrimiento acceso paralelo
2.2.2.2.2.1 2.1 2.1 2.1 Aplicaciones de los registros de corrimiento.Aplicaciones de los registros de corrimiento.Aplicaciones de los registros de corrimiento.Aplicaciones de los registros de corrimiento.
Son múltiples las aplicaciones de los registros de corrimiento que no terminaríamos de
explicar todos en esta tesis, esto depende de la aplicación que deseé el diseñador en
cuanto a la implementación de sus diseños; por lo cual solo explicaremos unas cuantas
aplicaciones recordando que no es el objetivo de esta tesis explicarlos.
Conversión serie/paralelo
La aplicación más común de los registros de corrimiento es convertir datos en paralelo al
formato serie para transmisión o almacenamiento, así como la conversión de datos serie
de vuelta al formato en paralelo para procesamiento o exhibición. El más común en la
transmisión de datos en serie entre dos módulos (equipos de conmutación), es en la
telefonía digital (figura 2.19). Normalmente se conectan tres señales entre un modulo
fuente y un modulo de destino para llevar acabo la transferencia.
• Reloj: La señal de reloj proporciona la referencia de temporizacion para
transferencias, definiendo el tiempo para transferir un bit. Este reloj en sistemas de
dos módulos puede ser parte de los circuitos de control.
Capitulo II Elementos Biestables
43
• Datos en serie. Loas datos mismos se transmiten en una sola línea.
• Sincronización. Un pulso de sincronización (pulso de sincronía) proporciona un
punto de referencia para definir el formato de los datos, tal como el principio de un
byte o palabra en el flujo de datos serie. Algunos sistemas omiten esta señal y en
su lugar utilizan un patrón único sobre la línea de datos en serie para la
sincronización.
Figura 2.19. Un sistema que transmite datos de forma serial entre módulos.
La señal de reloj tiene un frecuencia de 2.408 MHz para permitir la transferencia de
32x8000 bytes de 8 bits por segundo. El pulso de 1 bit de ancho en la señal de
sincronización identifica el comienzo de un intervalo de 125µs llamado un cuadro. Un total
de 256 bits son transmitidos en los datos en serie durante este intervalo, el cual divide en
32 segmentos de tiempo conteniendo cada uno ocho bits. Cada segmento de tiempo
como las posiciones de bit dentro de un segmento de tiempo se localizan en relación al
pulso de sincronía.
2.2.2 Contadores de registro de corrimiento.2.2.2 Contadores de registro de corrimiento.2.2.2 Contadores de registro de corrimiento.2.2.2 Contadores de registro de corrimiento.
Un registro de corrimiento puede ser empleado con lógica combinacional para formar una
maquina de estado cuyo diagrama de estado sea cíclico. Un circuito de esta índole se
denomina contador de registro de corrimiento.
Capitulo II Elementos Biestables
44
2.2.2.1 2.2.2.1 2.2.2.1 2.2.2.1 Contador en anillo.Contador en anillo.Contador en anillo.Contador en anillo.
Un contador de registro de corrimiento mas sencillo utiliza un registro de corrimiento de n
bits para obtener un contador con n etapas, como indica la figura 2.20. La salida de Q de
la última etapa en el registro de corrimiento es retroalimentado como la entrada de la
primera etapa, el cual crea una estructura parecida a un anillo. Si un simple “1” es
introducido en el anillo, este será desplazado a través del anillo en sucesivos ciclos de
reloj. Por ejemplo, en una estructura de 4 bits, los posibles códigos serian 1000, 0100,
0010, 0001(Q0, Q1, Q2, Q3). Por lo que el circuito en la figura 2.20 es llamado así un
contador de anillo. Esta operación tiene que ser inicializada introduciendo un “1” en la
primera etapa. Se logra usando un señal de control de inicio. La cual preestablece el flip-
flop más a la izquierda a “1” y limpia los otros a cero. Asumimos que los cambios en el
valor de la señal de inicio ocurren cortamente después de activar un filo de reloj, así que
los parámetros de temporizacion del flip-flop no son violados.
Figura 2.20. Contador anillo de n-bits.
2.2.2.2 2.2.2.2 2.2.2.2 2.2.2.2 Contador JohnsonContador JohnsonContador JohnsonContador Johnson
Una interesante variación del contador de anillo es obtenida si en vez de la salida Q,
tomamos la salida Q de la ultima etapa y se retroalimenta a la primera etapa, como se
muestra en la figura 2.21, este circuito es conocido como un contador Jonson. Un
contador de n bits de este tipo genera una secuencia que cuenta una tamaño de 2n. Por
ejemplo, un contador de 4 bits produce la secuencia 0000, 1000, 1100, 1110, 1111,
0111,0001, 0000. Observe que en esta secuencia, solo un simple bit tiene un valor
diferente para dos códigos consecutivos. Para inicializar la operación del contador Jonson,
es necesario resetear todos los flip-flops, como se muestra en la figura. Observe que ni el
Capitulo II Elementos Biestables
45
contador de anillo ni el Johnson generaran la secuencia de conteo deseada si no se
inicializa apropiadamente.
Figura 2.21 Contador Johnson.
2.3 Registro de Corrimiento Retroalimentado (FSR 2.3 Registro de Corrimiento Retroalimentado (FSR 2.3 Registro de Corrimiento Retroalimentado (FSR 2.3 Registro de Corrimiento Retroalimentado (FSR ---- FEEDBACK FEEDBACK FEEDBACK FEEDBACK
SHIFT REGISTER).SHIFT REGISTER).SHIFT REGISTER).SHIFT REGISTER).
Las secuencias de los registros de corrimiento se usan tanto en criptografía como en
teoría de codificación. Un registro de corrimiento retroalimentado FSR (feeback shift
register) está constituido por dos partes: un registro de corrimiento y una función de
retroalimentación [19]. El registro de corrimiento está constituido de unidades de
almacenamiento de un bit, por lo que puede decirse que un registro de corrimiento es una
secuencia de bits. La longitud del registro depende de la cantidad de unidades de
almacenamiento o etapas que éste contenga, un registro que tiene longitud L consiste en
L etapas numeradas desde 0 hasta L-1. El registro de corrimiento retroalimentado, tiene
una entrada, una salida y una entrada de reloj que controla el flujo de datos. Durante cada
unidad de tiempo se realizan las siguientes operaciones:
1) El bit de la etapa cero es la salida del registro y forma parte de la secuencia de
salida.
2) El contenido de la etapa iiii se traslada a la etapa 1-i , 1Li1 −−−−≤≤≤≤≤≤≤≤ ; y
3) El nuevo contenido de la etapa L-1 es el bit de retroalimentación
)s..,,.........s,s(fS Lj2j1jj −−−−−−−−−−−−==== , donde la función de retroalimentación f es una
función booleana y ijs −−−− es el contenido de la etapa anterior denominado como
i-L , Li1 ≤≤≤≤≤≤≤≤ .
Si el contenido inicial de la etapa i es {{{{ }}}}1,0s i ∈∈∈∈ para cada 1Li0 −−−−≤≤≤≤≤≤≤≤ , entonces
Capitulo II Elementos Biestables
46
[ 011L s,s..,,.........s −−−− ] es llamado el estado inicial del FSR.
En la figura 2.22 se muestra un FSR, si la función f es una función lineal, entonces el
FSR es un LFSR (Linear Feeback Shift Register). De otra forma da lugar a un NLFSR
(NonLinear Feeback Shift Register) [17].
Si la función de retroalimentación f de un FSR puede ser escrito como:
)SC..........SC()s..,,.........s,s(f LjL1j1Lj2j1j −−−−−−−−−−−−−−−−−−−− ⊕⊕⊕⊕⊕⊕⊕⊕==== en cada unidad de tiempo,
entonces el FSR se dice que es lineal, donde L21 C,..........C,C son los coeficientes de
retroalimentación, y ⊕⊕⊕⊕ denota la suma modulo 2 [19].
)S.....,,.........S,S(f Lj2j1j −−−−−−−−−−−−
Etapa
L-1
Etapa
L-2
Etapa
1
Etapa
0
1jS −−−− 2jS −−−− 1LjS ++++−−−− L j S −−−−jS
salida
)S.....,,.........S,S(f Lj2j1j −−−−−−−−−−−−
Etapa
L-1
Etapa
L-2
Etapa
1
Etapa
0
1jS −−−− 2jS −−−− 1LjS ++++−−−− L j S −−−−jS
salida
Figura 2.22 FSR (Registro de Corrimiento con Retroalimentación).
2.4 LFSR (Registro de Desplazamiento con2.4 LFSR (Registro de Desplazamiento con2.4 LFSR (Registro de Desplazamiento con2.4 LFSR (Registro de Desplazamiento con Retroalimentación Lineal). Retroalimentación Lineal). Retroalimentación Lineal). Retroalimentación Lineal).
Los registros de retroalimentación lineal producen una secuencia de 2n-1, donde n es el
número de etapas en el LFSR. El contenido del registro es recorrido a la derecha una
posición, por cada transición positiva en el reloj. Existe una retroalimentación producida
por una operación XOR o XNOR entre ciertas etapas; el resultado de esta operación es un
bit que se inserta a la izquierda del registro. Un registro que sea inicializado con solo
valores “1” no será conveniente debido a que si la función de retroalimentación es una
XNOR, el valor de este registro no cambiara y permanecerá en el mismo estado. Del
mismo modo no es conveniente que un registro sea inicializado con solo ceros cuando su
función de retroalimentación sea una XOR, debido a que el registro no cambiara de
estado. En estos dos casos los estados son ilegales debido a que el contador
permanecería en un solo estado (locked-up) [6][7].
Capitulo II Elementos Biestables
47
Por ejemplo, un LFSR de 4 bits produce una secuencia de 24 - 1 = 15 (el estado 1111 es
un estado ilegal, utilizando una función de retroalimentación XNOR). Por otra parte, un
contador binario ascendente de 4 bits produciría una secuencia de 24 = 16 con estados no
ilegales. Los contadores LFSR son muy rápidos ya que no usan señales de acarreo. Los
LFSR pueden remplazar a los contadores binarios convencionales en la realización de
aplicaciones críticas donde el contador de secuencia no es importante [7]. Los LFSR son
usados como generadores de seudosecuencias de flujo de bits. Además constituyen
importantes bloques en la implementación de algoritmos de cifrado y descifrado. Tomando
en consideración lo anterior denominamos lo siguiente [5]:
• La longitud del registro de corrimiento (N). Se refiere al grado y en general a la
longitud del registro de corrimiento, la duración más grande de la secuencia de
seudoruido antes de que esta se repita. Para un registro de corrimiento de
longuitud fija N, el número y la duración de las secuencias que pueden ser
generadas, son determinadas por el número y la posición de las etapas usadas
para generar el bit de retroalimentación.
• Etapas del registro de corrimiento. La combinación de etapas y su localización es
regularmente referido como un polinomio y expresado como:
( ) 731 xxxP ++=
Donde el primer “1” representa x0, el cual es la salida de la XOR y representa la ultima
etapa del registro. X3 es la salida del registro de la etapa 3 y x7 es la primera etapa de
registro y la salida del LFSR.
Un par de puntos se hacen notar acerca de los LFSR y el polinomio usado para
describirlos son:
• La última etapa del registro de corrimiento es el “1” y siempre es usado en
la trayectoria de retroalimentación del registro de corrimiento.
• El tamaño del registro de corrimiento puede ser deducido con el grado
mayor del polinomio.
• El grado mayor del polinomio es la salida del registro de corrimiento (etapa
0). Y se utiliza en el cálculo del bit de retroalimentación.
Capitulo II Elementos Biestables
48
• Secuencia de longitud máxima (L). La secuencia de longitud máxima para un
registro de longitud N se refiere a una m-secuencia y es definida como:
L = 2N-1
Los LFSR también tienen muchas variables a considerar como:
• El numero de etapas en el registro de corrimiento
• El numero de etapas en la trayectoria de retroalimentación
• La posición de cada etapa en el registro de corrimiento
• La condición inicial de inicio del registro de corrimiento.
2.5 2.5 2.5 2.5 Implementación de los LFSRImplementación de los LFSRImplementación de los LFSRImplementación de los LFSR
Hay dos estilos de implementaciones de los LFSR, la implementación de Galois y la
implementación de Fibonacci.
2.5.1 2.5.1 2.5.1 2.5.1 Implementación de Galois Implementación de Galois Implementación de Galois Implementación de Galois
Como se muestra en la figura No 2.23, el flujo de datos es de izquierda a derecha y la
trayectoria de retroalimentación es de derecha a izquierda. El incremento del polinomio es
de izquierda a derecha con el termino x0 (“1” en el polinomio) como el primer termino en el
polinomio. Este polinomio indica que etapas del registro de corrimiento son
retroalimentadas. La compuerta XOR esta en la trayectoria del registro de corrimiento, por
tanto, la implementación de Galois es también conocida como en línea, tipo modular o
LFSR tipo M [6].
Figura 2.23. Implementación de Galois
2.5.2 2.5.2 2.5.2 2.5.2 Implementación de FibonacciImplementación de FibonacciImplementación de FibonacciImplementación de Fibonacci
En la figura No 2.24 el flujo de los datos es de la izquierda a la derecha y la trayectoria de
retroalimentación es de derecha a izquierda, similar a la implementación de Galois. Sin
Capitulo II Elementos Biestables
49
embargo, la implementación de Fibonacci el polinomio decrementa de izquierda a derecha
con X0 como el último termino en el polinomio. Este polinomio es mencionado como un
polinomio de etapa reciproca y las etapas de retroalimentación son incrementados de la
derecha a al izquierda a lo largo del registro de corrimiento. La compuerta XOR es la
trayectoria de retroalimentación, por tanto, la implementación de Fibonacci es también
conocida como fuera de línea, tipo simple o LFSR tipo S [6].
Figura 2.24. Implementación de Fibonacci
CAPÍTULO III
Capitulo III Sistemas criptográficos
50
CAPÌTULO III. Sistemas criptográficos.CAPÌTULO III. Sistemas criptográficos.CAPÌTULO III. Sistemas criptográficos.CAPÌTULO III. Sistemas criptográficos.
ResumenResumenResumenResumen
Este capitulo nos brinda una introducción a los sistemas de encriptación, así como sus
características que determinan porque se denominan así y que elementos los pueden
componen como son los generadores de secuencias pseudoaleatorias esto con base para
la realización del cifrado de información, donde también estos deben cumplir con ciertas
propiedades para su desempeño optimo.
3.1 Cifrado de Flujo3.1 Cifrado de Flujo3.1 Cifrado de Flujo3.1 Cifrado de Flujo
Con el ingreso a la era de la información, el problema de la seguridad y autenticación de
datos ha comenzado a ser un aspecto inseparable de los sistemas de comunicación. Cada
vez una mayor cantidad de información es almacenada y transmitida por medios
electrónicos y por consiguiente están expuestas a ataques. La privacidad individual así
como también de las organizaciones depende de la posibilidad de proteger la información
de accesos no autorizados y modificación.
Los sistemas criptográficos proporcionan privacidad en la información por medio del uso
de transformaciones. En el transmisor el texto claro es transformado en el texto cifrado
bajo el control de una llave de cifrado, lo que provoca que esta información sea
incomprensible a otras personas. Solo el correcto receptor bajo el control de una llave de
descifrado, retransforma el texto cifrado en el texto claro.
Los sistemas criptográficos se dividen en aquellos que son de llave secreta o simétrica y
los de llave pública o asimétrica. En criptografía de llave pública o asimétrica, el transmisor
usa una llave públicamente conocida para enviar un mensaje al receptor. El receptor usa
una llave secreta para recobrar el texto claro. En criptografía de llave secreta, el
transmisor y receptor previamente acuerdan utilizar una llave privada que servirá para
cifrar y descifrar el texto claro. Esta llave debe permanecer en secreto para proteger el
texto claro en contra de posibles criptoanalistas [9][8].
Capitulo III Sistemas criptográficos
51
3.1.1 Estructura General.3.1.1 Estructura General.3.1.1 Estructura General.3.1.1 Estructura General.
Los sistemas criptográficos de llave simétrica se pueden dividir en cifrado de bloque y
cifrado de flujo. Cuando el cifrado opera en cada entidad del texto claro
independientemente, entonces estamos hablando de cifrado de bloque. El cifrado de
bloque es un cifrado de sustitución simple y debe hacerse a grandes porciones del texto
claro para prevenir ataques por fuerza bruta. El nombre de bloque es usado para limitar el
tamaño de la entidad de texto claro a cifrar. El cifrado de flujo, en contraste cifra cada
entidad de texto claro por medio de una función booleana, donde la frecuencia de reloj
gobierna los estados internos del cifrador de flujo. Para este principio de cifrado, la entidad
de texto claro no necesita ser grande, ya que se cifra bit a bit los datos de éste. Después
de que cada bit es cifrado el cifrador de flujo cambia de estado de acuerdo a algún tipo de
regla. Por consiguiente, dos ocurrencias del mismo carácter del texto claro usualmente no
resultan en el mismo carácter del texto cifrado.
Para obtener una clara distinción entre cifrado de bloque y cifrado de flujo, se puede usar
el criterio de memoria que se presenta a continuación [10].
c1
cn
Dispositivo
sin
memoria
K
m1
mn
Dispositivo
sin
memoria
K
m1
mn
Cifrado Descifrado
c1
cn
Dispositivo
sin
memoria
K
m1
mn
Dispositivo
sin
memoria
K
m1
mn
Cifrado Descifrado
Figura 3.1 Cifrado de Bloque.
Generador
de
secuencias
pseudoaleatorias
K
mj cj
sj
Generador
de
secuencias
pseudoaleatorias
K
mj
sj
Cifrado Descifrado
Generador
de
secuencias
pseudoaleatorias
K
mj cj
sj
Generador
de
secuencias
pseudoaleatorias
K
mj
sj
Cifrado Descifrado
Figura 3.2 Cifrado de Flujo.
Capitulo III Sistemas criptográficos
52
Un cifrador de bloque (figura 3.1) es un dispositivo sin memoria, que transforma un bloque
del texto claro [[[[ ]]]]n1 m,........,mm ==== bajo el control de una llave K K K K en un bloque de texto
cifrado [[[[ ]]]]n1 c,........,cc ==== , donde el alfabeto del texto en claro y el alfabeto del texto cifrado
usualmente es el mismo. Un cifrador de flujo (figura 3.2) es un dispositivo con memoria
interna, que transforma el ésimo-j dígito de jm de la cadena del texto claro en el
ésimo-j dígito jc de la cadena del texto cifrado, por medio de una función que depende
de la llave secreta KKKK y del estado interno del cifrador de flujo en el tiempo jjjj.
El cifrado de flujo como se muestra en la figura 3.2 puede realizarse por medio de
generadores de secuencias pseudoaleatorias, los cuales usan una función f y una llave,
que es generalmente la semilla usada en el conjunto inicial de estados del generador. Por
medio de esta secuencia pseudoaleatoria cada bit del texto claro se cifra usando una
función booleana, por ejemplo una XOR [8].
3.1.2 V3.1.2 V3.1.2 V3.1.2 Ventajas del cifrado de flujo sobre el cifrado de bloque.entajas del cifrado de flujo sobre el cifrado de bloque.entajas del cifrado de flujo sobre el cifrado de bloque.entajas del cifrado de flujo sobre el cifrado de bloque.
Muchos servicios de transmisión de datos manejan grandes cantidades de información.
Por eso se necesita de mecanismos de cifrado que operen en comunicaciones de alta
velocidad. Con la tecnología actual las realizaciones de cifradores de flujo en hardware
parecen ser la mejor opción para cifrar grandes cantidades de información, y son
compatibles con redes de alta velocidad.
Los Criptosistemas de cifrado de flujo pueden operar a frecuencias muy altas, y son
mucho más rápidos que los criptosistemas de cifrado de bloque. Ya que la secuencia
pseudoaleatoria puede generarse independientemente del texto claro y del texto cifrado,
estos generadores tienen la ventaja de que la secuencia cifrante (pseudoaleatoria) puede
generarse casi al mismo instante del cifrado o el descifrado, con solo una sencilla
combinación de estados del generador mientras el texto claro o el texto cifrado se
procesan [9].
Para una llave KKKK fija, el cifrado de bloque puede transformar bloques idénticos de mensaje
en bloques idénticos de texto cifrado. Esto permite a un observador activo, en la
transmisión insertar, borrar o retransmitir bloques del texto cifrado previamente grabados,
a menos que sea empleado un protocolo adicional que controle la secuencia de bloques
Capitulo III Sistemas criptográficos
53
del mensaje. De la misma forma el cifrado en bloque permite a un observador pasivo
buscar marcas en el texto cifrado, es decir que bajo el control de una llave fija, diferentes
ocurrencias de un mismo bloque de texto claro, siempre resultarán en el mismo texto
cifrado. Esta es una amenaza seria cuando entidades de información fija (tales como
registros de sueldos) son considerados como bloques de texto claro, por eso la llave debe
ser lo más grande posible para evitar ocurrencias en el texto cifrado.
En cambio ya que el cifrado de flujo cifra bit a bit por medio de una función que depende
de la llave secreta y del estado interno del cifrador de flujo en un instante dado, previene
borrado, inserción o retransmisión del texto cifrado, además de búsquedas de marcas en
el texto cifrado.
El uso del cifrado de flujo es la mejor opción cuando el espacio de almacenamiento es
limitado debido a que no se necesita guardar la secuencia cifrante ya que se genera en el
instante que se va a procesar (cifrar o descifrar) la información. Además la semilla, que es
el conjunto de estados inicial del generador, es mucho más pequeña que la secuencia
cifrante generada. Debido a que el cifrado de flujo cifra bit a bit se considera un método
adecuado cuando los caracteres deben procesarse individualmente y recibirse de la
misma forma. También debido a su memoria interna y a que utiliza transformaciones no
lineales son en general difíciles de analizar.
También es adecuado el método de cifrado de flujo cuando el error de transmisión tiene
una probabilidad alta. Como el cifrado se ejecuta bit a bit, lo cual lo hace independiente de
cada elemento, el cambio de un solo bit no afecta al descifrado de forma relevante.
3.2 Generadores de secuencias pseudoaleatorias.3.2 Generadores de secuencias pseudoaleatorias.3.2 Generadores de secuencias pseudoaleatorias.3.2 Generadores de secuencias pseudoaleatorias.
En 1917, G. Vernam diseñó un criptosistema perfecto, según el criterio de Shannon
denominado one-time pad, en el cual la llave secreta es una secuencia de bits generada
de forma aleatoria. El mensaje de longitud n se cifra por medio de una operación XOR del
mismo mensaje con la llave secreta de la misma longitud, para formar el texto cifrado.
Posteriormente se descifra por medio de la función XOR entre el texto cifrado y la llave
secreta.
Capitulo III Sistemas criptográficos
54
Si la llave K se produce por una fuente binaria simétrica, tal que la probabilidad de que se
genere un cero o un uno sea 21
, independientemente de los bits anteriores, entonces se
dice que el one-time pad es perfectamente seguro ante un ataque al texto cifrado, en
donde el criptoanalista no tiene conocimiento del texto en claro. Este método de cifrado
presenta el inconveniente de que la llave tiene que ser tan grande como el propio
mensaje. Evidentemente, un sistema de este tipo carece de utilidad práctica en la mayoría
de los casos, por eso muchos sistemas de cifrado operan como una versión aproximada
del one-time pad, usando grandes secuencias de bits pseudoaleatorios generados a partir
de una llave secreta corta. Los bits parecen ser aleatorios, pero ellos son reproducibles, e
incluso tienen una longitud de periodo limitado [11].
3.2.1 Seguridad en los generadores de secuencias pseudoaleatorias.3.2.1 Seguridad en los generadores de secuencias pseudoaleatorias.3.2.1 Seguridad en los generadores de secuencias pseudoaleatorias.3.2.1 Seguridad en los generadores de secuencias pseudoaleatorias.
En general se pueden formular tres requerimientos para los generadores de secuencias
criptográficamente e idealmente seguros [11] [12].
1) El periodo de la secuencia pseudoaleatoria debe ser lo suficientemente grande para
cifrar el texto claro.
2) Los bits de salida deben ser fáciles de generar.
3) Que la secuencia sea impredecible. Debe ser computacionalmente irrealizable
predecir cual será el siguiente bit aleatorio conociendo de antemano el algoritmo o el
hardware que genera la secuencia y todos los bits previos.
Una secuencia criptográficamente segura no podrá ser comprensible a menos que se
conozca la llave. La llave es generalmente la semilla usada en el conjunto inicial de
estados del generador.
3.2.2 Tipos de generadores de secuencias pseudoaleatorias.3.2.2 Tipos de generadores de secuencias pseudoaleatorias.3.2.2 Tipos de generadores de secuencias pseudoaleatorias.3.2.2 Tipos de generadores de secuencias pseudoaleatorias.
Dependiendo de los parámetros que se empleen para calcular el valor de cada porción de
la secuencia [13] [14], los generadores que se emplean como cifrado de flujo pueden
dividirse en dos grandes grupos:
Capitulo III Sistemas criptográficos
55
• Generadores Sincrónicos. Un generador sincrónico es aquel en el cual la
secuencia pseudoaleatoria se genera independientemente del texto claro y el
texto cifrado [8].
• Generadores Asincrónicos. Un generador asincrónico es aquel en el cual la
secuencia pseudoaleatoria de salida se genera como una función de la llave y un
número t fijo de dígitos previos del texto cifrado [13] [14].
3.3 Propiedades de las secuencias pseudoaleatorias.3.3 Propiedades de las secuencias pseudoaleatorias.3.3 Propiedades de las secuencias pseudoaleatorias.3.3 Propiedades de las secuencias pseudoaleatorias.
Se han hecho grandes esfuerzos para producir buenas secuencias pseudoaleatorias en
computadora [12]. También se han hecho discusiones acerca de muchos generadores
existentes en la literatura académica, junto con muchas pruebas de aleatoriedad. Todos
estos generadores tienen periodicidad, pero con periodos de más de 2256 bits pueden
usarse para diversas aplicaciones.
El problema de producir buenas secuencias pseudoaleatorias es que no se tiene una
función de autocorrelación ideal, lo que implica deficientes propiedades estadísticas para
uso criptográfico. Bajo ciertas condiciones estos generadores de secuencias
pseudoaleatorias van a provocar una vulnerabilidad en el sistema que se está soportando.
Los cifradores de flujo juegan un papel muy importante en la protección de
comunicaciones a muy altas frecuencias, como transmisión de información a través de
Internet de banda ancha, transmisiones satelitales, transmisiones por fibra óptica,
transmisiones por microondas, etc. El problema central de los cifradores de flujo es la
dificultad de generar a partir de una llave corta secuencias cifrantes binarias de periodo
grande y que sean aleatorias. Un generador produce una secuencia pseudoaleatoria si
esta tiene la siguiente propiedad:
Ser impredecible. Debe ser computacionalmente irrealizable predecir cuál será el
siguiente bit aleatorio conociendo de antemano el algoritmo que genera la secuencia y
todos los bits previos [12].
Capitulo III Sistemas criptográficos
56
Una secuencia criptográficamente segura no podrá ser comprensible a menos que se
conozca la llave. La llave es generalmente la semilla usada en el conjunto inicial de
estados del generador.
3.3.1 Postulados de Golomb.3.3.1 Postulados de Golomb.3.3.1 Postulados de Golomb.3.3.1 Postulados de Golomb.
Una de las primeras formulaciones de las reglas básicas de las secuencias
pseudoaleatorias periódicas fueron proporcionadas por Golomb y estas tres reglas se
conocen como los postulados de Golomb [9] [10] [13].
La diferencia en el número de unos y ceros dentro de cada periodo de la secuencia no
debe exceder a la unidad.
En todo el periodo, )(1/2i es el número de i-gramas (del total de gramas en todo el
periodo) de longitud i. Es decir el número de gramas de longitud 1 en todo el periodo debe
ser la mitad del total de gramas, un cuarto del total de gramas debe tener longitud 2, un
octavo debe tener longitud 3 etc.
La función de autocorrelación AC(k) fuera de fase es constante para todo valor k. La
condición es que para que una secuencia sea aleatoria la función de autocorrelación sea
una delta de Dirac [14].
Una secuencia que satisfaga los tres postulados de Golomb puede definirse como una
secuencia-pn, donde pn se entiende por pseudoruido (pseudo-noise). Sin embargo, es
claro que estas reglas no son suficientes para cubrir el término de secuencia aleatoria.
Otra medida necesaria para el análisis de secuencias pseudoaleatorias es la complejidad
lineal y se menciona a continuación.
3.3.2 Complejidad lineal.3.3.2 Complejidad lineal.3.3.2 Complejidad lineal.3.3.2 Complejidad lineal.
La técnica más popular para medir la robustez de una secuencia pseudoaleatoria es la
complejidad lineal, esto es, para que una secuencia sea impredecible, es necesario que
su complejidad lineal sea grande. Esta propiedad es cuantificable y está definida por la
longitud del registro de desplazamiento con retroalimentación lineal más pequeño que
puede generar la secuencia particular que se analiza. Una complejidad lineal grande es
Capitulo III Sistemas criptográficos
57
una condición necesaria pero no suficiente para asegurar que una secuencia es
impredecible. Por ejemplo, la secuencia (0……01)∞, la cual se repite periódicamente, tiene
una complejidad lineal máxima, solo el registro de desplazamiento de grado ∞ puede
producirla. Pero claramente se puede observar que esta secuencia es fácilmente
predecible porque es una secuencia de solo ceros y así es poco útil en el campo
criptográfico. Finalmente, ser impredecible requiere que independientemente del bit
anterior el próximo dígito parezca tener una distribución uniforme. Por consiguiente, la
secuencia necesariamente debe ser estadísticamente uniforme, por ejemplo, que exista
una distribución igual entre cadenas de longitud uno de dígitos, de pares de dígitos, de
cadenas de tres dígitos, etc. El parámetro fundamental, ya mencionado para estimar que
tan impredecible es una secuencia es la complejidad lineal [14].
Ya que el periodo de una secuencia siempre es al menos tan grande como su complejidad
lineal, una complejidad lineal grande implica un periodo grande. Las secuencias aleatorias
típicas exhiben un crecimiento típico de la complejidad lineal con un incremento del
número de dígitos de la secuencia que se consideran. Dicho de otra forma, si se analiza
una secuencia aleatoria, la complejidad lineal de ésta se irá incrementando conforme al
número de dígitos analizados se incremente, y si se grafica el perfil de esta complejidad
lineal será cercano a una recta 2
n
, donde n es el número de bits analizados. De esta
forma, cuando una secuencia tiene un perfil típico de complejidad lineal, es probable que
sea estadísticamente uniforme. En contraste, una distribución uniforme en una secuencia
periódica no implica que esta secuencia tenga una complejidad lineal grande. Por
ejemplo, las secuencias de longitud máxima 1-2L que son generadas por LFSR
(Registro De Desplazamiento Con Retroalimentación Lineal), también se llaman
secuencias de pseudoruido (pseudonoise sequences), por sus excelentes propiedades de
distribución, tienen complejidad lineal mínima con respecto a la longitud de su periodo.
Esto es, si lanzamos una moneda legal 31 veces y graficamos el resultado de esos
lanzamientos obtendremos que el perfil de la complejidad lineal es cercano a una recta 2
n
y por lo tanto su complejidad lineal será de 31. En cambio la secuencia de máxima
longitud que tenga periodo igual a 31 tendrá una complejidad lineal de solo 5, que es el
valor de L . Secuencias binarias de longitud máxima de periodo 1-2L son
completamente determinadas conociendo solo 2L bits de la secuencia [14].
Capitulo III Sistemas criptográficos
58
Por consiguiente, el criterio de un perfil típico de complejidad lineal con un valor final
grande, acompañado por los requerimientos de uniformidad estadística, son útiles para
estimar lo impredecible de una secuencia así como también su calidad [14].
3.4 Cifrado de flu3.4 Cifrado de flu3.4 Cifrado de flu3.4 Cifrado de flujo basado en LFSR.jo basado en LFSR.jo basado en LFSR.jo basado en LFSR.
El cifrado de flujo cifra bit a bit los datos de un texto claro, utilizando una secuencia
cifrante y una función booleana. Este cifrado puede realizarse utilizando LFSR (Registro
de Desplazamiento con Retroalimentación Lineal), los cuales generan la llave (secuencia
pseudoaleatoria) para cifrar un texto claro. Este cifrado, realizado con LFSR, posee las
siguientes propiedades importantes:
1. Los LFSR se pueden realizar fácilmente en hardware.
2. Pueden generar secuencias de periodo TTTT grande, con T = 2T = 2T = 2T = 2LLLL----1111 y donde LLLL es la longitud
del LFSR.
3. Producen secuencias con buenas propiedades estadísticas, que pueden evaluarse
con los postulados de Golomb:
a. La diferencia en el número de unos y ceros dentro de cada periodo de la secuencia no
debe exceder a la unidad.
b. En todo el periodo, ( i1/2 ) es el número de iiii-gramas (del total de gramas en todo el
periodo) de longitud iiii.
c. La función de autocorrelación AC(k) fuera de fase es constante para todo valor k.
4. Debido a su estructura, pueden analizarse usando técnicas algebraicas, una de éstas
es la complejidad lineal.
En telecomunicaciones el cifrado de flujo es muy utilizado bajo las siguientes condiciones:
• El espacio de almacenamiento es limitado.
• Los caracteres de un mensaje deben procesarse individualmente y recibirse de la
misma forma.
• El error de transmisión tiene una probabilidad alta.
• El retardo de extremo a extremo no debe incrementarse considerablemente (afecta a
las aplicaciones interactivas).
• El flujo de datos a cifrar es generado en forma continua y posee un volumen
considerable.
Capitulo III Sistemas criptográficos
59
3.4.1 Esquema general del LFSR con configuración de Galois3.4.1 Esquema general del LFSR con configuración de Galois3.4.1 Esquema general del LFSR con configuración de Galois3.4.1 Esquema general del LFSR con configuración de Galois
Un LFSR de longitud L consiste en L etapas (o unidades de almacenamiento) numeradas
desde 0 hasta L-1, cada una capaz de almacenar un bit; tiene una entrada, una salida y un
reloj que controla el flujo de datos entre las distintas etapas [13] [16].
Durante cada unidad de tiempo se realizan las siguientes operaciones [13]:
1. El contenido de la etapa 0 es la que otorga el flujo de salida.
2. El contenido de la etapa iiii se traslada a la etapa 1- i considerando que, 1Li1 −−−−≤≤≤≤≤≤≤≤ ;
3. El nuevo contenido de la etapa 1-L es el bit de retroalimentación js , que se calcula
por medio de una función booleana que depende de la combinación de los contenidos
de ciertas etapas predefinidas.
La figura 3.3 muestra la estructura general de un LFSR de longitud L. Cada iC es 0 ó 1;
el bit js es la suma módulo 2 del contenido de las etapas L, según sea el valor del vector
{C} .
Etapa
L-1
Etapa
L-2
Etapa
1
Etapa
0
salida
1C 2C 1LC −−−− LC
jS
Etapa
L-1
Etapa
L-2
Etapa
1
Etapa
0
salida
1C 2C 1LC −−−− LC
jS
Figura 3.3 LFSR de longitud L.
Un LFSR puede generar secuencias pseudoaleatorias de tamaño máximo 12L −−−− (no L2
porque un registro de desplazamiento que se llena con ceros causará que la secuencia de
salida del LFSR sea una secuencia infinita de ceros). La secuencia resultante se
denomina m-secuencia. Para que un LFSR tenga el periodo máximo ( 12L −−−− ), el polinomio
formado por {C} más 1 debe ser un polinomio primitivo módulo 2 [8]. A continuación se
dan algunas definiciones para conocer las características que deben cumplir los
polinomios primitivos.
CAPÍTULO IV
Capitulo IV Deteccion de errores por CRC
61
CAPITULO IV. Detección de ErroresCAPITULO IV. Detección de ErroresCAPITULO IV. Detección de ErroresCAPITULO IV. Detección de Errores por CRC. por CRC. por CRC. por CRC.
Resumen.Resumen.Resumen.Resumen.
Este capitulo muestra uno de tantos métodos existentes para la detección de errores,
como en nuestro caso lo es el CRC, así también se presenta sus características para
llevar acabo dicha detección de errores en la transmisión de datos entre terminales.
Además de sus diferentes formas de detección que presenta este dispositivo.
4.1 Métodos de detección de errores4.1 Métodos de detección de errores4.1 Métodos de detección de errores4.1 Métodos de detección de errores
Durante la transmisión de datos es muy común, en especial si las líneas de transmisión
están en un entorno eléctricamente ruidoso, las señales eléctricas que presentan el flujo
de bits transmitido sufran cambios a causa de la interferencia electromagnética que los
dispositivos eléctricos cercanos inducen en las líneas. Esto significa que el receptor podría
interpretar señales que representan un 1 binario como señales de 0 binario, o viceversa.
Para asegurar que la información recibida por un equipo terminal de datos (DTE – Data
Terminal Equipament) de destino tenga una alta probabilidad de ser idéntica a la que
envió el DTE transmisor, el receptor debe contar con algún mecanismo para obtener una
copia de la información correcta. Para lograr esto se emplean dos estrategias [17]:
• Control de errores hacia delante:Control de errores hacia delante:Control de errores hacia delante:Control de errores hacia delante: cada trama o carácter transmitido contiene
información adicional (redundante) que permite al receptor no solo detectar la
presencia de errores, sino además determinar en que punto del flujo de bits recibido
están dichos errores. Así los datos correctos se obtienen invirtiendo lo bits en
cuestión.
• Control de errores por rControl de errores por rControl de errores por rControl de errores por retroalimentación (retrospectivo)etroalimentación (retrospectivo)etroalimentación (retrospectivo)etroalimentación (retrospectivo): cada trama o carácter
incluye solo suficiente información adicional para que el receptor pueda saber si se
presentan errores, pero no si ubicación exacta. Se emplea un esquema de control
de retransmisión para solicitar el envió de otra copia de la información que, se
espera, será correcta.
En la práctica, el número de bits requeridos para lograr un control de errores hacia
adelante confiable crece rápidamente conforme aumenta el número de bits de
información. Para esto el control de errores por retroalimentación es el método
Capitulo IV Deteccion de errores por CRC
62
predominante en los sistemas de comunicación de datos y redes; este método se puede
dividir dos partes:
• Las técnicas que se usan para lograr una detección de errores confiable
• Los algoritmos de control con que se realizan los esquemas de control de
retransmisión asociados.
Los dos factores que determinan el tipo de esquema para la detección de errores son la
tasa de errores de bittasa de errores de bittasa de errores de bittasa de errores de bit (BERBERBERBER – Bit Error Rate) de la línea o circuito y el tipo de errores, es
decir, si los errores ocurren aleatoriamente en bits aislados o en grupos continuos de bits
erróneos, conocidos comúnmente como ráfagas de erroresráfagas de erroresráfagas de erroresráfagas de errores.
Tiene su importancia el tipo de errores presentes porque los distintos tipos de esquemas
para detectarlos identifican diferentes tipos de errores, además el número de bits
empleados en algunos esquemas determinan la longitud de las ráfagas que se detectan.
Los tres esquemas mas utilizados son los de paridad, verificación de suma de bloque y
verificación de redundancia cíclica [17].
4.1.1 Paridad4.1.1 Paridad4.1.1 Paridad4.1.1 Paridad
El método de bit de paridad es el más común para detectar errores de bit con transmisión
sincronía y transmisión asíncrona orientada a caracteres. Este esquema, el transmisor
agrega un bit adicional (el de paridad) a cada carácter antes de transmitirlo. El bit de
paridad empleado depende de los bits que constituyen el carácter transmitido. Al recibir
cada carácter, el receptor realiza la misma función con el y compara el resultado con el bit
de paridad recibido. Si son iguales, se supone que no hubo ningún error; si son distintos
se supone que hubo un error de transmisión [17].
Para calcular el bit de paridad de un carácter, utilizando aritmética de modulo 2 se suman
todos los bits “1” lógico del código correspondiente al carácter, y se escoge el bit de
paridad de paridad de modo que el numero total de bits “1” lógico (incluyendo el bit de
paridad mismo) sea par o impar como se ilustra a continuación.
Capitulo IV Deteccion de errores por CRC
63
( )( )InparParidad
ParParidad
paridaddeBit
01001001
11001001
↓
El método de bit de paridad solo detecta errores de bit individuales (o un número impar de
errores) y que si son dos los errores de bit (o un número par de errores) estos pasan
inadvertidos.
El diseño en hardware del método de paridad consiste en un conjunto de puertas XOR
conectadas como se ilustra en la figura No 4.1 (a). A la compuerta XOR también es
conocida como sumador de modulo 2 porque como se indica en su tabla de
funcionamiento de la figura 4.1 (b), salida de la operación XOR entre dos dígitos binarios
equivalente a la suma de esos dígitos sin el bit de acarreo. Primero se aplica una XOR al
par de bits menos significativos, a continuación se aplica otra XOR a la salida de la
operación anterior y el siguiente bit (mas significativo) y así sucesivamente. La salida de la
última puerta es el bit de paridad requerido, el cual se carga en el registro del transmisor
antes de enviar el carácter. De manera similar, en el extremo receptor, el bit de paridad
recalculado se compara con el recibido; sin son distintos, se habrá detectado un error de
transmisión.
(a)
(b)
Figura No 4.1. Diseño de en hardware del método de paridad: (a) Circuito generador del
bit de paridad, (b) Tabla de funcionamiento.
Capitulo IV Deteccion de errores por CRC
64
En la teoría de codificación, el término con que se describe la unidad de mensaje
combinada, compuesta por los bits de datos útiles y los bits adicionales para la detección
de errores, es el de la palabra del código. El número mínimo de posiciones de bit que
distingue dos palabras de código validas es la distancia Hamming del código. Si
consideramos un esquema de codificación que tiene siete bits de datos y un solo bit de
paridad en cada palabra de código además utilizando paridad par, las siguientes serán
palabras de código consecutivas en dicho esquema, a partir de esto podemos deducir que
el esquema tiene una distancia de Hamming de 2, ya que cualquiera de las dos palabras
de código validas consecutivas difieren en por lo menos dos posiciones. Por lo que
significa que este no detecta errores de dos bits, pues el patrón de bits resultantes
(alterado) será una palabra de código distinta pero valida. Sin embargo, si detecta todos
los errores de un solo bit, ya que si solo se altera un bit de una palabra de código se
obtendrá una palabra no valida [17].
4.1.2 Verificación de suma de bloque4.1.2 Verificación de suma de bloque4.1.2 Verificación de suma de bloque4.1.2 Verificación de suma de bloque....
Cuando se transmiten bloques de caracteres, es mayor la probabilidad de que un carácter
contenga un error de bit. La probabilidad de que un bloque contenga un error se denomina
tasa detasa detasa detasa de errores de bloerrores de bloerrores de bloerrores de bloquequequeque. Al estar transmitiendo bloques de caracteres (tramas)
podemos lograr una extensión en la capacidad de detección de errores obtenida con un
solo bit de paridad por carácter (byte) mediante un conjunto adicional de bits de paridad
calculado a partir del bloque completo de caracteres (bytes) de la trama. Con este método
a cada uno de los caracteres (bytes) de la trama se le asigna un bit de paridad
denominada paridad transversal o de fila; además se calcula un bit adicional por cada
posición de bit llamada paridad longitudinal o de columna de la trama completa. El
conjunto resultante de bits de paridad por cada columna recibe el nombre de carácter de
verificación (de suma) de bloque porque cada bit que compone este carácter es la suma
en modulo de todos los bits de la columna correspondiente. Para el ejemplo mostrado en
la figura No 4.2 se puede observar como se emplea paridad impar para los bits de paridad
de fila y paridad par para los bits de paridad de columna, y supone que la trama contiene
caracteres imprimibles [17].
Capitulo IV Deteccion de errores por CRC
65
Figura No 4.2. Ejemplo de verificación de suma de bloque
A partir de esto podemos deducir, que dos errores de bit en un carácter no serán
detectados por la verificación de paridad de fila, si serian detectados por la verificación de
paridad de columna correspondiente. Esto se cumple solo si ocurren dos errores de bit en
la misma columna simultáneamente, por supuesto la probabilidad de que esto suceda es
mucho menor que la probabilidad de que haya dos errores de bit en un solo carácter. Con
la verificación de suma el bloque mejora de manera significativa la capacidad de detección
de errores del esquema.
Una variante de este esquema consiste en utilizar la suma de complemento a 1 como
base para la verificación de la suma de bloque, en lugar de la suma de módulo 2 como se
muestra en la figura 4.3. Los caracteres (bytes) del bloque por transmitir se tratan como
numeros binarios sin signo, y el primer paso consiste en sumarlos mediante aritmética de
complemento a1 luego se invierten todos los dígitos de la suma obtenida y el resultado
sirve como carácter de verificación de bloque (BCC – Block Check Character). En el
receptor se calcula la suma de complemento a1 de todos los caracteres del bloque
(incluso el de verificación del bloque) y si no hay errores, el resultado deberá ser 0.
Capitulo IV Deteccion de errores por CRC
66
Figura No 4.3. Suma complemento a uno
4.1.3 Comprobación de redundancia cíclica (CRC)4.1.3 Comprobación de redundancia cíclica (CRC)4.1.3 Comprobación de redundancia cíclica (CRC)4.1.3 Comprobación de redundancia cíclica (CRC)....
La comprobación de redundancia cíclica (CRC – Cyclic Redundancy Check) es un código
de detección de errores que generalmente usado en los sistemas de comunicación de
datos y en otros sistemas de transmisión serial de datos. En los sistemas de interconexión
de redes una regla importante de la capa de enlace de datos es para convertir un enlace
físico no confiable potencialmente entre dos maquinas en un enlace aparentemente muy
fiable. Esto es llevado acabo por incluir información redundante en cada trama trasmitida.
Dependiendo de la naturaleza del enlace y el dato, cada uno solo incluye suficiente
redundancia para hacer esto posible para detectar errores y posteriormente para colocar
en orden para la retransmisión de las tramas dañadas. La comprobación de redundancia
cíclica o CRC es un bit de paridad usado generalmente en un esquema basado en la
detección de errores en aplicaciones de transmisión serial de datos [19].
La codificación redundante es un método de detección de error que difunde información
de más bits que los datos originales mientras mas bits redundantes se usen mayor va
hacer la oportunidad de detectar errores de la transmisión. Por ejemplo, un incremento de
16 bits en la longitud del registro de datos pierde un error en 65,536, mientras que un
incremento de 32 bits pierde un error en 4 billones.
Aunque esas probabilidades son favorables, errores indectables aun pueden ocurrir. La
naturaleza de errores comunes varía dependiendo de la transmisión y del medio de
almacenamiento pero errores indetectables pueden ser causados por bits cambiados
ocasionalmente asilados o por pequeñas ráfagas de múltiples bits cambiados. Para
minimizar los errores indetectables, se puede distribuir los datos así que esto es
Capitulo IV Deteccion de errores por CRC
67
probablemente menor que los errores de transmisión que resultaran en una codificación
valida de un conjunto alternado de datos [18].
Este método de detección de errores funciona en aplicaciones en las que se presentan
ráfagas de errores debemos contar con un método que no solo calcule errores aleatorios
de un solo bit. Una ráfaga de errores comienza y termina con un bit erróneo, aunque los
bits intermedios pueden estar o no alterados. Por lo tanto, una ráfaga de errores se define
como el número de bits entre dos bits erróneos sucesivos comprendidos los dos bits
incorrectos. Además, al determinar la longitud de una ráfaga de errores, el último bit
erróneo de una ráfaga y el primer bit erroneo de la siguiente ráfaga deben estar separados
por B o más bits correctos, donde B es la longitud de la ráfaga de errores. El CRC esta
basado en manipulaciones de códigos polinomiales, que se aplican a esquemas de
transmisión de tramas (bloques). Por cada trama transmitida se genera (calcula) un
conjunto único de dígitos de verificación, con base en el contenido de la trama, y el
transmisor lo añaden al final de la trama. El receptor a su vez hace un cálculo similar a la
trama completa y los dígitos de verificación.
Los códigos de redundancia cíclica son un tipo favorable de codificación redundante.
Estos revisan las diferencias entre el trasmisor de datos y el dato original. Las
aplicaciones de la transmisión de datos usan extensamente CRC. Por ejemplo, la
especificación del Modo de Transmisión Asíncrono (ATM – Asynchronous Transfer Mode)
requiere un CRCC que es implementado a través de la carga entera para asegurar la
integridad del dato [18].
Los CRC son particularmente efectivos para dos razones:
• Estos proporcionan excelente protección en contra de errores comunes, como
ráfagas de errores donde bits consecutivos en un flujo de datos son corrompidos
durante la transmisión.
• El dato original es la primer parte de la transmisión, el cual hace el sistema que usa
CRC fácil para entender e implementar.
Capitulo IV Deteccion de errores por CRC
68
4.2 Creando CRC.4.2 Creando CRC.4.2 Creando CRC.4.2 Creando CRC.
En general, la lógica digital no implementa la división de números eficientemente muy
largos. Consecuentemente, la información binaria debe ser convertida de la manera más
apropiada antes de usar el CRC [18]. La alternativa más común se basa en los códigos
polinomiales que se aplican a esquemas de transmisión de tramas (bloques). Por cada
trama transmitida se genera (calcula) un conjunto único de dígitos de verificación, con
base en el contenido de la trama, y el transmisor lo añaden al final de la trama. El
receptor, a su vez, realiza un cálculo similar con la trama completa y los dígitos de
verificación. Si no se han inducido errores, siempre se obtendrá un resultado conocido; si
no se obtiene una respuesta distinta, se habrá de detectado un error.
El CRC es usado generalmente en un esquema basado en la detección de errores en
aplicaciones de transmisión serial de datos. Este código esta basado en un polinomio
aritmético. Por lo que los bits de datos para ser transmitidos son representados como los
coeficientes de un polinomio largo, más que como un número binario largo, como un
ejemplo el bit de flujo 1101011011 tiene 10 bits, representando un polinomio en termino 10
[19]:
M(x) = (1)(X9)+(1)(X8)+(0)(X7)+(1)(X6)+(0)(X5)+(1)(X4)+(1)(X3)+(0)(X2)+(1)(X1)+ (1)(X0)
M(x) = X9 + X8 + X6 + X4 + X3 + X1 + 1
Donde M(x) es el mensaje a transmitir
Para calcular el CRC de un mensaje, se aplica aritmética de modulo 2 sin acarreo donde
el modulo de aritmética da el mismo resultado para suma y resta. Por lo tanto es necesario
solo considerar tres operaciones involucrando polinomios a saber, suma, multiplicación, y
división [19].
• La suma de dos polinomios (x8 + x7 + x5 + x4 + x2 + x + 1) y (x5 + x4 + x3 + x2) dan: x8
+ x7+ x3 + x + 1.
x8 + x7 + x5 + x4 + 0 + x2 + x + 1 = 110110111
0 + 0 + x5 + x4 + x3 + x2 + 0 + 0 = 000111100
x8 + x7 + 0 + 0 + x3 + 0 + x + 1 = 110001011
Capitulo IV Deteccion de errores por CRC
69
• La multiplicación de dos polinomios (x7 + x6 + x5 + x2 + 1) y (x + 1) resulta en: x8 +
x5 + x3 + x2 + x + 1
(x7 + x6 + x5 + x2 + 1) (x + 1) = (11100101) (11)
x8 + x7 + x6 + 0 + 0 + x3 + 0 + x + 0 = 111001010
0 + x7 + x6 + x5 + 0 + 0 + x2 + 0 + 1 = 011100101
x8 + 0 + 0 + x5 + 0 + x3 + x2 + x + 1 = 100101111
Nótese que la aplicación de un polinomio por un xm resulta en un patrón bit desplazado
con ceros en la “m” posición mas baja. Por ejemplo:
x5 (x11 + x10 + x8 + x4 + x3 + x + 1) = x16 + x15 + x13 + x9 + x8 + x6 + x5
• La división de dos polinomios (x13 + x11 + x10 + x7 + x4 + x3 + x + 1) y (x6 + x5 + x4 +
x3 + 1) resulta en un cociente de (x7 + x6 + x5 + x2 + x + 1) y un residuo de (x4 + x2)
como se muestra a continuación.
x13 + x11 + x10 + x7 + x4 + x3 + x + 1 = 10110010011011
x6 + x5 + x4 + x3 = 1111001
11100111 = x7 + x6 + x5 + x2 + x + 1 (cociente)
10100 =x4 + x2 (residuo)
Además si se aplica aritmética de modulo 2, el método se sustenta en la siguiente
propiedad de los números binarios sea [17]:
- M(x) un numero de k bits (mensaje a transmitir);
- G(x) un numero de (n + 1) bits (el divisor o el generador);
- R(x) un numero de n bits tal que K>n (residuo)
Capitulo IV Deteccion de errores por CRC
70
Entonces si:
( )[ ]( )
( ) ( )( )xG
xRxQ
xG
xM n
+=2
, donde Q(x) es el cociente
( )[ ] ( )( )
( )xQxG
xRxM n
=+2
, suponiendo aritmética modulo 2.
Es fácil confirma este resultado sustituyendo la expresión correspondiente ( )[ ]( )xG
xM n2
en la segunda ecuación, lo que no da:
( )[ ] ( )( )
( ) ( )( )
( )( )xG
xR
xG
xRxQ
xG
xRxM n
++=+2
Lo que es igual Q(x), ya que en aritmética modulo 2 cualquier numero sumado a si mismo
produce cero; es decir, el residuo es cero.
Para aprovechar esto, el contenido total de la trama, M(x), junto con un conjunto
concatenado de tantos ceros como dígitos de secuencia de verificación de trama (FCS –
Frama Check Sequence) o mejor conocida como dígitos de CRC, que se van a generar
(lo que es equivalente a multiplicar el mensaje por 2n, donde n es el numero de dígitos de
la FCS), se divide modulo 2 por un segundo numero binario, G(x), el polinomio generador,
que contiene un digito mas que la FCS. La división equivale a realizar la operación de
XOR bit por bit en paralelo conforme se procesa cada bit de la trama. El residuo R(x) será
entonces al FCS que será transmitida al final de los dígitos de información. De manera
similar, en el receptor, el flujo de bits de llegada, entre ellos los dígitos de la FCS, se divide
otra vez entre el mismo polinomio generador –esto es, ( )[ ]( )xG
xRxM n )(2 + - y si no se
presentan errores, el residuo solo contendrá ceros. En cambio, si se presenta un error, el
residuo será distinto se cero [17].
4.2.1 Detección de errores.4.2.1 Detección de errores.4.2.1 Detección de errores.4.2.1 Detección de errores.
Generalmente, los CRCC detectan los siguientes tipos de errores:
• Errores de un solo bit
• Errores de dos bits
Capitulo IV Deteccion de errores por CRC
71
• Errores de tres bits y otros bits de números impares
• Ráfagas de errores que son menos que o igual a la longitud del CRC
• Ráfagas de errores que son mas grandes que la longitud del CRC
Los tipos de errores que un CRCC detecta depende del polinomio generador en la tabla
4.1 muestran varios de los polinomios generadores mas comunes para diferentes
aplicaciones [18].
Polinomios generadores comunes
Nombre del generador Polinomio
SDLC (CCITT) X16 + x12 + x5 + x0
SDLC reversa x16 + x11 + x4 + x0
CRC -16 x16 + x15 + x2 + x0
CRC – 16 reversa x16 + x14 + x1 + x0
CRC – 12 x12 + x11 + x3 + x2 + x1 + x0
Ethernet x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x1 +
x0
Tabla No 4.1 Polinomios generadores comunes
Diferentes polinomios generadores tienen diferentes habilidades de detección de errores.
Para conseguir óptimos resultados, debes usar un polinomio generador que efectivamente
detecte y corrija los errores en la transmisión esperados. Alternamente, puedes usar un
generador polinomio estándar que sea apropiado para una transmisión peculiar media
[18]. Algunos de los más comunes CRC estándar son el CRC-8, CRC-12, CRC-16 y CRC-
32.
El CRC-16 es un estándar que usa el polinomio generador: G(x) = X16 + X15 + X2 + 1. Este
detecta todos los errores simples y dobles, todos los errores con un numero impar de bits,
todas las ráfagas de errores de longitud 16 o menos y mas los errores para ráfagas mas
largas. Además como este polinomio generador se añadirán 16 ceros al contenido de la
trama antes de la generación de la secuencia de verificación de trama, esta ultima seria el
residuo de 16 bits. Este CRC es muy utilizado en la redes WAN a diferencia del CRC-32
que es la más usada en redes LAN; teniendo un polinomio generador:
Capitulo IV Deteccion de errores por CRC
72
G(x) = X32 + X26 + X23 + X22 + X16 + X12 + X11 + X10 + X8 + X7 + X5 + X4 + X2 + X + 1
4.2.2 Calculo de CRC serial4.2.2 Calculo de CRC serial4.2.2 Calculo de CRC serial4.2.2 Calculo de CRC serial
Típicamente, los cálculos del CRC son implementados con un Registro de
Desplazamiento con Retroalimentación Lineal (LFSR) mencionados anteriormente. Los
LFSR usan un método que dan los mismos resultados como restar y el proceso de
desplazamiento de división cuando la resta es efectuada sin acarreo por la función XOR.
Para afectar la resta y el desplazamiento de división de un solo bit a la vez, puedes
desplazarlo y examinar cada bit en la trama original de datos (por ejemplo el dividendo).
Para el primer bit de valor 1, el bit divisor de orden alto es obtenido del dividendo. El bit
dividendo, el cual es innecesario y no es generado, es asignado al cero para la resta. Los
bits de orden mas bajo del divisor aun no pueden ser obtenidos, porque los bits del divisor
correspondiente no han sido desplazados.
La figura 4.4 muestra el generador CRC-16 calculado serialmente del Comité Consultivo
Internacional de Telefonía y Telegrafía (CCITT - Consultative Committee International
Telegraph y Telephone). El bit coeficiente “1” (XOR16) es retroalimentado y obtenido de
las taps apropiadas en el registro de desplazamiento (XOR12, XOR5, XOR0). Esos bits
son desplazados hacia delante para aparecer al final y ser obtenidos del siguiente bit del
dato, si no son eliminados por un segundo bit coincidente de una anterior o de una
posterior resta que es retroalimentada [18].
Figura No 4.4 Configuración del LFSR para el CCITT CRC-16 (X16 + X15 + X2 + 1).
Capitulo IV Deteccion de errores por CRC
73
4.2.3 Calculo del CRC en paralelo.4.2.3 Calculo del CRC en paralelo.4.2.3 Calculo del CRC en paralelo.4.2.3 Calculo del CRC en paralelo.
El método serial trabaja bien cuando un dato es disponible en forma bit serial. Sin
embargo, hoy en día los sistemas de procesamiento de señal a alta velocidad procesan un
dato en un byte, palabra, y doble palabra (32 bits), o más anchos que la forma serial.
Incluso en sistemas de telecomunicaciones, los cuales transmiten datos serialmente, los
datos recibidos son encapsulados dentro de un dispositivo VLSI responsable de recuperar
el reloj y la “trama byte”. El dato es presentado al diseñador de la tarjeta en tramas de 8
bits en una velocidad manejable. Posteriormente, los diseños para dispositivos de alta
velocidad requerirán que el CRC sea calculado a 8 bits a la vez.
Se puede desarrollar un algoritmo del CRC en paralelo propuesto con un LFSR. Así como
expresar el contenido de un registro de desplazamiento después de 8 desplazamientos
como una función de condición inicial del registro de desplazamiento y los 8 bits de datos
desplazados. Esta función puede ser creada usando solo operadores XOR [18].
CAPÍTULO V
Capitulo V Diseño, pruebas y resultados
74
CAPITULO V. Diseño pruebas y resultadoCAPITULO V. Diseño pruebas y resultadoCAPITULO V. Diseño pruebas y resultadoCAPITULO V. Diseño pruebas y resultado
ResumenResumenResumenResumen
En este capitulo se muestran los diseños, simulaciones y resultados de cada dispositivo
que usaremos para la realización de un ciclo de comunicaron (transmisor-receptor), que a
su vez se diseñara y simulara, esto con la ayuda de nuestra herramienta AlteraTM
MAX+PLUS II versión 10.1
5.1 Lenguaje de Descripción de Hardware (VHDL)5.1 Lenguaje de Descripción de Hardware (VHDL)5.1 Lenguaje de Descripción de Hardware (VHDL)5.1 Lenguaje de Descripción de Hardware (VHDL)
5.1.1 5.1.1 5.1.1 5.1.1 Antecedentes.Antecedentes.Antecedentes.Antecedentes.
Debido a la creciente necesidad de integrar una gran cantidad de dispositivos en un
circuito integrado se han desarrollado diversas herramientas que auxilian en el diseño de
estructuras digitales. Esto permitió que en la década de los cincuenta aparecieran los
lenguajes de descripción de hardware (HDL). Estos lenguajes alcanzaron su mayor
desarrollo en la década de los sesentas, en la cual se desarrollaron varios de estos, tales
como IDL de IBM, TI-HDL de Texas Instruments, etc., todos ellos orientados al área
industrial; y para el ámbito universitario surgieron lenguajes como AHPL, DDL, CDL, ISP,
etc. Los primeros solo estaban disponibles para un número reducido de empresas y los
lenguajes de ámbito universitario carecían de soporte y mantenimiento adecuados que
permitieran su utilización industrial.
Debido a que no existía un estándar para este tipo de lenguajes en 1983 el departamento
de defensa de Estados Unidos contrató a tres compañías (IBM, Texas Instruments e
Intermetrics), para desarrollar un lenguaje de descripción de hardware estándar para
diseño, documentación y verificación de sistemas digitales, el cual lleva el nombre de
VHDL. Antes de este esfuerzo de normalización los diferentes diseñadores usaban
diferentes lenguajes de descripción de hardware, y por ello no podían intercambiar sus
diseños. Además las distintas empresas y diseñadores proporcionaban al Departamento
de Defensa descripciones de sus chips en diferentes lenguajes y también representaba un
problema. La reutilización fue también un problema con los diseños en estos lenguajes.
La versión 7.2 de VHDL que fue desarrollada y liberada al público en 1985 tuvo una gran
aceptación en la industria para el desarrollo de procesos, especialmente de compañías
Capitulo V Diseño, pruebas y resultados
75
que diseñaban chips VHSIC (Very High Speed Integrated Circuits). En 1986 el lenguaje
fue enviado a la IEEE para su estandarización, después de mejoras sustanciales al
lenguaje hechas por un equipo universitario, industrial y representantes del Departamento
de Defensa, el lenguaje fue estandarizado por la IEEE en diciembre de 1987, esta versión
fue conocida como la IEEE Std 1076-1987.
De acuerdo a las reglas de la IEEE, un estándar IEEE tiene que ser revisado cada cinco
años para que continúe siendo un estándar. Consecuentemente el lenguaje fue
modernizado con nuevas aplicaciones, la sintaxis de muchas estructuras se hizo más
uniforme y muchas ambigüedades presentadas en la versión de 1987 se resolvieron. Esta
nueva versión se conoce como el estándar IEEE Std 1076-1993 [20].
Hoy en día VHDL se considera como un estándar para la descripción, modelado y síntesis
de circuitos digitales y sistemas complejos. Este lenguaje presenta diversas
características que lo hacen uno de los HDL (lenguajes de descripción de hardware) mas
utilizados en la actualidad.
5.1.2 Definición5.1.2 Definición5.1.2 Definición5.1.2 Definición
VHDL es un acrónimo para VHSIC (Very High Speed Integrated Circuits) Hardware
Description Language. VHDL como su nombre lo dice es un lenguaje de descripción de
hardware que puede usarse para modelar un sistema digital a muchos niveles de
abstracción, desde el nivel algorítmico hasta el nivel de compuertas lógicas. La
complejidad de un sistema digital puede variar desde una simple compuerta hasta un
sistema electrónico digital completo o cualquier otro nivel entre estos [20] [21].
El lenguaje VHDL puede considerarse como una mezcla de los siguientes lenguajes:
• Lenguaje secuencial
• Lenguaje Concurrente (donde todos las entidades de un circuito trabajan en
paralelo)
• Especificaciones de tiempo.
• Lenguaje de lista de conexiones (Netlist).
• Lenguaje de generación de formas de onda.
Capitulo V Diseño, pruebas y resultados
76
VHDL cubre todos estos tipos de lenguajes de programación. Por consiguiente este
lenguaje fue concebido para mostrar el comportamiento concurrente o secuencial de un
sistema digital con o sin especificaciones de tiempo. También permite modelar un sistema
como una interconexión de componentes. La prueba usando formas de ondas también se
puede generar usando la misma construcción. Todos estos tipos de construcciones
pueden combinarse para proporcionar en un solo modelo una descripción comprensiva del
sistema. El lenguaje no solo define la sintaxis, también define una clara simulación
semántica para cada construcción. Por consiguiente, los modelos escritos en este
lenguaje pueden verificarse usando un simulador de VHDL como AlteraTM, Xilinx, FPGA
Advantage, etc. [20],[21],[22].
En MAX+PLUS II (AlteraTM) se pueden crear proyectos jerárquicos completos en VHDL, o
combinar archivos de diseño en VHDL con otro tipo de diseños en proyectos jerárquicos.
Con su editor de texto se pueden crear símbolos automáticamente que representen un
diseño en VHDL, e incorporarlo en un diseño gráfico (.gdf). Además, se pueden incorporar
funciones a la medida, es decir, funciones que fueron diseñadas para cubrir un aspecto
específico de nuestro proyecto. También AlteraTM proporciona funciones lógicas dentro
de cualquier diseño VHDL y paquetes de componentes que pueden usarse en cualquier
diseño en VHDL.
.vhd
.edf.gdf.tdf .tdf
.sch .xnf . .sym.adfo.smf
.wdf
MAX+PLUS IICompilador
(incluyendo lectorde listas de conexiones)
.cnf
.hif
Al modulo constructor
de base de datos del
compilador
Archivo de
diseño en
VHDL
Uno o más
CNF creados
por diseño
Archivo Símbolo
con el símbolo que
representa un archivo
de diseño lógico
.vhd
.edf.gdf.tdf .tdf
.sch .xnf . .sym.adfo.smf
.wdf
MAX+PLUS IICompilador
(incluyendo lectorde listas de conexiones)
.cnf
.hif
Al modulo constructor
de base de datos del
compilador
Archivo de
diseño en
VHDL
Uno o más
CNF creados
por diseño
Archivo Símbolo
con el símbolo que
representa un archivo
de diseño lógico
Figura 5.1 Archivos de diseño que están integrados dentro del sistema MAX+PLUS II.
La figura 5.1 muestra como los archivos de un diseño VHDL pueden integrarse dentro del
sistema MAX-PLUS II. Un proyecto jerárquico puede contener archivos de diseño VHDL,
archivos de texto para diseño en el lenguaje de descripción de hardware de Altera (AHDL)
Capitulo V Diseño, pruebas y resultados
77
(.tdf), archivos de diseño gráfico (.sch) en cualquier nivel de jerarquía de proyecto. En
contraste, archivos de diseño de formas de onda (.wdf), archivos de diseño de Altera
(.adf), archivos de máquinas de estado (.smf) y archivos en formato de lista de conexiones
Xilinx (.xnf) pueden ser usados solo en bajos niveles de un proyecto jerárquico, a menos
que el proyecto entero consista de un solo archivo WDF, ADF, SMF o XNF. El archivo .cnf
es un archivo binario de listas de conexiones del compilador y el archivo .hif es un archivo
de interconexiones jerárquicas que documenta las conexiones jerárquicas entre los
archivos del proyecto y proporciona la información necesaria para mostrar el árbol de
jerarquías del proyecto [21].
5.2 Construcción de LFS5.2 Construcción de LFS5.2 Construcción de LFS5.2 Construcción de LFSRsRsRsRs
5555.2.1 C.2.1 C.2.1 C.2.1 Condiciones de los LFSRondiciones de los LFSRondiciones de los LFSRondiciones de los LFSR para la generación de secuencias para la generación de secuencias para la generación de secuencias para la generación de secuencias
pseudoaleatorias.pseudoaleatorias.pseudoaleatorias.pseudoaleatorias.
La principal condición que debe de cumplir un LFSR para que genere una secuencia
pseudoaleatoria de periodo máximo, y con buenas propiedades estadísticas, es que los
puntos de retroalimentación estén dados por un polinomio primitivo. Si no se cumple con
esta condición entonces, no se garantiza ni que éste genere una secuencia de máxima
longitud 1-2L y tampoco la secuencia generada tenga buenas propiedades estadísticas.
En la construcción de generadores de secuencias pseudoaleatorias basados en LFSR se
deben de tomar las siguientes condiciones.
• Que los LFSR utilizados deben estar construidos con base en un polinomio primitivo.
• Que las longitudes de los LFSR sean primos relativos, es decir, que el máximo común
divisor de las longitudes de los LFSR sea 1.
• Que las longitudes de todos los LFSR sean diferentes (con excepción del generador
de Gollman y bilateral de control de paso).
La semilla con que se inicializan los LFSR no afecta en la complejidad lineal de la
secuencia generada, y tampoco en su longitud de periodo, siempre y cuando el LFSR
haya sido construido con base en un polinomio primitivo. Si se utilizan otros polinomios no
se cumplirá con la complejidad lineal ni con el periodo máximo de la secuencia generada.
Capitulo V Diseño, pruebas y resultados
78
En el caso de los generadores de secuencias basados en LFSR, si se cumplen con las
condiciones de construcción arriba mencionadas, la semilla de inicialización tampoco
afectará en la complejidad lineal y periodo de la secuencia. Cabe precisar que, para
diferentes semillas existen diferentes secuencias de salida, pero la complejidad lineal y
periodo serán constantes.
Los generadores de secuencias pseudoaleatorias utilizan una combinación particular de
LFSR con el fin de destruir la linealidad de éstos. La razón por la cual se diseñan
generadores de secuencias pseudoaleatorias basados en LFSR, es porque
desafortunadamente la secuencia de salida de un solo LFSR es fácil de predecir por
medio del algoritmo de Berlekamp-Massey que hace uso de una subsecuencia que
contenga 2L2L2L2L bits de la secuencia total generada por el LFSR. Y una vez obtenido el
polinomio, el cifrado hecho con esta secuencia se puede romper ya que conocemos el
LFSR con el cual se hizo el cifrado [8].
Para el diseño de estos generadores de secuencias pseudoaleatorias basados en los
LFSR, se hicieron modificaciones al funcionamiento del LFSR de máxima longitud, estas
modificaciones se realizaron para que los generadores de secuencias operen de forma
correcta. El LFSR de máxima longitud y sus modificaciones se mencionan a continuación:
1. LFSR que genera una secuencia de longitud máxima 1-2L , donde L es la longitud
del LFSR.
2. LFSR que depende del reloj y una señal de habilitación.
3. LFSR que genera una secuencia de De Bruijn. [8]
5.2.15.2.15.2.15.2.1.1.1.1.1 LFSR que genera una secuencia de longitud 2 LFSR que genera una secuencia de longitud 2 LFSR que genera una secuencia de longitud 2 LFSR que genera una secuencia de longitud 2LLLL----1.1.1.1.
El esquema general de un LFSR como se muestra en la figura 3.3 consta de un registro de
desplazamiento, compuertas AND y XOR, tiene una entrada y una salida. Todo esto
controlado por un reloj. A continuación, en la tabla 5.1, se presenta la función en VHDL
para un LFSR.
Capitulo V Diseño, pruebas y resultados
79
library IEEE;use IEEE.STD_LOGIC_1164.all;
USE ieee.std_logic_arith.all;
entity lfsr is
generic(ancho:integer:=4; polinomio:integer:=9; inicializacion:integer:=11);
--ancho = longitud del LFSR, polinomio = polinomio del LFSR--
--Inicialización = estado inicial del LFSR---
port(
clk: in std_logic; -- Reloj del sistema--
sel: in std_logic; -- carga la semilla en el LFSR e inicia el proceso--
tap: out std_logic_vector(ancho-1 downto 0); -- Estados del LFSR--
salida: out std_logic); -- Puerto de salida de los bits generados--
end lfsr;
Architecture comportamental of lfsr is
signal D: std_logic_vector(ancho-1 downto 0);
signal load,x: std_logic_vector(ancho-1 downto 0);
signal auxreg,aux:std_logic;
begin
process(clk,sel)
variable orexsignal: std_logic;
variable Q: std_logic_vector(ancho-1 downto 0);
begin
------------------------------------------------------
D<=conv_std_logic_vector(polinomio,ancho);
load<=conv_std_logic_vector(inicializacion,ancho);
------------------------------------------------------
if clk'event and clk='1' then
if sel='0' then
Q:=auxreg&Q(ancho-1 downto 1);
else
Q:=load;
end if;
end if;
Tap<=Q;
salida<=Q(0);
x<=Q and D;
----------------------xor----------------------------
orexsignal:=x(0);
for k in ancho-1 downto 1 loop
orexsignal:=x(k) xor orexsignal;
end loop;
auxreg<=orexsignal;
end process;
end comportamental;
Tabla 5.1 LFSR en código VHDL
Este código y el de los otros LFSR, así como también el de los generadores de secuencias
pseudoaleatorias que se mencionan más adelante son flexibles, ya que permite definir
distintas propiedades en los circuitos. Por ejemplo, se pueden definir diferentes LFSR
cambiando su longitud, polinomio de retroalimentación y semilla o conjunto de estados
Capitulo V Diseño, pruebas y resultados
80
iniciales. Para construir diferentes configuraciones, simplemente es necesario cambiar los
parámetros que se encuentran en la función generic generic generic generic [8].
generic(ancho:integer:=4; polinomio:integer:=9; inicializacion:integer:=11);generic(ancho:integer:=4; polinomio:integer:=9; inicializacion:integer:=11);generic(ancho:integer:=4; polinomio:integer:=9; inicializacion:integer:=11);generic(ancho:integer:=4; polinomio:integer:=9; inicializacion:integer:=11);
Por ejemplo, los valores que se encuentran actualmente indican que el LFSR:
• Tendrá longitud 4,
• Estará construido con un polinomio primitivo 4xx1 ++++++++ , de grado 4. La figura 5.2
muestra la correspondencia del valor 9 en el código VHDL y el polinomio 4xx1 ++++++++ .
• La semilla será 1011 y de acuerdo a la figura 3.2 el valor será de 11 en el código
VHDL.
xx4
8 4 2 1
1 1 10 Semilla=8+2+1=11
Polinomio= 8+1=9
Bit más significativo
xx4
8 4 2 1
1 1 10 Semilla=8+2+1=11
Polinomio= 8+1=9
Bit más significativo
Figura 5.2 LFSR con polinomio primitivo de grado 4
5.2.5.2.5.2.5.2.1.1.1.1.2222 LFSR controlado por el reloj y una señal de habilitación.LFSR controlado por el reloj y una señal de habilitación.LFSR controlado por el reloj y una señal de habilitación.LFSR controlado por el reloj y una señal de habilitación.
El funcionamiento de este LFSR es el siguiente. Si existe una señal de reloj, en cada
transición (positiva o negativa dependiendo de las necesidades) de esta señal, y si existe
un 1 lógico a la entrada el LFSR, este cambiará su estado, en caso contrario permanecerá
sin cambios.
Este tipo de LFSR es útil para el diseño de los generadores de Beth-Piper, Gollman,
Bilateral de Control de Paso, de Pasos Alternados y Multivelocidad de Massey-Rueppel. El
diseño en VHDL se muestra en la tabla 5.2.
Capitulo V Diseño, pruebas y resultados
81
library IEEE;use IEEE.STD_LOGIC_1164.all;
USE ieee.std_logic_arith.all;
entity lfsr_hab is
generic(ancho:integer:=4; polinomio:integer:=9;inicializacion:integer:=11);
--ancho = longitud del LFSR, polinomio = polinomio del LFSR--
--Inicialización = estado inicial del LFSR---
port(
hab: in std_logic; -- Señal de Habilitación --
clk: in std_logic; -- Reloj del sistema--
sel: in std_logic; -- carga la semilla en el LFSR e inicia el proceso--
tap: out std_logic_vector(ancho-1 downto 0); -- Estados del LFSR--
salida: out std_logic); -- Puerto de salida de los bits generados--
end lfsr_hab;
Architecture estructural of lfsr_hab is
signal Qaux: std_logic_vector(ancho-1 downto 0);
signal D: std_logic_vector(ancho-1 downto 0);
signal load,x: std_logic_vector(ancho-1 downto 0);
signal auxreg,aux:std_logic;
begin
process(clk,sel)
variable orexsignal: std_logic;
variable Q: std_logic_vector(ancho-1 downto 0);
begin
------------------------------------------------------
D<=conv_std_logic_vector(polinomio,ancho);
load<=conv_std_logic_vector(inicializacion,ancho);
------------------------------------------------------
if clk'event and clk='1' then
if sel = '1' then
Q := load;
ELSIF hab = '0' THEN
Q := Q;
ELSE
Q:=auxreg&Q(ancho-1 downto 1);
end if;
end if;
tap<=Q;
salida<=Q(0);
x<=Q and D;
----------------------xor----------------------------
orexsignal:=x(0);
for k in ancho-1 downto 1 loop
orexsignal:=x(k) xor orexsignal;
end loop;
auxreg<=orexsignal;
end process;
end estructural;
Tabla 5.2 LFSR controlado por el reloj y una señal de habilitación.
Capitulo V Diseño, pruebas y resultados
82
Existen diferentes tipos de configuraciones [11], [23] para la construcción de generadores
de secuencias pseudoaleatorias, las cuales son:
• Generadores basados en la combinación no lineal de varios LFSR. [véase bibliografía
8]
• Generadores multireloj. [véase bibliografía 8]
• Generadores basados en el control de Reloj.
En este trabajo se diseñaron en VHDL diferentes generadores de secuencias
pseudoaleatorias, los diseños que aquí se presentan consideran todas las configuraciones
que se mencionan arriba. Además de presentar su código en VHDL, también se presentan
simulaciones y la comprobación de que los diseños realizados cumplen con la complejidad
lineal descrita en la teoría. Las diferentes configuraciones de generadores de secuencias
pseudoaleatorias se presentan a continuación.
5.3 5.3 5.3 5.3 Generadores basados en el control de reloj.Generadores basados en el control de reloj.Generadores basados en el control de reloj.Generadores basados en el control de reloj.
En los generadores con combinación no lineal el movimiento de los datos en todos los
LFSR es controlado por el mismo reloj. La característica principal de la configuración del
generador con control de reloj es introducir no linealidad en los generadores de
secuencias pseudoaleatorias basados en LFSR. Esta no linealidad se introduce teniendo
bajo control la salida de un LFSR por medio de un segundo LFSR. Entre los generadores
que utilizan esta configuración se encuentran el generador de Beth-Piper, el generador de
Gollman, el generador Bilateral de control de paso y el generador de Pasos Alternados
[24], los cuales se describen a continuación.
5.3.1 Generador bilateral de control de paso (5.3.1 Generador bilateral de control de paso (5.3.1 Generador bilateral de control de paso (5.3.1 Generador bilateral de control de paso (Bilateral StopBilateral StopBilateral StopBilateral Stop----andandandand----Go GeneratorGo GeneratorGo GeneratorGo Generator).).).).
Este generador utiliza dos LFSR ambos con la misma longitud L . La salida del generador
es la operación XOR entre las salidas de cada uno de los LFSR [11]. El control de paso se
realiza de la siguiente forma:
1) Si )1,0())2Lt(a),1Lt(a( ====−−−−++++−−−−++++ , entonces se bloquea el pulso de reloj del LFSR-B.
2) Si )1,0())2Lt(b),1Lt(b( ====−−−−++++−−−−++++ , pero )1,0())2Lt(a),1Lt(a( ≠≠≠≠−−−−++++−−−−++++ , entonces se
bloquea el pulso de reloj del LFSR-A.
Capitulo V Diseño, pruebas y resultados
83
a(t+L-1) a(t+L-2) …….. a(t)
b(t+L-1) b(t+L-2) …….. b(t)
L-stages LFSR-2
L-stages LFSR-1
Ф(t)
Ф(t)
ФA(t)
ФB(t)
b(t)
a(t+L-1) a(t+L-2) …….. a(t)
b(t+L-1) b(t+L-2) …….. b(t)
L-stages LFSR-2
L-stages LFSR-1
Ф(t)
Ф(t)
ФA(t)
ФB(t)
b(t)
Figura 5.3. Generador Bilateral de Control de Paso.
El periodo de la secuencia de salida es:
1)25(T 2L −−−−••••==== −−−−
si L L L L se elige de tal manera que T sea primo. Dependiendo del estado inicial, el generador
considerado puede producir hasta 1)23( 2L −−−−•••• −−−− secuencias distintas, todas ellas con el
mismo periodo. La complejidad lineal de la secuencia de salida puede ser de magnitud
aproximada al periodo [11][12].
5.3.1.1 Diseño en VHDL del generador bilateral de control de paso.5.3.1.1 Diseño en VHDL del generador bilateral de control de paso.5.3.1.1 Diseño en VHDL del generador bilateral de control de paso.5.3.1.1 Diseño en VHDL del generador bilateral de control de paso.
En esta parte se mostrará el diseño en VHDL del generador bilateral de control de paso
ya que este, fue el mejor sistema obtenido del trabajo realizado véase referencia
bibliográfica [8]. A su vez se recomienda dirigirse a esta bibliografía para la comparación
con los demás generadores como son: los generadores de Geffe, Beth-Piper, de pasos
alternados, de Gollman y el generador Multivelocidad de Massey-Rueppel. Todos los
dispositivos que se necesitan para el diseño de estos generadores se encuentran en la len
un archivo o librería, entre los dispositivos que se encuentran en esta librería están las
diferentes variaciones de LFSR que se vieron en la sección 5.2.
Capitulo V Diseño, pruebas y resultados
84
El funcionamiento de este generador se realiza de la siguiente forma (figura 5.3). Utiliza
dos LFSR ambos con la misma longitud L. La salida del generador es la operación XOR
entre las salidas de cada uno de los LFSR. Este generador hace uso de un LFSR con el
nombre lfsr_bsclfsr_bsclfsr_bsclfsr_bsc, el cual necesita un puerto de habilitación que provocará el cambio de
estado en el lfsr_bsc lfsr_bsc lfsr_bsc lfsr_bsc cada vez que exista una transición positiva en el reloj y exista un 1
en este puerto de habilitación. Además, tiene un puerto de salida que entrega la operación
[not(t+L[not(t+L[not(t+L[not(t+L----1)] nand (t+L1)] nand (t+L1)] nand (t+L1)] nand (t+L----2)2)2)2), de acuerdo al esquema del generador en la figura 5.3. El código
en VHDL que representa al diseño de este generador se muestra en la tabla 5.3.
library ieee;
use ieee.std_logic_1164.all;
library lib_gsp;
use lib_gsp.comps_gsp.all;
entity bilateralstepctrl is
generic(ancho:integer:=4; polinomio:integer:=9; semilla1:integer:=1; semilla2:integer:=1);
-------------ancho = longitud de los LFSR, polinomio = polinomio de los LFSR----------------
--ini# = estado inicial de los LFSR---
port ( clk: in std_logic; --Reloj del sistema--
tap1,tap2: OUT std_logic_vector(ancho-1 downto 0); --Estados del LFSR-1 y LFSR-2--
carga:in std_logic; -- carga la semilla en los LFSR e inicia el proceso--
salida:out std_logic); -- Puerto de salida de los bits generados--
end bilateralstepctrl;
Architecture vhdl of bilateralstepctrl is
signal CTRL_A,salida_a,salida_b,control_A,control_B: std_logic;
begin
L1:lfsr_bsc generic map(ancho=>ancho, polinomio=>polinomio,inicializacion=>semilla1)
port map(ctrl_a,clk,carga,TAP1,control_A,salida_a);
L2:lfsr_bsc generic map(ancho=>ancho, polinomio=>polinomio,inicializacion=>semilla2)
port map(control_a,clk,carga,TAP2,control_B,salida_b);
CTRL_A<= control_A nand (NOT control_B);
SALIDA<=salida_a XOR salida_b;
End vhdl;
Tabla 5.3 Generador Bilateral de control de paso.
5555.3.1.2 Resultados del generador bilateral de control de paso .3.1.2 Resultados del generador bilateral de control de paso .3.1.2 Resultados del generador bilateral de control de paso .3.1.2 Resultados del generador bilateral de control de paso ((((BILATERAL STOPBILATERAL STOPBILATERAL STOPBILATERAL STOP----
ANDANDANDAND----GO GENERATORGO GENERATORGO GENERATORGO GENERATOR).).).).
Los LFSR que se usan en este generador deben tener el mismo grado y la semilla puede
ser la que se desee con excepción de cero ya que si utilizamos esta semilla solo se
generara una secuencia de solo ceros y eso no tiene aplicación práctica. En este caso se
usa LFSR con polinomio primitivo de grado 15:
Capitulo V Diseño, pruebas y resultados
85
• LFSR
Polinomio: 15xx1 ++++++++ . Valor en decimal: 16385.
Semilla del LFSR1: 100000000000001. Valor en decimal: 16385.
Semilla del LFSR2: 100000000000011. Valor en decimal: 16387.
El periodo de la secuencia de salida es:
bits 409591)25(1)25(T 2152L ====−−−−••••====−−−−••••==== −−−−−−−−
La complejidad lineal de la secuencia de salida puede ser de magnitud aproximada al
periodo. La simulación de este generador la podemos encontrar en las figuras 5.4 y 5.5.
Figura 5.4 Inicio de la secuencia entregada por el Generador Bilateral de control de Paso
en ns 17.9 t ==== .
Figura 5.5 Final de la secuencia entregada por el Generador Bilateral de control de Paso
en s 819.1979 t µµµµ==== .
Capitulo V Diseño, pruebas y resultados
86
Como se muestra en las figuras 5.4 y 5.5, los estados de los LFSR de este generador que
son representados por los puertos tap1 y tap2, permanecen constantes durante 20 ns,
entonces si multiplicamos (en este caso en particular) este tiempo por 40959 bits que es el
periodo teórico del generador y al resultado le sumamos 17.9 ns que es cuando inicia la
secuencia, obtendremos que a los 819.1979 µs se entrega el último bit de la secuencia
generada. Después de este tiempo la secuencia vuelve a repetirse.
5.4 Construcción de CRC5.4 Construcción de CRC5.4 Construcción de CRC5.4 Construcción de CRC---- 32. 32. 32. 32.
Para el diseño del CRC o detector de errores como se vio en el capitulo 3 nosotros
debemos tener en cuenta el polinomio que se usara para este fin, de cuales los mas
usados son el CRC-16 (x16 + x15 + x2 + x0) y CRC-32 (x32 + x26 + x23 + x22 + x16 + x12 + x11 +
x10 + x8 + x7 + x5 + x4 + x2 + x1 + x0) [19], para este diseño nosotros no tenemos limitantes
en cuanto necesitar una semilla de inicialización ya que estos dispositivos se diseñaron
justamente para no depender de esta señal, cave mencionar que como en el sistema
anterior es necesario una señal de reloj que este nos habilitara el funcionamiento de este
elemento.
Hay dos maneras de realizar dicho dispositivo la primera de ellas es mediante el diseño
grafico de este CRC tomando en cuenta la figura 4.4 donde muestra la implementación de
un CRC-16 calculado serialmente, en el cual se muestra donde serán asignados de
manera binaria los coeficientes del polinomio (bits) a usar esto de una forma digital donde
los coeficientes son representados por un compuerta digital XOR estos bits son
desplazados hacia delante para aparecer al final y ser obtenidos del siguiente bit del dato,
si no son eliminados por un segundo bit coincidente de una anterior o de una posterior
resta que es retroalimentada [18]. Para nuestro proyecto se tuvo que diseñar dicho cálculo
serial, ya que el polinomio (CRC-32) que aplicaremos la asignación de los coeficientes es
diferente, quedando como se muestra en la figura 5.6. El cual se realizo por medio de la
herramienta brindada por MAX PLUS Altera donde se muestra la interpretación del
polinomio de grado 32 en forma digital.
Capitulo V Diseño, pruebas y resultados
87
Figura 5.6. CRC-32 Presentación grafica en AlteraTM MAX+PLUS II versión 10.1
5.4.1 5.4.1 5.4.1 5.4.1 Diseño VHDL del CRCDiseño VHDL del CRCDiseño VHDL del CRCDiseño VHDL del CRC----32323232
Como se menciono anteriormente hay dos maneras de construir un CRC-32 y la segunda
es por medio del leguaje VDHL, a partir del diseño grafico se puede extraer dicho VHDL,
como se puede observar todas las operaciones se llevan acabo a partir de un conjunto de
dispositivos lógicos como se puede ver en la figura 5.7. A este conjunto se le denomino
como basicobasicobasicobasico por lo que primero se procede a diseñar el VHDL de dicho conjunto ya este
nos proporcionara la creación de nuestros TAPS donde son asignados los coeficientes de
nuestro polinomio, esto es necesario ya que nuestro VHDL principal llamara a este
dispositivo para dicha creación.
Figura No 5.7. Conjunto básico para la contracción del CRC
Capitulo V Diseño, pruebas y resultados
88
Tomando en cuenta también el tamaño de nuestro polinomio que este será de grado 32,
que en nuestro lenguaje determina el ancho de los TAPS que creara el VHDL y también
poder construir diferentes tipos de CRC, simplemente es necesario cambiar los
parámetros que se encuentran en la función generic generic generic generic [8].
generic(ancho : integer := 32)generic(ancho : integer := 32)generic(ancho : integer := 32)generic(ancho : integer := 32)
Donde: integer= al grado del polinomio a usar
Esta es una ventaja de usar un lenguaje VHDL sobre un grafico ya que al necesitar hacer
una modificación al polinomio a usar para la construcción de diferentes CRC véase tabla
No 4.1. El modo grafico como se muestra en la figura 5.6, esta diseñado solamente para
un CRC-32 el cual si se necesita cambiar a un polimonio menor por mencionar CRC-16 se
tiene que modificar dicho diseño ya que se usan menos elementos y como se observa de
la figura 4.4 es completamente diferente la asignación de los bits del polinomio donde se
llevan acabo las operaciones para la detección de errores. Por lo tanto nos presenta una
perdida de tiempo.
Caso contrario en el lenguaje VHDL solo se necesita modificar la asignación del polinomio
ubicado en el lenguaje VHDL en la función CONSTANT DCONSTANT DCONSTANT DCONSTANT D, ya que la interpretación en
dicho lenguaje de este es completamente diferente en otras palabras de forma aritmética,
si recordaran al CRC-16 mostrado en este se representa de la siguiente manera x16 + x15 +
x2 + x0 [9] por lo que los bits de los datos para ser transmitidos son representados como
los coeficientes de un número binario largo esto es 10001000000100001 que representa
un polinomio de termino 16. Por lo tanto en nuestro proyecto el numero binario que
representa a un CRC-32 es 100000100110000010001110110110111 que equivale al
polinomio x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x1 + x0 de
termino 32, por lo tanto se encontrara como un valor default del lenguaje, esto es si se
desea usar un polinomio menor, solamente se modificaría la función CONSTANT D CONSTANT D CONSTANT D CONSTANT D y
agregar polinomio menor como los que se indican en la tabla No 4.1 ahorrando tiempo de
de volver a diseñar otro dispositivo. Como se observa en la tabla 5.4 que representa un
CRC-32 en lenguaje VDHL.
Capitulo V Diseño, pruebas y resultados
89
library IEEE;use IEEE.STD_LOGIC_1164.all;
USE ieee.std_logic_arith.all;
entity final is
generic(ancho : integer := 32);
port (clk: in std_logic;
crc: out std_logic;
sel: in std_logic;
data: in std_logic);
end final;
architecture fantasy of final is
component basico is port (A,B,C: in std_logic;
CLK: in std_logic;
sel: in std_logic;
Q: out std_logic);
end component;
CONSTANT D : std_logic_vector(ancho downto 0) := "111011011011100010000011001000001" ; -
-"100000100110000010001110110110111";
signal reg: std_logic_vector(ancho-1 downto 0);
signal retro: std_logic;
signal saland: std_logic;
signal intercon: std_logic_vector(ancho-1 downto 0);
signal a: std_logic_vector(ancho-1 downto 0);
signal b: std_logic_vector(ancho-1 downto 0);
signal c: std_logic_vector(ancho-1 downto 0);
begin
-------------Converción de los valores enteros del polinomio y de la semilla a estados logicos----
--D<=conv_std_logic_vector(polinomio,ancho);
----------------------inicio de bloques--------------------------------------------
ffi: for k in ancho-1 downto 0 generate
first: if k=ancho-1 generate
primero: basico port map (a(k),b(k),c(k),CLK,sel,intercon(k));
reg(k)<=intercon(k);
a(k)<=D(k+1);
b(k)<=retro;
c(k)<= '0';
end generate first;
middle: if k < ancho-1 generate
medios: basico port map (a(k),b(k),c(k),CLK,sel,intercon(k));
reg(k)<=intercon(k);
a(k)<=D(k+1);
b(k)<=retro;
c(k)<=intercon(k+1);
end generate middle;
ultimo: if k=0 generate
saland<= D(k) and data;
retro<= saland xor intercon(k);
crc<=reg(k);
end generate ultimo;
end generate ffi;
end fantasy;
Tabla 5.4 Diseño en lenguaje VHDL del CRC-32
Capitulo V Diseño, pruebas y resultados
90
5.4.2 Resultados del CRC5.4.2 Resultados del CRC5.4.2 Resultados del CRC5.4.2 Resultados del CRC----32323232
En las figuras 5.8 y 5.9 se pueden observar los resultados obtenidos a partir del diseño
grafico y del lenguaje VHDL del CRC-32, teniendo en cuenta que debido a que no
contamos un tren de datos específicos se procedió a solo introducir datos aleatorios como
prueba, en otras palabras colocar 1’s lógicos en la entrada de datos teniendo por ejemplo
como características que el tren de bits puede iniciar ya sea casi inmediatamente o con un
tiempo mayor después de encender el dispositivo, que cada uno cuenta con una duración
de 20ns 20ns 20ns 20ns y una duración de 60ns60ns60ns60ns entre cada pulso lógico o mas esto depende directamente
del usuario. Teniendo como resultado después de 15ns15ns15ns15ns esta medida es tomada a partir de
que el último dato haya sido enviado hasta que el primer bit de nuestra cadena haya sido
entregado en la salida de este dispositivo notando así que los mismos bits son de la
misma duración, como se pude observar el resultado es el mismo en ambos diseños. La
diferencia entre estas dos ilustraciones radica en que el modo grafico nos presenta la
entrada de los datos del polinomio a usar, caso contrario el VHDL no lo hace ya que este
se introduce como un valor de default.
Figura 5.8 Resultados CRC-32 diseño grafico con inicio del tren t=40nst=40nst=40nst=40ns....
Figura 5.9 Resultados CRC-32 lenguaje VHDL con inicio del tren t=40nst=40nst=40nst=40ns
Capitulo V Diseño, pruebas y resultados
91
5.5 Construcción de los dispositivos para transmisión y recepción de 5.5 Construcción de los dispositivos para transmisión y recepción de 5.5 Construcción de los dispositivos para transmisión y recepción de 5.5 Construcción de los dispositivos para transmisión y recepción de
datos.datos.datos.datos.
En esta parte del capitulo se muestra el objetivo de este trabajo que es el diseño de
dispositivos para la transmisión y recepción de datos de una manera eficiente y segura,
esto es posible a partir de la interacción de todos los elementos anteriormente expuestos
dados su comportamiento y resultados. Ya que por medio de la interactividad que nos
brinda nuestra herramienta de simulación AlteraTM MAX+PLUS II versión 10.1 podemos
crear símbolos de nuestros programas (lenguajes VHDL), en otras palabras a estos
dispositivos se les conocen como “cajas negras” en las cuales nosotros no sabemos nada
de su comportamiento interno solamente podemos observar de acuerdo a su
configuración externa entradas y salidas de los dispositivos, para esto utilizaremos el
diseño grafico para crear de una manera clara la construcción de estos dispositivos.
Debemos tomar en cuenta que este diseño contendrá las dos partes que engloban a ciclo
de comunicación con el cual podremos observar la velocidad de generación de las
secuencias de datos durante la transmisión en cada uno de las partes del sistema, así
como también la frecuencia de reloj del FPGA que se escoja. En este caso, todos los
dispositivos se han simulado en un FPGA de la familia MAX9000S (EPM9320LC84-15)
con las herramientas que proporciona ALTERA y no ocupando ninguna directriz especial
de síntesis para la optimización el diseño.
En la figura 5.10 se muestra el diseño grafico del ciclo de comunicación, en el cual
tenemos en cuenta que tanto en la transmisión y la recepción tendrán presentes que el
generador bilateral de control de paso contiene las configuraciones antes expuestas en la
sección 5.3.1.1, así como los polinomios primitivos usados en los LFSR para la generación
de las secuencias pseudoalatorias, cabe aclara que en estos últimos se puede cambiar el
valor del polinomio primitivo con el cual iniciaran los LFSR como se ha dicho
anteriormente ya que entre mas grande sea el polinomio primitivo a usar para cifrar será
mas robusto nuestro sistema, teniendo en cuenta así que para nuestras pruebas se esta
usando un polinomio primitivo de grado 15 esto en ambos lados de la comunicación. Así
como un CRC de 32 bits donde se llevara el proceso de detección de errores dependiendo
la ráfaga de datos que este reciba.
Capitulo V Diseño, pruebas y resultados
92
Figura 5.10. Ciclo de comunicación presentación grafica en AlteraTM MAX+PLUS II versión
10.1
En la figura 5.11 se muestra la simulación en la parte de transmisión en un FPGA con un
reloj de 50MHz donde se puede observar que contamos con múltiples entradas o puertos
de los cuales los principales por mencionar son el puerto clockclockclockclock que nos proporcionara los
pulsos de reloj para la habilitación de nuestro dispositivos, mientras tanto cuando en el
puerto carga carga carga carga existe un pulso positivo se cargan en los LFSR que conforman al generador
bilateral de control de paso el valor de la semilla o conjunto de estados iniciales, que en
este caso el LFSR-1 tiene el valor inicial o semilla de 16385, el LFSR-2 tiene una semilla
con el valor de 16387; cuando existe un pulso negativo en el puerto carga, los LFSR
comienzan a realizar las operaciones con sus respectivas semillas. Los puertos de salida
que tienen el nombre de TAP1TAP1TAP1TAP1 y TAP2TAP2TAP2TAP2 muestran cada uno de los estados que los LFSR-1
y LFSR-2 respectivamente, tendrán en cada ciclo de reloj. A su vez el puerto selectselectselectselect
brindara la activación de nuestro CRC esto es si este se encuentra en estado negativo,
trabajara desde el inicio de la carga si este es activado con pulso positivo dependiendo
donde transcurre ese pulso es donde el CRC empezara a trabajar en otras palabras que
ese tiempo en que tarda en trabajar el CRC es el mismo que se presentara a la entrega de
los datos en el receptor y por ultimo el puerto que es la entrada de los datosdatosdatosdatos a transmitir ya
que estos pasaran por nuestros dispositivos tanto para encriptar la información y
detección de errores, cabe aclarar que para pruebas de este dispositivo se crearon
diferentes pulsos que representan dichos datos y el tiempo de duración de estos puede
variar de acuerdo a la información que nosotros introduzcamos por este puerto.
Capitulo V Diseño, pruebas y resultados
93
Figura 5.11. Resultados de dispositivo de comunicación
También podemos encontrar las salidas que nos brindaran estos dispositivos, tanto la
cadena cifrante que nos entrega el generador bilateral de paso que se representa en el
puerto salidasalidasalidasalida,,,, así como las salidas TAP1 y TAP2 y puertos de salida LFSR1 y LFSR2
antes mencionados y por ultimo tenemos el puerto de salida CRCCRCCRCCRC que es justamente la
salida de este dispositivo. Las salidas de ambos dispositivos son entregadas a las
entradas de una compuerta lógica XOR ya que esta hará la función de unir las dos
cadenas de bits de los dispositivos tanto la cifrante como la de datos y la salida de esta
compuerta se obtendrá la cadena con la información ya cifrada, la cual será trasmitida por
cualquier medio hacia el receptor. Esto gracias a las propiedades de la compuerta como lo
es la propiedad involutiva donde (X’)’= X.
Lo anterior se puede observar en ambas partes del sistema ya que son las mismas
entradas y salidas tanto en transmisor como el receptor cabe aclarar que este ultimo
también dependerá de las mismas señales de habilitación con las mismas características
que los dispositivos en el transmisor en esta parte es donde se llevara acabo la detección
de errores por medio del CRC-32 y la desencritacion de la información para obtener
nuestros datos originales antes de ser enviados por estos medios.
La información cifrada dada por el transmisor es recibida por otra compuerta XOR en uno
de sus puertos de entrada en un tiempo de 150ns150ns150ns150ns [véase figura 5.11] y el otro puerto de
entrada será alimentada nuevamente por el puerto de salidasalidasalidasalida de otro generador bilateral de
control de paso con los mismos estados iniciales de los LFSR que el del transmisor ya que
esto será la llave para desencriptar nuestra información, como se menciono anteriormente
esto es posible debido a esta compuerta lógica por medio de la propiedad involutiva. Por
lo tanto el puerto de salida de la compuerta XOR será la información original antes de ser
transmitida pero esta no es con certeza dicha información; por lo que se lleva acabo una
Capitulo V Diseño, pruebas y resultados
94
detección de errores por medio del CRC-32 ya que en esta información pueden
presentarse errores en la transmisión ya sea por el medio de transmisión o si alguien ha
intentado robar dicha información u otras situaciones. Al final este dispositivo entregara la
información original o si se presento un error durante la transmisión como se muestra en el
puerto de salida CRCCRCCRCCRC....
CONCLUSIONES Y
TRABAJO A FUTURO
95
CCCConclusionesonclusionesonclusionesonclusiones....
Para encriptar información nosotros podemos usar un solo LFSR pero esto tiene un
periodo menor en la generación de secuencias cifrantes y por ende su robustez es muy
pequeña y esto lleva a que se descubra la llave con la que trabajan dichos LFSR, por eso
la creación de generadores que nos produzcan una mayor robustez y un periodo mayor de
secuencias cifrantes que tienen estos LFSR, siendo así la base de su construcción, donde
estos deben ser diseñados con polinomios primitivos y que esto generan una secuencias
de longitud 1-2L, donde L es el grado del polinomio. El generador bilateral de control de
paso es uno de los mejores generadores ya que este presenta una complejidad (robustez)
alta esto es con el polinomio de grado 15 que usamos en las pruebas se pueden generar
40959 bits para cifrar, generando así una secuencia el orden a una velocidad 50Mb/s,
cabe aclarar que nosotros podemos utilizar polinomios primitivos mas grandes los cuales
nos brindaran mas robustez en nuestros sistemas cifradores. Estos valores podemos
encontrar los valores de otros generadores los cuales se estudian más a fondo en la tesis
“Diseño de arquitecturas digitales para criptografía”.
Hay muchos métodos de detección de errores, el mostrado en este trabajo es uno de los
mejores para detectar errores durante la transmisión de datos entre dos terminales, ya que
es muy común que se presenten por ruido ya sea por dispositivos o medios de transmisión
entre estas, esto significa que en el receptor nosotros podamos interpretar señales que
representan un 1 binario como señales de 0 binario y viceversa. El CRC mas utilizado es
el CRC-16 por lo que se encuentran muchos diseños de este, creando así un diseño único
del CRC-32 en este trabajo que es una interpretación en base al CRC-16, asignando de
forma correcta el polinomio generador correspondiente a este. El CRC-16 detecta errores
en una ráfaga de estos con menos de 16 bits, así que nuestro diseño da más eficiencia en
cuanto a la detección de errores entre los sistemas de datos y redes.
Todos los dispositivos de este proyecto fueron diseñados en VHDL ya que este lenguaje
nos brinda una descripción de cómo funciona el hardware. Dados los resultados obtenidos
96
podemos decir que tanto el cifrador de flujo y el CRC-32 utilizando un FPGA es una
excelente alternativa ya que las celdas lógicas que componen a este dispositivo solo se
utilizo el 70% de su capacidad, esto debido a que el diseño completo del ciclo que simula
la comunicaron se introdujo completamente en el FPGA EPM9320LC84-15 así como
todos los elementos que con llevan a la creación del generador de secuencias cifrantes y
el CRC. Para pruebas físicas nosotros podemos utilizar un FPGA con menos capacidad de
celdas lógicas por ejemplo el EPM7128SLC84-7 ya que cada uno de estos cubrirá el 50%
del diseño completo por ejemplo en uno solo se cargara con el diseño de transmisor y otro
con la del receptor.
Trabajo a futuro.Trabajo a futuro.Trabajo a futuro.Trabajo a futuro.
Tomando en cuenta que este proyecto el cual esta simulado en AlteraTM MAX+PLUS II
versión 10.1, lo que resta hacer es la adquisición de los FPGA’s, así como el traslado de
nuestro sistema en dos partes, ya que una fungirá como transmisor y una como receptor
por medio de una interfase (incluida en el FPGA), para realizar la pruebas
correspondientes del desempeño de este. A su vez la investigación de cómo convertir un
archivo de cualquier extensión ya se un texto, una imagen, video, audio etc., a un código
binario que pueda ser enviado por un puerto por ejemplo un puerto paralelo de una PC o
de cualquier otro equipo, y esta cadena de bits resultantes sea la que utilizaremos para
poder enviar a través de nuestro sistema, ya sea por medio de la creación de un programa
en cualquier lenguaje de programación orientada a objetos u otro medio. Además se
podrían hacer pruebas del sistema en diferentes medios de transmisión, ya este sistema
esta orientado a el campo de intercomunicación de las redes de datos. Otro trabajo a
realizar seria el diseño de otros detectores de errores dependiendo el modo en que se
transmitirá nuestra información.
ACRONIMOS
97
ÍNDICE DE ACRÓNIMOSÍNDICE DE ACRÓNIMOSÍNDICE DE ACRÓNIMOSÍNDICE DE ACRÓNIMOS
ABM Algoritmo de Berlekamp-Massey
ADF Altera Design Files
ASIC Application Specific Integrated Circuit
CDL Computer Design Language
CL Complejidad Lineal
CPLD Complex Programable Logic Device
CRC Cyclic Redundancy Check
DDL Data Description Language
DTE Data Terminal Equipament
FPLD Field Programmable Logic Devices
FPGA Field Programmable Gate Array
FSR Feedback Shift Register
HDL Hardware Description Language
ISPS Instruction Set Processor Specifications
MPGA Mask-Programable Gate Arrays
LFSR Linear Feedback Shift Register
MPLD Mask-Programmable Logic Device
NLFSR NonLinear Feedback Shift Register
PLD Field-Programmable Logic Array
1SC Sphere Complexity
SLFSR Shortest Linear Feedback Shift Register
SMF State Machine Files
VHDL VHSIC Hardware Description Language
VHSIC Very High Speed Integradted Circuits
WDF Waveform Design Files
WC Weight Complexity
XNF Xilinx Netlist Format Files
BIBLIOGRAFIA
98
BIBLIOGRAFÍABIBLIOGRAFÍABIBLIOGRAFÍABIBLIOGRAFÍA
[1] Stephen Brown and Jonathan Rose, “Architecture of FPGAs and CPLDs: A Tutorial”.
University of Toronto, Department of Electrical and Computer Engineering.
[2] Oldfield John V., Dorf Richard C., Field Programmable Gate Arrays, John Wiley & Sons
Inc., USA, 1995.
[3] Trimberger Stephen M., Field-Programmable Gate Array Technology, Kluwer Academic
Publishers, USA, 1994.
[4] Wakerly, Jhon F. Diseño digital: Principios y Prácticas, Tercera Edición Pearson Pretice
Hall, México 2001.
[5] Miller Andy, Gulotta Michael; PN Generator Using SRL Macro; Article XILINX XAPP211
June 14, 2004.
[6] Lirn Stephen, Miller Andy; LFSRs as Funtional Blocks in Wireless Aplications; Article
XILINX XAPP220 January 11, 2001.
[7] George Maria, ALfke Peter; Linear Feedback Shift Registers in Virtex Devices; Article
XILINX XAPP210 January 9, 2001.
[8] M en C. Francisco Iván Peralta Constancio., “Diseño de arquitecturas digitales para
criptografía”; Tesis de Maestría; SEPI ESIME Culhuacan, IPN; 2005.
[9] M.J.B. Robshaw, Stream Ciphers, RSA Laboratories Technical Report TR-701, Version
2.0, July 25, 1995.
[10] Rainer A. Rueppel, Analysis and Desing of Stream Ciphers, Springer-Verlag, 1986.
[11] K. Zeng, C. Yang, D. Wei and T. R.N. Rao, “Pseudo-random bit generators in stream-
cipher cryptography”, Computer, 1991.
[12] Bruce Schneier, Applied Cryptography: Protocols Algorithms and Source Code in C,
Second Edition, John Wiley & Sons, INC, 1996.
99
[13] A. Menezes P. Van, Oorschot, and S. Vanstone, Handbook of Applied Cyptography,
CRC Press, 1996.
[14] C. Ding, G. Xiao, W. Shan; The Stability Theory of Stream Ciphers; Springer-Verlag
Berlin Heidelberg, 1991.
[15] A. A. Kanso, “The Alternating Step (r,s) Generator”, Sécurite des Communications sur
Internet- SECI02, pp 29-38, September 2002.
[16] J.L. Massey, “Shift register synthesis and BCH decoding”, IEEE Trans. Inform. Theory,
vol 122–127, 1969.
[17] Fred Halsall, Comunicaciones de datos, redes de computadores y sistemas abiertos,
Cuarta Edición, Addison Wesley, EUA 1998
[18] Altera, MAX+PLUS II Corporation, 1997 Article Implementing CRCC in Altera Devices,
Application Note 49, July 1995 ver 1.
[19] Chris Borrelli, IEEE 802.3 Cyclic Redundancy Check Article XILINX XAPP209 March
23, 2001.
[20] J. Bhasker; A VHDL Primer, Third Edition, Prentice Hall, 1999.
[21] Altera, MAX+PLUS II Getting Started, Altera Corporation, 1997.
[22] Z. Salcic, A. Smailagic; Digital System Design and Prototyping Using Field
Programmable Logic; Kluwer Academic Plublishers, Boston/Dordecht/London, 1997.
[23] M. Serra and L. Chen, “Pseudorandom Pattern Generation and Fault Coverage of
Delay Faults with Non Linear Finite State Machine whit High Entropy”, 1998.
[24] D. Gollman, W. G. Chambers, “Clock-Controlled Shift Registers: A review”, IEEE,
vol. 7, pp. 525-533, May 1989.