Professional Documents
Culture Documents
© 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
ISBN: 978-84-940472-0-6
Disponible en ebook
www.visionebooks.com
Pedidos a:
pedidos@visionnet.es
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
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.
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
18
Guión de laboratorio ............................................................................................ 845
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:
- 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”.
Microprocesadores “software”.
Método “software”.
Método “hardware”.
Memoria de programa.
“System On Chip”
o
S.O.C.
Un microprocesador.
Una o varias unidades de memoria (SRAM, FLASH-
EEPROM, etc.).
Circuitos de interfaz estándar.
Altera.
Actel.
Cypress.
Xilinx.
Familia E5 de Triscend.
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).
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.
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.
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 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.
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.
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.
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).
Slice S3
CLB, Slice S2
Switch
IOB, Switch
Matrix
DCM Matrix Slice S1
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”)].
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”.
Lógica aritmética:
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.
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”.
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”)].
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.
F8
de dos MUXF7 (del CLB
superior o inferior.
F5
Slice S3
MUXF6 combina los “slices”
F6
S2 y S3.
F5
Slice S2
de dos MUXF6.
Slice S1
F5
Slice S0
F5
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).
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.
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:
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.
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.
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.
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.
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.
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.
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.
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.
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).
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).
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.
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
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.
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):
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):
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).
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”)].
D1
Clock Reg DDR MUX OBUF
OCK1
PAD
D2
Reg
OCK2 FDDR
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.
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.
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).
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.
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.
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.
GTL, GTLP.
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.
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).
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.
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.
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
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
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
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)
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.
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
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.
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.
Desarrollo software:
Diseño del programa en ensamblador para realizar la tarea requerida.
Se utilizará el entorno pBlazeIDE.
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.
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.
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
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”.
kcpsm source>log.txt
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
LOAD sX, sY
AND sX, kk
OR sX, kk
XOR sX, kk
AND sX, sY
OR sX, sY
XOR sX, sY
ADD sX, sY
ADDCY sX, kk
ADDCY sX, sY
SUB sX, sY
SUBCY sX, kk
SUBCY sX, sY
SR0 sX
SR1 sX
SRX sX
SRA sX
RR sX
SL0 sX
SL1 sX
SLX sX
SLA sX
RL sX
INPUT sX, pp
OUTPUT sX, pp
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
RETURN
RETURN Z
RETURN NZ
RETURN C
RETURN NC
ENABLE INTERRUPT
DISABLE INTERRUPT
No se destruye el
contenido de sX
COMPARE sX, kk
COMPARE sX, sY
No se destruye el
contenido de sX
FETCH sX, kk
FETCH sX, (sY)
STORE sX, kk
STORE sX, (sY)
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
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)
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
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)
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
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
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
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
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 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.
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”).
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
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.
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.
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.
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):
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):
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:
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
(“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:
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”.
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.
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]
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:
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”
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)
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
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
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
INICIO:
; Código del programa
JUMP INICIO ; Una aplicación empotrada nunca termina
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”).
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”).
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.
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.
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]
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:
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”
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
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
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”
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
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
21/05/2012 Desarrollo software Picoblaze IDE. Francisco Poza, L. Jacobo Álvarez. 467
Menús entorno pBlazeIDE (II)
Menú Edit
Borra la selección
21/05/2012 Desarrollo software Picoblaze IDE. Francisco Poza, L. Jacobo Álvarez. 468
Menús entorno pBlazeIDE (III)
Menú View
21/05/2012 Desarrollo software Picoblaze IDE. Francisco Poza, L. Jacobo Álvarez. 469
Menús entorno pBlazeIDE (IV)
Menú Settings
No implementada
No implementada
21/05/2012 Desarrollo software Picoblaze IDE. Francisco Poza, L. Jacobo Álvarez. 470
Menús entorno pBlazeIDE (V)
Menú Simulate
21/05/2012 Desarrollo software Picoblaze IDE. Francisco Poza, L. Jacobo Álvarez. 471
Menús entorno pBlazeIDE (VI)
Menú Help
No implementada
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
INICIO:
; Código del programa
JUMP INICIO ; Una aplicación empotrada nunca termina
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”).
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”).
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.
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.
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
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)
vcc
P
XST_VCC
RAM32X1D(x8)
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
seleccion_binaria_8_perifericos_salida_con_registro:1
{
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
gestion_interrupcion_pulsador
clk peticion_interrupcion
entrada
interrupt_ack
reset
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
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
clk
CLK
entradaXi
Xit
entrada_t
Xit-1
entrada_t_1
Xi
fa_entrada
Detección de flanco por
el sistema secuencial
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:
Registro simple.
Registros de LEDs.
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.
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:
Lectura síncrona.
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).
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.
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.
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.
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:
Lectura asíncrona.
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.
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.
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”.
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:
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.
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.
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).
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:
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:
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.
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.
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:
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)
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.
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.
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.
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.
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.
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.
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.
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.
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)
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“
16/07/2012 Diseño de sistemas basados en Picoblaze. Francisco Poza, L. Jacobo Álvarez. 638
Compilación y enlazado (II).
pBlazeIDE (II).
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:
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.
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.
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.
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)
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.
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)
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.
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.
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.
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.
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.
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.
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.
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
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.
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.
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.
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.
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).
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.
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.
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):
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.
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
4 Puntos decimales
22/05/2012 Ejemplo reloj digital con alarma. L. Jacobo Álvarez, Francisco Poza 733
Asignación de registros internos.
Registros del Picoblaze 3:
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).
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.
Prueba de la aplicación.
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).
UART_RX
Get_char
Guarda_cursor
Haz_orden
Envia_hex_byte
Decimal_to_2ASCII
ASCII2_to_hex
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
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
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
Fin Fin
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
795
Ejemplo visualizador LCD Picoblaze
Índice
Especificaciones.
Manejo de la aplicación.
Observaciones.
Visualizador LCD.
Solución:
Circuitos necesarios.
Programa en ensamblador.
Prueba de la aplicación.
D7 D6 D5 D4 D3 D2 D1 D0
RS
R/W
DB0-DB7
tEN
ts th
Tciclo
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.
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.
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
; 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
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.
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
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
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:
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
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:
ESPECIFICACIONES DE LA APLICACIÓN:
MANEJO DE 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
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).
http://www.dte.uvigo.es/logica_programable/Recursos/Recursos_Picoblaze.rar
874