UN S La bo ra to rio de Si ste ma sD igi tal es - TÉCNICAS DE DISEÑO, SIMULACIÓN E IMPLEMENTACIÓN DE CIRCUITOS LÓGICOS UTILIZANDO DISPOSITIVOS VLSI Y ESPECIFICACIÓN HDL. PROYECTO DE FIN DE CARRERA -C ay ss ial s- Departamento de Ingeniería Eléctrica. Gi lar do ni - Or oz co UNIVERSIDAD NACIONAL DEL SUR AUTOR: PABLO GILARDONI. DIRECTOR: Dr. JAVIER OROZCO. CODIRECTOR: Dr. RICARDO CAYSSIALS. 2-1 Diciembre de 1999. UN S Gilardoni – Orozco - Cayssials Introducción La bo ra to rio de Si ste ma sD igi tal es - Técnicas de diseño, simulación e implementación de circuitos lógicos utilizando dispositivos VLSI y especificación HDL. En este proyecto se realiza un análisis de los Lenguajes de Especificación de Hardware (HDL) utilizados para la configuración y diseño de sistemas digitales que utilizan Dispositivos Lógicos Programable de alta complejidad (CPLD). La capacidad de estos dispositivos ha evolucionado durante los últimos años desde la implementación de simples sistemas digitales hasta la posibilidad de implementar complejas funciones, incluso microprocesadores y microcomputadores. La velocidad con la cual estos dispositivos pueden ser programados y reconfigurados los hacen ideales para la realización de prototipos y educación e incluso son competitivos en costo para bajos niveles de producción o bien para cuando se requiere la utilización de funciones reconfigurables. Nuevas y sofisticadas aplicaciones pueden ser desarrolladas mediante su utilización, haciendo cada vez más difusa la tradicional línea que separa el hardware del software. -C ay ss ial s- La realización de dispositivos de lógica programable tiene sus comienzos con los PAL (Programmable Logic Array), que en un principio implementaban la síntesis de funciones lógicas combinacionales, para luego insertar elementos de memoria y permitir la síntesis de máquinas secuenciales. Desarrollos posteriores brindaron gran diversidad de formas de programación, es decir, gran diversidad de elementos básicos de interconexión como son los Antifuses, switches EPROM / EEPROM y switches SRAM. Or oz co Estos primeros dispositivos programables crearon la necesidad de lenguajes de especificación de hardware. De esta manera, el diseñador podría especificar su sistema con un alto grado de abstracción para luego, de alguna forma sistemática, sintetizarlo e Gi lar do ni - implementarlo en un dispositivo genérico. Se intuye así la necesidad de un software que permita abstraer al diseñador de las particularidades del dispositivo programable utilizado y permitir que el diseño y desarrollo no requieran conocimientos específicos de la estructura interna de dicho dispositivo. Además, esto da cabida a la estandarización de un lenguaje que nos independice de los distintos fabricantes de dispositivos de lógica Gilardoni - Orozco - Cayssials i Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S programable. Como ventaja adicional, pueden re-utilizarse especificaciones que han sido verificadas exhaustivamente en la realización de proyectos anteriores, en nuevos proyectos La bo ra to rio de Si ste ma sD igi tal es - que, al utilizar dispositivos de mayor capacidad de implementación lógica, sean subfunciones en el nuevo sistema. Esto permite una apreciable reducción en el tiempo necesario para la producción de prototipos, con la consiguiente reducción en el costo de producción. Es de esta manera que en el año 1987 fue definido como el estándar IEEE 1076, un lenguaje de especificación de hardware denominado VHDL donde la letra “V” significa VHSIC (Very High Speed Integrated Circuit) y la sigla “HDL” significa Hardware Description Language. A comienzos de los años '90 el lenguaje VHDL fue usado para el diseño de circuitos integrados desarrollados con una aplicación específica (ASIC del inglés Application Specific Integrated Circuit) y en la segunda mitad de la década se comenzó a usar dentro del área de los PLDs (Programmable Logic Device). Aunque los fabricantes más importantes de dispositivos lógicos programables permiten al diseñador la utilización, aunque sea restringida, de VHDL como lenguaje de especificación, cada uno de ellos posee un lenguaje propietario. De esta manera, Altera y Xilinx, dos de los más importantes fabricantes, han desarrollado sus propios lenguajes de especificación denominados AHDL y ABEL respectivamente. La utilización de lenguajes desarrollados por un determinado fabricante restringe al diseñador el grado de abstracción -C ay ss ial s- de su especificación y la utilización de ésta en dispositivos de otros fabricantes. A cambio, le permite optimizar el uso de los recursos de los dispositivos si tiene conocimiento de la estructura interna de los mismos. Este proyecto consistió principalmente en el estudio de lenguajes de especificación de hardware y de las técnicas de diseño, simulación e implementación de sistemas digitales de Or oz co alta complejidad. El objetivo planteado para la utilización de todos estos conceptos fue la realización de un controlador de memoria dinámica que cumple con el estándar JEDEC de 72 contactos. Las herramientas y dispositivos utilizados en la implementación de este controlador fueron provistos por la firma Altera en el marco del programa universitario del Gi lar do ni - cual el Laboratorio de Sistemas Digitales forma parte. Gilardoni - Orozco - Cayssials ii Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. UN S Gilardoni – Orozco - Cayssials La bo ra to rio de Si ste ma sD igi tal es - Etapas del Proyecto: Estudio de los distintos dispositivos de lógica programable, especialmente de la firma ALTERA. Capítulo 1. Estudio del lenguaje de descripción de hardware VHDL, estándar IEEE 1076. Capítulo 2. Estudio del lenguaje de descripción de hardware AHDL, propiedad de ALTERA. Capítulo 3. Manejo del software de desarrollo MAX+PLUS II de ALTERA. Capítulo 4. Pruebas básicas de funcionamiento de la placa de desarrollo UP1 perteneciente al programa de desarrollo universitario de la firma ALTERA. Capítulo 4. Curso de diseño de lógica programable basado en el lenguaje AHDL. Dictado por el Profesor Guillermo Jaquenod. Universidad Nacional del Centro. Noviembre de 1998. Cuidad de Olavarría. Análisis y diseño de un controlador de memorias dinámicas SIMM (Single InLine Memory Module) de 72 contactos. Capítulo 5. Realización de la especificación del controlador, en el lenguaje de descripción -C ay ss ial s- de hardware AHDL, con el software MAX+PLUS II. Simulación y elección del dispositivo a utilizar. Realización de los circuitos impresos necesarios para la interconexión del módulo SIMM con el dispositivo de lógica programable y el sistema microprocesador. Realización de un programa en lenguaje de alto nivel, para la verificación del Gi lar do ni - Or oz co sistema. Gilardoni - Orozco - Cayssials iii Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S Tabla de Contenidos Gi lar do ni - Or oz co -C ay ss ial s- La bo ra to rio de Si ste ma sD igi tal es - Capítulo 1.................................................................................................................................................................1-1 Dispositivos Lógicos Programables (P.L.Ds) ..........................................................................................................1-1 1. Alternativas para la síntesis de funciones lógicas ............................................................................................1-1 1.1 Simplificación Algebraica de una Función Lógica. .................................................................................1-1 1.2 Multiplexores y Demultiplexores.............................................................................................................1-1 1.3 ROM (Read Only Memory) .....................................................................................................................1-3 1.4 Tablas de Look–Up (LUTs).....................................................................................................................1-3 1.5 Comparación de las distintas alternativas ................................................................................................1-4 2. Los PAL ...........................................................................................................................................................1-5 2.1 PALs Primitivos.......................................................................................................................................1-5 2.2 Incorporación de Elementos de Memoria ................................................................................................1-5 2.3 PALs Modernos .......................................................................................................................................1-6 3. Elementos Básicos de Interconexión ...............................................................................................................1-7 4. Celdas Lógicas: granularidad y jerarquías de conectividad .............................................................................1-7 5. Celdas de Entrada/Salida .................................................................................................................................1-8 6. Redes de Cableado ...........................................................................................................................................1-9 6.1 Interconexiones Locales...........................................................................................................................1-9 6.2 Interconexiones Vecinales .......................................................................................................................1-9 6.3 Interconexiones Globales.......................................................................................................................1-10 7. Las Familias MAX 7000 y FLEX 10K de ALTERA.....................................................................................1-10 7.1 La Familia MAX 7000/7000E/7000S ....................................................................................................1-10 7.1.1. Terminología ..................................................................................................................................1-10 7.1.2. Descripción General.......................................................................................................................1-11 7.1.2.1. MAX7000 y MAX7000E.......................................................................................................1-11 7.1.2.2. MAX7000S ............................................................................................................................1-11 7.1.3. Arquitectura (Descripción Funcional)............................................................................................1-12 7.1.3.1. Macroceldas ...........................................................................................................................1-13 7.1.3.2. Logic Array Blocks ................................................................................................................1-16 7.1.3.3. Expansores de Términos Producto (Expansores Paralelos y Compartidos)...........................1-17 7.1.3.4. Expansores Compartidos........................................................................................................1-17 7.1.3.5. Expansores Paralelos..............................................................................................................1-18 7.1.3.6. Programmable Interconnect Array (PIA) ...............................................................................1-19 7.1.3.7. I/O Control Blocks (Celdas de Entrada/Salida) .....................................................................1-20 7.1.4. In-System Programmability (ISP) ..................................................................................................1-22 7.1.5. Control de Velocidad / Potencia Programable ...............................................................................1-22 7.1.6. Interfase Multi Voltaje de Entrada/Salida. (MultiVolt I/O Interface) ............................................1-22 7.1.7. Slew-Rate Control..........................................................................................................................1-23 7.2 La Familia FLEX 10K ...........................................................................................................................1-24 7.2.1. Terminología ..................................................................................................................................1-24 7.2.2. Descripción General.......................................................................................................................1-24 7.2.3. Arquitectura (Descripción Funcional)............................................................................................1-25 7.2.3.1. Embedded Array Blocks ........................................................................................................1-26 7.2.3.2. Logic Array Block (LAB) ......................................................................................................1-27 7.2.3.3. Logic Element (Elementos lógicos) .......................................................................................1-29 7.2.3.4. Cadenas de Carry ...................................................................................................................1-30 7.2.3.5. Cadenas de Cascada ...............................................................................................................1-31 7.2.3.6. Modos de Operación de los Elementos Lógicos ....................................................................1-32 7.2.3.7. FastTrack Interconnect...........................................................................................................1-34 7.2.3.8. I/O Elements (Elementos de Entrada/Salida) .........................................................................1-37 7.2.3.9. Conexión Filas – Elementos E/S ............................................................................................1-39 7.2.3.10. Conexión Columnas – Elementos E/S....................................................................................1-40 7.2.4. Distribución de señales de reloj .....................................................................................................1-40 7.2.5. Configuración de Salida.................................................................................................................1-41 7.2.5.1. Interfase Multi Voltaje de Entrada/Salida. (MultiVolt I/O Interface) ....................................1-41 7.2.5.2. Slew-Rate Control..................................................................................................................1-42 7.2.5.3. Esquemas de Configuración...................................................................................................1-42 iv Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials Gi lar do ni - Or oz co -C ay ss ial s- La bo ra to rio de Si ste ma sD igi tal es - UN S Capítulo 2.................................................................................................................................................................2-1 Introducción a VHDL: Un Lenguaje de Especificación de Hardware.....................................................................2-1 1. ¿Que significa VHDL? ....................................................................................................................................2-1 2. Limitaciones del VHDL...................................................................................................................................2-2 3. Estilos de Escritura de VHDL..........................................................................................................................2-2 4. Conceptos Principales del Lenguaje ................................................................................................................2-3 4.1 Sintaxis.....................................................................................................................................................2-4 4.2 Arquitectura .............................................................................................................................................2-5 4.3 Jerarquía...................................................................................................................................................2-6 4.4 Declaraciones ...........................................................................................................................................2-8 4.5 Configuraciones .......................................................................................................................................2-9 4.6 Configuración por Defecto.....................................................................................................................2-10 4.7 Procesos y tipos......................................................................................................................................2-11 4.8 Package ..................................................................................................................................................2-13 4.9 Esquema Completo ................................................................................................................................2-14 5. Señales y Tipos de Datos ...............................................................................................................................2-15 5.1 Concepto de Tipo y Especificación........................................................................................................2-16 5.2 Tipos de Datos Estándar ........................................................................................................................2-17 5.3 Asignación de Señales ...........................................................................................................................2-18 5.4 Arreglos (Arrays) ...................................................................................................................................2-20 5.5 Concatenación y Agregado ....................................................................................................................2-21 5.6 Definición de Tipos................................................................................................................................2-23 5.7 Lógica MultiValuada .............................................................................................................................2-25 5.8 Usando Lógica Standard ........................................................................................................................2-27 Capítulo 3.................................................................................................................................................................3-1 AHDL: Un Lenguaje de Descripción de Hardware .................................................................................................3-1 Estructura de diseño.................................................................................................................................................3-2 1. Sentencia "Title" ..............................................................................................................................................3-3 2. Sentencia "Parameters" ....................................................................................................................................3-3 3. Sentencia "Include"..........................................................................................................................................3-5 4. Sentencia "Constant"........................................................................................................................................3-6 5. Sentencia "Define" ...........................................................................................................................................3-7 6. Sentencia "Function Prototype" .......................................................................................................................3-8 7. Sentencia "Options" .........................................................................................................................................3-8 8. Sentencia "Assert"............................................................................................................................................3-9 9. Sección de Subdiseño ......................................................................................................................................3-9 10. Sección de Declaración de Variables.........................................................................................................3-10 10.1 Declaración de Instancias.......................................................................................................................3-11 10.2 Declaración de Nodos ............................................................................................................................3-12 10.3 Declaración de Registros .......................................................................................................................3-13 10.4 Declaración de Maquinas de Estado ......................................................................................................3-13 10.5 Declaración de Alias de Maquinas de Estado ........................................................................................3-14 11. Sección Lógica...........................................................................................................................................3-15 11.1 Ecuaciones Booleanas............................................................................................................................3-16 11.2 Ecuaciones de Control Booleanas..........................................................................................................3-18 11.3 Sentencia CASE.....................................................................................................................................3-19 11.4 Sentencia DEFAULTS...........................................................................................................................3-20 11.5 Sentencia IF-THEN................................................................................................................................3-21 11.6 Sentencia IF-GENERATE. ....................................................................................................................3-22 11.7 Sentencia FOR-GENERATE. ................................................................................................................3-22 11.8 Sentencia TRUTH TABLE. ...................................................................................................................3-23 Capítulo 4.................................................................................................................................................................4-1 Sistema de desarrollo de ALTERA: MAX + PLUS II y placa de desarrollo universal UP1 ...................................4-1 1. ¿ Qué es ALTERA MAX+PLUS II ? ..............................................................................................................4-1 1.1 Ejemplo Demostrativo .............................................................................................................................4-2 1.2 Síntesis .....................................................................................................................................................4-2 1.3 Tipos de Archivos ....................................................................................................................................4-3 1.4 Interpretación del Código VHDL ............................................................................................................4-4 1.4.1. Código VHDL..................................................................................................................................4-4 Gilardoni - Orozco - Cayssials v Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials 2. La bo ra to rio de Si ste ma sD igi tal es - UN S Placa de Desarrollo universal UP1...................................................................................................................4-5 2.1 ¿Qué es la placa educacional UP1?..........................................................................................................4-5 2.2 ¿Cómo es la placa educacional UP1?.......................................................................................................4-6 2.3 ¿Cómo está compuesta la placa UP1?......................................................................................................4-6 3. Cable de Programación ByteBlaster.............................................................................................................4-7 3.1 ¿Qué es y para qué sirve la ByteBlaster? .............................................................................................4-7 Capítulo 5.................................................................................................................................................................5-1 Implementación de un Controlador de Memoria Dinámica: Una Aplicación de Lógica Programable....................5-1 1. Memorias Dinámicas Utilizadas: Módulo SIMM de 72 contactos. .................................................................5-1 1.1 Características Técnicas del Módulo SIMM Utilizado. ...........................................................................5-3 1.2 Características Técnicas de los Chips TMS44400. ..................................................................................5-3 2. Controlador de Memorias Dinámicas. .............................................................................................................5-4 2.1 Símbolo Lógico del Controlador de Memorias Dinámicas......................................................................5-4 2.1.1. Señales independientes.....................................................................................................................5-4 2.1.2. Señales microprocesador - dramcontrol:..........................................................................................5-4 2.1.2.1. Señales dramcontrol – módulo SIMM: ....................................................................................5-5 3. Funcionamiento del Controlador de Memorias Dinámicas..............................................................................5-5 3.1 Funcionamiento microprocesador - controlador ......................................................................................5-6 ¿Cómo es un ciclo de lectura del microprocesador - controlador? ..............................................................5-6 ¿Cómo es un ciclo de escritura del microprocesador - controlador? ...........................................................5-7 ¿Cómo funciona el paginado?......................................................................................................................5-7 3.2 Funcionamiento controlador – memoria dinámica...................................................................................5-8 ¿Cómo se direcciona el módulo SIMM?......................................................................................................5-8 ¿Cómo es un ciclo de lectura del controlador – memoria dinámica?...........................................................5-9 ¿Cómo es un ciclo de escritura del controlador – memoria dinámica? ......................................................5-10 ¿Cómo es el ciclo de refresco CAS before RAS? ......................................................................................5-11 4. Funcionamiento Lógico del Controlador de Memorias Dinámicas. ..............................................................5-12 4.1 Máquina de estados 1: microprocesador – controlador..........................................................................5-12 4.2 Máquina de estados 2: controlador – memoria dinámica.......................................................................5-14 5. Implementación de los ports bidireccionales. ................................................................................................5-16 Se incluye disco conteniendo los programas fuentes desarrollados para la Gi lar do ni - Or oz co -C ay ss ial s- implementación del controlador de memoria dinámica. Gilardoni - Orozco - Cayssials vi Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials La bo ra to rio de Si ste ma sD igi tal es - UN S Capítulo 1 En este capítulo se describen distintas formas de síntesis de funciones lógicas, como también distintos elementos de interconexión utilizados en dispositivos programables. Se detallan los elementos que componen una CPLD (Complex Programmable Logic Device) y una FPGA (Field-Programming Gate Array) profundizando especialmente en los dispositivos ALTERA de las familias MAX7000 y FLEX10K. Dispositivos Lógicos Programables (P.L.Ds) 1. Alternativas para la síntesis de funciones lógicas La creación de un dispositivo lógico programable, implica contar con una tecnología que permita sintetizar cualquier función lógica en una forma eficiente. El diseñador posee diferentes alternativas para implementar su sistema. -C ay ss ial s- 1.1 Simplificación Algebraica de una Función Lógica. Existen métodos gráficos y tabulares que permiten simplificar una función lógica en forma sistemática. Si bien la solución obtenida puede ser óptima en el sentido de que minimiza su expresión en el número de compuertas utilizadas para su implementación, tiene la desventaja de que la solución obtenida es totalmente rígida y el menor cambio puede significar un rediseño total. El criterio de optimalidad de estos métodos, Or oz co generalmente no significa una implementación óptima en un dispositivo de lógica programable. Gi lar do ni - 1.2 Multiplexores y Demultiplexores En las técnicas de simplificación algebraica de funciones lógicas, se asume que la implementación final se realizará utilizando compuertas lógicas. Una alternativa en la implementación de funciones lógicas es la utilización de multiplexores. Con un multiplexor de 8::1, por ejemplo, se podría generar cualquier función lógica de 3 variables de entrada. Gilardoni - Orozco - Cayssials 1-1 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S En la siguiente figura se observa la síntesis de una función cualquiera, mediante la La bo ra to rio de Si ste ma sD igi tal es - utilización de un multiplexor. Figura 1.1 Se observa que las líneas de selección de entradas del multiplexor son las variables de la función y, por lo tanto, para generar la función deseada sólo se debe colocar un cero o un uno en la entrada correspondiente. Los multiplexores son dispositivos muy fáciles de realizar en tecnología CMOS y permiten altas escalas de integración; por ejemplo, un multiplexor 2::1 puede realizarse -C ay ss ial s- con sólo 6 transistores. También puede implementase una función lógica mediante la utilización de un Gi lar do ni - Or oz co demultiplexor, como se observa en la figura 1.2: Gilardoni - Orozco - Cayssials Figura 1.2 1-2 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S 1.3 ROM (Read Only Memory) La utilización de una memoria ROM para la implementación de una función lógica, La bo ra to rio de Si ste ma sD igi tal es - permite la utilización de los mismos componentes independientemente de la función que se desea sintetizar. Internamente una memoria ROM combina, como muestra la figura 1.3, el uso de un multiplexor y un demultiplexor. Figura 1.3 Una ventaja muy importante de este tipo de síntesis es que permite la implementación -C ay ss ial s- de funciones con gran número de variables de entrada. 1.4 Tablas de Look–Up (LUTs) Una tabla de Look-Up (LUT) es equivalente a un multiplexor, sólo que incorpora elementos de memoria que permiten generar la función lógica deseada según el estado de Or oz co dichos elementos. Por lo tanto una LUT puede ser dividida en dos áreas: Área de configuración. Área de operación. Gi lar do ni - En la figura 1.4 se observa la utilización de un registro de desplazamiento que permite que la configuración se realice en forma serial. El hecho de que las tablas de look-up puedan ser configuradas para sintetizar la función lógica deseada, les atribuye el carácter de programabilidad. Por este motivo son una muy buena alternativa para la implementación de dispositivos de lógica programable. Gilardoni - Orozco - Cayssials 1-3 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. La bo ra to rio de Si ste ma sD igi tal es - UN S Gilardoni – Orozco - Cayssials Figura 1.4 La cantidad de bits de memoria requeridos para configurar una tabla de Look–Up crece en forma exponencial con el número de variables de entrada, por lo que en general las LUTs suelen ser de entre 4 y 5 variables (16 a 32 bits de memoria). 1.5 Comparación de las distintas alternativas Las soluciones basadas en multiplexores, demultiplexores, ROMs y tablas de Look–Up usan la expresión canónica de una función (suma de minitérminos). De esta manera, pueden generar cualquier función lógica a partir de sus entradas debido a que implementan -C ay ss ial s- la suma de todos los minitérminos posibles. Esto puede resultar en un uso ineficiente del dispositivo. Por ejemplo, en el caso de un multiplexor de 8::1, implementar una función de tres variables que necesite sólo dos o tres términos productos estaría desaprovechando los recursos físicos del dispositivo. El análisis estadístico de una enorme cantidad de funciones de mediana complejidad (5 a 15 variables de entrada) muestra que casi todas ellas pueden ser sintetizadas mediante Or oz co sólo 5 a 7 implicantes de orden superior (términos productos). Por lo tanto se pensó que sería más eficiente, en cuanto a recursos físicos utilizados, un dispositivo que implementara un subconjunto de todos los términos productos posibles. Este fue el criterio que llevó a la creación de los Arreglos Lógicos Programables (PAL Gi lar do ni - Programmable Logic Array) Gilardoni - Orozco - Cayssials 1-4 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials La bo ra to rio de Si ste ma sD igi tal es - 2.1 PALs Primitivos UN S 2. Los PAL Básicamente, un PAL implementa la suma de términos productos. Posee una matriz de fusibles de interconexión que permite generar términos productos de la cantidad de variables que se desee. Seguidamente se muestra el esquema circuital de un PAL primitivo del tipo 16L8. Figura 1.5 Como se observa en la figura 1.5, a la matriz de interconexión ingresan las variables de entrada negadas y sin negar. Además se cuenta con una realimentación de la salida que -C ay ss ial s- permite que ingresen a la matriz de interconexión el valor negado y sin negar de la misma. Cada término producto puede ser generado a partir de la intersección de un gran número de variables, lo que es de gran utilidad para implementar funciones de gran fan–in. La cantidad de términos productos que es posible sumar está usualmente acotado entre seis y ocho. Cada término producto ocupa gran superficie del chip e involucra un elevado número de fusibles. Or oz co 2.2 Incorporación de Elementos de Memoria Para facilitar la síntesis de máquinas secuenciales, la arquitectura de los PALs incorporaron elementos de memoria. La siguiente figura muestra el agregado de estos Gi lar do ni - elementos de memoria en el PAL 16R8. Gilardoni - Orozco - Cayssials 1-5 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. La bo ra to rio de Si ste ma sD igi tal es - UN S Gilardoni – Orozco - Cayssials Figura 1.6 2.3 PALs Modernos Diversas arquitecturas han sido propuestas para poder implementar la mayor cantidad de funciones lógicas, evitando sobredimensionar la estructura del dispositivo programable. De esta manera, los PALs modernos utilizan una arquitectura basada en celdas lógicas. Una celda lógica es un conjunto de elementos combinacionales y registros de configuración que constituyen un bloque funcional mínimo dentro del dispositivo. La siguiente figura muestra una celda lógica de un PAL simple moderno, particularmente de Gi lar do ni - Or oz co -C ay ss ial s- la marca ALTERA familia Classic EP610. Figura 1.7 En la figura 1.7 se observa la incorporación de un elemento de memoria, como se vio anteriormente, y el agregado de elementos de configuración que permiten aumentar las Gilardoni - Orozco - Cayssials 1-6 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S funciones de la celda lógica. Estos elementos permiten que la realimentación provenga desde la celda lógica o del contacto de Entrada/Salida y que la salida de la celda lógica sea La bo ra to rio de Si ste ma sD igi tal es - por registro o combinacional. Además se incorporan un control de inversión de lógica, un reloj global y una señal de habilitación de salidas (output enable). 3. Elementos Básicos de Interconexión Los dispositivos de lógica programable necesitan hacer uso de recursos de interconexión, los cuales funcionan como llaves que permiten lograr como objetivo final la síntesis de la función lógica deseada. Existen diferentes tipos de elementos de interconexión como son los: Antifuses: dispositivos normalmente abiertos que una vez programados pasan a ser un cortocircuito. Un dispositivo que utiliza antifuses puede programarse solamente una vez y su programación es irreversible. Switches EPROM/EEPROM: dispositivos de paso reprogramables, cuyo estado no se altera al interrumpirse la alimentación de energía. Llaves SRAM: basados en llaves de paso MOS controladas desde un flip flop estático, cuyo contenido se pierde al interrumpirse la energía. -C ay ss ial s- 4. Celdas Lógicas: granularidad y jerarquías de conectividad Una celda lógica es un bloque funcional mínimo capaz de resolver una función combinacional o secuencial. Una celda que por sí sola puede llegar a resolver una función Or oz co compleja (4 o más variables de entrada), genera circuitos de baja granularidad. El conjunto de este tipo de celdas forma lo que se denomina lógica de “grano grueso”. Por el contrario, celdas lógicas capaces de resolver únicamente funciones de 2 o 3 variables (a Gi lar do ni - veces sólo combinacionales) son llamadas de “grano fino”. Cuanto más compleja es una celda, mayor es la posibilidad de su subempleo, es decir, de no aprovechar todos sus recursos. Sin embargo, en este caso la mayor parte del problema es resuelta dentro de la celda y por ello se requieren menos recursos de interconexión con otras celdas. Cuanto más simples son las celdas, más cantidad de ellas se requieren para resolver un dado problema, pero son usadas plenamente (el subempleo de Gilardoni - Orozco - Cayssials 1-7 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S celdas es menor). En contraparte, la necesidad de múltiples vínculos entre celdas requiere de poderosos recursos de interconexión. La bo ra to rio de Si ste ma sD igi tal es - Un ejemplo de celdas lógicas de grano grueso se encuentra en el dispositivo lógico programable XC4000 de la firma XILINX. Este dispositivo está basado en celdas lógicas complejas que hacen uso de tablas de Look–Up con tecnología SRAM. Cada celda lógica resuelve 2 funciones lógicas, combinacionales o secuenciales, de hasta 4 variables independientes o una función lógica combinada de 5 variables. Poseen 2 flip flops para la síntesis de máquinas secuenciales y caminos especiales de propagación a celdas vecinas para la rápida propagación entre celdas. Estos caminos especiales son llamados carry. Un ejemplo de celdas lógicas de grano grueso en la firma ALTERA es el caso de la familia MAX, donde cada celda lógica está basada en la suma de términos productos y además, poseen dispositivos de memoria para la realización de circuitos secuenciales y recursos para optimizar el uso de los términos productos sobrantes. Estos recursos son llamados expansores paralelos o compartidos. Existen celdas lógicas que no encuadran exactamente con las clasificaciones de granularidad previamente definidas, es decir, no son ni de grano grueso ni de grano fino. Por lo tanto aparecen las llamadas lógicas de grano medio, de grano medio a fino y de grano muy fino. -C ay ss ial s- 5. Celdas de Entrada/Salida Las celdas de Entrada/Salida son las encargadas de la interconexión del dispositivo con el mundo exterior. Deben ser capaces de manejar corrientes elevadas, capacidades parásitas decenas de veces mayores a las existentes dentro del chip y brindar la posibilidad de configurarlas como entrada, salida, bidireccionales o de alta impedancia. Estas Or oz co características contribuyen fuertemente a crear ciertos problemas de diseño como son: el agregado de retardos y picos en el consumo de corriente con su consiguiente ruido de fuente (Ground Bouncing). Gi lar do ni - Las celdas de Entrada/Salida podrían ser clasificadas en dos tipos: las elementales y las complejas. Las celdas de Entrada/Salida elementales sólo permiten definir si serán de entrada, salida o bidireccionales y cada celda estará asociada a una celda lógica determinada. Gilardoni - Orozco - Cayssials 1-8 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S Las celdas de Entrada/Salida complejas pueden definirse, al igual que las celdas simples, como de entrada, salida o bidireccionales, pero se diferencian en que no están La bo ra to rio de Si ste ma sD igi tal es - asociadas a una celda lógica en particular, sino que hacen uso de los recursos de interconexión para vincularse con las mismas. También cuentan con muchas opciones de configuración como son: control de slew rate, de pullups o pulldowns, agregado de retardos, etc. 6. Redes de Cableado Las redes de cableado son las encargadas de realizar las interconexiones de las celdas dentro de los dispositivos. Están fuertemente relacionadas con la granularidad, ya que cuanto menores sean las celdas lógicas, mayores serán los recursos de interconexión necesarios para realizar la misma función. Las redes de cableados pueden jerarquizarse, según el alcance de las mismas, en: Locales. Vecinales. Globales. -C ay ss ial s- 6.1 Interconexiones Locales Estas interconexiones permiten conectar cada celda lógica a las celdas vecinas contiguas. En la familia FLEX 10K de la firma ALTERA, las interconexiones locales se realizan por medio de las cadenas de Carry y Cascada. Éstas conectan cada celda lógica con las inmediatas superior e inferior y están orientadas especialmente para acelerar la realización de operaciones aritméticas. Or oz co 6.2 Interconexiones Vecinales Estas interconexiones permiten conectar grupos de celdas lógicas. En dispositivos de la firma ALTERA, un conjunto de 8, 10 o 16 celdas lógicas se agrupan físicamente y se Gi lar do ni - define una matriz de conexionado rápido entre ellos, con acceso a los sistemas de interconexión global y a los grupos de celdas vecinos. Estos grupos de celdas lógicas son llamados LABs (Logic Array Blocks). Gilardoni - Orozco - Cayssials 1-9 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S 6.3 Interconexiones Globales Estas interconexiones permiten conectar cualquier celda lógica con cualquier otra La bo ra to rio de Si ste ma sD igi tal es - dentro del dispositivo. Suelen hacer uso de líneas rápidas (en general metálicas) y son usadas para distribución de señales globales, como por ejemplo, señales de clock, output enable y reset. 7. Las Familias MAX 7000 y FLEX 10K de ALTERA A continuación se describen en detalle la arquitectura de los dispositivos programables de las familias MAX7000 y FLEX 10K de la firma ALTERA. Estos dispositivos integran la placa de desarrollo adquirida a través del programa universitario ALTERA al que el Laboratorio de Sistemas Digitales pertenece. 7.1 La Familia MAX 7000/7000E/7000S Si se realiza un análisis crítico de los PALs clásicos (Programmable Logic Array), se puede observar que las mismas tienen una reducida cantidad de celdas lógicas, -C ay ss ial s- generalmente poseen menos celdas lógicas que contactos de Entrada/Salida. Esto implica que ante la necesidad de usar un flip flop o un término lógico intermedio (sin acceso a los contactos del dispositivo), a veces se deba desperdiciar un contacto de Entrada/Salida. Además, en los primeros PALs, el uso de fusibles de programación afectaba seriamente la confiabilidad del dispositivo. Mejoras realizadas a los PALs clásicos permitieron la evolución a la familia MAX, Or oz co donde se reagruparon celdas lógicas en bloques (Logic Array Blocks o LABs). También se logró un mejor aprovechamiento de la superficie de conexión a través de la generación de áreas de conexionado global y de áreas de interconexión local. Además se agregaron áreas de generación de términos producto auxiliares (expansores) y se implementó una Gi lar do ni - separación entre el feedback de la celda lógica y el de la entrada (dual feedback). 7.1.1. Terminología ALTERA define sus propios términos para referirse a los dispositivos de la familia MAX 7000 como ser: Gilardoni - Orozco - Cayssials 1-10 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials de la familia MAX. La bo ra to rio de Si ste ma sD igi tal es - Logic Array Block (LAB): Grupos de celdas lógicas o macroceldas. UN S Macroceldas: Equivalente a las celdas lógicas. Sólo es usado cuando se habla Logic Array (Arreglo Lógico): Es el nombre que recibe el bloque, componente de una macrocelda, que implementa los términos productos. Local Array (Arreglo local): Es la denominación que toma la estructura de interconexión entre macroceldas de un LAB. Es la estructura de interconexión vecinal. Programmable Interconnect interconexión global. 7.1.2. Array (PIA): Estructura continua de Descripción General 7.1.2.1. MAX7000 y MAX7000E Los dispositivos de las familias MAX7000 y MAX7000E son programables mediante programador externo, con una complejidad media y elevada entre 32 a 256 macroceldas (equivalente a: 300 a 5000 compuertas lógicas), siendo las familias de lógica programable líderes en esta densidad. La familia MAX7000 es fabricada mediante un proceso CMOS EEPROM avanzado, lo que permite obtener implementaciones de alta densidad, elevada -C ay ss ial s- velocidad, poderosa capacidad de Entrada/Salida y performance predecible. La familia MAX7000E agrega a la familia MAX7000 seis líneas de output enable, dos líneas de clock, registros de entrada más veloces y control de slew-rate programable. La familia MAX7000 ofrece dispositivos que, por su velocidad, son ideales para aplicaciones que deban satisfacer la exigencias del estándar PCI (son PCI-compliant). Or oz co 7.1.2.2. MAX7000S La familia MAX7000S es una versión mejorada de las familias 7000 y 7000E que posee la facilidad de programación en circuito ISP (In-System Programmability) y en los Gi lar do ni - dispositivos de 128 o más macroceldas, la inclusión de circuitos de testeo periférico (JTAG boundary-scan test circuitry). El control de slew-rate programable y la opción de elegir la operación en modo de bajo consumo macrocelda por macrocelda, permiten reducir el consumo total y el ruido que genera el sistema. Estas características potencian a la familia MAX 7000S y le permiten resolver un amplio rango de aplicaciones a nivel de sistema. Gilardoni - Orozco - Cayssials 1-11 Laboratorio de Sistemas Digitales - UNS 7.1.3. Arquitectura (Descripción Funcional) UN S Diciembre de 1999. Gilardoni – Orozco - Cayssials Macroceldas La bo ra to rio de Si ste ma sD igi tal es - La arquitectura interna de la familia MAX 7000 incluye los siguientes elementos: Logic Array Blocks (LAB) Expansores de Términos Producto (Expansores paralelos y compartidos) Programmable Interconnect Array (PIA) I/O Control Blocks (Celdas de Entrada/Salida) La familia MAX7000 posee 4 entradas dedicadas que pueden ser usadas, para cada macrocelda o contacto de Entrada/Salida, como: Entradas de propósito general Señales de control globales y de alta velocidad (clock, clear, y dos output enable). Según la arquitectura interna, la familia MAX7000 puede ser dividida en los dispositivos MAX7000 y en los MAX7000E/S. La figura 1.8 muestra la arquitectura en diagrama de bloques de los dispositivos EPM7032, EPM7032V, EPM7064 y EPM7096, pertenecientes a de la familia MAX7000. La figura 1.9 muestra la arquitectura de los dispositivos pertenecientes a la familia Gi lar do ni - Or oz co -C ay ss ial s- MAX7000E y MAX 7000S. Gilardoni - Orozco - Cayssials Figura 1.8 1-12 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S En el número que identifica cada dispositivo está codificado la familia a la que pertenece y la cantidad de macroceldas que posee. Por ejemplo el dispositivo EPM7032 La bo ra to rio de Si ste ma sD igi tal es - posee el número 7 que indica que pertenece a la familia MAX7000, y el número 32 que -C ay ss ial s- indica que posee 32 macroceldas. Figura 1.9 Comparando las figuras 1.8 y 1.9 puede observarse que la diferencia entre ambas Or oz co arquitecturas es relativa a los recursos de interconexión provenientes de las entradas globales. 7.1.3.1. Macroceldas Gi lar do ni - Las macroceldas en las dispositivos de la familia MAX 7000, pueden ser configuradas individualmente para realizar operaciones de lógica combinacional o secuencial. La macrocelda consiste de tres bloques funcionales: el arreglo lógico (términos productos), la matriz de selección de términos producto y el registro programable. Gilardoni - Orozco - Cayssials 1-13 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials La bo ra to rio de Si ste ma sD igi tal es - EPM7064 y EPM7096, pertenecientes a de la familia MAX7000. UN S La figura 1.10 muestra la macrocelda de los dispositivos EPM7032, EPM7032V, Figura 1.10 La figura 1.11 muestra una macrocelda de los dispositivos pertenecientes a la familia Or oz co -C ay ss ial s- MAX7000E y MAX7000S. Figura 1.11 La lógica combinacional es implementada en el arreglo lógico, el cual provee cinco Gi lar do ni - términos producto por macrocelda. La matriz de selección de términos producto permite determinar si la conexión de los términos producto será a las entradas lógicas primarias (Compuertas OR o XOR), para implementar funciones combinacionales, o a las entradas secundarias (clear, preset, clock y clock enable del registro de la macrocelda). Gilardoni - Orozco - Cayssials 1-14 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S Dos clases de expansores de términos productos son disponibles para ampliar los recursos de las macroceldas: La bo ra to rio de Si ste ma sD igi tal es - Expansores compartidos: Son términos productos invertidos realimentados dentro del arreglo lógico. Expansores paralelos: Son términos productos provenientes de macroceldas adyacentes físicamente. Para realizar funciones lógicas que utilicen registros, el flip flop de cada macrocelda puede ser individualmente programado para implementar los tipos: D, T, JK o SR. Además, el flip flop puede deseleccionarse para implementar una función combinacional en la macrocelda. A cada registro programable puede ingresar la señal de reloj de tres modos diferentes: Señal de reloj global: Este modo utiliza el contacto de entrada dedicado "global clock". Brinda la mayor performance en cuanto a velocidad de propagación puesto que es la forma más rápida de propagar la señal de reloj hacia todos los flip-flops del dispositivo. Señal de reloj global habilitada por una señal clock enable activa en high: Este modo provee la habilitación de la señal de reloj que ingresa a cada flip flop, y además mantiene la performance en cuanto a velocidad como en el modo de -C ay ss ial s- operación anterior. Señal de reloj implementada con un término producto. En este modo la señal de reloj que ingresa al flip flop puede provenir de otras macroceldas o contactos de Entrada/Salida. En los dispositivos EPM7032, EPM7032V, EPM7064 y EPM7096, las señal global de Or oz co reloj está disponible, como muestra la figura 1.8, a través del contacto denominado GCLK1. En los dispositivos de la familia MAX 7000E y MAX 7000S están disponibles dos señales de reloj globales a través de los contactos denominados GCLK1 y GCLK2. Como Gi lar do ni - muestra la figura 1.9, estas señales pueden ingresar al dispositivo en forma directa, invertidas o permutadas. Cada registro de las macroceldas soporta funciones de clear y preset asincrónicas. Como muestran las figuras 1.10 y 1.11, la matriz de selección de términos producto asigna los recursos necesarios para controlar esas funciones. Además, la señal clear de cada Gilardoni - Orozco - Cayssials 1-15 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S registro puede ser individualmente accedida a través del contacto global clear, denominado GCLRn. La bo ra to rio de Si ste ma sD igi tal es - Todos los contactos de Entrada/Salida de los dispositivos MAX 7000E y MAX 7000S poseen caminos de entrada rápidos hacia los registros de las macroceldas. Estos caminos dedicados permiten que la señal de entrada evite los retardos producidos en la PIA (Programmable Interconnect Array) y en la lógica combinacional, para acceder directamente a la entrada D del flip flop con un retardo de 3ns. 7.1.3.2. Logic Array Blocks La arquitectura de los dispositivos MAX7000 está basada en la interconexión de arreglos lógicos, de alta performance y flexibilidad, denominados Logic Array Blocks (LABs). Un LAB consiste de 16 macroceldas, como muestran las figuras 1.8 y 1.9. Múltiples LABs son interconectados a través de un arreglo programable de interconexión (PIA, del inglés "Programmable Interconnect Array"). Este arreglo de interconexión es un Figura 1.12 Gi lar do ni - Or oz co -C ay ss ial s- bus global al cual llegan también, señales provenientes de las celdas de Entrada/Salida. Gilardoni - Orozco - Cayssials 1-16 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S Cada LAB es alimentado por las siguientes señales: 36 señales provenientes del arreglo programable de interconexión (PIA) usadas La bo ra to rio de Si ste ma sD igi tal es - como entradas lógicas generales. Controles globales que son usados para realizar funciones de registro secundarias. Caminos directos de entrada desde los contactos de Entrada/Salida hacia los registros, usados para lograr pequeños tiempos de setup en los dispositivos MAX7000E y MAX7000S. La figura 1.12 muestra en diagrama de bloques la composición de un LAB. En esta figura puede observarse la estructura de interconexión vecinal denominada Local Array. 7.1.3.3. Expansores de Términos Producto (Expansores Paralelos y Compartidos) Aunque la mayoría de las funciones lógicas pueden ser implementadas con los cinco términos producto disponibles en una sola macrocelda, funciones lógicas más complejas requieren términos productos adicionales. De esta forma otra macrocelda puede ser usada para suplir los recursos lógicos requeridos. La arquitectura MAX7000 sólo permite que ambos expansores de términos productos, paralelos y compartidos, provean términos -C ay ss ial s- adicionales a cualquier macrocelda que se encuentre en el mismo LAB. Estos expansores ayudan a que la lógica sea sintetizada con la mínima utilización de recursos lógicos, para obtener la mayor velocidad posible. 7.1.3.4. Expansores Compartidos Cada LAB posee 16 expansores compartidos (uno por cada macrocelda). Estos Or oz co expansores que pueden ser vistos como simples términos productos con salidas invertidas que se realimentan al arreglo lógico. Pueden ser usados y compartidos por una o todas las macroceldas del LAB correspondiente para construir funciones lógicas complejas. El Gi lar do ni - retardo producido cuando un expansor compartido es utilizado, no supera los 10ns. En las especificaciones técnicas pueden observarse los valores típicos de este retardo denominado tSEXP . La figura 1.13 muestra cómo pueden ser alimentadas múltiples macroceldas con expansores compartidos. Gilardoni - Orozco - Cayssials 1-17 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. La bo ra to rio de Si ste ma sD igi tal es - UN S Gilardoni – Orozco - Cayssials Figura 1.13 7.1.3.5. Expansores Paralelos Los expansores paralelos son términos productos, no utilizados en una macrocelda, que pueden ser asignados a macroceldas vecinas, dentro de un mismo LAB, para implementar funciones rápidas y complejas. Estos permiten que hasta un total de 20 términos productos puedan sumarse en una macrocelda, formados por los 5 términos provistos por la LAB. -C ay ss ial s- macrocelda y 15 expansores paralelos provistos por las macroceldas vecinas de un mismo El software de síntesis MAX+PLUS II de ALTERA, puede asignar hasta un total de tres conjuntos de hasta 5 expansores paralelos a las macroceldas que requieran términos productos adicionales. Cada conjunto de 5 expansores paralelos incurre en un pequeño incremento del retardo, simbolizado con tPEXP. Por ejemplo, si una macrocelda requiere 14 Or oz co términos productos, el software de síntesis usará los 5 términos producto de una macrocelda y asignará a la misma 2 conjuntos de expansores paralelos de 5 y 4 términos producto respectivamente. Esta asignación incrementará el retardo total a 2 × t PEXP . Dos grupos de 8 macroceldas dentro de cada LAB (macrocelda 1 hasta 8 y macrocelda Gi lar do ni - 9 hasta 16) integran 2 cadenas para ceder o adquirir expansores paralelos. Una macrocelda adquiere expansores paralelos desde la macrocelda anterior. Por ejemplo, la macrocelda 8 puede obtener expansores paralelos desde la macrocelda 7, de las macroceldas 7 y 6 o desde las macroceldas 7, 6 y 5. Dentro de cada grupo de 8 macroceldas, una macrocelda sólo puede ceder expansores paralelos a una macrocelda de mayor numeración y, por el Gilardoni - Orozco - Cayssials 1-18 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S contrario, una macrocelda sólo puede obtener expansores paralelos desde una macrocelda La bo ra to rio de Si ste ma sD igi tal es - de menor numeración. Figura 1.14 -C ay ss ial s- La figura 1.14 muestra cómo son apropiados los expansores paralelos desde las macroceldas vecinas. 7.1.3.6. Programmable Interconnect Array (PIA) Las señales lógicas son propagadas entre los LABs a través del arreglo de interconexión Or oz co programable (PIA). Este es un bus global que conecta cualquier fuente de señal a cualquier destino dentro del dispositivo. Todas las entradas dedicadas, los contactos de Entrada/Salida y las salidas de las macroceldas, ingresan a la PIA. Esto posibilita que dichas señales estén disponibles a lo largo de todo el dispositivo. Gi lar do ni - La figura 1.15 muestra cómo las señales son ruteadas desde la PIA hacia un LAB. Una celda EEPROM controla una de las dos entradas de una compuerta AND, la cual permite que dicha señal ingrese, o no, al LAB correspondiente. Además puede observarse el ingreso al LAB tanto de la señal como de la señal negada. Gilardoni - Orozco - Cayssials 1-19 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. La bo ra to rio de Si ste ma sD igi tal es - UN S Gilardoni – Orozco - Cayssials Figura 1.15 Los retardos de propagación de las señales en la PIA son fijos. Esta es la principal diferencia con respecto a los FPGAs (Field Programmable Gate Arrays) cuyos retardos son acumulativos y dependientes del camino recorrido. La PIA elimina asimetrías entre señales y permite predecir fácilmente el comportamiento temporal del dispositivo. 7.1.3.7. I/O Control Blocks (Celdas de Entrada/Salida) Los bloques de control de Entrada/Salida permiten que cada contacto del dispositivo pueda ser individualmente configurado como entrada, salida o bidireccional. Todos los contactos de Entrada/Salida poseen un buffer de tres estados (tri-state) que puede ser -C ay ss ial s- controlado individualmente por una de las señales globales de output enable, o ser conectados directamente a tierra o VCC. La figura 1.16 muestra una celda de Entrada/Salida de los dispositivos de la familia MAX7000, EPM7032, EPM7032V, EPM7064 y EPM7096. La figura 1.17 lo hace con los Gi lar do ni - Or oz co dispositivos MAX 7000E y MAX 7000S. Gilardoni - Orozco - Cayssials Figura 1.16 1-20 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. La bo ra to rio de Si ste ma sD igi tal es - UN S Gilardoni – Orozco - Cayssials Figura 1.17 Nota: La salida open-drain sólo está disponible en los dispositivos MAX7000S. Las celdas de Entrada/Salida de los dispositivos de la familia MAX7000, EPM7032, EPM7032V, EPM7064 y EPM7096 poseen dos señales globales de output enable (activas OE2. -C ay ss ial s- en low) que provienen de los contactos de Entrada/Salida dedicados denominados OE1 y Las celdas de Entrada/Salida de los dispositivos MAX7000E y MAX7000S poseen seis señales globales de output enable. Estas señales ingresan a las celdas por intermedio de la PIA, y provienen de dos contactos globales dedicados de output enable (OE1 y OE2), de un subconjunto de contactos de Entrada/Salida y de un subconjunto de celdas de Or oz co Entrada/Salida. Cuando la señal de control de un buffer de tres estados es conectada a tierra, la salida presenta alta impedancia y el contacto de Entrada/Salida puede ser utilizado como entrada. Contrariamente si la señal de control es conectada a VCC, la salida es habilitada y el Gi lar do ni - contacto es utilizado como salida. La arquitectura de los dispositivos de la familia MAX7000 provee dos formas de realimentar señal desde una celda de Entrada/Salida hacia la PIA. Es posible realimentar señal tanto de la entrada como de la salida del buffer de tres estados. Gilardoni - Orozco - Cayssials 1-21 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S Todas las celdas de Entrada/Salida están asociadas a una macrocelda y en general la cantidad de macroceldas es superior a la cantidad de contactos de Entrada/Salida. In-System Programmability (ISP) La bo ra to rio de Si ste ma sD igi tal es - 7.1.4. Los dispositivos MAX7000S pueden ser programados en sistema (ISP) a través de la interfase estándar industrial JTAG (Joint Test Action Group). La característica de ser ISP permite la programación del dispositivo hasta después de montado en la placa de circuito impreso, ya que durante la programación todos los contactos de Entrada/Salida permanecen en un estado de alta impedancia. Otra característica importante de ISP en los dispositivos que basan su programación en celdas EEPROM, es que no es necesario ingresar externamente el voltaje de programación (generalmente superior a los 5volts), ya que éste es generado internamente por el dispositivo. Los otros dispositivos de la familia MAX7000 que no son ISP compatibles, son programados a través de un hardware específico, conocido como MPU (Master Programming Unit), controlado a través del software de síntesis y programación MAX+PLUS II de ALTERA. 7.1.5. Control de Velocidad / Potencia Programable La familia de dispositivos MAX7000 ofrece un modo de operación que permite -C ay ss ial s- especificar individualmente si cada macrocelda funcionará en modo de alta velocidad o modo de bajo consumo de potencia. Estos dos modos de operación son excluyentes, es decir la elección de uno de ellos implica la no elección del otro. 7.1.6. Interfase Multi Voltaje de Entrada/Salida. (MultiVolt I/O Or oz co Interface) Los dispositivos MAX7000, excepto los de encapsulado de 44 contactos, soportan las características de multi voltaje. Esta característica permite que los dispositivos MAX7000 puedan interactuar e intercambiar información con dispositivos o sistemas que posean Gi lar do ni - diferentes voltajes de alimentación. Los dispositivos que poseen esta característica poseen dos conjuntos de contactos de entrada de alimentación independientes. Un conjunto es usado para la operación interna del dispositivo y para uso en los buffers de entrada. Estos contactos son designados como VCCINT y deben ser siempre conectados a 5volts. El otro conjunto de contactos de Gilardoni - Orozco - Cayssials 1-22 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S alimentación está asociado con los contactos de Entrada/Salida y son éstos los que deben poseer la característica de multi voltaje. Dichos contactos, designados VCCIO, pueden La bo ra to rio de Si ste ma sD igi tal es - conectarse tanto a 3,3 como a 5 volts. Figura 1.18 La figura 1.18 muestra dos de los encapsulados posibles utilizados en la familia MAX7000; ellos muestran la existencia de los dos conjuntos de contactos de alimentación: VCCINT y VCCIO. -C ay ss ial s- En aplicaciones de lógica TTL todos los contactos de entrada de alimentación (VCCINT y VCCIO) deben conectarse a 5 volts. 7.1.7. Slew-Rate Control En los dispositivos MAX7000E y MAX7000S, los buffers de salida en cada contacto de Entrada/Salida poseen la capacidad de ajustar su slew rate. De esta manera puede adaptarse Or oz co el comportamiento de la salida para conseguir un mejor desempeño con respecto al ruido o a la velocidad. Un elevado slew rate provee alta velocidad de transición de la señal de salida, ideal para Gi lar do ni - aplicaciones de alta velocidad. Sin embargo, estas elevadas velocidades pueden introducir ruidos en el sistema. Un pequeño slew rate reduce el ruido en el sistema pero adiciona un retardo adicional de 4 a 5 ns. En los dispositivos MAX7000E existe un bit denominado "Turbo Bit". Cuando éste posee un valor cero, el slew rate es pequeño y cuándo es uno, el slew rate es elevado. La desventaja en estos dispositivos es que el Turbo Bit configura el slew rate de todos los Gilardoni - Orozco - Cayssials 1-23 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S contactos de Entrada/Salida, no existiendo la posibilidad de un control individual. Esta desventaja es suplida en los dispositivos MAX7000S, donde cada contacto de EEPROM. La bo ra to rio de Si ste ma sD igi tal es - Entrada/Salida posee un control individual del slew rate a través del estado de una celda 7.2 La Familia FLEX 10K 7.2.1. Terminología ALTERA define su propia terminología para referirse a sus dispositivos de la familia FLEX 10K. Algunos de los términos más importantes son: Embedded Array Blocks (EABs): Son bloques de memoria RAM estática de alta velocidad insertados dentro de la arquitectura de los dispositivos FLEX 10K. Logic Elements: Son las unidades lógicas funcionales más pequeñas en la arquitectura de la familia FLEX 10K. Local Interconect Array: Es la estructura de interconexión local asociada a cada LAB. Logic Array Block (LAB): Agrupación de ocho elementos lógicos interconectados a través del arreglo de interconexión local. -C ay ss ial s- Logic Array: Es la estructura formada por un conjunto de LABs. FastTrack: Estructura de interconexión global formada por filas de interconexión y columnas de interconexión. Filas y Columnas de Interconexión: Son redes de cableado que atraviesan al dispositivo en forma horizontal y vertical. Cada camino de conexión dentro de las mismas es llamado canal de fila y canal de columna, respectivamente. Or oz co Configuración: Se denomina así a la acción de programar un dispositivo SRAM. Descripción General Gi lar do ni - 7.2.2. Con un rango de 10.000 a 130.000 compuertas lógicas, es una familia de dispositivos dedicada a satisfacer necesidades propias de diseños mediante gate arrays. Los dispositivos de esta familia incorporan bloques internos de memoria, lazos de enganche de fase (PLLs) para la distribución de relojes de alta velocidad dentro del chip y un esquema de interconexión de alta velocidad y retardos predecibles (FastTrack). Estas características Gilardoni - Orozco - Cayssials 1-24 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S hacen de esta familia la opción ideal para aplicaciones de alta complejidad o donde se requiera la realización de tareas de cómputo numérico en forma eficiente (aplicaciones La bo ra to rio de Si ste ma sD igi tal es - para Digital Signal Processing, DSP). Los bloques internos de memoria EAB (del ingles Embedded Array Blocks) posibilitan combinar la potencia combinacional de los LEs (lógica masiva de grano fino, plenamente interconectada) con la facilidad para generar tablas o funciones de gran fan-in propias de las memorias ROM / RAM. A diferencia de otras FPGAs, el uso de memoria de las FLEX 10K no se hace a costa de la perdida de recursos lógicos. Estas prestaciones, junto a su alta velocidad, hacen de la familia FLEX 10K la herramienta ideal para aplicaciones de tratamiento de señales (DSP) u otros diseños de gran complejidad. 7.2.3. Arquitectura (Descripción Funcional) La arquitectura interna de la familia FLEX 10K incluye los siguientes elementos: Gi lar do ni - Or oz co -C ay ss ial s- Embedded Array Blocks Logic Element Logic Array Blocks (LAB) FastTrack Interconnect I / O Element (Elementos de Entrada/Salida) Figura 1.19 La figura 1.19 muestra, en diagrama de bloques, la arquitectura usada en los dispositivos FLEX 10K. Gilardoni - Orozco - Cayssials 1-25 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S 7.2.3.1. Embedded Array Blocks Los EAB (Embedded Array Blocks) son bloques de memoria RAM con registros en los La bo ra to rio de Si ste ma sD igi tal es - ports de entrada y salida. Los EAB son usados para implementar multiplicadores, circuitos de corrección de errores y funciones de gran fan-in. Es posible implementar funciones lógicas configurando los EAB con un patrón de sólo lectura durante la configuración lo que crea una gran tabla de look-up (LUT). Con LUTs las funciones combinacionales son implementadas buscando los resultados en lugar de computarlos. Esta implementación de funciones combinacionales puede ser más rápida que el uso de algoritmos implementados sin el uso de tablas de look-up. La gran capacidad de los EABs posibilita la implementación de funciones complejas en un solo nivel de compuerta. Esto evita el agregado de retardos de propagación debido a que no es necesario recurrir a recursos de interconexión extras. Por ejemplo, un solo EAB puede implementar un multiplicador aritmético de 4 x 4 bits con 8 bits de entrada y 8 bits de salida. Los EABs poseen ventajas sobre los FPGA (Field programmable Gate Array). Los FPGA implementan RAM como pequeños bloques RAM distribuidos a lo largo del dispositivo. Estos bloques RAM contienen retardos de propagación que son menos predecibles cuanto más bloques RAM sean utilizados. Además, el hecho de que la RAM -C ay ss ial s- en los FPGAs esté distribuida en pequeños bloques provoca problemas de ruteo, dificultando su interconexión cuando se requiere implementar grandes bloques de memoria. Los EABs, cuando son utilizados como memorias RAM, pueden configurarse en cualquiera de los siguientes tamaños: 256x8, 512x4, 1024x2 ó 2048x1. Además, pueden interconectarse múltiples EABs para aumentar la capacidad. También proveen opciones de Or oz co configuración para conducir y controlar señales de reloj. Pueden ser usados diferentes relojes para las entradas y salidas de los EABs. Pueden insertarse registros en forma independiente en la entrada de datos, en el bus de salida, en el bus de direcciones y en la Gi lar do ni - señal "write enable" (WE) de los EABs. Las señales globales dedicadas y el sistema de interconexión local de los EABs pueden propagar la señal de WE. Gilardoni - Orozco - Cayssials 1-26 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. -C ay ss ial s- La bo ra to rio de Si ste ma sD igi tal es - UN S Gilardoni – Orozco - Cayssials Figura 1.20 Las señales acceden a cada EAB por una fila de interconexión y pueden salir de él tanto por una fila o un columna de interconexión. Cada salida de un EAB puede propagar hasta dos canales de filas y hasta dos canales de columnas; los canales no utilizados pueden ser utilizados por otros elementos lógicos (LEs). La figura 1.20 muestra en diagrama de bloques, la composición de un EAB (Embedded Or oz co Array Block). 7.2.3.2. Logic Array Block (LAB) El Logic Array Block (LAB) consiste en la agrupación de: ocho elementos lógicos Gi lar do ni - (LEs), las cadenas de carry y cascada asociadas, señales de control del LAB y el arreglo de interconexión local del LAB. Los LABs proveen una estructura de grano grueso, facilitando un ruteado eficiente con óptima utilización del dispositivo y alta performance. La figura 1.21 muestra la arquitectura de un Logic Array Block (LAB). Gilardoni - Orozco - Cayssials 1-27 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. -C ay ss ial s- La bo ra to rio de Si ste ma sD igi tal es - UN S Gilardoni – Orozco - Cayssials Figura 1.21 Cada LAB provee cuatro señales de control, con inversión programable que pueden ser utilizadas por todos los LEs. Dos de estas señales pueden ser usadas como relojes, las otras dos pueden ser usadas para control de clear/preset. Las señales de reloj que ingresan a los Or oz co LABs pueden provenir de los contactos de entrada de señal de reloj dedicados, de las señales globales, de las señales de Entrada/Salida o de señales internas a través del arreglo de interconexión local del LAB respectivo. Las señales de control de clear/preset pueden provenir de las señales globales, de las señales de Entrada/Salida o de las señales internas a Gi lar do ni - través del arreglo de interconexión local del LAB respectivo. Las señales de control recién mencionadas pueden observarse en la figura 1.21. Las señales de control globales son generalmente usadas para propagar señales de reloj, clear o preset. Gilardoni - Orozco - Cayssials 1-28 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S Si alguna lógica es requerida sobre alguna señal de control, ésta puede ser generada en uno o más LEs de cualquier LAB y ser propagada hacia el arreglo de interconexión local salidas de los LEs. La bo ra to rio de Si ste ma sD igi tal es - del LAB deseado. Además, las señales de control global pueden ser generadas desde las 7.2.3.3. Logic Element (Elementos lógicos) Los elementos lógicos son las unidades lógicas funcionales más pequeñas en la arquitectura de la familia FLEX 10K. Cada LE contiene una tabla de look-up de 4 entradas, la cual es usada como un generador de funciones lógicas que puede fácilmente computar cualquier función de cuatro variables. Además, cada LE contiene un flip flop programable con un enable sincrónico, una cadena de carry y una cadena de cascada. Cada LE se conecta con el arreglo de interconexión local del LAB y con la estructura de interconexión global denominada "FastTrack". La figura 1.22 muestra la estructura de un elemento lógico. El flip flop programable de cada LE puede ser configurado para funcionar como flip flop D, T, JK o SR. Las señales de control de reloj, clear y preset que ingresan al flip flop, pueden provenir de señales globales, de contactos de Entrada/Salida de propósito general o de cualquier lógica interna. Para implementar funciones combinacionales, el flip flop es evitado y la salida de la LUT es conducida hacia la salida del LE. -C ay ss ial s- El LE posee dos salidas; una destinada a la interconexión local dentro del LAB y la otra destinada a la interconexión global que accede a las columnas o a las filas de la estructura de interconexión FastTrack. Estas dos salidas pueden ser usadas y controladas independientemente; por ejemplo, la LUT puede utilizar una de las salidas mientras el registro del LE utiliza la otra. Esta característica es denominada "register packing" y puede mejorar la utilización del LE debido a que la LUT y el registro del LE pueden ser usados Or oz co para implementar funciones independientes. La arquitectura de la familia FLEX 10K provee dos tipos de caminos de datos dedicados de alta velocidad que conectan LEs adyacentes, sin hacer uso de los caminos de Gi lar do ni - interconexión local. Estos caminos adicionales son denominados cadenas de carry y cadenas de cascada. Las cadenas de carry soportan sumadores y contadores de alta velocidad; las cadenas de cascada implementan funciones de gran fan–in con mínimo retardo. Las cadenas de carry y de cascada conectan a todos los LEs en un LAB y a todos los LABs en la misma fila de la estructura de interconexión FastTrack. El uso intensivo de Gilardoni - Orozco - Cayssials 1-29 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S cadenas de carry y cascada puede reducir la flexibilidad de ruteo, debido al consumo de recursos de interconexión que ello implica. Por lo tanto, el uso de estas cadenas debería ser velocidad se refiere. La bo ra to rio de Si ste ma sD igi tal es - limitada a porciones del diseño donde fuera necesaria una elevada performance en lo que a Figura 1.22 -C ay ss ial s- 7.2.3.4. Cadenas de Carry Las cadenas de carry proveen muy alta velocidad (0.2 ns.) para realizar funciones aritméticas entre LEs. En operaciones de bits donde existen acarreos, la señal de acarreo de un LE es conducida a través de la cadena de carry hacia la LUT de un LE adyacente. Esta característica permite implementar eficientemente contadores de alta velocidad, sumadores Or oz co y comparadores de un ancho arbitrario. La lógica asociada a la implementación de una cadena de carry puede ser creada automáticamente por el software MAX+PLUS II durante el proceso de diseño o especificada por el diseñador. Gi lar do ni - Las cadenas de carry que superan los ocho LEs de un LAB, son automáticamente implementadas enlazando múltiples LABs. señal de propósito general. Gilardoni - Orozco - Cayssials 1-30 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. -C ay ss ial s- La bo ra to rio de Si ste ma sD igi tal es - UN S Gilardoni – Orozco - Cayssials Figura 1.23 La figura 1.23 muestra cómo puede ser implementado un sumador de n bits con n + 1 LEs, utilizando la cadena de carry. Una porción de las LUT generan la suma de dos bits Or oz co usando las señales de entrada y la señal de acarreo; la suma es ruteada a la salida del LE. El registro puede ser evitado en la implementación de sumadores simples o utilizado como acumulador. Otra porción de la LUT y la lógica asociada a la cadena de carry, generan la señal de carry de salida, la cual es ruteada directamente a la entrada de carry del próximo Gi lar do ni - bit a sumar. La señal de carry final es ruteada a un LE donde puede ser utilizada como una 7.2.3.5. Cadenas de Cascada Con las cadenas de cascada pueden implementarse funciones de gran fan-in. LUTs adyacentes pueden ser usadas para computar porciones de la función en paralelo; siendo la cadena de cascada la que conecte serialmente los valores intermedios. La cadena de Gilardoni - Orozco - Cayssials 1-31 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S cascada puede utilizar una operación lógica OR o una AND (según la lógica utilizada) para conector las salidas de los LEs adyacentes. Cada LE adicional provee cuatro posibles La bo ra to rio de Si ste ma sD igi tal es - entradas más, con un retardo de propagación de 0,7 ns por LE. La lógica asociada a la cadena de cascada puede ser creada automáticamente por el software MAX+PLUS II o especificada por el diseñador. Las cadenas de cascada que superan los ocho LEs de un LAB son automáticamente implementadas enlazando múltiples LABs. La figura 1.24 muestra cómo el uso de cadenas de cascada permite conectar LEs adyacentes para formar funciones de gran fan–in. Estos ejemplos muestran funciones de 4.n variables de entrada implementadas con 4 LEs, es decir, n = 4. El retardo de -C ay ss ial s- propagación de un LE es de 1.9 ns y el retardo de la cadena de cascada es de 0.7 ns. Figura 1.24 Or oz co 7.2.3.6. Modos de Operación de los Elementos Lógicos Los elementos lógicos (LEs) de la familia FLEX 10K pueden operar en cuatro de los Gi lar do ni - siguientes modos: Modo Normal Modo Aritmético Modo Contador Ascendente/Descendente Up / Down Modo Contador Borrable. Cada uno de estos modos de operación usa diferentes recursos de los LEs. En cualquiera de ellos, existen disponibles siete entradas a los LEs. Cuatro entradas de datos Gilardoni - Orozco - Cayssials 1-32 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S desde el arreglo local de interconexión del LAB, la realimentación desde el registro programable y las señales de entrada de las cadenas de carry y cascada del LE previo. La bo ra to rio de Si ste ma sD igi tal es - Tres señales de entrada al LE proveen controles de reloj, clear y preset para el registro programable. El software MAX+PLUS II elige automáticamente el modo de operación apropiado. Si es requerido, el diseñador puede crear funciones de propósito especial usando un modo de -C ay ss ial s- operación determinado para obtener óptima performance. Figura 1.25 La arquitectura provee una señal sincrónica de clock enable para el registro, en todos los modos de operación. Or oz co La figura 1.25 muestra los modos de operación normal y aritmética. La figura 1.26 muestra los modos de operación del Contador Ascendente/Descendente y del Contador Gi lar do ni - inicializable en cero. Gilardoni - Orozco - Cayssials 1-33 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. La bo ra to rio de Si ste ma sD igi tal es - UN S Gilardoni – Orozco - Cayssials Figura 1.26 7.2.3.7. FastTrack Interconnect -C ay ss ial s- En la arquitectura de la familia FLEX 10K, las conexiones entre LEs y los contactos de Entrada/Salida son provistas por la estructura de interconexión "FastTrack". Ésta consiste en una serie de conexiones continuas, horizontales y verticales, que atraviesan el dispositivo. El conjunto se estas conexiones horizontales y verticales son denominadas filas y columnas de interconexión, respectivamente. Esta estructura de interconexión global permite predecir la performance, en cuanto a velocidad de propagación de las Or oz co señales, aun en diseños complejos. Ésta es la principal diferencia con los dispositivos FPGAs, ya que éstos poseen una estructura de interconexión global segmentada. Por lo tanto, los dispositivos FPGA requieren matrices de interconexión para conectar un número Gi lar do ni - variable de caminos. Esto incrementa el retardo de propagación entre los recursos lógicos y reduce la performance. La figura 1.27 muestra la diferencia en la estructura de interconexión global entre los dispositivo FLEX 10K y los dispositivos FPGA. Gilardoni - Orozco - Cayssials 1-34 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. La bo ra to rio de Si ste ma sD igi tal es - UN S Gilardoni – Orozco - Cayssials Figura 1.27 La estructura de interconexión "FastTrack" consiste de filas y columnas de canales de interconexión que atraviesan todo el dispositivo. Cada fila de LABs es servida por una fila de interconexión dedicada. Las filas de interconexión pueden propagar señales hacia o desde los contactos de Entrada/Salida y alimentar otros LABs del dispositivo. Las columnas de interconexión son las encargadas de propagar señales entre filas de Gi lar do ni - Or oz co -C ay ss ial s- interconexión y además pueden conectar contactos de Entrada/Salida. Gilardoni - Orozco - Cayssials Figura 1.28 1-35 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S Las filas y columnas de interconexión están compuestas por canales de filas y canales de columnas respectivamente. Un canal de fila puede ser usado por un LE o por uno de tres La bo ra to rio de Si ste ma sD igi tal es - canales de columnas. Estas cuatro señales alimentan un multiplexor dual de 4::1, como puede observarse en la figura 1.28, el cual deriva las señales a dos canales de filas específicos. Estos multiplexores, conectados a cada LE, permiten a los canales de columnas conectarse con los canales de filas, aun cuando todos los LEs de un LAB estén conectados a la fila de interconexión. Cada columna de LABs es servida por una columna de interconexión dedicada. Una señal proveniente de una columna de interconexión debe ser ruteada a una fila de interconexión antes de que pueda entrar a un LAB o a un EAB. La figura 1.29 muestra en forma tabular, los recursos de interconexión disponibles en Figura 1.29 Gi lar do ni - Or oz co -C ay ss ial s- los distintos dispositivos de la familia FLEX 10K. La figura 1.30 muestra la interconexión entre LABs adyacentes, filas, columnas y el arreglo de interconexión local, como así también las cadenas de carry y cascada asociadas. Cada LAB es designado de acuerdo a su locación física dentro del dispositivo: una letra Gilardoni - Orozco - Cayssials 1-36 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S representa la fila y un número representa la columna. Por ejemplo, el LAB B3 está situado -C ay ss ial s- La bo ra to rio de Si ste ma sD igi tal es - en la fila B, columna 3. Figura 1.30 7.2.3.8. I/O Elements (Elementos de Entrada/Salida) Un elemento de Entrada/Salida contiene un buffer bidireccional y un registro. El Or oz co registro puede ser utilizado como registro de entrada, para datos que requieran un corto tiempo de setup, o como registro de salida, para datos que requieran un tiempo rápido de propagación de señales hacia el exterior. En algunos casos, el uso de un registro de un LE, como registro de entrada, podría producir un menor tiempo de setup que el logrado Gi lar do ni - utilizando un registro de un elemento de Entrada/Salida. Un elemento de Entrada/Salida puede utilizarse para configurar un contacto como entrada, salida o bidireccional. La figura 1.31 muestra el diagrama de bloques de un elemento de Entrada/Salida. Gilardoni - Orozco - Cayssials 1-37 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. La bo ra to rio de Si ste ma sD igi tal es - UN S Gilardoni – Orozco - Cayssials Figura 1.31 Cada elemento de Entrada/Salida selecciona las señales de control de clock, clear, clock periférico". -C ay ss ial s- enable y output enable de una red de señales de control, denominada "bus de control Este bus de control periférico provee hasta 12 señales de control periféricas que pueden ser destinadas a los siguientes usos: Hasta ocho señales de output enable. Hasta seis señales de clock enable. Or oz co Hasta dos señales de clock. Hasta dos señales de clear. Si más de seis señales de clock enable u ocho señales de output enable son requeridas, Gi lar do ni - cada elemento de Entrada/Salida del dispositivo puede ser controlado por señales de output enable y clock enable provenientes de LEs específicos. Además de las dos señales de clock disponibles en el bus de control periférico, cada elemento de Entrada/Salida puede utilizar uno de los dos contactos dedicados de clock globales del dispositivo. Gilardoni - Orozco - Cayssials 1-38 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S La señal global de reset es la señal de control de mayor prioridad y reseteará a todos los registros de los elementos de Entrada/Salida. La bo ra to rio de Si ste ma sD igi tal es - 7.2.3.9. Conexión Filas – Elementos E/S Cuando un elemento de Entrada/Salida es utilizado como entrada, la señal de entrada puede acceder a dos canales de filas y estar disponible para todos los LEs de esa fila. Cuando es utilizado como salida, la señal de salida es conducida a través de un multiplexor que la selecciona del canal de la fila de interconexión deseado. En la figura 1.32 puede verse cómo los elementos de E/S acceden a las filas de interconexión. Gi lar do ni - Or oz co -C ay ss ial s- Figura 1.32 Gilardoni - Orozco - Cayssials Figura 1.33 1-39 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S Los valores de n (canales por fila) y m (canales por contacto) varían de acuerdo al dispositivo. La figura 1.33 muestra en forma tabular los recursos de interconexión La bo ra to rio de Si ste ma sD igi tal es - disponibles, entre filas y elementos de E/S, según el dispositivo. 7.2.3.10. Conexión Columnas – Elementos E/S Cuando un elemento de Entrada/Salida es utilizado como entrada, la señal de entrada puede acceder a dos canales de columnas. Cuando un elemento de E/S es utilizado como salida, la señal de salida es conducida a través de un multiplexor que la selecciona del canal de la columna de interconexión deseado. En la figura 1.34 puede verse como los elementos de E/S acceden a las columnas de interconexión. La figura 1.35 muestra en forma tabular los recursos de interconexión disponibles, entre 7.2.4. Or oz co -C ay ss ial s- columnas y elementos de E/S, según el dispositivo. Figura 1.34 Distribución de señales de reloj Gi lar do ni - Para soportar diseños de alta velocidad, los dispositivos FLEX 10K ofrecen dos configuraciones denominadas "ClockLock" y "ClockBoost". Estas configuraciones utilizan lazos de enganche de fase (PLLs) para la distribución de relojes de alta velocidad dentro del chip. Gilardoni - Orozco - Cayssials 1-40 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. La bo ra to rio de Si ste ma sD igi tal es - UN S Gilardoni – Orozco - Cayssials Figura 1.35 La opción "ClockLock" utiliza un PLL que reduce los retardos de propagación y las asimetrías dentro del dispositivo. La opción "ClockBoost" funciona como un multiplicador de reloj, lo que permite al -C ay ss ial s- diseñador distribuir un reloj de baja velocidad y multiplicar la señal al momento de usarla. La acción combinada de estas dos opciones provee significantes mejoras en la performance y ancho de banda del sistema. Las características "ClockLock" y "ClockBoost" son activadas a través del software MAX+PLUS II. Configuración de Salida Or oz co 7.2.5. 7.2.5.1. Interfase Multi Voltaje de Entrada/Salida. (MultiVolt I/O Interface) Gi lar do ni - Al igual que los dispositivos MAX7000, la familia FLEX 10K posee la característica de multi voltaje. Esta característica permite que los dispositivos FLEX 10K puedan interactuar e intercambiar información con dispositivos o sistemas que posean diferentes voltajes de alimentación. Gilardoni - Orozco - Cayssials 1-41 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S Los dispositivos que poseen esta característica poseen dos conjuntos de contactos de entrada de alimentación independientes. Un conjunto es usado para la operación interna La bo ra to rio de Si ste ma sD igi tal es - del dispositivo y para uso en los buffers de entrada; estos contactos son designados como VCCINT y deben ser siempre conectados a 5volts. El otro conjunto de contactos de entrada de alimentación está asociado con los contactos de Entrada/Salida y son éstos los que deben poseer la característica de multi voltaje. Pueden conectarse tanto a 3,3 como a 5volts. Ellos son designados con el nombre de VCCIO. 7.2.5.2. Slew-Rate Control Los buffers de salida en cada elemento de Entrada/Salida poseen la capacidad de ajustar el slew rate de la señal de salida de modo tal de conseguir un mejor desempeño del dispositivo frente a ruido o frente a velocidad. Un slew rate bajo reduce el ruido generado en el sistema pero adiciona un retardo de propagación adicional de 2.9 ns. Un slew rate elevado provee alta velocidad de transición de la señal de salida, ideal para aplicaciones de alta velocidad. Sin embargo, debería utilizarse en sistemas que estén adecuadamente protegidos contra el ruido. Todos los contactos de E/S poseen un control individual del slew rate. -C ay ss ial s- 7.2.5.3. Esquemas de Configuración Las arquitectura de la familia FLEX 10K utiliza elementos de configuración SRAM que requieren ser cargados al dispositivo cada vez que éste sea energizado. El proceso de cargar físicamente los datos en los elementos de memoria SRAM del dispositivo, es denominado "configuración". La configuración de los dispositivos FLEX 10K puede realizarse de cualquiera de las Gi lar do ni - Or oz co cinco formas mostradas en la figura 1.36. Gilardoni - Orozco - Cayssials Figura 1.36 1-42 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials La bo ra to rio de Si ste ma sD igi tal es - UN S Capítulo 2 El siguiente capítulo es una introducción al lenguaje de especificación de hardware VHDL. Los conceptos principales y la mayoría de los ejemplos presentados en este capítulo han sido extraídos del CD-ROM titulado: ALTERA MASTER CLASS The Interactive HDL Tutorial. Si bien dicho CD-ROM abarca ampliamente los lenguajes VHDL y Verilog HDL aplicados a la programación de circuitos PLD (Programmable Logic Design), en este capítulo se tratan sólo en forma práctica los principales conceptos de VHDL. Introducción a VHDL: Un Lenguaje de Especificación de Hardware. 1. ¿Que significa VHDL? VHDL son las siglas con que es conocido el Lenguaje de Descripción de Hardware -C ay ss ial s- definido como el estándar 1076 del IEEE. La letra "V" significa "Circuitos Integrados de Muy Alta Velocidad" (abreviatura de VHSIC del inglés "Very High Speed Integrated Circuit") y la sigla "HDL" significa Lenguaje de Descripción de Hardware (del inglés "Hardware Description Language"). Por lo tanto en castellano VHDL significaría "Lenguaje de Descripción de Hardware para Circuitos Integrados de Muy Alta Velocidad". Este lenguaje fue desarrollado a principios de la década del 80 y fue definido como el Or oz co estándar 1076 por la IEEE en 1987. Una nueva versión compatible con la anterior, desarrollada en 1993, agregó nuevas capacidades y removió alguna ambigüedades de la versión anterior. A comienzos de los años 90, VHDL fue utilizado mayoritariamente para la Gi lar do ni - especificación de circuitos integrados ASIC (Application-Specific Integrated Circuit) y en la segunda mitad de la década comenzó a utilizarse en la programación de PLDs (Programmable Logic Devices). Gilardoni - Orozco - Cayssials 2-1 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S 2. Limitaciones del VHDL La bo ra to rio de Si ste ma sD igi tal es - El VHDL es principalmente un lenguaje para diseño “digital” y tiene limitadas capacidades en el área analógica. Aunque actualmente existen una gran cantidad de esfuerzos tendientes a obtener una versión analógica del lenguaje, dicho esfuerzos están aún en una etapa incipiente. El estándar define el lenguaje y su sintaxis, pero no describe el estilo que debe utilizarse en la especificación de un proyecto. Esto provoca que las diferentes herramientas de síntesis tengan ciertas diferencias, pero sin embargo estas diferencias son escasas y es posible modificar ligeramente los códigos para adaptarlos a cada una de las herramientas de síntesis. 3. Estilos de Escritura de VHDL Los diferentes estilos de escritura de código VHDL se basan en un concepto conocido como abstracción. La abstracción define la magnitud del detalle en las especificaciones del sistema a diseñar. Hay cuatro niveles principales de abstracción, los cuales son representados en la figura Or oz co -C ay ss ial s- 2.1. Figura 2.1 El nivel más bajo que es posible definir es el LAYOUT (disposición, esquema) . En este nivel se especifica la información referente a la disposición del diseño sobre el silicio y Gi lar do ni - puede también especificar información detallada de temporizado. El nivel superior al de LAYOUT es el nivel LOGIC. En este nivel se interconectan las compuertas lógicas y registros. Todo lo referente al nivel de LAYOUT es ignorado. Este nivel contiene información sobre la función, arquitectura, tecnología y detalle del temporizado. Gilardoni - Orozco - Cayssials 2-2 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S El tercer nivel, es el nivel RTL (Register Transfer Level - nivel de transferencia de registro). En este nivel se definen cada uno de los registros que componen el diseño y la La bo ra to rio de Si ste ma sD igi tal es - lógica entre ellos. Por último, el cuarto nivel es el BEHAVIORAL (comportamiento). Este nivel hace uso del VHDL para describir la función del diseño, sin especificar la arquitectura de registros. Aunque es el nivel de mayor abstracción, el código desarrollado a este nivel puede contener tanta información de temporizado como la que el diseñador requiera para representar su función. Hoy en día la mayoría de las herramientas de síntesis requieren que el código sea escrito a nivel RTL (Register Transfer Level). Por este motivo será adoptado en este informe como el estilo de escritura de VHDL. En las herramientas de síntesis que se basan en el nivel BEHAVIORAL, automáticamente se generan arquitecturas de registros y lógica basadas en el estándar VHDL. Existen diversas clases de estas herramientas las cuales frecuentemente se aplican cuando es necesario implementar algoritmos como, por ejemplo, en los casos de procesamiento de señales. 4. Conceptos Principales del Lenguaje -C ay ss ial s- Completaremos la introducción de cómo es usado el VHDL introduciendo los principales conceptos y construcciones disponibles para el diseñador. Como VHDL es un lenguaje que permite describir hardware, éste debe permitir describir actividades que operan simultáneamente, como por ejemplo la siguiente Gi lar do ni - Or oz co conexión. Figura 2.2 Tales actividades se denominan concurrentes. Gilardoni - Orozco - Cayssials 2-3 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S Un aspecto específico de descripción de concurrencia es la habilidad de describir estructuras o jerarquías. La descripción de estructuras en VHDL puede ser libremente La bo ra to rio de Si ste ma sD igi tal es - mezclada con descripción de comportamiento (behavior), como muestra la figura 2.3. Figura 2.3 En este caso las estructuras u1, u2 y u3 funcionan concurrentemente conformando una estructura más compleja. El lenguaje VHDL puede contener también sentencias que se ejecuten en forma secuencial, similar a lo que sucede en cualquier lenguaje de programación tradicional como ser “C”, Pascal, BASIC, etc. Sin embargo, es necesario recordar que esta característica describe en forma secuencial un comportamiento concurrente y no es la ejecución secuencial de un código residente en memoria. -C ay ss ial s- 4.1 Sintaxis Llamaremos bloque a cada parte constitutiva del diseño. Por lo tanto, un diseño estará formado por la interconexión e interacción de distintos bloques. A continuación se describe la sintaxis de VHDL, comenzando con el código que representa el bloque de construcción principal de cualquier diseño, denominado ENTIDAD. Or oz co La ENTIDAD, en VHDL, describe la interfase de un bloque (cuántos son y cómo se llaman los contactos de entrada y salida de dicho bloque), sin definir qué es lo que hace. En la figura 2.4 se describe la sintaxis que define un medio sumador (Halfadd). Gi lar do ni - La sintaxis para una entidad comienza con la palabra reservada “ENTITY”, seguida por el nombre que se desee dar a dicha entidad y luego se coloca la palabra “IS”. Las entradas y salidas están contenidas en el cuerpo de la sentencia “PORT”, donde se listan la dirección y estados de cada una de las señales a nivel de bit. Finalmente se tiene la palabra reservada “END” y el nombre de la entidad, seguida por un punto y coma. Gilardoni - Orozco - Cayssials 2-4 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. La bo ra to rio de Si ste ma sD igi tal es - UN S Gilardoni – Orozco - Cayssials Figura 2.4 Se debe notar que el uso correcto de los punto y coma en la sentencia “PORT” es como lo muestra la figura 2.5. Figura 2.5 -C ay ss ial s- 4.2 Arquitectura A continuación se describe el comportamiento de la entidad, definido en el bloque Or oz co llamado arquitectura. Figura 2.6 Gi lar do ni - La figura 2.6 muestra una forma de definir el comportamiento del medio sumador de la figura 2.5. La sintaxis de la definición de una arquitectura comienza con la palabra reservada “ARQUITECTURE” seguida por el nombre con que el usuario desea identificar a dicha arquitectura. Gilardoni - Orozco - Cayssials 2-5 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S Una arquitectura siempre está asociada con una entidad y por ello existe la palabra reservada “OF” para referenciarla. Luego del nombre de la entidad a la que está asociada la La bo ra to rio de Si ste ma sD igi tal es - arquitectura, se coloca la palabra “IS”. El comportamiento de la arquitectura en sí se escribe entre las palabras “BEGIN” y “END”. En este ejemplo vemos que (A xor B) es asignado a SUM y (A and B) es asignado a CARRY. Cabe señalar que una entidad puede tener más de una arquitectura. De esta manera, en el ejemplo desarrollado, pueden existir varias formas en especificar un medio sumador mediante la definición de varias arquitecturas. 4.3 Jerarquía La entidad y la arquitectura son los bloques de construcción principales con los que una jerarquía es construida. A continuación se describe cómo una jerarquía es representada en VHDL, usando como ejemplo la definición de un sumador completo (FULLADD) -C ay ss ial s- construido a partir de dos medio sumadores (HALFADD) y una compuerta OR. Figura 2.7 La especificación de la entidad FULLADD, representada en la figura 2.8, se realiza en Gi lar do ni - Or oz co forma similar a la del medio sumador de la figura 2.4. Gilardoni - Orozco - Cayssials Figura 2.8 2-6 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S La figura 2.9 describe una posible implementación de la arquitectura de FULLADD. Cada una de las sentencias ubicadas entre "BEGIN" y "END" crea una instancia de otra La bo ra to rio de Si ste ma sD igi tal es - entidad. Es necesario definir las señales internas I1, I2 e I3 con la palabra reservada SIGNAL para poder interconectar las distintas arquitecturas instanciadas. Figura 2.9 De esta manera, u1 será una instancia de la entidad HALFADD definida anteriormente. La sintaxis de esta definición consiste en el nombre de la instancia (u1) seguida por ":" y el Gi lar do ni - Or oz co -C ay ss ial s- nombre de la entidad instanciada (HALFADD). Luego debe figurar la palabra reservada Gilardoni - Orozco - Cayssials Figura 2.10 2-7 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S “PORT MAP” definiendo entre paréntesis el nombre que cada una de las señales de la entidad tendrá en la instancia definida. 4.4 Declaraciones La bo ra to rio de Si ste ma sD igi tal es - En la figura 2.10 se representa el efecto de instanciar u1 a la entidad HALFADD. Existen dos tipos de declaraciones que pueden realizarse localmente en una arquitectura. Estos dos tipos son las señales locales que se utilizarán en la arquitectura y las referencias a las entidades HALFADD y ORGATE, conocidas como componentes. En el diseño de la arquitectura FULLADD de la figura 2.9 las señales I1, I2, e I3 son locales a dicha arquitectura. Éstas no son ni entradas ni salidas, ya que son internas a FULLADD y, por lo tanto, deben ser declaradas al comienzo de la arquitectura usando la palabra reservada “SIGNAL”. Antes de realizar una instancia de una entidad, tal como U1 fue instanciada de HALFADD, es necesario declarar la entidad HALFADD dentro de la arquitectura de FULLADD. Esto es llamado declaración de componentes y se realiza en el lugar marcado con "other declarations" en la arquitectura de FULLADD. La declaración de los componentes se realiza en el mismo estilo de sintaxis que la entidad. Generalmente se desea que el componente tenga el mismo nombre y la misma lista de ports que la entidad utilizada. Esto es totalmente factible puesto que no existe -C ay ss ial s- ningún tipo de restricción en el nombre del componente. Gi lar do ni - Or oz co La declaración del componente HALFADD es la siguiente: Gilardoni - Orozco - Cayssials Figura 2.11 2-8 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S Entonces el código completo para el diseño del FULLADD propuesto, es el siguiente: entity FULLADD is La bo ra to rio de Si ste ma sD igi tal es - port (A, B, CIN : in bit; SUM, CARRY : out bit); end FULLADD; architecture STRUCT of FULLADD is signal I1, I2, I3 : bit; component HALFADD port (A,B : in bit; SUM, CARRY : out bit); end component; component ORGATE port (A,B : in bit; Z : out bit); end component; begin u1:HALFADD port map(A,B,I1,I2); u2:HALFADD port map(I1,CIN,SUM,I3); -C ay ss ial s- u3:ORGATE port map(I3,I2,CARRY); end STRUCT; 4.5 Configuraciones Consideremos que un diseño jerárquico completo consiste de entidades, donde cada una de las cuales puede tener múltiples arquitecturas que describan distintos comportamientos. Or oz co El objetivo de la configuración especifica cuál arquitectura va a ser usada por cada una de las entidades. En caso de que no se especifique información de configuración para una entidad, la última arquitectura que es sintetizada por el simulador, será la única que se utilizará Gi lar do ni - durante la simulación. Gilardoni - Orozco - Cayssials 2-9 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. La bo ra to rio de Si ste ma sD igi tal es - UN S Gilardoni – Orozco - Cayssials Figura 2.12 Consideremos la siguiente configuración: Figura 2.13 El simulador utilizará para B y C la arquitectura Y por ser la última arquitectura -C ay ss ial s- sintetizada. 4.6 Configuración por Defecto Es común que un diseño completo sólo tenga una arquitectura y, en teoría, no requeriría una configuración. Algunos simuladores lo permiten, mientras que otros requieren al menos una configuración por defecto (“default configuration”). Or oz co Es importante notar que siempre que se utilice la configuración por defecto se realizará una especificación más portable. Gi lar do ni - La siguiente figura muestra cómo es una configuración por defecto: Gilardoni - Orozco - Cayssials 2-10 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. La bo ra to rio de Si ste ma sD igi tal es - UN S Gilardoni – Orozco - Cayssials Figura 2.14 Una configuración tiene nombre propio y está asociada con la entidad del nivel más alto de la jerarquía. 4.7 Procesos y tipos Un proceso es una región de código VHDL dentro de la cual las sentencias son ejecutadas en secuencia. Un proceso existe dentro de una arquitectura y múltiples procesos Gi lar do ni - Or oz co en VHDL. -C ay ss ial s- interactúan con cada uno de los otros concurrentemente. La figura 2.15 resalta un proceso Gilardoni - Orozco - Cayssials Figura 2.15 2-11 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S Cualquier diseño en lenguaje VHDL es considerado por el simulador como una colección de procesos. Cada proceso ejecuta sus propias sentencias en secuencia y los La bo ra to rio de Si ste ma sD igi tal es - múltiples procesos interactúan concurrentemente como lo muestra la siguiente figura. Figura 2.16 No existe ninguna limitación sobre el número de procesos que puede contener una arquitectura. Cada señal en un diseño en VHDL tiene asociado un TIPO. Un tipo define el conjunto -C ay ss ial s- de valores que pueden ser asignados a la señal. Existen tipos pre definidos en el lenguaje estándar, pero el usuario puede definir sus propios tipos. Un ejemplo es el tipo pre definido "bit", el cual puede tener los valores “0” y “1”. Gi lar do ni - Or oz co La figura 2.17 muestra los tipos pre definidos y algunos definidos por el usuario. Gilardoni - Orozco - Cayssials Figura 2.17 2-12 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S 4.8 Package Un package contiene una colección de definiciones que pueden ser referenciadas por La bo ra to rio de Si ste ma sD igi tal es - distintos diseños en forma simultánea. Colocando definiciones que son comunes entre los diseños, permite al equipo de diseño trabajar más consistentemente. Figura 2.18 Un package es una unidad de diseño separada en VHDL tal como lo son las entidades, Gi lar do ni - Or oz co -C ay ss ial s- arquitecturas y configuraciones. Figura 2.19 Un package puede contener definiciones de valores constantes, tipos de datos definidos por el usuario, declaración de componentes, o sub programas de código VHDL repartidos entre diferentes diseños. Gilardoni - Orozco - Cayssials 2-13 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. La bo ra to rio de Si ste ma sD igi tal es - UN S Gilardoni – Orozco - Cayssials Figura 2.20 4.9 Esquema Completo Con los principales bloques de construcción y conceptos de VHDL, es posible obtener un esquema completo de cómo se relacionan dichos bloques en un diseño típico. La jerarquía de un diseño completo está definida por múltiples entidades, las cuales tienen al menos una arquitectura. Sólo una arquitectura es referenciada por cada entidad en -C ay ss ial s- una simulación particular. Figura 2.21 Varias de estas entidades y arquitecturas referencian a uno o más packages de Gi lar do ni - Or oz co definiciones comunes. Gilardoni - Orozco - Cayssials Figura 2.22 2-14 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S El enlace entre cada nivel de jerarquía y las especificaciones de cuál arquitectura va a La bo ra to rio de Si ste ma sD igi tal es - ser usada es llevada a cabo por la configuración. Figura 2.23 Finalmente, el máximo nivel de jerarquía es usualmente usado para contener al diseño y a los estímulos que serán aplicados durante la simulación. -C ay ss ial s- Figura 2.24 5. Señales y Tipos de Datos A continuación se describe la forma en que pueden ser asignadas las señales en VHDL y un resumen de reglas, relativas al uso de los tipos de datos. Primero se considera el Or oz co concepto de tipo de dato y los diferentes tipos estándar que son definidos como parte del lenguaje. Luego se describe el concepto de un array (arreglo) y se proponen diferentes ejemplos de cómo simples bits y arreglos de señales pueden ser manipulados dentro de Gi lar do ni - VHDL. Se describe también la forma en que el diseñador puede especificar sus propios tipos de datos, denominados enumerated type (tipos enumerados). Finalmente se detalla la definición de un tipo de dato conocido como "standard logic" (lógica estándar), el cual ha sido adoptado como estándar en la descripción de señales en VHDL. Gilardoni - Orozco - Cayssials 2-15 Laboratorio de Sistemas Digitales - UNS 5.1 Concepto de Tipo y Especificación UN S Diciembre de 1999. Gilardoni – Orozco - Cayssials El lenguaje VHDL define que cada señal debe tener un tipo de dato asociado cuando la La bo ra to rio de Si ste ma sD igi tal es - señal es declarada. El tipo de dato de una señal define el conjunto de valores que pueden ser asignados a dicha señal. En el ejemplo de la figura 2.25, no es posible asignar a N_SUM una señal que pertenezca a otro tipo de dato que no sea el tipo bit. Figura 2.25 Una señal es, generalmente, declarada en la sección PORT de una ENTIDAD o dentro -C ay ss ial s- de una declaración de señal explícita en una ARQUITECTURA. Cuando una señal es declarada en algunos de esos lugares, el tipo asociado debe ser especificado. El tipo de Gi lar do ni - Or oz co dato en el siguiente ejemplo es “BIT”. Figura 2.26 Cuando se asigna un valor a una señal, el tipo de dato a ambos lados del operador de asignación debe ser el mismo. En el siguiente ejemplo, el resultado de “A xor B” debe ser de tipo “BIT” para poder ser asignado a “SUM”, que también es tipo “BIT”. Gilardoni - Orozco - Cayssials 2-16 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. La bo ra to rio de Si ste ma sD igi tal es - UN S Gilardoni – Orozco - Cayssials Figura 2.27 5.2 Tipos de Datos Estándar Los tipos de datos estándar son especificados como código fuente VHDL y el lenguaje -C ay ss ial s- define que ellos deben encontrarse en un PACKAGE denominado STANDARD. Figura 2.28 A continuación se describen los tipos de datos más importantes definidos en el package llamado STANDARD. El tipo de dato boolean define dos valores: verdadero y falso. El tipo de dato time es Gi lar do ni - Or oz co usado para modelar simulaciones temporales y consiste en valor y unidad. Gilardoni - Orozco - Cayssials Figura 2.29 2-17 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S El tipo de dato bit puede ser usado para modelar un simple bit y consiste en los valores “0” y “1”. El tipo de dato bit_vector define una colección de bits y puede ser usado para La bo ra to rio de Si ste ma sD igi tal es - modelar una estructura de BUS. Figura 2.30 Como el nombre lo indica, el tipo de dato character define un simple carácter en VHDL y el tipo de dato string define un arreglo o cadena de caracteres. Figura 2.31 -C ay ss ial s- VHDL soporta los tipos de datos enteros y reales. Figura 2.32 Or oz co 5.3 Asignación de Señales VHDL define que la asignación de un nuevo valor a una señal, debe realizarse mediante la "sentencia de asignación de señal" utilizando el símbolo "<=". Gi lar do ni - La asignación define un driver sobre la señal. El concepto de driver es el mismo que el utilizado en una compuerta lógica en un hardware real, es decir, la salida toma el valor de la entrada sin que ésta se modifique. Gilardoni - Orozco - Cayssials 2-18 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. La bo ra to rio de Si ste ma sD igi tal es - UN S Gilardoni – Orozco - Cayssials Figura 2.33 Figura 2.34 -C ay ss ial s- Si más de una asignación es hecha a una señal, implica que la señal tiene más de un driver. En este caso, la señal debe ser declarada como una clase de tipo especial, conocido como tipo resoluble. Un tipo resoluble tiene una llamada a función asociada, con la que se Gi lar do ni - Or oz co “resuelve” el valor final de la señal. Gilardoni - Orozco - Cayssials Figura 2.35 2-19 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S Todos los tipos de datos enunciados anteriormente no son del tipo resoluble, por lo tanto son llamados irresolubles y no permiten tener más de un driver. Más adelante se 5.4 Arreglos (Arrays) La bo ra to rio de Si ste ma sD igi tal es - describe el uso de tipos de datos resolubles. Un arreglo es una colección de objetos, donde cada uno de ellos es del mismo tipo de dato. El lenguaje define dos tipos de arreglos estándar: bit_vector y string. Figura 2.36 El rango o dimensión de un arreglo es definido cuando el mismo es declarado. El ejemplo de la figura 2.37 muestra dos bit_vectors, cada uno de ellos de 4 bits de ancho. -C ay ss ial s- El rango puede ser declarado usando la notación “to” o “downto”. Figura 2.37 Dos arreglos pueden ser asignados el uno al otro si el tamaño y el tipo es el mismo. El siguiente diagrama describe la forma en que se realiza la asignación de vectores. Se debe Or oz co notar que la asignación es por posición y no por índice. Una porción puede ser referenciada utilizando “to” o “downto”. Puede referenciarse también un elemento simple del arreglo. Debe tenerse en cuenta que la “dirección” de la porción, según se haya usado “to” o “downto”, debe ser la misma que se uso en la Gi lar do ni - declaración del arreglo como se muestra en la figura 2.39. Gilardoni - Orozco - Cayssials 2-20 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. La bo ra to rio de Si ste ma sD igi tal es - UN S Gilardoni – Orozco - Cayssials -C ay ss ial s- Figura 2.38 Figura 2.39 5.5 Concatenación y Agregado Los métodos de concatenación y agregado son utilizados para asociar señales y asignarlas a un objeto arreglo. VHDL permite asociar bits y vectores para formar estructuras de arreglos. Esto es conocido como concatenación y usa el operador "&". El Or oz co siguiente ejemplo muestra cómo simples bits pueden concatenarse para formar nuevos Gi lar do ni - vectores. Gilardoni - Orozco - Cayssials 2-21 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. La bo ra to rio de Si ste ma sD igi tal es - UN S Gilardoni – Orozco - Cayssials Figura 2.40 Otro método de asignación definido en VHDL es el agregado. Un agregado está Figura 2.41 Or oz co -C ay ss ial s- contenido entre paréntesis y la asignación a cada elemento está separada por comas. Mediante el uso de agregados es posible especificar el nombre de un elemento de un arreglo. De esta manera, la asignación de un elemento del arreglo puede realizarse por nombre además de realizarlo por posición. El siguiente ejemplo muestra una asignación Gi lar do ni - por nombre. Gilardoni - Orozco - Cayssials 2-22 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. La bo ra to rio de Si ste ma sD igi tal es - UN S Gilardoni – Orozco - Cayssials Figura 2.42 Los agregados pueden hacer uso de la sentencia “others”, la cual asignará un valor a todos los elementos restantes del arreglo que no hayan sido especificados. Figura 2.43 Finalmente, no todas las herramientas de síntesis soportan el uso de agregados por lo que es necesario utilizar concatenación en estas herramientas, para manipular arreglos. 5.6 Definición de Tipos Gi lar do ni - Or oz co de datos. -C ay ss ial s- A continuación se detalla la forma en que el diseñador puede definir sus propios tipos Figura 2.44 Un tipo definido por el usuario, en VHDL, es conocido como un tipo enumerado, (“enumerated type”). Los tipos comúnmente son definidos dentro de un package, Gilardoni - Orozco - Cayssials 2-23 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S arquitectura o proceso y la mayoría de las herramientas de síntesis son capaces de sintetizar VHDL conteniendo tipos enumerados. La bo ra to rio de Si ste ma sD igi tal es - Para definir un tipo enumerado es necesario especificar el nombre del tipo, seguido de la lista de valores que componen al mismo, separados por comas. La sintaxis de la declaración es mostrada en la figura 2.45. Figura 2.45 La definición del tipo de dato, permite definir señales de ese tipo. En el siguiente ejemplo se declara la señal STATE como tipo de dato MY_STATE (definido en la figura 2.45), indicando asignaciones válidas e inválidas. Debe tenerse en cuenta que no pueden asignarse a la señal STATE otros valores que no hayan sido especificados en la definición -C ay ss ial s- de MY_STATE. Figura 2.46 Usualmente el tipo de dato enumerado tiene un número mínimo de bits requeridos para representar todos los valores posibles. El siguiente ejemplo muestra cómo con 2 bits se Gi lar do ni - Or oz co representan 4 valores. Gilardoni - Orozco - Cayssials Figura 2.47 2-24 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S 5.7 Lógica MultiValuada Existen situaciones en que la utilización de simples valores binarios no es suficiente La bo ra to rio de Si ste ma sD igi tal es - para simular o especificar un diseño. En una simulación puede ser necesario representar otros valores de la señal como, por ejemplo, desconocido (unknown), no inicializado (un_initialized), alta impedancia (high impedance) y “drive strengths”. En la síntesis puede ser necesario especificar condiciones de “don’t care”. Figura 2.48 La necesidad de especificar tipos de datos no binarios define el sistema de Lógica Multi Valuada, o sistema MVL, que es un tipo de datos enumerado. Este tipo de dato define -C ay ss ial s- caracteres para representar los valores o estados mencionados en la figura 2.48. Hasta principios de 1992 no existía un standard en esta área y cada proveedor de herramientas de síntesis y simulación usaba su propio sistema MVL. Actualmente el standard define un sistema de Lógica Multi Valuada (MVL) con nueve valores o estados. Este estándar está separado del que define el lenguaje VHDL y es el standard IEEE1164. Or oz co Seguidamente se detalla este tipo de dato conocido como "STANDARD LOGIC". El standard 1164 está definido en código fuente VHDL y describe un tipo de dato llamado “std_ulogic” (generalmente pronunciado “standard u logic”), el cual define los Gi lar do ni - nueve posibles estados. El siguiente diagrama muestra la definición de cada estado. Gilardoni - Orozco - Cayssials 2-25 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. La bo ra to rio de Si ste ma sD igi tal es - UN S Gilardoni – Orozco - Cayssials Figura 2.49 El tipo “std_ulogic” es un tipo de dato irresoluble y sólo puede tener un driver. Este es -C ay ss ial s- el origen de la letra “u”, por significar irresoluble en idioma ingles. Figura 2.50 La versión resoluble del tipo de dato "std_ulogic" es el tipo de dato denominado “std_logic”. Este tipo de dato puede tener más de un driver, conservando la misma Gi lar do ni - Or oz co cantidad de estados (nueve). Gilardoni - Orozco - Cayssials Figura 2.51 2-26 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials La bo ra to rio de Si ste ma sD igi tal es - standard_logic_1164. A continuación se describe cómo referenciar tal package. UN S Estos tipos de definiciones están contenidas dentro de un package llamado Figura 2.52 El package también contiene la definición de arreglos de std_logic y std_ulogic conocidos como std_logic_vector y std_ulogic_vector, respectivamente. Estos tipos de datos pueden ser utilizados para definir estructuras de bus, en la forma similar a la -C ay ss ial s- realizada con el tipo de dato irresoluble bit_vector. Figura 2.53 5.8 Usando Lógica Standard Or oz co Descriptas las definiciones de la lógica standard, se realizan a continuación algunos ejemplos de cómo puede ser usada. El package de definiciones está contenido dentro de una librería llamada IEEE. Esta es necesaria para referenciar a la librería y al package, como muestra la figura 2.54. Gi lar do ni - Es necesario incluir dichas líneas en la especificación para poder definir entidades que utilicen los tipos de datos de lógica STANDARD. Gilardoni - Orozco - Cayssials 2-27 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. La bo ra to rio de Si ste ma sD igi tal es - UN S Gilardoni – Orozco - Cayssials Figura 2.54 Como muestra la figura 2.55, es posible asignar libremente objetos del tipo std_logic a objetos del tipo std_ulogic, y viceversa. Figura 2.55 Si existen múltiples drivers sobre una señal, debe utilizarse el tipo std_logic, ya que es Gi lar do ni - Or oz co -C ay ss ial s- ilegal si lo hacemos con el tipo de dato irresoluble std_ulogic. Figura 2.56 Los visto en este capítulo sobre el lenguaje de especificación de hardware VHDL, es sólo una introducción al mismo, y es por ello que no se profundizo en la sintaxis, ni en las sentencias componentes del lenguaje. Gilardoni - Orozco - Cayssials 2-28 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S El objetivo de este capítulo fue describir las estructuras y conceptos básicos del lenguaje para que nos sea posible tomar una herramienta de diseño cualquiera, como por La bo ra to rio de Si ste ma sD igi tal es - ejemplo el software MAX+PLUS II de ALTERA, y poder describir un hardware en Gi lar do ni - Or oz co -C ay ss ial s- VHDL. Gilardoni - Orozco - Cayssials 2-29 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials La bo ra to rio de Si ste ma sD igi tal es - UN S Capítulo 3 En este capítulo se describe la estructura general de diseño de una especificación de hardware en AHDL como así también un conjunto de secciones y sentencias que componen este lenguaje. AHDL: Un Lenguaje de Descripción de Hardware Introducción AHDL es un lenguaje de especificación desarrollado por ALTERA que se basa en la descripción del hardware a través de su comportamiento (behavior). El lenguaje AHDL utiliza ecuaciones lógicas, variables, constantes, funciones, operadores aritméticos, tablas de verdad y expresiones condicionales, en forma similar a la de un lenguaje de programación de alto nivel. Está especialmente orientado al diseño de lógica combinacional compleja, máquinas de estado, tablas de verdad y lógica parametrizada. El -C ay ss ial s- lenguaje AHDL está completamente integrado en el software de desarrollo MAX+PLUS II. El software MAX+PLUS II brinda la posibilidad de usar plantillas de diseño (Templates), que permiten en forma rápida, insertar en el archivo de diseño la estructura y sintaxis correcta de las diferentes secciones y sentencias soportadas por el lenguaje. Un archivo de diseño realizado en lenguaje AHDL debe contener como mínimo una sección Gi lar do ni - Or oz co de subdiseño y una sección lógica, siendo opcionales las demás secciones. Gilardoni - Orozco - Cayssials 3-1 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S Estructura de diseño La figura 3.1 muestra un esquema de las diferentes sentencias y secciones componentes Figura 3.1 Gi lar do ni - Or oz co -C ay ss ial s- La bo ra to rio de Si ste ma sD igi tal es - de un diseño en lenguaje AHDL. Gilardoni - Orozco - Cayssials 3-2 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S 1. Sentencia "Title" La bo ra to rio de Si ste ma sD igi tal es - La sentencia title (Título) permite agregar un comentario en el archivo de reporte generado automáticamente por el software de desarrollo. El siguiente ejemplo muestra la sintaxis de una sentencia title. TITLE "Controlador de Memorias Dinámicas en SIMM de 72 contactos"; La sentencia title tiene las siguientes características: Debe comenzar con la palabra reservada TITLE, seguida por un texto encerrado entre comillas, finalizando con un punto y coma. El texto contenido en el cuerpo de la sentencia puede contener como máximo un total de 255 caracteres Para incluir comillas dentro del texto deben usarse dos comillas, por ejemplo: TITLE " ""MAX 7000"" Controlador de Display"; Sólo puede utilizarse una sola vez en un archivo .tdf. Debe ser colocada fuera de todas las otras secciones del diseño. -C ay ss ial s- 2. Sentencia "Parameters" La sentencia parameters (Parámetros) permite declarar uno o más parámetros para controlar la implementación del diseño en función de los valores asignados al momento de la síntesis de la lógica. También permite crear un diseño parametrizado para ser utilizado como librería de otro Or oz co diseño. ALTERA, provee una serie de librerías llamadas librerías de módulos parametrizados (LPM), que pueden ser usadas libremente pero deben ser declaradas y luego instanciadas en el archivo donde quieran utilizarse. En el momento de realizar la instancia de dicha librería se le deben pasar los parámetros Gi lar do ni - necesarios. Si observamos el siguiente ejemplo y suponemos que es la declaración de parámetros de una librería de módulos parametrizados, podemos ver que existen parámetros con y sin valores asignados. Al instanciar dicha función estaremos obligados a pasar los parámetros que no posean un valor asignado por defecto, en este caso el Gilardoni - Orozco - Cayssials 3-3 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials omitirse o ser incluidos si se desea modificarlos. PARAMETERS ( La bo ra to rio de Si ste ma sD igi tal es - El siguiente ejemplo muestra el uso de la sentencia parameters. UN S parámetro ANCHO. Los parámetros que tengan asignados valores por defecto pueden NOMBRE = "miarchivo.mio", ANCHO, BYTE = 8, PALABRA = 2*BYTE ); La sentencia parameters posee las siguientes características: Comienza con la palabra reservada PARAMETERS seguida por una lista de uno o más parámetros, encerrados entre paréntesis. La Sentencia finaliza con un punto y coma. Los parámetros de la lista deben ser separados por comas y pueden asignarse opcionalmente valores por defecto usando el signo igual (=). En la lista mostrada arriba, sólo el parámetro ANCHO no tiene asignado un valor por defecto. -C ay ss ial s- Los nombres de los parámetros pueden ser definidos por el usuario o ser parámetros predefinidos por ALTERA. Los valores asignados a los parámetros pueden ser cadenas de caracteres encerrados entre comillas, valores numéricos o expresiones algebraicas entre parámetros ya declarados. Or oz co El uso de la sentencia parameters implica respetar las siguientes reglas: Un parámetro puede ser usado sólo después de ser declarado. Gi lar do ni - Cada nombre de parámetro debe ser único. No pueden contener espacios. El uso del carácter underline "_" para separar palabras está permitido. Puede ser usada un número arbitrario de veces dentro del mismo archivo de diseño. Debe ser colocada fuera de todas las otras secciones del diseño. Gilardoni - Orozco - Cayssials 3-4 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S 3. Sentencia "Include" La bo ra to rio de Si ste ma sD igi tal es - La sentencia include permite importar texto desde un archivo con extensión .inc, al archivo que contiene la sentencia. El siguiente ejemplo muestra el uso de la sentencia include: INCLUDE "lpm_counter.inc"; La sentencia include posee las siguientes características: Comienza con la palabra reservada INCLUDE seguida por el nombre del archivo a incluir, encerrado entre comillas. La Sentencia finaliza con un punto y coma. Si la extensión del archivo a incluir no es escrita, el software asume por defecto que la extensión es .inc. La sentencia include es utilizada para incluir prototipos de funciones. Se llaman prototipos de funciones a la descripción exterior de una función, es decir, la definición de sus puertos de entrada y salida, sin describir su funcionamiento interno. El diseñador puede generar un archivo de tipo include a partir del archivo de diseño -C ay ss ial s- TDF, utilizando la opción Create Default Include File del software MAX+PLUS II. Un ejemplo del contenido de un archivo include, llamado dramcontrol.inc, es el siguiente: -- Copyright (C) 1988-1998 ALTERA Corporation -- MAX+PLUS II Include File -- Version 8.2 1/8/98 Or oz co -- Created: Thu Sep 16 20:02:23 1999 FUNCTION dramcontrol (clk, /read, /write, /output_enable, address_in[15..0]) Gi lar do ni - RETURNS (bidir_up[7..0], bidir_simm[7..0], address_out[9..0], /write_dram, /ras, /cas[3..0], ready); Como se observa en el archivo dramcontrol.inc, no se encuentra la descripción de la función. La descripción de la función se encuentra en el archivo TDF del mismo nombre Gilardoni - Orozco - Cayssials 3-5 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials sentencia include. La bo ra to rio de Si ste ma sD igi tal es - El uso de la sentencia include implica respetar las siguientes reglas: UN S dramcontrol.tdf, que debe encontrarse en el mismo directorio del archivo que contiene la Puede ser usada un número arbitrario de veces dentro del mismo archivo de diseño. Debe ser colocada fuera de todas las otras secciones del diseño. 4. Sentencia "Constant" La sentencia constant (Constante) permite sustituir un valor numérico o una expresión aritmética por un nombre simbólico, de modo tal, que el código sea más intuitivo y mejore su legibilidad. El siguiente ejemplo muestra el uso de la sentencia constant. CONSTANT Limite_Superior = 130; CONSTANT BAR = 1 + 2 DIV 3 + LOG2(256); CONSTANT FOO = 1; -C ay ss ial s- CONSTANT FOO_PLUS_ONE = FOO + 1; La sentencia constant posee las siguientes características: Comienza con la palabra reservada CONSTANT, seguida por un nombre simbólico, un signo igual (=), y un número o una expresión aritmética. La Sentencia finaliza con un punto y coma. Or oz co Una vez declarada una constante esta puede ser utilizada a lo largo de todo el archivo de diseño. Los nombres de las constantes deben ser únicos y pueden ser utilizados un Gi lar do ni - número arbitrario de veces. Debe ser utilizada fuera de las otras secciones del diseño. Gilardoni - Orozco - Cayssials 3-6 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S 5. Sentencia "Define" La bo ra to rio de Si ste ma sD igi tal es - La sentencia define permite especificar una función matemática que retorna valores en función de los argumentos que recibe. El siguiente ejemplo muestra la definición y el uso de una función, que devuelve el argumento de mayor valor, entre los que recibe como parámetros: DEFINE MAX(a,b) = (a > b) ? a : b; --valor1 y valor2 definidos previamente CONSTANT maximo = MAX(valor1, valor2); El operador ? funciona de la siguiente manera: <expresión 1> ? <expresión 2> : <expresión 3>; Si la expresión 1 es verdadera (en el ejemplo anterior, si a es mayor que b), la función devuelve el resultado de la expresión 2, en caso contrario la función devuelve como resultado el valor de la expresión 3. La sentencia define posee las siguientes características: -C ay ss ial s- Comienza con la palabra reservada DEFINE, seguida por un nombre simbólico, seguido por una lista de uno o más argumentes separados por comas y encerrados entre paréntesis. Un signo igual separa la lista de argumentos de la expresión aritmética que implementa la función. La sentencia finaliza con un punto y coma. Una función puede ser definida en términos de funciones definidas previamente. Or oz co Por ejemplo, la siguiente función está basada en la función MAX definida Gi lar do ni - anteriormente: DEFINE Positivo(x) = MAX(0,x) + 1; Si la función no posee una lista de argumentos, se comportará como la declaración de una constante. Un vez definida, la función puede utilizarse en cualquier parte del archivo de diseño un número arbitrario de veces. Debe ser definida fuera de las otras secciones del diseño. Gilardoni - Orozco - Cayssials 3-7 Laboratorio de Sistemas Digitales - UNS 6. Sentencia "Function Prototype" UN S Diciembre de 1999. Gilardoni – Orozco - Cayssials La bo ra to rio de Si ste ma sD igi tal es - La sentencia function prototype (Prototipo de función) posee la misma función que los símbolos de un archivo esquemático. Ambos proveen una mínima descripción de la función lógica que ellos representan, listando su nombre y ports de entrada, salida y bidireccionales. El siguiente ejemplo muestra el uso de la sentencia function prototype en una función parametrizada y no parametrizada: FUNCTION lpm_add_sub (dataa[LPM_WIDTH-1..0], datab[LPM_WIDTH-1..0]) WITH (LPM_WIDTH, LPM_REPRESENTATION, LPM_DIRECTION, ADDERTYPE) RETURNS (result[LPM_WIDTH-1..0], count, overflow); FUNCTION compare (a[3..0], b[3..0]) RETURNS (less, equal, greater); La sentencia function prototype posee las siguientes características: Comienza con la palabra reservada FUNCTION, seguida por el nombre de la función, luego por una lista de ports de entrada separados por comas y -C ay ss ial s- encerrados entre paréntesis. En funciones parametrizadas, se utiliza la palabra reservada WITH seguida por una lista de parámetros separados por comillas. Por último la palabra reservada RETURN seguida por una lista de ports de salida y/o bidireccionales. La sentencia finaliza con un punto y coma. Debe colocarse fuera de la sección de Subdiseño del archivo TDF y debe ser colocada antes que la función lógica sea instanciada. Or oz co 7. Sentencia "Options" La sentencia options especifica la opción BIT0 para especificar la posición del bit más Gi lar do ni - significativo de un grupo de bits. Comienza con la palabra reservada OPTIONS seguida por la opción BIT0. La sentencia finaliza con un punto y coma. El valor por defecto se BIT0 = LSB (Bit Menos Significativo). Por ejemplo, si se define el grupo a[31..0]; a[0] corresponde al bit menos significativo y a[31] al bit más significativo. Gilardoni - Orozco - Cayssials 3-8 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials OPTIONS BIT0 = MSB; La bo ra to rio de Si ste ma sD igi tal es - En este caso el bit 0 es especificado como el bit más significativo. UN S Un ejemplo del uso de esta sentencia sería: 8. Sentencia "Assert" La sentencia assert permite verificar la validez de cualquier expresión que utilice parámetros, números y funciones. El siguiente ejemplo muestra el uso de la sentencia assert: ASSERT (ANCHO > 0) REPORT "El Ancho (%) debe ser un entero positivo" ANCHO SEVERITY ERROR; La sentencia assert posee las siguientes características: Comienza con la palabra reservada ASSERT seguida por una expresión aritmética encerrada entre paréntesis. Cuando el resultado de dicha expresión es falso, el mensaje que sigue a la palabra reservada REPORT es mostrado durante la síntesis del proyecto. -C ay ss ial s- Luego de la palabra reservada REPORT se escribe el mensaje junto con la opción de sustituir el carácter % con el valor de una variable. La palabra reservada opcional SEVERITY es seguida por el nivel de severidad del mensaje. Los valores posibles son ERROR, WARNING o INFO. Si no se especifica la opción SEVERITY, el valor por defecto es ERROR. El nivel de severidad ERROR detiene la síntesis del proyecto, el nivel WARNING e INFO Or oz co sólo muestran el mensaje deseado sin detener la síntesis. Gi lar do ni - 9. Sección de Subdiseño La sección de subdiseño es el lugar del archivo de diseño donde se realiza la declaración de los ports de entrada, salida y bidireccionales. El siguiente ejemplo muestra la sección de subdiseño: SUBDESIGN dramcontrol ( Gilardoni - Orozco - Cayssials 3-9 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials : INPUT = VCC; address[16..0] : OUTPUT; datos[7..0] : BIDIR; UN S /ras, /cas La bo ra to rio de Si ste ma sD igi tal es - ) La sección de subdiseño posee las siguientes características: Comienza con la palabra reservada SUBDESIGN seguida por el nombre de la sección que debe ser el mismo que el nombre del archivo TDF. Los nombres de las señales son separados por comas, seguidos por dos puntos ":" y el tipo del port. Los tipos de ports pueden ser INPUT, OUTPUT, BIDIR, MACHINE INPUT o MACHINE OUTPUT. Las palabras reservadas MACHINE INPUT y MACHINE OUTPUT son usadas para importar y exportar máquinas de estado entre archivos TDF y otros archivos de diseño. Es posible asignar un valor por defecto (VCC o GND) después de definir el tipo de port. -C ay ss ial s- 10. Sección de Declaración de Variables La sección de declaración de variables, es una sección opcional en donde se declaran y/o generan las variables usadas en la sección lógica. Las variables en AHDL son similares a las variables en un lenguaje de programación de alto nivel. Ellas son utilizadas para definir lógicas y señales internas. El siguiente ejemplo muestra una sección de declaración de variables típica: Or oz co VARIABLE a, b, c : NODE; temp : halfadd; ts_node : TRI_STATE_NODE; Gi lar do ni - IF DEVICE_FAMILY == "FLEX8000" GENERATE 8kadder : flex_adder; d,e : NODE; ELSE GENERATE 7kadder : pterm_adder; f,g : NODE; END GENERATE; Gilardoni - Orozco - Cayssials 3-10 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S Se observa en el ejemplo anterior, la existencia de la estructura IF GENERATE, que permite sintetizar diferentes códigos en función del resultado de la expresión evaluada por parametrizados (LPM). La bo ra to rio de Si ste ma sD igi tal es - la estructura. Es muy frecuente ver el uso de esta estructura en las librerías de módulos La sección de declaración de variables puede incluir una o más de las siguientes sentencias o construcciones: Declaración de Instancias Declaración de Nodos Declaración de Registros Declaración de Maquinas de Estado Declaración de Alias de Maquinas de Estado 10.1 Declaración de Instancias Cuando se desea utilizar funciones ya definidas en un nuevo proyecto, éstas deben estar definidas en el mismo archivo de diseño o deben ser incluidas con la sentencia include. Luego pueden ser declaradas como variables con una declaración de instancias en la sección de declaración de variables. Después de ser declaradas, los ports de entrada y salida de cada una de las funciones pueden ser utilizados como ports en la sección lógica. -C ay ss ial s- Por ejemplo, si se desea incorporar las funciones comparador y sumador a partir de las funciones ya definidas, compare y lpm_add_sub, la declaración de instancias puede ser realizada como se muestra a continuación: VARIABLE comparador : compare; sumador : lpm_add_sub WITH (LPM_WIDTH = 8); Or oz co La variables comparador y sumador son instancias de las funciones compare y lpm_add_sub, las cuales tienen las siguientes entradas y salidas: : INPUT; -- Entradas de comparador less, equal, greater : OUTPUT; -- Salidas de comparador a[8..1], b[8..1] : INPUT; -- Entradas de sumador sum[8..1] : OUTPUT; -- Salidas de sumador Gi lar do ni - a[3..0], b[3..0] Gilardoni - Orozco - Cayssials 3-11 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S Por lo tanto, es posible utilizar los siguientes ports de comparador y sumador en la sección lógica, de la siguiente manera: comparador.greater La bo ra to rio de Si ste ma sD igi tal es - comparador.a[], comparador.b[], comparador.less, comparador.equal, sumador.dataa[], sumador.datab[], sumador.result[] 10.2 Declaración de Nodos Un nodo representa un cable transmitiendouna señal que viaja entre diferentes componentes lógicos de un archivo de diseño. La declaración de nodos permite asignarle un nombre o símbolo a una señal lógica interna. Una de las ventajas de asignar un nombre a un nodo es la posibilidad de ser identificado en la simulación del proyecto, ya que en caso contrario será el software de síntesis el que asigne una identificación al nodo. AHDL soporta dos tipos de nodos denominados: NODE y TRI_STATE_NODE. El siguiente ejemplo muestra una declaración de nodos: SUBDESIGN nodos ( in1, in2, oe1, oe2 salida, out ) cable cable_tri_state BEGIN : OUTPUT; : NODE; -C ay ss ial s- VARIABLE : INPUT; : TRI_STATE_NODE; cable = in1; cable = in2; out = cable; Or oz co cable_tri_state = TRI(in1, oe1); cable_tri_state = TRI(in2, oe2); salida = cable_tri_state; END; Gi lar do ni - En este ejemplo se observa dos usos típicos de nodos. Para el caso del nodo tipo NODE, las asignaciones múltiples de señales, a un mismo nodo, se realizan a través de compuertas AND u OR según sea el valor por defecto de las señales, que intervienen en la asignación, VCC o GND respectivamente. Si no se especifica lo contrario, las señales poseen el valor Gilardoni - Orozco - Cayssials 3-12 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S GND por defecto. Por lo tanto las múltiples asignaciones serán realizadas a través de compuertas OR. La bo ra to rio de Si ste ma sD igi tal es - En el ejemplo las señales in1 e in2 ingresaran a una compuerta OR y el resultado de dicha operación es asignado al nodo cable. Los nodos tipo TRI_STATE_NODE, brindan la posibilidad de cablear directamente las señales y que presenten un estado de alta impedancia para el nodo cuando no están activos. Un nodo TRI_STATE_NODE posee dos señales de entrada y una señal de salida. Las señales de entradas, son el dato y la señal de output enable. La señal de salida es el dato si la entrada output enable está activa o un estado de alta impedancia caso contrario. 10.3 Declaración de Registros La declaración de registros, como su nombre lo indica, permite declarar registros, incluyendo filpflops D, T, JK, y SR (DFF, DFFE, TFF, TFFE, JKFF, JKFFE, SRFF, SRFFE) y latches (LATCH). El siguiente ejemplo muestra la declaración de un flip flop "toogle": VARIABLE FFlop: TFF; Luego de realizar esta declaración se pueden utilizar los ports de entrada y salida de siguiente: -C ay ss ial s- FFlop, ya que se ha instanciado a FFlop como un flip flop T. El formato utilizado es el <instance name>.<port name>: FFlop.t FFlop.clk Or oz co FFlop.clrn FFlop.prn FFlop.q Gi lar do ni - 10.4 Declaración de Maquinas de Estado Es posible crear máquinas de estado declarando el nombre de la máquina, sus estados y opcionalmente el valor binario de estos, en la sección de declaración de variables. El siguiente ejemplo muestra la declaración de una máquina de estados: VARIABLE Gilardoni - Orozco - Cayssials 3-13 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials MACHINE UN S ss : OF BITS (q1, q2, q3) WITH STATES ( La bo ra to rio de Si ste ma sD igi tal es - s1 = B"000", s2 = B"010", s3 = B"111"); El nombre de la máquina de estados es ss y los bits componentes de cada estado son q1, q2 y q3, los cuales son las salidas de los flip flops que implementan la máquina. Los estados son s1, s2 y s3. La declaración de una máquina de estados se compone de: El nombre simbólico, seguido de (:) y la palabra reservada MACHINE. En forma opcional, el nombre de los bits de estado, con las palabras reservadas OF BITS(..). La lista de estados, compuesta por las palabras reservadas WITH STATES(..) con la enumeración de los nombres simbólicos de los estados, separados por comas, con sus asignaciones opcionales. El primer estado listado en la cláusula WITH STATES, (s1, en este ejemplo) será el estado de reset de la máquina de estados. -C ay ss ial s- 10.5 Declaración de Alias de Maquinas de Estado Es posible renombrar una máquina de estados con un nombre temporario utilizando la declaración de alias de máquinas de estados en la sección variable. Un alias puede ser utilizado para renombrar una máquina de estados que ha sido importada al proyecto con la sentencia include. Or oz co El siguiente ejemplo muestra el prototipo de función de una máquina de estados y cómo se declara un alias de dicha máquina. FUNCTION ss_def (clock, reset, count) Gi lar do ni - RETURNS (MACHINE ss_out); M VARIABLE ss : MACHINE; BEGIN ss = ss_def (sys_clk, reset, !hold); Gilardoni - Orozco - Cayssials 3-14 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. UN S Gilardoni – Orozco - Cayssials IF ss == s0 THEN M M END; 11. Sección Lógica La bo ra to rio de Si ste ma sD igi tal es - ELSIF ss == s1 THEN La sección lógica especifica las operaciones lógicas del diseño y es la sección principal de archivo TDF. Esta sección no es opcional y siempre existe en un archivo TDF. Una o más de las siguientes sentencias o construcciones pueden existir en esta sección: Ecuaciones Booleanas. Ecuaciones de Control Booleanas. Sentencia CASE. Sentencia DEFAULTS. Sentencia IF-THEN. Sentencia IF-GENERATE. Sentencia FOR-GENERATE. -C ay ss ial s- Sentencia TRUTH TABLE. La sección lógica también puede incluir sentencias ASSERT. Las palabras reservadas BEGIN y END delimitan la sección lógica y un punto y coma, luego de la palabra END, marca su fin. La sentencia DEFAULTS debe ser la primera de la sección. En la sección lógica es necesario el uso de operadores lógicos, comparadores y Or oz co operadores aritméticos. La siguiente tabla muestra los posibles operadores y sus respectivas prioridades. La prioridad 1 es la más alta y operadores de igual prioridad son Gi lar do ni - evaluados de izquierda a derecha: Operadores - Comparadores Descripción Ejemplo Prioridad + (unario) Positivo +1 1 - (unario) Negativo -1 1 ! NOT !a 1 ^ Exponente a^2 1 Gilardoni - Orozco - Cayssials 3-15 Laboratorio de Sistemas Digitales - UNS Módulo 4 MOD 2 2 DIV división 4 DIV 2 2 * multiplicación a*2 2 LOG2 Logaritmo base2 LOG2(4-3) 2 adición 1+1 3 sustracción 1-1 3 Igualdad numérica 5 == 5 4 Igualdad alfabética "a" == "b" 4 Distinto que 5 != 4 4 Mayor que 5>4 4 Mayor o igual que 5 >= 5 4 Menor que a < b+2 4 Menor o igual que a <= b+2 4 AND a&b 5 + == (numérica) == (alfabética) != > >= < <= & AND a AND b !& NAND (AND invertida) NAND $ XNOR (NOR exclusiva) XNOR NOR 1 !$ 1 a#b -C ay ss ial s- !# 1$1 6 6 1 XNOR 1 OR OR 5 1 XOR 1 !$ # 1 !& 0 1 NAND 0 XOR (OR exclusiva) XOR ? La bo ra to rio de Si ste ma sD igi tal es - MOD UN S Diciembre de 1999. Gilardoni – Orozco - Cayssials 7 a OR b NOR (OR invertida) a !# b 7 a NOR b Ternario (5<4) ? 3:4 8 Or oz co 11.1 Ecuaciones Booleanas. Las ecuaciones booleanas son usadas en la sección lógica para representar la conexión de nodos, la asignación de señales internas, hacia o desde los contactos de Entrada/Salida y realizar operaciones booleanas entre dichas señales. Gi lar do ni - El siguiente ejemplo muestra una ecuación booleana compleja asignada al grupo o conjunto de bits a[]: a[] = ((c[] & -B"001101") + e[6..1]) # (p, q, r, s, t, v); Gilardoni - Orozco - Cayssials 3-16 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S El lado izquierdo de la ecuación puede ser un nombre simbólico (nodo o variable), un port, o un nombre de grupo o conjunto de bits. El lado derecho de la ecuación consiste de la compone. La bo ra to rio de Si ste ma sD igi tal es - una expresión booleana, la cual es evaluada de acuerdo a la prioridad de cada operador que El símbolo igual (=) es usado en ecuaciones booleanas para indicar que el resultado de la expresión booleana del lado derecho es asignado al nodo, variable o grupo de bits del lado izquierdo. En el ejemplo anterior la expresión booleana de la derecha es evaluada de acuerdo a las reglas de prioridad: El número binario B"001101" es negado aritméticamente y transformado al número negativo B"110011" por el operador unario (-) de prioridad 1. Se aplica la operación lógica AND entre el número B"110011" y el grupo c[]. Esta expresión tiene prioridad 2 debido a que está encerrada entre paréntesis. El resultado de la expresión del paso 2 es sumada aritméticamente al grupo e[6..1]. Se aplica la operación lógica OR (#) entre el resultado de la expresión en el Gi lar do ni - Or oz co -C ay ss ial s- paso 3 y el grupo (p, q, r, s, t, v). Esta expresión tiene la última prioridad. Gilardoni - Orozco - Cayssials 3-17 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials • UN S Las siguientes reglas se aplican a las ecuaciones booleanas: Múltiples asignaciones a variables son realizadas a través de operadores VCC. • La bo ra to rio de Si ste ma sD igi tal es - lógicos OR, excepto cuando el valor por defecto de las variables es seteado a Si un simple nodo, GND o VCC sobre el lado derecho de una ecuación es asignado a un grupo, el nodo o constante es duplicado para que el tamaño de este se corresponda con el tamaño del grupo. Por ejemplo: (a, b) = e; que es equivalente a a = e; y b = e; • Si en ambos lados de la ecuación se tienen grupos del mismo tamaño, cada miembro sobre la derecha es asignado al miembro de la izquierda en la posición correspondiente. Por ejemplo: (a, b) = (c, d); que es lo mismo que a = c; y b = d; • Si los lados derecho e izquierdo de una ecuación poseen grupos de diferentes tamaños, el número de bits del grupo de la izquierda debe ser divisible por el número de bits del grupo del lado derecho. Por ejemplo: a[4..1] = b[2..1] en esta ecuación los bits son mapeados de la siguiente manera: a4 = b2, a3 = b1, a2 = b2, a1 = b1. -C ay ss ial s- 11.2 Ecuaciones de Control Booleanas. Las ecuaciones de control son ecuaciones booleanas usadas en la sección lógica para setear las señales de clock, reset y clock enable de las máquinas de estados. El siguiente ejemplo muestra ecuaciones de control booleanas: Maquina.clk = clk1; Maquina.reset = a & b; Or oz co Maquina.ena = clk1ena; Las ecuaciones de control booleanas poseen las siguientes características: Gi lar do ni - Pueden definirse las entradas clock, reset, y clock enable de una máquina de estados, con el formato <nombre de la máquina de estados>.<nombre del port>. En el ejemplo anterior dichas entradas son definidas para la máquina de estados Maquina. La señal de clock <nombre de la máquina de estados>.clk debe ser asignada indefectiblemente a un valor. Gilardoni - Orozco - Cayssials 3-18 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S La señal de reset <nombre de la máquina de estados>.reset debe ser asignada a un valor si el estado inicial en la declaración de la máquina de estados posee La bo ra to rio de Si ste ma sD igi tal es - un valor distinto de 0. De esta forma una señal de reset lleva a la máquina al primer estado en la lista de estados declarados. En el caso que el primer estado se corresponda con el valor cero, la señal de reset no es necesaria, ya que la máquina se iniciará siempre en ese estado. Asignar la señal clock enable <nombre de la máquina de estados>.ena a un valor es opcional. Cuando la señal clock enable está en low, las transiciones de la señal de clock son ignoradas. 11.3 Sentencia CASE. La sentencia case lista una serie de alternativas que pueden ser activadas dependiendo del valor de una variable, grupo o expresión y de esta forma describir distintos comportamientos del sistema. El siguiente ejemplo muestra una sentencia case: CASE f[].q IS WHEN H"00" => addr[] = 0; s = a & b; -C ay ss ial s- WHEN H"01" => count[].d = count[].q + 1; WHEN H"02", H"03", H"04" => f[3..0].d = addr[4..1]; WHEN OTHERS => f[].d = f[].q; Or oz co END CASE; La sentencia case posee las siguientes características: Entre las palabras reservadas CASE e IS se coloca una expresión booleana, Gi lar do ni - grupo o máquina de estados (en el ejemplo f[].q) cuyo valor activará la alternativa correspondiente. La sentencia es terminada por las palabras END CASE y un punto y coma. Una o más alternativas son listadas en la cláusula WHEN, en el cuerpo de la sentencia case. Cada cláusula WHEN comienza con la palabra reservada WHEN. Gilardoni - Orozco - Cayssials 3-19 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S En cada alternativa, luego de la palabra WHEN, uno o más valores constantes, separados por comas, son seguidos por el símbolo =>. En este ejemplo, los La bo ra to rio de Si ste ma sD igi tal es - valores constantes H"02", H"03", H"04" son listados en una cláusula WHEN, mientras que los valores H"00" y H"01" son listados en cláusulas separadas. Si la expresión booleana de la sentencia case evalúa una alternativa que no se corresponde con los distintos valores de las cláusulas WHEN, se activará el comportamiento descripto en la cláusula WHEN OTHERS. 11.4 Sentencia DEFAULTS. La sentencia defaults, permite especificar valores por defecto para las variables utilizadas en tablas de verdad, sentencias if-then y sentencias case. Ya que las señales activas en high son automáticamente seteadas por defecto a GND, la sentencia defaults sólo es requerida para señales activas en low. No debe confundirse los valores por defecto de variables con los valores por defecto de los ports, asignados en la sección de subdiseño. El siguiente ejemplo muestra una sentencia defaults: BEGIN DEFAULTS a = VCC; -C ay ss ial s- END DEFAULTS; IF y & z THEN a = GND; % a es activa en low % END IF; END; Or oz co La sentencia defaults posee las siguientes características: Es encerrada por las palabras reservadas DEFAULTS y END DEFAULTS Gi lar do ni - finalizando con un punto y coma. El cuerpo de la sentencia consiste de una o más ecuaciones booleanas que asignan valores constantes a las variables. En el ejemplo, la sentencia defaults asigna el valor VCC a la variable a. La sentencia es activada si la variable que contiene no es asignada a algún valor. Por lo tanto, luego del reset del dispositivo, la variable a tendrá el valor VCC, Gilardoni - Orozco - Cayssials 3-20 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S generalmente 5volts, si no se cumple que la condición y & z sea verdadera. En caso afirmativo a valdrá GND. La bo ra to rio de Si ste ma sD igi tal es - Sólo una sentencia defaults es permitida en la sección lógica y, en caso de utilizarse, esta debe ser la primera sentencia luego de la palabra reservada BEGIN. No puede utilizarse para asignar valores por defecto de X (don't care) a una variable. 11.5 Sentencia IF-THEN. La sentencia if-then permite realizar una determinada descripción de hardware en función del resultado de una expresión booleana. El siguiente ejemplo muestra una sentencia if-then: IF a[] == b[] THEN c[8..1] = H "77"; addr[3..1] = f[3..1].q; f[].d = addr[] + 1; ELSIF g3 $ g4 THEN f[].d = addr[]; ELSE END IF; -C ay ss ial s- d = VCC; Observando el ejemplo, si el grupo a[] es igual al grupo b[], la sentencia if-then permitirá la evaluación de las sentencias que suceden a la palabra reservada THEN. También observamos las palabras reservadas ELSIF, ELSE y END IF. El uso de la Or oz co estructura ELSIF, permite evaluar otra expresión booleana, cuando la expresión anterior dio como resultado un valor falso y evaluar las sentencias que suceden a la palabra reservada THEN en función del resultado de esta nueva expresión. El uso de la palabra reservada ELSE permite evaluar las sentencias que la suceden, si la expresión evaluada en Gi lar do ni - la estructura anterior fue falsa. Toda sentencia if-then finaliza con las palabras reservadas END IF y un punto y coma. Una estructura if-then que utilice las palabras reservadas ELSIF y ELSE puede representarse utilizando sólo las palabras reservadas IF, THEN y END IF. El siguiente ejemplo muestra este hecho: Gilardoni - Orozco - Cayssials 3-21 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials IF a THEN c = d; UN S IF a THEN c = d; ELSIF b THEN c = e; La bo ra to rio de Si ste ma sD igi tal es - END IF; IF !a & b THEN c = e; END IF; ELSE IF !a & !b THEN c = f; END IF; END IF; 11.6 Sentencia IF-GENERATE. Es una sentencia que permite controlar la generación condicional de hardware en función del resultado de evaluar expresiones aritméticas. Puede ser usada tanto en la sección lógica como en la sección variable. La estructura de esta sentencia hace uso de las siguientes palabras reservadas: IF-GENERATE, ELSEGENERATE y END GENERATE. El siguiente es un ejemplo de la sentencia if-generate: IF DEVICE_FAMILY == "FLEX8K" GENERATE -C ay ss ial s- c[] = 8kadder(a[], b[], cin); ELSE GENERATE c[] = otheradder(a[], b[], cin); END GENERATE; Se observa en el ejemplo que según el valor del parámetro interno DEVICE_FAMILY, se generará un hardware distinto. Or oz co La sentencia if-generate difiere con respecto a la sentencia if-then, en que esta última, es totalmente implementada en el hardware, mientras que la sentencia if-generate permitirá implementar distintas sentencias en función del resultado de una expresión aritmética. Es Gi lar do ni - usual ver un uso intensivo de esta sentencia en librerías de módulos parametrizados (LPM). 11.7 Sentencia FOR-GENERATE. La sentencia for-generate permite generar hardware en forma repetitiva. Gilardoni - Orozco - Cayssials 3-22 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S La estructura de esta sentencia hace uso de las siguientes palabras reservadas: FORGENERATE y END GENERATE. La bo ra to rio de Si ste ma sD igi tal es - El siguiente ejemplo muestra el uso de la sentencia for-generate: CONSTANT NUM_OF_ADDERS = 8; SUBDESIGN 4gentst ( a[NUM_OF_ADDERS..1], b[NUM_OF_ADDERS..1], cin : INPUT; c[NUM_OF_ADDERS..1], cout : OUTPUT; ) VARIABLE carry_out[(NUM_OF_ADDERS+1)..1] : NODE; BEGIN carry_out[1] = cin; FOR i IN 1 TO NUM_OF_ADDERS GENERATE c[i] = a[i] $ b[i] $ carry_out[i]; % Full Adder % carry_out[i+1] = a[i] & b[i] # carry_out[i] & (a[i] $ b[i]); END GENERATE; cout = carry_out[NUM_OF_ADDERS+1]; END; En el ejemplo, la sentencia for-generate define intrínsecamente una variable, llamada i, que tiene vigencia sólo en el ámbito de la sentencia. Esta variable será el contador de las -C ay ss ial s- repeticiones y podrá ser utilizada dentro del cuerpo de la sentencia. También, como en el caso de la sentencia if-generate, es usual ver un uso intensivo de esta sentencia en librerías de módulos parametrizados (LPM). 11.8 Sentencia TRUTH TABLE. La sentencia truth table es utilizada para especificar lógica combinacional o el Or oz co comportamiento de máquinas de estados. Una tabla de verdad, en AHDL, posee una combinación de valores de entrada, que producirán valores de salida específicos. Estos valores de salida pueden ser realimentados para especificar transiciones de estados y Gi lar do ni - salidas de una máquina de estados. Gilardoni - Orozco - Cayssials 3-23 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials TABLE f[4..1].q 0, B"0000" 0, B"0100" 1, B"0XXX" X, B"1111" END TABLE; => f[4..1].d, control; La bo ra to rio de Si ste ma sD igi tal es - a0, UN S El siguiente ejemplo muestra una sentencia truth table: => B"0001", 1; => B"0010", 0; => B"0100", 0; => B"0101", 1; Las señales de entrada de la tabla son a0 y f[4..1].q y las salidas son f[4..1].d y control. Estas señales deben colocarse en la primera línea formando el encabezado de la tabla. Luego en las líneas siguientes se especifican los distintos valores posibles para las señales, tanto de entradas como de salidas. Los valores de entrada y salida pueden ser números, constantes predefinidas como VCC o GND, constantes definidas por el usuario y grupos de números o constantes. Los valores de entrada pueden ser asignados a don't care utilizando la letra X para representarlos. Conclusiones En este capítulo se describieron los principales conceptos del lenguaje AHDL para la especificación de hardware. Se detalló la estructura de un diseño y la sintaxis de las Gi lar do ni - Or oz co un proyecto. -C ay ss ial s- sentencias del lenguaje como así también la principal utilización de dichas sentencias en Gilardoni - Orozco - Cayssials 3-24 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials La bo ra to rio de Si ste ma sD igi tal es - UN S Capítulo 4 Sistema de desarrollo de ALTERA: MAX + PLUS II y placa de desarrollo universal UP1 Introducción En este capítulo se describen las partes integrantes del sistema de desarrollo de lógica programable de la firma ALTERA, compuesto por el software MAX + PLUS II y la placa de desarrollo UP1. 1. ¿ Qué es ALTERA MAX+PLUS II ? ALTERA MAX+PLUS II es un software desarrollado por la firma ALTERA para sintetizar, simular y programar sus dispositivos utilizando diversos lenguajes de -C ay ss ial s- descripción de hardware, como son: VHDL, VERILOG HDL y AHDL. También permite especificar un diseño en forma gráfica a través de diagramas esquemáticos, interconectando distintos elementos lógicos como compuertas, flip flops, contadores, etc. Si tenemos un conocimiento básico del lenguaje VHDL, podríamos ejecutar el software MAX+PLUS II e intentar describir un hardware sencillo. Sin embargo, nos encontraríamos Or oz co con ciertos problemas a la hora de sintetizar el proyecto, ya que es necesario especificar diversos ítems propios de esta herramienta y de los dispositivos de lógica programable a utilizar. Por lo tanto, el objetivo planteado, es poder mostrar cómo se realiza un diseño completo Gi lar do ni - sobre esta herramienta, utilizando un dispositivo de lógica programable disponible en nuestro laboratorio el cual pertenece a la familia MAX7000 y es especificamente el EPM7128SLC84-7. Gilardoni - Orozco - Cayssials 4-1 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S 1.1 Ejemplo Demostrativo La siguiente, es la descripción de un ejemplo, incluido en el software ALTERA La bo ra to rio de Si ste ma sD igi tal es - MAX+PLUS II, utilizando uno de los lenguajes recién mencionados; el VHDL. Dicho ejemplo consiste en la implementación de un sumador (adder) binario de 8 bits, utilizando el dispositivo de la familia MAX7000, EPM7128SLC84-7. Después de la instalación del software, podemos encontrar el ejemplo en el directorio: Drive:\altera\max2work\vhdl\ El ejemplo se encuentra en el archivo denominado adder.vhd y es un archivo de texto que contiene el código VHDL. El mismo debe abrirse con la siguiente secuencia: File → Proyect → Name… adder.vhd Para configurar el software de manera tal que el proyecto a realizar se basará en este archivo, debe ejecutarse la siguiente secuencia: File → Proyect → Set Proyect to Current File De no hacer esto, cuando se sintetice o simule este nuevo archivo, la síntesis o simulación se realizará sobre el archivo base del proyecto anterior. -C ay ss ial s- Una vez configurado como el archivo del proyecto, podemos ir al icono de apertura de la ventana de jerarquías. De esta manera, se puede observar cómo está compuesto el diseño a través de un esquema tipo árbol, donde cada hoja de dicho árbol hace referencia a un archivo. Or oz co Si nunca había sido sintetizado, se observarán en la ventana de jerarquías sólo dos archivos, que son: el código VHDL del sumador (archivo adder.vhd) y un archivo de texto con extensión .acf, el cual describe parámetros característicos de las distintas familias Gi lar do ni - de dispositivos ALTERA. 1.2 Síntesis El sintetizador del software MAX+PLUS II es un procesador de diseños, altamente automatizado que transforma los archivos de diseño en un archivo de salida para Gilardoni - Orozco - Cayssials 4-2 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials sintetizador es el corazón del sistema de desarrollo MAX+PLUS II. UN S programar, simular y analizar temporalmente los dispositivos de lógica programable. El La bo ra to rio de Si ste ma sD igi tal es - Cuando el sintetizador comienza a trabajar sobre un archivo de diseño, ejecuta una serie de procesos hasta crear uno o más archivos de programación. Mientras que el sintetizador permite sintetizar un diseño con una mínima intervención del usuario, también es posible modificar ciertos parámetros para obtener mejores resultados, ya sea en cuanto velocidad o utilización de recursos físicos. Si un proyecto es muy extenso e insume una gran cantidad de recursos físicos, es probable que deban necesitarse dos o más dispositivos para implementarlo. Este hecho es automáticamente detectado por el sintetizador y es éste el que particiona el diseño en múltiples dispositivos de la misma familia. Para sintetizar un archivo de diseño debemos abrir la ventana MAX+PLUS II → Compiler y presionar el botón de start. Posteriormente, la ventana de jerarquías indicará la realización de los diferentes archivos como resultado de la síntesis. 1.3 Tipos de Archivos Seguidamente se clasifican los tipos de archivos que pueden encontrarse como Or oz co -C ay ss ial s- componentes de un proyecto. Ellos pueden ser de cuatro tipos básicos: A su vez, cada tipo puede tener distintas extensiones como pueden ser: Editor gráfico: .gdf, .sch Gi lar do ni - Editor de símbolos: .sym Editor de textos: .acf, .aco, .adf, .cmd, .edc, .edf, .fit, .hst, .lmf, .log, .mif, .mio, .mtf, .plf, .rpt, .sdo, .smf, .tao, .tbl, .tdf, .tdo, .tdx, .ttf, .vec, .vhd, .vho, .vmo, .vo, .xnf, o cualquier otro archivo de texto ASCII. Editor de formas de ondas: .scf, .wdf Para obtener información sobre los distintos tipos de archivos ejecutar: Gilardoni - Orozco - Cayssials 4-3 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials La bo ra to rio de Si ste ma sD igi tal es - 1.4 Interpretación del Código VHDL UN S Help → Search for Help on… y tipear la extensión del mismo. El código se encuentra en el archivo adder.vhd, que es de tipo texto y su extensión indica que es un código fuente escrito en lenguaje VHDL. Este es el archivo principal del diseño y a partir del cual, una vez sintetizado, se generan los demás archivos que integran el proyecto. 1.4.1. Código VHDL ARCHIVO adder.vhd LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_arith.all; ENTITY adder IS PORT ( op1, op2 result : OUT INTEGER); UNSIGNED(7 downto 0); -C ay ss ial s- END adder; : IN ARCHITECTURE maxpld OF adder IS BEGIN result <= CONV_INTEGER(op1 + op2); END maxpld; Or oz co En este archivo se declara la librería ieee y se hace uso de los packages ieee.std_logic_1164 y ieee.std_logic_arith, que definen la lógica standard y la lógica aritmética respectivamente (Capítulo 2). Gi lar do ni - La palabra reservada UNSIGNED es un tipo de datos que está definido dentro del package std_logic_arith contenido en la librería ieee. El tipo UNSIGNED representa valores numéricos sin signo los cuales sólo pueden ser positivos o cero. El software MAX+PLUS II interpreta cada tipo UNSIGNED como un número binario, con el dígito de la izquierda como el bit más significativo. La palabra reservada INTEGER representa al tipo de dato predefinido ya conocido. Gilardoni - Orozco - Cayssials 4-4 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S Por último la palabra reservada CONV_INTEGER, convierte de tipo INTEGER, UNSIGNED, SIGNED, ó STD_ULOGIC a un valor INTEGER. El tamaño de los La bo ra to rio de Si ste ma sD igi tal es - operandos de la función CONV_INTEGER está limitado entre -2147483647 y 2147483647. Por lo tanto, este código implementa un sumador de 8-bits con entradas declaradas tipo UNSIGNED y salida declarada tipo INTEGER. En la arquitectura, op1 y op2, son ambas de tipo UNSIGNED. Las mismas son sumadas y convertidas a tipo INTEGER con la función de conversión CONV_INTEGER. Luego el resultado de la conversión se asigna a result declarada tipo INTEGER. Nota: Si bien el tipo INTEGER posee 32 bits de representación, sólo se utilizan 9 bits ya que el resultado de sumar señales de 8 bits a lo sumo dará como resultado una palabra de 9 bits. Entonces al nivel del dispositivo tendremos sólo 9 contactos de salida usados. El software MAX+PLUS II versión estudiantil 7.21 puede ser obtenido gratuitamente de la página web de ALTERA: http://www.altera.com/ 2. Placa de Desarrollo universal UP1 -C ay ss ial s- La placa de desarrollo universal UP1 está compuesta por: Placa educacional UP1. Cable de programación ByteBlaster. 2.1 ¿Qué es la placa educacional UP1? La placa educacional UP1 es una placa experimental basada en dos dispositivos Or oz co ALTERA de las familias MAX7000 y FLEX10K (Capítulo 1). Ambos son programables en sistema (In-System Programmability, ISP), lo que permite su Gi lar do ni - programación en forma serial y sin necesidad de desmontarlos del circuito impreso. Gilardoni - Orozco - Cayssials 4-5 Laboratorio de Sistemas Digitales - UNS 2.2 ¿Cómo es la placa educacional UP1? UN S Diciembre de 1999. Gilardoni – Orozco - Cayssials Una vista superior de la placa UP1, muestra la existencia y distribución de los La bo ra to rio de Si ste ma sD igi tal es - dispositivos de lógica programable. 2.3 ¿Cómo está compuesta la placa UP1? -C ay ss ial s- La placa posee una serie de elementos, entre los cuales figuran un regulador de tensión, un oscilador a cristal integrado, conectores, switches, leds y displays. Como se ve en la figura anterior, la placa UP1 está compuesta por dos dispositivos de lógica programable: el EPM7128S de la familia MAX7000, y el EPF10K20 de la familia FLEX10K. Los dos dispositivos comparten la señal proveniente de un oscilador a cristal integrado Or oz co de 25.157 Mhz cableada directamente a los contactos de entrada del reloj global de cada dispositivo. Esto es el contacto 83 para el dispositivo EPM7128S y el contacto 91 para el dispositivo EPF10K20. Gi lar do ni - El dispositivo de la familia MAX7000, el EPM7128S, está cableado directamente a los dos displays de 7 segmentos MAX_DIGIT y por lo tanto el uso de los contactos respectivos los enciende y apaga. Todos los demás contactos de entrada/salida, excepto el reloj global, permanecen sin conectarse. En cuanto el dispositivo de la familia FLEX10K, el EPF10K20, está cableado directamente a los dos displays de 7 segmentos (FLEX_DIGIT), a los switches Gilardoni - Orozco - Cayssials 4-6 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S (FLEX_SWITCH), al conector para mouse (MOUSE), al conector para monitor (VGA), a los push-buttons (FLEX_PB1 Y FLEX_PB2) y a un zócalo para la colocación de una La bo ra to rio de Si ste ma sD igi tal es - memoria EEPROM EPC1 de configuración. Todos los demás contactos de entrada/salida, excepto el reloj global, permanecen sin conectarse y son accesibles a través de los terminales de expansión FLEX_EXPAN_ A-B-C. Nota: Cabe notar que el dispositivo de la familia FLEX10K, el EPF10K20, está cableado a un conector de video VGA, y es por eso que el oscilador a cristal es de 25.175 Mhz, que es la frecuencia especificada por el estándar VGA. Esta es la única razón por la que no ha sido conectado a un reloj de mayor frecuencia, ya que ambos dispositivos podrían funcionar al triple de frecuencia. Los dispositivos están conectados en cadena JTAG (IEEE 1149.1 Join Test Action Group ). JTAG es una interfase estándar que permite que los dispositivos sean ISP (InSystem Programmability) de forma tal de poder programar y/o configurar, a través de la interfase ByteBlaster™ a uno o ambos dispositivos en forma secuencial. La placa UP1 posee una serie de switches para configurar dicha cadena, pudiendo seleccionar la programación del dispositivo EPM7128S, o la configuración del dispositivo -C ay ss ial s- EPF10K20 o la programación y configuración de los dos dispositivos. Para mayor información sobre la placa educacional UP1 debe referirse a la guía del usuario de ALTERA: University Program Design Laboratory Package. Or oz co 3. Cable de Programación ByteBlaster. 3.1 ¿Qué es y para qué sirve la ByteBlaster? Los diseños pueden ser fácil y rápidamente transferidos a la placa UP1 usando el cable Gi lar do ni - de programación ByteBlaster, el cual es una interfase física entre la placa UP1 y el puerto paralelo estándar de la computadora personal (PC). El cable de programación ByteBlaster sólo sirve para programar y/o configurar los dispositivos In-System Programmability (ISP) a través de la interfase IEEE 1149.1 Join Test Action Group (JTAG). Gilardoni - Orozco - Cayssials 4-7 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials puerto paralelo de la computadora personal. -C ay ss ial s- La bo ra to rio de Si ste ma sD igi tal es - El diagrama esquemático de la ByteBlaster™ es el siguiente: UN S Eléctricamente no es más que un circuito 72LS244 (buffer octal), usado para proteger el Nota: Mediente la utilización del cable de programación ByteBlasterTM pueden configurarse: los dispositivos de la familia FLEX10K, ya que las interconexiones internas se realizan a través de switches RAM estáticos (SRAM). Por este motivo, deben ser Or oz co configurados cada vez que se energizan. Pueden ser configurados a través de una memoria previamente programada, en donde el dispositivo configurable, automáticamente, lee la información necesaria y se autoconfigura. Gi lar do ni - los dispositivos de la familia MAX7000, ya que las interconexiones internas se realizan a través de switches EEPROM y no necesitan ser reprogramados cada vez que se energizan. Gilardoni - Orozco - Cayssials 4-8 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials La bo ra to rio de Si ste ma sD igi tal es - UN S Capítulo 5 Implementación de un Controlador de Memoria Dinámica: Una Aplicación de Lógica Programable. El objetivo del proyecto es demostrar el funcionamiento y capacidades del sistema de desarrollo de lógica programable que el laboratorio de Sistemas Digitales a adquirido en su participación en el programa universitario de ALTERA. Para ilustrar los conceptos descriptos anteriomente, en este capítulo se describe la implementación de un controlador de memorias RAM dinámicas, DRAMs, configuradas en un módulo SIMM de 72 contactos. La función del controlador de memorias DRAM será hacer ver al módulo como una memoria RAM estática. 1. Memorias Dinámicas Utilizadas: Módulo SIMM -C ay ss ial s- de 72 contactos. El sistema desarrollado consiste de un controlador de memorias dinámicas ensambladas en módulos SIMM de 72 contactos, los cuales son usados como memorias RAM en computadoras personales. En particular se diseñó para funcionar con el módulo SIMM TM124BBK32 de 1M*32bits de Texas Instruments, respetando la configuración de contactos y handshake Or oz co especificados en el estándar JEDEC de 72 contactos. En la figura 5.1 puede se ve detalladamente el símbolo lógico que representa a cada Gi lar do ni - chip componente del módulo SIMM: Gilardoni - Orozco - Cayssials 5-1 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. La bo ra to rio de Si ste ma sD igi tal es - UN S Gilardoni – Orozco - Cayssials Figura 5.1 -C ay ss ial s- El módulo SIMM está compuesto por 8 chips DRAMS TMS44400 DE 1M*4bits y la Gi lar do ni - Or oz co conexión eléctrica entre ellos puede verse en la figura 5.2. Gilardoni - Orozco - Cayssials Figura 5.2 5-2 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials La bo ra to rio de Si ste ma sD igi tal es - UN S El layout del módulo SIMM es el siguiente: Figura 5.3 1.1 Características Técnicas del Módulo SIMM Utilizado. E módulo SIMM está compuesto por 8 chips DRAMs TMS44400 DE 1M*4 bits. Observando las figuras anteriores podemos inferir que los 8 chips funcionarán en forma paralela, siendo activados con las señales /cas y /ras respectivas. Por lo tanto el modo de operación del módulo será el mismo que el de cada chip. 1.2 Características Técnicas de los Chips TMS44400. En forma resumida, las características principales de los chips utilizados son: -C ay ss ial s- 1 meganibble de capacidad, estructurados en forma matricial 1024 filas * 1024 columnas. Ciclo de refresco de 16 mseg. Refresco Cas before Ras. Auto refresco. Consumo promedio de corriente de 90ma. Gi lar do ni - Or oz co Tiempo de acceso 70 ns. Gilardoni - Orozco - Cayssials 5-3 Laboratorio de Sistemas Digitales - UNS 2. Controlador de Memorias Dinámicas. Dinámicas. La bo ra to rio de Si ste ma sD igi tal es - 2.1 Símbolo Lógico del Controlador de Memorias UN S Diciembre de 1999. Gilardoni – Orozco - Cayssials El controlador de memorias dinámicas será llamado dramcontrol y la configuración de contactos de entrada y salida es la siguiente: Las señales asociadas a los distintos contactos de entrada y salida pueden dividirse en tres grupos según sea su interacción con y desde el mundo exterior. Estas señales son: Las señales independientes, que no interactúan en forma directa con el sistema -C ay ss ial s- microprocesador ni con el módulo SIMM. Las señales microprocesador - dramcontrol, que interactúan en forma directa con el sistema microprocesador. Las señales dramcontrol – módulo SIMM, que interactúan en forma directa con el módulo SIMM. Señales independientes Or oz co 2.1.1. Existen sólo dos señales independientes: 1) la señal de entrada clk, que será utilizada como la señal de sincronismo de toda la lógica secuencial utilizada en la implementación Gi lar do ni - del controlador de memorias dinámicas. 2) la señal de estado_error, que indica que se ha producido un error por parte del microprocesador por haber estado en estado bajo las señales /write y /read simultáneamente. 2.1.2. Señales microprocesador - dramcontrol: Gilardoni - Orozco - Cayssials 5-4 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S La señal de entrada /read es usada como la señal de lectura de la memoria dinámica y es activa en cero. La bo ra to rio de Si ste ma sD igi tal es - La señal de entrada /write es usada como la señal de escritura en la memoria dinámica y es activa en cero. La señal de ready, activa en uno, indica si el sistema memoria – dramcontrol está listo para ejecutar un ciclo de lectura o escritura. El bus address_in son las 16 líneas de direcciones provenientes del microprocesador. El bus bidir_up es el bus de datos bidireccional de 8 bits, que conecta el microprocesador con el controlador de memorias dinámicas. 2.1.2.1. Señales dramcontrol – módulo SIMM: La señal de salida /write_dram es usada como señal de escritura y lectura en la memoria dinámica y será de escritura cuando esté en estado low y de lectura cuando esté en estado high. La señal de salida /ras es aplicada a la memoria dinámica. Esta señal es activa en cero y es llevada a su estado low indicando que las direcciones de filas ya están presentes. Igual que la señal /ras, la señal de salida /cas es aplicada a la memoria dinámica. -C ay ss ial s- Esta señal es activa en cero y es llevada a su estado low indicando que las direcciones de columnas ya están presentes. address_out son las 10 líneas de direcciones multiplexadas de filas y columnas hacia el módulo SIMM. bidir_simm es el bus de datos bidireccional de 8 bits, que conecta el Or oz co controlador de memorias dinámicas con el módulo SIMM. 3. Funcionamiento del Controlador de Memorias Gi lar do ni - Dinámicas. El módulo SIMM de 72 contactos de 1M * 32 bits, será visto como una memoria RAM estática de 4M * 8 bits, por lo que se leerá y se escribirá a la memoria 1 byte de datos, y para permitir su direccionamiento a la mayoría de los microprocesadores de 8 bits, se paginará en 64 páginas de 64 Kbytes cada una. Gilardoni - Orozco - Cayssials 5-5 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S La funcionabilidad del controlador de memorias dinámicas puede dividirse en dos partes. Una parte que interactúa con el microprocesador, llamada microprocesador memoria dinámica. La bo ra to rio de Si ste ma sD igi tal es - controlador y otra parte que interactúa con la memoria dinámica, llamada controlador – 3.1 Funcionamiento microprocesador - controlador ¿Cómo es un ciclo de lectura del microprocesador - controlador? Como indica la figura 5.4, el ciclo de lectura comienza cuando el microprocesador baja la señal /read, y la señal /write permanece en nivel alto. En el flanco descendente de la señal /read se almacenan en registros las direcciones address_in provenientes del -C ay ss ial s- microprocesador previamente establecidas. Luego que el controlador dramcontrol accede a la memoria, aparece el dato leído en las líneas bidir_up. El dato leído estará presente mientras la señal /read esté en nivel bajo y será leído por el microprocesador en el flanco ascendente de la señal /read. Aclaración: los valores, tanto de la dirección de escritura como el del dato leído, fueron Gi lar do ni - Or oz co elegidos en forma arbitraria. Gilardoni - Orozco - Cayssials Figura 5.4 5-6 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S ¿Cómo es un ciclo de escritura del microprocesador - controlador? Como indica la figura 5.5, el ciclo de escritura comienza cuando el microprocesador La bo ra to rio de Si ste ma sD igi tal es - baja la señal /write, y la señal /read permanece en nivel alto. En el flanco descendente de la señal /write se almacenan en registros las direcciones address_in provenientes del microprocesador previamente establecidas. Luego el microprocesador debe colocar el dato a escribir en las líneas bidir_up. El dato será almacenado por el controlador dramcontrol, con el flanco ascendente de la señal /write. Luego, controlador accederá a la memoria dinámica para escribir el dato deseado en el lugar de memoria deseado. Figura 5.5 ¿Cómo funciona el paginado? El paginado se lleva a cabo con un ciclo de escritura microprocesador – controlador como el descripto anteriormente, pero la escritura será en la dirección de paginado -C ay ss ial s- previamente establecida. También cabe notar que el registro de paginado es de 6 bits y por lo tanto el valor que tomará dicho registro, luego del ciclo de escritura, será el de los 6 bits menos significativos del bus de datos proveniente del microprocesador. La dirección de paginado será la indicada por la constante dir_paginado definida en el código AHDL, por lo tanto cuando se escriba en esa dirección no se accederá a la memoria Or oz co sino que se modificará el registro de paginado. Se perderán 256Bytes de memoria por el uso de este paginado, ya que se pierden los 4Bytes de la dirección de paginado, dir_paginado, de cada página. La lectura de un dato en la dirección de paginado no está implementada, es decir, que el Gi lar do ni - controlador no realiza ninguna función, por lo tanto no se puede saber cuál es el valor actual del registro de paginado. Sólo se puede modificar. En la figura 5.6 se muestra el ciclo de cambio de página recién descripto, y los valores, tanto de la dirección de paginado como el del valor de la página, fueron elegidos en forma arbitraria. Gilardoni - Orozco - Cayssials 5-7 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. La bo ra to rio de Si ste ma sD igi tal es - UN S Gilardoni – Orozco - Cayssials Figura 5.6 3.2 Funcionamiento controlador – memoria dinámica. ¿Cómo se direcciona el módulo SIMM? El direccionamiento del módulo SIMM se hará a través de las 16 direcciones provenientes del microprocesador adress_in[15..0], más las 6 direcciones del registro de paginado. De esta forma las direcciones de filas estarán formadas por los 6 bits del registro de paginado más los 4 bits más significativos de las direcciones provenientes del microprocesador adress_in[15..12], mientras que las direcciones de columnas serán los 10 bits restantes, es decir adress_in[11..2]. Los bits 1 y 0 serán utilizados para decodificar el byte correspondiente de la palabra de 32 bits que maneja el módulo SIMM. Gi lar do ni - Or oz co -C ay ss ial s- Gráficamente sería de la siguiente forma: Gilardoni - Orozco - Cayssials 5-8 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. -C ay ss ial s- La bo ra to rio de Si ste ma sD igi tal es - UN S Gilardoni – Orozco - Cayssials ¿Cómo es un ciclo de lectura del controlador – memoria dinámica? El ciclo de lectura del controlador - memoria dinámica se debe realizar dentro del ciclo de lectura microprocesador – controlador, ya que el dato leído se debe presentar al Or oz co microprocesador en el flanco ascendente de la señal /read, como se vio anteriormente. Entonces una vez que la señal /read pasa a estado bajo, comienzan los ciclos de lectura microprocesador – controlador y controlador – memoria dinámica. Gi lar do ni - El ciclo de lectura controlador – memoria dinámica tiene que realizarse antes que finalice el ciclo microprocesador – controlador. Para asegurar que esto ocurra se bajará la señal ready hasta que el acceso se haya completado. Gilardoni - Orozco - Cayssials 5-9 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S El ciclo de lectura controlador – memoria dinámica realiza el handshake que indica la hoja de datos, de la memoria dinámica que se corresponde con el indicado en el estándar La bo ra to rio de Si ste ma sD igi tal es - JEDEC de 72 contactos. En la figura 5.7 se ve que luego de bajar la señal /read, el controlador establece las direcciones de filas con el valor “00F” y se baja la señal /ras, con lo que la memoria latchea las direcciones de filas. Luego el controlador coloca las direcciones de columnas “3C3” y se baja la señal /cas. En un tiempo no mayor a los 20ns el dato leído aparece en el bus de datos bidir_simm, siendo este latcheado y presentado al microprocesador hasta que el ciclo microprocesador – controlador termine. Figura 5.7 ¿Cómo es un ciclo de escritura del controlador – memoria dinámica? El ciclo de escritura del controlador - memoria dinámica se puede realizar solo -C ay ss ial s- después del ciclo de lectura microprocesador – controlador, ya que en el momento de acceder a la memoria dinámica se deben conocer tanto la dirección como el dato a escribir. Entonces, una vez que el ciclo de escritura microprocesador – controlador finaliza el controlador ejecuta el ciclo de escritura controlador – memoria dinámica. El ciclo de escritura controlador – memoria dinámica realiza el handshake que indica Or oz co la hoja de datos, de la memoria dinámica. En la figura 5.8 se ve el final de un ciclo de escritura microprocesador – controlador y el comienzo de un ciclo de escritura controlador – memoria dinámica. Dicha transición la determina el flanco ascendente de la señal /write. Gi lar do ni - Luego el controlador establecen las direcciones de filas con el valor “00F” y se baja la señal /ras, con lo que la memoria latchea las direcciones de filas. Posteriormente el controlador coloca las direcciones de columnas “3C3” y se baja la señal /cas. Se observa que el dato a escribir, “11” se encuentra presente prácticamente durante todo el ciclo. Gilardoni - Orozco - Cayssials 5-10 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. La bo ra to rio de Si ste ma sD igi tal es - UN S Gilardoni – Orozco - Cayssials Figura 5.8 ¿Cómo es el ciclo de refresco CAS before RAS? Como toda memoria dinámica, para asegurar la integridad de los datos, debe ser refrescada periódicamente. Las memorias utilizadas tienen un ciclo de refresco de 16ms y están estructuradas como una gran matriz de 1024 filas por 1024 columnas, por lo tanto una forma de refrescar toda la memoria sería leer 1024 filas en un tiempo menor a los 16ms, usando solamente la señal /ras. Esté tipo de refresco es el denominado RAS only y tiene la desventaja de tener que llevar un contador externo con las direcciones de filas a refrescar. Otro tipo de refresco es el CAS before RAS, que fue el utilizado, y tiene la ventaja con respecto al anterior, que no es necesario colocar las direcciones de filas, ni llevar un conteo externo, ya que esto lo hace automáticamente la memoria dinámica con su propio contador -C ay ss ial s- interno. Como su nombre lo indica, para que la memoria interprete que se quiere hacer un ciclo de refresco CAS before RAS, el controlador debe realizar el siguiente handshake: primero se baja la línea /cas y se sube la línea /write_dram y se baja la línea /ras. Se mantienen estos estados y se levanta la línea /cas al mismo tiempo que se baja la línea Figura 5.9 Gi lar do ni - Or oz co /write_dram. Posteriormente se levanta la línea /ras y finaliza el ciclo. Gilardoni - Orozco - Cayssials 5-11 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. 4. Funcionamiento Lógico del Controlador La bo ra to rio de Si ste ma sD igi tal es - Memorias Dinámicas. de UN S Gilardoni – Orozco - Cayssials El controlador de memorias dinámicas está formado por dos máquinas de estados que evolucionan sincrónicamente con la señal de reloj y en función de distintas variables de entrada que definen cuál es el próximo estado. Una máquina implementa las funciones microprocesador – controlador y será denominada máquina 1. La otra, implementa las funciones controlador – memoria dinámica y será denominada máquina 2. Luego de una inicialización del controlador, las máquinas de estados se inician en los estados espera en la máquina 1 y Standby en la máquina 2. Como sus nombres lo indican estos estados son estados de espera, e indican que el controlador se encuentra disponible para realizar cualquiera de las funciones microprocesador – controlador y controlador – memoria dinámica, mencionadas anteriormente. En función de tres señales lógicas, la máquina 2 puede evolucionar de tres maneras diferentes. Estas evoluciones son las correspondientes al ciclo de refresco, al ciclo de lectura y al ciclo de escritura. Las tres señales lógicas recién mencionadas son definidas en el código AHDL y se -C ay ss ial s- derivan de dos elementos de memoria (flip flops) y un contador. El contador es utilizado para comenzar un ciclo de refresco cuando la cuenta alcanza su fin. Es llamado contador.q[] donde los caracteres .q[] hacen referencia a las salidas de todos los flip flops que componen al contador. Las dos señales restantes son llamadas lectura_pendiente.q, y escritura_pendiente.q, Or oz co que son las salidas de dos flip flops D con señal de enable. Estos flip flops son configurados por la máquina 1 para comenzar un ciclo de lectura o escritura en la máquina 2 y son borrados por la máquina 2 cuando los ciclos terminan. Por lo tanto estas señales funcionan como nexos de comunicación entra las dos máquinas de estados. Gi lar do ni - 4.1 Máquina de estados 1: microprocesador – controlador Los estados que componen la máquina de estados 1 son los siguientes: reset_maquina_1: Estado inicial de reset. Luego pasa al estado espera. Gilardoni - Orozco - Cayssials 5-12 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S espera: Estado de espera por un ciclo de lectura o escritura entre el microprocesador y el controlador. En este estado se latchean las direcciones La bo ra to rio de Si ste ma sD igi tal es - provenientes del microprocesador. Y se evoluciona a dos posibles estados según el estado de las señales /write y /read. Si baja la señal /read se pasa al estado lectura_set_flag. Si baja la señal /write se pasa al estado escritura_espera. lectura_set_flag: Se setea a high el flip flops D de lectura pendiente. Que dispara un ciclo de lectura en la máquina de estados 2. Luego pasa al estado lectura_espera. lectura_espera: Espera en este estado hasta que lectura_pendiente.q sea reseteado por la máquina de estados 2 cuando el acceso al módulo SIMM se halla completado. Luego pasa al estado lectura_fin. lectura_fin: Al llegar a este estado ya estarán los datos leídos de la memoria, en el latch datos_simm[].q y puede activarse el buffer tri estado up_tri_state[] que activará la salida del bus bidireccional bidir_up[]. escritura_espera: Latchea los datos provenientes del microprocesador y verifica si la dirección provenientes del microprocesador es la dirección de paginado. En caso afirmativo pasa al estado set_paginado. En caso contrario espera a que la señal /write suba y pasa al estado escritura_set_flag. -C ay ss ial s- escritura_set_flag: Se setea a high el flip flops D de escritura pendiente. Lo que dispara un ciclo de escritura en la máquina de estados 2. Luego pasa al estado escritura_fin. escritura_fin: Espera en este estado hasta que la máquina de estados 2 resetee el flip flop escritura_pendiente.q. Luego pasa al estado espera, dándose por terminado el ciclo de escritura. Or oz co error_seguridad: Se accede a este estado si las señales /read y/o /write se activan simultáneamente. En este caso se tiene una condición de error por parte del microprocesador, y como consecuencia se para el funcionamiento del Gi lar do ni - controlador hasta un nuevo reset. El refresco se sigue ejecutando, con lo que se asegura la integridad de los datos almacenados. Gilardoni - Orozco - Cayssials 5-13 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S 4.2 Máquina de estados 2: controlador – memoria dinámica cantidad de estados: La bo ra to rio de Si ste ma sD igi tal es - Cada uno de los ciclos componentes de la máquina 2 se realizan con la siguiente Ciclo de refresco => 5 estados. Ciclo de lectura => 6 estados. Ciclo de escritura => 6 estados. Los estados que componen la máquina de estados 2 son los siguientes: Standby: En este estado se espera por cualquiera de los tres ciclos posibles; escritura, lectura o refresco. Las señales toman los valores definidos por defecto. Idle: Este estado solo cumple la función de insertar un intervalo de tiempo de un ciclo de reloj de duración, luego de un ciclo de lectura y / o escritura. Las señales toman los valores definidos por defecto. Ciclo de Refresco: Refrescar1: Este es el primer estado que implementa el ciclo de refresco. Se accede a éste, desde el estado standby, si la cuenta del contador de refresco llegó o superó el valor determinado. En este estado se sube la señal /write_dram y se -C ay ss ial s- pasa al estado siguiente que es refrescar2. Refrescar2: En este estado se bajan las señales /cas[0..3], y se mantiene la señal /write_dram en uno. Pasa al estado siguiente refrescar3. Refrescar3: En este estado se mantienen bajas las señales /cas[0..3], se baja la señal /ras, se mantiene la señal /write_dram en uno y se pasa al estado siguiente que es refrescar4. la Or oz co Refrescar4: En este estado se suben las señales /cas[0..3], se mantiene baja señal /ras, se baja la señal /write_dram y se pasa al estado siguiente que es refrescar5. Gi lar do ni - Refrescar5: Se mantienen bajas las señales de /ras y /write_dram. Finaliza el ciclo de refresco y las señales se estabilizan en el estado próximo que es standby. Nota: En realidad el ciclo de refresco termina al llegar al estado standby, ya que aquí se sube la señal /ras. Gilardoni - Orozco - Cayssials 5-14 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials Read1: UN S Ciclo de Lectura: Este es el primer estado que implementa el ciclo de lectura. Se La bo ra to rio de Si ste ma sD igi tal es - accede a éste desde el estado standby, si hay una señal de lectura pendiente. Esta señal de lectura pendiente, proviene de un elemento de memoria (Flip Flop D), llamado en el código AHDL, lectura_pendiente.q. Este flip flop es seteado por la máquina de estados 1 cuando el microprocesador baja la señal /read. En este estado se establecen las direcciones de filas hacia el módulo SIMM y se pasa al estado siguiente que es read2. Read2: Se mantienen las direcciones de filas activas y se baja la señal de /ras y se sube la señal /write_dram. Luego pasa al estado read3. Read3: Se colocan las direcciones de columnas. Se mantiene la señal de /ras activa. Luego pasa al estado read4. Read4: Se mantienen las señales de columnas. Y se decodifican las señales /cas en función de los dos bits menos significativos de las direcciones provenientes del microprocesador. Luego se pasa al estado read5. Read5: Se mantienen las señales de columnas. Pasa al estado read6. Read6: Se mantienen las señales de columnas. Se resetea a low el flip flops D de lectura pendiente. Se latchean los datos provenientes del módulo SIMM. -C ay ss ial s- Finaliza el ciclo de lectura, pasando el estado idle. Ciclo de Escritura: Write1: Este es el primer estado que implementa el ciclo de escritura. Se accede a éste desde el estado standby si hay una señal de escritura pendiente. Esta señal de escritura pendiente es seteada por la máquina de estados 1 y proviene de un elemento de memoria (Flip Flop D), llamado en el código Or oz co AHDL, escritura_pendiente.q. En este estado se establecen las direcciones de filas hacia el módulo SIMM se pasa al estado siguiente llamado write2. La señal /write_dram permanece en estado bajo durante todo el ciclo. Gi lar do ni - Write2: En este estado se mantienen las direcciones de filas, y se baja la señal /ras, luego se pasa al estado siguiente que es llamado write3. Write3: En este estado se establecen las direcciones de columnas hacia el módulo SIMM, se mantiene la señal /ras en low y se habilita el bus de datos Gilardoni - Orozco - Cayssials 5-15 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. Gilardoni – Orozco - Cayssials UN S hacia el módulo SIMM. Luego se pasa al estado siguiente que es llamado write4. En este estado se mantienen las direcciones de columnas hacia el La bo ra to rio de Si ste ma sD igi tal es - Write4: módulo SIMM, se mantiene la señal /ras en low, se determina que bit de la señal /cas[0..3] se debe llevar a low para escribir el byte correcto y por último se pasa al estado siguiente que es write5. Write5: En este estado se mantienen las direcciones de columnas hacia el módulo SIMM, se mantiene la señal /ras en low, se mantienen las señales /cas[0..3] como en el estado anterior, se deshabilita el bus de datos y se resetea el flip flop de escritura pendiente. Por último se pasa al estado siguiente que es write6. Write6: En este estado se permite que las señales vuelvan a tomar los niveles definidos por defecto, para asegurar los tiempos de precarga especificados en las hojas de datos del módulo de memoria. El próximo estado es idle. 5. Implementación de los ports bidireccionales. Seguidamente se describirá como es la implementación de buses bidireccionales, que -C ay ss ial s- cumplen la función de intercambiar información entre el microprocesador y el módulo de memoria SIMM en forma bidireccional. La figura 5.10 muestra en forma esquemática las interconexiones realizadas para implementar dicha interfase. Se puede observar la existencia de dos latchs encargados de almacenar los datos que entran al dispositivo de lógica programable, tanto del port bidir_up[7..0] como del port Or oz co bidir_simm[7..0], con el flanco ascendente de la señal de reloj, si la señal de enable Gi lar do ni - correspondiente está en estado alto. Gilardoni - Orozco - Cayssials 5-16 Laboratorio de Sistemas Digitales - UNS Diciembre de 1999. La bo ra to rio de Si ste ma sD igi tal es - UN S Gilardoni – Orozco - Cayssials Figura 5.10 Los datos salen por los ports bidireccionales a través de los buffers tri estados up_tri_state[7..0] y simm_tri_state[7..0] cuando las señales de output enable Gi lar do ni - Or oz co -C ay ss ial s- correspondientes pasan a estado alto. Gilardoni - Orozco - Cayssials 5-17 Laboratorio de Sistemas Digitales - UNS