apuntes de fpga y de vhdl en español

127
Gilardoni - Orozco - Cayssials - Laboratorio de Sistemas Digitales - UNS 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.

Upload: euler-deza-figueroa

Post on 02-Dec-2015

250 views

Category:

Documents


3 download

DESCRIPTION

Introduccion al VHDL

TRANSCRIPT

Page 1: Apuntes de Fpga y de Vhdl en Español

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.

Page 2: Apuntes de Fpga y de Vhdl en Español

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

Page 3: Apuntes de Fpga y de Vhdl en Español

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.

Page 4: Apuntes de Fpga y de Vhdl en Español

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.

Page 5: Apuntes de Fpga y de Vhdl en Español

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

Page 6: Apuntes de Fpga y de Vhdl en Español

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

Page 7: Apuntes de Fpga y de Vhdl en Español

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.

Page 8: Apuntes de Fpga y de Vhdl en Español

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.

Page 9: Apuntes de Fpga y de Vhdl en Español

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

Page 10: Apuntes de Fpga y de Vhdl en Español

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.

Page 11: Apuntes de Fpga y de Vhdl en Español

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)

Page 12: Apuntes de Fpga y de Vhdl en Español

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.

Page 13: Apuntes de Fpga y de Vhdl en Español

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

Page 14: Apuntes de Fpga y de Vhdl en Español

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

Page 15: Apuntes de Fpga y de Vhdl en Español

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.

Page 16: Apuntes de Fpga y de Vhdl en Español

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).

Page 17: Apuntes de Fpga y de Vhdl en Español

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:

Page 18: Apuntes de Fpga y de Vhdl en Español

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.

Page 19: Apuntes de Fpga y de Vhdl en Español

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

Page 20: Apuntes de Fpga y de Vhdl en Español

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.

Page 21: Apuntes de Fpga y de Vhdl en Español

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).

Page 22: Apuntes de Fpga y de Vhdl en Español

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

Page 23: Apuntes de Fpga y de Vhdl en Español

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

Page 24: Apuntes de Fpga y de Vhdl en Español

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.

Page 25: Apuntes de Fpga y de Vhdl en Español

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

Page 26: Apuntes de Fpga y de Vhdl en Español

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.

Page 27: Apuntes de Fpga y de Vhdl en Español

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

Page 28: Apuntes de Fpga y de Vhdl en Español

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.

Page 29: Apuntes de Fpga y de Vhdl en Español

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

Page 30: Apuntes de Fpga y de Vhdl en Español

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

Page 31: Apuntes de Fpga y de Vhdl en Español

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

Page 32: Apuntes de Fpga y de Vhdl en Español

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.

Page 33: Apuntes de Fpga y de Vhdl en Español

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.

Page 34: Apuntes de Fpga y de Vhdl en Español

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).

Page 35: Apuntes de Fpga y de Vhdl en Español

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.

Page 36: Apuntes de Fpga y de Vhdl en Español

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

Page 37: Apuntes de Fpga y de Vhdl en Español

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.

Page 38: Apuntes de Fpga y de Vhdl en Español

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

Page 39: Apuntes de Fpga y de Vhdl en Español

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

Page 40: Apuntes de Fpga y de Vhdl en Español

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.

Page 41: Apuntes de Fpga y de Vhdl en Español

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.

Page 42: Apuntes de Fpga y de Vhdl en Español

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

Page 43: Apuntes de Fpga y de Vhdl en Español

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

Page 44: Apuntes de Fpga y de Vhdl en Español

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.

Page 45: Apuntes de Fpga y de Vhdl en Español

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.

Page 46: Apuntes de Fpga y de Vhdl en Español

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

Page 47: Apuntes de Fpga y de Vhdl en Español

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.

Page 48: Apuntes de Fpga y de Vhdl en Español

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.

Page 49: Apuntes de Fpga y de Vhdl en Español

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

Page 50: Apuntes de Fpga y de Vhdl en Español

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).

Page 51: Apuntes de Fpga y de Vhdl en Español

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.

Page 52: Apuntes de Fpga y de Vhdl en Español

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.

Page 53: Apuntes de Fpga y de Vhdl en Español

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.

Page 54: Apuntes de Fpga y de Vhdl en Español

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.

Page 55: Apuntes de Fpga y de Vhdl en Español

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

Page 56: Apuntes de Fpga y de Vhdl en Español

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

Page 57: Apuntes de Fpga y de Vhdl en Español

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

Page 58: Apuntes de Fpga y de Vhdl en Español

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.

Page 59: Apuntes de Fpga y de Vhdl en Español

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:

Page 60: Apuntes de Fpga y de Vhdl en Español

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

Page 61: Apuntes de Fpga y de Vhdl en Español

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

Page 62: Apuntes de Fpga y de Vhdl en Español

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.

Page 63: Apuntes de Fpga y de Vhdl en Español

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

Page 64: Apuntes de Fpga y de Vhdl en Español

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.

Page 65: Apuntes de Fpga y de Vhdl en Español

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”.

Page 66: Apuntes de Fpga y de Vhdl en Español

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

Page 67: Apuntes de Fpga y de Vhdl en Español

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.

Page 68: Apuntes de Fpga y de Vhdl en Español

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

Page 69: Apuntes de Fpga y de Vhdl en Español

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.

Page 70: Apuntes de Fpga y de Vhdl en Español

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.

Page 71: Apuntes de Fpga y de Vhdl en Español

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.

Page 72: Apuntes de Fpga y de Vhdl en Español

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,

Page 73: Apuntes de Fpga y de Vhdl en Español

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

Page 74: Apuntes de Fpga y de Vhdl en Español

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.

Page 75: Apuntes de Fpga y de Vhdl en Español

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

Page 76: Apuntes de Fpga y de Vhdl en Español

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.

Page 77: Apuntes de Fpga y de Vhdl en Español

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.

Page 78: Apuntes de Fpga y de Vhdl en Español

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.

Page 79: Apuntes de Fpga y de Vhdl en Español

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.

Page 80: Apuntes de Fpga y de Vhdl en Español

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

Page 81: Apuntes de Fpga y de Vhdl en Español

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

Page 82: Apuntes de Fpga y de Vhdl en Español

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.

Page 83: Apuntes de Fpga y de Vhdl en Español

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

Page 84: Apuntes de Fpga y de Vhdl en Español

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.

Page 85: Apuntes de Fpga y de Vhdl en Español

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.

Page 86: Apuntes de Fpga y de Vhdl en Español

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.

Page 87: Apuntes de Fpga y de Vhdl en Español

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

(

Page 88: Apuntes de Fpga y de Vhdl en Español

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;

Page 89: Apuntes de Fpga y de Vhdl en Español

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

Page 90: Apuntes de Fpga y de Vhdl en Español

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

Page 91: Apuntes de Fpga y de Vhdl en Español

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

Page 92: Apuntes de Fpga y de Vhdl en Español

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);

Page 93: Apuntes de Fpga y de Vhdl en Español

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

Page 94: Apuntes de Fpga y de Vhdl en Español

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);

Page 95: Apuntes de Fpga y de Vhdl en Español

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.

Page 96: Apuntes de Fpga y de Vhdl en Español

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.

Page 97: Apuntes de Fpga y de Vhdl en Español

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.

Page 98: Apuntes de Fpga y de Vhdl en Español

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,

Page 99: Apuntes de Fpga y de Vhdl en Español

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:

Page 100: Apuntes de Fpga y de Vhdl en Español

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.

Page 101: Apuntes de Fpga y de Vhdl en Español

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.

Page 102: Apuntes de Fpga y de Vhdl en Español

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.

Page 103: Apuntes de Fpga y de Vhdl en Español

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.

Page 104: Apuntes de Fpga y de Vhdl en Español

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

Page 105: Apuntes de Fpga y de Vhdl en Español

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:

Page 106: Apuntes de Fpga y de Vhdl en Español

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.

Page 107: Apuntes de Fpga y de Vhdl en Español

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.

Page 108: Apuntes de Fpga y de Vhdl en Español

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

Page 109: Apuntes de Fpga y de Vhdl en Español

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).

Page 110: Apuntes de Fpga y de Vhdl en Español

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.

Page 111: Apuntes de Fpga y de Vhdl en Español

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:

Page 112: Apuntes de Fpga y de Vhdl en Español

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

Page 113: Apuntes de Fpga y de Vhdl en Español

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.

Page 114: Apuntes de Fpga y de Vhdl en Español

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:

Page 115: Apuntes de Fpga y de Vhdl en Español

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.

Page 116: Apuntes de Fpga y de Vhdl en Español

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

Page 117: Apuntes de Fpga y de Vhdl en Español

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.

Page 118: Apuntes de Fpga y de Vhdl en Español

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:

Page 119: Apuntes de Fpga y de Vhdl en Español

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.

Page 120: Apuntes de Fpga y de Vhdl en Español

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.

Page 121: Apuntes de Fpga y de Vhdl en Español

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

Page 122: Apuntes de Fpga y de Vhdl en Español

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.

Page 123: Apuntes de Fpga y de Vhdl en Español

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.

Page 124: Apuntes de Fpga y de Vhdl en Español

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.

Page 125: Apuntes de Fpga y de Vhdl en Español

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

Page 126: Apuntes de Fpga y de Vhdl en Español

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.

Page 127: Apuntes de Fpga y de Vhdl en Español

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.