Вы находитесь на странице: 1из 55

Diseo Digital con VHDL

Ing. Paulina Vianey Morales Montaes


Programacin VHDL
VHDL significa VHSIC Hardware Description Language, y a su vez VHSIC significa Very
High Speed Integrated Circuit. Se trata de un lenguaje de descripcin de hardware,
esto significa que mediante l se puede describir la forma de comportarse de un
circuito electrnico.
Desarrollados para hacer frente a la creciente complejidad de los diseos.
Usados para modelar la arquitectura y comportamiento de sistemas electrnicos
discretos.
Necesitan de un Simulador lgico
Utilizados en la fase de diseo
Un dispositivo lgico programable es un circuito integrado,
formado por una matriz de puertas lgicas y flip-flops, que
proporcionan una solucion al diseo de forma anlogas, a las

PLD soluciones de suma de productos, productos de sumas y


multiplexores.
Integracin en un SPLD

Sustituye a 100 C.I. SSI


TTL o CMOS

Soy un SPLD

PALs GALs C.I. Series 74xx y 40xx


Integracin en un CPLD

Sustituye a 50 SPLDs

Soy un CPLD

PALs y GALs
Clasificacin de los PLDs
Productos comerciales
Fabricante SPLD
Altera Clsicos,FLASHLogic

SPLDs Atmel
Cypress
PAL
PAL
Lattice GAL
Philips PLA,PAL
Vantis PAL
Fabricante CPLD
Altera MAX 5000,7000 Y 9000
Atmel ATF, ATV
CPLDs Cypress FLASH370, ULTRA37000
PLDs 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
FPGAs Atmel
Lucent
AT6000, AT40K
ORCA 1 a 3
QuickLogic pASIC1 a 3
Vantis VF1
Xilinx XC4000,Virtex, Spartan
Xilinx vs. Altera

CPLDs

FPGAs

Software
Estructura VHDL
VHDL su estructura
El lenguaje de descripcin en hardware VHDL se estructura en mdulos 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 caracterizacin del dispositivo fsico; es decir,
exhibe las entradas y salidas del circuito (llamados pins) que el
diseador ha considerado pertinentes para integrar su idea o
aplicacin.
Cada una de las seales de entrada y salida en una entidad es
referida como un puerto, el cual es equivalente a una terminal
(pin) de un smbolo esquemtico. Todos los puertos que son
declarados deben de tener un nombre, un modo y un tipo de
dato.
Entidad - Modos
Modo in. Seales de entrada a la entidad.
Unidireccional
Modo out. Seales de salida.
Modo inout. Seales de entrada/salida.
Bidireccional, retroalimentacin de seales
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 : 0s y 1s lgicos.
Boolean: Valores de verdadero o falso en una expresin.
Bit_vector: Un conjunto de bits.
Integer: Un numero entero.
Objetos y Tipos de Datos

Booleano (False, True)


Objetos Tipo Datos
Bit (0, 1)
Character (Carcter)
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)
Seales
Floating Point
File Real
(Punto Flotante)

Physical Time (Tiempo)


(Fsicos)
Bit_Vector
Array (Arreglos) Std_ulogic_vector
Compuestos Std_logic_vector
No soportado
por herramientas Record (Registro) Unsigned
de Sntesis
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, Seales, Procesos, Entidades, etc.
Estn formados por nmeros, letras (maysculas o minsculas) y
guin bajo _ con las reglas especificadas en la tabla siguiente.
Longitud (Nmero de Caracteres): Sin restricciones
Palabras reservadas por VHDL no pueden ser identificadores
En VHDL, un identificador en maysculas es igual a su contraparte
en minsculas

Reglas para especificar un identificador Incorrecto Correcto


Primer carcter debe ser siempre una letra mayscula o minscula 4Suma Suma4
Segundo carcter no puede ser un guin bajo ( _ ) S_4bits S4_bits
Dos guiones bajos no son permitidos Resta__4 Resta_4_
Un identificador no puede utilizar smbolos especiales Clear#8 Clear_8
Libreras y
paquetes
Libreras y paquetes

Paquetes
Bibliotecas
Libreras y paquetes
Para llamar un paquete es necesario llamar a la
librera/biblioteca que lo contiene (donde ha sido compilado)

Sintaxis: use
nombre_librera.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
simulacin como para la sntesis. (Fundamentalmente los valores Z y -)
Para utilizar estos tipos de datos, debemos declarar la utilizacin 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 Libreras y Paquetes

Paquetes predefinidos comnmente utilizados


Standard
standard Contiene tipos bsicos: bit, bit_vector, integer
Paquete incluido por omisin.
IEEE
std_logic_1164 Define los tipos: std_logic, std_ulogic, std_logic_vector, std_ulogic_vector
Define funciones de conversin basadas sobre estos tipos.
numeric_bit Define tipos de vectores signados y no-signados basados en el tipo bit y todos
los operadores aritmticos sobre estos tipos.
Define funciones extendidas y de conversin 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
aritmticos sobre estos tipos.
Define funciones extendidas y de conversin para dichos tipos.
std_logic_unsigned Define operadores aritmticos sobre el tipo std_ulogic_vector y los considera
como operadores no-signados.
std_logic_signed Define operadores aritmticos 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


(Declaracin 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
(Declaracin de Entidad Uso de Biblioteca y Paquete)
library ieee;
use ieee.std_logic_1164.all; bits ms 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 ms significativo en primera posicin


Signal Un_vector : std_logic_vector (7 downto 0);
-- bit menos significativo en primera posicin
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 Aritmticos
Suma +
Resta -
Multiplicacin *
Divisin /
Potencia **
Arquitectura
arquitectura (architecture)
Unidad de Diseo Secundaria que describe el comportamiento interno de una entidad.

Cmo? - A travs de la programacin de varios procedimientos que permitan que la


entidad (entity) cumpla con las condiciones de operacin o comportamiento deseadas.

Estilo de descripcin o
Niveles de Descripcin utilizados Modelizacin

Nivel Algoritmo Funcional

Nivel de Transferencia entre Registros (RTL)


Flujo de Datos
Nivel Lgico

Nivel Compuerta Estructural

Nivel Transistor (Topologa / 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;
Diseo concurrente de un sumador completo
flujo de datos por operadores lgicos

--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
Seal <= expresin when condicin 1 else
expresin2 when condicin 2 else A
expresinfinal; 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 lgicos
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 lgicas 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 botn 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 descripcin de flujo de datos con when-else y por operadores lgicos
Ejercicio 02
BCD a Decimal (Display 7 segmentos nodo comn )
Conversin
Sentencia bsica de asignacin concurrente
(WITH SELECT)
with variable_de_seleccin 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
Descripcin de multiplexores
Descripcin 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
Disee un comparador de dos nmeros A y B, cada uno formado por dos bits, la salida
del comparador tambin 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
Disee un circuito combinacional que detecte nmeros primos de 4 bits. Realice la
tabla de verdad y elabore un programa que describa su funcin. 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 sntesis o evaluacin.
Los procesos se definen con la etiqueta process, la cual incluye el nombre del proceso
y la lista de sensibilidad (sensitivity list) de seales que disparan el proceso. De tal
forma que cada vez que cambia el valor de alguna de las seales 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 seales y variables de mbito local. En la segunda las
operaciones secuenciales.
Procesos (process)

Enunciados de Asignacin de
Variables
Proceso (process)
Enunciados de Asignacin de
Seales
Enunciados if
Enunciados case
Enunciados Secuenciales
Enunciados loop
Enunciados next
Enunciados exit
Nota importante:
Enunciados de Subprogramas
Una seal que se vea involucrada dentro de un
proceso no recibe inmediatamente el valor asignado, Enunciados return
slo 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
Programacin de Estructuras Bsicas

SEALES 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 slo se declaran en los procesos o subprogramas.
Utilizadas en ejecuciones en serie.

SEALES:
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 declaracin el
compilador entender que es del tipo normal. Se puede decir que la seal
tiene dos partes una donde se escribe y otra donde se lee. Las seales pueden
ser declaradas slo en las arquitecturas, paquetes (PACKAGE) o en bloques
concurrentes (BLOCK).
Utilizadas en ejecuciones concurrentes.
Programacin de Estructuras Bsicas

SEALES Y VARIABLES

--Uso incorrecto de las seales --Uso correcto de las seales


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_condicin_es_cierta then

La construccin if-then-else {ejecuta grupo-1 de enunciados secuenciales};


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

Enunciados if: if la_condicin-1_se_cumple then


{ejecuta grupo-1 de enunciados secuenciales};
La construccin if-then-elsif-then-else
elsif la_condicin-2_se_cumple then
{ejecuta grupo-2 de enunciados secuenciales};
else
{ejecuta grupo-3 de enunciados secuenciales};
end if;
Procesos (process)

Enunciados CASE:

La construccin case - when ejecuta una o


varias instrucciones secuenciales que
dependen del valor de una sola expresin.

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

DESCRIPCION
expression: evala a un entero, o tipo enumerado.
sequential_statement: uno o mas enunciados secuenciales.
choices: opciones.
La ltima opcin puede ser others (valor por omisin del resto de
las opciones).
Operadores Relacionales

Operadores Relacionales
Caractersticas.
Uso: Para fines de comparacin 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 Modelizacin - Funcional

Funcional - En este caso, se


describen las relaciones entre las
entradas y salidas, sin importar la
estructura o implementacin fsica
del sistema o circuito.

Ejemplo

a
c
b Comparador

Uso de if-then-else
(construccin secuencial)

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

La construccin:if-then-elsif-then- L Ejemplo N 8 - La construccin 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 construccin if-then-elsif-then-else se utiliza
4 port (a,b: in std_logic_vector (3 downto 0);
cuando se requiere analizar ms de una condicin
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
- - - -
Solucin

MODIFICAR