Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Diseño Digital Utilizando Lógicas Programables
Diseño Digital Utilizando Lógicas Programables
Programables
Versin 0.6
Junio 29, 2005
Guillermo Gichal
Universidad Tecnolgica Nacional
Facultad Regional Baha Blanca
ndice
1
2
3
4
Agradecimientos ......................................................................................................... 7
Versiones..................................................................................................................... 8
Introduccin ................................................................................................................ 9
Temas Bsicos de Diseo Digital ............................................................................. 11
4.1
Diseo Combinacional y Secuencial ................................................................ 11
4.1.1
Flip-Flops y Latches ................................................................................. 11
4.2
Diseo Secuencial Asincrnico y Sincrnico ................................................... 11
4.3
Algunas Notas sobre Diseo Secuencial Sincrnico ........................................ 11
4.3.1
Temporizado y Utilizacin de Registros................................................... 11
4.3.2
Distribucin de Reloj ................................................................................ 11
4.3.3
Mxima Frecuencia de Trabajo ................................................................ 11
4.3.4
Pipelines.................................................................................................... 11
4.3.5
Dominios de Reloj .................................................................................... 11
4.3.6
Metaestabilidad en los Flip-Flops............................................................. 11
4.4
Autmatas de Estados Finitos (Mquinas de estados finitos)........................... 11
4.4.1
Mquinas de Mealy................................................................................... 11
4.4.2
Mquinas de Moore .................................................................................. 11
4.4.3
Codificacin de estados. Mnima, One-hot, One-cold, Grey, etc. ............ 11
4.5
Integridad de Seal ........................................................................................... 11
4.5.1
Que afecta la integridad de seal y que es. Como afecta fuera y dentro del
chip (FPGA?) ............................................................................................................ 11
4.5.2
Terminaciones de Seales......................................................................... 12
4.6
Interfaces Elctricas .......................................................................................... 12
4.7
Potencia y Consumo de los Circuitos ............................................................... 12
5
Diseo Digital con FPGAs y HDLs.......................................................................... 13
5.1
Metodologa General de Diseo Digital ........................................................... 15
5.1.1
Especificacin y Diseo............................................................................ 17
5.1.2
Verificacin............................................................................................... 18
5.1.3
Pasos Finales............................................................................................. 18
5.2
Diseo Digital Utilizando Lenguajes de Descripcin de Hardware ................. 18
5.3
Flujo de Diseo para Lgicas Programables .................................................... 19
5.3.1
Flujo de Diseo (Design Flow)................................................................. 19
5.4
Lenguajes de descripcin de hardware ............................................................. 22
5.4.1
VHDL ....................................................................................................... 23
5.4.2
Verilog ...................................................................................................... 23
5.4.3
Otros.......................................................................................................... 23
5.5
Herramientas de Desarrollo .............................................................................. 24
5.5.1
Descripcin del Diseo ............................................................................. 24
5.5.2
Generacin o Traduccin.......................................................................... 24
5.5.3
Simulacin ................................................................................................ 24
5.5.4
Notas Manejo del tiempo en VHDL ......................................................... 24
6
Dispositivos Lgicos Programables.......................................................................... 27
6.1
Evolucin de los Primeros Dispositivos Lgicos Programables ...................... 28
2005 Guillermo Gichal
6.2
CPLDs............................................................................................................... 31
6.3
FPGAs............................................................................................................... 32
6.3.1
Bloque Lgico Programable ..................................................................... 35
6.3.2
Bloque de Entrada / Salida....................................................................... 38
6.3.3
Bloque de Control de Reloj....................................................................... 41
6.3.4
Memoria.................................................................................................... 43
6.3.5
Bloque de Procesamiento de Seal ........................................................... 44
6.3.6
CPUs Embebidas ...................................................................................... 46
6.3.7
Matriz de Interconexin............................................................................ 47
6.4
Granularidad de los Dispositivos Lgicos Programables (PLDs) .................... 48
6.5
Tecnologa de Configuracin de los PLDs ....................................................... 53
6.6
Tendencias Actuales y Futuras ......................................................................... 54
6.7
Notas a Junio 2005............................................................................................ 54
7
Primeros Pasos con VHDL ....................................................................................... 56
7.1
Notas Preliminares Sobre Formato de VHDL y los Ejemplos ......................... 56
7.1.1
Formato del Cdigo de Ejemplo ............................................................... 56
7.1.2
Capitalizacin en VHDL........................................................................... 56
7.1.3
Comentarios en VHDL ............................................................................. 56
7.1.4
Delimitadores de Cdigo en VHDL ......................................................... 56
7.2
Estructura Bsicas de un Modelo en VHDL..................................................... 57
7.2.1
Entidades y Arquitecturas ......................................................................... 57
7.2.2
Modelos de comportamiento..................................................................... 59
7.2.3
Modelos Estructurales............................................................................... 61
7.3
Elementos del Lenguaje VHDL........................................................................ 64
7.3.1
Palabras Reservadas.................................................................................. 64
7.3.2
Smbolos Especiales.................................................................................. 64
7.3.3
Identificadores........................................................................................... 66
7.3.4
Nmeros.................................................................................................... 66
7.3.5
Cadenas de bits ......................................................................................... 66
7.4
Tipos en VHDL................................................................................................. 67
7.4.1
Tipos Comunes ......................................................................................... 67
7.4.2
Declaracin de Tipos ................................................................................ 67
7.4.3
Tipos enumerados ..................................................................................... 68
7.4.4
Subtipos..................................................................................................... 68
7.4.4.1 Tipo Natural y Positivo......................................................................... 68
7.4.5
Tipos Fsicos ............................................................................................. 69
7.4.5.1 Tipo Tiempo.......................................................................................... 69
7.4.6
Tipos compuestos...................................................................................... 69
7.4.6.1 Arreglos................................................................................................. 70
7.4.6.2 Arreglos sin Rangos Predeterminados .................................................. 71
7.4.6.3 Records ................................................................................................. 72
7.4.7
Calificacin y Conversin de Tipos.......................................................... 72
7.5
Objetos en VHDL ............................................................................................. 73
7.5.1
Constantes ................................................................................................. 73
7.5.2
Seales ...................................................................................................... 73
7.5.3
Variables ................................................................................................... 74
7.6
Libreras y Paquetes.......................................................................................... 75
7.6.1
Libreras .................................................................................................... 75
7.6.2
Paquetes (Packages).................................................................................. 75
7.6.3
Paquetes de Lgica Estndar del IEEE..................................................... 77
7.6.3.1 Lgica estndar std_logic y std_ulogic definidos en std_logic_1164 .. 78
7.6.3.2 Deteccin de flancos de seales definidos en std_logic_1164 ............. 79
7.6.4
Aritmtica sobre lgica estndar............................................................... 79
7.7
Construcciones Bsicas de VHDL.................................................................... 81
7.7.1
Declaracin de seales.............................................................................. 82
7.7.2
Operaciones Concurrentes ........................................................................ 83
7.7.2.1 Flujo de datos........................................................................................ 83
7.7.2.2 Palabra reservada AFTER..................................................................... 85
7.7.2.3 Expresin with select ....................................................................... 86
7.7.2.4 Expresin when, else ............................................................................ 87
7.7.3
Operaciones secuenciales.......................................................................... 88
7.7.3.1 Instruccin WAIT ................................................................................. 88
7.7.3.2 Expresin if elsif else.................................................................... 90
7.7.3.3 Expresin null ....................................................................................... 92
7.7.3.4 Expresin case ...................................................................................... 92
7.7.3.5 Procesos (process)................................................................................. 94
7.7.4
Operaciones secuenciales, retardos delta y sntesis .................................. 98
7.7.5
Visibilidad de las declaraciones de objetos en VHDL.............................. 99
8
Ms VHDL.............................................................................................................. 101
8.1
Introduccin .................................................................................................... 101
8.2
Parmetros Genricos ..................................................................................... 101
8.2.1
Declaracin de parmetros genricos ..................................................... 101
8.2.2
Uso de componentes con parmetros genricos ..................................... 104
8.3
Subprogramas: FUNCTION y PROCEDURE ............................................... 108
8.3.1
Procedimientos........................................................................................ 108
8.3.2
Funciones ................................................................................................ 111
8.3.3
Asociacin de parmetros por posicin y por nombre............................ 113
8.4
Instruccin GENERATE ................................................................................ 113
8.5
Componentes Bsicos de Diseo (Primitivas - Primitives) ............................ 114
8.5.1
Utilizacin de Primitivas desde VHDL .................................................. 114
8.5.2
Libreras de Primitivas (componentes) Especficos para Simulacin..... 116
8.5.3
Memoria.................................................................................................. 116
Inferencia de Memorias ...................................................................................... 118
Instancia de Memorias ........................................................................................ 124
8.5.4
Definicin de Nuevos Componentes de Diseo ..................................... 125
8.6
Mquinas de Estado ........................................................................................ 129
8.6.1
Codificacin de Estados.......................................................................... 133
8.6.2
Divisin de la Seal de Reloj (Clock Enable) ........................................ 134
9
VHDL para Simulacin y Verificacin .................................................................. 135
9.1
Introduccin .................................................................................................... 135
9.2
Bancos de Prueba............................................................................................ 135
9.2.1
Vectores de prueba.................................................................................. 136
9.2.2
Diseo de un Banco de Pruebas.............................................................. 136
9.2.3
Manejo de tiempo en simulaciones usando VHDL ................................ 137
9.2.3.1 Uso del WAIT y AFTER .................................................................... 137
9.2.3.2 Funcin NOW..................................................................................... 138
9.3
VHDL (Generalmente) No Sintetizable.......................................................... 139
9.3.1
Instrucciones de lazo FOR, WHILE y LOOP, NEXT y EXIT............... 139
9.3.2
Instrucciones ASSERT y REPORT ........................................................ 142
9.3.3
Manejo de Archivos y Paquete TEXTIO................................................ 143
9.3.4
Palabra reservada ALIAS ....................................................................... 145
9.3.5
Ejemplos de Componentes para Bancos de Prueba ................................ 146
9.3.5.1 Generacin de Seal de Reloj ............................................................. 146
9.3.5.2 Generacin de una Seal de Reset ...................................................... 147
9.3.5.3 Temporizado de la Interfase de un Bus de Microcontrolador............. 148
9.4
Que Falta sobre VHDL ............................................................................... 152
10
Buenas Prcticas de Diseo ................................................................................ 153
10.1 Introduccin .................................................................................................... 153
10.2 Documentacin ............................................................................................... 153
10.3 Gua de estilo para el cdigo HDL ................................................................. 153
10.4 Programacin para Diseos Sintetizables....................................................... 156
10.4.1
Diferencias entre Sntesis y Simulacin ................................................. 156
10.4.2
Divisin de la Frecuencia Mediante Habilitacin del Reloj ................... 156
10.5 Gua de Estilo Para un Buen Diseo de Hardware ......................................... 159
11
SoCs, Cores y Propiedad Intelectual................................................................... 162
11.1 Introduccin .................................................................................................... 162
11.2 Presentacin de un Core.................................................................................. 162
11.3 Diseo para Verificacin (Design For Test)................................................... 162
11.4 Reutilizacin de Propiedad Intelectual ........................................................... 162
12
Notas Sobre Sntesis con FPGAs........................................................................ 163
12.1 Introduccin .................................................................................................... 163
12.2 Diseo y Optimizacin Para Sntesis.............................................................. 163
12.3 Formato Edif ................................................................................................... 163
12.4 Estructuras Recomendadas para Diseos Sintetizables .................................. 163
12.4.1
Estructuras de Decisin Jerrquicas y Concurrentes (IF vs. CASE) ...... 163
12.4.2
Procesos sincrnicos ............................................................................... 163
12.4.3
etc............................................................................................................ 163
12.4.4
etc............................................................................................................ 163
12.4.5
etc............................................................................................................ 163
12.5 Ejemplos de estructuras sintetizadas............................................................... 163
13
Notas sobre Verificacin..................................................................................... 165
13.1 Introduccin .................................................................................................... 165
14
Uso de las Herramientas ..................................................................................... 166
14.1 Manejo Bsico de Xilinx Project Manager..................................................... 166
14.2 Manejo Bsico de Altera Quartus II ............................................................... 166
14.3 Manejo Bsico de Actel Libero (o la que sea gratuita)................................... 166
14.4 Manejo Bsico de ModelSim.......................................................................... 167
15
Referencias.......................................................................................................... 169
1 Agradecimientos
Con la versin 0.6 llega el aporte de algunos colaboradores. Me gustara aprovechar
entonces para agregar esta seccin y agradecerles su ayuda.
Julio Amoedo de Invap S.E. (www.invap.com.ar) ley la primer versin y me dio mucha
realimentacin para mejorar estas notas. Se que hay secciones que pueden no estar muy
claras, pero trat de seguir sus sugerencias para que todo sea mas entendible.
Salvador Eduardo Tropea, del Instituto Nacional de Tecnologa Industrial de Argentina
(INTI - www.inti.gov.ar) me dio algunas sugerencias y me hizo notar algunos puntos que
podan mejorarse. Gracias a esas sugerencias y sus ejemplos reescrib la seccin sobre
memorias, agregu algunos comentarios a la seccin de VHDL no sintetizable (que en
muchos casos s es sintetizable) y cambi algunos ejemplos que eran muy especficos de
Xilinx.
2 Versiones
Ver 0.5 (27/06/2005)
Publicacin inicial en www.fpga.com.ar
Ver 0.6 (29/06/2005)
Seccin de Agradecimientos y Versiones.
Fuentes en las figuras y tablas de terceros
Cambios en la implementacin de mquinas de estado (no se si aclaran algo o no:)
Cambios en la descripcin de memorias y su uso en VHDL
Algunas notas sobre VHDL sintetizable y no sintetizable
Cambios en la seccin sobre primitivas
Trat de usar trminos aceptados en castellano en vez de mis "castellanizaciones"
Varias correcciones y cambios menores
3 Introduccin
Estas notas son una introduccin al diseo digital utilizando lgicas programables y
lenguajes de descripcin de hardware. La intencin no es hacer un tratamiento exhaustivo
y completo de este tema, sino presentar el material que permitir comenzar a trabajar lo
ms rpido posible. Esto se intenta hacer limitando el contenido y focalizndolo sobre
aplicaciones y ejemplos para diseos sintetizables sobre FPGAs.
Los ejemplos de aplicaciones fueron desarrollados para la placa de desarrollo D2E, DIO1
y DIO2 de Digilent, Inc (www.digilentinc.com). La placa D2E contiene una FPGA
Spartan IIe 200 y varios conectores. Las otras placas se conectan a la D2E y contienen
perifricos, tales como botones, leds, display, conectores PS2 y VGA, etc. Por ese
motivo, en las secciones o ejemplos que utilicen o presenten herramientas de desarrollo, y
en los ejemplos en donde se presenten dispositivos especficos, se utilizarn herramientas
y dispositivos de Xilinx. En las secciones generales, sin embrago, se intentan presentar
dispositivos y herramientas de varios fabricantes para que el lector tenga una visin ms
amplia de las alternativas existentes.
Se espera que el lector de estas notas tenga una base de diseo digital. Adems se supone
que el lector conoce algn lenguaje de programacin y esta familiarizado con la
utilizacin de herramientas de desarrollo de software. Para el que necesita estudiar los
conceptos bsicos de diseo digital se recomienda el libro de John F. Wakerly detallado
al final de esta seccin. Este libro, adems, contiene una excelente introduccin a los
dispositivos lgicos programables. Para el lector que no est familiarizado con ningn
ambiente de desarrollo de software tambin se da una lista de los documentos y manuales
de Xilinx que permitirn que se entienda rpidamente el uso de las herramientas de
desarrollo. En el futuro se completar una seccin introductoria con un repaso de temas
de diseo, tecnologas y tcnicas digitales.
Algunas caractersticas y limitaciones que deben tenerse en cuenta al leer estas notas son
las siguientes:
10
11
12
13
Un sistema puede estar compuesto por varios subsistemas, no todos ellos digitales o
electrnicos. La primer decisin ser entonces que partes del sistema se implementarn
como subsistemas digitales. En el sistema digital, los siguientes pasos se siguen en cada
nivel de la jerarqua del diseo, cada vez con mayor nivel de detalle.
Especificacin - Arquitectura - Diseo lgico - Layout (disposicin y conexionado)
La especificacin es muy importante pare definir bien los lmites de lo que se quiere
fabricar. A partir de la especificacin se puede definir una arquitectura con los diferentes
componentes que implementan cada funcin del sistema. Para el diseo se debe definir el
funcionamiento de cada uno de esos componentes.
Un sistema digital y sus componentes pueden definirse a distintos niveles de abstraccin
y en tres dominios diferentes: Comportamiento, estructural y fsico. En la Figura 2 se
muestra el diagrama "Y" de Gajski y Kahn que representa los niveles de abstraccin y
dominios para un circuito.
14
15
16
Diagrama en bloques del sistema externo, que muestra como y donde encaja el
dispositivo dentro del sistema completo.
Diagrama en bloques interno que muestra los principales bloques funcionales.
Descripcin de las entradas/salidas, incluyendo interfaces lgicas, elctricas y
protocolos de comunicacin.
Estimaciones de tiempos que se deben cumplir, incluyendo tiempos de "setup" y
"hold" para las entradas/salidas y frecuencias de reloj.
Estimacin de la complejidad y/o magnitud del dispositivo, dado en nmero de
compuertas equivalentes o nmero de circuitos integrados necesarios.
Especificacin fsica del dispositivo. Tamao, empaquetamiento, conectores, etc.
Estimacin del consumo de potencia del dispositivo.
Precio estimado del dispositivo.
Procedimientos de verificacin y validacin para el dispositivo.
Despus de escribir las especificaciones es importante hacer una revisin con todos los
miembros del equipo. De esta revisin podrn surgir cosas que no se tuvieron en cuenta
individualmente y que produzcan modificaciones. La especificacin tambin incluye la
metodologa de verificacin del dispositivo. Estas muchas veces se dejan para el final del
proyecto y no se definen ni llevan a cabo de manera adecuada.
La especificacin es un documento activo, que se modifica de acuerdo en los cambios de
requerimientos y a medida que se tiene ms informacin sobre el proyecto.
Una vez que se escribe la especificacin se puede utilizar para seleccionar componentes y
tecnologas que se utilizarn para el proyecto. El diseo deber hacerse siguiendo
mtodos aceptados y confiables. El proceso de diseo es en general un ciclo, e incluye
varios pasos intermedios.
17
5.1.2 Verificacin
La verificacin engloba varios pasos menores, y al revisar pueden surgir cosas que
obligan a volver atrs hacia pasos anteriores. Dependiendo del dispositivo y tecnologa
utilizada, pero en general sigue los siguientes pasos:
18
19
20
21
En la figura, las flechas de lneas punteadas que vuelven al comienzo indican las
iteraciones que muchas veces se dan al trabajar en un diseo nuevo. Despus de simularlo
o configurar un PLD, pueden descubrirse fallas o haber cambios de requerimientos que
obligan al diseador a volver y modificar la descripcin del diseo.
22
5.4.1 VHDL
Las siglas VHDL provienen de VHSIC Hardware Description Lenguaje y a su vez
VHSIC quiere decir Very High Speed Integrated Circuit. O sea que VHDL significa
lenguaje de descripcin de hardware para circuitos integrados de alta velocidad. Sus
orgenes datan de la dcada de 1980. El departamento de defensa de Estados Unidos y el
IEEE patrocinaron un programa de desarrollo para un lenguaje con el que se pudieran
modelar circuitos integrados de alta complejidad. Un lenguaje de estas caractersticas
permitira describir los circuitos para su documentacin y adems modelarlos y
evaluarlos mediante simulaciones antes de incurrir en los grandes gastos de fabricacin.
El VHDL naci entonces como un lenguaje de modelado y documentacin de sistemas
electrnicos digitales. El lenguaje se estandariz mediante el estndar 1076 del IEEE en
1987 (VHDL-87). Este estndar fue extendido y modificado en 1993 (VHDL-93) y 2002
(VHDL-2002).
En la actualidad, VHDL se utiliza no solo para modelar circuitos electrnicos sino
tambin para crear, o sintetizar, nuevos circuitos. La capacidad de sintetizar circuitos a
partir de los modelos en VHDL (u otro lenguaje de descripcin de hardware) surgi
despus de la creacin del lenguaje, con la aparicin de herramientas que traducen los
modelos VHDL a circuitos reales.
5.4.2 Verilog
El lenguaje Verilog fue desarrollado por Gateway Design Automation en 1984. En 1988
Synposis present la primera herramienta de sntesis basada en Verilog. Ms tarde
Cadence Design Systems adquiri Gateway Design Automation y luego abri el
lenguaje para que otros proveedores pudieran desarrollar herramientas de simulacin y
sntesis utilizando Verilog. En 1995 el lenguaje Verilog se transform en un estndar del
IEEE. Mientras que la sintaxis del VHDL es parecido a los lenguajes de programacin
Ada y Pascal, el Verilog proviene del C y tiene una sintaxis mas parecida a este.
5.4.3 Otros
En la actualidad los dos lenguajes mencionados, VHDL y Verilog, son los mas utilizados
para la sntesis automtica de hardware. Hay mucho esfuerzo de investigacin y
desarrollo (e incluso algunas herramientas comerciales) que aceptan la descripcin de
algoritmos en otros lenguajes con un mayor nivel de abstraccin.
Muchos vendedores de FPGAs proveen herramientas o "toolboxes" que se integran a
lenguajes de modelado como Matlab y Simulink. Una vez probado un algoritmo con estas
herramientas se genera de manera automtica el hardware necesario para implementarlo.
Una de las lneas de desarrollo principales es la de poder describir los sistemas con un
nivel de abstraccin mayor al RTL en un nico lenguaje Despus se especificaran las
restricciones necesarias para los resultados y las herramientas decidiran que parte
conviene implementar en hardware y que partes en software.
23
En general todas las herramientas actuales, aunque permiten describir o modelar los
sistemas con un lenguaje mas abstracto que el RTL terminan generando alguna versin
de cdigo RTL antes de sintetizar un circuito.
5.5.3 Simulacin
La simulacin de un sistema descrito de modelos en HDL merece algunos comentarios.
Los lenguajes de descripcin de hardware modelan o describen, mediante instrucciones
secuenciales, bloques de hardware que funcionarn de manera concurrente, es decir, al
mismo tiempo. Las seales de los bloques pueden afectarse mutuamente. Simular esto
tiene su complejidad, y dentro de los estndares que definen los lenguajes de descripcin
de hardware VHDL y Verilog se especifica como se deben simular los procesos
concurrentes.
24
valor lgico 1 a la seal X, este cambio nunca se producir inmediatamente, sino que
habr un retardo (como mnimo de un retardo delta) para la asignacin. Con esto en
mente, puede analizarse un ciclo de simulacin en VHDL que se comporta de la manera
mostrada en la Figura 5.
Al comenzar la simulacin (tiempo de simulacin cero) se asigna valores iniciales a las
seales. Despus de asignar los valores a las seales, se ejecutan todos los procesos hasta
que estos lleguen a un estado de reposo. En general, los procesos incluirn asignaciones
de nuevos valores para algunas seales. Estos cambios o asignaciones en los valores de
las seales se agendan para un tiempo posterior. Las seales recin se actualizarn
despus de un retardo, nunca inmediatamente.
Cuando los procesos estn en un estado de reposo (todos los procesos en VHDL tienen
un estado de reposo) se incrementa el tiempo de simulacin como para cambiar la seal
que tiene la prxima transicin. Este retardo ser el menor tiempo de todas las
asignaciones de seal hecha por los procesos, y puede ser un retardo delta o un tiempo
especificado por el cdigo. Despus de cambiar la(s) seal(es) se examinan nuevamente
los procesos para ver si esos cambios estimulan o disparan el comportamiento de algn
proceso o puede continuar la simulacin. Si se dispara algn proceso, este se evala
nuevamente de la manera descrita anteriormente. Si no se dispara ningn proceso se
procede a incrementar el tiempo hasta la prxima transicin de seal. Esto se repite hasta
llegar a un tiempo en la que no hay ninguna transicin de seal y todos los procesos estn
en reposo. Este proceso de simulacin permite obtener resultados determinsticos.
A continuacin se presenta un ejemplo para explicar mejor el proceso de simulacin en
VHDL. La Figura 6 muestra un circuito digital y los valores iniciales de las seales A, B,
25
C, X e Y. Todas las compuertas estn definidas para no tener retardo de propagacin, por
lo que el simulador usar el valor de un retardo delta. A los 50 ns de simulacin la
entrada A pasa de 1 a 0.
Tiempo Delta A
0 ns
1
50 ns
0 0
1 0
2 0
3
B X Y
1 0 1
1 0 1
1 1 1
1 1 0
1
C
0
0
0
1
Proceso
Entrada y salidas estables
Cambio en la entrada A. Evaluar inversor
Cambio en X. Evaluar NAND, Evaluar AND
Cambio en Y, C. Evaluar AND
El pulso de un delta tiene sentido ya que al estar definidos los retardos sobre las
compuertas al valor por defecto de un retardo delta, el tiempo de propagacin a travs de
dos compuertas (NAND-AND) es mayor que a travs de una sola(AND), generando el
pulso (o glitch) en la salida C.
26
27
La base terica de estos dispositivos es que cualquier ecuacin lgica puede reducirse a
una suma de productos. El corazn electrnico de estos dispositivos consiste en un
bloque que permite negar las entradas y dos niveles de compuertas: un nivel de
compuertas AND y un nivel OR. Mediante fusibles pueden programarse las
interconexiones entre las entradas y la lgica. As los PLA permiten implementar
cualquier suma de productos de sus entradas. La Figura 7 muestra un esquema bsico de
un tpico dispositivo PLA.
Debido a las limitaciones en la velocidad de las conexiones programables y los
problemas en el proceso de manufactura de las PLA, surgieron dispositivos con un solo
nivel de lgica programable denominados PAL (recordar que los PLA tienen dos niveles
programables: un nivel AND y un nivel OR). Los PAL se basan en el mismo principio
que las PLA, pero tienen un nivel de lgica AND programable mientras el nivel de lgica
OR es fijo. Esto limita la cantidad de funciones que pueden definirse con un dispositivo
2003 Guillermo Gichal
28
dado, as que los fabricantes de PAL los ofrecan en una variedad de configuraciones para
adecuarlos a las necesidades del usuario. Muchos PAL adems incorporaron registros
sobre las salidas y realimentacin para implementar circuitos secuenciales. La Figura 8
muestra un esquema de una posible configuracin de un PAL.
Los dispositivos denominados GAL son un poco mas complejos que los PAL
mencionados anteriormente. Incluyen un nivel de lgica AND a la entrada y luego un
bloque lgico denominado macrocelda a la salida, en reemplazo del nivel OR. La
denominacin GAL fue utilizada en principio por Lattice, y luego licenciada a otros
fabricantes. Las Figura 9 y Figura 10 muestran el diagrama funcional de una GAL
completa y de una macrocelda de un dispositivo GAL22V10 de Lattice Semiconductors.
La macrocelda de estas GAL se denomina OLMC, por "Output Logic Macro Cell".
29
Figura 10 - Diagrama funcional de una macrocelda del GAL 22V10 de Lattice Semiconductors
(Fuente: hoja de datos de Lattice Semiconductors GAL 22V10 - www.latticesemi.com)
30
6.2 CPLDs
Los CPLDs son dispositivos que combinan varios bloques lgicos similares a las PAL o
GAL con una matriz de interconexin programable. Estos dispositivos se fabrican con
distintas capacidades para adaptarlos a las necesidades del usuario. Como ejemplo, la
familia MAX7000 de alto rendimiento de Altera se manufactura en versiones desde 32
hasta 512 macroceldas, con 36 a 212 entradas/salidas segn el dispositivo y
empaquetamiento (packaging) que se elija. Las Figura 11 y Figura 12 muestran la
estructura general y una macrocelda de estos CPLDs. Como se de las figura, estos
dispositivos incluyen adems de las macroceldas, un arreglo de interconexin
programable (PIA), una red de distribucin de reloj dedicada y bloques de entrada salida
que permiten interfases compatibles con diferentes estndares elctricos. Los bloques
lgicos AND y OR estn ambos incluidos en la macrocelda del dispositivo.
31
6.3 FPGAs
La arquitectura de una FPGA consiste en arreglos de bloques lgicos que se comunican
entre si a travs de canales de conexin verticales y horizontales. La Figura 13 muestra
un esquema de esta estructura. La principal diferencia entre las FPGA y CPLDs es que en
general los bloques lgicos de las FPGA no implementan la lgica usando compuertas
sino con generadores de funciones. En la siguiente seccin se estudiar en mayor detalle
la arquitectura de una FPGA tpica.
32
En las Figura 14 se muestra la arquitectura general de una FPGA de la familia Spartan IIe
de Xilinx. Esta FPGA contiene cinco elementos principales:
33
Adems de los bloques lgicos bsicos, que ocupan la mayor parte de las FPGAs (CLBs,
Logic Array, Logic Tile, etc.), estos dispositivos constan de bloques que cumplen ciertas
funciones especficas. En las siguientes subsecciones se presentan en mayor detalle
34
algunos de los bloques o mdulos especficos que pueden conformar una FPGA. No
todos los bloques se encuentran en todas las FPGA, aunque casi todas tienen la
estructura general presentada al principio de esta seccin. La arquitectura especfica de
cada FPGA depender del fabricante y la aplicacin a la que est orientada.
Figura 17 Esquema del bloque lgico configurable de una FPGA Spartan IIe de Xilinx
(Fuente: hoja de datos Xilinx Familia Spartan 2e www.xilinx.com)
Cada CLB esta compuesto por dos bloques iguales denominados slices. Cada "slice"
contiene dos generadores de funciones y un multiplexor MUXF5. El multiplexor combina
los resultados de los generadores de funciones dentro de cada "slice" del CLB.
Las dos "slices" estn unidas por un multiplexor MUXF6, que puede seleccionar la salida
de una u otra slice hacia la salida del CLB. Esto permite implementar cualquier funcin
de 6 entradas, un multiplexor de 8:1 o determinadas funciones lgicas de asta 19
entradas. Adems de poder implementarse lgica combinacional, cada slice contiene
35
Figura 18 - Esquema interno de medio bloque lgico configurable de una Spartan 2e de Xilinx
(Fuente: hoja de datos Xilinx Familia Spartan 2e www.xilinx.com)
En esta figura se ven los generadores de funciones, compuesto por una tabla de entradasalida (LUT o Look-Up Table) de cuatro entradas y una salida. Estas tablas pueden
implementar cualquier funcin lgica de cuatro entradas y una salida, as como tambin
utilizarse como memorias distribuidas de 16 x 1 bit. Las salidas de las LUT pasan a los
bloques de control, que contiene lgica que permite optimizar funciones aritmticas. Los
36
37
38
Figura 21 Distribucin de los bancos de entrada/salida en una FPGA Spartan IIe de Xilinx
(Fuente: hoja de datos Xilinx Familia Spartan 2e www.xilinx.com)
La siguiente tabla muestra el valor de VccO para las diferentes interfases lgicas.
Tabla 2 - Tensin VccO para diferentes interfases lgicas de la familia Spartan IIe de Xilinx
Valor de VccO
3.3V
2.5V
1.8V
1.5V
Lgica de interfase
PCI, LVTTL, SSTL3 I, SSTL3 II, CTT, AGP, LVPECL, GTL, GTL+
SSTL2 I, SSTL2 II, LVCMOS2, LVDS, Bus LVDS, GTL, GTL+
LVCMOS18, GTL, GTL+
HSTL I, HSTL III, HSTL IV, GTL, GTL+
Adems de la tensin VccO, para varios de las interfases lgicas debe configurarse la
tensin de referencia VREF y agregarse resistencias de terminacin sobre la plaqueta en
las entradas-salidas de la FPGA. Cada bloque de entrada-salida tiene una resistencia de
pull-up y pull-down configurables que permiten fijar el valor lgico mediante
programacin.
Internamente, cada bloque de entrada-salida de la familia Spartan IIe de Xilinx tiene la
estructura mostrada en la Figura 22. Los elementos de entrada-salida de las FPGAs de
Altera Cyclone II tienen la estructura mostrada en la Figura 23.
39
Figura 22 - Esquema de un bloque de entrada-salida (IOB) de una FPGA Spartan IIe de Xilinx
(Fuente: hoja de datos Xilinx Familia Spartan 2e www.xilinx.com)
40
41
Figura 25 Esquema bsico de un bloque de control de reloj de la FPGA Spartan IIe de Xilinx
(Fuente: hoja de datos Xilinx Spartan 2e www.xilinx.com)
La familia Stratix de Altera tiene los bloques de control de reloj que se muestran en la
Figura 26.
42
Estos bloques (Enhanced PLL) permiten controlar la fase y frecuencia del reloj, el
sistema de distribucin de reloj y el estndar elctrico de interfase entre otras cosas.
6.3.4 Memoria
La memoria es un componente muy utilizado en diseos digitales. Varias familias de
FPGA contienen bloques de memoria embebida integrados con la lgica programable. En
general estos bloques bsicos de memoria pueden utilizarse en diferentes configuraciones
para generar RAMs y ROMs de diferentes tamaos. Adems de memorias embebidas, las
FPGAs basadas en memoria SRAM pueden usar las tablas LUT de los bloques lgicos
como memoria.
La Figura 27 muestra un esquema de una celda de memoria bsica de la familia Spartan
IIe de Xilinx. Este bloque se denomina BLOCK RAM y es una memoria de puerto dual
(dual-port), que puede leerse y escribirse al mismo tiempo.
Estos bloques de memoria pueden usarse como memorias de puerto dual, puerto simple,
RAMs o ROMs. Para entender la versatilidad de estos bloques de memoria, en la
siguiente tabla se muestran las opciones de configuracin. Las interfases de direccin y
datos (ADDRA, ADDRB, DIA, DOB, DOA) se pueden configurar para diferentes
tamaos de memoria.
43
Tabla 3 - Posibles configuraciones de las celdas de BLOCK RAM de la familia Spartan IIe de Xilinx
Ancho de la palabra de
datos (bits)
1
2
4
8
16
Profundidad de
la memoria
4096
2048
1024
512
256
Bus de
direcciones
ADDR<11:0>
ADDR<10:0>
ADDR<9:0>
ADDR<8:0>
ADDR<7:0>
Bus de datos
DATA<0>
DATA<1:0>
DATA<3:0>
DATA<7:0>
DATA<15:0>
Adems de poder configurar cada bloque, varios bloques pueden conectarse utilizando
lgica externa para implementar memorias de otros tamaos y colas FIFO o FILO.
La Figura 28 muestra un bloque de memoria de Actel, que puede configurarse como
memoria de puerto simple, dual o multi-puerto.
44
lgica de propsito general. Al igual que los otros bloques, los bloques especficos
pueden interconectarse a los dems bloques utilizando la matriz de intercone3xin
programable de la FPGA.
45
46
47
48
49
50
Arquitecturas mixtas
Combinan celdas con granularidad fina y gruesa
Muchas veces tienen recursos de interconexin dedicados para cada tipo de
celda
Ejemplo: ispXPGA de Lattice Semiconductors
51
52
Tecnologa
EEPROM
SRAM
Flash
Antifusible
Ventajas
Desventajas
No voltil
Puede probarse en un 100%
Software simple
Tecnologa base muy conocida
Requiere programador
Requiere tensiones altas
La misma velocidad que SRAM
Menor cantidad de reprogramaciones
No pueden reconfigurarse
Requiere programador
No puede evaluarse. Si se comete un error, se
pierde el integrado
53
En los primos aos probablemente se ver una mayor incorporacin de las lgicas
programables en los diseos, junto a una mayor variedad, diversidad, nuevas ideas y
diseos basados en lgicas y plataformas programables.
54
refiere al lector a los sitios web de los fabricantes de FPGAs listados al final de las notas.
La presentacin anterior debera servir para poner en tema al lector y presentarle los
conceptos bsicos sobre estas tecnologas. Para obtener mas detalles referirse a las
pginas web de los fabricantes (Ver referencias).
55
56
57
entity Contador is
port(
Reset_IN
Clock_IN
Cuenta_OUT
);
end Contador;
: IN
: IN
: OUT
std_logic;
std_logic;
std_logic_vector(5 downto 0)
La palabra reservada entity especifica que comienza con la declaracin de una entidad de
hardware. Esta entidad tendr el nombre Contador.A continuacin se definen las
seales de interfase mediante la palabra port.
Los tipos de seales de interfase o ports pueden tener los siguientes modos:
IN
Seal de entrada al componente
OUT
Seal de salida del componente
INOUT
Seal bidireccional. Usada para interfases de tres estados.
BUFFER
Seal de salida que puede leerse internamente. No recomendada
para diseos sintetizables.
58
En general, los tipos de los ports que se recomiendan para diseos sintetizables son
std_logic y std_logic_vector1, que definen seales de 1 bit o varios bits de ancho
respectivamente.
La entidad termina con la palabra reservada end. Notar el uso del ; para terminar cada
instruccin y su uso en la separacin de la declaracin de las seales de interfase.
La descripcin del funcionamiento del componente se define en la segunda seccin de
definicin del componente, denominada arquitectura. De la misma manera que una
funcin en hardware puede ser diseada de diferentes maneras, el comportamiento de un
componente puede modelarse de muchas maneras diferentes en VHDL.
En general la seccin de arquitectura tendr la estructura mostrada a continuacin.
Los tipos std_logic y std_logic_vector estn definidos en libreras estndar de IEEE que se describirn
ms adelante.
59
Para el siguiente ejemplo, se supone que hay una entidad LogicaVaria declarada que
tiene varias entradas y cuya salidas son funciones lgicas AND y OR de las entradas. A
continuacin se muestran dos posibles arquitecturas de comportamiento para este
componente.
En el primer ejemplo se utilizan instrucciones concurrentes para asignar las salidas
directamente. En el segundo ejemplo se utiliza un proceso que se disparar ante un
cambio de cualquiera de las entradas. Este proceso cambia el valor de las seales
internas que actan solo como cables hacia los puertos de salida. El funcionamiento de
ambos modelos es exactamente el mismo y pueden definirse una variedad de modelos
con el mismo comportamiento.
60
61
);
component CompuertaOr
port(EntradaOr1_IN : IN std_logic;
EntradaOr2_IN : IN std_logic;
SalidaOr_OUT : OUT std_logic;
);
begin Comienzo de la especificacin de estructura
-------
ComponenteBasicoAnd : CompuertaAnd
port map (EntradaAnd1_IN => Entrada1_IN,
EntradaAnd2_IN => Entrada2_IN,
SalidaAnd_OUT => SalidaAnd_OUT
);
ComponenteBasicoAnd : CompuertaOr
port map (EntradaOr1_IN => Entrada1_IN,
EntradaOr2_IN => Entrada2_IN,
SalidaOr_OUT
=> SalidaOr_OUT
);
end architecture Estructura;
Cuadro 5 Modelo estructural
En este ejemplo se conectaron dos componentes bsicos que implementan una compuerta
AND y una OR de dos entradas y una salida para definir el funcionamiento del
componente LogicaVaria. Notar el smbolo de conexin => (diferente al de asignacin
para seales <= ) y el uso de los separadores , entre los diferentes puertos de los
componentes bsicos. Otra cosa que se debe destacar es que no hay ningn problema en
que las seales o puertos de varios componentes en la jerarqua tengan el mismo nombre,
como puede verse en la conexin de las seales de salida.
En el modelo estructural pueden apreciarse dos partes principales. Una es la declaracin
de los componentes antes del comienzo (begin) de la arquitectura utilizando la palabra
component. La otra es crear una "instancia" (instantiation) de los componentes dentro de
la arquitectura. Instancia se refiere a crear una copia de un componente, dndole un
nombre nico dentro del diseo. Puede verse la instancia de un componente como la
creacin de una copia del componente dentro del componente actual. Los puertos del
componente se conectan a diferentes seales mediante el mapeo con las palabras port
map. En el ejemplo todos los puertos de los componentes se interconectan de manera
62
63
2
3
64
Smbolo
Significado
Ejemplos de uso
&
(comilla
simple)
*
+
Operador de concatenacin
Atributos
Calificacin de tipo ambiguo
Caracteres
Valores de dgitos de bit
Subprogramas, para agrupar operadores
y dar prioridad en expresiones, etc.
Multiplicacin
Suma o identidad
Resta o negacin
, (coma)
. (punto)
std_logic_vector := 001000
Una cadena
una cadena con comillas.
2#1001000# -- nmero binario
16#af125f# -- nmero hexadecimal
001 & 111 -- equivalente a 001111
Clockevent Aleft
Bhigh
unsigned(10001)
A c
0 1 Z (alta impedancia)
function ()
(A + B) * 4
A := A * 4;
A+B
Cuenta_REG + 1
AB
Cuenta_REG 1
port map(A => A, B => B)
0.5 2#0.100#
use ieee.std_logic_1164.all
A := A / 4;
signal A : std_logic;
constant C : integer;
A_REG <= 1;
if (A < B) then
if (A = 0) then
if (A > 0) then
( )
/
:
;
<
=
>
[ ]
| (barra
vertical)
=>
**
:=
/=
>=
<=
<>
\
_ (Guin
bajo)
Fin de instruccin
Menor en comparaciones
Igual en comparaciones
Mayor en comparaciones
Mltiples opciones en una condicin
(others => 0)
VariableA := 1
if (A /= 0) then
if (A >= 2) then
A <= 1; -- A toma el valor 1
if (A <= 3) then
(natural range <>)
\C:\\Xilinx\CarpetaProyecto\
124_321
b0100_0110
2#0110_1100#
X12FD_C46B_4567
65
7.3.3 Identificadores
Los identificadores se utilizan para dar nombre a los elementos de un diseo, ya sea
seales, variables o cualquier otro elemento del diseo.
Los identificadores pueden utilizar los caracteres alfanumricos y el guin bajo _.
Deben comenzar con una letra y no pueden tener mas de dos guiones bajos seguidos ni
terminar con un guin bajo. Recordar que no deben usarse palabras reservadas como
identificadores y que VHDL no diferenciar identificadores solo por las maysculas.
Ejemplos:
constant UTN_CUENTA_MAXIMA : integer := 56;
-- Una constante
signal
CuentaDeReloj_REG
: std_logic_vector(3 downto 0); -- Una seal
variable CuentaModulo1_VAR
: std_logic_vector(3 downto 0); -- Una variable
A partir de VHDL-93 se permite definir identificadores extendidos utilizando el smbolo
\. Estos identificadores extendidos pueden tener cualquier smbolo sin las limitaciones
de los identificadores bsicos de VHDL. Esto se hace para poder comunicarse con
herramientas de desarrollo que aceptan identificadores con formatos diferentes a los de
VHDL.
7.3.4 Nmeros
Los nmeros pueden representarse en diferentes bases y formatos. Hay dos tipos bsicos
de nmeros, los enteros (integer) y reales (real). Se puede usar notacin exponencial con
ambos tipos de nmero. Los nmeros pueden representarse en cualquier base de 2 a 16
usando #.
Los reales son nmeros representan aproximaciones a nmeros fraccionarios y contienen
un punto decimal con al menos un nmero antes y uno despus. En general los reales no
se utilizan en diseos para sntesis.
Ejemplos de nmeros reales:
1.23 1.2e4 1.23e-4 0.5 2#0.10# 8#0.4#
Ejemplos de nmeros enteros:
1 2 3467 2#01110#
16#0AFD24#
66
Tipo
bolean
carcter
integer
real
time
std_logic
std_logic_vector
Comentario
Tipo buleano, toma los valores TRUE o FALSE
Contiene todos los caracteres ISO de 8 bits
Valores enteros. Como mnimo deben incluir los valores desde
el (- 231 + 1) hasta el (231-1)
Usado para representar valores fraccionarios
Usado para controlar tiempo en los modelos. Especialmente
importante durante las simulaciones.
Usada para seales
Definido a partir de std_logic, permite tener seales de un ancho
de varios bits
A diferencia del C que tiene tipos dbiles y en el que pueden asignarse valores de un tipo diferente al
declarado para las variables (tales como asignar a una variable del tipo float un valor int).
67
Ejemplos:
type tdDiaDelMes is range 0 to 31;
type tdHorasDelDia is range 0 to 23;
Mas ejemplos de tipos:
type tdMinutos is range 0 to 59;
type tdUnTipoRaro is range 59355 downto -456;
Ejemplos:
type tdCPUCycle is (fetch, decode, execute1, execute2);
type tdCicloLectura is (comienzo, lectura, fin);
type tdOctal is (0, 1, 2, 3, 4, 5, 6, 7);
type tdLogica3Estados is (0, 1, Z);
7.4.4 Subtipos
As como se pueden definir nuevos tipos, fcilmente se pueden definir subtipos a partir
de tipos ya declarados. La siguiente expresin permite hacer esto.
68
69
7.4.6.1 Arreglos
Un arreglo (array) es una coleccin de valores todos del mismo tipo. Se describe la
declaracin de tipos arreglos con varios ejemplos. Aunque todava no se han descrito los
objetos variable y constant se usan para ayudar a entender como se accede a los
elementos de un arreglo.
-- Indice
-- creciente
type tdByteD is array (7 downto 0) of std_logic; -- Indice
-- decreciente
-- Tipo auxiliar para los siguientes ejemplos
type tdEstadosControlador is (Inicial, Espera, Ejecucion,
Abrir, Cerrar, Fin);
-- Tipos arreglos a partir de un tipo enumerado
type tdContadorEstados is array (Inicial to Ejecucion)
of natural;
-- O lo mismo pero especificando el tipo original
type tdContadorEstados is array (tdEstadosControlador range
Inicial to Ejecucion) of natural;
-- Una vez que se ha definido un tipo arreglo se pueden definir
-- objetos de esa clase y se direccionan de la siguiente manera
constant PalabraDeControl : tdByteC := (0, 1, 0, 0,
1, 0, 1, 0);
-- La palabra reservada others se refiere a todos los elementos
-- que no han sido nombrados explicitamente
variable PalabraDeControl : tdByteD;
PalabraDecontrol (1) := 1;
PalabraDecontrol (4) := 1;
PalabraDecontrol (6) := 1;
PalabraDeControl := (others => 0); -- Todos los elementos !!!
-- Ahora uso others para definir los elementos 0,2,3,5 y 7
PalabraDecontrol := (1 =>1, 4 =>1, 6 =>1, others => 0);
variable ContadorEstados
ContadorEstados(Inicial)
ContadorEstados(Espera)
ContadorEstados(Inicial)
: tdContadorEstados;
:= 0;
:= 0;
:= ContadorEstados(Inicial) + 1;
70
Ejecucion => 0,
others
=> 0); -- Queda solo Espera
Cuadro 12 Arreglos
71
Como VHDL es un lenguaje con tipos fuertes, cuando se necesita convertir de un tipo a
otro se debe especificar una conversin explcitamente. Esto se hace utilizando el tipo al
que se quiere convertir seguido del valor de otro tipo entre parntesis.
Ejemplos:
real(3)
integer (4.5)
72
7.5.1 Constantes
Las constantes son tipos en las que se almacenan datos que no cambian. Como su nombre
lo indica, se mantienen constantes en el tiempo. Las constantes se utilizan para poder
asignar tipos definidos a valores. Se utilizan para parametrizar valores que se repetirn en
distintos lugares del diseo y evitar nmeros mgicos, que aparecen en el cdigo pero
no se entiende bien que significan ni que tipo tienen. En vez de esto, puede definirse un
paquete que contenga todas las constantes usadas en el proyecto, con tipos nombres que
tengan sentido al leer el cdigo.
Las constantes se declaran como se muestra en el cuadro.
-----
Declaracin de constantes
El formato usado en este ejemplo para los
identificadores de constantes es el recomendado
en varias guas de cdigo VHDL
7.5.2 Seales
Las seales son la representacin de las conexiones de hardware que toman valores
lgicos. En general deben utilizarse seales al hacer un diseo que ser sintetizado. Los
tipos de seales mas utilizados son los mostrados en las declaraciones del cuadro. Estos
tipos se han definido por un estndar del IEEE que se describe ms adelante. EL
operador para asignacin de valores a una seal es el smbolo <=.
73
En simulacin las seales toman sus valores un delta de tiempo despus de que se ejecuta
la instruccin, como se explicara en la seccin 5.5.3. Al sintetizar un circuito, la
asignacin puede verse como una conexin fsica, o un cable.
7.5.3 Variables
Las constantes pueden almacenar datos para utilizarlos en el modelo. Se asemejan a las
variables de otros lenguajes de programacin. Las variables toman los valores
instantneamente al asignarse en el cdigo. El operador de asignacin para las variables
es :=. Para diseos sintetizables se recomienda utilizar seales, pero las variables son
muy tiles al disear bancos de prueba.
-- Declaraciones de variables
variable A : integer;
variable B : integer := 56;
variable C : natural := 2#100_0111;
variable ValorMaximo_VAR : std_logic_vector(1 downto 0);
variable TiempoDeEspera
: time := 0 ns;
-- Asignacin de valores de variables
A := 45;
-- El tipo de A debe aceptar el valor 45
C := B;
-- Ambas variables del mismo tipo
TiempoViejo := TiempoActual;
Cuadro 17 Declaracin de variables
74
7.6.1 Libreras
Una librera se define como una coleccin de unidades de librera. Dependiendo de la
herramienta y el sistema operativo de la computadora que se utilice una librera puede ser
una carpeta directorio o una base de datos que contenga los nombres de las entidades y
arquitecturas que le pertenecen. Esto significa que una librera es solo una manera de
agrupar diferentes unidades para organizarlas, darles una jerarqua y poder reutilizarlas de
una manera ordenada. VHDL reserva el nombre de librera work para la librera del
diseo actual.
Si se necesita acceder a entidades, declaraciones o funciones de otra librera se debe
utilizar la instruccin library. La librera work se agrega al diseo en el que se est
trabajando de manera implcita. Supongamos que hay un conjunto de componentes que se
quieren reutilizar y han sido asignados a una librera llamada CompuertasBasicas en
algn diseo anterior. Para utilizar esos componentes se debe agregar lo siguiente antes
de la especificacin de una arquitectura.
La localizacin de la librera no est especificada por VHDL sino por la herramienta que
se est utilizando. Por ejemplo, la herramienta puede tener un men donde se seleccionan
las libreras y se especifica el lugar dentro del disco rgido donde estas se localizan. Esa
informacin luego queda guardado en una base de datos para poder procesarla cuando el
analizador encuentra la directiva library en el VHDL.
75
-- Declaracin de un paquete
package NombrePaquete is
-- Declaraciones de constantes
constant ... ;
-- Declaraciones de tipos
type ...
;
subtype ... ;
-- Declaraciones de seales
signal ...
-- Declaraciones de subprogramas
function F1(...) return ... ;
function F2(...) return ... ;
...
end package NombrePaquete;
-- ----------------------------------------------------- --- Definicin del cuerpo del paquete
package body NombrePaquete is
function F1(...) is
...
function F2(...) is
...
end package body NombrePaquete;
Cuadro 19 Declaracin de paquetes
76
77
Valor
U
X
0
1
Z
Descripcin
Sin inicializar
Desconocido forzado
0 forzado
1 forzado
alta impedancia
Valor
W
L
H
-
Descripcin
Desconocido dbil
0 dbil
1 dbil
No importa
A partir de esta lgica tambin se define el subtipo std_logic. Este tipo es lo que se
denomina lgica resuelta ya que incluye funciones que definen que pasa cuando varias
salidas se conectan a una seal.
Los valores dbiles y forzados se incluyen para poder modelar hardware que tiene
diferentes capacidades de controlar una seal. Por ejemplo, si una seal tiene un buffer de
tres estados que la maneja (posibles valores 0, 1 y Z) y adems una resistencia de
pull-up a la tensin de alimentacin con un valor alto (valor H). Si la salida del buffer
es alta impedancia (Z) el valor de la seal estar dado por la resistencia, pero si el buffer
tiene una salida lgica, esta forzar el valor de la seal mas all de la resistencia de pullup.
Del tipo std_logic se define el tipo std_logic_vector que es un arreglo (array) de
std_logic. std_logic_vector es un arreglo sin lmites, y el valor de los ndices mximo y
mnimo se dan al declarar el objeto de ese tipo.
Estos tipos se nos permite modelar seales y buses de diferentes anchos. Los tipos
std_logic y std_logic_vector son los recomendados para su uso y son los que se usarn
en los ejemplos de este texto.
Ejemplo de uso del tipo std_logic en la declaracin de una entidad :
entity Contador is
port(
Clock_IN
: IN std_logic;
Reset_IN
: IN std_logic;
Cuenta_OUT : OUT std_logic_vector (31 downto 0)
);
Ejemplo de uso del tipo std_logic en la declaracin de seales en una arquitectura
signal Cuenta_REG
: std_logic_vector (31 downto 0);
signal intFinDeCuenta : std_logic;
78
Funcin
rising_edge(S)
Tipo que
devuelve
boolean
falling_edge(S) boolean
Descripcin
Devuelve TRUE si hay un flanco ascendente
sobre S, sino devuelve FALSE.
Devuelve TRUE si hay un flanco descendente
sobre S, sino devuelve FALSE.
79
Oper. Operacin
abs
+
*
/
rem
mod
=
/=
<
<=
>
>=
sll
srl
rol
ror
not
and
or
nand
nor
xor
xnor
valor absoluto
negacin
suma
resta
multiplicacin
divisin
resto
mdulo
igualdad
diferente
menor
menor o igual
mayor
mayor o igual
corrimientos
lgicos
rotaciones
Tipo del
operando
derecho
signed
Tipo del
resultado
Longitud del
resultado
signed
unsigned
signed
unsigned
natural
signed
integer
unsigned
signed
unsigned
natural
signed
integer
unsigned
signed
unsigned
signed
natural
unsigned
integer
signed
unsigned
signed
natural
unsigned
integer
signed
integer
integer
unsigned
signed
unsigned
unsigned
signed
signed
boolean
boolean
boolean
boolean
boolean
boolean
unsigned
signed
unsigned
signed
unsigned
signed
unsigned
signed
unsigned
signed
unsigned
signed
Tipo del
operando
izquierdo
negacin
operaciones
lgicas
Longitud de los
operandos.
Ambos deben ser de
igual longitud.
80
entity Componente is
port(
);
5
Si existe ms de una arquitectura para una entidad todas deberan estar definidas en el mismo archivo.
81
end Componente;
-- ---------------------------------------------------- -architecture Comportamiento of Componente is
proceso A
operaciones secuenciales
end process;
proceso B
operaciones secuenciales
end process;
82
Ejemplos:
signal intCuenta
signal ADCData_REG
signal Reloj
signal FinDeCuenta_REG
library ieee;
use ieee.std_logic_1164.all; -- Lgica estndar
entity Logica2Entrdas is
port (
Entrada1_IN
: IN
Entrada2_IN
: IN
SalidaAnd_OUT : OUT
SalidaOr_OUT
: OUT
SalidaNand_OUT : OUT
SalidaNor_OUT : OUT
std_logic;
std_logic;
std_logic;
std_logic;
std_logic;
std_logic -- No hay ; aqu
83
);
end Logica2Entrdas;
std_logic;
std_logic;
std_logic;
std_logic;
std_logic;
std_logic -- No hay ; aqu
84
85
Deben especificarse todos los casos, y para ello es conveniente usar la palabra others
para asignar los valores que faltan y completar los casos. Se debe tener en cuenta que los
valores posibles de las seales del tipo std_logic no son solo 1 y 0, sino que hay otros
tales como Z, U. Eso hace que haya ms combinaciones posibles en un select que las
esperadas. Como no tiene sentido preguntar por opciones como Z o U ya que esto no
es sintetizable y probablemente ni siquiera tenga sentido durante simulaciones, la palabra
others debe incluirse siempre para el ltimo caso y as evitar problemas.
Otro puno importante es que muchas herramientas aceptan el valor X para las seales
de salida. Esto se muestra en el Ejemplo 2, y permite que se optimice la lgica en el
momento de la sntesis.
86
En el ejemplo 1 se modela una lgica de asignacin que toma decisiones sobre una sola
seal de control. Muchas herramientas reconocern en esto un multiplexor y lo
sintetizarn como tal, pero no es la manera recomendable de modelarlo, ya que las
palabras else indican prioridad. En esta operacin no es necesario especificar todos los
casos, pero debe tenerse en cuanta que al no hacerlo se inferir un match para guardar el
valor de salida anterior.
Las condiciones de asignacin a su vez no deben ser necesariamente sobre la misma seal
de control, y esto se muestra en el ejemplo 2. En este caso no se infiere un multiplexor
sino que se genera lgica combinacional con prioridades para implementar el circuito
modelado. La segunda condicin se prueba solo si no se cumple la primera, la tercera si
no se cumplen ni la primera ni la segunda, y as hasta llegar a la ltima. Si ninguna de las
condiciones se cumple se mantendr el valor anterior utilizando un latch. Para evitar
87
este latch se debe incluir el ltimo else sin condicin final y asignar un valor por
defecto.
wait on Seal;
88
Carry
<= A and B after 20 ns;
wait on A, B; Suspende hasta que cambie A o B
La expresin wait es sintetizable solo en procesos sincrnicos que usan el wait para esperar un evento en
la seal de reloj, como se detallar en la seccin 0.
89
---if
-- Ejemplos de instrucciones if
-- --------------------------------------------------------- --- Una sola condicin
-- Si la cuenta llega a su valor final volver a cero
90
91
si
1
si
2
si
92
93
El uso de null en la segunda expresin case significa no hacer nada. Se debe tener en
cuanta que no hacer nada significa mantener el valor de salida anterior, y esto implica
generar latches o realimentar seales adicionales. Si lo que realmente sucede es que no
importa que valor tenga la seal se con esa combinacin del case, puede dejarse algn
caso deseado como caso por defecto y as simplificar la lgica generada.
7.7.3.5 Procesos (process)
El tipo fundamental de operacin concurrente es el proceso (process). El proceso es el
bloque clave para modelar la interaccin compleja entre seales. El proceso en si
contiene operaciones secuenciales que se tratarn en bloque como una operacin
concurrente. Esto significa que el proceso se ejecutar en paralelo con otros procesos y
operaciones concurrentes, y que el tiempo de ejecucin de un proceso (es decir, la
ejecucin de todas sus instrucciones secuenciales) ser netamente cero7. Las operaciones
secuenciales utilizadas dentro de los procesos se describen en las siguientes secciones.
7
La asignacin de seales en simulacin siempre tiene un retardo mnimo de al menos un retardo delta,
como se describe en la seccin 5.5.3.
94
En simulacin, los procesos permanecen inactivos hasta que algn evento los hace
ejecutar. Un evento se entiende como un cambio en el valor de una seal. Los procesos se
dicen que son sensibles a las seales que causan su ejecucin, y hay varias maneras de
especificar cuales sern las seales que causan que un proceso ejecute. Al sintetizar el
diseo, los procesos se implementarn como circuitos combinacionales o secuenciales
que efectan la operacin modelada. Los circuitos implementados producirn cambios en
sus salidas ante eventos en las seales a las que son sensibles.
El cuadro muestra el formato bsico de un proceso.
95
Instrucciones secuenciales: Estas estn entre las palabras begin y end. Todas las
instrucciones secuenciales de un proceso se ejecutarn como un bloque en paralelo con
los otros procesos y dems expresiones concurrentes.
El proceso se ejecutar solo cuando haya un cambio en alguna seal de su lista de
sensibilidad. Si el proceso no tiene lista de sensibilidad se ejecutar cuando se cumpla la
condicin dada en la instruccin wait. Solo puede usarse uno de los mtodos para
suspender un proceso Cuando se utiliza una lista de sensibilidad no puede usarse la
palabra wait entre las instrucciones secuenciales.
Al disear circuitos para sintetizar sobre lgicas programables (FPGAs, CPLDs u otros
PLDs) es mejor que los modelos en VHDL se adapten a la lgica bsica de los PLDs. No
hacerlo significa en muchos casos generar lgica adicional que ocupar mayor cantidad
de recursos del PLD innecesariamente. En algunos casos puede ser que el proceso
directamente no pueda sintetizarse. El cuadro muestra los patrones (templates) de
procesos recomendados para diseos sintetizables.
------
--------------------------------------------------------- -PROCESO 2
--------------------------------------------------------- -Este proceso genera solo lgica combinacional
96
97
...
end if;
end process Proceso5;
Cuadro 34 Declaracin de procesos para sntesis
98
99
100
8 Ms VHDL
8.1 Introduccin
En la seccin de introduccin al VHDL se presentaron las estructuras y construcciones
bsicas y se dieron ejemplos para poder comenzar a crear diseos sintetizables. En esta
seccin se dan algunos otros conceptos de VHDL, se ahonda en el tema de optimizacin
para sntesis con ejemplos concretos y se presenta la metodologa de prueba utilizada
para validar un diseo, los bancos de prueba (testbench).
Notar que. Al igual que en la declaracin de la interfase con port, el ltimo parmetro no
tiene un punto y coma ; despus de su declaracin y antes del parntesis que cierra la
declaracin genrica. La declaracin genrica se cierra con un parntesis y un punto y
coma );
2003 Guillermo Gichal
101
102
-- ------------------------------------------------------------ EJEMPLO 2
-- Contador con nmero de bits y valor de la cuenta mxima dado
-- por parmetros genricos
entity ContadorConLimite is
generic(
CuentaMaxima : positive := 128;
BitsContador : positive := 8
);
port(
Reset_IN
: IN std_logic;
Clock_IN
: IN std_logic;
Cuenta_OUT : OUT std_logic_vector((BitsContador-1) downto 0)
);
end ContadorConLimite;
architecture Comportamiento of ContadorConLimite is
signal Cuenta_REG : std_logic_vector(BitsContador-1 downto 0);
begin
-- La salida esta dada por un registro
Cuenta_OUT <= Cuenta_REG;
-- La cuenta de salida se incrementa y se vuelve a 0 al llegar
-- a la cuenta mxima
ProcesoCuenta : process(Reset_IN, Clock_IN)
begin
if (Reset_IN = 1) then
Cuenta_REG <= (others => 0);
elsif Rising_Edge(Clock_IN) then
Cuenta_REG <= Cuenta_REG + 1;
if (Cuenta_REG = CuentaMaxima) then
end if; -- Cuenta mxima?
end if; -- Reset, Clock
end process ProcesoCuenta;
end Comportamiento;
Cuadro 38 Ejemplo de declaracin de entidad y arquitectura con parmetros genricos
103
-- ------------------------------------------------------------ EJEMPLO 3
-- Modelo de lgica mltiple con seales de ancho variable y
-- retardo entre entrada y salida
entity LogicaMultiple is
generic(
MSB
: positive := 8;
TPropagacion : time := 25 ns
);
port(
Entrada1_IN
: IN std_logic_vector(MSB downto 0);
Entrada2_IN
: IN std_logic_vector(MSB downto 0);
SalidaAnd_OUT : OUT std_logic_vector(MSB downto 0);
SalidaOr_OUT
: OUT std_logic_vector(MSB downto 0)
);
end LogicaMultiple;
architecture Comportamiento of LogicaMultiple is
begin
SalidaAnd_OUT <= Entrada1_IN AND Entrada2_IN -- Instruccin en
after TPropagacion;
-- varias lneas
SalidaOr_OUT <= Entrada1_IN OR Entrada2_IN after TPropagacion;
end Comportamiento;
104
105
port map (
Reset_IN
Clock_IN
Cuenta_OUT
);
=> ResetTop_IN,
=> ClockTop_IN,
=> Cuenta2_OUT
end Estructura;
Cuadro 40 Ejemplo de modelo estructural usando constantes genricas
106
:
:
:
:
IN
IN
OUT
OUT
std_logic_vector(MSB
std_logic_vector(MSB
std_logic_vector(MSB
std_logic_vector(MSB
downto
downto
downto
downto
0);
0);
0);
0)
begin
107
Del cuadro pueden verse las diferentes secciones. Por un lado est la declaracin de la
entidad del nuevo componente (de nivel superior en la jerarqua del diseo). En esta
seccin se declaran las constantes genricas y las interfases o puertos.
Despus de esto se declara la arquitectura y dentro de esta los componentes y seales que
se utilizarn. Despus de la palabra begin se instancian o crean las dos instancias de
los componentes bases. Estos componentes se conectan a las entadas y salidas y entre s
mediante los port map. El generic map da valores a las constantes genricas de las
instancias de componentes bases. En este caso se propaga la constante MSB del
componente superior a los componentes base y se da un valor de 0 ns a los retardos. Las
salidas OR de los componentes base se dejan abiertas, y cualquier herramienta de sntesis
optimizar esto deshacindose de cualquier lgica no conectada e innecesaria.
8.3.1 Procedimientos
Los procedimientos se utilizan para agrupar instrucciones secuenciales. Un
procedimiento se declara con un nombre y opcionalmente un conjunto de parmetros.
Puede declararse al comienzo de una arquitectura, proceso o en un paquete. Su
visibilidad depender de donde est declarado. El Cuadro 42 muestra el formato de
declaracin y descripcin de un procedimiento
Un procedimiento termina al llegar la secuencia de ejecucin a la instruccin end
procedure. Es posible forzar el final de la ejecucin en medio del procedimiento usando
la palabra return.
108
begin
...
... -- Instrucciones secuenciales
...
end procedure NombreProcedimiento;
109
Los procedimientos sin parmetros actuarn sobre las seales o variables visibles para
ellos. En el ejemplo anterior, el procedimiento acta y modifica directamente la seal
ADCValue_REG. Si se utilizan parmetros para declarar y llamar un procedimiento se
podr utilizar o modificar diferentes variables o seales con cada llamado. Para declarar
un procedimiento con parmetros se utiliza el formato mostrado en el Cuadro 42. Esta es
similar a la declaracin de los puertos de una entidad, con los siguientes elementos:
ClaseDeParmetro : constant : constante, utilizada por defecto si el modo es in
variable : variable, utilizada por defecto si el modo es out
signal : seal, modifica directamente a la seal que representa
Identficador : Nombre con el que se identificar al parmetro en las instrucciones dentro
del procedimiento
Modo
: in
: parmetro de entrada que no se modifica en el procedimiento
out
: parmetro que no se lee pero se modifica en el procedimiento
inout : parmetro que se usa internamente y adems se modifica en el
procedimiento
Tipo
: Tipo del parmetro (ej.: std_logic, boolean, integer, etc.)
Los procedimientos que se declaran al principio de una arquitectura (no dentro de un
proceso especfico) solo pueden modificar seales a las que acceden en su lista de
parmetros. No pueden modificar seales declaradas en la arquitectura directamente
como en el ejemplo del Cuadro 43. El Cuadro 44 muestra un ejemplo de esto, con un
procedimiento que no funcionar y uno que si.
110
end if;
end procedure SaturarADC;
...
-- Ejemplo 2: ESTE SI FUNCIONA, SE DEBE INVOCAR EL PROCEDIMIENTO
-- CON UN PARAMETROS, NO PUEDE ACCEDER A Dato_REG DIRCTAMENTE
...
architecture Comportamiento of EntradaADC is
-- Declaracin de una seal y el mximo valor aceptado
constant LIMITE_MAX : std_logic_vector...
signal
Dato_REG
: std_logic_vector(15 downto 0);
-- Procedimiento que funciona porque usa un parmetro
procedure SaturarADC(signal Dato : inout
std_logic_vector(15 downto 0)) is
begin
if (Dato > LIMITE_MAX) then
Dato <= LIMITE_MAX;
end if;
end procedure SaturarADC;
...
Cuadro 44 Ejemplos de procedimiento al principio de una arquitectura bien y mal hechos
8.3.2 Funciones
Las funciones pueden verse como la generalizacin de expresiones. Son una manera de
definir nuevas operaciones que luego podrn ser utilizadas en expresiones. Estas
operaciones se describen como un conjunto de instrucciones secunciales que calculan un
resultado. Su declaracin, como se muestra en el Cuadro 45 es muy similar a los
procedimientos. La diferencia es que debe declararse un tipo que devolver el llamado a
la funcin usando return en la declaracin.
111
A diferencia de los procedimientos las funciones deben devolver un valor del tipo
declarado en la declaracin usando el formato de la instruccin return :
return expresin; -- Esto devuelve el resultado de expresin,
-- que debe ser del tipo declarado para la
-- funcin
112
En este ejemplo los parmetros de entrada no tienen un rango prefijado. Los rangos se
asignarn cuando se llame a la funcin con parmetros reales. El tipo de la salida no
puede tener un rango predeterminado. En el ejemplo, el rango estar dado por las seales
DatoADC_IN y LimiteUsuario_IN y la seal que se devuelve tambin depender de la
cantidad de bits de estas dos entradas.
113
use unisim.vcomponents.all;
entity Inversor16 is
port(Entrada_IN
: in std_logic_vector(15 downto 0);
Salida_N_OUT : out std_logic_vector(15 downto 0));
end Inversor16;
architecture Estructura of Inversor16 is
-- Declaracin del componente primitivo que se usar
component INV
port(I : in std_logic;
O : out std_logic);
end component;
begin
CompGenerado : for ndice in 15 downto 0 generate
CompBasico : INV port map (I => Entrada_IN(Indice),
O => Salida_N_OUT(Indice));
end generate;
end Estructura;
Cuadro 47 Uso de GENERATE
114
: std_logic;
component bufg
port ( I : in std_logic;
o : out std_logic);
end component;
begin
BufferReset : bufg
port map (I => Reset_IN,
O => intReset);
-- Resto de la descripcin structural utiliza intReset
-- como seal de reset
...
Cuadro 48 Utilizacin de una instancia de un componente de librera BUFG en una estructura
115
8.5.3 Memoria
La memoria es un componente bsico de muchos diseos digitales. Muchas FPGAs
incluyen bloques de memoria entre los elementos lgicos, lo que permite integrarla de
manera rpida y eficiente con los diseos lgicos. Adems de la memoria embebida o en
bloque (la que est integrada en el chip junto a la lgica programable), las FPGAs
basadas en memoria SRAM para su configuracin permiten usar parte de la lgica como
memoria. Dependiendo de las herramientas, su configuracin y el estilo del cdigo HDL,
las memorias pueden . En algunos casos pueden inferirse a partir de la descripcin que se
hace en el HDL. En otros casos, si se desea usar un tipo de memoria con una
configuracin particular, es posible que haya que crear una instancia explcitamente como
una primitiva.
116
Seal
WE
WCLK
D
A0..A3
DPRA0..DPRA3
SPO
DPO
Descripcin
Habilitacin de escritura (Write Enable)
Reloj de escritura (Write Clock)
Dato escritura
Direccin de escritura
Direccin de lectura
Salida dada por A0..A3
Salida dada por DPRA0..DPRA3
117
Seal
WE
EN
RST
CLK
DI3.. DI0
A3..A0
DO3.. DO0
Descripcin
Habilitacin de escritura (Write Enable)
Habilitacin
Reset
Reloj
Datos de entrada
Direccin
Datos de salida
Inferencia de Memorias
Ciertas estructuras en VHDL pueden modelar el comportamiento de memorias RAM o
ROM. Muchas herramientas detectan estas estructuras e infieren el uso de una memoria
interna de la FPGA (ya sea en bloque o distribuida). El tipo de estructura reconocida y las
memorias inferidas dependern de las herramientas. Algunas herramientas infieren bien
ciertos tipos de memoria pero no otros (puerto simple vs. puerto dual) o no permiten
inicializar una memoria inferida. En lo siguientes cuadros y figuras se muestra cdigo
VHDL con el cual se infieren distintos tipos de memoria y los resultados de la sntesis.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH. ALL;
use IEEE.STD_LOGIC_UNSIGNED. ALL;
entity infer_ram is
port (clk : in std_logic;
we : in std_logic;
a
: in std_logic_vector(4 downto 0);
di : in std_logic_vector(3 downto 0);
do : out std_logic_vector(3 downto 0));
end infer_ram;
architecture Comportamiento of infer_ram is
118
======================================================================
HDL Synthesis Report
Macro Statistics
# Block RAMs
1024x4-bit single-port block RAM
: 1
: 1
======================================================================
Device utilization summary:
--------------------------Selected Device : 2s200epq208-7
Number of bonded IOBs:
Number of BRAMs:
Number of GCLKs:
19
1
1
out of
out of
out of
146
14
4
13%
7%
25%
119
120
begin
if Rising_Edge(clk) then
-- La memoria se escribe con un WE sincronico
if (we = '1') then
RAM(conv_integer(a)) <= di;
end if;
end if;
end process;
-- Datos de salida. Direccion de entrada asincrnica directamente
do <= RAM(conv_integer(a));
end Comportamiento;
Cuadro 51 VHDL para inferir memoria distribuida en las herramientas de Xilinx
======================================================================
HDL Synthesis Report
Macro Statistics
# LUT RAMs
: 1
1024x4-bit single-port distributed RAM: 1
======================================================================
Device utilization summary:
--------------------------Selected Device : 2s200epq208-7
Number
Number
Number
Number
of
of
of
of
Slices:
4 input LUTs:
bonded IOBs:
GCLKs:
341
413
19
1
out
out
out
out
of
of
of
of
2352
4704
146
4
14%
8%
13%
25%
En el siguiente ejemplo se infiere una memoria ROM. Notar en la figura que la memoria
ROM se implementa como una RAM con sus entradas de escritura deshabilitadas.
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;
-- La interfaz de la ROM no tiene datos de lectura
entity ROM_infer is
port(clk : in std_logic;
we : in std_logic;
addr: in std_logic_vector(3 downto 0);
do : out std_logic_vector(7 downto 0));
end entity ROM_infer;
architecture Xilinx of ROM_infer is
121
begin
-- Este proceso solo lee datos
the_rom: process (clk)
begin
if rising_edge(clk) then
case addr is
when "0000" => do <= X"12";
when "0001" => do <= X"34";
when "0010" => do <= X"56";
when "0011" => do <= X"78";
when "0100" => do <= X"9A";
when "0101" => do <= X"BC";
when "0110" => do <= X"DE";
when "0111" => do <= X"F0";
when "1000" => do <= X"77";
when "1001" => do <= X"88";
when "1010" => do <= X"99";
when "1011" => do <= X"AA";
when "1100" => do <= X"BB";
when "1101" => do <= X"CC";
when "1110" => do <= X"DD";
when others => do <= X"EE";
end case;
end if;
end process the_rom;
end architecture Xilinx;
Cuadro 53 VHDL para inferir memoria ROM (usando BRAM) en las herramientas de Xilinx
======================================================================
HDL Synthesis Report
Macro Statistics
# Block RAMs
16x8-bit single-port block RAM
: 1
: 1
======================================================================
Device utilization summary:
--------------------------Selected Device : 2s200epq208-7
Number of bonded IOBs:
Number of BRAMs:
Number of GCLKs:
12
1
1
out of
out of
out of
146
14
4
8%
7%
25%
122
Altera recomienda estructuras similares para inferir memorias en sus dispositivos desde
los HDLs. en el siguiente cuadro se muestra un ejemplo de VHDL para inferir una
memoria RAM de puerto dual.
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY ram_dual IS
PORT (clock1:
clock2:
data:
write_address:
read_address:
we:
q:
);
END ram_dual;
IN
IN
IN
IN
IN
IN
OUT
STD_LOGIC;
STD_LOGIC;
STD_LOGIC_VECTOR (3 DOWNTO 0);
INTEGER RANGE 0 to 31;
INTEGER RANGE 0 to 31;
STD_LOGIC;
STD_LOGIC_VECTOR (3 DOWNTO 0)
123
Para entender bien como inferir memorias u otras primitivas desde el cdigo HDL para
una FPGA y herramienta dada, referirse a los manuales de las herramientas y notas de
aplicacin de los fabricantes de FPGAs. Las herramientas provistas por los fabricantes de
FPGAs tienen ayudas y plantillas que permiten generar cdigo HDL de manera rpida.
Instancia de Memorias
Hay muchos casos en los que se desea controlar en detalle el tipo de memoria (u otra
primitiva) a utilizar. En estos casos se debe colocar una instancia (instantiate) del
componente usando port map . Para esto hay que referirse a la documentacin de los
fabricantes y entender las interfaces de las primitivas. Una vez definido el componente se
instancia como cualquier otra primitiva. En el siguiente ejemplos e muestra el uso de una
memoria del tipo ram_32x8_dp en una FPGA de Altera. Para modelar el
comportamiento de la memoria se debe incluir al proyecto el VHDL correspondiente al
componente ram_32x8_dp provisto por Altera. Mas adelante se muestra el uso de
memorias de Xilinx para crear una cola FIFO.
124
clock
: IN STD_LOGIC;
q
: OUT STD_LOGIC_VECTOR (7 DOWNTO 0));
END COMPONENT;
BEGIN
-------------------------------------- Altera RAM instantiation for FIFO.
------------------------------------RamFifo : ram_32x8_dp
PORT MAP (
data
=> Writedata_IN,
wren
=> WriteEnable_IN,
wraddress => WriteAddress_REG(4 DOWNTO 0),
rdaddress => ReadAddress_REG(4 DOWNTO 0),
clock
=> Clock_IN,
q
=> Readdata_OUT);
...
END ARCHITECTURE rtl_text;
is
: positive := 15;
:
:
:
:
:
:
in
in
in
in
in
out
std_logic;
std_logic;
std_logic_vector(3 downto 0);
std_logic_vector(MSB_MEMORIA_RAM downto 0);
std_logic_vector(3 downto 0);
std_logic_vector(MSB_MEMORIA_RAM downto 0)
RAM16X1D
:
:
:
:
:
:
in
in
in
in
in
in
std_logic;
std_logic;
std_logic;
std_logic;
std_logic;
std_logic;
125
D
: in std_logic;
SPO
: out std_logic;
DPRA0 : in std_logic;
DPRA1 : in std_logic;
DPRA2 : in std_logic;
DPRA3 : in std_logic;
DPO
: out std_logic);
end component;
begin
--------------------------------------------- Instancia de RAM
-------------------------------------------G1: for I in MSB_MEMORIA_RAM downto 0 generate
L: RAM16X1D port map (
WCLK => Clock_IN,
WE
=> WriteEnable_IN,
A0
=> WriteAddress_IN(0),
A1
=> WriteAddress_IN(1),
A2
=> WriteAddress_IN(2),
A3
=> WriteAddress_IN(3),
D
=> WriteData_IN(I),
SPO
=> open,
DPRA0 => ReadAddress_IN(0),
DPRA1 => ReadAddress_IN(1),
DPRA2 => ReadAddress_IN(2),
DPRA3 => ReadAddress_IN(3),
DPO
=> ReadData_OUT(I));
end generate G1;
end Estructura;
Cuadro 56 Memoria RAM de 16 x N
En el siguiente ejemplo se define una cola tipo FIFO de 16 palabras por 16 bits. Se utiliza
como bloque bsico para guardar los datos la primitiva RAM16X1D. Este componente
tiene una entrada y una salida de datos y dos seales que indican si se desea leer el dato
de la cola o escribir el dato a la cola. LA salida de lectura siempre tiene el primer dato de
salida disponible, y al leerlo se incrementa un puntero y se pasa al siguiente. El dato de
escritura se escribe sobre la memoria en el lugar indicado por el puntero de escritura. Otra
salida indica el nmero de datos disponibles en la cola. El correcto funcionamiento
depende de que la lgica que se conecta a este componente no acte de manera no
prevista. Es decir, solo se deber leer un dato si hay datos disponibles y solo se deber
escribir un dato si los datos disponibles no llenan la cola.
En la arquitectura de este componente se mezclan las descripciones estructurales y de
comportamiento. Aunque esto no es recomendable en general, en este componente todos
los procesos junto a la memoria como instancia forman un solo componente, y tiene ms
sentido y hace ms entendible el funcionamiento mantener todos los elementos juntos que
separarlos en dos componentes diferentes.
-- Componente FIFO 16 x 16 a partir de primitiva RAM16X1D
126
:
:
:
:
:
:
:
in
in
in
in
in
out
out
std_logic;
std_logic;
std_logic;
std_logic;
std_logic_vector(15 downto 0);
std_logic_vector(15 downto 0);
std_logic_vector(4 downto 0)
127
128
00
Inicial
Estado4
Estado3
Estado4
Inicial
Entrada1 | Entrada2
01
10
Inicial
Estado1
Estado4
Estado2
Estado3
Estado3
Estado3
Estado4
Inicial
Inicial
Salida
11
Estado1
Estado3
Estado3
Estado3
Inicial
001
010
011
100
111
En los diagramas de burbujas se detallan los estados mediante burbujas y las transiciones
entre ellos con flechas que las unen. Sobre las flechas se especifican las condiciones
necesarias para esas transiciones. Existen muchas herramientas grficas con las que se
pueden disear mquinas de estado. En general se grafican diagramas de burbujas y la
condiciones de transicin y salidas. Estas representaciones grficas son luego traducidas a
VHDL por las herramientas. La Figura 44 muestra esta mquina de estados como un
diagrama de burbujas.
Las mquinas de estado infinitas no tienen sentido prctico para las aplicaciones que se tratan en este
texto
129
130
Aunque es muy prctico disear una mquina de estados con una interfase grfica como
la provista por StateCad de Xilinx, HDL Designer de Mentor Graphics, o cualquier otra
herramienta de ese estilo, tambin se puede desarrollar directamente en VHDL9. EL estilo
preferido para describir una mquina de estados en VHDL es mediante dos procesos.
Uno es combinacional y calcula el prximo estado a partir del estado actual y las
entradas. El otro es sincrnico y asigna el estado actual y define las salidas. El ejemplo
presentado es una manera de modelar mquinas de estado, pero existen una variedad de
combinaciones de procesos y lgica concurrente que pueden ser utilizadas.
El Cuadro 58 muestra el la mquina de estados de la figura anterior a modo de ejemplo.
La implementacin ser como la de la Figura 45, con la asignacin del estado actual y las
salidas hecha a travs de elementos sincrnicos (registros). La asignacin de salidas en el
proceso sincrnico puede prestarse a confusin. Debe recordarse que, al haber un flanco
de reloj y ejecutarse la instruccin de asignacin del prximo estado, este valor se
agenda, pero no se actualiza inmediatamente. Por eso, al evaluarse el case de asignacin
de las salidas, se tomar el valor del estado actual y no el agendado. La consecuencia es
que las salidas estarn en realidad retrasadas un ciclo de reloj respecto al estado actual
(debido a los registros antes de las salidas). Si eso no es aceptable puede usarse lgica
combinacional para las salidas o replantearse la mquina de estados para obtener las
salidas necesarias.
Las herramientas traducen los diseos grficos a VHDL o Verilog antes de sintetizarlos.
131
132
En el proceso combinacional todas las seales que producen cambios deben estar en la
lista de sensibilidad. Adems, al evaluar las entradas para el prximo estado en las
instrucciones if.. else deben evaluarse todos los casos de combinaciones de entradas para
evitar que se infieran latches.
133
134
135
con hardware real ya que podemos generar cualquier combinacin de seales solo
cambiando un poco de cdigo. Algunos de estos casos son que sucede cuando los
contadores llegan a sus valores finales, que sucede cuando se sobrepasan los lmites
esperados para las entradas, que sucede con combinaciones de entradas no esperadas,
utilizar un nmero significativo de datos de entrada, usar nmeros aleatorios para ver el
funcionamiento, etc.
:
:
:
:
:
IN
IN
IN
IN
IN
std_logic;
std_logic;
std_logic;
std_logic_vector(2 downto 0);
std_logic_vector(7 downto 0)
136
No se necesitan seguir las estructuras presentadas para sntesis: como los bancos
de prueba no sern sintetizados, sino que solo sirven para las simulaciones, no es
necesario seguir las estructuras presentadas para diseos sintetizables.
Usar las mismas guas en el cdigo, nombres, etc. Es bueno seguir las mismas
pautas de cdigo y nombres ya que eso hace que el banco de pruebas sea mas fcil
de entender, modificar e incluso reutilizar.
Los procesos de prueba debern tener un valor de reposo ya que esto es lo que
indica que se termin la simulacin y facilita la tarea al simulador (ayuda a
ejecutar la simulacin ms rpido).
P_PruebaReadEnable : process
variable Dato1_VAR, Dato2_VAR : std_logic_vector(7 downto 0);
137
-- Fin de la simulacin
138
139
...
-- Se verifican los tiempos ledos para ver si cumplan la
-- condicin especificada
for Idx in 2 to UltimoIndice loop
if (TiemposLectura(Idx) - TiemposLectura(Idx-1) > 5 ns) then
...
... -- Escribir a un archivo que hay error en los tiempos
...
end if; -- Si hubo un deltaT > Limite
end loop; -- Para todos los elementos del arreglo
...
Cuadro 62 Formato y ejemplo de lazo FOR
140
141
next;
if (Condicin buleana) then
exit;
end if;
if (Condicin buleana) then
next;
end if;
exit when (Condicin buleana);
next when (Condicin buleana);
142
file_open
file_close
read
write
endfile
Descripcin
Procedimiento utilizado para abrir de manera explcita un archivo
Procedimiento utilizado para cerrar de manera explcita un archivo
Procedimiento utilizado para leer un dato de un archivo
Procedimiento utilizado para escribir un dato a un archivo
Funcin que verifica si se ha llegado al final de un archivo y
devuelve true o false
143
paquete textio. Este paquete permite acceder a archivos que contienen cadenas de
caracteres. As, todos los datos sern cadenas de texto. Pueden usarse funciones de
conversin para guardar o escribir cualquier tipo de dato en estos archivos. En lo que
resta de esta seccin se presentar el paquete textio y su utilizacin para leer y guardar
datos de simulacin. El lector puede referirse a la bibliografa para estudiar el uso de
otros tipos de archivo.
Para utilizar archivos de texto en un banco de pruebas (el manejo de archivos no es
sintetizable), se deben agregar las siguientes lneas en el cdigo
library std;
use std.textio.all;
Esto hace accesible el paquete textio que incluye los tipos y procedimientos mostrados en
la Tabla 14. Tambin incluye los archivos que pueden utilizarse directamente "input" y
"output" asociados a los archivos fsicos "std_input" y "std_output". Estos se proveen
para poder acceder a los dispositivos estndar de entrada / salida, que en general estn
definidos como la pantalla y el teclado en casi todos los sistemas.
Tabla 14 Tipos y procedimientos en textio
Tipo
line
text
side
Descripcin
Tipo declarado como cadena de caracteres "string"
Tipo declarado como archivo de tipos line
Tipo enumerado que toma los valores left o right (izquierda o
derecha)
Tipo definido como natural (nmeros de 0 al mximo entero)
width
Procedimiento
Procedimiento que permite copiar (leer) una lnea de un archivo a
readline
una variable del tipo "line" (cadena de caracteres)
Procedimiento que permite copiar (escribir) una variable del tipo
writeline
"line" a un archivo
Serie de procedimientos sobrecargados para diferentes tipos de
read
parmetro que permiten leer diferentes datos de una variable tipo line
Serie de procedimientos sobrecargados para diferentes tipos de
write
parmetro que permiten escribir diferentes datos a una variable tipo
line
Las operaciones de entrada salida sobre los archivos utilizando textio se hacen lnea a
lnea. Esto permite que varios procesos accedan a un mismo archivo. Como la secuencia
de escritura a un archivo de varios procesos concurrentes es impredecible, al escribir
lneas completas no se entremezclarn los datos sino que a lo sumo se alternan lneas de
un proceso y otro. Si cada proceso marca de alguna manera las lneas que escribe es fcil
descifrar el funcionamiento del modelo en su conjunto al analizar el archivo.
144
Para leer datos usando textio se debe declarar una variable del tipo line y abrir un
archivo de subtipo text. Mediante una instruccin secuencial readline se lee una lnea del
archivo. Esa lnea luego se procesa usado las diferentes variantes de read para extraer los
datos.
Para escribir una lnea a un archivo primero se escriben los datos a una variable del tipo
line utilizando las diferentes variantes de write y luego se escribe la lnea al archivo
usando writeline.
145
uno
CpuState_REG(0);
CpuState_REG(1);
CpuState_REG(2);
CpuState_REG(3);
library ieee;
use ieee.std_logic_1164.all;
entity tbGeneradorReloj is
generic (
PERIODO_NS : time := 20 ns
);
port (
SimmulacionActiva_IN : IN
Reloj_OUT
: OUT
);
std_logic;
std_logic
end tbGeneradorReloj ;
architecture Comportamiento of tbGeneradorReloj is
begin
P_Reloj : process
begin
wait for 1 ns;
while (SimmulacionActiva_IN = '1') loop
146
library ieee;
use ieee.std_logic_1164.all;
entity tbGeneradorReset is
generic (
TIEMPO_RESET : time := 250 ns
);
port (
Reset_OUT
: OUT
std_logic
);
end tbGeneradorReset ;
architecture Comportamiento of tbGeneradorReset is
begin
P_Reset : process
begin
Reset_OUT <= 1;
wait for TIEMPO_RESET;
Reset_OUT <= 0;
wait;
end process P_Reset;
------
Reset activo
Se mantiene reset activo
Reset baja. Comienza a funcionar
el circuito
Proceso en espera permanente
end Comportamiento;
Cuadro 67 Generacin de una seal de reset para pruebas
147
Ciclo de escritura
Clock
tClock
tSRData
tSWData
tHWData
tHRData
Data
tHAddress
tSAddress
tHAddress
tSAddress
Address
tSRead
tHRead
ReadEnable
tHWrite
tSWrite
WriteEnable
Parmetro
tClock
tSAddress
tHAddress
tSRead
tHRead
tSRData
tHRData
Descripcin
Perodo del reloj (48 - 52% duty cycle)
Tiempo de setup de direcciones antes del primer flanco
positivo de reloj
Tiempo de mantenimiento o hold de la direccin despus
del flanco positivo de reloj
Tiempo de setup de seal ReadEnable en 0 antes del
flanco positivo de reloj
Tiempo de mantenimiento o hold de la seal ReadEnable
despus del flanco positivo de reloj
Tiempo de setup del dato necesario antes del flanco
positivo de reloj
Tiempo de mantenimiento o hold del dato necesario
despus del flanco positivo de reloj
Mnimo
100 ns
50 ns
Mximo
1 us
8 ns
14 ns
54 ns
4 ns
8 ns
15 ns
1 ns
148
Parmetro
tClock
tSAddress
tHAddress
tSWrite
tHWrite
tSWData
tHWData
Descripcin
Perodo del reloj (48 - 52% duty cycle)
Tiempo de setup de direcciones antes del primer flanco
positivo de reloj
Tiempo de mantenimiento o hold de la direccin despus
del flanco positivo de reloj
Tiempo de setup de seal WriteEnable en 0 antes del
flanco positivo de reloj
Tiempo de mantenimiento o hold de la seal WriteEnable
despus del flanco positivo de reloj
Tiempo de setup de datos antes del flanco positivo de
reloj
Tiempo de mantenimiento o hold del dato despus del
flanco positivo de reloj
Mnimo
100 ns
50 ns
Mximo
1 us
8 ns
14 ns
62 ns
4 ns
8 ns
58 ns
6 ns
15 ns
149
begin
----------
SimulacionDeMicro : process
variable FinDeSimulacion
: boolean := false;
... - Otras variables auxiliares para controlar simulacin
variable
variable
variable
variable
variable
DatoAEscribir_VAR
DatoEnTiempoSetup_VAR
DatoEnTiempoHold_VAR
DireccionWrite_VAR
DireccionRead_VAR
:
:
:
:
:
std_logic_vector(15
std_logic_vector(15
std_logic_vector(15
std_logic_vector(19
std_logic_vector(19
downto
downto
downto
downto
downto
0);
0);
0);
0);
0);
end LeerDato;
procedure EscribirDato is
begin
wait until Rising_Edge(Clock_IN);
WriteEnable_OUT <= 0 after (T_CLOCK
T_SETUP_WRITEENABLE);
150
Address_OUT
151
152
10.2 Documentacin
Si se pretende tener un producto (re)utilizable, vendible, o que pueda entenderse despus
de tenerlo archivado unos meses es imprescindible crear buena documentacin.
COMPLETAR CON PAUTAS SOBRE DOCUMENTACIN.
153
Programacin en VHDL
o No mezclar estndares de programacin. Usar sintaxis VHDL 87 o 93
exclusivamente)
o Usar un archivo por entidad (entity) que defina su interfase y arquitectura.
El nombre del archivo deber ser igual al de la entidad.
o Usar tipos std_logic para todas los puertos de interfase externa
o Nunca asignar un valor desconocido X o verificar un dont care -
(producen resultados inesperados en la sntesis y las simulaciones)
o No usar los valores por defecto para seales y variables. Asignarles un valor
inicial durante el estado de Reset.
o Tratar de usar el mismo nombre para las seales a travs de toda la jerarqua
de diseo, quizs agregando prefijos o sufijos.
o Definir todas las constantes para un diseo en un solo package
o Usar constantes y parmetros genricos para definir el tamao de los buffers y
buses. (Ayuda a reutilizar el cdigo)
o No utilizar puertos del tipo BUFFER para leer un valor de salida. En vez de
eso usar tipos OUT y agregar otra seal interna a la que se le asigna el
mismo valor.
154
Comentarios
o Usar los comentarios para describir la lgica y el motivo del programa. No
comentar lo obvio.
o Usar lneas completas comentadas para dividir grandes bloques lgicos del
programa
o Usar comentarios para especificar que condicin est cerrando un comando
END
o Siempre debe agregarse un comentario para describir lgica que no es obvia o
tiene particularidades que son difciles de entender a simple vista.
Ejemplos:
155
y no
ProcesoX1 : process (Clock_IN, Reset_IN) -- No hay una descripcin del proceso
BEGIN
-- la indentacin esta mal
if (Reset_IN = 0) THEN -- Si el Reset es cero Obvio
elsif (Clock_INEVENT And Clock_IN = 1) then -- si hay un flanco de reloj Obvio
-- suma los datos Esto debera estar describiendo el proceso, no aqu
...
end; end PROCESS; -- Cada end en su propia lnea
Usar:
signal DatoDeEntrada_N_REG : std_logic_vector(2 downto 0);
signal DatoDeSalida_REG
: std_logic_vector(2 downto 0);
...
P_umaDeEntradas : PROCESS(Clock_IN, Reset_IN)
P_RestaDeEntradas : PROCESS(Clock_IN, Reset_IN)
y no:
signal datodeentrada_N_REG : std_logic_vector(2 downto 0); -- No hay un estndar
-- para los nombres
signal salida : std_logic_vector(2 downto 0);
-- alinear los espacios
...
SumaDeEntradas : PROCESS(Clock_IN, Reset_IN)
-- no hay consistencia en
Proceso_Entradas_Resta : PROCESS(Clock_IN, Reset_IN) -- el formato de los nombres
156
recomienda generar una seal de habilitacin de reloj. Esta es una seal con la que se
habilita el reloj por un ciclo solo cada N ciclos. Esto hace que un proceso sincrnico se
ejecute solamente a la frecuencia deseada (cada N flancos de reloj) en vez de con cada
flanco del reloj. La Figura 48 muestra el mtodo de divisin de frecuencia recomendado
para diseos sobre FPGAs.
Figura 48 Divisin de frecuencia recomendada para FPGAs usando habilitacin de reloj (CE)
157
158
Seal de Reset
Proveer una seal de Reset porque hace que un diseo sea determinstico y evita
que se llegue a estados prohibidos
o Todos los Flip-Flop debern tener un Reset de lgica positiva, asincrnico.
Este Reset deber estar conectado a la pata de Reset global de la FPGA o
CPLD de ser posible.
o El Reset asincrnico se usar a nivel local en todos los mdulos. Este se
sincronizar con el reloj al nivel lgico mas alto de la jerarqua de diseo.
(Evita des-sincronizacin por caminos de diferente longitud de la seal de
Reset).
o Durante el estado de Reset todos los puertos bidireccionales debern colocarse
en el estado de entrada. (Esto es lo que espera el boundary scan y evita tener
valores )
Reloj
o Todas las seales que cruzan dominios de reloj debern muestrearse antes y
despus de cruzar dominios (previene estados meta-estables).
o Se debern usar la mnima cantidad de dominios de reloj posibles.
o No usar seales de reloj o Reset como Enable o dato. No usar un dato como
reloj o Reset. (los resultados durante simulaciones pueden diferir del circuito
sintetizado y causar problemas de temporizado)
159
Buses
o Comenzar los buses en el bit 0. (Algunas herramientas no aceptan buses que
no comienzan en 0)
o Usar (MSB downto LSB) para todos los buses. (para evitar interpretaciones
diferentes y provocar malos conexionados)
o Para lgica sincrnica con enable, tratar de definirla en un proceso solo con
el siguiente formato
PROCESS (Clock, Reset)
BEGIN
IF (Reset = '1') THEN
intOutSignal <= '0';
ELSIF (Clock'event AND Clock = '1') THEN
IF (CE = '1') THEN -- Seal de enable
intOutSignal <= '1';
END IF;
END IF;
END PROCESS;
160
161
162
163
Las herramientas infieren decodificadores para with select, when else, process if, else if y case
Que pasa con if (if else) elsif
Mquina de estados. Mostrar Flip-Flops, quizs con diferentes encoding
164
165
166
Para poder invocar a ModelSim desde Project Navigator debe estar bien definido
el path al ejecutable. Para el ModelSim versin XE gratuito es
Edit/Preferences/Partner Tools/ C:\Modeltech_xe-starter\win32xoem
o el path adecuado incluyendo el directorio win32xoem
Mens de ModelSim
167
Comandos de lnea
Tarea
Recomenzar simulacin
Comando
restart all
Correr simulacin
run TIEMPO
help commands
help run
quit
Ejemplo/Comentario
Apretar Restart en la ventana que
aparece al apretar Enter
run 1000 ns
run 1 ms
Da una lista de los comandos
disponibles o ayuda sobre un
comando especfico
Para ver solo los nombres de las seales (sin path) poner 1 en la casilla:
Tools/Windows Preferences/ Display Signal Path [] # of elements
Para guardar/abrir una configuracin de formas de onda
(Los archivos tienen una extensin .do)
File/Load Format o Save Format
168
15 Referencias
15.1 Dispositivos Lgicos Programables
Bibliografa
Spartan IIe Device Family, Hoja de datos de Xilinx DS077, www.xilinx.com, 2002.
Virtex II Pro Data Sheet, Hoja de datos de Xilinx DS083, www.xilinx.com, 2002
MAX 7000 Programmable Device Family, Hoja de datos de Altera DS-MAX7000-6.5,
www.altera.com.
Stratix FPGA Family Data Sheet, Hoja de datos de Altera DS-STXFAMLY-3.0,
www.altera.com, 2002
Excalibur Device Overview Data Sheet, Hoja de datos de Altera DS-EXCARM-2.0,
www.altera.com.
GAL22V10 Data Sheet, Hoja de datos de Lattice Semiconductors, www.vantis.com,
Junio 2000
Using Delay Locked Loops in Spartan II Devices, Nota de aplicacin de Xilinx XAPP174,
www.xilinx.com, 2000
Introduction to GAL Devices, Nota de aplicacin de Lattice Semiconductors,
www.vantis.com, 2002
CPLD Package and I/O Matriz, Gua de seleccin de Altera SA-CPLDMTRX-1.0,
www.altera.com, 2002
FPGA and CPLD Architectures: A Tutorial, Stephen Brown & Jonathan Rose, IEEE
Design and Test of Computers, 1996.
Diseo Digital Principios y Prcticas Tercera Edicin, John F. Wakerly, Editorial Prentice
Hall, 2001.
Sntesis y Descripcin de Circuitos Digitales Utilizando VHDL, IEC Francisco Javier
Torres Valle, Universidad Autnoma de Guadalajara, 2001.
Low-cost programmable logic: How low should you go?, Brian Dipert, EDN, 16/3/2001
Programmable Logic Device Review. Lattice Introduces FPGA, Murray Disman,
www.chipcenter.com, 2002.
The Effect of LUT and Cluster Size on Deep-Submicron FPGA Performance and Density,
Elias Ahmed a& Jonathan Rose, IEEE Transactions on VLSI Systems, March 2004
FPGA Performance vs Cell Granularity, Jack Kouloheris & Abbas El Gamal, IEEE
Custom Integrated Circuits Conference, 1991
Links de Inters
169
Links de Inters
15.3 VHDL
Bibliografa
The Designers Guide to VHDL 2nd Edition, Peter J. Ashenden, Editorial Morgan Kaufman,
2002
Diseo Digital Principios y Prcticas Tercera Edicin, John F. Wakerly, Editorial Prentice
Hall, 2001
Synthesis and Simulation Design Guide, Xilinx
Development System Reference Guide ISE 5 , Xilinx
The VHDL Golden Reference Guide version 1.1, Doulos, 1995
In Search of the Origins of VHDLs Delta Delays, Sumit Gosh, Proceedings of the IEEE
International Symposium on Quality Electronic Design, 2002.
Cdigo VHDL de los paquetes.de lgica estndar IEEE: std_logic_1164.vhd,
std_logic_arith.vhd, std_logic_signed.vhd y std_logic_unsigned.vhd.
Synthesis and Simulation Design Guide, Xilinx
Libraries Guide, Xilinx
Rapid Prototyping of Digital Systems, James O. Hamlen Michael D. Furman, Kluwer
Academic Publishers, 2000
The VHDL Golden Reference Guide version 1.1, Doulos, 1995
VHDL Style Guidelines for Performance, Model Technology, Oct 1999.
Links de Inters
170
15.5 Sntesis
Bibliografa
http://www.vhdl.org/vi/vhdlsynth/vhdlsynth.html
171
16 Ejemplos
Los ejemplos se describen en este apndice pero el cdigo est en un CD o archivos
adjuntos
172