You are on page 1of 875

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:
pedidos@visionnet.es

Si quiere recibir información periódica sobre las novedades de nuestro grupo


editor envíe un correo electrónico a:
subscripción@visionnet.es
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
 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”.

21/05/2012 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 concreta del procesador


utilizado.

21/05/2012 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):


 Semimedida (“semi-custom”).
 Totalmente a medida (“full-custom”).

21/05/2012 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, FLASH-
EEPROM, 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 parte
configurable por el usuario.
 Mediante una FPGA de gran capacidad lógica.

 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:
 Uno o varios microprocesadores.
 Una o varias unidades de memoria (SRAM, FLASH-
EEPROM, etc.).
 Los periféricos de entrada y salida de los
microprocesadores.
 Otros sistemas digitales complejos, que pueden ser
independientes o interactuar con los microprocesadores.

21/05/2012 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 comercial
ampliamente utilizado (8051, PIC, etc).
• Reducción del tiempo de diseño.
 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
 Introducción.
 Codiseño hardware/software.
 Fases detalladas del flujo de codiseño.
 Particionado hardware/software.

21/05/2012 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 suele denominar codiseño


“hardware/software”.

21/05/2012 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 Especificación
codiseño.
Particionado
Hardware-Software

Simulación Descripción Desarrollo Simulación


Hardware Hardware Software Software

Síntesis Compilación

Depuración Depuración
Implementación Enlazado
Hardware Software
Co-simulación Co-depuración
Hardware- Combinación hardware-software Hardware-
Software Software
21/05/2012 Codiseño Hardware / Software. L. Jacobo Álvarez, Francisco Poza 75
Flujo de codiseño HW/SW (I).
 Especificación:
 Definir la funcionalidad del sistema a desarrollar.

 Particionado Hardware-Software:
 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:
 Desarrollo de la aplicación en ensamblador o en lenguajes de alto nivel
(C, etc.).
 Existen entornos específicos para cada microprocesador.

 Simulación hardware:
 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:
 Se utilizará la herramienta específica del fabricante de la FPGA.

 Compilación y enlazado.
 Se utilizarán herramientas específicas para el lenguaje de programación
y el microprocesador utilizados.

 Depuración hardware:
 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 :
 Se utilizará la herramienta específica del fabricante de la FPGA.

 Cosimulación hardware-software:
 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
Bloques
Lógicos
 Tecnología de 0’15
Configurables
micras en un proceso
(CLBs)
de 8 capas, con
transistores de alta
velocidad de 0’12
Gestión de reloj (DCMs,
micras.
BUFGMUXes)
 Tensión de
alimentación interna
de 1.5V.
21/05/2012 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).

Active Interconnect™ Powerful CLB

Slice S3

CLB, Slice S2
Switch
IOB, Switch
Matrix
DCM Matrix Slice S1

• Fully buffered Slice S0


• Fast, predictable
BRAM
• 8 LUTs
• 128b distributed RAM
Block RAM • Wide input functions (32:1)
• 18KBit True Dual Port Multipliers • Support for slices based
• Up to 3 Mbits / device • 18b x 18b multiplier multipliers
• 200+ MHz pipelined

21/05/2012 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

16 Clocks DCM

DCI
• Zero delay clock
• Precision phase shift
• Frequency synthesis
• Duty cycle correction
• On-chip termination • Clock multiply and divide
• Guaranteed signal integrity
• Eliminates 100s of resistors

21/05/2012 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 BUFT


COUT COUT

contiene cuatro “slices”: BUF T

 Líneas locales permiten Slice S3

interconectar entre sí los


“slices” de un CLB y éste con Slice S2
los CLBs vecinos. Switch SHIFT
Matrix
 La matriz de conmutación
(“switch matrix”) permite Slice S1
acceder a los recursos de
interconexión generales.
Slice S0 Local Routing

CIN CIN

21/05/2012 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”.

 Cada “slice” permite realizar dos:


— Tablas de consulta de 4 entradas.
— Memorias RAM de 16 bits.
RAM16 — Registros de desplazamiento de 16
bits.
 Cada biestable puede configurarse
SRL16 como:
MUXFx  D activado por flancos (“flip-flop”).

 D activado por niveles (“latch”).

 Además, cada “slice” posee lógica


LUT CY Register
G dedicada:
MUXF5  Multiplexores.

 Lógica aritmética:

Register  Circuitos de acarreo.


LUT CY
F  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 Slice 0
secuenciales.
PRE
 2 BUFTs asociados a cada LUT Carry D Q
CE
CLB, accesibles para las 16 CLR
salidas del CLB.
 La lógica de acarreo se
propaga verticalmente, sólo
hacia arriba. LUT Carry D PRE
Q
CE
 2 líneas de acarreo
CLR
independientes por cada
CLB.

21/05/2012 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:
A B C D Z
 También llamadas Generadores de
Funciones (FGs). 0 0 0 0 0
 La capacidad lógica de la LUT está limitada 0 0 0 1 0
por el número de entradas (4). 0 0 1 0 0
 El retardo es independiente de la función
0 0 1 1 1
lógica realizada.
0 1 0 0 1
0 1 0 1 1
Lógica Combinacional
. . .
A 1 1 0 0 0
B
Z 1 1 0 1 0
C
D 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


FDRSE_1
biestables activados por flancos o
por niveles. D S Q
CE
 2 en cada “slice”, 8 por CLB.
R
 Las entradas proceden de las LUTs o
del exterior del CLB. FDCPE

 Señales de puesta a uno y cero D PRE Q


independientes: CE

 Pueden ser síncronas o CLR


asíncronas.
 Todas las señales de control son LDCPE
compartidas dentro de un “slice”. D PRE Q
 Pueden ser invertidas de forma CE

independiente. G
CLR

21/05/2012 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.

MUXF8 combina las salidas


CLB

F8
de dos MUXF7 (del CLB
superior o inferior.

F5
Slice S3
MUXF6 combina los “slices”

F6
S2 y S3.

F5
Slice S2

MUXF7 combina las salidas


F7

de dos MUXF6.
Slice S1
F5

MUXF6 combina los “slices” S0 y S1


F6

Slice S0
F5

MUXF5 combina las LUTs de cada “slice”.

21/05/2012 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, F6MUX,


F7MUX, F8MUX.
data(7)
F6MUX
 Mediante su utilización: data(6)
 Un multiplexor de 4 canales de 1
bit utiliza sólo un “slice”. muxout
data(5)
 Un multiplexor de 16 canales de
data(4)
1 bit utiliza cuatro “slices”.
 Un multiplexor de 32 canales de
1 bit utiliza ocho “slices”. data(3)
data(2)
F5MUX
 No es necesario especificar su
uso de forma especial sino que data(1)
se infieren automáticamente. data(0)
LUT

21/05/2012 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 COUT COUT


To S0 of the next
simple, rápida y CLB
To CIN of S2 of the next CLB

completa: SLICE S3
 Puerta XOR First Carry CIN
dedicada para Chain COUT

realizar la suma
SLICE S2
directamente.
 Utiliza recursos de
SLICE S1
interconexión
específicos. CIN
COUT
Second
Carry Chain
 Todas las
herramientas de SLICE S0
síntesis permiten CIN CIN CLB
su utilización.

21/05/2012 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 S
DI
CO
CY_MUX
CI

CY_XOR
MULT_AND

AxB

LUT

B LUT

21/05/2012 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
A Q D Q SRLC16E
Cascadable
CE
CE CE CE CE CE CE CE CE CE CE CE CE CE CE CE CE Q15
D D Q D Q D Q D Q D Q D Q D Q D Q D Q D Q D Q D Q D Q D Q D Q D Q

A[3:0] 0000 1111

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 LUT


con direccionamiento dinámico D D Q
CE CE
(familia Virtex - II): CLK
 Máximo retardo de 16 ciclos de
D Q
reloj por LUT (128 por CLB) CE

 Se pueden encadenar varias


LUTs o CLBs para obtener D Q Q
CE
registros más largos.
 Conexión dedicada de la
salida Q15 a la entrada del
siguiente SRL16CE.
D Q
 La longitud del registro puede CE
LUT
variarse de forma asíncrona,
modificando el valor de la A[3:0]
Q15 (cascade out)
dirección A.

21/05/2012 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

Operation A Operation B
64
4 Cycles 8 Cycles
64
Operation C Operation D - NOP

3 Cycles 9 Cycles
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 Ejemplo (SRL16E):


descripción en VHDL se infiera process(clk)
automáticamente un registro begin
de desplazamiento basado en
RAM (SRL16 o SRL16E), es if rising_edge(clk) then
necesario: if ce = ‘1’ then
 No incluir señales de puesta sr <= din & sr(0 to 14);
en estado inicial (“set” o end if;
“reset”).
end if;
 Que sólo se utilice la entrada
serie y la salida serie. end process;
 Estos registros se pueden dout <= sr(15);
inicializar a través de un
atributo INIT en el fichero de
restricciones (UCF).
21/05/2012 FPGAs Virtex 2, 4 y 5 y Spartan 3 de Xilinx. Luis Jacobo Álvarez Ruiz de Ojeda 105
Registros de desplazamiento (V).
 Registros de desplazamiento basados en RAM.

 Los registros de desplazamiento Ejemplo (SRLC16E):


basados en RAM de las FPGAs de process(clk)
la familia Virtex™-II poseen dos begin
salidas:
if rising_edge(clk) then
 Q15.
 Salida del último “biestable”. if CE = ‘1’ then
 Q. sr <= din & sr(0 to 14);
 Salida con direccionamiento end if;
dinámico. end if;
 Permite seleccionar la etapa que
end process;
se conecta a la salida del
registro. dout <= sr(15);
 Esto posibilita hacer registros de dynamic_out <= sr(addr);
desplazamiento de cualquier
número de etapas.

21/05/2012 FPGAs Virtex 2, 4 y 5 y Spartan 3 de Xilinx. Luis Jacobo Álvarez Ruiz de Ojeda 106
Memorias (I).
 Los bloques lógicos de las FPGAs de tecnología
SRAM, basados en tablas de consulta (LUTs), permiten
la realización de distintos tipos de memorias.

 A las unidades de memoria interna basadas en LUTs se


las denomina memoria distribuida, para distinguirlas de
otras formas de realizar unidades de memoria, como
son:
 Utilización de circuitos específicos de memoria interna
(BRAM en las FPGAs de Xilinx).
 Utilización de circuitos de memoria externos a la FPGA.

21/05/2012 FPGAs Virtex 2, 4 y 5 y Spartan 3 de Xilinx. Luis Jacobo Álvarez Ruiz de Ojeda 107
Memorias (II).
 El tipo de memoria adecuado para cada caso depende
fundamentalmente de la capacidad de memoria que se
necesite:
 < 1 kbyte: memoria distribuida.
 < 10 kbytes: memoria BRAM.
 > 10 kbytes: memoria externa.

 A continuación se analizan con más detalle los


distintos tipos de memorias.

21/05/2012 FPGAs Virtex 2, 4 y 5 y Spartan 3 de Xilinx. Luis Jacobo Álvarez Ruiz de Ojeda 108
Memorias (III).
 Tipos de memorias en la familia Virtex 2.

Distributed RAM High-Performance


External Memory Interfaces
16x1 16x1
DDR
16x1 16x1
SDRAM
16x1 16x1
16x1 16x1

16k x 1
8k x 2 ZBT®
4k x 4
SRAM
2k x 9
1k x 18
512 x 36
QDR
True-Dual Port™ SRAM
Synchronous Block RAM

21/05/2012 FPGAs Virtex 2, 4 y 5 y Spartan 3 de Xilinx. Luis Jacobo Álvarez Ruiz de Ojeda 109
Memoria distribuida (I).
 Características (I).

 Tablas de consulta (LUTs) internas de la


FPGA que se utilizan como memoria.
 Flexibles. Permiten realizar RAM, ROM, o 64b
64b Dual Port
registros de desplazamiento. RAM
 Tiempo de acceso reducido (memorias
1 CLB
rápidas).
 Se pueden encadenar mediante las líneas 128b Single Port
de interconexión de los CLBs. RAM
RAM16
16b
 Aplicaciones: 1 CLB
– LFSRs. SRL16
– Aritmética Distribuida.
– Registros multiplexados en el tiempo
(“time-shared”).
LUT Shift register
– Pequeñas FIFOs. 128b
-1
– Líneas de retardo digitales (Z ).

16b 1 CLB

21/05/2012 FPGAs Virtex 2, 4 y 5 y Spartan 3 de Xilinx. Luis Jacobo Álvarez Ruiz de Ojeda 110
Memoria distribuida (II).
 Características (II).

 Tablas de consulta (LUTs) de los “slices” de


la FPGA, que se utilizan como memoria. RAM16X1S
D
 Escritura síncrona. WE
WCLK
 Lectura asíncrona. LUT A0 O
 Se pueden utilizar los biestables de los A1
A2
“slices” para realizar la lectura de forma A3
síncrona.
RAM32X1S RAM16X1D
 Tanto las memorias RAM como las ROM se D D

inicializan durante la configuración. WE


WCLK
WE
WCLK
 Después de la configuración sólo las Slice A0 O A0 SPO
A1 A1
memorias RAM permiten escribir en ellas. A2 A2
LUT A3 A3
A4 DPRA0 DPO
 Permiten emular memorias RAM de acceso DPRA1
simultáneo (“dual-port”): DPRA2
DPRA3
 Un puerto de escritura/lectura.
LUT
 Un puerto de sólo lectura.

21/05/2012 FPGAs Virtex 2, 4 y 5 y Spartan 3 de Xilinx. Luis Jacobo Álvarez Ruiz de Ojeda 111
Memoria dedicada (BRAM) (I).
 Características.

 Bloques dedicados (específicos) de memoria


internos a la FPGA.
 Hasta 3’5 Mbits de RAM, organizados en bloques 18-kb block SelectRAM memory
de 18 kbits. DIA
DIPA
 Escritura y lectura síncronas.
ADDRA
 Memorias de acceso simultáneo WEA
(“dual-port”): ENA
SSRA DOA
 Los dos puertos permiten escritura y lectura.
CLKA DOPA
 Relojes diferentes para cada puerto.

 Permiten inicialización durante la configuración de DIB


la FPGA. DIPB
ADDRB
 Puesta a cero síncrona de los registros de salida. WEB
 Soporta bits de paridad. ENB
SSRB DOB
 1 bit de paridad por cada 8 bits de datos => 18
CLKB DOPB
bits = (8 + 1) + (8 + 1).

21/05/2012 FPGAs Virtex 2, 4 y 5 y Spartan 3 de Xilinx. Luis Jacobo Álvarez Ruiz de Ojeda 112
Memoria dedicada (BRAM) (II).
 Posibles configuraciones.

 Configuraciones
disponibles en Configuration Depth Data Bits Parity Bits
cada puerto: 16k x 1 16 kb 1 0
8k x 2 8 kb 2 0
4k x 4 4 kb 4 0
2k x 9 2 kb 8 1
1k x 18 1 kb 16 2
512 x 36 512 32 4

 Configuraciones independientes en los


puertos A y B: Port A: 8 bits
 Permite conversión de tamaños de
IN 8 bit
datos, incluyendo bits de paridad.

OUT 32 bit
Port B: 32 bits

21/05/2012 FPGAs Virtex 2, 4 y 5 y Spartan 3 de Xilinx. Luis Jacobo Álvarez Ruiz de Ojeda 113
Multiplicadores “hardware” (I).
 Características (I).
 Multiplicadores dedicados (específicos) de
18-bits x 18-bits.
 Número de multiplicadores:
 Virtex-II : hasta 168

 2V40 : 4.
18 Bit
 2V8000 : 168. 36 Bit
 Virtex-II Pro : hasta 556 .
18 Bit
 2VP2 : 12.

 2VP125 : 556.

 Operaciones con signo en complemento a 2.


 Operaciones con operandos de 4 a 18 bits.
Signed Multiply Performance
 Operaciones combinacionales o memorizadas
(“pipelined”). Virtex-II
 Permite implementar de forma eficiente 18 x 18 245 MHz
funciones MAC, combinando el uso de Virtex-II Pro
memorias BRAM y “slices” de la FPGA. 18x18 300 MHz
Pipelined multiplier with registered
Preliminary inputsFile
V1.60 Speeds and outputs

21/05/2012 FPGAs Virtex 2, 4 y 5 y Spartan 3 de Xilinx. Luis Jacobo Álvarez Ruiz de Ojeda 114
Multiplicadores “hardware” (II).
 Características (II).
 Realizan operaciones con signo en complemento a 2.
 Optimizados para implementar funciones MAC.
 Se localizan físicamente próximos a las memorias BRAM.

Data_A
(18 bits) 4 x 4 signed
8 x 8 signed
18 x 18 Output
Multiplier (36 bits) 12 x 12 signed
18 x 18 signed
Data_B
(18 bits)

21/05/2012 FPGAs Virtex 2, 4 y 5 y Spartan 3 de Xilinx. Luis Jacobo Álvarez Ruiz de Ojeda 115
Circuitos de reloj (I).
 Cada FPGA posee 16 multiplexores globales de reloj (BUFGMUX).
 8 en la parte superior central y 8 en la parte inferior central de la
FPGA.
 La señal de reloj puede proceder de un terminal de entrada de la
FPGA, de un circuito gestor de reloj (DCM) o de una línea de
interconexión local.

21/05/2012 FPGAs Virtex 2, 4 y 5 y Spartan 3 de Xilinx. Luis Jacobo Álvarez Ruiz de Ojeda 116
Circuitos de reloj (II).
 Los multiplexores globales de reloj
permiten (I):

 La función tradicional de los amplificadores


de reloj globales (BUFG).
 Distribución de señales de reloj por toda la I O
FPGA, con mínimo desfase.

 Habilitación de reloj (BUFGCE). I O


 La señal de salida de reloj está a cero mientras
CE está desactivado.
 CE puede ser activo a nivel bajo o alto. CE
 Los cambios de estado de CE sólo se tienen en
cuenta cuando la señal de reloj está a cero,
para evitar pulsos transitorios (“glitches”) y
pulsos de reloj de menor duración.

21/05/2012 FPGAs Virtex 2, 4 y 5 y Spartan 3 de Xilinx. Luis Jacobo Álvarez Ruiz de Ojeda 117
Circuitos de reloj (III).
 Los multiplexores globales de
reloj permiten (II):

 Conmutación entre diferentes I0


señales de reloj sin transitorios

BUFGMUX
(“glitches”) (BUFGMUX). O
 La salida cambia de un reloj a I1
otro sin pulsos transitorios.
S
 Después de un cambio de estado
de S, el circuito BUFGMUX
espera a que la señal de reloj que
S
estaba seleccionada se ponga a Wait for low
cero.
I0
 La salida del circuito BUFGMUX
Switch
permanece a cero hasta que la I1
nueva señal de reloj
seleccionada pase a cero y O
entonces, conmuta.

21/05/2012 FPGAs Virtex 2, 4 y 5 y Spartan 3 de Xilinx. Luis Jacobo Álvarez Ruiz de Ojeda 118
Circuitos de reloj (IV).
 Se pueden utilizar hasta 8 señales de reloj en cada región de la FPGA.
 Cada FPGA de la familia Virtex 2 está organizada en 4 o más regiones.

21/05/2012 FPGAs Virtex 2, 4 y 5 y Spartan 3 de Xilinx. Luis Jacobo Álvarez Ruiz de Ojeda 119
Circuitos de reloj (V).
 Gestor digital de reloj [DCM (“Digital Clock Manager”)].
 Hasta 12 DCMs en una FPGA.
 Se localizan en los bordes inferior y
superior de la FPGA.
 Su entrada de reloj procede de
terminales de entrada de la FPGA.
 Los DCMs proporcionan:
 Bucles digitales de enclavamiento de
fase [DLL (“Delay-Locked Loop”)].
 Sintetizadores digitales de frecuencia
(DFS).
 Desfasadores digitales (DPS).

 Se pueden conectar hasta 4 salidas de un


DCM a los amplificadores globales de reloj.
 También se pueden conectar las salidas
del DCM a las líneas de interconexión
generales.

21/05/2012 FPGAs Virtex 2, 4 y 5 y Spartan 3 de Xilinx. Luis Jacobo Álvarez Ruiz de Ojeda 120
Bloques de entrada/salida de la familia Virtex2 (I).
 IOB: “Input/Output Block”.

 Entrada:
 2 biestables DDR
IOB
(“Double Data Rate”). Input
Reg DDR MUX
OCK1 Reg
 Salida: ICK1
 2 biestables DDR. Reg
OCK2 3-state Reg
 2 biestables para el
ICK2
control del tercer estado.
 Relojes y habilitación (CE)
separados para entrada y Reg DDR MUX
OCK1
salida. PAD
 Señales de puesta a uno y a Reg
cero compartidas. OCK2 Output

21/05/2012 FPGAs Virtex 2, 4 y 5 y Spartan 3 de Xilinx. Luis Jacobo Álvarez Ruiz de Ojeda 121
Bloques de entrada/salida de la familia Virtex2 (II).
 Registros de doble frecuencia [DDR (“Double Data Rate
registers”)].

 Los registros DDR pueden activarse:


 Mediante las señales CLK y “not CLK” si el ciclo de trabajo de
la señal de reloj CLK es 50/50.
 Mediante las salidas CLK0 y CLK180 de un DCM.

D1
Clock Reg DDR MUX OBUF
OCK1
PAD
D2
Reg
OCK2 FDDR

 Si D1 = “1” and D2 = “0”, la salida es una copia del reloj.


 Esta técnica se utiliza para generar una salida de reloj
sincronizada con los datos de salida del registro DDR.
21/05/2012 FPGAs Virtex 2, 4 y 5 y Spartan 3 de Xilinx. Luis Jacobo Álvarez Ruiz de Ojeda 122
Tecnologías de entrada/salida (I).
 Estándares de E/S (“Select I/O Standard”).

 Permite la conexión directa de señales externas de diferentes


tensiones máximas y tensiones umbral.
 Optimiza la relación velocidad / ruido.
 Elimina componentes auxiliares en la placa de circuito impreso.

 Estándares convencionales soportados:


 LVTTL, LVCMOS (3.3V, 2.5V, 1.8V, and 1.5V).
 PCI-X at 133 MHz, PCI (3.3V at 33 MHz and 66 MHz).
 GTL, GTLP.
 Otros.

 Estándares diferenciales soportados:


 LVDS, BLVDS, ULVDS.
 LDT.
 LVPECL.

21/05/2012 FPGAs Virtex 2, 4 y 5 y Spartan 3 de Xilinx. Luis Jacobo Álvarez Ruiz de Ojeda 123
Tecnologías de entrada/salida (II).
 “Digitally Controlled Impedance” (DCI).

 Permite:
 Salidas cuya impedancia se adapta a la de las pistas de circuito impreso.
 Terminaciones para receptores y transmisores en la propia FPGA.

 Ventajas:
 Mejora la integridad de las señales mediante la eliminación de las reflexiones.
 Reduce la complejidad del enrutado de la placa de circuito impreso.
 Reduce el número de componentes de la placa, eliminando la necesidad de
resistencias externas.
 Elimina los efectos de la variación de temperatura, tensión y los debidos a la
fabricación, mediante un circuito de realimentación interna.

21/05/2012 FPGAs Virtex 2, 4 y 5 y Spartan 3 de Xilinx. Luis Jacobo Álvarez Ruiz de Ojeda 124
Familia Virtex2 (I).
 Circuitos de la familia Virtex 2.

Virtex-II XC2V XC2V XC2V XC2V XC2V XC2V XC2V XC2V XC2V XC2V XC2V
Part Number 40 80 250 500 1000 1500 2000 3000 4000 6000 8000
LUTs + FFs 512 1,024 3,072 6,144 10,24 15,36 21,50 28,67 46,08 67,58 93,18
0 0 4 2 0 4 4
BRAM (kb) 72 144 432 576 720 864 1,008 1,728 2,160 2,592 3,024
Multipliers 4 8 24 32 40 48 56 96 120 144 168
DCM Units 4 4 8 8 8 8 8 12 12 12 12
Package Available SelectIO
CS144 88 92 92
FG256 88 120 172 172 172
FG456 200 264 324
FG676 392 456 484
FF896 432 528 624
FF1152 720 824 824 824
FF1517 912 1,104 1,108
BG575 328 392 408
BG728 456 516
BG957 624 684 684 684 684

21/05/2012 FPGAs Virtex 2, 4 y 5 y Spartan 3 de Xilinx. Luis Jacobo Álvarez Ruiz de Ojeda 125
Familia Virtex2 Pro (I).
 Virtex 2 Pro frente a Virtex 2.

 Menor coste.  Más bloques multiplicadores


“hardware”:
 Hasta 24 transceptores serie Multi-  Hasta 556.

Gigabit (MGT) RocketIO, hasta 3’125


Gbps.  Tecnología más avanzada:
 0’13 micras en un proceso de 9
 Hasta 4 microprocesadores capas, con transistores de alta
“hardware” PowerPC de 32 bits. velocidad de 90 nm.

 Más memoria interna:


 Hasta 10 MBits de BRAM.

 Hasta 1.738 KBits de RAM


distribuida.

 Más terminales de E/S para el


mismo encapsulado (hasta 1704).
21/05/2012 FPGAs Virtex 2, 4 y 5 y Spartan 3 de Xilinx. Luis Jacobo Álvarez Ruiz de Ojeda 126
Familia Virtex2 Pro (II).
 Circuitos de la familia Virtex 2 Pro.

21/05/2012 FPGAs Virtex 2, 4 y 5 y Spartan 3 de Xilinx. Luis Jacobo Álvarez Ruiz de Ojeda 127
Familia Virtex2 Pro (III).
 Diagrama detallado de un transceptor de la familia Virtex 2 Pro de
Xilinx, con un canal “full-duplex” (transmisión y recepción).

21/05/2012 FPGAs Virtex 2, 4 y 5 y Spartan 3 de Xilinx. Luis Jacobo Álvarez Ruiz de Ojeda 128
Familia Virtex-4 (I).
 Virtex 4 frente a Virtex 2.

 Nuevas características:
 Bloques dedicados DSP48 (MAC).
 Divisores de reloj [PMCD (“Phase-matched clock dividers”)].
 Conversión serie/paralelo y paralelo/serie (SERDES) incorporada a los terminales
de E/S (“SelectIO standard”).
 Puerto de reconfiguración dinámica (DRP).
 Ethernet MACs (familia FX).

 Características mejoradas:
 Tecnología de 90 nm.
 Las memorias BRAM se pueden configurar como FIFO.
 Redes de distribución de reloj más avanzadas, con amplificadores regionales
(“regional clock buffers”).
 Transceptores Multi-Gigabit (MGT) RocketIO hasta 11’1 Gbps.
 Microprocesadores “hardware” PowerPC mejorados (“enhanced”).

21/05/2012 FPGAs Virtex 2, 4 y 5 y Spartan 3 de Xilinx. Luis Jacobo Álvarez Ruiz de Ojeda 129
Familia Virtex-4 (II).
 Tres versiones diferentes.

21/05/2012 FPGAs Virtex 2, 4 y 5 y Spartan 3 de Xilinx. Luis Jacobo Álvarez Ruiz de Ojeda 130
Familia Virtex-4 (III).
 Bloque DSP48.

21/05/2012 FPGAs Virtex 2, 4 y 5 y Spartan 3 de Xilinx. Luis Jacobo Álvarez Ruiz de Ojeda 131
Familia Virtex-5 (I).
 Virtex 5 frente a Virtex 4.

 Nuevas características:
 Monitorización de temperatura y tensión.

 Características mejoradas:
 Tecnología de 65 nm.
 Bloque DSP48E con multiplicador de 18x25.
 Menor consumo.
 Memorias BRAM de 36 kbits.
 Ethernet MACs (familias LXT, SXT).

21/05/2012 FPGAs Virtex 2, 4 y 5 y Spartan 3 de Xilinx. Luis Jacobo Álvarez Ruiz de Ojeda 132
Familia Virtex-5 (II).
 Cuatro versiones diferentes.

 FXT: Optimizada para procesadores empotrados.

21/05/2012 FPGAs Virtex 2, 4 y 5 y Spartan 3 de Xilinx. Luis Jacobo Álvarez Ruiz de Ojeda 133
Familia Spartan 3 (I).
 Spartan 3 frente a Virtex 2 (I).

 Menor coste.  Sólo la mitad de los “slices” permite


realizar RAM o SRL16s (SLICEM).
 Tecnología más avanzada = menor
tensión de alimentación del núcleo:  Menos circuitos dedicados BRAM y
multiplicadores.
 0’09 micras frente a 0’15 micras.
 Pero mantienen el mismo tamaño y
 Vccint = 1’2V frente a 1’5V funcionalidad.

 Soporta diferentes estándares de E/S:  La mitad de amplificadores de reloj:


 Nuevos estándares: 1’2V LVCMOS,  8 frente a 16.

1’8V HSTL y SSTL


 La tecnología por defecto es ahora  Menos circuitos DCM (2 o 4).
LVCMOS, frente a LVTTL.
 No poseen amplificadores de tres estados
 Más terminales de E/S para el mismo internos:
encapsulado.  Sí hay amplificadores de tres estados
en los terminales de E/S.

21/05/2012 FPGAs Virtex 2, 4 y 5 y Spartan 3 de Xilinx. Luis Jacobo Álvarez Ruiz de Ojeda 134
Familia Spartan 3 (II).
 “Slice” de la familia Spartan 3.

 Cada CLB de la familia Spartan 3 posee Left-Hand SLICEM Right-Hand SLICEL


4 “slices”: COUT COUT
 Similar a Virtex 2.

 Los “slices” se agrupan en parejas: Slice X1Y1

 Izquierda SLICEM (“Memory”):


Slice X1Y0
 Las LUTs se pueden configurar SHIFTIN
Switch
como memoria distribuida Matrix
(ROM, RAM) o como registros
de desplazamiento (SRL16). Slice X0Y1

 Derecha SLICEL (“Logic”):


Fast Connects
 Las LUTs sólo se pueden Slice X0Y0
utilizar para realizar funciones
lógicas. CIN
SHIFTOUT CIN

21/05/2012 FPGAs Virtex 2, 4 y 5 y Spartan 3 de Xilinx. Luis Jacobo Álvarez Ruiz de Ojeda 135
Familia Spartan 3 (III).
 Circuitos de la familia Spartan 3.

Spartan-3 XC3S XC3S XC3S XC3S XC3S XC3S XC3S XC3S


Part Number 50 200 400 1000 1500 2000 4000 5000
Logic Cells 1,728 4,320 8,064 17,280 29,952 46,080 62,208 74,880
BRAM (kb) 72 216 288 432 576 720 1,728 1,872
Multipliers 4 12 16 24 32 40 96 104
DCM Units 2 4 4 4 4 4 4 4
Package Available SelectIO
VQ100 63 63
TQ144 97 97 97
PQ208 124 141 141
FT256 173 173 173
FG456 264 333 333
FG676 391 487 489
FG900 565 633 633
FG1156 712 784

21/05/2012 FPGAs Virtex 2, 4 y 5 y Spartan 3 de Xilinx. Luis Jacobo Álvarez Ruiz de Ojeda 136
Familia Spartan 3 E (I).
 Spartan 3 E frente a Spartan 3.

 Mayor proporción puertas lógicas /  16 multiplexores de reloj


terminales de E/S que en la familia (BUFGMUX) en los lados izquierdo
Spartan-3. y derecho de la FPGA:
 Sólo se conectan a la mitad de

 Desaparecen algunas tecnologías de E/S: la FPGA.


 LVCMOS de corriente elevada.  8 líneas globales de reloj.

 GTL, GTLP.

 SSTL2_II.  Multiplicadores con salidas


 HSTL_II_18, HSTL_I, HSTL_III.
memorizadas (“pipelined”).
 LVDS_EXT, ULVDS.
 Modos de configuración
adicionales:
 Encadenamiento de registros DDR:
 SPI, BPI.
 Los datos internos son presentados
 Multi-Boot.
en un solo flanco de reloj.

21/05/2012 FPGAs Virtex 2, 4 y 5 y Spartan 3 de Xilinx. Luis Jacobo Álvarez Ruiz de Ojeda 137
Familia Spartan 3 E (II).
 Circuitos de la familia Spartan 3E.

21/05/2012 FPGAs Virtex 2, 4 y 5 y Spartan 3 de Xilinx. Luis Jacobo Álvarez Ruiz de Ojeda 138
Familia Spartan 3 A.
 Spartan 3 A frente a Spartan 3.

 Mayor proporción terminales de  Spartan 3 A N.


E/S / puertas lógicas que en la
 Incluye una memoria
familia Spartan-3.
interna no volátil de
tipo “flash” para
 Menor coste. almacenar la
configuración de la
FPGA.

21/05/2012 FPGAs Virtex 2, 4 y 5 y Spartan 3 de Xilinx. Luis Jacobo Álvarez Ruiz de Ojeda 139
Normas de síntesis (I).

 La utilización de los componentes específicos de las


familias Virtex 2 y Spartan 3 de Xilinx requiere, en
algunos casos, describir de determinada forma en VHDL
los circuitos que queremos que los utilicen.
 De esta forma, en el proceso de síntesis, se generarán
dichos componentes automáticamente.
 A continuación se indican los casos más importantes no
analizados anteriormente.

21/05/2012 FPGAs Virtex 2, 4 y 5 y Spartan 3 de Xilinx. Luis Jacobo Álvarez Ruiz de Ojeda 140
Normas de síntesis (II).
 Lógica de acarreo específica.
 No es necesario especificar su uso de forma especial sino que se
infiere automáticamente.

 Se puede acceder a la lógica de acarreo para la realización de


operaciones de suma, resta, contaje, comparación (de más de 15
bits) y otras operaciones aritméticas.
 Sumadores y restadores (SUM <= A + B)

 Comparadores (if A < B then)

 Contadores (COUNT <= COUNT + 1)

 La lógica de acarreo no se inferirá si los circuitos aritméticos se


describen mediante la interconexión de puertas lógicas.
 Por ejemplo, un sumador descrito mediante puertas XOR (para
los bits de la suma) y puertas AND (para los acarreos) no
utilizará la lógica de acarreo específica.
21/05/2012 FPGAs Virtex 2, 4 y 5 y Spartan 3 de Xilinx. Luis Jacobo Álvarez Ruiz de Ojeda 141
Normas de síntesis (III).
 Circuitos que se infieren • Circuitos que es necesario
automáticamente con XST: indicar expresamente mediante
 Registros de desplazamiento atributos o mediante el editor
basados en RAM (SRL16/ de restricciones:
SRLC16) – Estándar SelectIO (single-
 Multiplexores F5, F6, F7, and ended).
F8. – Biestables de E/S (single data
 Lógica de acarreo. rate).
 MULT_AND. – Biestables DDR de entrada.
 Memorias (ROM y RAM – Amplificadores globales de reloj
distribuidas, BRAM) avanzados (BUFGCE,
 MULT18x18 y MULT18x18S BUFGMUX, BUFGDLL).
 Amplificadores globales de
reloj básicos (BUFG). • Circuitos que sólo se pueden
usar mediante instanciación:
– Estándar SelectIO (diferencial).
– Biestables DDR de salida.
– Digital Clock Manager.

21/05/2012 FPGAs Virtex 2, 4 y 5 y Spartan 3 de Xilinx. Luis Jacobo Álvarez Ruiz de Ojeda 142
Picoblaze. Arquitectura interna
Índice
 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.

30/05/2012 Arquitectura interna Picoblaze. Francisco Poza, L. Jacobo Álvarez. 143


Introducción.
 Microprocesador RISC de 8 bits, diseñado por Xilinx,
disponible gratuitamente.
 Código fuente disponible en VHDL y Verilog.
 Varias versiones, para su implementación con
distintas familias de PLDs y FPGAs de Xilinx.
 Fácilmente ampliable mediante la adición de
periféricos diseñados por el usuario.
 Tamaño de programa muy limitado, lo que implica
trabajar en lenguaje ensamblador.
 Lenguaje ensamblador sencillo.
 Se dispone únicamente de un editor/ensamblador:
 Xilinx: línea de comandos.
 Mediatronix: entorno gráfico para Windows.

30/05/2012 Arquitectura interna Picoblaze. Francisco Poza, L. Jacobo Álvarez. 144


Versiones de Picoblaze.
 Picoblaze. Familia CPLDs CoolRunner 2.

 Picoblaze. Familias FPGAs Spartan 2 / 2 E, Virtex /


Virtex E.

 Picoblaze 2. Familias Virtex 2 / 2 Pro.


 Adaptable a las familias Spartan 2 / 2 E.

 Picoblaze 3. Familias Spartan 3 / 3 E, Virtex 2 / 2 Pro.


 Adaptable a las familias Spartan 2 / 2 E.

 Picoblaze 6. Familias Spartan 6, Virtex 6.

30/05/2012 Arquitectura interna Picoblaze. Francisco Poza, L. Jacobo Álvarez. 145


Características generales Picoblaze 3 (I).
 Características generales (I):
 Microprocesador RISC de 8 bits.
 Bus de datos de 8 bits.
 Bus de direcciones de 10 bits.
 Memoria de programa de 1.024 posiciones.
 Juego de 57 instrucciones de 18 bits.
 Modos de direccionamiento directo, indirecto basado en
registros e inmediato (constantes).
 Ciclo de instrucción constante, igual a 2 ciclos de reloj.
 Velocidad de proceso de hasta 100 MIPS en FPGAs
Virtex 2 Pro.
 Puesta en estado inicial mediante señal “reset” externa.

30/05/2012 Arquitectura interna Picoblaze. Francisco Poza, L. Jacobo Álvarez. 146


Características generales Picoblaze 3 (II).
 Características generales (II):
 16 registros de 8 bits de propósito general (s0 a sF).
 Memoria de datos de 64 bytes direccionable directa e
indirectamente.
 256 puertos de entrada y 256 de salida, direccionables
directa e indirectamente.
 Capacidad de interrupción enmascarable. Una sola
fuente de interrupción (externa).
 ALU con operaciones lógicas (load, and, or, xor, test), de
desplazamiento (shift, rotate) y aritméticas básicas (+, -,
compare).
 Banderas de cero y acarreo.
 Anidamiento de llamadas a subrutinas, hasta 31.

30/05/2012 Arquitectura interna Picoblaze. Francisco Poza, L. Jacobo Álvarez. 147


Microprocesador Picoblaze 3 (I).
Arquitectura interna. Diagrama de bloques.
Control PORT_ID
Direcc. READ_STROBE
pp
RESULTADO
Puertos WRITE_STROBE
16 Registros
de 8 bits OUT_PORT
IN_PORT (s0 a sF)
ALU
Aritm., lógicas, RESULTADO
desplaz., rotación
comp., test
kk
Paridad
Memoria
Datos
Flags Almac.Flags
64 bytes
ss (Carry y Zero) Interrupción

INTERRUPT Control
Instrucción (18 bits)
INTERRUPT_ACK Interrup. Control Contador
Datos (8 bits) DIRECCIÓN
Flujo Programa
Dirección E/S (8 bits) aaa Programa
Dirección programa (10 bits)
Constantes
Stack
Programa Contador
INSTRUCCIÓN Control y
(ROM/RAM) Programa
DIRECCIÓN decodif.
RESET instrucción (31 niveles)
1024x18 aaa/pp/kk/ss
CLK

30/05/2012 Arquitectura interna Picoblaze. Francisco Poza, L. Jacobo Álvarez. 148


Microprocesador Picoblaze3 (II).
 Arquitectura interna.
 Diagrama de bloques del microprocesador y la memoria de
programa.

30/05/2012 Arquitectura interna Picoblaze. Francisco Poza, L. Jacobo Álvarez. 149


Microprocesador Picoblaze3 (III).
 Resultado de la implementación del microprocesador y su memoria de
programa en una FPGA XC3S200, de la familia Spartan 3.
 Este posicionamiento ha sido conseguido mediante la restricción:
INST processor_* LOC = SLICE_ X0Y0 : SLICE_X19_Y4

30/05/2012 Arquitectura interna Picoblaze. Francisco Poza, L. Jacobo Álvarez. 150


Microprocesador Picoblaze3 (IV).
 Datos de la implementación del microprocesador y su memoria de
programa en una FPGA XC3S200-4, de la familia Spartan 3.
 Es posible llegar a 89 “slices”, dependiendo de las opciones de
implementación seleccionadas.

30/05/2012 Arquitectura interna Picoblaze. Francisco Poza, L. Jacobo Álvarez. 151


Comparación versiones Picoblaze (I)
KCPSM KCPSM2 KCPSM3
Spartan-3
Spartan 2 / 2E Virtex 2 / 2 Pro
Dispositivos Virtex 2 / 2 Pro
Virtex / E (adap. Spartan 2/2E)
(adap. Spartan 2/2E)
Tamaño 76 Slices 84 Slices 96 Slices
Instrucciones / segundo 40 MIPS 70 MIPS 100 MIPS
1024 1024
Memoria programa 256
(1 BRAM 1024x18) (1 BRAM 1024x18)
(instrucciones) (1 BRAM 256x16)
(5 BRAM 512x8) S2 (5 BRAM 512x8) S2
Registros 16 (s0 a sF) 32 (s00 a s1F) 16 (s0 a sF)
Memoria datos - - 64 bytes
CALL/RETURN (niveles) 15 31 31
Vector interrupción FF 3FF 3FF
Señal atención interr. - - INTERRUPT_ACK

30/05/2012 Arquitectura interna Picoblaze. Francisco Poza, L. Jacobo Álvarez. 152


Comparación versiones Picoblaze (II)
KCPSM KCPSM2 KCPSM3
Bus direcciones (bits) 8 10 10
Bus datos (bits) 8 8 8
Tamaño instrucción
16 18 18
(bits)
57
KCPSM +
COMPARE (2)
Juego instrucciones 49 49
FETCH (2)
STORE (2)
TEST (2)

30/05/2012 Arquitectura interna Picoblaze. Francisco Poza, L. Jacobo Álvarez. 153


Picoblaze. Juego de instrucciones.
Índice
 Introducción.
 Versiones de Picoblaze.
 Resumen instrucciones Picoblaze 3.
 Otras operaciones.
 Tabla instrucciones Picoblaze 3.
 Ejercicios.

30/05/2012 Juego de instrucciones Picoblaze.Francisco Poza, L. Jacobo Álvarez. 155


Introducción.
 El microprocesador Picoblaze posee las siguientes
características relacionadas con las instrucciones que
puede ejecutar.
 Memoria de programa de 1.024 posiciones.
 Juego de 57 instrucciones de 18 bits.
 Modos de direccionamiento directo, indirecto basado en
registros e inmediato (constantes).
 Ciclo de instrucción constante, igual a 2 ciclos de reloj.

30/05/2012 Juego de instrucciones Picoblaze.Francisco Poza, L. Jacobo Álvarez. 156


Versiones de Picoblaze.
 Picoblaze BÁSICO: 49 instrucciones de 16 bits.

 Picoblaze 2: 49 instrucciones de 18 bits. Los mnemónicos


son idénticos a los del Picoblaze.

 Picoblaze 3: 57 instrucciones de 18 bits. Los mnemónicos


de las instrucciones comunes son idénticos a los del
Picoblaze. Dispone de 4 instrucciones adicionales:
 COMPARE
 TEST
 FETCH
 STORE

30/05/2012 Juego de instrucciones Picoblaze.Francisco Poza, L. Jacobo Álvarez. 157


Resumen instrucciones Picoblaze 3 (I).
 Juego de instrucciones Picoblaze 3.

30/05/2012 Juego de instrucciones Picoblaze.Francisco Poza, L. Jacobo Álvarez. 158


Resumen instrucciones Picoblaze 3 (II)
 Instrucciones operativas.
 Lógicas: AND, OR, XOR, TEST.
 Aritméticas: ADD, SUB, COMPARE.
 Rotación y desplazamiento: RL, RR, SL, SR.

 Ejemplo: instrucción AND.

30/05/2012 Juego de instrucciones Picoblaze.Francisco Poza, L. Jacobo Álvarez. 159


Resumen instrucciones Picoblaze 3 (III)
 Instrucciones Picoblaze 3 para movimiento de datos.

30/05/2012 Juego de instrucciones Picoblaze.Francisco Poza, L. Jacobo Álvarez. 160


Resumen instrucciones Picoblaze 3 (IV)
 Instrucciones Picoblaze 3 para control del flujo de
programa.

30/05/2012 Juego de instrucciones Picoblaze.Francisco Poza, L. Jacobo Álvarez. 161


Resumen instrucciones Picoblaze 3 (V)
 Instrucciones Picoblaze 3 para manejo de interrupciones.

30/05/2012 Juego de instrucciones Picoblaze.Francisco Poza, L. Jacobo Álvarez. 162


Otras operaciones (I).

 Operación nula (NOP).


 LOAD s0, s0 ;la carga de un registro consigo mismo es equivalente
a NOP ya que no modifica nada y lo único que hace es consumir 2
ciclos de reloj.

 JUMP next
next:

 Borrado de un registro.
 LOAD s0, 00 ;borra s0 sin afectar la bandera ZERO
 XOR s0, s0 ;borra s0 y activa ZERO
 AND s0, 00 ;borra s0 y activa ZERO

30/05/2012 Juego de instrucciones Picoblaze.Francisco Poza, L. Jacobo Álvarez. 163


Otras operaciones (II).

 Complementar bits.
 XOR s0, FF ;complementa todo el registro
 XOR s0, 03 ;complementa los bits 0 y 1

 Activar/desactivar bits.
 OR s0, 05 ;pone a 1 los bits 0 y 2 del registro s0
 AND s0, FE ;pone a 0 el bit 0 del registro s0

 Incrementar/decrementar.
 ADD sX, 01 ; incrementa registro sX
 SUB sX, 01 ; decrementa registro sX

30/05/2012 Juego de instrucciones Picoblaze.Francisco Poza, L. Jacobo Álvarez. 164


Otras operaciones (III).
 Comparación sin uso de instrucción específica.
 Se utiliza SUB
 La comparación es destructiva y hay que guardar el valor del registro si es necesario
conservarlo
 Ejemplo:
SUB s0, 27 ; comparación del contenido de s0 con 27 hexadecimal
JUMP Z, iguales
JUMP C, s0_menor
…. ; instrucciones para s0 > 27
JUMP fin
Iguales:
…. ; instrucciones para s0 = 27
JUMP fin
s0_menor:
….. ; instrucciones para s0 < 27
fin:
….. ; seguir con el programa
 Test si 0.
AND sX, sX ; también se puede utilizar OR
JUMP Z, es_cero ; salta si el contenido de sX es 0

30/05/2012 Juego de instrucciones Picoblaze.Francisco Poza, L. Jacobo Álvarez. 165


Tabla instrucciones Picoblaze 3 (I)
Instrucción Descripción Función Zero Carry
ADD sX, kk Suma registro sX y constante kk sX ← sX + kk ? ?
ADD sX, sY Suma registro sX y registro sY sX ← sX + sY ? ?
ADDCY sX, kk
Suma registro sX, constante kk y acarreo sX ← sX + kk + CARRY ? ?
(ADDC)
ADDCY sX, sY
Suma registro sX, registro sY y acarreo sX ← sX + sY + CARRY ? ?
(ADDC)
AND sX, kk Y lógica bit a bit de registro sX y constante kk sX ← sX AND kk ? 0

AND sX, sY Y lógica bit a bit de registro sX y registro sY sX ← sX AND sY ? 0


TOS ← PC
CALL aaa Salto incondicional a subrutina en aaa - -
PC ← aaa
Si CARRY = 1, TOS ← PC
CALL C,aaa Salto si CARRY = 1 a subrutina en aaa - -
PC ← aaa
Si CARRY = 0, TOS ← PC
CALL NC, aaa Salto si CARRY = 0 a subrutina en aaa - -
PC ← aaa
Si ZERO = 0, TOS ← PC
CALL NZ, aaa Salto si ZERO = 0 a subrutina aaa - -
PC ← aaa
Si ZERO = 1, TOS ← PC
CALL Z, aaa Salto si ZERO = 1 a subrutina aaa - -
PC ← aaa

COMPARE sX, kk Compara registro sX y constante kk. Actualiza Si sX=kk, ZERO ← 1


? ?
(COMP) ZERO y CARRY. Registros no cambian. Si sX<kk, CARRY ← 1

30/05/2012 Juego de instrucciones Picoblaze.Francisco Poza, L. Jacobo Álvarez. 166


Tabla instrucciones Picoblaze 3 (II)
Instrucción Descripción Función Zero Carry
COMPARE sX, sY Compara registro sX y registro sY. Actualiza Si sX=sY, ZERO ← 1
? ?
(COMP) ZERO y CARRY. Registros no cambian. Si sX<sY, CARRY ← 1
DISABLE INTERRUPT
Inhibe entrada de interrupción INTERRUPT_ENABLE ← 0 - -
(DINT)
ENABLE INTERRUPT
Permite entrada de interrupción INTERRUPT_ENABLE ← 1 - -
(EINT)
FETCH sX, (sY) Carga registro sX con el contenido de la posición
sX ← RAM[(sY)] - -
(FETCH sX, sY) de RAM apuntada por sY
Carga registro sX con el contenido de la posición
FETCH sX, ss sX ← RAM[ss] - -
de RAM ss
INPUT sX, (sY) Lee valor del puerto apuntado por el registro sY al PORT_ID ← sY
- -
(IN sX, sY) registro sX sX ← IN_PORT
INPUT sX, pp PORT_ID ← pp
Lee valor del puerto pp al registro sX - -
(IN) sX ← IN_PORT
JUMP aaa Salto incondicional a dirección aaa PC ← aaa - -

JUMP C,aaa Salto si CARRY = 1 a dirección aaa Si CARRY = 1, PC ← aaa - -

JUMP NC, aaa Salto si CARRY = 0 a dirección aaa Si CARRY = 0, PC ← aaa - -

JUMP NZ, aaa Salto si ZERO = 0 a dirección aaa Si ZERO = 0, PC ← aaa - -

JUMP Z, aaa Salto si ZERO = 1 a dirección aaa Si ZERO = 1, PC ← aaa - -

LOAD sX, kk Carga registro sX con constante kk sX ← kk - -

LOAD sX, sY Carga registro sX con registro sY sX ← sY - -

30/05/2012 Juego de instrucciones Picoblaze.Francisco Poza, L. Jacobo Álvarez. 167


Tabla instrucciones Picoblaze 3 (III)
Instrucción Descripción Función Zero Carry
OR sX, kk O lógica bit a bit de registro sX y constante kk sX ← sX OR kk ? 0
OR sX, sY O lógica bit a bit de registro sX y registro sY sX ← sX OR sY ? 0
OUTPUT sX, (sY) Escribe registro sX al puerto apuntado por el registro PORT_ID ← sY
- -
(OUT sX, sY) sY OUT_PORT ← sX
OUTPUT sX, pp PORT_ID ← pp
Escribe registro sX al puerto pp - -
(OUT sX, pp) OUT_PORT ← sX
RETURN
Retorno incondicional de subrutina PC ← TOS + 1 - -
(RET)
RETURN C
Retorno de subrutina si CARRY = 1 Si CARRY = 1, PC ← TOS + 1 - -
(RET C)
RETURN NC
Retorno de subrutina si CARRY = 0 Si CARRY = 0, PC ← TOS + 1 - -
(RET NC)
RETURN NZ
Retorno de subrutina si ZERO = 0 Si ZERO = 0, PC ← TOS + 1 - -
(RET NZ)
RETURN Z
Retorno de subrutina si ZERO = 1 Si ZERO = 1, PC ← TOS + 1 - -
(RET Z)
PC ← TOS, ZERO ← ZERO_B
RETURNI DISABLE Retorno de subrutina de interrupción. Interrupciones
CARRY ← CARRY_B ? ?
(RETI DISABLE) inhibidas
INTERRUPT_ENABLE ← 0
PC ← TOS, ZERO ← ZERO_B
RETURNI ENABLE Retorno de subrutina de interrupción.
CARRY ← CARRY_B ? ?
(RETI ENABLE) Interrupciones permitidas
INTERRUPT_ENABLE ← 1

30/05/2012 Juego de instrucciones Picoblaze.Francisco Poza, L. Jacobo Álvarez. 168


Tabla instrucciones Picoblaze 3 (IV)
Instrucción Descripción Función Zero Carry
sX ← {sX(6:0), sX(7)}
RL sX Rota registro sX a la izquierda ? ?
CARRY ← sX(7)
sX ← {sX(0), sX(7:1)}
RR sX Rota registro sX a la derecha ? ?
CARRY ← sX(0)
Desplaza registro sX a la izquierda llenando con sX ← {sX(6:0), 0}
SL0 sX ? ?
0 CARRY ← sX(7)
Desplaza registro sX a la izquierda llenando con sX ← {sX(6:0), 1}
SL1 sX 0 ?
1 CARRY ← sX(7)
Desplaza registro sX a la izquierda utilizando el sX ← {sX(6:0), CARRY}
SLA sX ? ?
CARRY CARRY ← sX(7)
Desplaza registro sX a la izquierda, el bit 0 no sX ← {sX(6:0), sX(0)}
SLX sX ? ?
cambia CARRY ← sX(7)
Desplaza registro sX a la derecha llenando con sX ← {0, sX(7:1)}
SR0 sX ? ?
0 CARRY ← sX(0)
Desplaza registro sX a la derecha llenando con sX ← {1, sX(7:1)}
SR1 sX 0 ?
1 CARRY ← sX(0)
Desplaza registro sX a la derecha utilizando el sX ← {CARRY, sX(7:1)}
SRA sX ? ?
CARRY CARRY ← sX(0)
Desplaza registro sX a la derecha con extensión sX ← {sX(7), sX(7:1)}
SRX sX ? ?
de signo, el bit 7 no cambia CARRY ← sX(0)

30/05/2012 Juego de instrucciones Picoblaze.Francisco Poza, L. Jacobo Álvarez. 169


Tabla instrucciones Picoblaze 3 (V)
Instrucción Descripción Función Zero Carry
STORE sX, (sY) Carga la posición de RAM apuntada por sY con el
RAM[(sY)] ← sX - -
(STORE sX, sY) contenido del registro sX
Carga la posición de RAM ss con el contenido del
STORE sX, ss RAM[ss] ← sX - -
registro sX
SUB sX, kk Resta constante kk de registro sX sX ← sX - kk ? ?
SUB sX, sY Resta registro sY de registro sX sX ← sX - sY ? ?
SUBCY sX, kk
Resta constante kk y CARRY de registro sX sX ← sX - kk - CARRY ? ?
(SUBC)
SUBCY sX, sY
Resta registro sY y CARRY de registro sX sX ← sX - sY - CARRY ? ?
(SUBC)

Comprueba bits del registro sX y constante kk. Si (Sx AND kk) = 0, ZERO ← 1
TEST sX, kk ? ?
Actualiza ZERO y CARRY. Registros no cambian. CARRY ← paridad impar de (sX AND kk)

Comprueba bits del registro sX y registro sY. Si (Sx AND sY) = 0, ZERO ← 1
TEST sX, sY ? ?
Actualiza ZERO y CARRY. Registros no cambian. CARRY ← paridad impar de (sX AND sY)

XOR sX, kk O-exclusiva bit a bit de registro sX y constante kk sX ← sX XOR kk ? 0

XOR sX, sY O-exclusiva bit a bit de registro sX y registro sY sX ← sX XOR sY ? 0

30/05/2012 Juego de instrucciones Picoblaze.Francisco Poza, L. Jacobo Álvarez. 170


Ejercicios (I)
 Realizar en ensamblador el equivalente a las siguientes
instrucciones del lenguaje C:
 if (s0>= 5) s1=s1-s2;
else s1=s1+s2;
 for (s0=1; s0<=10; s0++) s1=s1+s2;
 switch(s0) {
case 1 : s1=s1+1;
break;
case 2 : s2=s2+1;
break;
case 3 : s3=s3+1;
break;
default : s4=s4+1; }
30/05/2012 Juego de instrucciones Picoblaze.Francisco Poza, L. Jacobo Álvarez. 171
Arquitectura externa del microprocesador
Picoblaze
Índice
 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.


 Interrupciones externas.
 Memoria de programa.

21/05/2012 Arquitectura externa Picoblaze. L. Jacobo Álvarez, Francisco Poza. 173


Introducción (I).
 En este tema vamos a analizar:

 La forma de conectar periféricos de entrada y salida al


microprocesador Picoblaze.

 Las instrucciones en ensamblador de Picoblaze que


permiten comunicarse con los periféricos.

 La realización de circuitos de acoplamiento de


periféricos de entrada y salida para el microprocesador
Picoblaze.

21/05/2012 Arquitectura externa Picoblaze. L. Jacobo Álvarez, Francisco Poza. 174


Introducción (II).
 En este tema vamos a analizar:

 La inicialización del microprocesador Picoblaze.

 La forma de gestionar las interrupciones del


microprocesador Picoblaze.

 Formas especiales de gestionar la memoria de


programa.

21/05/2012 Arquitectura externa Picoblaze. L. Jacobo Álvarez, Francisco Poza. 175


Interfaz de E/S del Picoblaze (I).
 A pesar de presentar algunas diferencias entre ellas,
todas las versiones del microprocesador Picoblaze
disponen de:

 Direccionamiento de hasta 256 periféricos de


entrada y 256 de salida.

 Capacidad de interrupción, de una sola fuente.

21/05/2012 Arquitectura externa Picoblaze. L. Jacobo Álvarez, Francisco Poza. 176


Interfaz de E/S del Picoblaze (II)
 Arquitectura externa del microprocesador Picoblaze 3.
 Señales de interfaz para su conexión con la memoria de
programa y los periféricos.

21/05/2012 Arquitectura externa Picoblaze. L. Jacobo Álvarez, Francisco Poza. 177


Interfaz de E/S del Picoblaze (III).
 El microprocesador Picoblaze dispone de las siguientes
señales externas para controlar las transferencias de
E/S.

 PORT_ID (7:0). Indica la dirección del periférico de


entrada o salida con el que desea realizar la
transferencia de datos. Puede haber hasta 256
periféricos de entrada y 256 de salida.

 IN_PORT (7:0). Datos procedentes de los periféricos


de entrada.

 OUT_PORT (7:0). Datos suministrados a los


periféricos de salida.

21/05/2012 Arquitectura externa Picoblaze. L. Jacobo Álvarez, Francisco Poza. 178


Interfaz de E/S del Picoblaze (IV).
 El microprocesador Picoblaze dispone de las siguientes
señales externas para controlar las transferencias de
E/S (continuación).

 READ_STROBE. Pulso de lectura para los periféricos


de entrada.

 WRITE_STROBE. Pulso de escritura para los


periféricos de salida.

21/05/2012 Arquitectura externa Picoblaze. L. Jacobo Álvarez, Francisco Poza. 179


Instrucciones de E/S (I).
 Permiten transferir datos de periféricos de entrada o
salida a un registro interno del microprocesador.

 El direccionamiento del puerto de entrada o de salida, en


el rango 00 a FF, puede ser:
 Inmediato (mediante una constante).

 Indirecto (mediante un registro).

21/05/2012 Arquitectura externa Picoblaze. L. Jacobo Álvarez, Francisco Poza. 180


INPUT (I)
 Permite transferir datos de los periféricos de entrada a
los registros internos del microprocesador.

 El direccionamiento del puerto de entrada, en el rango


00 a FF, puede ser:
 Inmediato (mediante una constante).

 INPUT sX, PP.

 Indirecto (mediante un registro).

 INPUT sX, (sY).

21/05/2012 Arquitectura externa Picoblaze. L. Jacobo Álvarez, Francisco Poza. 181


INPUT (II)
 El circuito de interfaz entre el microprocesador y los
periféricos de entrada, realizado por el diseñador, debe
realizar las siguientes funciones:

 Decodificar la dirección del puerto suministrada por


el microprocesador en los terminales de salida
PORT_ID (7:0), para seleccionar el periférico
adecuado en cada momento.

 Suministrar el dato correcto del periférico de entrada


al microprocesador a través de los terminales de
entrada IN_PORT (7:0).

21/05/2012 Arquitectura externa Picoblaze. L. Jacobo Álvarez, Francisco Poza. 182


INPUT (III)
 Cronograma de las señales externas del
microprocesador que intervienen en la operación de
entrada.

21/05/2012 Arquitectura externa Picoblaze. L. Jacobo Álvarez, Francisco Poza. 183


INPUT (IV)
 La dirección del periférico, PORT_ID (7:0), es válida
durante 2 ciclos de reloj.

 El pulso de lectura, READ_STROBE, se activa sólo


durante el segundo ciclo de reloj en las transferencias
de entrada.

 En la mayoría de los casos no es necesario utilizar la


señal READ_STROBE para el acoplamiento de los
periféricos de entrada.

21/05/2012 Arquitectura externa Picoblaze. L. Jacobo Álvarez, Francisco Poza. 184


OUTPUT (I)
 Permite transferir datos de los registros internos del
microprocesador a los periféricos de salida.

 El direccionamiento del puerto de salida, en el rango 00


a FF, puede ser:
 Inmediato (mediante una constante).

 OUTPUT sX, PP.

 Indirecto (mediante un registro).

 OUTPUT sX, (sY).

21/05/2012 Arquitectura externa Picoblaze. L. Jacobo Álvarez, Francisco Poza. 185


OUTPUT (II)
 El circuito de interfaz entre el microprocesador y los
periféricos de salida, realizado por el diseñador, debe
realizar las siguientes funciones:

 Decodificar la dirección del puerto suministrada por el


microprocesador en los terminales de salida PORT_ID
(7:0), para seleccionar el periférico adecuado en cada
momento.

 Capturar correctamente el dato suministrado por el


microprocesador al periférico de salida a través de los
terminales de salida OUT_PORT (7:0).

21/05/2012 Arquitectura externa Picoblaze. L. Jacobo Álvarez, Francisco Poza. 186


OUTPUT (III)
 Cronograma de las señales externas del
microprocesador que intervienen en la operación de
salida.

21/05/2012 Arquitectura externa Picoblaze. L. Jacobo Álvarez, Francisco Poza. 187


OUTPUT (IV)
 La dirección del periférico, PORT_ID (7:0), es válida
durante 2 ciclos de reloj.

 El pulso de escritura, WRITE_STROBE, se activa sólo


durante el segundo ciclo de reloj en las transferencias
de salida.

 La señal WRITE_STROBE debe utilizarse para habilitar la


escritura del dato en los periféricos de salida en el
instante correcto.

21/05/2012 Arquitectura externa Picoblaze. L. Jacobo Álvarez, Francisco Poza. 188


Instrucciones de E/S (II).
 Cronograma de las señales externas del
microprocesador que intervienen en las operaciones de
entrada y de salida.

 El contenido del registro sE es 47 y el del registro sA es 42.

21/05/2012 Arquitectura externa Picoblaze. L. Jacobo Álvarez, Francisco Poza. 189


Conexión de periféricos de entrada (I).
 A continuación se indica la mejor forma de conectar
los periféricos de entrada al microprocesador
Picoblaze, mediante la utilización de las señales de
E/S analizadas.

 Vamos a distinguir tres casos:


 Hasta 8 periféricos de entrada genéricos.

 De 9 a 256 periféricos de entrada genéricos.

 Al menos un periférico de entrada es una


memoria de reducida capacidad.

21/05/2012 Arquitectura externa Picoblaze. L. Jacobo Álvarez, Francisco Poza. 190


Conexión de periféricos de entrada (II).
 Circuito genérico de interfaz, recomendado para la
conexión de periféricos de entrada al microprocesador.

 Dado que se dispone de 2 ciclos de reloj para realizar la


transferencia, se recomienda añadir un registro a la salida del
multiplexor para aumentar la máxima frecuencia de reloj global del
sistema formado por microprocesador + periféricos.
21/05/2012 Arquitectura externa Picoblaze. L. Jacobo Álvarez, Francisco Poza. 191
Conexión de periféricos de entrada (III).
 Si sólo se utilizan hasta 8 periféricos de entrada, se
recomienda:

 Utilizar un solo multiplexor.

 Utilizar únicamente los bits necesarios de las señales


PORT_ID (7:0) para seleccionar entre los distintos
periféricos mediante codificación binaria, en lugar de
realizar la decodificación de los 8 bits PORT_ID (7:0).

 Esto simplifica en gran medida el circuito de selección de


los periféricos de entrada.

21/05/2012 Arquitectura externa Picoblaze. L. Jacobo Álvarez, Francisco Poza. 192


Conexión de periféricos de entrada (IV).
 Ejemplo de conexión de menos de 8 periféricos de
entrada.

21/05/2012 Arquitectura externa Picoblaze. L. Jacobo Álvarez, Francisco Poza. 193


Conexión de periféricos de entrada (V).
 Si se utilizan entre 9 y 256 periféricos de entrada, se
recomienda:

 Utilizar un árbol de multiplexores en cascada.

 Utilizar la codificación binaria de las señales PORT_ID


(7:0) para seleccionar entre los distintos periféricos.

21/05/2012 Arquitectura externa Picoblaze. L. Jacobo Álvarez, Francisco Poza. 194


Conexión de periféricos de entrada (VI).
 Ejemplo de conexión de más de 8 periféricos de entrada.

21/05/2012 Arquitectura externa Picoblaze. L. Jacobo Álvarez, Francisco Poza. 195


Conexión de periféricos de entrada (VII).
 Una memoria de reducida capacidad se puede conectar como
periférico de entrada al microprocesador para la lectura de datos,
mediante una única instrucción INPUT.

 NO se recomienda el circuito de interfaz genérico para esta conexión,


pues el camino de datos de la memoria es más largo y conduce a una
reducción de la máxima frecuencia de reloj global del sistema.

21/05/2012 Arquitectura externa Picoblaze. L. Jacobo Álvarez, Francisco Poza. 196


Conexión de periféricos de entrada (VIII).
 Circuito de interfaz modificado para la conexión de una memoria de
reducida capacidad como periférico de entrada.
 El registro añadido permite aumentar la máxima frecuencia de reloj
global del sistema. No se puede mantener el registro de salida del
multiplexor, pues sólo se dispone de 2 ciclos de reloj para realizar la
operación de lectura.
RAM32X1D(x8)

21/05/2012 Arquitectura externa Picoblaze. L. Jacobo Álvarez, Francisco Poza. 197


Conexión de periféricos de entrada (IX).
 Si se desea conectar una memoria de más capacidad
como periférico de entrada, es necesario emplear el
siguiente método, para no consumir el
direccionamiento de los periféricos de entrada sólo con
la memoria.
1. Memorizar la dirección de la memoria a la que se quiere
acceder en un registro, que corresponde a un periférico
de salida, mediante una instrucción OUTPUT.
2. Leer el dato de la memoria correspondiente a la posición
seleccionada mediante una instrucción INPUT.

 En este caso se utilizan 2 instrucciones para acceder a


cada posición de memoria, en lugar de una sola como
en el caso anterior.

21/05/2012 Arquitectura externa Picoblaze. L. Jacobo Álvarez, Francisco Poza. 198


Conexión de periféricos de salida (I).
 A continuación se indica la mejor forma de conectar
los periféricos de salida al microprocesador Picoblaze,
mediante la utilización de las señales de E/S
analizadas.

 Vamos a distinguir tres casos:


 Hasta 8 periféricos de salida genéricos.

 De 9 a 256 periféricos de salida genéricos.

 Utilización de memorias de reducida capacidad


como periféricos de salida.

21/05/2012 Arquitectura externa Picoblaze. L. Jacobo Álvarez, Francisco Poza. 199


Conexión de periféricos de salida (II).
 Si sólo se utilizan hasta 8 periféricos de salida, se
recomienda:

 Utilizar cada bit de las señales PORT_ID (7:0)


individualmente (código 1 entre N) para seleccionar
cada periférico, en lugar de realizar la decodificación
de los 8 bits PORT_ID (7:0).

 Esto simplifica en gran medida el circuito de selección de


los periféricos de salida.

21/05/2012 Arquitectura externa Picoblaze. L. Jacobo Álvarez, Francisco Poza. 200


Conexión de periféricos de salida (III).
 Circuito de interfaz recomendado para la conexión de
hasta 8 periféricos de salida al microprocesador.

21/05/2012 Arquitectura externa Picoblaze. L. Jacobo Álvarez, Francisco Poza. 201


Conexión de periféricos de salida (IV).
 Si se utilizan entre 9 y 256 periféricos de salida, se recomienda:

 Decodificar las señales PORT_ID (7:0) mediante un decodificador


binario para seleccionar entre los distintos periféricos.
 (También es posible combinar la decodificación 1 entre N y la
binaria).

 Añadir biestables entre el decodificador y los circuitos de


habilitación de los periféricos de salida.
 Añadir un registro entre la salida de datos OUT_PORT(7:0) y la
entrada de datos de los periféricos.
 Dado que se dispone de 2 ciclos de reloj para realizar la
transferencia, esto permite aumentar la máxima frecuencia de reloj
del sistema.

21/05/2012 Arquitectura externa Picoblaze. L. Jacobo Álvarez, Francisco Poza. 202


Conexión de periféricos de salida (V).
 Circuito de interfaz recomendado para la conexión de más de 8
periféricos de salida al microprocesador (1 de 2).

21/05/2012 Arquitectura externa Picoblaze. L. Jacobo Álvarez, Francisco Poza. 203


Conexión de periféricos de salida (VI).
 Circuito de interfaz recomendado para la conexión de más de 8
periféricos de salida al microprocesador (2 de 2).
 Aquí observamos la secuenciación de acciones durante la operación
de escritura.

21/05/2012 Arquitectura externa Picoblaze. L. Jacobo Álvarez, Francisco Poza. 204


Conexión de periféricos de salida (VII).
 Una memoria de reducida capacidad se puede conectar
como periférico de salida del microprocesador para la
escritura de datos, mediante una única instrucción
OUTPUT.
 Esta conexión se observa en las figuras correspondientes
al caso anterior de conectar más de 8 periféricos de salida.

 Pero si también se desea poder realizar la lectura de datos


en dicha memoria directamente mediante una única
instrucción INPUT, es recomendable recurrir a otra forma
de conectarla, que se analiza en la transparencia
siguiente, para aumentar la máxima frecuencia de reloj del
sistema.

21/05/2012 Arquitectura externa Picoblaze. L. Jacobo Álvarez, Francisco Poza. 205


Conexión de periféricos de salida (VIII).
 Circuito de interfaz modificado para la conexión de una memoria de
reducida capacidad como periférico de salida y de entrada.
 El registro de salida divide en dos el camino de datos y permite
aumentar la máxima frecuencia de reloj del sistema.
 No se puede mantener el registro de dirección, pues sólo se dispone
de 2 ciclos de reloj para realizar la operación de lectura.

21/05/2012 Arquitectura externa Picoblaze. L. Jacobo Álvarez, Francisco Poza. 206


Conexión de periféricos de salida (IX).
 Si se desea conectar una memoria de más capacidad
como periférico de salida, es necesario emplear el
siguiente método, para no consumir el
direccionamiento de los periféricos sólo con la
memoria.
1. Memorizar la dirección de la memoria a la que se quiere
acceder en un registro, que corresponde a un periférico
de salida, mediante una instrucción OUTPUT.
2. Escibir el dato en la posición seleccionada de la memoria
mediante otra instrucción OUTPUT.

 En este caso se utilizan 2 instrucciones para acceder a


cada posición de memoria, en lugar de una sola como
en el caso anterior.

21/05/2012 Arquitectura externa Picoblaze. L. Jacobo Álvarez, Francisco Poza. 207


Puesta en estado inicial (I).
 El microprocesador Picoblaze dispone de una señal
externa de puesta en estado inicial (“reset”) que realiza
las siguientes funciones:

 Permite asegurar el correcto arranque del


microprocesador después de la configuración de la
FPGA.

 Permite al usuario reiniciar el microprocesador:


 El contador de programa (PC) se pone a cero.
 Las banderas (C, Z) se ponen a cero.
 Las interrupciones se inhiben.
 El puntero de la pila de llamadas a subrutinas se inicializa.
 Los registros internos no se ven afectados.

21/05/2012 Arquitectura externa Picoblaze. L. Jacobo Álvarez, Francisco Poza. 208


Puesta en estado inicial (II).
 El microprocesador Picoblaze muestrea la señal de
puesta en estado inicial de forma síncrona, mediante el
siguiente circuito.

 De esta forma se asegura que, una vez liberada la señal


“reset”, el microprocesador funcione correctamente.

21/05/2012 Arquitectura externa Picoblaze. L. Jacobo Álvarez, Francisco Poza. 209


Puesta en estado inicial (III).
 Cronograma de las señales del microprocesador que
intervienen en la puesta en estado inicial.

21/05/2012 Arquitectura externa Picoblaze. L. Jacobo Álvarez, Francisco Poza. 210


Interrupciones externas (I).
 El microprocesador Picoblaze dispone de una señal
externa de petición de interrupción, que permite
únicamente una fuente de interrupción.

 Si más de un circuito externo al microprocesador debe


solicitar una interrupción a éste, es necesario combinar
las distintas fuentes de interrupción y asignarles
prioridad, si se considera conveniente.

 Cuando el microprocesador se inicializa, las


interrupciones están inhibidas. Para activarlas, se debe
ejecutar la instrucción ENABLE INTERRUPT.
Posteriormente, se desactivan con la instrucción
DISABLE INTERRUPT.
21/05/2012 Arquitectura externa Picoblaze. L. Jacobo Álvarez, Francisco Poza. 211
Interrupciones externas (II).
 El vector de interrupción se encuentra en la última
posición de la memoria de programa:
 FF en Picoblaze básico.
 3FF en Picoblaze 2 y Picoblaze 3.

 Desde esta posición se puede saltar a la subrutina de


atención de interrupción mediante una instrucción
JUMP.

 Cuando comienza la atención de una interrupción,


automáticamente se inhiben las interrupciones, que
deberán ser habilitadas de nuevo por el usuario al
finalizar la rutina de atención de la interrupción,
mediante la instrucción RETURNI ENABLE.

21/05/2012 Arquitectura externa Picoblaze. L. Jacobo Álvarez, Francisco Poza. 212


Interrupciones externas (III).
 La activación de la señal externa de petición de
interrupción debe durar como mínimo 2 ciclos del reloj
del microprocesador para ser detectada.

 El microprocesador detecta la petición de una


interrupción en el flanco ascendente de reloj
correspondiente al cambio de dirección de la memoria
de programa, es decir, al comenzar la carga de una
nueva instrucción.

21/05/2012 Arquitectura externa Picoblaze. L. Jacobo Álvarez, Francisco Poza. 213


Interrupciones externas (IV).
 Cuando el microprocesador detecta la petición de una
interrupción, estando habilitadas las interrupciones,
realiza las siguientes acciones:
 Memoriza en la pila el contenido del contador de programa
(PC), que apunta a la nueva instrucción que ya había
cargado de la memoria, pero que no se llegó a ejecutar.
 Preserva el estado actual de las banderas de acarreo (C) y
cero (Z).
 Inhibe las interrupciones.
 Carga el contador de programa (PC) con el valor del vector
de interrupción (FF o 3FF según la versión del
microprocesador Picoblaze utilizada).

21/05/2012 Arquitectura externa Picoblaze. L. Jacobo Álvarez, Francisco Poza. 214


Interrupciones externas (V).
 Secuencia de acciones realizada por el microprocesador Picoblaze
para la atención de una interrupción.

21/05/2012 Arquitectura externa Picoblaze. L. Jacobo Álvarez, Francisco Poza. 215


Interrupciones externas (VI).
 Cronograma de la atención de una interrupción por parte
del microprocesador Picoblaze.

21/05/2012 Arquitectura externa Picoblaze. L. Jacobo Álvarez, Francisco Poza. 216


Interrupciones externas (VII).
 Simulación “hardware” en la que se observa la atención de una
interrupción por parte del microprocesador Picoblaze.
 En este ejemplo, una rutina de retardo (“delay loop”) se ve
interrumpida por la atención de la interrupción externa, que
consiste en incrementar el estado de un contador mediante la
rutina correspondiente (“service routine”).

21/05/2012 Arquitectura externa Picoblaze. L. Jacobo Álvarez, Francisco Poza. 217


Interrupciones externas (VIII).
 En el caso más sencillo, con una única fuente de
interrupción asíncrona respecto al reloj del
microprocesador, se puede utilizar un circuito como el
siguiente para activar la señal de petición de
interrupción.

21/05/2012 Arquitectura externa Picoblaze. L. Jacobo Álvarez, Francisco Poza. 218


Interrupciones externas (IX).
 En general es necesario disponer de una señal externa
que indique que el microprocesador ha atendido la
interrupción.

 Esta señal permite poner a cero la petición de


interrupción por parte del periférico.

 Sólo el microprocesador Picoblaze 3 dispone


directamente de una señal externa que indica que se ha
atendido la interrupción, INTERRUPT_ACK.

21/05/2012 Arquitectura externa Picoblaze. L. Jacobo Álvarez, Francisco Poza. 219


Interrupciones externas (X).
 En el resto de las versiones del Picoblaze, existen varias
formas de generar una señal equivalente:

 Utilizar una operación de lectura externa (INPUT) para


determinar el origen de la petición de la interrupción (si
hay varios posibles) y utilizar la señal READ_STROBE
como INTERRUPT_ACK.

 Decodificar la dirección del vector de interrupción (FF o


3FF) en el bus de direcciones, para activar una señal
INTERRUPT_ACK.

 Utilizar una operación de escritura externa (OUTPUT) para


poner a cero el biestable de petición de interrupción.

21/05/2012 Arquitectura externa Picoblaze. L. Jacobo Álvarez, Francisco Poza. 220


Memoria de programa (I).
 A continuación se analizan varias configuraciones de la
memoria de programa del microprocesador Picoblaze,
distintas de la configuración básica, que tienen como
objetivos:

 Aumentar el tamaño de la memoria de programa.

 Flexibilizar el uso de la memoria de programa.

21/05/2012 Arquitectura externa Picoblaze. L. Jacobo Álvarez, Francisco Poza. 221


Memoria de programa (II).
 Soluciones para aumentar el tamaño del programa
ejecutado por el microprocesador Picoblaze:

 Utilizar otra versión del Picoblaze que permita


direccionar una memoria de programa de mayor
capacidad (Picoblaze 2 y Picoblaze 3 frente a
Picoblaze).

 Dividir el programa en varios procesos y utilizar un


microprocesador Picoblaze para cada uno de ellos.

 Utilizar varias memorias de programa y conmutar su


utilización mediante “software”.

21/05/2012 Arquitectura externa Picoblaze. L. Jacobo Álvarez, Francisco Poza. 222


Memoria de programa (III).
 Utilización de dos memorias de programa seleccionadas por
“software” para aumentar el tamaño del programa en un
microprocesador Picoblaze (I).
 Solución 1. Utilizar un multiplexor. Inconvenientes:
 Recursos lógicos necesarios para realizar el multiplexor.

 Retardo adicional en la lectura de instrucciones de la memoria.

21/05/2012 Arquitectura externa Picoblaze. L. Jacobo Álvarez, Francisco Poza. 223


Memoria de programa (IV).
 Ejemplo de programa que permite la utilización de dos memorias de
programa seleccionadas por “software” para aumentar el tamaño del
programa en un microprocesador Picoblaze.

21/05/2012 Arquitectura externa Picoblaze. L. Jacobo Álvarez, Francisco Poza. 224


Memoria de programa (V).
 Utilización de dos memorias de programa seleccionadas por
“software” para aumentar el tamaño del programa en un
microprocesador Picoblaze (II).
 Solución 2. Dividir el código de las instrucciones en dos memorias del
doble de posiciones y la mitad de bits, y utilizar un bit adicional como
bit de mayor peso de la dirección. Inconvenientes:
 Dificultad en la generación del código para las memorias.

21/05/2012 Arquitectura externa Picoblaze. L. Jacobo Álvarez, Francisco Poza. 225


Memoria de programa (VI).
 Utilidad PSMSPLIT de Xilinx para la generación del código de las dos
memorias del ejemplo anterior (sólo para Picoblaze 1).

21/05/2012 Arquitectura externa Picoblaze. L. Jacobo Álvarez, Francisco Poza. 226


Memoria de programa (VII).
 Utilización de una memoria BRAM de doble puerto para modificar el
programa del microprocesador Picoblaze 3 sin necesidad de
programar de nuevo la FPGA con el sistema completo.
 El microprocesador debe detener su operación durante el proceso de
actualización de la memoria de programa.
 Consultar artículo “Reconfiguring Block RAMs” de Kris Chaplin.

21/05/2012 Arquitectura externa Picoblaze. L. Jacobo Álvarez, Francisco Poza. 227


Memoria de programa (VIII).
 Utilización de una memoria BRAM de doble puerto para que dos
microprocesadores Picoblaze 3 ejecuten el mismo programa, aunque
puedan tener diferentes periféricos.

21/05/2012 Arquitectura externa Picoblaze. L. Jacobo Álvarez, Francisco Poza. 228


Memoria de programa (IX).
 Utilización de una memoria BRAM de doble puerto para que dos
microprocesadores Picoblaze 3 dispongan cada uno de la mitad de la
memoria y ejecuten distintos programas.
 Cada microprocesador “ve” un rango de memoria correspondiente a
las posiciones de programa 000 a 1FF, por lo que el vector de
interrupción debe situarse en la posición 1FF.
 Realmente, el microprocesador de la izquierda utiliza las posiciones
000 a 1FF de la memoria BRAM, y el microprocesador de la derecha
utiliza las posiciones 200 a 3FF de la memoria BRAM.

21/05/2012 Arquitectura externa Picoblaze. L. Jacobo Álvarez, Francisco Poza. 229


Memoria de programa (X).
 Utilización de memoria distribuida en lugar de memoria BRAM como
memoria de programa del microprocesador Picoblaze 3, en el caso de
que toda la memoria BRAM se utilice para otras aplicaciones.
 No se recomienda utilizar memoria distribuida para programas de más
de 128 instrucciones, porque consume muchos recursos lógicos
(“slices”) de la FPGA.

21/05/2012 Arquitectura externa Picoblaze. L. Jacobo Álvarez, Francisco Poza. 230


Memoria de programa (XI).
 Recursos lógicos (“slices”) de la FPGA necesarios para implementar la
memoria de programa de un microprocesador Picoblaze 3
(instrucciones de 18 bits) como memoria distribuida.

 La FPGA XC3S200 posee 480 CLBs = 1.920 “slices” = 3.840 LUTs, pero
sólo la mitad permiten realizar RAM distribuida => 30 kbits.
21/05/2012 Arquitectura externa Picoblaze. L. Jacobo Álvarez, Francisco Poza. 231
Codiseño HW/SW para sistemas empotrados
basados en Picoblaze
Índice
 Introducción.
 Proceso de diseño de aplicaciones empotradas con
Picoblaze.
 Proceso de diseño detallado.

16/07/2012 Codiseño HW/SW Picoblaze. L. Jacobo Álvarez, Francisco Poza 233


Introducción (I).
 En el caso de un S.O.C. basado en el microprocesador
Picoblaze, es posible implementar en una misma FPGA
de Xilinx, los siguientes circuitos:

 Uno o varios microprocesadores Picoblaze, en


cualquiera de sus versiones.

 Los periféricos de entrada y salida de todos ellos.

 Otros sistemas digitales necesarios para la


aplicación.

16/07/2012 Codiseño HW/SW Picoblaze. L. Jacobo Álvarez, Francisco Poza 234


Introducción (II).
 En esta presentación se comenta el método normal de
diseño para la realización de aplicaciones empotradas
utilizando el microprocesador Picoblaze.

 Se plantea un ejemplo para aplicar el método analizado:


 Ejemplo básico Picoblaze 3.

 También se expone un método alternativo más rápido,


aplicable para modificaciones únicamente del software del
microprocesador.

16/07/2012 Codiseño HW/SW Picoblaze. L. Jacobo Álvarez, Francisco Poza 235


Introducción (III).
 Flujo básico de Especificación
codiseño
hardware / Particionado
software. Hardware-Software

Simulación Descripción Desarrollo Simulación


Hardware Hardware Software Software

Síntesis Compilación

Depuración Depuración
Implementación Enlazado
Hardware Software

Co-simulación Co-depuración
Hardware- Combinación hardware-software Hardware-
Software Software

16/07/2012 Codiseño HW/SW Picoblaze. L. Jacobo Álvarez, Francisco Poza 236


Proceso de diseño con Picoblaze (I).
Flujo de codiseño hardware / software (I):

 Especificación:
 Definir la funcionalidad del sistema a desarrollar.
 Elección del microprocesador Picoblaze adecuado.
 Elección del microprocesador Picoblaze adecuado a la aplicación y a la
FPGA seleccionada.

 Particionado Hardware-Software:
 Se deberá hacer manualmente.
 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.

16/07/2012 Codiseño HW/SW Picoblaze. L. Jacobo Álvarez, Francisco Poza 237


Particionado Hardware/Software.
 Ventajas e inconvenientes de realizar una tarea mediante
“software” (Picoblaze) o “hardware” (FPGA Logic) :

16/07/2012 Codiseño HW/SW Picoblaze. L. Jacobo Álvarez, Francisco Poza 238


Proceso de diseño con Picoblaze (II).
Flujo de codiseño hardware / software (II):

 Descripción hardware:
 Diseño de los circuitos adicionales que se desea implementar en la FPGA:
 Circuitos de selección de periféricos de entrada y de salida.

 Periféricos del microprocesador.

 Otros circuitos adicionales.


 Se utilizará la herramienta ISE de Xilinx.

 Desarrollo software:
 Diseño del programa en ensamblador para realizar la tarea requerida.
 Se utilizará el entorno pBlazeIDE.

16/07/2012 Codiseño HW/SW Picoblaze. L. Jacobo Álvarez, Francisco Poza 239


Proceso de diseño con Picoblaze (III).
Flujo de codiseño hardware / software (III):

 Simulación hardware:
 Se utilizará el programa simulador iSIM incluido en ISE.

 Simulación software:
 Se utilizará el entorno pBlazeIDE.

 Síntesis e implementación:
 Generación de los archivos necesarios para la implementación del
microprocesador Picoblaze mediante FPGAs.
 Se utilizará la herramienta ISE de Xilinx.
 Implementación del sistema completo en la FPGA elegida.

 Compilación y enlazado.
 Se utilizará el entorno pBlazeIDE para ensamblar el programa.

16/07/2012 Codiseño HW/SW Picoblaze. L. Jacobo Álvarez, Francisco Poza 240


Proceso de diseño con Picoblaze (IV).
Flujo de codiseño hardware / software (IV):

 Depuración hardware:
 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. No existe ninguna herramienta para el
microprocesador Picoblaze.

16/07/2012 Codiseño HW/SW Picoblaze. L. Jacobo Álvarez, Francisco Poza 241


Proceso de diseño con Picoblaze (V).
Flujo de codiseño hardware / software (V):

 Combinación hardware-software :
 Se utilizará la herramienta ISE de Xilinx.

 Cosimulación hardware-software:
 No existen herramientas específicas para Picoblaze.
 Se puede hacer una breve cosimulación del conjunto formado por el
microprocesador, su memoria de programa (ya con el código de programa
generado anteriormente) y sus periféricos, mediante el simulador iSIM
incluido en ISE.

 Codepuración hardware-software:
 No existen herramientas para Picoblaze.
 Comprobación del sistema sobre la FPGA ya programada.
 Se puede hacer una breve codepuración del conjunto formado por el
microprocesador, su memoria de programa (ya con el código de programa
generado anteriormente) y sus periféricos, mediante el analizador
“Chipscope” incluido en ISE.
16/07/2012 Codiseño HW/SW Picoblaze. L. Jacobo Álvarez, Francisco Poza 242
Proceso de diseño con Picoblaze (VI).
Flujo normal de diseño con Picoblaze
<kcpsm3.vhd>,
<picoblaze3_empotrado.vhd>,
<top.vhd>, <otros.vhd>, …
<nombre_programa.psm>

<ROM_blank_
modificada.vhd> pBlazeIDE <picocode.vhd>

Simulación
funcional Síntesis
Simulación
hardware
software
/ software

Simulación
temporal Implementación
hardware
/ software top.bit
Programación JTAG
Codepuración
hardware iMPACT
/ software

16/07/2012 Codiseño HW/SW Picoblaze. L. Jacobo Álvarez, Francisco Poza 243


Descripción hardware (I).
 Debemos implementar en la misma FPGA los siguientes
circuitos:
 Microprocesador Picoblaze.

 Memoria de programa del microprocesador.

 Circuitos de selección de periféricos de entrada y de


salida.
 Periféricos del microprocesador.

 Otros circuitos adicionales para el manejo de los


componentes de la placa de desarrollo.

 Para ello, debemos describirlos mediante cualquiera de las


formas que permite la herramienta ISE de Xilinx: VHDL,
esquemáticos, etc.

16/07/2012 Codiseño HW/SW Picoblaze. L. Jacobo Álvarez, Francisco Poza 244


Simulación hardware (I).
 Es necesario simular todos los circuitos de forma independiente.

 Ejemplo de simulación del circuito de interfaz recomendado para la


conexión de 8 periféricos de entrada al microprocesador con
multiplexor + registro, con codificación binaria, con fclk = 50 MHz.

16/07/2012 Codiseño HW/SW Picoblaze. L. Jacobo Álvarez, Francisco Poza 245


Depuración hardware (I).
 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 Codiseño HW/SW Picoblaze. L. Jacobo Álvarez, Francisco Poza 246


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 Codiseño HW/SW Picoblaze. L. Jacobo Álvarez, Francisco Poza 247


Desarrollo software (II).
 Para la realización del programa en ensamblador se pueden
utilizar:

 Un editor de texto plano y el ensamblador de Xilinx KCPSM,


KCPSM2 o KCPSM3, dependiendo de la versión del
microprocesador Picoblaze.

 El entorno pBlazIDE.
 Hay que tener en cuenta las diferencias tanto en los códigos de
operación como en las directivas, respecto del ensamblador de
Xilinx.
 Es necesario seleccionar el tipo de microprocesador Picoblaze
en la opción de menú “Settings”.

16/07/2012 Codiseño HW/SW Picoblaze. L. Jacobo Álvarez, Francisco Poza 248


Desarrollo software (III).
 Ventana del entorno Picoblaze IDE en la que se muestra un
extracto del código del programa.

16/07/2012 Codiseño HW/SW Picoblaze. L. Jacobo Álvarez, Francisco Poza 249


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 Codiseño HW/SW Picoblaze. L. Jacobo Álvarez, Francisco Poza 250


Compilación y enlazado (II).
 pBlazeIDE (II). Seleccionar en el menú “Settings” el Picoblaze
adecuado, en este caso el Picoblaze 3.
 Ejecutar “Assemble & Simulate”.

16/07/2012 Codiseño HW/SW Picoblaze. L. Jacobo Álvarez, Francisco Poza 251


Compilación y enlazado (III).
 KCPSM (I).
 Para generar el archivo “picocode.vhd” si se utiliza el programa
ensamblador de Xilinx (KCPSM, KCPSM2 o KCPSM3).
 Ensamblar el archivo fuente mediante la ejecución de la orden:

kcpsm source>log.txt

en línea de comandos (ventana de DOS).

 En el mismo directorio del ensamblador deben estar los archivos


ROM_form.vhd y ROM_form.coe correspondientes a la versión del
Picoblaze utilizado.

 Si no hay errores, se generan una serie de ficheros, uno de los cuales


se denomina “source.vhd” y contiene la definición de la memoria de
código. Renombrar el archivo o copiar el contenido de dicho archivo
en “picocode.vhd”.

16/07/2012 Codiseño HW/SW Picoblaze. L. Jacobo Álvarez, Francisco Poza 252


Compilación y enlazado (IV).
 KCPSM (II).
 Si se desea implementar el Picoblaze 3 en una Spartan 2 / 2E es
necesario realizar una adaptación del archivo “source.vhd” obtenido
mediante el ensamblador KCPSM.

 Esto se debe a que es necesario obtener la descripción de la memoria


de programa y de su contenido mediante 5 memorias BRAM de
1.024x4 bits, pues las FPGAs de la familia Spartan 2 no poseen
memorias BRAM de 1.024x18 bits.

 Para ello, se debe ejecutar la orden:


comp source
en línea de comandos (ventana de DOS). Con ello se obtiene el archivo
“picocode.vhd” necesario.

16/07/2012 Codiseño HW/SW Picoblaze. L. Jacobo Álvarez, Francisco Poza 253


Compilación y enlazado (V)
 KCPSM (III).
 Ejecutar el ensamblador en línea de comandos.

16/07/2012 Codiseño HW/SW Picoblaze. L. Jacobo Álvarez, Francisco Poza 254


Simulación software (I).
 El entorno pBlazIDE es el único que dispone de simulador
para el programa en ensamblador.
 Por ello, se recomienda realizar el programa en el formato
del entorno pBlazeIDE.
 Si es necesario por alguna razón especial, el programa se
puede adaptar posteriormente al formato de Xilinx.

 El pBlazeIDE tiene una opción para importar directamente


un programa que esté escrito en el formato de Xilinx (File ->
Import).
 No hay ninguna opción para exportar un programa en el
formato pBlazeIDE al formato de Xilinx.

16/07/2012 Codiseño HW/SW Picoblaze. L. Jacobo Álvarez, Francisco Poza 255


Simulación software (II).
 Simulación del programa en el entorno pBlazIDE.

16/07/2012 Codiseño HW/SW Picoblaze. L. Jacobo Álvarez, Francisco Poza 256


Depuración software (I).
 No hay ninguna herramienta para Picoblaze.

16/07/2012 Codiseño HW/SW Picoblaze. L. Jacobo Álvarez, Francisco Poza 257


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 Codiseño HW/SW Picoblaze. L. Jacobo Álvarez, Francisco Poza 258


Combinación hardware-software (II)
 Una vez elegida la FPGA concreta en la que se desea
implementar el sistema completo, se puede proceder a su
implementación.

 Para ello, debemos seleccionar las opciones de


implementación deseadas en la herramienta ISE de Xilinx.

16/07/2012 Codiseño HW/SW Picoblaze. L. Jacobo Álvarez, Francisco Poza 259


Síntesis e implementación (I)
 Esquema RTL del fichero principal
“top_ejemplo_basico_picoblaze_3_placa_Nexys_2”.

16/07/2012 Codiseño HW/SW Picoblaze. L. Jacobo Álvarez, Francisco Poza 260


Síntesis e implementación (II)
 Resultado de la implementación del sistema completo.

16/07/2012 Codiseño HW/SW Picoblaze. L. Jacobo Álvarez, Francisco Poza 261


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 Codiseño HW/SW Picoblaze. L. Jacobo Álvarez, Francisco Poza 262


Cosimulación hardware/software (II).
 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 Codiseño HW/SW Picoblaze. L. Jacobo Álvarez, Francisco Poza 263


Cosimulación hardware/software (III).
 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 Codiseño HW/SW Picoblaze. L. Jacobo Álvarez, Francisco Poza 264


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 Codiseño HW/SW Picoblaze. L. Jacobo Álvarez, Francisco Poza 265


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 Codiseño HW/SW Picoblaze. L. Jacobo Álvarez, Francisco Poza 266


Codepuración hardware-software (II).
 Foto de la placa Nexys 2 durante la prueba del ejemplo.

16/07/2012 Codiseño HW/SW Picoblaze. L. Jacobo Álvarez, Francisco Poza 267


Aplicaciones del
microprocesador Picoblaze
Índice
 Introducción.
 Aplicaciones del Picoblaze.

21/05/2012 Aplicaciones Picoblaze. L. Jacobo Álvarez, Francisco Poza. 269


Introducción (I).
 El ámbito de aplicación del microprocesador Picoblaze
viene determinado por sus características principales:

 Programa de hasta 1024 instrucciones.

 Almacenamiento de hasta 80 variables internas (16 registros +


64 bytes RAM).

 Frecuencias de reloj entre 88MHz y 200MHz, dependiendo de


la FPGA.

 Cada instrucción se ejecuta en 2 ciclos de reloj, lo que supone


velocidades de proceso entre 44 y 100 millones de
instrucciones por segundo (MIPS).

21/05/2012 Aplicaciones Picoblaze. L. Jacobo Álvarez, Francisco Poza. 270


Introducción (II).
 Una velocidad de proceso de 50 MIPS nos permite
trabajar en tiempo real en aplicaciones con las siguientes
características:

 Su frecuencia de proceso (eventos en las entradas) es de


hasta 500 kHz.

 No necesitan más de 100 instrucciones para procesar cada


evento.

 Esto supone un campo de aplicación bastante amplio,


que incluye audio digital, sistemas de adquisición,
control de procesos, etc.
 Si se añade capacidad de almacenamiento externa, es
posible procesar grandes cantidades de datos.
21/05/2012 Aplicaciones Picoblaze. L. Jacobo Álvarez, Francisco Poza. 271
Introducción (III).
 El microprocesador PicoBlaze ocupa muy poca área y se
puede empotrar totalmente en una FPGA de las familias
Spartan o Virtex.

 Puede interactuar muy fácilmente con otra lógica


implementada en la FPGA, lo que facilita la realización de
aplicaciones de control.

 Se puede realizar prácticamente cualquier periférico para el


Picoblaze, y él mismo puede actuar como periférico de otros
sistemas.

 Por último, el PicoBlaze centra su ámbito de aplicación


fundamentalmente en la realización de tareas complejas (con
una larga secuencia de operaciones) relativamente lentas.

21/05/2012 Aplicaciones Picoblaze. L. Jacobo Álvarez, Francisco Poza. 272


Aplicaciones del Picoblaze (I).
 Activación de múltiples LEDs, por ejemplo, en un medidor de
volumen de audio (vúmetro).

 Generación de señales PWM para control y otras aplicaciones


(frecuencias de kHz para motores y control de brillo de
monitores y visualizadores).

 Interfaces serie (UARTs) y terminales de envío y recepción.

 Interfaz de visualizadores LCD.

 Controlador maestro interfaz SPI.

 Controlador maestro interfaz I2C.

21/05/2012 Aplicaciones Picoblaze. L. Jacobo Álvarez, Francisco Poza. 273


Aplicaciones del Picoblaze (II).
 Calculadora simple.

 Procesado de señales (DSP) de audio. Puede utilizar un


multiplicador “hardware” como periférico.

 Generador de tonos telefónicos multifrecuencia (DTMF),


incluyendo la generación de las señales senoidales
necesarias mediante fórmulas matemáticas.

 Monitorización y control de sistemas, por ejemplo, de


temperatura, mediante un sensor y un ventilador.

 Interfaz para codificadores (“encoder”) incrementales.

 Emulador de otros microprocesadores de 8 bits, por ejemplo,


el 8051.

21/05/2012 Aplicaciones Picoblaze. L. Jacobo Álvarez, Francisco Poza. 274


Aplicaciones del Picoblaze (III).
 Otros ejemplos.

21/05/2012 Aplicaciones Picoblaze. L. Jacobo Álvarez, Francisco Poza. 275


Recursos web de Xilinx
sobre microprocesadores empotrados
Índice
 Introducción.
 Página principal de Xilinx.
 Página sobre procesadores empotrados de
Xilinx.
 Páginas sobre Picoblaze 3.
 Picoblaze Forum.
 Picoblaze IDE.

21/05/2012 Recursos web Picoblaze. L. Jacobo Álvarez, Francisco Poza 277


Introducción.
 A continuación se muestran varias páginas web, extraídas
del sitio web de Xilinx, fabricante de PLDs y FPGAs.

 Concretamente, estas páginas están dedicadas a


procesadores empotrados y, particularmente, al Picoblaze.

 También se incluyen algunas páginas extraídas del sitio


web de Mediatronix, responsable de desarrollar el entorno
de diseño y simulación PicoblazeIDE.

21/05/2012 Recursos web Picoblaze. L. Jacobo Álvarez, Francisco Poza 278


Página principal de Xilinx.
http://www.xilinx.com/

21/05/2012 Recursos web Picoblaze. L. Jacobo Álvarez, Francisco Poza 279


Página sobre procesadores (I).
http://www.xilinx.com/products/technology/embedded-
processing/index.htm

21/05/2012 Recursos web Picoblaze. L. Jacobo Álvarez, Francisco Poza 280


Página sobre Picoblaze 3.
http://www.xilinx.com/support/documentation/ipembed
process_processorcore_picoblaze_.htm

21/05/2012 Recursos web Picoblaze. L. Jacobo Álvarez, Francisco Poza 281


Descarga de archivos Picoblaze.
http://www.xilinx.com/ipcenter/processor_central/picoblaz
e/member/
(sólo para usuarios registrados)

21/05/2012 Recursos web Picoblaze. L. Jacobo Álvarez, Francisco Poza 282


Recursos para Picoblaze.
http://www.xilinx.com/ipcenter/processor_central/picoblaz
e/picoblaze_user_resources.htm

21/05/2012 Recursos web Picoblaze. L. Jacobo Álvarez, Francisco Poza 283


Picoblaze Forum.
 http://forums.xilinx.com/t5/PicoBlaze/bd-p/PicoBlaze

21/05/2012 Recursos web Picoblaze. L. Jacobo Álvarez, Francisco Poza 284


Picoblaze IDE (www.mediatronix.com).
http://www.mediatronix.com/pBlazeIDE.htm

21/05/2012 Recursos web Picoblaze. L. Jacobo Álvarez, Francisco Poza 285


Análisis implementación Picoblaze
Índice
 Introducción.
 Memorias de programa y datos.
 Contador de programa.
 Memoria pila.
 ALU.

21/05/2012 Análisis implementación Picoblaze. Francisco Poza, L. Jacobo Álvarez. 287


Introducción.
 A continuación se analiza la forma en que Xilinx ha
realizado la implementación del microprocesador
Picoblaze.

21/05/2012 Análisis implementación Picoblaze. Francisco Poza, L. Jacobo Álvarez. 288


Análisis implementación Picoblaze (I).
Arquitectura general. Memorias de programa y de datos (registros).

21/05/2012 Análisis implementación Picoblaze. Francisco Poza, L. Jacobo Álvarez. 289


Análisis implementación Picoblaze (II).
 Memorias de programa y de datos (registros). Realización mediante
memorias internas de la FPGA.

21/05/2012 Análisis implementación Picoblaze. Francisco Poza, L. Jacobo Álvarez. 290


Análisis implementación Picoblaze (III).
 Contador de programa. Utilización de la lógica de acarreo de la FPGA.
 2 ciclos de reloj por instrucción: 1 para el cálculo de la nueva dirección, 1
para el acceso a la memoria de programa síncrona.

21/05/2012 Análisis implementación Picoblaze. Francisco Poza, L. Jacobo Álvarez. 291


Análisis implementación Picoblaze (IV).
 El almacenamiento de una dirección de retorno de una subrutina se
podría hacer mediante un registro.

21/05/2012 Análisis implementación Picoblaze. Francisco Poza, L. Jacobo Álvarez. 292


Análisis implementación Picoblaze (V).
 Pero para realizar una pila (“stack”) que almacene 15 direcciones de
retorno es mejor utilizar una memoria RAM de 16 posiciones.

21/05/2012 Análisis implementación Picoblaze. Francisco Poza, L. Jacobo Álvarez. 293


Análisis implementación Picoblaze (VI).
 Memorias de programa y datos (registros), contador de programa y
memoria pila (“stack”) de direcciones de retorno.
 Los recursos lógicos de la FPGA utilizados son reducidos gracias a la
correcta utilización de los mismos.

21/05/2012 Análisis implementación Picoblaze. Francisco Poza, L. Jacobo Álvarez. 294


Análisis implementación Picoblaze (VII).
 ALU.
 Sería posible realizar directamente la
selección del resultado de la
operación de la ALU mediante un
multiplexor de 19 canales de 8 bits,
pero serían necesarios 48 “slices”
sólo para eso.

21/05/2012 Análisis implementación Picoblaze. Francisco Poza, L. Jacobo Álvarez. 295


Análisis implementación Picoblaze (VIII).
 ALU. Operaciones Lógicas.
 Cada bit del resultado corresponde a una función lógica de 4 entradas,
que equivale a una tabla de consulta (LUT) => 4 “slices”.

21/05/2012 Análisis implementación Picoblaze. Francisco Poza, L. Jacobo Álvarez. 296


Análisis implementación Picoblaze (IX).
 ALU. Operaciones Aritméticas.
 La combinación de la señal de selección con el acarreo y la utilización
adecuada de los circuitos de acarreo reducen los recursos lógicos de la
FPGA necesarios.

21/05/2012 Análisis implementación Picoblaze. Francisco Poza, L. Jacobo Álvarez. 297


Análisis implementación Picoblaze (X).
 ALU. Operaciones de rotación y desplazamiento.
 Cada bit del resultado corresponde a un multiplexor de 2 entradas, que
equivale a una tabla de consulta (LUT) => 4 “slices”.
 Se necesita un multiplexor adicional de 4 canales de 1 bit => 1 “slice”.

21/05/2012 Análisis implementación Picoblaze. Francisco Poza, L. Jacobo Álvarez. 298


Análisis implementación Picoblaze (XI).
 La ALU completa necesita algunos circuitos adicionales.
 La realización de la bandera de cero se beneficia de la utilización de los
circuitos de acarreo.

21/05/2012 Análisis implementación Picoblaze. Francisco Poza, L. Jacobo Álvarez. 299


Análisis implementación Picoblaze (XII).
 El aprovechamiento de los recursos lógicos de la FPGA que se ha
conseguido en el diseño del microprocesador Picoblaze sólo ha sido
posible gracias a:
 Un profundo conocimiento de la arquitectura de la FPGA utilizada.

 Una descripción realizada a bajo nivel mediante VHDL.

Bit de la RAM Operaciones lógicas Circuitos de acarreo de


de datos. de la ALU. la ALU.

21/05/2012 Análisis implementación Picoblaze. Francisco Poza, L. Jacobo Álvarez. 300


Ejercicio de análisis de la implementación
del Picoblaze.
 Leer el artículo “Creating Embedded Microcontrollers
(Programmable State Machines)”, Ken Chapman, TechXclusives,
Xilinx, 2002 en grupos de 6 personas.

 Repartir la lectura del artículo de forma que una persona se


encargue de uno de los siguientes apartados:
 Implementación de la memoria de programa.
 Implementación de los registros internos.
 Implementación de la pila.
 Implementación de las operaciones lógicas de la ALU.
 Implementación de las operaciones aritméticas de la ALU.
 Implementación de las operaciones de rotación y desplazamiento
de la ALU.

 Hacer un resumen de cada apartado en el que se especifiquen


las razones por las que Ken Chapman ha elegido la forma de
implementar el circuito analizado.
21/05/2012 Análisis implementación Picoblaze. Francisco Poza, L. Jacobo Álvarez. 301
Juego de instrucciones detallado Picoblaze
Índice
 Introducción.
 Juego instrucciones comunes.
 Instrucciones específicas Picoblaze 3.
 Codificación instrucciones Picoblaze 3.

16/07/2012 Juego de instrucciones detallado Picoblaze.Francisco Poza, L. Jacobo Álvarez. 303


Introducción.
 A continuación se analiza con detalle el juego de
instrucciones del microprocesador Picoblaze.

16/07/2012 Juego de instrucciones detallado Picoblaze.Francisco Poza, L. Jacobo Álvarez. 304


Juego instrucciones Picoblaze.
 Revisar el juego de instrucciones del Picoblaze en el manual del
microprocesador.

 Comentar adecuadamente cada programa.

16/07/2012 Juego de instrucciones detallado Picoblaze.Francisco Poza, L. Jacobo Álvarez. 305


Juego instrucciones Picoblaze (I)
 Transferencia y Lógicas  Desplazamiento y Rotación  Control de Programa
SR0  JUMP
 LOAD 

 SR1  CALL
 AND  RETURN
 SRX
 OR
 SRA
 XOR
 RR
 Interrupción
 TEST  RETURNI ENABLE
 SL0
 RETURNI DISABLE
 SL1
 INTERRUPT ENABLE
SLX
 Aritméticas 
 INTERRUPT DISABLE
 SLA
 ADD
 RL  Almacenamiento
 ADDCY
 STORE
 SUB
 Entrada/Salida  FETCH
 SUBCY
 INPUT
 COMPARE  OUTPUT

16/07/2012 Juego de instrucciones detallado Picoblaze.Francisco Poza, L. Jacobo Álvarez. 306


Juego instrucciones Picoblaze (II)
Transferencia y lógicas
LOAD sX, kk

LOAD sX, sY

AND sX, kk
OR sX, kk
XOR sX, kk

AND sX, sY
OR sX, sY
XOR sX, sY

16/07/2012 Juego de instrucciones detallado Picoblaze.Francisco Poza, L. Jacobo Álvarez. 307


Juego instrucciones Picoblaze (III)
Aritméticas (1)
ADD sX, kk

ADD sX, sY

ADDCY sX, kk

ADDCY sX, sY

16/07/2012 Juego de instrucciones detallado Picoblaze.Francisco Poza, L. Jacobo Álvarez. 308


Juego instrucciones Picoblaze (IV)
Aritméticas (2)
SUB sX, kk

SUB sX, sY

SUBCY sX, kk

SUBCY sX, sY

16/07/2012 Juego de instrucciones detallado Picoblaze.Francisco Poza, L. Jacobo Álvarez. 309


Juego instrucciones Picoblaze (V)
Desplazamiento y rotación a la derecha

SR0 sX

SR1 sX

SRX sX

SRA sX

RR sX

16/07/2012 Juego de instrucciones detallado Picoblaze.Francisco Poza, L. Jacobo Álvarez. 310


Juego instrucciones Picoblaze (VI)
Desplazamiento y rotación a la izquierda

SL0 sX

SL1 sX

SLX sX

SLA sX

RL sX

16/07/2012 Juego de instrucciones detallado Picoblaze.Francisco Poza, L. Jacobo Álvarez. 311


Juego instrucciones Picoblaze (VII)
Entrada/Salida
 Se analizarán con detalle en el tema dedicado a la arquitectura externa
del microprocesador Picoblaze.

INPUT sX, pp

INPUT sX, (sY)

OUTPUT sX, pp

OUTPUT sX, (sY)

16/07/2012 Juego de instrucciones detallado Picoblaze.Francisco Poza, L. Jacobo Álvarez. 312


Juego instrucciones Picoblaze (VIII)
Control de programa (1)

JUMP aaa
JUMP Z, aaa
JUMP NZ, aaa
JUMP C, aaa
JUMP NC, aaa

CALL aaa
CALL Z, aaa
CALL NZ, aaa
CALL C, aaa
CALL NC, aaa

16/07/2012 Juego de instrucciones detallado Picoblaze.Francisco Poza, L. Jacobo Álvarez. 313


Juego instrucciones Picoblaze (IX)
Control de programa (2)

RETURN
RETURN Z
RETURN NZ
RETURN C
RETURN NC

16/07/2012 Juego de instrucciones detallado Picoblaze.Francisco Poza, L. Jacobo Álvarez. 314


Juego instrucciones Picoblaze (X)
RETURNI ENABLE Interrupción
RETURNI DISABLE

ENABLE INTERRUPT
DISABLE INTERRUPT

16/07/2012 Juego de instrucciones detallado Picoblaze.Francisco Poza, L. Jacobo Álvarez. 315


Instrucciones específicas Picoblaze 3 (I).
TEST
TEST sX, kk
TEST sX, sY

No se destruye el
contenido de sX

16/07/2012 Juego de instrucciones detallado Picoblaze.Francisco Poza, L. Jacobo Álvarez. 316


Instrucciones específicas Picoblaze 3 (II).
COMPARE

COMPARE sX, kk
COMPARE sX, sY

No se destruye el
contenido de sX

16/07/2012 Juego de instrucciones detallado Picoblaze.Francisco Poza, L. Jacobo Álvarez. 317


Instrucciones específicas Picoblaze 3 (III).
FETCH

FETCH sX, kk
FETCH sX, (sY)

16/07/2012 Juego de instrucciones detallado Picoblaze.Francisco Poza, L. Jacobo Álvarez. 318


Instrucciones específicas Picoblaze 3 (IV).
STORE

STORE sX, kk
STORE sX, (sY)

16/07/2012 Juego de instrucciones detallado Picoblaze.Francisco Poza, L. Jacobo Álvarez. 319


Codificación instrucciones Picoblaze 3 (I)
Transferencia y lógicas
0 0 0 LOAD sX, kk
1 0 1 AND sX, kk
0
1 1 0 OR sX, kk
1 1 1 XOR sX, kk
1 0 0 1 TEST sX, kk
sX kk
0 I I I I 0 X X X X k k k k k k k k
17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

0 I I I I 1 X X X X Y Y Y Y 0 0 0 0
sX sY
0 0 0 LOAD sX, sY
1 0 1 AND sX, sY
0
1 1 0 OR sX, sY
1 1 1 XOR sX, sY
1 0 0 1 TEST sX, sY
16/07/2012 Juego de instrucciones detallado Picoblaze.Francisco Poza, L. Jacobo Álvarez. 320
Codificación instrucciones Picoblaze 3 (II)
Aritméticas
1 0 0 ADD sX, kk
1 0 1 ADDCY sX, kk
1 1 0 SUB sX, kk
1 1 1 SUBCY sX, kk
0 1 0 COMPARE sX, kk
sX kk
0 1 I I I 0 X X X X k k k k k k k k
17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

0 1 I I I 1 X X X X Y Y Y Y 0 0 0 0
sX sY
1 0 0 ADD sX, kk
1 0 1 ADDCY sX, kk
1 1 0 SUB sX, kk
1 1 1 SUBCY sX, kk
0 1 0 COMPARE sX, sY
16/07/2012 Juego de instrucciones detallado Picoblaze.Francisco Poza, L. Jacobo Álvarez. 321
Codificación instrucciones Picoblaze 3 (III)
Desplazamiento y rotación

SR0 sX 1 1 0
SR1 sX 1 1 1
SRX sX 1 0 1 0
SRA sX 0 0 0
RR sX 1 0 0
SL0 sX 1 1 0
SL1 sX 1 1 1
SLX sX 0 1 0 0
SLA sX 0 0 0
RL sX 0 1 0
sX
1 0 0 0 0 0 X X X X 0 0 0 0 I I I I
17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

16/07/2012 Juego de instrucciones detallado Picoblaze.Francisco Poza, L. Jacobo Álvarez. 322


Codificación instrucciones Picoblaze 3 (IV)
Entrada y Salida

0 0 0 INPUT sX, pp
1 0 1 OUTPUT sX, pp
sX pp
I I I 1 0 0 X X X X p p p p p p p p
17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

I I I 1 0 1 X X X X Y Y Y Y 0 0 0 0
sX sY
0 0 0 INPUT sX, (sY)
1 0 1 OUTPUT sX, (sY)

16/07/2012 Juego de instrucciones detallado Picoblaze.Francisco Poza, L. Jacobo Álvarez. 323


Codificación instrucciones Picoblaze 3 (V)
Control de programa
JUMP aaa
JUMP Z, aaa
1 0 JUMP
JUMP NZ, aaa
0 0 CALL
JUMP C, aaa
aaa JUMP NC, aaa
1 1 0 I I a a a a a a a a a a CALL aaa
U C Z CALL Z, aaa
RETURN 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0
CALL NZ, aaa
17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
CALL C, aaa
CALL NC, aaa
Incond. 0 0 0 Si cero (Z) RETURN
Condic. 1 0 1 Si no cero (NZ) RETURN Z
1 0 Si acarreo (C) RETURN NZ
1 1 Si no acarreo (NC) RETURN C
RETURN NC

16/07/2012 Juego de instrucciones detallado Picoblaze.Francisco Poza, L. Jacobo Álvarez. 324


Codificación instrucciones Picoblaze 3 (VI)
Interrupción

RETURNI ENABLE 1
0
RETURNI DISABLE 0
ENABLE INTERRUPT 1
1
DISABLE INTERRUPT 0

1 1 1 I 0 0 0 0 0 0 0 0 0 1 0 0 0 E
17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

16/07/2012 Juego de instrucciones detallado Picoblaze.Francisco Poza, L. Jacobo Álvarez. 325


Codificación instrucciones Picoblaze 3 (VII)
Almacenamiento

1 1 STORE sX, pp
0 0 FETCH sX, pp
sX ss
I 0 I 1 1 0 X X X X 0 0 s s s s s s
17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

I 0 I 1 1 1 X X X X Y Y Y Y 0 0 0 0
sX sY
1 1 STORE sX, (sY)
0 0 FETCH sX, (sY)

16/07/2012 Juego de instrucciones detallado Picoblaze.Francisco Poza, L. Jacobo Álvarez. 326


Codificación instrucciones Picoblaze 3 (VIII)
Códigos
Instrucción 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
ADD sX, kk 0 1 1 0 0 0 x x x x k k k k k k k k
ADD sX, sY 0 1 1 0 0 1 x x x x y y y y 0 0 0 0
ADDCY sX, kk 0 1 1 0 1 0 x x x x k k k k k k k k

ADDCY sX, sY 0 1 1 0 1 1 x x x x y y y y 0 0 0 0

AND sX, kk 0 0 1 0 1 0 x x x x k k k k k k k K

AND sX, sY 0 0 1 0 1 1 x x x x y y y y 0 0 0 0

CALL 1 1 0 0 0 0 0 0 a a a a a a a a a a
CALL C 1 1 0 0 0 1 1 0 a a a a a a a a a a
CALL NC 1 1 0 0 0 1 1 1 a a a a a a a a a a
CALL NZ 1 1 0 0 0 1 0 1 a a a a a a a a a a
CALL Z 1 1 0 0 0 1 0 0 a a a a a a a a a a
COMPARE sX, kk 0 1 0 1 0 0 x x x x k k k k k k k K
COMPARE sX, sY 0 1 0 1 0 1 x x x x y y y y 0 0 0 0
DISABLE INTERRUPT 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ENABLE INTERRUPT 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1

16/07/2012 Juego de instrucciones detallado Picoblaze.Francisco Poza, L. Jacobo Álvarez. 327


Codificación instrucciones Picoblaze 3 (IX)
Códigos
Instrucción 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
FETCH sX, ss 0 0 0 1 1 0 x x x x 0 0 s s s s s s
FETCH sX, (sY) 0 0 0 1 1 1 x x x x y y y y 0 0 0 0
INPUT sX, pp 0 0 0 1 0 0 x x x x p p p p p p p p
INPUT sX, (sY) 0 0 0 1 0 1 x x x x y y y y 0 0 0 0
JUMP 1 1 0 1 0 0 0 0 a a a a a a a a a a

JUMP C 1 1 0 1 0 1 1 0 a a a a a a a a a a

JUMP NC 1 1 0 1 0 1 1 1 a a a a a a a a a a

JUMP NZ 1 1 0 1 0 1 0 1 a a a a a a a a a a

JUMP Z 1 1 0 1 0 1 0 0 a a a a a a a a a a
LOAD sX, kk 0 0 0 0 0 0 x x x x k k k k k k k k
LOAD sX, sY 0 0 0 0 0 1 x x x x y y y y 0 0 0 0
OR sX, kk 0 0 1 1 0 0 x x x x k k k k k k k k
OR sX, sY 0 0 1 1 0 1 x x x x y y y y 0 0 0 0
OUTPUT sX, pp 1 0 1 1 0 0 x x x x p p p p p p p p
OUTPUT sX, (sY) 1 0 1 1 0 1 x x x x y y y y 0 0 0 0

16/07/2012 Juego de instrucciones detallado Picoblaze.Francisco Poza, L. Jacobo Álvarez. 328


Codificación instrucciones Picoblaze 3 (X)
Códigos
Instrucción 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
RETURN 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
RETURN C 1 0 1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0
RETURN NC 1 0 1 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0

RETURN NZ 1 0 1 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0

RETURN Z 1 0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0

RETURNI DISABLE 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

RETURNI ENABLE 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
RL sX 1 0 0 0 0 0 x x x x 0 0 0 0 0 0 1 0
RR sX 1 0 0 0 0 0 x x x x 0 0 0 0 1 1 0 0
SL0 sX 1 0 0 0 0 0 x x x x 0 0 0 0 0 1 1 0
SL1 sX 1 0 0 0 0 0 x x x x 0 0 0 0 0 1 1 1

16/07/2012 Juego de instrucciones detallado Picoblaze.Francisco Poza, L. Jacobo Álvarez. 329


Codificación instrucciones Picoblaze 3 (XI)
Códigos
Instrucción 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
SLA sX 1 0 0 0 0 0 x x x x 0 0 0 0 0 0 0 0
SLX sX 1 0 0 0 0 0 x x x x 0 0 0 0 0 1 0 0
SR0 sX 1 0 0 0 0 0 x x x x 0 0 0 0 1 1 1 0

SR1 sX 1 0 0 0 0 0 x x x x 0 0 0 0 1 1 1 1

SRA sX 1 0 0 0 0 0 x x x x 0 0 0 0 1 0 0 0

SRX sX 1 0 0 0 0 0 x x x x 0 0 0 0 1 0 1 0

STORE sX, ss 1 0 1 1 1 0 x x x x 0 0 s s s s s s

STORE sX, (sY) 1 0 1 1 1 1 x x x x y y y y 0 0 0 0

SUB sX, kk 0 1 1 1 0 0 x x x x k k k k K k k k
SUB sX, sY 0 1 1 1 0 1 x x x x y y y y 0 0 0 0
SUBCY sX, kk 0 1 1 1 1 0 x x x x k k k k k k k k
SUBCY sX, sY 0 1 1 1 1 1 x x x x y y y y 0 0 0 0
TEST sX, kk 0 1 0 0 1 0 x x x x k k k k k k k k
TEST sX, sY 0 1 0 0 1 1 x x x x y y y y 0 0 0 0
XOR sX, kk 0 0 1 1 1 0 x x x x k k k k k k k k
XOR sX, sY 0 0 1 1 1 1 x x x x y y y y 0 0 0 0

16/07/2012 Juego de instrucciones detallado Picoblaze.Francisco Poza, L. Jacobo Álvarez. 330


PRESENTACIONES DE LABORATORIO
Tutorial de diseño con FPGAs en la
herramienta Foundation ISE de Xilinx
Índice
 Introducción.
 Descripción.
 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
16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 333
Introducción (I).
 Cada fabricante de Circuitos Digitales Configurables
dispone de su propia herramienta de CAD, que es
imprescindible utilizar al menos para la fase de
implementación del sistema digital en el CDC
elegido.

 Todas las herramientas de CAD son muy similares


entre sí.

 Las herramientas actuales están orientadas sobre


todo al diseño de sistemas digitales basados en
HDLs (Verilog, VHDL).

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 334
Introducción (II).
 En este tema vamos a estudiar la herramienta “ISE
(“Integrated Systems Environment”)”, del fabricante
Xilinx.

 Esta herramienta es válida para el diseño de


sistemas digitales, con las familias de PLDs y
FPGAs que actualmente comercializa Xilinx.

 Esta herramienta dispone de una versión gratuita


denominada Webpack, limitada en cuanto a la
complejidad del sistema digital que se puede
implementar. Se puede conseguir en
http://www.xilinx.com.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 335
Creación de un proyecto (I)
 La primera acción debe ser “Crear un nuevo proyecto”, mediante el menú
“File  New Project”.
 Escoger el directorio adecuado (“Location”).

 Dar nombre al proyecto (sin espacios ni acentos, etc.)

 Escoger el tipo del fichero principal (en este caso “HDL”).

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 336
Creación de un proyecto (II)
 A continuación, debe seleccionarse el circuito en el que se desea
implementar el sistema digital que se va a diseñar, aunque
posteriormente puede elegirse otro circuito distinto.
 Escoger familia (“Family”), circuito (“Device”), encapsulado
(“Package”) y velocidad (“Speed”), por este orden.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 337
Creación de un proyecto (III)
 Revisar las opciones seleccionadas y pulsar “Finish” si son correctas.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 338
Creación de un proyecto (IV)
 Distintas áreas de trabajo de la herramienta ISE.

Área de ficheros
Área de edición

Área de procesos

Área de consola

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 339
Descripción (I)
 Una vez creado el proyecto, se procede a ir creando (“Project  New
source”) o añadiendo (“Project  Add Source o Add Copy of Source”) los
ficheros que describen el sistema digital, ya sean esquemáticos,
descripciones en VHDL, etc.
 En este caso, creamos un nuevo fichero, denominado “sctr4.vhd”, en el
que vamos a describir un contador de 4 bits en VHDL.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 340
Descripción (II)
 Ahora definimos los terminales de entrada y salida del contador que vamos
a describir.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 341
Descripción (III)
 A continuación, debemos completar la descripción del contador, similar a
la de la tabla A2.1, del apéndice 2 del libro [ÁLVAREZ 04].
 En primer lugar añadimos dos paquetes de la biblioteca IEEE.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 342
Descripción (IV)
 El programa dispone de plantillas VHDL, muy útiles para la descripción de
circuitos comunes. Estas plantillas están accesibles a través del icono de
la bombilla o mediante el menú “Edit  Language templates”.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 343
Descripción (V)
 Arquitectura completa del contador del ejemplo (1 de 3).
 architecture Behavioral of sctr4 is
 signal ctr_state: std_logic_vector (3 downto 0):= (others=>'0');
 begin
 q <= ctr_state; -- asignación de la señal interna a la salida del contador

 process (clk, ce, async_reset, sync_reset, dir, ctr_state, load)


 begin
 if async_reset='1' then -- asynchronous reset
 ctr_state <= "0000";
 elsif (clk'event and clk='1') then
 if sync_reset='1' then -- synchronous reset
 ctr_state <= "0000";
 elsif load='1' then
 ctr_state <= din;
 else
16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 344
Descripción (VI)
 Arquitectura completa del contador del ejemplo (2 de 3).
if ce='1' then
 if dir='1' then
 if ctr_state = "1111" then ctr_state <= "0000";
 else ctr_state <= ctr_state + 1;
 end if;
 else
 if ctr_state = "0000" then ctr_state <= "1111";
 else ctr_state <= ctr_state - 1;
 end if;
 end if;
 end if;
 end if;
 end if;

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 345
Descripción (VII)
 Arquitectura completa del contador del ejemplo (3 de 3).

 -- Salida de fin de contaje (TC) que se activa cuando el contador llega al último
estado
 if (((ctr_state = "1111") and dir = '1') or ((ctr_state = "0000") and dir = '0'))
 then tc <= '1';
 else tc <= '0';
 end if;
 end process;

 end Behavioral;

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 346
Comprobación de errores (I)
 Comprobar la corrección de la sintaxis del fichero VHDL, mediante
el proceso “Implement design –> Synthesize – XST  Check
syntax”.
 Comprobar los errores en la consola de ISE.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 347
Síntesis (I)
 Es recomendable hacer en este momento la
síntesis del circuito descrito, aunque ésta
corresponda a la fase de compilación del
diseño, porque permite encontrar fácilmente
los errores que pueda haber en la
descripción realizada.

 Para realizar la síntesis, se debe seleccionar


el fichero en la ventana “Sources”, y
ejecutar mediante “doble clic” el proceso
“Synthesis” en la ventana “Processes”.

 Si es necesario, también se pueden crear


automáticamente una plantilla de
instanciación en VHDL y un símbolo para el
circuito, mediante los procesos que se
encuentran en el apartado “Design Utilities”.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 348
Síntesis (II)
 Antes de realizar la síntesis, se pueden seleccionar unas opciones distintas
de las que vienen por defecto en el programa, mediante la pulsación del
botón derecho del ratón sobre el proceso que se va a ejecutar, y
seleccionando la opción “Properties”.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 349
Síntesis (III)
 Debemos consultar el informe de síntesis de cada circuito, en el que
encontraremos: avisos, errores, circuitos identificados por el programa
en nuestra descripción, etc.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 350
Síntesis (IV)
 Es posible ver un esquema RTL del circuito mediante el proceso
“Synthesize  View RTL schematic”, pero antes es recomendable activar la
opción del proceso de síntesis “Keep Hierarchy”, indicando el valor “Yes”.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 351
Simulación funcional (I)
 Ahora debemos realizar la simulación funcional de cada
uno de los circuitos.

 Para ello, es necesario describir los vectores de “test” del


circuito mediante un banco de pruebas en VHDL, incluso
cuando vayamos a simular un esquemático.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 352
Simulación funcional (II)
 Para definir un banco de pruebas en VHDL, debemos crear un nuevo
fichero de tipo “VHDL testbench”, mediante el menú “Project  New
Source”, y asociarlo al circuito “sctr4” que queremos simular.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 353
Simulación funcional (III)
 A continuación, completamos la descripción del banco de pruebas del
contador, similar al de la tabla A1.13, del apéndice 1 del libro [ÁLVAREZ
04].

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 354
Simulación funcional (IV)
 Banco de pruebas del contador “sctr4.vhd” (1 de 2).
 La señal de reloj debe tener un período de 20 nanosegundos.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 355
Simulación funcional (V)
 Banco de pruebas del contador “sctr4.vhd” (2 de 2).
 Proceso de estímulos.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 356
Comprobación de errores (II)
 Comprobar la corrección del banco de pruebas VHDL, mediante el
proceso “ISim Simulator –> Behavioral Check syntax”, en la vista
“Simulation”.
 Comprobar los errores en la consola de ISE.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 357
Simulación funcional (VI)
 Para poder realizar la simulación funcional de un circuito, éste debe estar
seleccionado como fichero principal en la vista “Implementation” de la
ventana “Sources”.
 Para ello, si hay más de un fichero, es necesario seleccionar el fichero,
pulsar el botón derecho del ratón y seleccionar la opción “Set as top
module”.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 358
Simulación funcional (VII)
 Para realizar la simulación funcional, se debe seleccionar alguno de los
ficheros de banco de pruebas en la vista “Simulation  Behavioral” de la
ventana “Sources”, y ejecutar mediante “doble clic” el proceso “ISim
Simulator  Simulate Behavioral model” en la ventana “Processes”.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 359
Simulación funcional (VIII)
 Esto ejecuta el programa simulador ISim, que tiene cuatro áreas
diferenciadas, entre ellas la de formas de onda, en la que se observa el
resultado de la simulación.

Instancias y
procesos
Formas de onda
Objetos

Consola

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 360
Simulación funcional (IX)
 Para realizar la simulación completa, debemos ejecutar el
comando “Run all”.
 Para ver mejor los resultados, podemos separar la ventana de
formas de onda, acercar o alejar la imagen y cambiar el índice
de representación de los datos.
 En la simulación funcional del contador se observa la ausencia
de retardos, característica de la simulación funcional.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 361
Implementación (I)
 Ahora es el momento de realizar la implementación del sistema digital.
 Para realizarla, se debe seleccionar el fichero en la vista “Implementation”
de la ventana “Sources”, y ejecutar mediante “doble clic” el proceso
“Implement Design” en la ventana “Processes”.
 También se pueden ir ejecutando uno a uno los distintos procesos que
forman parte de la implementación: “Synthesize-XST”, “Translate”, “Map” y
“Place & Route”.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 362
Implementación (II)
 Antes de realizar la implementación, se pueden seleccionar unas opciones
distintas de las que vienen por defecto en el programa, mediante la
pulsación del botón derecho del ratón sobre el proceso que se va a
ejecutar, y seleccionando la opción “Properties”.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 363
Implementación (III)
 Una vez finalizada la implementación, tanto si hay algún error, como si
termina con éxito, es importante consultar los informes generados.
 El informe más interesante del proceso de implementación es el
correspondiente a la fase de asignación de recursos (“Map report”), en el
que encontraremos avisos, errores y los componentes de la FPGA
necesarios para realizar el sistema digital descrito.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 364
Implementación (IV)
 Otro informe muy importante es el correspondiente a los retardos del
circuito (“Post-PAR Static Timing report”), que nos permitirá saber la
máxima frecuencia de reloj aplicable al circuito para que funcione
correctamente.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 365
Simulación temporal (I)
 Una vez finalizada la implementación del sistema digital, se debe realizar
la simulación temporal del mismo, a la frecuencia de reloj a la que va a
trabajar realmente.
 Para realizar la simulación temporal, se debe seleccionar alguno de los
ficheros de banco de pruebas en la vista “Simulation  Post-Route” de la
ventana “Sources”, y ejecutar mediante “doble clic” el proceso “ISim
Simulator  Post-Place & Route model” en la ventana “Processes”.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 366
Simulación temporal (II)
 Resultado de la simulación temporal del sistema completo, a 50 MHz.
 En ella se observan los retardos del circuito.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 367
Simulación temporal (III)
 En cualquier simulación temporal de un sistema digital implementado en
una FPGA, generalmente observaremos:
 La indefinición de algunas señales de salida en los instantes iniciales de
la simulación.

 Los transitorios que se producen en algunas señales de salida durante


los cambios de estado.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 368
Simulación temporal (IV)
 Por ello, para realizar una simulación temporal correcta, es
necesario seguir las siguientes recomendaciones (I):

 1) En un circuito secuencial (con señal de reloj), en el banco de


pruebas se debe activar siempre en primer lugar la señal de puesta en
estado inicial global (“reset”). Esto permite la inicialización de todos
los circuitos, necesaria para que el programa simulador efectúe los
cálculos posteriores correctamente.

 2) En un circuito secuencial (con señal de reloj), cada valor de las


señales de entrada debe mantenerse estable como mínimo 1 ciclo de
reloj completo. En todo caso, cada valor debe mantenerse un tiempo
igual a un múltiplo entero del ciclo de reloj.
La frecuencia de la señal de reloj utilizada debe ser la misma a la que
vamos a probar el circuito en la placa de desarrollo.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 369
Simulación temporal (V)
 Por ello, para realizar una simulación temporal correcta, es
necesario seguir las siguientes recomendaciones (II):

 3) En un circuito secuencial (con señal de reloj), una vez activada la


señal “reset” durante 1 ciclo de reloj, se debe desactivar para permitir
el funcionamiento del circuito. Una vez desactivada, debemos esperar
al menos 200 nanosegundos antes de activar ninguna otra señal de
entrada, pues los circuitos reales tardan este tiempo en ser
funcionales.

 4) En un circuito secuencial (con señal de reloj), se debe seleccionar


una frecuencia de la señal de reloj de simulación igual a la frecuencia
de la señal de reloj que se va a utilizar en la prueba real del circuito en
la placa de desarrollo.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 370
Descripción (VIII)
 Ahora describiremos de la misma forma un decodificador de binario a 7
segmentos de ÁNODO común en un nuevo fichero denominado
“bin_to_7seg_anodo.vhd”, a partir de la descripción del decodificador de
CÁTODO común de la tabla A2.2 del apéndice 2 del libro [ÁLVAREZ 04].
 Definición de entradas y salidas.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 371
Descripción (IX)
 Arquitectura del decodificador de binario a 7 segmentos.
 Para poder sintetizarlo, se debe seleccionar como fichero principal. Para
ello, se debe pulsar el botón derecho del ratón con el fichero seleccionado
y ejecutar la opción “Set as Top module”.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 372
Simulación temporal (VI)
 El banco de pruebas de un circuito combinacional como éste, no incluye
ninguna señal de reloj.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 373
Simulación temporal (VII)
 Resultado de la simulación temporal del circuito decodificador de binario a
7 segmentos descrito anteriormente.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 374
Descripción (X)
 Una vez definidos los circuitos básicos, podemos interconectarlos
mediante otro fichero VHDL. Para facilitar la tarea, podemos obtener
automáticamente las plantillas de declaración e instanciación.
 Para ello, debemos seleccionar cada circuito y ejecutar el proceso “View
HDL Instantiation Template”, que se encuentra en el apartado “Design
Utilities”.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 375
Descripción (XI)
 Para hacer el fichero principal, debemos crear un nuevo fichero de tipo
“VHDL Module”, mediante el menú “Project  New Source”.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 376
Descripción (XII)
 Ahora definimos los terminales de entrada y salida del fichero principal
“top” que vamos a describir.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 377
Descripción (XIII)
 A continuación, debemos completar la descripción del fichero principal
“top”, declarando e instanciando los circuitos básicos e
interconectándolos adecuadamente.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 378
Descripción (XIV)
 En primer lugar, copiamos las declaraciones de los
componentes básicos y declaramos una señal interna de 4 bits
para interconectarlos.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 379
Descripción (XV)
 En segundo lugar, copiamos las instanciaciones de los
componentes básicos, asignamos la señal interna “ctr_state” a
la salida “q_ctr” y conectamos adecuadamente el resto de
señales de los componentes.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 380
Implementación (V)
 Jerarquía del proyecto, después de la realización del fichero principal. Para
seleccionar un fichero como fichero principal, se debe pulsar el botón
derecho del ratón con el fichero seleccionado y ejecutar la opción “Set as
Top module”.
 Ahora, debemos implementar el circuito “top.vhd”.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 381
Implementación (VI)
 Informe de retardos (“Post-PAR Static Timing report”) del sistema
completo, que nos permitirá saber la máxima frecuencia de reloj aplicable
al circuito para que funcione correctamente.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 382
Simulación temporal (VIII)
 Ahora debemos realizar la simulación temporal del sistema digital completo,
de la misma forma que se han simulado cada uno de los circuitos por
separado.
 Una vez generado el esqueleto del banco de pruebas de forma automática, los
estímulos son muy similares a los del contador, excepto por la presencia de la
nuevas señales de entrada “enable” y “dp_in”.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 383
Simulación temporal (IX)
 Resultado de la simulación temporal del sistema digital completo.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 384
Implementación (VII)
 Es posible ver la distribución interna de la implementación del sistema
digital en la FPGA, mediante la ejecución del proceso “View/Edit Routed
Design (FPGA Editor)”, que se encuentra dentro del proceso “Place &
Route”.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 385
Implementación (VIII)
 Ventana del programa “FPGA Editor”, en el que se observa la distribución
interna de la implementación del sistema digital en la FPGA.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 386
Prueba en la placa (I)
 Antes de probar una aplicación en una determinada placa de
desarrollo en la que se encuentra la FPGA para el que hemos
implementado el sistema digital diseñado, es necesario realizar
las siguientes tareas:

 Añadir circuitos de sincronización, detección de flancos,


temporización, etc., necesarios para que el funcionamiento sea
correcto.

 Asignar los distintos terminales de entrada y salida de nuestro


sistema digital a los terminales físicos de la FPGA que están
conectados a los componentes de la placa que debemos utilizar
(interruptores, pulsadores, LEDs, etc.).
 Esto se hace mediante un fichero de restricciones, tal como se
explicará a continuación.

 Realizar de nuevo la implementación del sistema.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 387
Placa Nexys 2 de Digilent (I)
 Foto de la placa, que contiene una FPGA XC3S500E-FG320-4 de
Xilinx. JTAG

VGA

RS-232

PS2

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 388
Placa Nexys 2 de Digilent (II)
 Diagrama de bloques de la placa.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 389
Placa Nexys 2 de Digilent (III)
 Asignación de
terminales de la
FPGA
correspondient
es a los
componentes
externos de
usuario.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 390
Placa Nexys 2 de Digilent (IV)
 Circuito de acoplamiento de los interruptores de la placa.
 No tienen circuito antirrebotes.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 391
Placa Nexys 2 de Digilent (V)
 Circuito de acoplamiento de los pulsadores de la placa.
 No tienen circuito antirrebotes. Activos a nivel uno.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 392
Placa Nexys 2 de Digilent (VI)
 Circuito de acoplamiento de los LEDs de la placa.
 Los LEDs son activos a nivel uno.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 393
Placa Nexys 2 de Digilent (VII)
 Circuito de acoplamiento del visualizador dinámico de la placa.
Está formado por 4 dígitos de 7 segmentos de ánodo común.
 Ánodos y cátodos son activos a nivel cero.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 394
Placa Nexys 2 de Digilent (VIII)
 Alimentación de la placa.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 395
Placa Nexys 2 de Digilent (IX)
 Programación de la placa.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 396
Placa Nexys 2 de Digilent (X)
 Conectores de expansión de la placa.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 397
Placa Nexys 2 de Digilent (XI)
 Memorias de la placa.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 398
Placa Nexys 2 de Digilent (XII)
 Puerto serie RS232 de la placa.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 399
Placa Nexys 2 de Digilent (XIII)
 Puerto PS2 de la placa.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 400
Placa Nexys 2 de Digilent (XIV)
 Puerto VGA de la placa.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 401
Placa Nexys 2 de Digilent (XV)
 Señales de reloj de la placa.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 402
Placa Nexys 2 de Digilent (XVI)
 Puerto USB de la placa.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 403
Prueba en la placa (II) detector_flancos
top_placa:1

top
clk clk fa_entrada din(3:0) q_ctr(3:0) LED0

Esquema del fichero principal


BTN1 entrada async_reset A A
 BTN3 reset fd_entrada ce B B
clk C C

modificado con los circuitos Inst_detector_flancos_BTN1 dir


dp_in
D
DP
D
DP

necesarios para la prueba del enable


load
sync_reset
E
F
G
E
F
G
sistema en la placa “Nexys 2” de tc LED7

Digilent. Es conveniente que tenga Inst_top

un nombre distinto (“top_placa”) SW4


SW5
SW6
LED1
LED2
LED3

para mantener el circuito original SW7

(“top”).
D_flip_flop gnd
G an0
clk Q
clr
XST_GND
SW0 D

Inst_D_flip_flop_SW0

D_flip_flop vcc
clk Q P an1
clr XST_VCC
SW1 D

Inst_D_flip_flop_SW1

an2
an3

detector_flancos
clk fa_entrada
BTN2 entrada
reset fd_entrada

Inst_detector_flancos_BTN2

detector_flancos
clk fa_entrada
BTN0 entrada
reset fd_entrada

Inst_detector_flancos_BTN0

top_placa

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 404
Prueba en la placa (III)
 Arquitectura del circuito detector de flancos en VHDL (figura 5.3 del libro
[ÁLVAREZ 04]).

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 405
Prueba en la placa (IV)
 Antes de realizar la implementación del sistema modificado
para poder probarlo en la placa, se pueden indicar
diferentes restricciones de diseño, tales como:

 Restricciones de asignación de terminales. Es


IMPRESCINDIBLE, pues permite indicar a qué terminal de
la FPGA se conecta cada señal de entrada o salida del
sistema digital.

 Restricciones temporales. Indican el máximo retardo


deseado para determinadas señales del sistema digital.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 406
Prueba en la placa (V)
 Estas restricciones se pueden definir mediante los procesos que
se encuentran dentro del apartado “User Constraints”, en la
ventana de procesos.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 407
Prueba en la placa (VI)
 En el caso de querer realizar únicamente la asignación de terminales,
puede resultar más sencillo hacerlo a través de un fichero de texto, de
tipo “Implementation Constraints File”, que se crea mediante el menú
“Project  New Source”, y que se asocia automáticamente al fichero
seleccionado como principal (“top_placa.sch” en este ejemplo).
 La sintaxis para asignar terminales dentro de este fichero, de
extensión UCF, es la siguiente:
NET clk LOC = B8;

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 408
Prueba en la placa (VII)
 Fichero “top_placa_Nexys_2.ucf”, de asignación de terminales.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 409
Prueba en la placa (VIII)
 Nueva implementación de “top_placa” ya realizada.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 410
Prueba en la placa (IX)
 Debemos consultar la asignación de terminales en el informe final de
asignación de recursos, antes de probar el circuito en la placa, para
asegurarnos de que todo es correcto y no estropear la placa.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 411
Prueba en la placa (X)
 Ahora, es necesario modificar la opción “FPGA Start-Up Clock” del proceso
“Generate Programming File” en la ventana “Processes”, para poner el
valor “JTAG Clock”.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 412
Prueba en la placa (XI)
 Ahora ya podemos generar el fichero de programación, seleccionando el
fichero que describe el sistema completo (“top_placa.sch” en este ejemplo)
en la ventana “Sources”, y ejecutando mediante “doble clic” el proceso
“Generate Programming File” en la ventana “Processes”.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 413
Programación del circuito iMPACT (I)
 La programación del circuito se puede realizar de distintas formas,
dependiendo de la FPGA elegida y de las características de la placa de
circuito impreso en la que se ubique. El profesor os indicará la que
corresponde hacer en el laboratorio.
 Si se desea realizar la programación mediante el interfaz JTAG del Circuito
Configurable, se puede utilizar la herramienta iMPACT de Xilinx, accesible
mediante la ejecución del proceso “Configure Target Device  Manage
Configuration Project (iMPACT)”, en la ventana de procesos.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 414
Programación del circuito iMPACT (II)
 Ventana de la herramienta iMPACT.
 Primero debemos hacer ejecutar la tarea “Boundary Scan” pinchando dos
veces sobre ella con el ratón.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 415
Programación del circuito iMPACT (III)
 Si tenemos una placa de Digilent compatible y hemos instalado el software
“Adept” y el “plug-in” de Digilent para el software de Xilinx, debemos
ejecutar la opción “Output  Cable Setup”, seleccionar la opción “Open
Cable Plug-in...” y teclear el nombre “digilent_plugin”.
 En caso contrario, omitimos este paso.
 El uso de estos programas nos permite alimentar y programar la placa con
un solo cable USB.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 416
Programación del circuito iMPACT (IV)
 Ahora pulsamos el botón derecho del ratón sobre la zona en blanco de
mayor tamaño y seleccionamos “Initialize Chain”.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 417
Programación del circuito iMPACT (V)
 Ahora pulsamos el botón derecho del ratón sobre la zona en blanco de
mayor tamaño y seleccionamos “Initialize Chain”.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 418
Programación del circuito iMPACT (VI)
 Ahora debemos escoger el fichero de programación “top_placa.bit” del
directorio del proyecto en el que estamos trabajando y pinchar en el botón
“Open”.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 419
Programación del circuito iMPACT (VII)
 Ahora seleccionamos la opción “No”.

 A continuación seleccionamos la opción “Bypass”, porque no vamos a


programar la memoria EEPROM incluida en la placa.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 420
Programación del circuito iMPACT (VIII)
 Por último, aceptamos las opciones por defecto, pinchando en el botón
“Ok”.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 421
Programación del circuito iMPACT (IX)
 Podemos comprobar en la ventana de la herramienta iMPACT que se
observa la FPGA de la placa “Nexys 2” y el fichero de programación
“top_placa.bit”, necesario para la prueba del sistema digital, asociado a la
FPGA.
 Para programar la FPGA, se selecciona el icono de la FPGA y después se
ejecuta el proceso “Program”, pinchando dos veces sobre él.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 422
Programación del circuito Adept (I)
 Si tenemos una placa de Digilent compatible y hemos instalado el
software “Adept” pero no hemos instalado el “plug-in” de Digilent
para el software de Xilinx, también podemos utilizar un único cable
USB para alimentar la placa.
 Ejecutamos el programa “Adept” de Digilent con la placa “Nexys 2”
conectada al ordenador y encendida.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 423
Programación del circuito Adept (II)
 Para programar la FPGA, únicamente debemos seleccionar el fichero
“top_placa.bit” de nuestro proyecto y, a continuación, pinchar en el
botón “Program”.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 424
Prueba en la placa (XII)
 Prueba del sistema digital en la placa “Nexys 2” de Digilent.

ESTADO
CTR

QCTR(3:0)

DIR
ENABLE
ASYNC_RESET
DIN(3:0)
LOAD
CE
TC
SYNC_RESET

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 425
Archivar el proyecto
 Una vez terminado el proyecto, es conveniente archivarlo
mediante la opción “Project  Archive”, que genera un fichero
.ZIP que contiene todos los archivos del proyecto.
 Si se marca la casilla “Exclude generated files from the
archive”, sólo se incluirán los archivos principales y el archivo
comprimido ocupará mucho menos.

16/07/2012 Tutorial FPGAs Foundation ISE. Luis Jacobo Álvarez Ruiz de Ojeda 426
Desarrollo software Picoblaze KCPSM
Índice
 Introducción.
 Sintaxis ensamblador.
 Programa ensamblador KCPSM de Xilinx.
 Directivas KCPSM.
 Ensamblador KCPSM.
 Ejemplo programa ensamblador.
 Ejercicios.

21/05/2012 Desarrollo software Picoblaze KCPSM. Francisco Poza, L. Jacobo Álvarez. 427
Introducción
 Existen dos programas que permiten ensambalr código
para el microprocesador Picoblaze:
 Ensamblador KCPSM de Xilinx.
 Ensamblador y simulador pBlazeIDE de Mediatronix.

 En esta presentación se aborda el estudio del programa


KCPSM de Xilinx.

21/05/2012 Desarrollo software Picoblaze KCPSM. Francisco Poza, L. Jacobo Álvarez. 428
Sintaxis ensamblador (I)
Elementos del lenguaje (I)
 Una línea de programa puede estar formada por los
siguientes elementos separados por espacios en blanco o
tabulaciones.

 Instrucciones de programa.
 Son los mnemónicos correspondientes al juego de
instrucciones del microprocesador.

 Directivas o pseudoinstrucciones.
 Especifican información para el proceso de traducción de
instrucciones. No se traducen a código ejecutable.

21/05/2012 Desarrollo software Picoblaze KCPSM. Francisco Poza, L. Jacobo Álvarez. 429
Sintaxis ensamblador (II)
Elementos del lenguaje (II)
 Etiquetas.
 Cualquier cadena de caracteres definida por el usuario. Un
caso especial son las etiquetas asociadas a líneas de
código, que deben finalizar con el carácter “:”.
 Son sensibles a mayúsculas y minúsculas, y no generan
código ejecutable.
 Caracteres válidos son 0-9, a-z y A-Z y “_”

 Comentarios.
 Texto adicional que ayuda a interpretar el algoritmo
programado. No genera código ejecutable.

21/05/2012 Desarrollo software Picoblaze KCPSM. Francisco Poza, L. Jacobo Álvarez. 430
Sintaxis ensamblador (III)
Línea de programa (formato general) (1)
[etiqueta:] mnemónico operando1 [,operando2] [;comentario]

 Etiqueta: Identificador de línea. Permite referirse a una instrucción


o dato sin conocer la posición de memoria que ocupa.

 Mnemónico: Identificador del código de operación.

 Operando: Dato que procesa la instrucción. El número de


operandos (1 o 2) depende de la instrucción en particular. Deben
separarse por “,”.

 Comentario: Texto que ayuda a interpretar la misión de la


instrucción. Debe comenzar con el carácter “;”

21/05/2012 Desarrollo software Picoblaze KCPSM. Francisco Poza, L. Jacobo Álvarez. 431
Sintaxis ensamblador (IV)
Línea de programa (formato general) (2)
 Los operandos pueden ser:

 Símbolos específicos del ensamblador.


 Z, NZ, C, NC, ENABLE, DISABLE, INTERRUPT.
 Nombres de registros.
• Se definen con la letra “s” seguida por un dígito hexadecimal.
• El ensamblador acepta mezcla de mayúsculas y minúsculas
aunque las convierte al formato “sX” (X es un dígito
hexadecimal de 0 a 9 o A a F).

 Constantes numéricas.
• Siempre se especifican como dos dígitos hexadecimales (de 00
a FF).
• El ensamblador acepta mezcla de mayúsculas y minúsculas
aunque las convierte automáticamente a mayúsculas.

21/05/2012 Desarrollo software Picoblaze KCPSM. Francisco Poza, L. Jacobo Álvarez. 432
Sintaxis ensamblador (V)
Línea de programa (formato general) (3)
 Ejemplos:
 JUMP C, fin_bucle ; Si el acarreo es 1, salta a “fin_bucle”

 JUMP NZ, fin ; Si el resultado no es 0, salta a “fin”

 RETURNI ENABLE ; Retorno de interrupción


; habilitando las interrupciones

 SL0 s1 ; Desplaza 1 bit a la izquierda el


; contenido de s1

 ADD s0, 10 ; Suma 10 al contenido de s0

21/05/2012 Desarrollo software Picoblaze KCPSM. Francisco Poza, L. Jacobo Álvarez. 433
Entorno KCPSM de Xilinx (I)
 A continuación se explica el funcionamiento del
programa KCPSM de Xilinx para la edición y
ensamblado de programas escritos en lenguaje
ensamblador para el microprocesador Picoblaze.

21/05/2012 Desarrollo software Picoblaze KCPSM. Francisco Poza, L. Jacobo Álvarez. 434
Directivas KCPSM (I)

 Situar código en una dirección determinada


 ADDRESS dirección
 Ejemplos:
 ADDRESS FF

 Renombrar registros
 NAMEREG nombre_registro, alias_registro
 Ejemplos:
 NAMEREG s5, contador

21/05/2012 Desarrollo software Picoblaze KCPSM. Francisco Poza, L. Jacobo Álvarez. 435
Directivas KCPSM (II)
 Definir constantes
 CONSTANT nombre_constante, valor_constante
 Ejemplos:
 CONSTANT limite, $55

 Nombre del fichero de definición de la memoria de


programa
 El nombre es el mismo que el del archivo fuente

21/05/2012 Desarrollo software Picoblaze KCPSM. Francisco Poza, L. Jacobo Álvarez. 436
Ensamblador KCPSM (I)
 Es un programa ejecutable para MS-DOS
 Hay un ensamblador distinto para cada versión del
microprocesador:
 KCPSM.EXE
 KCPSM2.EXE
 KCPSM3.EXE
 Se suministra con tres plantillas, que deben copiarse en el
mismo directorio del ensamblador:
• ROM_form.vhd
• ROM_form.v
• ROM_form.coe
 Archivos fuente con extensión .psm (el nombre debe
limitarse a 8 caracteres).
 Ejecución:
 kcpsm3 <archivo_fuente>[.psm] > salida_pantalla.txt

21/05/2012 Desarrollo software Picoblaze KCPSM. Francisco Poza, L. Jacobo Álvarez. 437
Ensamblador KCPSM (II)
Ficheros asociados (1)

21/05/2012 Desarrollo software Picoblaze KCPSM. Francisco Poza, L. Jacobo Álvarez. 438
Ensamblador KCPSM (III)
Ficheros asociados (2)
 Ficheros de entrada
 <filename>.psm
 Fichero fuente con el programa escrito en
ensamblador, utilizando cualquier editor de texto
plano.
 ROM_form.vhd, ROM_form.v

 Plantillas para generar los archivos VHDL y Verilog


que describen la memoria de código.
 ROM_form.coe

 Plantilla para generar el archivo de coeficientes de la


memoria de código para el Core Generator.

21/05/2012 Desarrollo software Picoblaze KCPSM. Francisco Poza, L. Jacobo Álvarez. 439
Ensamblador KCPSM (IV)
Ficheros asociados (3)
 Ficheros de salida
 <filename>.vhd, <filename>.v
 Archivos VHDL y Verilog que definen la memoria de
código y su contenido.
 <filename>.coe
 Archivo de coeficientes para la memoria de código
(para Core Generator).
 <filename>.m
 Define el contenido de la memoria de código para el
System Generator (entorno Matlab-Simulink).
 <filename>.fmt
 Es el mismo fichero fuente original pero formateado.

21/05/2012 Desarrollo software Picoblaze KCPSM. Francisco Poza, L. Jacobo Álvarez. 440
Ensamblador KCPSM (V)
Ficheros asociados (4)
 Ficheros de salida
 <filename>.log
 Archivo de listado donde se incluyen, junto a cada
línea del programa fuente, la dirección de memoria y
el código máquina correspondiente.
 constant.txt y labels.txt
 Listan todas las constantes y sus valores asociados, y
todas las etiquetas y sus direcciones asociadas,
respectivamente.
 pass.dat
 Son archivos internos del ensamblador y representan
distintos pasos intermedios en el proceso de
ensamblado

21/05/2012 Desarrollo software Picoblaze KCPSM. Francisco Poza, L. Jacobo Álvarez. 441
Ensamblador KCPSM (VI)
Ficheros asociados (5)
 Ficheros de salida
 <filename>.hex
 Define el contenido de la memoria de código en
formato hexadecimal.

 <filename>.dec
 Define el contenido de la memoria de código en
formato decimal.

21/05/2012 Desarrollo software Picoblaze KCPSM. Francisco Poza, L. Jacobo Álvarez. 442
Ejemplo programa ensamblador (I)

21/05/2012 Desarrollo software Picoblaze KCPSM. Francisco Poza, L. Jacobo Álvarez. 443
Ejemplo programa ensamblador (II)
Plantilla de programa
NAMEREG sX, <nombre> ; Renombra sX con <nombre>
CONSTANT <nombre>, 00 ; Define la constante <nombre> y le asigna el valor 0

; Fichero ROM de salida se llama siempre <nombre_fuente>.vhd

ADDRESS 000 ; Inicia el programa en la dirección 0, ya se hace por defecto

ENABLE INTERRUPT ; Para utilizar interrupciones hay que permitirlas

INICIO:
; Código del programa
JUMP INICIO ; Una aplicación empotrada nunca termina

ISR: ; Rutina de atención de interrupción


; Las interrupciones se inhiben automáticamente al entrar en esta rutina
; No permitir las interrupciones dentro de la rutina de atención de interrupción

RETURNI ENABLE ; Retorno de la rutina de atención de interrupción permitiendo las


; interrupciones. Para mantenerlas inhibidas RETURNI DISABLE

ADDRESS 3FF ; El vector de interrupción está situado en la última dirección de memoria


JUMP ISR ; Salta a la rutina de atención de interrupción

21/05/2012 Desarrollo software Picoblaze KCPSM. Francisco Poza, L. Jacobo Álvarez. 444
Ejercicios (I).
 CONVERSIÓN DE BINARIO A BCD.
 Convertir un número binario de 8 bits comprendido entre 0 y 99,
introducido a través del puerto de entrada INTERRUPTORES (x“01”),
correspondiente a 8 interruptores de la placa de desarrollo, en un
número BCD de 2 dígitos, que se visualizará en dos dígitos de 7
segmentos a través del puerto de salida VISUALIZADOR (x“02”).

 Realizar una subrutina denominada “binario2BCD” que realice la


conversión.
 Realizar un programa principal que lea continuamente el valor del
puerto de entrada, lo convierta a BCD y lo envíe al puerto de salida.

 Utilizar los siguientes registros:


 s0 para guardar inicialmente el valor binario de los interruptores y
operar.
 s1 para operar y guardar el valor final BCD.

21/05/2012 Desarrollo software Picoblaze KCPSM. Francisco Poza, L. Jacobo Álvarez. 445
Ejercicios (II).
 CONTADOR EN TIEMPO REAL.
 Diseñar un contador de segundos y centésimas en tiempo real, que se
visualizará en cuatro dígitos de 7 segmentos a través de los puertos de
salida SEGUNDOS (x”01”) y CENTESIMAS (x“02”).

 Se dispone de una fuente de interrupción periódica que pide una


interrupción cada milisegundo.

 Se debe utilizar la rutina de conversión de binario a BCD realizada


anteriormente.

 Utilizar los siguientes registros:


 s0 y s1 para la rutina de conversión de binario a BCD.

 sB, sC y sD para guardar el valor de las milésimas de segundo,


centésimas de segundo y segundos, respectivamente.

21/05/2012 Desarrollo software Picoblaze KCPSM. Francisco Poza, L. Jacobo Álvarez. 446
Ejercicios (III).
 Otras rutinas útiles:
 Convertir minúsculas a mayúsculas o viceversa.
 Convertir hexadecimal a ASCII o viceversa.

 Convertir decimal a ASCII o viceversa.

21/05/2012 Desarrollo software Picoblaze KCPSM. Francisco Poza, L. Jacobo Álvarez. 447
Desarrollo software Picoblaze IDE
Índice
 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.

21/05/2012 Desarrollo software Picoblaze IDE. Francisco Poza, L. Jacobo Álvarez. 449
Introducción
 Existen dos programas que permiten ensambalr código
para el microprocesador Picoblaze:
 Ensamblador KCPSM de Xilinx.
 Ensamblador y simulador pBlazeIDE de Mediatronix.

 En esta presentación se aborda el estudio del programa


pBlazeIDE de Mediatronix.

21/05/2012 Desarrollo software Picoblaze IDE. Francisco Poza, L. Jacobo Álvarez. 450
Sintaxis ensamblador (I)
Elementos del lenguaje (I)
 Una línea de programa puede estar formada por los
siguientes elementos separados por espacios en blanco o
tabulaciones.

 Instrucciones de programa.
 Son los mnemónicos correspondientes al juego de
instrucciones del microprocesador.

 Directivas o pseudoinstrucciones.
 Especifican información para el proceso de traducción de
instrucciones. No se traducen a código ejecutable.

21/05/2012 Desarrollo software Picoblaze IDE. Francisco Poza, L. Jacobo Álvarez. 451
Sintaxis ensamblador (II)
Elementos del lenguaje (II)
 Etiquetas.
 Cualquier cadena de caracteres definida por el usuario. Un
caso especial son las etiquetas asociadas a líneas de
código, que deben finalizar con el carácter “:”.
 Son sensibles a mayúsculas y minúsculas, y no generan
código ejecutable.
 Caracteres válidos son 0-9, a-z y A-Z y “_”

 Comentarios.
 Texto adicional que ayuda a interpretar el algoritmo
programado. No genera código ejecutable.

21/05/2012 Desarrollo software Picoblaze IDE. Francisco Poza, L. Jacobo Álvarez. 452
Sintaxis ensamblador (III)
Línea de programa (formato general) (1)
[etiqueta:] mnemónico operando1 [,operando2] [;comentario]

 Etiqueta: Identificador de línea. Permite referirse a una instrucción


o dato sin conocer la posición de memoria que ocupa.

 Mnemónico: Identificador del código de operación.

 Operando: Dato que procesa la instrucción. El número de


operandos (1 o 2) depende de la instrucción en particular. Deben
separarse por “,”.

 Comentario: Texto que ayuda a interpretar la misión de la


instrucción. Debe comenzar con el carácter “;”

21/05/2012 Desarrollo software Picoblaze IDE. Francisco Poza, L. Jacobo Álvarez. 453
Sintaxis ensamblador (IV)
Línea de programa (formato general) (2)
 Los operandos pueden ser:

 Símbolos específicos del ensamblador.


 Z, NZ, C, NC, ENABLE, DISABLE, INTERRUPT.
 Nombres de registros.
• Se definen con la letra “s” seguida por un dígito hexadecimal.
• El ensamblador acepta mezcla de mayúsculas y minúsculas
aunque las convierte al formato “sX” (X es un dígito
hexadecimal de 0 a 9 o A a F).

 Constantes numéricas.
• Siempre se especifican como dos dígitos hexadecimales (de 00
a FF).
• El ensamblador acepta mezcla de mayúsculas y minúsculas
aunque las convierte automáticamente a mayúsculas.

21/05/2012 Desarrollo software Picoblaze IDE. Francisco Poza, L. Jacobo Álvarez. 454
Sintaxis ensamblador (V)
Línea de programa (formato general) (3)
 Ejemplos:
 JUMP C, fin_bucle ; Si el acarreo es 1, salta a “fin_bucle”

 JUMP NZ, fin ; Si el resultado no es 0, salta a “fin”

 RETI ENABLE ; Retorno de interrupción


; habilitando las interrupciones

 SL0 s1 ; Desplaza 1 bit a la izquierda el


; contenido de s1

 ADD s0, 10 ; Suma 10 al contenido de s0

21/05/2012 Desarrollo software Picoblaze IDE. Francisco Poza, L. Jacobo Álvarez. 455
Entorno pBlazeIDE de Mediatronix (I)
 A continuación se explica el funcionamiento del
programa pBlazeIDE de Mediatronix para la edición,
ensamblado y simulación de programas escritos en
lenguaje ensamblador para el microprocesador
Picoblaze.

21/05/2012 Desarrollo software Picoblaze IDE. Francisco Poza, L. Jacobo Álvarez. 456
Directivas pBlazeIDE (I)
 Situar código en una dirección determinada
 ORG dirección
 Ejemplos:
 ORG $3FF
 ORG 1023

 Renombrar registros
 alias_registro EQU nombre_registro
 Ejemplos:
 centenas EQU s5

21/05/2012 Desarrollo software Picoblaze IDE. Francisco Poza, L. Jacobo Álvarez. 457
Directivas pBlazeIDE (II)

 Definir constantes
 nombre_constante EQU valor_constante
 Ejemplos:
 cantidad EQU $55

 Nombre del fichero de definición de la memoria de


programa
 VHDL nombre_plantilla, nombre_fichero, nombre_entidad
 Ejemplos:
 VHDL “ROM_blank.vhd”, “picocode.vhd”, “picocode”

21/05/2012 Desarrollo software Picoblaze IDE. Francisco Poza, L. Jacobo Álvarez. 458
Directivas pBlazeIDE (III)
 Definir puertos de entrada (sólo lectura)
 nombre_puerto DSIN id_puerto [, “nombre_fichero”]
 Ejemplos:
 interruptores DSIN $03, “entrada_interruptores.txt”
 Cada vez que se lee el puerto se toma un valor del archivo de
entrada. Cada valor debe estar en una línea (por defecto los
valores son decimales, para introducir valores en hexadecimal
deben ir precedidos del símbolo $).

21/05/2012 Desarrollo software Picoblaze IDE. Francisco Poza, L. Jacobo Álvarez. 459
Directivas pBlazeIDE (IV)
 Definir puertos de salida (sólo escritura)
 nombre_puerto DSOUT id_puerto [, “nombre_fichero”]
 Ejemplos:
 LEDs DSOUT $01, “salida_leds.txt”
 Cada vez que se escribe en el puerto se guarda el valor en el
archivo. Los valores se guardan en hexadecimal.

21/05/2012 Desarrollo software Picoblaze IDE. Francisco Poza, L. Jacobo Álvarez. 460
Directivas pBlazeIDE (V)
 Definir puertos de entrada/salida (lectura y escritura)
 nombre_puerto DSIO id_puerto [, “nombre_fichero_salida”]
 Se visualizan en la simulación.
 Ejemplos:
 prueba DSIO $05, “salida_prueba.txt”
 Cada vez que se escribe en el puerto se guarda el valor en el
archivo. Los valores se guardan en hexadecimal.

21/05/2012 Desarrollo software Picoblaze IDE. Francisco Poza, L. Jacobo Álvarez. 461
Directivas pBlazeIDE (VI)
 Creación de archivos de inicialización de la memoria de
programa
 COE “nombre_archivo”, tamaño_palabra
 Permite generar un archivo de coeficientes (COE) que puede
utilizarse con el “Core Generator” de ISE.
 Permite especificar el nombre del archivo y el tamaño de la
palabra.
 Ejemplos:
 COE “memoria_codigo.coe”, 16

 Creación de archivos de tipo MEM para la herramienta


Data2MEM de ISE.
 MEM “nombre_archivo”
 Ejemplos:
 MEM “memoria_codigo.mem”

21/05/2012 Desarrollo software Picoblaze IDE. Francisco Poza, L. Jacobo Álvarez. 462
Directivas pBlazeIDE (VII)
 Ejecución de comandos
 EXEC “comando”
 El comando especificado se ejecuta después de todas las
funciones realizadas por el ensamblador.
 Solamente se puede especificar un comando, aunque puede
ser un archivo por lotes (.bat)
 Ejemplos:
 EXEC “impact –batch comandos.cmd”

 Creación de memorias ROM basadas en BlockRAM


 nombre_bloque BROM dirección_puerto, tamaño_bytes,
“fichero_inicialización
 Ejemplos:
 tabla BROM $50, 1024, “tabla.mem”

21/05/2012 Desarrollo software Picoblaze IDE. Francisco Poza, L. Jacobo Álvarez. 463
Directivas pBlazeIDE (VIII)
 Definir puertos de entrada/salida (lectura y escritura)
 nombre_puerto DS id_puerto
 No se visualizan en la simulación.
 Ejemplos:
 prueba DS $10

 Definir bloques de memoria RAM16 para utilizar como ROM


o RAM
 nombre_bloque DSROM direccion_base, dato1, ….
 nombre_bloque DSRAM direccion_base
 El parámetro “direccion_base” tiene que ser múltiplo de $10
 Ejemplos:
 Tabla DSROM $20, 0, 1, 2, 3, 4, 5, 6 ,7, 8, 9, 10, 11, 12, 13, 14, 15
 Buffer DSRAM $50

21/05/2012 Desarrollo software Picoblaze IDE. Francisco Poza, L. Jacobo Álvarez. 464
Directivas pBlazeIDE (IX)
 Incluir archivos
 INCL “fichero1” [, ”fichero2” ….]
 Incluye los archivos especificados en el archivo fuente
 En los archivos a incluir solamente se pueden utilizar definiciones
básicas.
 Ejemplos:
 INCL “defs.inc”, “io.inc”

21/05/2012 Desarrollo software Picoblaze IDE. Francisco Poza, L. Jacobo Álvarez. 465
Entorno pBlazeIDE (II)
 Seleccionar en el menú “Settings” el Picoblaze adecuado.
 Ejecutar “Assemble & Simulate”.

21/05/2012 Desarrollo software Picoblaze IDE. Francisco Poza, L. Jacobo Álvarez. 466
Menús entorno pBlazeIDE (I)
Menú File

Crea un nuevo documento


Abre un documento existente

Lista los 5 archivos utilizados más recientemente

Importa fuente en formato KCPSM de Xilinx


Crea un nuevo archivo con formato HTML

Guarda el documento en archivo


Guarda el documento en un nuevo archivo

Cierra el documento actual

Cierra todos los documentos abiertos

Muestra como se imprimirá el documento


Imprime el documento

Cierra todos los documentos abiertos y sale

21/05/2012 Desarrollo software Picoblaze IDE. Francisco Poza, L. Jacobo Álvarez. 467
Menús entorno pBlazeIDE (II)
Menú Edit

Deshace acciones en el documento actual

Rehace acciones en el documento actual

Corta la selección y la pasa al portapapeles

Copia la selección y la pasa al portapapeles

Pega el portapapeles en el documento actual

Borra la selección

Selecciona todo el texto del documento actual

Busca una cadena en el documento

Busca la cadena dada hacia adelante

Busca la cadena dada hacia atrás

Reemplaza una cadena por otra

21/05/2012 Desarrollo software Picoblaze IDE. Francisco Poza, L. Jacobo Álvarez. 468
Menús entorno pBlazeIDE (III)
Menú View

Muestra/oculta la barra de estado

Muestra/oculta el panel de log

Muestra/oculta nombres botones barra herramientas

21/05/2012 Desarrollo software Picoblaze IDE. Francisco Poza, L. Jacobo Álvarez. 469
Menús entorno pBlazeIDE (IV)
Menú Settings

Abre la ventana Settings

No implementada

Selecciona Picoblaze I (Spartan-II(e) y Virtex)


Selecciona Picoblaze II (Virtex II)
Selecciona Picoblaze 3 (Spartan-III)
Selecciona Picoblaze (Coolrunner)

No implementada

21/05/2012 Desarrollo software Picoblaze IDE. Francisco Poza, L. Jacobo Álvarez. 470
Menús entorno pBlazeIDE (V)
Menú Simulate

Ensambla el documento y arranca la simulación / Pasa a modo edición

Inicializa el PC y el SP del micro. Los registros se mantienen

Ejecuta la simulación. Para si se pulsa Reset, Pause, Step o hay error

Ejecuta solamente la siguiente instrucción

No entra en las subrutinas


Ejecuta hasta la línea en la que se encuentre el cursor

Detiene la ejecución de la simulación


Activa/borra punto de ruptura en la línea del cursor

Elimina todos los puntos de ruptura

21/05/2012 Desarrollo software Picoblaze IDE. Francisco Poza, L. Jacobo Álvarez. 471
Menús entorno pBlazeIDE (VI)
Menú Help

No implementada

Visualiza la ventana About

21/05/2012 Desarrollo software Picoblaze IDE. Francisco Poza, L. Jacobo Álvarez. 472
Ejemplo programa ensamblador (I)

21/05/2012 Desarrollo software Picoblaze IDE. Francisco Poza, L. Jacobo Álvarez. 473
Ejemplo programa ensamblador (II)
Plantilla de programa
<nombre> EQU sX ; Renombra sX con <nombre>
<nombre> EQU 00 ; Define la constante <nombre> y le asigna el valor 0

; Fichero ROM de salida generado por pBlazeIDE


VHDL “plantilla.vhd”, “fichero_ROM.vhd”, “nombre_entidad”

<nombre> DSIN <id_puerto> ; Crea un puerto de entrada y le asigna una dirección


<nombre> DSOUT <id_puerto> ; Crea un puerto de salida y le asigna una dirección
<nombre> DSIO <id_puerto> ; Crea un puerto de entrada/salida y le asigna una dirección

ORG 0 ; Inicia el programa en la dirección 0, ya se hace por defecto


EINT ; Para utilizar interrupciones hay que permitirlas

INICIO:
; Código del programa
JUMP INICIO ; Una aplicación empotrada nunca termina

ISR: ; Rutina de atención de interrupción


; Las interrupciones se inhiben automáticamente al entrar en esta rutina
; No permitir las interrupciones dentro de la rutina de atención de interrupción
RETI ENABLE ; Retorno de la rutina de atención de interrupción permitiendo las
; interrupciones. Para mantenerlas inhibidas RETI DISABLE

ORG $3FF ; El vector de interrupción está situado en la última dirección de memoria


JUMP ISR ; Salta a la rutina de atención de interrupción

21/05/2012 Desarrollo software Picoblaze IDE. Francisco Poza, L. Jacobo Álvarez. 474
Simulación con pBlazeIDE (I)
 Ventajas e inconvenientes de utilizar pBlazeIDE.

21/05/2012 Desarrollo software Picoblaze IDE. Francisco Poza, L. Jacobo Álvarez. 475
Simulación con pBlazeIDE (II)
 Seleccionar en el menú “Settings” el Picoblaze adecuado.
 Seleccionar la opción de menú “Simulate -> Simulate”.

21/05/2012 Desarrollo software Picoblaze IDE. Francisco Poza, L. Jacobo Álvarez. 476
Diferencias entre pBlazeIDE y KCPSM (I)
• Instrucciones.
KCPSM3 pBlazeIDE
RETURN [C | NC | Z | NZ] RET [C | NC | Z | NZ]
RETURNI [ENABLE | DISABLE] RETI [ENABLE | DISABLE]
INPUT [sX, kk | sX, (sY)] IN [sX, kk | sX, sY]
OUTPUT [sX, kk | sX, (sY)] OUT [sX, kk | sX, sY]
ADDCY ADDC
SUBCY SUBC
ENABLE INTERRUPT EINT
DISABLE INTERRUPT DINT
COMPARE COMP
STORE sX, (sY) STORE sX, sY
FETCH sX, (sY) FETCH sX, sY
21/05/2012 Desarrollo software Picoblaze IDE. Francisco Poza, L. Jacobo Álvarez. 477
Diferencias entre pBlazeIDE y KCPSM (II)
• Ejemplo programa ensamblador en ambos formatos.

21/05/2012 Desarrollo software Picoblaze IDE. Francisco Poza, L. Jacobo Álvarez. 478
Diferencias entre pBlazeIDE y KCPSM (III)
• Otras diferencias.
 Etiquetas
 pBlazeIDE.
 En las etiquetas no se distingue entre mayúsculas y
minúsculas.
 KCPSM.
 Las etiquetas son sensibles a mayúsculas y minúsculas.
 Hay que tenerlo en cuenta cuando se importa un programa
realizado con el ensamblador de Xilinx.

 Constantes numéricas
 PBlazeIDE.
 Por defecto se representan en decimal, para representarlas en
hexadecimal hay que precederlas del símbolo “$”.
 KCPSM.
 Siempre se representan con dos dígitos hexadecimales.

21/05/2012 Desarrollo software Picoblaze IDE. Francisco Poza, L. Jacobo Álvarez. 479
Ejercicios (I).
 CONVERSIÓN DE BINARIO A BCD.
 Convertir un número binario de 8 bits comprendido entre 0 y 99,
introducido a través del puerto de entrada INTERRUPTORES (x“01”),
correspondiente a 8 interruptores de la placa de desarrollo, en un
número BCD de 2 dígitos, que se visualizará en dos dígitos de 7
segmentos a través del puerto de salida VISUALIZADOR (x“02”).

 Realizar una subrutina denominada “binario2BCD” que realice la


conversión.
 Realizar un programa principal que lea continuamente el valor del
puerto de entrada, lo convierta a BCD y lo envíe al puerto de salida.

 Utilizar los siguientes registros:


 s0 para guardar inicialmente el valor binario de los interruptores y
operar.
 s1 para operar y guardar el valor final BCD.

21/05/2012 Desarrollo software Picoblaze IDE. Francisco Poza, L. Jacobo Álvarez. 480
Ejercicios (II).
 CONTADOR EN TIEMPO REAL.
 Diseñar un contador de segundos y centésimas en tiempo real, que se
visualizará en cuatro dígitos de 7 segmentos a través de los puertos de
salida SEGUNDOS (x”01”) y CENTESIMAS (x“02”).

 Se dispone de una fuente de interrupción periódica que pide una


interrupción cada milisegundo.

 Se debe utilizar la rutina de conversión de binario a BCD realizada


anteriormente.

 Utilizar los siguientes registros:


 s0 y s1 para la rutina de conversión de binario a BCD.

 sB, sC y sD para guardar el valor de las milésimas de segundo,


centésimas de segundo y segundos, respectivamente.

21/05/2012 Desarrollo software Picoblaze IDE. Francisco Poza, L. Jacobo Álvarez. 481
Ejercicios (III).
 Otras rutinas útiles:
 Convertir minúsculas a mayúsculas o viceversa.
 Convertir hexadecimal a ASCII o viceversa.

 Convertir decimal a ASCII o viceversa.

21/05/2012 Desarrollo software Picoblaze IDE. Francisco Poza, L. Jacobo Álvarez. 482
Circuitos de acoplamiento de periféricos
del microcontrolador Picoblaze
Índice
 Introducción.

 Circuitos de selección de periféricos de entrada.

 Circuitos de selección de periféricos de salida.

 Circuitos de gestión de interrupciones.

11/07/2012 Circuitos de acoplamiento de periféricos. L. Jacobo Álvarez, Francisco Poza. 483


Introducción.
 A continuación vamos a diseñar algunos de los circuitos de
interfaz necesarios para conectar el microprocesador
Picoblaze a los distintos periféricos de entrada y de salida
que sean necesarios en cada aplicación.

 Los circuitos que vamos a realizar son, por tanto,


genéricos, es decir, deben servir para cualquier aplicación.

 Para realizarlos, debemos describirlos mediante cualquiera


de las formas que permite la herramienta Foundation ISE de
Xilinx: VHDL, esquemáticos, etc.

11/07/2012 Circuitos de acoplamiento de periféricos. L. Jacobo Álvarez, Francisco Poza. 484


Circuitos de selección de entradas (I).
 Circuito de interfaz básico recomendado para la conexión de 8
periféricos de entrada al microprocesador, mediante un
multiplexor.

11/07/2012 Circuitos de acoplamiento de periféricos. L. Jacobo Álvarez, Francisco Poza. 485


Circuitos de selección de entradas (II).
 Simulación del circuito de interfaz recomendado para la conexión
de 8 periféricos de entrada al microprocesador mediante un
multiplexor con codificación 1 entre N, con t_check_outputs = 10
ns, t_assign_inputs = 50 ns.

11/07/2012 Circuitos de acoplamiento de periféricos. L. Jacobo Álvarez, Francisco Poza. 486


Circuitos de selección de entradas (III).
 Simulación del circuito de interfaz recomendado para la conexión
de 8 periféricos de entrada al microprocesador mediante un
multiplexor con codificación binaria, con t_check_outputs = 10 ns,
t_assign_inputs = 50 ns.

11/07/2012 Circuitos de acoplamiento de periféricos. L. Jacobo Álvarez, Francisco Poza. 487


Circuito de selección básico (I).
 Circuito de interfaz básico para la conexión de 8 periféricos de
entrada realizado con codificación 1 entre N.
 Descripción.

11/07/2012 Circuitos de acoplamiento de periféricos. L. Jacobo Álvarez, Francisco Poza. 488


Circuito de selección básico (II).
 Circuito de interfaz básico para la conexión de 8 periféricos de
entrada realizado con codificación 1 entre N.
 Recursos utilizados.

11/07/2012 Circuitos de acoplamiento de periféricos. L. Jacobo Álvarez, Francisco Poza. 489


Circuito de selección básico (III).
 Circuito de interfaz básico para la conexión de 8 periféricos de
entrada realizado con codificación binaria utilizando los 8 bits del
vector “port_id”.
 Descripción.

11/07/2012 Circuitos de acoplamiento de periféricos. L. Jacobo Álvarez, Francisco Poza. 490


Circuito de selección básico (IV).
 Circuito de interfaz básico para la conexión de 8 periféricos de
entrada realizado con codificación binaria utilizando los 8 bits del
vector “port_id”.
 Recursos utilizados.

11/07/2012 Circuitos de acoplamiento de periféricos. L. Jacobo Álvarez, Francisco Poza. 491


Circuito de selección básico (V).
 Circuito de interfaz básico para la conexión de 8 periféricos de
entrada realizado con codificación binaria utilizando sólo 3 bits del
vector “port_id”.
 Descripción.

11/07/2012 Circuitos de acoplamiento de periféricos. L. Jacobo Álvarez, Francisco Poza. 492


Circuito de selección básico (VI).
 Circuito de interfaz básico para la conexión de 8 periféricos de
entrada realizado con codificación binaria utilizando sólo 3 bits del
vector “port_id”.
 Recursos utilizados.

11/07/2012 Circuitos de acoplamiento de periféricos. L. Jacobo Álvarez, Francisco Poza. 493


Circuitos de selección de entradas (IV).
 Circuito de interfaz recomendado para la conexión de 8 periféricos
de entrada al microprocesador con multiplexor + registro, con
codificación 1 entre N.

11/07/2012 Circuitos de acoplamiento de periféricos. L. Jacobo Álvarez, Francisco Poza. 494


Circuitos de selección de entradas (V).
 Simulación del circuito de interfaz recomendado para la conexión
de 8 periféricos de entrada al microprocesador con multiplexor +
registro, con codificación 1 entre N, con fclk = 25 MHz, tsetup = 15
ns, tout = 10 ns.

11/07/2012 Circuitos de acoplamiento de periféricos. L. Jacobo Álvarez, Francisco Poza. 495


Circuitos de selección de entradas (VI).
 Circuito de interfaz recomendado para la conexión de 16
periféricos de entrada al microprocesador con multiplexor +
registro, con codificación binaria.

11/07/2012 Circuitos de acoplamiento de periféricos. L. Jacobo Álvarez, Francisco Poza. 496


Circuitos de selección de entradas (VII).
 El circuito debe responder a este esquema básico, realizado sólo
para 4 periféricos de entrada.

11/07/2012 Circuitos de acoplamiento de periféricos. L. Jacobo Álvarez, Francisco Poza. 497


Circuitos de selección de entradas (VIII).
 Simulación del circuito de interfaz recomendado para la conexión
de 16 periféricos de entrada al microprocesador con multiplexor +
registro, con codificación binaria, con fclk = 25 MHz, tsetup = 15
ns, tout = 10 ns.

11/07/2012 Circuitos de acoplamiento de periféricos. L. Jacobo Álvarez, Francisco Poza. 498


Circuitos de selección de entradas (IX).
 Circuito de interfaz recomendado para la conexión de 8 periféricos
de entrada al microprocesador con multiplexor + registro, con
codificación binaria.

seleccion_binaria_8_perifericos_entrada_con_registro
port_id(7:0) in_port(7:0)
puerto_00_in(7:0)
puerto_01_in(7:0)
puerto_02_in(7:0)
puerto_03_in(7:0)
puerto_04_in(7:0)
puerto_05_in(7:0)
puerto_06_in(7:0)
puerto_07_in(7:0)
clk_micro
reset

11/07/2012 Circuitos de acoplamiento de periféricos. L. Jacobo Álvarez, Francisco Poza. 499


Circuitos de selección de entradas (X).
 El circuito debe responder a este esquema básico, realizado sólo
para 4 periféricos de entrada.

11/07/2012 Circuitos de acoplamiento de periféricos. L. Jacobo Álvarez, Francisco Poza. 500


Circuitos de selección de entradas (XI).
 Esquema de bloques interno del circuito de interfaz recomendado
para la conexión de 8 periféricos de entrada al microprocesador
con multiplexor + registro, con codificación binaria.

seleccion_binaria_8_perifericos_entrada_con_registro:1

mux8c_8b register_8_bits
puerto_00_in(7:0) canal_0_entrada(7:0) mux_out(7:0) d(7:0) q(7:0) in_port(7:0)
puerto_01_in(7:0) canal_1_entrada(7:0) ce
puerto_02_in(7:0) canal_2_entrada(7:0) clk
puerto_03_in(7:0) canal_3_entrada(7:0) reset
puerto_04_in(7:0) canal_4_entrada(7:0)
puerto_05_in(7:0) canal_5_entrada(7:0) Inst_register_8_bits_muxout
puerto_06_in(7:0) canal_6_entrada(7:0)
puerto_07_in(7:0) canal_7_entrada(7:0)
port_id(7:0) sel(2:0)

Inst_mux8c_8b Debido a un error en el visor


RTL puede no aparecer esta
clk_micro conexión
reset

vcc
P

XST_VCC

11/07/2012 Circuitos de acoplamiento de periféricos. L. Jacobo Álvarez, Francisco Poza. 501


Circuitos de selección de entradas (XII).
 Simulación del circuito de interfaz recomendado para la conexión
de 8 periféricos de entrada al microprocesador con multiplexor +
registro, con codificación binaria, con fclk = 50 MHz.

11/07/2012 Circuitos de acoplamiento de periféricos. L. Jacobo Álvarez, Francisco Poza. 502


Circuitos de selección de entradas (IX).
 Circuito de interfaz modificado para la conexión de 16 periféricos de
entrada + 1 memoria de reducida capacidad (128 bytes), con “bypass”
del registro.

11/07/2012 Circuitos de acoplamiento de periféricos. L. Jacobo Álvarez, Francisco Poza. 503


Circuitos de selección de entradas (X).
 El circuito debe responder a este esquema básico, realizado sólo
para 4 periféricos de entrada y una memoria de 32 bytes.

RAM32X1D(x8)

11/07/2012 Circuitos de acoplamiento de periféricos. L. Jacobo Álvarez, Francisco Poza. 504


Circuitos de selección de entradas (XI).
 Simulación del circuito de interfaz modificado para la conexión de 16
periféricos de entrada + 1 memoria de reducida capacidad (128 bytes),
con “bypass” del registro, con fclk = 25 MHz, tsetup = 15 ns, tout = 10
ns.

11/07/2012 Circuitos de acoplamiento de periféricos. L. Jacobo Álvarez, Francisco Poza. 505


Circuitos de selección de salidas (I).
 Circuito de interfaz básico recomendado para la conexión de hasta
8 periféricos de salida al microprocesador, con codificación 1 entre
N.

11/07/2012 Circuitos de acoplamiento de periféricos. L. Jacobo Álvarez, Francisco Poza. 506


Circuitos de selección de salidas (II).
 El circuito debe responder a este esquema básico, realizado sólo
para 4 periféricos de salida.

11/07/2012 Circuitos de acoplamiento de periféricos. L. Jacobo Álvarez, Francisco Poza. 507


Circuitos de selección de salidas (III).
 Simulación del circuito de interfaz recomendado para la conexión
de hasta 8 periféricos de salida al microprocesador, con
codificación 1 entre N, con t_check_outputs = 10 ns,
t_assign_inputs = 10 ns.

11/07/2012 Circuitos de acoplamiento de periféricos. L. Jacobo Álvarez, Francisco Poza. 508


Circuitos de selección de salidas (IV).
 Circuito de interfaz recomendado para la conexión de 16 periféricos
de salida al microprocesador, con registros de “pipeline” después
de la decodificación binaria y después del puerto de datos.

11/07/2012 Circuitos de acoplamiento de periféricos. L. Jacobo Álvarez, Francisco Poza. 509


Circuitos de selección de salidas (V).
 El circuito debe responder a este esquema básico, realizado sólo
para 1 periférico de salida.

11/07/2012 Circuitos de acoplamiento de periféricos. L. Jacobo Álvarez, Francisco Poza. 510


Circuitos de selección de salidas (VI).
 Simulación del circuito de interfaz recomendado para la conexión de
16 periféricos de salida al microprocesador, con registros de
“pipeline” después de la decodificación y del puerto de datos, con
fclk = 25 MHz, tsetup = 15 ns, tout = 10 ns.

11/07/2012 Circuitos de acoplamiento de periféricos. L. Jacobo Álvarez, Francisco Poza. 511


Circuitos de selección de salidas (VII).
 Circuito de interfaz modificado para la conexión de una memoria de
reducida capacidad (128 bytes) como periférico SÓLO de salida y de
16 periféricos de salida, con registros de “pipeline” después de la
decodificación binaria, después del puerto de datos y antes de la
dirección de la memoria.

11/07/2012 Circuitos de acoplamiento de periféricos. L. Jacobo Álvarez, Francisco Poza. 512


Circuitos de selección de salidas (VIII).
 El circuito debe responder a este esquema básico, realizado sólo
para 1 periférico de salida y 2 memorias de baja capacidad.

11/07/2012 Circuitos de acoplamiento de periféricos. L. Jacobo Álvarez, Francisco Poza. 513


Circuitos de selección de salidas (IX).
 Simulación del circuito de interfaz modificado para la conexión de una memoria
de reducida capacidad (128 bytes) como periférico SÓLO de salida y 16
periféricos de salida, con registros de “pipeline” después de la decodificación,
después del puerto de datos y antes de la dirección de la memoria, con fclk = 25
MHz, tsetup = 15 ns, tout = 10 ns.

11/07/2012 Circuitos de acoplamiento de periféricos. L. Jacobo Álvarez, Francisco Poza. 514


Circuitos de selección de salidas (X).
 Circuito de interfaz modificado para la conexión de una memoria de
reducida capacidad como periférico de salida y de entrada.
 No se puede mantener el registro de dirección, pues sólo se dispone
de 2 ciclos de reloj para realizar la operación de lectura.

11/07/2012 Circuitos de acoplamiento de periféricos. L. Jacobo Álvarez, Francisco Poza. 515


Circuitos de selección de salidas (XI).
 El circuito debe responder a este esquema básico, realizado sólo
para 2 periféricos de salida y una memoria de 16 bytes.
 Se deben intercalar biestables en todos los puntos indicados en
verde, excepto en la selección de canal del multiplexor de entrada,
que corresponde al circuito de selección de periféricos de entrada.

11/07/2012 Circuitos de acoplamiento de periféricos. L. Jacobo Álvarez, Francisco Poza. 516


Circuitos de selección de salidas (XII).
 Simulación del circuito de interfaz modificado para la conexión de una
memoria de reducida capacidad como periférico de salida y de entrada y 16
periféricos de salida, con registros de “pipeline”, excepto el registro de
dirección de la memoria, con fclk = 25 MHz, tsetup = 15 ns, tout = 10 ns.

11/07/2012 Circuitos de acoplamiento de periféricos. L. Jacobo Álvarez, Francisco Poza. 517


Circuitos de selección de salidas (XIII).
 Circuito de interfaz recomendado para la conexión de 8 periféricos
de salida al microprocesador, con registros de “pipeline” después
de la decodificación binaria y después del puerto de datos.

seleccion_binaria_8_perifericos_salida_con_registro
out_port(7:0) out_port_reg(7:0)
sel_puerto_0_out
port_id(7:0) sel_puerto_1_out
sel_puerto_2_out
clk_micro sel_puerto_3_out
sel_puerto_4_out
reset sel_puerto_5_out
sel_puerto_6_out
write_strobe sel_puerto_7_out

11/07/2012 Circuitos de acoplamiento de periféricos. L. Jacobo Álvarez, Francisco Poza. 518


Circuitos de selección de salidas (XIV).
 El circuito debe responder a este esquema básico, realizado sólo
para 1 periférico de salida.

11/07/2012 Circuitos de acoplamiento de periféricos. L. Jacobo Álvarez, Francisco Poza. 519


Circuitos de selección de salidas (XV).
 Esquema de bloques interno del circuito de interfaz recomendado
para la conexión de 8 periféricos de salida al microprocesador, con
registros de “pipeline” después de la decodificación y del puerto de
datos, con fclk = 50 MHz.

seleccion_binaria_8_perifericos_salida_con_registro:1

decodificador_1_entre_8_con_buses vcc register_8_bits

{
port_id(7:0) sel(2:0) q(7:0) P d(7:0) q(7:0) out_port_reg(7:0)
enable XST_VCC ce sel_puerto_0_out
clk sel_puerto_1_out
Inst_decodificador_1_entre_8_con_buses reset sel_puerto_2_out
sel_puerto_3_out
Inst_register_8_bits_out_port sel_puerto_4_out
sel_puerto_5_out
out_port(7:0) sel_puerto_6_out

register_8_bits and2
I1
d(7:0) q(7:0) O sel_puerto_7_out
I0
ce
clk_micro clk
reset reset Debido a un error en el visor
RTL estas señales pueden
Inst_register_8_bits_selout
aparecer sin conexión.
write_strobe

seleccion_binaria_8_perifericos_salida_con_registro

11/07/2012 Circuitos de acoplamiento de periféricos. L. Jacobo Álvarez, Francisco Poza. 520


Circuitos de selección de salidas (XVI).
 Simulación del circuito de interfaz recomendado para la conexión de
8 periféricos de salida al microprocesador, con registros de
“pipeline” después de la decodificación y del puerto de datos, con
fclk = 50 MHz.

11/07/2012 Circuitos de acoplamiento de periféricos. L. Jacobo Álvarez, Francisco Poza. 521


Circuitos de interrupciones (I).
 Circuito de gestión de petición de una única interrupción para el
microprocesador Picoblaze, activa con flanco ascendente, y borrado
de la petición de interrupción atendida a través de la señal
“interrupt_ack” del microprocesador.

gestion_interrupcion_pulsador
clk peticion_interrupcion
entrada
interrupt_ack
reset

11/07/2012 Circuitos de acoplamiento de periféricos. L. Jacobo Álvarez, Francisco Poza. 522


Circuitos de interrupciones (II).
 El circuito debe responder a este esquema básico.

gestion_interrupcion_pulsador:1

detector_flancos D_flip_flop
clk clk fa_entrada ce q peticion_interrupcion
entrada entrada clk
reset reset fd_entrada clr
d
Inst_detector_flancos
Inst_D_flip_flop

or2
interrupt_ack I1
O
I0
reset_peticion_interrupcion_imp_reset_peticion_interrupcion1

Debido a un error en el visor


vcc RTL puede no aparecer esta
P conexión
XST_VCC

11/07/2012 Circuitos de acoplamiento de periféricos. L. Jacobo Álvarez, Francisco Poza. 523


Circuitos de interrupciones (III).
 Esquema interno del circuito detector de flancos.
detector_flancos:1
fdc and2b1
I1
entrada D Q O fa_entrada
I0

fa_entrada_aux_imp_fa_entrada_aux1
clk C

reset CLR
entrada_s_aux

fdc and2b1
I1
D Q O fd_entrada
I0

fd_entrada_aux_imp_fd_entrada_aux1
C

CLR
entrada_t_1

11/07/2012 Circuitos de acoplamiento de periféricos. L. Jacobo Álvarez, Francisco Poza. 524


Circuitos de interrupciones (IV).
 Funcionamiento del circuito detector de flancos ascendentes.

clk
CLK
entradaXi

Xit
entrada_t

Xit-1
entrada_t_1

Xi
fa_entrada
Detección de flanco por
el sistema secuencial

11/07/2012 Circuitos de acoplamiento de periféricos. L. Jacobo Álvarez, Francisco Poza. 525


Circuitos de interrupciones (V).
 Simulación del circuito de gestión de petición de una única
interrupción para el microprocesador Picoblaze, activa con flanco
ascendente, y borrado de la petición mediante la señal “interrupt_ack”,
con fclk = 25 MHz, tsetup = 10 ns, tout = 10 ns.

11/07/2012 Circuitos de acoplamiento de periféricos. L. Jacobo Álvarez, Francisco Poza. 526


Circuitos de interrupciones (VI).
 Circuito de gestión de petición de una única interrupción para el
microprocesador Picoblaze por parte de un pulsador que no dispone
de circuito antirrebotes, activo con flanco ascendente, y borrado de la
petición de interrupción atendida a través de la señal “interrupt_ack”
del microprocesador.

11/07/2012 Circuitos de acoplamiento de periféricos. L. Jacobo Álvarez, Francisco Poza. 527


Circuitos de interrupciones (VII).
 El circuito es idéntico al anterior, excepto porque ahora es necesario
incluir un biestable antirrebotes para el pulsador, sincronizado por
una señal de reloj de 1 kHz.

11/07/2012 Circuitos de acoplamiento de periféricos. L. Jacobo Álvarez, Francisco Poza. 528


Circuitos de interrupciones (VIII).
 Simulación del circuito de gestión de petición de una única
interrupción por parte de un pulsador que no dispone de circuito
antirrebotes, activo con flanco ascendente, y borrado de la petición
mediante la señal “interrupt_ack”, con fclk = 50 MHz.

Aquí se activa la señal “interrupt_ack”


durante 1 período del reloj “clk”.

11/07/2012 Circuitos de acoplamiento de periféricos. L. Jacobo Álvarez, Francisco Poza. 529


Circuitos de interrupciones (IX).
 Circuito de gestión de petición de interrupciones para el
microprocesador Picoblaze, con 16 posibles fuentes de interrupción
con prioridad y borrado inteligente de la petición de interrupción
atendida.

11/07/2012 Circuitos de acoplamiento de periféricos. L. Jacobo Álvarez, Francisco Poza. 530


Circuitos de interrupciones (X).
 El circuito debe incluir:

 16 biestables que memorizan cada una de las 16


diferentes peticiones de interrupción procedentes de
los periféricos.

 Codificador de 16 entradas con prioridad.

 Circuito de activación y borrado de la señal


INTERRUPT de petición de interrupción hacia el
microprocesador.

 Circuito de borrado inteligente de la petición de


interrupción del periférico atendido.

11/07/2012 Circuitos de acoplamiento de periféricos. L. Jacobo Álvarez, Francisco Poza. 531


Circuitos de interrupciones (XI).
 Simulación del circuito de gestión de petición de interrupciones para el
microprocesador Picoblaze, con 16 posibles fuentes de interrupción
con prioridad y borrado inteligente de la petición de interrupción
atendida, con fclk = 25 MHz, tsetup = 15 ns, tout = 10 ns. Aquí se utiliza
“read_strobe” en vez de “interrupt_ack”.

11/07/2012 Circuitos de acoplamiento de periféricos. L. Jacobo Álvarez, Francisco Poza. 532


Diseño de periféricos del
microprocesador Picoblaze
Índice
 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.
 Propuestas.
09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 533
Introducción.
 Además del microprocesador Picoblaze, en general
debemos implementar en la misma FPGA otros circuitos,
tales como:
 Periféricos del microprocesador.
 Otros circuitos adicionales, incluso otros microprocesadores
Picoblaze.

 Para ello, debemos describirlos mediante cualquiera de las


formas que permite la herramienta ISE de Xilinx: VHDL,
esquemáticos, etc.

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 534
Periféricos básicos.
 Los primeros periféricos que habitualmente se necesitan
pueden ser los siguientes:

 Sincronizadores de Interruptores y Pulsadores (con circuito


antirrebotes y sincronizados con el reloj del
microprocesador).

 Registro simple.
 Registros de LEDs.

 Controladores de visualizador dinámico de varios dígitos de 7


segmentos.

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 535
Interruptores (I).
 Circuito antirrebotes y de sincronización para 8 interruptores.

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 536
Interruptores (II).
 Símbolo del circuito antirrebotes y de sincronización para 8
interruptores.

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 537
Interruptores (III).
 Simulación del circuito antirrebotes y de sincronización, con fclk = 50
MHz, tsetup = 7 ns, tout = 5 ns y fslowclk = 5 MHz, tsetup = 10 ns, tout
= 10 ns.

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 538
Detector de flancos (I).
 Circuito detector de flancos basado en 2 biestables, que se utiliza
para:
 Detectar la activación o desactivación de pulsadores (e
interruptores).
 Activar durante un solo ciclo de un reloj rápido un circuito, a partir
de la activación de un puerto de salida del microprocesador.

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 539
Detector de flancos (II).
 Esquema interno del circuito detector de flancos basado en 2
biestables.

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 540
Detector de flancos (III).
 Simulación del circuito detector de flancos, con fclk = 25 MHz, tsetup =
15 ns, tout = 10 ns.

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 541
Pulsadores (I).
 Circuito antirrebotes y detector de flancos para un
pulsador.

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 542
Pulsadores (II).
 Si el microprocesador utiliza el método de consulta
periódica por programa para detectar la activación de los
pulsadores, entonces será necesario memorizar la
detección de los flancos de los pulsadores, para que el
microprocesador no deje de detectar ninguna pulsación.

 En este caso, podremos borrar los biestables que


memorizan los flancos mediante la señal READ_STROBE,
que se activará cuando el microprocesador consulte el
estado de los pulsadores mediante una instrucción INPUT.

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 543
Pulsadores (III).
 Circuito que memoriza la detección de flancos de los pulsadores,
análogo al que utilizamos para memorizar una petición de
interrupción.

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 544
Registro simple (I).
 Registro de 8 bits para guardar valores de salida del microprocesador.
 Sirve, por ejemplo, como registro de LEDs, para memorizar el valor a
visualizar en los LEDs de la placa de pruebas.
 También sirve como periférico de entrada básico, para que un sistema
externo guarde datos que luego sean recogidos por el
microprocesador.

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 545
Registro simple (II).
 Simulación del registro de 8 bits para guardar valores de salida del
microprocesador, con fclk = 25 MHz, tsetup = 15 ns, tout = 10 ns.

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 546
Visualizador dinámico (I).
 Circuito de control del visualizador dinámico de 4 dígitos de la placa
Nexys 2.

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 547
Visualizador dinámico (II).
 Ejemplo de simulación de otro circuito de control del visualizador
dinámico de 4 dígitos de la placa S3, que memoriza el valor a
visualizar, con fclk = 25 MHz, tsetup = 15 ns, tout = 10 ns y fslowclk = 5
MHz, tsetup = 15 ns, tout = 10 ns.

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 548
Memoria RAM dedicada (I).
 Se desea realizar una memoria RAM dedicada (basada en
BRAM) de 256 bytes (256 x 8), que sirva como periférico de
cualquier microprocesador Picoblaze, con las siguientes
características:

 Dos puertos independientes para escritura y lectura.


 Escritura síncrona.

 Lectura síncrona.

 La forma más sencilla es mediante la herramienta “IP Core


Generator” integrada en el programa “ISE” de Xilinx.

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 549
Definicion de componentes (I).
 Para definir un componente parametrizable, debemos crear un nuevo
fichero de tipo “IP (CoreGen)”, mediante el menú “Project  New Source”,
darle el nombre deseado y elegir el tipo de componente.

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 550
Definicion de componentes (II).
 Seleccionamos el tipo de componente adecuado.

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 551
Memoria RAM dedicada (II).
 A continuación se definen los parámetros del componente, en este caso
una memoria BRAM de doble puerto (página 1 de 6).

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 552
Memoria RAM dedicada (III).
 A continuación se definen los parámetros del componente, en este caso
una memoria BRAM de doble puerto (página 2 de 6).

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 553
Memoria RAM dedicada (IV).
 A continuación se definen los parámetros del componente, en este caso
una memoria BRAM de doble puerto (página 3 de 6).

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 554
Memoria RAM dedicada (V).
 Definición del contenido de las posiciones de una memoria de 256 x 8
mediante un fichero de texto en formato de Xilinx (.coe).

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 555
Memoria RAM dedicada (VI).

 Para definir el fichero con el contenido de la memoria, es más


cómodo utilizar la herramienta “Memory Editor”, disponible en
el menú “Tools” de la herramienta “CORE Generator” hasta la
versión 10 de ISE (incluida).

 A la herramienta “CORE Generator” se accede a través del


menú “Inicio  Todos los programas  Xilinx ISE x 
Accesories  CORE Generator”.

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 556
Memoria RAM dedicada (VII).
 Utilización de la herramienta “Memory Editor” para definir el contenido de
las posiciones de una memoria de 256 x 8.

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 557
Memoria RAM dedicada (VIII).
 A continuación se definen los parámetros del componente, en este caso
una memoria BRAM de doble puerto (página 4 de 6).

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 558
Memoria RAM dedicada (IX).
 A continuación se definen los parámetros del componente, en este caso
una memoria BRAM de doble puerto (página 5 de 6).

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 559
Memoria RAM dedicada (X).
 A continuación se terminan de definir los parámetros del componente, en
este caso una memoria BRAM de doble puerto (página 6 de 6) y se pulsa el
botón “Generate”.

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 560
Memoria RAM dedicada (IX).
 Una vez creado el componente, ya está disponible para su utilización en las
plantillas de HDLs de la herramienta “ISE” (fichero .vho) y en el editor de
esquemáticos.

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 561
Definición de memorias en VHDL (I).
 Si no se dispone de la herramienta “CORE Generator” o ésta no
se desea utilizar, se puede definir y utilizar una memoria BRAM
en VHDL de las dos formas que se indican a continuación:
 Instanciando el componente correspondiente de las bibliotecas de
Xilinx, tal como se analiza en las transparencias siguientes.
 Definiendo la memoria en VHDL como un “array”, respetando la
sintaxis indicada en la guía de síntesis de Xilinx, para obtener una
memoria BRAM.

 Asimismo, existen también algunas memorias en la biblioteca


de componentes del editor de esquemáticos.

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 562
Instanciación de memoria BRAM (I)
 Debemos buscar la plantilla correspondiente a la memoria que queremos
instanciar en VHDL, entre las plantillas de ISE.

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 563
Instanciación de memoria BRAM (II)
 La plantilla de instanciación de la memoria BRAM incluye (I):
 Parámetros genéricos.
 Entre ellos, se definirá a continuación el contenido inicial de la memoria.

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 564
Instanciación de memoria BRAM (III)
 Plantilla de instanciación del componente BRAM (II).
 Asignación de puertos de E/S.

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 565
Descripción de memoria BRAM (I).
 Si se prefiere definir la memoria de forma genérica en VHDL, es
necesario respetar la sintaxis indicada en la guía de síntesis de
Xilinx, para obtener una memoria BRAM.
 Ejemplo: Memoria RAM de 16 posiciones de 8 bits, con escritura y
lectura síncronas controladas por reloj (CLK) activo por flanco
ascendente, y señal de habilitación de escritura (WE).

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 566
Descripción de memoria BRAM (II).
 Descripción en VHDL. Su síntesis da lugar a la utilización de un
bloque específico de memoria (BRAM) de la FPGA.

 architecture Behavioral of memoria_ram_dedicada_16x8 is


 type ram_type is array (15 downto 0) of std_logic_vector (7 downto 0);
 signal memoria : ram_type;
 begin
 process (clk, we, din)
 begin
 if (clk'event and clk = '1') then
 if (we = '1') then
 memoria (to_integer (unsigned(write_address)) ) <= din;
 end if;
 dout <= memoria (to_integer (unsigned((read_address)) );
 end if;
 end process;
 end Behavioral;

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 567
Descripción de memoria BRAM (III).
 Simulación temporal.

 La función de conversión TO_INTEGER del paquete NUMERIC_STD de


la biblioteca IEEE permite convertir un tipo UNSIGNED a un tipo entero.
 Esto es necesario en el caso de las señales de dirección (“address”),
pues los índices de las matrices (“array”) deben ser de tipo entero.

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 568
Memoria RAM distribuida (I).
 Se desea realizar una memoria RAM distribuida de 128 bytes
(128 x 8), que sirva como periférico de cualquier
microprocesador Picoblaze, con las siguientes
características:

 Dos puertos independientes para escritura y lectura.


 Escritura síncrona.

 Lectura asíncrona.

 Salida sincronizada mediante un registro.

 La forma más sencilla es mediante la herramienta “IP Core


Generator” integrada en el programa “ISE” de Xilinx.

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 569
Memoria RAM distribuida (II).
 Seleccionamos el tipo de componente adecuado.

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 570
Memoria RAM distribuida (III).
 Memoria RAM distribuida de doble puerto de 128 x 8, realizada
mediante la herramienta “IP Core Generator” (página 1 de 3).

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 571
Memoria RAM distribuida (IV).
 Memoria RAM distribuida de doble puerto de 128 x 8, realizada
mediante la herramienta “IP Core Generator” (página 2 de 3).

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 572
Memoria RAM distribuida (V).
 Memoria RAM distribuida de doble puerto de 128 x 8, realizada
mediante la herramienta “IP Core Generator” (página 3 de 3).

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 573
Memoria RAM distribuida (VI).
 Simulación del periférico RAM distribuida 128x8, con fclk = 25 MHz,
tsetup = 15 ns, tout = 10 ns.

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 574
Definición de memorias en VHDL (II).
 Si no se dispone de la herramienta “CORE Generator” o ésta no
se desea utilizar, se puede definir y utilizar una memoria
distribuida en VHDL de las dos formas que se indican a
continuación:
 Instanciando el componente correspondiente de las bibliotecas de
Xilinx, tal como se analiza en las transparencias siguientes.
 Definiendo la memoria en VHDL como un “array”, respetando la
sintaxis indicada en la guía de síntesis de Xilinx, para obtener una
memoria distribuida.

 Asimismo, existen también algunas memorias en la biblioteca


de componentes del editor de esquemáticos.

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 575
Instanciación de memoria distribuida (I)
 Debemos buscar la plantilla correspondiente a la memoria que queremos
instanciar en VHDL, entre las plantillas de ISE.

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 576
Descripción de memoria distribuida (I)
 Si se prefiere definir la memoria de forma genérica en VHDL, es
necesario respetar la sintaxis indicada en la guía de síntesis de
Xilinx, para obtener una memoria distribuida.
 Ejemplo: Memoria RAM de 16 posiciones de 8 bits, con escritura
síncrona controlada por reloj (CLK) activo por flanco ascendente,
señal de habilitación de escritura (WE) y lectura asíncrona.

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 577
Descripción de memoria distribuida (II)
 Descripción en VHDL. Su síntesis da lugar a memoria
distribuida, realizada mediante LUTs de la FPGA.
 architecture Behavioral of memoria_ram_distribuida_16x8 is
 type ram_type is array (15 downto 0) of std_logic_vector (7 downto 0);
 signal memoria : ram_type;
 begin
 process (clk, we, din)
 begin
 if (clk'event and clk = '1') then
 if (we = '1') then
 memoria (to_integer (unsigned(address)) ) <= din;
 end if;
 end if;
 end process;
 dout <= memoria (to_integer (unsigned(address) ));
 end Behavioral;

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 578
Descripción de memoria distribuida (III)
 Simulación temporal.

 La función de conversión TO_INTEGER del paquete NUMERIC_STD de


la biblioteca IEEE permite convertir un tipo UNSIGNED a un tipo entero.
 Esto es necesario en el caso de la señal de dirección “address”, pues
los índices de las matrices (“array”) deben ser de tipo entero.

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 579
Sincronizador reloj rápido a lento (I).
 Circuito sincronizador para una señal que dura 1 ciclo de un reloj
rápido, de forma que sea detectada por un sistema que funciona con
un reloj lento.

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 580
Sincronizador reloj rápido a lento (II).
 Este circuito sincronizador estará formado a su vez por:
 Un biestable activado por “clk”, que memoriza la activación de la
“entrada_rapida”, cuya activación sólo dura 1 ciclo del reloj “clk”.

 Un detector de flancos ascendentes activado por “slowclk”, cuya


entrada se conecta a la salida del biestable anterior. Su salida será
la señal “salida_lenta”.

 Un detector de flancos descendentes activado por “clk”, cuya


entrada se conecta a la salida del detector anterior. Su salida será
la señal “reset_interno”, que inicializará el primer biestable,
volviendo el circuito a estar preparado para detectar una nueva
activación de la “entrada_rapida”.

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 581
Sincronizador reloj rápido a lento (III).
 Esquema del circuito sincronizador.

entrada_rapida salida_lenta

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 582
Sincronizador reloj rápido a lento (IV).
 Simulación del sincronizador. Los pulsos de la entrada rápida deben
estar separados entre sí al menos 5 ciclos del reloj rápido para ser
detectados, con fclk = 25 MHz, tsetup = 15 ns, tout = 10 ns.

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 583
Circuitos periféricos estándar (I).
 Entre los muchos periféricos que habitualmente incorporan
los microprocesadores comerciales, podemos destacar los
siguientes:

 Temporizador/Contador.

 Modulador PWM.

 UART RS232.

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 584
Temporizador / Contador (I).
 Se desea realizar un circuito Temporizador / Contador que
sirva como periférico de cualquier microprocesador
Picoblaze, con las siguientes características:

 Temporizador / Contador de 16 bits.

 Función TEMPORIZACIÓN (utiliza la señal de reloj del


microprocesador CLK) o CONTAJE (utiliza otra señal CLK_EXT como
reloj, seleccionable mediante bit de control C_T).

 Función de recarga del Temporizador/Contador, seleccionable


mediante bit de control RELOAD.

 Señal de puesta en estado inicial (todo ceros) interna, mediante bit


de control INT_RESET.

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 585
Temporizador / Contador (II).
 Posibilidad de habilitación interna, mediante bit de control
INT_CE.

 Selección mediante 2 bits de control (SEL_CE) del modo de


habilitación:
 Inhibición permanente (00).
 Habilitación permanente (01).
 Señal de habilitación interna INT_CE (10).
 Señal de habilitación externa EXT_CE (11).

 Selección de flanco activo de la señal de reloj externa


CLK_EXT, mediante bit de control FD_FA.

 Señal de puesta en estado inicial general externa (RESET).

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 586
Temporizador / Contador (III).
 Los bits del registro de control que definen el modo de
funcionamiento del Temporizador / Contador deben ser
suministrados por el microprocesador.

 El dato para la carga del Temporizador/Contador también


debe ser suministrado por el microprocesador mediante 2
bytes.

 Es decir, el temporizador se controla desde el


microprocesador como si fueran 3 periféricos de salida.

 El Temporizador / Contador pedirá una interrupción al


microprocesador cada vez que alcance el estado todo unos.

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 587
Temporizador / Contador (IV).
 Los bits del registro de control deben quedar organizados del
modo siguiente:

7 6 5 4 3 2 1 0
INT_RESET X FD_FA RELOAD INT_CE SEL_CE C_T

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 588
Temporizador / Contador (V).
 Periférico temporizador.

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 589
Temporizador / Contador (VI).
 Simulación del modo Temporizador sin recarga (control = h02), con
fclk = 25 MHz, tsetup = 15 ns, tout = 10 ns.

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 590
Temporizador / Contador (VII).
 Simulación del modo Temporizador con recarga (control = h12), con
fclk = 25 MHz, tsetup = 15 ns, tout = 10 ns.

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 591
Temporizador / Contador (VIII).
 Simulación del modo Contador (CLK_EXT), activo con flanco
ascendente y con habilitación externa (EXT_CE) (control = h07), con
fclk = 25 MHz, tsetup = 15 ns, tout = 10 ns.

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 592
Temporizador / Contador (IX).
 Simulación del modo Contador (CLK_EXT), con habilitación interna
(INT_CE), y reloj activo, primero con flanco ascendente (control =
h0D), y luego con flanco descendente (control = h2D), con fclk = 25
MHz, tsetup = 15 ns, tout = 10 ns.

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 593
Modulador PWM (I).
 Al Temporizador / Contador anterior se le puede añadir
fácilmente un circuito que genere señales moduladas en
anchura de pulso (PWM).

 Para ello, es necesario añadir dos registros de comparación


de 8 bits, cuyo valor se compare con el contenido actual del
Temporizador / Contador.

 La salida del modulador PWM cambiará de nivel cero a nivel


uno cuando el contenido del Temporizador y de los registros
de comparación coincidan.

 La salida del modulador PWM cambiará de nivel uno a nivel


cero cuando se produzca el desbordamiento del
Temporizador.
09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 594
Modulador PWM (II).
 Módulo PWM que se puede añadir al Temporizador / Contador
anterior.

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 595
Modulador PWM (III).
 Simulación del módulo PWM, en la que se observa la activación de la
señal PWM cuando el contenido del temporizador coincide con el
valor prefijado (hFFF9), con fclk = 25 MHz, tsetup = 15 ns, tout = 10 ns.

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 596
Modulador PWM (IV).
 Simulación del módulo PWM, en la que se observa la desactivación de
la señal PWM cuando el contenido del temporizador alcanza el valor
máximo (hFFFF), con fclk = 25 MHz, tsetup = 15 ns, tout = 10 ns.

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 597
Temporizador / Contador modificado.
 Periférico Temporizador / Contador modificado para sacar al exterior
la señal de habilitación (ce_aux) y la señal de reset interno del
temporizador (int_reset), y para hacer de tipo "inout" la señal
"overflow“, para poder leerla desde el módulo PWM.

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 598
Temporizador / Contador con PWM (I).
 Periférico Temporizador / Contador que incluye un módulo PWM.

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 599
Temporizador / Contador con PWM (II).
 Simulación del periférico Temporizador / Contador que incluye un
módulo PWM, con fclk = 25 MHz, tsetup = 15 ns, tout = 10 ns.
 La salida PWM está siempre a 1 (excepto 1 ciclo de reloj), porque el
valor de recarga del temporizador coincide con el valor prefijado en el
módulo PWM (hFFF0).

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 600
Temporizador / Contador con PWM (III).
 Simulación del periférico Temporizador / Contador que incluye un
módulo PWM, con fclk = 25 MHz, tsetup = 15 ns, tout = 10 ns.
 La salida PWM está a 1 sólo una parte del ciclo del temporizador,
porque el valor de recarga del temporizador (hFFF0) es menor que el
valor prefijado en el módulo PWM (hFFF6).

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 601
Temporizador / Contador con PWM (IV).
 Simulación del periférico Temporizador / Contador que incluye un
módulo PWM, con fclk = 25 MHz, tsetup = 15 ns, tout = 10 ns.
 La salida PWM está siempre a 0, porque el valor prefijado en el módulo
PWM es el máximo posible (hFFFF).

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 602
UART RS232 (I).
 Se desea realizar un transmisor / receptor asíncrono
universal (UART) para la norma RS232, que sirva como
periférico de cualquier microprocesador Picoblaze, con las
siguientes características:

 8 bits de dato, sin paridad, 1 bit de stop.


 Con memoria “buffer” de 16 bytes, tanto para el transmisor
como para el receptor.
 Utilizable a distintas velocidades de la norma RS232.

 Xilinx suministra ficheros fuente en VHDL para el transmisor


y el receptor, así como otros ficheros auxiliares necesarios
para que funcione.
 También suministra una UART de 9 bits (con bit de paridad).

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 603
UART RS232 (II).
 Transmisor RS232 de 8 bits con memoria “buffer” de 16 datos.

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 604
UART RS232 (III).
 Receptor RS232 de 8 bits con memoria “buffer” de 16 datos.

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 605
Propuestas.
 Otros periféricos interesantes y útiles para el
microprocesador Picoblaze, pueden ser los siguientes:

 Circuito de lectura de un teclado matricial (4x4).


 Circuito de lectura de un teclado ASCII (tipo PS2).
 Circuito de control de un motor paso a paso.
 Circuito de lectura de la posición y velocidad de un motor a
través de un “encoder”.
 Circuito de control de un convertidor A/D externo (8 bits).
 Circuito de control de un convertidor D/A externo (8 bits).

09/07/2012 Diseño de periféricos para Picoblaze. L. Jacobo Álvarez, Francisco Poza 606
Diseño de sistemas basados en Picoblaze
Índice
 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.

16/07/2012 Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez. 607
Diseño de sistemas basados en Picoblaze
Índice (continuación)
 Simulación “software”.
 Depuración “software”.

 Combinación HW/SW.

 Síntesis e implementación.

 Cosimulación HW/SW.

 Codepuración HW/SW.

 Proceso de diseño alternativo para modificaciones


sólo de “software”.
 Ejercicios.
 Conclusiones.

16/07/2012 Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez. 608
Introducción (I).
 En esta práctica realizaremos un sistema empotrado básico,
basado en el microprocesador Picoblaze.

16/07/2012 Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez. 609
Proceso de diseño con Picoblaze (I).
Flujo normal de diseño con Picoblaze
<kcpsm3.vhd>,
<picoblaze3_empotrado.vhd>,
<top.vhd>, <otros.vhd>, …
<nombre_programa.psm>

<ROM_blank_
modificada.vhd> pBlazeIDE <picocode.vhd>

Simulación
funcional Síntesis
Simulación
hardware
software
/ software

Simulación
temporal Implementación
hardware
/ software top.bit
Programación JTAG
Codepuración
hardware iMPACT
/ software

16/07/2012 Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez. 610
Ejemplo detallado del proceso de diseño.
 Ejemplo básico de aplicación basada en el
microprocesador Picoblaze 3, que utiliza una única
interrupción.

 La prueba real del ejemplo se realizará mediante la placa


Nexys 2 de Digilent, que contiene una FPGA XC3S500E -4 -
FG320, de la familia Spartan 3E de Xilinx.

16/07/2012 Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez. 611
Especificaciones (I).
 La aplicación debe realizar las siguientes tareas:

 Cada vez que se pulsa el botón BTN0 de la placa, se


incrementa un contador cuyo contenido se visualiza en
todo momento en los LEDs de la placa.

 El pulsador BTN0 se debe acoplar al microprocesador


por interrupción.

16/07/2012 Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez. 612
Especificaciones (II).
 Comprobar el estado de los 8 interruptores y de los
pulsadores BTN2 y BTN1 de la placa.
 Visualizar en el visualizador de 4 dígitos de 7 segmentos el
estado de los mismos si se produce un cambio
(accionamiento de uno de ellos)

 Cada vez que se pulsa el botón BTN1 o BTN2, se visualiza


“PUL .” o “PUL -”, respectivamente.

 Cada vez que se acciona alguno de los 8 interruptores, se


visualiza “Int x” en los visualizadores de 7 segmentos.
Cada interruptor se corresponde con un segmento del
dígito de menor peso.
16/07/2012 Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez. 613
Especificaciones (III).
 Conviene recordar que es necesario que la petición de
interrupción dure al menos 2 ciclos de reloj del
microcontrolador y que puede ser necesario:
 Borrar la petición de interrupción externa
y/o
 Indicar al periférico que la pide que la interrupción ha sido
atendida.

 La aplicación es relativamente sencilla, y no requiere


ninguna otra aclaración especial.

16/07/2012 Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez. 614
Particionado Hardware/Software.
 Dado que esta es una aplicación sencilla, los únicos
circuitos “hardware” que es necesario desarrollar son los
siguientes:
 Circuito de control del visualizador dinámico de 4 dígitos de
7 segmentos. Este circuito descarga al microprocesador de
la tarea de refresco del visualizador.
 Periféricos del microprocesador:
 1 registro para memorizar el estado de los LEDs.

 4 registros para memorizar el estado de cada uno de los


dígitos del visualizador.
 Circuito de memorización de la interrupción procedente
del pulsador BTN0.

 El resto de las tareas se realizarán mediante “software”.

16/07/2012 Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez. 615
Descripción hardware (I).
 Debemos implementar en la misma FPGA los siguientes
circuitos:
 Microprocesador Picoblaze.

 Memoria de programa del microprocesador.

 Circuitos de selección de periféricos de entrada y de


salida.
 Periféricos del microprocesador.

 Otros circuitos adicionales para el manejo de los


componentes de la placa de desarrollo.

 Para ello, debemos describirlos mediante cualquiera de las


formas que permite la herramienta ISE de Xilinx: VHDL,
esquemáticos, etc.

16/07/2012 Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez. 616
Descripción hardware (II).
 Circuito de selección de 8 periféricos de entrada al microprocesador
con multiplexor + registro, con codificación binaria. Ya realizado en
prácticas anteriores.

16/07/2012 Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez. 617
Descripción hardware (III).
 Periféricos de entrada.
 Periférico 0 de entrada. Identificación de la interrupción. No
es realmente necesario en este ejemplo porque sólo hay una
fuente de interrupción, pero es útil por si posteriormente se
añaden más interrupciones.

 Periférico 1 de entrada. Registro asociado a los 8


interruptores.

 Periférico 2 de entrada. Registro asociado a los pulsadores


BTN1 y BTN2.

16/07/2012 Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez. 618
Descripción hardware (IV).
 Circuito de selección de 8 periféricos de salida del microprocesador,
con registros de “pipeline” después de la decodificación binaria y
después del puerto de datos. Ya realizado en prácticas anteriores.

16/07/2012 Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez. 619
Descripción hardware (V).
 Periféricos de salida.
 Periférico 0 de salida. Registro asociado a los 8 LEDs.

 Periféricos 1, 2, 3 y 4 de salida. Registros asociados a los 8


segmentos de los dígitos 0, 1, 2 y 3, respectivamente, del
visualizador de 7 segmentos.

16/07/2012 Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez. 620
Descripción hardware (VI).
 Circuito de gestión de petición de una única interrupción para el
microprocesador Picoblaze, procedente de un pulsador activo con
flanco ascendente, con borrado de la petición de interrupción atendida
a través de la señal “interrupt_ack” del microprocesador.
 Debe incluir:
 Un circuito detector de flancos.

 Un circuito de memorización de la petición de interrupción.

 Ya realizado en prácticas anteriores.

16/07/2012 Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez. 621
Descripción hardware (VII).
 Circuitos auxiliares para la prueba en la placa (I).
 Circuitos antirrebotes para los pulsadores BTN0, BTN1 y
BTN2 y para los interruptores SW(7:0).
 Ejemplo:

16/07/2012 Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez. 622
Descripción hardware (VIII).
 Circuitos divisores de reloj para obtener la señal de reloj de 1 kHz necesaria
para el circuito antirrebotes, a partir de la señal de reloj principal de 50 MHz
de la placa Nexys 2. Suministrado por el profesor.
 En este ejemplo, se utiliza la señal de reloj de 50 MHz para el
microprocesador Picoblaze, pero en otros sistemas es conveniente utilizar
una señal de reloj más lenta, obtenida a partir de un circuito divisor.
 Por ello, es conveniente acostumbrarse a NO conectar la puesta en estado
inicial de los circuitos divisores a la señal de “reset” global, pues el
microprocesador necesita que le llegue la señal de reloj incluso durante la
puesta en estado inicial.

16/07/2012 Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez. 623
Descripción hardware (IX).
 Circuito de control del visualizador dinámico de 4 dígitos de 7
segmentos de la placa Nexys 2. Suministrado por el profesor.

16/07/2012 Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez. 624
Descripción hardware (X).
 Los archivos necesarios para implementar Picoblaze3 son
los siguientes:
 FPGA de destino -> 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 deben simular
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 Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez. 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
Pulsadores
BTN1 y BTN0
Picoblaze 3
2
Interruptores
1

Memoria de
0
Código
(Block RAM) Puertos
Fuente de interrupción
de entrada
16/07/2012 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

Dígito 3
4
Picoblaze3_empotrado
Dígito 2
3
Picoblaze 3 Dígito 1
2
Dígito 0
1
LEDs
Memoria de
0
Código
(Block RAM) Puertos
de salida

16/07/2012 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:
 Inicialice el contador a 0.
 Apague los LEDs.
 Apague el visualizador de 7 segmentos.
 Habilite las interrupciones.
 Realice un bucle infinito.
 Hacer una rutina de atención de interrupción que:
 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 principal
“top_ejemplo_basico_picoblaze_3_placa_Nexys_2”.

16/07/2012 Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez. 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
<kcpsm3.vhd>,
<picoblaze3_empotrado.vhd>,
<top.vhd>, <otros.vhd>, …
<nombre_programa.psm>

<ROM_blank_
modificada.vhd> pBlazeIDE <picocode.vhd>

Simulación
funcional Síntesis
Simulación
hardware
software
/ software

Simulación
temporal Implementación
hardware
/ software top.bit
Programación JTAG
Codepuración
hardware iMPACT
/ software

16/07/2012 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)
<kcpsm3.vhd>,
Flujo de diseño modificado (1) <picoblaze3_empotrado.vhd>,
<top.vhd>, <otros.vhd>, …
<prog.psm>

<memoria.bmm>
<ROM_blank_ pBlazeIDE <picocode.vhd>
modificada.vhd>
<memoria_bd.bmm>
<picocode.coe>
<picocode.mem> Síntesis
<picocode.hex> coe2mem Data2MEM

<top_sw.bit> top.bit
Implementación

top.bit
iMPACT
Codepuración (en modo batch)
hardware
/ software 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:
 coe2mem.exe.
 load_sw_iMPACT.bat.

16/07/2012 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.
 Para ello se utiliza la directiva COE del pBlazeIDE.

 Modificar el fichero de configuración top.bit.


 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 <= "000" & rx_buffer_data_present & rx_buffer_full
& rx_buffer_half_full & tx_buffer_full & tx_buffer_half_full;

16/07/2012 Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez. 662
Ejercicio 1 (III).
 Es necesario añadir los siguientes periféricos de salida.
 Memoria “buffer” de datos a enviar por la UART RS232
suministrada por Xilinx.

16/07/2012 Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez. 663
Ejercicio 1 (IV).
 Además, es necesario hacer un circuito generador de la señal de
habilitación de referencia “en_16_x_baudios” para la UART
suministrada por Xilinx.

 Es un circuito divisor de frecuencia que, a partir de la señal de reloj


global, obtiene una señal de frecuencia 16 veces mayor que la
frecuencia de envío y recepción RS232 y que debe activarse 1 solo
ciclo de reloj en cada período.
 Ejemplo:
 Para obtener una velocidad de 115.200 bits/s con una señal de reloj
de 50 MHz hay que realizar un circuito divisor por 27.
 Cálculo: Factor_en_16_x_baud = F_clk / (baudios * 16) ->
 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
 Introducción.
 “Core Chipscope”.
 Parámetros “Chipscope”.
 Implementación.
 Análisis con “Chipscope”.
 Conclusiones.

21/05/2012 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
 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.

22/05/2012 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.
 Cada segundo, parpadea el punto medio del visualizador
dinámico, si se está visualizando la hora actual.

22/05/2012 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 principal
“top_reloj_digital_picoblaze_3_placa_Nexys_2”.

22/05/2012 Ejemplo reloj digital con alarma. L. Jacobo Álvarez, Francisco Poza 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:


 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.

22/05/2012 Ejemplo reloj digital con alarma. L. Jacobo Álvarez, Francisco Poza 731
Asignación de puertos de E/S (I).
 Puertos de entrada.
clk50MHz
Reloj Reloj
1 kHz 10 Hz
/25 /2000 /100

clk2MHz
clk Petición interrupción
Picoblaze3_empotrado
Interruptores
1
Picoblaze 3
2
Detección de flancos de
pulsadores BTN1 y BTN0
Puertos
Memoria de de entrada
Código
(Block RAM)

22/05/2012 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
16 Borrado flanco BTN1

Picoblaze 3 8 Borrado flanco BTN0

4 Puntos decimales

Dígitos menor peso


2
Memoria de
Dígitos mayor peso
Código 1
(Block RAM)

22/05/2012 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
 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.

22/05/2012 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
 Debe visualizarse “LEDS: XX”, siendo XX el valor en hexadecimal de
los LEDs.
 LEDS XX
 Debe pasarse el valor XX a los LEDs.
 Debe visualizarse “LEDS: XX”
 DISPLAY
 Debe visualizarse “DISPLAY: XXXX”, siendo XXXX el valor en
hexadecimal representado en los visualizadores.
 DISPLAY XXXX
 Debe pasarse el valor XXXX a los visualizadores.
 Debe visualizarse “DISPLAY XXXX”.

22/05/2012 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 <ESC> [ H 1B 5B 48 Sitúa el cursor en la fila 1 columna 1.
inicio

Borra <ESC> [ J 1B 5B 4A Borra desde la línea actual hasta el fondo de la pantalla.


abajo Combinada con la anterior permite borrar toda la pantalla.

Scroll <ESC> [ {S} ; 1B 5B {S} 3B Permite scroll para las líneas de la S a E (S y E hay que
parcial {E} r {E} 72 especificarlos con los caracteres ASCII correspondientes).

Cursor a <ESC> [ {F} ; 1B 5B {F} 3B Sitúa el cursor en la fila F y columna C (F y C hay que
F, C {C} H {C} 48 especificarlos con los caracteres ASCII correspondientes).

Guarda <ESC> [ s 1B 5B 73 Almacena la posición actual del cursor.


cursor

Restaura <ESC> [ u 1B 5B 75 Restaura la posición del cursor guardada previamente.


cursor

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 principal
“top_uart_ctrl_picoblaze_3_placa_Nexys_2”.

22/05/2012 Ejemplo gestión RS232. L. Jacobo Álvarez, Francisco Poza 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.
 No se utilizan interrupciones en este ejemplo.

22/05/2012 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.

Memoria
RAM
/27 en_16_x_baud 256x8
(mensajes)
clk50MHz /50000 Reloj_lento
1KHz Dato_out
clk
Picoblaze3_empotrado 16
Puls.
8
Picoblaze 3
Interruptores UART
4 tx
UART status
2
Memoria de Dato recibido UART
1
Código rx
(Block RAM) Puertos
de entrada en_16_x_baud

22/05/2012 Ejemplo gestión RS232. L. Jacobo Álvarez, Francisco Poza 785


Asignación de puertos de E/S (II)
 Puertos de salida. Memoria
RAM 256x8
(mensajes)
address_ram
Reg. Dato_in
Dirección

32
Picoblaze3_empotrado 16
LEDs
8
Picoblaze 3
4 Vis. LSB
Vis. MSB
2
Memoria de Dato a enviar UART
1
Código tx
(Block RAM) Puertos
de salida

22/05/2012 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
tecleados en el HyperTerminal. UART UART

No Si
¿Hay datos? ¿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
Envia_cadena
4. Hacer la rutina “envia_cadena”:
5. Para probar su funcionamiento es necesario
quitar el comentario de las siguientes líneas Dirección
memoria a
del programa principal: registro

; LOAD dir_mem, descripción_msg


Lee
; CALL envia_cadena carácter

6. Si el funcionamiento es correcto debería


aparecer en el HyperTerminal el mensaje de ¿Es cero?
No
descripción del programa.
7. Coger el programa Si Envía
“UART_ctrl_incompleto2.psm” de la carácter al
dirección web [DTE2]. puerto serie

8. Añadir las rutinas anteriores (“get_char”,


“put_char” y “envia_cadena”). Incrementa
9. Hacer la rutina “test_orden”. Con esta rutina dirección memoria

el programa debe responder a la orden


LEDS.
10. Completar la rutina “haz_orden” con la Fin
parte correspondiente a la decodificación de
la orden DISPLAY.

795
Ejemplo visualizador LCD Picoblaze
Índice
 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.

16/07/2012 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 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 Enciende LCD, cursor (C) y parpadeo cursor (P)

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 Parpadeo LCD. No implementada

1010 0 0 0 fila (0 o 1) Selecciona fila del LCD

1011 XXXX Inicializa LCD

1100-1111 XXXX No implementadas

16/07/2012 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 FUNCIÓN


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 Señal de habilitación ("enable"): activa el circuito de


control del visualizador para lectura o escritura.

16/07/2012 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

DB0-DB7
tEN
ts th

Tciclo

16/07/2012 Ejemplo visualizador LCD. L. Jacobo Álvarez, Francisco Poza 803


Visualizador LCD (III).
 Codificación de las
instrucciones que
reconoce el
visualizador LCD.

16/07/2012 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.
 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.
16/07/2012 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.
• “dir_74lvc4245” = 0 => FPGA  LCD.
• “dir_74lvc4245” = 1 => LCD  FPGA (aquí no se usa).
16/07/2012 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 principal
“top_ctrl_lcd_picoblaze_3_placa_Nexys_2”.

16/07/2012 Ejemplo visualizador LCD. L. Jacobo Álvarez, Francisco Poza 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
 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).

 rutina_atencion_interrupcion
 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
 Ejecuta la secuencia de órdenes para la inicialización del LCD.

 rutinas_envio_ordenes_LCD
 Carga el código de la instrucción a enviar.
 Llama a rutina_envio_instruccion.

 rutina_envio_mensajes
 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.

16/07/2012 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 s6, REG_LCD ; graba dato a enviar al LCD en el registro de salida
 LOAD sF, ENVIO_DATO ; selecciona escritura de dato
 OUT sF, REG_CTRL ; graba señales de control del LCD en el registro de salida
 LOAD sF, BUSLCD_ON ; selecciona habilitar bus de salida hacia el LCD
 OUT 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
 Puertos de entrada.

/25 /2000 Reloj_lento


1KHz

clk2MHz clk Petición Interrupción (BTN0)


Picoblaze3_empotrado
Interruptores
1
Picoblaze 3
2

4 Estado
LCD
Memoria de Puertos Memoria
Código de entrada Dato_out ROM
(Block RAM) 256x8
(mensajes)
16/07/2012 Ejemplo visualizador LCD. L. Jacobo Álvarez, Francisco Poza 838
Asignación de puertos de E/S (II).
 Puertos de salida.

Ctrl 3er estado salidas


hacia LCD (bit 0)
32
Picoblaze3_empotrado Ctrl LCD
16
ENABLE (bit 0)
8 Picoblaze
Picoblaze 3 BUSY (bit 0)
4 Ctrl LCD (RS, RW)
Dato/instrucción LCD
2
Memoria de Dirección Memoria
1 Reg.
Código ROM
(Block RAM) Puertos 256x8
de salida (mensajes)
16/07/2012 Ejemplo visualizador LCD. L. Jacobo Álvarez, Francisco Poza 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

PICOBLAZE 1 PICOBLAZE 2 PICOBLAZE 3


Circuitos Spartan 2/ 2E Spartan 3 Spartan 3
destino Virtex / Virtex E Virtex 2 / 2 Pro Virtex 2 / 2 Pro
(adaptable a la (adaptable a la
Spartan 2 / 2E) Spartan 2 / 2E)
Tamaño 256 1.024 1.024 instrucciones
programa instrucciones instrucciones
Tamaño 1 BRAM 256 x 1 BRAM 1024 1 BRAM 1024 x 18
memoria de 16 x 18 (en la Spartan 2 /
programa (en la Spartan 2E ocupa 5 BRAM
2 / 2E ocupa 5 de 512 x 8)
BRAM de 512
x 8)
Registros 16 (s0 a sF) 32 (s00 a s1F) 16 (s0 a sF)
internos
Memoria RAM NO NO 64 x 8
Área ocupada 76 “Slices” 84 “Slices” 96 “Slices”

851
PICOBLAZE 1 PICOBLAZE 2 PICOBLAZE 3
Anidamiento 15 niveles 31 niveles 31 niveles
de subrutinas
Bus 8 bits 10 bits 10 bits
direcciones
Tamaño 16 bits 18 bits 18 bits
instrucción
Dirección FF 3FF 3FF
vector
interrupción
Juego de 49 49 57 instrucciones
instrucciones instrucciones instrucciones
Señal NO NO SÍ
interrupción (INTERRUPT_ACK)
atendida
Instrucciones STORE (2)
adicionales 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 Ficheros fuente del microcontrolador


Picoblaze necesarios
3 “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 Descripción de la función del puerto de ENTRADA
00 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 Descripció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

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 Descripció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

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 Power-
PC. 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

You might also like