• No se han encontrado resultados

Aplicación de la ingeniería inversa en el análisis de la componente programable de la tarjeta T 232

N/A
N/A
Protected

Academic year: 2020

Share "Aplicación de la ingeniería inversa en el análisis de la componente programable de la tarjeta T 232"

Copied!
167
0
0

Texto completo

(1)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".

(2) 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. [email protected]. Tutor: Ing. Rolando Evelio Pérez Versón. [email protected]. Santa Clara 2013 "Año 55 de la Revolución".

(3) 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.

(4) PENSAMIENTO. PENSAMIENTO. La mejor forma de tener una idea brillante es tener montones de ideas. Linus Pauling.. 1.

(5) DEDICATORIA. DEDICATORIA. A mi familia, especialmente a mi madre, a la cual le debo todo lo que soy.. 2.

(6) 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.

(7) 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.

(8) 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.

(9) 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.

(10) 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.

(11) 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.

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

(13) 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.

(14) 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.

(15) 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.

(16) 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.

(17) 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.

(18) 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.

(19) 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.

(20) 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.

(21) 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.

(22) 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.

(23) 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.

(24) 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.

(25) 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.

(26) 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.

(27) 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.

(28) 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.

(29) 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.

(30) 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.

(31) 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.

(32) 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.

(33) 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.

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

(35) 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.

(36) 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.

(37) REVISION BIBLIOGRAFICA. Figura 1.18 Detalle de los diferentes tipos de interconexiones. Figura 1.19 Detalle de las interconexiones de una FPGA. 34.

(38) 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.

(39) 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.

(40) 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.

(41) 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.

(42) 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.

(43) 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.

(44) 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.

(45) 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.

(46) 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.

(47) 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.

(48) 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.

Figure

Figura 1.2 Esquema lógico en dos niveles de una PROM
Figura 1.9 Altera MAX 3000A, estructura de celda
Figura 1.11 Altera MAX3000A, esquema de entrada-salida
Figura 1.12 Esquema interno de una FPGA
+7

Referencias

Documento similar