Está en la página 1de 93

Facultad de Ingeniería

Escuela Profesional de Ingeniería Electrónica

Introducción al Lenguaje VHDL

MSc. Ing. Raúl Hinojosa Sánchez 1


Introducción
Qué es el Lenguaje VHDL ?
Es un Lenguaje de descripción de dispositivos o Sistemas de
Hardware.

Diferencias con lenguajes de programación:


• Describe procesos que ocurren en paralelo.
• Una descripción VHDL, describe el comportamiento (como
funciona) o la estructura de un sistema.
• Permite describir un sistema como la interconexión de
componentes

MSc. Ing. Raúl Hinojosa Sánchez 2


Estructura de un archivo VHDL
LIBRARY o bibliotecas
• La biblioteca estándar es siempre visible
• Si se va a utilizar otras librerías, las declaraciones y funciones en
ellas definidas se pueden importar:

– Library ieee;
– Use ieee.std_logic_1164.all;

MSc. Ing. Raúl Hinojosa Sánchez 3


Estructura de un archivo VHDL
• Declaración de entidad
– Especifica el interfaz del circuito
• Arquitectura
– Descripción interna del circuito(lo que
hace o contiene), interconexión de
componentes y otras entidades,
procesos, etc.
• Comportamiento
• Estructural
• Mezcla

MSc. Ing. Raúl Hinojosa Sánchez 4


ENTIDAD
Se especifica el nombre de la entidad y el interfaz con su
entorno (puertos)
– Visión de “caja negra” (encapsulado)
– Los puertos son señales y su declaración es implícita
• Declara el nombre de la entidad, los puertos de entrada
y salida (señales), los modos y los tipos de dichos
puertos
entity E1 is
port (A, B, C, D : in BIT;
M, N, P, Q : out BIT);
end E1;
Modos
Señales Tipos
MSc. Ing. Raúl Hinojosa Sánchez 5
Modo del puerto
El modo define la dirección del flujo de datos del puerto visto
desde la entidad. Puede ser:
• IN, entrada dedicada, sólo pueden ser leídos en la
arquitectura
• OUT, salida dedicada, sólo se les puede asignar valor en la
arquitectura
• BUFFER, salida dedicada, pero puede ser leído en la
arquitectura
• INOUT, bidireccional

MSc. Ing. Raúl Hinojosa Sánchez 6


Arquitectura
Contiene la descripción interna de la entidad

La descripción de la arquitectura se compone de un


conjunto de sentencias concurrentes que se ejecutan
de forma asíncrona entre sí y se comunican mediante
señales
• Estilos de modelado:
• FUNCIONAL
– Alto nivel de abstracción
• ESTRUCTURAL:
– Conexión de componentes
MSc. Ing. Raúl Hinojosa Sánchez 7
Niveles de abstracción:
– Funcional: describe la forma en que se comportan las salidas en
función de las entradas. (expresión booleana, máquinas de
estado, if-then-else, etc.)

– Estructural: describe el sistema como un grupo de compuertas o


bloques que se interconectan. La descripción estructural se
asemeja a un esquemático.

MSc. Ing. Raúl Hinojosa Sánchez 8


Modelo funcional
– Se especifica como ecuaciones Booleanas

– Operadores lógicos permitidos: and, or, nand, nor, xor,


xnor y not.

– No especifica tecnología con la que se implementa

– las instrucciones describen el circuito a nivel de


comportamiento

MSc. Ing. Raúl Hinojosa Sánchez 9


Ejemplo 1
ENTITY ejemplo IS
PORT ( x1, x2, x3 : IN BIT ;
f : OUT BIT ) ;
END ejemplo ;

ARCHITECTURE circuito OF ejemplo IS


BEGIN
f <= (x1 AND x2) OR (NOT x2 AND x3) ;
END circuito;

MSc. Ing. Raúl Hinojosa Sánchez 10


Ejemplo 2
ENTITY func2 IS
PORT ( x1, x2, x3, x4 : IN STD_LOGIC ;
f : OUT STD_LOGIC ) ;
END func2 ;
ARCHITECTURE LogicFunc OF func2 IS
BEGIN
f <= (NOT x1 AND NOT x2 AND x3 AND NOT x4) OR
(NOT x1 AND NOT x2 AND x3 AND x4) OR
(x1 AND NOT x2 AND NOT x3 AND x4) OR
(x1 AND NOT x2 AND x3 AND NOT x4) OR
(x1 AND NOT x2 AND x3 AND x4) OR
(x1 AND x2 AND NOT x3 AND x4) ;
END LogicFunc ;
MSc. Ing. Raúl Hinojosa Sánchez 11
Ejemplo 3
entity mux1 is
port(e,s,a,b: in bit;
c: out bit);
end mux1;
architecture circuito of mux1 is
begin
process(e,s)
begin
if(e='0') then c<='0';
else
if(s='0') then c<=a;
else c<=b;
end if;
end if;
end process;
end circuito;
MSc. Ing. Raúl Hinojosa Sánchez 12
Ejemplo 4
entity conta1 is
port(ck, reset: in bit;
q: buffer integer range 0 to 15);
end conta1;
architecture conta11 of conta1 is
begin
process(ck, reset)
begin
if (reset='1')then q<=0;
else
if(ck'event and ck='1')then q<=q+1;
end if;
end if;
end process;
end conta11;

MSc. Ing. Raúl Hinojosa Sánchez 13


FORMAS
Circuitos combinacionales
Sentencia de asignación concurrente
– Y <= A and B;
• Evitar realimentación combinacional
– Y <= A nand Y;
Asignación condicional concurrente
• Salida triestado
– Y <= A when E='1' else 'Z';
• Multiplexor
– Y <= B when S='1' else A;

MSc. Ing. Raúl Hinojosa Sánchez 14


Ejemplo Funcional
entity XNOR2 is
port (A, B: in std_logic;
Z: out std_logic);
end;

architecture b of XNOR2 is
signal X, Y: std_logic; -- declara señales internas X, Y
begin
X <= A and B;
Y <= (not A) and (not B);
Z <= X or Y;
end b;

MSc. Ing. Raúl Hinojosa Sánchez 15


Ojo: no trata de describir al circuito sino como se comporta
Modelado estructural
Arquitectura estructural
– implementa el módulo como una composición de subsistemas
– contiene:
•declaraciones de señal, para las conexiones internas
– los puertos de la entidad también son tratados
como señales
• instancias de componentes
– instancias de pares de entidad/arquitectura
previamente declarados
•mapeo de puertos en instancias de componentes
– conectan señales a puertos de componente
• declaraciones wait

MSc. Ing. Raúl Hinojosa Sánchez 16


MODELO ESTRUCTURAL
Dice como se implementa, con que componentes. Pero no que hace.

MSc. Ing. Raúl Hinojosa Sánchez 17


Modelo Funcional : procesos secuenciales.
declaración de procesos:
nombre_proceso: process (sensitivity_list) is
begin
--lista de instrucciones secuenciales tales como:
signal assignments
variable assignments
No necesarias
case statement
exit statement
if statement
end process nombre_proceso;
MSc. Ing. Raúl Hinojosa Sánchez 18
Bibliotecas y paquetes
• Library: lugar donde el compilador guarda información
relacionada con el proyecto actual.

• Package: archivo o módulo que contiene declaración de


constantes, componentes, funciones, etc. Que deben ser
compartidos entre diferentes módulos VHDL.

MSc. Ing. Raúl Hinojosa Sánchez 19


Ejemplo bibliotecas y paquetes
• El tipo de datos STD_LOGIC está definido en el paquete
std_logic_1164 de la biblioteca ieee.

• Para utilizarlo en un módulo, al comienzo del archivo se debe


incluir:
– library ieee;
– use ieee.std_logic_1164.all;

MSc. Ing. Raúl Hinojosa Sánchez 20


Declaración de paquetes
package NOMBRE_PACKAGE is
--- declaración de constantes
--- declaración de componentes
end NOMBRE_PACKAGE;

MSc. Ing. Raúl Hinojosa Sánchez 21


Formas de usar componentes
1. Directo sin declarar package o

2. Declarando un package

Luego se inicializan los componentes

MSc. Ing. Raúl Hinojosa Sánchez 22


Sin declarar paquetes
• Se realiza de frente en la arquitectura
• A continuación del encabezado (architecture ..) donde se define
la entidad se declaran los componentes a utilizar:

component NOT1
port ( in1: in std_logic;
out1: out std_logic);
end component;

MSc. Ing. Raúl Hinojosa Sánchez 23


Ejemplo: Alarma
architecture estructural of ALARMA is
-- Declaraciones
component AND2
port (in1, in2: in std_logic;
out1: out std_logic);
end component;
component OR2
port (in1, in2: in std_logic;
out1: out std_logic);
end component;
component NOT1
port (in1: in std_logic;
out1: out std_logic);
end component; MSc. Ing. Raúl Hinojosa Sánchez 24
Inicialización de componentes 1
Luego del begin se inicializan los componentes declarados.

Pero existen dos formas, según como se trate a los puertos


de esos componentes:

• Posicional
• Explicita

MSc. Ing. Raúl Hinojosa Sánchez 25


Inicialización de componentes 2
• inicialización posicional:
label: component-name port map (signal1,signal2 ,…signaln);
Ej.

U0: NOT1 port map (DOOR, DOOR_NOT);

MSc. Ing. Raúl Hinojosa Sánchez 26


Inicialización de componentes
• inicialización explicita:
label: component-name port map
(port1=>signal1,
port2=> signal2,…
portn=>signaln);
Ej.
U0: NOT1 port map
(in1 => DOOR,
out1 => DOOR_NOT);
MSc. Ing. Raúl Hinojosa Sánchez 27
Ejemplo: Alarma (cont.)
-- declaración de señales para interconectar puertas
signal PUERTA_NOT, CINTO_NOT, B1, B2: std_logic;
begin
-- Inicialización de componentes
U0: NOT1 port map ( in1 => PUERTA,
out1 => PUERTA_NOT);
U1: NOT1 port map (CINTO, CINTO_NOT);
U2: AND2 port map (ENCENDIDO, PUERTA_NOT, B1);
U3: AND2 port map (ENCENDIDO, CINTO_NOT, B2);
U4: OR2 port map (B1, B2, SEÑAL);
end estructural;
IN IN OUT
MSc. Ing. Raúl Hinojosa Sánchez 28
Declarando paquetes
• La declaración de componentes es realizada aparte ( fuera de
la arquitectura) y se le llama en la declaración de las librerías.

MSc. Ing. Raúl Hinojosa Sánchez 29


Ejemplo de uso de paquete 1

package OPERACIONES_LOGICAS is
component AND2
port (in1, in2: in std_logic;
out1: out std_logic);
end component;
component OR2
port (in1, in2: in std_logic; ojo
out1: out std_logic);
end component;
component NOT1
port (in1: in std_logic;
out1: out std_logic);
end component;
end OPERACIONES_LOGICAS; MSc. Ing. Raúl Hinojosa Sánchez 30
Ejemplo de uso de paquete 2

LIBRARY ieee ;
USE ieee.std_logic_1164.all;
LIBRARY work ; ojo
USE work.OPERACIONES_LOGICAS.all;

entity ALARMA is
port (
PUERTA, ENCENDIDO, CINTO: in std_logic;
SEÑAL: out std_logic);
end ALARMA;

MSc. Ing. Raúl Hinojosa Sánchez 31


Ejemplo de uso de paquete 3

architecture estructural of ALARMA is


-- declaracion de señales para inteconectar compuertas
signal PUERTA_NOT, CINTO_NOT, B1, B2: std_logic;
begin
-- Instanciación de componentes
U0: NOT1 port map ( in1 => PUERTA, out1 => PUERTA_NOT);
U1: NOT1 port map (CINTO, CINTO_NOT);
U2: AND2 port map (ENCENDIDO, PUERTA_NOT, B1);
U3: AND2 port map (ENCENDIDO, CINTO_NOT, B2);
U4: OR2 port map (B1, B2, SEÑAL);
end estructural;
MSc. Ing. Raúl Hinojosa Sánchez 32
OTRO EJEMPLO DE USO DE PACKAGE

MSc. Ing. Raúl Hinojosa Sánchez 33


LIBRARY ieee ;
USE ieee.std_logic_1164.all ; Defino componente :
ENTITY fulladd IS
PORT ( Cin, x, y : IN STD_LOGIC ;
Sumador completo de
END ;
s, Cout : OUT STD_LOGIC ) ;
un bit
ARCHITECTURE FuncLogic OF fulladd IS
BEGIN
s <= x XOR y XOR Cin ;
Cout <= (x AND y) OR (Cin AND x) OR (Cin AND y) ;
END ;

LIBRARY ieee ; Declaro componente


USE ieee.std_logic_1164.all ;
PACKAGE fulladd_package IS
como parte de un
COMPONENT fulladd paquete:
PORT ( Cin, x, y : IN STD_LOGIC ;
s, Cout : OUT STD_LOGIC ) ;
END COMPONENT ;
END fulladd_package ; MSc. Ing. Raúl Hinojosa Sánchez 34
LIBRARY ieee ; Uso al componente
USE ieee.std_logic_1164.all ;
USE work.fulladd_package.all ; para formar un
ENTITY adder4 IS
PORT ( Cin : IN STD_LOGIC ;
Sumador de 4 bitios
X, Y : IN STD_LOGIC_VECTOR(3 DOWNTO 0) ;
S : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ;
Cout : OUT STD_LOGIC ) ;
END ;
ARCHITECTURE estructura OF adder4 IS
SIGNAL C : STD_LOGIC_VECTOR(1 TO 3) ;
BEGIN
stage0: fulladd PORT MAP ( Cin, X(0), Y(0), S(0), C(1) ) ;
stage1: fulladd PORT MAP ( C(1), X(1), Y(1), S(1), C(2) ) ;
stage2: fulladd PORT MAP ( C(2), X(2), Y(2), S(2), C(3) ) ;
stage3: fulladd PORT MAP ( C(3), X(3), Y(3), S(3), Cout ) ;
END ;
MSc. Ing. Raúl Hinojosa Sánchez 35
¿Qué tipo de descripción es ..?
ENTITY ejemplo IS
PORT (x1,x2,x3 : IN BIT;
f : OUT BIT);
END;

ARCHITECTURE FuncLogic OF example1 IS


BEGIN
f <= (x1 AND x2) OR (NOT x2 AND x3);
END;

MSc. Ing. Raúl Hinojosa Sánchez 36


Tipos definidos en el lenguaje:
• Boolean. Tipo predefinido en IEEE 1076.
– type boolean is (FALSE, TRUE);
• Integer. Tipo predefinido en IEEE 1076
– Rango (-231,231-1) 32 bits en complemento a 2
– Si no se acota el rango se sintetizan 32 bits:
• Signal a: integer range 0 to 7; -- se sintetizan 3 bits
• Bit. Tipo predefinido en IEEE 1076
– type bit is ('0', '1');
– No es posible describir salidas triestado

MSc. Ing. Raúl Hinojosa Sánchez 37


Tipos definidos en el lenguaje:
• Std_logic. Tipo definido en librería IEEE 1164
• Para utilizarlo:
• library ieee;
• use ieee.std_logic_1164.all;

• Lógica multivaluada.
9 valores=('U', 'X', '0', '1', 'Z', 'W', 'L', 'H', '-')
• 'U'=desconocido (simulación); 'X'=cortocircuito (simulación);
• 'Z'=HiZ ; '-'=don´t care, se sintetiza en '0' o '1'.

MSc. Ing. Raúl Hinojosa Sánchez 38


Tipos definidos en el lenguaje:
• Enumerados: lista explícita de identificadores.
– Los hay predefinidos: bit, boolean

– Los puede definir el usuario, se utilizan en la descripción


de MEFs:
• Type estado is (S0, S1, S2);
• Por defecto codificación binaria:
S0="00", S1="01", S2="10"

MSc. Ing. Raúl Hinojosa Sánchez 39


Tipos definidos en el lenguaje:
Matriciales
• Múltiples elementos del mismo tipo
• Una o más dimensiones y acceso indexado
– Type tabla8x4 is array (0 to 7, 0 to 3) of bit;

• Los hay predefinidos en los estándar IEEE 1076 y 1164


– Type bit_vector is array (natural range < >) of bit;
– Type std_logic_vector is array (natural range < >) of
std_logic;
– El número de elementos se especifica al declarar una
señal de dicho tipo: Signal C: bit_vector(7 downto 0);

MSc. Ing. Raúl Hinojosa Sánchez 40


Bit_vector, std_logic_vector

Se suelen utilizar para describir buses


• Indexación:
– Signal A: bit_vector(0 to 7);
– Signal B: bit_vector(7 downto 0);
– A<="00110101"; -- A(7)= '1'
– B<="00110101"; -- B(7)= '0'
• Preferible usar downto, MSB es el de más a la izquierda (HW)

• Asignación de valor
– Elemento:
B(3) <= '0'; -- comilla simple
– Segmento:
B(3 downto 0)<="0101"; -- comillas dobles
– Vector:
B<=(others=>’0’); --asigna 0 a todo el vector
B<=(7=>´1´, others=>’0’);
MSc. Ing. Raúl Hinojosa Sánchez 41
PARA IR RECONECTÁNDONOS CON EL
HARDWARE

MSc. Ing. Raúl Hinojosa Sánchez 42


Una asignación de señal seleccionada permite a una señal que se le
asigne uno de varios valores, basados en un criterio de selección.
La palabra clave WITH especifica que s se utiliza para el criterio de
selección dos cláusulas WHEN establecen que f = w0 cuando s = 0
y f = w1 lo contrario
La palabra clave OTHERS otros debe ser usadoThe keyword must be
used
ARCHITECTURE B OF mux2to1 IS
BEGIN
WITH s SELECT
f <= w0 WHEN '0',
w1 WHEN OTHERS;
END;
MSc. Ing. Raúl Hinojosa Sánchez 43
Asignación Condicional De Señal
• Similar a la asignación de señal seleccionada, una asignación
de señal condicional permite una señal para establecerse en
uno de varios valores:
• Use las palabras claves WHEN y ELSE para definir la condición
y las acciones.
ENTITY mux2a1 IS
PORT (w0, w1, s : IN STD_LOGIC;
f : OUT STD_LOGIC );
END;

ARCHITECTURE B OF mux2a1 IS
BEGIN
f <= w0 WHEN s = '0' ELSE w1;
END;

MSc. Ing. Raúl Hinojosa Sánchez 44


OPERADORES
Se definen sobre los tipos de datos predefinidos, aunque se
pueden sobrecargar

MSc. Ing. Raúl Hinojosa Sánchez 45


Ecuación Booleana Código VHDL Operación

Z1= A1 • B1- z1 <= a1 AND b1; AND

Z2= A2 + B2 z2 <= a2 OR b2; OR

Z3= A3  B3 z3 <= a3 XOR b3; Exclusive OR

Z4= A4 z4 <= NOT a4; NOT

Z5= (A5 • B5) z5 <= a5 NAND b5; NAND


z5 <= NOT(a5 AND b5);

Z6= (A6+B6) z6 <= a6 NOR b6; NOR


z6 <= NOT(a6 OR b6);

MSc. Ing. Raúl Hinojosa Sánchez 46


Multiplexor 4 a 4
Biblioteca a usar

entidad

arquitectura

MSc. Ing. Raúl Hinojosa Sánchez 47


Multiplexor 4a1
LIBRARY ieee;
USE ieee.std_logic_1164.all;

ENTITY mux4a1 IS
PORT ( w : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
s : IN STD_LOGIC_VECTOR(1 DOWNTO 0);
f : OUT STD_LOGIC );
END;
ARCHITECTURE Behavior OF mux4a1 IS
BEGIN
WITH s SELECT
f <= w(0) WHEN "00",
w(1) WHEN "01",
w(2) WHEN "10",
w(3) WHEN OTHERS;
END ; MSc. Ing. Raúl Hinojosa Sánchez 48
Decodificador binario 2 a 4
ENTITY dec2a4 IS
PORT ( w : IN STD_LOGIC_VECTOR(1 DOWNTO 0);
En : IN STD_LOGIC;
y : OUT STD_LOGIC_VECTOR(0 TO 3));
END ;

ARCHITECTURE B OF dec2to4 IS
SIGNAL Enw : STD_LOGIC_VECTOR (2 DOWNTO 0);
BEGIN
Enw <= En & w; -- ‘&’ es el operador de concatenacion VHDL
WITH Enw SELECT
y <= "1000" WHEN "100",
"0100" WHEN "101",
"0010" WHEN "110",
"0001" WHEN "111",
"0000" WHEN OTHERS;
END ;

MSc. Ing. Raúl Hinojosa Sánchez 49


Codificador de Prioridad
ENTITY prior IS
PORT ( w : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
y : OUT STD_LOGIC_VECTOR(1 DOWNTO 0);
z : OUT STD_LOGIC );
END ;

ARCHITECTURE B OF prior IS
BEGIN
y <= "11" WHEN w(3) = '1' ELSE
"10" WHEN w(2) = '1' ELSE
"01" WHEN w(1) = '1' ELSE "00";
z <= '0’ WHEN w = "0000" ELSE '1';
END ;

MSc. Ing. Raúl Hinojosa Sánchez 50


Generate
Cuando escribimos código estructural de VHDL, a menudo
creamos instancias de un componente particular.
– Un sumador de acarreo ripple de varias etapas hecho de un
número sumadores completos de un único bit podría ser un
ejemplo.

• Si tenemos que crear un gran número de instancias de un


componente, es deseable una forma más compacta.
• VHDL proporciona una característica llamada la instrucción FOR
GENERATE
– Esta instrucción proporciona una estructura de lazo para
describir el código jerárquico regularmente estructurado

MSc. Ing. Raúl Hinojosa Sánchez 51


LIBRARY ieee ;
USE ieee.std_logic_1164.all ; Sumador de 4
USE work.fulladd_package.all ;
bitios usando
ENTITY adder4 IS
PORT ( Cin : IN STD_LOGIC ;
generate
X, Y : IN STD_LOGIC_VECTOR(3 DOWNTO 0) ;
S : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ;
Cout : OUT STD_LOGIC ) ;
END ;
ARCHITECTURE estructura OF adder4 IS
SIGNAL C : STD_LOGIC_VECTOR(0 TO 4) ;
BEGIN
C(0) <= Cin ;
Cout <= C(4) ;
G1: FOR i IN 0 TO 3 GENERATE
stages: fulladd PORT MAP (C(i), X(i), Y(i), S(i), C(i+1)) ;
END GENERATE ;
END ;
MSc. Ing. Raúl Hinojosa Sánchez 52
PROCESS
•Hemos introducido varios tipos de instrucciones de asignación
– todas tienen la propiedad del orden en el que ellas aparecen no
afectan el significado del código VHDL
• Por esta propiedad esas instrucciones se llaman instrucciones de
asignación concurrente
• VHDL provee una segunda categoría de instrucciones de asignación
secuencial, para el cual el orden de las instrucciones pueden
afectar el significado del código
– instrucciones If-then-else y case son secuenciales
• VHDL requiere que las instrucciones de asignación secuencial sean
colocadas dentro de otra instrucción, la instrucción PROCESS

MSc. Ing. Raúl Hinojosa Sánchez 53


PROCESS
La instrucción proceso, comienza con la palabra clave PROCESS,
seguida por una lista entre paréntesis de señales llamado la lista de
sensibilidad:

– Esta lista incluye, como máximo, todas las señales utilizadas


dentro del proceso,
– Puede no haber señales en la sensibilidad lista (es decir, la lista
puede no existir)
– Generalmente la lista incluye todas las señales que se pueden
utilizar para "Activar“ al proceso

MSc. Ing. Raúl Hinojosa Sánchez 54


PROCESS
Las Instrucciones dentro del proceso se evalúan en orden
secuencial
– esto es cierto, desde el punto de vista de la simulación,
– desde un punto de vista del hardware sintetizada, varias
asignaciones a una sola señal (variable) generalmente
implica la multiplexación de las asignaciones para producir
una sola salida
Instrucciones hechas dentro el proceso no son visibles fuera
del proceso hasta que todas las declaraciones en el proceso
han sido evaluadas
– si existen varias asignaciones a la misma señal dentro de
un proceso, sólo la última de ellas tiene cualquier efecto
visible MSc. Ing. Raúl Hinojosa Sánchez 55
MUX2a1 como un PROCESS

ARCHITECTURE B OF mux2a1 IS
BEGIN
PROCESS ( w0, w1, s ) Lista de sensibilidad,
BEGIN siempre que cambie el
IF s = '0' THEN valor de la entrada de
f <= w0 ; una lista, el proceso se
ELSE reevalúa (activado)
f <= w1 ; Instrucción IF-THEN-ELSE
END IF ; para implementar la función
MUX
END PROCESS ;
END ;
MSc. Ing. Raúl Hinojosa Sánchez 56
ejemplos
Circuitos combinacionales
Proceso
• Multiplexor

• Las entradas (señales leídas


dentro del proceso) deben
aparecer en la lista de
sensibilidades
• Asignar valores a las salidas
para todas las condiciones para
evitar la inferencia de latches

MSc. Ing. Raúl Hinojosa Sánchez 57


Decoder

MSc. Ing. Raúl Hinojosa Sánchez 58


Codificador de prioridad

MSc. Ing. Raúl Hinojosa Sánchez 59


Codificador de Prioridad usando
(IF-THEN-ELSE)
ARCHITECTURE B OF prior IS
BEGIN
PROCESS ( w )
BEGIN
IF w(3) = '1' THEN y <= "11" ;
ELSIF w(2) = '1' THEN y <= "10" ;
ELSIF w(1) = '1' THEN y <= "01" ;
ELSE y <= "00" ;
END IF ;
END PROCESS ;
z <= '0' WHEN w = "0000" ELSE '1' ;
END ; MSc. Ing. Raúl Hinojosa Sánchez 60
Codificador de Prioridad (alternativo)
ARCHITECTURE B OF prior IS
BEGIN
PROCESS ( w )
BEGIN
y <= "00" ;
IF w(1) = '1' THEN y <= "01" ; END IF ;
IF w(2) = '1' THEN y <= "10" ; END IF ;
IF w(3) = '1' THEN y <= "11" ; END IF ;
z <= '1' ;
IF w = "0000" THEN z <= '0' ; END IF ;
END PROCESS ;
END ; MSc. Ing. Raúl Hinojosa Sánchez 61
Ejemplo
Nombre y pines de la entidad

Descripción por comportamiento

Algoritmo

MSc. Ing. Raúl Hinojosa Sánchez 62


Flip-flops

MSc. Ing. Raúl Hinojosa Sánchez 63


Shift
register

MSc. Ing. Raúl Hinojosa Sánchez 64


Memoria Implícita en un PROCESS
ARCHITECTURE B OF c1 IS ARCHITECTURE B OF c1 IS
BEGIN BEGIN
PROCESS ( A, B ) PROCESS ( A, B )
BEGIN BEGIN
AeqB <= '0' ; IF A = B THEN
IF A = B THEN AeqB <= '1' ;
AeqB <= '1' ; END IF ;
END IF ; END PROCESS ;
END PROCESS ; END ;
END ;

MSc. Ing. Raúl Hinojosa Sánchez 65


Instrucción Case
• Una instrucción case es similar a una instrucción de asignación
seleccionada en que la instrucción case tiene una señal de
selección e incluye cláusulas WHEN para diferentes valoraciones de
la selección de señal.
– comienza con una palabra clave CASE
– cada cláusula WHEN especifica las instrucciones que deben
evaluarse cuando la señal de selección tiene un valor
especificado.
– la instrucción case debe incluir un cláusula WHEN para todas las
valoraciones de la selección señal
• utilizar la palabra clave OTHERS

MSc. Ing. Raúl Hinojosa Sánchez 66


MUX 2a1 con CASE
ARCHITECTURE B OF mux2a1 IS
BEGIN
PROCESS ( w0, w1, s )
BEGIN
CASE s IS
WHEN '0' => f <= w0 ;
WHEN OTHERS => f <= w1 ;
END CASE ;
END PROCESS ;
END ;
MSc. Ing. Raúl Hinojosa Sánchez 67
Decodificador binario 2a4 con CASE
ARCHITECTURE B OF dec2a4 IS
BEGIN
PROCESS ( w, En )
BEGIN
IF En = '1' THEN
CASE w IS
WHEN "00" => y <= "1000" ;
WHEN "01" => y <= "0100" ;
WHEN "10" => y <= "0010" ;
WHEN OTHERS => y <= "0001" ;
END CASE ;
ELSE y <= "0000" ;
END IF ;
END PROCESS ;
END ; MSc. Ing. Raúl Hinojosa Sánchez 68
MOORE

Lo dividimos en dos procesos :


• proceso combinacional : entrada y estado presente
• proceso secuencial: reloj y reset
MSc. Ing. Raúl Hinojosa Sánchez 69
PROCESO COMBINACIONAL
Architecture mm
type estados is (S0,S1,S2,S3);
signal prsnt, sgnt: estados;
Función F Función G
begin
process (E,prsnt)
begin
case prsnt is
when S0 =>
Y <= '0';
if (E='0') then sgnt <= S1;
else sgnt <= S0;
end if;
...
end case;
end process; MSc. Ing. Raúl Hinojosa Sánchez 70
PROCESO SECUENCIAL
process (CLK, RST)
begin
if (RST='1') then prsnt <= S0;
elsif (CLK'event and CLK='1') then
prsnt <= sgnt;
end if;
end process;
End mm;

MSc. Ing. Raúl Hinojosa Sánchez 71


• En el anterior ejemplo tenemos un reset asíncrono que
generalmente es mas conveniente pero si se da el caso que es
necesario un reset síncrono, se le trata como una entrada, la
descripción de los procesos serian así:

MSc. Ing. Raúl Hinojosa Sánchez 72


PROCESO COMBINACIONAL
process (E,prsnt)
begin
case prsnt is
when S0 => Y <= '0';
if (E='0') then sgnt <= S1;
else sgnt <= S0;
end if;
...
end case;
if (RST='1') then sgnt <= S0; -- reset síncrono
end if;
end process; MSc. Ing. Raúl Hinojosa Sánchez 73
PROCESO SECUENCIAL
process (CLK)
begin
if (CLK'event and CLK='1') then
prsnt <= sgnt;
end if;
end process;

MSc. Ing. Raúl Hinojosa Sánchez 74


-- proceso combinacional

MEALY process (E,prsnt)


begin
case prsnt is
...
when S2 =>
if (E='0') then Y <= '0';
sgnt <= S2;
-- proceso Secuencial else Y <= '1';
process (CLK,RST) sgnt <= S0;
begin end if;
if (RST='1') then prsnt <= S0; when others =>
elsif (CLK'event and CLK='1') then -- Illegal state
prsnt <= sgnt; -- recovery
end if; end case;
end process; end process;
MSc. Ing. Raúl Hinojosa Sánchez 75
Ejemplo
En una línea de transmisión serial X, se transmiten los bits de
forma sincrónica a una señal de reloj CLK, un bit por ciclo de
reloj.
Diseñar un circuito para conectarlo a la línea serial. Este
muestrea la línea X en cada reloj ciclo. Siempre que haya
recibido la secuencia '010', Manda su señal de salida Z a '0‘,
por un ciclo de reloj, con el último bit de la secuencia.

MSc. Ing. Raúl Hinojosa Sánchez 76


Entity definition
Library IEEE;
Use IEEE.std_logic_1164.all;
Entity ejem is
Port ( clck, x, rst : in std_logic;
z : out std_logic);
end;

MSc. Ing. Raúl Hinojosa Sánchez 77


Arquitectura con un único proceso
architecture b of ejem is
signal val : std_logic_vector (2 downto 0);
constant SECUENCIA
std_logic_vector (2 downto 0):= "010";
begin
process (rst, clck)
begin
if rst = '1' then
val <= (others =>'0');
z <= '0';
.
.
. MSc. Ing. Raúl Hinojosa Sánchez 78
cont

elsif (clck'event and clck='1') then


val<= x & val (2 downto 1);
If (val = SECUENCIA) then z <= '1';
Else z <= '0';
end if;
end if;
end process;
end ;

MSc. Ing. Raúl Hinojosa Sánchez 79


Con 2 procesos
architecture b of ejem is
signal val : std_logic_vector (2 downto 0);
constant SECUENCIA : std_logic_vector (2 downto 0):= "010";
Begin
process (rst, clck)
begin
if rst ='1' then
val <= (others =>'0');
elsif ( (clck'event and clck='1') then
val <= x & val (2 downto 1);
end if;
end process;
MSc. Ing. Raúl Hinojosa Sánchez 80
Con 2 procesos

Process (val )
Begin
if (val = SECUENCIA)
then z <= '1';
else z <= '0';
end if;
end process;
end;

MSc. Ing. Raúl Hinojosa Sánchez 81


DIAGRAMA DE ESTADO

X/Z
X
S1 X
rst
z S2 X
X X z
S0 X
X S3
z X
z

MSc. Ing. Raúl Hinojosa Sánchez 82


Library IEEE;
Use IEEE.std_logic_1164.all;
Entity ejem is
Port ( clock, x, rst : in std_logic;
z : out std_logic);
end;

MSc. Ing. Raúl Hinojosa Sánchez 83


architecture A of EJEM is

type estados is (S0, S1, S2, S3);


signal prsnt : estados;

Begin
Process (clock, rst)
Begin
if rst = '1' then
prsnt <= S_R;
Elsif (clock'event and clock = '1') then

MSc. Ing. Raúl Hinojosa Sánchez 84


case prsnt is
when S0 =>
if x ='0' then prsnt <= S1;
when S1 =>
if x = '1' then prsnt <= S2;
end if;
when S2 =>
if x = '0'then prsnt <= S3;
else prsnt <= S_R;
end if;

MSc. Ing. Raúl Hinojosa Sánchez 85


when S3 =>
if x = '0' then prsnt <= S1;
Else prsnt <= S2;
end if;
end case;
end if;
end process;

MSc. Ing. Raúl Hinojosa Sánchez 86


process (estado)
begin
case state is
when S3 => z <= '1';
when others => z <= '0';
end case;
end process;
end;

MSc. Ing. Raúl Hinojosa Sánchez 87


Ejercicio de Modelo Estructural

Dé el código VHDL de este circuitoMSc.


de Ing.
forma estructural
Raúl Hinojosa Sánchez sin ver delante de esta diapositiva
88
architecture netlist of ejer is
component DFFC
port ( D, CK, C : in std_logic ;
Q, NQ : out std_logic );
end component;
component OR2
port ( IN1, IN2 : in std_logic;
OUT1: out std_logic );
end component;

MSc. Ing. Raúl Hinojosa Sánchez 89


component NOT0
port ( IN1 : in std_logic ;
OUT1 : out std_logic );
end component;
component AND2
port ( IN1, IN2 : in std_logic ;
OUT1 : out std_logic );
end component;
component AND3
port ( IN1, IN2, IN3 : in std_logic ;
OUT1 : out std_logic );
end component;

MSc. Ing. Raúl Hinojosa Sánchez 90


signal D1 , y1, D0 , y0 : std_logic;
signal A , B, no_y0 : std_logic;
begin
I1 : NOT0 port map ( IN1 => x , OUT1 => D0 );
A2 : AND2 port map ( IN1 => x, IN2 => y0, OUT1 =>A);
A3 : AND3 port map ( IN1 => D0, IN2 => y1, IN3 => no_y0,
OUT1 => B);

MSc. Ing. Raúl Hinojosa Sánchez 91


O1 : OR2 port map ( IN1 => A, IN2 => B, OUT1 =>D1 );
DFF0 : DFFC port map ( D => D0, CK => clck , C => rst , Q => y0,
NQ => no_y0 );
DFF1 : DFFC port map ( D => D1 , CK => clck , C => rst , Q =>
y1, NQ => open );
A1 : AND2 port map ( IN1 => y0, IN2 => y1, OUT1 => z);
end netlist;

MSc. Ing. Raúl Hinojosa Sánchez 92


Gracias .
Apuntes del Mg. Ing. Gustavo Rosselló M

MSc. Ing. Raúl Hinojosa Sánchez 93

También podría gustarte