Reservados todos los derechos. Queda rigurosamente prohibida, sin la autorización escrita de los titulares del Copyright
Views 158 Downloads 1 File size 26MB
Reservados todos los derechos. Queda rigurosamente prohibida, sin la autorización escrita de los titulares del Copyright bajo las sanciones establecidas de las leyes, la reproducción parcial o total de esta obra por cualquier medio o procedimiento incluidos la reprografía y el tratamiento informático.
© 2012 Diseño de sistemas empotrados de 8 bits en FPGAs con Xilinx ISE y PicoBlaze © Autores: Luis Jacobo Álvarez Ruiz de Ojeda Francisco Poza González © 2012 Editorial: Vision Ebooks C/ San Benito, 15, Local 28029 Madrid Tel: 0034 91 3117696 Web: www.visionebooks.es Visión Ebooks es marca registrada de Vision Netware S.L. ISBN: 978-84-940472-0-6 Disponible en ebook www.visionebooks.com Pedidos a: [email protected] Si quiere recibir información periódica sobre las novedades de nuestro grupo editor envíe un correo electrónico a: subscripció[email protected]
Dedicatoria A los alumnos de nuestros cursos de Posgrado, sin los cuales este libro no hubiera sido posible.
ÍNDICE Página Introducción ................................................................................................................. 21 Agradecimientos ........................................................................................................ 25
PRESENTACIONES DE TEORÍA ................................................................................ 27 Tema 1. Introducción a los Sistemas en un Circuito (SOCs) .................................. 29 Introducción al diseño de sistemas digitales complejos. Método “software”. Método “hardware”. Sistema en un Circuito (S.O.C.). Sistema en un Circuito Programable (P.S.O.C.). Microprocesadores “hardware”. Microprocesadores “software”. Tema 2. Codiseño Hardware / Sotware ..................................................................... 71 5
Introducción. Codiseño hardware/software. Fases detalladas del flujo de codiseño. Particionado hardware/software. Tema 3. Arquitectura de las FPGAs. Familia Spartan 3E ........................................ 83 Introducción. Arquitectura de la familia Virtex 2 de Xilinx. CLBs. “Slices”. Memorias. Multiplicadores “hardware”. Circuitos de reloj. Bloques de E/S. Tecnologías de E/S. Virtex 2 Pro frente a Virtex 2. Virtex 4 frente a Virtex 2. Virtex 5 frente a Virtex 4. Spartan 3 frente a Virtex 2. 6
Normas de síntesis. Tema 4. Arquitectura interna Picoblaze .................................................................. 143 Introducción. Versiones de Picoblaze. Características generales Picoblaze 3. Arquitectura interna Picoblaze 3. Diagrama de bloques. Resultados de implementación. Comparación versiones Picoblaze.
7
Tema 5. Juego de instrucciones Picoblaze ............................................................ 155 Introducción. Versiones de Picoblaze. Resumen instrucciones Picoblaze 3. Otras operaciones. Tabla instrucciones Picoblaze 3. Ejercicios. Tema 6. Arquitectura externa Picoblaze ................................................................. 173 Introducción. Interfaz de E/S del Picoblaze. Instrucciones de E/S. Conexión de periféricos de entrada. Conexión de periféricos de salida. Puesta en estado inicial.
8
Interrupciones externas. Memoria de programa. Tema 7. Codiseño HW/SW para sistemas empotrados basados en Picoblaze ... 233 Introducción. Proceso de diseño de aplicaciones empotradas con Picoblaze. Proceso de diseño detallado. Tema 8. Aplicaciones Picoblaze .............................................................................. 269 Introducción. Aplicaciones del Picoblaze. Tema 9. Recursos web de Xilinx sobre microprocesadores empotrados ........... 277 Introducción. Página principal de Xilinx. Página sobre procesadores empotrados de Xilinx. Páginas sobre Picoblaze 3. Picoblaze Forum. Picoblaze IDE. 9
Tema 10. Análisis de la implementación del Picoblaze ......................................... 287 Introducción. Memorias de programa y datos. Contador de programa. Memoria pila. ALU. Tema 11. Juego de instrucciones detallado del Picoblaze ................................... 303 Introducción. Juego instrucciones comunes. Instrucciones específicas Picoblaze 3. Codificación instrucciones Picoblaze 3.
PRESENTACIONES DE LABORATORIO ................................................................. 331 Tema 1. Introducción a la herramienta Foundation ISE de Xilinx ........................ 333 Introducción. Descripción. 10
Compilación. Síntesis. Simulación funcional. Implementación. Simulación temporal. Descripción (continuación). Prueba en la placa. Placa Nexys 2 de Digilent. Programación del circuito. iMPACT. Adept. Tema 2. Desarrollo “software” del microprocesador Picoblaze con KCPSM ..... 427 Introducción. Sintaxis ensamblador. Programa ensamblador KCPSM de Xilinx. Directivas KCPSM. Ensamblador KCPSM. 11
Ejemplo programa ensamblador. Ejercicios. Tema 3. Desarrollo “software” del microprocesador Picoblaze con pBlazeIDE
449
Introducción. Sintaxis ensamblador. Programa ensamblador y simulador pBlazeIDE. Directivas pBlazeIDE. Menús pBlazeIDE. Ejemplo programa ensamblador. Simulación con pBlazeIDE. Diferencias entre pBlazeIDE y KCPSM. Ejercicios. Tema 4. Realización de circuitos de acoplamiento para periféricos de Picoblaze 483 Introducción. Circuitos de selección de periféricos de entrada. Circuitos de selección de periféricos de salida. 12
Circuitos de gestión de interrupciones. Tema 5. Realización de periféricos para Picoblaze ............................................... 533 Introducción. Periféricos básicos. Interruptores. Detector de flancos. Pulsadores. Registro simple. Visualizador dinámico. Memoria RAM dedicada. Memoria RAM distribuida. Sincronizador reloj rápido a reloj lento. Circuitos periféricos estándar. Temporizador / Contador. Modulador PWM. UART RS232. 13
Propuestas. Tema 6. Diseño de sistemas empotrados basados en Picoblaze ........................ 607 Introducción. Proceso de diseño de aplicaciones empotradas con Picoblaze. Ejemplo detallado del proceso de diseño. Especificaciones. Particionado HW/SW. Descripción “hardware”. Simulación “hardware”. Depuración “hardware”. Desarrollo “software”. Compilación y enlazado. Simulación “software”. Depuración “software”. Combinación HW/SW. Síntesis e implementación. 14
Cosimulación HW/SW. Codepuración HW/SW. Proceso de diseño alternativo para modificaciones sólo de “software”. Ejercicios. Conclusiones. Tema 7. Depuración de sistemas empotrados con “Chipscope” ........................ 669 Introducción. “Core Chipscope”. Parámetros “Chipscope”. Implementación. Análisis con “Chipscope”. Conclusiones.
15
EJEMPLOS DE DISEÑO DE SISTEMAS EMPOTRADOS ....................................... 703 Ejemplo reloj digital con alarma Spartan 3 ............................................................. 705 Enunciado en formato Powerpoint ...................................................................... 705 Especificaciones. Manejo de la aplicación. Observaciones. Solución: Circuitos necesarios. Programa en ensamblador. Asignación de puertos de E/S. Simulación de los circuitos. Prueba de la aplicación.
16
Guión de laboratorio ............................................................................................ 737 Ejemplo sistema de gestión basado en un transmisor/receptor asíncrono RS232 Spartan 3 ................................................................................................................... 739 Enunciado en formato Powerpoint ...................................................................... 739 Especificaciones. Manejo de la aplicación. Observaciones Puerto serie RS232. UART RS232. Solución: Circuitos necesarios. Programa en ensamblador. Asignación de puertos de E/S. Simulación de los circuitos. Prueba de la aplicación. 17
Guión de laboratorio ............................................................................................ 793 Ejemplo de control de visualización de mensajes a través de un visualizador LCD 797 Enunciado en formato Powerpoint ...................................................................... 797 Especificaciones. Manejo de la aplicación. Observaciones. Visualizador LCD. Solución: Circuitos necesarios. Programa en ensamblador. Asignación de puertos de E/S. Simulación de los circuitos. Prueba de la aplicación.
18
Guión de laboratorio ............................................................................................ 845 MATERIAL DE CONSULTA ....................................................................................... 849 Comparación entre las versiones del microprocesador Picoblaze ............................. 851 Etapas del proceso de diseño mediante Picoblaze .................................................... 853 Hojas de planificación de uso de registros para el diseño de sistemas empotrados .. 859 BIBLIOGRAFÍA ......................................................................................................... 869 LOS AUTORES .......................................................................................................... 873
19
INTRODUCCIÓN Este libro está dirigido a todos aquellos profesionales de la Electrónica, tanto docentes como técnicos, que deseen introducirse en el diseño de sistemas empotrados de 8 bits en FPGAs (“Field Programmable Gate Arrays”), es decir, sistemas basados en microprocesadores embebidos (“embedded”) en el interior de FPGAs. En este libro se estudian el microprocesador de 8 bits Picoblaze de Xilinx, para su implementación mediante FPGAs de las familias Spartan y Virtex de Xilinx. Para poder trabajar con estos microprocesadores, es necesario aprender el manejo de la herramienta ISE de Xilinx [XILINX]. Este libro tiene su origen en la documentación elaborada para la impartición de varios cursos de posgrado sobre sistemas empotrados de 8 bits de Xilinx para el diseño de aplicaciones empotradas en FPGAs, que se celebraron en el Departamento de Tecnología Electrónica de la Universidad de Vigo en los años 2005 a 2008 (más información en http://www.dte.uvigo.es/logica_programable/cursos.htm). Este libro tiene un nivel básico y para seguirlo, el lector debe disponer de “software” gratuito de Xilinx [XILINX]. Para el máximo aprovechamiento de este libro, los lectores deben poseer los siguientes conocimientos previos: - Nivel básico del lenguaje VHDL. - Manejo de la herramienta ISE de Xilinx para el diseño con FPGAs. - Conocimientos de microprocesadores. Arquitectura general. Buses. - Nivel básico de lenguaje ensamblador. 21
- Manejo básico del sistema operativo Windows. Si el lector desea un libro avanzado sobre el diseño de sistemas empotrados de 32 bits con “software” que no es gratuito, puede consultar el libro [ÁLVAREZ 11]. El libro se estructura en los siguientes apartados: - Teoría. Se incluyen las presentaciones en “Powerpoint” utilizadas para explicar los siguientes temas: o Introducción al diseño de Sistemas en un Circuito (S.O.C.). o arquitectura de las FPGAs de la familia Spartan de Xilinx. o Microprocesador “Picoblaze" de Xilinx. Arquitectura interna. Juego de instrucciones. Arquitectura externa. - Laboratorio. Se incluyen las presentaciones en “Powerpoint” utilizadas para explicar los siguientes temas: o Herramienta ISE para el diseño de sistemas digitales con FPGAs de Xilinx. o Herramientas “software” del microprocesador Picoblaze de Xilinx. o Realización de circuitos de acoplamiento de periféricos para el microprocesador Picoblaze. o Realización de circuitos periféricos para el microprocesador Picoblaze. o Diseño de sistemas digitales basados en el microprocesador Picoblaze. - Práctica. Se incluyen las presentaciones en “Powerpoint” utilizadas para explicar los ejemplos y los guiones de laboratorio necesarios para realizar los siguientes ejemplos: o Ejemplo básico con interrupción. o Reloj digital. o Sistema de gestión basado en un transmisor/receptor asíncrono RS232. 22
o Sistema de visualización de mensajes a través de un visualizador LCD. Las referencias al CD-ROM incluidas en el texto de este libro se encuentran accesibles para el lector en el enlace http://www.dte.uvigo.es/logica_programable/libros.htm [DTE2].
23
AGRADECIMIENTOS Los autores desean agradecer su aportación a las siguientes personas y empresas: - Xilinx, por su donación al Departamento de Tecnología Electrónica de la Universidad de Vigo de licencias de sus herramientas “software” ISE y EDK, así como de diferentes placas de desarrollo con FPGAs. Estas placas han sido utilizadas para la realización de los diferentes ejemplos. También debemos agradecer su cortesía al ceder las figuras de sus hojas de características y manuales para los distintos capítulos de este libro. - Silica, por sus gestiones con su representada Xilinx para la obtención de las licencias y placas mencionadas anteriormente, y por su apoyo a la celebración de los cursos que han dado lugar a este libro.
25
PRESENTACIONES DE TEORÍA
Sistemas en un circuito (S.O.C.)
Índice
21/05/2012
Introducción al diseño de sistemas digitales complejos. Método “software”. Método “hardware”. Sistema en un Circuito (S.O.C.). Sistema en un Circuito Programable (S.O.P.C.). Microprocesadores “hardware”. Microprocesadores “software”.
Sistemas en un circuito (SOC). L. Jacobo Álvarez, Francisco Poza
29
Introducción (I).
El diseño de un sistema digital complejo que permita resolver un determinado problema puede realizarse mediante dos aproximaciones diferentes:
Método “software”.
Método “hardware”.
21/05/2012
Sistemas en un circuito (SOC). L. Jacobo Álvarez, Francisco Poza
30
Método “software” (I).
Se utilizan circuitos procesadores estándar, ya sean de uso general (microprocesadores) o de uso específico (DSPs).
Estos circuitos presentan una serie de funciones predefinidas, asociadas a un juego de instrucciones fijo.
El diseñador debe realizar el programa (secuencia de instrucciones) que debe ejecutar el procesador para realizar las funciones requeridas.
21/05/2012
Sistemas en un circuito (SOC). L. Jacobo Álvarez, Francisco Poza
31
Sistema digital realizado mediante un procesador
La arquitectura de los procesadores se basa en: Unidad operativa (unidad aritmético-lógica + memoria de datos). Unidad de control (búsqueda decodificación ejecución). Memoria de programa.
21/05/2012
Sistemas en un circuito (SOC). L. Jacobo Álvarez, Francisco Poza
32
Método “software” (II).
La capacidad de los procesadores estándar para realizar sistemas complejos se ve limitada por:
El procesado secuencial de las instrucciones.
La arquitectura utilizado.
21/05/2012
concreta
del
procesador
Sistemas en un circuito (SOC). L. Jacobo Álvarez, Francisco Poza
33
Método “hardware” (I).
Se utilizan circuitos digitales estándar, ya sean de función fija o definible por el usuario.
El diseñador debe definir el sistema digital necesario para realizar las funciones requeridas.
El sistema digital resultante debe implementarse mediante los circuitos elegidos.
21/05/2012
Sistemas en un circuito (SOC). L. Jacobo Álvarez, Francisco Poza
34
Método “hardware” (II).
Tres aproximaciones:
Circuitos estándar de función fija (método clásico).
Circuitos programables por el usuario (Lógica Programable: PLDs y FPGAs).
Circuitos de aplicación específica (ASIC):
21/05/2012
Semimedida (“semi-custom”). Totalmente a medida (“full-custom”).
Sistemas en un circuito (SOC). L. Jacobo Álvarez, Francisco Poza
35
Sistema digital realizado mediante circuitos estándar de función fija
Cuando los sistemas digitales son complejos, la utilización de este tipo de circuitos da lugar a una placa con un gran número de circuitos integrados y de interconexiones. Por ello, actualmente no se utilizan este tipo de circuitos para el diseño de nuevos sistemas digitales.
21/05/2012
Sistemas en un circuito (SOC). L. Jacobo Álvarez, Francisco Poza
36
Sistema digital realizado mediante circuitos programables por el usuario (I)
La capacidad lógica de estos circuitos permite realizar un sistema digital complejo en un único circuito integrado.
21/05/2012
Sistemas en un circuito (SOC). L. Jacobo Álvarez, Francisco Poza
37
Sistema digital realizado mediante circuitos programables por el usuario (II)
Diagrama de bloques interno de un circuito programable del tipo FPGA, en el que se ha implementado un sistema digital.
21/05/2012
Sistemas en un circuito (SOC). L. Jacobo Álvarez, Francisco Poza
38
Sistema digital realizado mediante un circuito de aplicación específica
Dificultad del proceso de diseño. Necesidad de realizar la fabricación del circuito posteriormente => coste y tiempo de desarrollo elevados. Circuito totalmente a medida diseñado por el usuario.
21/05/2012
Sistemas en un circuito (SOC). L. Jacobo Álvarez, Francisco Poza
39
Sistema en un Circuito (SOC) (I)
Actualmente, existe una opción intermedia entre las dos aproximaciones, “hardware” y “software”, que se denomina:
“System On Chip” o S.O.C.
21/05/2012
Sistemas en un circuito (SOC). L. Jacobo Álvarez, Francisco Poza
40
Sistema en un Circuito (SOC) (II) Consiste
en implementar en un único circuito integrado los siguientes circuitos: Un
microprocesador. Una o varias unidades de memoria (SRAM, FLASHEEPROM, etc.). Circuitos de interfaz estándar. Periféricos de entrada y salida. Otros sistemas digitales de distinta complejidad, que pueden ser independientes o interactuar con el microprocesador. 21/05/2012
Sistemas en un circuito (SOC). L. Jacobo Álvarez, Francisco Poza
41
Sistema en un Circuito (SOC) (III)
Del microprocesador incluido en un Sistema en un Circuito se suele decir que está empotrado (“embedded”), término que hace referencia a que no es directamente accesible desde el exterior del circuito integrado.
De la misma forma, al diseño de Sistemas en un Circuito que incluyen un microprocesador se le suele denominar Diseño de Sistemas Empotrados (“Embedded System Design”).
21/05/2012
Sistemas en un circuito (SOC). L. Jacobo Álvarez, Francisco Poza
42
Sistema en un Circuito Programable (PSOC) (I)
Las dos opciones que existen actualmente para realizar un SOC son las siguientes: Mediante
un ASIC que suele incluir una configurable por el usuario. Mediante una FPGA de gran capacidad lógica.
parte
En este último caso, los SOCs se suelen denominar “System On a Programmable Chip” (SOPC o PSOC).
21/05/2012
Sistemas en un circuito (SOC). L. Jacobo Álvarez, Francisco Poza
43
Sistema en un Circuito Programable (PSOC) (II)
Actualmente es posible implementar en un mismo Circuito Configurable del tipo FPGA:
21/05/2012
Uno o varios microprocesadores. Una o varias unidades de memoria (SRAM, FLASHEEPROM, etc.). Los periféricos de entrada y salida de los microprocesadores. Otros sistemas digitales complejos, que pueden ser independientes o interactuar con los microprocesadores.
Sistemas en un circuito (SOC). L. Jacobo Álvarez, Francisco Poza
44
Sistema en un Circuito Programable (PSOC) (III) Dos
posibles implementaciones:
Bloque
microprocesador “hardware”, ya integrado en el Silicio, junto con un circuito configurable del tipo FPGA.
Bloque
microprocesador “software”, prediseñado para su implementación como un circuito más, en una FPGA genérica de gran capacidad.
21/05/2012
Sistemas en un circuito (SOC). L. Jacobo Álvarez, Francisco Poza
45
Microprocesador “hardware” (I).
SOCs de fabricantes de FPGAs:
Altera.
Actel.
Cypress.
Xilinx.
21/05/2012
Sistemas en un circuito (SOC). L. Jacobo Álvarez, Francisco Poza
46
Altera (I)
Procesadores empotrados de Altera y empresas asociadas (1 de 2).
21/05/2012
Sistemas en un circuito (SOC). L. Jacobo Álvarez, Francisco Poza
47
Altera (II)
Procesadores empotrados de Altera y empresas asociadas (2 de 2).
21/05/2012
Sistemas en un circuito (SOC). L. Jacobo Álvarez, Francisco Poza
48
Altera (III)
Familia de FPGAs Arria V SoC de Altera.
21/05/2012
Sistemas en un circuito (SOC). L. Jacobo Álvarez, Francisco Poza
49
Altera (IV)
Procesador ARM Cortex-A9. Disponible en las FPGAs Arria V SoC y Cyclone V SoC de Altera.
21/05/2012
Sistemas en un circuito (SOC). L. Jacobo Álvarez, Francisco Poza
50
Actel (I)
SOC SmartFusion de Actel.
21/05/2012
Sistemas en un circuito (SOC). L. Jacobo Álvarez, Francisco Poza
51
Cypress (I)
SOCs de Cypress.
21/05/2012
Sistemas en un circuito (SOC). L. Jacobo Álvarez, Francisco Poza
52
Cypress (II)
Familia PSOC1 de Cypress.
21/05/2012
Sistemas en un circuito (SOC). L. Jacobo Álvarez, Francisco Poza
53
Cypress (III)
Familias PSOC3 y PSOC5 de Cypress.
21/05/2012
Sistemas en un circuito (SOC). L. Jacobo Álvarez, Francisco Poza
54
Xilinx (I)
Familia Virtex 2 Pro de FPGAs de Xilinx con Power-PC 405.
21/05/2012
Sistemas en un circuito (SOC). L. Jacobo Álvarez, Francisco Poza
55
Xilinx (II)
Arquitectura general del procesador Power PC 405.
21/05/2012
Sistemas en un circuito (SOC). L. Jacobo Álvarez, Francisco Poza
56
Xilinx (III)
Procesador Power-PC 440 de la familia Virtex 5 FX de Xilinx.
21/05/2012
Sistemas en un circuito (SOC). L. Jacobo Álvarez, Francisco Poza
57
Xilinx (IV)
SOC Zynq 7000 de Xilinx.
21/05/2012
Sistemas en un circuito (SOC). L. Jacobo Álvarez, Francisco Poza
58
Microprocesador “hardware” (II).
Otros SOCs ya obsoletos:
Familia E5 de Triscend.
Familia QL90xM de Quicklogic.
21/05/2012
Sistemas en un circuito (SOC). L. Jacobo Álvarez, Francisco Poza
59
Familia E5 de Triscend (I)
Arquitectura general.
21/05/2012
Sistemas en un circuito (SOC). L. Jacobo Álvarez, Francisco Poza
60
Familia QL90xM de Quicklogic (I)
Arquitectura general.
21/05/2012
Sistemas en un circuito (SOC). L. Jacobo Álvarez, Francisco Poza
61
Familia QL90xM de Quicklogic (II)
Arquitectura general del procesador 4Kc.
21/05/2012
Sistemas en un circuito (SOC). L. Jacobo Álvarez, Francisco Poza
62
Microprocesador “software” (I).
Las posibles opciones a la hora de escoger un bloque microprocesador “software” son las siguientes: 1) Núcleo del microprocesador prediseñado para su implementación con FPGAs, disponible comercialmente.
Ventajas: • Poder disponer de un microprocesador ampliamente utilizado (8051, PIC, etc). • Reducción del tiempo de diseño.
comercial
Inconvenientes: • Coste elevado. • Arquitectura del microprocesador fija.
21/05/2012
Sistemas en un circuito (SOC). L. Jacobo Álvarez, Francisco Poza
63
Microprocesador “software” (II). 2) Núcleo del microprocesador diseñado a medida por el usuario. Ventajas:
• Poder disponer de una arquitectura de microprocesador a la medida de las aplicaciones que se vayan a diseñar. • Disponer del código fuente del microprocesador para poder realizar modificaciones en el futuro. • Coste reducido (si exceptuamos el tiempo de diseño). • Posibilidad de comercialización posterior del microprocesador diseñado. Inconvenientes:
• Aumento del tiempo de diseño.
21/05/2012
Sistemas en un circuito (SOC). L. Jacobo Álvarez, Francisco Poza
64
Microprocesador “software” (III). 3) Núcleo del microprocesador prediseñado para su implementación con FPGAs, disponible gratuitamente. Ventajas:
• Poder disponer de un microprocesador utilizado por un cierto número de usuarios. • Intercambio de programas y periféricos de libre uso. • Reducción del tiempo de diseño. • Coste reducido. Inconvenientes:
• Limitaciones de la arquitectura, en general sencilla debido a su condición de gratuita.
21/05/2012
Sistemas en un circuito (SOC). L. Jacobo Álvarez, Francisco Poza
65
Microprocesador “software” (IV).
Módulo microprocesador de 8 bits KCPSM (“Picoblaze”), para las familias Spartan y Virtex de Xilinx.
Módulo microprocesador de 8 bits Mico2, para las familias de Lattice.
Módulo microprocesador de 32 bits Nios II, para familias de Altera.
Módulo microprocesador de 32 bits Microblaze, para las familias Spartan y Virtex de Xilinx.
21/05/2012
Sistemas en un circuito (SOC). L. Jacobo Álvarez, Francisco Poza
66
Módulo KCPSM de Xilinx
Arquitectura del microprocesador Picoblaze.
21/05/2012
Sistemas en un circuito (SOC). L. Jacobo Álvarez, Francisco Poza
67
Módulo Mico2 de Lattice
Arquitectura del microprocesador Mico2.
21/05/2012
Sistemas en un circuito (SOC). L. Jacobo Álvarez, Francisco Poza
68
Módulo Nios II de Altera
Arquitectura del microprocesador Nios II.
21/05/2012
Sistemas en un circuito (SOC). L. Jacobo Álvarez, Francisco Poza
69
Módulo Microblaze de Xilinx
Arquitectura del microprocesador Microblaze.
21/05/2012
Sistemas en un circuito (SOC). L. Jacobo Álvarez, Francisco Poza
70
Codiseño Hardware / Software
Índice
21/05/2012
Introducción. Codiseño hardware/software. Fases detalladas del flujo de codiseño. Particionado hardware/software.
Codiseño Hardware / Software. L. Jacobo Álvarez, Francisco Poza
71
Introducción.
El diseño de sistemas empotrados presenta una complejidad elevada, pues es necesario diseñar y verificar: El programa que va a ejecutar el microprocesador. El “hardware” necesario, tanto el del propio microprocesador como el de los circuitos adicionales que se precisen.
Este proceso se “hardware/software”.
21/05/2012
suele
denominar
codiseño
Codiseño Hardware / Software. L. Jacobo Álvarez, Francisco Poza
72
Codiseño Hardware/Software (I).
DEFINICIÓN:
Diseño concurrente por parte del mismo equipo de diseñadores de los componentes hardware y software de un sistema digital, usando metodologías y herramientas que consideren la interacción hardware / software.
21/05/2012
Codiseño Hardware / Software. L. Jacobo Álvarez, Francisco Poza
73
Codiseño Hardware/Software (II).
El diseño de un sistema empotrado presenta una complejidad elevada, aún tratándose de un microprocesador sencillo, pues es necesario diseñar y verificar:
El programa “software” que va a ejecutar el microprocesador.
El “hardware” necesario, tanto el del propio microprocesador como el de sus periféricos y los circuitos adicionales que se precisen.
21/05/2012
Codiseño Hardware / Software. L. Jacobo Álvarez, Francisco Poza
74
Codiseño Hardware/Software (II).
Flujo básico de codiseño.
Especificación Particionado Hardware-Software
Simulación Hardware
Depuración Hardware Co-simulación HardwareSoftware 21/05/2012
Descripción Hardware
Desarrollo Software
Síntesis
Compilación
Implementación
Enlazado
Combinación hardware-software Codiseño Hardware / Software. L. Jacobo Álvarez, Francisco Poza
Simulación Software
Depuración Software Co-depuración HardwareSoftware 75
Flujo de codiseño HW/SW (I).
Especificación:
Particionado Hardware-Software:
Definir la funcionalidad del sistema a desarrollar.
Decidir qué funciones se realizarán mediante rutinas “software” del microprocesador empotrado y qué funciones se realizarán mediante circuitos “hardware” específicos. Existen herramientas comerciales de coste elevado, específicas para esta función.
Descripción hardware:
Elección del microprocesador y de la FPGA adecuados a la aplicación. Diseño de periféricos y otros circuitos adicionales, mediante lenguajes HDL u otras herramientas de diseño de alto o bajo nivel. Existen multitud de herramientas de diseño, específicas del fabricante de la FPGA y genéricas (Xilinx ISE).
21/05/2012
Codiseño Hardware / Software. L. Jacobo Álvarez, Francisco Poza
76
Flujo de codiseño HW/SW (II).
Desarrollo software:
Simulación hardware:
Desarrollo de la aplicación en ensamblador o en lenguajes de alto nivel (C, etc.). Existen entornos específicos para cada microprocesador.
Mediante programas simuladores adecuados a la herramienta de diseño utilizada (Xilinx ISE iSIM).
Simulación software:
Mediante programas simuladores del lenguaje de programación y del microprocesador utilizados.
21/05/2012
Codiseño Hardware / Software. L. Jacobo Álvarez, Francisco Poza
77
Flujo de codiseño HW/SW (III).
Síntesis e implementación:
Compilación y enlazado.
Se utilizarán herramientas específicas para el lenguaje de programación y el microprocesador utilizados.
Depuración hardware:
Se utilizará la herramienta específica del fabricante de la FPGA.
Mediante instrumentación convencional (osciloscopios, analizadores de espectro, analizadores lógicos, etc.) o virtual (“Chipscope” de Xilinx).
Depuración software:
Mediante entornos de depuración “software”, previo volcado del ejecutable al microprocesador empotrado.
21/05/2012
Codiseño Hardware / Software. L. Jacobo Álvarez, Francisco Poza
78
Flujo de codiseño HW/SW (IV).
Combinación hardware-software :
Cosimulación hardware-software:
Se utilizará la herramienta específica del fabricante de la FPGA.
Mediante entornos de simulación, que combinan programas simuladores del “hardware” y del “software”.
Codepuración hardware-software:
Mediante entornos de depuración, que combinan la depuración “hardware” y “software”.
21/05/2012
Codiseño Hardware / Software. L. Jacobo Álvarez, Francisco Poza
79
Particionado HW/SW (I).
De entre las fases iniciales del diseño de un sistema empotrado, una de las más difíciles es decidir cómo se va a implementar cada una de las funciones necesarias para la aplicación:
Mediante el programa “software” que va a ejecutar el microprocesador.
Mediante un circuito periférico, que se implementará en el “hardware” configurable de la FPGA.
21/05/2012
Codiseño Hardware / Software. L. Jacobo Álvarez, Francisco Poza
80
Particionado HW/SW (II).
Como regla general:
Se intentarán realizar mediante circuitos “hardware” las funciones cuyas rutinas “software” sean lentas o poco eficientes.
Se intentarán realizar mediante “software” las funciones cuyos circuitos “hardware” sean muy complejos y que no necesiten una velocidad de proceso elevada.
21/05/2012
Codiseño Hardware / Software. L. Jacobo Álvarez, Francisco Poza
81
Particionado HW/SW (III).
No existen reglas precisas para tomar esta decisión, pero se pueden tener en cuenta los siguientes factores:
Número de instrucciones necesarias para realizar la función mediante un programa “software” que ejecute el microprocesador.
Recursos lógicos (tipo y cantidad) necesarios para realizar la función mediante un circuito “hardware”.
Requisitos especiales de la función, como velocidad de proceso, consumo de potencia, etc.
21/05/2012
Codiseño Hardware / Software. L. Jacobo Álvarez, Francisco Poza
82
Familias Virtex 2, 4 y 5 y Spartan 3 de FPGAs de Xilinx Índice
Introducción. Arquitectura de la familia Virtex 2 de Xilinx.
CLBs. “Slices”. Memorias. Multiplicadores “hardware”. Circuitos de reloj. Bloques de E/S. Tecnologías de E/S.
Virtex 2 Pro frente a Virtex 2. Virtex 4 frente a Virtex 2. Virtex 5 frente a Virtex 4. Spartan 3 frente a Virtex 2. Normas de síntesis.
21/05/2012
FPGAs Virtex 2, 4 y 5 y Spartan 3 de Xilinx. Luis Jacobo Álvarez Ruiz de Ojeda
83
Introducción (I).
Cuando se debe obtener una implementación óptima del sistema digital que debemos realizar, tanto en cuanto a recursos lógicos utilizados como a retardos del sistema, en general no es suficiente con utilizar una determinada forma de descripción ni la sintaxis de VHDL recomendada por el fabricante para describir cada circuito.
Es necesario además conocer a fondo la arquitectura del Circuito Configurable elegido y utilizarla de la forma más conveniente para la realización de nuestro sistema digital.
21/05/2012
FPGAs Virtex 2, 4 y 5 y Spartan 3 de Xilinx. Luis Jacobo Álvarez Ruiz de Ojeda
84
Introducción (II).
Esto es especialmente importante en el caso de las FPGAs, pues son circuitos más complejos, con una arquitectura distinta a la clásica basada en sumas de productos.
Por ello, a continuación se van a analizar las arquitecturas de las familias Virtex 2 y Spartan 3 de FPGAs de Xilinx, basadas en tablas de consulta [LUT (“Look Up Table”)], y la forma más conveniente de realizar determinados circuitos mediante ellas.
21/05/2012
FPGAs Virtex 2, 4 y 5 y Spartan 3 de Xilinx. Luis Jacobo Álvarez Ruiz de Ojeda
85
Arquitectura de la familia Virtex2 (I).
Diagrama de bloques general de la FPGA.
Block SelectRAM™
Bloques de E/S (IOBs)
Interconexiones programables Multiplicadores dedicados
Tecnología de 0’15 micras en un proceso de 8 capas, con transistores de alta velocidad de 0’12 micras. Tensión de alimentación interna de 1.5V. 21/05/2012
Bloques Lógicos Configurables (CLBs)
Gestión de reloj (DCMs, BUFGMUXes)
FPGAs Virtex 2, 4 y 5 y Spartan 3 de Xilinx. Luis Jacobo Álvarez Ruiz de Ojeda
86
Arquitectura de la familia Virtex2 (II).
Características generales de la familia Virtex 2 (I).
Powerful CLB
Active Interconnect™
Slice S3
Switch Matrix • Fully buffered • Fast, predictable
CLB, IOB, DCM
Slice S2 Switch Matrix
Slice S0
BRAM
Block RAM • 18KBit True Dual Port • Up to 3 Mbits / device
21/05/2012
Slice S1
Multipliers • 18b x 18b multiplier • 200+ MHz pipelined
• 8 LUTs • 128b distributed RAM • Wide input functions (32:1) • Support for slices based multipliers
FPGAs Virtex 2, 4 y 5 y Spartan 3 de Xilinx. Luis Jacobo Álvarez Ruiz de Ojeda
87
Arquitectura de la familia Virtex2 (III).
Características generales de la familia Virtex 2 (II). 16 Global Clocks • Eight clocks to any quadrant • Switch glitch-free between clocks
DCM
16 Clocks
DCI
• On-chip termination • Guaranteed signal integrity • Eliminates 100s of resistors
21/05/2012
• Zero delay clock • Precision phase shift • Frequency synthesis • Duty cycle correction • Clock multiply and divide
FPGAs Virtex 2, 4 y 5 y Spartan 3 de Xilinx. Luis Jacobo Álvarez Ruiz de Ojeda
88
Bloque Lógico Configurable de la familia Virtex2.
Diagrama general de un Bloque lógico configurable [CLB (“Configurable Logic Block”)]. Cada CLB de la familia Virtex-II contiene cuatro “slices”: Líneas locales permiten interconectar entre sí los “slices” de un CLB y éste con los CLBs vecinos. La matriz de conmutación (“switch matrix”) permite acceder a los recursos de interconexión generales.
COUT BUFT BUF T
Slice S3
Slice S2 Switch Matrix
SHIFT
Slice S1
Slice S0
CIN
21/05/2012
COUT
Local Routing
CIN
FPGAs Virtex 2, 4 y 5 y Spartan 3 de Xilinx. Luis Jacobo Álvarez Ruiz de Ojeda
89
“Slice” de la familia Virtex2 (I).
Diagrama general de un “slice”.
RAM16
SRL16
LUT G
LUT F
MUXFx CY MUXF5
CY
Register
Register
Cada “slice” permite realizar dos: — Tablas de consulta de 4 entradas. — Memorias RAM de 16 bits. — Registros de desplazamiento de 16 bits. Cada biestable puede configurarse como: D activado por flancos (“flip-flop”). D activado por niveles (“latch”). Además, cada “slice” posee lógica dedicada: Multiplexores. Lógica aritmética: Circuitos de acarreo. MULT_AND.
Arithmetic Logic
21/05/2012
FPGAs Virtex 2, 4 y 5 y Spartan 3 de Xilinx. Luis Jacobo Álvarez Ruiz de Ojeda
90
“Slice” de la familia Virtex2 (II).
Diagrama general de un “slice”, que posee dos tablas de consulta (LUTs) y dos biestables, así como circuitos específicos para el cálculo del acarreo de circuitos aritméticos y de contaje.
Cada “slice” tiene 4 salidas: 2 combinacionales y 2 secuenciales. 2 BUFTs asociados a cada CLB, accesibles para las 16 salidas del CLB. La lógica de acarreo se propaga verticalmente, sólo hacia arriba. 2 líneas de acarreo independientes por cada CLB.
21/05/2012
Slice 0 PRE
LUT
Carry
D CE
Q
CLR
LUT
Carry
D PRE Q CE CLR
FPGAs Virtex 2, 4 y 5 y Spartan 3 de Xilinx. Luis Jacobo Álvarez Ruiz de Ojeda
91
“Slice” de la familia Virtex2 (III).
Detalle del “Slice”.
Las próximas diapositivas tratan diferentes aspectos del “slice”: LUTs. MUXF5, MUXF6, MUXF7, MUXF8 (sólo se muestran los MUX F5 y F6 en este diagrama). Lógica de acarreo. MULT_ANDs. Biestables.
21/05/2012
FPGAs Virtex 2, 4 y 5 y Spartan 3 de Xilinx. Luis Jacobo Álvarez Ruiz de Ojeda
92
Tablas de consulta de la familia Virtex2 (I).
Tablas de consulta [LUTs (“Look-Up Tables”)].
La lógica combinacional se realiza mediante tablas de consulta: También llamadas Generadores de Funciones (FGs). La capacidad lógica de la LUT está limitada por el número de entradas (4). El retardo es independiente de la función lógica realizada.
A B C D Z 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 1 1 1 0 1 0 0 1 0 1 0 1 1
Lógica Combinacional
A B C D
.
.
.
1 1 0 0 0 Z
1 1 0 1 0 1 1 1 0 0 1 1 1 1 1
21/05/2012
FPGAs Virtex 2, 4 y 5 y Spartan 3 de Xilinx. Luis Jacobo Álvarez Ruiz de Ojeda
93
Biestables de la familia Virtex2.
Biestables.
Pueden configurarse como biestables activados por flancos o por niveles. 2 en cada “slice”, 8 por CLB. Las entradas proceden de las LUTs o del exterior del CLB. Señales de puesta a uno y cero independientes: Pueden ser síncronas o asíncronas. Todas las señales de control son compartidas dentro de un “slice”. Pueden ser invertidas de forma independiente.
21/05/2012
FDRSE_1 D
S
Q
CE R
FDCPE D PRE Q CE CLR
LDCPE D PRE Q CE G CLR
FPGAs Virtex 2, 4 y 5 y Spartan 3 de Xilinx. Luis Jacobo Álvarez Ruiz de Ojeda
94
Multiplexores de un CLB de la familia Virtex2 (I).
Multiplexores “hardware” específicos. Permiten conectar las diferentes tablas de consulta y “slices” de un CLB. F8
CLB
21/05/2012
F6
Slice S0
F5
Slice S1
F5
F7
Slice S2
F5
F6
Slice S3
F5
MUXF8 combina las salidas de dos MUXF7 (del CLB superior o inferior. MUXF6 combina los “slices” S2 y S3. MUXF7 combina las salidas de dos MUXF6. MUXF6 combina los “slices” S0 y S1 MUXF5 combina las LUTs de cada “slice”.
FPGAs Virtex 2, 4 y 5 y Spartan 3 de Xilinx. Luis Jacobo Álvarez Ruiz de Ojeda
95
Multiplexores de un CLB de la familia Virtex2 (II).
Multiplexores F5MUX, F7MUX, F8MUX.
F6MUX, data(7)
Mediante su utilización:
Un multiplexor de 4 canales de 1 bit utiliza sólo un “slice”. Un multiplexor de 16 canales de 1 bit utiliza cuatro “slices”. Un multiplexor de 32 canales de 1 bit utiliza ocho “slices”.
data(6)
F6MUX
muxout
data(5) data(4)
data(3) data(2)
No es necesario especificar su uso de forma especial sino que se infieren automáticamente.
21/05/2012
F5MUX
data(1) data(0)
LUT
FPGAs Virtex 2, 4 y 5 y Spartan 3 de Xilinx. Luis Jacobo Álvarez Ruiz de Ojeda
96
Cálculo de acarreos en la familia Virtex2 (I).
Lógica aritmética, específica para el cálculo de acarreos.
Lógica aritmética simple, rápida y completa: Puerta XOR dedicada para realizar la suma directamente. Utiliza recursos de interconexión específicos. Todas las herramientas de síntesis permiten su utilización.
21/05/2012
COUT
COUT To S0 of the next CLB
To CIN of S2 of the next CLB
SLICE S3 First Carry Chain
CIN COUT
SLICE S2
SLICE S1 CIN
Second Carry Chain
COUT
SLICE S0 CIN
CIN
CLB
FPGAs Virtex 2, 4 y 5 y Spartan 3 de Xilinx. Luis Jacobo Álvarez Ruiz de Ojeda
97
Cálculo de acarreos en la familia Virtex2 (II).
Mitad superior de un “slice” de las FPGAs de la familia Virtex 2 de Xilinx, en la que se observa el circuito específico para el cálculo del acarreo.
21/05/2012
FPGAs Virtex 2, 4 y 5 y Spartan 3 de Xilinx. Luis Jacobo Álvarez Ruiz de Ojeda
98
Cálculo de acarreos en la familia Virtex 2 (III).
Los contadores se benefician de la utilización de los circuitos específicos de cálculo de los acarreos. Realización de las ecuaciones lógicas de un contador binario ascendente. En la figura se observan los tres bits de menor peso.
Ecuaciones de un contador ascendente de 4 bits realizado con puertas XOR:
Q0t+1 = (Q0 $ 1);
Q1t+1 = (Q1 $ Q0);
Q2t+1 = (Q2 $ (Q1 & Q0));
Q3t+1 = (Q3 $ (Q2 & Q1 & Q0));
21/05/2012
FPGAs Virtex 2, 4 y 5 y Spartan 3 de Xilinx. Luis Jacobo Álvarez Ruiz de Ojeda
99
Cálculo de acarreos en la familia Virtex 2 (IV).
Utilización de los circuitos específicos de cálculo de los acarreos para la realización de un contador ascendente con carga en paralelo. En la figura se observa el bit de menor peso.
21/05/2012
FPGAs Virtex 2, 4 y 5 y Spartan 3 de Xilinx. Luis Jacobo Álvarez Ruiz de Ojeda
100
Lógica aritmética de la familia Virtex2. Los productos lógicos adicionales (MULT_AND) permiten realizar productos aritméticos de forma eficiente.
Estos productos permiten optimizar la realización de la operación multiplicación y suma (MAC). Otras familias de FPGAs necesitan dos LUTs por bit para realizar una operación MAC. La puerta MULT_AND permite utilizar menos recursos lógicos, realizando la operación MAC mediante una sola LUT. LUT
A
CY_MUX
CO S DI CI
CY_XOR MULT_AND
AxB
LUT
B
21/05/2012
LUT
FPGAs Virtex 2, 4 y 5 y Spartan 3 de Xilinx. Luis Jacobo Álvarez Ruiz de Ojeda
101
Registros de desplazamiento (I).
Registro de desplazamiento SRL16E. • Las 16 celdas SRAM de la tabla de consulta se organizan para formar un registro de desplazamiento: –
–
La activación a nivel uno de la señal de habilitación CE permite escribir un nuevo bit en el primer “biestable” y desplazar los bits hacia la derecha en el resto de los “biestables” del “registro de desplazamiento”. No se requiere ninguna dirección para realizar la escritura, dado que es una operación predecible.
• La función SRL16E es muy adecuada para la implementación de circuitos de procesado de señal: – –
Permite retardar muestras. Permite desplazar muestras a más velocidad:
D Q15 CE Q A
SRLC16E
D Q
Cascadable CE D A[3:0]
CE D Q
CE D Q
CE D Q
CE D Q
CE D Q
CE D Q
CE D Q
CE D Q
CE D Q
CE D Q
CE D Q
CE D Q
CE D Q
CE D Q
CE D Q
0000
CE D Q
Q15
1111
Q 21/05/2012
FPGAs Virtex 2, 4 y 5 y Spartan 3 de Xilinx. Luis Jacobo Álvarez Ruiz de Ojeda
102
Registros de desplazamiento (II).
Registros de desplazamiento basados en RAM.
Registros de desplazamiento serie con direccionamiento dinámico (familia Virtex - II): Máximo retardo de 16 ciclos de reloj por LUT (128 por CLB) Se pueden encadenar varias LUTs o CLBs para obtener registros más largos. Conexión dedicada de la salida Q15 a la entrada del siguiente SRL16CE. La longitud del registro puede variarse de forma asíncrona, modificando el valor de la dirección A. 21/05/2012
LUT D CE CLK
D Q CE
D Q CE
D Q CE
Q
D Q CE
LUT
A[3:0] Q15 (cascade out)
FPGAs Virtex 2, 4 y 5 y Spartan 3 de Xilinx. Luis Jacobo Álvarez Ruiz de Ojeda
103
Registros de desplazamiento (III).
Registros de desplazamiento basados en RAM. El registro de desplazamiento puede utilizarse para realizar una operación nula (NOP). En este ejemplo se utilizan 64 LUTs (8 CLBs) para realizar un registro de desplazamiento de 9 etapas de 64 bits para equilibrar dos caminos de datos de retardos diferentes. Un registro convencional hubiese utilizado 576 (9x64) biestables (72 CLBs) y los recursos de interconexión asociados. 12 Cycles
64
Operation A
Operation B
4 Cycles
8 Cycles
Operation C
Operation D - NOP
3 Cycles
9 Cycles
64
Paths are Statically Balanced 12 Cycles 21/05/2012
FPGAs Virtex 2, 4 y 5 y Spartan 3 de Xilinx. Luis Jacobo Álvarez Ruiz de Ojeda
104
Registros de desplazamiento (IV).
Registros de desplazamiento basados en RAM. Para que a partir de la descripción en VHDL se infiera automáticamente un registro de desplazamiento basado en RAM (SRL16 o SRL16E), es necesario:
No incluir señales de puesta en estado inicial (“set” o “reset”). Que sólo se utilice la entrada serie y la salida serie.
Estos registros se pueden inicializar a través de un atributo INIT en el fichero de restricciones (UCF).
21/05/2012
Ejemplo (SRL16E): process(clk) begin if rising_edge(clk) then if ce = ‘1’ then sr Spartan 3 / 3E, Virtex 2 / 2 Pro. “kcpsm3.vhd”. • Define el microprocesador Picoblaze 3. Suministrado por Xilinx. “picocode.vhd”.
• Obtenido al ensamblar el programa, mediante la plantilla “ROM_blank_modificada” de pBlazeIDE. “picoblaze3_empotrado.vhd”.
• Descripción estructural que conecta los dos archivos anteriores entre si.
16/07/2012
Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez.
625
Descripción hardware (XI).
Picoblaze 3 empotrado (“picoblaze3_empotrado.vhd), formado por: Microprocesador Picoblaze 3 (“kcpsm3_modificado.vhd”). Memoria de programa (“picocode.vhd”). Este fichero se obtendrá después de ensamblar el programa del microprocesador.
16/07/2012
Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez.
626
Descripción hardware (XII).
Símbolo del Picoblaze 3 empotrado, descrito en VHDL en el fichero “picoblaze3_empotrado.vhd”.
16/07/2012
Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez.
627
Descripción hardware (XIII).
Cuando se hayan diseñado y simulado todos estos circuitos, se deben instanciar en otro fichero VHDL, que será el fichero principal (“top”) del sistema empotrado: top_ejemplo_basico_picoblaze_3_Nexys_2.vhd.
Para realizarlo se puede partir de la plantilla: top_template_picoblaze_3_placa_Nexys_2.vhd.
16/07/2012
Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez.
628
Simulación hardware (I).
Todos los circuitos diseñados se independientemente en la forma habitual.
Podemos asumir que el microprocesador Picoblaze suministrado por Xilinx no presenta fallos. No obstante, si lo consideramos oportuno, también podemos simularlo.
16/07/2012
deben
Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez.
simular
629
Depuración hardware.
Se puede utilizar un equipo de instrumentación de laboratorio convencional como un analizador lógico o se puede utilizar un analizador lógico virtual como “Chipscope” de Xilinx.
16/07/2012
Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez.
630
Desarrollo software (I).
Antes de empezar a elaborar el programa para el microprocesador Picoblaze, es necesario decidir la asignación de los diferentes periféricos “hardware” a los puertos de entrada y salida del microprocesador.
Durante la elaboración del programa, también tendremos que ir decidiendo la ubicación de las distintas variables del programa en los registros y la memoria de datos del Picoblaze, para evitar confilctos, como por ejemplo, que una rutina sobreescriba registros que guardan valores necesarios para otra rutina.
16/07/2012
Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez.
631
Asignación de puertos de E/S (I).
Puertos de entrada:
0: fuente de la interrupción. 1: interruptores. 2: pulsadores.
Pulsador de “reset” (BTN3)
Petición Interrupción (BTN0) Picoblaze3_empotrado
Dirección Picoblaze 3
Pulsadores BTN1 y BTN0
2 Interruptores
1 Memoria de Código (Block RAM) 16/07/2012
0 Puertos de entrada
Fuente de interrupción
Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez.
632
Asignación de puertos de E/S (II).
Puertos de salida:
0: Registro de LEDs. 1,2,3,4: Registros dígitos 8 segmentos 0,1,2,3.
Dirección
Picoblaze3_empotrado
4 3
Picoblaze 3
Dígito 3 Dígito 2 Dígito 1
2 Dígito 0
1 Memoria de Código (Block RAM) 16/07/2012
LEDs 0 Puertos de salida Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez.
633
Asignación de registros internos.
Registros del Picoblaze 3:
s0: estado del contador. s1: estado actual interruptores. s2: estado anterior interruptores. s3: estado actual pulsadores. s4: estado anterior pulsadores. ... sF: auxiliar.
16/07/2012
Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez.
634
Desarrollo software (II).
Ventana del entorno Picoblaze IDE en la que se muestra un extracto del código del programa.
16/07/2012
Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez.
635
Desarrollo software (III).
Primera fase.
Hacer un programa principal que comience en la posición de memoria 0 y que realice las siguientes tareas:
Hacer una rutina de atención de interrupción que:
Inicialice el contador a 0. Apague los LEDs. Apague el visualizador de 7 segmentos. Habilite las interrupciones. Realice un bucle infinito. Lea la fuente de interrupción. Incremente el contador en una unidad. Saque el valor del contador a los LEDs.
Poner un salto a la rutina de atención de interrupción en la posición de memoria correspondiente al vector de interrupción.
16/07/2012
Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez.
636
Desarrollo software (IV).
Segunda fase.
Completar el programa principal para que realice las siguientes tareas adicionales: Lea el estado actual de los interruptores, lo compare con el estado anterior y, si ha cambiado, ponga "InT" y el valor en el visualizador de 7 segmentos. Lea el estado actual de los pulsadores, lo compare con el estado anterior y, si ha cambiado, ponga “PUL" y el valor en el visualizador de 7 segmentos.
16/07/2012
Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez.
637
Compilación y enlazado (I).
pBlazeIDE (I). El archivo “picocode.vhd” contiene la definición de la memoria BRAM de programa y su contenido, de acuerdo al programa en ensamblador del usuario. Seleccionar el Picoblaze adecuado en la opción de menú “Settings”. Utilizar la directiva VHDL
VHDL "ROM_blank_modificada.vhd", “picocode.vhd", “picocode“
Generar el archivo “picocode.vhd” con la opción de menú Simulate -> Simulate (o utilizando el botón “Assemble & Simulate” de la barra de herramientas).
Si se desea implementar el Picoblaze3 en una Spartan 2 / 2E, es necesario editar el archivo “picocode.vhd” generado por pBlazeIDE y cambiar el valor de la constante “PicoType” a “pbtS”.
16/07/2012
Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez.
638
Compilación y enlazado (II).
pBlazeIDE (II).
Debemos crear dentro del directorio del proyecto ISE un subdirectorio denominado “Sw”, en el que guardaremos el programa que hagamos en lenguaje ensamblador del microcontrolador Picoblaze.
Debemos copiar al subdirectorio “Sw” el fichero “ROM_blank_modificada.vhd”, suministrado por el profesor, antes de realizar el ensamblado del programa.
16/07/2012
Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez.
639
Compilación y enlazado (III).
pBlazeIDE (III). Seleccionar en el menú “Settings” el Picoblaze adecuado, en este caso el Picoblaze 3. Ejecutar “Assemble & Simulate”.
16/07/2012
Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez.
640
Simulación software (I).
Simulación del programa en el entorno pBlazIDE.
16/07/2012
Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez.
641
Depuración software (I).
No hay ninguna herramienta para Picoblaze.
16/07/2012
Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez.
642
Combinación hardware-software (I).
Una vez desarrollado el “hardware” y el “software”, ya se pueden juntar todos los ficheros en ISE. Jerarquía del proyecto “ejemplo_basico_picoblaze_3”.
16/07/2012
Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez.
643
Síntesis e implementación (I)
Esquema RTL del fichero “top_ejemplo_basico_picoblaze_3_placa_Nexys_2”.
16/07/2012
Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez.
principal
644
Síntesis e implementación (II)
Resultado de la implementación del sistema completo.
16/07/2012
Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez.
645
Cosimulación hardware/software (I).
Es posible simular el microprocesador Picoblaze junto con su memoria de programa, aunque esta tarea es larga y complicada y resulta mucho más sencillo haber simulado anteriormente el programa ensamblador del usuario mediante el entorno pBlazeIDE.
16/07/2012
Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez.
646
Cosimulación hardware/software (II).
Simulación del conjunto del microprocesador Picoblaze y su memoria de programa mediante ISim. Es posible visualizar la dirección de la memoria de programa y el código de la instrucción que se lee de la memoria en la simulación funcional.
16/07/2012
Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez.
647
Cosimulación hardware/software (III).
Para poder visualizar la dirección de la memoria de programa y el código de la instrucción que se lee de la memoria en la simulación funcional, se debe realizar lo siguiente: Seleccionar el componente “uut picoblaze3” en la ventana “Instances and Processes” de ISim.
A continuación, seleccionar las señales “address(9:0)” e “instruction(19:0)” en la ventana “Objects” de ISim, pulsar el botón derecho del ratón y añadirlas mediante “Add to Wave Window”.
Por último, se debe reiniciar la simulación (“restart”) y ejecutar de nuevo (“run -all”).
16/07/2012
Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez.
648
Cosimulación hardware/software (IV).
Simulación del conjunto del microprocesador Picoblaze y su memoria de programa mediante ISim. En ella se observan la dirección de la memoria de programa y el código de la instrucción que se lee de la memoria.
16/07/2012
Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez.
649
Cosimulación hardware/software (V).
Simulación del sistema completo formado por el microprocesador Picoblaze 3, su memoria de programa y los periféricos. En la simulación se observa que se incrementa el contador que se visualiza en los LEDs, cada vez que se acciona el pulsador BTN0. Para no alargar en exceso la simulación, ésta se ha realizado sin el circuito antirrebotes del pulsador BTN0.
16/07/2012
Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez.
650
Codepuración hardware-software (I)
No existen herramientas específicas para Picoblaze, pero es posible depurar el sistema completo con el microprocesador Picoblaze y su memoria de programa, ya con el código que va a ejecutar, mediante el analizador virtual “Chipscope” de Xilinx.
16/07/2012
Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez.
651
Codepuración hardware-software (II)
Ya sólo resta programar la FPGA y proceder a la comprobación del buen funcionamiento del sistema basado en el microprocesador Picoblaze.
Debemos recordar que la señal de puesta en estado inicial del microprocesador Picoblaze es activa a nivel uno lógico. Por ello, para ejecutar el programa desarrollado por el usuario, dicha señal debe estar a nivel cero lógico.
16/07/2012
Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez.
652
Codepuración hardware-software (III).
Foto de la placa Nexys 2 durante la prueba del ejemplo.
16/07/2012
Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez.
653
Proceso de diseño con Picoblaze (II). Flujo normal de diseño con Picoblaze
, , , , …
pBlazeIDE
Simulación software
Simulación funcional hardware / software Simulación temporal hardware / software
Codepuración hardware / software
16/07/2012
Síntesis
Implementación top.bit
Programación JTAG iMPACT
Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez.
654
Proceso de diseño con Picoblaze (III).
Inconveniente del flujo normal de diseño con Picoblaze.
Aunque solamente se hagan modificaciones en el software es necesario realizar todos los pasos de la implementación hardware.
Ello es debido a que el código ejecutable se incluye en el fichero fuente VHDL “picocode.vhd”.
Soluciones:
Cambiar en el fichero de configuración (.bit) el contenido de la memoria BRAM de programa y volver a configurar la FPGA. Este es el método que utilizaremos y que se describe con más detalle en las siguientes transparencias. Definir la memoria BRAM de programa de doble puerto, y añadir hardware que permita cambiar su contenido, a través del interfaz JTAG.
16/07/2012
Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez.
655
Proceso de diseño “software” (I) , , , , …
Flujo de diseño modificado (1)
pBlazeIDE
coe2mem
Síntesis Data2MEM
Codepuración hardware / software
top.bit
Implementación top.bit
iMPACT (en modo batch)
iMPACT Programación JTAG (cualquier puerto)
16/07/2012
Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez.
656
Proceso de diseño “software” (II) Flujo de diseño modificado (2)
Añadir al proyecto ISE un fichero de mapa de memoria “memoria_programa.bmm” (Block RAM Memory Map).
Es un fichero de texto que describe como se agrupan las BRAMs para constituir un espacio lógico de direcciones.
Realizar una nueva implementación y generar el fichero de programación.
Se obtiene el fichero .bit de configuración. Se obtiene el fichero “memoria_programa_bd.bmm” anotado, en el que ISE incluye la información de la posición física que ocupa en la FPGA la memoria BRAM utilizada como memoria de programa.
16/07/2012
Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez.
657
Proceso de diseño “software” (III) Flujo de diseño modificado (3)
Ejecutar el fichero “load_sw_iMPACT.bat”, que se puede realizar a la vez que el ensamblado utilizando la directiva EXEC de Picoblaze IDE.
EXEC "load_sw_iMPACT.bat
top
memoria_codigo
picocode “
Se le pasan como parámetros el nombre del fichero “hardware” principal, de nivel más alto de la jerarquía (“top”), el nombre del fichero .bmm inicial (“memoria_programa”) y el nombre del fichero .mem (“picocode”), todos sin extensión. Para ello, es necesario copiar al subdirectorio “Sw” los ficheros:
16/07/2012
coe2mem.exe. load_sw_iMPACT.bat. Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez.
658
Proceso de diseño “software” (IV) Flujo de diseño modificado (4)
El fichero “load_sw_iMPACT.bat” automatiza la realización de las siguientes tareas:
Generar el fichero .mem con el código ejecutable.
Modificar el fichero de configuración top.bit.
Para ello se utiliza la directiva COE del pBlazeIDE.
Para ello se ejecuta la utilidad Data2MEM. Se obtiene el nuevo fichero de configuración top_sw.bit.
Configurar la FPGA con el programa iMPACT utilizando el nuevo fichero top_sw.bit.
16/07/2012
Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez.
659
Proceso de diseño “software” (V) Flujo de diseño modificado (5)
Si solamente se desea realizar una simulación en pBlazeIDE y no una prueba en la FPGA se puede comentar la línea que ejecuta el fichero “.bat” anterior anteponiendo el carácter “;”
16/07/2012
Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez.
660
Ejercicio 1 (I).
Enviar a través del puerto RS232 de la placa Nexys 2 el estado de los 8 interruptores y de los pulsadores BTN2 y BTN1 de la placa para ser visualizado en un ordenador. Enviar el estado de los mismos sólo si se produce un cambio (accionamiento de uno de ellos)
Cada vez que se pulsa el botón BTN1 o BTN2, se envía “PUL: combinacion_pulsadores”.
Cada vez que se acciona alguno de los 8 interruptores, se envía “INT: combinacion_interruptores”.
16/07/2012
Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez.
661
Ejercicio 1 (II).
Es necesario añadir los siguientes periféricos de entrada.
Memoria “buffer” de datos recibidos por la UART RS232 suministrada por Xilinx.
Estado de la UART RS232. uart_status 50.000.000 / (115.200 * 16) = 27'12.
16/07/2012
Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez.
664
Ejercicio1 (V).
Los archivos necesarios para implementar la UART RS232 de 8 bits suministrada por Xilinx son los siguientes:
uart_tx.vhd. kc_uart_tx.vhd. uart_rx.vhd. kc_uart_rx.vhd. bbfifo_16x8.vhd.
Xilinx también suministra una UART de 9 bits (con bit de paridad).
16/07/2012
Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez.
665
Ejercicio 2 (I).
Recibir a través del puerto RS232 de la placa Nexys 2 un comando de un ordenador.
Cada vez que el ordenador envíe el comando “L” o “l”, la FPGA debe enviar a través del puerto RS232 de la placa Nexys 2: “LEDs: combinacion_contador_LEDs”
16/07/2012
Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez.
666
Conclusiones.
Hemos aprendido a realizar un sistema empotrado básico, basado en el microprocesador Picoblaze. Hemos realizado la implementación del sistema empotrado en la FPGA XC3S500E y hemos comprobado su funcionamiento.
16/07/2012
Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez.
667
Depuración con “Chipscope” Índice
21/05/2012
Introducción. “Core Chipscope”. Parámetros “Chipscope”. Implementación. Análisis con “Chipscope”. Conclusiones.
Depuración con Chipscope. Luis Jacobo Álvarez Ruiz de Ojeda
669
Introducción (I)
La herramienta ISE dispone de una utilidad para la depuración del funcionamiento real de un sistema digital sobre la FPGA ya configurada, denominada “Chipscope”. Esta herramienta podría considerarse un analizador lógico virtual.
Para poder analizar el funcionamiento del sistema digital diseñado, es necesario implementar en el interior de la FPGA los circuitos relacionados con la depuración, que permitirán:
Controlar el proceso de depuración (“Integrated Controller” (ICON)). Dar valores a las entradas del sistema digital (“Virtual Input / Output” (VIO)). Recoger y almacenar muestras de las salidas del sistema digital (“Integrated Logic Analyzer” (ILA)).
Posteriormente, las muestras recogidas serán analizadas en un ordenador personal mediante el programa “Chipscope Analyzer”. Este programa lee las muestras almacenadas en la FPGA a través del interfaz JTAG. Por tanto, el análisis de muestras no se hace en tiempo real.
21/05/2012
Depuración con Chipscope. Luis Jacobo Álvarez Ruiz de Ojeda
670
“Core Chipscope” (I)
Es necesario incluir circuitos adicionales en la FPGA, por lo que consume recursos “hardware”, sobre todo memoria BRAM para el almacenamiento de muestras. La opción más sencilla es añadir un fichero del tipo “Chipscope Definition and Connection File”.
21/05/2012
Depuración con Chipscope. Luis Jacobo Álvarez Ruiz de Ojeda
671
“Core Chipscope” (II)
En primer lugar debemos sintetizar el sistema digital que se va a depurar con la opción “Keep Hierarchy” activada.
21/05/2012
Depuración con Chipscope. Luis Jacobo Álvarez Ruiz de Ojeda
672
Parámetros “Chipscope” (I)
La definición de parámetros se hace en el fichero .cdc. Para ello, pinchamos 2 veces sobre el nombre del fichero “.cdc” para acceder a los parámetros del fichero de “Chipscope”.
21/05/2012
Depuración con Chipscope. Luis Jacobo Álvarez Ruiz de Ojeda
673
Parámetros “Chipscope” (II)
En primer lugar debemos seleccionar el dispositivo “ICON” (unidad de control del analizador) y pinchar en el botón “New ILA Unit”, para añadir un nuevo analizador lógico.
21/05/2012
Depuración con Chipscope. Luis Jacobo Álvarez Ruiz de Ojeda
674
Parámetros “Chipscope” (III)
Ahora debemos seleccionar los parámetros de disparo adecuados a nuestro análisis.
21/05/2012
Depuración con Chipscope. Luis Jacobo Álvarez Ruiz de Ojeda
675
Parámetros “Chipscope” (IV)
Ahora debemos seleccionar los parámetros de captura adecuados a nuestro análisis.
21/05/2012
Depuración con Chipscope. Luis Jacobo Álvarez Ruiz de Ojeda
676
Parámetros “Chipscope” (V)
Ahora debemos conectar las señales del analizador al circuito que queremos depurar, seleccionando el tipo de señal y pinchando en el botón “Modify Connections”.
21/05/2012
Depuración con Chipscope. Luis Jacobo Álvarez Ruiz de Ojeda
677
Parámetros “Chipscope” (VI)
En primer lugar conectamos la entrada de reloj del analizador, seleccionando la señal a la que queremos conectarla y pinchando en el botón “Make Connections”.
21/05/2012
Depuración con Chipscope. Luis Jacobo Álvarez Ruiz de Ojeda
678
Parámetros “Chipscope” (VII)
Ahora conectamos las señales de disparo/dato, de la misma forma.
21/05/2012
Depuración con Chipscope. Luis Jacobo Álvarez Ruiz de Ojeda
679
Parámetros “Chipscope” (VIII)
Al final podemos ver una estimación de los recursos lógicos de la FPGA que utilizarán los “cores” de “Chipscope”.
21/05/2012
Depuración con Chipscope. Luis Jacobo Álvarez Ruiz de Ojeda
680
Parámetros “Chipscope” (IX)
Al cerrar, salvamos las modificaciones, que se guardan en un fichero de tipo “.cdc”. Es necesario salvarlo en el directorio del proyecto de ISE en el que estamos trabajando, para que la configuración del “core” se realice de forma correcta. Ahora ya podemos cerrar la ventana de parametrización del “core” Chipscope.
21/05/2012
Depuración con Chipscope. Luis Jacobo Álvarez Ruiz de Ojeda
681
“Core Chipscope” (III)
Otra posibilidad es generar directamente los “cores” relacionados con “Chipscope”, para luego instanciarlos en nuestro código VHDL. Esto obliga a modificar al menos el fichero VHDL de nuestro sistema digital en el que se instancie el “core”, por lo que es conveniente hacer una nueva versión del fichero sólo para depuración. En este caso, es necesario instanciar al menos los circuitos ICON e ILA, para lo cual debemos generar los “cores” y parametrizarlos, en lugar de utilizar el fichero de tipo “Chipscope” (.cdc) analizado anteriormente. La utilización directa de los “cores” de “Chipscope” nos da más control sobre las opciones y conexiones del analizador virtual.
21/05/2012
Depuración con Chipscope. Luis Jacobo Álvarez Ruiz de Ojeda
682
“Core Chipscope” (IV)
De entre las posibilidades de “Chipscope” que sólo se pueden utilizar mediante instanciación directa de los “cores” de “Chipscope”, podemos destacar la generación de señales de entrada virtuales para nuestro sistema digital desde el ordenador, a través del programa “Chipscope”. Para ello, además de los “cores” ICON e ILA, es necesario añadir un “core” del tipo “Virtual Input/Output (VIO)” a nuestro sistema digital, y conectarlo adecuadamente, instanciándolo en VHDL.
21/05/2012
Depuración con Chipscope. Luis Jacobo Álvarez Ruiz de Ojeda
683
“Core Chipscope” (V)
Parámetros del circuito ICON que controla las opciones de depuración de nuestro sistema digital mediante “Chipscope”.
21/05/2012
Depuración con Chipscope. Luis Jacobo Álvarez Ruiz de Ojeda
684
“Core Chipscope” (VI)
Parámetros del circuito ILA que permite muestrear y analizar las señales de salida de nuestro sistema digital mediante “Chipscope” (1 de 2).
21/05/2012
Depuración con Chipscope. Luis Jacobo Álvarez Ruiz de Ojeda
685
“Core Chipscope” (VII)
Parámetros del circuito ILA que permite muestrear y analizar las señales de salida de nuestro sistema digital mediante “Chipscope” (2 de 2).
21/05/2012
Depuración con Chipscope. Luis Jacobo Álvarez Ruiz de Ojeda
686
“Core Chipscope” (VIII)
Parámetros del circuito VIO que genera las señales de entrada virtuales para nuestro sistema digital mediante “Chipscope”.
21/05/2012
Depuración con Chipscope. Luis Jacobo Álvarez Ruiz de Ojeda
687
“Core Chipscope” (IX)
El inconveniente de instanciar los “cores” del analizador “Chipscope” es que sólo se pueden conectar a señales que estén en el mismo nivel de jerarquía que los “cores” y que sean puertos (“ports”) de los circuitos VHDL que queremos analizar, para tener acceso a ellas.
21/05/2012
Depuración con Chipscope. Luis Jacobo Álvarez Ruiz de Ojeda
688
“Core Chipscope” (X)
Ejemplo básico Picoblaze con placa Nexys 2 de Digilent. Conexiones realizadas.
21/05/2012
Depuración con Chipscope. Luis Jacobo Álvarez Ruiz de Ojeda
689
Parámetros “Chipscope” (X)
Si se han instanciado directamente los “cores”, las conexiones de las señales ya se han hecho en el fichero VHDL de nuestro proyecto, y la definición de parámetros se hace posteriormente mediante el programa analizador “Chipscope”.
21/05/2012
Depuración con Chipscope. Luis Jacobo Álvarez Ruiz de Ojeda
690
Implementación (I)
Ahora implementamos de nuevo el sistema digital que incluye los “cores” de “Chipscope”. Podemos comprobar que el circuito utiliza ahora más recursos lógicos y memorias BRAM, debido a los “cores” del analizador lógico. Ejemplo básico Picoblaze 3 con placa Nexys 2 de Digilent.
21/05/2012
Depuración con Chipscope. Luis Jacobo Álvarez Ruiz de Ojeda
691
Análisis con “Chipscope” (I)
En primer lugar, debemos programar la FPGA con el sistema digital que incluye los “cores” de “Chipscope”.
21/05/2012
Depuración con Chipscope. Luis Jacobo Álvarez Ruiz de Ojeda
692
Análisis con “Chipscope” (II)
Ahora ejecutamos el “software” del analizador “Chipscope”, mediante el proceso “Analyze design using Chipscope” o el menú “Xilinx ISE Design Suite Chipscope Pro Analyzer”. Pulsamos el botón “Open cable/Search JTAG Chain” y aceptamos la información sobre los circuitos que encuentra el programa.
21/05/2012
Depuración con Chipscope. Luis Jacobo Álvarez Ruiz de Ojeda
693
Análisis con “Chipscope” (III a)
Si hemos utilizado un fichero “.cdc”, seleccionamos la opción “File Import” y localizamos el fichero “.cdc” de nuestro proyecto.
21/05/2012
Depuración con Chipscope. Luis Jacobo Álvarez Ruiz de Ojeda
694
Análisis con “Chipscope” (III b)
Si hemos utilizado “cores” en vez de un fichero “.cdc”, las señales del analizador ya están conectadas a las señales del sistema digital a analizar, pero ahora podemos renombrarlas para que sea más sencilla la comprobación del sistema. Para ello, seleccionamos una señal en la ventana “Wave”, pulsamos el botrón derecho del ratón, y seleccionamos la opción “Rename”. También podemos agrupar señales para formar un bus.
21/05/2012
Depuración con Chipscope. Luis Jacobo Álvarez Ruiz de Ojeda
695
Análisis con “Chipscope” (IV)
Podemos reordenar y agrupar las señales de la ventana “Waveform”.
21/05/2012
Depuración con Chipscope. Luis Jacobo Álvarez Ruiz de Ojeda
696
Análisis con “Chipscope” (V)
Ahora debemos configurar los parámetros de disparo. Ejemplo básico Picoblaze con placa Nexys 2 de Digilent. En este caso se ha seleccionado la condición de disparo (“Trigger Setup Value”) cuando se produzca un flanco ascendente (“Rising”) en la señal “interrupt”, conectada a “Trigger_data(0)”, es decir, una petición de interrupción para el microprocesador Picoblaze. También se ha seleccionado que la muestra (“Position”) correspondiente a la condición de disparo sea la número 256 de 512, de forma que veamos lo que pasa antes y después de la condición de disparo.
21/05/2012
Depuración con Chipscope. Luis Jacobo Álvarez Ruiz de Ojeda
697
Análisis con “Chipscope” (VI)
Ahora podemos salvar el proyecto del analizador “Chipscope”, para guardar estos ajustes. El proyecto se guarda en un fichero de tipo “.cpj”. Es recomendable salvarlo en el directorio del proyecto de ISE en el que estamos trabajando, para localizarlo fácilmente en ocasiones posteriores.
21/05/2012
Depuración con Chipscope. Luis Jacobo Álvarez Ruiz de Ojeda
698
Análisis con “Chipscope” (VII)
Ahora pinchamos en el botón “Apply Settings and Arm Trigger”. El programa analizador comienza la lectura de las señales y espera a que se produzca la señal de disparo. En este ejemplo básico de Picoblaze con placa Nexys 2 de Digilent, la petición de interrupción (condición de disparo) se produce al pulsar el botón BTN0 de la placa Nexys 2.
21/05/2012
Depuración con Chipscope. Luis Jacobo Álvarez Ruiz de Ojeda
699
Análisis con “Chipscope” (VIII)
Resultados del análisis del ejemplo básico Picoblaze con placa Nexys 2 de Digilent.
21/05/2012
Depuración con Chipscope. Luis Jacobo Álvarez Ruiz de Ojeda
700
Análisis con “Chipscope” (IX)
Resultados del análisis del ejemplo básico Picoblaze con placa Nexys 2 de Digilent. En esta ampliación se observa perfectamente el funcionamiento del microprocesador Picoblaze al recibir la petición de interrupción.
21/05/2012
Depuración con Chipscope. Luis Jacobo Álvarez Ruiz de Ojeda
701
Conclusiones
Hemos aprendido a implementar el módulo analizador lógico de Xilinx en el interior de la FPGA, a conectarlo y a configurarlo.
Hemos comprobado que el módulo analizador lógico consume recursos lógicos de la FPGA.
Hemos aprendido a manejar el “software” analizador de “Chipscope” para la captura y análisis de las muestras.
21/05/2012
Depuración con Chipscope. Luis Jacobo Álvarez Ruiz de Ojeda
702
EJEMPLOS DE DISEÑO DE SISTEMAS EMPOTRADOS
Ejemplo reloj digital con alarma Picoblaze Índice
22/05/2012
Especificaciones. Manejo de la aplicación. Observaciones. Solución: Circuitos necesarios. Programa en ensamblador. Asignación de puertos de E/S. Simulación de los circuitos. Prueba de la aplicación.
Ejemplo reloj digital con alarma. L. Jacobo Álvarez, Francisco Poza
705
Especificaciones.
Reloj digital de tiempo real, con función de alarma. Funcionalidad: Ajuste de hora actual y de hora de la alarma. Cuando coincidan la hora actual y la hora de la alarma, y la alarma esté activada, se hará parpadear un LED.
Aplicación basada en el microprocesador Picoblaze 3. La prueba se realizará mediante la placa Nexys 2 de Digilent.
22/05/2012
Ejemplo reloj digital con alarma. L. Jacobo Álvarez, Francisco Poza
706
Manejo de la aplicación (I).
Selección de los diferentes modos del reloj.
0
1
SW0
RELOJ
ALARMA
SW3
ALARMA APAGADA
ALARMA ACTIVADA
SW7
NORMAL
AJUSTE
22/05/2012
Ejemplo reloj digital con alarma. L. Jacobo Álvarez, Francisco Poza
707
Manejo de la aplicación (II).
El interruptor SW0 selecciona entre modo RELOJ o modo ALARMA.
En cada modo se visualizan los dígitos correspondientes a la hora y minutos actuales o a la hora y minutos de activación de la alarma, respectivamente.
El interruptor SW7 selecciona entre modo NORMAL o modo AJUSTE.
En el modo NORMAL se visualizan la hora y minutos del modo seleccionado por el interruptor SW0.
22/05/2012
Cada segundo, parpadea el punto medio del visualizador dinámico, si se está visualizando la hora actual.
Ejemplo reloj digital con alarma. L. Jacobo Álvarez, Francisco Poza
708
Manejo de la aplicación (III).
En el modo AJUSTE se enciende el punto decimal del dígito de mayor peso, lo que indica que su valor se puede modificar.
El valor del dígito se incrementa cada vez que se pulsa el pulsador BTN0 (INC), de forma cíclica. Para pasar al siguiente dígito, se debe pulsar el pulsador BTN1 (NEXT), que actúa también de forma cíclica. Durante el ajuste de la hora actual, el reloj está detenido, y se deben reinicializar los segundos a cero. En cuanto se vuelve al modo NORMAL, el reloj se pone en marcha automáticamente.
El interruptor SW3 de la placa Nexys 2 permite seleccionar entre alarma apagada (OFF) o activada (ON).
Cuando está activada, el LED 3 de la placa Nexys 2 debe estar encendido. Cuando la alarma esté activada y coincidan la hora actual y la hora de la alarma, se disparará la alarma y el LED 0 parpadeará con una frecuencia de 10 Hz.
22/05/2012
Ejemplo reloj digital con alarma. L. Jacobo Álvarez, Francisco Poza
709
Observaciones.
Sólo existe una fuente de interrupción, que corresponde a una señal periódica de 10 Hz, que interrumpe al microprocesador cada décima de segundo, para actualizar la hora actual.
22/05/2012
Ejemplo reloj digital con alarma. L. Jacobo Álvarez, Francisco Poza
710
Solución.
A continuación se indica una posible solución a este ejemplo.
22/05/2012
Ejemplo reloj digital con alarma. L. Jacobo Álvarez, Francisco Poza
711
Circuitos necesarios (I).
Microcontrolador Picoblaze 3 junto con su memoria de programa => Picoblaze 3 empotrado.
22/05/2012
Ejemplo reloj digital con alarma. L. Jacobo Álvarez, Francisco Poza
712
Circuitos necesarios (II).
Un circuito básico de selección (multiplexor) para 2 periféricos de entrada.
Periférico 1 de entrada, que consiste en un registro que sincroniza el estado de los interruptores de la placa Nexys 2.
22/05/2012
Ejemplo reloj digital con alarma. L. Jacobo Álvarez, Francisco Poza
713
Circuitos necesarios (III).
Periférico 2 de entrada, que consiste en sendos biestables que memorizan la pulsación de los botones BTN1 y BTN0 de la placa Nexys 2 (bits 1 y 0 del puerto de entrada).
22/05/2012
Ejemplo reloj digital con alarma. L. Jacobo Álvarez, Francisco Poza
714
Circuitos necesarios (IV).
Un circuito básico de selección (decodificador) para 6 periféricos de salida.
22/05/2012
Ejemplo reloj digital con alarma. L. Jacobo Álvarez, Francisco Poza
715
Circuitos necesarios (V).
Periférico 1 de salida, que consiste en un registro que memoriza el estado de los dos dígitos de mayor peso del visualizador dinámico de la placa Nexys 2.
Periférico 2 de salida, que consiste en un registro que memoriza el estado de los dos dígitos de menor peso del visualizador dinámico de la placa Nexys 2.
Periférico 3 de salida, que consiste en un registro que memoriza el estado de los cuatro puntos decimales del visualizador dinámico de la placa Nexys 2.
22/05/2012
Ejemplo reloj digital con alarma. L. Jacobo Álvarez, Francisco Poza
716
Circuitos necesarios (VI).
Periférico 4 de salida, que consiste en la señal que borra la memorización de la pulsación del botón BTN0 de la placa Nexys 2 (biestable correspondiente al bit 0 del periférico 2 de entrada).
Periférico 5 de salida, que consiste en la señal que borra la memorización de la pulsación del botón BTN1 de la placa Nexys 2 (biestable correspondiente al bit 1 del periférico 2 de entrada).
22/05/2012
Ejemplo reloj digital con alarma. L. Jacobo Álvarez, Francisco Poza
717
Circuitos necesarios (VII).
Periférico 6 de salida, que consiste en un biestable que memoriza el estado de la alarma (disparada / no disparada).
22/05/2012
Ejemplo reloj digital con alarma. L. Jacobo Álvarez, Francisco Poza
718
Circuitos necesarios (VIII).
Un circuito de petición de la única interrupción. La señal de petición de interrupción se genera a partir de un circuito divisor de reloj, cuya salida es una señal cuadrada de frecuencia 10 Hz. El circuito de gestión de la interrupción detecta el flanco ascendente de dicha señal y lo memoriza en un biestable. La activación de la señal “interrupt_ack” del microprocesador borra la petición de interrupción.
22/05/2012
Ejemplo reloj digital con alarma. L. Jacobo Álvarez, Francisco Poza
719
Circuitos auxiliares placa (I).
Un circuito divisor de reloj para obtener, a partir del reloj principal de 50 MHz de la placa Nexys 2: Un reloj de 2 MHz para el microprocesador Picoblaze. De esta forma, el ciclo de instrucción (igual a dos ciclos de reloj) es de 1 microsegundo. En esta aplicación, el Picoblaze puede trabajar a frecuencias lentas, lo que reduce el consumo de potencia del circuito. Un reloj de 1 kHz para el refresco del visualizador dinámico de 7 segmentos, circuitos antirrebotes, etc.
22/05/2012
Ejemplo reloj digital con alarma. L. Jacobo Álvarez, Francisco Poza
720
Circuitos auxiliares placa (II).
Un circuito divisor de reloj auxiliar: Obtiene la señal de frecuencia 10 Hz para interrumpir al microprocesador cada décima de segundo.
22/05/2012
Ejemplo reloj digital con alarma. L. Jacobo Álvarez, Francisco Poza
721
Circuitos auxiliares placa (III).
Conexión de la señal puesta en estado inicial global del sistema digital al pulsador BTN3 de la placa Nexys 2.
Conexión del interruptor SW3 al LED3 de la placa Nexys 2.
Definición del valor de la señal “cero”.
22/05/2012
Ejemplo reloj digital con alarma. L. Jacobo Álvarez, Francisco Poza
722
Circuitos auxiliares placa (IV).
Un circuito de parpadeo del LED0 de la placa Nexys 2 cuando la alarma se ha disparado. De forma similar, se puede conectar una señal cuadrada de frecuencia audible (por ejemplo, 1 kHz) a un altavoz para activar una alarma sonora.
22/05/2012
Ejemplo reloj digital con alarma. L. Jacobo Álvarez, Francisco Poza
723
Circuitos auxiliares placa (V).
El circuito “Nexys_2_board_components”, que da acceso a todos los componentes de la placa Nexys 2, y que ya incluye los registros utilizados como periféricos de salida para el visualizador dinámico.
22/05/2012
Ejemplo reloj digital con alarma. L. Jacobo Álvarez, Francisco Poza
724
Fichero principal (I).
Todos estos circuitos se pueden instanciar en el fichero principal VHDL: top_reloj_digital_picoblaze_3_placa_Nexys_2.vhd.
Para realizarlo se puede partir de la plantilla: top_template_picoblaze_3_placa_Nexys_2.vhd.
22/05/2012
Ejemplo reloj digital con alarma. L. Jacobo Álvarez, Francisco Poza
725
Fichero principal (II).
Jerarquía del proyecto “reloj_digital_picoblaze_3”.
22/05/2012
Ejemplo reloj digital con alarma. L. Jacobo Álvarez, Francisco Poza
726
Síntesis e implementación (I)
Esquema RTL del fichero “top_reloj_digital_picoblaze_3_placa_Nexys_2”.
22/05/2012
Ejemplo reloj digital con alarma. L. Jacobo Álvarez, Francisco Poza
principal
727
Síntesis e implementación (II)
Resultado de la implementación del sistema completo.
22/05/2012
Ejemplo reloj digital con alarma. L. Jacobo Álvarez, Francisco Poza
728
Programa en ensamblador (I).
El programa del reloj digital se compone de las siguientes partes, en este orden:
definicion_registros_y_constantes programa_principal
inicializacion_hora_a_0_y_digito_ajuste (sólo se ejecuta 1 vez). bucle_principal (se ejecuta continuamente): • Lee interruptores y pulsadores. • Comprueba SW7: – 1 => rutina modo_ajuste – 0 => rutina modo_normal • rutina visualizacion • rutina comprobacion_alarma
rutina atencion_interrupcion vector_interrupcion
22/05/2012
Ejemplo reloj digital con alarma. L. Jacobo Álvarez, Francisco Poza
729
Programa en ensamblador (II).
Rutinas más importantes (I):
Rutina modo_ajuste (SW7 = 1):
Comprueba pulsador NEXT (BTN1). Comprueba SW0: • 0 => RELOJ => ajuste_reloj (comprueba pulsador INC (BTN0)) • 1 => ALARMA => ajuste_alarma (comprueba pulsador INC (BTN0))
Rutina modo_normal (SW7 = 0):
Comprueba SW0: • 1 => ALARMA => retorno sin hacer nada • 0 => RELOJ => activa el punto decimal medio del visualizador durante dos décimas de cada segundo, para indicar el paso del tiempo.
22/05/2012
Ejemplo reloj digital con alarma. L. Jacobo Álvarez, Francisco Poza
730
Programa en ensamblador (III).
Rutinas más importantes (II):
Rutina visualizacion:
Comprueba SW0: • 0 => RELOJ => visualizar_reloj • 1 => ALARMA => visualizar_alarma
Rutina comprobacion_alarma:
Comprueba SW3: • 0 => ALARMA OFF => desactiva_alarma • 1 => ALARMA ON => compara hora actual con hora alarma. Si son iguales, activa alarma.
Rutina atención interrupción:
22/05/2012
Incrementa una décima de segundo. Actualiza las unidades y decenas de segundo, las unidades y decenas de minuto, y las unidades y decenas de hora, si es necesario. Ejemplo reloj digital con alarma. L. Jacobo Álvarez, Francisco Poza
731
Asignación de puertos de E/S (I).
Puertos de entrada.
clk50MHz Reloj 1 kHz
/25
/2000
Reloj 10 Hz
/100
clk2MHz clk
Petición interrupción
Picoblaze3_empotrado Interruptores
1
Picoblaze 3
2
Memoria de Código (Block RAM) 22/05/2012
Puertos de entrada
Detección de flancos de pulsadores BTN1 y BTN0
Ejemplo reloj digital con alarma. L. Jacobo Álvarez, Francisco Poza
732
Asignación de puertos de E/S (II).
Puertos de salida.
Puertos de salida 128
Biestable estado alarma
Picoblaze3_empotrado
Picoblaze 3
16
Borrado flanco BTN1
8
Borrado flanco BTN0
4 Memoria de Código (Block RAM) 22/05/2012
2 1
Puntos decimales Dígitos menor peso Dígitos mayor peso
Ejemplo reloj digital con alarma. L. Jacobo Álvarez, Francisco Poza
733
Asignación de registros internos.
Registros del Picoblaze 3:
s0: Décimas de segundo. s1: Unidades de segundo. s2: Decenas de segundo. s3: Unidades de minuto. s4: Decenas de minuto. s5: Unidades de hora. s6: Decenas de hora. s7: Unidades de minuto de la alarma. s8: Decenas de minuto de la alarma. s9: Unidades de hora de la alarma. sA: Decenas de hora de la alarma. sB: Dígito seleccionado. sC: Memoriza el valor de los interruptores durante todo el ciclo de programa. sD: Memoriza el valor de los pulsadores durante todo el ciclo de programa. sE: Registro auxiliar para la rutina de interrupción. sF: Registro auxiliar.
22/05/2012
Ejemplo reloj digital con alarma. L. Jacobo Álvarez, Francisco Poza
734
Simulación de los circuitos.
La simulación del sistema “hardware” completo no constituye en este caso una forma sencilla de comprobar el correcto funcionamiento de la aplicación, dada la complejidad del programa y del acceso a los componentes de la placa Nexys 2. No obstante, se puede realizar una simulación temporal corta para comprobar que todos los circuitos están correctamente conectados.
22/05/2012
Ejemplo reloj digital con alarma. L. Jacobo Álvarez, Francisco Poza
735
Prueba de la aplicación.
Foto de la placa Nexys 2 durante la prueba del ejemplo.
22/05/2012
Ejemplo reloj digital con alarma. L. Jacobo Álvarez, Francisco Poza
736
GUIÓN EJEMPLO RELOJ DIGITAL HARDWARE: 1. Coger los siguientes componentes de la dirección web [DTE2] incluida en la bibliografía: Divisores de reloj --> frequency_divider, divider25, divider50, divider1000. “Nexys_2_board_components”. 2. Recuperar los componentes realizados anteriormente (o cogerlos también de la dirección web [DTE2]): selec_8_entradas_simple. selec_8_salidas_simple. gestion_interrupcion. picoblaze3_empotrado. i. kcpsm3_modificado. ii. picocode (se genera después con el software en ensamblador). 3. Hacer el resto de los componentes (divider100 y biestables) y conecten todo en el fichero principal VHDL. SOFTWARE: 1. Coger el programa “reloj_digital_incompleto.psm” de la dirección web [DTE2] incluida en la bibliografía (este programa permite ajustar la hora del reloj y la hora de la alarma, pero el reloj no funciona). Analizar este programa. 737
2. Hacer las rutinas: a. “subrutina_atencion_interrupcion” (1 hora). Esta rutina debe incrementar en una décima de segundo la hora actual y corregir si es necesario el valor de los dígitos siguientes (unidades de segundo, decenas de segundo, unidades de minuto, decenas de minuto, unidades de hora y decenas de hora, teniendo en cuenta si la hora es mayor o igual que las 20 horas (ya que la máxima hora es 23 y no 29). Con esta subrutina el reloj ya funciona, aunque no parpadea el punto decimal que muestra el paso de los segundos. b. “subrutina_modo_normal_reloj” (30 minutos). Esta rutina debe activar el punto decimal del dígito 2 durante dos décimas de cada segundo en el modo RELOJ (por ejemplo, las décimas 7 y 8). Con esta rutina ya se observa el parpadeo del punto decimal que muestra el paso de los segundos. c. “subrutina_comprobacion_alarma” (30 minutos). Esta rutina comprueba el estado del interruptor SW3. Si está a 0 (alarma OFF), desactiva la alarma. Si está a 1 (alarma ON), compara la hora actual con la hora de la alarma y, si coinciden, activa la alarma. Si no coinciden la desactiva. Con esta rutina ya se activa la alarma cuando coinciden la hora actual y la hora de la alarma, y la alarma está activada (SW3 a 1). Juntar “hardware” y “software” y probar el ejemplo en la placa (al menos 15 minutos).
738
Gestión a través de RS232 Índice
22/05/2012
Especificaciones. Manejo de la aplicación. Observaciones. Puerto serie RS232. UART RS232. Solución: Circuitos necesarios. Programa en ensamblador. Asignación de puertos de E/S. Simulación de los circuitos. Prueba de la aplicación. Ejemplo gestión RS232. L. Jacobo Álvarez, Francisco Poza
739
Especificaciones (I)
Control de la placa Nexys 2 a través del puerto serie. Aplicación basada en el microprocesador Picoblaze 3. Parámetros de la comunicación: 115.200 bits por segundo, 8 bits de datos, sin paridad y 1 bit de stop La prueba se realizará mediante la placa Nexys 2 de Digilent. Una memoria RAM de 256 bytes debe guardar los mensajes a visualizar, las órdenes a decodificar y los caracteres tecleados en el HyperTerminal.
22/05/2012
Ejemplo gestión RS232. L. Jacobo Álvarez, Francisco Poza
740
Especificaciones (II)
Debe visualizarse en la pantalla del Hyperterminal:
En la fila 1 columna 1 “Programa de control de la tarjeta Nexys 2 a través del puerto serie”. En la fila 3 columna 1 “Interruptores: XX”, siendo XX el valor en hexadecimal codificado en los interruptores. En la fila 4 columna 1 “Pulsadores: XX”, siendo XX el valor en hexadecimal codificado en los pulsadores. En la fila 6 columna 1 “UART_ctrl>”.
La actualización del valor de los interruptores y pulsadores debe realizarse solamente si se produce algún cambio. Los caracteres tecleados en el Hyperterminal deberán enviarse de vuelta desde el Picoblaze (para hacer eco). Debe permitirse que el “scroll” se produzca solamente desde la fila 6.
22/05/2012
Ejemplo gestión RS232. L. Jacobo Álvarez, Francisco Poza
741
Especificaciones (III)
Las ordenes que se deben interpretar tienen que teclearse después del cursor (“prompt”) UART_ctrl> y deben validarse con un retorno de carro (“return”). Son las siguientes:
LEDS
LEDS XX
Debe pasarse el valor XX a los LEDs. Debe visualizarse “LEDS: XX”
DISPLAY
Debe visualizarse “LEDS: XX”, siendo XX el valor en hexadecimal de los LEDs.
Debe visualizarse “DISPLAY: XXXX”, siendo XXXX el valor en hexadecimal representado en los visualizadores.
DISPLAY XXXX
22/05/2012
Debe pasarse el valor XXXX a los visualizadores. Debe visualizarse “DISPLAY XXXX”. Ejemplo gestión RS232. L. Jacobo Álvarez, Francisco Poza
742
Manejo de la aplicación
La aplicación visualiza en hexadecimal en el HyperTerminal el estado de los interruptores y de los pulsadores de la placa Nexys 2.
Además se pueden utilizar las órdenes LEDS y DISPLAY para obtener o modificar el valor de los LEDs y visualizadores de 7 segmentos de la placa Nexys 2.
22/05/2012
Ejemplo gestión RS232. L. Jacobo Álvarez, Francisco Poza
743
Observaciones (I) Configuración del programa HyperTerminal de Windows (1)
22/05/2012
Ejemplo gestión RS232. L. Jacobo Álvarez, Francisco Poza
744
Observaciones (II) Configuración del programa HyperTerminal de Windows (2)
Necesario si se envía solamente 0D como Fin de línea, si se envía 0D y 0A no es necesario 22/05/2012
Ejemplo gestión RS232. L. Jacobo Álvarez, Francisco Poza
745
Puerto serie RS232 (I) Secuencias escape VT100/ANSI. Nombre
Código escape
Hexadecimal
Descripción
Cursor inicio
[ H
1B 5B 48
Sitúa el cursor en la fila 1 columna 1.
Borra abajo
[ J
1B 5B 4A
Borra desde la línea actual hasta el fondo de la pantalla. Combinada con la anterior permite borrar toda la pantalla.
Scroll parcial
[ {S} ; {E} r
1B 5B {S} 3B {E} 72
Permite scroll para las líneas de la S a E (S y E hay que especificarlos con los caracteres ASCII correspondientes).
Cursor a F, C
[ {F} ; {C} H
1B 5B {F} 3B {C} 48
Sitúa el cursor en la fila F y columna C (F y C hay que especificarlos con los caracteres ASCII correspondientes).
Guarda cursor
[ s
1B 5B 73
Almacena la posición actual del cursor.
Restaura cursor
[ u
1B 5B 75
Restaura la posición del cursor guardada previamente.
22/05/2012
Ejemplo gestión RS232. L. Jacobo Álvarez, Francisco Poza
746
Puerto serie RS232 (II) Tabla de caracteres ASCII (1).
22/05/2012
Ejemplo gestión RS232. L. Jacobo Álvarez, Francisco Poza
747
Puerto serie RS232 (III) Tabla de caracteres ASCII (2).
22/05/2012
Ejemplo gestión RS232. L. Jacobo Álvarez, Francisco Poza
748
UART RS232 (I)
Se utilizarán dos macros suministradas por Xilinx junto con el microprocesador Picoblaze.
UART_TX
UART_RX
22/05/2012
Ejemplo gestión RS232. L. Jacobo Álvarez, Francisco Poza
749
UART RS232 (II)
UART_TX. Diagrama de bloques interno.
22/05/2012
Ejemplo gestión RS232. L. Jacobo Álvarez, Francisco Poza
750
UART RS232 (III)
UART_RX. Diagrama de bloques interno.
22/05/2012
Ejemplo gestión RS232. L. Jacobo Álvarez, Francisco Poza
751
UART RS232 (IV)
Operación de la UART:
Envío de datos
Sincronización del receptor y captura de los bits
22/05/2012
Ejemplo gestión RS232. L. Jacobo Álvarez, Francisco Poza
752
UART RS232 (V)
Operación de la UART: Obtención de la velocidad de transmisión y recepción, que será 16 veces menor que la frecuencia de “en_16_x_baud”.
Ejemplo para clk=40MHz y velocidad de 38.400 bits por segundo. La frecuencia de “en_16_x_baud” será de 614.400 Hz. 40 MHz / 614.400 Hz = 65’10 => “baud_count” = 64.
22/05/2012
Ejemplo gestión RS232. L. Jacobo Álvarez, Francisco Poza
753
Solución.
A continuación se indica una posible solución a este ejemplo.
22/05/2012
Ejemplo gestión RS232. L. Jacobo Álvarez, Francisco Poza
754
Circuitos necesarios (I)
Microcontrolador Picoblaze 3 junto con su memoria de programa => picoblaze3_empotrado.
22/05/2012
Ejemplo gestión RS232. L. Jacobo Álvarez, Francisco Poza
755
Circuitos necesarios (II)
Un circuito básico de selección (multiplexor) para 5 periféricos de entrada.
Periférico 1 de entrada que corresponde al “buffer” de datos recibidos del receptor serie RS232 (“uart_rx”).
22/05/2012
Ejemplo gestión RS232. L. Jacobo Álvarez, Francisco Poza
756
Circuitos necesarios (III)
Periférico 2 de entrada para leer el estado del transmisor y del receptor serie RS232.
Los bits 0 y 1 corresponden a las señales “buffer_half_full” y “buffer_full” del transmisor, respectivamente. Los bits 2, 3 y 4 corresponden a las señales “buffer_half_full”, “buffer_full” y “buffer_data_present” del receptor, respectivamente.
Periférico 3 de entrada, que consiste en un registro que sincroniza el estado de los interruptores de la placa Nexys 2.
Periférico 4 de entrada, que consiste en los biestables de sincronización de los pulsadores BTN2, BTN1 y BTN0 de la placa Nexys 2 (bits 2 a 0 del puerto de entrada).
22/05/2012
Ejemplo gestión RS232. L. Jacobo Álvarez, Francisco Poza
757
Circuitos necesarios (IV)
Periférico 5 de entrada que consiste en una memoria RAM de mensajes y órdenes. No necesita ningún registro adicional, pues el dato ya está estable en la memoria.
22/05/2012
Ejemplo gestión RS232. L. Jacobo Álvarez, Francisco Poza
758
Circuitos necesarios (V)
La memoria se debe definir mediante la opción “Project New Source IP (Coregen & Architecture Wizard)” de.
Vamos a escoger memoria dedicada (basada en BRAM) para su implementación.
Previamente, es necesario haber definido el fichero .COE con el contenido de la memoria.
22/05/2012
Ejemplo gestión RS232. L. Jacobo Álvarez, Francisco Poza
759
Memoria RAM de mensajes (I)
Parámetros de la memoria BRAM (I).
22/05/2012
Ejemplo gestión RS232. L. Jacobo Álvarez, Francisco Poza
760
Memoria RAM de mensajes (II)
Parámetros de la memoria BRAM (II).
22/05/2012
Ejemplo gestión RS232. L. Jacobo Álvarez, Francisco Poza
761
Memoria RAM de mensajes (III)
Parámetros de la memoria BRAM (III).
22/05/2012
Ejemplo gestión RS232. L. Jacobo Álvarez, Francisco Poza
762
Memoria RAM de mensajes (IV)
Parámetros de la memoria BRAM (IV).
22/05/2012
Ejemplo gestión RS232. L. Jacobo Álvarez, Francisco Poza
763
Memoria RAM de mensajes (V)
Parámetros de la memoria BRAM (V).
22/05/2012
Ejemplo gestión RS232. L. Jacobo Álvarez, Francisco Poza
764
Memoria RAM de mensajes (VI)
Parámetros de la memoria BRAM (VI).
22/05/2012
Ejemplo gestión RS232. L. Jacobo Álvarez, Francisco Poza
765
Memoria RAM de mensajes (VII).
Plantilla de instanciación de la memoria de mensajes creada con “Core Generator, disponible en el proceso “CORE Generator View HDL Instantiation Template”.
22/05/2012
Ejemplo gestión RS232. L. Jacobo Álvarez, Francisco Poza
766
Circuitos necesarios (VI)
Un circuito básico de selección (decodificador) para 6 periféricos de salida.
Periférico 1 de salida que corresponde al “buffer” de datos a enviar del transmisor serie RS232 (“uart_tx”).
22/05/2012
Ejemplo gestión RS232. L. Jacobo Álvarez, Francisco Poza
767
Circuitos necesarios (VII)
Periférico 2 de salida, que consiste en un registro que memoriza el estado de los dos dígitos de mayor peso del visualizador dinámico de la placa Nexys 2.
Periférico 3 de salida, que consiste en un registro que memoriza el estado de los dos dígitos de menor peso del visualizador dinámico de la placa Nexys 2.
22/05/2012
Ejemplo gestión RS232. L. Jacobo Álvarez, Francisco Poza
768
Circuitos necesarios (VIII)
Periférico 4 de salida, que consiste en un registro de 8 bits que memoriza el valor a visualizar en los LEDs de la placa Nexys 2.
Periférico 5 de salida, que se utiliza para guardar un dato en la memoria RAM de mensajes y órdenes.
Periférico 6 de salida, que consiste en un registro que memoriza la dirección de la RAM de mensajes y órdenes a la que se quiere acceder.
22/05/2012
Ejemplo gestión RS232. L. Jacobo Álvarez, Francisco Poza
769
Circuitos necesarios (IX)
Un circuito que genera la señal de referencia para obtener la velocidad de transmisión-recepción.
La señal “en_16_x_baud” debe activarse 1 ciclo de reloj por cada N ciclos del reloj principal “clk”. N = frecuencia_clk / (velocidad_trans x 16)
22/05/2012
Ejemplo gestión RS232. L. Jacobo Álvarez, Francisco Poza
770
Circuitos auxiliares placa (I).
Un circuito divisor de reloj para obtener, a partir del reloj principal de 50 MHz de la placa Nexys 2: Un reloj de 2 MHz. No se utiliza. Un reloj de 1 MHz. No se utiliza. Un reloj de 1 kHz, para eliminación de rebotes, refresco del visualizador dinámico de 7 segmentos, etc.
22/05/2012
Ejemplo gestión RS232. L. Jacobo Álvarez, Francisco Poza
771
Circuitos auxiliares placa (II)
El circuito que controla el acceso a todos los componentes de la placa Nexys 2, ya predefinido.
22/05/2012
Ejemplo gestión RS232. L. Jacobo Álvarez, Francisco Poza
772
Circuitos auxiliares placa (III)
Conexión de la señal puesta en estado inicial global del sistema digital a un pulsador.
22/05/2012
Ejemplo gestión RS232. L. Jacobo Álvarez, Francisco Poza
773
Fichero principal (I).
Todos estos circuitos se pueden instanciar en el fichero principal VHDL: top_uart_ctrl_picoblaze_3_placa_Nexys_2.vhd.
Para realizarlo se puede partir de la plantilla: top_template_picoblaze_3_placa_Nexys_2.vhd.
22/05/2012
Ejemplo gestión RS232. L. Jacobo Álvarez, Francisco Poza
774
Fichero principal (II).
Jerarquía del proyecto “uart_ctrl_picoblaze_3”.
22/05/2012
Ejemplo gestión RS232. L. Jacobo Álvarez, Francisco Poza
775
Síntesis e implementación (I)
Esquema RTL del fichero “top_uart_ctrl_picoblaze_3_placa_Nexys_2”.
22/05/2012
Ejemplo gestión RS232. L. Jacobo Álvarez, Francisco Poza
principal
776
Síntesis e implementación (II)
Resultado de la implementación del sistema completo.
22/05/2012
Ejemplo gestión RS232. L. Jacobo Álvarez, Francisco Poza
777
Programa en ensamblador (I)
El programa de control de la tarjeta Nexys 2 a través del puerto serie se compone de las siguientes partes, en este orden:
definición de registros y constantes. programa principal.
Inicializa LEDs y visualizadores placa Nexys 2. Inicializa cursor y envía mensajes iniciales al “Hyperterminal”. bucle_principal (se ejecuta continuamente): • • • •
Llama a rutina “restaura_cursor”. Llama a rutina “lee_orden”. Llama a rutina “guarda_cursor”. Comprueba el valor de los interruptores y pulsadores y los actualiza en el “Hyperterminal”.
vector de interrupción.
22/05/2012
No se utilizan interrupciones en este ejemplo.
Ejemplo gestión RS232. L. Jacobo Álvarez, Francisco Poza
778
Programa en ensamblador (II)
Subrutinas (I): Comunicación serie: Get_char • Lee un byte del puerto serie si se ha recibido alguno. No espera. Put_char • Envía un byte al puerto serie. Si el buffer de transmisión está lleno espera. Envia_cadena • Envía una cadena de caracteres almacenada en memoria al puerto serie. La cadena debe finalizar con un 0 binario.
22/05/2012
Ejemplo gestión RS232. L. Jacobo Álvarez, Francisco Poza
779
Programa en ensamblador (III)
Subrutinas (II): Comunicación serie: Guarda_cursor • Envía al puerto serie el comando para que el Hyperterminal guarde la posición actual del cursor. Restaura cursor • Envía al puerto serie el comando para que el Hyperterminal restaure la posición del cursor almacenada previamente. Lee_orden • Lee los caracteres tecleados en el Hyperterminal y los guarda en memoria.
22/05/2012
Ejemplo gestión RS232. L. Jacobo Álvarez, Francisco Poza
780
Programa en ensamblador (IV)
Subrutinas (III): Comunicación serie: Haz_orden • Comprueba si la orden tecleada en el Hyperterminal es válida y la ejecuta. Test_orden • Identifica la orden tecleada. Envía_estado_leds • Envía al puerto serie el estado de los LEDs. Envía_estado_display • Envía al puerto serie el estado de los visualizadores de 7 segmentos.
22/05/2012
Ejemplo gestión RS232. L. Jacobo Álvarez, Francisco Poza
781
Programa en ensamblador (V)
Subrutinas (IV): Comunicación serie: Envia_hex_byte • Envia al puerto serie los caracteres ASCII de un byte hexadecimal. Lee_buffer • Lee un carácter del buffer de entrada y lo pasa a mayúsculas. De esta forma se consigue que las órdenes tecleadas en el Hyperterminal no sean sensibles a mayúsculas y minúsculas. Comprueba_bs • Comprueba si la tecla pulsada es la de borrado de un carácter.
22/05/2012
Ejemplo gestión RS232. L. Jacobo Álvarez, Francisco Poza
782
Programa en ensamblador (VI)
Subrutinas (V): Conversión: Decimal_to_2ASCII • Convierte un número entre 0 y 99 a dos dígitos ASCII decimales. Hex_to_ASCII • Convierte un número entre 0 y 15 al dígito ASCII hexadecimal correspondiente. Hex_to_2ASCII • Convierte un número entre 0 y 255 a sus dos dígitos ASCII hexadecimales correspondientes.
22/05/2012
Ejemplo gestión RS232. L. Jacobo Álvarez, Francisco Poza
783
Programa en ensamblador (VII)
Subrutinas (VI): Conversión: ASCII2_to_hex • Convierte dos caracteres ASCII hexadecimales entre 00 y FF a su valor numérico. ASCII_to_hex • Convierte un carácter ASCII hexadecimal a su valor numérico. Mayusculas • Convierte un carácter alfabético a mayúsculas.
22/05/2012
Ejemplo gestión RS232. L. Jacobo Álvarez, Francisco Poza
784
Asignación de puertos de E/S (I).
Puertos de entrada.
/27 clk50MHz
en_16_x_baud
Memoria RAM 256x8 (mensajes)
Reloj_lento Dato_out 1KHz
/50000 clk
Picoblaze3_empotrado
Picoblaze 3
16 8
Puls. Interruptores
4 UART status
UART tx
2 Memoria de Código (Block RAM) 22/05/2012
1
Dato recibido
Puertos de entrada Ejemplo gestión RS232. L. Jacobo Álvarez, Francisco Poza
UART rx en_16_x_baud 785
Asignación de puertos de E/S (II)
Puertos de salida.
Memoria RAM 256x8 (mensajes)
address_ram Dato_in
Reg. Dirección 32 Picoblaze3_empotrado
16 LEDs
Picoblaze 3
8 4
Vis. LSB Vis. MSB
2 Memoria de Código (Block RAM) 22/05/2012
1
Dato a enviar
UART tx
Puertos de salida Ejemplo gestión RS232. L. Jacobo Álvarez, Francisco Poza
786
Asignación de registros internos.
Registros del Picoblaze 3:
s0, s1, s2, s3 y s4: paso de parámetros a subrutinas. s5: leds. Valor actual de los leds. s6: lsb_vis. Valor actual de los dos dígitos de menor peso del visualizador. s7: msb_vis. Valor actual de los dos dígitos de mayor peso del visualizador. s8: puntero_orden. Puntero a la posición de memoria que almacena el siguiente carácter tecleado en el Hyperterminal. s9: dato_mem. Dato leído (escrito) desde (hacia) la memoria. sA: dir_mem. Dirección de memoria a leer o escribir. sB: interruptores_1. Valor anterior de los interruptores. sC: pulsadores_1. Valor anterior de los pulsadores. sD: UART_status. Guarda el estado de la UART. sE: UART_data. Dato recibido (enviado) desde (hacia) la UART. sF: temp. Auxiliar para resultados temporales.
22/05/2012
Ejemplo gestión RS232. L. Jacobo Álvarez, Francisco Poza
787
Simulación de los circuitos.
La simulación del sistema “hardware” completo no constituye en este caso una forma sencilla de comprobar el correcto funcionamiento de la aplicación dada la complejidad del programa. No obstante, se puede realizar una simulación temporal corta para comprobar que todos los circuitos están correctamente conectados.
22/05/2012
Ejemplo gestión RS232. L. Jacobo Álvarez, Francisco Poza
788
Prueba de la aplicación (I)
Pantalla inicial del programa “HyperTerminal” durante la prueba.
22/05/2012
Ejemplo gestión RS232. L. Jacobo Álvarez, Francisco Poza
789
Prueba de la aplicación (II)
Pantalla del programa “HyperTerminal” después del envío de varios comandos.
22/05/2012
Ejemplo gestión RS232. L. Jacobo Álvarez, Francisco Poza
790
Prueba de la aplicación (III).
Foto de la placa Nexys 2 durante la prueba del ejemplo.
22/05/2012
Ejemplo gestión RS232. L. Jacobo Álvarez, Francisco Poza
791
GUIÓN EJEMPLO GESTIÓN RS-232 HARDWARE: 1. Coger los siguientes componentes de la dirección web [DTE2] incluida en la bibliografía: Divisores de reloj --> frequency_divider, divider25, divider50, divider1000. “Nexys_2_board_components”. UART 8 bits Xilinx --> “uart_rx”, “uart_tx”, “kcuart_rx”, “kcuart_tx”, “bbfifo_16x8”. 2. Recuperar los componentes realizados anteriormente (o cogerlos también de la dirección web [DTE2]): selec_8_entradas_simple. selec_8_salidas_simple. picoblaze3_empotrado. i. kcpsm3_modificado. ii. picocode (se genera después con el software en ensamblador). 3. Hacer el periférico de entrada y salida: Memoria RAM de mensajes y órdenes. Que utilicen el fichero “.coe” suministrado. 4. Hacer los periféricos de salida: Registro de memorización de la dirección de la RAM. 5. Hacer el circuito “generador_baudios”, que genera la señal “en_16_x_baud” para la UART. Que vean ejemplo en la presentación. 6. Conectar todos los componentes en el fichero VHDL principal. 793
SOFTWARE: 1. Coger el programa “UART_ctrl_incompleto1.psm” de la dirección web [DTE2] incluida en la bibliografía (este programa no funciona). 2. Hacer las rutinas: a. “Get_char”. Get_char Put_char b. “Put_char”. 3. Con estas rutinas el Picoblaze hace un eco de los caracteres Lee estado Lee estado UART UART tecleados en el HyperTerminal.
¿Hay datos?
No
Si
¿FIFO tx llena?
Si
No
Lee datos
Lee datos
Fin
Fin
Retorna con Z=1 si no hay carácter y con Z=0 si lo hay
794
4. Hacer la rutina “envia_cadena”: 5. Para probar su funcionamiento es necesario quitar el comentario de las siguientes líneas del programa principal: ; LOAD dir_mem, descripción_msg ; CALL envia_cadena 6. Si el funcionamiento es correcto debería aparecer en el HyperTerminal el mensaje de descripción del programa. 7. Coger el programa “UART_ctrl_incompleto2.psm” de la dirección web [DTE2]. 8. Añadir las rutinas anteriores (“get_char”, “put_char” y “envia_cadena”). 9. Hacer la rutina “test_orden”. Con esta rutina el programa debe responder a la orden LEDS. 10. Completar la rutina “haz_orden” con la parte correspondiente a la decodificación de la orden DISPLAY.
Envia_cadena
Dirección memoria a registro
Lee carácter
¿Es cero? Si
No
Envía carácter al puerto serie
Incrementa dirección memoria
Fin
795
Ejemplo visualizador LCD Picoblaze Índice
16/07/2012
Especificaciones. Manejo de la aplicación. Observaciones. Visualizador LCD. Solución: Circuitos necesarios. Programa en ensamblador. Asignación de puertos de E/S. Simulación de los circuitos. Prueba de la aplicación. Ejemplo visualizador LCD. L. Jacobo Álvarez, Francisco Poza
797
Especificaciones.
Circuito de control de un visualizador LCD de 2 filas de 16 caracteres. Aplicación basada en el microprocesador Picoblaze 3. La prueba se realizará mediante la placa Nexys 2 de Digilent. Una memoria ROM de 256 bytes debe guardar el contenido de 16 mensajes de 16 caracteres cada uno, que se pueden enviar al LCD mediante la orden correspondiente.
16/07/2012
Ejemplo visualizador LCD. L. Jacobo Álvarez, Francisco Poza
798
Manejo de la aplicación (I).
Se debe seleccionar la orden que debe ejecutar el microprocesador con el LCD mediante los interruptores de la placa Nexys 2, y accionar el pulsador BTN0 de la placa Nexys 2 para ejecutar la orden.
16/07/2012
Ejemplo visualizador LCD. L. Jacobo Álvarez, Francisco Poza
799
Manejo de la aplicación (II).
Codificación de las órdenes de los interruptores. Orden para el LCD
16/07/2012
Significado de la orden que se envía al LCD
Bits de mayor peso
Bits de menor peso
D7 D6 D5 D4
D3 D2 D1 D0
0000
XXXX
Reposo (no hace nada)
0001
Nº de mensaje
Envía mensaje al LCD
0010
XXXX
Borra LCD
0011
XXXX
Apaga LCD
0100
XXCP
0101
XXXX
Cursor al inicio
0110
X X I/D SH
Modo del LCD
0111
Nº de posiciones
Desplaza hacia la izquierda. No implementada
1000
Nº de posiciones
Desplaza hacia la derecha. No implementada
1001
Velocidad
1010
0 0 0 fila (0 o 1)
1011
XXXX
Inicializa LCD
1100-1111
XXXX
No implementadas
Enciende LCD, cursor (C) y parpadeo cursor (P)
Parpadeo LCD. No implementada Selecciona fila del LCD
Ejemplo visualizador LCD. L. Jacobo Álvarez, Francisco Poza
800
Observaciones.
Sólo existe una fuente de interrupción, que corresponde a la pulsación del botón BTN0 de la placa Nexys 2.
Dicha pulsación indica al Picoblaze que existe una orden externa codificada mediante los interruptores de la placa Nexys 2, que tiene que interpretar y ejecutar sobre el LCD.
16/07/2012
Ejemplo visualizador LCD. L. Jacobo Álvarez, Francisco Poza
801
Visualizador LCD (I).
Señales de control de un visualizador LCD.
SEÑAL
TIPO
RS
E
Selección de registros: - 0: registro de instrucción (para escritura). bandera de ocupado, contador de dirección (para lectura) - 1: registro de datos (para lectura y escritura).
R/W
E
Selección de lectura o escritura: - 0: escritura. - 1: lectura.
E
E
16/07/2012
FUNCIÓN
Señal de habilitación ("enable"): activa el circuito de control del visualizador para lectura o escritura.
Ejemplo visualizador LCD. L. Jacobo Álvarez, Francisco Poza
802
Visualizador LCD (II).
Cronograma de una operación de escritura de dato o instrucción.
RS R/W E DB0-DB7 ts
tEN
th Tciclo
16/07/2012
Ejemplo visualizador LCD. L. Jacobo Álvarez, Francisco Poza
803
Visualizador LCD (III).
Codificación de instrucciones reconoce visualizador LCD.
16/07/2012
las que el
Ejemplo visualizador LCD. L. Jacobo Álvarez, Francisco Poza
804
Visualizador LCD (IV).
Rutina de inicialización.
16/07/2012
Ejemplo visualizador LCD. L. Jacobo Álvarez, Francisco Poza
805
Solución.
A continuación se indica una posible solución a este ejemplo.
16/07/2012
Ejemplo visualizador LCD. L. Jacobo Álvarez, Francisco Poza
806
Circuitos necesarios (I).
Microcontrolador Picoblaze 3 junto con su memoria de programa => Picoblaze 3 empotrado.
16/07/2012
Ejemplo visualizador LCD. L. Jacobo Álvarez, Francisco Poza
807
Circuitos necesarios (II).
Un circuito básico de selección (multiplexor) para 3 periféricos de entrada.
Periférico 1 de entrada, que consiste en un registro que guarda la orden externa que indica la operación que se debe realizar con el LCD.
16/07/2012
Ejemplo visualizador LCD. L. Jacobo Álvarez, Francisco Poza
808
Circuitos necesarios (III).
Periférico 2 de entrada, que consiste en una memoria ROM de mensajes. No necesita ningún registro adicional, pues el dato ya está estable en la memoria.
16/07/2012
Ejemplo visualizador LCD. L. Jacobo Álvarez, Francisco Poza
809
Circuitos necesarios (IV).
La memoria se debe definir mediante la opción “Project New Source IP (Coregen & Architecture Wizard)” de ISE.
Vamos a escoger memoria distribuida (basada en LUTs) para su implementación.
Previamente, es necesario haber definido el fichero .COE con el contenido de la memoria.
16/07/2012
Ejemplo visualizador LCD. L. Jacobo Álvarez, Francisco Poza
810
Memoria ROM de mensajes (I).
Parámetros de la memoria de mensajes para “Core Generator (I). Memoria distribuida de 256 x 8.
16/07/2012
Ejemplo visualizador LCD. L. Jacobo Álvarez, Francisco Poza
811
Memoria ROM de mensajes (II).
Parámetros de la memoria de mensajes para “Core Generator (II). Memoria distribuida de 256 x 8.
16/07/2012
Ejemplo visualizador LCD. L. Jacobo Álvarez, Francisco Poza
812
Memoria ROM de mensajes (III).
Parámetros de la memoria de mensajes para “Core Generator (III). Memoria distribuida de 256 x 8.
16/07/2012
Ejemplo visualizador LCD. L. Jacobo Álvarez, Francisco Poza
813
Memoria ROM de mensajes (IV).
Plantilla de instanciación de la memoria de mensajes creada con “Core Generator, disponible en el proceso “CORE Generator View HDL Instantiation Template”.
16/07/2012
Ejemplo visualizador LCD. L. Jacobo Álvarez, Francisco Poza
814
Circuitos necesarios (V).
Periférico 3 de entrada, que consiste en el bus de datos del LCD, lo que permite realizar la lectura del estado del LCD si se desea.
16/07/2012
Ejemplo visualizador LCD. L. Jacobo Álvarez, Francisco Poza
815
Circuitos necesarios (VII).
Un circuito básico de selección (decodificador) para 6 periféricos de salida.
Periférico 1 de salida, que consiste en un registro que memoriza la dirección de la ROM de mensajes a la que se quiere acceder.
Periférico 2 de salida, que consiste en un registro que memoriza el dato o la instrucción a enviar al LCD.
16/07/2012
Ejemplo visualizador LCD. L. Jacobo Álvarez, Francisco Poza
816
Circuitos necesarios (VIII).
Periférico 3 de salida, que consiste en un registro que memoriza el valor de las señales RS y RW de control del LCD. De este registro sólo se utilizan los dos bits de menor peso, el bit 1 es RS y el bit 0 es RW.
Periférico 4 de salida, que consiste en un registro que memoriza el estado del microprocesador Picoblaze. De este registro sólo se utiliza el bit de menor peso (“busy”). La señal “busy” indica que el microprocesador comienza a acceder al bus del LCD.
16/07/2012
Ejemplo visualizador LCD. L. Jacobo Álvarez, Francisco Poza
817
Circuitos necesarios (IX).
Periférico 5 de salida, que consiste en un registro que memoriza el valor de la señal EN de control del LCD. De este registro sólo se utiliza el bit de menor peso.
Periférico 6 de salida que consiste en un registro que memoriza el valor de la señal de control de tercer estado de salida de datos hacia el bus del LCD.
16/07/2012
Esta señal de control permite conectar o no la salida del registro periférico de salida 2 al bus bidireccional del LCD. Dicho registro contiene el dato o la instrucción que se van a enviar al LCD. En ocasiones dejar el bus de datos del LCD en tercer estado provoca problemas de ruido eléctrico, que conducen a un mal funcionamiento del LCD. En esos casos deberán ponerse a cero las salidas hacia el LCD, en lugar de en alta impedancia. Ejemplo visualizador LCD. L. Jacobo Álvarez, Francisco Poza
818
Circuitos necesarios (X).
El bus de tres estados para la conexión con el bus del LCD, procedente del registro periférico de salida 2, se debe conectar:
Al bus de datos del LCD directamente, si la tecnología de los terminales de E/S de la FPGA lo permite.
A los circuitos auxiliares de adaptación de tensiones (74LVC4245), si la tecnología de los terminales de E/S de la FPGA es incompatible con +5V (alimentación de los visualizadores LCD comunes).
La señal “dir” de este circuito permite seleccionar la dirección de la transferencia de datos. • •
16/07/2012
“dir_74lvc4245” = 0 “dir_74lvc4245” = 1
=> =>
FPGA LCD. LCD FPGA (aquí no se usa).
Ejemplo visualizador LCD. L. Jacobo Álvarez, Francisco Poza
819
Circuitos necesarios (XI).
Un circuito de petición de la única interrupción.
La señal de petición de interrupción se genera a partir del accionamiento del pulsador BTN0, que indica una nueva orden. La petición de interrupción debe durar al menos 2 ciclos de reloj del Picoblaze, por lo que debemos memorizarla en un biestable.
El borrado de la petición de interrupción se debe realizar mediante la señal “interrupt_ack” del microprocesador Picoblaze 3.
16/07/2012
Ejemplo visualizador LCD. L. Jacobo Álvarez, Francisco Poza
820
Circuitos necesarios (XII).
Todos los circuitos periféricos (excepto la memoria ROM), así como los circuitos de selección de periféricos y de gestión de la interrupción se pueden combinar en un solo componente, para simplificar el circuito final.
16/07/2012
Ejemplo visualizador LCD. L. Jacobo Álvarez, Francisco Poza
821
Circuitos auxiliares placa (I).
Un circuito divisor de reloj para obtener, a partir del reloj principal de 50 MHz de la placa Nexys 2: Un reloj de 2 MHz, pues debido a las temporizaciones necesarias para el manejo del LCD, es conveniente que el microprocesador trabaje a dicha frecuencia. De esta forma, el ciclo de instrucción (igual a dos ciclos de reloj) es de 1 microsegundo. Un reloj de 1 kHz, para eliminación de rebotes, refresco del visualizador dinámico de 7 segmentos, etc.
16/07/2012
Ejemplo visualizador LCD. L. Jacobo Álvarez, Francisco Poza
822
Circuitos auxiliares placa (II).
Conexión de la señal puesta en estado inicial global del sistema digital a un pulsador.
16/07/2012
Ejemplo visualizador LCD. L. Jacobo Álvarez, Francisco Poza
823
Circuitos auxiliares placa (III).
Un circuito antirrebotes y detector de flancos para el pulsador BTN0 que ordena la ejecución de la orden para el LCD seleccionada en los interruptores. Si se utiliza el circuito de gestión de interrupciones realizado anteriormente, que ya incluye un circuito detector de flancos, sólo será necesario un biestable antirrebotes.
16/07/2012
Ejemplo visualizador LCD. L. Jacobo Álvarez, Francisco Poza
824
Circuitos auxiliares placa (IV).
Un circuito antirrebotes y de sincronización para los interruptores de la placa Nexys 2. En realidad es innecesario, puesto que su valor sólo se tiene en cuenta al accionar el pulsador BTN0. Los interruptores se conectan también a los LEDs de la placa Nexys 2 para facilitar la comprobación de su estado antes de accionar el pulsador.
16/07/2012
Ejemplo visualizador LCD. L. Jacobo Álvarez, Francisco Poza
825
Circuitos auxiliares placa (V).
Señales de inhibición de los visualizadores de 7 segmentos de la placa Nexys 2, que no se utilizan.
16/07/2012
Ejemplo visualizador LCD. L. Jacobo Álvarez, Francisco Poza
826
Fichero principal (I).
Todos estos circuitos se pueden instanciar en el fichero principal VHDL: top_ctrl_lcd_picoblaze_3_placa_Nexys_2.vhd.
Para realizarlo se puede partir de la plantilla: top_template_picoblaze_3_placa_Nexys_2.vhd.
16/07/2012
Ejemplo visualizador LCD. L. Jacobo Álvarez, Francisco Poza
827
Fichero principal (II).
Jerarquía del proyecto “ctrl_lcd_picoblaze_3”.
16/07/2012
Ejemplo visualizador LCD. L. Jacobo Álvarez, Francisco Poza
828
Síntesis e implementación (I)
Esquema RTL del fichero “top_ctrl_lcd_picoblaze_3_placa_Nexys_2”.
16/07/2012
Ejemplo visualizador LCD. L. Jacobo Álvarez, Francisco Poza
principal
829
Síntesis e implementación (II)
Resultado de la implementación del sistema completo.
16/07/2012
Ejemplo visualizador LCD. L. Jacobo Álvarez, Francisco Poza
830
Programa en ensamblador (I).
El programa de control del LCD se compone de las siguientes partes, en este orden:
definicion_registros_y_constantes programa_principal
rutina_atencion_interrupcion
Activa indicación de Picoblaze ocupado (señal “busy”). Llama a rutina_inicializacion_LCD. Desactiva indicación de Picoblaze ocupado (señal “busy”). Habilita las interrupciones externas. Detiene la ejecución del programa (salto a la misma posición).
Lee la orden externa (periférico 1 de entrada). Llama a la subrutina correspondiente a dicha orden. Finaliza la atención de la interrupción.
vector_interrupcion.
16/07/2012
Ejemplo visualizador LCD. L. Jacobo Álvarez, Francisco Poza
831
Programa en ensamblador (II).
Rutinas más importantes (I):
rutina_inicializacion_LCD
rutinas_envio_ordenes_LCD
Ejecuta la secuencia de órdenes para la inicialización del LCD.
Carga el código de la instrucción a enviar. Llama a rutina_envio_instruccion.
rutina_envio_mensajes
16/07/2012
Calcula la dirección de comienzo del mensaje a enviar. Obtiene el carácter a enviar de la memoria ROM externa. Llama a rutina_envio_dato. Repite hasta enviar 16 caracteres. Ejemplo visualizador LCD. L. Jacobo Álvarez, Francisco Poza
832
Programa en ensamblador (III).
Rutinas más importantes (II):
rutina_envio_instruccion
Ajusta los valores de RS y RW del LCD. Habilita las salidas hacia el bus del LCD. Llama a rutina_pulso_enable. Inhibe las salidas hacia el bus del LCD (las pone en tercer estado). Llama a rutina_temporiza_1_ms.
rutina_envio_dato
Idéntica a la anterior salvo por el valor de RS (ahora es 1).
rutina_temporizacion_1_ms
rutina_pulso_enable_LCD
16/07/2012
Ejemplo visualizador LCD. L. Jacobo Álvarez, Francisco Poza
833
Programa en ensamblador (IV).
Uno de los puntos más críticos de la realización del programa de control de un visualizador LCD mediante un microprocesador es la rutina de envío de datos, pues los tiempos entre la activación y la desactivación de las señales de control suelen ser críticos para cada visualizador.
Por ello, a continuación se incluyen unas rutinas que funcionan correctamente con el visualizador LCD que se va a utilizar.
Se recuerda que el ciclo de instrucción en este ejemplo es de 1 microsegundo.
16/07/2012
Ejemplo visualizador LCD. L. Jacobo Álvarez, Francisco Poza
834
Programa en ensamblador (V).
En reposo, las salidas del microprocesador (registro periférico de salida) hacia el bus del LCD deben estar en tercer estado.
Si el microprocesador desea enviar una instrucción o un dato al LCD, puede hacerlo mediante la orden correspondiente, habilitando las salidas hacia el bus del LCD.
Si el microprocesador desea leer el estado (“status”) del LCD, puede hacerlo mediante la orden correspondiente, manteniendo las salidas hacia el bus del LCD en tercer estado.
Cada vez que el microprocesador quiere acceder al LCD, activa la señal “busy”, lo que permite realizar un arbitraje si varios sistemas deben acceder al bus del LCD.
16/07/2012
Ejemplo visualizador LCD. L. Jacobo Álvarez, Francisco Poza
835
Programa en ensamblador (VI).
; SUBRUTINA DE ENVÍO DE UN DATO AL LCD envia_dato: OUT LOAD OUT LOAD OUT
s6, REG_LCD ; graba dato a enviar al LCD en el registro de salida sF, ENVIO_DATO ; selecciona escritura de dato sF, REG_CTRL ; graba señales de control del LCD en el registro de salida sF, BUSLCD_ON ; selecciona habilitar bus de salida hacia el LCD sF, REG_TRISTATE ; graba señal de habilitacion del bus en el registro de salida
; Pulso de ENABLE CALL pulso_enable_lcd LOAD sF, BUSLCD_OFF ; selecciona inhibir bus de salida hacia el LCD OUT sF, REG_TRISTATE ; graba señal de inhibicion del bus en el registro de salida ; Espera 1 milisegundo CALL temporiza_1ms RET
16/07/2012
Ejemplo visualizador LCD. L. Jacobo Álvarez, Francisco Poza
836
Programa en ensamblador (VII).
; SUBRUTINA DE ENVÍO DE UN PULSO DE LA SEÑAL ENABLE
pulso_enable_lcd:
; Pulso de ENABLE LOAD sF, ENABLE_ON ; selecciona habilitar LCD OUT sF, REG_ENABLE ; graba señal de ENABLE del LCD en el registro de salida LOAD sA, sA ; Equivalente a una instrucción NOP ("No operation") LOAD sA, sA ; Permite aumentar el tiempo de activación de ENABLE_LCD LOAD sF, ENABLE_OFF ; selecciona inhibir LCD OUT sF, REG_ENABLE ; graba señal de ENABLE del LCD en el registro de salida LOAD sA, sA ; Equivalente a una instrucción NOP ("No operation") LOAD sA, sA ; Permite aumentar el tiempo de desactivación de ENABLE_LCD RET
16/07/2012
Ejemplo visualizador LCD. L. Jacobo Álvarez, Francisco Poza
837
Asignación de puertos de E/S (I). clk50MHz
/25
Puertos de entrada.
/2000
Reloj_lento 1KHz
clk
clk2MHz
Petición Interrupción (BTN0)
Picoblaze3_empotrado Interruptores Picoblaze 3
1 2 4
Memoria de Código (Block RAM) 16/07/2012
Puertos de entrada
Estado LCD Dato_out
Ejemplo visualizador LCD. L. Jacobo Álvarez, Francisco Poza
Memoria ROM 256x8 (mensajes) 838
Asignación de puertos de E/S (II).
Puertos de salida.
Ctrl 3er estado salidas hacia LCD (bit 0) 32 Picoblaze3_empotrado
Picoblaze 3
16 8 4 2
Memoria de Código (Block RAM) 16/07/2012
Ctrl LCD ENABLE (bit 0) Picoblaze BUSY (bit 0) Ctrl LCD (RS, RW) Dato/instrucción LCD
1
Reg.
Dirección
Puertos de salida Ejemplo visualizador LCD. L. Jacobo Álvarez, Francisco Poza
Memoria ROM 256x8 (mensajes) 839
Asignación de registros internos.
Registros del Picoblaze 3:
s0: orden externa recibida (interruptores). s1: nibble alto de la orden recibida. s2: nibble bajo de la orden recibida. s3: nibble alto de la orden recibida, para realizar operaciones. s4: código de la orden a enviar al LCD. s5: nº de caracteres del mensaje por enviar aún. s6: dato procedente de la ROM de mensajes. s7: sin usar. s8: estado del LCD. Sin usar de momento. s9: sin usar. sA: auxiliar. sB, sC: auxiliares para temporizaciones. sD, sE: sin usar. sF: auxiliar.
16/07/2012
Ejemplo visualizador LCD. L. Jacobo Álvarez, Francisco Poza
840
Simulación de los circuitos.
La simulación del sistema “hardware” completo no constituye en este caso una forma sencilla de comprobar el correcto funcionamiento de la aplicación, dada la complejidad del programa y del acceso al visualizador LCD. No obstante, se puede realizar una simulación temporal corta para comprobar que todos los circuitos están correctamente conectados.
16/07/2012
Ejemplo visualizador LCD. L. Jacobo Álvarez, Francisco Poza
841
Prueba de la aplicación (I).
Foto de la placa Nexys 2 durante la prueba del ejemplo.
16/07/2012
Ejemplo visualizador LCD. L. Jacobo Álvarez, Francisco Poza
842
Prueba de la aplicación (II).
Detalle del LCD durante la prueba del ejemplo.
16/07/2012
Ejemplo visualizador LCD. L. Jacobo Álvarez, Francisco Poza
843
GUIÓN EJEMPLO VISUALIZADOR LCD HARDWARE: 1. Coger los siguientes componentes de la dirección web [DTE2] incluida en la bibliografía: Divisores de reloj --> frequency_divider, divider25, divider50, divider1000. “Nexys_2_board_components”. 2. Recuperar los componentes realizados anteriormente (o cogerlos también de la dirección web [DTE2]): selec_8_entradas_simple. selec_8_salidas_simple. gestion_interrupcion. Hay que añadirle un circuito antirrebotes al pulsador, antes de conectarlo a la entrada de este circuito. sync_8int. picoblaze3_empotrado. i. kcpsm3_modificado. ii. picocode (se genera después con el software en ensamblador). 3. Hacer los periféricos de entrada: Memoria ROM de mensajes. Que utilicen el fichero “.coe” suministrado. Registro de orden. 4. Hacer los periféricos de salida: Registros (y/o biestables). 845
5. Combinar los circuitos de selección de periféricos, los periféricos y el circuito de gestión de la interrupción en un solo circuito, denominado “perifericos_lcd”, incluyendo en él un bus de tres estados para las salidas hacia el LCD, con el control del tercer estado. 6. Conectar todos los componentes en el fichero VHDL principal. SOFTWARE: 1. Coger el programa “ctrl_lcd_incompleto.psm” de la dirección web [DTE2] incluida en la bibliografía (este programa no funciona). 2. Hacer las rutinas: a. “envia_dato”. Permite enviar caracteres (de instrucciones o de datos) al visualizador. Esta rutina se puede copiar de la presentación de Powerpoint correspondiente a este ejemplo. b. “pulso_enable”. Se utiliza en la rutina anterior. Esta rutina se puede copiar de la presentación de Powerpoint correspondiente a este ejemplo. c. “temporiza_1ms”. Se utiliza en la primera rutina. Con estas rutinas, el programa completo ya debe funcionar, de acuerdo a las órdenes preestablecidas. 3. Añadir nuevas órdenes y su implementación, por ejemplo: a. Desplazamiento a la izquierda. Ya prevista. b. Desplazamiento a la derecha. Ya prevista. c. Parpadeo del LCD. Ya prevista. d. Envío de una instrucción directa. Permitirá a un sistema externo enviar al LCD directamente una instrucción. 846
e. Envío de un solo carácter de dato directo. Permitirá a un sistema externo enviar al LCD directamente los datos o mensajes que quiera, sin que estén almacenados en una memoria ROM previamente.
847
MATERIAL DE CONSULTA
COMPARACIÓN ENTRE LAS DISTINTAS VERSIONES DEL MICROPROCESADOR PICOBLAZE DE XILINX
Circuitos destino
Tamaño programa Tamaño memoria de programa
Registros internos Memoria RAM Área ocupada
PICOBLAZE 1 PICOBLAZE 2 PICOBLAZE 3 Spartan 2/ 2E Spartan 3 Spartan 3 Virtex / Virtex E Virtex 2 / 2 Pro Virtex 2 / 2 Pro (adaptable a la (adaptable a la Spartan 2 / 2E) Spartan 2 / 2E) 256 1.024 1.024 instrucciones instrucciones instrucciones 1 BRAM 256 x 1 BRAM 1024 1 BRAM 1024 x 18 16 x 18 (en la Spartan 2 / (en la Spartan 2E ocupa 5 BRAM 2 / 2E ocupa 5 de 512 x 8) BRAM de 512 x 8) 16 (s0 a sF) 32 (s00 a s1F) 16 (s0 a sF) NO 76 “Slices”
NO 84 “Slices”
64 x 8 96 “Slices”
851
Anidamiento de subrutinas Bus direcciones Tamaño instrucción Dirección vector interrupción Juego de instrucciones Señal interrupción atendida Instrucciones adicionales
PICOBLAZE 1 PICOBLAZE 2 15 niveles 31 niveles
PICOBLAZE 3 31 niveles
8 bits
10 bits
10 bits
16 bits
18 bits
18 bits
FF
3FF
3FF
49 instrucciones NO
49 instrucciones NO
57 instrucciones SÍ (INTERRUPT_ACK) STORE (2) FETCH (2) COMPARE (2) TEST (2)
852
ETAPAS DEL PROCESO DE DISEÑO DE APLICACIONES BASADAS EN EL MICROPROCESADOR PICOBLAZE 3 DE XILINX MEDIANTE EL ENTORNO PICOBLAZE IDE 1. Crear un nuevo proyecto en ISE. 2. Crear dentro del directorio del nuevo proyecto, un subdirectorio denominado “Sw”, en el que guardaremos el programa que hagamos en lenguaje ensamblador del microcontrolador Picoblaze. 3. Copiar al subdirectorio “Sw” el fichero “Modelo_informe_programas_picoblaze.doc” y renombrarlo de acuerdo con la aplicación que se va a realizar. 4. Copiar al subdirectorio “Sw” el fichero “ROM_blank_modificada.vhd”, suministrado por el profesor. 5. Abrir el entorno “PicoblazeIDE” y escribir el programa en lenguaje ensamblador, con los comentarios necesarios para su comprensión. Ir rellenando las plantillas de planificación a medida que se asignan los registros, periféricos de entrada y de salida y las fuentes de interrupción. 6. Debemos recordar incluir la línea VHDL “ROM_blank_modificada.vhd”, “picocode.vhd”, “picocode” que creará el fichero VHDL que define las memorias BRAM que actúan como memoria de programa y las inicializa con el código correspondiente al programa escrito. 853
7. Debemos tener cuidado al escribir el programa con las diferencias entre las instrucciones y las directivas del entorno “picoblazeIDE” frente al ensamblador de Xilinx, sobre todo cuando consultemos los manuales de Xilinx. 8. Antes de ensamblar y simular el programa, debemos recordar seleccionar la versión 3 del Picoblaze, en el menú “Settings”. 9. Una vez ensamblado el programa, dispondremos en el subdirectorio”Sw” de un archivo denominado “picocode.vhd”, con la definición en VHDL de la memoria de programa y de su contenido. 10. Los ficheros fuente necesarios para implementar en la familia Spartan 3 la versión 3 del Picoblaze se indican en la tabla siguiente: Versión 3
Ficheros fuente del microcontrolador Picoblaze necesarios “kcpsm3.vhd”, “picoblaze3_empotrado.vhd”
11. Copiar al directorio principal del proyecto de ISE esos ficheros. 12. Abrir la herramienta ISE y añadir esos ficheros como ficheros fuente, mediante la opción de menú “Project Add Source”. Además, hay que añadir el fichero “picocode.vhd” del subdirectorio”Sw”, generado anteriormente. 13. Ahora debemos diseñar y añadir los circuitos de selección de periféricos de entrada y de salida y el circuito de gestión de las interrupciones, si las hay. Si estos
854
circuitos están prediseñados, podemos añadirlos como ficheros fuente, mediante la opción de menú “Project Add Copy of Source”. 14. Ahora debemos diseñar los periféricos necesarios para la aplicación y simular cada uno de ellos por separado. 15. A continuación ya se pueden conectar entre sí todos los circuitos, instanciándolos en el fichero VHDL principal. 16. Ahora podemos simular todo el sistema completo (*). No es necesario realizar una simulación exhaustiva, pero sí comprobar que el microprocesador empieza ejecutando correctamente las primeras instrucciones del programa, para asegurarnos de que todo está conectado correctamente. 17. Antes de poder probarlo en la placa, deberemos añadir en general circuitos de sincronización, divisores de reloj, etc., al sistema global. 18. Debemos también añadir el fichero de restricciones “.UCF”, con la asignación de terminales adecuada para la placa que vamos a utilizar. El profesor suministrará un fichero guía denominado “Nexys_2_board.ucf”. Se deben eliminar las líneas correspondientes a las señales que no se utilicen. 19. Ahora se debe implementar de nuevo todo el sistema completo y generar el fichero de programación. 20. Por último, ya sólo queda realizar la programación de la FPGA y comprobar el correcto funcionamiento de nuestra aplicación.
855
MODIFICACIONES DEL SOFTWARE 1. Una vez realizada una primera implementación, si el “hardware” funciona correctamente y sólo se desean hacer cambios de “software”, hay que dar los siguientes pasos: 2. Añadir al proyecto el fichero “memoria_programa.bmm”. 3. Realizar una nueva implementación completa del fichero principal. 4. Copiar al subdirectorio “Sw” los siguientes ficheros: 5. “coe2mem.exe”. 6. “load_sw_Adept.bat” si se utiliza el cable USB de Digilent incluido en la placa o “load_sw_iMPACT.bat” si se utiliza un cable JTAG de Xilinx (paralelo o USB) adicional. En un nuevo ordenador, estos ficheros “.bat” deben editarse para ajustar la ruta de los comandos de ISE que se ejecutan. 7. Modificar el fichero “.psm” con el programa en ensamblador, para añadir las siguientes directivas: 8. COE "picocode.coe" 9. EXEC "load_sw_Adept.bat top_ejemplo_basico_picoblaze_3_placa_nexys_2 memoria_programa picocode" o EXEC "load_sw_iMPACT.bat top_ejemplo_basico_picoblaze_3_placa_nexys_2 memoria_programa picocode", según corresponda. 10. A partir de este momento, cualquier cambio de “software” que se realice en el programa “.psm” provoca que, una vez ensamblado el programa, se genere un nuevo
856
archivo de programación “top_sw.bit”, que será el que haya que usar para programar la FPGA: 11. En el caso de utilizar el cable USB de Digilent incluido en la placa, será necesario utilizar o bien el programa “Adept” para programar la FPGA o bien la herramienta “iMPACT” con el “plug-in” de Digilent. 12. En el caso de utilizar un cable JTAG de Xilinx (paralelo o USB) adicional, el propio fichero "load_sw_iMPACT.bat” se encarga de programar la FPGA automáticamente.
(*) Cuando simulamos un sistema digital del que forma parte el microprocesador Picoblaze 3 de Xilinx, es posible ver la dirección de la memoria de programa a la que accede en cada momento y la instrucción suministrada por dicha memoria. Esto nos permite comprobar más fácilmente si el funcionamiento del sistema es correcto. Para acceder a ellas, una vez ejecutado el programa Isim a través de un banco de pruebas de la herramienta ISE, se selecciona el componente “uut picoblaze3” en la ventana “Instances and Processes” y, a continuación, se seleccionan estas señales en la ventana “Objects”, se pulsa el botón derecho del ratón y se añaden mediante “Add to Wave Window”.
857
A continuación se debe reiniciar la simulación (“restart”) y ejecutar de nuevo (“run all”), con lo que vuelve a ejecutar la simulación, ya con esas señales. Una forma más cómoda es utilizar el fichero “picoblaze3_empotrado_para_simulacion.vhd”, que ya incluye como puertos de salida dichas señales.
858
PLANIFICACIÓN DE REGISTROS DE APLICACIÓN BASADA EN PICOBLAZE NOMBRE DE LA APLICACIÓN: VERSIÓN DEL MICROCONTROLADOR PICOBLAZE UTILIZADA: ESPECIFICACIONES DE LA APLICACIÓN:
MANEJO DE LA APLICACIÓN:
OBSERVACIONES SOBRE LA APLICACIÓN:
859
HOJA DE PLANIFICACIÓN PARA LA UTILIZACIÓN DE LOS REGISTROS DEL MICROCONTROLADOR PICOBLAZE 3 (SÓLO 16 REGISTROS) Registro
Descripción de la función del registro
s0 s1 s2 s3 s4 s5 s6 s7 s8 s9 sA sB sC sD sE sF
860
HOJA DE PLANIFICACIÓN PARA LA UTILIZACIÓN DE HASTA 32 PUERTOS DE ENTRADA DEL MICROCONTROLADOR PICOBLAZE 3 Puerto 00
Descripción de la función del puerto de ENTRADA Identificación de la fuente de interrupción (cambiar fichero VHDL en otro caso)
01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
861
HOJA DE PLANIFICACIÓN PARA LA UTILIZACIÓN DE HASTA 32 PUERTOS DE ENTRADA DEL MICROCONTROLADOR PICOBLAZE 3 Puerto
Descripción de la función del puerto de ENTRADA
10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F
862
HOJA DE PLANIFICACIÓN PARA LA UTILIZACIÓN DE HASTA 32 PUERTOS DE SALIDA DEL MICROCONTROLADOR PICOBLAZE 3 Puerto
Descripción de la función del puerto de SALIDA
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
863
HOJA DE PLANIFICACIÓN PARA LA UTILIZACIÓN DE HASTA 32 PUERTOS DE SALIDA DEL MICROCONTROLADOR PICOBLAZE 3 Puerto
Descripción de la función del puerto de SALIDA
10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F
864
HOJA DE PLANIFICACIÓN PARA LA UTILIZACIÓN DE LA MEMORIA “SCRATCHPAD RAM” DEL MICROCONTROLADOR PICOBLAZE 3 (64 POSICIONES) Posición
Descripción
Posición
00
10
01
11
02
12
03
13
04
14
05
15
06
16
07
17
08
18
09
19
0A
1A
0B
1B
0C
1C
0D
1D
0E
1E
0F
1F
Descripción
865
HOJA DE PLANIFICACIÓN PARA LA UTILIZACIÓN DE LA MEMORIA “SCRATCHPAD RAM” DEL MICROCONTROLADOR PICOBLAZE 3 (64 POSICIONES) Posición
Descripción
Posición
20
30
21
31
22
32
23
33
24
34
25
35
26
36
27
37
28
38
29
39
2A
3A
2B
3B
2C
3C
2D
3D
2E
3E
2F
3F
Descripción
866
HOJA DE PLANIFICACIÓN PARA LA UTILIZACIÓN DE DISTINTAS FUENTES DE INTERRUPCIÓN EN EL MICROCONTROLADOR PICOBLAZE 3 Fuente
Descripción de la fuente de interrupción
0 1 2 3 4 5 6 7 8 9 A B C D E F
867
BIBLIOGRAFÍA DOCUMENTACIÓN XILINX [CHAPLIN] “Reconfiguring Block RAMS”, Kris Chaplin, Xilinx. [CHAPMAN 02] “Creating Embedded Microcontrollers (Programmable State Machines)”, TechXclusives, Xilinx. [CHAPMAN 03] “KCPSM3, 8-bit Microcontroller for Spartan-3, Virtex-2 and Virtex-2 Pro (KCPSM3_Manual)”, Ken Chapman, Xilinx, 2003. [CHAPMAN 10] “PicoBlaze 8-bit Embedded Microcontroller User Guide for Spartan-3, Spartan-6, Virtex-5, and Virtex-6 FPGAs (UG129)”, Xilinx, 2010. [ISE 13a] Tutoriales de ISE accesibles a través del menú “Help” y de la carpeta de instalación del programa. [ISE 13b] Manuales de software ISE accesibles a través del menú “Help” y de la carpeta de instalación del programa.
869
LIBROS [ÁLVAREZ 04] ÁLVAREZ RUIZ DE OJEDA, L.J. Jacobo, Diseño Digital con Lógica Programable, Editorial Tórculo, 2004. [ÁLVAREZ 04b] ÁLVAREZ RUIZ DE OJEDA, L.J. Jacobo, Diseño Digital con Lógica Programable. Tomo II (CD-ROM), Editorial Tórculo, 2004. [ÁLVAREZ 11] ÁLVAREZ RUIZ DE OJEDA, L.J. Jacobo, POZA GONZÁLEZ, F., Diseño de aplicaciones empotradas de 32 bits en FPGAs con Xilinx EDK 10.1 para Microblaze y Power-PC, Editorial Visión libros, 2011.
ENLACES [ALTERA] Dirección de Internet, http://www.altera.com . [CYPRESS] Dirección de Internet, http://www.cypress.com . [DIGILENT]
Dirección de Internet, http://www.digilentinc.com, Digilent, Inc.
- S3E board reference manual. - Nexys 2 reference manual.
870
- XUPV2Pro reference manual. [DTE1] Dirección de Internet, http://www.dte.uvigo.es/logica_programable, páginas sobre Lógica Programable, Departamento de Tecnología Electrónica, Universidad de Vigo. [DTE2] Dirección de Internet, http://www.dte.uvigo.es/logica_programable/libros.htm, recursos necesarios para la realización de los ejemplos descritos en este libro, Departamento de Tecnología Electrónica, Universidad de Vigo. [ECLIPSE]
Dirección de Internet, http://www.eclipse.org,
[LATTICE] Dirección de Internet, http://www.latticesemi.com . [MEDIATRONIX] Dirección de Internet, http://www.mediatronix.com/pBlazeIDE.htm, entorno de desarrollo de “software” para Picoblaze. [QUICKLOGIC] Dirección de Internet, http://www.quicklogic.com . [STEWART] Dirección de Internet, http://www.nialstewartdevelopments.co.uk/downloads.htm, adaptación del Picoblaze 2 para su uso con Spartan 2. [TRISCEND] Dirección de Internet, http://www.triscend.com . [XILINX] 871
Dirección de Internet, http://www.xilinx.com, Xilinx. Canal en youtube, http://www.youtube.com . Microprocesador Picoblaze, http://www.xilinx.com/products/ipcenter/picoblaze.htm . Ficheros fuente de Picoblaze, http://www.xilinx.com/ipcenter/processor_central/picoblaze/member/. Ejemplos de aplicaciones con Picoblaze, http://www.xilinx.com/products/boards/s3estarter/reference_designs.htm, http://www.xilinx.com/products/boards/DO-SPAR3-DK/reference_designs.htm. Foro de Picoblaze, http://forums.xilinx.com/t5/PicoBlaze/bd-p/PicoBlaze.
872
LOS AUTORES Luis Jacobo Álvarez Ruiz de Ojeda, Ingeniero Industrial (especialidad de Automática y Electrónica) por la Universidad de Vigo (1991). Doctor Ingeniero Industrial en Electrónica por la Universidad de Vigo (1995). Profesor de la E.T.S.I. de Telecomunicación de Vigo desde 1991, en la que actualmente es profesor titular. Su trabajo, tanto en docencia, como en investigación y desarrollo, ha estado centrado desde 1991 en el estudio de las arquitecturas de los circuitos digitales programables de los tipos PLD y FPGA, y en el desarrollo de métodos de diseño y de aplicaciones para estos circuitos. Francisco Poza González, Ingeniero Industrial (especialidad de Automática y Electrónica) por la Universidad de Vigo (1986). Doctor Ingeniero Industrial en Electrónica por la Universidad de Vigo (1997). Profesor en la E.T.S.I Industriales de Vigo desde 1991. Es profesor Titular de Universidad desde 1999. Lleva más de 10 años impartiendo docencia en materias relacionadas con circuitos digitales configurables de los tipos PLD y FPGA. Desde el año 2005 hasta la actualidad, ambos autores han dirigido e impartido diversos cursos de Posgrado sobre diseño de sistemas empotrados de 8 y 32 bits en FPGAs de Xilinx, 873
con sus herramientas ISE y EDK, para sus microprocesadores Picoblaze, Microblaze y PowerPC. Estos cursos se han celebrado en el Departamento de Tecnología Electrónica de la Universidad de Vigo (más información en http://www.dte.uvigo.es/logica_programable/cursos.htm). Recursos necesarios para realizar las prácticas. http://www.dte.uvigo.es/logica_programable/Recursos/Recursos_Picoblaze.rar
874