U de G - Curso de VHDL

July 18, 2017 | Author: AldoAxel | Category: Electronic Design, Engineering, Design, Digital & Social Media, Digital Technology
Share Embed Donate


Short Description

Download U de G - Curso de VHDL...

Description

SÍNTESIS Y DESCRIPCIÓN DE CIRCUITOS DIGITALES UTILIZANDO VHDL

IEC FRANCISCO JAVIER TORRES VALLE 2001

SINTESIS Y DESCRIPCIÓN DE CIRCUITOS DIGITALES UTILIZANDO VHDL

A N T E C E D E N T E S En los últimos diez años la industria electrónica ha tenido una gran evolución en el desarrollo de sistemas digitales; desde computadoras personales, sistemas de audio y vídeo hasta dispositivos de alta velocidad para las comunicaciones. Productos hechos con una alta tecnología que permite aumentar la funcionalidad, disminuir costos, mejorar el aprovechamiento de la energía, así como una marcada tendencia hacia la miniaturización. Esto ha sido posible gracias a la implementación de herramientas de diseño asistidos por computadora, conocidas como herramientas CAD (Computer Aided Design), aunque específicamente se hace uso de herramientas EDA (Electronic Design Automation), que es el nombre que se le da a todas las herramientas CAD para el diseño de sistemas electrónicos. Este software de diseño electrónico que facilita a los ingenieros el desarrollo de circuitos es cada vez mas sofisticado y, además, contamos con computadoras cada vez más veloces y de mayor capacidad de procesamiento. Ambos, hardware y software, constituyen actualmente herramientas muy importantes que simplifican el trabajo de diseño electrónico. Además de facilitar el trabajo, el uso de herramientas EDA también aceleró los procesos de diseño. Esta situación condujo a adoptar nuevas metodologías para el diseño y evaluación de los circuitos electrónicos. El uso de las herramientas EDA junto con los dispositivos lógicos programables, que pueden ser utilizados en diferentes aplicaciones e inclusive reprogramados, cambiaron bastante el concepto de diseño de circuitos digitales.

El presente trabajo considera los dispositivos lógicos programables, enfocándonos en los PLDs, CPLDs y FPGAs. Ya que el principal motivo por el que debemos aprender a utilizar VHDL es el de diseñar circuitos lógicos utilizando este tipo de dispositivos. Se expondrán los estilos elementales de codificación, exponiendo las principales características de VHDL como lenguaje para síntesis de circuitos. Finalmente se desarrolla la implementación de filtros digitales utilizando FPGAs.

VHDL es un lenguaje que se creó para el diseño, modelado y documentación de circuitos complejos. Actualmente se le utiliza para la síntesis de circuitos digitales utilizando dispositivos lógicos programables. Es así como los dispositivos lógicos programables y VHDL, Very High Speed Integrated Circuit (VHSIC) Hardware Description Language, constituyen los elementos fundamentales para estas nuevas metodologías de diseño.

IEC FRANCISCO JAVIER TORRES VALLE

i

SINTESIS Y DESCRIPCIÓN DE CIRCUITOS DIGITALES UTILIZANDO VHDL

Í N D I C E

ANTECEDENTES

i

1.

LENGUAJES DE DESCRIPCIÓN DE HARDWARE

1

1.1. INTRODUCCIÓN.

2

1.2. EL CONCEPTO DE HERRAMIENTAS CAD-EDA.

2

1.3. LENGUAJES DE DESCRIPCIÓN DE HARDWARE.

4

1.3.1.

2.

VENTAJAS DE LOS HDLS

1.4. VHDL

5

1.5. METODOLOGÍA DE DISEÑO UTILIZANDO VHDL

6

DISPOSITIVOS LÓGICOS PROGRAMABLES

9

2.1. CONCEPTOS FUNDAMENTALES

10

2.2. DISPOSITIVOS LÓGICOS PROGRAMABLES

10

2.2.1.

MATRIZ GENÉRICA PROGRAMABLE

2.3. COMPLEX PROGRAMMABLE LOGIC DEVICES

10 11

2.3.1.

MATRIZ DE INTERCONEXIONES PROGRAMABLES

11

2.3.2.

BLOQUES LÓGICOS

11

2.3.3.

DISTRIBUCIÓN DE PRODUCTOS

12

2.3.4.

MACROCELDAS

12

2.3.5.

CELDA DE ENTRADA/SALIDA

13

2.4. FIELD PROGRAMMABLE LOGIC DEVICES 2.4.1. 3.

5

CELDAS LÓGICAS

13 14

SINTAXIS DEL LENGUAJE

17

3.1. INTRODUCCIÓN A LA DESCRIPCIÓN EN VHDL DE CIRCUITOS DIGITALES

18

3.1.1.

MULTIPLEXORES

18

3.1.2.

COMPARADORES

19

3.1.3.

EL ESTILO DE “PROGRAMACIÓN” EN VHDL

20

3.2. IDENTIFICADORES

21

3.3. OBJETOS DE DATOS

21

3.3.1.

CONSTANTES

IEC FRANCISCO JAVIER TORRES VALLE

21

ii

SINTESIS Y DESCRIPCIÓN DE CIRCUITOS DIGITALES UTILIZANDO VHDL

3.3.2.

VARIABLES

22

3.3.3.

SEÑALES

22

3.3.4.

ALIAS

22

3.4. TIPOS DE DATOS

22

3.4.1.

TIPOS ESCALARES

22

3.4.2.

TIPOS COMPUESTOS

25

3.4.3.

SUBTIPOS

27

3.4.4.

TIPOS PREDEFINIDOS EN VHDL

27

3.4.5.

TIPOS NO SOPORTADOS EN VHDL PARA SÍNTESIS

27

3.5. OPERADORES

28

3.5.1.

OPERADORES LÓGICOS

28

3.5.2.

OPERADORES DE COMPARACIÓN

28

3.5.3.

OPERADORES DE ADICIÓN

28

3.5.4.

OPERADORES DE MULTIPLICACIÓN

29

3.5.5.

OPERADORES MISCELÁNEOS

29

3.5.6.

OPERADORES DE ASIGNACIÓN

29

3.5.7.

OPERADORES DE ASOCIACIÓN

30

3.5.8.

OPERADORES DE CORRIMIENTO

31

3.5.9.

OPERACIONES CON VECTORES

31

3.6. ATRIBUTOS

32

3.7. ENTIDADES

32

3.7.1.

GENÉRICOS

33

3.7.2.

PUERTOS

33

3.7.3.

MODOS

33

3.8. ARQUITECTURAS

34

3.9. DESCRIPCIONES DE FLUJO DE DATOS

34

3.9.1.

INSTRUCCIONES CONCURRENTES

35

3.9.2.

ESTRUCTURAS DE EJECUCIÓN CONCURRENTE

35

3.9.3.

ALU

35

3.10. DESCRIPCIONES COMPORTAMENTALES

38

3.10.1. INSTRUCCIONES SECUENCIALES

38

3.10.2. PROCESOS

38

3.10.3. DIFERENCIAS ENTRE SEÑALES Y VARIABLES

39

3.10.4. ESTRUCTURAS DE EJECUCIÓN SECUENCIAL

40

3.11. DESCRIPCIONES ESTRUCTURALES IEC FRANCISCO JAVIER TORRES VALLE

42 iii

SINTESIS Y DESCRIPCIÓN DE CIRCUITOS DIGITALES UTILIZANDO VHDL

3.11.1. COMPONENTES

42

3.11.2. INSTANCIACIÓN DE COMPONENTES

43

3.11.3. SENTENCIAS DE GENERACIÓN

44

3.12. SUBPROGRAMAS 3.12.1. PROCEDIMIENTOS

47

3.12.2. FUNCIONES

47

3.12.3. LLAMADO A SUBPROGRAMAS

48

3.12.4. SOBRECARGA DE OPERADORES

50

3.13. LIBRERÍAS

4.

50

3.13.1. SÍNTESIS DE LIBRERÍAS EN WARP

50

3.13.2. PAQUETES

52

DESCRIPCIÓN DE CIRCUITOS DIGITALES

54

4.1. PROYECTOS EN WARP 5.0

55

4.2. SIMULACIÓN DE PROYECTOS

57

4.2.1.

PROCESO DE SIMULACIÓN

57

4.3. COMPARADORES

60

4.4. MULTIPLEXORES

65

4.4.1.

DESCRIPCIÓN DE FLUJO DE DATOS

65

4.4.2.

DESCRIPCIÓN COMPORTAMENTAL

66

4.4.3.

DESCRIPCIÓN ESTRUCTURAL

67

4.5. SUMADORES

5.

47

68

4.5.1.

SUMADOR TOTAL

68

4.5.2.

SUMADOR DE CUATRO BITS

69

4.5.3.

SYNTHESIS OFF

70

4.6. REGISTROS

71

4.7. CONTADORES

73

4.8. ALU DE CUATRO BITS

76

4.8.1.

DESCRIPCIÓN ESTRUCTURAL

77

4.8.2.

DESCRIPCIÓN COMPORTAMENTAL

78

4.9. MÁQUINAS DE ESTADO

79

IMPLEMENTACIÓN DE FILTROS DIGITALES EN FPGA'S

83

5.1. INTRODUCCIÓN

84

5.2. ANTECEDENTES

84

IEC FRANCISCO JAVIER TORRES VALLE

iv

SINTESIS Y DESCRIPCIÓN DE CIRCUITOS DIGITALES UTILIZANDO VHDL

5.3. MARCO TEÓRICO

84

5.3.1.

FILTROS FIR

84

5.3.2.

FILTROS IIR

85

5.3.3.

METODOLOGÍA DE DISEÑO PARA FILTROS DIGITALES

86

5.4. IMPLEMENTACIÓN EN FPGA'S

86

5.5. DISEÑO DE UN FILTRO PASA-BAJAS

86

5.6. RESULTADOS

93

CONCLUSIONES

95

BIBLIOGRAFÍA

97

IEC FRANCISCO JAVIER TORRES VALLE

v

CAPÍTULO I: LENGUAJES DE DESCRIPCIÓN DE HARDWARE

I IEC FRANCISCO JAVIER TORRES VALLE

LENGUAJES DE DESCRIPCIÓN DE HARDWARE 1

CAPÍTULO I: LENGUAJES DE DESCRIPCIÓN DE HARDWARE

1.1

INTRODUCCIÓN

A mediados de los años setenta se produce una fuerte evolución en los procesos de fabricación de los circuitos integrados, promoviendo el desarrollo de circuitos digitales hasta la primera mitad de los años ochenta. En aquellas épocas el esfuerzo de diseño se concentraba en los niveles eléctricos para establecer características e interconexiones entre los componentes básicos al nivel de transistor. El proceso de diseño era altamente manual y tan sólo se empleaban herramientas como PSPICE para simular esquemas eléctricos con modelos previamente caracterizados a cada una de las distintas tecnologías. A medida que pasaban los años, los procesos tecnológicos se hacían más y más complejos. Los problemas de integración iban en aumento y los diseños eran cada vez más difíciles de depurar y de dar mantenimiento. Inicialmente los circuitos MSI (Medium Scale Integration) y LSI (Low Scale Integration) se diseñaron mediante el desarrollo de prototipos basados en módulos simples. Cada uno de estos módulos estaba formado por compuertas ya probadas, pero este método poco a poco iba quedándose obsoleto conforme aumentaba la complejidad y tamaño de los circuitos. A finales de los años setenta se constata el enorme desfase que existía entre tecnología y diseño. La considerable dificultad que puede llegar a tomar el fabricar un circuito de alta escala de integración, involucra riesgos y costos de diseño desmesurados e imposibles de asumir por las empresas. Es entonces, cuando diversos grupos de investigadores empiezan a crear y desarrollar los llamados “lenguajes de descripción de hardware”, lenguajes en los que no fuera necesario caracterizar eléctricamente cada componente del circuito al nivel de transistor para así enfocarse solamente en el funcionamiento lógico del sistema. Empresas tales como IBM con su IDL, el TI-HDL de Texas Instruments, ZEUS de General Electric, etc., así como los primeros prototipos empleados en las universidades, empezaron a desarrollarse buscando una solución a los problemas que presentaba el diseño de sistemas complejos. Sin embargo, estos lenguajes nunca alcanzaron el nivel de difusión y consolidación necesarios por motivos distintos. Unos, los industriales, por ser propiedad de la empresa permanecieron encerrados en ellas y no estuvieron disponibles para su estandarización y mayor difusión, en tanto que los universitarios IEC FRANCISCO JAVIER TORRES VALLE

perecieron por no disponer de soporte ni mantenimiento adecuado.

1.2

EL CONCEPTO DE HERRAMIENTAS CAD-EDA

CAD son las siglas de Computer Aided Design, o diseño asistido por computadora el cual constituye todo un proceso de trabajo utilizando técnicas de análisis apoyadas en gráficos mediante sofisticadas herramientas de software las cuales facilitan el estudio de los problemas asociados con el diseño en cuestión. El concepto CAD se relaciona con el dibujo como parte importante en el proceso de diseño pero, además, el diseño de un circuito debe cumplir con los requerimientos especificados por el equipo de diseño, por las normas de calidad existentes, los costos, etc. por lo que las herramientas CAD intervienen en todas las fases del diseño. Ya que no sólo son importantes por acelerar el desarrollo del sistema al permitir que varias personas puedan trabajar simultáneamente en distintas etapas del diseño sino que, además, es posible verificar el funcionamiento del circuito mediante la simulación del sistema. Todo esto simplifica la tarea del equipo de diseño y conduce a la conclusión del prototipo en menos tiempo. EDA, Electronic Design Automation, es el nombre que se le da a todas las herramientas de hardware y software en el diseño de sistemas electrónicos. Porque no sólo el software es importante, también lo es el hecho de que las computadoras cada día son más veloces y de mayor capacidad de procesamiento, lo cual influye en el proceso de diseño de circuitos electrónicos. El diseño de hardware tiene un problema fundamental, que no existe en desarrollo de software. Este problema es el alto costo del ciclo diseño desarrollo del prototipo pruebas reinicio del ciclo, ya que el costo del prototipo generalmente suele ser bastante elevado. Se impone la necesidad de reducir este ciclo de diseño para no incluir la fase de desarrollo del prototipo más que al final del proceso, evitando la repetición de varios prototipos que es lo que encarece el ciclo. Para ello se introduce la fase de simulación y verificación de circuitos utilizando herramientas EDA, de tal forma que no sea necesario implementar físicamente un prototipo para comprobar el funcionamiento del circuito. 2

CAPÍTULO I: LENGUAJES DE DESCRIPCIÓN DE HARDWARE

En el ciclo de diseño de circuitos, las herramientas EDA están presentes en todas las fases. Primero en la fase de generación del sistema que puede representarse mediante un diagrama esquemático, a bloques o de flujo.

A continuación se mencionan las principales características y finalidad de algunas herramientas EDA que intervienen en el diseño de circuitos.

Se encuentran también en la fase de simulación y comprobación de circuitos, donde diferentes herramientas permiten verificar el funcionamiento del sistema. Estas simulaciones pueden ser de eventos, funcionales, digitales o eléctricas, de acuerdo al nivel de simulación requerido. Después están las herramientas EDA utilizadas en la síntesis y programación de circuitos digitales en dispositivos lógicos programables. Existen, además, las herramientas EDA orientadas a la fabricación de circuitos. En el caso del diseño de hardware estas herramientas sirven para la realización de PCBs (Printed Circuit Boards o placas de circuito impreso), o para desarrollar circuitos integrados de aplicación especifica conocidos como ASICs (Application Specific Integrated Circuits). Este ciclo de diseño de hardware se muestra en la figura 1.1.

Son lenguajes mediante los cuales es posible describir el funcionamiento y estructura de un circuito eléctrico o digital. La descripción puede ser mediante bloques donde se muestra la arquitectura del diseño, o de comportamiento, es decir, se describe el funcionamiento del circuito en vez de especificar los elementos de los que está compuesto.

SÍNTESIS

SIMULACIÓN FUNCIONAL

ANÁLISIS TEMPORAL

¿FUNCIONA?

¿FUNCIONA?

II.

si

no

III.

Grafos y diagramas de flujo.

Simulación de eventos.

Estas herramientas se usan para la simulación de circuitos a grandes rasgos. En esta simulación, los componentes más importantes son elementos de alto nivel como discos duros, buses de comunicaciones, memorias RAM etc.

si PROGRAMACIÓN DEL DISPOSITIVO

no

¿FUNCIONA?

Diagramas esquemáticos.

Es la forma clásica de describir un diseño electrónico y la más extendida ya que era la única usada antes de la aparición de las herramientas de EDA. La descripción está basada en un “plano” donde se muestran los diferentes componentes utilizados en el circuito.

IV.

no

Lenguajes de descripción de circuitos.

Es posible describir un circuito o sistema mediante diagramas de flujo, redes de Petri, máquinas de estados, etc. En este caso sería una descripción gráfica y además sería comportamental, porque no es una descripción mediante componentes.

IDEA

DESCRIPCIÓN DEL CIRCUITO

I.

PRUEBAS AL DISEÑO

ELABORACIÓN DEL PROTOTIPO

si

FINALIZA EL PROCESO DE DISEÑO

Figura 1.1 Flujo de diseño en el desarrollo de sistemas electrónicos

IEC FRANCISCO JAVIER TORRES VALLE

V.

Simulación funcional.

Bajando al nivel de compuertas digitales se puede realizar una simulación funcional de las mismas. Este tipo de simulación comprueba la operación de circuitos digitales a partir del comportamiento lógico de sus elementos con el fin de comprobar el funcionamiento en conjunto del circuito mediante unos estímulos dados. Similar a lo que se realiza en un laboratorio. VI.

Simulación digital.

Esta simulación, también exclusiva de los circuitos digitales, es como la anterior con la diferencia de que se tienen en cuenta los retardos 3

CAPÍTULO I: LENGUAJES DE DESCRIPCIÓN DE HARDWARE

de propagación de cada compuerta. Es una simulación muy cercana al comportamiento real del circuito y prácticamente garantiza el funcionamiento correcto del circuito en cuestión. En las herramientas EDA este tipo de simulación se conoce como análisis temporal o timing. VII.

Simulación eléctrica.

Es la simulación de más bajo nivel donde las respuestas del sistema se verifican al nivel de transistor. Sirven tanto para circuitos analógicos como digitales y su respuesta es prácticamente idéntica a la realidad ya que se prueban retardos de tiempo, niveles de voltaje, disipación de potencia, etc. VIII.

Diseño de PCBs

Con estas herramientas es posible realizar el trazado de pistas para la fabricación de placas de circuitos impresos. IX.

Diseño de circuitos integrados

Son herramientas EDA que sirven para la realización de circuitos integrados. Las capacidades gráficas de estas herramientas permiten la realización de las diferentes máscaras que intervienen en la realización de éstos. X.

Diseño con dispositivos programables.

Estas herramientas facilitan la programación de dispositivos, ya sean PALs, PLDs, CPLDs o FPGAs.

1.3

LENGUAJES DE DESCRIPCIÓN DE HARDWARE

Los lenguajes de descripción de hardware (HDLs) son utilizados para describir la arquitectura y comportamiento de un sistema electrónico los cuales fueron desarrollados para trabajar con diseños complejos. Comparando un HDL con los lenguajes para el desarrollo de software vemos que en un lenguaje de este tipo un programa que se encuentra en un lenguaje de alto nivel (VHDL) necesita ser ensamblado a código máquina (compuertas y conexiones) para poder ser interpretado por el procesador. De igual manera, el objetivo de un HDL es describir un circuito mediante un conjunto de instrucciones de alto nivel de abstracción para IEC FRANCISCO JAVIER TORRES VALLE

que el programa de síntesis genere (ensamble) un circuito que pueda ser implementado físicamente. La forma más común de describir un circuito es mediante la utilización de esquemas que son una representación gráfica de lo que se pretende realizar. Con la aparición de herramientas EDA cada vez más complejas, que integran en el mismo marco de trabajo las herramientas de descripción, síntesis, simulación y realización; apareció la necesidad de disponer de un método de descripción de circuitos que permitiera el intercambio de información entre las diferentes herramientas que componen el ciclo de diseño. En principio se utilizó un lenguaje de descripción que permitía, mediante sentencias simples, describir completamente un circuito. A estos lenguajes se les llamó Netlist puesto que eran simplemente eso, un conjunto de instrucciones que indicaban las interconexiones entre los componentes de un diseño. A partir de estos lenguajes simples, que ya eran auténticos lenguajes de descripción hardware, se descubrió el interés que podría tener el describir circuitos utilizando un lenguaje en vez de usar esquemas. Sin embargo, se siguieron utilizando esquemas puesto que desde el punto de vista del ser humano son mucho más sencillos de entender, aunque un lenguaje siempre permite una edición más rápida y sencilla. Conforme las herramientas de diseño se volvieron más sofisticadas, y la posibilidad de desarrollar circuitos digitales mediante dispositivos programables era más viable, apareció la necesidad de poder describir los circuitos mediante un lenguaje de alto nivel de abstracción. No desde un punto de vista estructural, sino desde el punto de vista funcional. Este nivel de abstracción se había alcanzado ya con las herramientas de simulación, ya que para poder simular partes de un sistema era necesario disponer de modelos que describieran el funcionamiento de bloques del circuito o de cada componente si fuera necesario. Estos lenguajes estaban sobre todo orientados a la simulación, por lo que poco importaba que el nivel de abstracción fuera tan alto que no fuera sencillo una realización o síntesis a partir de dicho modelo. Con la aparición de técnicas para la síntesis de circuitos a partir de lenguajes de alto nivel de abstracción, se comenzaron a utilizar los lenguajes de simulación para sintetizar circuitos. Que si bien alcanzan un altísimo nivel de abstracción, su orientación era básicamente la de simular, por lo que los resultados de una síntesis a partir de descripciones 4

CAPÍTULO I: LENGUAJES DE DESCRIPCIÓN DE HARDWARE

con estos lenguajes no eran siempre las más optimas. Además, los lenguajes de descripción de hardware al formar parte de las herramientas EDA permiten el trabajo en equipo. Así, al estructurar el desarrollo del proyecto, cada integrante del equipo de diseño puede trabajar en subproyectos antes de integrar todas las partes del sistema.



Un circuito hecho mediante una descripción en un HDL puede ser utilizado en cualquier tipo de dispositivo programable capaz de soportar la densidad del diseño. Es decir, no es necesario adecuar el circuito a cada dispositivo porque las herramientas de síntesis se encargan de ello.



Una descripción realizada en un HDL es más fácil de leer y comprender que los netlist o circuitos esquemáticos.

1.3.1 VENTAJAS DE LOS HDLS Una metodología de diseño que utiliza un HDL posee varias ventajas sobre la metodología tradicional de diseño a nivel compuerta. Algunas de estas ventajas son listadas a continuación. •

Es posible verificar el funcionamiento del sistema dentro del proceso de diseño sin necesidad de implementar el circuito.



Las simulaciones del diseño, antes de que éste sea implementado mediante compuertas, permiten probar la arquitectura del sistema para tomar decisiones en cuanto a cambios en el diseño.



Las herramientas de síntesis tienen la capacidad de convertir una descripción hecha en un HDL, VHDL por ejemplo, a compuertas lógicas y, además, optimizar dicha descripción de acuerdo a la tecnología utilizada.



Esta metodología elimina el antiguo método tedioso de diseño mediante compuertas, reduce el tiempo de diseño y la cantidad de errores producidos por el armado del circuito.



Las herramientas de síntesis pueden transformar automáticamente un circuito obtenido mediante la síntesis de un código en algún HDL, a un circuito pequeño y rápido. Además, es posible aplicar ciertas características al circuito dentro de la descripción para afinar detalles (retardos, simplificación de compuertas, etc.) en la arquitectura del circuito y que estas características se obtengan en la síntesis de la descripción.



Las descripciones en un HDL proporcionan documentación de la funcionalidad de un diseño independientemente de la tecnología utilizada.

IEC FRANCISCO JAVIER TORRES VALLE

1.4

VHDL

VHDL es un lenguaje de descripción de hardware utilizado para describir circuitos en un alto nivel de abstracción el cual está siendo rápidamente aceptado como un medio estándar de diseño. VHDL es producto del programa Very High Speed Integrated Circuit (VHSIC) desarrollado por el Departamento de Defensa de los Estados Unidos a finales de la década de los 70's. El propósito era hacer un estándar para diseñar, modelar, y documentar circuitos complejos de tal manera que un diseño desarrollado por una empresa pudiera ser entendido por otra y, además, pudiera ser procesado por software con propósitos de simulación. VHDL es reconocido como un estándar de los lenguajes HDL por el Instituto de Ingenieros en Electricidad y Electrónica – IEEE – como su estándar 1076 el cual fue ratificado en 1987, y por parte del Departamento de Defensa de los Estados Unidos como el estándar MIL-STD-454L En 1993 el estándar IEEE-1076 se actualizó y un estándar adicional, el IEEE-1164, fue adoptado. Para 1996 el estándar IEEE-1076.3 se convirtió en un estándar de VHDL para síntesis siendo éste el que se utiliza en el diseño de sistemas digitales. Los estándares más utilizados en síntesis de circuitos por la mayoría de las herramientas de diseño son el IEEE-1164 y el IEEE-1076.3. En la actualidad VHDL es un estándar de la industria para la descripción, modelado y síntesis de circuitos digitales. Por esto, los ingenieros de la mayoría de las áreas de electrónica, si no es que todas, deben aprender a programar en VHDL para incrementar su eficiencia. VHDL divide los circuitos en dos “vistas” entidades y arquitecturas. La entidad modela al circuito, componente o sistema externamente 5

CAPÍTULO I: LENGUAJES DE DESCRIPCIÓN DE HARDWARE

definiendo a este mediante un nombre y sus conexiones que vienen siendo las entradas y salidas del circuito. En tanto que la arquitectura, que es la vista interna, define el funcionamiento del circuito. Después de definir las interfaces de la entidad, otras entidades pueden utilizar a la primera como un subcircuito, al mismo tiempo que todas están siendo desarrolladas, es decir, están siendo detalladas en su funcionamiento. Este concepto de vistas externas e internas es propio de VHDL y permite segmentar un sistema en bloques. Así, una entidad es relativa a otras entidades a través de sus conexiones y comportamiento. Por lo que es posible experimentar cada entidad con diferentes arquitecturas sin necesidad de cambiar el resto del diseño. Y obviamente cada entidad puede ser reutilizada en otros sistemas aunque no hayan sido diseñadas específicamente para estos. Un modelo de hardware de VHDL es mostrado en la siguiente figura.

Una señal posee una fuente (driver) y uno más destinos (receptores) y un tipo de dato que le proporciona características de interconexión. Por ejemplo, una señal que se define como tipo bit puede manejar los valores binarios ‘0’ y ‘1’ solamente, en tanto que una señal que se define como bit_vector puede manejar mas de una posición binaria. La forma de diseñar circuitos en VHDL se divide en tres categorías de acuerdo a su complejidad: flujo de datos, comportamental, y estructural. Estos tres estilos de diseño se detallan a continuación. •

FLUJO DE DATOS

En este estilo el diseño del circuito no es complicado por lo que basta con describir como fluyen los datos través de la entidad, de las entradas hacia las salidas. La operación del sistema está definida en términos de un conjunto de transformaciones de datos expresadas como instrucciones concurrentes. •

COMPORTAMENTAL

El diseño es un poco más complicado ya que requiere de varias decisiones antes de definir los datos de salida correctos. Por lo que se requiere de una descripción algorítmica del funcionamiento del circuito para facilitar el diseño del sistema. En VHDL esto se obtiene expresando el funcionamiento del diseño mediante una estructura PROCESS la cual se compone de instrucciones secuénciales. Figura 1.2 Modelo de Hardware de VHDL Una entidad en VHDL, que ya es todo un diseño, posee una o más conexiones hacia los sistemas que la rodean. Una entidad puede estar compuesta de otras entidades, de procesos y por componentes, todos ellos trabajando concurrentemente. Cada entidad está definida por su arquitectura la cual se forma de instrucciones en VHDL, ya sean aritméticas, asignaciones a señales o de simples instanciaciones de componentes. Los PROCESS en VHDL son utilizados para modelar tanto circuitos secuénciales como combinacionales utilizando un estilo de descripción secuencial. Para interconectar procesos distintos se utilizan SIGNALS que no son otra cosa que simples cables.

IEC FRANCISCO JAVIER TORRES VALLE



ESTRUCTURAL

Una descripción estructural se utiliza en circuitos que requieren de más de una función, hablando en términos de hardware, para realizar la finalidad del sistema. Para ello segmentamos el sistema en subcircuitos o componentes para facilitar el diseño. Cada componente es caracterizado en particular ya sea utilizando una descripción de flujo de datos o comportamental. Y a la entidad donde se describen las interconexiones de estos componentes recibe el nombre de descripción estructural. Lo que ha hecho que VHDL sea en un tiempo tan corto el lenguaje de descripción de hardware más utilizado por la industria electrónica, es su independencia con la metodología utilizada por cada diseñador, su capacidad de descripción a diferentes niveles de abstracción, y en definitiva la 6

CAPÍTULO I: LENGUAJES DE DESCRIPCIÓN DE HARDWARE

posibilidad de poder reutilizar en diferentes aplicaciones un mismo código.

1.5 I.

METODOLOGÍA DE DISEÑO UTILIZANDO VHDL Definición de los requerimientos del sistema.

Antes de comenzar a realizar la descripción del diseño, es muy importante que se tenga una idea clara de los objetivos y requerimientos. Tales como: funciones del circuito, máxima frecuencia de operación, y los puntos críticos del sistema. Esto servirá para poder definir a grandes rasgos cual será la arquitectura del circuito y así comenzar a realizar la descripción. II.

Descripción del circuito en VHDL.

Antes de comenzar a escribir el código es recomendable seleccionar alguna metodología de diseño como: Top-Down, Bottom-Up, o Flat. Los dos primeros involucran la creación de diseños jerárquicos que generalmente son grandes, y el último es utilizado normalmente en el diseño de circuitos pequeños.

diagrama a bloques con la descripción del funcionamiento de cada bloque, diagramas de estado, o usar alguna tabla de funcionamiento donde se resumen las funciones de cada bloque en particular. Obviamente existe la posibilidad de cometer errores en VHDL, pero generalmente estos son de son de sintaxis, como ";" al final de cada instrucción, o simplemente por no utilizar adecuadamente alguna instrucción. Algunas ocasiones se podrán tener problemas al tratar de sintetizar el código y esto se debe a que se comete el error de pensar en términos de programación en vez de enfocarnos en la descripción del circuito. Cuando se utiliza VHDL el objetivo principal es el diseño de hardware y para ello debemos de utilizar técnicas de síntesis apropiadas al lenguaje, ya que se suele cometer el error de comenzar a programar en vez de describir y esto provoca que nos olvidemos del objetivo que es el hardware. LA CLAVE PARA DESCRIBIR Y SINTETIZAR FÁCILMENTE CIRCUITOS DIGITALES CON VHDL ES PENSAR EN TÉRMINOS DE COMPUERTAS Y REGISTROS Y NO EN FUNCIÓN DE VARIABLES Y SUBRUTINAS III.

Simulación de la descripción en VHDL.

La metodología Top-Down consiste en dividir el sistema en varios bloques de tal manera que se puedan resolver los problemas por separado, además, cada bloque a su vez se puede dividir en otros bloques si es necesario. El objetivo es que cada bloque tenga una función especifica representada mediante un componente que desempeñe dicha función. Bottom-Up es todo lo contrario, comenzamos por caracterizar los componentes básicos del circuito y con estos formamos bloques de mayor tamaño que representen un circuito más complejo que sus partes individuales. La metodología Flat es comúnmente utilizada para diseños pequeños, donde los requerimientos son pocos y no muy complejos por lo que no nos distraen y no perdemos de vista la funcionalidad del circuito. Este método de diseño es el que utilizamos cotidianamente en el diseño de circuitos digitales, y se le llama Flat por que no es necesario seccionar el circuito para poder diseñarlo.

Síntesis consiste en reducir una descripción realizada en un lenguaje de alto nivel de abstracción a un nivel de compuerta que pueda ser implementada en un circuito. Dicho de otra manera, síntesis es el proceso mediante el cual una descripción es convertida en un listado de conexiones (netlist) entre las compuertas, registros, multiplexores, etc. de un dispositivo lógico programable.

Después de decidir cual será la metodología que debemos implementar entonces comenzamos a describir el circuito de acuerdo con lo que se había establecido. Es recomendable utilizar algún tipo de

Por ejemplo, una compuerta XOR puede ser sustituido por su equivalente: A XOR B = A'B+AB', o una instrucción IF puede ser en algunas ocasiones una compuerta AND, en otras

IEC FRANCISCO JAVIER TORRES VALLE

La simulación del código, o simulación funcional, nos permite detectar y corregir errores antes que se implemente en el dispositivo. La modularidad implementada facilita la evaluación del circuito, porque al describir el circuito por bloques podemos analizar cada uno por separado antes de unirlos. Esta simulación equivale a la depuración de programas en los lenguajes de computación. IV.

Síntesis

7

CAPÍTULO I: LENGUAJES DE DESCRIPCIÓN DE HARDWARE

una OR, o inclusive toda una función booleana que involucra diferentes tipos de compuertas. Por lo que el proceso de síntesis depende del dispositivo utilizado. Generalmente una misma función es implementada de diferentes formas de acuerdo al dispositivo que estemos utilizando y esto no cambia la funcionalidad del diseño y será la misma si se selecciona el componente adecuado a la complejidad del diseño. El proceso utilizado para sintetizar un código en un CPLD es conocido como Fitting o ajuste y consiste en adaptar las ecuaciones booleanas en los diferentes bloques lógicos del dispositivo. Cuando se utiliza un FPGA el proceso empleado se le llama Place And Route y consiste en adecuar las ecuaciones a través de varias celdas lógicas. Aunque la finalidad es la misma, la manera en que se sintetiza un código en un CPLD es totalmente distinta a la síntesis de circuitos utilizando FPGAs. Por otro lado la optimización en la conversión del código VHDL a ecuaciones booleanas depende de tres factores: I.

La descripción del circuito.

II. Los recursos disponibles en el dispositivo seleccionado. III. Las directivas de síntesis seleccionadas por el diseñador. La descripción es el punto más importante porque de esto dependen los otros dos. En la descripción no solamente tenemos que “decir” como funciona el circuito, además, tenemos que describir en que “forma” debe de hacerlo. No es lo mismo describir el diseño de un sumador de cuatro bits utilizando cuatro módulos que realizan la suma basándose en propagación de bits de acarreo entre estos, a describir un circuito que realice la suma de manera paralela sin utilizar retroalimentaciones. Finalmente suman pero no lo hacen igual. Los recursos afectan la forma en que son implementadas las ecuaciones lógicas en el dispositivo. Por ejemplo, un contador de 4 bits con borrado asíncrono no puede ser implementado en un 16V8, porque el registro de la macrocelda de salida del dispositivo no cuenta con esta característica. Finalmente las directivas de síntesis influyen directamente en el proceso de cálculo de las ecuaciones que son implementadas en el dispositivo. Algunas de estas directivas son: asignación de pines, sintetizar para maximizar velocidad, sintetizar para optimizar área, y algunas IEC FRANCISCO JAVIER TORRES VALLE

que son descritas en el mismo código, como por ejemplo forzar a que un nodo no sea simplificado o eliminado y pueda ser retenido a la salida de una macrocelda. Cuando se sintetiza para maximizar la frecuencia generalmente quedan funciones con varios términos e incluso hay términos que se repiten en las ecuaciones de los nodos de salida, pero esto se hace para evitar la retroalimentación. V.

Simulación del código sintetizado

Aún y cuando la simulación funcional se haya realizado con éxito, debemos volver a evaluar el circuito que realmente quedó sintetizado en el dispositivo. Ya que las sustituciones de funciones, como el caso de la compuerta XOR, dependerán de las características del dispositivo utilizado. Y es posible que ciertas funciones se ejecuten en más tiempo de los esperado y esto altere el funcionamiento del resto del diseño. Simular el código sintetizado en el circuito permite verificar los retrasos de tiempo de un nodo a otro, evaluar la máxima frecuencia de operación del circuito y verificar que éste funcione adecuadamente. En dado caso que el código no pudiera ser sintetizado podemos tratar de mejorar la descripción, es decir, mejorar el diseño tratando de eliminar registros, compuertas, buffers, etc., encontrar algún error en la descripción, cambiar las directivas de síntesis o definitivamente seleccionar otro dispositivo. VI.

Programación del dispositivo

Después de completar la descripción, la síntesis y la simulación del circuito con éxito, el siguiente paso es generar el archivo que nos permite implementar físicamente nuestro diseño en un dispositivo programable. Todos los programas de VHDL para síntesis generan un archivo con el que podemos programar el dispositivo. Ya sea JEDEC, JTAG, BITSTREAM, etc. de acuerdo al tipo dispositivo y fabricante.

8

CAPÍTULO II: DISPOSITIVOS LÓGICOS PROGRAMABLES

II

DISPOSITIVOS LÓGICOS PROGRAMABLES

IEC FRANCISCO JAVIER TORRES VALLE

9

CAPÍTULO II: DISPOSITIVOS LÓGICOS PROGRAMABLES

2.1

CONCEPTOS FUNDAMENTALES

muestran los circuitos básicos para la mayoría de los PLDs.

La fabricación de dispositivos de lógica programable se basa en los siguientes dos conceptos. •

FUNCIONALIDAD COMPLETA

La cual se fundamenta en el hecho de que cualquier función lógica se puede realizar mediante una suma de productos. •

CELDAS DE FUNCIONES UNIVERSALES.

También denominadas generadores de funciones, son bloques lógicos configurados para procesar cualquier función lógica, similares en su funcionamiento a una memoria. En estas celdas se almacenan los datos de salida del circuito combinacional en vez de implementar físicamente la ecuación booleana.

2.2

DISPOSITIVOS LÓGICOS PROGRAMABLES

Un dispositivo lógico programable, o PLD (Programmable Logic Device), es un dispositivo cuyas características pueden ser modificadas y almacenadas mediante programación. El dispositivo programable más simple es el PAL (Programmable Array Logic). El circuito interno de un PAL consiste en una matriz de conexiones, un matriz de compuertas AND y un arreglo de compuertas OR. Una matriz de conexiones es una red de conductores distribuidos en filas y columnas con un fusible en cada punto de intersección, mediante la cual se seleccionan cuales entradas del dispositivo serán conectadas al arreglo AND cuyas salidas son conectadas al arreglo OR y de esta manera obtener una función lógica en forma de suma de productos. La mayoría de los PLDs están formados por una matriz de conexiones, una matriz de compuertas AND, y una matriz de compuertas OR y algunos, además, con registros. Las matrices pueden ser fijas o programables. Con estos recursos se implementan las funciones lógicas deseadas mediante un software especial y un programador de dispositivos. El tipo más sencillo de matriz programable, que data de los años 60, era una matriz de diodos con un fusible en cada punto de intersección de la misma. En la figura 2.1 se IEC FRANCISCO JAVIER TORRES VALLE

Figura 2.1 Estructuras comúnmente utilizadas en PLDs

2.2.1

MATRIZ GENÉRICA PROGRAMABLE

Una Matriz Genérica Programable, GAL (Generic Array Logic), es una denominación que utilizaba originalmente Lattice Semiconductor y que más tarde se licenció a otros fabricantes. Un GAL en su forma básica es un PLD con una matriz AND reprogramable, una matriz OR fija y una lógica de salida programable mediante una macrocelda. Esta estructura permite implementar cualquier función lógica en forma de suma de productos con un numero de términos definido. En los PLDs no reprogramables la síntesis de las ecuaciones lógicas se realiza mediante la quema de fusibles en cada punto de intersección de los pines de entrada con las compuertas. En un GAL el fusible se reemplaza por una celda CMOS eléctricamente borrable (EECMOS) y mediante programación se activa o desactiva cada celda EECMOS. Una celda activada conecta su correspondiente intersección de fila y columna, y una celda desactivada desconecta dicha intersección. Con esta estructura se puede aplicar cualquier combinación de variables de entrada, o sus complementos, a una compuerta AND para generar cualquier operación producto que se desee. A continuación se muestran las estructuras típicas de un dispositivo GAL y la macrocelda de salida del GAL22V10.

10

CAPÍTULO II: DISPOSITIVOS LÓGICOS PROGRAMABLES

Figura 2.2 Estructura típica de un GAL

FIGURA 2.3 Macrocelda de un GAL22V10

2.3

CPLD

Un CPLD (Complex Programmable Logic Device) extiende el concepto de un PLD a un mayor nivel de integración ya que permite implementar sistemas más eficientes porque utilizan menos espacio, mejoran la confiabilidad en el circuito, y reducen costos. Un CPLD se forma con múltiples bloques lógicos, cada uno similar a un PLD. Los bloques lógicos se comunican entre sí utilizando una matriz programable de interconexiones lo cual hace más eficiente el uso del silicio y conduce a un mejor desempeño. A continuación se explican brevemente las principales características de la arquitectura de un CPLD.

2.3.1

multiplexores. La primera se basa en una matriz de filas y columnas con una celda EECMOS en cada intersección. Al igual que en el GAL esta celda puede ser activada para conectar/desconectar la correspondiente fila y columna. Esta configuración permite una total interconexión entre las entradas y salidas de los bloques lógicos. Sin embargo, estas ventajas provocan que disminuya el desempeño del dispositivo además de aumentar el consumo de energía y el tamaño del componente. En la interconexión mediante multiplexores, existe un multiplexor por cada entrada al bloque lógico. Las vías de interconexión programables son conectadas a las entradas de un numero fijo de multiplexores por cada bloque lógico. Las entradas de selección de estos multiplexores son programadas para permitir que sea seleccionada únicamente una vía de la matriz de interconexiones por cada multiplexor, la cual se propaga hacia el bloque lógico. Cabe mencionar que estos multiplexores no tienen acceso a todas las vías de la matriz por lo que la rutabilidad se incrementa usando multiplexores de mayor tamaño, permitiendo así que cualquier combinación de señales de la matriz de interconexión pueda ser enlazada hacia cualquier bloque lógico. Sin embargo, el uso de grandes multiplexores incrementa el tamaño de dispositivo y reduce su desempeño.

MATRIZ DE INTERCONEXIONES PROGRAMABLES

La matriz de interconexiones programables, PIM Programmable Interconect Matrix (véase la figura 2.4), permite unir los pines de entrada/salida a las entradas del bloque lógico, o las salidas del bloque lógico a las entradas de otro bloque lógico, o inclusive a las entradas del mismo bloque. La mayoría de los CPLDs usan una de dos configuraciones para esta matriz: interconexión mediante arreglo o interconexión mediante IEC FRANCISCO JAVIER TORRES VALLE

Figura 2.4 Arquitectura Básica de un CPLD

2.3.2

BLOQUES LÓGICOS

Un bloque lógico es muy similar a un PLD, cada uno de ellos poseen generalmente una matriz de compuertas AND, una matriz de compuertas OR y una configuración para la distribución de los 11

CAPÍTULO II: DISPOSITIVOS LÓGICOS PROGRAMABLES

productos en las diferentes macroceldas del boque. El tamaño del bloque lógico es una medida de la capacidad del CPLD, ya que de esto depende el tamaño de la función booleana que pueda ser implementada dentro del bloque. Los bloques lógicos usualmente tienen de cuatro a veinte macroceldas. La cantidad de bloques lógicos que puede poseer un CPLD depende de la familia y fabricante del dispositivo.

familia MAX se colocan 4 productos por macrocelda los cuales pueden ser compartidos con otras macroceldas. Cuando un producto puede ser únicamente utilizado por una macrocelda se le conoce como termino - producto dirigido, y cuando estos pueden ser utilizados por otras macroceldas se le llama termino - producto compartido. Mediante estos productos compartidos se mejora la utilización del dispositivo, sin embargo, esto produce un retardo adicional al tener que retroalimentar un producto hacia otra macrocelda y con esto disminuye la velocidad de trabajo del circuito. La forma en que son distribuidos los productos repercute en la flexibilidad que proporciona el dispositivo para el diseñador. Además, que estos esquemas proporcionan también flexibilidad para los algoritmos del programa de síntesis que es el que finalmente selecciona la mejor forma en que deben ser distribuidas las ecuaciones lógicas en el componente.

Figura 2.5 Estructura de un Bloque Lógico en dispositivos de las familias MAX340 y MAX5000

2.3.3

DISTRIBUCIÓN DE PRODUCTOS

Existen pequeñas diferencias en cuanto a la distribución de los productos en un CPLD, esto dependerá de la familia del dispositivo y del fabricante. Obviamente el tamaño de las sumas sigue siendo el factor más importante para la implementación de funciones lógicas. Pero cada fabricante distribuye los productos de diferente forma. La familia MAX de CPLDs que fue desarrollada por Cypress Semiconductor conjuntamente con Altera Corporation, siendo los primeros en sacar al mercado unan familia de CPLDs, Altera la llamó MAX5000 y Cypress por su parte la clasificó como MAX340, la distribución de productos no es igual a la de un PLD. En un dispositivo como el 22V10 tenemos que la suma de productos es fija por cada macrocelda -8, 10, 12, 14 o 16 productos-, en la IEC FRANCISCO JAVIER TORRES VALLE

Figura 2.6 Distribución de Productos en dispositivos de las familias MAX340 y MAX5000

2.3.4

MACROCELDAS

Las macroceldas de un CPLD son similares a las de un PLD. Estas también están provistas con registros, control de polaridad, y buffers para utilizar salidas con alta impedancia. Por lo general un CPLD tiene macroceldas de entrada/salida, macroceldas de entrada y macroceldas internas u ocultas (buried macrocells), en tanto que un 22V10 tiene solamente macroceldas de entrada/salida. Una macrocelda interna es similar a una macrocelda de entrada/salida, sólo que esta no puede ser conectada directamente a una terminal del dispositivo. La salida de una macrocelda 12

CAPÍTULO II: DISPOSITIVOS LÓGICOS PROGRAMABLES

interna va conectada directamente a la matriz de interconexiones programable. Por lo que es posible manejar ecuaciones y almacenar el valor de salida de estas internamente utilizando los registros de estas macroceldas.

En la figura 2.7 se muestran la arquitectura interna de un CPLD de la familia FLASH 370 de Cypress Semiconductors. En esta podemos apreciar las macroceldas de entrada/salida, macroceldas ocultas y celdas de entrada/salida con las que cuenta el dispositivo.

Figura 2.7 Macroceldas de entrada/salida, macroceldas ocultas y celdas de entrada/saliad en dispositivos de la familia FLASH 370 Las macroceldas de entrada, como la que se muestra en la figura 2.8, son utilizadas para proporcionar entradas adicionales para las funciones lógicas. En el diagrama se muestra la macrocelda de entrada de la familia FLASH 370. En general las macroceldas de entrada incrementan la eficiencia del dispositivo al ofrecer algunos registros adicionales con los que se pueden almacenar el valor de la terminal de entrada.

2.3.5

En la figura 2.7 se puede apreciar una celda de entrada/salida, que bien podría considerarse parte del bloque lógico, pero no necesariamente tienen que estar a la salida de un bloque lógico. La función de una celda de entrada/salida es permitir el paso de una señal hacia dentro o hacia el exterior del dispositivo. Dependiendo del fabricante y de la arquitectura del CPLD estas celdas son pueden ser consideradas o no parte del bloque lógico.

2.4 Figura 2.8 Macrocelda de entrada en dispositivos de la familia FLASH 370 IEC FRANCISCO JAVIER TORRES VALLE

CELDA DE ENTRADA/SALIDA

FPGA

La arquitectura de un FPGA (Field Programmable Gate Array) consiste en arreglos de varias celdas lógicas las cuales se comunican unas con otras mediante canales de conexión verticales 13

CAPÍTULO II: DISPOSITIVOS LÓGICOS PROGRAMABLES

y horizontales tal y como se muestra en la figura 2.9.

éste es programado ya no se puede recuperar. La diferencia radica en que en un fusible normal se desactiva deshabilitando la conexión, en tanto que en estos anti - fusibles cuando son programados se produce una conexión por lo que normalmente se encuentran abiertos. La desventaja obvia es que no son reutilizables, pero por el contrario disminuyen considerablemente el tamaño y costo de los dispositivos. •

Figura 2.9 Arquitectura básica de un FPGA

2.4.1

CELDAS LÓGICAS

Cada celda lógica es funcionalmente similar a los bloques lógicos de un CPLD. La diferencia está en que un FPGA normalmente utiliza generadores de funciones en vez de compuertas. Cada uno de estos generadores es como una memoria en donde en vez de implementar la función lógica mediante compuertas, se precalcula el resultado y se almacena en el generador. Las entradas al generador funcionan como un bus de direcciones, y mediante las diferentes combinaciones de las entradas al generador se selecciona el resultado correcto. Esto le da una gran densidad al dispositivo ya que se maneja un gran número de generadores, pero el tiempo de propagación al implementar una función lógica en estos generadores es menor al que se necesitaría si utilizáramos compuertas. La estructura de las celdas lógicas y las formas en que estas pueden ser interconectadas, tanto salidas como entradas de la celda, varían de acuerdo al fabricante. En general una celda lógica tiene menos funcionalidad que la combinación de sumas de productos y macroceldas de un CPLD, pero como cada FPGA tienen una gran cantidad de celdas lógicas es posible implementar grandes funciones utilizando varias celdas lógicas en cascada. Además de las celdas lógicas también es importante la tecnología utilizada para crear las conexiones entre los canales, las más importantes son las siguientes. •

ANTIFUSE

Al igual que la tecnología PROM, un FPGA que utiliza este tipo de tecnología sólo se puede programar una sola vez y utilizan algo similar a un fusible para realizar las conexiones. Una vez que IEC FRANCISCO JAVIER TORRES VALLE

SRAM

Las celdas SRAM son implementadas como generadores de funciones para remplazar la lógica combinacional mediante compuertas y, además, son usadas para controlar multiplexores e interconectar las celdas lógicas entre ellas. En estas el contenido se almacena mediante un proceso de configuración en el momento de encendido del circuito que contiene al FPGA. Ya que al ser SRAM, el contenido de estos bloques de memoria se pierde cuando se deja de suministrar la energía. La información binaria de las celdas SRAM generalmente se almacena en memorias seriales EEPROM conocidas como memorias de configuración. En el momento de encendido del circuito toda la información binaria es transferida a las celdas del FPGA mediante el proceso de configuración el cual es generalmente automático y el propio FPGA contiene un circuito interno que se encarga de hacer todo el proceso. Un FPGA que tiene una gran cantidad de canales de interconexión tiende a tener pequeñas celdas lógicas con muchas entradas y salidas en comparación con el número de compuertas que tiene la celda, este tipo de FPGAs generalmente utilizan tecnología ANTIFUSE. Un FPGA que tiene una estructura pequeña en canales de interconexión tiende a tener grandes celdas lógicas con pocas entradas y salidas en comparación con el número de compuertas que hay en la celda. Este tipo de FPGA generalmente está fabricado con tecnología SRAM. Una arquitectura con celdas lógicas pequeñas permite utilizar todos los recursos del dispositivo. Sin embargo, si las celdas lógicas son muy pequeñas entonces tendremos que utilizar un gran número de estas para poder implementar funciones lógicas de varios términos, lo cual agrega un tiempo de retardo por cada celda lógica implementada. Cuando el tamaño de la celda lógica es grande sucede lo contrario, en este tipo de celdas lógicas es posible utilizar un gran número de compuertas por lo que podemos 14

CAPÍTULO II: DISPOSITIVOS LÓGICOS PROGRAMABLES

implementar funciones lógicas de varios términos con pocas celdas lógicas. El que el tamaño de la celda sea grande no afecta la frecuencia máxima de trabajo porque estamos hablando de que existe un gran numero de compuertas que pueden ser usadas en la función paralelamente, siendo el mismo tiempo de retardo para todas. Sin embargo, cuando las funciones son pequeñas en comparación con el tamaño de la celda no es necesario utilizar todas

las compuertas de la celda, por lo que este tipo de celdas no son precisamente las más indicadas para desempeñar pequeñas funciones. La tecnología SRAM es utilizada por Altera, Lucent Technologies, Atmel, Xilinx y otros. La tecnología ANTIFUSE es utilizada por Cypress, Actel, QuickLogic, y Xilinx. A continuación se muestran algunas celdas lógicas de distintos fabricantes.

Figura 2.10 Bloque Lógico Configurable de la familia XC4000 de Xilinx, Inc.

IEC FRANCISCO JAVIER TORRES VALLE

15

CAPÍTULO II: DISPOSITIVOS LÓGICOS PROGRAMABLES

Figura 2.11 Elemento Lógico de la familia APEX20K de Altera Corporation

Figura 2.12Modulo Lógico de la familia ACT3 de Actel Corporation

IEC FRANCISCO JAVIER TORRES VALLE

16

CAPÍTULO III: SINTAXIS DEL LENGUAJE

III IEC FRANCISCO JAVIER TORRES VALLE

SINTAXIS DEL LENGUAJE

17

CAPÍTULO III: SINTAXIS DEL LENGUAJE

3.1

INTRODUCCIÓN A LA DESCRIPCIÓN EN VHDL DE CIRCUITOS DIGITALES

En este capítulo se discutirán los elementos fundamentales de VHDL que son comúnmente utilizados en síntesis de circuitos. Primero se exponen el diseño de multiplexores y comparadores con VHDL para hacer una analogía con la metodología convencional de diseño. Ya que es muy importante comprender porque VHDL es un lenguaje para describir y no para programar. Posteriormente se expondrán los elementos básicos del lenguaje, tales como: identificadores, objetos de datos, tipos de datos, operadores y tipos de instrucciones.

3.1.1

z0

1

1

1

Utilizando cualquier técnica de simplificación de ecuaciones obtenemos: z0 = s0’·x0+s0·x1. Y el circuito quedaría como se muestra en la figura 3.2.

Figura 3.2 Circuito del Multiplexor 2 a 1

MULTIPLEXORES

Antes de examinar la descripción en VHDL de multiplexores, analizaremos el funcionamiento interno y la metodología tradicional de diseño utilizada en este tipo de circuitos para después realizar la descripción del circuito en VHDL. En la figura 3.1 se describe externamente a un multiplexor y la tabla resume su funcionalidad. x0 x1

1

ENTRADA SALIDA s0

z0

0

x0

1

x1

s0

Figura 3.1 Multiplexor 2 a 1 La tabla de verdad completa sería la siguiente. ENTRADAS

SALIDA

s0

x0

x1

z0

0

0

0

0

0

0

1

0

0

1

0

1

0

1

1

1

1

0

0

0

1

0

1

1

1

1

0

0

IEC FRANCISCO JAVIER TORRES VALLE

En VHDL podemos describir el circuito ya sea mediante la descripción completa de todas las combinaciones de las entradas, utilizando la tabla simplificada de funcionamiento o si lo deseamos es posible realizar la descripción compuerta por compuerta del circuito. Al primer estilo se le conoce como de flujo de datos y en este debemos describir como fluyen los datos de entrada hacia la salida. A continuación se muestra la descripción de flujo de datos del multiplexor con VHDL utilizando la tabla completa de funcionamiento del mismo. Las palabras en negritas son palabras reservadas en VHDL y los comentarios comienzan con dos guiones (--). ENTITY multiplexor IS PORT (s0, x0, x1: IN bit; z0: OUT bit); END multiplexor; ARCHITECTURE data_flow OF multiplexor IS SIGNAL temp: bit_vector (2 DOWNTO 0); BEGIN z0 Save As y en la opción de Guardar en, selecciona el nombre de la carpeta que usaste en el paso número 4 (c:\nuevo). Una vez que hayas seleccionado el directorio, escribe el nombre de archivo, se sugiere el nombre nuevo, con la extensión .vhd, ya que de esta manera se especifica un archivo que contiene un código en VHDL. Luego de hacer esto, guarda tu archivo. 9. Cierra el archivo de texto. 10. Selecciona Project > Add Files, te aparecerá una ventana que debe de tener tu archivo nuevo.vhd , haz click en Add, y posteriormente en OK.

Figura 4.6

Figura 4.5

IEC FRANCISCO JAVIER TORRES VALLE

11. Tu archivo de texto se ha convertido en un archivo de VHDL y está dentro de tu proyecto, todo lo que programes, será compilado en el dispositivo que especificaste. En tu ventana de proyecto (si no se encuentra abierta, la puedes activar haciendo View > Project Window) debe de aparecer un icono en forma de hoja que tiene el nombre de tu proyecto. Haz click en esta hoja y te debe de aparecer un archivo con la instrucción: library ieee; solo que ahora la palabra library está 56

CAPÍTULO IV: DESCRIPCIÓN DE CIRCUITOS DIGITALES

en color azul porque es una palabra reservada. Esto demuestra que haz hecho correctamente el procedimiento.

1. Una vez que se ha creado un nuevo proyecto en Galaxy, dentro del menú Project selecciona Compiler Options.

Figura 4.7 12. Si la configuración de colores es la normal, notarás que todas las palabras reservadas se muestran en color azul y los comentarios en color rojo. Ahora ya puedes comenzar a hacer tu descripción en VHDL.

4.2

SIMULACIÓN DE PROYECTOS

Figura 4.8 2. Lo anterior abrirá la ventana de opciones de compilación, dentro de esta se encuentra una sección para elegir el formato de los retardos para simular el circuito Simulation—Timing Model. Aquí es donde debes de seleccionar el formato 1164/VHDL.

Active - HDL de la empresa Aldec Inc. es un simulador que utiliza un archivo de post - síntesis creado por WARP. Éste es un archivo .vhd con los retardos de tiempo del código sintetizado en el dispositivo seleccionado. Este tema tiene por objetivo dar una pequeña introducción a este simulador de VHDL en las siguientes tres secciones. 1. Formato de simulación 1164/VHDL. 2. Simulación. 3. Tipos de señales de estimulación.

FORMATO DE SIMULACIÓN 1164/VHDL El archivo de entrada para Active - HDL es un modelo de simulación post - síntesis generado cuando se compila un archivo .vhd en el dispositivo elegido. En WARP es posible crear archivos con diferentes formatos para simulación post - síntesis. Active - HDL requiere de un archivo con el formato de simulación IEEE - 1164 / VHDL. Para crear este archivo post - síntesis debes seguir el siguiente procedimiento. IEC FRANCISCO JAVIER TORRES VALLE

Figura 4.9 3. Asegúrate que se encuentre habilitado el cuadro de Enable Testbench Output.

4.2.1

PROCESO DE SIMULACIÓN

El proceso de simulación lo podemos resumir en los siguientes siete pasos. 57

CAPÍTULO IV: DESCRIPCIÓN DE CIRCUITOS DIGITALES

1. Cargar un archivo con el formato de simulación 1164/VHDL. 2. Iniciación de la simulación. 3. Agregar señales. 4. Asignar señales de estimulación. 5. Correr la simulación. 6. Observación de la simulación. 7. Guarda la simulación. 1. - CARGA DEL ARCHIVO El primer paso es abrir el programa Active-HDL Sim que normalmente se encuentra en Menu Inicio > Programas > Warp > Active-HDL Sim. Para cargar el archivo selecciona Open Vhdl dentro del Menú File.

2. - INICIACIÓN DE LA SIMULACIÓN Para iniciar la simulación, activa el simulador utilizando la opción Initialize Simulation, dentro del menú Simulation. Después abre una ventana para el análisis de señales Waveform Window, si es que no se encontrara ya una abierta.. Para crear una nueva ventana de este tipo, haz clic en el icono dentro de la barra estándar de trabajo o selecciona File > New Waveform.. 3. - AGREGANDO SEÑALES El siguiente paso es agregar señales a la ventana de análisis, para esto selecciona Add Signals...en el menú Waveform. La ventana para agregar señales aparecerá con una lista de todas las señales de entrada, salida, entrada/salida y nodos internos de conexión disponibles en el diseño. Para agregar alguna de las señales que se encuentran en esta lista basta con hacer doble clic sobre el nombre de la señal. Si deseas agregar varias señales al mismo tiempo, puedes seleccionarlas mediante la tecla control y haciendo clic sobre cada señal que deseas agregar para después hacer clic sobre el botón Add que se encuentra en la parte inferior de la ventana.

Figura 4.10 Es importante mencionar que el archivo con el formato 1164/VHDL se crea en el subdirectorio vhd dentro del directorio de trabajo del proyecto una vez que éste es compilado. Si se selecciona por accidente el archivo .vhd creado por el usuario, el compilador del programa generará varios errores y no podrá ser simulado. Una vez que el archivo apropiado es cargado, se desplegarán una serie de mensajes dentro de la ventana de compilación. Uno de los mensaje que debería aparecer cuando el archivo es compilado correctamente es el siguiente:

Figura 4.11 4. - TIPOS DE SEÑALES DE ESTIMULACIÓN Las señales de estimulación son utilizadas para definir diferentes impulsos a los puertos de entrada del diseño que esta siendo simulado. Para seleccionar alguno de estos tipos primero selecciona la señal y después selecciona Waveform > Stimulators..., a continuación se describe brevemente los diferentes tipos de señales de estimulación de Active-HDL Sim.

-- Compile success 0 Errors 0 Warnings Analysis time: 3.0 [s].

IEC FRANCISCO JAVIER TORRES VALLE

58

CAPÍTULO IV: DESCRIPCIÓN DE CIRCUITOS DIGITALES

VALOR Con este tipo de estimulador asignamos un valor constante a la señal especificada. HOTKEY Con este estimulador podemos estar cambiando el valor de la señal presionando una tecla. Cuando asignamos este tipo de estimulador es conveniente asignar una lista de valores. Cada que presionemos la tecla asignada, estaremos cambiando entre los valores de esta lista. Figura 4.12 CLOCK Sirve para definir señales de reloj definidas con los siguientes parámetros: frecuencia, valor inicial, ciclo de trabajo y tiempo de inicio. CUSTOM Un estimulador personalizado se crea editando los valores deseados en la ventana de simulación. Estado en el modo de edición, al estimulador de entrada se le puede asignar un estado bajo o un estado alto presionando '1' o '0' respectivamente. FORMULA Un estimulador del tipo formula produce una señal definida por una simple sintaxis. La señal es definida con secuencias pares de valor - tiempo. Con la componente tiempo indicamos el momento en el que la señal asume el valor especificado. La unidad del tiempo es en picosegundos. Para repetir durante un periodo especificado, se agrega el modificador -r. La sintaxis del estimulador tipo formula se muestra a continuación. [, , , ...] [ -r ]

Para una descripción más completa de las características del simulador consulta la ayuda del programa. 5. - CORRIENDO LA SIMULACIÓN Para correr la simulación selecciona Simulation > Run. La simulación se detendrá después que la duración especificada haya sido terminada. En este momento las señales de estimulación para los puertos de entrada pueden ser alterados y producirán efectos sobre la simulación cuando esta continué. Para volver a iniciar la simulación selecciona Simulation > Restart Simulation. 6. - OBSERVANDO LA SIMULACIÓN Varias propiedades pueden ser manipuladas para mejorar la apariencia de la simulación. A continuación se describen brevemente algunas de estas propiedades. BUS La líneas individuales que forman un bus pueden ser mostradas y editadas. Para mostrarlas haz clic sobre "+" que se encuentra a junto al nombre el bus. Las señales de estimulación pueden ser asignadas a cada línea del bus o al bus completo. COLOR

EJEMPLO '0000' 0 ps, '1111' 100000 ps, '0011' 200000 ps -r 300000

PREDEFINIDOS Los estimuladores predefinidos son una serie de señales tipo clock con diferentes frecuencias o señales del tipo formula que pueden ser asignados a las señales. Para agregar un nuevo estimulador a esta lista, lo puedes hacer en la misma ventana dentro del cuadro Predefined. IEC FRANCISCO JAVIER TORRES VALLE

Las señales de la simulación pueden ser de diferentes colores para una mejor claridad cuando varias señales son desplegadas. Para agregar color a todas las señales visibles, selecciona Waveform > Colorize Waveforms, esto asignará diferentes colores, arbitrariamente a cada señal dentro de la ventana de simulación. Para asignar color a cada señal, haz clic con el boton derecho sobre el nombre de la señal y selecciona la opción Properties..

59

CAPÍTULO IV: DESCRIPCIÓN DE CIRCUITOS DIGITALES

ZOOM Para aumentar o reducir la escala de tiempo de la simulación, selecciona View > Zoom > In/Out/Full. BOOKMARKS Para colocar marcas sobre la ventana de simulación primero selecciona Waveform > Select Mode. Cuando este modo se encuentra seleccionado, es posible colocar marcas sobre diferentes puntos de la simulación para una rápida referencia a ciertos puntos importantes de la misma. Para colocarlas primero haz clic con el botón izquierdo en donde deseas colocar una marca, después selecciona Search > Toggle Bookmark. Utilizando Next/Previous Bookmark del mismo menú puedes cambiar entre una marca y otra dentro de la simulación. Las marcas son desplegadas como un triángulo azul sobre la escala de tiempo en la ventana de simulación. Para eliminar alguna marca selecciona Waveform > Edit Mode y después haz clic con el botón izquierdo sobre la marca que deseas eliminar.

ventas de simulación abiertas. La extensión de los archivos de simulación en Active-HDL Sim es .awf.

4.3

COMPARADORES

El objetivo de este tema es crear, sintetizar, y simular la descripción de circuitos comparadores de magnitud utilizando WARP. PROCEDIMIENTO 1. Primero crearemos un proyecto para el ejemplo del comparador visto en el tema 3.1.2 Antes que nada debemos crear el proyecto dentro de un directorio en el que se encontrarán todos los archivos del proyecto (.pfg, .vhd, .jed, .rpt, etc. ). Se sugiere crear primero una carpeta para todos los proyectos VHDL y dentro de esa carpeta crear otra carpeta para el presente proyecto, por ejemplo c:\vhdl_proj\comparador_1, con el nombre comparador_1.

MODO DE MEDICIÓN Para entrar al modo de medición selecciona Waveform > Measurement Mode. En este modo es posible desplegar el tiempo exacto entre dos eventos de la simulación. Para obtener esta información coloca el puntero sobre una transición negativa o positiva, cuando el puntero es colocado sobre alguna transición debe cambiar a color verde, presiona el botón izquierdo sobre la transición y arrastra el puntero hasta otra transición de cualquier señal dentro de la ventana de simulación y entonces suelta el botón. La medida exacta entre estas dos transiciones se desplegara como una etiqueta entre las dos transiciones. Si la etiqueta no es mostrada o no se ve completa, amplia el alto de la fila haciendo clic con el botón derecho sobre alguna de las señales que intervienen en la medición y después selecciona Properties, dentro de la venta de propiedades aumenta la altura modificando el valor del cuadro de texto Height. Para eliminar alguna etiqueta de medición selecciona Waveform > Edit Mode, después seleciona la etiqueta y presiona suprimir 7. - GUARDANDO LA SIMULACIÓN Existen dos formas de guardar la simulación. Guardar solamente la simulación de la ventana activa o guardar todas las simulaciones de las IEC FRANCISCO JAVIER TORRES VALLE

Figura 4.13 2. Seleccionaremos un 22V10 con empaquetado tipo DIP para sintetizar el código. 3. Ahora creamos un nuevo archivo de texto para editar el código (File > New > Text File). Este archivo debe ser guardado con extensión .vhd y en la misma carpeta del proyecto. Se sugiere guardarlo como: c:\vhdl_proj\comparador_1\comparador1.vhd 4. A continuación se muestra la tabla de funcionamiento de este comparador y basándose en ella haremos el código de descripción en VHDL. Primero utilizaremos el estilo de 60

CAPÍTULO IV: DESCRIPCIÓN DE CIRCUITOS DIGITALES

descripción de flujo de datos, que es el mismo que se utilizó cuando se expuso el ejemplo en el tema 3.1.2. TABLA DE FUNCIONAMIENTO ENTRADAS

SALIDAS

xy

x_may_y

'1'

a agregarlo al presente proyecto. Para agregarlo lo hacemos desde el menú Project y dentro de éste hacemos clic en Add Files... (Project > Add Files...). Una vez que aparece la ventana para agregar archivos al proyecto, seleccionamos el archivo comprador_1.vhd y presionamos el botón "Add". Si por error hacemos clic en la opción Add All Files, todos los archivos .vhd dentro de la carpeta del proyecto se agregaran al mismo. En este caso el único archivo .vhd que debería estar dentro de la carpeta del proyecto es comparador_1.vhd, lo cual en esta ocasión no nos afectará. En caso de que hubiera más de un archivo .vhd y no deseamos tenerlo dentro del proyecto basta con seleccionarlo en la ventana de proyecto y presionar la tecla suprimir, o también desde Project > Remove Selected Source File(s). Si la ventana de proyecto no está visible entonces seleccionamos View > Reset Docking Windows.

5. Abajo se muestra el listado del comparador correspondiente al estilo de descripción de flujo de datos. Este listado debemos editarlo dentro del archivo comparador_1.vhd. ENTITY comparador IS PORT ( x: IN bit_vector(3 DOWNTO 0); y: IN bit_vector(3 DOWNTO 0); x_may_y: OUT bit; equals: OUT bit; x_men_y: OUT bit ); END comparador; ARCHITECTURE comparador OF comparador IS BEGIN equals Active-HDL Sim.

Figura 4.17 10. Una vez iniciado el simulador, ahora abrimos el archivo .vhd de postsíntesis como se explica a continuación. Primero seleccionamos File > Open VHDL.

Figura 4.16 En el archivo .rpt se muestra un informe de los resultados de la compilación. En éste se encuentran IEC FRANCISCO JAVIER TORRES VALLE

62

CAPÍTULO IV: DESCRIPCIÓN DE CIRCUITOS DIGITALES

Figura 4.18 Para después abrir el archivo .vhd de postsíntesis, el cual debería estar (si seguiste correctamente todos los pasos) en el subdirectorio: c:\vhdl_proj\comparador_1\vhd\comparador1. vhd

7 us, 1000 8 us, 1001 9 us, 1010 10 us, 1011 11 us, 1100 12 us, 1101 13 us, 1110 14 us, 1111 15 us -r 16 us

Y al bus "y" también le asignaremos un estimulador del mismo tipo con la siguiente formula. 0000 0 ns, 1111 1 us, 1110 2 us, 1101 3 us, 1100 4 us, 1011 5 us, 1010 6 us, 1001 7 us, 1000 8 us, 0111 9 us, 0110 10 us, 0101 11 us, 0100 12 us, 0011 13 us, 0010 14 us, 0001 15 us -r 16 us

13. Una vez que asignamos los estimuladores iniciamos la simulación seleccionando: Simulation > Initialize Simulation.

Figura 4.19 11. Hecho lo anterior ahora agregamos las señales y/o puertos que deseamos simular. Seleccionamos Waveform > Add Signals...

14. Una vez iniciada la simulación ahora corremos la simulación. Para poder correrla existen tres opciones: correr completamente la simulación (el máximo es de 2ms+3), correrla y que se detenga en un momento especifico, o adelantar la simulación solamente por algún tiempo. Para correr la simulación completamente seleccionamos Simulation > Run. Si queremos correr la simulación y especificar un tiempo en el que debe detenerse seleccionamos Simulation > Run Until... . Para correr la simulación "por pasos" o por tiempos especificados, seleccionamos Simulation > Run For. El tiempo de paso se especifica a un lado del icono de Run For. Esta última opción es la más practica al momento de simular descripciones.

Figura 4.21 Figura 4.20 Ahora seleccionamos los puertos como se explicó en el tema 4.2. En este ejercicio seleccionaremos solamente los puertos declarados en la entidad, tal y como se muestra en la figura 4.22 12. Lo siguiente es asignar señales de estimulo a los puertos de entrada. Al bus "x" le asignaremos un estimulador tipo formula usando la siguiente formula. 0000 0 ns, 0001 1 us, 0010 2 us, 0011 3 us, 0100 4 us, 0101 5 us, 0110 6 us, 0111

IEC FRANCISCO JAVIER TORRES VALLE

Si deseas utilizar Run For cerciórate que el tiempo de "paso" sea de 1 us. Ya que cuando asignamos los estimuladores el valor de los buses de entrada cambia cada 1 us. Si deseas utilizar Run Until... bastara con especificar un tiempo de 32 us para observar como se comporta el ciclo de asignaciones que especificamos mediante la formula, el tiempo mínimo para comprobar todos los valores (por lo menos un ciclo) es de 16 us. 15. A continuación en la figura 4.23 se muestran los resultados de la simulación. Si seguiste correctamente todos los pasos deberías obtener algo similar a lo mostrado en la siguiente figura. 63

CAPÍTULO IV: DESCRIPCIÓN DE CIRCUITOS DIGITALES

Figura 4.22

Figura 4.23

Figura 4.24 IEC FRANCISCO JAVIER TORRES VALLE

64

CAPÍTULO IV: DESCRIPCIÓN DE CIRCUITOS DIGITALES

4.4

00

a

01

b

10

c

descripción de circuitos digitales utilizando WARP. De esta librería se llamó el paquete std_arith, el cual contiene muchas funciones que facilitan el uso de vectores tipo std_logic con enteros. De no haber utilizado este paquete no podríamos hacer ninguna de la comparaciones que están en la asignación condicional WHEN... ELSE. Es decir, no es posible hacer la comparación "selec = 3" porque "selec" es del tipo std_logic_vector y "3" es un número entero. El paquete std_logic_1164 contiene los tipos de datos std_logic y std_logic_vector que comúnmente utilizamos por lo que es necesario cargar el paquete para poder utilizar estos tipos, sin embargo, no contiene funciones de comparación entre tipos std_logic (o arreglos de este) y enteros. Como la librería es de propia del sintetizador, es decir, que siempre esta cargada dentro del área de trabajo del proyecto o "work", podemos llamar el paquete como se muestra a continuación.

11

d

USE work.std_arith.ALL;

MULTIPLEXORES

En este tema el objetivo es elaborar descripciones de circuitos multiplexores utilizando los tres estilos de descripción de VHDL. PROCEDIMIENTO Para la síntesis utilizaremos un 22V10 siguiendo la siguiente tabla de funcionamiento en los tres estilos de descripción. TABLA DE FUNCIONAMIENTO selec salida

SIMULACIÓN

4.4.1

DESCRIPCIÓN DE FLUJO DE DATOS

LIBRARY ieee; USE ieee.std_logic_1164.ALL; LIBRARY cypress; USE cypress.std_arith.ALL ; ENTITY multiplexor IS PORT(a, b, c, d: IN std_logic_vector (3 DOWNTO 0); selec: IN std_logic_vector (1 DOWNTO 0); salida: OUT std_logic_vector (3 DOWNTO 0)); END multiplexor;

Para la simulación se sugiere que asignes un estimulador tipo formula a los vectores de entrada, y al vector "selec" le asignes un estimulador tipo "HOTKEY". Una vez que agregaste las señales a la simulación, selecciona con el puntero el vector "selec", después seleccionas Waveform > Stimulators..., cuando aparezca el cuadro de estimuladores selecciona "HOTKEY" dentro de "Stimulator type", y en "Press new hotkey" escribe la letra "s" o cualquier otra.

ARCHITECTURE data_flow OF multiplexor IS BEGIN salida Run For, o presionando la tecla "F5". Y cada que lo desees presionas la tecla "s" para cambiar el valor del vector "selec". En la figura 4.24 se muestran los resultados de la simulación. A continuación se muestran las ecuaciones obtenidas utilizando el estilo de descripción de flujo de datos. Estas ecuaciones deben ser las mismas para cualquier estilo que utilicemos, ya que estamos describiendo el mismo multiplexor sólo que de manera diferente y esto no implica que las ecuaciones vayan a ser distintas. Cuando compiles este multiplexor, en cualquiera de los tres estilos, consulta las ecuaciones dentro del archivo .rpt y verifica que sean iguales.

IEC FRANCISCO JAVIER TORRES VALLE

ENTITY multiplexor IS PORT(a: std_logic_vector (3 DOWNTO 0); b: std_logic_vector (3 DOWNTO 0); c: std_logic_vector (3 DOWNTO 0); d: std_logic_vector (3 DOWNTO 0); selec: std_logic_vector (1 DOWNTO 0); salida: OUT std_logic_vector (3 DOWNTO 0)); END multiplexor; ARCHITECTURE behavorial OF multiplexor IS BEGIN PROCESS(selec, a, b, c, d) VARIABLE selec_int: integer; BEGIN selec_int := to_integer(selec); CASE selec_int IS WHEN 0 => salida salida salida salida NULL; END CASE; END PROCESS; END behavorial;

66

CAPÍTULO IV: DESCRIPCIÓN DE CIRCUITOS DIGITALES

Dentro del proceso se hace uso de un objeto de datos del tipo variable declarado como entero. Al inicio del proceso se hace la asignación "selec_int
View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF