Está en la página 1de 55

Diseño Digital con VHDL

Ing. Paulina Vianey Morales Montañes


Programación VHDL
VHDL significa VHSIC Hardware Description Language, y a su vez VHSIC significa Very
High Speed Integrated Circuit. Se trata de un lenguaje de descripción de hardware,
esto significa que mediante él se puede describir la forma de comportarse de un
circuito electrónico.
•Desarrollados para hacer frente a la creciente complejidad de los diseños.
•Usados para modelar la arquitectura y comportamiento de sistemas electrónicos
discretos.
•Necesitan de un Simulador lógico
•Utilizados en la fase de diseño
Un dispositivo lógico programable es un circuito integrado,
formado por una matriz de puertas lógicas y flip-flops, que
proporcionan una solucion al diseño de forma análogas, a las

PLD soluciones de suma de productos, productos de sumas y


multiplexores.
Integración en un SPLD

Sustituye a 100 C.I. SSI


TTL o CMOS

Soy un SPLD

PAL’s ó GAL’s C.I. Series 74xx y 40xx


Integración en un CPLD

Sustituye a 50 SPLD’s

Soy un CPLD

PAL’s y GAL’s
Clasificación de los PLD’s
Productos comerciales
Fabricante SPLD
Altera Clásicos,FLASHLogic

SPLD’s Atmel
Cypress
PAL
PAL
Lattice GAL
Philips PLA,PAL
Vantis PAL
Fabricante CPLD
Altera MAX 5000,7000 Y 9000
Atmel ATF, ATV
CPLD’s Cypress FLASH370, ULTRA37000
PLD’s Lattice
Philips
IspLSI 1000 a 8000
XPLA
Vantis MACH 1 a 5
Xilinx XC9500, CoolRunner

Fabricante FPGA
Actel ACT 1 a 3 , MX, SX
Altera FLEX 6000,8000 Y 10K
FPGA’s Atmel
Lucent
AT6000, AT40K
ORCA 1 a 3
QuickLogic pASIC1 a 3
Vantis VF1
Xilinx XC4000,Virtex, Spartan
Xilinx vs. Altera

CPLD’s

FPGA’s

Software
Estructura VHDL
VHDL su estructura
El lenguaje de descripción en hardware VHDL se estructura en módulos o unidades
funcionales identificados mediante una palabra reservada y particular de este
lenguaje.

Library = Bibliotecas
Entity = Entidad
Architecture = Arquitectura
Package = Paquete
Component = Componente
Entidad
Representa la caracterización del dispositivo físico; es decir,
exhibe las entradas y salidas del circuito (llamados pins) que el
diseñador ha considerado pertinentes para integrar su idea o
aplicación.
Cada una de las señales de entrada y salida en una entidad es
referida como un puerto, el cual es equivalente a una terminal
(pin) de un símbolo esquemático. Todos los puertos que son
declarados deben de tener un nombre, un modo y un tipo de
dato.
Entidad - Modos
Modo in. Señales de entrada a la entidad.
Unidireccional
Modo out. Señales de salida.
Modo inout. Señales de entrada/salida.
Bidireccional, retroalimentación de señales
dentro y fuera de la entidad.
Modo buffer. Permite realizar
retroalimentaciones dentro de la entidad;
pero a diferencia del modo inout, el puerto
declarado se comporta como una terminal
exclusiva de salida.
Entidad – Tipos de datos
Algunos de los tipos de valores mas utilizados son:
Bit : 0’s y 1’s lógicos.
Boolean: Valores de verdadero o falso en una expresión.
Bit_vector: Un conjunto de bit´s.
Integer: Un numero entero.
Objetos y Tipos de Datos

Booleano (False, True)


Objetos Tipo Datos
Bit (‘0’, ‘1’)
Character (Carácter)
Enumerated
(Enumerados) String (Cadena-Caracteres)
std_ulogic
std_logic
Objetos (‘U’,’X’,’0’,’1’,’Z’,’W’,’L’,’H’,’-’)
VHDL
Enteros [-(231-1) a (231-1)]
Constantes Escalares Integer (Enteros)
Positive (No-Cero y No-Negativos)
Variables
Natural (No-Negativos)
Señales
Floating Point ‡
File ‡ Real ‡
(Punto Flotante)

Physical ‡ Time ‡ (Tiempo)


(Físicos)
Bit_Vector
Array (Arreglos) Std_ulogic_vector
Compuestos Std_logic_vector
‡ No soportado
por herramientas Record (Registro) Unsigned
de Síntesis
Access (Acceso)‡ Signed
Entidad
entity Contador is
port (clk, Reset: in bit;
Q3, Q2, Q1, Q0: out bit );
end Contador;
Entidad
entity Circuito is
port (a, b, c, d, e, f, g, h: in bit;
F1: out bit );
end Circuito;
Entidad
entity Proyecto is
port (A3, A2, A1, A0, B3,
B2, B1, B0: in bit;
C3, C2, C1, C0 : inout bit;
S3, S2, S1, S0: out bit );
end Proyecto;
Entidad
entity Proyecto is
port (A, B: in bit_vector(3 downto 0);
C: inout bit_vector(3 downto 0);
S: out bit_vector(3 downto 0) );
end Proyecto;

DOWNTO Descendente
TO Ascendente
Entidad
entity Control is
port (Q: in bit_vector(3 downto 0);
F: out bit_vector(0 to 7) );
end Control;

DOWNTO Descendente
TO Ascendente
Ejercicio 1
Describir la entidad del siguiente
Bloque.
Identificadores
Nombres o etiquetas que se usan para referirse a: Variables,
Constantes, Señales, Procesos, Entidades, etc.
Están formados por números, letras (mayúsculas o minúsculas) y
guión bajo “_” con las reglas especificadas en la tabla siguiente.
Longitud (Número de Caracteres): Sin restricciones
Palabras reservadas por VHDL no pueden ser identificadores
En VHDL, un identificador en mayúsculas es igual a su contraparte
en minúsculas

Reglas para especificar un identificador Incorrecto Correcto


Primer carácter debe ser siempre una letra mayúscula o minúscula 4Suma Suma4
Segundo carácter no puede ser un guión bajo ( _ ) S_4bits S4_bits
Dos guiones bajos no son permitidos Resta__4 Resta_4_
Un identificador no puede utilizar símbolos especiales Clear#8 Clear_8
Librerías y
paquetes
Librerías y paquetes

Paquetes
Bibliotecas
Librerías y paquetes
Para llamar un paquete es necesario llamar a la
librería/biblioteca que lo contiene (donde ha sido compilado)

Sintaxis: use
nombre_librería.nombre_paquete.all;
Ejemplo: use ieee.std_logic_1164.all;

Uso del paquete Permite el uso de todos los


std_logic_1164 incluido en la componentes almacenados en el
biblioteca ieee paquete
Tipos de datos escalares (Ejemplo)
STD_LOGIC da una mayor potencia operacional que el tipo BIT, tanto para la
simulación como para la síntesis. (Fundamentalmente los valores ‘Z’ y ‘-’)
Para utilizar estos tipos de datos, debemos declarar la utilización de la biblioteca IEEE
que contiene el paquete particular (STD_LOGIC_1164), en el encabezado del archivo
hdl.
Library IEEE;
use IEEE.STD_LOGIC_1164.all;
Entidad - Uso de Librerías y Paquetes

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 - Ejemplo: Multiplicador

X0 Z0
X1 Circuito Z1
Y0 Multiplicador Z2
Y1 Z3

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;
Ejemplo
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; bits más y menos significativos
entity bloque is
port (X: in std_logic_vector (1 downto 0);
A, B: in std_logic;
Z: out std_logic_vector (0 to 3));
end bloque;

-- bit más significativo en primera posición


Signal Un_vector : std_logic_vector (7 downto 0);
-- bit menos significativo en primera posición
Signal otro_vector : std_logic_vector (0 to 7);
Un_vector <= "10000111"; -- entre comillas se asigna un valor a un vector
Otro_vector <= "10000111";
Operadores Aritméticos
Suma +
Resta -
Multiplicación *
División /
Potencia **
Arquitectura
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.

Estilo de descripción o
Niveles de Descripción utilizados Modelización

Nivel Algoritmo Funcional

Nivel de Transferencia entre Registros (RTL)


Flujo de Datos
Nivel Lógico

Nivel Compuerta Estructural

Nivel Transistor (Topología / Layout)


Ejemplos de estructuras
--Arquitectura Estructural
Ejemplo: MUX
ARCHITECTURE estructural OF mux IS
SIGNAL ax, bx, nosel :bit;
--Arquitectura concurrente o RTL BEGIN
ARCHITECTURE flujo1 OF mux IS U0: ENTITY inv PORT MAP (e=>sel, y=>nosel);
SIGNAL ax, bx, nosel : bit; U1: ENTITY and2 PORT MAP (e1=>a, e2=>nosel, y=>ax);
U2: ENTITY and2 PORT MAP (b, sel, bx);
BEGIN
U3: ENTITY or2 PORT MAP (e1=>ax, e2=>bx, y=>sal);
nosel <= NOT sel;
--Entidad END estructural ;
ax <= a AND nosel;
bx <= b AND sel; ENTITY mux IS
sal <= ax OR bx; PORT (a, b, sel: IN bit; --Arquitectura comportamental o funcional
END flujo1;
sal: out bit); ARCHITECTURE comportamental OF mux IS
BEGIN
END mux;
--Arquitectura concurrente o RTL PROCESS (a, b, sel) - - Lista sensible
ARCHITECTURE flujo2 OF mux IS BEGIN
BEGIN IF (sel=‘0’) THEN
sal <= a;
sal <= a WHEN sel =‘0’ ELSE
ELSE
b;
sal <= b;
END flujo2;
END IF;
END PROCESS;
END comportamental;
Diseño concurrente de un sumador completo –
flujo de datos por operadores lógicos

--Arquitectura concurrente o RTL


ARCHITECTURE flujo1 OF mux IS
SIGNAL c1, c2, c3, c4, c0: std_logic;
BEGIN
c0 <= A xor B;
Suma <= c0 xor Cin;
c1 <= A and B;
c2 <= A xor B;
c3 <= c2 and Cin;
Cout <= c1 or c3;
END flujo1;
Flujo de datos – sentencia when … else
Señal <= expresión when condición 1 else
expresión2 when condición 2 else A
expresiónfinal; Tabla F0
B F1

A B F0 F1
0 0 1 1
0 1 1 1
1 0 0 1
1 1 0 0
Flujo de datos – sentencia when … else
EJEMPLO TABLA
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity Tabla is A

port (A, B: in std_logic; Tabla F0


B F1
F0, F1: out std_logic);
end Tabla;
architecture Behavioral of Tabla is
begin - - comenzar (comentario) A B F0 F1
F0 <= ‘1’ when (A=‘0’ and B=‘0’) else 0 0 1 1
‘1’ when (A=‘0’ and B=‘1’) else
0 1 1 1
‘0’;
F1 <= ‘0’ when (A=‘1’ and B=‘1’) else 1 0 0 1
‘1’; 1 1 0 0
end Behavioral;
Flujo de datos – operadores lógicos
EJEMPLO TABLA
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity Tabla is A

port (A, B: in std_logic; Tabla F0


B F1
F0, F1: out std_logic);
end Tabla;
architecture Behavioral of Tabla is Las ecuaciones lógicas para las
begin salidas son: A B F0 F1
F0 <= (not A and not B) or (not A and B); 𝐹0 = 𝐴 ∗ 𝐵 + 𝐴 ∗ 𝐵 0 0 1 1
F1 <= (not A and not B) or (not A and B) or (A and not B); 𝐹1 = 𝐴 ∗ 𝐵 + 𝐴 ∗ 𝐵 + 𝐴 ∗ 𝐵
0 1 1 1

end Behavioral; 1 0 0 1
1 1 0 0
Ejercicio 01
Un jurado está formado por tres jueces A, B, C, cada juez emite su voto a favor
oprimiendo un botón enfrente de él. Se desea construir un circuito que encienda una
luz e indique si la mayor parte del jurado votó a favor y no la encienda en cualquier
otro caso.
Resolver por descripción de flujo de datos con when-else y por operadores lógicos
Ejercicio 02
BCD a Decimal (Display 7 segmentos ánodo común )
Conversión
Sentencia básica de asignación concurrente
(WITH … SELECT)
with variable_de_selección select
salida <= valor1 when valor_variable1,
valor2 when valor_variable2,
valor3 when others; A0 A1 F
with A select
0 0 1
F <= ‘1’ when “00”,
‘0’ when “01”, 0 1 0

‘1’ when “10”, 1 0 1


‘1’ when others;
1 1 1
Descripción de multiplexores
Descripción de multiplexores mediante
ecuaciones booleanas
Ejercicio 3
Comparador
S1 S0 F
A[3:0]
F[3:0]
0 0 A

B[3:0]
0 1 B
1 0 MAYOR
1 1 MENOR
S[1:0]
Sol. Ejercicio 3
Ejercicio 4
Diseñe un comparador de dos números A y B, cada uno formado por dos bits, la salida
del comparador también es de dos bits y está representada por la variable Z de tal
forma que sí:
A=B entonces Z=11
A<B entonces Z=01
A>B entonces Z=10
Ejercicio 5
Diseñe un circuito combinacional que detecte números primos de 4 bits. Realice la
tabla de verdad y elabore un programa que describa su función. Utilice instrucciones
del tipo withselect- when.
Process
Un Process en VHDL se debe de considerar como parte de una seria de declaraciones
concurrentes; sin embargo, su comportamiento interno debe ser analizado de forma
secuencial para su síntesis o evaluación.
Los procesos se definen con la etiqueta process, la cual incluye el nombre del proceso
y la lista de sensibilidad (sensitivity list) de señales que disparan el proceso. De tal
forma que cada vez que cambia el valor de alguna de las señales incluida en la lista, se
ejecutan las instrucciones del proceso.
Los procesos se componen de una parte declarativa y de otra procedimental. En la
primera se incluyen las señales y variables de ámbito local. En la segunda las
operaciones secuenciales.
Procesos (process)

• Enunciados de Asignación de
Variables
Proceso (process)
• Enunciados de Asignación de
Señales
• Enunciados if
• Enunciados case
Enunciados Secuenciales
• Enunciados loop
• Enunciados next
• Enunciados exit
Nota importante:
• Enunciados de Subprogramas
Una señal que se vea involucrada dentro de un
proceso no recibe inmediatamente el valor asignado, • Enunciados return
sólo hasta el final del mismo. Una variable que sea
utilizada dentro de un proceso sí recibe el valor de • Enunciados wait
forma inmediata. • Enunciados null
Programación de Estructuras Básicas

SEÑALES Y VARIABLES

VARIABLES:
Es similar al concepto de variable en otros lenguajes. Su valor puede ser
alterado en cualquier instante y se le puede asignar un valor inicial. Las
variables sólo se declaran en los procesos o subprogramas.
Utilizadas en ejecuciones en serie.

SEÑALES:
Se declaran igual que las constantes y variables. La diferencia es que pueden
ser normal, register y bus. Si no se especifica nada en la declaración el
compilador entenderá que es del tipo normal. Se puede decir que la señal
tiene dos partes una donde se escribe y otra donde se lee. Las señales pueden
ser declaradas sólo en las arquitecturas, paquetes (PACKAGE) o en bloques
concurrentes (BLOCK).
Utilizadas en ejecuciones concurrentes.
Programación de Estructuras Básicas

SEÑALES Y VARIABLES

--Uso incorrecto de las señales --Uso correcto de las señales


ARCHITECTURE ejem1 OF entidad IS ARCHITECTURE ejem1 OF entidad IS
SIGNAL a, b, c, x, y : INTEGER; SIGNAL a, b, x, y : INTEGER;
BEGIN BEGIN
P1: PROCESS (a,b,c) P1: PROCESS (a,b)
BEGIN VARIABLE c: INTEGER;
c<= a; --Se ignora BEGIN
x<=c+2; c:= a; --Inmediato
c<=b; --Se mantiene x<=c+2;
y<=c+2; c:=b; --Inmediato
END PROCESS p1; y<=c+2;
END ejem1 END PROCESS p1;
END ejem1
Procesos (process)

Enunciados if: if la_condición_es_cierta then

•La construcción if-then-else {ejecuta grupo-1 de enunciados secuenciales};


else
{ejecuta grupo-2 de enunciados secuenciales};
end if;

Enunciados if: if la_condición-1_se_cumple then


{ejecuta grupo-1 de enunciados secuenciales};
•La construcción if-then-elsif-then-else
elsif la_condición-2_se_cumple then
{ejecuta grupo-2 de enunciados secuenciales};
else
{ejecuta grupo-3 de enunciados secuenciales};
end if;
Procesos (process)

Enunciados CASE:

• La construcción case - when ejecuta una o


varias instrucciones secuenciales que
dependen del valor de una sola expresión.

SINTAXIS
case expression is
when choices => { sequential_statement }
when choices => { sequential_statement }
end case;

DESCRIPCION
expression: evalúa a un entero, o tipo enumerado.
sequential_statement: uno o mas enunciados secuenciales.
choices: opciones.
La última opción puede ser others (valor por omisión del resto de
las opciones).
Operadores Relacionales

Operadores Relacionales
Características.
•Uso: Para fines de comparación de datos.
•Operadores incluidos en los paquetes: std_numeric y std_logic_arith
•Los operadores de Igualdad y Desigualdad (= , /=) utilizan todos los tipos
de datos.
•Los operadores (<, <=, >, >=) son definidos para los tipos escalar y
arreglos unidimensionales de tipos de datos enumerados o enteros.
Operador Significado
= Igual
/= Diferente
< Menor
<= Menor o Igual
> Mayor
>= Mayor o Igual
Estilo de Modelización - Funcional

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.

Ejemplo

a
c
b Comparador

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

si a = b entonces c = 1
si a  b entonces c = 0
Procesos (process)

La construcción:if-then-elsif-then- L Ejemplo Nº 8 - La construcción if-then-elsif-then-else


else Comparador de Magnitud 2-Words de 4-bits
1 library ieee;
2 use ieee.std_logic_1164.all;
3 entity comp4 is
La construcción if-then-elsif-then-else se utiliza
4 port (a,b: in std_logic_vector (3 downto 0);
cuando se requiere analizar más de una condición
de entrada. 5 x,y,z: out std_logic);
6 end comp4;
7 architecture arq_comp4 of comp4 is
8 begin
9 process (a,b)
10 begin
11 if (a = b) then
12 x <= ‘1’;
13 elsif (a > b) then
14 y <=‘1’;
15 else
16 z <=‘1’;
17 end if;
18 end process;
19 end arq_comp4;
Ejercicio 6 – Practica con la GAL 16V8
S2 S1 S0 F
0 0 0 A

F6
0 0 1 B
A1 F5
A0 F4 0 1 0 MAYOR
B1 F3
B0 F2 0 1 1 MENOR
F0
1 0 0 IGUAL
1 0 1 A+B
S0 S1 S2
1 1 0 A*B
1 1 1 0
- - - -
Solución

MODIFICAR

También podría gustarte