NotasCompletas sobre fpga

Diseño Digital Utilizando Lógicas Programables Versión 0.6 Junio 29, 2005 Guillermo Güichal Universidad Tecnológica Nac

Views 94 Downloads 1 File size 2MB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

Diseño Digital Utilizando Lógicas Programables Versión 0.6 Junio 29, 2005

Guillermo Güichal Universidad Tecnológica Nacional Facultad Regional Bahía Blanca

Diseño digital utilizando Lógicas Programables

UTN, Facultad Regional Bahía Blanca

Índice 1 2 3 4

Agradecimientos ......................................................................................................... 7 Versiones..................................................................................................................... 8 Introducción ................................................................................................................ 9 Temas Básicos de Diseño Digital ............................................................................. 11 4.1 Diseño Combinacional y Secuencial ................................................................ 11 4.1.1 Flip-Flops y Latches ................................................................................. 11 4.2 Diseño Secuencial Asincrónico y Sincrónico ................................................... 11 4.3 Algunas Notas sobre Diseño Secuencial Sincrónico ........................................ 11 4.3.1 Temporizado y Utilización de Registros................................................... 11 4.3.2 Distribución de Reloj ................................................................................ 11 4.3.3 Máxima Frecuencia de Trabajo ................................................................ 11 4.3.4 Pipelines.................................................................................................... 11 4.3.5 Dominios de Reloj .................................................................................... 11 4.3.6 Metaestabilidad en los Flip-Flops............................................................. 11 4.4 Autómatas de Estados Finitos (Máquinas de estados finitos)........................... 11 4.4.1 Máquinas de Mealy................................................................................... 11 4.4.2 Máquinas de Moore .................................................................................. 11 4.4.3 Codificación de estados. Mínima, One-hot, One-cold, Grey, etc. ............ 11 4.5 Integridad de Señal ........................................................................................... 11 4.5.1 Que afecta la integridad de señal y que es. Como afecta fuera y dentro del chip (FPGA?) ............................................................................................................ 11 4.5.2 Terminaciones de Señales......................................................................... 12 4.6 Interfaces Eléctricas .......................................................................................... 12 4.7 Potencia y Consumo de los Circuitos ............................................................... 12 5 Diseño Digital con FPGAs y HDLs.......................................................................... 13 5.1 Metodología General de Diseño Digital ........................................................... 15 5.1.1 Especificación y Diseño............................................................................ 17 5.1.2 Verificación............................................................................................... 18 5.1.3 Pasos Finales............................................................................................. 18 5.2 Diseño Digital Utilizando Lenguajes de Descripción de Hardware ................. 18 5.3 Flujo de Diseño para Lógicas Programables .................................................... 19 5.3.1 Flujo de Diseño (Design Flow)................................................................. 19 5.4 Lenguajes de descripción de hardware ............................................................. 22 5.4.1 VHDL ....................................................................................................... 23 5.4.2 Verilog ...................................................................................................... 23 5.4.3 Otros.......................................................................................................... 23 5.5 Herramientas de Desarrollo .............................................................................. 24 5.5.1 Descripción del Diseño ............................................................................. 24 5.5.2 Generación o Traducción.......................................................................... 24 5.5.3 Simulación ................................................................................................ 24 5.5.4 Notas Manejo del tiempo en VHDL ......................................................... 24 6 Dispositivos Lógicos Programables.......................................................................... 27 6.1 Evolución de los Primeros Dispositivos Lógicos Programables ...................... 28 ©2005 Guillermo Güichal

Diseño digital utilizando Lógicas Programables

UTN, Facultad Regional Bahía Blanca

6.2 CPLDs............................................................................................................... 31 6.3 FPGAs............................................................................................................... 32 6.3.1 Bloque Lógico Programable ..................................................................... 35 6.3.2 Bloque de Entrada / Salida....................................................................... 38 6.3.3 Bloque de Control de Reloj....................................................................... 41 6.3.4 Memoria.................................................................................................... 43 6.3.5 Bloque de Procesamiento de Señal ........................................................... 44 6.3.6 CPUs Embebidas ...................................................................................... 46 6.3.7 Matriz de Interconexión............................................................................ 47 6.4 Granularidad de los Dispositivos Lógicos Programables (PLDs) .................... 48 6.5 Tecnología de Configuración de los PLDs ....................................................... 53 6.6 Tendencias Actuales y Futuras ......................................................................... 54 6.7 Notas a Junio 2005............................................................................................ 54 7 Primeros Pasos con VHDL ....................................................................................... 56 7.1 Notas Preliminares Sobre Formato de VHDL y los Ejemplos ......................... 56 7.1.1 Formato del Código de Ejemplo ............................................................... 56 7.1.2 Capitalización en VHDL........................................................................... 56 7.1.3 Comentarios en VHDL ............................................................................. 56 7.1.4 Delimitadores de Código en VHDL ......................................................... 56 7.2 Estructura Básicas de un Modelo en VHDL..................................................... 57 7.2.1 Entidades y Arquitecturas ......................................................................... 57 7.2.2 Modelos de comportamiento..................................................................... 59 7.2.3 Modelos Estructurales............................................................................... 61 7.3 Elementos del Lenguaje VHDL........................................................................ 64 7.3.1 Palabras Reservadas.................................................................................. 64 7.3.2 Símbolos Especiales.................................................................................. 64 7.3.3 Identificadores........................................................................................... 66 7.3.4 Números.................................................................................................... 66 7.3.5 Cadenas de bits ......................................................................................... 66 7.4 Tipos en VHDL................................................................................................. 67 7.4.1 Tipos Comunes ......................................................................................... 67 7.4.2 Declaración de Tipos ................................................................................ 67 7.4.3 Tipos enumerados ..................................................................................... 68 7.4.4 Subtipos..................................................................................................... 68 7.4.4.1 Tipo Natural y Positivo......................................................................... 68 7.4.5 Tipos Físicos ............................................................................................. 69 7.4.5.1 Tipo Tiempo.......................................................................................... 69 7.4.6 Tipos compuestos...................................................................................... 69 7.4.6.1 Arreglos................................................................................................. 70 7.4.6.2 Arreglos sin Rangos Predeterminados .................................................. 71 7.4.6.3 Records ................................................................................................. 72 7.4.7 Calificación y Conversión de Tipos.......................................................... 72 7.5 Objetos en VHDL ............................................................................................. 73 7.5.1 Constantes ................................................................................................. 73 7.5.2 Señales ...................................................................................................... 73 7.5.3 Variables ................................................................................................... 74

©2005 Guillermo Güichal

Diseño digital utilizando Lógicas Programables

UTN, Facultad Regional Bahía Blanca

7.6 Librerías y Paquetes.......................................................................................... 75 7.6.1 Librerías .................................................................................................... 75 7.6.2 Paquetes (Packages).................................................................................. 75 7.6.3 Paquetes de Lógica Estándar del IEEE..................................................... 77 7.6.3.1 Lógica estándar std_logic y std_ulogic definidos en std_logic_1164 .. 78 7.6.3.2 Detección de flancos de señales definidos en std_logic_1164 ............. 79 7.6.4 Aritmética sobre lógica estándar............................................................... 79 7.7 Construcciones Básicas de VHDL.................................................................... 81 7.7.1 Declaración de señales.............................................................................. 82 7.7.2 Operaciones Concurrentes ........................................................................ 83 7.7.2.1 Flujo de datos........................................................................................ 83 7.7.2.2 Palabra reservada AFTER..................................................................... 85 7.7.2.3 Expresión with … select ....................................................................... 86 7.7.2.4 Expresión when, else ............................................................................ 87 7.7.3 Operaciones secuenciales.......................................................................... 88 7.7.3.1 Instrucción WAIT ................................................................................. 88 7.7.3.2 Expresión if… elsif… else.................................................................... 90 7.7.3.3 Expresión null ....................................................................................... 92 7.7.3.4 Expresión case ...................................................................................... 92 7.7.3.5 Procesos (process)................................................................................. 94 7.7.4 Operaciones secuenciales, retardos delta y síntesis .................................. 98 7.7.5 Visibilidad de las declaraciones de objetos en VHDL.............................. 99 8 Más VHDL.............................................................................................................. 101 8.1 Introducción .................................................................................................... 101 8.2 Parámetros Genéricos ..................................................................................... 101 8.2.1 Declaración de parámetros genéricos ..................................................... 101 8.2.2 Uso de componentes con parámetros genéricos ..................................... 104 8.3 Subprogramas: FUNCTION y PROCEDURE ............................................... 108 8.3.1 Procedimientos........................................................................................ 108 8.3.2 Funciones ................................................................................................ 111 8.3.3 Asociación de parámetros por posición y por nombre............................ 113 8.4 Instrucción GENERATE ................................................................................ 113 8.5 Componentes Básicos de Diseño (Primitivas - Primitives) ............................ 114 8.5.1 Utilización de Primitivas desde VHDL .................................................. 114 8.5.2 Librerías de Primitivas (componentes) Específicos para Simulación..... 116 8.5.3 Memoria.................................................................................................. 116 Inferencia de Memorias ...................................................................................... 118 Instancia de Memorias ........................................................................................ 124 8.5.4 Definición de Nuevos Componentes de Diseño ..................................... 125 8.6 Máquinas de Estado ........................................................................................ 129 8.6.1 Codificación de Estados.......................................................................... 133 8.6.2 División de la Señal de Reloj (Clock Enable) ........................................ 134 9 VHDL para Simulación y Verificación .................................................................. 135 9.1 Introducción .................................................................................................... 135 9.2 Bancos de Prueba............................................................................................ 135 9.2.1 Vectores de prueba.................................................................................. 136

©2005 Guillermo Güichal

Diseño digital utilizando Lógicas Programables

UTN, Facultad Regional Bahía Blanca

9.2.2 Diseño de un Banco de Pruebas.............................................................. 136 9.2.3 Manejo de tiempo en simulaciones usando VHDL ................................ 137 9.2.3.1 Uso del WAIT y AFTER .................................................................... 137 9.2.3.2 Función NOW..................................................................................... 138 9.3 VHDL (Generalmente) No Sintetizable.......................................................... 139 9.3.1 Instrucciones de lazo FOR, WHILE y LOOP, NEXT y EXIT............... 139 9.3.2 Instrucciones ASSERT y REPORT ........................................................ 142 9.3.3 Manejo de Archivos y Paquete TEXTIO................................................ 143 9.3.4 Palabra reservada ALIAS ....................................................................... 145 9.3.5 Ejemplos de Componentes para Bancos de Prueba ................................ 146 9.3.5.1 Generación de Señal de Reloj ............................................................. 146 9.3.5.2 Generación de una Señal de Reset ...................................................... 147 9.3.5.3 Temporizado de la Interfase de un Bus de Microcontrolador............. 148 9.4 Que Falta sobre VHDL… ............................................................................... 152 10 Buenas Prácticas de Diseño ................................................................................ 153 10.1 Introducción .................................................................................................... 153 10.2 Documentación ............................................................................................... 153 10.3 Guía de estilo para el código HDL ................................................................. 153 10.4 Programación para Diseños Sintetizables....................................................... 156 10.4.1 Diferencias entre Síntesis y Simulación ................................................. 156 10.4.2 División de la Frecuencia Mediante Habilitación del Reloj ................... 156 10.5 Guía de Estilo Para un Buen Diseño de Hardware ......................................... 159 11 SoCs, Cores y Propiedad Intelectual................................................................... 162 11.1 Introducción .................................................................................................... 162 11.2 Presentación de un Core.................................................................................. 162 11.3 Diseño para Verificación (Design For Test)................................................... 162 11.4 Reutilización de Propiedad Intelectual ........................................................... 162 12 Notas Sobre Síntesis con FPGAs........................................................................ 163 12.1 Introducción .................................................................................................... 163 12.2 Diseño y Optimización Para Síntesis.............................................................. 163 12.3 Formato Edif ................................................................................................... 163 12.4 Estructuras Recomendadas para Diseños Sintetizables .................................. 163 12.4.1 Estructuras de Decisión Jerárquicas y Concurrentes (IF vs. CASE) ...... 163 12.4.2 Procesos sincrónicos ............................................................................... 163 12.4.3 etc............................................................................................................ 163 12.4.4 etc............................................................................................................ 163 12.4.5 etc............................................................................................................ 163 12.5 Ejemplos de estructuras sintetizadas............................................................... 163 13 Notas sobre Verificación..................................................................................... 165 13.1 Introducción .................................................................................................... 165 14 Uso de las Herramientas ..................................................................................... 166 14.1 Manejo Básico de Xilinx Project Manager..................................................... 166 14.2 Manejo Básico de Altera Quartus II ............................................................... 166 14.3 Manejo Básico de Actel Libero (o la que sea gratuita)................................... 166 14.4 Manejo Básico de ModelSim.......................................................................... 167 15 Referencias.......................................................................................................... 169

©2005 Guillermo Güichal

Diseño digital utilizando Lógicas Programables

UTN, Facultad Regional Bahía Blanca

15.1 Dispositivos Lógicos Programables................................................................ 169 Bibliografía ............................................................................................................. 169 Links de Interés....................................................................................................... 169 15.2 Diseño Digital con PLDs ................................................................................ 170 Bibliografía ............................................................................................................. 170 Links de Interés....................................................................................................... 170 15.3 VHDL ............................................................................................................. 170 Bibliografía ............................................................................................................. 170 Links de Interés....................................................................................................... 170 15.4 Buenas Prácticas de Diseño ............................................................................ 171 Bibliografía ............................................................................................................. 171 15.5 Síntesis ............................................................................................................ 171 Bibliografía ............................................................................................................. 171 Links de Interés (síntesis) ...................................................................................... 171 16 Ejemplos ............................................................................................................. 172 16.1 Ejemplos de Lógica Combinacional ............................................................... 172 16.2.............................................................................................................................. 172 16.3 Ejemplos de Lógica Secuencial ...................................................................... 172 16.4 Divisor Reloj................................................................................................... 172 16.5 Control display 7 segmentos........................................................................... 172 16.6 ... otros ejemplos de laboratorios hechos en clase... ....................................... 172 16.6.1 Interfase Mouse....................................................................................... 172 16.6.2 Controlador VGA.................................................................................... 172 16.7 Ejemplo Completo: UART ............................................................................. 172 16.8 etc, etc ............................................................................................................. 172

©2005 Guillermo Güichal

Diseño digital utilizando FPGAs

UTN, Facultad Regional Bahía Blanca

1 Agradecimientos Con la versión 0.6 llega el aporte de algunos colaboradores. Me gustaría aprovechar entonces para agregar esta sección y agradecerles su ayuda. Julio Amoedo de Invap S.E. (www.invap.com.ar) leyó la primer versión y me dio mucha realimentación para mejorar estas notas. Se que hay secciones que pueden no estar muy claras, pero traté de seguir sus sugerencias para que todo sea mas entendible. Salvador Eduardo Tropea, del Instituto Nacional de Tecnología Industrial de Argentina (INTI - www.inti.gov.ar) me dio algunas sugerencias y me hizo notar algunos puntos que podían mejorarse. Gracias a esas sugerencias y sus ejemplos reescribí la sección sobre memorias, agregué algunos comentarios a la sección de VHDL no sintetizable (que en muchos casos sí es sintetizable) y cambié algunos ejemplos que eran muy específicos de Xilinx.

©2003 Guillermo Güichal

7

Diseño digital utilizando FPGAs

UTN, Facultad Regional Bahía Blanca

2 Versiones Ver 0.5 (27/06/2005) Publicación inicial en www.fpga.com.ar Ver 0.6 (29/06/2005) Sección de Agradecimientos y Versiones. Fuentes en las figuras y tablas de terceros Cambios en la implementación de máquinas de estado (no se si aclaran algo o no:) Cambios en la descripción de memorias y su uso en VHDL Algunas notas sobre VHDL sintetizable y no sintetizable Cambios en la sección sobre primitivas Traté de usar términos aceptados en castellano en vez de mis "castellanizaciones" Varias correcciones y cambios menores

©2003 Guillermo Güichal

8

Diseño digital utilizando FPGAs

UTN, Facultad Regional Bahía Blanca

3 Introducción Estas notas son una introducción al diseño digital utilizando lógicas programables y lenguajes de descripción de hardware. La intención no es hacer un tratamiento exhaustivo y completo de este tema, sino presentar el material que permitirá comenzar a trabajar lo más rápido posible. Esto se intenta hacer limitando el contenido y focalizándolo sobre aplicaciones y ejemplos para diseños sintetizables sobre FPGAs. Los ejemplos de aplicaciones fueron desarrollados para la placa de desarrollo D2E, DIO1 y DIO2 de Digilent, Inc (www.digilentinc.com). La placa D2E contiene una FPGA Spartan IIe 200 y varios conectores. Las otras placas se conectan a la D2E y contienen periféricos, tales como botones, leds, display, conectores PS2 y VGA, etc. Por ese motivo, en las secciones o ejemplos que utilicen o presenten herramientas de desarrollo, y en los ejemplos en donde se presenten dispositivos específicos, se utilizarán herramientas y dispositivos de Xilinx. En las secciones generales, sin embrago, se intentan presentar dispositivos y herramientas de varios fabricantes para que el lector tenga una visión más amplia de las alternativas existentes. Se espera que el lector de estas notas tenga una base de diseño digital. Además se supone que el lector conoce algún lenguaje de programación y esta familiarizado con la utilización de herramientas de desarrollo de software. Para el que necesita estudiar los conceptos básicos de diseño digital se recomienda el libro de John F. Wakerly detallado al final de esta sección. Este libro, además, contiene una excelente introducción a los dispositivos lógicos programables. Para el lector que no está familiarizado con ningún ambiente de desarrollo de software también se da una lista de los documentos y manuales de Xilinx que permitirán que se entienda rápidamente el uso de las herramientas de desarrollo. En el futuro se completará una sección introductoria con un repaso de temas de diseño, tecnologías y técnicas digitales. Algunas características y limitaciones que deben tenerse en cuenta al leer estas notas son las siguientes: •





Las notas están principalmente orientadas a síntesis de diseños digitales sobre FPGAs. Esto debe tenerse en cuenta especialmente en las secciones sobre VHDL, ya que los temas tratados y los ejemplos presentados se limitan a ese uso del lenguaje. Se tratan de presentar los temas con ejemplos que permitan la rápida utilización y aprendizaje. Un estudiante debería poder comenzar a hacer diseños bastante complejos sobre FPGAs solo copiando y modificando el código presentado en los apéndices y ejemplos, sin realmente tener una base demasiado formal sobre PLDs y VHDL. Se trata de enseñar a través de ejemplos funcionales, que puedan usarse como plantillas bases para un diseño o que puedan copiarse directamente. En las secciones sobre VHDL, en muchos casos no se presentará formalmente el uso de

©2003 Guillermo Güichal

9

Diseño digital utilizando FPGAs





UTN, Facultad Regional Bahía Blanca

una instrucción, operación o construcción, sino que se darán ejemplos que muestran su utilización. Al no presentar el lenguaje VHDL con todas sus reglas y posibilidades, en muchos casos se presentan ejemplos que utilizan construcciones antes de haberlas explicado formalmente. Como se espera que el lector tenga una base de diseño digital y programación, esto no debería presentar problemas. Se pone bastante énfasis en las formalidades y guías que deberían existir al escribir código (ya sea en un lenguaje de descripción de hardware o cualquier otro lenguaje de programación). Se presentan los ejemplos con un formato estándar que se describe en las notas.

Esta es la primera versión de estas notas, y seguramente contiene errores, omisiones o temas que pueden presentarse de una manera más didáctica. Por favor hacer llegar cualquier duda, comentario o crítica que ayude a mejorarlas en el foro o wiki del sitio www.fpga.com.ar.

©2003 Guillermo Güichal

10

Diseño digital utilizando FPGAs

UTN, Facultad Regional Bahía Blanca

4 Temas Básicos de Diseño Digital COMPLETAR CON ALGUNAS NOTAS SOBRE DISEÑO DIGITAL PARA PODER METER LAS FPGAS y HDLs EN CONTEXTO.

4.1 Diseño Combinacional y Secuencial 4.1.1 Flip-Flops y Latches

4.2 Diseño Secuencial Asincrónico y Sincrónico 4.3 Algunas Notas sobre Diseño Secuencial Sincrónico 4.3.1 Temporizado y Utilización de Registros 4.3.2 Distribución de Reloj 4.3.3 Máxima Frecuencia de Trabajo 4.3.4 Pipelines 4.3.5 Dominios de Reloj 4.3.6 Metaestabilidad en los Flip-Flops

4.4 Autómatas de Estados Finitos (Máquinas de estados finitos) 4.4.1 Máquinas de Mealy 4.4.2 Máquinas de Moore 4.4.3 Codificación de estados. Mínima, One-hot, One-cold, Grey, etc.

4.5 Integridad de Señal 4.5.1 Que afecta la integridad de señal y que es. Como afecta fuera y dentro del chip (FPGA?) Ver nota Altera de PLD design line. Chip-level concerns include improper I/O buffer design and inadequate return-current paths. Package-level issues include high package inductance, mismatched traces, improper routing and inadequate return-current paths, while board-level issues include crosstalk, reflections, signal attenuation and EMI/EMC.

©2003 Guillermo Güichal

11

Diseño digital utilizando FPGAs

UTN, Facultad Regional Bahía Blanca

4.5.2 Terminaciones de Señales Usar terminaciones para evitar rebotes en diseños de alta velocidad. Terminaciones internas en las FPGAs.

4.6 Interfaces Eléctricas Estándares de interfase posibles con las FPGAs actuales. Resistencias de pull-up/down internas. Flancos lentos y rápidos. etc.,

4.7 Potencia y Consumo de los Circuitos Puede ser importante. Potencia estática vs dinámica. Dificultoso de calcular para las FPGA. Hay herramientas que analizan y calculan. Hay que analizar los requerimientos de la aplicación para ver si la potencia es una limitación y/o diseñar las fuentes de alimentación (aplicaciones móviles con baterías, etc.). Las FPGA tienen grandes cantidades de entradas salidas que pueden requerir mucha corriente. Se deben usar capacitores de desacople y tener en cuenta las especificaciones de los fabricantes sobre la cantidad de salidas que pueden cambiar al mismo tiempo.

©2003 Guillermo Güichal

12

Diseño digital utilizando FPGAs

UTN, Facultad Regional Bahía Blanca

5 Diseño Digital con FPGAs y HDLs Para poder atacar un problema complejo (sistema) la mejor manera que tenemos es dividirlo. De esta manera se pueden atacar problemas de menor complejidad y mas fáciles de analizar. Este es el camino que generalmente usamos para diseñar un sistema digital. Las decisiones que se tomen al principio para dividir el problema pueden afectar el resultado final. En algunos casos debemos volver al principio y replantear la arquitectura después de haber resuelto el problema. La experiencia y conocimientos sobre el problema, las posibles soluciones y la tecnologías disponibles ayudarán a que la decisión que se tome sea la mas acertada. Este proceso se esquematiza en la Figura 1.

Figura 1 Esquema del proceso de diseño de un sistema complejo

©2003 Guillermo Güichal

13

Diseño digital utilizando FPGAs

UTN, Facultad Regional Bahía Blanca

Un sistema puede estar compuesto por varios subsistemas, no todos ellos digitales o electrónicos. La primer decisión será entonces que partes del sistema se implementarán como subsistemas digitales. En el sistema digital, los siguientes pasos se siguen en cada nivel de la jerarquía del diseño, cada vez con mayor nivel de detalle. Especificación - Arquitectura - Diseño lógico - Layout (disposición y conexionado) La especificación es muy importante pare definir bien los límites de lo que se quiere fabricar. A partir de la especificación se puede definir una arquitectura con los diferentes componentes que implementan cada función del sistema. Para el diseño se debe definir el funcionamiento de cada uno de esos componentes. Un sistema digital y sus componentes pueden definirse a distintos niveles de abstracción y en tres dominios diferentes: Comportamiento, estructural y físico. En la Figura 2 se muestra el diagrama "Y" de Gajski y Kahn que representa los niveles de abstracción y dominios para un circuito.

Figura 2 Diagrama de Gajski - Kahn

Dominio Comportamiento: Describe lo que hace un sistema (funcionamiento) Nivel Algoritmo: Describe el comportamiento del sistema como operaciones sobre las entradas para producir las salidas deseadas sin detallar los cambios en el tiempo ni las señales internas. ©2003 Guillermo Güichal

14

Diseño digital utilizando FPGAs

UTN, Facultad Regional Bahía Blanca

Nivel RTL: Describe el comportamiento de todas las señales (entradas, internas y salidas) en el tiempo (para cada ciclo de reloj en sistemas sincrónicos) Dominio Estructural: Describe al sistema como una interconexión de componentes (esquemático) Nivel P-M-S (Processor Memory Switch): Describe la estructura como la interconexión de elementos de procesamiento, memoria e interconexión, sin mayores detalles de implementación. Nivel Registros: Describe la estructura como la interconexión de registros y lógica de interconexión. Dominio Físico: Describe la implementación física del sistema (plano). Para lograr tiempo más rápidos de diseño, menos errores, y mayor productividad, lo ideal sería poder trabajar al máximo nivel de abstracción posible (algoritmos), sin entrar en los detalles de bajo nivel. Desafortunadamente, esto no es siempre posible con la tecnología existente (pero esta cambia permanentemente). El nivel de abstracción dependerá entonces de la aplicación y restricciones sobre el diseño. Si se debe diseñar un integrado full-custom analógico es probable que se trabaje al nivel de ecuaciones diferenciales, al nivel de transistores y haciendo el layout manual. Si se diseña un integrado digital con bloques predefinidos (IP, Cores) y adquiridos a terceros se trabajará a un nivel de abstracción mucho mayor (floorplanning, RTL). En el ciclo de diseño con FPGAs, gran parte del aspecto físico ha sido solucionado por el fabricante. En general se trabaja al nivel de transferencia de registros con algunas herramientas que ayudan a diseñar a niveles de algoritmo.

5.1 Metodología General de Diseño Digital Al desarrollar cualquier sistema digital es importante seguir ciertas pautas de trabajo y tener en cuenta factores muy diversos para que el diseño pueda terminarse a tiempo y funcione correctamente. A medida que los diseños se hacen más complejos, la necesidad de seguir un método ordenado para lograr buenos resultados se hace más importante. Los lenguajes de descripción de hardware, si se utilizan correctamente, pueden utilizarse en varios pasos del proceso de desarrollo, no solo para diseñar sino también para especificar y documentar el sistema que se quiere desarrollar. Las grandes capacidades de los PLDs y herramientas de diseño disponibles permiten que los diseños implementados sobre FPGAs sean cada vez mas complejos. En muchos casos varias personas pueden estar trabajando sobre el mismo producto, incluso en localidades separadas. Para poder atacar el problema del diseño de sistemas digitales complejos (ya sea para desarrollos sobre FPGAs, ASICs o PCBs) es importante tener una metodología de trabajo que permita planificar y ordenar el trabajo. Como ejemplo, en la Figura 3 se muestra un esquema de un método que permite ordenar el trabajo de diseño. Según su autor (ver Referencias), la "Metodología Universal de Diseño" define pasos que permiten:

©2003 Guillermo Güichal

15

Diseño digital utilizando FPGAs • • •

UTN, Facultad Regional Bahía Blanca

Diseñar un dispositivo libre de defectos de manufactura, que funciona de manera adecuada y se integra con el sistema. Diseñar el dispositivo de manera eficiente, sin malgastar recursos ni tiempo. Planificar el diseño de manera eficiente, crear un cronograma razonable y asignar los recursos necesarios para las diferentes tareas de manera ordenada.

En muchos casos el proceso es no lineal. Si se descubren fallas o problemas en las especificaciones, se debe volver a iterar sobre los pasos anteriores para corregirlos. El ciclo comienza con un conjunto de requerimientos para la fabricación de un dispositivo o sistema. Estos requerimientos pueden venir de un cliente, de otro grupo de trabajo dentro de la misma empresa o del mismo grupo de trabajo que necesita desarrollar una parte de un sistema mas grande.

Figura 3 - Metodología Universal de Diseño

©2003 Guillermo Güichal

16

Diseño digital utilizando FPGAs

UTN, Facultad Regional Bahía Blanca

5.1.1 Especificación y Diseño Una especificación permite que todas las personas involucradas en un proyecto comprendan cual es el dispositivo que se va a desarrollar. Las personas que forman parte de un proyecto incluyen no solo a los desarrolladores, sino también a clientes, gerencia, personal de otras áreas de la empresa, etc. Las especificaciones deberían describir la solución de manera de cumplir con los requerimientos que se piden para el dispositivo. Al haber una especificación formal, las bases sobre las que trabajar en un diseño quedan preestablecidas y se minimizan los errores por diferencias de apreciación o entendimiento entre los participantes. Una especificación debería comprender los siguientes puntos: • • • • • • • • •

Diagrama en bloques del sistema externo, que muestra como y donde encaja el dispositivo dentro del sistema completo. Diagrama en bloques interno que muestra los principales bloques funcionales. Descripción de las entradas/salidas, incluyendo interfaces lógicas, eléctricas y protocolos de comunicación. Estimaciones de tiempos que se deben cumplir, incluyendo tiempos de "setup" y "hold" para las entradas/salidas y frecuencias de reloj. Estimación de la complejidad y/o magnitud del dispositivo, dado en número de compuertas equivalentes o número de circuitos integrados necesarios. Especificación física del dispositivo. Tamaño, empaquetamiento, conectores, etc. Estimación del consumo de potencia del dispositivo. Precio estimado del dispositivo. Procedimientos de verificación y validación para el dispositivo.

Después de escribir las especificaciones es importante hacer una revisión con todos los miembros del equipo. De esta revisión podrán surgir cosas que no se tuvieron en cuenta individualmente y que produzcan modificaciones. La especificación también incluye la metodología de verificación del dispositivo. Estas muchas veces se dejan para el final del proyecto y no se definen ni llevan a cabo de manera adecuada. La especificación es un documento activo, que se modifica de acuerdo en los cambios de requerimientos y a medida que se tiene más información sobre el proyecto. Una vez que se escribe la especificación se puede utilizar para seleccionar componentes y tecnologías que se utilizarán para el proyecto. El diseño deberá hacerse siguiendo métodos aceptados y confiables. El proceso de diseño es en general un ciclo, e incluye varios pasos intermedios.

©2003 Guillermo Güichal

17

Diseño digital utilizando FPGAs

UTN, Facultad Regional Bahía Blanca

5.1.2 Verificación La verificación engloba varios pasos menores, y al revisar pueden surgir cosas que obligan a volver atrás hacia pasos anteriores. Dependiendo del dispositivo y tecnología utilizada, pero en general sigue los siguientes pasos: •

• • •

Simulación: es en general un proceso continuo, ya que al simular se pueden encontrar problemas que hacen volver sobre el diseño y hacer cambios. Las simulaciones se hacen sobre pequeñas partes del sistema y sobre el sistema completo. Se debe llevar a cabo una simulación funcional, pero también puede incluir simulaciones de temporizado, consumo de potencia y otros parámetros. Revisión: En este paso se revisan los resultados de la simulación y se analiza el comportamiento del dispositivo. Es importante que participen ingenieros externos al proyecto y personas que conozcan el sistema en su totalidad. Implementación Física: Una vez que se ha aceptado el diseño se lleva a cabo la implementación física final del dispositivo. Verificación Formal: En este paso se verifica la implementación física para asegurarse que su funcionamiento coincide con las simulaciones hechas anteriormente. En este paso se deben también evaluar los tiempos, consumo de potencia y cualquier otro parámetro de importancia.

5.1.3 Pasos Finales Si todos los pasos se siguieron correctamente la revisión final debería ser solo una formalidad. Se verifica que el dispositivo está listo para ser entregado o integrado al sistema. La integración y verificación en el contexto del sistema general es muy importante. Si los pasos se siguieron correctamente, cualquier modificación que surja de esta integración será en general pequeña y no requerirá grandes cambios. Cualquier problema o falla que se encuentre debe ser documentarse y analizada para poder corregirla en una próxima versión del dispositivo y evitarla en el futuro.

5.2 Diseño Digital Utilizando Lenguajes de Descripción de Hardware Los lenguajes de descripción de hardware (HDLs) permiten modelar sistemas digitales completos. Mediante diferentes herramientas de software estos modelos pueden luego sintetizarse para implementarlos como circuitos reales. La utilización de HDLs para sintetizar sistemas digitales y la utilización de PLDs permiten crear prototipos funcionales en plazos relativamente cortos. Esto hace que todo el proceso de desarrollo de un sistema digital sea mucho más simple y rápido en comparación con metodologías clásicas (desarrollo con discretos sobre PCBs o el diseño de circuitos integrados). Los modelos de hardware usando HDLs pueden ser estructurales, de comportamiento o una mezcla de estos dos. A nivel estructural se describe la interconexión y jerarquía entre componentes. A nivel de comportamiento de hardware se describe la respuesta entrada/salida de un componente. El comportamiento de un sistema puede modelarse a ©2003 Guillermo Güichal

18

Diseño digital utilizando FPGAs

UTN, Facultad Regional Bahía Blanca

distintos niveles de abstracción o detalle: algoritmos y comportamiento general, nivel de transferencia de registros, nivel de compuertas, etc. El tipo de modelo más usado para síntesis es el denominado RTL (Register Transfer Level), o de nivel de transferencia de registros. Existen herramientas que permiten sintetizar circuitos a partir de modelos de abstracción más elevados, pero en general lo hacen llevando el diseño a un nivel de descripción como RTL antes de sintetizarlo. La utilización de HDLs para síntesis puede tener como objetivo la creación de un circuito integrado de propósito específico (ASIC) o la implementación del circuito en alguna lógica programable (PLD). Independientemente del objetivo, no todas las construcciones posibles de los lenguajes de descripción de hardware pueden sintetizarse y transformarse en circuitos. Esto puede deberse a las limitaciones de las herramientas utilizadas o a que el circuito descrito por el modelo VHDL no puede implementarse físicamente. En general el diseñador debe seguir ciertas pautas de modelado, que dependerán de su objetivo y de las herramientas que utiliza, para que el modelo pueda sintetizarse. Esto es aún más importante para lograr implementaciones óptimas sobre la arquitectura para la que se está diseñando el circuito.

5.3 Flujo de Diseño para Lógicas Programables Cuando se diseña con lógicas programables, cualquiera sea el método usado para diseñar el circuito (HDLs, esquemáticos, etc.), el proceso desde la definición del circuito por el desarrollador hasta tenerlo funcionando sobre un PLD implica varios pasos intermedios y en general utiliza una variedad de herramientas. A este proceso se lo denomina ciclo o flujo de diseño.

5.3.1 Flujo de Diseño (Design Flow) Durante el proceso de creación de un sistema digital desde el código fuente (esquemáticos, VHDL, etc.) a la implementación en un PLD hay varios pasos intermedios. Para cada uno de estos pasos se utilizan herramientas de software diferentes que pueden o no estar integradas bajo un ambiente de desarrollo. En muchos casos las herramientas utilizadas en cada paso del diseño son provistas por diferentes empresas. La Figura 4 muestra el ciclo de diseño típico para lógicas programables. Dependiendo de las herramientas utilizadas, este ciclo puede tener variaciones o las tareas llamarse con otros nombres. A continuación se describe cada uno de los pasos del ciclo de diseño. Se agrega su denominación en inglés entre paréntesis, ya que estos son los términos que se encontrarán en las herramientas de desarrollo. •

Descripción del Diseño: este es el paso en el que se describe el diseño, muchas veces usando un lenguaje de descripción de hardware como el VHDL. Muchas herramientas permiten ingresar el diseño no solo como HDLs sino también como un diagrama esquemático o estructural, una representación gráfica de una máquina de estados o una tabla de entrada-salida. Estas herramientas simplifican en gran medida el diseño y simplifican mucho la tarea del diseñador. El código HDL puede ingresarse utilizando cualquier editor de texto, pero se recomienda

©2003 Guillermo Güichal

19

Diseño digital utilizando FPGAs

UTN, Facultad Regional Bahía Blanca

uno que tenga coloreado automático de sintaxis ("syntax highlighting") ya que ayuda y hace más fácil esta etapa.

Figura 4 - Flujo de diseño para lógicas programables



Generación o Traducción (Generate, Translate): Este paso tiene sentido cuando el diseño se hace mediante algunas de los métodos mencionados anteriormente en vez de en VHDL. En este paso se traducen todos los módulos a VHDL. Para los módulos ingresados como VHDL, las herramientas generalmente hacen una copia a una librería interna. En esta etapa se hace un análisis del VHDL para verificar la sintaxis y semántica de los módulos. También se hace una

©2003 Guillermo Güichal

20

Diseño digital utilizando FPGAs

• •









• • •

UTN, Facultad Regional Bahía Blanca

elaboración de los archivos, que consiste en replicar los componentes que se utilizan más de una vez en el diseño para hacer copias únicas y definir un conexionado adecuado. Compilado (Compile): Los simuladores actuales compilan el código VHDL a un formato que permite una simulación mas rápida y eficaz. Esto se hace en este paso. Simulación y verificación: En este paso se simula el comportamiento del diseño y se evalúa su comportamiento. La simulación puede hacerse en tres etapas diferentes del diseño. La primera es sobre el código VHDL original para verificar el correcto funcionamiento del diseño. La segunda es después de sintetizar el circuito, y se simulan la implementación real sobre el PLD, ya sea con o sin la anotación de tiempos. La tercer etapa en la cual se puede simular el diseño es después de la Ubicación e Interconexión. Esta es la más exacta y la mas engorrosa y lenta, ya que incluye la información final lógica y temporal el diseño sobre el PLD. Síntesis (Synthesis): En este paso se traduce el VHDL original a su implementación con lógica digital, utilizando los componentes específicos del PLD que va a utilizarse. Esta traducción puede llegar hasta el nivel más básico de elementos lógicos (CLBs, LUTs, FFs) o hasta un nivel superior, en el que el diseño se presenta en módulos básicos estándar provistos en una librería por el proveedor del PLD. Ubicación e Interconexión (Place and Route): El PLD está compuesto por muchos bloques idénticos, como se presentó en las secciones anteriores. En este paso, cada componente del diseño sintetizado se ubica dentro del PLD específico. También se interconectan los componentes entre sí y con los pines de entradasalida. Tareas Adicionales: Las tareas adicionales dependen del fabricante y las herramientas. Puede definirse la interconexión de las con los pines físicos del PLD ingresar condiciones de entorno físico para guiar a la herramienta de Ubicación e Interconexión, seleccionar áreas del PLD para ubicar los bloques lógicos, etc. Anotación de Retardos: Como en todo circuito digital, las señales tendrán un retardo de propagación que influirá sobre su comportamiento. Con estos retardos puede anotarse el diseño compilado para una simulación que incluya información de temporizado mas cercana a la implementación real. Una vez sintetizado el diseño, puede hacerse una estimación de los retardos de propagación que habrá entre las señales. Después de la ubicación e interconexión, el cálculo de retardos es mucho mas exacto. Generación de Binarios: Después de la Ubicación e Interconexión se genera algún archivo ya sea para poder utilizar el sistema en un diseño mas complejo o para programar un PLD. Configuración de PLD: Con el archivo binario generado puede configurarse directamente un PLD a través de alguna de las opciones de configuración. Estas opciones dependerán de las herramientas y del PLD que se esté utilizando. Programación de Memoria (PROM): Muchas FPGA no pueden configurarse de manera permanente y requieren algún tipo de memoria para leer la configuración

©2003 Guillermo Güichal

21

Diseño digital utilizando FPGAs



UTN, Facultad Regional Bahía Blanca

cuando se les aplica tensión de alimentación. En la etapa de producción deben configurarse memorias PROM y conectarlas a la FPGA en el circuito impreso. Verificación (automática): Una vez integrada la FPGA con su programación al sistema debe hacerse una verificación para controlar que el diseño sobre en la FPGA funciona bien (las FPGAs pueden tener fallas internas) y que la FPGA se integra bien al sistema en el que está. Pueden usarse técnicas y herramientas de verificación automáticas para evaluar si el dispositivo y el diseño están funcionando como debieran.

En la figura, las flechas de líneas punteadas que vuelven al comienzo indican las iteraciones que muchas veces se dan al trabajar en un diseño nuevo. Después de simularlo o configurar un PLD, pueden descubrirse fallas o haber cambios de requerimientos que obligan al diseñador a volver y modificar la descripción del diseño.

5.4 Lenguajes de descripción de hardware Los lenguajes de descripción de hardware (HDLs) permiten modelar sistemas digitales completos. Al utilizar un HDL para modelar un sistema, es importante recordar que se está modelando hardware, y no escribiendo software. El software se caracteriza por ser de secuencial, una CPU ejecutará cada instrucción después de la anterior. Los efectos de una instrucción dependen exclusivamente de los efectos de las instrucciones anteriores. En el hardware, sin embargo, hay muchas tareas que suceden de manera concurrente y la variable tiempo juega un papel predominante. Un cambio en el tiempo de propagación de una compuerta, el retardo de una traza en una plaqueta, o el no cumplir con los tiempos de establecimiento de un circuito puede cambiar de manera radical el comportamiento de un sistema electrónico digital. Para poder modelar hardware los HDLs permiten describir la concurrencia y paralelismo que se observa en un sistema de hardware (muchas cosas y muchas señales cambian al mismo tiempo). Usando HDLs, los sistemas digitales pueden describirse de diferentes maneras. Estos modelos pueden ir desde el nivel abstracto de un algoritmo o el comportamiento general de un circuito hasta un modelo al nivel de interconexión compuertas lógicas. En una descripción estructural, se definen de manera precisa las interfases de cada componente de un sistema y sus interconexiones. Así se arma un jerarquía de componentes, desde los más básicos hasta el nivel superior que describe el sistema completo. Los HDLs también permiten describir el comportamiento de los componentes. Para poder describir los procesos concurrentes que caracterizan un sistema de hardware. Utilizando un conjunto de instrucciones secuenciales puede modelarse el comportamiento de un sistema digital y controlar la variable tiempo en los modelos. Aunque hay muchos lenguajes de descripción de hardware, dos predominan actualmente el mundo del desarrollo de hardware digital: Verilog y VHDL. De los demás lenguajes, muchos son propietarios, desarrollados por los distintos proveedores de herramientas o PLD. En la actualidad casi todos los fabricantes de PLD y proveedores de herramientas de desarrollo proveen soporte para VHDL y Verilog. En la actualidad están surgiendo nuevos lenguajes que incorporan mayores facilidades y prestaciones, de acuerdo a las

©2003 Guillermo Güichal

22

Diseño digital utilizando FPGAs

UTN, Facultad Regional Bahía Blanca

nuevas tecnologías y necesidades de los desarrolladores. A continuación se presenta una breve introducción a cada lenguaje

5.4.1 VHDL Las siglas VHDL provienen de “VHSIC Hardware Description Lenguaje” y a su vez VHSIC quiere decir “Very High Speed Integrated Circuit”. O sea que VHDL significa lenguaje de descripción de hardware para circuitos integrados de alta velocidad. Sus orígenes datan de la década de 1980. El departamento de defensa de Estados Unidos y el IEEE patrocinaron un programa de desarrollo para un lenguaje con el que se pudieran modelar circuitos integrados de alta complejidad. Un lenguaje de estas características permitiría describir los circuitos para su documentación y además modelarlos y evaluarlos mediante simulaciones antes de incurrir en los grandes gastos de fabricación. El VHDL nació entonces como un lenguaje de modelado y documentación de sistemas electrónicos digitales. El lenguaje se estandarizó mediante el estándar 1076 del IEEE en 1987 (VHDL-87). Este estándar fue extendido y modificado en 1993 (VHDL-93) y 2002 (VHDL-2002). En la actualidad, VHDL se utiliza no solo para modelar circuitos electrónicos sino también para crear, o sintetizar, nuevos circuitos. La capacidad de sintetizar circuitos a partir de los modelos en VHDL (u otro lenguaje de descripción de hardware) surgió después de la creación del lenguaje, con la aparición de herramientas que traducen los modelos VHDL a circuitos reales.

5.4.2 Verilog El lenguaje Verilog fue desarrollado por Gateway Design Automation en 1984. En 1988 Synposis presentó la primera herramienta de síntesis basada en Verilog. Más tarde Cadence Design Systems adquirió Gateway Design Automation y luego “abrió” el lenguaje para que otros proveedores pudieran desarrollar herramientas de simulación y síntesis utilizando Verilog. En 1995 el lenguaje Verilog se transformó en un estándar del IEEE. Mientras que la sintaxis del VHDL es parecido a los lenguajes de programación Ada y Pascal, el Verilog proviene del C y tiene una sintaxis mas parecida a este.

5.4.3 Otros En la actualidad los dos lenguajes mencionados, VHDL y Verilog, son los mas utilizados para la síntesis automática de hardware. Hay mucho esfuerzo de investigación y desarrollo (e incluso algunas herramientas comerciales) que aceptan la descripción de algoritmos en otros lenguajes con un mayor nivel de abstracción. Muchos vendedores de FPGAs proveen herramientas o "toolboxes" que se integran a lenguajes de modelado como Matlab y Simulink. Una vez probado un algoritmo con estas herramientas se genera de manera automática el hardware necesario para implementarlo. Una de las líneas de desarrollo principales es la de poder describir los sistemas con un nivel de abstracción mayor al RTL en un único lenguaje Después se especificarían las restricciones necesarias para los resultados y las herramientas decidirían que parte conviene implementar en hardware y que partes en software.

©2003 Guillermo Güichal

23

Diseño digital utilizando FPGAs

UTN, Facultad Regional Bahía Blanca

En general todas las herramientas actuales, aunque permiten describir o modelar los sistemas con un lenguaje mas abstracto que el RTL terminan generando alguna versión de código RTL antes de sintetizar un circuito.

5.5 Herramientas de Desarrollo La facilidad de desarrollo de sistemas sobre PLDs depende en gran medida del software y hardware que permite crear y probar los diseños de una manera simple y eficiente. Al conjunto de estas aplicaciones se los denomina herramientas de desarrollo. A continuación se describen algunas características de estas herramientas para los distintos pasos del ciclo de diseño.

5.5.1 Descripción del Diseño En la creación de fuentes se usan diferentes herramientas para facilitar el diseño. Algunas herramientas comunes: Estas herramientas incluyen: Modelos de comportamiento. Diferentes niveles. Interfases gráficas, etc.

5.5.2 Generación o Traducción Se lleva todos los tipos de fuentes, tales como representaciones gráficas de máquinas de estado o diagramas esquemáticos. a un lenguaje de descripción de hardware. Los más comunes son VHDL o Verilog.

5.5.3 Simulación La simulación de un sistema descrito de modelos en HDL merece algunos comentarios. Los lenguajes de descripción de hardware modelan o describen, mediante instrucciones secuenciales, bloques de hardware que funcionarán de manera concurrente, es decir, al mismo tiempo. Las señales de los bloques pueden afectarse mutuamente. Simular esto tiene su complejidad, y dentro de los estándares que definen los lenguajes de descripción de hardware VHDL y Verilog se especifica como se deben simular los procesos concurrentes.

5.5.4 Notas Manejo del tiempo en VHDL La simulación en VHDL se basa en incrementos finitos de tiempo. El paso de simulación estará dado por el tiempo especificado en el código para cambios en las señales o por un factor denominado retardo delta ("delta delay"). Este retardo delta es un micro-paso de simulación que se utiliza cuando no se especifica un retardo en la asignación del valor de una señal. Puede haber una cantidad indefinida de retardos delta en un paso de simulación. En la descripción que sigue se mencionan de manera general algunas características de VHDL. Aunque todavía no se ha presentado ninguna característica específica del lenguaje, el lector con una base de diseño de hardware podrá seguirla sin problemas. Un proceso en VHDL es la descripción de un bloque de hardware que actúa de manera concurrente (al mismo tiempo) con todos los demás procesos. Es importante tener en cuenta que ninguna asignación de valores a una señal en hardware será inmediata. Es decir, si se utiliza la operación X = -- Cuando la expresión sea -- 1 o 2 o 3

Opciones case, when Mapeo de puertos en arquitecturas estructurales Para dar valor a bits no asignados de vectores Exponencial Asignación para variables No igual en comparaciones Mayor o igual en comparaciones Asignación para señales Menor o igual en comparaciones Usado para indicar rango indefinidos Usado para definir identificadores extendidos Usado para separar números o cadenas de bits largas

when “000” => port map(A => A, B => B)

©2003 Guillermo Güichal

(others => ‘0’)

VariableA := 1 if (A /= ‘0’) then if (A >= 2) then A ‘1’, 4 =>‘1’, 6 =>‘1’, others => ‘0’); variable ContadorEstados ContadorEstados(Inicial) ContadorEstados(Espera) ContadorEstados(Inicial)

: tdContadorEstados; := 0; := 0; := ContadorEstados(Inicial) + 1;

variable ContadorPrincipio : tdContadorEstados; -- Ejemplo de asignación por posición ContadorPrincipio := (0, 0 ,0); -- Ejemplo de asignaciones nombrada (named) ContadorPrincipio := (Inicial to Ejecucion => 0); -- Otro ejemplo ContadorPrincipio := (Inicial => 0,

©2003 Guillermo Güichal

70

Diseño digital utilizando FPGAs

UTN, Facultad Regional Bahía Blanca

Ejecucion => 0, others => 0); -- Queda solo Espera Cuadro 12 Arreglos

Del ejemplo pueden destacarse varias cosas. • Un arreglo puede ser ascendente o descendente y eso definirá cual es el elemento que queda más a la izquierda. • Un arreglo puede definirse a partir de un tipo enumerado. • Los elementos de un arreglo pueden accederse usando el nombre del arreglo seguido del índice entre “( )”. Ej.: Arreglo(0) := … • Los elementos de un arreglo pueden accederse usando notación por posición e indicando los valores para todos sus elementos entre “( )” Ej.: Arreglo := (3, 2…) • Los elementos de un arreglo pueden accederse usando los índices de manera explícita con notación nombrada. Ej.: Arreglo := (0 =>3, 1 => 2…) • La palabra reservada others se utiliza para acceder a todos los elementos de de un arreglo que no hayan sido definidos. 7.4.6.2 Arreglos sin Rangos Predeterminados VHDL permite definir tipos de arreglos sin rangos predeterminados. Estos arreglos se denominan unconstrained arrays. El rango se da al declarar un objeto de ese tipo. A continuación se muestran dos ejemplos de arreglos de este tipo muy utilizados en VHDL.

type std_logic_vector is array (natural range ) of std_logic; type string is array (natural range ) of character; Cuadro 13 Arreglos sin rango predeterminado

El primero es std_logic_vector, definido en el paquete std_logic_1164 y es el tipo más utilizado para señales de ancho de más de un bit. Los paquetes se presentan más adelante. El segundo es un tipo predefinido de VHDL, string, y permite definir cadenas de caracteres. No se utilizan para diseños sintetizables El valor de los índices o rango se dan al declarar un objeto como se muestra en los ejemplos Ejemplos: -- string. No usado en diseños sintetizables constant Cadena: string (0 to 10); -- Rango definido explicitamente variable Cadena: string := “Cadena de caracteres “; -- Rango definido -- de manera implícita

©2003 Guillermo Güichal

71

Diseño digital utilizando FPGAs

UTN, Facultad Regional Bahía Blanca

-- std_logic_vector. Buena práctica siempre definirla como (MSB downto 0) constant PalabraControl : std_logic_vector (3 downto 0) := “1001”; constant PalabraControl : std_logic_vector (15 downto 0) := X“F5D6”; signal PalabraEntrada : std_logic_vector (3 downto 0); 7.4.6.3 Records Un record es una colección de valores que no deben ser todos del mismo tipo. Se presentarán mediante un ejemplo en el cuadro siguiente. -- Un record que agrupa varios -- control de tiempo en horas, type tdTiempo is record seg : integer range 0 to min : integer range 0 to horas : integer range 0 to end record tdTiempo;

valores para llevar un minutos y segundos 59; 59; 23;

-- Declaración y asignación para un objeto del tipo tdTiempo constant Espera : tdTiempo := (seg => 4, min => 21, horas => 0); Cuadro 14 Declaración de un record

7.4.7 Calificación y Conversión de Tipos Si varios tipos definen el mismo valor posible puede ser que un valor se pueda interpretar de manera ambigua. Para especificar el tipo explícitamente se usa la comilla simple. Ejemplos: unsigned’(“01001”) tdNivelLogico’(high)

-- “01001” puede interpretarse como signed o unsigned -- Si tdNivelLogico es un subtipo de tdNivelValido que -- también puede tomar el valor high

Como VHDL es un lenguaje con tipos fuertes, cuando se necesita convertir de un tipo a otro se debe especificar una conversión explícitamente. Esto se hace utilizando el tipo al que se quiere convertir seguido del valor de otro tipo entre paréntesis. Ejemplos: real(3) integer (4.5)

-- Para convertir el entero 3 a real -- Para redondear el real 4.5 a entero

©2003 Guillermo Güichal

72

Diseño digital utilizando FPGAs

UTN, Facultad Regional Bahía Blanca

7.5 Objetos en VHDL Como se mencionara anteriormente, hay cuatro clases de objetos que pueden declararse en . En esta sección se presentarán las constantes, variables y señales. Los archivos no pueden usarse para diseños sintetizables y se describirán en otra sección.

7.5.1 Constantes Las constantes son tipos en las que se almacenan datos que no cambian. Como su nombre lo indica, se mantienen constantes en el tiempo. Las constantes se utilizan para poder asignar tipos definidos a valores. Se utilizan para parametrizar valores que se repetirán en distintos lugares del diseño y evitar “números mágicos”, que aparecen en el código pero no se entiende bien que significan ni que tipo tienen. En vez de esto, puede definirse un paquete que contenga todas las constantes usadas en el proyecto, con tipos nombres que tengan sentido al leer el código. Las constantes se declaran como se muestra en el cuadro.

-----

Declaración de constantes El formato usado en este ejemplo para los identificadores de constantes es el recomendado en varias guías de código VHDL

constant ADC_VALOR_MAXIMO : integer := 3000; constant ADC_VALOR_MINIMO : integer := -3000; constant CONTADOR_ANCHO_DE_CUENTA : natural := 2; constant TIEMPO_SIMULACION_MAXIMO : time = 200 ns; Cuadro 15 Declaración de constantes

7.5.2 Señales Las señales son la representación de las conexiones de hardware que toman valores lógicos. En general deben utilizarse señales al hacer un diseño que será sintetizado. Los tipos de señales mas utilizados son los mostrados en las declaraciones del cuadro. Estos tipos se han definido por un estándar del IEEE que se describe más adelante. EL operador para asignación de valores a una señal es el símbolo “