tÉcnicas de diseÑo, simulaciÓn e implementaciÓn de ... · gilardoni - orozco - cayssials -...
Post on 19-Sep-2018
217 Views
Preview:
TRANSCRIPT
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
2-1
TÉCNICAS DE DISEÑO, SIMULACIÓN E IMPLEMENTACIÓN DE CIRCUITOS
LÓGICOS UTILIZANDO DISPOSITIVOS VLSI Y ESPECIFICACIÓN HDL.
PROYECTO DE FIN DE CARRERA
Departamento de Ingeniería Eléctrica.
UNIVERSIDAD NACIONAL DEL SUR
AUTOR: PABLO GILARDONI. DIRECTOR: Dr. JAVIER OROZCO. CODIRECTOR: Dr. RICARDO CAYSSIALS.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS i
Técnicas de diseño, simulación e implementación de circuitos lógicos utilizando dispositivos VLSI y
especificación HDL.
Introducción
En este proyecto se realiza un análisis de los Lenguajes de Especificación de Hardware
(HDL) utilizados para la configuración y diseño de sistemas digitales que utilizan
Dispositivos Lógicos Programable de alta complejidad (CPLD). La capacidad de estos
dispositivos ha evolucionado durante los últimos años desde la implementación de simples
sistemas digitales hasta la posibilidad de implementar complejas funciones, incluso
microprocesadores y microcomputadores. La velocidad con la cual estos dispositivos
pueden ser programados y reconfigurados los hacen ideales para la realización de
prototipos y educación e incluso son competitivos en costo para bajos niveles de
producción o bien para cuando se requiere la utilización de funciones reconfigurables.
Nuevas y sofisticadas aplicaciones pueden ser desarrolladas mediante su utilización,
haciendo cada vez más difusa la tradicional línea que separa el hardware del software.
La realización de dispositivos de lógica programable tiene sus comienzos con los PAL
(Programmable Logic Array), que en un principio implementaban la síntesis de funciones
lógicas combinacionales, para luego insertar elementos de memoria y permitir la síntesis
de máquinas secuenciales. Desarrollos posteriores brindaron gran diversidad de formas de
programación, es decir, gran diversidad de elementos básicos de interconexión como son
los Antifuses, switches EPROM / EEPROM y switches SRAM.
Estos primeros dispositivos programables crearon la necesidad de lenguajes de
especificación de hardware. De esta manera, el diseñador podría especificar su sistema con
un alto grado de abstracción para luego, de alguna forma sistemática, sintetizarlo e
implementarlo en un dispositivo genérico. Se intuye así la necesidad de un software que
permita abstraer al diseñador de las particularidades del dispositivo programable utilizado
y permitir que el diseño y desarrollo no requieran conocimientos específicos de la
estructura interna de dicho dispositivo. Además, esto da cabida a la estandarización de un
lenguaje que nos independice de los distintos fabricantes de dispositivos de lógica
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS ii
programable. Como ventaja adicional, pueden re-utilizarse especificaciones que han sido
verificadas exhaustivamente en la realización de proyectos anteriores, en nuevos proyectos
que, al utilizar dispositivos de mayor capacidad de implementación lógica, sean
subfunciones en el nuevo sistema. Esto permite una apreciable reducción en el tiempo
necesario para la producción de prototipos, con la consiguiente reducción en el costo de
producción.
Es de esta manera que en el año 1987 fue definido como el estándar IEEE 1076, un
lenguaje de especificación de hardware denominado VHDL donde la letra “V” significa
VHSIC (Very High Speed Integrated Circuit) y la sigla “HDL” significa Hardware
Description Language. A comienzos de los años '90 el lenguaje VHDL fue usado para el
diseño de circuitos integrados desarrollados con una aplicación específica (ASIC del inglés
Application Specific Integrated Circuit) y en la segunda mitad de la década se comenzó a
usar dentro del área de los PLDs (Programmable Logic Device).
Aunque los fabricantes más importantes de dispositivos lógicos programables permiten
al diseñador la utilización, aunque sea restringida, de VHDL como lenguaje de
especificación, cada uno de ellos posee un lenguaje propietario. De esta manera, Altera y
Xilinx, dos de los más importantes fabricantes, han desarrollado sus propios lenguajes de
especificación denominados AHDL y ABEL respectivamente. La utilización de lenguajes
desarrollados por un determinado fabricante restringe al diseñador el grado de abstracción
de su especificación y la utilización de ésta en dispositivos de otros fabricantes. A cambio,
le permite optimizar el uso de los recursos de los dispositivos si tiene conocimiento de la
estructura interna de los mismos.
Este proyecto consistió principalmente en el estudio de lenguajes de especificación de
hardware y de las técnicas de diseño, simulación e implementación de sistemas digitales de
alta complejidad. El objetivo planteado para la utilización de todos estos conceptos fue la
realización de un controlador de memoria dinámica que cumple con el estándar JEDEC de
72 contactos. Las herramientas y dispositivos utilizados en la implementación de este
controlador fueron provistos por la firma Altera en el marco del programa universitario del
cual el Laboratorio de Sistemas Digitales forma parte.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS iii
Etapas del Proyecto: Estudio de los distintos dispositivos de lógica programable, especialmente de la
firma ALTERA. Capítulo 1.
Estudio del lenguaje de descripción de hardware VHDL, estándar IEEE 1076.
Capítulo 2.
Estudio del lenguaje de descripción de hardware AHDL, propiedad de
ALTERA. Capítulo 3.
Manejo del software de desarrollo MAX+PLUS II de ALTERA. Capítulo 4.
Pruebas básicas de funcionamiento de la placa de desarrollo UP1 perteneciente
al programa de desarrollo universitario de la firma ALTERA. Capítulo 4.
Curso de diseño de lógica programable basado en el lenguaje AHDL. Dictado
por el Profesor Guillermo Jaquenod. Universidad Nacional del Centro.
Noviembre de 1998. Cuidad de Olavarría.
Análisis y diseño de un controlador de memorias dinámicas SIMM (Single In-
Line Memory Module) de 72 contactos. Capítulo 5.
Realización de la especificación del controlador, en el lenguaje de descripción
de hardware AHDL, con el software MAX+PLUS II. Simulación y elección del
dispositivo a utilizar.
Realización de los circuitos impresos necesarios para la interconexión del
módulo SIMM con el dispositivo de lógica programable y el sistema
microprocesador.
Realización de un programa en lenguaje de alto nivel, para la verificación del
sistema.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS iv
Tabla de Contenidos Capítulo 1.................................................................................................................................................................1-1 Dispositivos Lógicos Programables (P.L.Ds) ..........................................................................................................1-1 1. Alternativas para la síntesis de funciones lógicas ............................................................................................1-1
1.1 Simplificación Algebraica de una Función Lógica. .................................................................................1-1 1.2 Multiplexores y Demultiplexores.............................................................................................................1-1 1.3 ROM (Read Only Memory) .....................................................................................................................1-3 1.4 Tablas de Look–Up (LUTs).....................................................................................................................1-3 1.5 Comparación de las distintas alternativas ................................................................................................1-4
2. Los PAL...........................................................................................................................................................1-5 2.1 PALs Primitivos.......................................................................................................................................1-5 2.2 Incorporación de Elementos de Memoria ................................................................................................1-5 2.3 PALs Modernos .......................................................................................................................................1-6
3. Elementos Básicos de Interconexión ...............................................................................................................1-7 4. Celdas Lógicas: granularidad y jerarquías de conectividad .............................................................................1-7 5. Celdas de Entrada/Salida .................................................................................................................................1-8 6. Redes de Cableado ...........................................................................................................................................1-9
6.1 Interconexiones Locales...........................................................................................................................1-9 6.2 Interconexiones Vecinales .......................................................................................................................1-9 6.3 Interconexiones Globales.......................................................................................................................1-10
7. Las Familias MAX 7000 y FLEX 10K de ALTERA.....................................................................................1-10 7.1 La Familia MAX 7000/7000E/7000S ....................................................................................................1-10
7.1.1. Terminología ..................................................................................................................................1-10 7.1.2. Descripción General.......................................................................................................................1-11
7.1.2.1. MAX7000 y MAX7000E.......................................................................................................1-11 7.1.2.2. MAX7000S ............................................................................................................................1-11
7.1.3. Arquitectura (Descripción Funcional)............................................................................................1-12 7.1.3.1. Macroceldas ...........................................................................................................................1-13 7.1.3.2. Logic Array Blocks ................................................................................................................1-16 7.1.3.3. Expansores de Términos Producto (Expansores Paralelos y Compartidos)...........................1-17 7.1.3.4. Expansores Compartidos........................................................................................................1-17 7.1.3.5. Expansores Paralelos..............................................................................................................1-18 7.1.3.6. Programmable Interconnect Array (PIA) ...............................................................................1-19 7.1.3.7. I/O Control Blocks (Celdas de Entrada/Salida) .....................................................................1-20
7.1.4. In-System Programmability (ISP) ..................................................................................................1-22 7.1.5. Control de Velocidad / Potencia Programable ...............................................................................1-22 7.1.6. Interfase Multi Voltaje de Entrada/Salida. (MultiVolt I/O Interface) ............................................1-22 7.1.7. Slew-Rate Control..........................................................................................................................1-23
7.2 La Familia FLEX 10K ...........................................................................................................................1-24 7.2.1. Terminología ..................................................................................................................................1-24 7.2.2. Descripción General.......................................................................................................................1-24 7.2.3. Arquitectura (Descripción Funcional)............................................................................................1-25
7.2.3.1. Embedded Array Blocks ........................................................................................................1-26 7.2.3.2. Logic Array Block (LAB) ......................................................................................................1-27 7.2.3.3. Logic Element (Elementos lógicos) .......................................................................................1-29 7.2.3.4. Cadenas de Carry ...................................................................................................................1-30 7.2.3.5. Cadenas de Cascada ...............................................................................................................1-31 7.2.3.6. Modos de Operación de los Elementos Lógicos ....................................................................1-32 7.2.3.7. FastTrack Interconnect...........................................................................................................1-34 7.2.3.8. I/O Elements (Elementos de Entrada/Salida) .........................................................................1-37 7.2.3.9. Conexión Filas – Elementos E/S ............................................................................................1-39 7.2.3.10. Conexión Columnas – Elementos E/S....................................................................................1-40
7.2.4. Distribución de señales de reloj .....................................................................................................1-40 7.2.5. Configuración de Salida.................................................................................................................1-41
7.2.5.1. Interfase Multi Voltaje de Entrada/Salida. (MultiVolt I/O Interface) ....................................1-41 7.2.5.2. Slew-Rate Control ..................................................................................................................1-42 7.2.5.3. Esquemas de Configuración...................................................................................................1-42
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS v
Capítulo 2.................................................................................................................................................................2-1 Introducción a VHDL: Un Lenguaje de Especificación de Hardware.....................................................................2-1 1. ¿Que significa VHDL? ....................................................................................................................................2-1 2. Limitaciones del VHDL...................................................................................................................................2-2 3. Estilos de Escritura de VHDL..........................................................................................................................2-2 4. Conceptos Principales del Lenguaje ................................................................................................................2-3
4.1 Sintaxis.....................................................................................................................................................2-4 4.2 Arquitectura .............................................................................................................................................2-5 4.3 Jerarquía...................................................................................................................................................2-6 4.4 Declaraciones ...........................................................................................................................................2-8 4.5 Configuraciones .......................................................................................................................................2-9 4.6 Configuración por Defecto.....................................................................................................................2-10 4.7 Procesos y tipos......................................................................................................................................2-11 4.8 Package ..................................................................................................................................................2-13 4.9 Esquema Completo ................................................................................................................................2-14
5. Señales y Tipos de Datos ...............................................................................................................................2-15 5.1 Concepto de Tipo y Especificación........................................................................................................2-16 5.2 Tipos de Datos Estándar ........................................................................................................................2-17 5.3 Asignación de Señales ...........................................................................................................................2-18 5.4 Arreglos (Arrays) ...................................................................................................................................2-20 5.5 Concatenación y Agregado ....................................................................................................................2-21 5.6 Definición de Tipos................................................................................................................................2-23 5.7 Lógica MultiValuada .............................................................................................................................2-25 5.8 Usando Lógica Standard ........................................................................................................................2-27
Capítulo 3.................................................................................................................................................................3-1 AHDL: Un Lenguaje de Descripción de Hardware .................................................................................................3-1 Estructura de diseño.................................................................................................................................................3-2 1. Sentencia "Title" ..............................................................................................................................................3-3 2. Sentencia "Parameters" ....................................................................................................................................3-3 3. Sentencia "Include"..........................................................................................................................................3-5 4. Sentencia "Constant"........................................................................................................................................3-6 5. Sentencia "Define" ...........................................................................................................................................3-7 6. Sentencia "Function Prototype" .......................................................................................................................3-8 7. Sentencia "Options" .........................................................................................................................................3-8 8. Sentencia "Assert"............................................................................................................................................3-9 9. Sección de Subdiseño ......................................................................................................................................3-9 10. Sección de Declaración de Variables.........................................................................................................3-10
10.1 Declaración de Instancias.......................................................................................................................3-11 10.2 Declaración de Nodos ............................................................................................................................3-12 10.3 Declaración de Registros .......................................................................................................................3-13 10.4 Declaración de Maquinas de Estado ......................................................................................................3-13 10.5 Declaración de Alias de Maquinas de Estado ........................................................................................3-14
11. Sección Lógica...........................................................................................................................................3-15 11.1 Ecuaciones Booleanas............................................................................................................................3-16 11.2 Ecuaciones de Control Booleanas. .........................................................................................................3-18 11.3 Sentencia CASE.....................................................................................................................................3-19 11.4 Sentencia DEFAULTS...........................................................................................................................3-20 11.5 Sentencia IF-THEN................................................................................................................................3-21 11.6 Sentencia IF-GENERATE. ....................................................................................................................3-22 11.7 Sentencia FOR-GENERATE. ................................................................................................................3-22 11.8 Sentencia TRUTH TABLE. ...................................................................................................................3-23
Capítulo 4.................................................................................................................................................................4-1 Sistema de desarrollo de ALTERA: MAX + PLUS II y placa de desarrollo universal UP1...................................4-1 1. ¿ Qué es ALTERA MAX+PLUS II ? ..............................................................................................................4-1
1.1 Ejemplo Demostrativo .............................................................................................................................4-2 1.2 Síntesis .....................................................................................................................................................4-2 1.3 Tipos de Archivos ....................................................................................................................................4-3 1.4 Interpretación del Código VHDL ............................................................................................................4-4
1.4.1. Código VHDL..................................................................................................................................4-4
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS vi
2. Placa de Desarrollo universal UP1...................................................................................................................4-5 2.1 ¿Qué es la placa educacional UP1?..........................................................................................................4-5 2.2 ¿Cómo es la placa educacional UP1?.......................................................................................................4-6 2.3 ¿Cómo está compuesta la placa UP1?......................................................................................................4-6
3. Cable de Programación ByteBlaster. ............................................................................................................4-7 3.1 ¿Qué es y para qué sirve la ByteBlaster? .............................................................................................4-7
Capítulo 5.................................................................................................................................................................5-1 Implementación de un Controlador de Memoria Dinámica: Una Aplicación de Lógica Programable....................5-1 1. Memorias Dinámicas Utilizadas: Módulo SIMM de 72 contactos. .................................................................5-1
1.1 Características Técnicas del Módulo SIMM Utilizado. ...........................................................................5-3 1.2 Características Técnicas de los Chips TMS44400. ..................................................................................5-3
2. Controlador de Memorias Dinámicas. .............................................................................................................5-4 2.1 Símbolo Lógico del Controlador de Memorias Dinámicas......................................................................5-4
2.1.1. Señales independientes.....................................................................................................................5-4 2.1.2. Señales microprocesador - dramcontrol:..........................................................................................5-4
2.1.2.1. Señales dramcontrol – módulo SIMM: ....................................................................................5-5 3. Funcionamiento del Controlador de Memorias Dinámicas..............................................................................5-5
3.1 Funcionamiento microprocesador - controlador ......................................................................................5-6 ¿Cómo es un ciclo de lectura del microprocesador - controlador? ..............................................................5-6 ¿Cómo es un ciclo de escritura del microprocesador - controlador? ...........................................................5-7 ¿Cómo funciona el paginado?......................................................................................................................5-7
3.2 Funcionamiento controlador – memoria dinámica...................................................................................5-8 ¿Cómo se direcciona el módulo SIMM?......................................................................................................5-8 ¿Cómo es un ciclo de lectura del controlador – memoria dinámica?...........................................................5-9 ¿Cómo es un ciclo de escritura del controlador – memoria dinámica? ......................................................5-10 ¿Cómo es el ciclo de refresco CAS before RAS? ......................................................................................5-11
4. Funcionamiento Lógico del Controlador de Memorias Dinámicas. ..............................................................5-12 4.1 Máquina de estados 1: microprocesador – controlador..........................................................................5-12 4.2 Máquina de estados 2: controlador – memoria dinámica.......................................................................5-14
5. Implementación de los ports bidireccionales. ................................................................................................5-16
Se incluye disco conteniendo los programas fuentes desarrollados para la
implementación del controlador de memoria dinámica.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 1-1
Capítulo 1 En este capítulo se describen distintas formas de síntesis de funciones lógicas, como
también distintos elementos de interconexión utilizados en dispositivos programables. Se
detallan los elementos que componen una CPLD (Complex Programmable Logic Device)
y una FPGA (Field-Programming Gate Array) profundizando especialmente en los
dispositivos ALTERA de las familias MAX7000 y FLEX10K.
Dispositivos Lógicos Programables (P.L.Ds)
1. Alternativas para la síntesis de funciones lógicas
La creación de un dispositivo lógico programable, implica contar con una tecnología
que permita sintetizar cualquier función lógica en una forma eficiente. El diseñador posee
diferentes alternativas para implementar su sistema.
1.1 Simplificación Algebraica de una Función Lógica.
Existen métodos gráficos y tabulares que permiten simplificar una función lógica en
forma sistemática. Si bien la solución obtenida puede ser óptima en el sentido de que
minimiza su expresión en el número de compuertas utilizadas para su implementación,
tiene la desventaja de que la solución obtenida es totalmente rígida y el menor cambio
puede significar un rediseño total. El criterio de optimalidad de estos métodos,
generalmente no significa una implementación óptima en un dispositivo de lógica
programable.
1.2 Multiplexores y Demultiplexores
En las técnicas de simplificación algebraica de funciones lógicas, se asume que la
implementación final se realizará utilizando compuertas lógicas. Una alternativa en la
implementación de funciones lógicas es la utilización de multiplexores. Con un
multiplexor de 8::1, por ejemplo, se podría generar cualquier función lógica de 3 variables
de entrada.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 1-2
En la siguiente figura se observa la síntesis de una función cualquiera, mediante la
utilización de un multiplexor.
Figura 1.1
Se observa que las líneas de selección de entradas del multiplexor son las variables de la
función y, por lo tanto, para generar la función deseada sólo se debe colocar un cero o un
uno en la entrada correspondiente.
Los multiplexores son dispositivos muy fáciles de realizar en tecnología CMOS y
permiten altas escalas de integración; por ejemplo, un multiplexor 2::1 puede realizarse
con sólo 6 transistores.
También puede implementase una función lógica mediante la utilización de un
demultiplexor, como se observa en la figura 1.2:
Figura 1.2
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 1-3
1.3 ROM (Read Only Memory)
La utilización de una memoria ROM para la implementación de una función lógica,
permite la utilización de los mismos componentes independientemente de la función que se
desea sintetizar. Internamente una memoria ROM combina, como muestra la figura 1.3, el
uso de un multiplexor y un demultiplexor.
Figura 1.3
Una ventaja muy importante de este tipo de síntesis es que permite la implementación
de funciones con gran número de variables de entrada.
1.4 Tablas de Look–Up (LUTs)
Una tabla de Look-Up (LUT) es equivalente a un multiplexor, sólo que incorpora
elementos de memoria que permiten generar la función lógica deseada según el estado de
dichos elementos. Por lo tanto una LUT puede ser dividida en dos áreas:
Área de configuración.
Área de operación.
En la figura 1.4 se observa la utilización de un registro de desplazamiento que permite
que la configuración se realice en forma serial.
El hecho de que las tablas de look-up puedan ser configuradas para sintetizar la función
lógica deseada, les atribuye el carácter de programabilidad. Por este motivo son una muy
buena alternativa para la implementación de dispositivos de lógica programable.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 1-4
Figura 1.4
La cantidad de bits de memoria requeridos para configurar una tabla de Look–Up crece
en forma exponencial con el número de variables de entrada, por lo que en general las
LUTs suelen ser de entre 4 y 5 variables (16 a 32 bits de memoria).
1.5 Comparación de las distintas alternativas
Las soluciones basadas en multiplexores, demultiplexores, ROMs y tablas de Look–Up
usan la expresión canónica de una función (suma de minitérminos). De esta manera,
pueden generar cualquier función lógica a partir de sus entradas debido a que implementan
la suma de todos los minitérminos posibles. Esto puede resultar en un uso ineficiente del
dispositivo. Por ejemplo, en el caso de un multiplexor de 8::1, implementar una función de
tres variables que necesite sólo dos o tres términos productos estaría desaprovechando los
recursos físicos del dispositivo.
El análisis estadístico de una enorme cantidad de funciones de mediana complejidad (5
a 15 variables de entrada) muestra que casi todas ellas pueden ser sintetizadas mediante
sólo 5 a 7 implicantes de orden superior (términos productos). Por lo tanto se pensó que
sería más eficiente, en cuanto a recursos físicos utilizados, un dispositivo que
implementara un subconjunto de todos los términos productos posibles.
Este fue el criterio que llevó a la creación de los Arreglos Lógicos Programables (PAL
Programmable Logic Array)
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 1-5
2. Los PAL
2.1 PALs Primitivos
Básicamente, un PAL implementa la suma de términos productos. Posee una matriz de
fusibles de interconexión que permite generar términos productos de la cantidad de
variables que se desee.
Seguidamente se muestra el esquema circuital de un PAL primitivo del tipo 16L8.
Figura 1.5
Como se observa en la figura 1.5, a la matriz de interconexión ingresan las variables de
entrada negadas y sin negar. Además se cuenta con una realimentación de la salida que
permite que ingresen a la matriz de interconexión el valor negado y sin negar de la misma.
Cada término producto puede ser generado a partir de la intersección de un gran número de
variables, lo que es de gran utilidad para implementar funciones de gran fan–in. La
cantidad de términos productos que es posible sumar está usualmente acotado entre seis y
ocho. Cada término producto ocupa gran superficie del chip e involucra un elevado
número de fusibles.
2.2 Incorporación de Elementos de Memoria
Para facilitar la síntesis de máquinas secuenciales, la arquitectura de los PALs
incorporaron elementos de memoria. La siguiente figura muestra el agregado de estos
elementos de memoria en el PAL 16R8.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 1-6
Figura 1.6
2.3 PALs Modernos
Diversas arquitecturas han sido propuestas para poder implementar la mayor cantidad
de funciones lógicas, evitando sobredimensionar la estructura del dispositivo programable.
De esta manera, los PALs modernos utilizan una arquitectura basada en celdas lógicas.
Una celda lógica es un conjunto de elementos combinacionales y registros de
configuración que constituyen un bloque funcional mínimo dentro del dispositivo. La
siguiente figura muestra una celda lógica de un PAL simple moderno, particularmente de
la marca ALTERA familia Classic EP610.
Figura 1.7
En la figura 1.7 se observa la incorporación de un elemento de memoria, como se vio
anteriormente, y el agregado de elementos de configuración que permiten aumentar las
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 1-7
funciones de la celda lógica. Estos elementos permiten que la realimentación provenga
desde la celda lógica o del contacto de Entrada/Salida y que la salida de la celda lógica sea
por registro o combinacional. Además se incorporan un control de inversión de lógica, un
reloj global y una señal de habilitación de salidas (output enable).
3. Elementos Básicos de Interconexión
Los dispositivos de lógica programable necesitan hacer uso de recursos de
interconexión, los cuales funcionan como llaves que permiten lograr como objetivo final la
síntesis de la función lógica deseada.
Existen diferentes tipos de elementos de interconexión como son los:
Antifuses: dispositivos normalmente abiertos que una vez programados pasan a
ser un cortocircuito. Un dispositivo que utiliza antifuses puede programarse
solamente una vez y su programación es irreversible.
Switches EPROM/EEPROM: dispositivos de paso reprogramables, cuyo
estado no se altera al interrumpirse la alimentación de energía.
Llaves SRAM: basados en llaves de paso MOS controladas desde un flip flop
estático, cuyo contenido se pierde al interrumpirse la energía.
4. Celdas Lógicas: granularidad y jerarquías de
conectividad
Una celda lógica es un bloque funcional mínimo capaz de resolver una función
combinacional o secuencial. Una celda que por sí sola puede llegar a resolver una función
compleja (4 o más variables de entrada), genera circuitos de baja granularidad. El conjunto
de este tipo de celdas forma lo que se denomina lógica de “grano grueso”. Por el
contrario, celdas lógicas capaces de resolver únicamente funciones de 2 o 3 variables (a
veces sólo combinacionales) son llamadas de “grano fino”.
Cuanto más compleja es una celda, mayor es la posibilidad de su subempleo, es decir,
de no aprovechar todos sus recursos. Sin embargo, en este caso la mayor parte del
problema es resuelta dentro de la celda y por ello se requieren menos recursos de
interconexión con otras celdas. Cuanto más simples son las celdas, más cantidad de ellas se
requieren para resolver un dado problema, pero son usadas plenamente (el subempleo de
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 1-8
celdas es menor). En contraparte, la necesidad de múltiples vínculos entre celdas requiere
de poderosos recursos de interconexión.
Un ejemplo de celdas lógicas de grano grueso se encuentra en el dispositivo lógico
programable XC4000 de la firma XILINX. Este dispositivo está basado en celdas lógicas
complejas que hacen uso de tablas de Look–Up con tecnología SRAM. Cada celda lógica
resuelve 2 funciones lógicas, combinacionales o secuenciales, de hasta 4 variables
independientes o una función lógica combinada de 5 variables. Poseen 2 flip flops para la
síntesis de máquinas secuenciales y caminos especiales de propagación a celdas vecinas
para la rápida propagación entre celdas. Estos caminos especiales son llamados carry.
Un ejemplo de celdas lógicas de grano grueso en la firma ALTERA es el caso de la
familia MAX, donde cada celda lógica está basada en la suma de términos productos y
además, poseen dispositivos de memoria para la realización de circuitos secuenciales y
recursos para optimizar el uso de los términos productos sobrantes. Estos recursos son
llamados expansores paralelos o compartidos.
Existen celdas lógicas que no encuadran exactamente con las clasificaciones de
granularidad previamente definidas, es decir, no son ni de grano grueso ni de grano fino.
Por lo tanto aparecen las llamadas lógicas de grano medio, de grano medio a fino y de
grano muy fino.
5. Celdas de Entrada/Salida
Las celdas de Entrada/Salida son las encargadas de la interconexión del dispositivo con
el mundo exterior. Deben ser capaces de manejar corrientes elevadas, capacidades
parásitas decenas de veces mayores a las existentes dentro del chip y brindar la posibilidad
de configurarlas como entrada, salida, bidireccionales o de alta impedancia. Estas
características contribuyen fuertemente a crear ciertos problemas de diseño como son: el
agregado de retardos y picos en el consumo de corriente con su consiguiente ruido de
fuente (Ground Bouncing).
Las celdas de Entrada/Salida podrían ser clasificadas en dos tipos: las elementales y las
complejas.
Las celdas de Entrada/Salida elementales sólo permiten definir si serán de entrada,
salida o bidireccionales y cada celda estará asociada a una celda lógica determinada.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 1-9
Las celdas de Entrada/Salida complejas pueden definirse, al igual que las celdas
simples, como de entrada, salida o bidireccionales, pero se diferencian en que no están
asociadas a una celda lógica en particular, sino que hacen uso de los recursos de
interconexión para vincularse con las mismas. También cuentan con muchas opciones de
configuración como son: control de slew rate, de pullups o pulldowns, agregado de
retardos, etc.
6. Redes de Cableado
Las redes de cableado son las encargadas de realizar las interconexiones de las celdas
dentro de los dispositivos. Están fuertemente relacionadas con la granularidad, ya que
cuanto menores sean las celdas lógicas, mayores serán los recursos de interconexión
necesarios para realizar la misma función.
Las redes de cableados pueden jerarquizarse, según el alcance de las mismas, en:
Locales.
Vecinales.
Globales.
6.1 Interconexiones Locales
Estas interconexiones permiten conectar cada celda lógica a las celdas vecinas
contiguas. En la familia FLEX 10K de la firma ALTERA, las interconexiones locales se
realizan por medio de las cadenas de Carry y Cascada. Éstas conectan cada celda lógica
con las inmediatas superior e inferior y están orientadas especialmente para acelerar la
realización de operaciones aritméticas.
6.2 Interconexiones Vecinales
Estas interconexiones permiten conectar grupos de celdas lógicas. En dispositivos de la
firma ALTERA, un conjunto de 8, 10 o 16 celdas lógicas se agrupan físicamente y se
define una matriz de conexionado rápido entre ellos, con acceso a los sistemas de
interconexión global y a los grupos de celdas vecinos. Estos grupos de celdas lógicas son
llamados LABs (Logic Array Blocks).
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 1-10
6.3 Interconexiones Globales
Estas interconexiones permiten conectar cualquier celda lógica con cualquier otra
dentro del dispositivo. Suelen hacer uso de líneas rápidas (en general metálicas) y son
usadas para distribución de señales globales, como por ejemplo, señales de clock, output
enable y reset.
7. Las Familias MAX 7000 y FLEX 10K de
ALTERA
A continuación se describen en detalle la arquitectura de los dispositivos programables
de las familias MAX7000 y FLEX 10K de la firma ALTERA. Estos dispositivos integran
la placa de desarrollo adquirida a través del programa universitario ALTERA al que el
Laboratorio de Sistemas Digitales pertenece.
7.1 La Familia MAX 7000/7000E/7000S
Si se realiza un análisis crítico de los PALs clásicos (Programmable Logic Array), se
puede observar que las mismas tienen una reducida cantidad de celdas lógicas,
generalmente poseen menos celdas lógicas que contactos de Entrada/Salida. Esto implica
que ante la necesidad de usar un flip flop o un término lógico intermedio (sin acceso a los
contactos del dispositivo), a veces se deba desperdiciar un contacto de Entrada/Salida.
Además, en los primeros PALs, el uso de fusibles de programación afectaba seriamente la
confiabilidad del dispositivo.
Mejoras realizadas a los PALs clásicos permitieron la evolución a la familia MAX,
donde se reagruparon celdas lógicas en bloques (Logic Array Blocks o LABs). También se
logró un mejor aprovechamiento de la superficie de conexión a través de la generación de
áreas de conexionado global y de áreas de interconexión local. Además se agregaron áreas
de generación de términos producto auxiliares (expansores) y se implementó una
separación entre el feedback de la celda lógica y el de la entrada (dual feedback).
7.1.1. Terminología
ALTERA define sus propios términos para referirse a los dispositivos de la familia
MAX 7000 como ser:
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 1-11
Macroceldas: Equivalente a las celdas lógicas. Sólo es usado cuando se habla
de la familia MAX.
Logic Array Block (LAB): Grupos de celdas lógicas o macroceldas.
Logic Array (Arreglo Lógico): Es el nombre que recibe el bloque, componente
de una macrocelda, que implementa los términos productos.
Local Array (Arreglo local): Es la denominación que toma la estructura de
interconexión entre macroceldas de un LAB. Es la estructura de interconexión
vecinal.
Programmable Interconnect Array (PIA): Estructura continua de
interconexión global.
7.1.2. Descripción General
7.1.2.1. MAX7000 y MAX7000E
Los dispositivos de las familias MAX7000 y MAX7000E son programables mediante
programador externo, con una complejidad media y elevada entre 32 a 256 macroceldas
(equivalente a: 300 a 5000 compuertas lógicas), siendo las familias de lógica programable
líderes en esta densidad. La familia MAX7000 es fabricada mediante un proceso CMOS
EEPROM avanzado, lo que permite obtener implementaciones de alta densidad, elevada
velocidad, poderosa capacidad de Entrada/Salida y performance predecible. La familia
MAX7000E agrega a la familia MAX7000 seis líneas de output enable, dos líneas de
clock, registros de entrada más veloces y control de slew-rate programable. La familia
MAX7000 ofrece dispositivos que, por su velocidad, son ideales para aplicaciones que
deban satisfacer la exigencias del estándar PCI (son PCI-compliant).
7.1.2.2. MAX7000S
La familia MAX7000S es una versión mejorada de las familias 7000 y 7000E que posee
la facilidad de programación en circuito ISP (In-System Programmability) y en los
dispositivos de 128 o más macroceldas, la inclusión de circuitos de testeo periférico (JTAG
boundary-scan test circuitry). El control de slew-rate programable y la opción de elegir la
operación en modo de bajo consumo macrocelda por macrocelda, permiten reducir el
consumo total y el ruido que genera el sistema. Estas características potencian a la familia
MAX 7000S y le permiten resolver un amplio rango de aplicaciones a nivel de sistema.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 1-12
7.1.3. Arquitectura (Descripción Funcional)
La arquitectura interna de la familia MAX 7000 incluye los siguientes elementos:
Macroceldas
Logic Array Blocks (LAB)
Expansores de Términos Producto (Expansores paralelos y compartidos)
Programmable Interconnect Array (PIA)
I/O Control Blocks (Celdas de Entrada/Salida)
La familia MAX7000 posee 4 entradas dedicadas que pueden ser usadas, para cada
macrocelda o contacto de Entrada/Salida, como:
Entradas de propósito general
Señales de control globales y de alta velocidad (clock, clear, y dos output
enable).
Según la arquitectura interna, la familia MAX7000 puede ser dividida en los
dispositivos MAX7000 y en los MAX7000E/S.
La figura 1.8 muestra la arquitectura en diagrama de bloques de los dispositivos
EPM7032, EPM7032V, EPM7064 y EPM7096, pertenecientes a de la familia MAX7000.
La figura 1.9 muestra la arquitectura de los dispositivos pertenecientes a la familia
MAX7000E y MAX 7000S.
Figura 1.8
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 1-13
En el número que identifica cada dispositivo está codificado la familia a la que
pertenece y la cantidad de macroceldas que posee. Por ejemplo el dispositivo EPM7032
posee el número 7 que indica que pertenece a la familia MAX7000, y el número 32 que
indica que posee 32 macroceldas.
Figura 1.9
Comparando las figuras 1.8 y 1.9 puede observarse que la diferencia entre ambas
arquitecturas es relativa a los recursos de interconexión provenientes de las entradas
globales.
7.1.3.1. Macroceldas
Las macroceldas en las dispositivos de la familia MAX 7000, pueden ser configuradas
individualmente para realizar operaciones de lógica combinacional o secuencial. La
macrocelda consiste de tres bloques funcionales: el arreglo lógico (términos productos), la
matriz de selección de términos producto y el registro programable.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 1-14
La figura 1.10 muestra la macrocelda de los dispositivos EPM7032, EPM7032V,
EPM7064 y EPM7096, pertenecientes a de la familia MAX7000.
Figura 1.10
La figura 1.11 muestra una macrocelda de los dispositivos pertenecientes a la familia
MAX7000E y MAX7000S.
Figura 1.11
La lógica combinacional es implementada en el arreglo lógico, el cual provee cinco
términos producto por macrocelda.
La matriz de selección de términos producto permite determinar si la conexión de los
términos producto será a las entradas lógicas primarias (Compuertas OR o XOR), para
implementar funciones combinacionales, o a las entradas secundarias (clear, preset, clock
y clock enable del registro de la macrocelda).
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 1-15
Dos clases de expansores de términos productos son disponibles para ampliar los
recursos de las macroceldas:
Expansores compartidos: Son términos productos invertidos realimentados
dentro del arreglo lógico.
Expansores paralelos: Son términos productos provenientes de macroceldas
adyacentes físicamente.
Para realizar funciones lógicas que utilicen registros, el flip flop de cada macrocelda
puede ser individualmente programado para implementar los tipos: D, T, JK o SR.
Además, el flip flop puede deseleccionarse para implementar una función combinacional
en la macrocelda.
A cada registro programable puede ingresar la señal de reloj de tres modos diferentes:
Señal de reloj global: Este modo utiliza el contacto de entrada dedicado "global
clock". Brinda la mayor performance en cuanto a velocidad de propagación
puesto que es la forma más rápida de propagar la señal de reloj hacia todos los
flip-flops del dispositivo.
Señal de reloj global habilitada por una señal clock enable activa en high:
Este modo provee la habilitación de la señal de reloj que ingresa a cada flip flop,
y además mantiene la performance en cuanto a velocidad como en el modo de
operación anterior.
Señal de reloj implementada con un término producto. En este modo la señal
de reloj que ingresa al flip flop puede provenir de otras macroceldas o contactos
de Entrada/Salida.
En los dispositivos EPM7032, EPM7032V, EPM7064 y EPM7096, las señal global de
reloj está disponible, como muestra la figura 1.8, a través del contacto denominado
GCLK1.
En los dispositivos de la familia MAX 7000E y MAX 7000S están disponibles dos
señales de reloj globales a través de los contactos denominados GCLK1 y GCLK2. Como
muestra la figura 1.9, estas señales pueden ingresar al dispositivo en forma directa,
invertidas o permutadas.
Cada registro de las macroceldas soporta funciones de clear y preset asincrónicas.
Como muestran las figuras 1.10 y 1.11, la matriz de selección de términos producto asigna
los recursos necesarios para controlar esas funciones. Además, la señal clear de cada
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 1-16
registro puede ser individualmente accedida a través del contacto global clear, denominado
GCLRn.
Todos los contactos de Entrada/Salida de los dispositivos MAX 7000E y MAX 7000S
poseen caminos de entrada rápidos hacia los registros de las macroceldas. Estos caminos
dedicados permiten que la señal de entrada evite los retardos producidos en la PIA
(Programmable Interconnect Array) y en la lógica combinacional, para acceder
directamente a la entrada D del flip flop con un retardo de 3ns.
7.1.3.2. Logic Array Blocks
La arquitectura de los dispositivos MAX7000 está basada en la interconexión de
arreglos lógicos, de alta performance y flexibilidad, denominados Logic Array Blocks
(LABs). Un LAB consiste de 16 macroceldas, como muestran las figuras 1.8 y 1.9.
Múltiples LABs son interconectados a través de un arreglo programable de interconexión
(PIA, del inglés "Programmable Interconnect Array"). Este arreglo de interconexión es un
bus global al cual llegan también, señales provenientes de las celdas de Entrada/Salida.
Figura 1.12
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 1-17
Cada LAB es alimentado por las siguientes señales:
36 señales provenientes del arreglo programable de interconexión (PIA) usadas
como entradas lógicas generales.
Controles globales que son usados para realizar funciones de registro
secundarias.
Caminos directos de entrada desde los contactos de Entrada/Salida hacia los
registros, usados para lograr pequeños tiempos de setup en los dispositivos
MAX7000E y MAX7000S.
La figura 1.12 muestra en diagrama de bloques la composición de un LAB. En esta
figura puede observarse la estructura de interconexión vecinal denominada Local Array.
7.1.3.3. Expansores de Términos Producto (Expansores Paralelos y
Compartidos)
Aunque la mayoría de las funciones lógicas pueden ser implementadas con los cinco
términos producto disponibles en una sola macrocelda, funciones lógicas más complejas
requieren términos productos adicionales. De esta forma otra macrocelda puede ser usada
para suplir los recursos lógicos requeridos. La arquitectura MAX7000 sólo permite que
ambos expansores de términos productos, paralelos y compartidos, provean términos
adicionales a cualquier macrocelda que se encuentre en el mismo LAB. Estos expansores
ayudan a que la lógica sea sintetizada con la mínima utilización de recursos lógicos, para
obtener la mayor velocidad posible.
7.1.3.4. Expansores Compartidos
Cada LAB posee 16 expansores compartidos (uno por cada macrocelda). Estos
expansores que pueden ser vistos como simples términos productos con salidas invertidas
que se realimentan al arreglo lógico. Pueden ser usados y compartidos por una o todas las
macroceldas del LAB correspondiente para construir funciones lógicas complejas. El
retardo producido cuando un expansor compartido es utilizado, no supera los 10ns. En las
especificaciones técnicas pueden observarse los valores típicos de este retardo denominado
tSEXP .
La figura 1.13 muestra cómo pueden ser alimentadas múltiples macroceldas con
expansores compartidos.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 1-18
Figura 1.13
7.1.3.5. Expansores Paralelos
Los expansores paralelos son términos productos, no utilizados en una macrocelda, que
pueden ser asignados a macroceldas vecinas, dentro de un mismo LAB, para implementar
funciones rápidas y complejas. Estos permiten que hasta un total de 20 términos productos
puedan sumarse en una macrocelda, formados por los 5 términos provistos por la
macrocelda y 15 expansores paralelos provistos por las macroceldas vecinas de un mismo
LAB.
El software de síntesis MAX+PLUS II de ALTERA, puede asignar hasta un total de tres
conjuntos de hasta 5 expansores paralelos a las macroceldas que requieran términos
productos adicionales. Cada conjunto de 5 expansores paralelos incurre en un pequeño
incremento del retardo, simbolizado con tPEXP. Por ejemplo, si una macrocelda requiere 14
términos productos, el software de síntesis usará los 5 términos producto de una
macrocelda y asignará a la misma 2 conjuntos de expansores paralelos de 5 y 4 términos
producto respectivamente. Esta asignación incrementará el retardo total a PEXPt×2 .
Dos grupos de 8 macroceldas dentro de cada LAB (macrocelda 1 hasta 8 y macrocelda
9 hasta 16) integran 2 cadenas para ceder o adquirir expansores paralelos. Una macrocelda
adquiere expansores paralelos desde la macrocelda anterior. Por ejemplo, la macrocelda 8
puede obtener expansores paralelos desde la macrocelda 7, de las macroceldas 7 y 6 o
desde las macroceldas 7, 6 y 5. Dentro de cada grupo de 8 macroceldas, una macrocelda
sólo puede ceder expansores paralelos a una macrocelda de mayor numeración y, por el
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 1-19
contrario, una macrocelda sólo puede obtener expansores paralelos desde una macrocelda
de menor numeración.
Figura 1.14
La figura 1.14 muestra cómo son apropiados los expansores paralelos desde las
macroceldas vecinas.
7.1.3.6. Programmable Interconnect Array (PIA)
Las señales lógicas son propagadas entre los LABs a través del arreglo de interconexión
programable (PIA). Este es un bus global que conecta cualquier fuente de señal a cualquier
destino dentro del dispositivo. Todas las entradas dedicadas, los contactos de
Entrada/Salida y las salidas de las macroceldas, ingresan a la PIA. Esto posibilita que
dichas señales estén disponibles a lo largo de todo el dispositivo.
La figura 1.15 muestra cómo las señales son ruteadas desde la PIA hacia un LAB. Una
celda EEPROM controla una de las dos entradas de una compuerta AND, la cual permite
que dicha señal ingrese, o no, al LAB correspondiente. Además puede observarse el
ingreso al LAB tanto de la señal como de la señal negada.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 1-20
Figura 1.15
Los retardos de propagación de las señales en la PIA son fijos. Esta es la principal
diferencia con respecto a los FPGAs (Field Programmable Gate Arrays) cuyos retardos son
acumulativos y dependientes del camino recorrido.
La PIA elimina asimetrías entre señales y permite predecir fácilmente el
comportamiento temporal del dispositivo.
7.1.3.7. I/O Control Blocks (Celdas de Entrada/Salida)
Los bloques de control de Entrada/Salida permiten que cada contacto del dispositivo
pueda ser individualmente configurado como entrada, salida o bidireccional. Todos los
contactos de Entrada/Salida poseen un buffer de tres estados (tri-state) que puede ser
controlado individualmente por una de las señales globales de output enable, o ser
conectados directamente a tierra o VCC.
La figura 1.16 muestra una celda de Entrada/Salida de los dispositivos de la familia
MAX7000, EPM7032, EPM7032V, EPM7064 y EPM7096. La figura 1.17 lo hace con los
dispositivos MAX 7000E y MAX 7000S.
Figura 1.16
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 1-21
Figura 1.17
Nota: La salida open-drain sólo está disponible en los dispositivos MAX7000S. Las celdas de Entrada/Salida de los dispositivos de la familia MAX7000, EPM7032,
EPM7032V, EPM7064 y EPM7096 poseen dos señales globales de output enable (activas
en low) que provienen de los contactos de Entrada/Salida dedicados denominados OE1 y
OE2.
Las celdas de Entrada/Salida de los dispositivos MAX7000E y MAX7000S poseen seis
señales globales de output enable. Estas señales ingresan a las celdas por intermedio de la
PIA, y provienen de dos contactos globales dedicados de output enable (OE1 y OE2), de
un subconjunto de contactos de Entrada/Salida y de un subconjunto de celdas de
Entrada/Salida.
Cuando la señal de control de un buffer de tres estados es conectada a tierra, la salida
presenta alta impedancia y el contacto de Entrada/Salida puede ser utilizado como entrada.
Contrariamente si la señal de control es conectada a VCC, la salida es habilitada y el
contacto es utilizado como salida.
La arquitectura de los dispositivos de la familia MAX7000 provee dos formas de
realimentar señal desde una celda de Entrada/Salida hacia la PIA. Es posible realimentar
señal tanto de la entrada como de la salida del buffer de tres estados.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 1-22
Todas las celdas de Entrada/Salida están asociadas a una macrocelda y en general la
cantidad de macroceldas es superior a la cantidad de contactos de Entrada/Salida.
7.1.4. In-System Programmability (ISP)
Los dispositivos MAX7000S pueden ser programados en sistema (ISP) a través de la
interfase estándar industrial JTAG (Joint Test Action Group). La característica de ser ISP
permite la programación del dispositivo hasta después de montado en la placa de circuito
impreso, ya que durante la programación todos los contactos de Entrada/Salida
permanecen en un estado de alta impedancia. Otra característica importante de ISP en los
dispositivos que basan su programación en celdas EEPROM, es que no es necesario
ingresar externamente el voltaje de programación (generalmente superior a los 5volts), ya
que éste es generado internamente por el dispositivo.
Los otros dispositivos de la familia MAX7000 que no son ISP compatibles, son
programados a través de un hardware específico, conocido como MPU (Master
Programming Unit), controlado a través del software de síntesis y programación
MAX+PLUS II de ALTERA.
7.1.5. Control de Velocidad / Potencia Programable
La familia de dispositivos MAX7000 ofrece un modo de operación que permite
especificar individualmente si cada macrocelda funcionará en modo de alta velocidad o
modo de bajo consumo de potencia. Estos dos modos de operación son excluyentes, es
decir la elección de uno de ellos implica la no elección del otro.
7.1.6. Interfase Multi Voltaje de Entrada/Salida. (MultiVolt I/O
Interface)
Los dispositivos MAX7000, excepto los de encapsulado de 44 contactos, soportan las
características de multi voltaje. Esta característica permite que los dispositivos MAX7000
puedan interactuar e intercambiar información con dispositivos o sistemas que posean
diferentes voltajes de alimentación.
Los dispositivos que poseen esta característica poseen dos conjuntos de contactos de
entrada de alimentación independientes. Un conjunto es usado para la operación interna
del dispositivo y para uso en los buffers de entrada. Estos contactos son designados como
VCCINT y deben ser siempre conectados a 5volts. El otro conjunto de contactos de
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 1-23
alimentación está asociado con los contactos de Entrada/Salida y son éstos los que deben
poseer la característica de multi voltaje. Dichos contactos, designados VCCIO, pueden
conectarse tanto a 3,3 como a 5 volts.
Figura 1.18
La figura 1.18 muestra dos de los encapsulados posibles utilizados en la familia
MAX7000; ellos muestran la existencia de los dos conjuntos de contactos de alimentación:
VCCINT y VCCIO.
En aplicaciones de lógica TTL todos los contactos de entrada de alimentación
(VCCINT y VCCIO) deben conectarse a 5 volts.
7.1.7. Slew-Rate Control
En los dispositivos MAX7000E y MAX7000S, los buffers de salida en cada contacto de
Entrada/Salida poseen la capacidad de ajustar su slew rate. De esta manera puede adaptarse
el comportamiento de la salida para conseguir un mejor desempeño con respecto al ruido o
a la velocidad.
Un elevado slew rate provee alta velocidad de transición de la señal de salida, ideal para
aplicaciones de alta velocidad. Sin embargo, estas elevadas velocidades pueden introducir
ruidos en el sistema.
Un pequeño slew rate reduce el ruido en el sistema pero adiciona un retardo adicional
de 4 a 5 ns. En los dispositivos MAX7000E existe un bit denominado "Turbo Bit". Cuando
éste posee un valor cero, el slew rate es pequeño y cuándo es uno, el slew rate es elevado.
La desventaja en estos dispositivos es que el Turbo Bit configura el slew rate de todos los
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 1-24
contactos de Entrada/Salida, no existiendo la posibilidad de un control individual. Esta
desventaja es suplida en los dispositivos MAX7000S, donde cada contacto de
Entrada/Salida posee un control individual del slew rate a través del estado de una celda
EEPROM.
7.2 La Familia FLEX 10K 7.2.1. Terminología
ALTERA define su propia terminología para referirse a sus dispositivos de la familia
FLEX 10K. Algunos de los términos más importantes son:
Embedded Array Blocks (EABs): Son bloques de memoria RAM estática de
alta velocidad insertados dentro de la arquitectura de los dispositivos FLEX
10K.
Logic Elements: Son las unidades lógicas funcionales más pequeñas en la
arquitectura de la familia FLEX 10K.
Local Interconect Array: Es la estructura de interconexión local asociada a
cada LAB.
Logic Array Block (LAB): Agrupación de ocho elementos lógicos
interconectados a través del arreglo de interconexión local.
Logic Array: Es la estructura formada por un conjunto de LABs.
FastTrack: Estructura de interconexión global formada por filas de
interconexión y columnas de interconexión.
Filas y Columnas de Interconexión: Son redes de cableado que atraviesan al
dispositivo en forma horizontal y vertical. Cada camino de conexión dentro de
las mismas es llamado canal de fila y canal de columna, respectivamente.
Configuración: Se denomina así a la acción de programar un dispositivo
SRAM.
7.2.2. Descripción General
Con un rango de 10.000 a 130.000 compuertas lógicas, es una familia de dispositivos
dedicada a satisfacer necesidades propias de diseños mediante gate arrays. Los dispositivos
de esta familia incorporan bloques internos de memoria, lazos de enganche de fase (PLLs)
para la distribución de relojes de alta velocidad dentro del chip y un esquema de
interconexión de alta velocidad y retardos predecibles (FastTrack). Estas características
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 1-25
hacen de esta familia la opción ideal para aplicaciones de alta complejidad o donde se
requiera la realización de tareas de cómputo numérico en forma eficiente (aplicaciones
para Digital Signal Processing, DSP).
Los bloques internos de memoria EAB (del ingles Embedded Array Blocks) posibilitan
combinar la potencia combinacional de los LEs (lógica masiva de grano fino, plenamente
interconectada) con la facilidad para generar tablas o funciones de gran fan-in propias de
las memorias ROM / RAM. A diferencia de otras FPGAs, el uso de memoria de las FLEX
10K no se hace a costa de la perdida de recursos lógicos.
Estas prestaciones, junto a su alta velocidad, hacen de la familia FLEX 10K la
herramienta ideal para aplicaciones de tratamiento de señales (DSP) u otros diseños de
gran complejidad.
7.2.3. Arquitectura (Descripción Funcional) La arquitectura interna de la familia FLEX 10K incluye los siguientes elementos:
Embedded Array Blocks Logic Element Logic Array Blocks (LAB) FastTrack Interconnect I / O Element (Elementos de Entrada/Salida)
Figura 1.19
La figura 1.19 muestra, en diagrama de bloques, la arquitectura usada en los
dispositivos FLEX 10K.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 1-26
7.2.3.1. Embedded Array Blocks
Los EAB (Embedded Array Blocks) son bloques de memoria RAM con registros en los
ports de entrada y salida. Los EAB son usados para implementar multiplicadores, circuitos
de corrección de errores y funciones de gran fan-in.
Es posible implementar funciones lógicas configurando los EAB con un patrón de sólo
lectura durante la configuración lo que crea una gran tabla de look-up (LUT). Con LUTs
las funciones combinacionales son implementadas buscando los resultados en lugar de
computarlos. Esta implementación de funciones combinacionales puede ser más rápida que
el uso de algoritmos implementados sin el uso de tablas de look-up.
La gran capacidad de los EABs posibilita la implementación de funciones complejas en
un solo nivel de compuerta. Esto evita el agregado de retardos de propagación debido a
que no es necesario recurrir a recursos de interconexión extras. Por ejemplo, un solo EAB
puede implementar un multiplicador aritmético de 4 x 4 bits con 8 bits de entrada y 8 bits
de salida.
Los EABs poseen ventajas sobre los FPGA (Field programmable Gate Array). Los
FPGA implementan RAM como pequeños bloques RAM distribuidos a lo largo del
dispositivo. Estos bloques RAM contienen retardos de propagación que son menos
predecibles cuanto más bloques RAM sean utilizados. Además, el hecho de que la RAM
en los FPGAs esté distribuida en pequeños bloques provoca problemas de ruteo,
dificultando su interconexión cuando se requiere implementar grandes bloques de
memoria.
Los EABs, cuando son utilizados como memorias RAM, pueden configurarse en
cualquiera de los siguientes tamaños: 256x8, 512x4, 1024x2 ó 2048x1. Además, pueden
interconectarse múltiples EABs para aumentar la capacidad. También proveen opciones de
configuración para conducir y controlar señales de reloj. Pueden ser usados diferentes
relojes para las entradas y salidas de los EABs. Pueden insertarse registros en forma
independiente en la entrada de datos, en el bus de salida, en el bus de direcciones y en la
señal "write enable" (WE) de los EABs. Las señales globales dedicadas y el sistema de
interconexión local de los EABs pueden propagar la señal de WE.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 1-27
Figura 1.20
Las señales acceden a cada EAB por una fila de interconexión y pueden salir de él tanto
por una fila o un columna de interconexión. Cada salida de un EAB puede propagar hasta
dos canales de filas y hasta dos canales de columnas; los canales no utilizados pueden ser
utilizados por otros elementos lógicos (LEs).
La figura 1.20 muestra en diagrama de bloques, la composición de un EAB (Embedded
Array Block).
7.2.3.2. Logic Array Block (LAB)
El Logic Array Block (LAB) consiste en la agrupación de: ocho elementos lógicos
(LEs), las cadenas de carry y cascada asociadas, señales de control del LAB y el arreglo de
interconexión local del LAB. Los LABs proveen una estructura de grano grueso,
facilitando un ruteado eficiente con óptima utilización del dispositivo y alta performance.
La figura 1.21 muestra la arquitectura de un Logic Array Block (LAB).
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 1-28
Figura 1.21
Cada LAB provee cuatro señales de control, con inversión programable que pueden ser
utilizadas por todos los LEs. Dos de estas señales pueden ser usadas como relojes, las otras
dos pueden ser usadas para control de clear/preset. Las señales de reloj que ingresan a los
LABs pueden provenir de los contactos de entrada de señal de reloj dedicados, de las
señales globales, de las señales de Entrada/Salida o de señales internas a través del arreglo
de interconexión local del LAB respectivo. Las señales de control de clear/preset pueden
provenir de las señales globales, de las señales de Entrada/Salida o de las señales internas a
través del arreglo de interconexión local del LAB respectivo. Las señales de control recién
mencionadas pueden observarse en la figura 1.21.
Las señales de control globales son generalmente usadas para propagar señales de reloj,
clear o preset.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 1-29
Si alguna lógica es requerida sobre alguna señal de control, ésta puede ser generada en
uno o más LEs de cualquier LAB y ser propagada hacia el arreglo de interconexión local
del LAB deseado. Además, las señales de control global pueden ser generadas desde las
salidas de los LEs.
7.2.3.3. Logic Element (Elementos lógicos)
Los elementos lógicos son las unidades lógicas funcionales más pequeñas en la
arquitectura de la familia FLEX 10K. Cada LE contiene una tabla de look-up de 4
entradas, la cual es usada como un generador de funciones lógicas que puede fácilmente
computar cualquier función de cuatro variables. Además, cada LE contiene un flip flop
programable con un enable sincrónico, una cadena de carry y una cadena de cascada. Cada
LE se conecta con el arreglo de interconexión local del LAB y con la estructura de
interconexión global denominada "FastTrack".
La figura 1.22 muestra la estructura de un elemento lógico.
El flip flop programable de cada LE puede ser configurado para funcionar como flip
flop D, T, JK o SR. Las señales de control de reloj, clear y preset que ingresan al flip flop,
pueden provenir de señales globales, de contactos de Entrada/Salida de propósito general o
de cualquier lógica interna. Para implementar funciones combinacionales, el flip flop es
evitado y la salida de la LUT es conducida hacia la salida del LE.
El LE posee dos salidas; una destinada a la interconexión local dentro del LAB y la otra
destinada a la interconexión global que accede a las columnas o a las filas de la estructura
de interconexión FastTrack. Estas dos salidas pueden ser usadas y controladas
independientemente; por ejemplo, la LUT puede utilizar una de las salidas mientras el
registro del LE utiliza la otra. Esta característica es denominada "register packing" y puede
mejorar la utilización del LE debido a que la LUT y el registro del LE pueden ser usados
para implementar funciones independientes.
La arquitectura de la familia FLEX 10K provee dos tipos de caminos de datos
dedicados de alta velocidad que conectan LEs adyacentes, sin hacer uso de los caminos de
interconexión local. Estos caminos adicionales son denominados cadenas de carry y
cadenas de cascada. Las cadenas de carry soportan sumadores y contadores de alta
velocidad; las cadenas de cascada implementan funciones de gran fan–in con mínimo
retardo. Las cadenas de carry y de cascada conectan a todos los LEs en un LAB y a todos
los LABs en la misma fila de la estructura de interconexión FastTrack. El uso intensivo de
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 1-30
cadenas de carry y cascada puede reducir la flexibilidad de ruteo, debido al consumo de
recursos de interconexión que ello implica. Por lo tanto, el uso de estas cadenas debería ser
limitada a porciones del diseño donde fuera necesaria una elevada performance en lo que a
velocidad se refiere.
Figura 1.22
7.2.3.4. Cadenas de Carry
Las cadenas de carry proveen muy alta velocidad (0.2 ns.) para realizar funciones
aritméticas entre LEs. En operaciones de bits donde existen acarreos, la señal de acarreo de
un LE es conducida a través de la cadena de carry hacia la LUT de un LE adyacente. Esta
característica permite implementar eficientemente contadores de alta velocidad, sumadores
y comparadores de un ancho arbitrario.
La lógica asociada a la implementación de una cadena de carry puede ser creada
automáticamente por el software MAX+PLUS II durante el proceso de diseño o
especificada por el diseñador.
Las cadenas de carry que superan los ocho LEs de un LAB, son automáticamente
implementadas enlazando múltiples LABs.
señal de propósito general.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 1-31
Figura 1.23
La figura 1.23 muestra cómo puede ser implementado un sumador de n bits con n + 1
LEs, utilizando la cadena de carry. Una porción de las LUT generan la suma de dos bits
usando las señales de entrada y la señal de acarreo; la suma es ruteada a la salida del LE.
El registro puede ser evitado en la implementación de sumadores simples o utilizado como
acumulador. Otra porción de la LUT y la lógica asociada a la cadena de carry, generan la
señal de carry de salida, la cual es ruteada directamente a la entrada de carry del próximo
bit a sumar. La señal de carry final es ruteada a un LE donde puede ser utilizada como una
7.2.3.5. Cadenas de Cascada
Con las cadenas de cascada pueden implementarse funciones de gran fan-in. LUTs
adyacentes pueden ser usadas para computar porciones de la función en paralelo; siendo la
cadena de cascada la que conecte serialmente los valores intermedios. La cadena de
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 1-32
cascada puede utilizar una operación lógica OR o una AND (según la lógica utilizada) para
conector las salidas de los LEs adyacentes. Cada LE adicional provee cuatro posibles
entradas más, con un retardo de propagación de 0,7 ns por LE. La lógica asociada a la
cadena de cascada puede ser creada automáticamente por el software MAX+PLUS II o
especificada por el diseñador.
Las cadenas de cascada que superan los ocho LEs de un LAB son automáticamente
implementadas enlazando múltiples LABs.
La figura 1.24 muestra cómo el uso de cadenas de cascada permite conectar LEs
adyacentes para formar funciones de gran fan–in. Estos ejemplos muestran funciones de
4.n variables de entrada implementadas con 4 LEs, es decir, n = 4. El retardo de
propagación de un LE es de 1.9 ns y el retardo de la cadena de cascada es de 0.7 ns.
Figura 1.24
7.2.3.6. Modos de Operación de los Elementos Lógicos
Los elementos lógicos (LEs) de la familia FLEX 10K pueden operar en cuatro de los
siguientes modos:
Modo Normal Modo Aritmético Modo Contador Ascendente/Descendente Up / Down Modo Contador Borrable.
Cada uno de estos modos de operación usa diferentes recursos de los LEs. En
cualquiera de ellos, existen disponibles siete entradas a los LEs. Cuatro entradas de datos
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 1-33
desde el arreglo local de interconexión del LAB, la realimentación desde el registro
programable y las señales de entrada de las cadenas de carry y cascada del LE previo.
Tres señales de entrada al LE proveen controles de reloj, clear y preset para el registro
programable.
El software MAX+PLUS II elige automáticamente el modo de operación apropiado. Si
es requerido, el diseñador puede crear funciones de propósito especial usando un modo de
operación determinado para obtener óptima performance.
Figura 1.25
La arquitectura provee una señal sincrónica de clock enable para el registro, en todos
los modos de operación.
La figura 1.25 muestra los modos de operación normal y aritmética. La figura 1.26
muestra los modos de operación del Contador Ascendente/Descendente y del Contador
inicializable en cero.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 1-34
Figura 1.26
7.2.3.7. FastTrack Interconnect
En la arquitectura de la familia FLEX 10K, las conexiones entre LEs y los contactos de
Entrada/Salida son provistas por la estructura de interconexión "FastTrack". Ésta consiste
en una serie de conexiones continuas, horizontales y verticales, que atraviesan el
dispositivo. El conjunto se estas conexiones horizontales y verticales son denominadas
filas y columnas de interconexión, respectivamente. Esta estructura de interconexión
global permite predecir la performance, en cuanto a velocidad de propagación de las
señales, aun en diseños complejos. Ésta es la principal diferencia con los dispositivos
FPGAs, ya que éstos poseen una estructura de interconexión global segmentada. Por lo
tanto, los dispositivos FPGA requieren matrices de interconexión para conectar un número
variable de caminos. Esto incrementa el retardo de propagación entre los recursos lógicos y
reduce la performance.
La figura 1.27 muestra la diferencia en la estructura de interconexión global entre los
dispositivo FLEX 10K y los dispositivos FPGA.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 1-35
Figura 1.27
La estructura de interconexión "FastTrack" consiste de filas y columnas de canales de
interconexión que atraviesan todo el dispositivo. Cada fila de LABs es servida por una fila
de interconexión dedicada. Las filas de interconexión pueden propagar señales hacia o
desde los contactos de Entrada/Salida y alimentar otros LABs del dispositivo. Las
columnas de interconexión son las encargadas de propagar señales entre filas de
interconexión y además pueden conectar contactos de Entrada/Salida.
Figura 1.28
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 1-36
Las filas y columnas de interconexión están compuestas por canales de filas y canales
de columnas respectivamente. Un canal de fila puede ser usado por un LE o por uno de tres
canales de columnas. Estas cuatro señales alimentan un multiplexor dual de 4::1, como
puede observarse en la figura 1.28, el cual deriva las señales a dos canales de filas
específicos. Estos multiplexores, conectados a cada LE, permiten a los canales de
columnas conectarse con los canales de filas, aun cuando todos los LEs de un LAB estén
conectados a la fila de interconexión.
Cada columna de LABs es servida por una columna de interconexión dedicada. Una
señal proveniente de una columna de interconexión debe ser ruteada a una fila de
interconexión antes de que pueda entrar a un LAB o a un EAB.
La figura 1.29 muestra en forma tabular, los recursos de interconexión disponibles en
los distintos dispositivos de la familia FLEX 10K.
Figura 1.29
La figura 1.30 muestra la interconexión entre LABs adyacentes, filas, columnas y el
arreglo de interconexión local, como así también las cadenas de carry y cascada asociadas.
Cada LAB es designado de acuerdo a su locación física dentro del dispositivo: una letra
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 1-37
representa la fila y un número representa la columna. Por ejemplo, el LAB B3 está situado
en la fila B, columna 3.
Figura 1.30
7.2.3.8. I/O Elements (Elementos de Entrada/Salida)
Un elemento de Entrada/Salida contiene un buffer bidireccional y un registro. El
registro puede ser utilizado como registro de entrada, para datos que requieran un corto
tiempo de setup, o como registro de salida, para datos que requieran un tiempo rápido de
propagación de señales hacia el exterior. En algunos casos, el uso de un registro de un LE,
como registro de entrada, podría producir un menor tiempo de setup que el logrado
utilizando un registro de un elemento de Entrada/Salida.
Un elemento de Entrada/Salida puede utilizarse para configurar un contacto como
entrada, salida o bidireccional.
La figura 1.31 muestra el diagrama de bloques de un elemento de Entrada/Salida.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 1-38
Figura 1.31
Cada elemento de Entrada/Salida selecciona las señales de control de clock, clear, clock
enable y output enable de una red de señales de control, denominada "bus de control
periférico".
Este bus de control periférico provee hasta 12 señales de control periféricas que pueden
ser destinadas a los siguientes usos:
Hasta ocho señales de output enable.
Hasta seis señales de clock enable.
Hasta dos señales de clock.
Hasta dos señales de clear.
Si más de seis señales de clock enable u ocho señales de output enable son requeridas,
cada elemento de Entrada/Salida del dispositivo puede ser controlado por señales de output
enable y clock enable provenientes de LEs específicos. Además de las dos señales de clock
disponibles en el bus de control periférico, cada elemento de Entrada/Salida puede utilizar
uno de los dos contactos dedicados de clock globales del dispositivo.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 1-39
La señal global de reset es la señal de control de mayor prioridad y reseteará a todos los
registros de los elementos de Entrada/Salida.
7.2.3.9. Conexión Filas – Elementos E/S
Cuando un elemento de Entrada/Salida es utilizado como entrada, la señal de entrada
puede acceder a dos canales de filas y estar disponible para todos los LEs de esa fila.
Cuando es utilizado como salida, la señal de salida es conducida a través de un multiplexor
que la selecciona del canal de la fila de interconexión deseado.
En la figura 1.32 puede verse cómo los elementos de E/S acceden a las filas de
interconexión.
Figura 1.32
Figura 1.33
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 1-40
Los valores de n (canales por fila) y m (canales por contacto) varían de acuerdo al
dispositivo. La figura 1.33 muestra en forma tabular los recursos de interconexión
disponibles, entre filas y elementos de E/S, según el dispositivo.
7.2.3.10. Conexión Columnas – Elementos E/S
Cuando un elemento de Entrada/Salida es utilizado como entrada, la señal de entrada
puede acceder a dos canales de columnas. Cuando un elemento de E/S es utilizado como
salida, la señal de salida es conducida a través de un multiplexor que la selecciona del
canal de la columna de interconexión deseado.
En la figura 1.34 puede verse como los elementos de E/S acceden a las columnas de
interconexión.
La figura 1.35 muestra en forma tabular los recursos de interconexión disponibles, entre
columnas y elementos de E/S, según el dispositivo.
Figura 1.34
7.2.4. Distribución de señales de reloj
Para soportar diseños de alta velocidad, los dispositivos FLEX 10K ofrecen dos
configuraciones denominadas "ClockLock" y "ClockBoost". Estas configuraciones utilizan
lazos de enganche de fase (PLLs) para la distribución de relojes de alta velocidad dentro
del chip.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 1-41
Figura 1.35
La opción "ClockLock" utiliza un PLL que reduce los retardos de propagación y las
asimetrías dentro del dispositivo.
La opción "ClockBoost" funciona como un multiplicador de reloj, lo que permite al
diseñador distribuir un reloj de baja velocidad y multiplicar la señal al momento de usarla.
La acción combinada de estas dos opciones provee significantes mejoras en la
performance y ancho de banda del sistema.
Las características "ClockLock" y "ClockBoost" son activadas a través del software
MAX+PLUS II.
7.2.5. Configuración de Salida 7.2.5.1. Interfase Multi Voltaje de Entrada/Salida. (MultiVolt I/O
Interface)
Al igual que los dispositivos MAX7000, la familia FLEX 10K posee la característica de
multi voltaje. Esta característica permite que los dispositivos FLEX 10K puedan
interactuar e intercambiar información con dispositivos o sistemas que posean diferentes
voltajes de alimentación.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 1-42
Los dispositivos que poseen esta característica poseen dos conjuntos de contactos de
entrada de alimentación independientes. Un conjunto es usado para la operación interna
del dispositivo y para uso en los buffers de entrada; estos contactos son designados como
VCCINT y deben ser siempre conectados a 5volts. El otro conjunto de contactos de
entrada de alimentación está asociado con los contactos de Entrada/Salida y son éstos los
que deben poseer la característica de multi voltaje. Pueden conectarse tanto a 3,3 como a
5volts. Ellos son designados con el nombre de VCCIO.
7.2.5.2. Slew-Rate Control
Los buffers de salida en cada elemento de Entrada/Salida poseen la capacidad de ajustar
el slew rate de la señal de salida de modo tal de conseguir un mejor desempeño del
dispositivo frente a ruido o frente a velocidad.
Un slew rate bajo reduce el ruido generado en el sistema pero adiciona un retardo de
propagación adicional de 2.9 ns.
Un slew rate elevado provee alta velocidad de transición de la señal de salida, ideal para
aplicaciones de alta velocidad. Sin embargo, debería utilizarse en sistemas que estén
adecuadamente protegidos contra el ruido.
Todos los contactos de E/S poseen un control individual del slew rate.
7.2.5.3. Esquemas de Configuración
Las arquitectura de la familia FLEX 10K utiliza elementos de configuración SRAM que
requieren ser cargados al dispositivo cada vez que éste sea energizado. El proceso de
cargar físicamente los datos en los elementos de memoria SRAM del dispositivo, es
denominado "configuración".
La configuración de los dispositivos FLEX 10K puede realizarse de cualquiera de las
cinco formas mostradas en la figura 1.36.
Figura 1.36
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 2-1
Capítulo 2 El siguiente capítulo es una introducción al lenguaje de especificación de hardware
VHDL. Los conceptos principales y la mayoría de los ejemplos presentados en este
capítulo han sido extraídos del CD-ROM titulado: ALTERA MASTER CLASS The
Interactive HDL Tutorial. Si bien dicho CD-ROM abarca ampliamente los lenguajes
VHDL y Verilog HDL aplicados a la programación de circuitos PLD (Programmable
Logic Design), en este capítulo se tratan sólo en forma práctica los principales conceptos
de VHDL.
Introducción a VHDL: Un Lenguaje de
Especificación de Hardware.
1. ¿Que significa VHDL?
VHDL son las siglas con que es conocido el Lenguaje de Descripción de Hardware
definido como el estándar 1076 del IEEE. La letra "V" significa "Circuitos Integrados de
Muy Alta Velocidad" (abreviatura de VHSIC del inglés "Very High Speed Integrated
Circuit") y la sigla "HDL" significa Lenguaje de Descripción de Hardware (del inglés
"Hardware Description Language"). Por lo tanto en castellano VHDL significaría
"Lenguaje de Descripción de Hardware para Circuitos Integrados de Muy Alta Velocidad".
Este lenguaje fue desarrollado a principios de la década del 80 y fue definido como el
estándar 1076 por la IEEE en 1987. Una nueva versión compatible con la anterior,
desarrollada en 1993, agregó nuevas capacidades y removió alguna ambigüedades de la
versión anterior.
A comienzos de los años 90, VHDL fue utilizado mayoritariamente para la
especificación de circuitos integrados ASIC (Application-Specific Integrated Circuit) y en
la segunda mitad de la década comenzó a utilizarse en la programación de PLDs
(Programmable Logic Devices).
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 2-2
2. Limitaciones del VHDL
El VHDL es principalmente un lenguaje para diseño “digital” y tiene limitadas
capacidades en el área analógica. Aunque actualmente existen una gran cantidad de
esfuerzos tendientes a obtener una versión analógica del lenguaje, dicho esfuerzos están
aún en una etapa incipiente.
El estándar define el lenguaje y su sintaxis, pero no describe el estilo que debe utilizarse
en la especificación de un proyecto. Esto provoca que las diferentes herramientas de
síntesis tengan ciertas diferencias, pero sin embargo estas diferencias son escasas y es
posible modificar ligeramente los códigos para adaptarlos a cada una de las herramientas
de síntesis.
3. Estilos de Escritura de VHDL
Los diferentes estilos de escritura de código VHDL se basan en un concepto conocido
como abstracción. La abstracción define la magnitud del detalle en las especificaciones del
sistema a diseñar.
Hay cuatro niveles principales de abstracción, los cuales son representados en la figura
2.1.
Figura 2.1
El nivel más bajo que es posible definir es el LAYOUT (disposición, esquema) . En este
nivel se especifica la información referente a la disposición del diseño sobre el silicio y
puede también especificar información detallada de temporizado.
El nivel superior al de LAYOUT es el nivel LOGIC. En este nivel se interconectan las
compuertas lógicas y registros. Todo lo referente al nivel de LAYOUT es ignorado. Este
nivel contiene información sobre la función, arquitectura, tecnología y detalle del
temporizado.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 2-3
El tercer nivel, es el nivel RTL (Register Transfer Level - nivel de transferencia de
registro). En este nivel se definen cada uno de los registros que componen el diseño y la
lógica entre ellos.
Por último, el cuarto nivel es el BEHAVIORAL (comportamiento). Este nivel hace uso
del VHDL para describir la función del diseño, sin especificar la arquitectura de registros.
Aunque es el nivel de mayor abstracción, el código desarrollado a este nivel puede
contener tanta información de temporizado como la que el diseñador requiera para
representar su función.
Hoy en día la mayoría de las herramientas de síntesis requieren que el código sea escrito
a nivel RTL (Register Transfer Level). Por este motivo será adoptado en este informe
como el estilo de escritura de VHDL.
En las herramientas de síntesis que se basan en el nivel BEHAVIORAL,
automáticamente se generan arquitecturas de registros y lógica basadas en el estándar
VHDL. Existen diversas clases de estas herramientas las cuales frecuentemente se aplican
cuando es necesario implementar algoritmos como, por ejemplo, en los casos de
procesamiento de señales.
4. Conceptos Principales del Lenguaje
Completaremos la introducción de cómo es usado el VHDL introduciendo los
principales conceptos y construcciones disponibles para el diseñador.
Como VHDL es un lenguaje que permite describir hardware, éste debe permitir
describir actividades que operan simultáneamente, como por ejemplo la siguiente
conexión.
Figura 2.2
Tales actividades se denominan concurrentes.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 2-4
Un aspecto específico de descripción de concurrencia es la habilidad de describir
estructuras o jerarquías. La descripción de estructuras en VHDL puede ser libremente
mezclada con descripción de comportamiento (behavior), como muestra la figura 2.3.
Figura 2.3
En este caso las estructuras u1, u2 y u3 funcionan concurrentemente conformando una
estructura más compleja.
El lenguaje VHDL puede contener también sentencias que se ejecuten en forma
secuencial, similar a lo que sucede en cualquier lenguaje de programación tradicional
como ser “C”, Pascal, BASIC, etc. Sin embargo, es necesario recordar que esta
característica describe en forma secuencial un comportamiento concurrente y no es la
ejecución secuencial de un código residente en memoria.
4.1 Sintaxis
Llamaremos bloque a cada parte constitutiva del diseño. Por lo tanto, un diseño estará
formado por la interconexión e interacción de distintos bloques.
A continuación se describe la sintaxis de VHDL, comenzando con el código que
representa el bloque de construcción principal de cualquier diseño, denominado
ENTIDAD.
La ENTIDAD, en VHDL, describe la interfase de un bloque (cuántos son y cómo se
llaman los contactos de entrada y salida de dicho bloque), sin definir qué es lo que hace.
En la figura 2.4 se describe la sintaxis que define un medio sumador (Halfadd).
La sintaxis para una entidad comienza con la palabra reservada “ENTITY”, seguida por
el nombre que se desee dar a dicha entidad y luego se coloca la palabra “IS”.
Las entradas y salidas están contenidas en el cuerpo de la sentencia “PORT”, donde se
listan la dirección y estados de cada una de las señales a nivel de bit. Finalmente se tiene la
palabra reservada “END” y el nombre de la entidad, seguida por un punto y coma.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 2-5
Figura 2.4
Se debe notar que el uso correcto de los punto y coma en la sentencia “PORT” es como
lo muestra la figura 2.5.
Figura 2.5
4.2 Arquitectura
A continuación se describe el comportamiento de la entidad, definido en el bloque
llamado arquitectura.
Figura 2.6
La figura 2.6 muestra una forma de definir el comportamiento del medio sumador de la
figura 2.5. La sintaxis de la definición de una arquitectura comienza con la palabra
reservada “ARQUITECTURE” seguida por el nombre con que el usuario desea identificar
a dicha arquitectura.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 2-6
Una arquitectura siempre está asociada con una entidad y por ello existe la palabra
reservada “OF” para referenciarla. Luego del nombre de la entidad a la que está asociada la
arquitectura, se coloca la palabra “IS”. El comportamiento de la arquitectura en sí se
escribe entre las palabras “BEGIN” y “END”. En este ejemplo vemos que (A xor B) es
asignado a SUM y (A and B) es asignado a CARRY.
Cabe señalar que una entidad puede tener más de una arquitectura. De esta manera, en
el ejemplo desarrollado, pueden existir varias formas en especificar un medio sumador
mediante la definición de varias arquitecturas.
4.3 Jerarquía
La entidad y la arquitectura son los bloques de construcción principales con los que una
jerarquía es construida. A continuación se describe cómo una jerarquía es representada en
VHDL, usando como ejemplo la definición de un sumador completo (FULLADD)
construido a partir de dos medio sumadores (HALFADD) y una compuerta OR.
Figura 2.7
La especificación de la entidad FULLADD, representada en la figura 2.8, se realiza en
forma similar a la del medio sumador de la figura 2.4.
Figura 2.8
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 2-7
La figura 2.9 describe una posible implementación de la arquitectura de FULLADD.
Cada una de las sentencias ubicadas entre "BEGIN" y "END" crea una instancia de otra
entidad. Es necesario definir las señales internas I1, I2 e I3 con la palabra reservada
SIGNAL para poder interconectar las distintas arquitecturas instanciadas.
Figura 2.9
De esta manera, u1 será una instancia de la entidad HALFADD definida anteriormente.
La sintaxis de esta definición consiste en el nombre de la instancia (u1) seguida por ":" y el
nombre de la entidad instanciada (HALFADD). Luego debe figurar la palabra reservada
Figura 2.10
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 2-8
“PORT MAP” definiendo entre paréntesis el nombre que cada una de las señales de la
entidad tendrá en la instancia definida.
En la figura 2.10 se representa el efecto de instanciar u1 a la entidad HALFADD.
4.4 Declaraciones
Existen dos tipos de declaraciones que pueden realizarse localmente en una
arquitectura. Estos dos tipos son las señales locales que se utilizarán en la arquitectura y
las referencias a las entidades HALFADD y ORGATE, conocidas como componentes.
En el diseño de la arquitectura FULLADD de la figura 2.9 las señales I1, I2, e I3 son
locales a dicha arquitectura. Éstas no son ni entradas ni salidas, ya que son internas a
FULLADD y, por lo tanto, deben ser declaradas al comienzo de la arquitectura usando la
palabra reservada “SIGNAL”.
Antes de realizar una instancia de una entidad, tal como U1 fue instanciada de
HALFADD, es necesario declarar la entidad HALFADD dentro de la arquitectura de
FULLADD. Esto es llamado declaración de componentes y se realiza en el lugar marcado
con "other declarations" en la arquitectura de FULLADD.
La declaración de los componentes se realiza en el mismo estilo de sintaxis que la
entidad. Generalmente se desea que el componente tenga el mismo nombre y la misma
lista de ports que la entidad utilizada. Esto es totalmente factible puesto que no existe
ningún tipo de restricción en el nombre del componente.
La declaración del componente HALFADD es la siguiente:
Figura 2.11
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 2-9
Entonces el código completo para el diseño del FULLADD propuesto, es el siguiente:
entity FULLADD is
port (A, B, CIN : in bit;
SUM, CARRY : out bit);
end FULLADD;
architecture STRUCT of FULLADD is
signal I1, I2, I3 : bit;
component HALFADD
port (A,B : in bit;
SUM, CARRY : out bit);
end component;
component ORGATE
port (A,B : in bit;
Z : out bit);
end component;
begin
u1:HALFADD port map(A,B,I1,I2);
u2:HALFADD port map(I1,CIN,SUM,I3);
u3:ORGATE port map(I3,I2,CARRY);
end STRUCT;
4.5 Configuraciones
Consideremos que un diseño jerárquico completo consiste de entidades, donde cada una
de las cuales puede tener múltiples arquitecturas que describan distintos comportamientos.
El objetivo de la configuración especifica cuál arquitectura va a ser usada por cada una de
las entidades.
En caso de que no se especifique información de configuración para una entidad, la
última arquitectura que es sintetizada por el simulador, será la única que se utilizará
durante la simulación.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 2-10
Figura 2.12
Consideremos la siguiente configuración:
Figura 2.13
El simulador utilizará para B y C la arquitectura Y por ser la última arquitectura
sintetizada.
4.6 Configuración por Defecto
Es común que un diseño completo sólo tenga una arquitectura y, en teoría, no requeriría
una configuración. Algunos simuladores lo permiten, mientras que otros requieren al
menos una configuración por defecto (“default configuration”).
Es importante notar que siempre que se utilice la configuración por defecto se realizará
una especificación más portable.
La siguiente figura muestra cómo es una configuración por defecto:
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 2-11
Figura 2.14
Una configuración tiene nombre propio y está asociada con la entidad del nivel más alto
de la jerarquía.
4.7 Procesos y tipos
Un proceso es una región de código VHDL dentro de la cual las sentencias son
ejecutadas en secuencia. Un proceso existe dentro de una arquitectura y múltiples procesos
interactúan con cada uno de los otros concurrentemente. La figura 2.15 resalta un proceso
en VHDL.
Figura 2.15
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 2-12
Cualquier diseño en lenguaje VHDL es considerado por el simulador como una
colección de procesos. Cada proceso ejecuta sus propias sentencias en secuencia y los
múltiples procesos interactúan concurrentemente como lo muestra la siguiente figura.
Figura 2.16
No existe ninguna limitación sobre el número de procesos que puede contener una
arquitectura.
Cada señal en un diseño en VHDL tiene asociado un TIPO. Un tipo define el conjunto
de valores que pueden ser asignados a la señal. Existen tipos pre definidos en el lenguaje
estándar, pero el usuario puede definir sus propios tipos. Un ejemplo es el tipo pre definido
"bit", el cual puede tener los valores “0” y “1”.
La figura 2.17 muestra los tipos pre definidos y algunos definidos por el usuario.
Figura 2.17
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 2-13
4.8 Package
Un package contiene una colección de definiciones que pueden ser referenciadas por
distintos diseños en forma simultánea. Colocando definiciones que son comunes entre los
diseños, permite al equipo de diseño trabajar más consistentemente.
Figura 2.18
Un package es una unidad de diseño separada en VHDL tal como lo son las entidades,
arquitecturas y configuraciones.
Figura 2.19
Un package puede contener definiciones de valores constantes, tipos de datos definidos
por el usuario, declaración de componentes, o sub programas de código VHDL repartidos
entre diferentes diseños.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 2-14
Figura 2.20
4.9 Esquema Completo
Con los principales bloques de construcción y conceptos de VHDL, es posible obtener
un esquema completo de cómo se relacionan dichos bloques en un diseño típico.
La jerarquía de un diseño completo está definida por múltiples entidades, las cuales
tienen al menos una arquitectura. Sólo una arquitectura es referenciada por cada entidad en
una simulación particular.
Figura 2.21
Varias de estas entidades y arquitecturas referencian a uno o más packages de
definiciones comunes.
Figura 2.22
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 2-15
El enlace entre cada nivel de jerarquía y las especificaciones de cuál arquitectura va a
ser usada es llevada a cabo por la configuración.
Figura 2.23
Finalmente, el máximo nivel de jerarquía es usualmente usado para contener al diseño y
a los estímulos que serán aplicados durante la simulación.
Figura 2.24
5. Señales y Tipos de Datos
A continuación se describe la forma en que pueden ser asignadas las señales en VHDL
y un resumen de reglas, relativas al uso de los tipos de datos. Primero se considera el
concepto de tipo de dato y los diferentes tipos estándar que son definidos como parte del
lenguaje. Luego se describe el concepto de un array (arreglo) y se proponen diferentes
ejemplos de cómo simples bits y arreglos de señales pueden ser manipulados dentro de
VHDL. Se describe también la forma en que el diseñador puede especificar sus propios
tipos de datos, denominados enumerated type (tipos enumerados). Finalmente se detalla la
definición de un tipo de dato conocido como "standard logic" (lógica estándar), el cual ha
sido adoptado como estándar en la descripción de señales en VHDL.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 2-16
5.1 Concepto de Tipo y Especificación
El lenguaje VHDL define que cada señal debe tener un tipo de dato asociado cuando la
señal es declarada. El tipo de dato de una señal define el conjunto de valores que pueden
ser asignados a dicha señal. En el ejemplo de la figura 2.25, no es posible asignar a
N_SUM una señal que pertenezca a otro tipo de dato que no sea el tipo bit.
Figura 2.25
Una señal es, generalmente, declarada en la sección PORT de una ENTIDAD o dentro
de una declaración de señal explícita en una ARQUITECTURA. Cuando una señal es
declarada en algunos de esos lugares, el tipo asociado debe ser especificado. El tipo de
dato en el siguiente ejemplo es “BIT”.
Figura 2.26
Cuando se asigna un valor a una señal, el tipo de dato a ambos lados del operador de
asignación debe ser el mismo. En el siguiente ejemplo, el resultado de “A xor B” debe ser
de tipo “BIT” para poder ser asignado a “SUM”, que también es tipo “BIT”.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 2-17
Figura 2.27
5.2 Tipos de Datos Estándar
Los tipos de datos estándar son especificados como código fuente VHDL y el lenguaje
define que ellos deben encontrarse en un PACKAGE denominado STANDARD.
Figura 2.28
A continuación se describen los tipos de datos más importantes definidos en el package
llamado STANDARD.
El tipo de dato boolean define dos valores: verdadero y falso. El tipo de dato time es
usado para modelar simulaciones temporales y consiste en valor y unidad.
Figura 2.29
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 2-18
El tipo de dato bit puede ser usado para modelar un simple bit y consiste en los valores
“0” y “1”. El tipo de dato bit_vector define una colección de bits y puede ser usado para
modelar una estructura de BUS.
Figura 2.30
Como el nombre lo indica, el tipo de dato character define un simple carácter en VHDL
y el tipo de dato string define un arreglo o cadena de caracteres.
Figura 2.31
VHDL soporta los tipos de datos enteros y reales.
Figura 2.32
5.3 Asignación de Señales
VHDL define que la asignación de un nuevo valor a una señal, debe realizarse mediante
la "sentencia de asignación de señal" utilizando el símbolo "<=".
La asignación define un driver sobre la señal. El concepto de driver es el mismo que el
utilizado en una compuerta lógica en un hardware real, es decir, la salida toma el valor de
la entrada sin que ésta se modifique.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 2-19
Figura 2.33
Figura 2.34
Si más de una asignación es hecha a una señal, implica que la señal tiene más de un
driver. En este caso, la señal debe ser declarada como una clase de tipo especial, conocido
como tipo resoluble. Un tipo resoluble tiene una llamada a función asociada, con la que se
“resuelve” el valor final de la señal.
Figura 2.35
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 2-20
Todos los tipos de datos enunciados anteriormente no son del tipo resoluble, por lo
tanto son llamados irresolubles y no permiten tener más de un driver. Más adelante se
describe el uso de tipos de datos resolubles.
5.4 Arreglos (Arrays)
Un arreglo es una colección de objetos, donde cada uno de ellos es del mismo tipo de
dato. El lenguaje define dos tipos de arreglos estándar: bit_vector y string.
Figura 2.36
El rango o dimensión de un arreglo es definido cuando el mismo es declarado. El
ejemplo de la figura 2.37 muestra dos bit_vectors, cada uno de ellos de 4 bits de ancho.
El rango puede ser declarado usando la notación “to” o “downto”.
Figura 2.37
Dos arreglos pueden ser asignados el uno al otro si el tamaño y el tipo es el mismo. El
siguiente diagrama describe la forma en que se realiza la asignación de vectores. Se debe
notar que la asignación es por posición y no por índice.
Una porción puede ser referenciada utilizando “to” o “downto”. Puede referenciarse
también un elemento simple del arreglo. Debe tenerse en cuenta que la “dirección” de la
porción, según se haya usado “to” o “downto”, debe ser la misma que se uso en la
declaración del arreglo como se muestra en la figura 2.39.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 2-21
Figura 2.38
Figura 2.39
5.5 Concatenación y Agregado
Los métodos de concatenación y agregado son utilizados para asociar señales y
asignarlas a un objeto arreglo. VHDL permite asociar bits y vectores para formar
estructuras de arreglos. Esto es conocido como concatenación y usa el operador "&". El
siguiente ejemplo muestra cómo simples bits pueden concatenarse para formar nuevos
vectores.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 2-22
Figura 2.40
Otro método de asignación definido en VHDL es el agregado. Un agregado está
contenido entre paréntesis y la asignación a cada elemento está separada por comas.
Figura 2.41
Mediante el uso de agregados es posible especificar el nombre de un elemento de un
arreglo. De esta manera, la asignación de un elemento del arreglo puede realizarse por
nombre además de realizarlo por posición. El siguiente ejemplo muestra una asignación
por nombre.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 2-23
Figura 2.42
Los agregados pueden hacer uso de la sentencia “others”, la cual asignará un valor a
todos los elementos restantes del arreglo que no hayan sido especificados.
Figura 2.43
Finalmente, no todas las herramientas de síntesis soportan el uso de agregados por lo
que es necesario utilizar concatenación en estas herramientas, para manipular arreglos.
5.6 Definición de Tipos
A continuación se detalla la forma en que el diseñador puede definir sus propios tipos
de datos.
Figura 2.44
Un tipo definido por el usuario, en VHDL, es conocido como un tipo enumerado,
(“enumerated type”). Los tipos comúnmente son definidos dentro de un package,
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 2-24
arquitectura o proceso y la mayoría de las herramientas de síntesis son capaces de
sintetizar VHDL conteniendo tipos enumerados.
Para definir un tipo enumerado es necesario especificar el nombre del tipo, seguido de
la lista de valores que componen al mismo, separados por comas. La sintaxis de la
declaración es mostrada en la figura 2.45.
Figura 2.45
La definición del tipo de dato, permite definir señales de ese tipo. En el siguiente
ejemplo se declara la señal STATE como tipo de dato MY_STATE (definido en la figura
2.45), indicando asignaciones válidas e inválidas. Debe tenerse en cuenta que no pueden
asignarse a la señal STATE otros valores que no hayan sido especificados en la definición
de MY_STATE.
Figura 2.46
Usualmente el tipo de dato enumerado tiene un número mínimo de bits requeridos para
representar todos los valores posibles. El siguiente ejemplo muestra cómo con 2 bits se
representan 4 valores.
Figura 2.47
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 2-25
5.7 Lógica MultiValuada
Existen situaciones en que la utilización de simples valores binarios no es suficiente
para simular o especificar un diseño. En una simulación puede ser necesario representar
otros valores de la señal como, por ejemplo, desconocido (unknown), no inicializado
(un_initialized), alta impedancia (high impedance) y “drive strengths”. En la síntesis puede
ser necesario especificar condiciones de “don’t care”.
Figura 2.48
La necesidad de especificar tipos de datos no binarios define el sistema de Lógica Multi
Valuada, o sistema MVL, que es un tipo de datos enumerado. Este tipo de dato define
caracteres para representar los valores o estados mencionados en la figura 2.48.
Hasta principios de 1992 no existía un standard en esta área y cada proveedor de
herramientas de síntesis y simulación usaba su propio sistema MVL.
Actualmente el standard define un sistema de Lógica Multi Valuada (MVL) con nueve
valores o estados. Este estándar está separado del que define el lenguaje VHDL y es el
standard IEEE1164.
Seguidamente se detalla este tipo de dato conocido como "STANDARD LOGIC".
El standard 1164 está definido en código fuente VHDL y describe un tipo de dato
llamado “std_ulogic” (generalmente pronunciado “standard u logic”), el cual define los
nueve posibles estados. El siguiente diagrama muestra la definición de cada estado.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 2-26
Figura 2.49
El tipo “std_ulogic” es un tipo de dato irresoluble y sólo puede tener un driver. Este es
el origen de la letra “u”, por significar irresoluble en idioma ingles.
Figura 2.50
La versión resoluble del tipo de dato "std_ulogic" es el tipo de dato denominado
“std_logic”. Este tipo de dato puede tener más de un driver, conservando la misma
cantidad de estados (nueve).
Figura 2.51
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 2-27
Estos tipos de definiciones están contenidas dentro de un package llamado
standard_logic_1164. A continuación se describe cómo referenciar tal package.
Figura 2.52
El package también contiene la definición de arreglos de std_logic y std_ulogic
conocidos como std_logic_vector y std_ulogic_vector, respectivamente. Estos tipos de
datos pueden ser utilizados para definir estructuras de bus, en la forma similar a la
realizada con el tipo de dato irresoluble bit_vector.
Figura 2.53
5.8 Usando Lógica Standard
Descriptas las definiciones de la lógica standard, se realizan a continuación algunos
ejemplos de cómo puede ser usada.
El package de definiciones está contenido dentro de una librería llamada IEEE. Esta es
necesaria para referenciar a la librería y al package, como muestra la figura 2.54.
Es necesario incluir dichas líneas en la especificación para poder definir entidades que
utilicen los tipos de datos de lógica STANDARD.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 2-28
Figura 2.54
Como muestra la figura 2.55, es posible asignar libremente objetos del tipo std_logic a
objetos del tipo std_ulogic, y viceversa.
Figura 2.55
Si existen múltiples drivers sobre una señal, debe utilizarse el tipo std_logic, ya que es
ilegal si lo hacemos con el tipo de dato irresoluble std_ulogic.
Figura 2.56
Los visto en este capítulo sobre el lenguaje de especificación de hardware VHDL, es
sólo una introducción al mismo, y es por ello que no se profundizo en la sintaxis, ni en las
sentencias componentes del lenguaje.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 2-29
El objetivo de este capítulo fue describir las estructuras y conceptos básicos del
lenguaje para que nos sea posible tomar una herramienta de diseño cualquiera, como por
ejemplo el software MAX+PLUS II de ALTERA, y poder describir un hardware en
VHDL.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 3-1
Capítulo 3 En este capítulo se describe la estructura general de diseño de una especificación de
hardware en AHDL como así también un conjunto de secciones y sentencias que
componen este lenguaje.
AHDL: Un Lenguaje de Descripción de Hardware
Introducción
AHDL es un lenguaje de especificación desarrollado por ALTERA que se basa en la
descripción del hardware a través de su comportamiento (behavior). El lenguaje AHDL
utiliza ecuaciones lógicas, variables, constantes, funciones, operadores aritméticos, tablas
de verdad y expresiones condicionales, en forma similar a la de un lenguaje de
programación de alto nivel. Está especialmente orientado al diseño de lógica
combinacional compleja, máquinas de estado, tablas de verdad y lógica parametrizada. El
lenguaje AHDL está completamente integrado en el software de desarrollo MAX+PLUS
II.
El software MAX+PLUS II brinda la posibilidad de usar plantillas de diseño
(Templates), que permiten en forma rápida, insertar en el archivo de diseño la estructura y
sintaxis correcta de las diferentes secciones y sentencias soportadas por el lenguaje. Un
archivo de diseño realizado en lenguaje AHDL debe contener como mínimo una sección
de subdiseño y una sección lógica, siendo opcionales las demás secciones.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 3-2
Estructura de diseño
La figura 3.1 muestra un esquema de las diferentes sentencias y secciones componentes
de un diseño en lenguaje AHDL.
Figura 3.1
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 3-3
1. Sentencia "Title"
La sentencia title (Título) permite agregar un comentario en el archivo de reporte
generado automáticamente por el software de desarrollo.
El siguiente ejemplo muestra la sintaxis de una sentencia title.
TITLE "Controlador de Memorias Dinámicas en SIMM de 72 contactos";
La sentencia title tiene las siguientes características:
Debe comenzar con la palabra reservada TITLE, seguida por un texto encerrado
entre comillas, finalizando con un punto y coma.
El texto contenido en el cuerpo de la sentencia puede contener como máximo un
total de 255 caracteres
Para incluir comillas dentro del texto deben usarse dos comillas, por ejemplo:
TITLE " ""MAX 7000"" Controlador de Display";
Sólo puede utilizarse una sola vez en un archivo .tdf.
Debe ser colocada fuera de todas las otras secciones del diseño.
2. Sentencia "Parameters"
La sentencia parameters (Parámetros) permite declarar uno o más parámetros para
controlar la implementación del diseño en función de los valores asignados al momento de
la síntesis de la lógica.
También permite crear un diseño parametrizado para ser utilizado como librería de otro
diseño. ALTERA, provee una serie de librerías llamadas librerías de módulos
parametrizados (LPM), que pueden ser usadas libremente pero deben ser declaradas y
luego instanciadas en el archivo donde quieran utilizarse.
En el momento de realizar la instancia de dicha librería se le deben pasar los parámetros
necesarios. Si observamos el siguiente ejemplo y suponemos que es la declaración de
parámetros de una librería de módulos parametrizados, podemos ver que existen
parámetros con y sin valores asignados. Al instanciar dicha función estaremos obligados a
pasar los parámetros que no posean un valor asignado por defecto, en este caso el
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 3-4
parámetro ANCHO. Los parámetros que tengan asignados valores por defecto pueden
omitirse o ser incluidos si se desea modificarlos.
El siguiente ejemplo muestra el uso de la sentencia parameters.
PARAMETERS
(
NOMBRE = "miarchivo.mio",
ANCHO,
BYTE = 8,
PALABRA = 2*BYTE
);
La sentencia parameters posee las siguientes características:
Comienza con la palabra reservada PARAMETERS seguida por una lista de uno
o más parámetros, encerrados entre paréntesis. La Sentencia finaliza con un
punto y coma.
Los parámetros de la lista deben ser separados por comas y pueden asignarse
opcionalmente valores por defecto usando el signo igual (=). En la lista
mostrada arriba, sólo el parámetro ANCHO no tiene asignado un valor por
defecto.
Los nombres de los parámetros pueden ser definidos por el usuario o ser
parámetros predefinidos por ALTERA.
Los valores asignados a los parámetros pueden ser cadenas de caracteres
encerrados entre comillas, valores numéricos o expresiones algebraicas entre
parámetros ya declarados.
El uso de la sentencia parameters implica respetar las siguientes reglas:
Un parámetro puede ser usado sólo después de ser declarado.
Cada nombre de parámetro debe ser único.
No pueden contener espacios. El uso del carácter underline "_" para separar
palabras está permitido.
Puede ser usada un número arbitrario de veces dentro del mismo archivo de
diseño.
Debe ser colocada fuera de todas las otras secciones del diseño.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 3-5
3. Sentencia "Include"
La sentencia include permite importar texto desde un archivo con extensión .inc, al
archivo que contiene la sentencia.
El siguiente ejemplo muestra el uso de la sentencia include:
INCLUDE "lpm_counter.inc";
La sentencia include posee las siguientes características:
Comienza con la palabra reservada INCLUDE seguida por el nombre del
archivo a incluir, encerrado entre comillas. La Sentencia finaliza con un punto y
coma.
Si la extensión del archivo a incluir no es escrita, el software asume por defecto
que la extensión es .inc.
La sentencia include es utilizada para incluir prototipos de funciones. Se llaman
prototipos de funciones a la descripción exterior de una función, es decir, la definición de
sus puertos de entrada y salida, sin describir su funcionamiento interno.
El diseñador puede generar un archivo de tipo include a partir del archivo de diseño
TDF, utilizando la opción Create Default Include File del software MAX+PLUS II.
Un ejemplo del contenido de un archivo include, llamado dramcontrol.inc, es el
siguiente:
-- Copyright (C) 1988-1998 ALTERA Corporation
-- MAX+PLUS II Include File
-- Version 8.2 1/8/98
-- Created: Thu Sep 16 20:02:23 1999
FUNCTION dramcontrol (clk, /read, /write, /output_enable,
address_in[15..0])
RETURNS (bidir_up[7..0], bidir_simm[7..0], address_out[9..0],
/write_dram, /ras, /cas[3..0], ready);
Como se observa en el archivo dramcontrol.inc, no se encuentra la descripción de la
función. La descripción de la función se encuentra en el archivo TDF del mismo nombre
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 3-6
dramcontrol.tdf, que debe encontrarse en el mismo directorio del archivo que contiene la
sentencia include.
El uso de la sentencia include implica respetar las siguientes reglas:
Puede ser usada un número arbitrario de veces dentro del mismo archivo de
diseño.
Debe ser colocada fuera de todas las otras secciones del diseño.
4. Sentencia "Constant"
La sentencia constant (Constante) permite sustituir un valor numérico o una expresión
aritmética por un nombre simbólico, de modo tal, que el código sea más intuitivo y mejore
su legibilidad.
El siguiente ejemplo muestra el uso de la sentencia constant.
CONSTANT Limite_Superior = 130;
CONSTANT BAR = 1 + 2 DIV 3 + LOG2(256);
CONSTANT FOO = 1;
CONSTANT FOO_PLUS_ONE = FOO + 1;
La sentencia constant posee las siguientes características:
Comienza con la palabra reservada CONSTANT, seguida por un nombre
simbólico, un signo igual (=), y un número o una expresión aritmética. La
Sentencia finaliza con un punto y coma.
Una vez declarada una constante esta puede ser utilizada a lo largo de todo el
archivo de diseño.
Los nombres de las constantes deben ser únicos y pueden ser utilizados un
número arbitrario de veces.
Debe ser utilizada fuera de las otras secciones del diseño.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 3-7
5. Sentencia "Define"
La sentencia define permite especificar una función matemática que retorna valores en
función de los argumentos que recibe.
El siguiente ejemplo muestra la definición y el uso de una función, que devuelve el
argumento de mayor valor, entre los que recibe como parámetros:
DEFINE MAX(a,b) = (a > b) ? a : b;
--valor1 y valor2 definidos previamente
CONSTANT maximo = MAX(valor1, valor2);
El operador ? funciona de la siguiente manera:
<expresión 1> ? <expresión 2> : <expresión 3>;
Si la expresión 1 es verdadera (en el ejemplo anterior, si a es mayor que b), la función
devuelve el resultado de la expresión 2, en caso contrario la función devuelve como
resultado el valor de la expresión 3.
La sentencia define posee las siguientes características:
Comienza con la palabra reservada DEFINE, seguida por un nombre simbólico,
seguido por una lista de uno o más argumentes separados por comas y
encerrados entre paréntesis. Un signo igual separa la lista de argumentos de la
expresión aritmética que implementa la función. La sentencia finaliza con un
punto y coma.
Una función puede ser definida en términos de funciones definidas previamente.
Por ejemplo, la siguiente función está basada en la función MAX definida
anteriormente:
DEFINE Positivo(x) = MAX(0,x) + 1;
Si la función no posee una lista de argumentos, se comportará como la
declaración de una constante.
Un vez definida, la función puede utilizarse en cualquier parte del archivo de
diseño un número arbitrario de veces.
Debe ser definida fuera de las otras secciones del diseño.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 3-8
6. Sentencia "Function Prototype"
La sentencia function prototype (Prototipo de función) posee la misma función que los
símbolos de un archivo esquemático. Ambos proveen una mínima descripción de la
función lógica que ellos representan, listando su nombre y ports de entrada, salida y
bidireccionales.
El siguiente ejemplo muestra el uso de la sentencia function prototype en una función
parametrizada y no parametrizada:
FUNCTION lpm_add_sub (dataa[LPM_WIDTH-1..0], datab[LPM_WIDTH-1..0])
WITH (LPM_WIDTH, LPM_REPRESENTATION, LPM_DIRECTION, ADDERTYPE)
RETURNS (result[LPM_WIDTH-1..0], count, overflow);
FUNCTION compare (a[3..0], b[3..0])
RETURNS (less, equal, greater);
La sentencia function prototype posee las siguientes características:
Comienza con la palabra reservada FUNCTION, seguida por el nombre de la
función, luego por una lista de ports de entrada separados por comas y
encerrados entre paréntesis. En funciones parametrizadas, se utiliza la palabra
reservada WITH seguida por una lista de parámetros separados por comillas. Por
último la palabra reservada RETURN seguida por una lista de ports de salida y/o
bidireccionales. La sentencia finaliza con un punto y coma.
Debe colocarse fuera de la sección de Subdiseño del archivo TDF y debe ser
colocada antes que la función lógica sea instanciada.
7. Sentencia "Options"
La sentencia options especifica la opción BIT0 para especificar la posición del bit más
significativo de un grupo de bits. Comienza con la palabra reservada OPTIONS seguida
por la opción BIT0. La sentencia finaliza con un punto y coma.
El valor por defecto se BIT0 = LSB (Bit Menos Significativo). Por ejemplo, si se define
el grupo a[31..0]; a[0] corresponde al bit menos significativo y a[31] al bit más
significativo.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 3-9
Un ejemplo del uso de esta sentencia sería:
OPTIONS BIT0 = MSB;
En este caso el bit 0 es especificado como el bit más significativo.
8. Sentencia "Assert"
La sentencia assert permite verificar la validez de cualquier expresión que utilice
parámetros, números y funciones.
El siguiente ejemplo muestra el uso de la sentencia assert:
ASSERT (ANCHO > 0)
REPORT "El Ancho (%) debe ser un entero positivo" ANCHO
SEVERITY ERROR;
La sentencia assert posee las siguientes características:
Comienza con la palabra reservada ASSERT seguida por una expresión
aritmética encerrada entre paréntesis. Cuando el resultado de dicha expresión es
falso, el mensaje que sigue a la palabra reservada REPORT es mostrado durante
la síntesis del proyecto.
Luego de la palabra reservada REPORT se escribe el mensaje junto con la
opción de sustituir el carácter % con el valor de una variable.
La palabra reservada opcional SEVERITY es seguida por el nivel de severidad
del mensaje. Los valores posibles son ERROR, WARNING o INFO. Si no se
especifica la opción SEVERITY, el valor por defecto es ERROR. El nivel de
severidad ERROR detiene la síntesis del proyecto, el nivel WARNING e INFO
sólo muestran el mensaje deseado sin detener la síntesis.
9. Sección de Subdiseño
La sección de subdiseño es el lugar del archivo de diseño donde se realiza la
declaración de los ports de entrada, salida y bidireccionales.
El siguiente ejemplo muestra la sección de subdiseño:
SUBDESIGN dramcontrol
(
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 3-10
/ras, /cas : INPUT = VCC;
address[16..0] : OUTPUT;
datos[7..0] : BIDIR;
)
La sección de subdiseño posee las siguientes características:
Comienza con la palabra reservada SUBDESIGN seguida por el nombre de la
sección que debe ser el mismo que el nombre del archivo TDF.
Los nombres de las señales son separados por comas, seguidos por dos puntos
":" y el tipo del port.
Los tipos de ports pueden ser INPUT, OUTPUT, BIDIR, MACHINE INPUT o
MACHINE OUTPUT.
Las palabras reservadas MACHINE INPUT y MACHINE OUTPUT son usadas
para importar y exportar máquinas de estado entre archivos TDF y otros
archivos de diseño.
Es posible asignar un valor por defecto (VCC o GND) después de definir el tipo
de port.
10. Sección de Declaración de Variables
La sección de declaración de variables, es una sección opcional en donde se declaran
y/o generan las variables usadas en la sección lógica. Las variables en AHDL son similares
a las variables en un lenguaje de programación de alto nivel. Ellas son utilizadas para
definir lógicas y señales internas.
El siguiente ejemplo muestra una sección de declaración de variables típica:
VARIABLE
a, b, c : NODE;
temp : halfadd;
ts_node : TRI_STATE_NODE;
IF DEVICE_FAMILY == "FLEX8000" GENERATE
8kadder : flex_adder;
d,e : NODE;
ELSE GENERATE
7kadder : pterm_adder;
f,g : NODE;
END GENERATE;
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 3-11
Se observa en el ejemplo anterior, la existencia de la estructura IF GENERATE, que
permite sintetizar diferentes códigos en función del resultado de la expresión evaluada por
la estructura. Es muy frecuente ver el uso de esta estructura en las librerías de módulos
parametrizados (LPM).
La sección de declaración de variables puede incluir una o más de las siguientes
sentencias o construcciones:
Declaración de Instancias
Declaración de Nodos
Declaración de Registros
Declaración de Maquinas de Estado
Declaración de Alias de Maquinas de Estado
10.1 Declaración de Instancias
Cuando se desea utilizar funciones ya definidas en un nuevo proyecto, éstas deben estar
definidas en el mismo archivo de diseño o deben ser incluidas con la sentencia include.
Luego pueden ser declaradas como variables con una declaración de instancias en la
sección de declaración de variables. Después de ser declaradas, los ports de entrada y
salida de cada una de las funciones pueden ser utilizados como ports en la sección lógica.
Por ejemplo, si se desea incorporar las funciones comparador y sumador a partir de las
funciones ya definidas, compare y lpm_add_sub, la declaración de instancias puede ser
realizada como se muestra a continuación:
VARIABLE
comparador : compare;
sumador : lpm_add_sub WITH (LPM_WIDTH = 8);
La variables comparador y sumador son instancias de las funciones compare y
lpm_add_sub, las cuales tienen las siguientes entradas y salidas:
a[3..0], b[3..0] : INPUT; -- Entradas de comparador
less, equal, greater : OUTPUT; -- Salidas de comparador
a[8..1], b[8..1] : INPUT; -- Entradas de sumador
sum[8..1] : OUTPUT; -- Salidas de sumador
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 3-12
Por lo tanto, es posible utilizar los siguientes ports de comparador y sumador en la
sección lógica, de la siguiente manera:
comparador.a[], comparador.b[], comparador.less, comparador.equal,
comparador.greater
sumador.dataa[], sumador.datab[], sumador.result[]
10.2 Declaración de Nodos
Un nodo representa un cable transmitiendouna señal que viaja entre diferentes
componentes lógicos de un archivo de diseño. La declaración de nodos permite asignarle
un nombre o símbolo a una señal lógica interna. Una de las ventajas de asignar un nombre
a un nodo es la posibilidad de ser identificado en la simulación del proyecto, ya que en
caso contrario será el software de síntesis el que asigne una identificación al nodo.
AHDL soporta dos tipos de nodos denominados: NODE y TRI_STATE_NODE.
El siguiente ejemplo muestra una declaración de nodos:
SUBDESIGN nodos
(
in1, in2, oe1, oe2 : INPUT;
salida, out : OUTPUT;
)
VARIABLE
cable : NODE;
cable_tri_state : TRI_STATE_NODE;
BEGIN
cable = in1;
cable = in2;
out = cable;
cable_tri_state = TRI(in1, oe1);
cable_tri_state = TRI(in2, oe2);
salida = cable_tri_state;
END;
En este ejemplo se observa dos usos típicos de nodos. Para el caso del nodo tipo NODE,
las asignaciones múltiples de señales, a un mismo nodo, se realizan a través de compuertas
AND u OR según sea el valor por defecto de las señales, que intervienen en la asignación,
VCC o GND respectivamente. Si no se especifica lo contrario, las señales poseen el valor
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 3-13
GND por defecto. Por lo tanto las múltiples asignaciones serán realizadas a través de
compuertas OR.
En el ejemplo las señales in1 e in2 ingresaran a una compuerta OR y el resultado de
dicha operación es asignado al nodo cable.
Los nodos tipo TRI_STATE_NODE, brindan la posibilidad de cablear directamente las
señales y que presenten un estado de alta impedancia para el nodo cuando no están activos.
Un nodo TRI_STATE_NODE posee dos señales de entrada y una señal de salida. Las
señales de entradas, son el dato y la señal de output enable. La señal de salida es el dato si
la entrada output enable está activa o un estado de alta impedancia caso contrario.
10.3 Declaración de Registros
La declaración de registros, como su nombre lo indica, permite declarar registros,
incluyendo filpflops D, T, JK, y SR (DFF, DFFE, TFF, TFFE, JKFF, JKFFE, SRFF,
SRFFE) y latches (LATCH).
El siguiente ejemplo muestra la declaración de un flip flop "toogle":
VARIABLE
FFlop: TFF;
Luego de realizar esta declaración se pueden utilizar los ports de entrada y salida de
FFlop, ya que se ha instanciado a FFlop como un flip flop T. El formato utilizado es el
siguiente:
<instance name>.<port name>:
FFlop.t
FFlop.clk
FFlop.clrn
FFlop.prn
FFlop.q
10.4 Declaración de Maquinas de Estado
Es posible crear máquinas de estado declarando el nombre de la máquina, sus estados y
opcionalmente el valor binario de estos, en la sección de declaración de variables.
El siguiente ejemplo muestra la declaración de una máquina de estados:
VARIABLE
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 3-14
ss : MACHINE
OF BITS (q1, q2, q3)
WITH STATES (
s1 = B"000",
s2 = B"010",
s3 = B"111");
El nombre de la máquina de estados es ss y los bits componentes de cada estado son q1,
q2 y q3, los cuales son las salidas de los flip flops que implementan la máquina. Los
estados son s1, s2 y s3.
La declaración de una máquina de estados se compone de:
El nombre simbólico, seguido de (:) y la palabra reservada MACHINE.
En forma opcional, el nombre de los bits de estado, con las palabras reservadas
OF BITS(..).
La lista de estados, compuesta por las palabras reservadas WITH STATES(..)
con la enumeración de los nombres simbólicos de los estados, separados por
comas, con sus asignaciones opcionales.
El primer estado listado en la cláusula WITH STATES, (s1, en este ejemplo) será el
estado de reset de la máquina de estados.
10.5 Declaración de Alias de Maquinas de Estado
Es posible renombrar una máquina de estados con un nombre temporario utilizando la
declaración de alias de máquinas de estados en la sección variable.
Un alias puede ser utilizado para renombrar una máquina de estados que ha sido
importada al proyecto con la sentencia include.
El siguiente ejemplo muestra el prototipo de función de una máquina de estados y cómo
se declara un alias de dicha máquina.
FUNCTION ss_def (clock, reset, count)
RETURNS (MACHINE ss_out);
M
VARIABLE
ss : MACHINE;
BEGIN
ss = ss_def (sys_clk, reset, !hold);
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 3-15
IF ss == s0 THEN
M
ELSIF ss == s1 THEN
M
END;
11. Sección Lógica
La sección lógica especifica las operaciones lógicas del diseño y es la sección principal
de archivo TDF. Esta sección no es opcional y siempre existe en un archivo TDF. Una o
más de las siguientes sentencias o construcciones pueden existir en esta sección:
Ecuaciones Booleanas.
Ecuaciones de Control Booleanas.
Sentencia CASE.
Sentencia DEFAULTS.
Sentencia IF-THEN.
Sentencia IF-GENERATE.
Sentencia FOR-GENERATE.
Sentencia TRUTH TABLE.
La sección lógica también puede incluir sentencias ASSERT.
Las palabras reservadas BEGIN y END delimitan la sección lógica y un punto y coma,
luego de la palabra END, marca su fin. La sentencia DEFAULTS debe ser la primera de la
sección.
En la sección lógica es necesario el uso de operadores lógicos, comparadores y
operadores aritméticos. La siguiente tabla muestra los posibles operadores y sus
respectivas prioridades. La prioridad 1 es la más alta y operadores de igual prioridad son
evaluados de izquierda a derecha:
Operadores - Comparadores Descripción Ejemplo Prioridad
+ (unario) Positivo +1 1
- (unario) Negativo -1 1
! NOT !a 1
^ Exponente a ^ 2 1
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 3-16
MOD Módulo 4 MOD 2 2
DIV división 4 DIV 2 2
* multiplicación a * 2 2
LOG2 Logaritmo base2 LOG2(4-3) 2
+ adición 1+1 3
- sustracción 1-1 3
== (numérica) Igualdad numérica 5 == 5 4
== (alfabética) Igualdad alfabética "a" == "b" 4
!= Distinto que 5 != 4 4
> Mayor que 5 > 4 4
>= Mayor o igual que 5 >= 5 4
< Menor que a < b+2 4
<= Menor o igual que a <= b+2 4
& AND a & b 5
AND a AND b
!& NAND (AND invertida) 1 !& 0 5
NAND 1 NAND 0
$ XOR (OR exclusiva) 1 $ 1 6
XOR 1 XOR 1
!$ XNOR (NOR exclusiva) 1 !$ 1 6
XNOR 1 XNOR 1
# OR a # b 7
OR a OR b
!# NOR (OR invertida) a !# b 7
NOR a NOR b
? Ternario (5<4) ? 3:4 8
11.1 Ecuaciones Booleanas.
Las ecuaciones booleanas son usadas en la sección lógica para representar la conexión
de nodos, la asignación de señales internas, hacia o desde los contactos de Entrada/Salida y
realizar operaciones booleanas entre dichas señales.
El siguiente ejemplo muestra una ecuación booleana compleja asignada al grupo o
conjunto de bits a[]:
a[] = ((c[] & -B"001101") + e[6..1]) # (p, q, r, s, t, v);
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 3-17
El lado izquierdo de la ecuación puede ser un nombre simbólico (nodo o variable), un
port, o un nombre de grupo o conjunto de bits. El lado derecho de la ecuación consiste de
una expresión booleana, la cual es evaluada de acuerdo a la prioridad de cada operador que
la compone.
El símbolo igual (=) es usado en ecuaciones booleanas para indicar que el resultado de
la expresión booleana del lado derecho es asignado al nodo, variable o grupo de bits del
lado izquierdo.
En el ejemplo anterior la expresión booleana de la derecha es evaluada de acuerdo a las
reglas de prioridad:
El número binario B"001101" es negado aritméticamente y transformado al
número negativo B"110011" por el operador unario (-) de prioridad 1.
Se aplica la operación lógica AND entre el número B"110011" y el grupo c[].
Esta expresión tiene prioridad 2 debido a que está encerrada entre paréntesis.
El resultado de la expresión del paso 2 es sumada aritméticamente al grupo
e[6..1].
Se aplica la operación lógica OR (#) entre el resultado de la expresión en el
paso 3 y el grupo (p, q, r, s, t, v). Esta expresión tiene la última prioridad.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 3-18
Las siguientes reglas se aplican a las ecuaciones booleanas:
• Múltiples asignaciones a variables son realizadas a través de operadores
lógicos OR, excepto cuando el valor por defecto de las variables es seteado a
VCC.
• Si un simple nodo, GND o VCC sobre el lado derecho de una ecuación es
asignado a un grupo, el nodo o constante es duplicado para que el tamaño de
este se corresponda con el tamaño del grupo. Por ejemplo: (a, b) = e; que es
equivalente a a = e; y b = e;
• Si en ambos lados de la ecuación se tienen grupos del mismo tamaño, cada
miembro sobre la derecha es asignado al miembro de la izquierda en la
posición correspondiente. Por ejemplo: (a, b) = (c, d); que es lo mismo que a =
c; y b = d;
• Si los lados derecho e izquierdo de una ecuación poseen grupos de diferentes
tamaños, el número de bits del grupo de la izquierda debe ser divisible por el
número de bits del grupo del lado derecho. Por ejemplo: a[4..1] = b[2..1] en
esta ecuación los bits son mapeados de la siguiente manera: a4 = b2, a3 = b1,
a2 = b2, a1 = b1.
11.2 Ecuaciones de Control Booleanas.
Las ecuaciones de control son ecuaciones booleanas usadas en la sección lógica para
setear las señales de clock, reset y clock enable de las máquinas de estados.
El siguiente ejemplo muestra ecuaciones de control booleanas:
Maquina.clk = clk1;
Maquina.reset = a & b;
Maquina.ena = clk1ena;
Las ecuaciones de control booleanas poseen las siguientes características:
Pueden definirse las entradas clock, reset, y clock enable de una máquina de
estados, con el formato <nombre de la máquina de estados>.<nombre del
port>. En el ejemplo anterior dichas entradas son definidas para la máquina de
estados Maquina.
La señal de clock <nombre de la máquina de estados>.clk debe ser asignada
indefectiblemente a un valor.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 3-19
La señal de reset <nombre de la máquina de estados>.reset debe ser asignada
a un valor si el estado inicial en la declaración de la máquina de estados posee
un valor distinto de 0. De esta forma una señal de reset lleva a la máquina al
primer estado en la lista de estados declarados. En el caso que el primer estado
se corresponda con el valor cero, la señal de reset no es necesaria, ya que la
máquina se iniciará siempre en ese estado.
Asignar la señal clock enable <nombre de la máquina de estados>.ena a un
valor es opcional. Cuando la señal clock enable está en low, las transiciones de
la señal de clock son ignoradas.
11.3 Sentencia CASE.
La sentencia case lista una serie de alternativas que pueden ser activadas dependiendo
del valor de una variable, grupo o expresión y de esta forma describir distintos
comportamientos del sistema.
El siguiente ejemplo muestra una sentencia case:
CASE f[].q IS
WHEN H"00" =>
addr[] = 0;
s = a & b;
WHEN H"01" =>
count[].d = count[].q + 1;
WHEN H"02", H"03", H"04" =>
f[3..0].d = addr[4..1];
WHEN OTHERS =>
f[].d = f[].q;
END CASE;
La sentencia case posee las siguientes características:
Entre las palabras reservadas CASE e IS se coloca una expresión booleana,
grupo o máquina de estados (en el ejemplo f[].q) cuyo valor activará la
alternativa correspondiente.
La sentencia es terminada por las palabras END CASE y un punto y coma.
Una o más alternativas son listadas en la cláusula WHEN, en el cuerpo de la
sentencia case. Cada cláusula WHEN comienza con la palabra reservada
WHEN.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 3-20
En cada alternativa, luego de la palabra WHEN, uno o más valores constantes,
separados por comas, son seguidos por el símbolo =>. En este ejemplo, los
valores constantes H"02", H"03", H"04" son listados en una cláusula WHEN,
mientras que los valores H"00" y H"01" son listados en cláusulas separadas.
Si la expresión booleana de la sentencia case evalúa una alternativa que no se
corresponde con los distintos valores de las cláusulas WHEN, se activará el
comportamiento descripto en la cláusula WHEN OTHERS.
11.4 Sentencia DEFAULTS.
La sentencia defaults, permite especificar valores por defecto para las variables
utilizadas en tablas de verdad, sentencias if-then y sentencias case. Ya que las señales
activas en high son automáticamente seteadas por defecto a GND, la sentencia defaults
sólo es requerida para señales activas en low.
No debe confundirse los valores por defecto de variables con los valores por defecto de
los ports, asignados en la sección de subdiseño.
El siguiente ejemplo muestra una sentencia defaults:
BEGIN
DEFAULTS
a = VCC;
END DEFAULTS;
IF y & z THEN
a = GND; % a es activa en low %
END IF;
END;
La sentencia defaults posee las siguientes características:
Es encerrada por las palabras reservadas DEFAULTS y END DEFAULTS
finalizando con un punto y coma.
El cuerpo de la sentencia consiste de una o más ecuaciones booleanas que
asignan valores constantes a las variables. En el ejemplo, la sentencia defaults
asigna el valor VCC a la variable a.
La sentencia es activada si la variable que contiene no es asignada a algún valor.
Por lo tanto, luego del reset del dispositivo, la variable a tendrá el valor VCC,
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 3-21
generalmente 5volts, si no se cumple que la condición y & z sea verdadera. En
caso afirmativo a valdrá GND.
Sólo una sentencia defaults es permitida en la sección lógica y, en caso de
utilizarse, esta debe ser la primera sentencia luego de la palabra reservada
BEGIN.
No puede utilizarse para asignar valores por defecto de X (don't care) a una
variable.
11.5 Sentencia IF-THEN.
La sentencia if-then permite realizar una determinada descripción de hardware en
función del resultado de una expresión booleana.
El siguiente ejemplo muestra una sentencia if-then:
IF a[] == b[] THEN
c[8..1] = H "77";
addr[3..1] = f[3..1].q;
f[].d = addr[] + 1;
ELSIF g3 $ g4 THEN
f[].d = addr[];
ELSE
d = VCC;
END IF;
Observando el ejemplo, si el grupo a[] es igual al grupo b[], la sentencia if-then
permitirá la evaluación de las sentencias que suceden a la palabra reservada THEN.
También observamos las palabras reservadas ELSIF, ELSE y END IF. El uso de la
estructura ELSIF, permite evaluar otra expresión booleana, cuando la expresión anterior
dio como resultado un valor falso y evaluar las sentencias que suceden a la palabra
reservada THEN en función del resultado de esta nueva expresión. El uso de la palabra
reservada ELSE permite evaluar las sentencias que la suceden, si la expresión evaluada en
la estructura anterior fue falsa. Toda sentencia if-then finaliza con las palabras reservadas
END IF y un punto y coma.
Una estructura if-then que utilice las palabras reservadas ELSIF y ELSE puede
representarse utilizando sólo las palabras reservadas IF, THEN y END IF. El siguiente
ejemplo muestra este hecho:
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 3-22
IF a THEN IF a THEN
c = d; c = d;
END IF;
ELSIF b THEN IF !a & b THEN
c = e; c = e;
END IF;
ELSE IF !a & !b THEN
c = f;
END IF; END IF;
11.6 Sentencia IF-GENERATE.
Es una sentencia que permite controlar la generación condicional de hardware en
función del resultado de evaluar expresiones aritméticas.
Puede ser usada tanto en la sección lógica como en la sección variable. La estructura de
esta sentencia hace uso de las siguientes palabras reservadas: IF-GENERATE, ELSE-
GENERATE y END GENERATE.
El siguiente es un ejemplo de la sentencia if-generate:
IF DEVICE_FAMILY == "FLEX8K" GENERATE
c[] = 8kadder(a[], b[], cin);
ELSE GENERATE
c[] = otheradder(a[], b[], cin);
END GENERATE;
Se observa en el ejemplo que según el valor del parámetro interno DEVICE_FAMILY,
se generará un hardware distinto.
La sentencia if-generate difiere con respecto a la sentencia if-then, en que esta última, es
totalmente implementada en el hardware, mientras que la sentencia if-generate permitirá
implementar distintas sentencias en función del resultado de una expresión aritmética. Es
usual ver un uso intensivo de esta sentencia en librerías de módulos parametrizados
(LPM).
11.7 Sentencia FOR-GENERATE.
La sentencia for-generate permite generar hardware en forma repetitiva.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 3-23
La estructura de esta sentencia hace uso de las siguientes palabras reservadas: FOR-
GENERATE y END GENERATE.
El siguiente ejemplo muestra el uso de la sentencia for-generate:
CONSTANT NUM_OF_ADDERS = 8;
SUBDESIGN 4gentst
(
a[NUM_OF_ADDERS..1], b[NUM_OF_ADDERS..1], cin : INPUT;
c[NUM_OF_ADDERS..1], cout : OUTPUT;
)
VARIABLE
carry_out[(NUM_OF_ADDERS+1)..1] : NODE;
BEGIN
carry_out[1] = cin;
FOR i IN 1 TO NUM_OF_ADDERS GENERATE
c[i] = a[i] $ b[i] $ carry_out[i]; % Full Adder %
carry_out[i+1] = a[i] & b[i] # carry_out[i] & (a[i] $ b[i]);
END GENERATE;
cout = carry_out[NUM_OF_ADDERS+1];
END;
En el ejemplo, la sentencia for-generate define intrínsecamente una variable, llamada i,
que tiene vigencia sólo en el ámbito de la sentencia. Esta variable será el contador de las
repeticiones y podrá ser utilizada dentro del cuerpo de la sentencia.
También, como en el caso de la sentencia if-generate, es usual ver un uso intensivo de
esta sentencia en librerías de módulos parametrizados (LPM).
11.8 Sentencia TRUTH TABLE.
La sentencia truth table es utilizada para especificar lógica combinacional o el
comportamiento de máquinas de estados. Una tabla de verdad, en AHDL, posee una
combinación de valores de entrada, que producirán valores de salida específicos. Estos
valores de salida pueden ser realimentados para especificar transiciones de estados y
salidas de una máquina de estados.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 3-24
El siguiente ejemplo muestra una sentencia truth table:
TABLE
a0, f[4..1].q => f[4..1].d, control;
0, B"0000" => B"0001", 1;
0, B"0100" => B"0010", 0;
1, B"0XXX" => B"0100", 0;
X, B"1111" => B"0101", 1;
END TABLE;
Las señales de entrada de la tabla son a0 y f[4..1].q y las salidas son f[4..1].d y control.
Estas señales deben colocarse en la primera línea formando el encabezado de la tabla.
Luego en las líneas siguientes se especifican los distintos valores posibles para las señales,
tanto de entradas como de salidas.
Los valores de entrada y salida pueden ser números, constantes predefinidas como VCC
o GND, constantes definidas por el usuario y grupos de números o constantes. Los valores
de entrada pueden ser asignados a don't care utilizando la letra X para representarlos.
Conclusiones En este capítulo se describieron los principales conceptos del lenguaje AHDL para la
especificación de hardware. Se detalló la estructura de un diseño y la sintaxis de las
sentencias del lenguaje como así también la principal utilización de dichas sentencias en
un proyecto.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 4-1
Capítulo 4 Sistema de desarrollo de ALTERA: MAX + PLUS II
y placa de desarrollo universal UP1
Introducción
En este capítulo se describen las partes integrantes del sistema de desarrollo de lógica
programable de la firma ALTERA, compuesto por el software MAX + PLUS II y la placa
de desarrollo UP1.
1. ¿ Qué es ALTERA MAX+PLUS II ?
ALTERA MAX+PLUS II es un software desarrollado por la firma ALTERA para
sintetizar, simular y programar sus dispositivos utilizando diversos lenguajes de
descripción de hardware, como son: VHDL, VERILOG HDL y AHDL. También permite
especificar un diseño en forma gráfica a través de diagramas esquemáticos,
interconectando distintos elementos lógicos como compuertas, flip flops, contadores, etc.
Si tenemos un conocimiento básico del lenguaje VHDL, podríamos ejecutar el software
MAX+PLUS II e intentar describir un hardware sencillo. Sin embargo, nos encontraríamos
con ciertos problemas a la hora de sintetizar el proyecto, ya que es necesario especificar
diversos ítems propios de esta herramienta y de los dispositivos de lógica programable a
utilizar.
Por lo tanto, el objetivo planteado, es poder mostrar cómo se realiza un diseño completo
sobre esta herramienta, utilizando un dispositivo de lógica programable disponible en
nuestro laboratorio el cual pertenece a la familia MAX7000 y es especificamente el
EPM7128SLC84-7.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 4-2
1.1 Ejemplo Demostrativo
La siguiente, es la descripción de un ejemplo, incluido en el software ALTERA
MAX+PLUS II, utilizando uno de los lenguajes recién mencionados; el VHDL.
Dicho ejemplo consiste en la implementación de un sumador (adder) binario de 8 bits,
utilizando el dispositivo de la familia MAX7000, EPM7128SLC84-7.
Después de la instalación del software, podemos encontrar el ejemplo en el directorio:
Drive:\altera\max2work\vhdl\
El ejemplo se encuentra en el archivo denominado adder.vhd y es un archivo de texto
que contiene el código VHDL. El mismo debe abrirse con la siguiente secuencia:
File → Proyect → Name… adder.vhd
Para configurar el software de manera tal que el proyecto a realizar se basará en este
archivo, debe ejecutarse la siguiente secuencia:
File → Proyect → Set Proyect to Current File
De no hacer esto, cuando se sintetice o simule este nuevo archivo, la síntesis o
simulación se realizará sobre el archivo base del proyecto anterior.
Una vez configurado como el archivo del proyecto, podemos ir al icono de apertura de
la ventana de jerarquías.
De esta manera, se puede observar cómo está compuesto el diseño a través de un
esquema tipo árbol, donde cada hoja de dicho árbol hace referencia a un archivo.
Si nunca había sido sintetizado, se observarán en la ventana de jerarquías sólo dos
archivos, que son: el código VHDL del sumador (archivo adder.vhd) y un archivo de
texto con extensión .acf, el cual describe parámetros característicos de las distintas familias
de dispositivos ALTERA.
1.2 Síntesis
El sintetizador del software MAX+PLUS II es un procesador de diseños, altamente
automatizado que transforma los archivos de diseño en un archivo de salida para
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 4-3
programar, simular y analizar temporalmente los dispositivos de lógica programable. El
sintetizador es el corazón del sistema de desarrollo MAX+PLUS II.
Cuando el sintetizador comienza a trabajar sobre un archivo de diseño, ejecuta una serie
de procesos hasta crear uno o más archivos de programación. Mientras que el sintetizador
permite sintetizar un diseño con una mínima intervención del usuario, también es posible
modificar ciertos parámetros para obtener mejores resultados, ya sea en cuanto velocidad o
utilización de recursos físicos.
Si un proyecto es muy extenso e insume una gran cantidad de recursos físicos, es
probable que deban necesitarse dos o más dispositivos para implementarlo. Este hecho es
automáticamente detectado por el sintetizador y es éste el que particiona el diseño en
múltiples dispositivos de la misma familia.
Para sintetizar un archivo de diseño debemos abrir la ventana MAX+PLUS II →
Compiler y presionar el botón de start. Posteriormente, la ventana de jerarquías indicará
la realización de los diferentes archivos como resultado de la síntesis.
1.3 Tipos de Archivos
Seguidamente se clasifican los tipos de archivos que pueden encontrarse como
componentes de un proyecto. Ellos pueden ser de cuatro tipos básicos:
A su vez, cada tipo puede tener distintas extensiones como pueden ser:
Editor gráfico: .gdf, .sch
Editor de símbolos: .sym
Editor de textos: .acf, .aco, .adf, .cmd, .edc, .edf, .fit, .hst, .lmf, .log, .mif, .mio,
.mtf, .plf, .rpt, .sdo, .smf, .tao, .tbl, .tdf, .tdo, .tdx, .ttf, .vec, .vhd, .vho, .vmo,
.vo, .xnf, o cualquier otro archivo de texto ASCII.
Editor de formas de ondas: .scf, .wdf
Para obtener información sobre los distintos tipos de archivos ejecutar:
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 4-4
Help → Search for Help on… y tipear la extensión del mismo.
1.4 Interpretación del Código VHDL
El código se encuentra en el archivo adder.vhd, que es de tipo texto y su extensión
indica que es un código fuente escrito en lenguaje VHDL. Este es el archivo principal del
diseño y a partir del cual, una vez sintetizado, se generan los demás archivos que integran
el proyecto.
1.4.1. Código VHDL
ARCHIVO adder.vhd
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
ENTITY adder IS
PORT ( op1, op2 : IN UNSIGNED(7 downto 0);
result : OUT INTEGER);
END adder;
ARCHITECTURE maxpld OF adder IS
BEGIN
result <= CONV_INTEGER(op1 + op2);
END maxpld;
En este archivo se declara la librería ieee y se hace uso de los packages
ieee.std_logic_1164 y ieee.std_logic_arith, que definen la lógica standard y la lógica
aritmética respectivamente (Capítulo 2).
La palabra reservada UNSIGNED es un tipo de datos que está definido dentro del
package std_logic_arith contenido en la librería ieee. El tipo UNSIGNED representa
valores numéricos sin signo los cuales sólo pueden ser positivos o cero.
El software MAX+PLUS II interpreta cada tipo UNSIGNED como un número binario,
con el dígito de la izquierda como el bit más significativo.
La palabra reservada INTEGER representa al tipo de dato predefinido ya conocido.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 4-5
Por último la palabra reservada CONV_INTEGER, convierte de tipo INTEGER,
UNSIGNED, SIGNED, ó STD_ULOGIC a un valor INTEGER. El tamaño de los
operandos de la función CONV_INTEGER está limitado entre -2147483647 y
2147483647.
Por lo tanto, este código implementa un sumador de 8-bits con entradas declaradas tipo
UNSIGNED y salida declarada tipo INTEGER.
En la arquitectura, op1 y op2, son ambas de tipo UNSIGNED. Las mismas son sumadas
y convertidas a tipo INTEGER con la función de conversión CONV_INTEGER. Luego el
resultado de la conversión se asigna a result declarada tipo INTEGER.
Nota: Si bien el tipo INTEGER posee 32 bits de representación, sólo se utilizan 9 bits
ya que el resultado de sumar señales de 8 bits a lo sumo dará como resultado una palabra
de 9 bits. Entonces al nivel del dispositivo tendremos sólo 9 contactos de salida usados.
El software MAX+PLUS II versión estudiantil 7.21 puede ser obtenido gratuitamente
de la página web de ALTERA: http://www.altera.com/
2. Placa de Desarrollo universal UP1
La placa de desarrollo universal UP1 está compuesta por:
Placa educacional UP1.
Cable de programación ByteBlaster.
2.1 ¿Qué es la placa educacional UP1?
La placa educacional UP1 es una placa experimental basada en dos dispositivos
ALTERA de las familias MAX7000 y FLEX10K (Capítulo 1). Ambos son
programables en sistema (In-System Programmability, ISP), lo que permite su
programación en forma serial y sin necesidad de desmontarlos del circuito impreso.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 4-6
2.2 ¿Cómo es la placa educacional UP1?
Una vista superior de la placa UP1, muestra la existencia y distribución de los
dispositivos de lógica programable.
2.3 ¿Cómo está compuesta la placa UP1?
La placa posee una serie de elementos, entre los cuales figuran un regulador de tensión,
un oscilador a cristal integrado, conectores, switches, leds y displays.
Como se ve en la figura anterior, la placa UP1 está compuesta por dos dispositivos de
lógica programable: el EPM7128S de la familia MAX7000, y el EPF10K20 de la familia
FLEX10K.
Los dos dispositivos comparten la señal proveniente de un oscilador a cristal integrado
de 25.157 Mhz cableada directamente a los contactos de entrada del reloj global de cada
dispositivo. Esto es el contacto 83 para el dispositivo EPM7128S y el contacto 91 para el
dispositivo EPF10K20.
El dispositivo de la familia MAX7000, el EPM7128S, está cableado directamente a los
dos displays de 7 segmentos MAX_DIGIT y por lo tanto el uso de los contactos
respectivos los enciende y apaga. Todos los demás contactos de entrada/salida, excepto el
reloj global, permanecen sin conectarse.
En cuanto el dispositivo de la familia FLEX10K, el EPF10K20, está cableado
directamente a los dos displays de 7 segmentos (FLEX_DIGIT), a los switches
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 4-7
(FLEX_SWITCH), al conector para mouse (MOUSE), al conector para monitor (VGA), a
los push-buttons (FLEX_PB1 Y FLEX_PB2) y a un zócalo para la colocación de una
memoria EEPROM EPC1 de configuración. Todos los demás contactos de entrada/salida,
excepto el reloj global, permanecen sin conectarse y son accesibles a través de los
terminales de expansión FLEX_EXPAN_ A-B-C.
Nota: Cabe notar que el dispositivo de la familia FLEX10K, el EPF10K20, está cableado a
un conector de video VGA, y es por eso que el oscilador a cristal es de 25.175 Mhz, que es
la frecuencia especificada por el estándar VGA. Esta es la única razón por la que no ha
sido conectado a un reloj de mayor frecuencia, ya que ambos dispositivos podrían
funcionar al triple de frecuencia.
Los dispositivos están conectados en cadena JTAG (IEEE 1149.1 Join Test Action
Group ). JTAG es una interfase estándar que permite que los dispositivos sean ISP (In-
System Programmability) de forma tal de poder programar y/o configurar, a través de la
interfase ByteBlaster™ a uno o ambos dispositivos en forma secuencial.
La placa UP1 posee una serie de switches para configurar dicha cadena, pudiendo
seleccionar la programación del dispositivo EPM7128S, o la configuración del dispositivo
EPF10K20 o la programación y configuración de los dos dispositivos.
Para mayor información sobre la placa educacional UP1 debe referirse a la guía del
usuario de ALTERA:
University Program Design Laboratory Package.
3. Cable de Programación ByteBlaster. 3.1 ¿Qué es y para qué sirve la ByteBlaster?
Los diseños pueden ser fácil y rápidamente transferidos a la placa UP1 usando el cable
de programación ByteBlaster, el cual es una interfase física entre la placa UP1 y el
puerto paralelo estándar de la computadora personal (PC).
El cable de programación ByteBlaster sólo sirve para programar y/o configurar los
dispositivos In-System Programmability (ISP) a través de la interfase IEEE 1149.1 Join
Test Action Group (JTAG).
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 4-8
Eléctricamente no es más que un circuito 72LS244 (buffer octal), usado para proteger el
puerto paralelo de la computadora personal.
El diagrama esquemático de la ByteBlaster™ es el siguiente:
Nota: Mediente la utilización del cable de programación ByteBlasterTM pueden
configurarse:
los dispositivos de la familia FLEX10K, ya que las interconexiones internas se
realizan a través de switches RAM estáticos (SRAM). Por este motivo, deben ser
configurados cada vez que se energizan. Pueden ser configurados a través de una
memoria previamente programada, en donde el dispositivo configurable,
automáticamente, lee la información necesaria y se autoconfigura.
los dispositivos de la familia MAX7000, ya que las interconexiones internas se
realizan a través de switches EEPROM y no necesitan ser reprogramados cada
vez que se energizan.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 5-1
Capítulo 5 Implementación de un Controlador de Memoria
Dinámica: Una Aplicación de Lógica Programable.
El objetivo del proyecto es demostrar el funcionamiento y capacidades del sistema de
desarrollo de lógica programable que el laboratorio de Sistemas Digitales a adquirido en su
participación en el programa universitario de ALTERA.
Para ilustrar los conceptos descriptos anteriomente, en este capítulo se describe la
implementación de un controlador de memorias RAM dinámicas, DRAMs, configuradas
en un módulo SIMM de 72 contactos. La función del controlador de memorias DRAM será
hacer ver al módulo como una memoria RAM estática.
1. Memorias Dinámicas Utilizadas: Módulo SIMM
de 72 contactos.
El sistema desarrollado consiste de un controlador de memorias dinámicas ensambladas
en módulos SIMM de 72 contactos, los cuales son usados como memorias RAM en
computadoras personales.
En particular se diseñó para funcionar con el módulo SIMM TM124BBK32 de
1M*32bits de Texas Instruments, respetando la configuración de contactos y handshake
especificados en el estándar JEDEC de 72 contactos.
En la figura 5.1 puede se ve detalladamente el símbolo lógico que representa a cada
chip componente del módulo SIMM:
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 5-2
Figura 5.1
El módulo SIMM está compuesto por 8 chips DRAMS TMS44400 DE 1M*4bits y la
conexión eléctrica entre ellos puede verse en la figura 5.2.
Figura 5.2
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 5-3
El layout del módulo SIMM es el siguiente:
Figura 5.3
1.1 Características Técnicas del Módulo SIMM Utilizado.
E módulo SIMM está compuesto por 8 chips DRAMs TMS44400 DE 1M*4 bits.
Observando las figuras anteriores podemos inferir que los 8 chips funcionarán en forma
paralela, siendo activados con las señales /cas y /ras respectivas. Por lo tanto el modo de
operación del módulo será el mismo que el de cada chip.
1.2 Características Técnicas de los Chips TMS44400.
En forma resumida, las características principales de los chips utilizados son:
1 meganibble de capacidad, estructurados en forma matricial 1024 filas * 1024
columnas.
Ciclo de refresco de 16 mseg.
Refresco Cas before Ras.
Auto refresco.
Consumo promedio de corriente de 90ma.
Tiempo de acceso 70 ns.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 5-4
2. Controlador de Memorias Dinámicas.
2.1 Símbolo Lógico del Controlador de Memorias
Dinámicas.
El controlador de memorias dinámicas será llamado dramcontrol y la configuración de
contactos de entrada y salida es la siguiente:
Las señales asociadas a los distintos contactos de entrada y salida pueden dividirse en
tres grupos según sea su interacción con y desde el mundo exterior.
Estas señales son:
Las señales independientes, que no interactúan en forma directa con el sistema
microprocesador ni con el módulo SIMM.
Las señales microprocesador - dramcontrol, que interactúan en forma directa con el
sistema microprocesador.
Las señales dramcontrol – módulo SIMM, que interactúan en forma directa con el
módulo SIMM.
2.1.1. Señales independientes
Existen sólo dos señales independientes: 1) la señal de entrada clk, que será utilizada
como la señal de sincronismo de toda la lógica secuencial utilizada en la implementación
del controlador de memorias dinámicas. 2) la señal de estado_error, que indica que se ha
producido un error por parte del microprocesador por haber estado en estado bajo las
señales /write y /read simultáneamente.
2.1.2. Señales microprocesador - dramcontrol:
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 5-5
La señal de entrada /read es usada como la señal de lectura de la memoria
dinámica y es activa en cero.
La señal de entrada /write es usada como la señal de escritura en la memoria
dinámica y es activa en cero.
La señal de ready, activa en uno, indica si el sistema memoria – dramcontrol
está listo para ejecutar un ciclo de lectura o escritura.
El bus address_in son las 16 líneas de direcciones provenientes del
microprocesador.
El bus bidir_up es el bus de datos bidireccional de 8 bits, que conecta el
microprocesador con el controlador de memorias dinámicas.
2.1.2.1. Señales dramcontrol – módulo SIMM:
La señal de salida /write_dram es usada como señal de escritura y lectura en la
memoria dinámica y será de escritura cuando esté en estado low y de lectura
cuando esté en estado high.
La señal de salida /ras es aplicada a la memoria dinámica. Esta señal es activa
en cero y es llevada a su estado low indicando que las direcciones de filas ya
están presentes.
Igual que la señal /ras, la señal de salida /cas es aplicada a la memoria dinámica.
Esta señal es activa en cero y es llevada a su estado low indicando que las
direcciones de columnas ya están presentes.
address_out son las 10 líneas de direcciones multiplexadas de filas y columnas
hacia el módulo SIMM.
bidir_simm es el bus de datos bidireccional de 8 bits, que conecta el
controlador de memorias dinámicas con el módulo SIMM.
3. Funcionamiento del Controlador de Memorias
Dinámicas.
El módulo SIMM de 72 contactos de 1M * 32 bits, será visto como una memoria RAM
estática de 4M * 8 bits, por lo que se leerá y se escribirá a la memoria 1 byte de datos, y
para permitir su direccionamiento a la mayoría de los microprocesadores de 8 bits, se
paginará en 64 páginas de 64 Kbytes cada una.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 5-6
La funcionabilidad del controlador de memorias dinámicas puede dividirse en dos
partes. Una parte que interactúa con el microprocesador, llamada microprocesador -
controlador y otra parte que interactúa con la memoria dinámica, llamada controlador –
memoria dinámica.
3.1 Funcionamiento microprocesador - controlador
¿Cómo es un ciclo de lectura del microprocesador - controlador?
Como indica la figura 5.4, el ciclo de lectura comienza cuando el microprocesador baja
la señal /read, y la señal /write permanece en nivel alto. En el flanco descendente de la
señal /read se almacenan en registros las direcciones address_in provenientes del
microprocesador previamente establecidas. Luego que el controlador dramcontrol accede
a la memoria, aparece el dato leído en las líneas bidir_up. El dato leído estará presente
mientras la señal /read esté en nivel bajo y será leído por el microprocesador en el flanco
ascendente de la señal /read.
Aclaración: los valores, tanto de la dirección de escritura como el del dato leído, fueron
elegidos en forma arbitraria.
Figura 5.4
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 5-7
¿Cómo es un ciclo de escritura del microprocesador - controlador?
Como indica la figura 5.5, el ciclo de escritura comienza cuando el microprocesador
baja la señal /write, y la señal /read permanece en nivel alto. En el flanco descendente de
la señal /write se almacenan en registros las direcciones address_in provenientes del
microprocesador previamente establecidas. Luego el microprocesador debe colocar el dato
a escribir en las líneas bidir_up. El dato será almacenado por el controlador dramcontrol,
con el flanco ascendente de la señal /write. Luego, controlador accederá a la memoria
dinámica para escribir el dato deseado en el lugar de memoria deseado.
Figura 5.5
¿Cómo funciona el paginado?
El paginado se lleva a cabo con un ciclo de escritura microprocesador – controlador
como el descripto anteriormente, pero la escritura será en la dirección de paginado
previamente establecida. También cabe notar que el registro de paginado es de 6 bits y por
lo tanto el valor que tomará dicho registro, luego del ciclo de escritura, será el de los 6 bits
menos significativos del bus de datos proveniente del microprocesador.
La dirección de paginado será la indicada por la constante dir_paginado definida en el
código AHDL, por lo tanto cuando se escriba en esa dirección no se accederá a la memoria
sino que se modificará el registro de paginado.
Se perderán 256Bytes de memoria por el uso de este paginado, ya que se pierden los
4Bytes de la dirección de paginado, dir_paginado, de cada página.
La lectura de un dato en la dirección de paginado no está implementada, es decir, que el
controlador no realiza ninguna función, por lo tanto no se puede saber cuál es el valor
actual del registro de paginado. Sólo se puede modificar.
En la figura 5.6 se muestra el ciclo de cambio de página recién descripto, y los valores,
tanto de la dirección de paginado como el del valor de la página, fueron elegidos en forma
arbitraria.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 5-8
Figura 5.6
3.2 Funcionamiento controlador – memoria dinámica.
¿Cómo se direcciona el módulo SIMM?
El direccionamiento del módulo SIMM se hará a través de las 16 direcciones
provenientes del microprocesador adress_in[15..0], más las 6 direcciones del registro de
paginado. De esta forma las direcciones de filas estarán formadas por los 6 bits del registro
de paginado más los 4 bits más significativos de las direcciones provenientes del
microprocesador adress_in[15..12], mientras que las direcciones de columnas serán los 10
bits restantes, es decir adress_in[11..2]. Los bits 1 y 0 serán utilizados para decodificar el
byte correspondiente de la palabra de 32 bits que maneja el módulo SIMM.
Gráficamente sería de la siguiente forma:
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 5-9
¿Cómo es un ciclo de lectura del controlador – memoria dinámica?
El ciclo de lectura del controlador - memoria dinámica se debe realizar dentro del
ciclo de lectura microprocesador – controlador, ya que el dato leído se debe presentar al
microprocesador en el flanco ascendente de la señal /read, como se vio anteriormente.
Entonces una vez que la señal /read pasa a estado bajo, comienzan los ciclos de lectura
microprocesador – controlador y controlador – memoria dinámica.
El ciclo de lectura controlador – memoria dinámica tiene que realizarse antes que
finalice el ciclo microprocesador – controlador. Para asegurar que esto ocurra se bajará
la señal ready hasta que el acceso se haya completado.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 5-10
El ciclo de lectura controlador – memoria dinámica realiza el handshake que indica la
hoja de datos, de la memoria dinámica que se corresponde con el indicado en el estándar
JEDEC de 72 contactos.
En la figura 5.7 se ve que luego de bajar la señal /read, el controlador establece las
direcciones de filas con el valor “00F” y se baja la señal /ras, con lo que la memoria
latchea las direcciones de filas. Luego el controlador coloca las direcciones de columnas
“3C3” y se baja la señal /cas. En un tiempo no mayor a los 20ns el dato leído aparece en el
bus de datos bidir_simm, siendo este latcheado y presentado al microprocesador hasta que
el ciclo microprocesador – controlador termine.
Figura 5.7
¿Cómo es un ciclo de escritura del controlador – memoria dinámica?
El ciclo de escritura del controlador - memoria dinámica se puede realizar solo
después del ciclo de lectura microprocesador – controlador, ya que en el momento de
acceder a la memoria dinámica se deben conocer tanto la dirección como el dato a escribir.
Entonces, una vez que el ciclo de escritura microprocesador – controlador finaliza el
controlador ejecuta el ciclo de escritura controlador – memoria dinámica.
El ciclo de escritura controlador – memoria dinámica realiza el handshake que indica
la hoja de datos, de la memoria dinámica.
En la figura 5.8 se ve el final de un ciclo de escritura microprocesador – controlador
y el comienzo de un ciclo de escritura controlador – memoria dinámica. Dicha transición
la determina el flanco ascendente de la señal /write.
Luego el controlador establecen las direcciones de filas con el valor “00F” y se baja la
señal /ras, con lo que la memoria latchea las direcciones de filas. Posteriormente el
controlador coloca las direcciones de columnas “3C3” y se baja la señal /cas. Se observa
que el dato a escribir, “11” se encuentra presente prácticamente durante todo el ciclo.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 5-11
Figura 5.8
¿Cómo es el ciclo de refresco CAS before RAS?
Como toda memoria dinámica, para asegurar la integridad de los datos, debe ser
refrescada periódicamente. Las memorias utilizadas tienen un ciclo de refresco de 16ms y
están estructuradas como una gran matriz de 1024 filas por 1024 columnas, por lo tanto
una forma de refrescar toda la memoria sería leer 1024 filas en un tiempo menor a los
16ms, usando solamente la señal /ras. Esté tipo de refresco es el denominado RAS only y
tiene la desventaja de tener que llevar un contador externo con las direcciones de filas a
refrescar.
Otro tipo de refresco es el CAS before RAS, que fue el utilizado, y tiene la ventaja con
respecto al anterior, que no es necesario colocar las direcciones de filas, ni llevar un conteo
externo, ya que esto lo hace automáticamente la memoria dinámica con su propio contador
interno. Como su nombre lo indica, para que la memoria interprete que se quiere hacer un
ciclo de refresco CAS before RAS, el controlador debe realizar el siguiente handshake:
primero se baja la línea /cas y se sube la línea /write_dram y se baja la línea /ras. Se
mantienen estos estados y se levanta la línea /cas al mismo tiempo que se baja la línea
/write_dram. Posteriormente se levanta la línea /ras y finaliza el ciclo.
Figura 5.9
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 5-12
4. Funcionamiento Lógico del Controlador de
Memorias Dinámicas.
El controlador de memorias dinámicas está formado por dos máquinas de estados que
evolucionan sincrónicamente con la señal de reloj y en función de distintas variables de
entrada que definen cuál es el próximo estado.
Una máquina implementa las funciones microprocesador – controlador y será
denominada máquina 1. La otra, implementa las funciones controlador – memoria
dinámica y será denominada máquina 2.
Luego de una inicialización del controlador, las máquinas de estados se inician en los
estados espera en la máquina 1 y Standby en la máquina 2. Como sus nombres lo indican
estos estados son estados de espera, e indican que el controlador se encuentra disponible
para realizar cualquiera de las funciones microprocesador – controlador y controlador –
memoria dinámica, mencionadas anteriormente.
En función de tres señales lógicas, la máquina 2 puede evolucionar de tres maneras
diferentes. Estas evoluciones son las correspondientes al ciclo de refresco, al ciclo de
lectura y al ciclo de escritura.
Las tres señales lógicas recién mencionadas son definidas en el código AHDL y se
derivan de dos elementos de memoria (flip flops) y un contador. El contador es utilizado
para comenzar un ciclo de refresco cuando la cuenta alcanza su fin. Es llamado
contador.q[] donde los caracteres .q[] hacen referencia a las salidas de todos los flip flops
que componen al contador.
Las dos señales restantes son llamadas lectura_pendiente.q, y escritura_pendiente.q,
que son las salidas de dos flip flops D con señal de enable. Estos flip flops son
configurados por la máquina 1 para comenzar un ciclo de lectura o escritura en la máquina
2 y son borrados por la máquina 2 cuando los ciclos terminan. Por lo tanto estas señales
funcionan como nexos de comunicación entra las dos máquinas de estados.
4.1 Máquina de estados 1: microprocesador – controlador
Los estados que componen la máquina de estados 1 son los siguientes:
reset_maquina_1: Estado inicial de reset. Luego pasa al estado espera.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 5-13
espera: Estado de espera por un ciclo de lectura o escritura entre el
microprocesador y el controlador. En este estado se latchean las direcciones
provenientes del microprocesador. Y se evoluciona a dos posibles estados según
el estado de las señales /write y /read. Si baja la señal /read se pasa al estado
lectura_set_flag. Si baja la señal /write se pasa al estado escritura_espera.
lectura_set_flag: Se setea a high el flip flops D de lectura pendiente. Que
dispara un ciclo de lectura en la máquina de estados 2. Luego pasa al estado
lectura_espera.
lectura_espera: Espera en este estado hasta que lectura_pendiente.q sea
reseteado por la máquina de estados 2 cuando el acceso al módulo SIMM se
halla completado. Luego pasa al estado lectura_fin.
lectura_fin: Al llegar a este estado ya estarán los datos leídos de la memoria, en
el latch datos_simm[].q y puede activarse el buffer tri estado up_tri_state[] que
activará la salida del bus bidireccional bidir_up[].
escritura_espera: Latchea los datos provenientes del microprocesador y
verifica si la dirección provenientes del microprocesador es la dirección de
paginado. En caso afirmativo pasa al estado set_paginado. En caso contrario
espera a que la señal /write suba y pasa al estado escritura_set_flag.
escritura_set_flag: Se setea a high el flip flops D de escritura pendiente. Lo que
dispara un ciclo de escritura en la máquina de estados 2. Luego pasa al estado
escritura_fin.
escritura_fin: Espera en este estado hasta que la máquina de
estados 2 resetee el flip flop escritura_pendiente.q. Luego pasa al estado
espera, dándose por terminado el ciclo de escritura.
error_seguridad: Se accede a este estado si las señales /read y/o /write se
activan simultáneamente. En este caso se tiene una condición de error por parte
del microprocesador, y como consecuencia se para el funcionamiento del
controlador hasta un nuevo reset. El refresco se sigue ejecutando, con lo que se
asegura la integridad de los datos almacenados.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 5-14
4.2 Máquina de estados 2: controlador – memoria dinámica
Cada uno de los ciclos componentes de la máquina 2 se realizan con la siguiente
cantidad de estados:
Ciclo de refresco => 5 estados.
Ciclo de lectura => 6 estados.
Ciclo de escritura => 6 estados.
Los estados que componen la máquina de estados 2 son los siguientes:
Standby: En este estado se espera por cualquiera de los tres ciclos posibles;
escritura, lectura o refresco. Las señales toman los valores definidos por defecto.
Idle: Este estado solo cumple la función de insertar un intervalo de tiempo de un
ciclo de reloj de duración, luego de un ciclo de lectura y / o escritura. Las
señales toman los valores definidos por defecto.
Ciclo de Refresco:
Refrescar1: Este es el primer estado que implementa el ciclo de refresco. Se
accede a éste, desde el estado standby, si la cuenta del contador de refresco llegó
o superó el valor determinado. En este estado se sube la señal /write_dram y se
pasa al estado siguiente que es refrescar2.
Refrescar2: En este estado se bajan las señales /cas[0..3], y se mantiene la señal
/write_dram en uno. Pasa al estado siguiente refrescar3.
Refrescar3: En este estado se mantienen bajas las señales /cas[0..3], se baja la
señal /ras, se mantiene la señal /write_dram en uno y se pasa al estado
siguiente que es refrescar4.
Refrescar4: En este estado se suben las señales /cas[0..3], se mantiene baja la
señal /ras, se baja la señal /write_dram y se pasa al estado siguiente que es
refrescar5.
Refrescar5: Se mantienen bajas las señales de /ras y /write_dram. Finaliza el
ciclo de refresco y las señales se estabilizan en el estado próximo que es
standby.
Nota: En realidad el ciclo de refresco termina al llegar al estado standby, ya que aquí
se sube la señal /ras.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 5-15
Ciclo de Lectura:
Read1: Este es el primer estado que implementa el ciclo de lectura. Se
accede a éste desde el estado standby, si hay una señal de lectura pendiente. Esta
señal de lectura pendiente, proviene de un elemento de memoria (Flip Flop D),
llamado en el código AHDL, lectura_pendiente.q. Este flip flop es seteado por
la máquina de estados 1 cuando el microprocesador baja la señal /read. En este
estado se establecen las direcciones de filas hacia el módulo SIMM y se pasa al
estado siguiente que es read2.
Read2: Se mantienen las direcciones de filas activas y se baja la señal de
/ras y se sube la señal /write_dram. Luego pasa al estado read3.
Read3: Se colocan las direcciones de columnas. Se mantiene la señal de
/ras activa. Luego pasa al estado read4.
Read4: Se mantienen las señales de columnas. Y se decodifican las señales
/cas en función de los dos bits menos significativos de las direcciones
provenientes del microprocesador. Luego se pasa al estado read5.
Read5: Se mantienen las señales de columnas. Pasa al estado read6.
Read6: Se mantienen las señales de columnas. Se resetea a low el flip flops
D de lectura pendiente. Se latchean los datos provenientes del módulo SIMM.
Finaliza el ciclo de lectura, pasando el estado idle.
Ciclo de Escritura:
Write1: Este es el primer estado que implementa el ciclo de escritura. Se
accede a éste desde el estado standby si hay una señal de escritura pendiente.
Esta señal de escritura pendiente es seteada por la máquina de estados 1 y
proviene de un elemento de memoria (Flip Flop D), llamado en el código
AHDL, escritura_pendiente.q. En este estado se establecen las direcciones de
filas hacia el módulo SIMM se pasa al estado siguiente llamado write2. La señal
/write_dram permanece en estado bajo durante todo el ciclo.
Write2: En este estado se mantienen las direcciones de filas, y se baja la
señal /ras, luego se pasa al estado siguiente que es llamado write3.
Write3: En este estado se establecen las direcciones de columnas hacia el
módulo SIMM, se mantiene la señal /ras en low y se habilita el bus de datos
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 5-16
hacia el módulo SIMM. Luego se pasa al estado siguiente que es llamado
write4.
Write4: En este estado se mantienen las direcciones de columnas hacia el
módulo SIMM, se mantiene la señal /ras en low, se determina que bit de la señal
/cas[0..3] se debe llevar a low para escribir el byte correcto y por último se pasa
al estado siguiente que es write5.
Write5: En este estado se mantienen las direcciones de columnas hacia el
módulo SIMM, se mantiene la señal /ras en low, se mantienen las señales
/cas[0..3] como en el estado anterior, se deshabilita el bus de datos y se resetea
el flip flop de escritura pendiente. Por último se pasa al estado siguiente que es
write6.
Write6: En este estado se permite que las señales vuelvan a tomar los
niveles definidos por defecto, para asegurar los tiempos de precarga
especificados en las hojas de datos del módulo de memoria. El próximo estado
es idle.
5. Implementación de los ports bidireccionales.
Seguidamente se describirá como es la implementación de buses bidireccionales, que
cumplen la función de intercambiar información entre el microprocesador y el módulo de
memoria SIMM en forma bidireccional.
La figura 5.10 muestra en forma esquemática las interconexiones realizadas para
implementar dicha interfase.
Se puede observar la existencia de dos latchs encargados de almacenar los datos que
entran al dispositivo de lógica programable, tanto del port bidir_up[7..0] como del port
bidir_simm[7..0], con el flanco ascendente de la señal de reloj, si la señal de enable
correspondiente está en estado alto.
Gila
rdon
i - O
rozc
o - C
ayss
ials
- La
bora
torio
de
Sist
emas
Dig
itale
s - U
NS
Gilardoni – Orozco - Cayssials Diciembre de 1999.
Gilardoni - Orozco - Cayssials Laboratorio de Sistemas Digitales - UNS 5-17
Figura 5.10
Los datos salen por los ports bidireccionales a través de los buffers tri estados
up_tri_state[7..0] y simm_tri_state[7..0] cuando las señales de output enable
correspondientes pasan a estado alto.
top related