DISENO DE SISTEMAS EMPOTRADOS DE 8 BITS - Desbloqueado (2).pdf

Descripción completa

Views 138 Downloads 2 File size 39MB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

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