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