curso de vhdl

77
1 Instructores: M.C. Heraclio Heredia Ureta Dr. Modesto G. Medina Melendrez Instituto Tecnológico de Culiacán Departamento de Ingeniería Eléctrica- Electrónica Agosto de 2011 Curso: Programación en VHDL

Upload: adan-aguirre

Post on 18-Jun-2015

2.254 views

Category:

Education


3 download

TRANSCRIPT

Page 1: Curso de vhdl

1

Instructores: M.C. Heraclio Heredia Ureta

Dr. Modesto G. Medina Melendrez

Instituto Tecnológico de Culiacán

Departamento de Ingeniería Eléctrica-Electrónica

Agosto de 2011

Curso: Programación en VHDL

Page 2: Curso de vhdl

2

1. Instalación de software MAXPLUS II.2. Estado actual de la lógica programable. 3. VHDL: su organización y arquitectura. 4. Diseño lógico combinacional mediante VHDL. 5. Diseño lógico secuencial con VHDL. 6. Integración de entidades en VHDL. 7. Programación de PLDs

CONTENIDO:

Page 3: Curso de vhdl

3

1. Instalación de software MAXPLUS II.

Page 4: Curso de vhdl

4

Pasos para instalar el software MAX+PLUS II Student Edition Version 10.2 de Altera siga los siguientes pasos:

1. Presione la tecla bandera de Windows junto con la tecla R.

2. Aparecerá la ventana de ejecutar, ahí escribes cmd y luego presionas aceptar.

3. Posteriormente, aparecerá la ventana de comandos de ms-dos, ahí presionas dir/p y enter.

4. Luego copias el número de serie del volumen del disco duro que aparecerá en la parte superior derecha de la ventana de comandos de ms-dos, estos son 8 caracteres hexadecimales como por ejemplo BE1B-8965.

5. Este número de serie del volumen del disco duro lo necesitas para que te envíen la licencia del software MAX+PLUS II de Altera que lo tienes que solicitar de la página: http://www.altera.com/support/licensing/lic-university.html

6. Seleccione la Versión 10.2 del Software MAX+PLUS II Edición Estudiantil y presione continuar.

Page 5: Curso de vhdl

5

Pasos para instalar el software MAX+PLUS II Student Edition Version 10.2 de Altera siga los siguientes pasos (continuación):

7. Luego aparecerá una ventana donde se solicite el número de serie del volumen del disco duro, ingrésalo y presiona continuar.

8. Luego tienes que llenar algunos datos personales como son: Nombre, Apellido, Dirección, Ciudad, Estado, País, Código postal, Teléfono, y Correo Electrónico. Una vez llenado los datos presiona continuar. 9. Luego llena un formulario con las respuestas que tú consideres correctas y presiona finalizar.

10. A tu correo te llegará un archivo con el nombre license.dat, Lo descargas y lo guardas en el disco duro.

11. Luego instalas el software MAX+PLUS II de Altera ejecutando el archivo start.htm del libro Sistemas Digitales Principios y Aplicaciones versión 10 de Ronald J. Tocci, que les pase en una memoria.

Page 6: Curso de vhdl

6

12. Una vez abierta la página web, Presiona el botón Max+Plus II y luego instala la opción MAXplus_student102.

13. Se empezará a instalar el Max+Plus II 10.2. Una vez que lo instales el software, ejecútalo para que le des la ruta donde se encuentra el serial de la licencia.

14. Se recomienda que este archivo license.dat que te envían por correo lo guardes en el mismo directorio donde se encuentra el Max+Plus II.

15. Para darle la ruta de la licencia sigue estos pasos:a. Abre el Max+Plus II.b. Seleccione options de la barra de menus y luego license setup...c. Luego le das la ruta donde guardaste el archivo license.dat con la tecla browse..., y luego la tecla ok.

16. Con este último paso finalizaste la instalación del Max+Plus II.

Pasos para instalar el software MAX+PLUS II Student Edition Version 10.2 de Altera siga los siguientes pasos (continuación):

Page 7: Curso de vhdl

7

2. Estado actual de la lógica programable.

Page 8: Curso de vhdl

8

2.1. Dispositivos lógicos programables (PLD).

La integración de sistemas se ha ido superando con las nuevas tecnologías de fabricación.

Se han podido obtener componentes de mayor complejidad. El diseño ASIC (Circuitos Integrados de Aplicación Específica) domina la tendencia en aplicaciones a nivel microelectrónica, pero solo es conveniente con altos volúmenes de producción.

El desarrollo de sistemas complejos requiere bastante tiempo de desarrollo.

Una forma más rápida y directa es utilizar lógica programable. La lógica programable independiza el proceso de diseño del proceso de fabricación.

Page 9: Curso de vhdl

9

Existe una gran variedad de dispositivos lógicos programables (PLDs).

PROM Programmable Read-Only Memory. PLA Programmable Logic Array. PAL Programmable Array Logic. GAL Generic Logic Array. CPLD Complex PLD. FPGA Field Programmable Gate Array.

Los FPGAs y los CPLDs presentan las mismas ventajas que losASIC pero con un menor costo.

El diseño se basa en bibliotecas y mecanismos de mapeo defunciones.

La implementación requiere una fase de programación,generalmente rápida.

Page 10: Curso de vhdl

10

2.2. Dispositivos lógicos programables de alto nivel de integración.

Se crearon para integrar con mayor rapidez una mayor cantidad de dispositivos en un circuito (SOC-System on Chip). Permiten cambios en el diseño digital.

Un CPLD consiste de un arreglo de múltiples PLDs agrupados como bloques en un chip.

La unidad PI (interconexión programable) se encarga de interconectar los bloques lógicos y los bloques de entrada/salida.

Page 11: Curso de vhdl

11

El FPGA se basa en arreglos de compuertas. Esta formado por arreglos de bloques lógicos configurables (CLBs), que se comunican entre sí y con las terminales de entrada/salida.

Los CLB están ordenados en arreglos de matrices programables. La comunicación se lleva a cabo por alambrados llamados canales de comunicación.

Page 12: Curso de vhdl

12

Un CLB es funcionalmente completo, ya que puede Implementar cualquier función booleana representada en forma de suma de productos.

El diseño lógico dentro de un CLB se implementa con bloques generadores de funciones o LUTs (Look Up Table). La diferencia entre FPGAs y CPLDs radica en el número de flip-flops contenidos.

Características CPLD FPGA Arquitectura -Similar a un PLD. -Similar a los arreglos de

compuertas. -Más combinacional -Más registros + RAM.

Densidad -Baja a media -Media alta. Aplicaciones -Contadores rápidos. -Aplicaciones de

-Máquinas de estado. Arquitecturas de computadora -Lógica Combinacional. -DSP.

-Diseños con registros.

Page 13: Curso de vhdl

13

2.3. Campos de aplicación de la lógica programable.

Los PLD sencillos se utilizan como remplazo de circuitos LSI y MSI.

Los CPLD y FPGA se aplican en áreas como:

telecomunicaciones, computación, redes, medicina, procesamiento digital de señales, multiprocesamiento de datos, microondas, telefonía celular, filtros digitales programables, entre otros.

Los CPLD se utilizan especialmente a nivel industrial. Los FPGA son recomendables en aplicaciones secuenciales complejas.

Page 14: Curso de vhdl

14

2.4. La lógica programable y los lenguajes de descripción en hardware (HDL).

En los 60s se desarrollaron:

IDL de IBM, TI-HDL de Texas Instruments, ZEUS de General Electric, entre otros, orientados al área industrial; éstos no estaban disponibles;

AHPL, DDL, CDL, ISPS, entre otros, orientados al área académica; éstos carecían de soporte y mantenimiento adecuado.

En los 80s surgieron VHDL, Verilog, ABEL 5.0, AHDL, entre otros.

En los 50s aparecieron los HDL como una opción para el desarrollo de sistemas complejos.

Page 15: Curso de vhdl

15

El departamento de defensa de Estados Unidos creó el lenguaje VHDL, como parte del programa “Very High Speed Integrated Circuits” (VHSIC).

En 1985 surgió la versión 7.2 definida entre el gobierno, industrias y universidades.

En 1987 la IEEE publicó el estándar IEEEstd 1076-1987. En 1988, VHDL fue reconocido como un estándar ANSI (American National Standards Institute).

En 1993 se adoptó el estándar adicional VHDL IEEE1164. Hoy en día VHDL se considera como el lenguaje estándar para la descripción, modelado y síntesis de circuitos digitales y sistemas complejos.

2.5. Historia del Desarrollo de la programación en VHDL

Page 16: Curso de vhdl

16

2.5. Historia del Desarrollo de la programación en VHDL

Desarrollo de Lenguajes para Descripción de Hardware

1970’s IDL/IBM, HDL/TI, ZEUS/GE

Desarrollo en Área Industrial

AHPL, DDL, CDL, ISPS Desarrollo en Área

Académica

1970’s IDL/IBM, HDL/TI, ZEUS/GE

Desarrollo en Área Industrial

AHPL, DDL, CDL, ISPS Desarrollo en Área

Académica

1980’sAHDL, ABEL, CUPL

VHDL y Verilog

1980’sAHDL, ABEL, CUPL

VHDL y Verilog

Departamento de la Defensa de los E.U.A.Departamento de la

Defensa de los E.U.A.

Programa: Very High Speed Integrated Circuits (VHSIC)Programa: Very High Speed Integrated Circuits (VHSIC)

1983 VHDL Desarrollo:IBM, Texas Instruments e

Intermetrics

1983 VHDL Desarrollo:IBM, Texas Instruments e

Intermetrics

1987 VHDL’87Estándar IEEE -1076

1987 VHDL’87Estándar IEEE -1076

1993 VHDL’93Estándar IEEE -1164

1993 VHDL’93Estándar IEEE -1164

Page 17: Curso de vhdl

17

Adición de la extensión analógica (IEEE1076.1) que permite la especificación, simulación y síntesis de sistemas digitales, analógicos y mixtos

Facilitar la Verificación/Prueba y puesta a punto del sistema a diseñar.

Capacidad descriptiva del comportamiento del sistema en distintos niveles de abstracción:Algorítmico, RTL (Register Transfer Logic) o concurrente, estructural (Lógico), Netlist.

Reutilización de Código

Independencia de la Tecnología y Proceso de Fabricación (CMOS, Bipolar, BiCMOS)

Independencia de la Metodología de Diseño (PLD’s, ASIC’s, FPGA’s)

Independencia del Sistema de Desarrollo

Disponibilidad al Público

Notación Estandarizada

Ventajas del VHDL

2.6. Ventajas de utilizar VHDL

Page 18: Curso de vhdl

18

2.7. Compañías de soporte en hardware y software.

Page 19: Curso de vhdl

19

3. VHDL: su organización y arquitectura

Page 20: Curso de vhdl

20

3.1. Unidades básicas de diseño.

La estructura general de un programa está formada por módulos o unidades. Existen cinco tipos:

Declaración de entidad (entity declaration ); Arquitectura (architecture );

Configuración (configuration ); Declaración del paquete (package declaration ); Cuerpo del paquete (package body ).

La entidad, el paquete y la configuración son unidades dediseño primarias.

La arquitectura y el cuerpo del paquete son unidades dediseño secundarias.

La entidad y arquitectura son indispensables en la estructura de un programa.

Page 21: Curso de vhdl

21

3.2. Entidad.

Una entidad (entity ) es el bloque elemental de diseño en VHDL.

Las entidades son los elementos electrónicos que forman un sistema digital.

Descripción a Símbolo funcional Diagrama a bloques Nivel de compuertas de la entidad representativo de la entidad.

Page 22: Curso de vhdl

22

Puertos de entrada-salida

Un puerto es cada señal de entrada y/o salida en una entidad.

La declaración de los puertos debe tener un nombre, un modo y un tipo.

El modo permite definir la dirección que tomará la información y el tipo define qué clase de información se transmitirá por el puerto.

Page 23: Curso de vhdl

23

Descripción de un Puerto

Identificador

Nombre

buffer•Similar al Puerto de Salida (Escritura), pero además puede ser leído.•El valor leído (Entrada) es el mismo valor asignado (Salida) al puerto.

inout •Puerto de Entrada (Lectura) y Salida (Escritura)•El valor leído (Entrada) es aquél que llega al puerto, y no el valor que se le asigna (Salida), en caso de existir.

out = Salida

in = Entrada

Modo

Más tipos

Se irán introduciendo conforme avance el curso

Arreglos de std_logic

std_logic_vector (pkg.std_logic_1164)

Valores ‘U’, ‘X’, ‘0’, ‘1’, ‘Z’, ‘W’, ‘L’, ‘H’, ‘-’

std_logic (pkg.std_logic_1164)

Números enterosinteger (pkg.standard)

Conjunto de bits que representa a un grupo de señales de ent. o sal.

bit_vector (pkg.standard)

Define valores de cierto o falso de acuerdo con una expresión

boolean (pkg.standard)

Valores de ‘0’ o ‘1’ Lógico

bit (pkg.standard)

Conjuntos de Valores que se les ha asignado un nombre (p.ej. bit, boolean, bit_vector, etc), de tal forma que un objeto (p.ej. una Señal) de un determinado Tipo

(p.ej. el tipo bit_vector) pueda tomar cualquier valor dentro del conjunto de valores que define al Tipo

especificado.

Tipo de Dato

Paquete (pkg.) en el cual es definido el tipo. Ver: “Uso de Librerías y Paquetes”

Entidad –

¿Cómo se describe a un Puerto?

Page 24: Curso de vhdl

24

3.3. Declaración de entidades.

Consiste en la descripción de las entradas y las salidas de un circuito de diseño identificado como entity.

Ejemplo 1:

(-- ) indica que el texto a la derecha es un comentario. ( ; ) se utiliza al finalizar una declaración.

( : ) se utiliza al asignar nombres a las entradas y salidas.

Page 25: Curso de vhdl

25

Identificadores son nombres o etiquetas utilizados para referir variables, constantes, señales, procesos, etc.

Pueden contener números, letras del alfabeto y guiones bajos que separen caracteres y no tienen restricción por longitud.

Especificación para la escritura de identificadores

Page 26: Curso de vhdl

26

Línea N°.

Sumador-completo de dos datos con longitudes de 1-bit

(Declaración de Entidad)

1

2

3

4

5

--Declaración de la entidad de un circuito sumador

entity sumador is

port (A, B, Cin: in bit;

SUMA, Cout: out bit);

end sumador;

Entidad

Sumador

Cin

A

B

Cout

SUMAPuertos de SalidaPuertos de Entrada

(--) Indica Comentario

(;) Finaliza declaración o subdeclaración

Identificador de la entidad

(entity) Inicia declaración de la entidad

(end) Finaliza declaración de la entidad

Nombres de los puertos

Modo de Operación

Tipo de Dato

Ejemplo-1: Sumador

Entidad - Ejemplo: Sumador Completo

Page 27: Curso de vhdl

27

a3

b3

a2

b2

a1

b1

a0

b0

F

Línea N°.

Detector – Uso de dos datos con longitudes de 4-bit

(Declaración de Entidad)

1 --Declaracion de la entidad

2 entity circuito is

3 port (a3, b3, a2, b2, a1, b1, a0, b0: in bit;

4 F: out bit);

5 end circuito;

Ejemplo-2

Entidad - Ejemplo: Detector A

Page 28: Curso de vhdl

28

Entidad

Sumador

vector_A = [A3, A2, A1, A0]

vector_B = [B3, B2, B1, B0]

vector_SUMA = [S3, S2, S1, S0]

Sumador-completo de dos datos con longitudes de 4-bit

(Declaración de Entidad – Uso de Vectores)

entity sumador is

port (A, B: in bit_vector (3 downto 0);

Cin: in bit;

Cout: out bit;

SUMA: out bit_vector (3 downto 0));

end sumador;

Cin

Cout

Para ordenar en forma ascendente utilizar to en lugar

de downto (p.ej. 0 to 3)

Ejemplo-3

3.4. Diseño de entidades utilizando vectores.

Page 29: Curso de vhdl

29

a3

b3

a2

b2

a1

b1

a0

b0

F

Línea N°.

Detector – Uso de dos datos con longitudes de 4-bit

(Declaración de Entidad – Uso de Vectores)

1 --Declaracion de la entidad

2 entity circuito is

3 port (a, b: in bit_vector (3 downto 0);

4 F: out bit);

5 end circuito;

Ejemplo-4

Entidad - Ejemplo: Detector A (Uso de Vectores)

Page 30: Curso de vhdl

30

Se encuentran definidas dos librerías llamadas ieee y work.

En la librería ieee se encuentra el paquete std_logic_1164.

En la librería work se encuentran numeric_std, std_arithm y gatespkg.

La librería work es donde se almacenan los programas que sevan generando.

Un paquete es una unidad de diseño que contiene sistemaspreestablecidos con comportamientos optimizados.

3.5. Declaración de entidades mediante librerías y paquetes.

Page 31: Curso de vhdl

31

Las librerías se llaman como: library ieee;

La librería work no requiere declaración.

El paquete std_logic_1164 en la librería ieee contiene todos los tipos de datos que suelen emplearse en VHDL(std_logic_vector, std_logic, entre otros).

Para obtener la información de un paquete se tiene que accesar como:

use nombre_libreria.nombre_paquete.all;

Por ejemplo:

use ieee.std_logic_1164.all;

Page 32: Curso de vhdl

32

Paquetes predefinidos comúnmente utilizados

Standard

standard •Contiene tipos básicos: bit, bit_vector, integer•Paquete incluido por omisión.

IEEE

std_logic_1164 •Define los tipos: std_logic, std_ulogic, std_logic_vector, std_ulogic_vector •Define funciones de conversión basadas sobre estos tipos.

numeric_bit •Define tipos de vectores signados y no-signados basados en el tipo bit y todos los operadores aritméticos sobre estos tipos.•Define funciones extendidas y de conversión para dichos tipos.

numeric_std Define tipos de vectores signados y no-signados basados en el tipo std_logic. Paquete equivalente al Paquete std_logic_arith

Synopsys

std_logic_arith •Define tipos de vectores signados y no-signados, y todos los operadores aritméticos sobre estos tipos.•Define funciones extendidas y de conversión para dichos tipos.

std_logic_unsigned •Define operadores aritméticos sobre el tipo std_ulogic_vector y los considera como operadores no-signados.

std_logic_signed •Define operadores aritméticos sobre el tipo std_logic_vector y los considera como operadores signados.

std_logic_misc •Define tipos, subtipos, constantes y funciones complementarios para el paquete std_logic_1164.

Entidad - Uso de Librerías y Paquetes

Page 33: Curso de vhdl

33

Circuito Multiplicador

Multiplicador de dos datos con longitudes de 2-bit

(Declaración de Entidad – Uso de Biblioteca y Paquete)

library ieee;

use ieee.std_logic_1164.all;

entity multiplica is

port (X0, X1, Y0, Y1: in std_logic;

Z3, Z2, Z1, Z0: out std_logic);

end multiplica;

X0

X1

Y0

Y1

Z0

Z1

Z2

Z3

Ejemplo-5

Entidad - Ejemplo: Multiplicador

Page 34: Curso de vhdl

34

3.6. Arquitecturas.

Una arquitectura se define como la estructura que describe el funcionamiento de una entidad.

Los estilos de programación que pueden utilizarse en VHDL son:

Estilo funcional

Estilo por flujo de datos

Estilo estructural

Page 35: Curso de vhdl

35

arquitectura (architecture)

Unidad de Diseño Secundaria que describe el comportamiento interno de una entidad.

arquitectura (architecture)

Unidad de Diseño Secundaria que describe el comportamiento interno de una entidad.

¿Cómo? - A través de la programación de varios procedimientos que permitan que la entidad (entity) cumpla con las condiciones de operación o comportamiento deseadas.

¿Cómo? - A través de la programación de varios procedimientos que permitan que la entidad (entity) cumpla con las condiciones de operación o comportamiento deseadas.

Nivel AlgoritmoNivel Algoritmo

Nivel LógicoNivel Lógico

Nivel CompuertaNivel Compuerta

Niveles de Descripción utilizadosNiveles de Descripción utilizados

Nivel Transistor (Topología / Layout)

Nivel de Transferencia entre Registros (RTL)Nivel de Transferencia entre Registros (RTL)

Estilo de descripción o Modelización

Estilo de descripción o Modelización

FuncionalFuncional

Flujo de DatosFlujo de Datos

EstructuralEstructural

Arquitectura - ¿Qué es?

Page 36: Curso de vhdl

36

Funcional - En este caso, se describen las relaciones entre

las entradas y salidas, sin importar la estructura o

implementación física del sistema o circuito.

Funcional - En este caso, se describen las relaciones entre

las entradas y salidas, sin importar la estructura o

implementación física del sistema o circuito.

si a = b entonces c = 1

si a b entonces c = 0

Línea Nº

Arquitectura - Comparador de Igualdad de dos Datos de Long. = 2Bits

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

--Ejemplo de una descripción abstracta (funcional)

library ieee;

use ieee.std_logic_1164.all;

entity comp is

port (a,b: in bit_vector (1 downto 0);

c: out bit);

end comp;

architecture funcional of comp is

begin

compara: process (a,b)

begin

if a = b then

c <= ‘1’;

else

c <= ‘0’;

end if;

end process compara;

end funcional;

Comparadora

bc

Ejemplo-6

Uso de if-then-else (construcción secuencial)

Uso de if-then-else (construcción secuencial)

Estilo de Modelización - Funcional

Page 37: Curso de vhdl

37

Línea Nº

Arquitectura - Compuerta OR de dos entradas

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

--Ejemplo de una descripción abstracta (funcional)

library ieee;

use ieee.std_logic_1164.all;

entity com_or is

port (a,b: in std_logic;

f1: out std_logic);

end com_or;

architecture funcional of com_or is

begin

process (a,b) begin

if (a = ‘0’ and b=‘0’) then

f1 <= ‘0’;

else

f1 <= ‘1’;

end if;

end process;

end funcional;

Ejemplo-7

a

b

f1

a b f1

0 0 0

0 1 1

1 0 1

1 1 1

Estilo de Modelización - Funcional

Page 38: Curso de vhdl

38

Flujo de Datos - En este caso, se describe la forma en la que los datos se pueden transferir entre los diferentes módulos operativos que constituyen la entidad (sistema o circuito)

Flujo de Datos - En este caso, se describe la forma en la que los datos se pueden transferir entre los diferentes módulos operativos que constituyen la entidad (sistema o circuito)

La construcción when-else La construcción when-else

Ejemplo-8

Comparador (Ejemplo-6)

Línea Nº

Arquitectura - Comparador de Igualdad de dos Datos de Long. = 2Bits

1

2

3

4

5

6

7

8

9

10

11

12

--Ejemplo de una arquitectura usando when-else

library ieee;

use ieee.std_logic_1164.all;

entity comp is

port (a,b: in bit_vector (1 downto 0);

c: out bit);

end comp;

architecture f_datos of comp is

begin

c <= ‘1’ when (a = b) else ‘0’;

end f_datos;

Estilo de Modelización – Flujo de Datos

Page 39: Curso de vhdl

39

Uso de ecuaciones booleanas

Ejemplo-9

Comparador (Ejemplo-6)

Comparador

a

bc

c

a0b0

a1b1

Línea Nº

Arquitectura - Comparador de Igualdad de dos Datos de Long. = 2Bits

1

2

3

4

5

6

7

8

9

10

11

12

--Ejemplo de una arquitectura usando ecs. booleanas

library ieee;

use ieee.std_logic_1164.all;

entity comp is

port (a,b: in bit_vector (1 downto 0);

c: out bit);

end comp;

architecture booleana of comp is

begin

c <= (a(1) xnor b(1)) and (a(0) xnor b(0));

end booleana;

Estilo de Modelización – Flujo de Datos

Page 40: Curso de vhdl

40

Estructural - En este caso, el comportamiento de un sistema o circuito es descrito mediante modelos lógicos establecidos de los componentes que conforman al sistema o circuito, como

son: Compuertas, Sumadores, Contadores, etc.

Estructural - En este caso, el comportamiento de un sistema o circuito es descrito mediante modelos lógicos establecidos de los componentes que conforman al sistema o circuito, como

son: Compuertas, Sumadores, Contadores, etc.

Modelos lógicos pueden ser:Modelos lógicos pueden ser:

Diseñados por el UsuarioDiseñados por el Usuario Predefinidos por el FabricantePredefinidos por el Fabricante

Almacenados en Paquetes contenidos en las bibliotecas de

la Herramienta de Desarrollo

Almacenados en Paquetes contenidos en las bibliotecas de

la Herramienta de Desarrollo

Estilo de Modelización – Estructural

Page 41: Curso de vhdl

41

c

a0b0

a1b1

U0 x0

x1U1

U2

Ejemplo-10

Comparador (Ejemplo-6)

Línea Nº

Arquitectura - Comparador de Igualdad de dos Datos de Long. = 2Bits

1

2

3

4

5

6

7

8

9

10

11

12

13

14

library ieee;

use ieee.std_logic_1164.all;

use work.compuertas.all;

entity comp is

port (a,b: in bit_vector (0 to 1);

c: out bit);

end comp;

architecture estructural of comp is

signal x: bit_vector (0 to 1);

begin

U0: xnor2 port map (a(0), b(0), x(0));

U1: xnor2 port map (a(1), b(1), x(1));

U2: and2 port map (x(0), x(1), c);

end estructural;

Estilo de Modelización – Estructural

Page 42: Curso de vhdl

42

Lista de palabras reservadas en VHDL

3.7. Datos, operadores y palabras reservadas en VHDL

Page 43: Curso de vhdl

43

= /= < <= > <=

+ - &

+ (signo) - (signo)

* / MOD REM

Precedencia de operadores

** ABS NOT

AND OR NAND NOR XOR XNOR

Mayor

Menor

La precedencia de operadores se encuentran ordenados de mayor (arriba) a menor (abajo), los operadores que se encuentran en la misma fila tienen la misma precedencia y serán evaluados siguiendo el orden de izquierda a derecha.

La precedencia de operadores se encuentran ordenados de mayor (arriba) a menor (abajo), los operadores que se encuentran en la misma fila tienen la misma precedencia y serán evaluados siguiendo el orden de izquierda a derecha.

Page 44: Curso de vhdl

44

Variables

Las variables pueden ser modificadas cuando sea necesario, pueden ser declaradas solamente dentro de los procesos y subprogramas.

Variables

Las variables pueden ser modificadas cuando sea necesario, pueden ser declaradas solamente dentro de los procesos y subprogramas.

VARIABLE identidicador : tipo [:= valor];

Ejemplo

VARIABLE aux1, aux2: bit;

VARIABLE identidicador : tipo [:= valor];

Ejemplo

VARIABLE aux1, aux2: bit;

SIGNAL identidicador : tipo [:= valor];

Ejemplo

SIGNAL A, B : bit := ‘0’;

SIGNAL dato: bit_vector (7 downto 0);

SIGNAL identidicador : tipo [:= valor];

Ejemplo

SIGNAL A, B : bit := ‘0’;

SIGNAL dato: bit_vector (7 downto 0);

Señales

Las señales si pueden almacenar o pasar valores lógicos, por lo tanto, representan elementos de memoria o conexiones y si pueden ser sintetizadas. Son declaradas en las arquitecturas antes del BEGIN.

Constantes

Una constante es un elemento que puede tomar un único valor de un tipo dato, las constantes pueden ser declaradas dentro de entidades, arquitecturas, procesos y paquetes.

Constantes

Una constante es un elemento que puede tomar un único valor de un tipo dato, las constantes pueden ser declaradas dentro de entidades, arquitecturas, procesos y paquetes.

CONSTANT identidicador : tipo := valor;

Ejemplo

CONSTANT byte: integer := 8;

CONSTANT identidicador : tipo := valor;

Ejemplo

CONSTANT byte: integer := 8;

Un objeto de datos en VHDL es un elemento que toma un valor de algún tipo de dato determinado, según sea el tipo de dato, el objeto poseerá un conjunto de propiedades. En VHDL los objetos de datos son generalmente una de las tres clases siguientes:

Un objeto de datos en VHDL es un elemento que toma un valor de algún tipo de dato determinado, según sea el tipo de dato, el objeto poseerá un conjunto de propiedades. En VHDL los objetos de datos son generalmente una de las tres clases siguientes:

Page 45: Curso de vhdl

4. Diseño lógico combinacional mediante VHDL.

42

Page 46: Curso de vhdl

4.1. Programación de estructuras básicas mediante declaraciones concurrentes

Una declaración concurrente se encuentra fuera de un proceso.

Suelen usarse en las descripciones de flujo de datos y estructural.

En una declaración concurrente no importa el orden en que se escriban las señales.

Existen tres tipos de declaraciones concurrentes: Declaración condicional asignada a una señal (when-else ).

Declaración concurrente asignada a señales (gates ).

Selección de una señal (with-select-when ). 43

Page 47: Curso de vhdl

Declaración condicional asignadas a una señal (when-else).Escriba la descripción VHDL de un sistema que se encuentra definido por la tabla de verdad siguiente:

44

Ejemplo:--EJEMPLO COMBINACIONAL BÁSICOLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY prueba IS PORT( a,b,c : IN STD_LOGIC;

F : OUT STD_LOGIC );END prueba;

ARCHITECTURE ejemplo of prueba IS BEGIN

F<= '1' WHEN ( a='0' AND b='0' AND c='0' )ELSE '1' WHEN ( a='0' AND b='1' AND c='1' )ELSE '1' WHEN ( a='1' AND b='1' AND c='0' )ELSE '1' WHEN ( a='1' AND b='1' AND c='1' )ELSE '0';

END ejemplo;

Page 48: Curso de vhdl

48

Ejemplo sencillo donde se utilizan las declaraciones when-else:

--EJEMPLO when-elseLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;

ENTITY Ejemplo_when_else IS PORT( a, b : IN STD_LOGIC;

F : OUT STD_LOGIC );END Ejemplo_when_else;

ARCHITECTURE ejemplo of Ejemplo_when_else IS BEGIN

F<= '1' WHEN ( a='1' AND b='1' ) ELSE '0';

END ejemplo;

Page 49: Curso de vhdl

Ejercicio. Una función F depende de cuatro variables D, C, B, A, que representan un número binario, donde A es la variable menos significativa. La función F adopta el valor de cero si el número formado por las cuatro variables es inferior a 10 y superior o igual a 5. En caso contrario la función F es uno.

Realice el programa correspondiente en VHDL utilizando estructuras del tipo when- else.

45

Page 50: Curso de vhdl

50

--EJEMPLO COMBINACIONAL BÁSICOLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY tabla_4_entradas IS PORT( entradas : IN STD_LOGIC_VECTOR(3 downto 0); F : OUT STD_LOGIC );END tabla_4_entradas;

ARCHITECTURE tabla of tabla_4_entradas IS BEGIN

F<= '0' WHEN ( entradas="0101" )ELSE'0' WHEN ( entradas="0110" )ELSE'0' WHEN ( entradas="0111" )ELSE'0' WHEN ( entradas="1000" )ELSE'0' WHEN ( entradas="1001" )ELSE'1';

END tabla;

Solución al problema anterior utilizando estructuras del tipo when- else.

Page 51: Curso de vhdl

Declaraciones concurrentes asignadas a señales (gates)

Ejemplo:

46

Page 52: Curso de vhdl

Selección de una señal (with-select-when)

Ejemplo:

48

ENTITY fig_4_51 IS PORT (

a, b : IN BIT; --DECLARA LOS BITS DE --ENTRADA INDIVIDUALES

c : OUT BIT); --DECLARA LA SALIDAEND fig_4_51;

ARCHITECTURE verdad OF fig_4_51 IS SIGNAL bits_ent : BIT_VECTOR(1 DOWNTO 0);BEGIN bits_ent <= a & b; --CONCATENA LOS BITS DE

--ENTRADA EN UN VECTOR WITH bits_ent SELECT c <= '1' WHEN "00“,--TABLA DE VERDAD

'0' WHEN "01",'1' WHEN "10",'0' WHEN "11";

END verdad;

Page 53: Curso de vhdl

53

ENTITY tabla IS PORT( a: IN BIT_VECTOR(2 DOMNTO 0); c: OUT BIT_VECTOR(1 DOMNTO 0) );END tabla;

ARCHITECTURE tabla1 OF tabla ISBEGINWITH a SELECTc<= "00" WHEN "000",

"10" WHEN "001","00" WHEN "010","01" WHEN "011","11" WHEN "100","00" WHEN "101","01" WHEN "110","00" WHEN "111";

END tabla1;

Otro ejemplo de la selección de una señal (with-select-when):

Page 54: Curso de vhdl

54

Otro ejemplo de la selección de una señal (with-select-when):

--TABLA DE VERDAD EN VHDL SISTEMAS DIGITALES 10A ED DEL TOCCI PAG 183

ENTITY fig_4_51 IS PORT (

a, b, c : IN BIT; --DECLARA LOS BITS DE ENTRADA INDIVIDUALESy : OUT BIT); --DECLARA LA SALIDA

END fig_4_51;

ARCHITECTURE verdad OF fig_4_51 IS SIGNAL bits_ent : BIT_VECTOR(2 DOWNTO 0);BEGIN bits_ent <= a & b & c; --CONCATENA LOS BITS DE ENTRADA

EN UN --VECTOR WITH bits_ent SELECT y <='0' WHEN "000", --TABLA DE VERDAD

'0' WHEN "001",'0' WHEN "010",'1' WHEN "011",'0' WHEN "100",'1' WHEN "101",'1' WHEN "110",'1' WHEN "111";

END verdad;

Page 55: Curso de vhdl

Ejercicio

Diseñe un circuito comparador para comparar las magnitudes de dos números de 2 bits (A0 A1 y B0 B1). El circuito tendrá tres señales de salida GT, LT y EQ. GT será 1 para indicar que el valor de A es mayor que el valor de B. LT será 1 para indicar que el valor de A es menor que el valor de B. EQ será 1 si el valor de A y el valor de B son iguales. Utilice instrucciones del tipo with-select-when

49

Page 56: Curso de vhdl

56

--COMPARADOR DE 2 BITS CON WITH-SELECT-WHENLIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.std_logic_arith.all;ENTITY comparador_2bit IS PORT ( a, b: IN BIT_VECTOR(1 DOWNTO 0); --DEFINE LAS ENTRADAS DEL BLOQUE gt, lt, eq : OUT BIT); --DEFINE LA SALIDA DEL BLOQUEEND comparador_2bit;

ARCHITECTURE ckt OF comparador_2bit IS

SIGNAL input: BIT_VECTOR(3 DOWNTO 0); --NOMBRA UNA SEÑAL INTERMEDIASIGNAL output : BIT_VECTOR(2 DOWNTO 0); --NOMBRA UNA SEÑAL INTERMEDIABEGIN

input <= a & b;WITH input SELECT output <= "001“ WHEN "0000",

"010“ WHEN "0001","010“ WHEN "0010","010" WHEN "0011","100" WHEN "0100","001" WHEN "0101","010" WHEN "0110","010" WHEN "0111","100" WHEN "1000","100" WHEN "1001","001" WHEN "1010","001" WHEN "1011","100" WHEN "1100","100" WHEN "1101","100" WHEN "1110","001" WHEN "1111";

gt<=output(2);lt<=output(1);eq<=output(0);

END ckt;

Solución al problema anterior utilizando estructuras del tipo with-select-when.

Page 57: Curso de vhdl

4.2. Programación de estructuras básicas mediante declaraciones secuenciales

Una declaración secuencial debe ejecutarse en el orden en que aparece y forma parte de un proceso (process ).

Se utilizan las declaraciones if-then-else con la estructura elsif , if la condición 1 se cumple then realiza la operación 1; elsif la condición 2 se cumple

then realiza la operación 2; else realiza la operación 3;

end if;

o declaraciones case-when

case A is when “ valor1deA” => salida <=“ valor1salida”; when “ valor2deA” => salida <=“valor2salida”; when others => salida <=“valor3salida”; end case;

50

Page 58: Curso de vhdl

Buffer tri-estado

Ejemplo:

51

Page 59: Curso de vhdl

Comparador Ejemplo: Diseñe mediante declaraciones secuenciales un comparador de dos números A y B, cada número formado por dos bits (A1 A0) y (B1 B0), la salida del comparador también es de dos bits y está representada por la variable Z (Z1 Z0) de tal forma que si:

52

Page 60: Curso de vhdl

Ejemplo:

Diseñe un circuito decodificador de BCD a 7 segmentos utilizando declaraciones secuenciales con case-when . La entrada A esta formada por 4 bits (A3, A2, A1, A0) y la salida “d” por siete bits (a, b, c, d, e, f, g) activos en bajo.

54

Page 61: Curso de vhdl

5. Diseño lógico secuencial con VHDL.

56

Page 62: Curso de vhdl

5.1. Diseño Lógico Secuencial

Un sistema secuencial se forma con un arreglo lógico combinacional y elementos de memoria.

La salida no solo depende de los valores de entrada presentes, sino también de la historia del sistema.

Hay dos tipos de sistemas secuenciales: Síncronos: se sincronizan al pulso de reloj del sistema Asíncronos: dependen del orden y momento en el cual se aplican sus señales de entrada.

En el diseño secuencial con VHDL las declaraciones if-then- else son las más utilizadas.

57

Page 63: Curso de vhdl

5.2. Flip-Flops

Los Flip-Flops son los elementos de memoria utilizados en los sistemas secuenciales síncronos.

Un Flip-Flop mantiene o almacena un bit de manera indefinida hasta que un pulso o una señal cambie de estado. Algunos de los Flip-Flops más comunes son: SR, JK, D y T.

58

Page 64: Curso de vhdl

El atributo ‘event(evento) se utiliza para describir un hecho u ocurrencia de una señal en particular.

Los atributos sirven para definir características que pueden asociarse con cualquier tipo de datos, objeto o entidades.

La condición if ( clk’event ) es cierta solo cuando ocurre un cambio de

valor en clk.

La declaración if-then que depende de ‘event no maneja la condiciónelse , debido a que el compilador mantiene el valor de Q hasta que noexista un cambio de valor en la señal clk.

59

Page 65: Curso de vhdl

Ejemplo: Describa en VHDL el Flip-Flop D.

60

--EJEMPLO DE FLIP_FLOP DLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;

ENTITY FLIP_FLOP_D IS PORT( d,clk : IN STD_LOGIC; q : OUT STD_LOGIC);END FLIP_FLOP_D;ARCHITECTURE ejemplo of FLIP_FLOP_D ISBEGIN

PROCESS (clk) BEGINIF (clk'EVENT AND clk='1') then q<=d;

end if;END PROCESS;

END ejemplo;

Page 66: Curso de vhdl

Ejercicio: Escriba y simule el código VHDL de un Flip-Flop SR (el programa se realiza utilizando instrucciones condicionales y el tipo de dato no importa, ‘-’).

61

--EJEMPLO DE UN FLIP FLOP SR CON EVENTOS LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY FLIP_FLOP_SR IS PORT( s, r, clk : IN STD_LOGIC;

q, qn : INOUT STD_LOGIC);--SE TIENE QUE DECLARAR LA SEÑAL --Q COMO INOUT DEBIDO A QUE SE UTILIZA COMO ENTRADA Y SALIDAEND FLIP_FLOP_SR;ARCHITECTURE ejemplo of FLIP_FLOP_SR IS BEGIN

PROCESS (clk, s, r) BEGINIF (clk'EVENT AND clk='1') then

IF (s='0'AND r='1')THEN q<='0'; qn<='1';ELSIF (s='1'AND r='0')THEN q<='1‘; qn<='0';ELSIF (s='0'AND r='0')THEN q<=q; qn<=qn;ELSE q<='-'; qn<='-';END IF;

END IF;END PROCESS;

END ejemplo;

Page 67: Curso de vhdl

5.3. Registros El diseño de registros es muy parecido al diseño de Flip-Flops. Se utilizan vectores de bits en lugar de un solo bit. Ejemplo: Escriba un programa de un registro de 4 bits.

Las variables sensitivas del proceso son CLK y CLR.

62

Page 68: Curso de vhdl

5.4. Contadores

La forma usual para describir contadores en VHDL es mediante operaciones de incremento, decremento o ambas.

Cuando se requiere retroalimentación de una señal (Q<=Q+1), ya sea dentro o fuera de la entidad, se utiliza el modo inout .

Ejemplo:

Elabore un programa que describa el funcionamiento de un contador de 4 bits. Realice en el diseño una señal de control (Up/Down) que determine el sentido del conteo: ascendente o descendente

63

Page 69: Curso de vhdl

Ejercicio: Describa en VHDL un contador síncrono con reset asíncrono y carga en paralelo (load). Y simule su funcionamiento.

64

--EJEMPLO DE UN CONTADOR CON EVENTOS LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;--USE WORK.STD_ARITH.ALL;USE IEEE.STD_LOGIC_unsigned.ALL;ENTITY contador IS PORT( p: IN STD_LOGIC_VECTOR(3 DOWNTO 0); clk, load, enp, reset: IN STD_LOGIC; q: INOUT STD_LOGIC_VECTOR(3 DOWNTO 0) );--SE TIENE QUE --DECLARAR LA SEÑAL Q COMO INOUT DEBIDO A QUE SE UTILIZA --COMO ENTRADA Y SALIDAEND contador;ARCHITECTURE ejemplo of contador IS BEGIN

PROCESS (clk, reset, load, enp) BEGIN IF(reset='1') THEN q<="0000"; ELSIF (clk'EVENT AND clk='1') then IF (load='0' and enp='0')THEN

q<=p; ELSIF (load='0' and enp='1')THEN

q<=p; ELSIF(load='1' and enp='0')THEN

q<=q; ELSIF(load='1' and enp='1')THEN

q<=q+1; END IF;

END IF;END PROCESS;

END ejemplo;

Page 70: Curso de vhdl

4.5. Diseño de sistemas secuenciales síncronos

Los sistemas secuenciales se pueden implementar utilizando dos modelos:

La estructura de Mealy, donde las señales de salida dependen tanto del estado en que se encuentra el sistema, como de la entrada que se aplica en determinado momento.

La estructura de Moore, donde la señal de salida sólo depende del estado en que se encuentra.

Un sistema secuencia se desarrolla a través de una serie de pasos generalizados:

enunciado del problema, diagrama de estados, tabla de estados, asignación de estados, ecuaciones de entrada a los elementos de memoria y diagrama electrónico del circuito.

65

Page 71: Curso de vhdl

El diseño de una máquina secuencial con VHDL se realiza a partir del diagrama de estados, ya que solo se requieren conocer las transiciones entre los estados y las condiciones que controlan el proceso.

La transición de un estado a otro se especifica como:

En VHDL se utiliza estructuras case-when para especificar cada estado.

Las transiciones se especifican con estructuras if-then-else .

66

Page 72: Curso de vhdl

En VHDL los estados se definen dentro de un tipo de dato enumerado mediante la declaración type .

type estados is (d0, d1, d2, d3); signal edo_presente, edo_futuro : estados;

Dentro del proceso se describe la transición del edo_presente al edo_futuro.

La declaración del proceso queda como:

67

proceso1: process (edo_presente, ent) begin case edo_presente is

when d0 => sal<= ‘valsal’; if ent=‘valent’ then

edo_futuro <= d*; else

edo_futuro <= d*; end if;

Page 73: Curso de vhdl

Ejemplo: Describa en VHDL

el siguiente diagrama de estados.

68

Page 74: Curso de vhdl

Ejercicio: Describa en VHDL el siguiente diagrama de estados.

69

Page 75: Curso de vhdl

75

--EJEMPLO DE UN CONTADOR CON EVENTOS LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_unsigned.ALL;ENTITY MAQUINA_DE_ESTADOS IS PORT( clk, x : IN STD_LOGIC;

z : OUT STD_LOGIC );END MAQUINA_DE_ESTADOS;ARCHITECTURE ejemplo of MAQUINA_DE_ESTADOS IS TYPE estados is (d0, d1 ,d2, d3, d4);SIGNAL edo_presente, edo_futuro: ESTADOS; BEGIN PROCESO1: PROCESS (edo_presente, x) BEGIN CASE edo_presente is WHEN d0 => z<='0'; IF x= '1' THEN edo_futuro<=d1; else edo_futuro<=d4; END IF; WHEN d1 => z<='0'; IF x= '1' THEN edo_futuro<=d2; else edo_futuro<=d4; END IF;

WHEN d2 => IF x= '1' THEN

edo_futuro<=d3;z<='1';

elseedo_futuro<=d4;z<='0';

END IF; WHEN d3 => z<='0'; IF x= '1' THEN

edo_futuro<=d3; else

edo_futuro<=d3; END IF; WHEN d4 => z<='0'; IF x= '1' THEN

edo_futuro<=d1; else

edo_futuro<=d4; END IF;

END CASE;END PROCESS PROCESO1;

PROCESO2: PROCESS (CLK) BEGIN IF(CLK'EVENT AND CLK='1')THEN

edo_presente<= edo_futuro; end if;END PROCESS PROCESO2;END ejemplo;

Solución al problema anterior utilizando estructuras case-when.

Page 76: Curso de vhdl

76

-- CONTADOR MOD 10ENTITY MOD_10 ISPORT( clock :IN BIT; CONTEO_MAX, q0, q1, q2, q3: OUT BIT);END MOD_10;ARCHITECTURE a OF MOD_10 ISBEGIN PROCESS (clock) VARIABLE count: BIT_VECTOR(3 DOWNTO 0); -- define a numeric VARIABLE VARIABLE x1: BIT; BEGIN

IF (clock = '1' AND clock'event) THEN -- rising edge? CASE count IS

WHEN "0000"=> count:="0001"; x1:='0';WHEN "0001"=> count:="0010"; x1:='0';WHEN "0010"=> count:="0011"; x1:='0';WHEN "0011"=> count:="0100"; x1:='0';WHEN "0100"=> count:="0101"; x1:='0';WHEN "0101"=> count:="0110"; x1:='0';WHEN "0110"=> count:="0111"; x1:='0';WHEN "0111"=> count:="1000"; x1:='0';WHEN "1000"=> count:="1001"; x1:='0';WHEN OTHERS=> count:="0000"; x1:='1';

END CASE;END IF;

CONTEO_MAX<=x1; q0 <= count(0);-- transfer register contents to outputs q1 <= count(1); q2 <= count(2); q3 <= count(3); END PROCESS;END a;

Contador Mod10 utilizando estructuras case-when.

Page 77: Curso de vhdl

77

Ejercicio: Contador Mod 5 utilizando variables de tipo integer .

ENTITY MAQUINA_MEALLY ISPORT( clock, x :IN BIT;

q :OUT INTEGER RANGE 0 TO 4 );END MAQUINA_MEALLY;ARCHITECTURE a OF MAQUINA_MEALLY ISBEGIN PROCESS (clock, x) VARIABLE count: INTEGER RANGE 0 TO 4; -- define a numeric VARIABLE BEGIN

IF (clock = '1' AND clock'event) THEN -- rising edge? IF (x='1')THEN IF count > 0 THEN -- less than max?

count := count - 1; -- increment value ELSE -- must be at max or bigger

count := 4; -- reset to zero END IF; ELSE IF count < 4 THEN -- less than max?

count := count + 1; -- increment value ELSE -- must be at max or bigger

count := 0; END IF; END IF;END IF;q <= count; -- transfer register contents to outputs

END PROCESS;END a;