Академический Документы
Профессиональный Документы
Культура Документы
INTRODUCCIÓN AL LENGUAJE DE
DESCRIPCION DE HARDWARE VHDL
CAPÍTULO 2
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante
2
Introducción al Lenguaje de Descripción de Hardware VHDL.
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante, CIME, CUJAE, 2004.
Capítulo 2. Lenguajes de Descripción de Hardware.
Introducción.-
A partir de los años 80 del siglo pasado, el diseño digital ha cambiando considerablemente
incorporando cada vez más los dispositivos lógicos programables (PLD) debido a sus
ventajas sobre los dispositivos tradicionales. La programación de los SPLD, CPLD y FPGA
se realiza utilizando un lenguaje de descripción de hardware Un lenguaje de descripción de
hardware (HDL) es una herramienta que sirve para describir el comportamiento y la
arquitectura de un circuito o sistema electrónico utilizando diferentes niveles de abstracción
y en muchos casos el modo jerárquico. En esto texto se estudia solamente el VHDL ya que
éste es un estándar y es el de mayor uso a nivel mundial. En este capítulo se presentan los
aspectos fundamentales del VHDL los cuales se ilustran con ejemplos y ejercicios para
facilitar su asimilación. En el capítulo 3 se presentan otros ejemplos y ejercicios
relacionados con el diseño de circuitos combinacionales utilizando VHDL; en el capítulo 4
los ejemplos y ejercicios se destinan al diseño de circuitos secuenciales. Este conjunto de
ejemplos y ejercicios ayudarán en el desarrollo de habilidades a los interesados en el
aprendizaje de VHDL.
• HDL de bajo nivel: Permiten definir un circuito a nivel de su arquitectura con poco
nivel de abstracción. Ejemplos de esto son ABEL y PALASM. En la Referencias
[2, 5] pueden encontrarse algunas de las características del lenguaje ABEL y
numerosos ejemplos de diseño digital empleando este lenguaje. En el Capítulo 4 de
la Referencia [9] hay varios ejemplos de CLC diseñados con PALASM.
• HDL de nivel medio: Permiten definir un circuito con mayor nivel de abstracción y
utilizar el modo jerárquico. Un lenguaje de este tipo es el AHDL de Altera.
• HDL de alto nivel: Permiten definir un circuito o sistema con un gran nivel de
abstracción, además de utilizar el modo jerárquico. Lenguajes de este tipo son
VERILOG y VHDL, ambos han alcanzado una gran difusión a nivel internacional y
son estándares de la IEEE. En este texto se utiliza el VHDL debido a su importancia
creciente.
VHDL.
Es un lenguaje de descripción de hardware concebido para el diseño de circuitos integrados
de muy alta velocidad. Surgió a mediados de los años 80 y desde 1987 se convirtió en un
estándar de la IEEE. Los diseños se pueden descomponer en forma jerárquica de arriba
abajo (top down). Cada modelo posee una interfase (entidad) que permite su conexión con
otros elementos y una arquitectura donde se especifica su funcionamiento lo que permite su
3
Introducción al Lenguaje de Descripción de Hardware VHDL.
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante, CIME, CUJAE, 2004.
Capítulo 2. Lenguajes de Descripción de Hardware.
simulación. El diseño jerárquico permite diseñar los componentes de un sistema en forma
paralela por distintos equipos de diseñadores ubicados incluso en lugares geográficos
distantes donde cada grupo diseña la parte que le corresponda de acuerdo a los requisitos
que se le establezcan sin necesidad de conocer el resto del sistema (compartimentación) lo
que es una gran ventaja desde muchos puntos de vista. Un grupo central se encarga de
concebir el sistema, trazar las directivas de trabajo para los restantes grupos y reunir los
diferentes componentes que lo constituyen cuando los mismos están listos.
Utilizando VHDL se puede diseñar, simular y sintetizar desde un CLC sencillo, como los
ejemplos que se muestran en este libro de texto, hasta sistemas digitales de gran
complejidad tal como un microprocesador [3].
Declaración de la
Entidad.
Definición de la
Arquitectura.
4
Introducción al Lenguaje de Descripción de Hardware VHDL.
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante, CIME, CUJAE, 2004.
Capítulo 2. Lenguajes de Descripción de Hardware.
ENTITY nombre_entidad IS
GENERIC (
Nombre de la constante genérica: tipo :=Valor de la constante ;
...
Nombre de la constante genérica: tipo :=Valor de la constante
) ;
PORT (
Nombre de señal: modo tipo de la señal ;
...
Nombre de señal: modo tipo de la señal
) ;
END nombre_entidad ;
Ejemplo 2-1. Escriba la declaración de la identidad para un circuito digital con dos
entradas (a, b) y una salida f, como el mostrado:
ENTITY
a
f
b
Solución:
ENTITY ejemplo1 IS
PORT ( a, b: IN bit ;
f: OUT bit ) ;
END ejemplo1 ;
En este caso ejemplo1 es el nombre asignado a la entidad, a y b son los nombres de las
señales de entrada, IN es el modo de estas señales, OUT es el modo de la señal de salida,
Bit es el tipo de las señales de entrada y de salida.
5
Introducción al Lenguaje de Descripción de Hardware VHDL.
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante, CIME, CUJAE, 2004.
Capítulo 2. Lenguajes de Descripción de Hardware.
Las declaraciones y definiciones que preceden a BEGIN pueden estar presentes todas,
algunas o ninguna, esto depende del tipo de diseño que se esté realizando. No obstante la
declaración de señales se utiliza mucho pues contribuye, entre otras cosas, a la claridad del
diseño.
Ejemplo 2-2. Escriba la definición de arquitectura para la entidad del Ejemplo 2-1.
Suponga que el circuito es una compuerta AND.
Solución:
En VHDL hay una gran flexibilidad para escribir la arquitectura de una identidad
determinada. Otra forma es la siguiente:
En VHDL las letras mayúsculas y las minúsculas tienen el mismo significado. En los
ejemplos 1 y 2, se escribieron las palabras reservadas del lenguaje (vea anexo 2) con letras
mayúsculas sólo para resaltarlas.
6
Introducción al Lenguaje de Descripción de Hardware VHDL.
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante, CIME, CUJAE, 2004.
Capítulo 2. Lenguajes de Descripción de Hardware.
Ejemplo 2-3. Veamos ahora, otra situación donde tenemos un circuito con dos entradas
(a, b) y una salida f. La entidad es igual a la del Ejemplo 2-1; pero supongamos que la
función que realiza el circuito es tal que la salida será 0 sólo si las entradas son iguales (el
circuito realiza la operación XOR). Escriba el programa en VHDL para sintetizar este
circuito.
Solución:
La entidad es la misma del Ejemplo 2_1, solamente es necesario cambiar la arquitectura.
Objetos en VHDL.
7
Introducción al Lenguaje de Descripción de Hardware VHDL.
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante, CIME, CUJAE, 2004.
Capítulo 2. Lenguajes de Descripción de Hardware.
En el ejemplo anterior D es el nombre que identifica a la constante, std_logic_vector (2
downto 0) es el tipo de la misma y:= "011" es el valor asignado. Note que la asignación a
una constante se realiza mediante :=
8
Introducción al Lenguaje de Descripción de Hardware VHDL.
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante, CIME, CUJAE, 2004.
Capítulo 2. Lenguajes de Descripción de Hardware.
El tipo Text está predefinido como una cadena en el paquete Textio contenido en la
biblioteca STD.
Para utilizar un tipo diferente al Text, es necesario que el mismo sea definido previamente
por el usuario.
Además el usuario puede definir otros tipos, lo que resulta conveniente en algunos casos,
como por ejemplo en el diseño de máquinas de estado.
El lenguaje VHDL concede máxima importancia a los tipos de las señales, por ejemplo no
se admite realizar una asignación mezclando tipos diferentes. Algunas características de los
tipos predefinidos están dadas en la tabla siguiente:
Tipo Características
Bit En este tipo las señales sólo toman los valores ‘1’ y ‘0’
Boolean En este tipo las señales sólo toman los valores True y False
Std_logic En este tipo las señales toman nueve valores, entre ellos
tenemos: ‘1’, ‘0’, ‘Z’ (para el tercer estado),
‘-’ (para los opcionales)
Integer En este tipo las señales toman valores enteros. Los 1 y 0
aquí van sin ‘’
Bit_vector En este tipo los valores de las señales son una cadena de
unos y ceros. Una cadena se escribe entre comillas.
Ejemplo: “1000”
9
Introducción al Lenguaje de Descripción de Hardware VHDL.
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante, CIME, CUJAE, 2004.
Capítulo 2. Lenguajes de Descripción de Hardware.
Std_logic_vector En este tipo los valores de las señales son una cadena de los
nueve valores permisibles para el tipo std_logic. Ejemplo:
“1-0Z”
Operadores en VHDL.
En VHDL existen diferentes operadores entre ellos tenemos: operadores lógicos, de
relación, aritméticos y de concatenación.
En VHDL hay varias asignaciones que se realizan en forma condicionada. En los ejemplos
2-4, 2-5 y 2-6 se utilizan dos de ellas:
Esta última ya se empleó en los ejemplo 2-2 y 2-3 y será utilizada nuevamente en el
siguiente:
10
Introducción al Lenguaje de Descripción de Hardware VHDL.
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante, CIME, CUJAE, 2004.
Capítulo 2. Lenguajes de Descripción de Hardware.
Ejemplo 2-4. Escriba en VHDL un programa para obtener una compuerta NOR de dos
entradas. Utilice señales tipo boolean y asignaciones condicionales de la forma when ...
else
End boole4_a ;
Ejemplo 2-5. Repita el diseño anterior; pero utilice asignaciones condicionales de la forma
With ..... select ... when ... others
Note la diferencia entre las arquitecturas de estos dos ejemplos; sin embargo en ambos
casos se obtiene el mismo resultado, la operación NOR.
Ejemplo 2-6. Escriba un programa en VHDL para obtener un circuito en cuyas entradas se
aplican dos números (a, b) enteros de dos bit cada uno y que brinde en sus salidas la suma
de los mismos, su producto, el módulo de su diferencia o el cuadrado de su suma de
acuerdo al valor que tomen dos entradas adicionales de selección S1 y S0, según la tabla
siguiente:
11
Introducción al Lenguaje de Descripción de Hardware VHDL.
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante, CIME, CUJAE, 2004.
Capítulo 2. Lenguajes de Descripción de Hardware.
Salida <= suma when S1= '0' AND S0= '0' else
prod when S1= '0' AND S0= '1' else
modulo when S1= '1' AND S0= '0' else
cuadrado ;
End aritmet1 ;
12
Introducción al Lenguaje de Descripción de Hardware VHDL.
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante, CIME, CUJAE, 2004.
Capítulo 2. Lenguajes de Descripción de Hardware.
Después de compilar exitosamente el diseño realizado se procede a su simulación. Los
resultados de la simulación se muestran a continuación:
Paquetes. En los paquetes se guardan definiciones de tipos y objetos que pueden ser
utilizados en los diferentes diseños que invoquen su utilización. Un paquete muy utilizado
es el paquete estándar IEEE.STD_LOGIC_1164. En general, el empleo de un paquete en un
diseño se realiza invocando su empleo mediante la cláusula: Use < identificador del
paquete>. Un ejemplo de esto es la siguiente línea:
Use IEEE.STD_LOGIC_1164.ALL ;
En la sentencia anterior IEEE es el nombre de la biblioteca que contiene el paquete cuyo
nombre es: STD_LOGIC_1164. La terminación .ALL escrita a continuación del nombre
del paquete permite utilizar todas las definiciones y objetos que contiene dicho paquete.
Además del STD_LOGIC_1164 existen otros paquetes de uso general tal como el paquete
nombrado STANDARD que está contenido en la bibioteca STD. Para utilizar este paquete
13
Introducción al Lenguaje de Descripción de Hardware VHDL.
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante, CIME, CUJAE, 2004.
Capítulo 2. Lenguajes de Descripción de Hardware.
no es necesario escribir la sentencia Use STD.STANDARD.ALL debido a que el mismo
siempre está visible.
Los diseñadores que trabajan con VHDL pueden definir sus propios paquetes lo que les
permite utilizar diseños realizados anteriormente como parte de otros nuevos.
PACKAGE nombre_paquete IS
Declaración de tipos
Declaración de señales
Declaración de constantes
Declaración de componentes
Declaración de funciones
Declaración de procedimientos
END nombre_paquete ;
Componentes en VHDL.
Un componente puede declararse dentro de una arquitectura, en ese caso solo puede
utilizarse dentro de ella. También puede declararse dentro de un paquete, en este caso se
puede utilizar en todas las arquitecturas que utilicen dicho paquete.
Los componentes siempre están asociados a otros circuitos o sistemas diseñados
previamente. Son de mucha utilidad en el diseño jerárquico.
14
Introducción al Lenguaje de Descripción de Hardware VHDL.
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante, CIME, CUJAE, 2004.
Capítulo 2. Lenguajes de Descripción de Hardware.
Sintaxis para la declaración de un componente en VHDL.
La sintaxis para la declaración de un componente es la siguiente:
COMPONENT nombre_componente
GENERIC (
Nombre de la constante genérica: tipo :=Valor de la constante ;
...
Nombre de la constante genérica: tipo :=Valor de la constante
);
PORT (
Nombre de señal: modo tipo de la señal ;
...
Nombre de señal: modo tipo de la señal
);
END COMPONENT ;
Después que el componente ha sido definido, para utilizarlo dentro de una arquitectura debe
ser llamado (“instanciado”); la instancia de un componente se realiza de la manera
siguiente:
Los valores reales de las constantes genéricas se sobrescriben a los valores formales
declarados para las mismas. Por omisión se asignan los valores formales.
El listado de las constantes genéricas y de las señales se puede escribir de dos formas
diferentes:
a) Listado posicional. En este caso las constantes y señales reales se escriben en el mismo
orden en que fueron escritas las constantes y señales formales.
b) Listado explícito. En este caso se escribe explícitamente la asoción realizada entre cada
constante o señal formal con su correspondiente real. El orden en que se escriben es
arbitrario.
Se realiza así: Parámetro formal => Parámetro real
15
Introducción al Lenguaje de Descripción de Hardware VHDL.
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante, CIME, CUJAE, 2004.
Capítulo 2. Lenguajes de Descripción de Hardware.
Ejemplo 2-7. Escriba un programa en VHDL para diseñar un circuito igual al dado en el
ejemplo 2-6 utilizando un componente declarado en la zona de declaraciones de la
arquitectura.
ENTITY A_ARITM IS
PORT (
x, y: in integer range 3 DOWNTO 0 ;
sel1, sel0 : in bit ;
w: out integer range 36 DOWNTO 0
) ;
END A_ARITM ;
BEGIN
END A_ARITM_ARCH ;
16
Introducción al Lenguaje de Descripción de Hardware VHDL.
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante, CIME, CUJAE, 2004.
Capítulo 2. Lenguajes de Descripción de Hardware.
Al igual que ocurre con los componentes, las funciones y procedimientos (llamados sub
programas en VHDL) pueden definirse en la zona de declaraciones de una arquitectura en
este caso solamente pueden ser utilizados en esa arquitectura. También pueden definirse
dentro de un paquete y serán visibles para todos los diseños que utilicen el paquete.
A continuación se presenta la sintaxis para la definición de las funciones y de los
procedimientos así como algunos ejemplos en los que se ilustra la utilización de los
mismos.
Function nombre (
señal: tipo ;
…
señal: tipo
)
Return tipo IS
Declaraciones de tipos, de constantes, de variables.
Definición de funciones, de procedimientos
Begin
Sentencia secuencial
…
Sentencia secuencial
End nombre ;
Para utilizar la función, que ha sido definida previamente, se realiza su llamada dentro del
cuerpo de una arquitectura, de la siguiente forma:
Se asigna a la señal, cuyo nombre se especifica, el valor retornado por la función que ha
sido llamada. Las señales reales y formales se asocian de la misma manera que la utilizada
para el caso de lo componentes.
17
Introducción al Lenguaje de Descripción de Hardware VHDL.
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante, CIME, CUJAE, 2004.
Capítulo 2. Lenguajes de Descripción de Hardware.
Architecture mux_AR of mux is
BEGIN -- De la arquitectura
w <= mux1 (s => s, y => b, x => a) ; -- "Llama" la función mux1 definida en esta
-- arquitectura. La asociación entre los parámetros formales de la función (x, y, s) y los
-- reales (a, b, s) es explícita.
END mux_AR ;
Procedure nombre (
señal: modo tipo ;
…
señal: modo tipo
) IS
Zona de declaraciones
Begin
Sentencia secuencial
...
Sentencia secuencial
End procedure ;
Ejemplo 2-9. Escriba un programa en VHDL para diseñar un flip flop tipo D utilizando un
procedimiento (procedure) definido en la zona de declaraciones de la arquitectura.
-- Solución: fichero: DFF_PRO.VHD
Library IEEE ; Use IEEE.std_logic_1164.all ;
ENTITY DFF_PRO IS
PORT (CLK, D: IN STD_LOGIC ;
18
Introducción al Lenguaje de Descripción de Hardware VHDL.
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante, CIME, CUJAE, 2004.
Capítulo 2. Lenguajes de Descripción de Hardware.
Q : OUT STD_LOGIC ) ;
END DFF_PRO ;
END DFF_PRO_ARCH ;
Ejemplo 2-10. Escriba en VHDL un paquete que contenga la declaración del componente
aritmet1 correspondiente al circuito diseñado en el Ejemplo 2-6, la definición de una
función para un multiplexor de 2 a 1 y la definición de un procedimiento que permita
diseñar un flip flop tipo D.
Library IEEE ;
Use IEEE.std_logic_1164.all ;
Package C_F_P_KG IS
-- Zona de declaraciones del paquete C_F_P_KG:
19
Introducción al Lenguaje de Descripción de Hardware VHDL.
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante, CIME, CUJAE, 2004.
Capítulo 2. Lenguajes de Descripción de Hardware.
-- arquitectura correspondiente al Ejemplo 2-6):
FUNCTION mux2 (
x, y, s: STD_LOGIC
)
RETURN STD_LOGIC IS
Begin
Return ((x and not s) or (y and s)) ;
End mux2 ;
20
Introducción al Lenguaje de Descripción de Hardware VHDL.
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante, CIME, CUJAE, 2004.
Capítulo 2. Lenguajes de Descripción de Hardware.
END C_F_P_KG ;
Library IEEE ;
Use IEEE.std_logic_1164.all ;
Use work.c_f_p_kg.all ; -- Hace visible todo (all) el contenido del paquete C_F_P_KG.
ENTITY C_ARITM IS
PORT (
x, y: in integer range 3 DOWNTO 0 ;
sel1, sel0 : in bit ;
Salida: out integer range 36 DOWNTO 0
) ;
END C_ARITM ;
END C_ARITM_ARCH ;
21
Introducción al Lenguaje de Descripción de Hardware VHDL.
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante, CIME, CUJAE, 2004.
Capítulo 2. Lenguajes de Descripción de Hardware.
END mux_2a1_ARCH ;
Library IEEE ;
Use IEEE.std_logic_1164.all ;
Use work.c_f_p_kg.all ; -- Hace visible todo (all) el contenido del paquete C_F_P_KG.
ENTITY D_FLFLOP IS
PORT (CLK, D: IN STD_LOGIC ;
Q: OUT STD_LOGIC ) ;
END D_FLFLOP ;
END D_FLFLOP_ARCH ;
La validez de los operadores dados en la Tabla 2-2 se ha extendido a otros tipos para los
que no estaban originalmente definidos Por ejemplo el paquete estándar
IEEE.std_logic_1164 define la extensión de los operadores lógicos y de concatenación para
los tipos std_logic y std_logic_vector; sin embargo la extensión de los operadores de
relación y aritméticos para los tipos std_logic y std_logic_vector no están definidos en el
paquete IEEE.std_logic_1164.
Ejemplo 2-14. Diseñe un buffer con tercer estado cuyo comportamiento se corresponda
con la tabla funcional siguiente:
Entradas Salida
EN_L A Y
1 – Tercer estado
0 0 0
0 1 1
Solución:
-- Fichero Ejem2_14.vhd
22
Introducción al Lenguaje de Descripción de Hardware VHDL.
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante, CIME, CUJAE, 2004.
Capítulo 2. Lenguajes de Descripción de Hardware.
Library ieee ;
Use ieee.std_logic_1164.all ;
En VHDL un diseño puede utilizar componentes. Como se dijo antes, esto constituye una
gran ventaja pues facilita el trabajo en equipo y la distribución de tareas entre distintos
grupos de diseñadores. A medida que se sube hacia el nivel de jerarquía máxima, la
arquitectura se hace más general mientras que en los niveles inferiores el grado de detalle
es mayor. En la Figura 2-2 se presenta un esquema que ilustra los diferentes niveles
jerárquicos.
Arquitectura 1
Entidad 2 Entidad 3
Arquitectura Arquitectura
Entidad 4
Arquitectura 4
En los Ejemplos 2-15, 2-16 y 2-17, que aparecen a continuación, se ilustra la utilización del
diseño jerárquico en VHDL.
23
Introducción al Lenguaje de Descripción de Hardware VHDL.
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante, CIME, CUJAE, 2004.
Capítulo 2. Lenguajes de Descripción de Hardware.
Ejemplo 2-15. Utilice VHDL y diseñe un CLC con tres entradas a, b, c y una salida T que
realice la función mostrada en la tabla siguiente:
Entradas Salida
a b c T
0 0 - 0
0 1 0 0
0 1 1 1
1 0 - 1
1 1 - 0
Solución:
-- fichero t.vhd
entity T is port (a, b ,c : in bit ;
T : out bit) ;
end T ;
architecture T of T is begin
T <= '1' WHEN a = '0' and b = '1' and c = '1' ELSE
'1' WHEN a = '1' and b = '0' ELSE
'0' ;
end T ; -- Note el tratamiento dado a los opcionales.
Ejemplo 2-16. Utilice VHDL y diseñe un CLC con tres entradas a, b, c y una salida W que
realice la función mostrada en la tabla siguiente:
24
Introducción al Lenguaje de Descripción de Hardware VHDL.
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante, CIME, CUJAE, 2004.
Capítulo 2. Lenguajes de Descripción de Hardware.
Entradas Salida
a b c W
0 - - 1
1 0 - 0
1 1 0 0
1 1 1 1
Solución:
-- fichero W.vhd
entity W is port (a, b, c : in bit ;
W : out bit) ;
end W ;
architecture W of W is begin
W <= '1' WHEN a = '0' ELSE
'1' WHEN b = '1' and c = '1' ELSE
'0' ;
end W ;
Ejemplo 2-17. Utilice el diseño jerárquico en VHDL y diseñe un CLC con tres entradas
a,b,c y una salida F que realice la función T dada en el Ejemplo 2-15 ó la función W dada
en el Ejemplo 2-16, de acuerdo al valor que tome una entrada adicional de selección, S .
Cuando S = '0' la salida debe ser F = T y para S = '1' será F = W.
Solución:
Un diagrama en bloques ayuda a visualizar los requerimientos del sistema que se desea
diseñar. En este caso el diagrama es el siguiente:
25
Introducción al Lenguaje de Descripción de Hardware VHDL.
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante, CIME, CUJAE, 2004.
Capítulo 2. Lenguajes de Descripción de Hardware.
26
Introducción al Lenguaje de Descripción de Hardware VHDL.
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante, CIME, CUJAE, 2004.
Capítulo 2. Lenguajes de Descripción de Hardware.
Bloques en VHDL.
Ejemplo 2-18. Escriba un programa en VHDL para realizar el diseño de un circuito que
realice la función lógica y = a.b + c utilizando dos bloques.
27
Introducción al Lenguaje de Descripción de Hardware VHDL.
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante, CIME, CUJAE, 2004.
Capítulo 2. Lenguajes de Descripción de Hardware.
y1 <= a and b ;
End block and1 ; -- Final del bloque and1.
y <= y2 ;
End bloques_arch ;
Arreglos en VHDL.
Los arreglos son tipos que pueden ser definidos por el usuario de VHDL.
Ejemplo 2-19. Escriba un programa en VHDL para obtener un CLC que tenga dos
entradas de 4 bit cada una (C1, C0), una entrada de selección, S, y dos salidas (Y1, Y0).
Las salidas del circuito deben comportarse de la forma siguiente:
28
Introducción al Lenguaje de Descripción de Hardware VHDL.
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante, CIME, CUJAE, 2004.
Capítulo 2. Lenguajes de Descripción de Hardware.
Library IEEE ;
Use IEEE.std_logic_1164.all ;
ENTITY mux2_arr IS
PORT (S : in std_logic ;
C1, C0: in std_logic_vector (3 downto 0) ;
Y1,Y0 : buffer std_logic_vector (3 downto 0) ) ;
END mux2_arr ;
begin
salida(1) <= c1 when S = '1' ELSE
"ZZZZ"; -- En este caso las Z tienen que ser mayúsculas pues representan
-- uno de los nueve valores posibles de las señales del tipo std_logic
salida(0) <= c0 when S = '0' ELSE
(Others => 'Z' ) ; -- (Others => 'Z' ) aquí es equivalente a "ZZZZ"
y1 <= salida(1) ;
y0 <= salida(0) ;
end mux2_arr ;
Procesos en VHDL.
Un proceso (process) es equivalente a una sentencia que es tratada en forma concurrente,
simultánea, con otros process. Cada process contiene un conjunto de sentencias que son
analizadas en forma secuencial, una después de otra. Un process tiene una lista de
sensibilidad formada por un conjunto de señales cuya variación dá lugar a la activación del
process.
Declaración de tipos
29
Introducción al Lenguaje de Descripción de Hardware VHDL.
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante, CIME, CUJAE, 2004.
Capítulo 2. Lenguajes de Descripción de Hardware.
Declaración de variables
Declaración de constantes
Definición de funciones
Definición de procedimientos
Begin
Sentencia secuencial
...
Sentencias secuencial
End Process ;
CASE en VHDL.
Opera a partir de una sentencia que habilita o no el procesamiento de otras sentencias. Sólo
se puede utilizar dentro de un proceso o de un subprograma.
30
Introducción al Lenguaje de Descripción de Hardware VHDL.
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante, CIME, CUJAE, 2004.
Capítulo 2. Lenguajes de Descripción de Hardware.
La sintaxis para declarar un CASE es la siguiente:
CASE expresión IS
End CASE ;
Ejemplo 2-20. Diseñe un circuito lógico combinacional que funcione de acuerdo a la tabla
siguiente:
----------------------------------------------
-- ENTRADAS SALIDA
----------------------------------------------
-- G S Y
----------------------------------------------
-- 0 - Alta impedancia
-- 1 0 C0
-- 1 1 C1
-- 1 2 C2
-- 1 3 C3
----------------------------------------------
Library IEEE;
Use IEEE.std_logic_1164.all ;
Entity mux4 is
Port (G, C3, C2, C1, C0 : in std_logic ;
S : in integer range 3 downto 0 ;
Y : out std_logic ) ;
end mux4 ;
Architecture mux4_arch of mux4 is
Begin
Process (G, S, C3, C2, C1, C0)
Begin
IF G = '0' THEN y <= 'Z' ;
ELSE
CASE S IS
When 0 => y <= C0 ;
When 1 => y <= C1 ;
31
Introducción al Lenguaje de Descripción de Hardware VHDL.
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante, CIME, CUJAE, 2004.
Capítulo 2. Lenguajes de Descripción de Hardware.
When 2 => y <= C2 ;
When OTHERS => y <= C3 ;
END CASE ;
END IF ;
End process ;
End mux4_arch ;
Ejemplo 2-21. Escriba un programa en VHDL para obtener un CLC que funcione según
la Tabla de la Verdad siguiente:
Entradas Salida
G B A Y
0 0 0 “0000”
0 0 1 “0000”
0 1 0 “0000”
0 1 1 “0000”
1 0 0 “0001”
1 0 1 “0010”
1 1 0 “0100”
1 1 1 “1000”
32
Introducción al Lenguaje de Descripción de Hardware VHDL.
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante, CIME, CUJAE, 2004.
Capítulo 2. Lenguajes de Descripción de Hardware.
ARCHITECTURE Dec_case_arch OF Dec_case IS
begin
Process (G, B, A)
Variable Entradas: std_logic_vector (2 downto 0) ;
Begin
Entradas := G & B & A ;
CASE Entradas IS
When "000"|"001"| "010"| "011" => Y <= ( others => ‘0’ ) ;
When "100" => Y <= "0001" ;
When "101" => Y <= "0010" ;
When "110" => Y <= "0100" ;
When "111" => Y <= "1000" ;
When others => NULL ; -- No hacer nada.
End case ;
End process ;
End dec_case_arch ;
LIBRARY ieee ;
USE ieee.std_logic_1164.all ;
ENTITY C3BIT IS
PORT (
CLK, LD_L : in std_logic ;
A : in integer range 7 downto 0 ;
Q : buffer integer range 7 downto 0
) ;
END C3BIT ;
33
Introducción al Lenguaje de Descripción de Hardware VHDL.
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante, CIME, CUJAE, 2004.
Capítulo 2. Lenguajes de Descripción de Hardware.
Library ieee ;
Use ieee.std_logic_1164.all ;
Package C3BITPKG is
Component C3BIT PORT (
CLK, LD_L : in std_logic ;
A : in integer range 7 downto 0 ;
Q : buffer integer range 7 downto 0
) ;
End component ;
End C3BITPKG ;
En VHDL hay tres tipos de sentencias wait: WAIT ON, WAIT UNTIL y WAIT FOR.
34
Introducción al Lenguaje de Descripción de Hardware VHDL.
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante, CIME, CUJAE, 2004.
Capítulo 2. Lenguajes de Descripción de Hardware.
En el caso del wait on se activa la ejecución de las sentencias secuenciales cuando ocurre
un cambio de cualquier tipo en alguna de las señales que aparecen a continuación de wait
on.
Para el wait until se activa la ejecución de las sentencias secuenciales cuando se produce
el cambio de la condicón de falsa a verdadera en la condición escrita a continuación de wait
until.
En el wait for se activa la ejecución de las sentencias secuenciales después que transcurre
el tiempo especificado que aparece escrito a continuación de wait for.
Ejemplo 2-23. Escriba un programa en VHDL que permita diseñar un selector de datos de
2 a 1 con salida activa en el nivel alto. Utilice la sentencia wait on.
Ejemplo 2-24. Escriba un programa en VHDL para obtener un flip flor tipo D con preset
sincrónico. Utlice la sentencia wait until.
35
Introducción al Lenguaje de Descripción de Hardware VHDL.
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante, CIME, CUJAE, 2004.
Capítulo 2. Lenguajes de Descripción de Hardware.
Begin
WAIT UNTIL (clk ='1' and clk'event) ;
If pr_l = '0' then q <= '1' ;
Else q <= d ;
End if ;
END Process ;
END FFD_WAIT ;
El wait for se utiliza mucho en los bancos de prueba, como se ilustra en el ejemplo 2-36.
Lazos en VHDL.
Son enunciados secuenciales, y por tanto, se utilizan dentro de un proceso o de un
subprograma. Hay tres tipos de lazos
a) El simple: Loop
b) El for loop (que es el más utilizado)
c) El while loop.
36
Introducción al Lenguaje de Descripción de Hardware VHDL.
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante, CIME, CUJAE, 2004.
Capítulo 2. Lenguajes de Descripción de Hardware.
También puede abandonarse la ejecución del lazo mediante la sentencia EXIT, cuya
sintaxis es la siguiente: Exit When < condición > ;
Ejemplo 2-25. Diseñe un CLC que cuente el número de unos que exista en una palabra de
n bit. Utilice For Loop.
ENTITY CON_LOOP is
begin
process(n)
variable n_unos: integer range 0 to K ;
begin
n_unos := 0 ;
for j in n'range loop
if n(j)='1' then n_unos := n_unos + 1 ;
end if ;
end loop ;
unos <= n_unos ;
end process ;
end CON_LOOP_arch ;
37
Introducción al Lenguaje de Descripción de Hardware VHDL.
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante, CIME, CUJAE, 2004.
Capítulo 2. Lenguajes de Descripción de Hardware.
Ejemplo 2-26. Diseñe un CLC que cuente el número de unos que exista en una palabra de
n bit. Utilice While Loop.
ENTITY wh_loop is
begin
process(n)
variable n_unos: integer range 0 to K ;
variable J: integer range 0 to K ;
begin
n_unos := 0 ;
j := 0 ;
While j < k loop
if n(j ) = '1' then n_unos := n_unos + 1 ;
end if ;
j := j + 1 ;
end loop ;
unos <= n_unos ;
end process ;
end WH_LOOP_arch ;
Ejemplo 2-27. Diseñe un CLC que cuente el número de unos que exista en el primer y
último nibble de una palabra de n bit. Utilice while loop, for loop, next y exit.
ENTITY nextexit is
38
Introducción al Lenguaje de Descripción de Hardware VHDL.
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante, CIME, CUJAE, 2004.
Capítulo 2. Lenguajes de Descripción de Hardware.
PORT (n: in bit_vector (0 to K ) ;
p_nibble : buffer integer range 0 to 4 ;
u_nibble : buffer integer range 0 to 4 ) ;
END nextexit ;
begin
process(n)
ultimo := 0 ;
For j in 4 to k loop
NEXT WHEN j = 4 ; -- Pasa a la iteración siguiente.
NEXT WHEN j = 5 ; -- Pasa a la iteración siguiente.
end process ;
end nextexit_arch ;
Ejemplo 2-28. Escriba un programa en VHDL para diseñar un CLC que funcione como un
conversor de código binario de 7 bit a código Hamming de 7 bit.
Vea otra solución y algunos aspectos relacionados con el código Hamming de 7 bit en el
Capítulo 3 (Ejemplo 3-18).
39
Introducción al Lenguaje de Descripción de Hardware VHDL.
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante, CIME, CUJAE, 2004.
Capítulo 2. Lenguajes de Descripción de Hardware.
library IEEE ;
use IEEE.std_logic_1164.all ;
ENTITY c_bi_ha7 is
PORT ( h: in std_logic_vector (1 to K ) ;
hs: buffer std_logic_vector (1 to K ) ;
C, B, A : buffer std_logic ) ;
END c_bi_ha7 ;
process (h)
begin
error := Ci & Bi & Ai ;
nh1 := not h(1) ; nh2 := not h(2) ; nh3 := not h(3) ;
nh4 := not h(4) ; nh5 := not h(5) ; nh6 := not h(6) ;
nh7 := not h(7) ;
Ai := h(1) ;
For j in 3 to k loop
NEXT WHEN j = 4 ;
NEXT WHEN j = 6 ;
if h(j) = '1' then Ai:= not Ai ;
end if ;
end loop ;
Bi := h(2) ;
For j in 3 to k loop
NEXT WHEN j=4 ;
NEXT WHEN j=5 ;
if h(j) = '1' then Bi:= not Bi ;
end if ;
end loop ;
Ci := h (4) ;
For j in 5 to k loop
if h(j)= '1' then Ci:= not Ci ;
end if ;
40
Introducción al Lenguaje de Descripción de Hardware VHDL.
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante, CIME, CUJAE, 2004.
Capítulo 2. Lenguajes de Descripción de Hardware.
end loop ;
A <= Ai ;
B <= Bi ;
C <= Ci ;
CASE error is
When "000" => hs <= h ;
When "001" => hs <= nh1 & h(2 to k) ;
When "010" => hs <= h(1)& nh2 & h(3 to k) ;
When "011" => hs <= h(1 to 2) & nh3 & h(4 to k) ;
When "100" => hs <= h(1 to 3) & nh4 & h(5 to k) ;
When "101" => hs <= h(1 to 4) & nh5 & h(6 to k) ;
When "110" => hs <= h(1 to 5) & nh6 & h(k) ;
When "111" => hs <= h(1 to 6) & nh7 ;
When others => NULL ; -- No hacer nada.
end case ;
end process ;
end c_bi_ha7_arch ;
Ejemplo 2-29. Escriba un programa en VHDL para diseñar un CLC que permita obtener
en sus salidas el producto de una constante genérica por un número entero a, de tres bit.
-- Solución:
Library IEEE;
Use IEEE.std_logic_1164.all ;
Entity producto is
GENERIC (
n : integer := 5 ; -- n es una constante genérica
41
Introducción al Lenguaje de Descripción de Hardware VHDL.
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante, CIME, CUJAE, 2004.
Capítulo 2. Lenguajes de Descripción de Hardware.
m: integer := 7 ; -- m es una constante genérica
p: integer := 35 -- p es una constante genérica
);
Port (
a: in integer range 0 to m ;
Producto: out integer range 0 to p
) ;
end producto ;
Architecture producto_arch of producto is
begin
process (a)
variable ys: integer range 0 to p ;
variable j: integer range 0 to n ;
Begin
j:= 0 ;
ys:= 0 ;
WHILE j < n LOOP
ys := ys + a ;
j:= j + 1 ;
end loop ;
Producto <= ys ;
end process ;
end producto_arch ;
42
Introducción al Lenguaje de Descripción de Hardware VHDL.
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante, CIME, CUJAE, 2004.
Capítulo 2. Lenguajes de Descripción de Hardware.
Ejemplo 2-30. Utilice la sentencia generate y escriba un programa en VHDL para generar
un buffer de 8 líneas con tercer estado a partir de un buffer simple con tercer estado. El
circuito debe tener dos líneas de habilitación independientes que sirvan para manejar el
tercer estado de cada uno de los “nibbles” que constituyen los 8 bit de salida.
Solución:
Library IEEE ;
Use IEEE.std_logic_1164.all ;
entity Tri is port (a, oe: in std_logic ;
y : out std_logic ) ;
end Tri ;
-- Ahora se define un componente del buffer anterior, dentro de un paquete que llamaremos
– tripkg:
Library IEEE ;
Use IEEE.std_logic_1164.all ;
PACKAGE tripkg IS
COMPONENT Tri port (a, oe : in std_logic ;
y : out std_logic ) ;
END COMPONENT ;
END TRIPKG ;
43
Introducción al Lenguaje de Descripción de Hardware VHDL.
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante, CIME, CUJAE, 2004.
Capítulo 2. Lenguajes de Descripción de Hardware.
library IEEE ;
use IEEE.std_logic_1164.all ;
use work.TRIPKG.all ; -- Hace visible el paquete que contiene el componente del buffer
-- simple.
entity buff_gen is
port ( rd : in STD_LOGIC_VECTOR (1 downto 0) ;
vin : in STD_LOGIC_VECTOR (7 downto 0) ;
vout : out STD_LOGIC_VECTOR (7 downto 0) ) ;
end buff_gen ;
44
Introducción al Lenguaje de Descripción de Hardware VHDL.
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante, CIME, CUJAE, 2004.
Capítulo 2. Lenguajes de Descripción de Hardware.
Operadores de desplazamiento
En VHDL hay seis operadores de desplazamiento que se identifican por las palabras claves:
ROR, ROL, SRL, SRA, SLA y SLL. Los dos primeros son de tipo circular y los cuatro
últimos son no circulares.
Donde n es un entero (positivo o negativo) que indica el número de bit que deben
desplazarse dentro de la cadena.
Las Cadena1 y Cadena2 pueden ser diferentes o iguales, como se ilustra en los Ejemplos 2-
31 y 2-32.
B A -- Resultado
B := "1100" ; A <= B ROR 6 ; -- “0011”
B := "1100" ; A <= B ROL 1 ; -- “1001”
B := "1100" ; A <= B SRL 2 ; -- “0011”
B := "1100" ; A <= B SRA 2 ; -- “1111”
B := "1100" ; A <= B SLA 2 ; -- “0000”
B := "1100" ; A <= B SLL 2 ; -- “0000”
B := "1100" ; A <= B ROR -1 ; -- “1001”
B := "1100" ; A <= B SRA -2 ; -- “0000”
45
Introducción al Lenguaje de Descripción de Hardware VHDL.
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante, CIME, CUJAE, 2004.
Capítulo 2. Lenguajes de Descripción de Hardware.
Ejemplo 2-31. Escriba un programa en VHDL para comprobar los resultados dados en la
tabla anterior.
46
Introducción al Lenguaje de Descripción de Hardware VHDL.
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante, CIME, CUJAE, 2004.
Capítulo 2. Lenguajes de Descripción de Hardware.
Q3 Q2 Q1 Q0
0 0 0 1
0 0 1 0
0 1 0 0
1 0 0 0
library IEEE;
use IEEE.std_logic_1164.all;
entity anillo_4 is
port (
CLK, CLR_L, PR_L : IN STD_LOGIC ;
Q: OUT BIT_VECTOR (3 downto 0)
) ;
end anillo_4 ;
47
Introducción al Lenguaje de Descripción de Hardware VHDL.
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante, CIME, CUJAE, 2004.
Capítulo 2. Lenguajes de Descripción de Hardware.
Como se sabe el modo INOUT se utiliza en VHDL para las señales bidireccionales. En el
ejemplo que aparece a continuación se ilustra su utilización:
LD 8 8
Reg q
CLK
SER
OE_L
48
Introducción al Lenguaje de Descripción de Hardware VHDL.
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante, CIME, CUJAE, 2004.
Capítulo 2. Lenguajes de Descripción de Hardware.
if ld_l = '0' then reg <= q ;
else reg <= ser & reg (7 downto 1) ;
end if ;
end if ;
end process ;
Assert-Report-Severity en VHDL.
Las palabras reservadas assert, report y severity en VHDL están asociadas con sentencias
que sirven para el control de la simulación.
Assert <Condición>
Report “texto”
Severity Note, Warning, Error o Failure ;
49
Introducción al Lenguaje de Descripción de Hardware VHDL.
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante, CIME, CUJAE, 2004.
Capítulo 2. Lenguajes de Descripción de Hardware.
Assert-report se puede escribir tanto en el cuerpo de una arquitectura como de una entidad,
según se ilustra en los ejemplos siguientes:
Entradas de Salida
selección (Y)
(S)
00 C0
01 C1
10 C2
11 C3
-- Solución: MUX_A_R.VHD
Library IEEE;
Use IEEE.std_logic_1164.all ;
Entity MUX_A_R is
Port (S: in bit_vector (1 downto 0) ;
C3, C2, C1, C0: in bit ;
salida : buffer bit ) ;
begin
assert (S = "00" or S = "01" or S = "10" or S = "11")
report "Las entradas S tienen un valor no permisible"
severity error ;
end MUX_A_R ;
50
Introducción al Lenguaje de Descripción de Hardware VHDL.
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante, CIME, CUJAE, 2004.
Capítulo 2. Lenguajes de Descripción de Hardware.
end process ;
end MUX_A_R_arch ;
END mux_a_rc ;
end mux_a_rc ;
Entre las ventajas de VHDL se encuentra la posibilidad de escribir programas que actúen
como bancos de prueba para la simulación de los circuitos diseñados. Un banco de prueba
es un programa que permite aplicar los estímulos deseados al componente que está
sometido a prueba. En el caso de un componente sencillo el banco de prueba también será
muy simple; pero si el componente es complejo la escritura del banco apropiado puede
51
Introducción al Lenguaje de Descripción de Hardware VHDL.
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante, CIME, CUJAE, 2004.
Capítulo 2. Lenguajes de Descripción de Hardware.
resultar incluso más difícil que el diseño del componente en sí mismo. Para aplicar el
banco de prueba es necesario disponer de un simulador VHDL.
A continuación se presenta un banco de pruebas muy simple que sirve, no obstante, para
ilustrar algunos aspectos básicos relacionados con los mismos:
Entity and2 IS
PORT (A, B : in bit ;
Y : out bit ) ;
End and2 ;
End and2_arch ;
-- Solución
-- Programa para el banco de prueba:
Entity banco IS
End banco ;
AT <= ‘0’ ;
BT <= ‘0’ ;
WAIT FOR 20 NS ;
AT <= ‘1’ ;
BT <= ‘0’ ;
WAIT FOR 20 NS ;
52
Introducción al Lenguaje de Descripción de Hardware VHDL.
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante, CIME, CUJAE, 2004.
Capítulo 2. Lenguajes de Descripción de Hardware.
AT <= ‘0’ ;
BT <= ‘1’ ;
WAIT FOR 20 NS ;
AT <= ‘1’ ;
BT <= ‘1’ ;
WAIT ;
End Process ;
End banco_arch ;
En las referencias [3, 5, 6, 12] pueden encontrarse otros ejemplos de bancos de prueba.
Retardos en VHDL.
En VHDL se pueden introducir retardos durante la simulación de un modelo de manera que
éste refleje lo mejor posible el comportamiento real del circuito diseñado. Para ello se
utilizan las palabras reservadas AFTER, WAIT, INERTIAL, TRANSPORT y REJECT.
Ejemplo 2-37. Escriba un fichero en VHDL para obtener un multiplexor de cuatro canales
y una salida con demora de 25 ns entre la entrada D y la salida.
Entity MUX4 IS
PORT (A, B, C, D : in bit ;
S : in bit_vector (1 DOWNTO 0) ;
Y : out bit ) ;
End MUX4 ;
end mux4_arch ;
53
Introducción al Lenguaje de Descripción de Hardware VHDL.
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante, CIME, CUJAE, 2004.
Capítulo 2. Lenguajes de Descripción de Hardware.
Atributos en VHDL.
Los atributos (attribute) en VHDL tienen diversos usos, uno de ellos es el de especificar los
terminales externos donde se desea que aparezcan determinadas señales. En el ejemplo
siguiente se ilustra este caso:
Ejemplo 2-38. Escriba un programa en VHDL para obtener las ocho compuertas lógicas.
Utilice los atributos para asignar las señales en terminales específicos, suponga que el
dispositivo programable es un 22v10 y que el terminal 1 no debe utilizarse.
Solución:
--Fichero puertas.vhd
Entity puertas is
port ( A, B : in bit ;
y_not, y_or2, y_and2 : out bit ;
y_nor2, y_nand2, y_xor2, y_xnor2, y_buffer: out bit ) ;
END puertas ;
end puertas ;
54
Introducción al Lenguaje de Descripción de Hardware VHDL.
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante, CIME, CUJAE, 2004.
Capítulo 2. Lenguajes de Descripción de Hardware.
y_buffer = a
y_xnor2 = /a * /b + a * b
y_xor2 = a * /b + /a * b
/y_nand2 = a * b
y_nor2 = /a * /b
y_and2 = a * b
/y_or2 = /a * /b
y_not = /a
C22V10
__________________________________________
not used *| 1 | |24|* not used
a=|2| |23|= y_not
b=|3| |22|= y_or2
not used *| 4 | |21|= y_and2
not used *| 5 | |20|= y_nor2
not used *| 6 | |19|= y_nand2
not used *| 7 | |18|= y_xor2
not used *| 8 | |17|= y_xnor2
not used *| 9 | |16|= y_buffer
not used *|10| |15|* not used
not used *|11| |14|* not used
not used *|12| |13|* not used
__________________________________________
L00044
11111111111111111111111111111111111111111111
11111011111111111111111111111111111111111111
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
55
Introducción al Lenguaje de Descripción de Hardware VHDL.
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante, CIME, CUJAE, 2004.
Capítulo 2. Lenguajes de Descripción de Hardware.
00000000000000000000000000000000000000000000
* Node y_not[23] => OE : 1 ,LOGIC : 8 *
L00440
11111111111111111111111111111111111111111111
11111011101111111111111111111111111111111111
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
* Node y_or2[22] => OE : 1 ,LOGIC : 10 *
L00924
11111111111111111111111111111111111111111111
11110111011111111111111111111111111111111111
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
* Node y_and2[21] => OE : 1 ,LOGIC : 12 *
L01496
11111111111111111111111111111111111111111111
11111011101111111111111111111111111111111111
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
56
Introducción al Lenguaje de Descripción de Hardware VHDL.
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante, CIME, CUJAE, 2004.
Capítulo 2. Lenguajes de Descripción de Hardware.
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
* Node y_nor2[20] => OE : 1 ,LOGIC : 14 *
L02156
11111111111111111111111111111111111111111111
11110111011111111111111111111111111111111111
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
* Node y_nand2[19] => OE : 1 ,LOGIC : 16 *
L02904
11111111111111111111111111111111111111111111
11110111101111111111111111111111111111111111
11111011011111111111111111111111111111111111
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
* Node y_xor2[18] => OE : 1 ,LOGIC : 16 *
L03652
11111111111111111111111111111111111111111111
11111011101111111111111111111111111111111111
57
Introducción al Lenguaje de Descripción de Hardware VHDL.
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante, CIME, CUJAE, 2004.
Capítulo 2. Lenguajes de Descripción de Hardware.
11110111011111111111111111111111111111111111
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
* Node y_xnor2[17] => OE : 1 ,LOGIC : 14 *
L04312
11111111111111111111111111111111111111111111
11110111111111111111111111111111111111111111
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
* Node y_buffer[16] => OE : 1 ,LOGIC : 12 *
L04884
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000
* Not Used #[15] => OE : 1 ,LOGIC : 10 *
58
Introducción al Lenguaje de Descripción de Hardware VHDL.
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante, CIME, CUJAE, 2004.
Capítulo 2. Lenguajes de Descripción de Hardware.
59
Introducción al Lenguaje de Descripción de Hardware VHDL.
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante, CIME, CUJAE, 2004.
Capítulo 2. Lenguajes de Descripción de Hardware.
Ejercicios.
2-1. Diseñe con VHDL un CLC que funcione de acuerdo a la tabla siguiente:
Entradas Salidas
G_L B A Y3 Y2 Y1 Y0
1 - - 1 1 1 1
0 0 0 1 1 1 0
0 0 1 1 1 0 1
0 1 0 1 0 1 1
0 1 1 0 1 1 1
2-2. Repita el diseño del ejercicio anterior utilizando sentencias condicionales del tipo: if …
then … else (recuerde que estas sentencias sólo pueden emplearse dentro de un proceso o
de un subprograma).
entity ejer2_3 is
port ( a, b : in bit_vector (3 downto 0) ;
S, EN_L : in bit ;
y : out bit_vector (3 downto 0) ) ;
end ejer2_3 ;
begin
end ejer2_3 ;
2-5. Escriba un programa en VHDL para obtener un circuito en cuyas entradas se aplican
dos números (a, b) enteros de tres bit cada uno y que brinde en sus salidas la suma de los
60
Introducción al Lenguaje de Descripción de Hardware VHDL.
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante, CIME, CUJAE, 2004.
Capítulo 2. Lenguajes de Descripción de Hardware.
mismos, su producto, el módulo de su diferencia o el cuadrado de su suma de acuerdo al
valor que tomen dos entradas adicionales de selección S1 y S0, según la tabla siguiente:
2-6. Escriba un programa en VHDL para diseñar un latch tipo D, cuya ecuación
característica es: Q* = D.C + Q./C, utilizando un procedimiento (procedure) definido en
la zona de declaraciones de la arquitectura.
2-7. Utilice el diseño jerárquico en VHDL y diseñe un CLC con tres entradas a,b,c y una
salida f que realice la función t ó la función w, dadas en la tabla, de acuerdo al valor que
tome una entrada adicional de selección, s . Cuando s = 0 la salida debe ser f = t y para s =
1 será f = w.
Entradas Salidas
c b a t w
0 - - 1 0
1 0 0 1 1
1 0 1 0 0
1 1 0 0 1
1 1 1 1 0
2-8. Utilice los bloques que sean necesarios y escriba un programa en VHDL para realizar
el diseño de un circuito que realice la función lógica y = a.b + c.d + e.
2-9. Escriba un programa en VHDL para obtener un contador binario descendente de 3 bit.
Debe tener la posibilidad de realizar la carga paralelo en forma asincrónica.
61
Introducción al Lenguaje de Descripción de Hardware VHDL.
Autor: Dr. Alberto Hernández Pérez, Profesor Consultante, CIME, CUJAE, 2004.
Capítulo 2. Lenguajes de Descripción de Hardware.
2-10. Escriba un programa en VHDL para obtener un flip flor tipo D con reset asincrónico.
2-12. Escriba un programa en VHDL para obtener un contador de anillo de 8 estados, sin
auto corrección, con un “cero” circulante, cuya tabla de funcionamiento es la siguiente:
Q7 Q6 Q5 Q4 Q3 Q2 Q1 Q0
0 1 1 1 1 1 1 1
1 0 1 1 1 1 1 1
1 1 0 1 1 1 1 1
1 1 1 0 1 1 1 1
1 1 1 1 0 1 1 1
1 1 1 1 1 0 1 1
1 1 1 1 1 1 0 1
1 1 1 1 1 1 1 0
62