José Ernesto Vargas Fernández - DSpace@UCLV

Anuncio
Universidad Central “Marta Abreu” de Las Villas
Facultad de Ingeniería Eléctrica
Departamento de Telecomunicaciones y Electrónica
TRABAJO DE DIPLOMA
Aplicación de la ingeniería inversa en el análisis de
la componente programable de la tarjeta T-232.
Autor: José Ernesto Vargas Fernández.
Tutor: Ing. Rolando Evelio Pérez Versón.
Santa Clara
2013
"Año 55 de la Revolución"
Universidad Central “Marta Abreu” de Las Villas
Facultad de Ingeniería Eléctrica
Departamento de Telecomunicaciones y Electrónica
TRABAJO DE DIPLOMA
Aplicación de la ingeniería inversa en el análisis de
la componente programable de la tarjeta T-232.
Autor: José Ernesto Vargas Fernández.
vfjoseernesto@uclv.edu.cu
Tutor: Ing. Rolando Evelio Pérez Versón.
rpverson@uclv.edu.cu
Santa Clara
2013
"Año 55 de la Revolución"
Hago constar que el presente trabajo de diploma fue realizado en la Universidad Central
“Marta Abreu” de Las Villas como parte de la culminación de estudios de la especialidad
de Ingeniería en Telecomunicaciones y Electrónica, autorizando a que el mismo sea
utilizado por la Institución, para los fines que estime conveniente, tanto de forma parcial
como total y que además no podrá ser presentado en eventos, ni publicados sin autorización
de la Universidad.
Firma del Autor
Los abajo firmantes certificamos que el presente trabajo ha sido realizado según acuerdo de
la dirección de nuestro centro y el mismo cumple con los requisitos que debe tener un
trabajo de esta envergadura referido a la temática señalada.
Firma del Autor
Firma del Jefe de Departamento
donde se defiende el trabajo
Firma del Responsable de
Información Científico-Técnica
PENSAMIENTO
PENSAMIENTO
La mejor forma de tener una idea brillante es tener montones de ideas.
Linus Pauling.
1
DEDICATORIA
DEDICATORIA
A mi familia, especialmente a mi madre, a la cual le debo todo lo que soy.
2
AGRADECIMIENTO
AGRADECIMIENTO
A mi familia, por no botarme de la casa cuando los volvía locos con cosas que ni yo
entendía.
A Mayelín, por ser la musa que me inspiró cuando el trabajo parecía imposible.
A Ronny, Erick y Rafael (Palito), por aguantar mis majaderías.
A mi tutor por guiar mi trabajo en el camino correcto.
A todos a aquellos que de una forma u otra contribuyeron a esta tesis llegara a su feliz
término.
3
TAREA TECNICA
TAREA TÉCNICA

Estudio del marco teórico y definición de estrategias a desarrollar.

Estudio y descripción de los principales bloques que componen el código fuente
a analizar.

Evaluación de la efectividad del análisis realizado para cumplir los objetivos
requeridos.

Implementación mediante simulación de los resultados obtenidos para
comprobar su supuesto funcionamiento en un escenario real.

Elaboración de un informe que contenga los resultados de la investigación.
Firma del Autor
Firma del Tutor
4
RESUMEN
RESUMEN
El creciente uso de dispositivos electrónicos programables en la mayoría de los equipos
actuales, ha desembocado en el desconocimiento de su principio de funcionamiento. En
el presente trabajo se realiza el análisis del código presente en la componente
programable de la tarjeta T-232, apoyándose en el diseño y evaluación de una
metodología, que a pesar de estar orientada a dicha tarjeta, es aplicable a cualquier
circuito digital diseñado mediante lenguajes de descripción de hardware. Gracias a esto
se determinó cómo ocurre el procesamiento de varias de las señales de entrada y la
transmisión al resto del sistema de las mismas por la tarjeta T-232, la cual forma parte
de una estación de vigilancia del espacio aéreo.
5
CONTENIDO
Contenido
PENSAMIENTO .............................................................................................................. 1
DEDICATORIA ............................................................................................................... 2
AGRADECIMIENTO ...................................................................................................... 3
TAREA TÉCNICA .......................................................................................................... 4
RESUMEN ....................................................................................................................... 5
INTRODUCCIÓN ............................................................................................................ 8
CAPÍTULO 1. REVISIÓN BIBLIOGRÁFICA ............................................................. 14
1.1 CADs y otros términos afines ............................................................................... 14
1.1.1 CAD ............................................................................................................... 15
1.1.2 CAE ................................................................................................................ 16
1.1.3 CAPP .............................................................................................................. 17
1.1.4 Relación CAD/CAM ...................................................................................... 17
1.1.5 Etapas del diseño CAD. ................................................................................. 19
1.2 Los dispositivos electrónicos programables. ........................................................ 20
1.3 FPGAs (Field Programmable Gate Array) ........................................................... 29
1.3.1 Nuevas incorporaciones a la arquitectura básica de FPGAs .......................... 35
1.4 Proceso de Análisis de Circuitos Digitales por el método de Ingeniería Inversa. 37
CAPÍTULO 2 MATERIALES Y MÉTODOS ............................................................... 41
2.1 Propuesta de metodología de trabajo. ................................................................... 41
2.2 Introducción al AHDL. Conceptos e ideas fundamentales. .................................. 43
2.2.1 Estructura de un archivo .tdf. ......................................................................... 43
2.2.2 Notación y nomenclatura usada en AHDL. ................................................... 47
2.3 Quartus II. ............................................................................................................. 55
2.3.1 Quartus II Edición Web vs Quartus II Edición de Suscripción...................... 56
2.3.2 Descripción básica de Quartus II. .................................................................. 58
2.4 La tarjeta T-232. ................................................................................................... 62
2.5 Cyclone y EPC270f896c8. .................................................................................... 66
2.5.1 Arquitectura del Cyclone II. ........................................................................... 67
2.5.2 La FPGA EP2C70F896C8. ............................................................................ 74
6
CONTENIDO
CAPÍTULO 3 ANÁLISIS DEL BLOQUE E_PANBEL. .............................................. 75
3.1 Recopilación de la información necesaria. ........................................................... 75
3.2 Establecimiento de un orden apropiado para el análisis. ...................................... 75
3.3 Determinación de entradas, salidas y variables utilizadas. ................................... 77
3.4 Identificación de conexiones existentes. ............................................................... 80
3.5 Análisis e interpretación del circuito. ................................................................... 80
3.6 Simulación. ........................................................................................................... 83
CONCLUSIONES .......................................................................................................... 86
RECOMENDACIONES ................................................................................................ 87
REFERENCIAS BIBLIOGRÁFICAS ........................................................................... 88
ANEXOS ........................................................................................................................ 90
ANEXO#1: Circuito syclone_2 .................................................................................. 90
ANEXO#2: EXPLICACIÓN SOBRE EL TRABAJO DEL DOMINIO “VOLGA” . 96
ANEXO#3: Características de los encoders ............................................................... 99
ANEXO#4: Creación, compilación y simulación de un proyecto. ........................... 101
ANEXO#5: Análisis de las señales provenientes de los encoders. .......................... 113
ANEXO#6: Análisis de la comunicación serie. ........................................................ 138
ANEXO#7: Valores de registro que activan bits de paridad. ................................... 158
7
INTRODUCCION
INTRODUCCIÓN
Para nadie es un secreto el acelerado paso con los que se mueve la electrónica moderna.
La realidad nos indica claramente que debemos avanzar oportunamente en aras de no
quedar obsoletos en este mundo de tan rápida evolución. Las tendencias actuales en este
campo son a la miniaturización, pues lo que hace 50 años ocupaba 10m2 en transistores,
válvulas y otros componentes de gran tamaño, hoy se pueden llevar en la palma de
nuestra mano.
Cuando se requiere implementar un sistema electrónico, en materia de hardware existen
varias opciones. Si el circuito es simple, puede montarse con componentes discretas. En
caso de que sea más complejo, esto no resulta una variante factible debido al costo y
complejidad que tomaría este. En este caso, la solución más provechosa es su
implementación por software, que es mucho más económica y flexible. El diseño y
fabricación de un circuito para la realización de funciones específicas es una tendencia
que se ha ido abandonando en la electrónica, ya que los dispositivos lógicos
programables constituyen una buena oferta para el diseño en un tiempo
asombrosamente corto de circuitos electrónicos digitales.
Se entiende por dispositivo electrónico programable a aquel circuito de propósito
general, cuya estructura interna puede modificarse por el usuario de acuerdo a sus
necesidades. El primer dispositivo en cumplir estas características fue la memoria
PROM.
Estos dispositivos básicamente se componen de una matriz de compuertas AND
conectadas a una matriz de compuertas or y además de biestables. La versión más
básica de estos dispositivos se conoce como PAL (Programmable Array Logic), los
cuales poseean un plano de compuertas AND programables y un plano fijo de
compuertas OR. Estos son eficientes siempre que se utilicen para implementar circuitos
8
INTRODUCCION
de baja complejidad (no superiores a unos cientos de compuertas.) Están limitados por
un número fijo (pequeño) de biestables y pines de entrada y salida.
Los PLA (Programmable logic array) son más flexibles que los PAL, ya que se pueden
programar las conexiones entre los dos planos. Estos dispositivos son muy simples y
tienen resultados óptimos con funcionalidades sencillas (solo lógica combinacional),
para tareas más complejas se hace necesaria una matriz de elementos que puedan
conectarse libremente, así surgen las FPGA.
Una FPGA (Field Programmable Gate Array) es un dispositivo semiconductor que
contiene bloques de lógica, cuya interconexión y funcionalidad pueden ser configuradas
mediante un lenguaje de descripción especializado (VHDL, AHDL, ABEL, Verilog,
etc.). La lógica programable puede reproducir desde funciones tan sencillas como las
llevadas a cabo por una puerta lógica o un sistema combinacional hasta complejos
sistemas en un chip (SOPC).
Las FPGAs nacen en el año 1984 gracias a Ross Freeman y Bernard Vonderschmitt, cofundadores de Xilinx, y surgen como una evolución de los CPLDs (Complex Logic
Programable Device).
Aparte de las diferencias en densidad entre ambos tipos de dispositivos, la diferencia
fundamental entre las FPGAs y los CPLDs es su arquitectura. La arquitectura de los
CPLDs es más rígida y consiste en una o más sumas de productos programables cuyos
resultados van a parar a un número reducido de biestables síncronos (flip-flops). La
arquitectura de las FPGAs, por otro lado, se basa en un gran número de pequeños
bloques utilizados para reproducir sencillas operaciones lógicas, que cuentan a su vez
con biestables síncronos. La enorme libertad disponible en la interconexión de dichos
bloques confiere a las FPGAs una gran flexibilidad.
El pionero en la fabricación de estos dispositivos fue la compañía Xilinx y los
dispositivos de Xilinx se mantienen como uno de los más populares en compañías y
grupos de investigación, seguidos de cerca por otros productores como son Atmel,
Altera, AMD y Motorola.
9
INTRODUCCION
De esos competidores, vale la pena destacar a la compañía Altera, la cual en los últimos
años ha experimentado un gran desarrollo en cuanto a funcionalidad y prestaciones de
los dispositivos que fabrica.
Altera es uno de los pioneros de la lógica programable, siguiendo a líderes notables
anteriores como Signetics y MMI en la introducción de dispositivos electrónicos.
Actualmente Altera desarrolla algunas características que están orientadas hacia
capacidad de sistemas en chips programables (SOPC). Algunos de los ejemplos más
recientes incluyen memorias embebidas, procesadores embebidos, y transceptores de
alta velocidad.
Altera ofrece el software Quartus II, que es una herramienta CAD dirigido al diseño y
simulación de circuitos lógicos, la cual ofrece grandes facilidades, en cuanto a ahorro de
tiempo y recursos se refiere, ya que evita el gasto innecesario de componentes a la hora
de comprobar un diseño determinado y acelera la puesta en marcha del mismo al ofrecer
mediante simulaciones, su funcionamiento evitando llegar a la implementación física
del circuito sin antes haber comprobado su correcto funcionamiento. Además este
software brinda un ambiente amigable y fácil de trabajar, tanto para el usuario inexperto
como para el usuario avanzado.
Aunque este software soporta extensivamente VHDL y Verilog como principales
lenguajes, Altera es desarrollador del AHDL (Altera Hardware Description Language)
el cual es un lenguaje de descripción de hardware (HDL) propietario de Altera
Corporation para la programación de CPLDs (Complex Programmable Logic Devices)
y FPGAs (Field Programmable Gate Arrays). Compilado con el Quartus de Altera y la
serie de compiladores Max+, este lenguaje tiene una sintaxis parecida al lenguaje de
programación C y una funcionalidad similar a VHDL.
Situación del problema:
¿Cómo conocer el principio de funcionamiento de la tarjeta T232, si no se conoce su
esquema electrónico, está realizada en un circuito impreso de 4 capas, lo que dificulta
cualquier intento de ingeniería inversa de hardware y teniendo sólo el código fuente que
presente en la componente programable de la misma?
10
INTRODUCCION
Objetivo General
Diseñar y evaluar una metodología de análisis, aplicable a cualquier circuito digital
diseñado mediante lenguajes de descripción de hardware.
Objetivos Específicos
1.
Proponer una metodología para el análisis de circuitos digitales
diseñados mediante lenguajes de descripción de hardware
2.
Evaluar dicha propuesta en base a los resultados obtenidos de su
aplicación en la componente programable de la tarjeta T-232.
3.
Describir los fundamentos de la programación en AHDL.
4.
Describir y dominar el trabajo con el programa Quartus II.
5.
Analizar las características físicas de la componente programable de la
T232 (FPGA EP2C70F896C8).
Interrogantes Científicas
1.
¿Cuáles son las características principales de los encoders utilizados?
2.
¿Cómo ocurre el proceso de obtención de los datos de velocidad de movimiento
y posición de la antena que barre el plano E?
3.
¿Cómo ocurre el proceso de formación de las señales correspondiente a estos
datos?
Tareas de investigación
1.
Estudio del marco teórico y definir las estrategias a desarrollar.
2.
Estudio y descripción de los principales bloques que componen el código fuente
a analizar.
3.
Evaluación de la efectividad del análisis realizado para cumplir los objetivos
requeridos.
11
INTRODUCCION
4.
Implementación mediante simulación de los resultados obtenidos para
comprobar su supuesto funcionamiento en un escenario real.
5.
Elaboración de un informe que contenga los resultados de la investigación.
Posibles resultados:
La presente investigación dotará de un mayor entendimiento del funcionamiento interno
de la tarjeta T232, pudiendo derivar en la producción nacional de dispositivos con
funcionalidades similares.
Impacto posible:
Con la realización de esta investigación se pretende brindar una solución al problema de
dependencia hacia el fabricante, existente en cuanto al tema de reparación de la tarjeta
T232. Es por ello que los principales beneficios estarán enmarcados en el ahorro que
representaría la reparación de este dispositivo en el país y la posibilidad de obtención de
sustitutos del mismo de factura nacional. Este trabajo deberá servir de base
metodológica para futuras investigaciones en el tema.
Aplicabilidad:
Los resultados y conclusiones derivados de esta investigación tienen su aplicación en el
proceso de explotación y mantenimiento de la estación de vigilancia del espacio aéreo.
Viabilidad:
La ejecución del proyecto es viable, pues se cuenta para ello con todo el material y el
fondo de tiempo necesario.
El informe de la investigación se estructurará en introducción, capitulario, conclusiones,
referencias bibliográficas, bibliografía y anexos.
CAPITULO I: Caracterización de las metodologías y al estudio comparativo de las
tecnologías que se usan en la actualidad.
CAPITULO II: Diseño metodológico de la investigación.
12
INTRODUCCION
CAPITULO III: Resultados y validación mediante la comparación con ejemplos
prácticos de la efectividad del método y la calidad del producto.
Conclusiones.
Recomendaciones.
Bibliografía.
Anexos.
13
REVISION BIBLIOGRAFICA
CAPÍTULO 1. REVISIÓN BIBLIOGRÁFICA
En el presente capítulo se ofrece una breve panorámica sobre los dispositivos
electrónicos programables, haciendo un énfasis especial en las FPGA. También se
aborda el uso de herramientas CAD para la programación y elaboración de los mismos.
Por último se hace referencia al proceso de análisis de circuitos digitales por el método
de ingeniería inversa.
1.1 CADs y otros términos afines
Para diseñar con dispositivos lógicos programables es absolutamente necesario el uso de
un conjunto de herramientas software de buena calidad, confiables y de fácil utilización.
Estas herramientas son esenciales, tanto a nivel industrial como en la formación del
ingeniero, ya que en la medida que la integración progresa, se hace cada vez más difícil
acceder a los elementos básicos del hardware (Oliver 2007).
La informática suele ayudarnos a simplificar bastante nuestras tareas cotidianas, y en lo
que respecta al diseño, esta ayuda es más importante, sobre todo teniendo herramientas
conocidas como el CAD (siglas en inglés de Computer Aided Design) que conforman a
una enorme variedad de aplicaciones que son utilizadas por profesionales todo tipo que
se desenvuelven en el mundo del diseño y la simulación. La aplicación de los sistemas
computacionales para el diseño y la manufactura han tenido un amplio desarrollo y se
han extendido a diversos sectores productivos. Una herramienta poderosa para todo tipo
de industria es el uso de la tecnología computacional en las labores de dibujo y diseño.
Esto aporta beneficios desde la perspectiva de la mediana y la pequeña empresa que
requieren adoptar nuevas tecnologías, con la necesidad de ser competitivas a nivel
mundial. El diseño de dichos productos puede realizarse mediante la computadora con
diversos sistemas, como son el CAD, el CAE y el CAPP.
14
REVISION BIBLIOGRAFICA
Evolución histórica
La evolución de las herramientas de EDA (Electronic Design Automation) se dio en
conjunto con la evolución de los dispositivos lógicos programables y de las
computadoras. Las primeras formas de trabajar con PLDs implicaban la traducción de
un diseño a un formato de tabla de verdad llamado H&L. Posteriormente aparece el
PALASM, un programa escrito en FORTRAN que permitía convertir un diseño
descripto en ecuaciones booleanas, en archivos de programación de dispositivos PAL de
Monolithics Memories (MMI). En esta época no solo eran importantes las herramientas
software, sino también los equipos de programación de dispositivos, que recién se
estaban generalizando. Un salto importante fue la introducción del tercer estándar de
JEDEC, propuesto en 1980. Este estándar define un formato de archivo común,
independiente del fabricante del dispositivo y del fabricante del equipo programador.
En los ochentas aparecen dos lenguajes que permiten un mayor nivel de abstracción en
la expresión de los diseños, y son independientes de los fabricantes de chips, estos son
el ABEL (Advanced Boolean Expression Language) y el CUPL (Common Universal
tool for Programmable Logic). Estas herramientas además de definir un lenguaje para
diseñar, disponían de paquetes de minimización booleana, síntesis de máquinas de
estados y simulación. A mediados de los ochentas aparecen los programas de diseño de
Altera A+PLUS y un conjunto de herramientas suministradas por Xilinx para sus
nuevos dispositivos. Como los dispositivos de Xilinx tenían una arquitectura diferente
sus herramientas incluían un módulo de place & route automático para un eficiente uso
de los recursos disponibles. La siguiente generación de herramientas software incluyó la
posibilidad de especificar diseños mediante entrada esquemática, haciendo más fácil la
migración de diseños realizados previamente con circuitos lógicos de las familias TTL y
CMOS (Oliver 2007).
1.1.1 CAD
CAD (Computer Aided Design), o diseño asistido por computadora, permite al
diseñador crear imágenes de partes, circuitos integrados, ensamblajes y modelos de
prácticamente todo lo que se le ocurra en una estación gráfica conectada a un
computadora. Estas imágenes se transforman en la base de un nuevo diseño, o en la
modificación de uno previamente existente. A éstas se le asignan propiedades
15
REVISION BIBLIOGRAFICA
geométricas, cinéticas, del material entre otras, mejorando así el diseño sobre papel. Se
logra así una mayor velocidad en el diseño, al existir la posibilidad de corregir la
propuesta, encargándose la computadora de esto. Existen sistemas CAD especiales para
aplicaciones mecánicas, electrónicas y de arquitectura, los cuales permiten una mejor
interrelación con sus respectivos sistemas CAE.
En lo que respecta específicamente al CAD, no es posible enmarcar a una simple
aplicación como específica, sino que debemos definir a un gran grupo de herramientas
que permiten trabajar con similares conceptos, utilizando como división fundamental
aquellas que simplemente nos permiten contar con diseños en dos dimensiones (CAD
2D) de aquellas que nos ayudan a obtener motivos tridimensionales (CAD 3D). Esta
evolución se aceleró en los últimos años, con el desarrollo de no solo mejores
aplicaciones, sino también lo que han crecido las capacidades de procesamiento y
gráficas de las computadoras, lo que permite suponer no solo un gran ahorro de tiempo
y recursos, sino también un alto grado de realismo en los diseños. Además , hoy en día
se cuenta con complementos que sugieren los materiales a utilizar, cuál de ellos se
adapta mejor a las necesidades de nuestro proyecto y demás variables que no solo
ahorran tiempo de diseño, sino también ayudan a obtener una mayor calidad del
producto final que ha sido requerido.
1.1.2 CAE
CAE (Computer Aided Engineering), o ingeniería asistida por computadora, es la
tecnología que analiza un diseño y simula su operación para determinar su apego a las
condiciones de diseño y sus capacidades. Actualmente, CAE es casi dos tecnologías
separadas: una es la aplicada a la mecánica y otra a la electrónica. Ambas realizan
extensos análisis respecto de las leyes físicas, así como de los estándares de la industria.
El CAE mecánico, en particular, incluye un análisis por elementos finitos (FEA) para
evaluar las características estructurales de una parte y programas avanzados de
cinemática para estudiar los complejos movimientos de algunos mecanismos. El CAE
electrónico, asimismo, permite verificar los diseños antes de fabricarlos, simular su uso
y otros análisis técnicos para evitar perder tiempo y dinero.
16
REVISION BIBLIOGRAFICA
1.1.3 CAPP
CAPP (Computer Aided Process Planning), o planificación de procesos asistida por
computadora, es un sistema experto que captura las capacidades de un ambiente
manufacturero específico y principios manufactureros ingenieriles, con el fin de crear
un plan para la manufactura física de un pieza previamente diseñada. Este plan
especifica la maquinaria que se ocupará en la producción de la pieza, la secuencia de
operaciones a realizar, las herramientas, velocidades de corte y avances, y cualquier otro
dato necesario para llevar la pieza del diseño al producto terminado. Para usar el CAPP
más efectivamente en un entorno CIM, el diseño debería provenir electrónicamente de
un ambiente CAD. Debido a que el CAPP determina cómo una pieza va a ser hecha,
aporta en gran medida a la optimización del proceso y a la disminución de los costos, si
tiene oportunidad de manejar los procesos de más de un diseño. El CAPP tiene dos tipos
básicos: el variante y el generativo. El variante es el más comúnmente usado y
desarrolla un plan modificando un plan previamente existente, eligiendo éste usando
criterios de tecnología de grupos y de clasificación. El generativo incorpora el concepto
de inteligencia artificial, usando sus conocimientos sobre las capacidades de la planta.
Basado en la descripción de la pieza (geometría y material) y sus especificaciones, la
computadora elige el método óptimo para producir la pieza y genera automáticamente el
plan (García 2008).
1.1.4 Relación CAD/CAM
Las siglas CAD/CAM provienen del inglés Computer Aided Design/Computer Aided
Manufacturing,
y
podrían
traducirse
como
Diseño
asistido
por
computadoras/Fabricación asistida por computadoras. Estos dos términos presentan una
profunda correlación, ya que esta integración está pensada para que los productos
diseñados por un CAD ingresen directamente a un sistema CAM. Se concibe como un
sistema fabril ideal, en el que máquinas automatizadas, controladas por un sistema
CAM, deberían ser capaces de fabricar el modelo diseñado en un programa CAD sin la
intervención de operadores humanos. O sea, al diseñarse un dispositivo, su imagen
electrónica se traduce a un lenguaje de programación de control numérico, el cual
genera las instrucciones necesarias para la máquina encargada de la fabricación del el
dispositivo (García 2008).
17
REVISION BIBLIOGRAFICA
Muchos de los sistemas CAD/CAM en uso hoy en día están diseñados y pensados para
automatizar funciones manuales, independientemente de la función particular que
cumplirán, ya sea análisis ingenieril, diseño conceptual, dibujo, documentación o la
programación de la maquinaria de manufactura e inspección (García 2008). En la
actualidad, la diferencia de costo y potencia entre las plataformas computacionales
requeridas para un CAD y un CAD/CAM ya no son tan notorias. Esto se debe a que las
computadoras personales ya son suficientes para manejar el software, y los costos de
éste o aquel son similares, así como el costo de su puesta en marcha. Las redes
computacionales han contribuido enormemente con el desarrollo de los sistemas
CAD/CAM, teniendo la desventaja de que se pierde un poco la privacidad de la
información, ya sea porque el sistema de red es muy complejo o porque hay un mayor
número de usuarios con acceso directo a él.
El término plataforma de software se aplica en este caso a la arquitectura de software
básica, incluyendo base de datos, metodología, capacidades gráficas y herramientas
geométricas. En base a esta definición, existen tres clasificaciones básicas de
plataformas CAD/CAM: 2D, 2 ½D y 3D. Dentro de estas clasificaciones existe una
serie de herramientas para generar y usar variadas librerías de símbolos y partes, así
como para agregar distintos niveles de inteligencia. Rodeando estas clasificaciones hay
herramientas adicionales para personalizar, acceso, entrada/salida y periféricos. En la
Figura 1.1 se puede observar la estrecha relación existente entre CAD y CAM.
18
REVISION BIBLIOGRAFICA
Figura 1.1 Relación CAD/CAM
1.1.5 Etapas del diseño CAD.
Al igual que en todos los procesos de diseño, el diseño con estas herramientas tiene un
orden lógico a seguir consistente en cuatro etapas:

Modelado: Se describe en forma matemática o analítica a un objeto físico. El
diseñador construye su modelo a partir comandos que originan una
representación exacta y completa, del objeto en cuestión.

Análisis y optimización del diseño: Después de haber determinado las
propiedades del mismo, se somete a un análisis ingenieril donde se analizan las
propiedades físicas del modelo. Con esos datos es posible detectar dónde están
las debilidades del modelo y que se puede hacer para eliminarlas.

Revisión y evaluación del diseño: En esta etapa se comprueba si existe alguna
interferencia entre los diversos componentes del modelo tratado. Esto evita
problemas en el ensamblaje de la pieza. Para este fin existen se realizan
simulaciones dinámicas, las cuales ofrecen como resultado los requerimientos
necesarios para su manufactura.
19
REVISION BIBLIOGRAFICA

Documentación y dibujo: Por último, se realizan planos de detalle y de trabajo.
Esto se suele realizar mediante esquemas y dibujos de diferentes vistas de la
pieza, además se incluye la bibliografía necesaria para que el usuario final
conozca cómo trabajar con el producto que tendrá en sus manos.
1.2 Los dispositivos electrónicos programables.
Los dispositivos lógicos programables pueden ser definidos como circuitos lógicos
digitales en los cuales el usuario puede grabar el circuito a implementar. En este
epígrafe se presentará una completa descripción de estos dispositivos así como su
evolución histórica desde los primeros dispositivos programables pensados para
simplificar diseños digitales realizados con compuertas discretas, hasta los modernos
dispositivos reconfigurables en los cuales se puede implementar una aplicación
completa (SoPC, System on a Programmable Chip). Los dispositivos lógicos
programables pueden clasificarse de acuerdo a la tecnología utilizada en su fabricación,
que estará directamente asociado a la forma de programarse, y de acuerdo a su
complejidad. Estas clasificaciones no son ortogonales ya que la tecnología utilizada
además de determinar el tipo de programación posible determinará, junto con la
densidad y la arquitectura interna, el grado de complejidad del dispositivo. La primera
idea de implementación de un dispositivo lógico reprogramable, es decir con
programación dinámica, es atribuida a Wahlstrom que en 1967 propone un circuito con
estas características. La tecnología de integración de circuitos utilizada en esa época no
permitía incluir gran cantidad de transistores en un chip y por lo tanto la idea de
Wahlstrom no tiene demasiada repercusión, ya que se debían utilizar una gran cantidad
de transistores adicionales solo para programar el dispositivo. Pasarían casi dos décadas
hasta que un dispositivo conceptualmente similar fuera desarrollado por Xilinx en 1985
y patentado por Freeman. Para esa época la patente de Wahlstrom ya estaba caduca.
Entre estos dos hitos históricos aparecen los dispositivos programables con
programación no volátil, y que en principio tienen una evolución propia, tanto en el
modo de programación como en la estructura interna, que mayoritariamente están
basados en lógica en dos niveles (Oliver 2007). Hoy en día la frontera entre CPLDs y
FPGAs es mucho más borrosa, ya que por ejemplo una de las últimas familias de
CPLDs desarrolladas por Altera, la familia MAX, si bien tiene programación no volátil,
20
REVISION BIBLIOGRAFICA
la misma está almacenada en una memoria Flash interna al chip, y se carga en una
SRAM de configuración al inicializar el dispositivo.
1.2.1 Almacenamiento de la configuración
La configuración de los dispositivos lógicos programables debe almacenarse de algún
modo dentro del dispositivo, si analizamos las diferentes formas de almacenamiento de
la configuración veremos que se utilizan las mismas que para las memorias de
almacenamiento de datos, y estas son:

PROM (Programmable Read-Only Memory), o también llamados dispositivos
OTP (One Time Programmable). Estos dispositivos solo pueden programarse
una vez. Tradicionalmente son dispositivos de bajo costo que se utilizan en
producción una vez que el diseño a programar está terminado y probado.

EPROM (Erasable Programmable Read-Only Memory).Estos dispositivos
permiten múltiples programaciones permitiendo el borrado con luz ultra-violeta.

EEPROM (Electrically Erasable Programmable Read-Only Memory).Similares
a los anteriores, pero el borrado se realiza en forma eléctrica. Los dispositivos
más primitivos se borran utilizando tensiones especiales más elevadas que los
niveles lógicos utilizados por el dispositivo en funcionamiento. Existen
versiones de ISP 31 (In System Programability) que permiten el borrado y la
nueva programación utilizando niveles lógicos de voltaje de modo que no es
necesario extraer el integrado del sistema y ponerlo en un programador, sino que
se puede programar en el propio sistema en el cual es utilizado.

PLICE (Programmable Low-Impedance Circuit Element) Antifuse, esta
tecnología es propietaria de Atmel y actúa al revés que un fusible: cuando no es
programado es un aislante, cuando se programa se genera un camino de baja
resistencia. Via Link Antifuse es la tecnología utilizada por Quicklogic,
funciona igual que el PLICE Antifuse, pero presenta menor resistencia y menor
capacidad parásita. (300 ohms para el PLICE y 50 ohms para Vialink)

Flash SRAM (Static Random Access Memory), las memorias Flash tienen la
ventaja de ser eléctricamente borrables como las EEPROM pero utilizan celdas
21
REVISION BIBLIOGRAFICA
de menor tamaño parecidas a las utilizadas por las EPROM. SRAM (Static
Random Access Memory). La programación se escribe exactamente igual que
como se escriben datos en una RAM estática. Estos dispositivos son los que
introducen el cambio cualitativo que los hace reconfigurables. Pueden ser
reconfigurados repetidas veces en forma muy rápida, sin alterar la vida útil del
dispositivo. Los dispositivos basados en SRAM son los únicos que permiten una
configuración dinámica. Si bien en los demás dispositivos (excepto los basados
en PROM y Antifuse), existe la posibilidad de configurarlos múltiples veces, la
cantidad de configuraciones que aceptan está limitada a unas 10.000 y su
configuración es lenta. Por el contrario los dispositivos basados en SRAM
permiten “infinitas” reprogramaciones y por lo tanto son los únicos que pueden
ser utilizados para aplicaciones de lógica reconfigurable, tanto en aplicaciones
clásicas como en aplicaciones que requieran reconfiguración en tiempo de
corrida (run-time). Algunos de los dispositivos basados en SRAM incorporan
una característica extra que es la reconfiguración parcial. Esto quiere decir que
se puede configurar una parte del dispositivo mientras el resto del mismo sigue
en operación normal. La reconfiguración parcial tiene múltiples ventajas:
permite tener varios diseños en un mismo chip y cambiarlos por partes, permite
reducir el tiempo de programación de cada parte, y por lo tanto simplifica su
utilización para reprogramaciones en tiempo de corrida.
Las
últimas
innovaciones
en
configuración
de
dispositivos
incluyen
la
compresión/descompresión del flujo de datos de configuración como forma de ahorrar
tiempo y espacio de almacenamiento; y el encriptado de los datos para proteger los
diseños. También se han incluido formas de programación remota para poder actualizar
versiones en sistemas ya diseñados. (Oliver 2007)
1.2.3 Evolución de los dispositivos electrónicos programables.
A continuación se hace un recorrido por la evolución que transitaron, hasta el momento,
los dispositivos electrónicos programables. Se le presta una mayor importancia a los
primeros tipos de dispositivos basados en estructuras AND-OR, o más genéricamente
diseños en dos niveles, ya que fueron el origen del camino.
22
REVISION BIBLIOGRAFICA

Programmable Read Only Memory PROM: Las memorias usualmente se
utilizan para almacenamiento de datos, pero pueden ser vistos como circuitos
digitales que pueden implementar funciones booleanas (Figura 1.2). Desde el
punto de vista lógico una memoria PROM de N bits de direcciones está
constituida por un primer nivel de compuertas AND completo, y un segundo
nivel de compuertas OR (tantas como salidas) programable. Con esta
configuración es posible implementar cualquier función lógica de N variables.
Las primeras PROMs fueron desarrolladas por Harris en 1970, y en 1971 Intel
introduce las EPROMs borrables con luz ultravioleta.
Figura 1.2 Esquema lógico en dos niveles de una PROM

Programmable Logic Array PLA: Los primeros dispositivos lógicos
programables comerciales fueron las PLAs (Figura 1.3). Estos dispositivos
estaban pensados para implementar funciones lógicas en dos niveles AND-OR,
pero no tenían el plano AND completo, sino programable. De esta forma no es
posible implementar cualquier función lógica de un determinado número de
entradas sino sólo aquellas funciones que sean minimizables y puedan ser
representadas con la cantidad de términos producto disponibles dentro del chip.
El segundo nivel o plano OR también es programable. Estos dispositivos fueron
comercializados a principios de los „70s pero no tuvieron mayor éxito debido a
su bajo rendimiento, a su alto costo y a que no existían herramientas CAD que
corrieran en computadores de bajo costo.
23
REVISION BIBLIOGRAFICA
Figura 1.3 Esquema lógico de un PLA.

PALs (Programmable Array Logic): Los PALs introducidos en 1978 por
Monolithic Memories Inc (MMI), fueron la segunda generación de dispositivos
desarrollados y básicamente son una simplificación de los PLAs. Este tipo de
dispositivos mantiene la estructura de dos planos AND-OR, pero mientras el
plano AND es programable, el plano OR se simplifica y pasa a ser fijo (Figura
1.4). Al reducir las interconexiones programables se logra mayor velocidad.
Estos dispositivos tuvieron mayor éxito comercial que los anteriores y se
utilizaron ampliamente en la sustitución de diseños realizados con lógica
discreta del tipo “glue-logic”. Además de poder realizar funciones booleanas se
agrega un flip-flop por cada compuerta OR, de modo de poder realizar circuitos
secuenciales. Así aparece el concepto de celda, macrocelda (macrocell) o CLB
(Configurable Logic Block), un bloque programable capaz de implementar una
determinada función lógica más una celda de memoria o flip-flop.
Figura 1.4 Esquema lógico de un PAL
24
REVISION BIBLIOGRAFICA

Cellular Arrays: Otro tipo de dispositivos programables que presenta un
enfoque diferente de los vistos anteriormente, están formados por un conjunto de
elementos simples interconectados entre sí, pero en ellos las interconexiones son
básicamente fijas, siendo programable la función que realiza cada elemento.
Antecedentes de celular arrays pueden encontrarse a fines de los años ‟60 y
principios de los ‟70, pero sus primeras versiones comerciales datan de mucho
tiempo después, a fines de los „80 Algotronix desarrolla el dispositivo llamado
Cellular Array Logicor CAL (Figura 1.5).
Figura 1.5 Arquitectura y celda lógica del Algotronix CAL
En las figuras puede verse el arreglo bidimensional de bloques, llamados Configurable
Logic Block. Un CLB puede realizar cualquier operación booleana de dos entradas e
interconectarse con los bloques vecinos. La configuración del dispositivo era dinámica,
basada en RAM.

PLDs (Programmable Logic Device) y CPLDs (Complex Programmable
Logic Device): Los CPLDs son herederos directos de los PALs y podrían
clasificarse en la misma categoría. La celda básica es igual y está realizada en
dos niveles AND-OR, con el primer nivel AND programable y el nivel OR fijo;
y con el elemento de memoria o flip-flop a la salida del OR (Figura 1.6). El
almacenamiento de la programación es por EEPROM o Flash.
25
REVISION BIBLIOGRAFICA
Figura 1.6 Esquema genérico de un PLD, plano AND variable, plano OR fijo, flip-flop
y realimentación.
Los PLD permiten la realimentación de la salida de una celda hacia la matriz de
interconexión (Figura 1.7); de esta forma se puede lograr sintetizar funciones lógicas
complejas de más de dos niveles o máquinas de estados si se realimentan las salidas de
los flip-flops.
Figura 1.7 Interconexión de bloques dentro de un PLD
Poseen matrices de interconexiones programables, y usualmente las celdas están
agrupadas en una estructura jerárquica, con conexiones rápidas entre vecinos. Hay una
diferenciación de bloques de entrada-salida. Como ejemplo de arquitectura comercial a
continuación se muestra la serie MAX 3000A de Altera, el dispositivo está compuesto
de LABs (Logic Array Blocks), y cada LAB está formado por 16 Macrocells
26
REVISION BIBLIOGRAFICA
Figura 1.8 Altera serie MAX 3000A, estructura de bloques
Figura 1.9 Altera MAX 3000A, estructura de celda
Cada Macrocell está formada por una matriz de selección de términos producto, y
pueden seleccionarse hasta 5 términos producto. Existen dos tipos de Expanders que
pueden ser compartidos entre Macrocells vecinas. Cada Macrocell dispone de un flipflop que puede configurarse como D, JK, SR, o T. Dicho Flip-Flop puede ser salteado
27
REVISION BIBLIOGRAFICA
para implementaciones puramente combinatorias. Se proveen señales globales de reloj y
habilitación de tri-estado de las salidas.
Figura 1.10 Altera MAX 3000A, interconexiones
El Programmable Interconnect Array (PIA) es un bus global que permite conectar
cualquier entrada a cualquier salida del array. (Figuras 1.10 y 1.11)
Figura 1.11 Altera MAX3000A, esquema de entrada-salida
28
REVISION BIBLIOGRAFICA
Las señales del PIA pueden conectarse a los bloques de entrada/salida. Cada bloque de
IO permite su configuración como entrada, como salida, o en forma bidireccional. A la
salida hay un buffer tri-estado configurable.
El desarrollo de estos dispositivos solo podía tener un resultado, el surgimiento de un
dispositivo que ofreciese un mayor número de facilidades y prestaciones: la FPGA.
1.3 FPGAs (Field Programmable Gate Array)
En 1984 Xilinx desarrolla un nuevo dispositivo nombrado Logic Cell Array (LCA),
basado en un concepto diferente a los PLDs. Los LCAs están compuestos de una gran
cantidad de celdas lógicas cuya función es programable, dichas celdas pueden ser
interconectadas mediante conexiones programables de varios tipos. Estos dispositivos y
sus desarrollos posteriores dan origen a las hoy llamadas FPGAs. Las FPGAs están
basadas en una estructura regular de bloques de procesamiento e interconexiones
programables, rodeados de bloques dedicados a entrada y salida. (Figura 1.12)
Figura 1.12 Esquema interno de una FPGA
Las FPGAs están basadas en una estructura regular de bloques de procesamiento e
interconexiones programables, rodeados de bloques dedicados a entrada salida. Las
interconexiones usualmente están organizadas en forma de una malla jerárquica,
disponiéndose de caminos rápidos entre bloques contiguos, caminos verticales y
caminos horizontales. De esta forma los elementos de procesamiento forman una isla
29
REVISION BIBLIOGRAFICA
rodeada de líneas de interconexión. Los elementos de procesamiento pueden realizar
funciones simples de un bajo número de entradas para dar como resultado una única
salida. Esos bloques o celdas internamente están compuestos por una Look-Up Table
(LUT) más algún elemento de memoria o flip-flop. El tamaño de la LUT más utilizado
es de cuatro entradas, que permite implementar cualquier función lógica de cuatro
entradas, o lo que es lo mismo una tabla de verdad de 16 renglones. Se ha demostrado
empíricamente que LUTs de cuatro entradas dan buenos resultados en cuanto a su
eficiencia en área y velocidad; y este resultado ha sido utilizado comercialmente.
Los bloques de procesamiento de las FPGAs comerciales usualmente son un poco más
complejos que una LUT más un flip-flop, permitiendo mayor flexibilidad. Algunas de
las características buscadas son la posibilidad de realizar funciones combinatorias de
mayor número de entradas, la posibilidad de realizar bloques aritméticos con acarreo, la
posibilidad de aprovechar un bloque que ha sido parcialmente utilizado, permitiendo
por ejemplo usar por un lado la salida de la función combinatoria y el elemento de
memoria por separado, o la incorporación de un mayor número de elementos de
memoria por bloque. Usualmente estos bloques de procesamiento se agrupan, los
bloques que pertenecen a un mismo grupo o clúster tienen interconexiones locales, esto
redunda en una mayor velocidad de interconexión y en el ahorro de recursos globales.
El tamaño de estos clúster es una característica que influye en la performance de una
FPGA. En dispositivos comerciales es usual ver clústers grandes, compuestos por entre
8 y 10 elementos lógicos (Figura 1.13). Se han hecho varios estudios sobre el efecto del
tamaño de los clústers en el área y la velocidad de una FPGA, así como su interacción
con el tamaño de las LUTs, los resultados muestran que los valores óptimos están entre
4 y 10 (Oliver 2007).
30
REVISION BIBLIOGRAFICA
Figura 1.13 Estructura de un bloque de procesamiento (Basic Logic Element, (BLE)) y
un Clúster
El tamaño de los clúster también influye en las herramientas de CAD, el tiempo de
compilación de un diseño aumenta con clúster pequeños. Las interconexiones ocupan
un lugar muy importante dentro de los integrados, ya sea en cuanto a área como en los
retardos producidos. Se puede estimar que el porcentaje del área utilizado para las
interconexiones está entre 70 y 90% del área total del chip (Figuras 1.14-1.19). Las
relaciones de área entre lógica, interconexiones y memoria de configuración pueden
verse en la Figura 1.14.(Oliver 2007)
31
REVISION BIBLIOGRAFICA
Figura 1.14 Relación interna de áreas dentro de un FPGA
Si bien las primeras FPGAs tenían una estructura simétrica tipo isla, con bloques
lógicos y caminos de interconexión verticales y horizontales rodeándolos, las FPGAs
actuales tienen estructuras jerárquicas tanto en los bloques lógicos, que se agrupan en
clúster como ya fue mencionado, como en las interconexiones, que están organizadas en
caminos de distinta longitud y retardo.
Figura 1.15 Interconexiones programables en una FPGA
Los bloques de interconexión (switch blocks) se intercalan entre los bloques lógicos.
32
REVISION BIBLIOGRAFICA
Figura 1.16 Estructura de bloques de interconexión y bloques lógicos
Figura 1.17 Punto de interconexión formado por 6 transistores de paso
Seis transistores de paso conforman el punto de interconexión, dichos transistores son
manejados por las celdas de memoria de configuración. Existen diversas arquitecturas
de interconexión, siendo usual contar con caminos de diferente longitud. Usualmente
hay tres tipos diferentes de interconexiones: Interconexiones directas entre CLBs,
interconexiones de propósito general que atraviesan el chip en direcciones horizontales
y verticales, y líneas largas que son reservadas para distribuir señales críticas,
típicamente señales de reloj.
33
REVISION BIBLIOGRAFICA
Figura 1.18 Detalle de los diferentes tipos de interconexiones
Figura 1.19 Detalle de las interconexiones de una FPGA
34
REVISION BIBLIOGRAFICA
1.3.1 Nuevas incorporaciones a la arquitectura básica de FPGAs
El desarrollo de las FPGAs ha sido constante desde sus inicios hasta hoy; los fabricantes
han incorporado innovaciones que manteniendo la generalidad de estos componentes,
los hacen adecuados para un rango cada vez más amplio de aplicaciones. A
continuación veremos una descripción de las diversas características que incorporan las
FPGAs modernas.

Memoria: Quizá la primera incorporación a la estructura básica de las FPGAs es
la inclusión de bloques de memoria RAM. Estos bloques están disponibles para
el diseñador, y son configurables en el tamaño y el ancho de palabra. Pueden ser
utilizados para almacenamiento de datos o para implementar funciones
combinatorias complejas, aunque son más lentos que las celdas estándar. De
acuerdo a la configuración pueden ser utilizados como RAM dual port, FIFOs, o
RAM sincrónica.

Bloques aritméticos: El incremento en aplicaciones de procesamiento digital de
señales llevó a la incorporación en hardware de bloques aritméticos. Estos
bloques implementan funciones multiplicador-acumulador (MAC) con enteros.

Microprocesadores: Cuando se utilizan FPGAs para realizar funciones de
cálculo es usual que trabajen en conjunto con un microprocesador compartiendo
las tareas. Existen varios ejemplos de FPGAs que incorporan microprocesadores
internamente. Estos microprocesadores pueden estar en hardware como
hardcores, es decir que dentro del chip hay un bloque de silicio específico para
el microprocesador; o bien como parte de los circuitos programados en la FPGA
como softcores o IP cores. Ejemplos de hardcores pueden verse en FPGAs de
Xilinx Virtex II Pro y Virtex 4, que incorporan hasta cuatro cores de PowerPC
405, o en la familia Excalibur de Altera (aunque Altera ya no está promoviendo
el uso de estos dispositivos para nuevos diseños). Hay una enorme cantidad de
ejemplos de softcores, pero para seguir en la línea de los fabricantes de chips
mencionaremos los Pico y MicroBlaze de Xilinx y el NIOS II de Altera.

Manejo de relojes: Al aumentar el tamaño y la complejidad de los chips se hace
necesario proveer una buena distribución interna de las líneas de reloj globales
35
REVISION BIBLIOGRAFICA
que no introduzcan diferencias de retardo entre distintas partes del dispositivo.
Es así que se incluyen líneas especiales rápidas para la distribución de los
relojes, bloques específicos de control de señales de reloj y PLLs para generar
internamente diferentes frecuencias a partir de una señal externa.

Entrada-salidas específicas: Para que las FPGAs puedan manejar directamente
líneas de alta velocidad sin necesidad de transceivers externos se incorporan a
los bloques de IO, transceivers programables que cumplen con varios de los
estándares usados, ya sea en single-ended o diferenciales, los mismos llegan a
manejar señales de varios gigabits por segundo.

Conversores serie-paralelo de alta velocidad: Asociado con el ítem anterior,
para poder trabajar con señales de alta frecuencia, es necesario incorporar
serializadores o conversores serie paralelo de alta velocidad.

Facilidades de test on-chip: Existen diversas estrategias que facilitan la prueba
y el debugging de los diseños, estas van desde la posibilidad de la lectura o
escritura de los registros y de las memorias internas vía JTAG, hasta la
incorporación de analizadores lógicos integrados en el chip.
1.3.2 ASICS Estructurados (Structured ASICS)
Un Circuito Integrado para Aplicaciones Específicas (ASIC) es un circuito integrado
hecho a la medida para un uso en particular, en vez de ser concebido para propósitos de
uso general.
Tanto Altera como Xilinx ofrecen una nueva alternativa a sus FPGAs, y es la de los
Structured ASICS. En el caso de Altera, estos dispositivos se fabrican bajo la marca
HardCopy. Estos dispositivos no son programables por campo, por lo tanto
estrictamente no entrarían en esta reseña, pero por sus características, vale la pena
mencionarlos. La idea que proponen los fabricantes es contar con una línea de ASICS
que se asocia a una familia de FPGAs, para producción en grandes volúmenes. Una vez
que el desarrollo está realizado diseñado, prototipado y verificado en una FPGA, se
puede realizar una rápida migración a dispositivos no programables, pero con
arquitecturas similares a los programables. Si bien se pierden todas las características
36
REVISION BIBLIOGRAFICA
asociadas a la programabilidad, se logra bajar mucho los costos en volúmenes de
producción elevados(Oliver 2007).
1.4 Proceso de Análisis de Circuitos Digitales por el método de Ingeniería Inversa.
La Ingeniería Inversa es una metodología que se utiliza para obtener modelos o
duplicados a partir de un objeto de referencia. Esta metodología a menudo se confunde
con la piratería y por lo general no es enseñada de manera formal en las instituciones
educativas. Por otro lado, en las tareas industriales, la ingeniería inversa se aplica de
manera directa o indirecta en procesos, máquinas y el duplicado de partes y
componentes.
1.4.1 Fundamentos de Ingeniería Inversa.
Muchas de las tareas y actividades que se presentan en las empresas, tales como el
mantenimiento de maquinaria, innovaciones tecnológicas, sustitución de partes y
componentes, entre otras, requieren del uso de metodologías que permitan obtener
información útil y confiable por medio de la cual sea posible resolver problemas. Una
de las metodologías usadas para tal fin es llamada Ingeniería Inversa. A menudo
confundida con la piratería, la Ingeniería Inversa, se define como aquel proceso
analítico-sintético que busca determinar las características y/o funciones de un sistema,
una máquina o un producto o una parte de un componente o un subsistema. El propósito
de la ingeniería inversa es determinar un modelo de un objeto o producto o sistema de
referencia. (Vázquez 2010)
La ingeniería inversa del software es el proceso consistente en analizar un programa, en
un esfuerzo por crear una representación del mismo con un nivel de abstracción más
elevado que el código fuente. Es un proceso de recuperación del diseño que persigue
variados objetivos, que pueden ir desde la optimización de su funcionamiento, hasta el
cambio/mejora de funcionalidades. Según va aumentando el nivel de abstracción, crece
la complejidad del trabajo, así como la necesidad de comprensión de la aplicación.
(Tinetti 2008)
La ingeniería inversa ha sido utilizada desde tiempos inmemoriales. La lista sería
bastante larga, pero como ejemplo vale la pena citar el copiado de herramientas,
métodos de caza, métodos de siembra y cosecha. Otro ejemplo es el caso de la segunda
37
REVISION BIBLIOGRAFICA
guerra mundial, donde los aliados usaron Ingeniería Inversa de alto nivel para
desentrañar los misterios de la tecnología alemana. En muchos aspectos esta guerra fue
ganada por el hecho de conocer, duplicar y mejorar las tecnologías que día a día
desarrollaban los alemanes.
En cuanto a estrategia de innovación tecnológica se refiere, los países asiáticos (China,
Japón) son claros ejemplos de haber usado a la Ingeniería Inversa como método de
desarrollo tecnológico, esto es, al duplicar y mejorar componentes, sistemas, máquinas
y procesos.
1.4.2 Ingeniería inversa de software
La ingeniería inversa tiene la misión de desentrañar los misterios y secretos de los
sistemas en uso. La ingeniería inversa de software consiste principalmente en recuperar
el diseño de una aplicación a partir de su código. Esto se realiza principalmente
mediante herramientas que extraen información de los datos, procedimientos y
arquitectura del sistema existente.
Su mayor uso se ve los casos que:

No existe documentación o la misma está obsoleta.

Se haya realizado la programación en bloque de códigos muy grandes y/o sin
estructurar.

No existe documentación interna en los programas, o es incomprensible o está
desfasada.

Se prevé que la aplicación pueda tener aún larga vida.
La ingeniería inversa puede extraer información de diseño del código fuente, pero el
nivel de abstracción, la integridad de la documentación, el grado con el cual trabajan al
mismo tiempo las herramientas y el analista humano, y la direccionalidad del proceso
son sumamente variables.(Vázquez 2010)
1.4.3 Nivel de abstracción
El nivel de abstracción de un proceso de ingeniería inversa y las herramientas que se
utilizan para realizarlo aluden a la sofisticación de la información de diseño que se
38
REVISION BIBLIOGRAFICA
puede extraer del código fuente. El nivel de abstracción ideal deberá ser lo más alto
posible, es decir, el proceso de ingeniería inversa debe ser capaz de derivar:

Sus representaciones de diseño de procedimiento (bajo nivel de abstracción).

La información de las estructuras de datos y de programas (nivel de abstracción
ligeramente elevado).

Modelos de flujo de datos y de control (un nivel de abstracción relativamente
alto)

Modelos de entidades y de relaciones (un elevado nivel de abstracción).
A medida que crece el nivel de abstracción se proporciona al ingeniero de software
información que le permitirá comprender más fácilmente estos programas.
1.4.4 Integridad
La integridad de un proceso de ingeniería inversa alude al nivel de detalle que se
proporciona en un determinado nivel de abstracción. En la mayoría de los casos, la
integridad decrece a medida que aumenta el nivel de abstracción. Por ejemplo, dado un
listado del código fuente, es relativamente sencillo desarrollar una representación de
diseño de procedimientos completa. También se pueden derivar representaciones
sencillas del flujo de datos, pero es mucho más difícil desarrollar un conjunto completo
de diagramas de flujo de datos o un diagrama de transición de datos. La integridad
mejora en proporción directa a la cantidad de análisis efectuado por la persona que está
efectuando la ingeniería inversa.
1.4.5 Interactividad
La interactividad alude al grado con el cual el ser humano se “integra” con las
herramientas automatizadas para crear un proceso de ingeniería inversa efectivo. En la
mayoría de los casos, a medida que crece el nivel de abstracción, la interactividad
deberá incrementarse, o si no la integridad se verá reducida.
1.4.6 Direccionalidad
Con el término direccionalidad se hace referencia refiere a la forma en que se usará la
información extraída. Si la direccionalidad del proceso de ingeniería inversa es
39
REVISION BIBLIOGRAFICA
unidireccional, toda la información extraída del código fuente se proporcionará a la
ingeniería del software que podrá entonces utilizarla durante la actividad de
mantenimiento. Si la direccionalidad es bidireccional, entonces la información se
suministrará a una herramienta de reingeniería que intentará reestructurar o regenerar el
viejo programa (Vázquez 2010).
Una materia sujeta a un proceso constante ingeniería inversa es la electrónica. Es muy
común que este estudio se realice con poca o ninguna información, ya que la mayoría de
los fabricantes no están dispuestos a ceder fácilmente información sobre los productos
que diseñan, esto representa una amenaza por parte de la competencia, la cual
rápidamente estudiaría el diseño y sacaría otro con iguales prestaciones o incluso
mejores. En este caso particular se encuentra electrónica programada la cual cae entre
dos ramas de la ingeniería inversa, la ingeniería inversa de hardware y la de software.
Esta dicotomía se debe a que mediante un programa o código, se realiza la descripción
de un hardware. Lo anterior obliga a darle un enfoque distinto a la clásica ingeniería
inversa de software, la cual usa disímiles herramientas en aras de depurar el código
fuente del programa, el cual es solamente eso, un código. Si es cierto que un hardware,
realizado en cualquier lenguaje de descripción de hardware, es también un código,
también es cierto que no es “solamente un código”. Lo más saludable resulta adoptar un
“enfoque híbrido” entre ambas, o sea, teniendo presente que se trata de un hardware,
analizar el código en cuestión.
40
MATERIALES Y METODOS
CAPÍTULO 2 MATERIALES Y MÉTODOS
En el presente capítulo se propone una metodología de análisis aplicable a la ingeniería
inversa de circuitos digitales, orientada principalmente al circuito presente en la
componente programable de la tarjeta T-232. Para complementar esta propuesta se
explican los fundamentos de la programación en AHDL, los elementos básicos para el
trabajo con el software Quartus II y se introduce la tarjeta T-232.
2.1 Propuesta de metodología de trabajo.
A pesar de que es utilizada día a día, los fundamentos de la ingeniería inversa no se
enseñan en ningún curso como asignatura oficial. Los que se inician en este mundo
chocan de frente con una tarea de la cual no tienen idea de cómo atacar, y a la hora de
buscar literatura, se encuentran de que existen muchas formas de hacerlo, ya que no
existen reglas definidas en este mundo, cada quien utiliza el método que considera más
atractivo.
En cuanto a las herramientas a usar, no existe un software llamado “Caja de
Herramientas para Ingeniería Inversa”, dichas herramientas dependen en gran medida
del trabajo que se pretenda realizar, aunque dos herramientas que no pueden faltar son
la paciencia y la experiencia. El presente trabajo propone una metodología de trabajo
aplicable a la ingeniería inversa de circuitos digitales diseñados mediante el empleo de
HDLs, específicamente AHDL. La misma consta de seis pasos simples que se describen
a continuación.
 Recopilar la información necesaria.: Lo primero a hacer, es recopilar toda la
información que pueda necesitarse acerca del circuito en cuestión. La búsqueda de
información debe centrarse en el tipo de HDL usado, herramientas utilizadas para
el diseño, dispositivo lógico donde está implementado y otras cuestiones que se
estimen convenientes.
41
MATERIALES Y METODOS
 Establecer un orden apropiado para el análisis.: El orden en que se comienza
el análisis del circuito es fundamental para optimizar el trabajo. Se recomienda
empezar por aquellos bloques que reciben sus señales de entrada directamente de
los pines de la FPGA, dejando para un análisis posterior aquellos que reciben sus
señales de entrada de otros bloques del diseño. Esto se hace para evitar confusión,
poder llevar un seguimiento de las señales de entrada/salida y evitarnos así la tan
frecuente pregunta: ¿De dónde salió esto? Además, teniendo en cuenta que es muy
común encontrar estructuras anidadas, incluso de varios niveles, se sugiere
comenzar el análisis de afuera hacia adentro.
 Determinar entradas, salidas y variables utilizadas: Lo primero que se le debe
prestar atención al examinar el código fuente de determinado bloque, son las
señales de entrada y salida individualmente. Después de separarlas en tres grupos
(entrada, salida y bidireccional si existiese), se procede a identificar el tipo de
variable correspondiente a cada señal. En caso de que fuese una variable no
definida por Quartus II, sino por un usuario, se procede a la búsqueda del (los)
archivo (archivos) en que se define la misma y se ejecuta su análisis hasta
encontrar su funcionamiento.
 Identificar conexiones existentes: Luego de definidas las variables presentes en
el diseño, se pasa a ver la forma en que estas se interconectan entre sí. Esto se
logra mediante un seguimiento del trayecto recorrido por las señales de entrada y
los procesos a los que son sometidos antes de convertirse en señales de salida.
 Análisis e interpretación del circuito: A esta altura, están creadas las
condiciones necesarias para teorizar sobre el posible funcionamiento del circuito.
Es ahora donde se debe, basándose en la información adquirida con anterioridad,
adoptar la teoría de funcionamiento que nos parezca más probable y asumir que el
bloque tratado se rige por la misma. Para este paso resulta muy útil trabajar con un
esquemático del código en cuestión.
 Simulación: Aquí es donde se confirma o no la teoría planteada en el paso
anterior. Si se conoce la forma de las señales de entrada con que se alimenta el
bloque, se puede tener una idea de lo que debe producir el mismo a la salida. En
42
MATERIALES Y METODOS
caso de que no se conozca la forma de las señales de entrada, siempre se puede
utilizar una señal de prueba que nos resulte conveniente, dígase un pulso, un tren
de pulsos, una señal de reloj u otra que se considere apropiada. En función de qué
tan diferente sea la señal de salida de la esperada, se conocerá la exactitud de la
teoría planteada. En caso de que la teoría planteada resulte no ser cierta, se debe
regresar al paso número cinco.
2.2 Introducción al AHDL. Conceptos e ideas fundamentales.
Altera Hardware Description Language (AHDL), es un lenguaje de descripción de
hardware (HDL), de alto nivel, desarrollado por la compañía Altera. El mismo está
pensado para el diseño de lógica combinacional compleja, operaciones de grupo,
máquinas
de
estado,
tablas
de
verdad,
y
lógica
parametrizada
(ALTERA_CORPORATION 2006). AHDL, al igual que otros HDLs utiliza ecuaciones
lógicas, variables, constantes, funciones, operadores aritméticos, tablas de verdad y
expresiones condicionales. Es un lenguaje modular y concurrente. (Cheng 1998)
Se puede utilizar cualquier editor de texto para crear archivos de diseño de texto en
AHDL (.tdf), las únicas restricciones de que estos ficheros deben guardarse con la
extensión ya mencionada y que las líneas no deben exceder los 255 caracteres. Estos
archivos pueden compilarse para crear archivos de salida para usar en el proceso de
simulación, análisis de temporización (timing analysis) y la programación de
dispositivos.(ALTERA_CORPORATION 2006) AHDL no es case sensitive (no
diferencia entre mayúsculas y minúsculas).
2.2.1 Estructura de un archivo .tdf.
Un archivo .tdf presenta una estructura determinada por once secciones. De estas
secciones, solo dos son imprescindibles y el resto son opcionales, esto no significa que
no sean necesarias. A continuación se mencionan las mismas y se da una breve
descripción de cada una.
Título (opcional)
43
MATERIALES Y METODOS
La sección TITULO es un campo opcional, único, que no afecta a la descripción del
hardware. Permite incorporar comentarios que luego serán incorporados al reporte de
compilación (.rpt). Tributa a la documentación del diseño.
Su sintaxis es: TITLE “nombre del diseño”;
Include (opcional)
La sección Include es un campo opcional, múltiple, que permite importar texto desde
otros archivos escritos en AHDL (cuya extensión por defecto es .inc) al diseño en curso
para su compilación. Usualmente es usado para incluir prototipos de funciones de
menor nivel.
Su sintaxis es: INCLUDE “archivo.inc”;
Constant (opcional)
La sección Constant es un campo opcional, múltiple, que permite definir un nombre
simbólico y asociarlo a un valor constante. Gracias a esto posteriores usos del nombre
serán reemplazados por el valor constante durante la compilación.
Su sintaxis es: CONSTANT nombre = valor;
Define (opcional)
La sección Define es un campo opcional, múltiple, que permite una función evaluable,
que devuelve un valor en base a sus argumentos. Basado en esto el compilador evalúa
las expresiones y calcula el valor numérico de las mismas. Esta expresión no genera
hardware.
Ejemplo de su sintaxis: DEFINE MAX (a, b) = (a > b)? a:b;
Parameters (opcional)
La sección Parameters es un campo opcional, múltiple, que permite declarar parámetros
que controlan la implementación de una megafunción o macrofunción parametrizada.
Estos parámetros pueden ser nombres definidos por el usuario, o por ALTERA. Un
parámetro puede ser usado sólo luego de ser declarado. No se permiten referencias
cruzadas. En la declaración se puede asignar a los parámetros valores por defecto. El
44
MATERIALES Y METODOS
compilador busca el valor del parámetro desde la instancia de la función hasta el nivel
tope. Se sigue luego por los valores de default.(ALTERA_CORPORATION 2006)
Ejemplo de una sección Parameters:
PARAMETERS
(FILENAME = “miarchi.mif”,
ANCHO,
AD_ANCHO = 8,
NUMPALA = 2^AD_ANCHO)
Function prototype (opcional)
El campo prototype es la descripción de una función, compuesta por: nombre de la
función, entradas, parámetros, salidas y puertas bidireccionales
Ejemplo:
FUNCTION nombre_función (ent1,.., entK)
WITH (param1, param2,..., paramL)
RETURNS (sal1,…, salM,bidi1,...,bidiN);
Options (opcional)
La sección Options es un campo opcional, que permite activar los bits Turbo y Security
de los dispositivos de Altera. Además determina el orden por defecto de los bits del
archivo.
Assert (opcional)
La sección Assert es un campo opcional, que permite probar y validar una expresión
arbitraria.
Subdesign (necesario)
45
MATERIALES Y METODOS
La sección Subdesign se utiliza para declarar tipo y nombre de los puertos de un diseño
.tdf. El tipo básico de los puertos puede ser INPUT, OUTPUT, o BIDIR. Se puede usar
MACHINEINPUT y MACHINEOUTPUT para importar y exportar máquinas de
estado.
Es posible asignar un valor por default de GND o VCC para las entradas en caso que no
sean usadas en un nivel superior(ALTERA_CORPORATION 2006).
Ejemplo:
SUBDESIGN mi_diseño (
en1,clk1: INPUT;
a[4..0]: OUTPUT;
dual:BIDIR; )
Variable (opcional).
En esta sección se declaran las variables usadas en la sección LOGIC para definir la
lógica interna. O sea, que se declaran variables que representan y retienen información
interna. Las variables pueden declararse como nodos ordinarios o tri-estado, primitivas,
megafunciones, macrofunciones o máquinas de estado. También pueden generarse
variables condicionalmente con la sentencia If Generate.
Puede incluir las siguientes construcciones (Pierrat 2012):

Declaración de nodos.

Declaración de registros.

Declaración de instancias de funciones.

Declaración de Máquinas de estado.

Asignación de ALIAS a Máquinas de estado.

Sentencias If Generate.
Ejemplo:
VARIABLE
a,b,c : NODE;
temp:halfadd;
46
MATERIALES Y METODOS
tsnodo: TRI_STATE_NODE;
adder:lpm_add_sub WITH (LPM_WIDTH=8);
Logic (necesario).
Define la operación lógica del fichero .tdf y se encuadra entre las palabras clave BEGIN
y END. Esta lógica puede definirse mediante ecuaciones booleanas, lógica condicional
o tablas de verdad. Puede incluir cualquiera de las siguientes construcciones:
 Sentencias por defecto.
 Ecuaciones booleanas.
 Sentencias Case.
 Sentencias For Generate.
 Sentencias If Generate.
 Sentencias If Then.
 Tablas de verdad.
 Referencias a funciones In_Line.
2.2.2 Notación y nomenclatura usada en AHDL.
Algunos de los recursos utilizados por AHDL son:

Palabras reservadas: Como en todo lenguaje de descripción de hardware,
AHDL tiene una serie de palabras reservadas, que no son más que palabras o
identificadores que tiene un significado particular para el lenguaje. Los ejemplos
más clásicos serían las palabras usadas en construcciones de flujo de control,
tales como if, then, y else, presentes en casi todos los lenguajes de
programación. Es necesario hacer esta aclaración ya que las palabras reservadas
no pueden usarse como nombres de variables, constantes o funciones. De violar
este principio, con seguridad, el hardware en cuestión no se programará
correctamente.
47
CAPÍTULO 2. MATERIALES Y METODOS

48
Operadores y otros símbolos: Los operadores son aquellos símbolos que indican
algún tipo operación o acción. A pesar de que pueden clasificarse en muchas
categorías, las dos más comunes y más usadas son los operadores lógicos y
matemáticos. A continuación se muestra la Tabla 2.1 con los operadores de mayor
uso en AHDL.
Tabla 2.1 Operadores de mayor uso en AHDL.
Operador
Significado
Ejemplo
+
+unario
+1
-unario
-1
!
NOT lógico
!a
^
exponente
a^2
MOD
módulo
4 MOD 2
DIV
división
4 DIV 2
*
producto
a*2
LOG2
log.base 2
LOG2(4-3
+
suma
1+1
-
resta
2-1
==
igualdad
5 == 5
!=
desigualdad
5 != 4
>
mayor
5>4
<
menor
a < b+2
<=
menor
igual
& o AND
AND
-
o
& o NAND AND negada
a <= b+2
a&b
1 !& 0
48
CAPÍTULO 2. MATERIALES Y METODOS
$ o XOR

OR
exclusivo
49
1$1
¡$ o XNOR XOR negado
1 !$ 1
# u OR
OR inclusivo
a#b
!# o NOR
OR negado
a !# b
?
IF compacto
(5<4)?3:4
Puertos, grupos y números: Se entienden como puertos en AHDL a las variables
presentes en las entradas y salidas de primitivas o macrofunciones(Pierrat 2012).
También reciben esta denominación, aquellos puertos destinados a la entrada y
salida de señales procedentes de los pines de la FPGA. Existen varios puertos, entre
ellos es necesario destacar los que siguen.
Tabla 1.2 Puertos
Nombre
Función
Puerto de entrada
INPUT
OUTPUT
Puerto de salida
BIDIR
Puerto bidireccional
MACHINE
Entrada de máquina de estado
INPUT
MACHINE
Salida de máquina de estado
OUTPUT
.clk
Entrada de reloj
.ena
Habilitador de entrada (reloj o latch)
.reset
Entrada reset de una máquina de estado.
49
CAPÍTULO 2. MATERIALES Y METODOS

.clrn
Clear
.prn
Preset
.d, .j, .k, .s, .r, .t
Entradas de datos de biestables D, JK, SR, y T.
.q
Salida de un biestable o latch.
50
Todos aquellos que alguna vez han tenido que enfrentarse a un lenguaje de
descripción de hardware, se han percatado de que en ocasiones se hace útil tratar
por igual a una cierta cantidad de variables de características semejantes, para este
fin quedan definidos los grupos en AHDL. Estos grupos pueden declararse
mediante ecuaciones booleanas.
Los grupos pueden tener hasta 256 miembros, los cuales son tratados como una colección
de bits que actúa como un todo. Ejemplo de esto podría ser el caso hipotético de los bits del
4 al 1 de un puerto denominado a, cuya notación sería: a[4..1], vale la pena destacar que
solo es permitido un rango después del identificador de grupo. Una vez que el grupo está
definido, una forma rápida de especificar el rango completo sería para nuestro caso: a [ ].
También es posible la creación de grupos de puertos o números separados por comas y
encerrados en paréntesis como podría ser (a,b,c,d). Si se quisiese incluir un rango en alguna
de estas variables, por ejemplo (a, b, c [4..1], d) no perdería validez el grupo. Esta notación
es especialmente útil a la hora de especificar puertos. Por ejemplo, los puertos de entrada de
la variable var del tipo DFF podrían escribirse de la siguiente forma: var.(d, clk, clrn.prn).
La representación de números en AHDL no es un problema, al contrario. AHDL permite el
uso de números decimales, binarios, hexadecimales y octales en cualquier combinación
deseada. A continuación se ofrecen algunos ejemplos de declaración de números en AHDL:
B"0110X1X10"
Q"4671223"
H"123AECF"
50
CAPÍTULO 2. MATERIALES Y METODOS
51
Primitivas: El término de primitiva, por sí solo, se explica con bastante claridad. No
obstante se podría definir una primitiva como una función o bloque funcional ya existente,
que puede ser utilizado en el diseño o modificado a voluntad por el diseñador de acuerdo a
sus necesidades. AHDL hace gran uso de primitivas, de las cuales se ofrece información en
la Tabla 2.3.
Tabla 2.3 Flip-flops y Latchs.
Primitiva
Parámetros de entrada
Salida
(d, ena)
(q)
DFF
(d, clk, clrn, prn)
(q)
DFFE
(d, clk, clrn, prn, ena)
(q)
JKFF
(j, k, clk, clrn, prn)
(q)
JKFFE
(j,k,clk, clrn, prn, ena)
(q)
SRFF
(s, r, clk, clrn, prn)
(q)
SRFFE
(s, r, clk, clrn, prn, ena)
(q)
TFF
(t, clk, clrn, prn)
(q)
TFFE
(t, clk, clrn, prn, ena)
(q)
LATCH
51
CAPÍTULO 2. MATERIALES Y METODOS
52
Tabla 2.2 Primitivas lógicas.
Primitiva
Descripción
AND de 2 entradas
AND2
BAND2
AND de 2 entradas negadas
OR2
OR de 2 entradas
BOR2
OR de 2 entradas negadas
NAND2
NAND de 2 entradas
BNAND2
NAND de 2 entradas negadas
NOR2
NOR de 2 entradas
BNOR2
NOR de 2 entradas negadas
XOR
XOR de 2 entradas
XNOR
XNOR de 2 entradas
NOT
NOT
GND
Pone a tierra un nodo determinado
VCC
Asigna Vcc a un nodo determinado
52
CAPÍTULO 2. MATERIALES Y METODOS
53
Tabla 2.3 Primitivas de entrada y salida
Primitiva Descripción
Declaración del pin
INPUT
Pin de entrada
In: input
OUTPUT
Pin de salida
Out: output
BIDIR
Pin bidireccional
Input: bidir

Sentencias de control: Al igual que en todo tipo de programación de alto nivel
necesita control de flujo, la descripción de hardware necesita también algún tipo de
control en cuanto a orden de procesamiento se refiere. Para este fin se utilizan las
sentencias siguientes.
Case statement: Esta sentencia relaciona las alternativas que pueden tomarse de acuerdo al
valor que adopte la variable de estudio. Su estructura es la siguiente:
Case variable is
When condición 1 =>
acción 1;
When condición 2 =>
acción 2;
When others =>
acción 3;
End Case;

If-Then statement: Esta sentencia relaciona las alternativas que pueden tomarse
después de que cierta condición sea considerada como verdadera. Su estructura es la
siguiente:
If condición 1 verdadera then
acción 1;
Elsif condición 2 verdadera then
acción 2;
53
CAPÍTULO 2. MATERIALES Y METODOS
54
Else
acción por defecto;
End If;

If-Generate statement: Esta sentencia relaciona las alternativas que pueden
tomarse después de que cierta condición sea considerada como verdadera. Su
estructura es la siguiente:
If condición verdadera generate
acción 1;
Else generate
acción 2;
End Generate;

Tablas de verdad: Las tablas de verdad son utilizadas para especificar algún tipo
de lógica o comportamiento de máquinas de estado. Cada entrada de la tabla
contiene una combinación de entradas que produce valores de salida especificados
anteriormente.
Ejemplo:
TABLE
a0, f[4..1].q => f[4..1].d, control;
0, B"0000" => B"0001", 1;
0, B"0100" => B"0010", 0;
1, B"0XXX" => B"0100", 0;
X, B"1111" => B"0101", 1;
END TABLE;

Máquinas de estado: Se denomina máquina de estados a un modelo de
comportamiento de un sistema con entradas y salidas, en donde las salidas dependen
no sólo de las señales de entradas actuales sino también de las anteriores. Esto se
implementa de forma muy elegante y simple en AHDL.
54
CAPÍTULO 2. MATERIALES Y METODOS
55
2.3 Quartus II.
Quartus II es una herramienta de software producida por Altera para el análisis y la síntesis
de diseños realizados en HDL.
Este software brinda un ambiente de diseño multiplataforma que se adapta con facilidad a
las necesidades del diseñador, brindando grandes facilidades en el diseño de sistemas
SOPC (system-on-a-programmable-chip). Quartus II incluye soluciones para cada una de
las fases de diseño de FPGAs, CPLDs. (Figura 2.1)
Figura 2.1 Flujo de diseño del Quartus II (tomado de(ALTERA_CORPORATION 2010))
Además, Quartus II permite el uso de interfaces gráficas de usuario (GUI) e interfaces de
líneas de comando para cada una de las etapas de diseño. Las mismas pueden ser utilizadas
indistintamente, sin restricción de tipo alguno.
Quartus II permite al desarrollador o desarrolladora compilar sus diseños, realizar análisis
temporales, examinar diagramas RTL y configurar el dispositivo de destino con el
55
CAPÍTULO 2. MATERIALES Y METODOS
56
programador.
Con el programa de diseño Quartus II los diseñadores pueden usar los dispositivos
HardCopyStratix de manera que puede prever y verificar su rendimiento, el cual resulta en
promedio un 50 por ciento más rápido que su FPGA equivalente. Además, en el flujo de
diseño del HardCopyStratix, Quartus II incluye una serie de utilidades que reducen el
tiempo de diseño. Como contraste adicional, se tiene el bajo precio del Quartus II en
comparación con otras herramientas de diseño de ASIC.
2.3.1 Quartus II Edición Web vs Quartus II Edición de Suscripción.
La Edición Web es una versión gratuita de Quartus II que puede ser descargada o enviada
gratuitamente por correo. Esta edición permite la compilación y la programación de un
número limitado de dispositivos Altera. Aunque se requiere un registro de licencia para
utilizar la Edición Web de Quartus II, el mismo es gratuito y puede ser renovada
ilimitadamente.
La Edición de Suscripción de Quartus II también está disponible para ser descargada
gratuitamente, pero se debe pagar una licencia para utilizar todas las funciones de la
aplicación. Se puede utilizar la licencia gratuita de la Edición Web en esta edición,
restringiendo el número de dispositivos que pueden ser utilizados con la aplicación.
56
CAPÍTULO 2. MATERIALES Y METODOS
57
Tabla 2.6 Quartus Edición Web vs Quartus Edición de suscripción.
Features
Web Edition Software
Subscription
Edition
Software
General
Getting started
Download (www.altera.com/download) and DVD
(www.altera.com/dvdrequest)
Information
Operating system
support
Windows: XP (32/64
Windows: XP (32/64 bit),
bit), 7 (32/64 bit),
7 (32/64 bit), Windows
Windows Server 2008
Server 2008 R2 (64 bit)
R2 (64 bit)
Linux: Red Hat Enterprise
Linux: Red Hat
Linux 5 (32/64 bit)
Enterprise Linux 5 (32
bit)
CentOS 5 (32/64 bit)
CentOS 6 and REHL 6 (64
CentOS 5 (32 bit)
bit)
CentOS 6 and REHL 6
(64 bit)
Device
CPLD
MAX® series devices: MAX series devices: All
All
Support
Low-cost FPGA
Cyclone® V FPGAs: All
Cyclone
FPGAs:
IV
All
E/GX
Cyclone
III/III LS FPGAs: All
Cyclone II FPGAs: All
Cyclone FPGAs: None
Mid-range FPGA
Arria®
None
GX
Cyclone V FPGAs: All
Cyclone IV E/GX FPGAs:
All Cyclone III/III LS
FPGAs: All Cyclone II
FPGAs:
All
Cyclone
FPGAs: All
FPGAs: Arria GX FPGAs: All
Arria II GX FPGAs: All
57
CAPÍTULO 2. MATERIALES Y METODOS
58
Arria II GX FPGAs: Arria V GX FPGAs: All
EP2AGX45
Arria V GX FPGAs:
None
High-end FPGA
Stratix® series devices: Stratix series devices: All
None
SoC FPGA
None
Cyclone V SoC FPGAs:
5CSXFC6D6
ASIC
HardCopy® series: None HardCopy® series: All
Tabla tomada de(ALTERA_CORPORATION 2012)
A pesar de las ventajas ofrecidas por la versión de suscripción, en el presente trabajo se
utilizara la edición web de dicho software en su versión 9.0, debido a las dificultades que se
presentan en el acceso a esta herramienta, principalmente económicas. A los efectos del
presente, esto no representa ningún obstáculo, dado que la FPGA EP2C70F896C8,
perteneciente a la familia Cyclone II, está soportada por esta versión del software.
2.3.2 Descripción básica de Quartus II.
Para ejecutar Quartus II v9.0 no se necesita ningún conocimiento especial. La ejecución del
programa genera una primera pantalla (Figura 2.2). En la línea superior de la pantalla
aparece un menú en línea que permite el acceso a otros submenús del programa. Situada en
la fila inmediatamente inferior aparece un menú de iconos o barra de herramientas, para
activar con facilidad las opciones más importantes del simulador. En ambas líneas hay una
opción (Help) que permite acceder a un sistema de ayuda interactiva sobre las opciones de
la herramienta.
En el resto de la pantalla, por defecto, está ocupada por ventanas. En la parte inferior la
ventana Message, que muestra los mensajes generados cuando la herramienta está
58
CAPÍTULO 2. MATERIALES Y METODOS
59
realizando o ha realizado alguna operación como por ejemplo la compilación de un diseño.
En la esquina superior izquierda se encuentra la ventana Project Navigator, que muestra en
sus pestañas las diferentes partes que conforman el proyecto. Debajo de esta se encuentra la
ventana Tasks, que indica cómo evoluciona la ejecución de un comando.
Por último la esquina derecha superior de la ventana queda libre, en esta zona aparecerán
las ventanas que se vayan generando durante el diseño del circuito: los ficheros gráficos o
de texto para la edición del circuito, los ficheros de formas de onda para la simulación y los
resultados de las compilaciones o de las simulaciones.
Figura 2.2 Captura de una pantalla del software Quartus II
El menú contienes diversos menús expandibles:
- File. Permite crear ficheros nuevos o abrir ficheros existentes, crear o abrir proyectos,
salvar ficheros, imprimir, crear ficheros de un tipo en base a otros, etc.
- Edit. Contiene comandos típicos de la edición de ficheros.
- View. Contiene comandos que controlan lo que se muestra en pantalla.
- Project. Contiene comandos para realizar el control de un proyecto.
59
CAPÍTULO 2. MATERIALES Y METODOS
60
A continuación se muestra una captura de un proyecto, realizada en el ambiente de trabajo
estándar de QuartusII:
Figura 2.3 Captura de un proyecto
- Assignments. Contiene comandos que permiten realizar la asignación de determinadas
características al circuito, como el dispositivo que se utiliza en la implementación (Device),
sobre que pines del dispositivo se sitúan las entradas y las salidas ( Pin Planner),
restricciones temporales al circuito (Timing Analysis Settings) o acceso a un menú con
todas las características (Settings).
- Processing. Permite acceder a los comandos que realizan la compilación (CompilerTool),
la simulación (Simulation Tool) y el análisis de las características temporales (Classic
Timing Analyzer Tool) y de potencia disipada (Power Play Power Analyzer Tool) del
circuito.
- Tools. Aquí se puede acceder a diversas herramientas, como pueden ser: Programmer que
permite cargar los resultados de la compilación en un dispositivo físico, o Time Quest
Timing Analyzer, que es un analizador temporal o Chip Planner que permite observar el
interior de un dispositivo, visualizar su contenido, etc.
60
CAPÍTULO 2. MATERIALES Y METODOS
61
En la siguiente figura se muestra una captura de la herramienta Time Quest Timing
Analyzer.
Figura 2.4 Time Quest Timing Analyzer.
En la siguiente figura se muestra una captura de la herramienta RTL Viewer. Esta
herramienta es particularmente útil para el análisis, ya que permite la “traducción” de HDL
a elementos lógicos, es útil destacar que RTL son las siglas de Register Transfer Logic.
61
CAPÍTULO 2. MATERIALES Y METODOS
62
Figura 2.5 RTL Viewer
- Window. Muestra las ventanas activas en la herramienta y permite seleccionar una de
ellas.
- Help. Activa la ventana de ayuda, donde se puede encontrar información de los distintos
comandos de Quartus II, bien sea por capítulos (Contents) o por un índice (Index), con
posibilidad de buscar por palabras claves (Search). También se encuentran en este menú
tutoriales de la herramienta (Tutorial) en forma interactiva o en pdf (Pdf Tutorial).
2.4 La tarjeta T-232.
La tarjeta T-232 forma parte de una estación de vigilancia del espacio aéreo, la cual ha sido
sometida a un proceso de modernización, sustituyendo parte del sistema analógico de
componentes que la conformaban por 5 tarjetas electrónicas funcionales, denominadas por
sus fabricantes T139, T335, T232, T811, T138. Estas tarjetas se encuentran implementadas
en circuitos impresos de 4 capas. El presente trabajo se centrará en el análisis electrónico
del componente programable de la tarjeta T232, así como la identificación y caracterización
de algunas de sus señales de entrada y salida a partir de su código fuente.
62
CAPÍTULO 2. MATERIALES Y METODOS
63
La T232 es una tarjeta electrónica que cumple varias funciones (Figura 2.6), entre las
cuales se encuentran: el intercambio de señales con la tarjeta de cálculo principal, la
formación de los pulsos de sincronismo para las conmutaciones y señalizaciones del puesto
de trabajo 220 y la formación de las señales del bus serie.
Figura 2.6 Tarjeta T-232
De esta tarjeta no se tiene el esquema electrónico y su esquema funcional es el siguiente:
63
CAPÍTULO 2. MATERIALES Y METODOS
64
Figura 2.7 Esquema electrónico
Las componentes programables de la T-232 están implementadas en AHDL y además de
otras funciones desconocidas, sirve de enlace para la dirección de las antenas y rampas de
lanzamiento con la tarjeta 138 y para la atención a las conmutaciones e indicaciones del
panel del bloque 220.
Como se muestra en el figura 2.8, el enlace entre la T-232 y las demás tarjetas del conjunto
se realiza mediante una comunicación serie. Dicho enlace serie se realiza con las señales
denominadas SB1, SB2, SB3, SB4, SB18 y SB19.
64
CAPÍTULO 2. MATERIALES Y METODOS
65
Figura 2.8 Enlace entre la T-232 y las demás tarjetas
En figura 2.9 se muestra el sistema completo y la posición ocupada por la T-232.
65
CAPÍTULO 2. MATERIALES Y METODOS
66
Figura 2.9 Complejo VOLGA
2.5 Cyclone y EPC270f896c8.
Basándose en el enorme éxito alcanzado por la familia de FPGAs Cyclone, Altera no dudó
en lanzar las FPGAs Cyclone II, que con el tiempo se convertirían en la solución líder en el
mercado en lo que a FPGAs de bajo costo realizadas con tecnología de 90 nm se refiere.
Para el desarrollo y producción en masa de las mismas, Altera adoptó una nueva
metodología de diseño. El enfoque de la "optimización-por-eliminación" tradicional
involucraba reducir el costo de un producto de alta densidad, eliminando los rasgos en el
software, y aunque este método es marginalmente efectivo en la reducción de los costos de
las FPGAs, no alcanza el menor costo posible para un tamaño y encapsulado determinado.
66
CAPÍTULO 2. MATERIALES Y METODOS
67
La metodología de diseño utilizada por Altera en la fabricación de los dispositivos Cyclone
y Cyclone II, no se basó en la redefinición de la función de productos ya existentes, sino
que se enfocó en la construcción de una FPGA de bajo costo desde cero.
Los dispositivos Cyclone II son limitados en tamaño, esto significa que su estructura de
entrada/salida son lo más pequeña posible, reduciendo así el costo de fabricación de la
misma. Estos dispositivos se construyeron después de una cuidadosa selección de factores
de forma pequeños, que ofrecieran suficientes pines de entrada/salida.
Las estructuras de enrutamiento en las FPGAs Cyclone II han sido mejoradas para
incrementar su eficiencia. El arreglo de bloques lógicos (LAB) contiene 16 elementos
lógicos (LEs), en lugar de los 10 presentes en su predecesor Cyclone. A 90 nm, el
enrutamiento contribuye más a las demoras en el chip que los elementos lógicos. Utilizando
LABs de 16 LEs se disminuye la cantidad de enrutamientos a hacer, lo cual mejora la
eficiencia del dispositivo.
2.5.1 Arquitectura del Cyclone II.
La arquitectura del Cyclone II se basa en mas de 68000 LEs en arreglo vertical, bloques de
memoria embebidos, multiplicadores embebidos y PLLs, los cuales están rodeados por
elementos de entrada/salida (IOEs). (Figura 2.10) Una interconexión en extremo eficiente y
la baja variación en la red de relojes, permiten la interconexión de estas estructuras para
manejo de señales de datos y relojes.
67
CAPÍTULO 2. MATERIALES Y METODOS
68
Figura 2.10 Arquitectura de Cyclone II
Los IOES son eficientemente agrupados en bancos de entrada/salida (I/O) alrededor del
dispositivo, ofreciendo grandes facilidades y consumiendo un área mínima. Cyclone II
soporta una variada gama de estándares de entrada/salida, como LVDS hasta 805Mbps
(recepción) y 622Mbps (transmisión). Cada IOE tiene tres registros para la implementación
de aplicaciones DDR y circuitería asociada para otras opciones de entrada/salida.
Varios bancos de I/O están equipados con interfaces de memoria externa dedicada. Estos
circuitos simplifican la transferencia de datos con dispositivos de memoria externos,
incluyendo dispositivos DDR2 y QDRII SDRAM. La razón de transferencia puede tomar
valores de hasta 333 Mbps (usando reloj de 167 MHz).
Los dispositivos Cyclone II son PCI revisión 2.1 y PCI-X revisión 1.0b (Rev 2.0 modo 1).
Cada IOE provee varios caminos desde el pin hasta el núcleo, permitiendo al dispositivo
alcanzar los tiempos de espera y procesamiento establecidos.
La densidad de estos dispositivos varía desde 4608 LEs y 119808 bits de RAM hasta 68416
LEs y 1152000 bits de RAM. Además hay disponibles en estos dispositivos desde 13 hasta
150 multiplicadores embebidos de 18x18.
68
CAPÍTULO 2. MATERIALES Y METODOS
69
Tabla 2.4 Características básicas de las FPGA Cyclone II
Característica
Descripción
La arquitectura de la familia Cyclone II está optimizada para
Optimización de costos
de Arquitectura
brindar el menor costo posible y ofrece un máximo de 68.416
elementos lógicos (LEs)-más de 3 veces la densidad presente
en las FPGAs Cyclone de primera generación.
Alto Rendimiento
Las FPGAs Cyclone II son un 60 por ciento más rápido que las
otras soluciones de 90 nm de bajo costo existentes en el
mercado.
Bajo consumo
Las FPGA Cyclone II utilizan solo la mitad de la potencia
utilizada por las otras soluciones de 90 nm de bajo en el
mercado.
Tecnología de Procesos
La FPGA Cyclone II se fabrica en obleas de 300 mm, usando
la tecnología de avanzada de 90 nm.
Memoria integrada
La FPGA Cyclone II ofrece hasta 1,1 Mbits de memoria
integrada a través de los bloques de memoria M4K, que pueden
ser configurados para soportar una amplia gama de modos de
operación, incluyendo memoria RAM, ROM, buffers (FIFO), y
los modos single-port y dual-port.
Multiplicadores
Ofrecen hasta 150 multiplicadores 18 x 18 que son ideales para
embebidos
aplicaciones de bajo costo de procesamiento de señales
digitales (DSP). Estos multiplicadores son capaces de ejecutar
funciones comunes, tales como filtros DSP de respuesta de
impulso finito (FIR), transformada rápida de Fourier (FFT),
correladores, codificadores / decodificadores y osciladores
controlados numéricamente (NCO).
69
CAPÍTULO 2. MATERIALES Y METODOS
70
Interfaces de memoria La FPGA Cyclone II proporcionan soporte para interfaces de
externa
memoria externos, que permiten integrar dispositivos externos
SDR, DDR, DDR2 SDRAM, SRAM y dispositivos QDRII a
velocidades de datos de hasta 668 Mbps.
Estándares de E/S
La FPGA Cyclone II soporta una variedad de estándares de
E/S, tales como la LVTTL, LVCMOS, SSTL, HSTL, PCI y
PCI-X
Interfaces y protocolos Las FPGAs Cyclone II son compatibles con un número de
soportados
diferentes interfaces y protocolos, incluyendo una amplia gama
de protocolos de comunicación, tales como Ethernet, PCI
Express, y otras interfaces de propósito general.
Circuitos de
Las FPGA Cyclone II disponen de hasta cuatro PLL y hasta 16
administración de Reloj
líneas de reloj globales. Estos ofrecen características avanzadas
tales como la síntesis de frecuencia, el desfasaje programable,
salida de reloj externo, ciclo de trabajo programable, ancho de
banda programable, detección de bloqueo, entre otras.
Procesador Embebido
NiosII
Diferencias
El procesador embebido Nios II para dispositivos Cyclone II
reduce costos, aumenta la flexibilidad, y ofrece un reemplazo
ideal para los microprocesadores de bajo costo discretos.
Las FPGA Cyclone II ofrecen funciones nuevas y avanzadas en
fundamentales entre las comparación con FPGAs Cyclone. Estas características
FPGAs Cyclone II
Cyclone
y incluyen multiplicadores embebidos, el soporte de interfaces
externos de memoria para DDR2 y dispositivos de memoria
QDRII, y soporte para más estándares de E/S.
Nota: Tabla tomada de (ALTERA_CORPORATION 2010)
70
CAPÍTULO 2. MATERIALES Y METODOS
71
Multiplicadores
Los multiplicadores embebidos en las FPGAs Cyclone II (Figura 2.11) son capaces de
implementar operaciones de multiplicación simple, usadas comúnmente en las funciones
típicas DSP. Estos multiplicadores pueden configurarse como un multiplicador de 18 bits x
18 bits o dos multiplicadores de 9 bits x 9 bits.
Figura 2.11 Estructura de multiplicador
Estos multiplicadores soportan multiplicaciones tanto con signo o sin él, además, ofrecen
registros opcionales de entrada y salida para un mayor desempeño. Los multiplicadores
están además integrados con los bloques de memoria en los dispositivos Cyclone II, para
lograr una eficiente implementación de algoritmos DSP que usen operaciones que
relacionen a ambas, multiplicación y memoria, tales como filtros FIR y procesamiento de
video.
Tabla 2.5 Multiplicadores disponibles en los dispositivos CycloneII
Dispositivo
LEs
Multiplicadores 18-bit x 18-bit Multiplicadores 9-bit x 9-bit
EP2C5
4,608
13
26
EP2C8
8,256
18
36
EP2C20
18,752
26
52
EP2C35
33,216
35
70
EP2C50
50,528
86
172
EP2C70
68,416
150
300
71
CAPÍTULO 2. MATERIALES Y METODOS
72
El número de multiplicadores en las dos columnas de la tabla anterior no son aditivos (el
EP2C5 ofrece 13 multiplicadores de 18 bit x 18 bit o 26 multiplicadores de 9 bit x 9 bit,
pero no ambos).
Desempeño de los multiplicadores
Capaces de funcionar correctamente hasta 250 MHz, los multiplicadores embebidos
presentes en los dispositivos Cyclone II eliminan el “cuello de botella” del desempeño en
cálculos aritméticos. Estas FPGAs, suelen utilizarse como coprocesadores para aplicaciones
de DSP para “descargar” al procesador DSP de los cálculos aritméticos complejos y de esta
forma potenciar el funcionamiento general del sistema.(ALTERA_CORPORATION 2010)
Distribución del reloj
Los dispositivos Cyclone II presentan una red global de relojes compuesta por hasta 16
líneas de reloj diferentes. Estas líneas de reloj son accesibles desde cualquier parte del
dispositivo y pueden ser alimentadas por pines de entrada, salidas de PLLs, entradas
DDR/PCI o lógica interna.(ALTERA_CORPORATION 2010)
Interfaces de memoria externa
Tomando en cuenta el enorme éxito obtenido por la familia Cyclone, Altera, diseñó
Cyclone II para que pueda trabajar en conjunto con trabaje en conjunto con los más
recientes dispositivos de almacenamiento. Los mismos pueden comunicarse con
dispositivos double data rate (DDR), DDR2, single data rate (SDR) SDRAM y quad data
rate (QDRII) SRAM a través de una interfaz dedicada que garantiza la transferencia rápida
y segura de datos a velocidades de hasta 668 Mbps(ALTERA_CORPORATION 2007).
72
CAPÍTULO 2. MATERIALES Y METODOS
Tabla 2.6 Interfaces de memoria externa
Tecnología Estándar Tamaño
Velocidad
73
Razón
de
I/O
máximo del bus
máxima de reloj
transferencia máxima
SDR
3.3-V
72 bits
167 MHz
167 Mbps
SDRAM
LVTTL
DDR
2.5-V
72 bits
167 MHz
334 Mbps
SDRAM
SSTL
72 bits
167 MHz
334 Mbps
36 bits
167 MHz
668 Mbps
Class I, II
DDR2
1.8-V
SDRAM
SSTL
Class I, II
QDRII
1.8-V
SRAM
HSTL
Class I, II
Detalles técnicos de las interfaces
Los dispositivos Cyclone II están diseñados para la transferencia confiable de datos a altas
velocidades. La clave para lograr esto es incluir entradas y salidas dedicadas para asegurar
que todos los requerimientos de tiempo sean satisfechos y el rendimiento se maximice con
un mínimo de esfuerzo de diseño. Las FPGA Cyclone II están equipadas con pines de
entrada/salida optimizados para el trabajo con dispositivos DDR/DDR2, SDR SDRRAM, y
QDRII SRAM (Figura 2.12). Cada banco I/O presenta hasta dos sets de pines para las
señales de la interface. Estos pines utilizan los estándares de entrada/salida SSTL-18 Clase
I/II, SSTL-2 Clase I/II, and HSTL Clase I/II. Hasta 72 pines para datos están disponibles
por dispositivo, los cuales soportan dual-in line memory module (DIMM) con 64 bits de
datos y corrección de errores.
73
CAPÍTULO 2. MATERIALES Y METODOS
74
Figura 2.12 Interface típica entre una FPGA Cyclone II & Memoria DDR (tomado de
(ALTERA_CORPORATION 2010))
2.5.2 La FPGA EP2C70F896C8.
La FPGA EP2C70F896C8 forma parte de la familia Cyclone II, la cual ha sido tratada con
anterioridad. En aras de obtener más información sobre este dispositivo se analiza la
nomenclatura presente en su encapsulado. Según información brindada por el catálogo de
productos de Altera para el año 2013(ALTERA_CORPORATION 2013), se tiene que este
dispositivo pertenece a la familia Cyclone II, que presenta un encapsulado Fine Line BGA,
que cuenta con 896 pines, que opera a temperaturas comerciales (0-850C) y que es la más
lenta de la familia Cyclone II. Además se sabe que cuentas con 68,416 elementos lógicos,
150 multiplicadores de 18-bit x 18-bit o 300 multiplicadores de 18-bit x 18-bits.
(ALTERA_CORPORATION 2010). Este dispositivo se encuentra en venta en el mercado
internacional a un precio de 281.60 dólares[17].
74
ANALISIS DEL BLOQUE E_PANBEL
75
CAPÍTULO 3 ANÁLISIS DEL BLOQUE E_PANBEL.
En este capítulo se aplica la metodología de trabajo para el análisis mediante ingeniería
inversa de circuitos digitales diseñados mediante HDLs, específicamente AHDL, a un
circuito modelo, presente en la componente programable de la tarjeta T-232 (ver anexo
1). Este circuito es muy extenso, por lo que se analiza solo parte del mismo. Para hacer
esto, se toma un bloque de dicho circuito, se analiza mediante la metodología propuesta
y se valida dicha propuesta en base a los resultados obtenidos. A continuación se
muestran los pasos seguidos en la aplicación de esta metodología.
3.1 Recopilación de la información necesaria.

Determinación del HDL utilizado: Se determina el HDL utilizado en la
confección del código. En caso de desconocer el lenguaje es imprescindible
familiarizarse con sus elementos básicos. En el presente trabajo, se utilizó
AHDL, lenguaje del cual se discutieron algunas particularidades en el capítulo 2.

Determinación del software con el cual fue diseñado el circuito: Se
determina el software con el cual fue diseñado el circuito. En este caso, se utilizó
Quartus II, del cual se discutieron algunas particularidades en el capítulo 2.

Comprobación de la arquitectura del circuito: En este caso el circuito en
cuestión está conformado por bloques especializados.
3.2 Establecimiento de un orden apropiado para el análisis.
Para establecer un orden, es necesario tener un objetivo particular. En esta caso, el
objetivo es la determinación del procesamiento a que son sometidos los pulsos
provenientes de los encoders (ver anexo 3). Para ello se cuenta con la información
ofrecida en la tabla 3.1.
75
ANALISIS DEL BLOQUE E_PANBEL
Señal
76
Tabla 3.1: Pines de la FPGA que reciben las señales provenientes de los
encoders.
Pin
Canal del encoder
E_HA
PIN_N8
A
E_HB
PIN_N11
B
E_PA
PIN_P6
A
E_PB
PIN_N7
B
B_HA
PIN_P4
A
B_HB
PIN_P5
B
B_PA
PIN_P2
A
B_PB
PIN_P3
B
Se determinó el bloque E_PANBEL como bloque a analizar, ya que las señales
provenientes de los encoders, llegan a este bloque y al bloque B_Panbel (Figura 3.1).
Como ambos bloques presentan similar funcionamiento, resulta intrascendente cual de
estos dos bloques se escoja.
76
ANALISIS DEL BLOQUE E_PANBEL
77
Figura 3.1 Bloques E_PANBEL y B_PANBEL
3.3 Determinación de entradas, salidas y variables utilizadas.
El código del bloque es el siguiente:
Include "dff.inc";
Subdesign E_PANBEL
(
CK,CK2Q15,PC,AC,TU,AP,CEKT,SEACH,YL,WL,PW_ON,
P_AA,P_BB,H_AA,H_BB: Input;
NA,NB,PAC,SEN,TY,KO,YYL,WWL,P_set,V_set: Output;
)
Variable
PC_DLY [5..0],PD_DLY[5..0],SENN,AP_DLY,DR,SU:dff;
AA,BB,SA,SS,PW_ONN,PC_DL,PD_DL,SE,SUM,SUD,S_OFF:Node;
Begin
PAC=PC # AC # AP;
SEN=!PAC & SEACH & CEKT ;
77
ANALISIS DEL BLOQUE E_PANBEL
78
KO=WL & !PAC & SS;
SS=!CEKT & SEACH;
TY=!PAC & TU;
S_OFF=TY # AP;
YYL=SEN & YL;
WWL=SEN & WL;
PD_DLY[].clk=CK2Q15;
PD_DLY[0].d=Vcc;
PD_DLY[5..1].d=PD_DLY[4..0].q;
PD_DL=(PD_DLY[2] xor PD_DLY[3]) and PD_DLY[2];
PC_DLY[].clk=CK2Q15; PC_DLY[0].d=PW_ON;
PC_DLY[5..1].d=PC_DLY[4..0].q;
PC_DL=(PC_DLY[2] xor PC_DLY[3]) and PC_DLY[2];
Pw_ONN=PD_DL or PC_DL ;
SENN.clk=CK; SENN.d=SEN; SE=(SEN xor SENN.q) and SENN.q;
P_set=PW_ONN # SE # SUM;
SUD= TY # KO # PAC; SU.clk=CK; SU.d=SUD; SUM=(SUD xor SU.q)
and SU.q;
AP_DLY.clk=ck2Q15; AP_DLY.d=AP;
V_set=(AP_DLY xor AP) and AP_DLY;
if !PAC then AA=H_AA; BB=H_BB;
ELSIF PAC then AA=P_AA; BB=P_BB;
ELSE AA=gnd; BB=gnd;
end if;
DR.clk=BB; DR.d=AA;
SA=AA XOR BB; NA=(DR.q # SA) AND !S_OFF; NB=(!DR.q # SA) AND
!S_OFF;
END;
Este bloque presenta varias entradas, de las cuales no todas intervienen directamente en
el procesamiento de las señales provenientes de los encoders. Si se tiene en cuenta que
solo se conocen las señales provenientes de los mismos, lo más inteligente es hacer una
depuración del código y solo dejar aquellas líneas de código directamente relacionadas
con este proceso:
78
ANALISIS DEL BLOQUE E_PANBEL
79
Include "dff.inc";
Subdesign debuged_e_panbell
(
P,AC,TU,AP,P_AA,P_BB,H_AA,H_BB: Input;
NA,NB: Output;
)
Variable
DR:dff;
AA,BB,TY,SA,S_OFF,PAC:Node;
Begin
PAC=PC # AC # AP;
TY=!PAC & TU;
S_OFF=TY # AP;
if !PAC then AA=H_AA; BB=H_BB;
ELSIF PAC then AA=P_AA; BB=P_BB;
ELSE AA=gnd; BB=gnd;
end if;
DR.clk=BB; DR.d=AA;
SA=AA XOR BB;
NA=(DR.q # SA) AND !S_OFF;
NB=(!DR.q # SA) AND !S_OFF;
END;
Entradas: P, AC, TU, AP, P_AA, P_BB, H_AA, H_BB.
Salidas: NA, NB.
Variables:
DR de tipo dff.: Las variables de tipo dff representan un biestable de tipo D, con
salida q y con entradas: Preset (PRN), Clear (CLR), Clock (CLK) y Data (D).
AA, BB, TY, SA, S_OFF, PAC de tipo Node: Las variables de tipo Node
representan una variable temporal. Tiene funcionalidad similar a las variables de
tipo signal usadas en VHDL.
79
ANALISIS DEL BLOQUE E_PANBEL
80
Si se presenta una variable que no está definida en la biblioteca estándar del software,
sino que fue definida por el usuario, es necesario aplicar esta metodología a dicha
variable para desentrañar su funcionamiento.
3.4 Identificación de conexiones existentes.
En el segmento de código: DR.clk=BB; DR.d=AA; se observa que DR obtiene su señal
de reloj de la variable BB y sus datos de la variable AA.
3.5 Análisis e interpretación del circuito.
La atención debe centrarse en la sección Logic del código. Para este análisis resulta útil
contar con un esquema electrónico del circuito (Figura 3.2).
Figura 3.2: Esquema del circuito realizado con la herramienta RTL Viewer.
Del código se tiene:

PAC=PC # AC # AP: La variable PAC toma el valor lógico „1‟ siempre que
alguna de las entradas PC, AC, AP asuman el mismo valor.

TY=!PAC & TU: La variable TY, toma el valor lógico „1‟ siempre que PAC =
„0‟ y TU = „1‟.

S_OFF=TY # AP: La variable S_OFF toma el valor lógico „1‟ siempre que TY=
„1‟ o AP= „1‟.
80
ANALISIS DEL BLOQUE E_PANBEL
81
En el paso 2 se determinó que la variable DR obtiene su señal de reloj de la variable BB
y sus datos de la variable AA, en el siguiente fragmento de código se observa este
proceso:
if !PAC then AA=H_AA; BB=H_BB;
ELSIF PAC then AA=P_AA; BB=P_BB;
ELSE AA=gnd; BB=gnd;
end if;
Este fragmento queda mejor explicado a través del siguiente diagrama de flujo:
Figura 3.3: Asignación de variables AA y BB
La variable PAC es quien controla qué entradas se toman para el análisis. Se puede
distinguir que las variables AA y BB cuentan con dos “juegos” de señales, AA=H_AA;
BB=H_BB; ó AA=P_AA; BB=P_BB. Se conoce que H_AA y P_AA provienen del
canal A del encoder, al igual que H_BB y P_BB provienen del canal B.
No tiene sentido tener entradas distintas para la misma señal, lo cual indica que existe
otro encoder, correspondiendo dicha suposición a la existencia real de dos regímenes de
trabajo en la estación (ver anexo 2).
Uno de estos encoders es el que aporta la información en el régimen de conducción y el
otro en el de seguimiento, siendo la variable PAC la responsable de identificar dichos
regímenes de trabajo.
Por último se tiene:
SA=AA XOR BB;
NA=(DR.q # SA) AND !S_OFF;
NB=(!DR.q # SA) AND !S_OFF;
81
ANALISIS DEL BLOQUE E_PANBEL
82
De aquí se deduce que la señal S_OFF habilita o no las salidas NA y NB, en
dependencia de su valor, o sea, que dichas salidas se encuentran habilitadas si y solo si
S_OFF = „0‟.
En cuanto a las señales de salida, cuando están habilitadas, su valor depende de la salida
de la variable DR y de la variable SA, las cuales a su vez dependen de las señales de
entradas del bloque.
La forma de las señales de entrada es conocida (ver anexo 3) ya que proviene de un
encoder del tipo BHG16.25W1024-B2-5, y son dos señales con un desfasaje de 900
entre ellas, tal y como se muestra. en la figura 3.4
Figura 3.4: Señales de salida del encoder para un giro horario.
En el caso de DR, al ser un biestable D y tener como entradas señales idénticas
desfasadas 900, solo puede tener dos formas posibles: un „1‟ en el caso horario o un „0‟
en el caso antihorario.
La variable SA, (Figura 3.5) es un arreglo para lograr duplicar la frecuencia de la señal
de entrada procedente del encoder.
Figura 3.5: Señal SA
82
ANALISIS DEL BLOQUE E_PANBEL
83
3.6 Simulación.
Debido a que las salidas están determinadas por la variable SA y la salida de la variable
DR, se incluyen las mismas como salidas del bloque, mediante una ligera modificación
del código la cual se muestra a continuación (Figura 3.6):
Include "dff.inc";
Subdesign debuged_e_panbell
( P,AC,TU,AP,P_AA,P_BB,H_AA,H_BB: Input;
NA,NB,SAt, DRt: Output ;)
(…Se omitió la parte del código que no estuvo sujeta a ninguna
modificación…)
DR.clk=BB; DR.d=AA;
SA=AA XOR BB;
SAt= SA;
DRt= DR.q;
NA=(DR.q # SA) AND !S_OFF;
NB=(!DR.q # SA) AND !S_OFF;
END;
Primeramente se analiza el caso horario, que, como se había explicado anteriormente, es
en el cual la señal del canal A, se adelanta 900 a la del canal B.
Figura 3.6: Bloque debuged_e_panbell modificado
83
ANALISIS DEL BLOQUE E_PANBEL
84
Para realizar la simulación se crea estímulo (Vector Waveform File) con las formas de
onda deseadas (ver anexo 4). Para este caso se optó por dar un valor a la variable PAC,
tal que se escoja el juego de señales P_AA/P_BB. Esta simulación se hace bajo el
supuesto de que el encoder gira a razón de una vuelta por segundo.
De estas suposiciones se obtiene la frecuencia de las señales de salida del encoder, que
en presente caso es de 1024 Hz (ver anexo 3), lo cual indica un periodo de señal de
976.5625 us. Para lograr el desfasaje en ángulo requerido, el desfasaje temporal entre
ellas debe ser de 244.140625 us.
Las entradas AC y PC se toman el valor „1‟ para garantizar que se escoja el juego de
señales P_AA/P_BB.
A la entrada TU no se le asigna ningún valor („0‟). Esto, junto a la condición AP = „0‟,
garantiza que S_OFF = „0‟, lo habilita las entradas NA y NB estén habilitadas.(Figuras
3.7 y 3.8)
Figura 3.7: Caso horario
En el caso antihorario quedaría así:
Figura 3.8 Caso antihorario
84
ANALISIS DEL BLOQUE E_PANBEL
85
En estas simulaciones se observan 3 resultados indiscutibles:
1. La información procedente de los encoders está determinada por la variable SA,
la cual presenta el doble de la frecuencia de la señal procedente del encoder.
Estos datos pasan a una salida.
2. La otra salida adopta el valor „1‟ en ambos casos (horario y antihorario).
3. La diferencia entre el caso horario y el antihorario radica en la inversión en las
funciones de las salidas. Si en el caso horario los datos estaban en NA, en el
caso antihorario los datos están en NB.
Puesto que las ideas sobre el funcionamiento del bloque fueron confirmadas y
reafirmadas por la simulación, se puede concluir que se culminó con éxito el análisis del
bloque en cuestión.
85
CONCLUSIONES Y RECOMENDACIONES
86
CONCLUSIONES

Se comprobó que la aplicación de la metodología propuesta, facilita el análisis
de circuitos digitales diseñados mediante HDLs.

Se determinó cómo ocurre el procesamiento de las señales provenientes de los
encoders y el proceso de formación de las señales serie (SB2), lo cual confirma
la efectividad de la metodología propuesta.

Las señales provenientes de los encoders, el entrar a la FPGA #2 de la T-232,
son procesadas de manera que se obtienen los datos relativos a la posición y
velocidad de giro de dichos encoders (ver anexo 5). Dichos datos son enviados
fuera de la FPGA mediante una transmisión serie.

Se forma una trama de 27 bits a partir de los datos en paralelo ofrecidos al
bloque sbt256_01, de los cuales solo 16 contienen información concerniente al
procesamiento de las señales (ver anexo 6).
86
CONCLUSIONES Y RECOMENDACIONES
87
RECOMENDACIONES
Aún queda mucho que se desconoce de la tarjeta T-232. A pesar de que se identificaron
varios bloques y su funcionamiento presentes en la FPGA#1 de la misma, la FPGA#2
no ha sido estudiada.
1
Investigar el funcionamiento de la FPGA#1 presente en la tarjeta T-232.
2
Determinar como ocurre el intercambio de información entre la FPGA#1 y la
FPGA#2, ambas presentes en la tarjeta T-232.
3
Avanzar en el estudio de la FPGA#2 presente en la tarjeta T-232. Para ello es
necesario la identificación de las señales de entrada de dicha FPGA.
87
REFERENCIAS BIBLIOGRAFICAS
88
REFERENCIAS BIBLIOGRÁFICAS
"Master
magazine."Retrieved
25/2/2013,
2013,
from
http://www.mastermagazine.info/termino/4154.php#ixzz2LwwXGM8h.
García, F. G. Aplicaciones de los sistemas CAD/CAM en la manufactura moderna: 712.
Oliver, J. P. (2007). Diseño Digital Utilizando Lógica Programable: Aplicaciones a la
Enseñanza, Universidad de la República Montevideo: 151.
Tinetti, F. (2008). Ingeniería Inversa Aplicada a Software Numérico: Modelos
Climáticos 1-5.
Vázquez, J. J. D. (2010). Ingeniería Inversa: Metodología y aplicaciones E. J. López.
FORO DE ANÁLISIS DE INVESTIGACIÓN, DESARROLLO Y GESTIÓN
TECNOLÓGICA EN ITESCA 6-10.
.
"Findchips
search
engine."
Retrieved
19/2/2013,
2013,
from
http://www.findchips.com/avail?part=EP2C70F896C8.
.
"Master
magazine."
Retrieved
25/2/2013,
2013,
from
http://www.mastermagazine.info/termino/4154.php#ixzz2LwwXGM8h.
ALTERA_CORPORATION (2006). ALTERA MAX+PLUS II AHDL: 86-138.
ALTERA_CORPORATION (2007). Cyclone II Device Handbook, Volume 1. 101
Innovation Drive San Jose, CA 95134.
ALTERA_CORPORATION. (2010). "Altera's Cyclone II FPGA Family Features."
Retrieved 18/3/2013, 2013, from
http://www.altera.com/devices/fpga/cyclone2/features/cy2-features.html.
ALTERA_CORPORATION. (2010). "Cyclone II Architecture." Retrieved 18/3/2013,
2013, from
http://www.altera.com/devices/fpga/cyclone2/features/architecture/cy2architecture.html
88
REFERENCIAS BIBLIOGRAFICAS
89
ALTERA_CORPORATION. (2010). "Embedded Multiplier Details." Retrieved
18/3/2013, 2013, from
http://www.altera.com/devices/fpga/cyclone2/features/multipliers/cy2multipliers.html.
ALTERA_CORPORATION. (2010). "External Memory Interfaces in Cyclone II
Devices." Retrieved 18/3/2013, 2013, from
http://www.altera.com/devices/fpga/cyclone2/features/cy2-ext_mem_int.html.
ALTERA_CORPORATION (2010). Introduction to the Quartus II Software Version
10.0.
ALTERA_CORPORATION (2012). Altera Quartus II Software v12.1 — Subscription
Edition vs. Web Edition.
ALTERA_CORPORATION (2013). Altera Product Catalog: 84.
Cheng, S. T. (1998). Altera Training Manual for PC Users: 192-225.
García, F. G. (2008). Aplicaciones de los sistemas CAD/CAM en la manufactura
moderna: 7-12.
Oliver, J. P. (2007). Diseño Digital Utilizando Lógica Programable: Aplicaciones a la
Enseñanza, Universidad de la República Montevideo: 151.
Pierrat, G. G. (2012). Introduccion al AHDL: 2-16.
Tinetti, F. (2008). Ingeniería Inversa Aplicada a Software Numérico: Modelos
Climáticos 1-5.
Vázquez, J. J. D. (2010). Ingeniería Inversa: Metodología y aplicaciones E. J. López.
FORO DE ANÁLISIS DE INVESTIGACIÓN, DESARROLLO Y GESTIÓN
TECNOLÓGICA EN ITESCA 6-10.
89
ANEXOS
90
ANEXOS
ANEXO#1: Circuito syclone_2
Tabla 7: Relación de señales y pines
NOMBRE DE LA SEÑAL
PIN DE LA FPGA
LED1
PIN_J4
LED2
PIN_K4
E_SEL
PIN_C15
MD0
PIN_M15
MD1
PIN_N16
MD2
PIN_N15
MD3
PIN_P14
MD4
PIN_T14
MD5
PIN_R13
MD6
PIN_T13
MD7
PIN_R12
B_HA
PIN_P4
B_HB
PIN_P5
B_PA
PIN_P2
B_PB
PIN_P3
B_SEL
PIN_C16
CK80
PIN_A9
D0
PIN_B14
D1
PIN_B13
90
ANEXOS
D2
PIN_C13
D3
PIN_D13
D4
PIN_E13
D5
PIN_F14
D6
PIN_G13
D7
PIN_L15
D8
PIN_L14
D9
PIN_M14
D10
PIN_P13
D11
PIN_P11
E_HA
PIN_N8
E_HB
PIN_N11
E_PA
PIN_P6
E_PB
PIN_N7
SB_1
PIN_E16
SB_3
PIN_E15
SYCIONE_1
PIN_A7
245_CK
PIN_R8
AP_B
PIN_T4
AP_E
PIN_T3
CK0
PIN_T12
CK1
PIN_R11
CK2
PIN_T11
CK4
PIN_T10
CK3
PIN_R10
LED4
PIN_L2
91
91
ANEXOS
LED3
PIN_K2
RA1
PIN_N2
RA2
PIN_N3
RA3
PIN_P1
RA4
PIN_M2
RPT1
PIN_M1
RPT2
PIN_N1
RPT3
PIN_K1
RPT4
PIN_L1
RAR1
PIN_R6
RAR2
PIN_T7
RPR1
PIN_R5
RPR2
PIN_T6
SB_2
PIN_R7
SB_19
PIN_T8
SYCIONE_2
PIN_A6
245_CK1
PIN_G15
DIP_B1
PIN_K15
DIP_B2
PIN_L3
DIP_B3
PIN_M3
DIP_B4
PIN_N4
E_PAC
PIN_R4
B_PAC
PIN_T5
92
92
ANEXOS
93
Figura A1.1
Figura A1.2
93
ANEXOS
94
Figura A1.3
94
ANEXOS
95
Figura A1.4
Figura A1.5
95
ANEXOS
96
ANEXO#2: EXPLICACIÓN SOBRE EL TRABAJO DEL DOMINIO “VOLGA”
En el dominio “Volga” hay en total 18 tarjetas funcionales, de las cuales 5 están
implementadas con electrónica programada y solo se conoce su destinación, no así
su funcionamiento. Las 13 tarjetas restantes se implementan con electrónica analógica
y digital, conociéndose su esquema electrónico y su funcionamiento completamente.
En el esquema que se muestra a continuación, en la figura 1, se ofrecen detalles
sobre el enlace funcional entre las tarjetas de este dominio.
Figura A2.1
El esquema de la figura 1 tiene los siguientes componentes:
Caja eléctrica BK1 para el intercambio de señales con la cabina de antenas.
Caja eléctrica BK3, para el intercambio de señales con las Rampas de
lanzamiento (RL).
Puesto de trabajo 120, para el operador de distancia.
Puesto de trabajo 220, para el operador de ángulo de elevación (E).
Puesto de trabajo 320, para el operador de azimut (B).
Monitor 110, para el trabajo del operador de distancia.
Monitor 210, para el trabajo del operador de ángulo de elevación (E).
96
ANEXOS
97
Monitor 310, para el trabajo del operador de azimut (B).
Computadora de control del tiro, para el trabajo del Jefe de la dotación.
Tarjeta 132 para distribuir las señales que se aplican a los receptores.
Tarjeta 134 en función de receptor, por el plano de elevación (E), para
amplificar las señales de frecuencia intermedia que llegan desde la cabina
de antenas y convertirlas en señales de video, por el canal del blanco y los
canales de los artículos.
Tarjeta 135 en función de receptor, por el plano de azimut (B), para amplificar
las señales de frecuencia intermedia que llegan desde la cabina de antenas y
convertirlas en señales de video, por el canal del blanco y los canales de los
artículos.
Tarjeta 331 para recibir los impulsos de los emisores de las antenas y
llevarlos al voltaje adecuado al trabajo de los componentes digitales.
Tarjeta 332 para amplificar los mandos que se envían a la cabina de
antenas, desde niveles TTL a niveles de 26v.
Tarjeta 3310 para amplificar los impulsos que se envían a la cabina de
antenas, desde niveles TTL a niveles de más de 40v.
Tarjetas 333 y 334, para la conversión de los mandos que se envían hacia las
rampas de lanzamiento desde niveles TTL a niveles de +26v y también para
bajar los voltajes de las señalizaciones que llegan de las rampas de
lanzamiento, desde niveles de +26v a niveles TTL, adecuados al trabajo de
los componentes digitales. La T333 dedicada a las
RL 1, 2 y 3; la T334 para las RL 4, 5 y 6.
Tarjeta 231 para obtener la referencia de la posición de las antenas y las RL,
convirtiendo las fases de los selsines transmisores y de indicación en código
binario, por los planos B y E.
Tarjeta 233 para amplificar las señales de mando de giro del motor que
introduce la predicción en el ángulo de tiro de las RL.
Tarjetas 234 y 235, para amplificar los mandos de giro del motor que
97
ANEXOS
98
introduce el ángulo deseado de orientación de las antenas. La T234 dedicada
al plano E y la T235 para el plano de azimut.
Los bloques 430 y 440 que contienen los motores, selsines y mecanismos, a
través de los cuales se introducen las posiciones de las antenas y RL. El
bloque 430 dedicado al plano E y el 440 para el plano de azimut.
Tarjeta 335 (sincronizador) está implementada con electrónica programada
en la cual, además de otras funciones desconocidas, se elaboran los impulsos
de sincronismo de la transmisión y la recepción de señales, así como la
atención a las conmutaciones e indicaciones de los paneles de los bloques
320 y 420.
Tarjeta 232 (SDA) está implementada con electrónica programada en la cual,
además de otras funciones desconocidas, sirve de enlace para la dirección de
las antenas y RL con la tarjeta 138 y para la atención a las conmutaciones e
indicaciones del panel del bloque
220.
Tarjeta 139 (imitador) está implementada con electrónica programada en la
cual, además de otras funciones desconocidas, sirve para formar las señales
de video para el trabajo imitado y para la atención a las conmutaciones e
indicaciones del panel del bloque 120.
Tarjeta 811 (PCI) que está implementada con electrónica programada en la
cual, además de otras funciones desconocidas, sirve para el intercambio de
información entre la computadora de control del tiro y el resto del sistema.
Tarjeta 138 (Calculo) que está implementada con electrónica programada
en la cual, además de otras funciones desconocidas, se realizan todos los
algoritmos y cálculos fundamentales para el funcionamiento de todos los
sistemas del complejo.
98
ANEXOS
99
ANEXO#3: Características de los encoders
Figura A3.1
99
ANEXOS
100
Figura A3..2
100
ANEXOS
101
ANEXO#4: Creación, compilación y simulación de un proyecto.
1. Ejecutar el software Quartus II. Luego buscar File/ New Project Wizard.
En la siguiente pantalla especificar donde se guardará el proyecto y su nombre.

Figura A4.1
2. Si se desea incluir algún archivo preexistente, hacerlo en la siguiente
ventana.
101
ANEXOS

102
Figura A4.2
102
ANEXOS
103
3. Especificar el dispositivo a emplear.

Figura A4.3
4. En caso de que se desee utilizar otra herramienta EDA (además de Quartus
II), especificar en la siguiente pantalla.
103
ANEXOS

104
Figura A4.4
104
ANEXOS
105
5. Comprobar las opciones seleccionadas. En caso de haber cometido algún
error, regresar y corregirlo.

Figura 2
Ahora comienza el proceso de creación de proyecto, lo primero que se debe hacer es:
6. Ir a File/ New y seleccionar la opción:
105
ANEXOS

106
Figura A4.6
Repetir el paso anterior, pero esta vez seleccionar AHDL File. Luego escribir el código
y guardarlo (No escoger como nombre el mismo del proyecto).

Figura A4.7
7. Crear un símbolo con el código en cuestión.
106
ANEXOS
107
Para esto basta con ir a File/ Creare/Update/ Create Symbol Files for Current File.
8. Diseñar el circuito.
En el esquemático creado anteriormente, hacer doble click e insertar el símbolo creado
junto con los pines de entrada/salida necesarios.

Figura A4.8
Una vez creado, salvarlo con nombre igual al proyecto.
107
ANEXOS

108
Figura A4.9
9. Compilar el diseño.
Para lograr esto ir a Processing/ Start Compilation, si el proceso fue exitoso aparecerá
una pantalla similar a esta.

Figura A4.10
108
ANEXOS
109
Ya el proyecto se encuentra listo para su simulación. Para esto se necesita:
10. Crear un estímulo:
File/ New/ Vector Waveform File. Luego hacer doble click en un espacio en blanco de
la sección Name e ir a la opción Node Finder.

Figura A4.11
Posteriormente, se seleccionan los pines o buses a incluir en la simulación.
109
ANEXOS

110
Figura A4.12
11. Ahora es necesario dar valores a cada una de las señales de entrada como se
muestra en la figura. No olvide guardar.
Figura A4.13
Como paso final solo queda ir a Processing/ Start Simulation. Si la misma fue exitosa,
aparecerá una pantalla como esta:
110
ANEXOS

111
Figura A4.14
12. Para visualizar los resultados de la simulación, vea el reporte de simulación
(Simulation Report)
111
ANEXOS

112
Figura A4.15
112
ANEXOS
113
ANEXO#5: Análisis de las señales provenientes de los encoders.
A la hora de analizar las señales provenientes de los encoders, es necesario tener en
cuenta que se producen simultáneamente el procesamiento de las señales
correspondientes al plano épsilon y beta. Estos procesos son similares, difiriendo tan
solo en el plano que se analiza, que físicamente no quiere decir más que cada uno utiliza
un encoder distinto. Por este motivo, solo se analizará el proceso en el plano épsilon. A
continuación se ofrece un esquema del circuito analizado.
Figura A5.1
El análisis que se ofrece a continuación ha sido llevado a cabo teniendo en cuenta la
metodología propuesta en este trabajo.
CK_CONTROL.
Está compuesto por 2 boques similares de nombre UPCNT16 conectados como se
muestra en la figura.
113
ANEXOS
114
Figura A5.2
Estos bloques están implementados en VHDL, a diferencia del resto del circuito. Su
código es el siguiente:
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY UPCNT16 IS
PORT
(
CK80M, CLR
: IN STD_LOGIC;
Q : OUT INTEGER RANGE 65535 DOWNTO 0
);
END UPCNT16;
ARCHITECTURE a OF UPCNT16 IS
SIGNAL cnt : INTEGER RANGE 65535 DOWNTO 0;
BEGIN
PROCESS (CK80M)
BEGIN
IF CLR='1' THEN CNT<=0;
114
ANEXOS
115
ELSIF (CK80M'EVENT AND CK80M = '1') THEN
CNT <= CNT + 1;
END IF;
END PROCESS;
Q <= CNT;
END a;
Entradas:
1. CK80M: Se asume que provenga del cristal de 80 MHz presente en la tarjeta.
2. CLR: Su valor está fijado en GND.
Salida:
Q: Bus de 16 bits (216=65536).
Variable:
cnt: Variable de 16 bits de tipo INTEGER (entero).
Conexiones existentes:
El bit 15 de la señal 1Q (salida del primer bloque) es la entrada del segundo bloque.
Funcionamiento:
La entrada CLR nunca tomara el valor „1‟, por lo que el conteo no se reiniciaría hasta
que no llegue a 65535. La variable cnt es un contador de 0 a 65535 que aumenta su
valor en 1 cada vez que se detecta un borde de subida de la señal CK80M. El valor del
conteo es entregado a la salida Q.
Simulación:
Los resultados de la simulación del primer bloque son los siguientes:
115
ANEXOS
116
Figura A5.3
Los resultados de la simulación del segundo bloque son los siguientes:
Figura A5.4
Como se observa que en ambos casos, la señal presente en el bit n+1 tiene la mitad de la
frecuencia que presenta el bit n. (Ejemplo: En la simulación se observa que la señal
SAL2(8) tiene la mitad de la frecuencia que la que presenta SAL2(7)).
Entonces se deduce que la función de esta sección la de brindar 32 señales de reloj
distintas (16 por cada bloque) que serán usadas en el funcionamiento del circuito. Las
que salen del primer bloque se nombran 1Q0 a 1Q15 y las que salen del segundo bloque
se nombran 2Q0 a 2Q15. Todas ellas provienen de la señal de 80 MHz provenientes del
cristal de la T-232, la cual es dividida entre dos 32 veces para obtener les ya
mencionadas señales.
Nota: El análisis del bloque E_PANBEL fue realizado en el capítulo 3.
116
ANEXOS
117
ANT_E_POS_CNT.
Está compuesto por un bloque similar al que se muestra en la figura.
Figura A5.5
Este bloque está implementado en AHDL. Su código es el siguiente:
constant Scal_in_E=60; -- 1:60
constant Scal_end=Scal_in_E-1;
Include "LPM_COUNTER.INC";
Include "INP_CON.INC";
Include "CUT.INC";
Include "DFF.INC";
Include "SRFF.INC";
SUBDESIGN ANT_E_POS_CNT
(
1Q2, AA, BB, PAC,DIP_B2,SET,AEG[11..0],AET[11..0]:INPUT;
E_GO_COUNT[11..0],E_TO_COUNT[11..0]:OUTPUT;
)
VARIABLE
117
ANEXOS
118
S:INP_CON;
1C,2C,3C,4C,SCU:CUT;
G_CNT,T_CNT:LPM_COUNTER WITH(LPM_WIDTH=12);
scal_E: lpm_counter with (lpm_width=7);
SR_E: srff;
DT[1..0]: dff;
smS,smE,scal_E_cls,1M,2M,3M,5M,6M,7M,8M,9M,10M,11M[11..0],12M[11..0],22M,
23M,Nset :NODE;
BEGIN
S.A=AA; S.B=BB; S.CK=1Q2; 1M=S.E;
------------- !!!!!!!!!!!!!!!!! ------------------------------------------scal_E.clock=AA & BB ;
scal_E.aclr=scal_E_cls;
scal_E.updown=vcc;
case scal_E.q[] is
when 0=> smS=vcc;
when Scal_end=> smE=vcc;
when Scal_in_E=> scal_E_cls=vcc;
when others => smS=gnd; smE=gnd; scal_E_cls=gnd;
end case;
SR_E.s=smS;
SR_E.r=smE;
118
ANEXOS
119
SR_E.clrn=!scal_E_cls;
SR_E.clk=1Q2; 2M=!SR_E.q;
DT[].clk=AA & BB;
DT[].d=DT[].q+1;
if DIP_B2 then 3M=DT[1].q;
ELSE 3M=DT[0].q;
END IF;
-------------------- ??????????? ------------------IF (11M[]>=933 AND 11M[]<2048) THEN 5M=VCC;
ELSIF (11M[]>=2048 AND 11M[]<4084) THEN 6M=VCC;
ELSE 5M=GND; 6M=GND;
END IF;
1C.IN=5M; 7M=1C.OUT; 2C.IN=6M; 8M=2C.OUT;
IF (7M==VCC AND 1M==GND) THEN 9M=VCC; 10M=VCC;
ELSE 9M=2M; 10M=3M;
END IF;
IF (8M==VCC AND 1M==VCC) THEN 9M=VCC; 10M=VCC;
ELSE 9M=2M; 10M=3M;
END IF;
3C.IN=9M; 22M=3C.OUT; 4C.IN=10M; 23M=4C.OUT;
---------------------- Counter setting ---------------------------------------119
ANEXOS
120
SCU.in=SET; Nset=SCU.out;
G_CNT.CLOCK=22M & !PAC;
G_CNT.UPDOWN=!1M;
G_CNT.DATA[]=AEG[];
G_CNT.ALOAD=Nset;
11M[]=G_CNT.Q[];
T_CNT.CLOCK=23M & !PAC;
T_CNT.UPDOWN=!1M;
T_CNT.DATA[]=AET[];
T_CNT.ALOAD=Nset;
12M[]=T_CNT.Q[];
E_GO_COUNT[]=11M[];
E_TO_COUNT[]=12M[];
END;
Entradas:
1Q2: Señal de reloj (Ver CK_CONTROL).
AA: Salida E_NA de E_PANBELL.
BB: Salida E_NB de E_PANBELL.
PAC: Salida proveniente de E_PANBELL.
DIP_B2: Pin L3 de la FPGA.
SET: Salida P_SET de E_PANBELL.
AEG[11..0]: Bus de datos de 12 bits.
120
ANEXOS
121
AET[11..0] : Bus de datos de 12 bits.
Salidas:
1. E_GO_COUNT[11..0] : Bus de datos de 12 bits.
2. E_TO_COUNT[11..0] : Bus de datos de 12 bits.
Variables:
1. S:INP_CON;
2. 1C,2C,3C,4C,SCU:CUT;
3. G_CNT,T_CNT:LPM_COUNTER WITH(LPM_WIDTH=12);
4. scal_E: lpm_counter with (lpm_width=7);
5. SR_E: srff;
6. DT[1..0]: dff;
7. smS, smE, scal_E_cls, 1M, 2M, 3M, 5M, 6M, 7M, 8M, 9M, 10M , 11M[11..0],
12M[11..0], 22M, 23M, Nset :NODE
De estas variables se conoce, gracias a la ayudas del software Quartus II que:

Lpm_counter(Lpm_width=x) es un contador de x bits.

SRFF es un flip-flop SR.

DFF es un flip-flop D.
Las variables de tipo CUT e INP_CON no están definidas por el software, o sea, fueron
definidas por el usuario y para conocer cómo funcionan las mismas, es necesario aplicar
la metodología de análisis propuesta a estas variables.
CUT
Está compuesto por un bloque similar al que se muestra en la figura.
121
ANEXOS
122
Figura A5.6
La descripción de este bloque no está en ningún HDL, sino en un archivo .gdf (Grafic
Design File). Esta es una oportunidad para comprobar el alcance de esta metodología.
Figura A5.7
Entrada/Salida:
Presenta una entrada y una salida, ambas de un bit.
Variables:
1. LCELL: Buffer.
2. AND2: Compuerta and de 2 entradas.
Conexiones existentes:
Como se observa la entrada pasa a una cadena de 3 variables de tipo LCELL y
posteriormente entra a la compuerta and. A la otra entrada de la compuerta and llega la
señal de entrada.
Funcionamiento:
La señal de entrada es sometida a un retraso de 3 LCELL. Luego se hace un and entre la
señal original y su versión retrasada. De aquí se obtiene una señal estabilizada, al costo
de un retraso y una disminución en la duración de los pulsos de la señal.
Simulación:
122
ANEXOS
123
El dato de mayor peso que se observa en los resultados de la simulación es el retraso se
8.244ns a que es sometida la misma.
Figura A5.8
INP_CON
Está compuesto por un bloque similar al que se muestra en la figura.
Figura A5.9
La descripción de este bloque está AHDL y es la siguiente:
Include "srff.inc";
Subdesign inp_con
(
a,b,ck:input;
e:output;
)
Variable
s1:srff;
begin
s1.clk=ck; s1.s=!a; s1.r=!b; s1.clrn=vcc; s1.prn=vcc;
123
ANEXOS
124
e=!s1.q;
end;
---FUNCTION SRFF (S, R, CLK, CLRN, PRN)
---RETURNS (Q); s1.srff
Entradas:
a,b: Entradas de flip-flop SR.
ck: Señal de reloj
Salida:
e: Salida de flip-flop SR.
Variable:
Presenta una variable llamada s1 de tipo srff (flip-flop SR).
Conexiones existentes:
ck es la señal de reloj del flip-flop. La entrada S del mismo es la señal de entrada a
negada y la entrada R del mismo es la señal de entrada b negada. La salida e del bloque
es la salida q del biestable negada.
Figura A5.10
Este es uno de los casos donde la herramienta RTL Viewer complica nuestro trabajo. La
imagen anterior explica con mayor claridad el funcionamiento de esta variable, sin
124
ANEXOS
125
embargo, el resultado ofrecido por esta herramienta, a pesar de ser similar en
funcionamiento, no es tan esclarecedor.
Figura A5.11
Funcionamiento:
La función de un biestable SR está dada por la siguiente tabla.
Tabla 8 Funcionamiento de un biestable SR
qn
S
R
qn+1
0
0
0
0
0
0
1
0
0
1
0
1
0
1
1
Indeterminado
1
0
0
1
1
0
1
0
1
1
0
1
1
1
1
indeterminado
Simulación:
Como se aprecia en el código fuente del bloque ANT_E_POS_CNT, las señales que
llegan a inp_con son las señales AA y BB que son la salida del bloque E_PANBEL. Ya
125
ANEXOS
126
se había determinado la existencia de dos casos: el giro horario y el antihorario.
Teniendo en cuenta esto se obtienen los siguientes resultados:
Caso horario:
Figura A5.12
Caso antihorario:
Figura A5.13
Basándose en estos resultados, se puede concluir que la variable inp_con es la
encargada de la determinación del sentido del giro de los encoders, siendo la salida e de
esta variable, la que ofrece esta información, tomando el valor „0‟ para el caso
antihorario y „1‟ para el caso horario.
Ya desentrañados los misterios de las variables cut e inp_con es hora de proseguir con
el análisis del bloque ANT_E_POS_CNT.
Conexiones existentes:
En aras de facilitar el trabajo, la herramienta RTL Viewer nos ofrece el siguiente
esquema:
126
ANEXOS
127
Figura A5.14
127
ANEXOS
128
Funcionamiento:
Como se advierte en el esquema, la complejidad de este bloque dificulta el seguimiento
de todas las señales. Por esto se recomienda adoptar un orden para el análisis que no se
había utilizado antes pero que ofrece óptimos resultados, se trata de comenzar como se
dice en buen cubano “de atrás para adelante”.
Las salidas de este bloque (E_GO_COUNT[11..0] y E_TO_COUNT[11..0]) provienen
de dos “entidades” del tipo lpm_counter, así que lo más saludable sería ver de dónde
salen las señales que llegan a estos 2 bloques.
Como el análisis del bloque ANT_E_POS_CNT desembocó en el análisis de dos
bloques, es necesario aplicar desde cero el algoritmo de trabajo propuesto a estos
bloques.
Antes de adentrarse en especificidades del circuito, es necesario conocer sobre el
funcionamiento de las variables del tipo lpm_counter.
La megafunción lpm_counter representa un contador binario que soporta conteo hacia
arriba, hacia abajo o en ambos sentidos. Presenta opcionalmente entradas, ya sean
sincrónicas o no, clear y set, así como un puerto para datos en conjunto con una entrada
load. Para más información consultar la ayuda del software Quartus II.
Figura A5.15
128
ANEXOS
129
Como se observa, estos bloques presentan cuatro entradas:
1. clock: Es la señal que se debe analizar con más detenimiento, ya que es la clave
del conteo, razón por lo cual se hará después. Por el momento se puede decir que
es una señal de reloj activa por borde de subida.
2. updown: Controla la dirección del conteo, si es „1‟ el conteo es ascendente y si
fuese „0‟ el conteo es descendente.
3. aload: Cuando toma el valor „1‟, en el contador se carga asincrónicamente el
valor existente en el bus de datos data[11..0].
4. data[11..0]: Entrada de datos (paralelo).
Conexiones existentes:
Como se observa el código, ambos bloques presentan entradas comunes:
G_CNT.UPDOWN=!1M; T_CNT.UPDOWN=!1M;
G_CNT.ALOAD=Nset; T_CNT.ALOAD=Nset;
Para hacer el seguimiento de la señal que llega a las entradas updown, se sigue la
variable 1M. Pero como: 1M=S.E; y S.E es la salida de una variable del tipo INP_CON,
se puede concluir que estos contadores varían la dirección de su conteo en
dependencia de la dirección de giro del encoder correspondiente.
Para hacer el seguimiento de la señal que llega a las entradas aload, se sigue la variable
Nset. Pero como: Nset=SCU.out; y SCU.out es la salida de una variable del tipo CUT,
la cual toma su entrada de la entrada SET del bloque ANT_E_POS_CNT
(SCU.in=SET). Entonces se puede concluir que estos contadores cargan en sus
salidas el valor existente en las entradas data[11..0], al recibir un „1‟ por la entrada
SET del bloque ANT_E_POS_CNT .
Ambas entradas data[11..0] reciben su valor de las entradas AET[11..0] y AEG[11..0]
del bloque ANT_E_POS_CNT .( G_CNT.DATA[]=AEG[]; T_CNT.DATA[]=AET[])
El seguimiento de la señal clk es el más complejo en este caso. Para G_CNT se tiene
que:
129
ANEXOS
130
G_CNT.CLOCK=22M & !PAC;
De aquí se deduce que la entrada PAC es una entrada de habilitación para el reloj
de dicho bloque. Lo mismo sucede con T_CNT (T_CNT.CLOCK=23M & !PAC).
Además, del análisis del código se obtienen los siguientes resultados:
El reloj de G_CNT se mantiene en VCC si:

(933≤11M[11..0]<2048) y se produce un giro antihorario.

(2048≤11M[11..0]<24084) y se produce un giro horario.
De lo contrario el reloj de G_CNT toma su valor de la salida del flip-flop SR_E.
El reloj de T_CNT se mantiene en VCC si:

(933≤11M[11..0]<2048) y se produce un giro antihorario.

(2048≤11M[11..0]<24084) y se produce un giro horario.
De lo contrario el reloj de G_CNT toma su valor de la salida del flip-flop DT[1..0].
El reloj de T_CNT toma su valor de DT[1] si la entrada DIP_B2 es 1. Si DIP_B2 toma
el valor de 0, entonces el reloj de T_CNT toma su valor de DT[0].
Simulación:
Para el caso antihorario se obtiene:
Figura A5.16
Aquí se confirman algunas de las suposiciones hechas. Como se observa, la salida
E_TO_COUNT arroja un conteo similar al esperado. Es válido recordar que se tomó
130
ANEXOS
131
como base para esta simulación, la idea de que el encoder giraba a una velocidad de una
vuelta por segundo. Esto lleva a pensar que si la idea planteada es correcta, un segundo
después de iniciada la simulación, el conteo debe tener el valor de 1024 (ver anexo 3).
Figura 3
Es necesario confirmar que la dirección del conteo cambia al cambiar la dirección de
giro del encoder, para esto se simula un caso mixto en el cual el encoder gira en ambos
sentidos. Esta idea queda confirmada.
Caso mixto:
Figura A5.17
Como detalle a no dejar pasar por alto está que para que el conteo inicie, es necesario
que se cargue (SET) algún valor en el contador. Valor a partir del cual comienza el
conteo.
ANT_E_VELOCITY.
131
ANEXOS
Está
compuesto
por
un
boque
como
132
se
muestra
en
la
figura.
Figura A5.18
Este bloque está implementado en y su código es el siguiente:
constant Scal_in_E=55; -- 1:55
constant Scal_end=Scal_in_E-1;
Include "INP_CON.INC";
Include "LPM_COUNTER.INC";
Include "SRFF.INC";
Include "CUT.INC";
Include "SEL_DIP.INC";
SUBDESIGN ANT_E_VELOCITY
(
1Q2, PAC, SET,V_ZERO, AA, BB,VEE[11..0]:INPUT;
F1[11..0]:OUTPUT;
)
VARIABLE
S: INP_CON; 1C,2C,3C:CUT;
CO:LPM_COUNTER WITH(LPM_WIDTH=12);
132
ANEXOS
133
scal_E: lpm_counter with (lpm_width=6);
SR_E: srff;
DL,Filter[3..0]: dff ;
smS,smE,scal_E_cls,
1M,2M,3M,4M,5M,6M,7M,8M,sets,VCLS:NODE;
BEGIN
S.A=AA; S.B=BB; S.CK=1Q2; 1M=S.E;
DL.clk=1Q2; DL.d=SET ; sets=(SET xor DL.q) and DL.q;
------------- !!!!!!!!!!!!!!!!!!!!!! ------------------------------------------scal_E.clock=AA & BB ; scal_E.aclr=scal_E_cls; scal_E.updown=vcc;
case scal_E.q[] is
when 0=> smS=vcc; when Scal_end=> smE=vcc; when Scal_in_E=> scal_E_cls=vcc;
when others => smS=gnd; smE=gnd; scal_E_cls=gnd; end case;
SR_E.s=smS; SR_E.r=smE; SR_E.clk=1Q2;SR_E.clrn=!scal_E_cls; 2M=!SR_E.q;
----------------- E_velocity counter ----------------------------------------Filter[].clk=1Q2 ; Filter[0].d=PAC; Filter[3..1].d=Filter[2..0].q;
VCLS=Filter[3].q and Filter[2].q and Filter[1].q and Filter[0].q ;
3C.IN=7M; 8M=3C.OUT;
CO.CLOCK=8M & VCLS; CO.UPDOWN=!1M;
CO.ACLR=!VCLS or V_zero
;CO.DATA[]=VEE[]; CO.ALOAD=sets; F1[]=CO.Q[];
----------------- ????? ???????? -------------------------------------IF (F1[]>=350 AND F1[]<2048) THEN 3M=VCC; ---
133
ANEXOS
134
ELSIF (F1[]>2048 AND F1[]<=3745) THEN 4M=VCC; -ELSE 3M=GND; 4M=GND; END IF;
1C.IN=3M; 5M=1C.OUT; 2C.IN=4M; 6M=2C.OUT;
IF (5M AND !1M) OR (6M AND 1M) THEN 7M=VCC; ELSE 7M=2M;END IF;
END;
Entradas:
1. 1Q2:Entrada de reloj (ver ck_control)
2.
PAC: Salida de E_PANBEL.
3.
SET: Es el resultado del and entre la señal 1Q4 (ver ck_control) y la salida
AP_E del bloque e_system.
4. V_ZERO: Salida del bloque e_system.
5.
AA: Salida de E_PANBEL.
6.
BB: Salida de E_PANBEL. (Junto con AA, son quienes portan la información
de los encoders.)
7. VEE[11..0]: Bus de datos de 12 bits.
Salida:
F1[11..0]: Bus de 12 bits .
Variable:

S: INP_CON

1C,2C,3C:CUT;

CO:LPM_COUNTER WITH(LPM_WIDTH=12);

scal_E: lpm_counter with (lpm_width=6);

SR_E: srff;
134
ANEXOS

DL,Filter[3..0]: dff ;

smS,smE,scal_E_cls, 1M,2M,3M,4M,5M,6M,7M,8M,sets,VCLS:NODE;
135
Conexiones existentes:
En aras de facilitar el trabajo, la herramienta RTL Viewer ofrece un esquema. En este
bloque es necesario aplicar similar óptica a la aplicada en el bloque anterior, la filosofía
de “de atrás hacia adelante”.
La salida del bloque proviene una entidad del tipo lpm_counter llamada CO
Figura A5.19
De estas entradas la única desconocida hasta el momento es aclr, que tiene como
función poner a „0‟ asincrónicamente la salida de este bloque.
La entrada updown de este bloque presenta un tratamiento análogo que la entrada
updown de los bloques G_CNT y T_CNT.
La entrada data[11..0] recibe sus datos de el bus de entrada VEE[11..0]
La entrada aload toma su valor del and lógico entre la salida del biestable DL y el xor
realizado entre la entrada set y la salida del biestable DL como se ve un el código:
CO.ALOAD=sets;
sets=(SET xor DL.q) and DL.q;
135
ANEXOS
136
Como se desconoce la forma real de la señal AP_E, para la simulación esta se toma
como„1‟.
Figura A5.20
Como se observa, este bloque carga en su salida el dato de velocidad presente en la
entrada VEE.
NOTA:
Los datos obtenidos de los bloques ANT_E_POS_CNT, ANT_E_VELOCITY y
E_PANBEL
son
utilizados
en
el
resto
del
circuito
136
ANEXOS
137
Figura A5.21
137
ANEXOS
138
ANEXO#6: Análisis de la comunicación serie.
A la hora de analizar el proceso de transmisión serie de los datos ofrecido por el resto
del programa, es necesario centrarse principalmente en cómo se forma la trama
correspondiente. Como que los datos que son transmitidos son transparentes al efecto de
la transmisión, en este anexo se propone determinar cómo ocurre dicho proceso.
Figura A6.1
El análisis que se ofrece a continuación ha sido llevado a cabo teniendo en cuenta la
metodología propuesta en este trabajo.
SEL31_1
138
ANEXOS

139
Figura A6.2
Este bloque está implementado en AHDL y su código es el siguiente:
SUBDESIGN SEL31_1
(
AB[7..0],
1D[11..0],2D[11..0],3D[11..0],4D[11..0],5D[11..0],6D[11..0],7D[11..0],8D[11..0],9D
[11..0],10D[11..0],11D[11..0],12D[11..0],13D[11..0],14D[11..0],15D[11..0],16D[11..
0],17D[11..0],18D[11..0],19D[11..0],20D[11..0],21D[11..0],22D[11..0],23D[11..0],24
D[11..0],25D[11..0],26D[11..0],27D[11..0],28D[11..0],29D[11..0],30D[11..0],31D[11
..0] : INPUT;
Q[15..0] : OUTPUT;
)
BEGIN
Q[15..12]=0;
Q[11..0]=
139
ANEXOS
140
(1D[] & AB[]==H"0")#
(2D[] & AB[]==H"1")#
(3D[] & AB[]==H"2")#
(4D[] & AB[]==H"3")#
(5D[] & AB[]==H"4")#
(6D[] & AB[]==H"5")#
(7D[] & AB[]==H"6")#
(8D[] & AB[]==H"7")#
(9D[] & AB[]==H"8")#
(10D[] & AB[]==H"9")#
(11D[] & AB[]==H"A")#
(12D[] & AB[]==H"B")#
(13D[] & AB[]==H"C")#
(14D[] & AB[]==H"D")#
(15D[] & AB[]==H"E")#
(16D[] & AB[]==H"F")#
(17D[] & AB[]==H"10")#
(18D[] & AB[]==H"11")#
(19D[] & AB[]==H"12")#
(20D[] & AB[]==H"13")#
(21D[] & AB[]==H"14")#
(22D[] & AB[]==H"15")#
140
ANEXOS
141
(23D[] & AB[]==H"16")#
(24D[] & AB[]==H"17")#
(25D[] & AB[]==H"18")#
(26D[] & AB[]==H"19")#
(27D[] & AB[]==H"1A")#
(28D[] & AB[]==H"1B")#
(29D[] & AB[]==H"1C")#
(30D[] & AB[]==H"1D")#
(31D[] & AB[]==H"1E");
END;
Entradas:
AB[7..0]:Proveniente del bloque sbt 256_01.
1D[11..0]:Proveniente del bloque input buffer dbn.
2D[11..0]:Proveniente del bloque input buffer dbn.
3D[11..0]:Proveniente del bloque input buffer dbn.
4D[11..0]:Proveniente del bloque input buffer dbn.
5D[11..0]:Proveniente del bloque input buffer dbn.
6D[11..0]:Proveniente del bloque input buffer dbn.
7D[11..0]:Proveniente del bloque input buffer dbn.
8D[11..0]:Proveniente del bloque input buffer dbn.
9D[11..0]:Proveniente del bloque input buffer dbn.
10D[11..0]:Proveniente del bloque input buffer dbn.
141
ANEXOS
142
11D[11..0]:Proveniente del bloque input buffer dbn .
12D[11..0]:Proveniente del bloque input buffer dbn.
13D[11..0]:Proveniente del bloque ANT_E_POS_CNT.
14D[11..0]:Proveniente del bloque ANT_E_POS_CNT.
15D[11..0]:Proveniente del bloque ANT_B_POS_CNT.
16D[11..0]:Proveniente del bloque ANT_B_POS_CNT.
17D[11..0]: Proveniente del bloque ANT_E_VELOCITY.
18D[11..0]: Proveniente del bloque ANT_B_VELOCITY.
19D[11..0]: Proveniente de la FPGA #1(SYCLONE1).
20D[11..0]: Proveniente de la FPGA #1(SYCLONE1).
21D[11..0]: Proveniente de la FPGA #1(SYCLONE1).
22D[11..0]: Proveniente de la FPGA #1(SYCLONE1).
23D[11..0]:GND.
24D[11..0]: GND.
25D[11..0]: GND.
26D[11..0]: GND.
27D[11..0]: Proveniente de la FPGA #1(SYCLONE1).
28D[11..0]: Proveniente de la FPGA #1(SYCLONE1).
29D[11..0]: Proveniente de la FPGA #1(SYCLONE1).
30D[11..0]: Proveniente de la FPGA #1(SYCLONE1).
31D[11..0]:Proveniente del bloque MM.
Salida:
142
ANEXOS
143
Q[15..0]: Bus de 16 bits.
Funcionamiento:
Como se aprecia en el código(Q[15..12]=0;), los cuatro bits más significativos de la
salida del bloque mantienen siempre el valor „0‟. Los otros 12 bits (Q[11..0]) reciben
este tratamiento:
Q[11..0]=
(1D[] & AB[]==H"0")#
(2D[] & AB[]==H"1")#
(3D[] & AB[]==H"2")#
(…)
(29D[] & AB[]==H"1C")#
(30D[] & AB[]==H"1D")#
(31D[] & AB[]==H"1E");
END;
O sea, en dependencia del valor que asuma la entrada AB[7..0], los once bits menos
significativos tomaran el valor de las entradas(Ejemplo: Si AB[7..0]=0 entonces los
once bits menos significativos de Q[], tomarán el valor de 1D, si AB[7..0]=1 entonces
los once bits menos significativos de Q[], tomarán el valor de 2D).
De lo anterior se desprende que este bloque se comporta como un selector que escoge
una de las 31 entradas de 12 bits, y la pone en la salida con un tamaño de 16 bits.
Simulación:
En aras de comprobar esta idea, se le asignó a cada entrada un valor determinado (1
para 1D, 2 para 2D,…,31 para 31D).
143
ANEXOS
144
Como se aprecia en la figura, la teoría es acertada. Además se puede decir que el
proceso de selección está gobernado por los valores que toma la entrada AB[]. Sobre
esta entrada se darán más detalles posteriormente.

Figura A6.3
sbt256_01
El bloque sbt256_01 es el núcleo del sistema de transmisión serie, del cual ts, bien
forma parte el bloque SEL31_1.

Figura A6.4
Este bloque está implementado en AHDL y su código es el siguiente:
PARAMETERS(Length=128);
144
ANEXOS
145
Constant Width=Length;
SUBDESIGN sbt256_01
(
CK,D[15..0] : INPUT;
Q,AB[7..0],Sync : OUTPUT; )
VARIABLE
TCREAT[7..0],C,K,DD[15..0],Out_D,Cut,AB_CNT[7..0],AB_CNT_Cut,Word_Sync,
Word_Sync_St,Word_Sync_Ed,Word_K,Bit_CNT[4..0],CK_CNT[7..0] : DFF;
AB_PAR,DL_PAR,DH_PAR,Bit_Sel[31..0],CC : NODE;
BEGIN
CK_CNT[].CLK=CK;CK_CNT[]=CK_CNT[]+1;
TCREAT[].CLK=ck; TCREAT[0].D=!CC;
TCREAT[1].D=TCREAT[0];
TCREAT[2].D=TCREAT[1];
TCREAT[3].D=TCREAT[2];
TCREAT[4].D=TCREAT[3];
TCREAT[5].D=TCREAT[4];
TCREAT[6].D=TCREAT[5];
TCREAT[7].D=TCREAT[6];
-------------------------------------------------------------------------------------C.CLK=ck;
K.CLK=ck;
C.D=CC;
145
ANEXOS
146
AB[]=AB_CNT[];
Q=(Out_D&Cut)#Word_Sync;
Out_D.clk=ck;
CC=(TCREAT[0]#TCREAT[1]#TCREAT[2]#TCREAT[3]#TCREAT[4]#TCREAT[5]#T
CREAT[6]#TCREAT[7]);
K.D=TCREAT[5].Q;
Cut.clk=ck;
Cut.d=!(TCREAT[7]#TCREAT[6]);
DD[].CLK=Word_K; DD[].D=D[];
Bit_CNT[].CLK=!Cut;
Bit_CNT[].D=Bit_CNT[].Q+1;
AB_CNT_Cut.clk=ck;
AB_CNT_Cut.d=AB_CNT[]==Width;
Word_Sync_St.clk=ck;
Word_Sync_Ed.clk=ck;
Word_K.clk=ck;
Sync=AB_CNT_Cut;
Word_Sync.clk=Word_Sync_St;
Word_Sync.d=vcc;
Word_Sync.clrn=!Word_Sync_Ed;
Word_Sync_St.d=Bit_CNT[]==28;
Word_Sync_Ed.d=Bit_CNT[]==31;
146
ANEXOS
147
Word_K.d=Bit_CNT[]==0;
AB_CNT[].clk=Word_Sync_Ed;
AB_CNT[].d=AB_CNT[]+1;
AB_CNT[].clrn=!AB_CNT_Cut;
Out_D=(Bit_SEL[0]&AB_CNT[0])#
(Bit_SEL[1]&AB_CNT[1])#
(Bit_Sel[2]&AB_CNT[2])#
(Bit_Sel[3]&AB_CNT[3])#
(Bit_Sel[4]&AB_CNT[4])#
(Bit_Sel[5]&AB_CNT[5])#
(Bit_Sel[6]&AB_CNT[6])#
(Bit_Sel[7]&AB_CNT[7])#
(Bit_Sel[8]&AB_Par)#
(Bit_Sel[9]&DD[0])#
(Bit_Sel[10]&DD[1])#
(Bit_Sel[11]&DD[2])#
(Bit_Sel[12]&DD[3])#
(Bit_Sel[13]&DD[4])#
(Bit_Sel[14]&DD[5])#
(Bit_Sel[15]&DD[6])#
(Bit_Sel[16]&DD[7])#
(Bit_Sel[17]&DL_Par)#
147
ANEXOS
148
(Bit_Sel[18]&DD[8])#
(Bit_Sel[19]&DD[9])#
(Bit_Sel[20]&DD[10])#
(Bit_Sel[21]&DD[11])#
(Bit_Sel[22]&DD[12])#
(Bit_Sel[23]&DD[13])#
(Bit_Sel[24]&DD[14])#
(Bit_Sel[25]&DD[15])#
(Bit_Sel[26]&DH_Par);
AB_PAR
=
((AB_CNT[0]$AB_CNT[1])$(AB_CNT[2]$AB_CNT[3]))$((AB_CNT[4]$AB_CNT[5])$
(AB_CNT[6]$AB_CNT[7]));
DL_PAR = ((DD[0].Q $ DD[1].Q) $ (DD[2].Q $ DD[3].Q)) $ ((DD[4].Q $ DD[5].Q)
$ (DD[6].Q $ DD[7].Q));
DH_PAR = ((DD[8].Q $ DD[9].Q) $ (DD[10].Q $ DD[11].Q)) $ ((DD[12].Q $
DD[13].Q) $ (DD[14].Q $ DD[15].Q));
---------------------------------------------------------------------------------------------table
Bit_CNT[] => Bit_Sel[31..0] ;
H"00" => h"0000001";
H"01" => h"0000002";
H"02" => h"0000004";
H"03" => h"0000008";
148
ANEXOS
149
H"04" => h"0000010";
H"05" => h"0000020";
H"06" => h"0000040";
H"07" => h"0000080";
H"08" => h"0000100";
H"09" => h"0000200";
H"0A" => h"0000400";
H"0B" => h"0000800";
H"0C" => h"0001000";
H"0D" => h"0002000";
H"0E" => h"0004000";
H"0F" => h"0008000";
H"10" => h"0010000";
H"11" => h"0020000";
H"12" => h"0040000";
H"13" => h"0080000";
H"14" => h"0100000";
H"15" => h"0200000";
H"16" => h"0400000";
H"17" => h"0800000";
H"18" => h"1000000";
H"19" => h"2000000";
149
ANEXOS
150
H"1A" => h"4000000";
H"1B" => h"8000000";
END TABLE;
END;
Entradas:
1. CK: Entrada de reloj (1Q4 [Ver ck_control]).
2. D[15..0]: Entrada de datos procedente de SEL31_1.
Salidas:
1. Q: Salida de datos serie.
2. AB[7..0]: Conteo que rige funcionamiento de SEL31_1.
3. Sync: No utilizada.
Variables:
1. TCREAT[7..0],C,K,DD[15..0],Out_D,Cut,AB_CNT[7..0],AB_CNT_Cut,Word_
Sync, Word_Sync_St,Word_Sync_Ed,Word_K,Bit_CNT[4..0],CK_CNT[7..0] :
DFF;
2. AB_PAR,DL_PAR,DH_PAR,Bit_Sel[31..0],CC : NODE
Funcionamiento:
Quedaba pendiente del análisis de SEL31_1, ver la características de la señal AB[]. Se
deduce del que AB[]es un contador de los fragmentos de código:

AB[]=AB_CNT[];

AB_CNT[].d=AB_CNT[]+1;
Además se interpreta que este contador es de módulo 128 (de 0 a 127) de los
fragmentos de código:
150
ANEXOS

AB_CNT[].clrn=!AB_CNT_Cut;

AB_CNT_Cut.d=AB_CNT[]==Width;

PARAMETERS(Length=128);

Constant Width=Length;
151
Analizando alguno de los fragmentos de código, que determinan la salida del bloque:

Q=(Out_D&Cut)#Word_Sync;

Word_Sync.d=vcc;
De aquí se deduce que la salida Q debería ser siempre vcc, pero como se conoce:

Word_Sync.clrn=!Word_Sync_Ed;

Word_Sync_Ed.d=Bit_CNT[]==31;
se puede interpretar que Word_Sync asume el valor de vcc solo cuando Bit_CNT[] tiene
el valor de 31. Cuando sucede esto, también ocurre un aumento en el conteo de AB[], ya
que:

AB_CNT[].clk=Word_Sync_Ed.
De lo anteriormente planteado se concluye que la trama de datos termina con un
valor de vcc (como AB_CNT es de 5 bits puede contar desde 0 hasta 31), que dura
hasta que se reinicie el conteo de AB_CNT[].
Entonces los datos están determinados por Q=(Out_D&Cut), donde CUT es una señal
que habilita la señal Out_D, la cual porta los datos.
Del código se extrae la Tabla 9.
151
ANEXOS

Bit_CNT[]
152
Tabla 9 Relación de señales Bit_CNT y Bit_Sel
> Bit_Sel[31..0] ;
H"00"
> h"0000001";
H"01"
> h"0000002";
H"02"
> h"0000004";
H"03"
> h"0000008";
H"04"
> h"0000010";
H"05"
> h"0000020";
H"06"
> h"0000040";
H"07"
> h"0000080";
H"08"
> h"0000100";
H"09"
> h"0000200";
H"0A"
> h"0000400";
H"0B"
> h"0000800";
H"0C"
> h"0001000";
H"0D"
> h"0002000";
H"0E"
> h"0004000";
H"0F"
> h"0008000";
H"10"
> h"0010000";
H"11"
> h"0020000";
H"12"
> h"0040000";
H"13"
> h"0080000";
152
ANEXOS
H"14"
> h"0100000";
H"15"
> h"0200000";
H"16"
> h"0400000";
H"17"
> h"0800000";
H"18"
> h"1000000";
H"19"
> h"2000000";
H"1A"
> h"4000000";
H"1B"
> h"8000000";
153
Aquí queda claramente reflejado que a medida que avanza el conteo de Bit_CNT[], se
hace referencia al bit correspondiente de Bit_Sel[31..0]. (Ejemplo:
Cuando Bit_CNT[]=H"00", se hace referencia al bit 0 de Bit_Sel[31..0]( h"0000001")
Cuando Bit_CNT[]=H"01", se hace referencia al bit 1 de Bit_Sel[31..0]( h"0000002")).
Como la atención se centra en Out_D, del código se conoce:
Out_D=(Bit_SEL[0]&AB_CNT[0])#
(Bit_SEL[1]&AB_CNT[1])#
(Bit_Sel[2]&AB_CNT[2])#
(Bit_Sel[3]&AB_CNT[3])#
(Bit_Sel[4]&AB_CNT[4])#
(Bit_Sel[5]&AB_CNT[5])#
(Bit_Sel[6]&AB_CNT[6])#
(Bit_Sel[7]&AB_CNT[7])#
153
ANEXOS
154
(Bit_Sel[8]&AB_Par)#
(Bit_Sel[9]&DD[0])#
(Bit_Sel[10]&DD[1])#
(Bit_Sel[11]&DD[2])#
(Bit_Sel[12]&DD[3])#
(Bit_Sel[13]&DD[4])#
(Bit_Sel[14]&DD[5])#
(Bit_Sel[15]&DD[6])#
(Bit_Sel[16]&DD[7])#
(Bit_Sel[17]&DL_Par)#
(Bit_Sel[18]&DD[8])#
(Bit_Sel[19]&DD[9])#
(Bit_Sel[20]&DD[10])#
(Bit_Sel[21]&DD[11])#
(Bit_Sel[22]&DD[12])#
(Bit_Sel[23]&DD[13])#
(Bit_Sel[24]&DD[14])#
(Bit_Sel[25]&DD[15])#
(Bit_Sel[26]&DH_Par);
Como ya se había determinado los bits de Bit_Sel[] son referenciados consecutivamente
de menos significativos a más significativos, estableciendo un orden. El fragmento de
código anterior no hace otra cosa que asignar valores a la salida en ese orden ya
154
ANEXOS
155
determinado.(Ejemplo: El primer bit de salida será AB_CNT[0], el Segundo
AB_CNT[1], etc.)
De aquí se obtiene una idea de cómo es la trama:

Figura A6.5
Donde:

AB_CNT[7..0]: Contador de tramas.

AB_Par: Bit de paridad correspondiente a AB_CNT[7..0].

DD[7..0]: Byte de datos menos significativo.

DL_Par: Bit de paridad correspondiente a DD[7..0].

DD[8..15]: Byte de datos más significativo.

DH_Par: Bit de paridad correspondiente a DD[8..15].
Todos los bits de paridad obtienen su valor de igual forma(ver anexo 7).
Este procedimiento queda mejor ilustrado en la siguiente figura:
Figura A6.6
Simulación:
155
ANEXOS
156
Para lograr un resultado más claro, la siguiente simulación, se muestra de transmisión
de un word con valor “1111111111111111”.

Figura A6.7
Estos resultados confirman todas las suposiciones hechas hasta el momento.
En la figura se distinguen claramente:
1. Campo AB_CNT[7..0](Contador de tramas). Se observa que este campo toma
valores de “0” en la primera trama, “1” en la segunda y “2” en la tercera, estando
de acuerdo esto con los resultados esperados.
2. AB_Par( Bit de paridad correspondiente a AB_CNT[7..0]). Se observa que este
campo toma valores de “0” en la primera trama, “1” en la segunda y “1” en la
tercera, estando de acuerdo esto con los resultados esperados.
3. DD[7..0](Byte de datos menos significativo.) Se observa que este campo toma
valores de “11111111” en la primera trama, “11111111” en la segunda y
“11111111” en la tercera, estando de acuerdo esto con los resultados esperados.
4. DL_Par(Bit de paridad correspondiente a DD[7..0]). Se observa que este campo
toma valores de “0” en la primera trama, “0” en la segunda y “0” en la tercera,
estando de acuerdo esto con los resultados esperados.
5. DD[8..15](Byte de datos más significativo). Se observa que este campo toma
valores de “11111111” en la primera trama, “11111111” en la segunda y
“11111111” en la tercera, estando de acuerdo esto con los resultados esperados.
6. DH_Par(Bit de paridad correspondiente a DD[8..15]). Se observa que este
campo toma valores de “0” en la primera trama, “0” en la segunda y “0” en la
tercera, estando de acuerdo esto con los resultados esperados.
156
ANEXOS
157
7. La trama termina con un valor de vcc (“1”), estando de acuerdo esto con los
resultados esperados.
En la siguiente imagen se muestra se muestra las tramas originadas por la transmisión
serie de los datos presentes en el bus “salida”, que no es más que la salida del bloque
Sel31_1.
Figura A6.8
157
ANEXOS
158
ANEXO#7: Valores de registro que activan bits de paridad.
Como se explico en el anexo#6 los bits de paridad se activan cuando el dato a que ellos
hacen referencia toma determinado valor. En la Tabla 10 siguiente se muestran dichos
valores.
Tabla 10 Valores que activan bits de paridad.
Valor
7
6
5
4
3
2
1
0
Bit de paridad activo
1
0
0
0
0
0
0
0
1
VERDADERO
2
0
0
0
0
0
0
1
0
VERDADERO
13
0
0
0
0
1
1
0
1
VERDADERO
14
0
0
0
0
1
1
1
0
VERDADERO
16
0
0
0
1
0
0
0
0
VERDADERO
19
0
0
0
1
0
0
1
1
VERDADERO
20
0
0
0
1
0
1
0
0
VERDADERO
21
0
0
0
1
0
1
0
1
VERDADERO
22
0
0
0
1
0
1
1
0
VERDADERO
23
0
0
0
1
0
1
1
1
VERDADERO
24
0
0
0
1
1
0
0
0
VERDADERO
25
0
0
0
1
1
0
0
1
VERDADERO
26
0
0
0
1
1
0
1
0
VERDADERO
27
0
0
0
1
1
0
1
1
VERDADERO
28
0
0
0
1
1
1
0
0
VERDADERO
31
0
0
0
1
1
1
1
1
VERDADERO
158
ANEXOS
159
32
0
0
1
0
0
0
0
0
VERDADERO
35
0
0
1
0
0
0
1
1
VERDADERO
36
0
0
1
0
0
1
0
0
VERDADERO
37
0
0
1
0
0
1
0
1
VERDADERO
38
0
0
1
0
0
1
1
0
VERDADERO
39
0
0
1
0
0
1
1
1
VERDADERO
40
0
0
1
0
1
0
0
0
VERDADERO
41
0
0
1
0
1
0
0
1
VERDADERO
42
0
0
1
0
1
0
1
0
VERDADERO
43
0
0
1
0
1
0
1
1
VERDADERO
44
0
0
1
0
1
1
0
0
VERDADERO
47
0
0
1
0
1
1
1
1
VERDADERO
49
0
0
1
1
0
0
0
1
VERDADERO
50
0
0
1
1
0
0
1
0
VERDADERO
61
0
0
1
1
1
1
0
1
VERDADERO
62
0
0
1
1
1
1
1
0
VERDADERO
64
0
1
0
0
0
0
0
0
VERDADERO
67
0
1
0
0
0
0
1
1
VERDADERO
68
0
1
0
0
0
1
0
0
VERDADERO
69
0
1
0
0
0
1
0
1
VERDADERO
70
0
1
0
0
0
1
1
0
VERDADERO
71
0
1
0
0
0
1
1
1
VERDADERO
159
ANEXOS
160
72
0
1
0
0
1
0
0
0
VERDADERO
73
0
1
0
0
1
0
0
1
VERDADERO
74
0
1
0
0
1
0
1
0
VERDADERO
75
0
1
0
0
1
0
1
1
VERDADERO
76
0
1
0
0
1
1
0
0
VERDADERO
79
0
1
0
0
1
1
1
1
VERDADERO
81
0
1
0
1
0
0
0
1
VERDADERO
82
0
1
0
1
0
0
1
0
VERDADERO
93
0
1
0
1
1
1
0
1
VERDADERO
94
0
1
0
1
1
1
1
0
VERDADERO
97
0
1
1
0
0
0
0
1
VERDADERO
98
0
1
1
0
0
0
1
0
VERDADERO
109
0
1
1
0
1
1
0
1
VERDADERO
110
0
1
1
0
1
1
1
0
VERDADERO
112
0
1
1
1
0
0
0
0
VERDADERO
115
0
1
1
1
0
0
1
1
VERDADERO
116
0
1
1
1
0
1
0
0
VERDADERO
117
0
1
1
1
0
1
0
1
VERDADERO
118
0
1
1
1
0
1
1
0
VERDADERO
119
0
1
1
1
0
1
1
1
VERDADERO
120
0
1
1
1
1
0
0
0
VERDADERO
121
0
1
1
1
1
0
0
1
VERDADERO
160
ANEXOS
161
122
0
1
1
1
1
0
1
0
VERDADERO
123
0
1
1
1
1
0
1
1
VERDADERO
124
0
1
1
1
1
1
0
0
VERDADERO
127
0
1
1
1
1
1
1
1
VERDADERO
128
1
0
0
0
0
0
0
0
VERDADERO
131
1
0
0
0
0
0
1
1
VERDADERO
132
1
0
0
0
0
1
0
0
VERDADERO
133
1
0
0
0
0
1
0
1
VERDADERO
134
1
0
0
0
0
1
1
0
VERDADERO
135
1
0
0
0
0
1
1
1
VERDADERO
136
1
0
0
0
1
0
0
0
VERDADERO
137
1
0
0
0
1
0
0
1
VERDADERO
138
1
0
0
0
1
0
1
0
VERDADERO
139
1
0
0
0
1
0
1
1
VERDADERO
140
1
0
0
0
1
1
0
0
VERDADERO
143
1
0
0
0
1
1
1
1
VERDADERO
145
1
0
0
1
0
0
0
1
VERDADERO
146
1
0
0
1
0
0
1
0
VERDADERO
157
1
0
0
1
1
1
0
1
VERDADERO
158
1
0
0
1
1
1
1
0
VERDADERO
161
1
0
1
0
0
0
0
1
VERDADERO
162
1
0
1
0
0
0
1
0
VERDADERO
161
ANEXOS
162
173
1
0
1
0
1
1
0
1
VERDADERO
174
1
0
1
0
1
1
1
0
VERDADERO
176
1
0
1
1
0
0
0
0
VERDADERO
179
1
0
1
1
0
0
1
1
VERDADERO
180
1
0
1
1
0
1
0
0
VERDADERO
181
1
0
1
1
0
1
0
1
VERDADERO
182
1
0
1
1
0
1
1
0
VERDADERO
183
1
0
1
1
0
1
1
1
VERDADERO
184
1
0
1
1
1
0
0
0
VERDADERO
185
1
0
1
1
1
0
0
1
VERDADERO
186
1
0
1
1
1
0
1
0
VERDADERO
187
1
0
1
1
1
0
1
1
VERDADERO
188
1
0
1
1
1
1
0
0
VERDADERO
191
1
0
1
1
1
1
1
1
VERDADERO
193
1
1
0
0
0
0
0
1
VERDADERO
194
1
1
0
0
0
0
1
0
VERDADERO
205
1
1
0
0
1
1
0
1
VERDADERO
206
1
1
0
0
1
1
1
0
VERDADERO
208
1
1
0
1
0
0
0
0
VERDADERO
211
1
1
0
1
0
0
1
1
VERDADERO
212
1
1
0
1
0
1
0
0
VERDADERO
213
1
1
0
1
0
1
0
1
VERDADERO
162
ANEXOS
163
214
1
1
0
1
0
1
1
0
VERDADERO
215
1
1
0
1
0
1
1
1
VERDADERO
216
1
1
0
1
1
0
0
0
VERDADERO
217
1
1
0
1
1
0
0
1
VERDADERO
218
1
1
0
1
1
0
1
0
VERDADERO
219
1
1
0
1
1
0
1
1
VERDADERO
220
1
1
0
1
1
1
0
0
VERDADERO
223
1
1
0
1
1
1
1
1
VERDADERO
224
1
1
1
0
0
0
0
0
VERDADERO
227
1
1
1
0
0
0
1
1
VERDADERO
228
1
1
1
0
0
1
0
0
VERDADERO
229
1
1
1
0
0
1
0
1
VERDADERO
230
1
1
1
0
0
1
1
0
VERDADERO
231
1
1
1
0
0
1
1
1
VERDADERO
232
1
1
1
0
1
0
0
0
VERDADERO
233
1
1
1
0
1
0
0
1
VERDADERO
234
1
1
1
0
1
0
1
0
VERDADERO
235
1
1
1
0
1
0
1
1
VERDADERO
236
1
1
1
0
1
1
0
0
VERDADERO
239
1
1
1
0
1
1
1
1
VERDADERO
241
1
1
1
1
0
0
0
1
VERDADERO
242
1
1
1
1
0
0
1
0
VERDADERO
163
ANEXOS
164
253
1
1
1
1
1
1
0
1
VERDADERO
254
1
1
1
1
1
1
1
0
VERDADERO
164
Descargar