Descripción
Los dispositivos FPGA permiten la implementación de todo el hardware y software de un sistema digital en un circuito integrado configurable, permitiendo desarrollos conocidos como Sistemas-en-Chip-Programable.
La especificación de todo el sistema se realiza en forma flexible debido a que su diseño e implementación involucran herramientas de desarrollo que permiten un elevado nivel de abstracción.
El desarrollo de sistemas embebidos modernos demanda la implementación de funciones sofisticadas en plazos de diseño cortos. Los dispositivos FPGA posibilitan una gran flexibilidad en el diseño e implementación de estos sistemas.
En este libro, se introducen los conceptos y metodologías necesarios para la realización de sistemas embebidos en dispositivos FPGA. Las metodologías de diseño, implementación y desarrollo estarán realizadas utilizando las plataformas y dispositivos de Altera, pero los fundamentos conceptuales permitirán su utilización en plataformas y dispositivos de otros fabricantes.
Índice
CAPÍTULO 1 Diseño de sistemas embebidos . 1
Introducción 1
Sistemas embebidos en lógica programable . 2
Desafíos del diseño digital . 3
Modelo de rebalse (Waterfall Model) . 3
Modelo de prototipo (Prototype Model) 5
Métricas de diseño 7
Velocidad 7
Energía 8
Tamaño . 8
Costo . 9
Otras métricas de diseño 9
Conclusiones 10
CAPÍTULO 2 Lógica programable y lenguajes de descripción de hardware 11
Circuitos digitales con lógica programable 11
Circuito combinacional . 11
Circuito secuencial 12
Dispositivos lógicos programables: CPLD y FPGA 14
Recursos adicionales en dispositivos FPGA . 17
Lenguajes de descripción de hardware . 18
Niveles de abstracción en lenguajes de descripción de hardware 20
Síntesis y simulación de archivos de descripción de hardware . 21
Verilog HDL 22
Estructura module 23
Sección port list 23
Sección Declaraciones de ports 24
Sección Declaración de tipos de datos 25
Descripción de la funcionalidad del circuito . 25
Instanciación de module . 26
Conexión por orden y por nombre . 26
Representación de valores en Verilog HDL . 27
Operadores en Verilog HDL. 27
Circuitos combinacionales y secuenciales en Verilog HDL 28
Bloque always . 29
Sentencia assign . 29
Estructuras de control . 30
Sentencia if-else 30
Sentencia case 30
Sentencia for . 31
Ejemplo 31
Multiplicador de Booth . 31
Conclusiones 36
CAPÍTULO 3 Herramientas de diseño de hardware 37
Herramientas de diseño de hardware . 37
Flujo de diseño con dispositivos lógicos configurables . 38
Plataformas y licencias de Quartus II 40
Proyectos en Quartus II. 40
Interfaz gráfica de Quartus II 41
Creación de proyecto 43
Creación del archivo de diseño . 49
Entrada del diseño (Design Entry) . 50
Compilación del diseño . 51
Etapa fitter (place & route) . 52
Configuración 53
Asignación de pines (Pin Planner) . 53
Programador del dispositivo “ ” 54
Simulación del diseño 55
Simulación de diseños digitales con lenguajes de descripción de hardware: testbench . 56
Simulación en el flujo de diseño de Quartus II 57
Flujos de simulación en Quartus II 59
Configuración de la simulación en Quartus II (opción NativeLink) 59
Inicialización de ModelSim a Nivel RTL (opción NativeLink) 62
Inicialización de ModelSim a Nivel Gate (opción NativeLink) 62
Simulación con ModelSim . 63
Configuración de los estímulos de la simulación 65
Conclusiones 67
CAPÍTULO 4 Soft-processors en dispositivos FPGA 69
Introducción a soft-processors 69
Arquitectura del procesador Nios II 70
Características del procesador Nios II . 70
Versiones de Nios II. 73
Instrucciones personalizables (Custom Instructions) 74
Síntesis de software a hardware . 75
Licencia de Nios II . 75
Recomendaciones para diseños con Nios II 76
Concepto de configuración de soft-processors . 76
Flexibilidad de periféricos y mapa de direcciones 77
Bus Avalon . 77
Características del bus Avalon 77
Interfaz Avalon Memory-Mapped . 78
Transferencias en Avalon-MM 80
Típica transferencia de lectura y escritura 80
Transferencias de lectura y escritura con wait-states fijos . 80
Transferencia con pipeline 80
Transferencias burst . 80
Interfaz Avalon Interrupt 80
Generador de interrupción . 81
Receptor de interrupción 81
Interfaz Avalon Streaming. 81
Características de la interfaz Avalon Streaming 81
Sistemas Embebidos en FPGA ________________________________________________ | xiii
SISTEMAS EMBEBIDOS EN FPGA – CAYSSIALS
Interfaz Avalon Conduit 81
Interfaz Avalon Tri-state Conduit 81
Componentes de biblioteca 82
Conclusiones 82
CAPÍTULO 5 Diseño de sistemas embebidos en lógica programable 83
Sistemas-en-chip-programable (SOPC) . 83
Flujo de Diseño de Sistemas en Chips Programables 83
Qsys y SOPC Builder 84
Directorio de proyecto en Qsys 85
Diseño de SOPC en Qsys . 86
Realización del flujo de diseño de un SOPC 88
Creación del proyecto de máxima jerarquía . 88
Creación del diseño del SOPC . 89
Configuración del SOPC . 89
Interfaz gráfica de Qsys . 89
Definición de la fuente de reloj externa . 90
Configuración de los componentes . 91
Selección y configuración del procesador Nios II 92
Selección y configuración de la memoria RAM interna del dispositivo FPGA . 94
Selección y configuración del temporizador del sistema (Interval Timer) 97
Selección y configuración de un puerto de entrada/salida (PIO Parallel IO) . 101
Selección y configuración de un puerto de comunicaciones JTAG (JTAG UART) . 103
Configuración del SOPC 106
Asignación automática de direcciones de memoria . 107
Asignación automática de interrupciones 107
Configuración de los vectores de reset y exception del procesador Nios II del sistema 108
Configuración de las entradas y salidas del SOPC . 109
Generación del sistema en Qsys 110
Solapa del generador del sistema (Generation) 110
Instanciación del SOPC en Quartus II 114
Agregado de lógica adicional y asignación de pines 116
Agregado de lógica adicional 116
Asignación de nombres a los puertos . 117
Conexión de la lógica externa . 118
Asignación de pines 119
Conclusiones 119
CAPÍTULO 6 Generación del software . 121
Generación de software para Nios II . 121
Capa de abstracción de hardware (HAL) y Sistemas Operativos (OS) . 122
Capa de abstracción de hardware (HAL) . 123
Sistema operativo (OS) . 124
Estructura monolítica . 125
Estructura micronúcleo 126
Estructura híbrida . 126
Sistemas operativos para SOPC 127
Estructura de la HAL de Altera 128
Modelo genérico de los controladores de dispositivos de la HAL de Altera . 129
SISTEMAS EMBEBIDOS EN FPGA – CAYSSIALS
Desarrollo de software embebido para el procesador Nios II de Altera . 131
Ambiente de desarrollo de software para el procesador Nios II . 131
Flujo de diseño con Nios II EDS . 131
Makefile y Nios II SBT 132
Creación de un proyecto de software en Nios II SBT 133
Ejecución de Eclipse para Nios II SBT y la inicialización del espacio de trabajo . 133
Estableciendo el espacio de trabajo del proyecto (Workbench) . 134
Creación del proyecto en Nios II SBT 135
Programación del código de la aplicación . 138
Configuración del proyecto BSP: editor de BSP (BSP Editor) . 139
Solapa Main 141
Categoría Common . 141
Categoría Advanced 142
Solapa Software Packages 142
Solapa Drivers . 143
Solapa Linker . 143
Solapa Enable File Generation 145
Solapa Target BSP Directory . 145
Propiedades del proyecto BSP . 145
Configuración del proyecto de aplicación . 146
Construcción de los proyectos 148
Conclusiones 149
CAPÍTULO 7 Implementación del SOPC . 151
Introducción 151
Implementación del hardware y software 152
Ejecución del software desde memoria interna del dispositivo FPGA 152
Creación de los archivos de inicialización de memoria interna . 153
Inclusión automática de los archivos de inicialización de memoria al proyecto Quartus II 153
Inclusión manual de los archivos de inicialización de memoria al proyecto Quartus II . 154
Ventajas y desventajas de la utilización de memoria interna del dispositivo FPGA 155
Ejecución del software desde la memoria flash de configuración del dispositivo FPGA
. 156
Aplicación boot loading 156
Configuración por defecto de boot loading en la HAL de Altera . 157
Configuración de opciones de la aplicación boot loading . 157
Inclusión de memoria flash en el SOPC . 158
Selección y configuración de memoria flash en SOPC 158
Programación de la flash del sistema . 160
Creación del archivo de configuración de Flash Programmer . 161
Especificación de la configuración de Flash Programmer . 163
Opciones de Flash Programmer 163
Ejecución del software desde memoria externa de almacenamiento masivo. . 164
Características de las memorias SD. 164
Modo de funcionamiento de las memorias SD . 165
Selección y configuración de memoria SD en SOPC 165
Conclusiones 165
CAPÍTULO 8 Verificación del funcionamiento de sistemas embebidos en dispositivos FPGA 167
Introducción 167
Simulación de SOPC . 168
Generación de un modelo de simulación en Qsys 168
Depuración en placa de desarrollo de SOPC . 173
Nios II Software Build Tools for Eclipse . 173
Componente Nios II System ID . 174
Generación del archivo OBJdump . 174
Consola de Nios II y funciones de la biblioteca stdio 177
Desbordamiento de la pila 177
Puntos de quiebre (Breakpoints) y ejecución paso-a-paso . 177
In-System Memory Content Editor 178
SignalTap II Logic Analyzer . 178
Conclusiones 179
CAPÍTULO 9 El lenguaje de comandos Tcl . 181
Introducción 181
El lenguaje de comandos Tcl . 181
Sintaxis básica del lenguaje Tcl . 182
Intérprete Tcl 182
Creación de archivos de comandos Tcl . 183
Ejecución de archivos de comandos Tcl 183
Creación y sustitución de variables en Tcl . 184
Creación de variables 184
Sustitución $ . 184
Operaciones aritméticas con variables: comando expr 185
Sustitución anidada [ ] 185
Sustitución backslash 185
Evaluación de cadenas de caracteres: comando eval . 185
Listas . 186
llength . 186
lindex 186
lsearch 186
lappend . 187
foreach . 187
Estructuras de control en Tcl 187
Comando if/then/else/elseif . 188
Comando switch . 188
Comando for . 189
Comando foreach . 190
Comando while . 190
Comando break y continue . 191
Procedimientos . 191
Alcance de las variables en procedimientos (Scope) 192
Comandos de entrada/salida 192
Comando open . 192
Comando close . 193
Comando puts 193
Comando gets . 194
Comentario . 194
Ejecución de archivos Tcl por línea de comando. 195
CAPÍTULO 10 Lenguaje de comandos Tcl en herramientas de diseño: Quartus II 197
Lenguaje de comandos Tcl en herramientas de diseño 197
Soporte de archivos de comandos Tcl en Quartus II . 198
Paquetes Tcl (Tcl Packages) 198
Ejecutables de línea de comandos de Quartus II 200
Utilidad para ayuda de paquetes y comandos Tcl en Quartus II . 202
Creación y manipulación de proyectos en Quartus II con comandos Tcl 203
Paquete ::quartus::project . 204
Comando project_exist . 206
Comando project_new 206
Comando project_open . 207
Comando project_close . 208
Comando create_revision 209
Comando export_assignments . 209
Creación de proyectos en Quartus II mediante comandos Tcl 210
Ejemplo: creación de proyecto en Quartus II mediante comandos Tcl . 211
Asignación de pines 214
Compilación de proyectos en Quartus II con comandos Tcl 214
Paquete ::quartus::flow 214
Comando execute_flow . 215
Compilación de Proyectos en Quartus II mediante comandos Tcl 216
Ejemplo: compilación de proyecto en Quartus II mediante comandos Tcl . 216
Conclusiones 217
CAPÍTULO 11 Utilidades y archivos de comandos para la generación de SOPC 219
Introducción 219
Utilidades en Qsys y Nios II SBT . 219
Utilidades y archivos de comandos en Qsys 220
Creación y manipulación de SOPC con qsys-script . 220
Ejemplo de arquitectura de SOPC en Qsys 222
Generación del SOPC en Qsys con ip-generate 223
Generación de los archivos de simulación del SOPC con ip-make-simscript . 225
Utilidades y archivos de comandos en Nios II SBT 225
Archivos makefile en Nios II SBT . 226
Archivos de comandos y utilidades de línea de comandos de Nios II SBT 226
Comandos Tcl para la configuración del proyecto BSP . 228
Generación del proyecto BSP y comandos Tcl “Callbacks” . 228
Herramientas de línea de comando GNU para Nios II (Consola “bash”) . 229
Utilidades GNU para Nios II de Altera . 230
nios2-elf-gcc y nios2-elf-g++ . 230
nios2-elf-objdump 231
Creación de archivos de inicialización de memoria . 231
Conclusiones 231
Referencias 233
Anexo 1 Instalación de Linux CentOS-5 . 235
Anexo 2 Instalación de Quartus II Web Edition versión 13 253
Pasos para la instalación . 253
Configuración del menú de aplicaciones en CentOS . 260
Anexo 3 Flujo de diseño con utilidades de línea de comandos 265
Introducción 265
Flujo de diseño del proyecto en Quartus II mediante línea de Comandos . 266
Flujo de diseño de proyecto SOPC en Qsys mediante línea de comandos 267
Flujo de diseño de proyecto BSP mediante línea de comandos 268
Flujo de diseño de proyecto de aplicación mediante línea de comandos . 269
Anexo 4 Comandos Tcl para la utilidad “qsys-script” 271
Ejemplo . 272
Comandos Tcl de qsys-script . 272
Anexo 5 Comandos Tcl para la configuración de proyectos BSP 283
Anexo 6 Referencia de configuraciones de BSP, paquetes de software y controladores . 291
Anexo 7 Funciones y estructuras de la HAL de Altera 301
Funciones de la API de la HAL de Altera 301
Estructuras estándar de la HAL de Altera .. 310
Anexo 8 Biblioteca de código abierto newlib 313
Introducción 313
Tipos de datos en C . 313
Funciones de utilidades estándar (stdlib.h) 314
Macros y funciones para caracteres (ctype.h) 315
Funciones de entrada/salida (stdio.h) . 316
Manipulación de memoria y string (string.h) 318
String del tipo wide character (wchar.h) . 319
Manejo de señales: signal handling (signal.h) . 319
Funciones de tiempo (time.h) . 320
Configuración Local (locale.h) . 321
Reentrancia . 321
Llamadas al sistema (System Calls) 321
Definiciones para la interfaz con el sistema operativo (stubs) 321