Curso de vhdl
-
Upload
adan-aguirre -
Category
Education
-
view
2.255 -
download
3
Transcript of 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
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:
3
1. Instalación de software MAXPLUS II.
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.
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.
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):
7
2. Estado actual de la lógica programable.
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.
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.
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.
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.
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.
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.
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.
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
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
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
18
2.7. Compañías de soporte en hardware y software.
19
3. VHDL: su organización y arquitectura
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.
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.
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.
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?
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.
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
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
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
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.
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)
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.
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;
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
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
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
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?
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
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
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
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
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
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
42
Lista de palabras reservadas en VHDL
3.7. Datos, operadores y palabras reservadas en 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.
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:
4. Diseño lógico combinacional mediante VHDL.
42
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
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;
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;
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
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.
Declaraciones concurrentes asignadas a señales (gates)
Ejemplo:
46
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;
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):
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;
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
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.
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
Buffer tri-estado
Ejemplo:
51
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
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
5. Diseño lógico secuencial con VHDL.
56
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
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
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
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;
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;
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
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
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;
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
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
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;
Ejemplo: Describa en VHDL
el siguiente diagrama de estados.
68
Ejercicio: Describa en VHDL el siguiente diagrama de estados.
69
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.
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.
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;