0% encontró este documento útil (0 votos)
181 vistas25 páginas

Introducción A VHDL

Este documento introduce el lenguaje de descripción de hardware VHDL. Explica brevemente el origen y evolución de VHDL y otros lenguajes HDL, las características principales de VHDL como la jerarquía, concurrencia y procesos secuenciales, y los elementos básicos de VHDL como entidades, arquitecturas, procesos, paquetes y bibliotecas. También cubre conceptos como puertos, señales, tipos de datos estándar como std_logic, y vectores.

Cargado por

eliu_obed
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
181 vistas25 páginas

Introducción A VHDL

Este documento introduce el lenguaje de descripción de hardware VHDL. Explica brevemente el origen y evolución de VHDL y otros lenguajes HDL, las características principales de VHDL como la jerarquía, concurrencia y procesos secuenciales, y los elementos básicos de VHDL como entidades, arquitecturas, procesos, paquetes y bibliotecas. También cubre conceptos como puertos, señales, tipos de datos estándar como std_logic, y vectores.

Cargado por

eliu_obed
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Introducción al VHDL

Lógica Digital y Microprogramable


1º DPE

Introducción a VHDL
• 1.- Origen y evolución de los HDL.
• 2.- Características del VHDL.
• 3.- Limitaciones del VHDL.
• 4.- Elementos básicos del VHDL.
• 5.- Señales y tipos de datos del VHDL.
• 6.- Operadores.
• 7.- Sentencias.

Lógica Digital y Introducción al VHDL 2


Microprogramable

1
1.- Origen y evolución de los HDL
• HDL: Hardware Description Language.
• Años 70: Primeros HDL. No tienen éxito.
• 1982: Aparece VHDL, impulsado por el
Departamento de Defensa de EEUU.
• VHDL: VHSIC HDL (Very High Speed
Integrated Circuit HDL).
• 1985: Aparece Verilog, de Gateway Design
Automatation. Gran aceptación industrial.
Lógica Digital y Introducción al VHDL 3
Microprogramable

1.- Origen y evolución de los HDL


• 1987: Debido a su éxito, IEEE adopta VHDL
como el HDL estándar, tras algunas revisiones.
• 1990: Cadence Design Systems compra
Gateway Design Automation y decide liberar
Verilog.
• 1993: Aparece un nuevo estándar VHDL,
compatible con el anterior.
• 1995: IEEE acepta también Verilog como
estándar.
Lógica Digital y Introducción al VHDL 4
Microprogramable

2
1.- Origen y evolución de los HDL
• En sus inicios fueron sólo simuladores.
• En la actualidad también implementan
Hardware, tanto ASIC (Application Specific
Integrated Circuits, circuitos integrados a
medida) como lógica programable (PLD).

Lógica Digital y Introducción al VHDL 5


Microprogramable

2.- Características del VHDL


• Jerarquía: Se pueden utilizar componentes definidos
previamente en nuevos diseños.
– El diseñador sólo debe preocuparse de la conexión de las
entradas y salidas del componente, y puede despreocuparse
de su implementación.
• Concurrencia: Los elementos funcionan todos a la vez
(en paralelo).
• Procesos secuenciales: Existen dentro de un tipo de
estructura llamado proceso (process).
– Los diferentes procesos funcionan en paralelo.
Lógica Digital y Introducción al VHDL 6
Microprogramable

3
3.- Limitaciones del VHDL
• El VHDL es un lenguaje de diseño digital. El
área analógica queda, de momento, descartada.
• El estándar IEEE 1076 describe el lenguaje y
su sintaxis, sin describir el estilo.
• Sólo es posible sintetizar lógica de un
subconjunto del lenguaje. Además, cada
fabricante define su subconjunto, por lo que a
veces hay que modificar ligeramente el código
para usarlo con otro fabricante.
Lógica Digital y Introducción al VHDL 7
Microprogramable

4.- Elementos básicos del VHDL.


• Entidad (entity)
• Arquitectura (architecture)
• Proceso (process)
• Paquete (package)
• Biblioteca (library)

Lógica Digital y Introducción al VHDL 8


Microprogramable

4
4.- Elementos básicos del VHDL.
• Entidad (entity).
– Es el interfaz con el exterior, sin describir su
funcionamiento.
– Su sintaxis es:
entity nombre_entidad is
port ( a, b: in std_logic;
c, d: out std_logic);
end nombre_entidad;

Lógica Digital y Introducción al VHDL 9


Microprogramable

4.- Elementos básicos del VHDL.


• Arquitectura (architecture)
– Es la descripción del funcionamiento, y está siempre
asociada a una entidad.
– Su sintaxis es: (ejemplo)
architecture nombre_arquitectura of nombre_entidad is
begin
c<= a xor b;
d<= a and b;
end nombre_arquitectura;

Lógica Digital y Introducción al VHDL 10


Microprogramable

5
4.- Elementos básicos del VHDL.
• Proceso (process)
– Es la parte del código que se ejecuta de modo secuencial.
– Los diferentes procesos actúan de forma concurrente (en
paralelo).
– Los procesos se encuentran dentro de las arquitecturas.
– No hay limitación al número de procesos dentro de una
arquitectura.
– Algunas sentencias sólo tienen sentido dentro de procesos
(por ejemplo la sentencia if… then… else).
– En la declaración del proceso, entre paréntesis se incluye la
lista de sensibilidades.

Lógica Digital y Introducción al VHDL 11


Microprogramable

4.- Elementos básicos del VHDL.


• Ejemplo de proceso (el nombre del proceso es opcional)
entity prueba is
Port ( a : in std_logic;
b : in std_logic;
c : out std_logic);
end prueba;

architecture Behavioral of prueba is


begin
func_o: process(a,b,c)
if (a='1' or b='1')
then
c<='1';
else
c<='0';
end process func_o;
end Behavioral;

Lógica Digital y Introducción al VHDL 12


Microprogramable

6
4.- Elementos básicos del VHDL.
• Paquete (package).
– Un paquete contiene un conjunto de definiciones
para ser utilizadas en diferentes diseños.
– Puede contener:
• Definiciones de constantes.
• Tipos de datos definidos por el usuario.
• Declaración de componentes.
• Subprogramas de VHDL.
• Etc…

Lógica Digital y Introducción al VHDL 13


Microprogramable

4.- Elementos básicos del VHDL.


• Biblioteca (library).
– Como en otros lenguajes de programación,
necesitamos incluir ciertas bibliotecas estándar.
– Incluiremos siempre la biblioteca IEEE, y
usaremos algunas de sus partes.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;

Lógica Digital y Introducción al VHDL 14


Microprogramable

7
5.- Puertos, señales y tipos de datos
• 5.1.- Diferencia entre puertos y señales
• 5.2.- Tipos de datos estándar
• 5.3.- Vectores
• 5.4.- Asociación de señales
• 5.5.- Tipos de datos de usuario

Lógica Digital y Introducción al VHDL 15


Microprogramable

5.1.- Diferencia entre puertos y señales


• Puertos son las conexiones físicas del
dispositivo, declaradas dentro de la entidad.
• Pueden ser de entrada (in), salida (out) o
bidireccionales (inout)
• En los diseños físicos se necesitan cables o
pistas de interconexión, pero internos del
circuito. Esto en VHDL lo llamamos señales
(signal)

Lógica Digital y Introducción al VHDL 16


Microprogramable

8
5.1.- Diferencia entre puertos y señales
• La forma de declarar puertos, siempre dentro
de la entidad, es:
• Nombre_puerto: tipo(in/out/inout) tipo_dato
• Ejemplo: a: out std_logic;
• La forma de declarar señales, siempre dentro
de la arquitectura, es:
• signal: nombre_señal tipo_dato
• Ejemplo: signal v: bit;
Lógica Digital y Introducción al VHDL 17
Microprogramable

5.2.- Tipos de datos estándar.


• Hay diferentes tipos de datos estándar, pero sólo el
tipo standard_logic puede usarse para síntesis de
circuitos.
• Otros tipos de datos son:
– Booleano (boolean). Admite sólo dos valores verdadero o
falso.
– Tiempo (time). Para simulaciones.
– Bit. Tiene dos valores posibles: ‘0’ y ‘1’
– Carácter (character). Ejemplos: ‘d’, ‘5’, ‘G’.
– Entero (integer).
– Real.
Lógica Digital y Introducción al VHDL 18
Microprogramable

9
5.2.- Tipos de datos estándar.
• Estados del tipo • La asignación, ya sea
std_logic: una señal o un puerto, se
– ‘U’: No inicializado. realiza mediante <=
– ‘X’: Desconocido. • Ejemplos:
– ‘0’: Nivel lógico ‘0’. • A<=B;
– ‘1’: Nivel lógico ‘1’.
• C<=‘1’;
– ‘Z’: Alta impedancia.
– ‘W’: Desconocido.
• D<=‘Z’;
– ‘L’: Nivel lógico ‘0’.
– ‘H’: Nivel lógico ‘1’.
– ‘-’: No importa
Lógica Digital y Introducción al VHDL 19
Microprogramable

5.3.- Vectores.
• Los tipos bit y std_logic se pueden definir como vectores, para
crear buses.
• El tipo carácter lo podemos definir como string (cadena de
carácteres), para crear textos.
• Para definirlos, se añade _vector y entre paréntesis el primer y
el último elemento.
• Ejemplos:
– A: std_logic_vector(3 downto 0); -- orden decreciente
– B: std_logic_vector(1 to 4); -- orden creciente
• Se puede usar el vector entero, o bien los elementos que lo
forman por separado. En este caso, para usarlos, se pone entre
paréntesis el número de elemento. Ejemplos: B, A(3)

Lógica Digital y Introducción al VHDL 20


Microprogramable

10
5.4.- Asociación de señales
• Se pueden asociar señales, es decir agrupar en buses,
de dos formas distintas, concatenación y agregado.
• Ejemplos:
-- primero definimos las señales
signal a,b,c,d: std_logic;
signal bus1: std_logic_vector(3 downto 0);
signal bus2: std_logic_vector(3 downto 0);
signal bus3: std_logic_vector(3 downto 0);
signal bus4: std_logic_vector(7 downto 0);

Lógica Digital y Introducción al VHDL 21


Microprogramable

5.4.- Asociación de señales


-- Ejemplos de concatenación
bus1 <= a & b & c & d;
bus4 <= bus1 & bus1;
-- Ejemplos de agregado
bus1<=(a,b,c,d);
bus4<=(bus1,bus2);
bus2<=(1 downto 0=>’1’, 2=>’Z’, 3=>’1’);
bus3<=(0 to 1=>’1’, others =>’0’);
Lógica Digital y Introducción al VHDL 22
Microprogramable

11
5.5.- Tipos de datos de usuario
• A veces es útil definir nuevos tipos, por
ejemplo para crear máquinas de estado.
• Sintaxis:
type nombre_tipo is
(aquí hay que enumerar cada valor posible del tipo,
separados por comas);
• Una vez definido el tipo, se pueden declarar y
usar señales de este tipo como de cualquier
otro.
Lógica Digital y Introducción al VHDL 23
Microprogramable

5.5.- Tipos de datos de usuario


• Ejemplo:
type estado is
(estado1, estado2, estado3, estado4);
...
signal mi_estado: estado;

mi_estado <= estado1;

Lógica Digital y Introducción al VHDL 24


Microprogramable

12
6.- Operadores.
• 6.1.- Operadores lógicos.
• 6.2.- Operadores de relación.
• 6.3.- Operadores aritméticos.

Lógica Digital y Introducción al VHDL 25


Microprogramable

6.1.- Operadores lógicos


• Existen 6 operadores lógicos: “not”, “and”, “or”,
“nand”, “nor” y “xor”.
• Se ejecutan de izquierda a derecha, excepto “not” que
tiene prioridad.
• En caso de duda se pueden usar paréntesis.
• Se pueden utilizar con los tipos boolean, bit y
std_logic. Aplicado a vectores, realiza la operación
lógica entre los elementos que ocupan la misma
posición.
• Ejemplo:
– C <= A xor B;

Lógica Digital y Introducción al VHDL 26


Microprogramable

13
6.2.- Operadores de relación
• Existen 6 operadores de relación, cuyo resultado es de
tipo booleano (verdadero/falso):
• Menor ( < )
• Mayor ( > )
• Menor igual ( <= )
• Mayor igual ( >= )
• Igual ( = )
• Distinto ( /= )
• La mayoría de las veces se utilizan en sentencias del
tipo if … then … else.

Lógica Digital y Introducción al VHDL 27


Microprogramable

6.3.- Operadores aritméticos


• Existen 8 operadores aritméticos, definidos para los tipos
enteros, reales y tiempo, excepto los operadores módulo y
resto que no admiten reales.
• Suma (+)
• Resta (–)
• Multiplicación (*)
• División ( / )
• Exponencial (**)
• Valor absoluto (abs)
• Módulo (mod)
• Resto (rem)

Lógica Digital y Introducción al VHDL 28


Microprogramable

14
7.- Sentencias.
• 7.1.- Sentencias concurrentes.
• 7.2.- Uso de componentes ya diseñados.
• 7.3.- Sentencias secuenciales.
– If
– Case
– For … loop
– Wait

Lógica Digital y Introducción al VHDL 29


Microprogramable

7.1.- Sentencias concurrentes.


• Son todas las que no se incluyen dentro de un
proceso, y pueden diferir ligeramente según los
compiladores.
• Se ejecutan en paralelo (no influye el orden en que se
hayan escrito).
• Sirven para representar lógica combinacional o bien
unión de componentes definidos previamente.
• Hay que tener cuidado con las sentencias
concurrentes, pueden dar error en algunos
compiladores.

Lógica Digital y Introducción al VHDL 30


Microprogramable

15
7.1.- Sentencias concurrentes.
• Ejemplo:
A <= ‘1’;
B <= C + D;
E <= C + E;

-- la suma es combinacional
-- pero la sentencia exige una realimentación (E)

Lógica Digital y Introducción al VHDL 31


Microprogramable

7.2.- Uso de componentes ya diseñados


• Si tenemos un componente, previamente
diseñado y compilado en otro archivo,
podemos usarlo en cualquier código VHDL.
• Por ejemplo, podemos tener un circuito
sumador completo de un 1 bit, y a partir de
este componente realizar un circuito sumador
del número de bits que queramos.

Lógica Digital y Introducción al VHDL 32


Microprogramable

16
7.2.- Uso de componentes ya diseñados
• El sumador de 1 bit tendría por código:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;

entity sum_1b is
Port ( a : in std_logic;
b : in std_logic;
cin : in std_logic;
s : out std_logic;
cout : out std_logic);
end sum_1b;

architecture sumador of sum_1b is


begin
s <= a xor b xor cin;
cout <= (a and b) or (a and cin) or (b and cin);
end sumador;

Lógica Digital y Introducción al VHDL 33


Microprogramable

7.2.- Uso de componentes ya diseñados


• El archivo debe tener el mismo nombre que la entidad, en este
caso sum_1b.vhd
• Una vez compilado, para usarlo hay que declarar el
componente sum_1b dentro de la arquitectura donde se vaya a
usar, usando: component nombre_componente is, y a
continuación sus puertos.
• Una vez declarado, para usar un componente, hay que usar la
sentencia “port map”, indicando las entradas y salidas del
componente dentro de la arquitectura.
• Se pueden instanciar (usar) tantos componentes como se
quiera, simplemente dándoles un nombre de referencia
distinto, por ejemplo u1, u2, u3 y u4, pueden ser 4 sumadores
independientes, pero iguales entre sí.

Lógica Digital y Introducción al VHDL 34


Microprogramable

17
El sumador de 2 bits tendría por
código:
library IEEE; architecture sumador_2 of sum_2b is
use IEEE.STD_LOGIC_1164.ALL; signal I1:std_logic;
use IEEE.STD_LOGIC_ARITH.ALL; component sum_1b is
Port ( a : in std_logic;
entity sum_2b is b : in std_logic;
Port ( a0 : in std_logic; cin : in std_logic;
a1 : in std_logic; s : out std_logic;
b0 : in std_logic; cout : out std_logic);
b1 : in std_logic; end component;
cin : in std_logic; begin
sum0 : out std_logic; u1: sum_1b port map(a0,b0,cin,sum0,I1);
sum1 : out std_logic; u2: sum_1b port map(a1,b1,I1,sum1,cout);
cout : out std_logic);
end sum_2b; end sumador_2;

Lógica Digital y Introducción al VHDL 35


Microprogramable

7.3.- Sentencias secuenciales


• Sólo son válidas dentro de los procesos.
• Las siguientes sentencias son secuenciales:
– If
– Case
– For … loop
– Wait

Lógica Digital y Introducción al VHDL 36


Microprogramable

18
7.3.1.- Sentencia if
• Su sintaxis es:
if (condición) then
-- sentencias secuenciales
else
-- sentencias secuenciales
end if;

Lógica Digital y Introducción al VHDL 37


Microprogramable

7.3.1.- Sentencia if
• También existe la sentencia elsif, cuya sintaxis es:
if (condición) then
-- sentencias secuenciales
elsif (condición) then
-- sentencias secuenciales
elsif (condición) then
-- sentencias secuenciales
else
-- sentencias secuenciales
end if;
Lógica Digital y Introducción al VHDL 38
Microprogramable

19
7.3.2.- Sentencia case
• Su sintaxis es:
case señal is
when valor(es) =>
-- sentencias secuenciales
when valor(es) =>
-- sentencias secuenciales
when others =>
-- sentencias secuenciales
end case;

Lógica Digital y Introducción al VHDL 39


Microprogramable

7.3.2.- Sentencia case


• Se deben indicar todos los casos posibles de la señal,
o bien directamente uno por uno, o bien mediante
agrupaciones. Ejemplo:
case A is
when 0 to 3 => -- casos 0, 1, 2 y 3
when 4 => -- caso 4
when 5 | 7 -- casos 5 y 7
when others -- resto de casos
end case;
• Se puede usar la palabra others para indicar el resto
de casos posibles.
Lógica Digital y Introducción al VHDL 40
Microprogramable

20
7.3.3.- Sentencia for … loop
• Genera un bucle incrementando el valor de una
variable. Dicha variable no es necesario
declararla previamente.
• Como es un lenguaje de descripción de
harware, el uso de esta sentencia implica
repetir el hardware correspondiente al interior
del bucle tantas veces como se le indique.

Lógica Digital y Introducción al VHDL 41


Microprogramable

7.3.3.- Sentencia for … loop


• Sintaxis:
for variable in … to … loop
-- lógica
end loop;

Lógica Digital y Introducción al VHDL 42


Microprogramable

21
7.3.4.- Sentencia wait
• Como su nombre indica, detiene un proceso:
• wait on señal(es); -- Espera hasta el cambio en
una o más de las señales especificadas.
• wait until condición; -- Espera hasta que la
condición sea verdadera.
• Se pueden combinar, p. ej.:
• wait on A until (B=‘1’); -- espera a que haya
un cambio en A y a la vez B sea ‘1’
Lógica Digital y Introducción al VHDL 43
Microprogramable

8.- Diseños en clase.


• Diseñar un multiplexor de 4 entradas.
• Diseñar un multiplexor de 16 entradas.
• Diseñar un biestable tipo D.
• Diseñar un biestable tipo D con reset.
• Diseñar un contador de 4 bits.
• Diseñar un divisor de frecuencia.
• Diseñar una máquina de estados.
• Diseñar un dado electrónico.
Lógica Digital y Introducción al VHDL 44
Microprogramable

22
Multiplexor de 4 entradas
entity mux4 is
Port ( a : in std_logic;
b : in std_logic;
c : in std_logic;
d : in std_logic;
seleccion : in std_logic_vector(1 downto 0);
salida : out std_logic);
end mux4;

architecture Behavioral of mux4 is

begin
process(a,b,c,d,seleccion)
begin
case seleccion is
when "00" => salida<=a;
when "01" => salida<=b;
when "10" => salida<=c;
when "11" => salida<=d;
when others => salida<='0';
end case;
end process;
end Behavioral;

Lógica Digital y Introducción al VHDL 45


Microprogramable

Multiplexor de 16 entradas
entity mux16 is
Port ( entrada : in std_logic_vector(15 downto 0);
seleccion : in std_logic_vector(3 downto 0);
salida : out std_logic);
end mux16;

architecture Behavioral of mux16 is


begin
process(entrada,seleccion)
begin
for I in 0 to 15 loop
if seleccion=I then
salida<=entrada(I);
end if;
end loop;
end process;

end Behavioral;

Lógica Digital y Introducción al VHDL 46


Microprogramable

23
Biestable tipo D
entity biestable_d is
Port ( d : in std_logic;
clk : in std_logic;
q : out std_logic);
end biestable_d;

architecture Behavioral of biestable_d is

begin
process(clk)
begin
if (clk'event and clk='1') then
q<=d;
end if;
end process;

end Behavioral;

Lógica Digital y Introducción al VHDL 47


Microprogramable

Biestable tipo D con clear asíncrono


entity biestable_d is
Port ( d, clk, clear: in std_logic;
q : out std_logic);
end biestable_d;

architecture Behavioral of biestable_d is

begin
process(clk,clear)
begin
if clear='0' then --clear asíncrono y activo con '0'
q<='0';
elsif (clk'event and clk='1') then
q<=d;
end if;
end process;

end Behavioral;

Lógica Digital y Introducción al VHDL 48


Microprogramable

24
Contador de 4 bits con reset
entity cont_4b is
Port ( cuenta : out std_logic_vector(3 downto 0);
reset : in std_logic;
clk : in std_logic);
end cont_4b;

architecture Behavioral of cont_4b is


signal aux: std_logic_vector(3 downto 0);
begin
process(clk)
begin
if(clk'event and clk='1') then
if(reset='0') then
aux<="0000";
else
aux<=aux+1;
end if;
end if;
end process;
cuenta<=aux;
end Behavioral;

Lógica Digital y Introducción al VHDL 49


Microprogramable

25

También podría gustarte