You are on page 1of 224

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

FORMACION
Sntesis y simulacion
para
componentes programables

VHDL,
muy sencillo...
Ver 7.0b, Junio 2008

P 1

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

MVD
Centro de diseo FPGA Xilinx
Consultora y asistencia tcnica a domicilio
Centro de formacin aprobado
Sitio WEB : www.mvd-fpga.com

FPGA Experts !
Ver 7.0b, Junio 2008

P 2

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Objetivos de la formacin
Conocer las mltiples posibilidades ofrecidas por el lenguaje
VHDL.
Conocer la sintaxis y el juego de instrucciones utilizado en
sntesis lgica VHDL.
Conocer las principales ventajas y limitaciones de los
diferentes estilos de escritura.
Verificar las informaciones tericas por la practica
Aprovechar una base de ejemplos concretos, obtener una
maestra rpida del lenguaje en aplicaciones de sntesis.

Ver 7.0b, Junio 2008

P 3

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Ver 7.0b, Junio 2008

P 4

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

VHDL
Generalidades sobre el lenguaje
y sus aplicaciones

Ver 7.0b, Junio 2008

P 5

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Ver 7.0b, Junio 2008

P 6

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

VHDL :
Very high speed integrated circuit
Hardware
Description
Language.

www.mvd-fpga.com

Lenguaje de alto nivel conocido por permitir :

El modelado de ensambles electrnicos complejos.


especificaciones )
La simulacin de los modelos de componentes.
La sntesis lgica.

Lenguaje estandarizado ( IEEE Std 1076-1993 )


La norma no define ninguna metodologia de diseo.
Ver 7.0b, Junio 2008

P 7

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Modelado

de conjuntos electrnicos complejos.

Lenguaje de alto nivel facilitando la descripcin del


comportamiento de los modelos .
Fuerte nivel de abstraccin. La posibilidad material de
implementar fisicamente el diseo no es necesariamente
tomada en cuenta a este nivel ( behavioral )
La particin en varios elementos permite dividir un modelo
complejo en un nmero de elementos mas simples de
desarrollar separadamente .

Ver 7.0b, Junio 2008

P 8

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Simulacin :
Juego de instrucciones particularmente potente para:
- Generacin de estmulos
- Captura de resultados.
Los modelos de comportamiento ( especificaciones ) son
simulados con el fin de verificar su coherencia.
El conjunto de Modelos de comportamiento + ficheros de
simulacin constituyen a la vez una especificacin y un medio
de verificacin.
El comportamiento de un modelo y de su realizacin fsica
deberan ser idnticos.

Ver 7.0b, Junio 2008

P 9

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

Sntesis lgica:

www.mvd-fpga.com

Permite implementar fsicamente un diseo, gracias a la


utilizacin de herramientas de sntesis.
Usa solamente una parte reducida del juego de
instrucciones del lenguaje VHDL.
Numerosas construcciones utilizables en modelos o en
simulacin no pueden ser sintetizadas
Las construcciones soportadas varan segn las
herramientas.
Portabilidad : Mito o realidad ?
Entre herramientas de sntesis.
Entre arquitecturas materiales.
Ver 7.0b, Junio 2008

P 10

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Ver 7.0b, Junio 2008

P 11

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Ver 7.0b, Junio 2008

P 12

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

VHDL
Las construcciones sintetisables

Ver 7.0b, Junio 2008

P 13

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Ver 7.0b, Junio 2008

P 14

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

Presentacin general :

www.mvd-fpga.com

VHDL permite en particular:


Definir los " ports " de entrada / salida del conjunto
lgico descripto ( ENTITY).
Seales simples o sobre la forma de bus.
Definir un modelo de comportamiento sintetisable,
( ARCHITECTURE ) usando el juego de instrucciones
soportado por la herramientas de sntesis.
Estilo de escritura RTL ( Register Transfer Logic ).
Unir los diferentes mdulos descritos separadamente.
( gestin de jerarqua, VHDL estructural ).

Ver 7.0b, Junio 2008

P 15

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

Presentacin general :
Informaciones previas sobre la sintaxis :

www.mvd-fpga.com

Minsculas y maysculas no son diferenciados en VHDL . Un objeto


puede indiferentemente ser llamado :

MODULE, Module, module module


Es lo mismo para las palabras clave.

Los comentarios pueden ser colocados en cualquier lugar dentro del


cdigo. Ellos no afectan en nada los resultados de sntesis o de
simulacin.
Ejemplo :

_________________________________________________________________________________________________

-- esto en un comentario
architecture ARQUI of EJEMPLO is
begin

-- esto tambin

_____________________________________________________________________________________________________

Los archivos VHDL llevan la extensin " --- .VHD "


Ver 7.0b, Junio 2008

P 16

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

La pareja entidad / arquitectura

Ver 7.0b, Junio 2008

P 17

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Ver 7.0b, Junio 2008

P 18

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

La pareja entidad / arquitectura :

www.mvd-fpga.com

Entidad :

Porcin del cdigo que permite definir en


particular las Entradas y Salidas.
Ejemplo :

___________________________________________________________________________________________________

entity EJEMPLO is
port (
A,B : in bit_vector(7 downto 0);
SEL : in bit;
MUX_OR : out bit
SIMBOLO EJEMPLO
);
end EJEMPLO;
A[7:0]
MUX_OR

_______________________________________________

B[7:0]

Equivalencia esquemtica
Ver 7.0b, Junio 2008

SEL
P 19

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

La pareja entidad / arquitectura :

Entidad :

www.mvd-fpga.com

Sintaxis de declaracin :

_______________________________________________________________________________________________________

entity EJEMPLO is
port (
lista de puertos de entrada / salida comprendiendo :
nombre_de_seal : modo y tipo.

);
end [EJEMPLO];

-- Los corchetes "[]" indican que es opcional


-- usar de nuevo el nombre de la entidad despus de la palabra clave end.

_______________________________________________________________________________________________________

El nombre dado a la entidad puede ser cualquiera.


( excepto las palabras reservadas )

Dar de preferencia el mismo nombre a la entidad y al fichero VHDL


( en este caso EJEMPLO.vhd )
La lista de puertos est comprendida entre dos parntesis, y
seguida de un punto y coma.
Nombre de la entidad opcional despus de la palabra "end".
Ver 7.0b, Junio 2008

P 20

VHDL, muy sencillo...

Sntesis y simulacion para componentes programables

La pareja entidad / arquitectura :

MEDIA VIDEO DISEO


www.mvd-fpga.com

Arquitectura :

Porcin de descripcin del


comportamiento del dispositivo a sintetizar.
Esta asociada a una entidad.
( dentro del mismo fichero ).
Posee una parte declaratoria y una parte operatoria.
_______________________________________________________________________________________________________

architecture ARQUI of EJEMPLO is


-- parte declaratoria
signal MUX_OUT : bit_vector(7 downto 0); -- seal interna
----------------------------------------------------- parte operatoria
begin
-- asignaciones condicionales de seales con "when..else".
-- el signo "<=" es el smbolo de asignacin de un valor a una seal
MUX_OUT <= A when SEL='0' else B;
MUX_OR <='1' when MUX_OUT /= "00000000" else '0';
end [ARQUI];
Ver 7.0b, Junio 2008

P 21

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

La pareja entidad / arquitectura:

Arquitectura :

www.mvd-fpga.com

Informaciones complementarias (1)

La parte declaratoria puede contener :


Declaraciones de seales internas.
( que no sean I/Os )

Declaraciones de componentes.

( gestin de la jerarqua , VHDL estructural ).

Declaraciones de constantes.
Declaraciones de tipos de objetos.

( utilizados en particular para las maquinas de estado ).

Declaraciones de sub-programas.
( funciones y procedimientos ).

Ver 7.0b, Junio 2008

P 22

VHDL, muy sencillo...

Sntesis y simulacion para componentes programables

La pareja entidad / arquitectura :

Arquitectura:

MEDIA VIDEO DISEO


www.mvd-fpga.com

Informaciones complementarias(2)

El cdigo operatorio puede contener :


Asignaciones concurrentes de seales

CODIGO
RTL

( los resultados de sntesis y de simulacin son independientes del


orden de escritura de las instrucciones, como en el ejemplo
precedente ).

Asignaciones secuenciales :
Procesos y/o sub programas

En simulacin, ejecucin de instrucciones en el orden de escritura


(secuencialmente).
En sntesis lgica, el mismo comportamiento es reproducido.

Instanciacin de cajas negras". ( componentes ).

CODIGO
ESTRUCTURAL
Ver 7.0b, Junio 2008

El modulo en curso de desarrollo puede llamar a otros sub


mdulos ( gestin de jerarqua, VHDL estructural ).
P 23

VHDL, muy sencillo...

Sntesis y simulacion para componentes programables

La pareja entidad / arquitectura :

Arquitectura :

MEDIA VIDEO DISEO


www.mvd-fpga.com

Informaciones complementarias (3)

Resultados de sntesis :
_______________________________________________________________________________________________________

architecture ARQUI of EJEMPLO is


-- parte declaratoria
signal MUX_OUT : bit_vector(7 downto 0); -- seal interna
-- parte operatoria
begin
MUX_OUT <= A when SEL='0' else B;
-- asignaciones condicionales de seales con "when...else".
MUX_OR <='1' when MUX_OUT /= "00000000" else '0';
end [ARQUI];
__________________________________________________________________________________________________

B[7:0]
MUX_OUT[7:0]

MUX_OR

A[7:0]
SEL
Ver 7.0b, Junio 2008

P 24

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

La pareja entidad / arquitectura :

www.mvd-fpga.com

Recapitulacin : Archivo " EJEMPLO.vhd ".


_______________________________________________________________________________________________________

entity EJEMPLO is
port (
A,B : in bit_vector(7 downto 0);
SEL : in bit;
-- El signo ";" se utiliza como separador entre
MUX_OR : out bit -- dos declaraciones de seales y no debe
);
-- aparecer despus de la ultima seal declarada
end [EJEMPLO];
architecture ARQUI of EJEMPLO is
-- parte declaratoria
signal MUX_OUT : bit_vector(7 downto 0); -- seal interna
-- parte operatoria
begin
MUX_OUT <= A when SEL='0' else B;
MUX_OR <='1' when MUX_OUT /= "00000000" else '0';
end [ARQUI];
Ver 7.0b, Junio 2008

P 25

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

La pareja entidad / arquitectura :


Otro EJEMPLO: mux2_1.vhd

www.mvd-fpga.com

_______________________________________________________________________________________________________

entity MUX2_1 is
port (
A_IN, B_IN : in bit;
SEL :
in bit;
SALIDA :
out bit
);
end [MUX2_1];

-- La entidad tiene el mismo nombre


-- que el fichero VHDL

architecture ARCHI of MUX2_1 is


-- parte declaratoria vaca en este EJEMPLO
-- parte operatoria
begin
SALIDA <= (A_IN and not(SEL)) or (B_IN and SEL);
-- "and", "not", "or" son operadores lgicos predefinidos del
-- lenguaje VHDL.
end [ARCHI];
Ver 7.0b, Junio 2008

P 26

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Ver 7.0b, Junio 2008

P 27

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Ver 7.0b, Junio 2008

P 28

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Objetos que se pueden manipular


en VHDL
( sntesis lgica )

Ver 7.0b, Junio 2008

P 29

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Ver 7.0b, Junio 2008

P 30

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

Objetos que se pueden manipular en VHDL y sus


tipos:

www.mvd-fpga.com

3 clases principales de objetos :


SEALES : similares a las seales encontradas en los esquemas

Los ports declarados dentro de una entidad son seales. Pueden ser
declarados como bus.

CONSTANTES : permiten definir valores permanentes .


VARIABLES : utilizadas solamente dentro de los PROCESS
( instrucciones secuenciales ).

Una declaracin de objeto comprende :


CLASE : seal, constante o variable.
NOMBRE : a eleccin del creador ( excepto palabras reservadas ).
MODO : ( solamente seales ) : in, out, inout, buffer.
TIPO : bit, bit_vector, boolean, integer...
Ver 7.0b, Junio 2008

P 31

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

Notas

www.mvd-fpga.com

.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....

Ver 7.0b, Junio 2008

P 32

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Los tipos de datos

Ver 7.0b, Junio 2008

P 33

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Ver 7.0b, Junio 2008

P 34

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Tipos de objetos que se pueden manipular en VHDL:


Tipos pr-definidos principales:
BIT : puede tomar el valor '0' o '1'.
BIT_VECTOR : grupo de BITS ( bus ).
El valor binario de un bit_vector esta definido entre
comillas dobles .
EJEMPLO :

___________________________________________________________________________________________________

signal A : bit_vector(7 downto 0);


-- El bit de mas peso (MSB)esta a la izquierda !
-- En nuestro caso es el bit 7.
begin
A <= "01011010";-- equivalente a : A <= X"5A";
-- X"valor" indica un valor hexadecimal
Ver 7.0b, Junio 2008

P 35

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Tipos de objetos que se pueden manipular en


VHDL:
Tipos pr-definidos principales : ( cont. )
BOOLEAN :

Puede tomar los valores TRUE o FALSE.

INTEGER : Valor entero codificado sobre 32 bits.


( de -2.147.483.648 a + 2.147.483.647 )

Un entero puede estar limitado en su declaracin, a fin de evitar


su codificacin sobre 32 bits.
EJEMPLO :

___________________________________________________________________________________________________

signal VALEUR : integer range 0 to 255;


begin
VALEUR <= 143 when INIT = '1' else 33;
Ver 7.0b, Junio 2008

P 36

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Tipos de datos que se pueden manipular en VHDL :


Tipos " user defined " :
STD_LOGIC y STD_ULOGIC : Extensiones del tipo BIT,
pueden tomar 9 valores diferentes :
type STD_ULOGIC is (
'U', -- Uninitialized
'X', -- Forcing Unknown
'0', -- Forcing 0
'1', -- Forcing 1
'Z', -- High impedance
'W', -- Weak unknown
'L', -- Weak
0
'H', -- Weak
1
'-' );-- Don't care
( Extrado del cdigo fuente del package "STD_LOGIC_1164". )
Ver 7.0b, Junio 2008

P 37

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Tipos de objetos que se pueden manipular en VHDL :


Tipos " user defined " : STD_LOGIC

El tipo STD_LOGIC da una mayor potencia operacional que el tipo


BIT, tanto para la simulacin como para la sntesis .
( particularmente los valores 'Z y '-' para la sntesis ).

Tipos " user defined " : STD_LOGIC_VECTOR


Grupo de objetos similar a BIT_VECTOR, pero con los 9 estados
posibles del STD_LOGIC para cada uno de los bits.
Para utilizar estos tipos de datos ( STD_LOGIC_VECTOR y
STD_LOGIC ), debemos declarar la utilizacin de la biblioteca IEEE
que contiene el package particular ( STD_LOGIC_1164 ), en el
encabezado del archivo .vhd.
library IEEE;
use IEEE.STD_LOGIC_1164.all;
Ver 7.0b, Junio 2008

P 38

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Tipos de objetos que se pueden manipular en VHDL :


EJEMPLO de declaracin de la biblioteca IEEE, y del
package STD_LOGIC_1164 :
_____________________________________________________________________________________________________________

library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity EJEMPLO is
port ( A, B : in STD_LOGIC_VECTOR(7 downto 0);
SEL : in STD_LOGIC;
MUX_OR : out STD_LOGIC);
end EJEMPLO;
architecture ARCHI of EJEMPLO is .........

Ver 7.0b, Junio 2008

P 39

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Tipos de objetos que se pueden manipular en VHDL :


Tipos enumerados :
Principalmente utilizados en sntesis para definir los estados de las
maquinas de estado.
______________________________________________________________________________________________________

architecture ARCHI of MACHINE is

Enumeracin
de tipo !

-- parte declaratoria de la arquitectura


type ESTADOS is ( REPOSO, LECTURA, ESCRITURA);
signal ESTADO_ACTUAL, ESTADO_SIGUIENTE: ESTADOS;
-- Las seales ESTADO_ACTUAL y ESTADO_SIGUIENTE, podrn
-- tomar los valores REPOSO, LECTURA o ESCRITURA.
begin
-- asignaciones.

Ver 7.0b, Junio 2008

P 40

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Reglas de asignacin de los vectores de datos:


EL orden en el cual se utiliza el vector ( bus ) debe ser
el mismo que en la declaracin del vector.
( valores crecientes o decrecientes de los ndices )
No es necesario utilizar el vector entero. ( utilizacin de
una parte de las seales de un bus ).

El ancho del bus ( tamao del vector ) debe


corresponder para la mayora de las operacines.
( excepto para comparacin ).

Ver 7.0b, Junio 2008

P 41

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Reglas de asignacin de los vectores de datos:


architecture ARCHI of VECTOR is
-- parte declaratoria de la arquitectura
signal D_IN, MASCARA, D_OUT : std_logic_vector(7 downto 0);
signal Q_OUT : std_logic_vector(7 downto 0);
constant FIJA : std_logic_vector(2 downto 0) := "010";
-- la asignacin de un valor a una constante o variable
-- se realiza por el smbolo " := "
-- en forma diferente a la asignacin de seales.
begin
D_OUT <= D_IN and not(MASCARA); -- Todas las operaciones
-- son sobre 8 bits.
Q_OUT <= (D_IN(6 downto 2) and not(MASCARA(7 downto 3)))
& FIJA;
-- El signo & es un operador llamado de concatenacin
end [ARCHI];
Ver 7.0b, Junio 2008

P 42

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Ejemplo de un cdigo equivalente :


D_OUT(7)
D_OUT(6)
-D_OUT(0)

<= D_IN(7) and not(MASCARA(7));


<= D_IN(6) and not(MASCARA(6));
-- --- --;
<= D_IN(0) and not(MASCARA(0));

Q_OUT(7)
Q_OUT(6)
-Q_OUT(3)
Q_OUT(2)
Q_OUT(1)
Q_OUT(0)

<=
<=
-<=
<=
<=
<=

Ver 7.0b, Junio 2008

D_IN(6)and not(MASCAR(7));
D_IN(5)and not(MASCARA(6));
--- --;
D_IN(2)and not(MASCARA(3));
FIXE(2); -- o Q_OUT(2) <= '0';
FIXE(1); -- o Q_OUT(1) <= '1';
FIXE(0); -- o Q_OUT(0) <= '0';

P 43

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

Reglas de asignacin de los vectores de datos:

www.mvd-fpga.com

Ejemplos de errores de escritura en las asignaciones:


architecture ARCHI of VECTOR is
-- parte declaratoria de la arquitectura
signal D_IN, MASCARA,D_OUT : std_logic_vector(7 downto 0);
signal Q_OUT : std_logic_vector(7 downto 0);
constant FIJA : std_logic_vector(2 downto 0) := "010";
begin
D_OUT <= D_IN(0 to 7) and not(MASCARA); -- ERROR ! D_IN fue declarado
-- con valores decrecientes de los ndices (7 downto 0). No puede ser
-- usado en una asignacin poniendo los mismos ndices en orden crecientes
-- En cambio, podramos haber escrito :
-- D_OUT(7) <=
-- D_OUT(6) <=
---- D_OUT(1) <=
-- D_OUT(0) <=

D_IN(0)
D_IN(1)
-D_IN(6)
D_IN(7)

and
and
-and
and

not(MASCARA(7));
not(MASCARA(6));
--;
not(MASCARA(1));
not(MASCARA(0));

-- De la misma forma, la lnea siguiente es ilegal( error en la


-- utilizacin de la constante "FIJA" ).
Q_OUT <= (D_IN(6 downto 2) and not(MASCARA)) & FIJA(0 to 2); --ERROR !
end [ARCHI];
Ver 7.0b, Junio 2008

P 44

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Los operadores

Ver 7.0b, Junio 2008

P 45

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Ver 7.0b, Junio 2008

P 46

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Operadores frecuentemente utilizados en sntesis:


Operadores lgicos pre definidos :
and, or, nand, nor, xor y not
Operan sobre todos los objetos de todas las clases ( seales
constantes, variables ) y de tipo :
bit
bit_vector
std_logic, std_ulogic
std_logic_vector, std_ulogic_vector
boolean
Los operandos deben ser del mismo tipo y contener el mismo
nmero de bits.
Ver 7.0b, Junio 2008

P 47

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Operadores frecuentemente utilizados en sntesis :


Operadores lgicos pr-definidos :
Ejemplo de utilizacin (1) :

____________________________________________________________________________________________________

entity OPE is
port ( A, B, C : in bit;
S :
out bit);
end OPE;
architecture ARCHI of OPE is
begin
S <= (A and B) and not(C);
end ARCHI;
Ver 7.0b, Junio 2008

P 48

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

Operadores frecuentemente utilizados en sntesis :

www.mvd-fpga.com

Operadores lgicos pre definidos:


Ejemplo de utilizacin(2) :

_______________________________________________________________________________________________________

library IEEE;
-- declaracin de la biblioteca IEEE,
-- seguida de la sentencia "use" para indicar que
-- queremos usar de esta biblioteca el package
-- "STD_LOGIC_1164", sin limitacin de las funciones
-- u otros elementos de la biblioteca disponibles ( .all; )
use IEEE.STD_LOGIC_1164.all;
entity OPERA is
port ( A, B, C : in std_logic_vector(6 downto 0);
S :
out std_logic_vector(6 downto 0));
end OPERA;
architecture ARCHI of OPERA is
begin
S <= (A and B) and not(C);
end ARCHI;
Ver 7.0b, Junio 2008

P 49

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Operadores frecuentemente utilizados en sntesis :


Operadores relacionales :
= ( igual a )
< ( inferior a )
> ( superior a )

/= ( diferente de )
<= ( inferior o igual a )
>= ( superior o igual a )

Operan sobre objetos de tipo :

bit, bit_vector
std_logic, std_logic_vector
std_ulogic, std_ulogic_vector
integer
boolean

Ver 7.0b, Junio 2008

P 50

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Operadores frecuentemente utilizados en sntesis :


Operadores relacionales : ( cont. )
Los operandos deben ser del mismo tipo, pero el nmero de
bits comparados puede ser diferente !

Cuidado con las sorpresas !!!

Ver 7.0b, Junio 2008

P 51

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

Operadores corrientemente utilizados en sntesis:

www.mvd-fpga.com

Operadores relacionales : Comparacin de vectores :


La comparacin se hace comparando bit a bit los dos vectores
comenzando por el MSB.
Los resultados pueden sorprender si los vectores no son del
mismo nmero de bits.
Ejemplo:
____________________________________________________________________________________________

signal REG : std_logic_vector(4 downto 0);


signal CNT : std_logic_vector(3 downto 0);
begin
-- tenemos el derecho de escribir :
-REG
CNT
-"01111" > "0100" resultado poco sorprendente
-- y
"01111" < "1000" resultado muy sorprendente !
-- El MSB de CNT es superior al MSB de REG,
-- el vector CNT es considerado como superior.
Ver 7.0b, Junio 2008

P 52

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Operadores corrientemente utilizados en sntesis :


Operadores relacionales : ( cont. )
La utilizacin de packages estandarizados permite efectuar
operacines relacionales entre objetos de tipo INTEGER y otro
de tipo STD_LOGIC_VECTOR.
Estos packages se encuentran en la biblioteca IEEE asi
como los packages son : STD_LOGIC_UNSIGNED, y
STD_LOGIC_ARITH.
Para ser visibles, deben se declarados al inicio del archivo.

Ver 7.0b, Junio 2008

P 53

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Operadores corrientemente utilizados en sntesis:

Operadores relacionales : Informaciones complementarias


El resultado de una comparacin es de tipo boolean puede
tomar solo los valores TRUE o FALSE.
Ejemplo :
____________________________________________________________________________________________

signal IGUAL, VENTANA : boolean;


signal COUNT : std_logic_vector(4 downto 0);
begin
IGUAL <= (COUNT = 27);
VENTANA <= (COUNT >= 13) and (COUNT <= 25);
-- operacin lgica entre dos booleans.
Nota : Los operadores lgicos relacionales distintos de
"=" y "/=" son frecuentemente implementados en FPGA en
forma de funciones aritmticas cableadas.
Ver 7.0b, Junio 2008

P 54

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

Operadores corrientemente utilizados en sntesis :

www.mvd-fpga.com

Operadores relacionales y la implementacin de funciones


aritmticas :
La comparacin ( distinta de = o /= ) de vectores

puede resultar en la utilizacin de funciones aritmticas cableadas, y


por esto no sern optimizadas despus de la sntesis. Prudencia en la
utilizacin de los operadores <, <=, > , >= . Dos porciones de cdigo
pueden tener un comportamiento equivalente, pero los resultados de
sntesis pueden ser muy diferentes.
Ejemplo :

____________________________________________________________________________________________

signal CNT : std_logic_vector(7 downto 0);


begin
TOTO <= '1' when (CNT < "10000000") else '0';
-- podemos escribir
-- TOTO <= '1' when CNT(7)='0' else '0';
-- o mas simple TOTO <= not(CNT(7));
Ver 7.0b, Junio 2008

P 55

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Operadores corrientemente utilizados en sntesis:


Operadores aritmticos :
+ ( suma )
* ( multiplicacin )
** ( potencia )
mod

( resta )
( divisin )
rem
abs

Operan sobre objetos de tipo INTEGER.


Pueden igualmente operar sobre STD_LOGIC_VECTOR
utilizando los packages STD_LOGIC_UNSIGNED y
STD_LOGIC_ARITH.
Restricciones: La mayora de las herramientas de sntesis solo
autorizan las operacines de multiplicacin y divisin entre
CONSTANTES, o una CONSTANTE potencia de 2 y una SEAL.
Ver 7.0b, Junio 2008

P 56

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Operadores corrientemente utilizados en sntesis:

Implementacin fsica de funciones descritas por medio de


operadores aritmticos :
Algunas arquitecturas de componentes programables tienen
recursos de lgica especficos para una implementacin eficaz
de las funciones aritmticas y similares ( en trminos de
velocidad y rea de silicio usado ).
Las herramientas de sntesis pueden hacer un uso de estos
recursos mas o menos oportuno, segn su conocimiento de la
arquitectura del circuito usado.
Disponen en general de opciones de sntesis, para elegir usar o
no dichos recursos lgicos.

Ver 7.0b, Junio 2008

P 57

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com
Operadores frecuentemente utilizados en sntesis
:

Posibilidades extendidas de utilizacin de operadores


aritmticos y relacionales gracias a la utilizacin de packages
estandarizados:
La comparacin entre STD_LOGIC_VECTOR y INTEGER, es posible
utilizando ciertos packages.
El nombre de la biblioteca y del package puede ser diferente segn las
herramientas.

__________________________________________________________________________________________________

library IEEE;
use IEEE.STD_LOGIC_UNSIGNED.all;
entity ...
architecture ARCHI of ...
signal CNT : std_logic_vector(7 downto 0);
begin
TOTO <= '1' when (CNT = 143) else '0';
TITI <= '1' when (CNT >= 75) and (CNT <= 123) else '0';
Ver 7.0b, Junio 2008

P 58

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

Operadores corrientemente utilizados en sntesis :

www.mvd-fpga.com

Operador de concatenacin:
Permiten la creacin de vectores a partir de bit o de
vectores.
Ejemplos :
_____________________________________________________________________________________________________

library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity MY_BUS is
port ( A, B, C, D : in std_logic;
STATUS : out std_logic_vector(7 downto 0));
end MY_BUS;
architecture ARCHI of MY_BUS is
begin
STATUS <= "0000" & A & B & C & D;
-- equivalente a : STATUS(7 downto 4) <= "0000";
-STATUS(3) <= A; STATUS(2) <= B;
-STATUS(1) <= C; STATUS(0) <= D;
end ARCHI;
Ver 7.0b, Junio 2008

P 59

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

Operadores corrientemente utilizados en sntesis :

www.mvd-fpga.com

Operadores de concatenacin :
Otro ejemplo :
_____________________________________________________________________________________________________

library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity MY_BUS is
port ( A, B, C, D : in std_logic;
STATUS : out std_logic_vector(7 downto 0));
end MY_BUS;
architecture ARCHI of MY_BUS is
constant ZERO : std_logic_vector(3 downto 0) := "0000";
begin
STATUS <= ZERO & A & B & C & D;
-- equivalente : STATUS(7 downto 4) <= "0000";
-STATUS(3) <= A; STATUS(2) <= B;
-STATUS(1) <= C; STATUS(0) <= D;
end ARCHI;
Ver 7.0b, Junio 2008

P 60

VHDL, muy sencillo...

MEDIA VIDEO DISEO


Pregunta : el cdigo siguiente contiene errores enwww.mvd-fpga.com
las
asignaciones, podra usted indicarlas ?
Sntesis y simulacion para componentes programables

_____________________________________________________________________________________________________

library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity MY_BUS is
port ( A, B, C, D : in std_logic_vector(3 downto 0);
SEL :
in std_logic_vector(0 to 1);
VALOR :
in integer range 0 to 255;
IGUAL :
out boolean;
STATUS :
out std_logic_vector(7 downto 0));
end MY_BUS;
architecture ARCHI of MY_BUS is
constant DOCE : std_logic_vector(3 downto 0) := "1100";
constant TRECE : std_logic_vector(0 to 3)
:= "1101";
begin
STATUS(0 to 3) <= DOCE;
STATUS <= DOCE & A(0) & B(0 to 2);
STATUS <=
A when SEL="00"
else B when SEL="01"
else C when SEL="10"
else D;
STATUS <= TRECE & DOCE;
IGUAL <= STATUS = A & D;
IGUAL <= '1' when STATUS=VALOR;
Ver 7.0b, Junio 2008

P 61

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Ver 7.0b, Junio 2008

P 62

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

Respuestas :

www.mvd-fpga.com

= ERROR

= CORRECTO

STATUS(0 to 3) <= DOCE;


-- STATUS despus de estar declarado std_logic_vector(7 downto 0),
-- nosotros solo podemos usarlo con ndices decrecientes

STATUS <= DOCE & A(0) & B(0 to 2);


-- B esta declarado como std_logic_vector(3 downto 0),
-- entonces solo podemos usarlo con ndices en sentido decreciente

E STATUS <=

A when SEL="00"
else B when SEL="01"
else C when SEL="10"
else D;
-- STATUS es un vector de 8 bits, mientras que A, B, C, y D son
-- vectores de 4 bits.

C
E
E

STATUS <= TRECE & DOCE; -- equivalente a STATUS <= "1101_1100";


IGUAL <= STATUS = A & D; -- STATUS es una salida
IGUAL <= '1' when STATUS=VALOR;
-- STATUS es una salida
-- IGUAL (booleano) solo puede tomar un valor TRUE o FALSE
-- Un std_logic_vector comparado con un integer.
-- Esta comparacin solo es posible con la ayuda de bibliotecas
-- especificas.
-- falta "else" despus de "when". Legal pero no deseable

Ver 7.0b, Junio 2008

P 63

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Ver 7.0b, Junio 2008

P 64

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Instrucciones concurrentes
y
secuenciales

Ver 7.0b, Junio 2008

P 65

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Ver 7.0b, Junio 2008

P 66

VHDL, muy sencillo...

Sntesis y simulacion para componentes programables

Instrucciones concurrentes :

MEDIA VIDEO DISEO


www.mvd-fpga.com

Las operacines se efectan al mismo tiempo (en paralelo).


El orden de escritura de las instrucciones no afecta el
resultado de sntesis o de simulacin.
El estilo de escritura es comparable a los lenguajes de
programacin de los PALs ( ecuaciones lgicas ).
Ejemplo de asignaciones simples : ( ecuaciones )
____________________________________________________________________________________________________

entity CONCURRENT is
port ( A, B, C : in bit;
S, T :
out bit);
end CONCURRENT;
architecture ARCHI of CONCURRENT is
begin
S <= (A and B) and not(C);
T <= B xor C;
-- El orden de asignacin S y de T es indiferente.
end ARCHI;
Ver 7.0b, Junio 2008

P 67

VHDL, muy sencillo...

Sntesis y simulacion para componentes programables

Instrucciones secuenciales :

MEDIA VIDEO DISEO


www.mvd-fpga.com

Las operacines se efectan en secuencia.


El orden afecta los resultados de simulacin y de sntesis.
Estilo de escritura parecido a los lenguajes de informtica de
alto nivel .
Las Instrucciones secuenciales se usan en partes especficas
del cdigo : PROCESS o sbprogramas.
Ejemplo :
.

____________________________________________________________________________________________________

architecture ARCHI of SECUENCIA is


begin
process(CK)
begin
if CK'event and CK='1' then
if ENA = '1' then COUNT <= COUNT + 1;
end if;
end if;
Utilizacin del Clock_Enable
end process;
dedicado de los Flip Flops Xilinx
end ARCHI;
( ver Procesos Sincrnicos )
Ver 7.0b, Junio 2008

P 68

VHDL, muy sencillo...

Sntesis y simulacion para componentes programables

Instrucciones concurrentes :

MEDIA VIDEO DISEO


www.mvd-fpga.com

Asignacin de seales por condicin : WHEN ... ELSE


Sintaxis :
signal_x <= valor_x when signal_y = valor_y
else valor_z;

Notar que valor_z es indicado directamente despus de


" else ". (el smbolo de asignacin "<=" es aqu implcito)
Ejemplo :

____________________________________________________________________________________________________

entity CONCURRENT is
port ( A, B, C : in bit;
S, T :
out bit);
end CONCURRENT;
architecture ARCHI of CONCURRENT is
S <= A when C='1'
else B;
T <= B xor C;
end ARCHI;
Ver 7.0b, Junio 2008

P 69

begin

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

Instrucciones concurrentes :

www.mvd-fpga.com

Asignacin de seales por condicin : WHEN ... ELSE


____________________________________________________________________________________________________

entity CONCURRENT is
port ( A, B, C : in bit;
S, T :
out bit);
end CONCURRENT;
architecture ARCHI of CONCURRENT is
S <= A when C='1'
else B;
T <= not B;
end ARCHI;

begin

________________________________________________________________________________________________________

Las dos instrucciones ( o asignaciones ) son concurrentes.


El orden de escritura no afecta los resultados.
Estas instrucciones generan :
A
B

C
Ver 7.0b, Junio 2008

P 70

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

Instrucciones concurrentes :

www.mvd-fpga.com

Asignacin de seales por condicin : WHEN ... ELSE


____________________________________________________________________________________________________

entity TRISTATE is
port ( A, B, C : in std_logic;
S
:
out std_logic);
end TRISTATE;
architecture ARCHI of TRISTATE is
begin
S <= A when C='0'
else 'Z';
S <= B when C='1'
else 'Z';
end ARCHI;
________________________________________________________________________________________________________

A
Ver 7.0b, Junio 2008

P 71

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

Instrucciones concurrentes :

www.mvd-fpga.com

Asignacin de seales par condicin : WHEN ... ELSE


____________________________________________________________________________________________________

entity TRISTATE is
port ( A, B : in std_logic_vector(15 downto 0);
C :
in std_logic;
S
: out std_logic_vector(15 downto 0));
end TRISTATE;
architecture ARCHI of TRISTATE is
begin
S <= A when C='0'
else "ZZZZZZZZZZZZZZZZ";
S <= B when C='1'
else "ZZZZZZZZZZZZZZZZ";
end ARCHI;
________________________________________________________________________________________________________

B[15:0]

S[15:0]

A[15:0]
Ver 7.0b, Junio 2008

P 72

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

Instrucciones concurrentes :

www.mvd-fpga.com

Asignacin de seales por seleccin : WITH ...SELECT


Sintaxis :
with SIGNAL_X select
SIGNAL_Y <= valor_y1
valor_y2
valor_y3
valor_y4

when
when
when
when

"00",
"01",
"10",
others;

WHEN OTHERS (ultima lnea) indica que SIGNAL_Y


tomar el valor valor_y4 para todo valor de SIGNAL_X
no indicado explcitamente.

Ver 7.0b, Junio 2008

P 73

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

Instrucciones concurrentes :

www.mvd-fpga.com

Asignacin de seales por seleccin : WITH ...SELECT


Ejemplo :
____________________________________________________________________________________________________

architecture ARCHI of CONCURENT is


begin
with SEL select
S <= A when "00",
B when "01",
C when "10",
D when others;
T <= not B;
end ARCHI;
_________________________________________________________________________________________________________

A
B

00
01

10

otros casos

SEL[1:0]
Ver 7.0b, Junio 2008

P 74

VHDL, muy sencillo...

Sntesis y simulacion para componentes programables

Instrucciones concurrentes :

MEDIA VIDEO DISEO


www.mvd-fpga.com

Instruccin de bucle : FOR i IN ... GENERATE :


Sintaxis :
LABEL : for I in entero_a to entero_b generate
--Instrucciones concurrentes...
end generate;

GENERATE produce una iteracin de las instrucciones .


El nmero de iteracines esta determinado por los valores
enteros "entero_a" y "entero b".
La utilizacin de un LABEL es obligatoria.
La instruccin GENERATE puede ajustarse al ancho de un
bus si se usa con el atributo RANGE :
BLABLA : for I in DATA'range generate ...
Ver 7.0b, Junio 2008

P 75

VHDL, muy sencillo...

Sntesis y simulacion para componentes programables

Instrucciones concurrentes :

MEDIA VIDEO DISEO


www.mvd-fpga.com

Instruccin de bucle : FOR i IN ... GENERATE :


Ejemplos :
_____________________________________________________________________________________________________________

BLABLA : for I in 0 to 15 generate


S(I) <= A(I) when C ='0' else 'Z';
S(I) <= B(I) when C ='1' else 'Z';
end generate;
_____________________________________________________________________________________________________________

BLABLA : for I in S'range generate


S(I) <= A(I) when C ='0' else 'Z';
S(I) <= B(I) when C ='1' else 'Z';
end generate;
____________________________________

B[15:0]

S[15:0]

A[15:0]
Ver 7.0b, Junio 2008

P 76

VHDL, muy sencillo...

Sntesis y simulacion para componentes programables

Instrucciones concurrentes :

MEDIA VIDEO DISEO


www.mvd-fpga.com

Instruccin de bucle : FOR i IN ... GENERATE y


atributo RANGE :
____________________________________________________________________________________________________________

BLABLA : for I in S'range generate


S(I) <= A(I) when C='0' else 'Z';
S(I) <= B(I) when C='1' else 'Z';
end generate;
____________________________________________________________________________________________________________

RANGE es un atributo pre-definido de VHDL.


Indica la gama de valores de los ndices de un vector de
datos.
Cdigo genrico, independiente del ancho del bus
Portabilidad, re-uso, evolucines facilitadas...
Ver 7.0b, Junio 2008

P 77

VHDL, muy sencillo...

MEDIA VIDEO DISEO


www.mvd-fpga.com
Instrucciones concurrentes : Ejercicio recapitulativo
Sntesis y simulacion para componentes programables

Comparador (when ... else )

BUS_A[3:0]

A
A<B

BUS_B[3:0]

A_MIN
(declarado en modo OUT)

Multiplexor
tri-state
1

(for I in ... generate)


MIN[3:0]
VAL[3:0]

(seal interna)
DISPLAY[6:0]
6
5
4
3
2
1
0

Multiplexores
lgicos
(when ... else)

MAX[3:0]

A
B
C
D
E
F
G

salidas

Decodificador
7 segmentos

0
SEL_MIN

( with ... select)

Ver 7.0b, Junio 2008

P 78

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Instrucciones concurrentes : Ejercicio


-----

El fin de este ejercicio es describir un ensamble que permita


presentar sobre un indicador de 7 segmentos el valor mnimo o
mximo que se presentan sobre el bus BUS_A o BUS_B,
segn el estado de la seal SEL_MIN;

--

Esta es una gua para facilitar el ejercicio.

library ...;
use ...;
-- La biblioteca METAMOR permite incluir dentro del cdigo fuente
-- los parmetros directamente ligados a cada arquitectura
-- En el ejemplo nosotros podemos imponer una disposicin
-- ( total o parcial ) de los pines del FPGA.
library METAMOR;
use METAMOR.ATTRIBUTES.all;
entity CONCUR is
port ( BUS_A, BUS_B
-- declaracin de las
-- El atributo PINNUM
attribute PINNUM of

: std_logic_vector(3 downto 0);


otras entradas y salidas...
permite imponer la distribucin de pines.
BUS_A : signal is "P40,P41,P42,P43";

end CONCUR;
Ver 7.0b, Junio 2008

P 79

VHDL, muy sencillo...

Sntesis y simulacion para componentes programables

Instrucciones concurrentes : Ejercicio

MEDIA VIDEO DISEO


www.mvd-fpga.com

architecture ARCHI of CONCUR is


-- declaracin de seales internas
begin
-- A_MIN <= BUS_A < BUS_B;
-- Solamente si A_MIN es BOOLEAN
A_MIN <= '1' when BUS_A < BUS_B else '0' ;
-- seleccin de los valores MIN o MAX por multiplexado lgico(no TRISTATE)
-- MAX <= BUS_A when not(A_MIN) else BUS_B;
MAX <= BUS_A when A_MIN = '0' else BUS_B;
-- asignacin de otras seales ...
-- seleccin de los valores MIN o MAX por TRISTATE.
VALOR : for I in ... generate
VAL(I) <= MAX(I) when ... else ... ;
VAL(I) <= MIN(I) when ... else ... ;
end generate;
-a
decodificador 7 segmentos
---( en forma de tabla verdad )
-f |
|b
con la instruccin concurrente :
-|
|
WITH ... SELECT
----e | g |c
-|
|
----d
P 80
Ver 7.0b, Junio 2008
VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

Instrucciones concurrentes : Ejercicio

www.mvd-fpga.com

-- continuacin
with VAL select
-- descripcin en forma de tabla verdad
-ABCDEFG
DISPLAY <= "0000001" when ..., -- 0 | segmentos encendidos con 0
"1001111" when ..., -- 1
"0010010" when ..., -- 2
-- otros casos...
"0111110" when others;
A
B
C
D
E
F
G

<=
<=
<=
<=
<=
<=
<=

-- F

DISPLAY(6);
...;
...;
...;
...;
...;
...;

end ARCHI;
Ver 7.0b, Junio 2008

P 81

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

Notas

www.mvd-fpga.com

.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....

Ver 7.0b, Junio 2008

P 82

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

Instrucciones concurrentes : Ejercicio

www.mvd-fpga.com

-- El fin de este ejercicio es describir un ensamble que permita


-- presentar sobre un indicador de 7 segmentos el valor mnimo o
-- mximo que se presentan sobre el bus BUS_A o BUS_B,
-- segn el estado de la seal SEL_MIN;

library ieee;
-----

use ieee.std_logic_1164.all;

La biblioteca METAMOR permite incluir dentro del cdigo fuente


los parmetros directamente ligados a cada arquitectura
En el ejemplo nosotros podemos imponer una disposicin
( total o parcial ) de los pines del FPGA.

entity CONCUR is
port ( BUS_A, BUS_B : std_logic_vector(3 downto 0);
SEL_MIN : in std_logic;
A_MIN : out boolean;
A,B,C,D,E,F,G : out std_logic);
end CONCUR;

Ver 7.0b, Junio 2008

P 83

VHDL, muy sencillo...

Sntesis y simulacion para componentes programables

Instrucciones concurrentes : Ejercicio

MEDIA VIDEO DISEO


www.mvd-fpga.com

architecture ARCHI of CONCUR is


signal VAL, MAX, MIN : std_logic_vector(3 downto 0); -- declaracin de seales
signal DISPLAY : std_logic_vector(6 downto 0);
-- internas
signal A_MIN_INT : boolean;
begin
A_MIN_INT <= BUS_A < BUS_B; -- A_MIN es una condicin lgica
A_MIN <= A_MIN_INT;
-- seleccin de los valores MIN y MAX por multiplexado lgico( no TRISTATE )
MAX <= BUS_A when not(A_MIN_INT) else BUS_B;
MIN <= BUS_A when A_MIN_INT
else BUS_B;
-- seleccin del valore MIN o MAX por TRISTATE.
VALEUR : for I in BUS_A'range generate
VAL(I) <= MAX(I) when SEL_MIN ='0' else 'Z';
VAL(I) <= MIN(I) when SEL_MIN ='1' else 'Z';
end generate;
-a
decodificador 7 segmentos
---( en forma de tabla verdad)
-b |
|f
con la instrucciones concurrente :
-|
|
WITH ... SELECT
----c | g |e
-|
|
----d
P 84
Ver 7.0b, Junio 2008
VHDL, muy sencillo...

Sntesis y simulacion para componentes programables

Instrucciones concurrentes : Ejercicio


-- continuacin
with VAL select
-DISPLAY <= "0000001"
"1001111"
"0010010"
"0000110"
"1001100"
"0100100"
"0100000"
"0001111"
"0000000"
"0000100"
"0001000"
"1100000"
"0110001"
"1000010"
"0010000"
"0111000"
A <= DISPLAY(6);
B <= DISPLAY(5);
C <= DISPLAY(4);
D <= DISPLAY(3);
E <= DISPLAY(2);
F <= DISPLAY(1);
G <= DISPLAY(0);
end ARCHI;
Ver 7.0b, Junio 2008

MEDIA VIDEO DISEO


www.mvd-fpga.com

descripcin de la tabla verdad


when x"0",
when x"1",
when x"2",
when x"3",
when x"4",
when x"5",
when x"6",
when x"7",
when x"8",
when x"9",
when x"A",
when x"b",
when x"C",
when x"d",
when x"e",
when x"F",
"0000000" when others;

P 85

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

Notas

www.mvd-fpga.com

.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....

Ver 7.0b, Junio 2008

P 86

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Instrucciones secuenciales: nocin de PROCESS.


Un PROCESS es una parte de cdigo en la cual las
instrucciones se ejecutan en secuencia ( siguiendo el orden de
escritura ).
Una misma arquitectura puede contener varios PROCESS.
Todos los process se ejecutan en paralelo. ( un PROCESS es
equivalente a una instruccin concurrente compleja).
El juego de instrucciones utilizables dentro de un process es
diferente del juego de instrucciones concurrentes.
El orden de escritura de las instrucciones afecta los
resultados de simulacin y de sntesis.
Ver 7.0b, Junio 2008

P 87

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Instrucciones secuenciales : nocin de PROCESS.


Implementacin de :
Lgica combinatoria ( process combinatorio ).
Lgica sincrnica ( process sincrnicos ).
Lgica sincrnica con inicializacin asincrnica.
En simulacin, un process se dice dormido hasta que las
seales susceptibles de activarlo cambian de estado.

Ver 7.0b, Junio 2008

P 88

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Instrucciones secuenciales : nocin de PROCESS.

Lista de las seales


Estructura general de un process :podiendo provocar una reevaluacion
del valor de las seales asignadas
Etiqueta opcional
en el Process

[etiqueta :] process ( lista_de_sensibilidad )


-- parte declaratoria
-- declaracion eventual de variables ...
begin -- parte operatoria
-- instrucciones secuenciales ( if, case, loop... )
end process;
Fin del Process
Ver 7.0b, Junio 2008

P 89

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

Metodologa de uso de los PROCESS :

www.mvd-fpga.com

El usuario debe tomar las precauciones necesarias para dominar el


comportamiento y la implementacin de la lgica generada.
Para esto, deber indicar el la lista de sensibilidad todas las
seales capaces de provocar un cambio en la asignacin de los
valores de las seales de salida del PROCESS, y nicamente estas.
Un gran rigor en la definicin de la lista de sensibilidad
permitir sintetizar diseos sin sorpresas ( sin asincrnismos )

Ver 7.0b, Junio 2008

P 90

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

Metodologia de uso de los PROCESS en sintesis :

www.mvd-fpga.com

A
B
C
D

S
T
U

A
B

C
D

S
T

A
B

D S Q

C
D

Q
R

CK
INIT

CK
process (CK, INIT)

process (A,B,C,D)

process (CK)

-- process combinatorio
begin
if (A=1 and B=0)
then ...

-- process sincronico
begin
if CKevent and CK=1
then
if (A=1 and B=0
then...

Ver 7.0b, Junio 2008

P 91

-- process sincronico
-- con initializacion
-- asinchronica
begin
if INIT=1 then
S <= 1; T <= 0;
elsif CKevent and CK=1
then
if (A=1 and B=0)
then...
VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Incoherencias de diseo hardware


( soportadas por el lenguaje VHDL )
A
B

C
D

A
B

C
D

D S Q

Q
R

CK
INIT

CK

process (CK, INIT, A, B, C, D )


process (CK, A,B,C,D

-- process sincronico
-- con initializacion
-- asinchronica
begin
if INIT=1 then
S <= 1; T <= 0;
elsif CKevent and CK=1
then
if (A=1 and B=0)
then...

-- process sincronico
begin
if CKevent and CK=1
then
if (A=1 and B=0
then...

Ver 7.0b, Junio 2008

P 92

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Instrucciones secuenciales : nocin de PROCESS.


Procesos combinatorios :
Sintaxis :
[LABEL :] process (lista_de_sensibilidad)
[declaraciones]
begin
-- Instrucciones secuenciales
end process [LABEL];

La lista de sensibilidad contiene todas las seales que


pueden causar una actividad en el process.
La parte declaratoria puede contener variables.
Una variable es solo visible dentro del process en que esta
declarada.
Ver 7.0b, Junio 2008

P 93

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Instrucciones secuenciales : nocin de PROCESS.


Procesos combinatorios:
Ejemplo :

_____________________________________________________________________________________________________

MUX : process ( A, B, SEL) -- lista de sensibilidad


-- parte declaratoria no usada en este ejemplo
begin
if
SEL = '0' then SALIDA <= A;
else
SALIDA <= B;
end if;
end process;

Las seales tratadas dentro de este tipo de process son


puramente combinatorias ( ninguna referencia se hace a la
deteccin del flanco de cambio del reloj ).
Ver 7.0b, Junio 2008

P 94

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Instrucciones secuenciales : nocin de PROCESS.


Proceso sincrnico simple : (sin inicializacin asincrnica ).
Ejemplo :

process -- sin lista_de_sensibilidad


begin
wait until (CK'event and CK='1');
COUNT <= COUNT + 1; -- legal solamente si la biblioteca
-- std_logic_unsigned a es declarada

end process;
La seal COUNT ( std_logic_vector ) ser construida por
flip-flops.
Ninguna seal tratada en este process puede ser
combinatoria
Ver 7.0b, Junio 2008

P 95

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Instrucciones secuenciales : nocin de PROCESS.


Proceso sincrnico simple : (sin inicializacin sincrnica ).
Ejemplo ( Sintaxis 2 ) :

process (CK)
begin
if (CK'event and CK='1') then
COUNT <= COUNT + 1; -- legal solamente la biblioteca
end if;
-- std_logic_unsigned fue declarada
end process;
La seal COUNT ( std_logic_vector ) ser construida por
flip-flops.

Ver 7.0b, Junio 2008

P 96

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Instrucciones secuenciales : nocin de PROCESS.


Procesos sincrnicos con inicializacin asincrnica.
Ejemplo :
process (CK,RST)
-- lista de sensibilidad
begin
if RST = '1' then
COUNT <= "0000";
-- accin asincrnica
elsif (CK'event and CK='1') then
COUNT <= COUNT + 1; -- accin sincrnica
end if;
end process;
Ver 7.0b, Junio 2008

P 97

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

PROCESS y juego de instrucciones secuenciales


Variables y seales :

Las seales :
Objetos que pueden ser declarados en el
interior de una entidad ( ports ) o de una
arquitectura (seales internas).
Visibles dentro de toda la arquitectura.
La asignacin de un valor a una seal se hace
con un retardo ( infinitesimal ).
Ver 7.0b, Junio 2008

P 98

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

PROCESS y juego de instrucciones secuenciales.


Variables y seales : Ejemplo sobre las seales :
entity SIG is
port (A, B, C, CK : in std_logic;
S, T : out std_logic);
end SIG;

A
D

architecture ARCHI of SIG is


D
Q
signal TMP : std_logic; begin
CK
process
begin
wait until CK'event and CK='1';
D
Q
TMP <= A or B; -- esta lnea ser ignorada
S <= TMP;
TMP <= A and C; -- anula la asignacin precedente
T <= TMP;
-- sobre la seal TMP.
end process;
end ARCHI;
Ver 7.0b, Junio 2008

P 99

TMP

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

PROCESS y juego de instrucciones secuenciales


Variables y seales :

Variables :

Son objetos que pueden ser declarados dentro de un


process (u otras entidades secuenciales).
Invisibles desde el exterior del process donde son
declaradas.
La asignacin de una variable se hace en el momento
preciso en el cual la instruccin es ejecutada.
Las variables son utilizadas para facilitar la
escritura del cdigo, o como " artificio de escritura ".
Dan al lenguaje VHDL un comportamiento similar al de un lenguaje
informtico ( ejecucin en secuencia ).
Ver 7.0b, Junio 2008

P 100

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

PROCESS y juego de instrucciones secuenciales

www.mvd-fpga.com

Variables y seales : Ejemplo utilizando une variable :


entity VAR is
port (A, B, C, CK : in std_logic;
S, T : out std_logic);
A
end VAR;
S
D
Q
B
architecture ARCHI of VAR is
begin
A
process
T
D
Q
C
variable TMP : std_logic;
begin
CK
wait until CK'event and CK='1';
TMP := A or B;
-- esta lnea ser efectiva
S <= TMP;
-- para la asignacin de la seal S
TMP := A and C;
-- esta lo ser
T <= TMP;
-- para la asignacin de la seal T
end process;
end ARCHI;
Ver 7.0b, Junio 2008

P 101

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

PROCESS y juego de instrucciones secuenciales

Instrucciones secuenciales frecuentemente


utilizadas

IF ... THEN ... ; [ELSIF ... THEN ...]; [ELSE ...];


END IF;
Similar la asignacin de seales par condicin.
CASE ... END CASE;
Similar a la asignacin de seales par seleccin.
FOR ... LOOP
END LOOP;
Similar a la instruccin FOR ... GENERATE.
Ver 7.0b, Junio 2008

P 102

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

IF..THEN ..;[ELSIF..THEN ..]; [ELSE ..]; END IF;


Ejemplo :

_________________________________________________________________________________________________

signal A, B, C, D : std_logic_vector(7 downto 0);


signal SEL : std_logic_vector(1 downto 0);
signal MUX : std_logic_vector(7 downto 0);
BLABLA : process (A, B, C, D, SEL) -- etiqueta BLABLA
-- parte declaratoria no
begin
if
SEL = "00" then
elsif SEL = "01" then
elsif SEL = "10" then
else
end if;
end process;
Ver 7.0b, Junio 2008

utilizada en este ejemplo


MUX
MUX
MUX
MUX

<=
<=
<=
<=

P 103

A;
B;
C;
D;

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

IF..THEN ..;[ELSIF..THEN ..]; [ELSE ..]; END IF;

Sintaxis :
Toda instruccin IF debe terminarse por END IF;
IF est en general seguida de ELSE.
Varios IF pueden estar enlazados,
La contraccin ELSIF permite simplificar la escritura :
Ejemplo 1 :
______________________________________________________________________________________________________

process (A, B, C, D, SEL) begin


if SEL="00" then MUX <= A;
else if SEL = "01" then MUX <= B;
else if SEL = "10" then MUX <= C;
else MUX <= D;
end if;
end if;
end if;
end process;
Ver 7.0b, Junio 2008

P 104

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

IF..THEN ..;[ELSIF..THEN ..]; [ELSE ..]; END IF;


Ejemplo 2 :
______________________________________________________________________________________________________

process (A, B,
begin
if
SEL =
elsif SEL =
elsif SEL =
else
end if;
end process;

C, D, SEL)
"00" then MUX <=
"01" then MUX <=
"10" then MUX <=
MUX <=

A;
B;
C;
D;
-- un solo "end if".

-- Las contracciones de ELSE IF en ELSIF permiten


-- simplificar la escritura suprimiendo la necesidad de
-- tantos END IF;
Ver 7.0b, Junio 2008

P 105

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

IF..THEN ..;[ELSIF..THEN ..]; [ELSE ..]; END IF;


Resultados de sntesis :

0
0

MUX

"10"
SEL[1:0]

CMP
=

"01"
SEL[1:0]

CMP
=

"00"
SEL[1:0]

Ver 7.0b, Junio 2008

P 106

CMP
=

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

IF..THEN ..; [ELSIF..THEN ..]; [ELSE ..]; END IF;


Utilizacin del Clock Enable dedicado de los Flip-Flops ( FPGAs Xilinx )

generador
de funciones
combinatorias
F o G
(LUT de 4 entradas)

0
1

EC
CK
CK

Porcin de CLB
Flip-Flop D con Clock Enable dedicado
( FPGA Xilinx )
Ver 7.0b, Junio 2008

P 107

VHDL, muy sencillo...

MEDIA VIDEO DISEO


www.mvd-fpga.com
IF..THEN ..; [ELSIF..THEN ..]; [ELSE ..]; END IF;
Sntesis y simulacion para componentes programables

Ejemplo 3 : Utilizacin del Clock_Enable dedicado (con wait until):

____________________________________________________________________________________________________

architecture ARCHI of SEQUENCE is


begin
process
begin
wait until CK'event and CK = '1';
if ENA = '1' then COUNT <= COUNT + 1;
end if;
Utilizacin del Clock_Enable
end process;
dedicado de los FF Xilinx
end ARCHI;
--------

Si ENA /= '1', el process puede ser activado por el flanco


del reloj, pero si la condicin if ENA = '1' no es verdadera
el ultimo valor de COUNT ser conservado.
Este estilo de escritura garantiza el uso del Clock_Enable
dedicado de los Flip-Flops FPGAs Xilinx, y permite por esto una
economa substancial de elementos de lgica combinatoria ,
y el aumento de la frecuencias de funcionamiento ..

Ver 7.0b, Junio 2008

P 108

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

IF..THEN ..;[ELSIF..THEN ..]; [ELSE ..]; END IF;


Ejemplo 3 b: Utilizacin del Clock_Enable dedicado (if
CK'event...)
___________________________________________________________________________________________

architecture ARCHI of SEQUENCE is


begin
process(CK)
begin
if CK'event and CK = '1' then
if ENABLE = '1' then COUNT <= COUNT + 1;
end if;
end if;
end process;
Utilizacin del Clock_Enable
dedicado de los FF Xilinx
end ARCHI;
Ver 7.0b, Junio 2008

P 109

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

IF..THEN ..; [ELSIF..THEN ..]; [ELSE ..]; END IF;


Cuidado con los riesgos de insercin de lgica combinatoria
en los caminos de reloj !
D

EC
CK
CK

process(CK,EC)
begin
if (CK'event and CK='1'
Q <= D;
end if;
end process;
Ver 7.0b, Junio 2008

P 110

and EC='1' ) then

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

IF..THEN ..; [ELSIF..THEN ..]; [ELSE ..]; END IF;


Informaciones complementarias :
Despus de que una condicin IF es verdadera, el
programa ejecuta las asignaciones relacionadas con la dicha
condicin, y pasa a la instruccin siguiente al END IF;
Las otras condiciones no son analizadas.
No es necesario enumerar todos lo valores posibles de las
seales (cuidado con los latches y valores fijos no deseados,
en particular dentro de los process combinatorios ! ).

Ver 7.0b, Junio 2008

P 111

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

IF..THEN ..; [ELSIF..THEN ..]; [ELSE ..]; END IF;

www.mvd-fpga.com

Ejemplo 4: Latches no deseados


process (A, C )
begin
if
C = '1'
end if;
end process;
--------

S
1

then S <= A;
C

El process es reactivado cuando se produce un cambio


sobre las seales A o C. Dependiendo, si C pasa de '1' a
'0', el process es activado, pero la condicin C ='1' no es
verdadera. La asignacin S <= A no ocurre nunca, y S conserva su
antiguo valor.
Esto se traduce por la realimentacin de S sobre la entrada del
multiplexor, para garantizar el mantenimiento del antiguo valor.

Ver 7.0b, Junio 2008

P 112

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

IF..THEN ..; [ELSIF..THEN ..]; [ELSE ..]; END IF;


Ejemplo 6 : Valores permanentes asignados a una seal.
______________________________________________________________________________________________________

process (A, C)
begin
if C = '1' then S <= '1';
end if;
end process;
------

VCC
S

Un solo valor puede ser asignado a la seal S el valor '1'.


ninguna condicin esta definida para asignar otro valor
La herramienta de sntesis va por lo tanto a asignar el valor '1
independientemente de que la condicin de C ='1' sea o no
verdadera

Ver 7.0b, Junio 2008

P 113

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

CASE ... END CASE :


Instrucciones que permiten revisar a todos los valores
posibles de una seal.
Todos los casos posibles deben ser enumerados.
Generalmente, el ultimo caso citado engloba todos los
casos no citados explcitamente (WHEN OTHERS).
Muy utilizados en la descripcin de maquinas de
estado y en funciones combinatorias en forma de tabla
verdad.
Ver 7.0b, Junio 2008

P 114

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

CASE ... END CASE;

www.mvd-fpga.com

Ejemplo :
______________________________________________________________________________________________________

process (A, B, C, D, SEL)


case SEL is
when "00"
=> MUX
when "01"
=> MUX
when "10"
=> MUX
when others => MUX
end case;
end process;

begin
<=
<=
<=
<=

A;
B;
C;
D;

-- WHEN OTHERS permite de citar en el ultimo lugar todos los otros


-- casos posibles que no fueron citados precedentemente.
-- El smbolo " => " es interpretado como por lo tanto.

Ver 7.0b, Junio 2008

P 115

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

CASE ... END CASE;


Resultados de sntesis
D

OTHERS

"10"

"01"

"00"

MUX

"00", "01", "10"


SEL[1:0]

Ver 7.0b, Junio 2008

Decodificado
de Valores

P 116

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

IF ... END IF y CASE ... END CASE;


IMBRICACIN DE

IF

Y DE

www.mvd-fpga.com

CASE . Ejemplo :

_____________________________________________________________________________________________________

process ( FASE, ACCION )


begin
case FASE is
when REPOSO => if
ACCION = "00"
elsif ACCION = "10"
else
end if;
when TRABAJO => if

ACCION = "00"

else
end if;
when others => SALIDA <= "000";
end case;
end process;
Ver 7.0b, Junio 2008

then SALIDA <= "010";


STATUS <= "01";
then SALIDA <= "011";
STATUS <= "01";
SALIDA <= "000";
STATUS <= "00";

P 117

then SALIDA
STATUS <=
SALIDA <=
STATUS <=

<= "100";
"10";
"101";
"00";

STATUS <= "00";

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

CASE ... END CASE;


La instruccin CASE es en particular utilizada
en la descripcin de maquinas de estado

Ver 7.0b, Junio 2008

P 118

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

VHDL
statemac.vhd

Ver 7.0b, Junio 2008

P 119

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

VHDL
statemac.vhd

Ver 7.0b, Junio 2008

P 120

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

CODIF ICACIN DE LAS MAQUINAS DE ESTADO :

www.mvd-fpga.com

BINARIO u ONE HOT : Dos mtodos son frecuentemente utilizados


para codificar maquinas de estado :
Codificacin binaria: 3 bits pueden codificar hasta 8 estados
4 bits pueden codificar hasta 16 estados...
Para decodificar un estado, es necesario analizar el estado de todos los
flip flops
Codificacin " one hot " : 1 flip flop par estado. ( un solo flip flops
esta activado en cada estado ).
Para decodificar un estado, es suficiente analizar la salida del flip flop
que representa ese estado.
Ejemplo : codificacin "one hot" de una maquina de 5 estados :
Estado 0 : " 00001 "
Estado 1 : " 00010 "
Estado 2 : " 00100 "
Estado 3 : " 01000 "
Estado 4 : " 10000 "
Ver 7.0b, Junio 2008

P 121

VHDL, muy sencillo...

MEDIA VIDEO DISEO


www.mvd-fpga.com
Ejercicio : maquina de estados con salidas combinatorias
Sntesis y simulacion para componentes programables

Entrada(s)
DATA_IN

Lgica
combinatoria

Siguiente Estado

Estado Actual

(seal interna)

(seal interna)

( process
combinatorio )

VALID
CK

Registros

( process
sincrnico )

RST
Salidas(s)
Combinatorias
BINGO
Ver 7.0b, Junio 2008

P 122

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

Ejercicio : maquina de estados sincrona (1)

Ver 7.0b, Junio 2008

P 123

www.mvd-fpga.com

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

NOTAS

.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....

Ver 7.0b, Junio 2008

P 124

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

Ejercicio : maquina de estados sincrona (2)

www.mvd-fpga.com

library IEEE;
use IEEE.std_logic_1164.all;
entity STATE is
port (A: in STD_LOGIC;
B: in STD_LOGIC;
C: in STD_LOGIC;
CK: in STD_LOGIC;
RST: in STD_LOGIC;
S: out STD_LOGIC;
T: out STD_LOGIC);
end STATE;
architecture ARCHI of STATE is
type ETAT_type is (S0, S1, S2, S3, S4);
signal ETAT: ETAT_type;
begin

Ver 7.0b, Junio 2008

P 125

VHDL, muy sencillo...

Sntesis y simulacion para componentes programables

Exercice : maquina de estados (2)

MEDIA VIDEO DISEO


www.mvd-fpga.com

ETAT_machine: process (CK, RST) begin


if RST = 1 then ETAT <= S0;
S <= 0;
T <= 0;
elsif CK'event and CK = '1' then
case ETAT is
when S0 =>
if A='0' and B='1' then
ETAT <= S2;
S <= '1';
T <= '1';
elsif A='1' and B='0' then ETAT <= S1;
S <= '1';
T <= '0';
end if;
when S1 =>
if A='1' and B='1' then ETAT <= S3;
S <= '0';
T <= '0';
end if;
when S2 =>
if A='1' and B='1' then ETAT <= S3;
S <= '0';
T <= '0';
end if;
when S3 =>
ETAT <= S4;
S <= '0';
T <= '1';
when S4 =>
if C='1' then
ETAT <= S0;
S <= '0';
T <= '0';
end if;
when others => null; -- when others => ETAT <= S0; S <= 0; T <= 0;

-- No es una buena idea usar el when others => null


end case;
end if;
end process;
end ARCHI;

Ver 7.0b, Junio 2008

P 126

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

FOR ... LOOP :


Ejemplo 1 :

_______________________________________________________________________________________________

process (CNT)
variable TMP : integer range 0 to 32;
begin
TMP := 0;
for I in CNT'range loop
if CNT(I) = '1' then TMP := TMP + 1;
end if;
Variable inicializada en cada llamado al process !
end loop;
VALOR <= TMP;
end process;
-- este cdigo permite contar el nmero bits en '1' sobre un bus de
-- 32 bits. Puede segn las herramientas y sus opciones generar
-- incrementadores en cascada
Ver 7.0b, Junio 2008

P 127

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

FOR ... LOOP :

www.mvd-fpga.com

Ejemplo 3 :

________________________________________________________________________________________________

library IEEE; use IEEE.STD_LOGIC_1164.all;


use IEEE.STD_LOGIC_UNSIGNED.all;
entity CONTADOR is
port ( CK, ENABLE : in std_logic;
QOUT : out std_logic_vector(7 downto 0);
TERM_CNT : out std_logic );
end CONTADOR;
architecture ARCHI of CONTADOR is
signal COUNT : std_logic_vector(7 downto 0);
begin
process
begin
wait until CK'event and CK='1';
Importante !!!
if ENABLE='1' then
COUNT <= COUNT + 1;
end if;
end process;
QOUT <= COUNT; -- ver continuacin en pagina siguiente ---->
Ver 7.0b, Junio 2008

P 128

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

FOR ... LOOP :

www.mvd-fpga.com

Ejemplo con utilizacin de una variable :

________________________________________________________________________________________________

process (COUNT)

-- process combinatorio

variable TEMP : std_logic; -- parte declaratoria


begin
TEMP := '1'; -- valor inicial de TEMP
-- en el inicio del bucle
for I in COUNT'range loop
-- nombre iteraciones
TEMP := TEMP and COUNT(I); -- igual al nmero de bits
end loop;
-- presentes en el vector COUNT;
TERM_CNT <= TEMP; -- Despus de la ultima iteracin,
-- el valor de TEMP es asignado a la seal TERM_CNT;
end process;
end ARCHI;

La variable TEMP no es visible al exterior del process. Ella sirve de


artificio de clculo para la generacin de la seal TERM_CNT ya que esta
toma su valor al final del process.
Ver 7.0b, Junio 2008

P 129

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

FOR ... LOOP


Resultados de sntesis

COUNT(0)
COUNT(1)
COUNT(2)
COUNT(3)
COUNT(4)
COUNT(5)
COUNT(6)
COUNT(7)

Ver 7.0b, Junio 2008

TERM_CNT

P 130

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

Instrucciones concurrentes y secuenciales : www.mvd-fpga.com


Ejercicio :
Implementacin del diseo siguiente :
READ_B
DBUS

DATA

-- SEALES INTERNAS :
signal
DBUS,
REGA,
REGB,
CNT : std_logic_vector(7 downto 0);
A_EQ_B, TERM_CT : std_logic;
-- segn estrategia utilizada

(interno )

(inout)

WR_B

RDA_B

RDB_B

DIN
(interno)

IOBs

D
WA
CK

CE
CK

D
WB
CK

CE
CK
REGB

REGISTRO

REGISTRO

A_EQ_B

-- SEALES A DECLARAR EN LA ENTIDAD :

REGA

-- SEALES DE CONTROL
WA, WB, WR_B : in std_logic;
RDA_B, RDB_B, READ_B : in std_logic;
LOAD, ENA : in std_logic;
ICK : in std_logic;

Ver 7.0b, Junio 2008

ENA
CK

CK

CNT
D CNT

LOAD

-- ENTRADAS Y SALIDAS
DATA : inout std_logic_vector(7 downto 0);
AEQB_R, TC_R : out std_logic;

AEQB_R
D

A=B

IOB

LD
COMPARADOR
EC
TERM_CT

TC_R
D

CK TC
CK
CONTADOR
CARGABLE

P 131

IOB

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Este diseo representa una interconexin bi-direccional 8 bits con


un microprocesador.
Dos registros de 8 bits, REGA y REGB pueden ser escritos en el
flanco de subida del reloj, segn la validacin de WA y de WB.

Para esto, los datos presentes sobre DATA, son transmitidos al bus
DBUS cuando la seal WR_B es activa (a '0').
Por la activacin de las seales RDA_B y RDB_B, los datos de REGA
o REGB son transmitidos sobre el bus interno DBUS, despus sobre
DATA, gracias a la seal READ_B.
El registro REGA permite cargar un contador donde la salidas son
comparadas con el valor de REGB para obtener la seal A_EQ_B.
La salidas del comparador (A_EQ_B) y la cuenta final del contador
(TERM_CT) son sincronizados antes ser enviados a las salidas
(AEQB_R y TC_R).
Ver 7.0b, Junio 2008

P 132

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

Para este diseo, utilizar las instrucciones siguientes :


www.mvd-fpga.com

Para los registros : process sincrnicos con utilizacin del clock enable
dedicado de las Flip-Flops.
Para el contador :
Process sincrnico con utilizacin del clock enable dedicado, para
la parte contador;
Process combinatorio con la instruccin LOOP para la generacin
del TERM_CT ( cuenta terminal ).
Para los buffers tri-state, Instruccin GENERATE con WHEN ELSE.
Para el comparador de registros dos soluciones:
Process sincrnico ( en este caso, la declaracin de la seal
A_EQ_B no se usa ).
WHEN ELSE para generacin de A_EQ_B, + process sincrnico
para los FF de salidas.
Ver 7.0b, Junio 2008

P 133

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

Notas

www.mvd-fpga.com

.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....

Ver 7.0b, Junio 2008

P 134

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Ver 7.0b, Junio 2008

P 135

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Ver 7.0b, Junio 2008

P 136

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Gestin de la jerarqua
y
VHDL estructural

Ver 7.0b, Junio 2008

P 137

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Ver 7.0b, Junio 2008

P 138

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Gestin de la jerarqua ( VHDL estructural ) :


Se effectua conectando entre si varios mdulos.
( similar con una netlist ).
Estilo de escritura bautizado VHDL estructural.
La operacin que permite llamar a un modulo ( o caja negra ) se
llama INSTANCIACIN.
Los elementos lgicos ( puertas, Flip-Flops ... ) generados por
las herramientas de sntesis a partir de un cdigo tipo RTL son
llamados INFERIDOS ( nocin de inferencia ).
Un mismo fichero VHDL puede contener a la vez cdigo
estructural ( instancias ), y cdigo de comportamiento o RTL
( inferencia ).
Ver 7.0b, Junio 2008

P 139

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Gestin de la jerarqua y VHDL estructural :

En sntesis Lgica, las instancias son utilizadas para :


Gestin de la jerarqua ( el diseo es partido en varios
elementos).
Uso de elementos pre-optimizados para la arquitectura
en usada ( macro funciones o primitivas ).
Ventajas e inconvenientes de las instancias de mdulos
especficos optimizados:
Permiten acceder a detalles de arquitectura no
necesariamente accesibles desde la herramienta de sntesis.
( Ej : memoria SRAM en las familias XC4000E y XC4000XL,
decodificadores rpidos... )
Limita la portabilidad de los diseos entre las
arquitecturas.
Ver 7.0b, Junio 2008

P 140

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Gestin de la jerarqua y VHDL estructural :


Condicionado automtico de las instancias modulares :
En ciertas condiciones, el ancho del bus de las instancias
modulares puede ser ajustado en forma automtica para
cada instancia. Para esto los mdulos deben cumplir las
siguientes condiciones:
Ser concebidos en forma genrica ( cdigo independiente
del ancho del bus utilizado ver GENERICO ).
Ser visibles por la herramienta de sntesis, durante la
compilacin, al nivel jerrquico superior .

Ver 7.0b, Junio 2008

P 141

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Gestin de la jerarqua y VHDL estructural :


Reglas a observar para la instancia de un componente :
Declaracin de la instancia.
( dentro la parte declaratoria de la arquitectura , o dentro
un package ).
La declaracin de los componentes necesitan la lista de
puertos los que se describen dentro de la entidad del
modulo correspondiente.
La asignacin de las seales del componente ( modos
posicionales y asociativos).
Cada instancia de un componente debe estar precedido por
una etiqueta nica .
Ver 7.0b, Junio 2008

P 142

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

Gestin de la jerarqua y VHDL estructural :

www.mvd-fpga.com

Ejemplo de instancia :

______________________________________________________________________________________________

entity STRUCT is
port ( IA, IB, IC, ID : in std_logic_vector(7 downto 0);
SELECT : in std_logic_vector(0 to 1);
CLK, ENABLE, RESET : in std_logic;
QOUT : out std_logic_vector(7 downto 0));
end STRUCT;
architecture ARCHI of STRUCT is
-- declaraciones de seales internes y componentes
signal MXE, MXF, MXG : std_logic_vector(7 downto 0);
component M2_1
port (A, B : in std_logic_vector(7 downto 0);
SEL : in std_logic; MX : out std_logic_vector(7 downto 0));
end component;
component REGIS
port (DIN : in std_logic_vector(7 downto 0);
CK, ENA, RST : in std_logic;
REGOUT : out std_logic_vector(7 downto 0);
SPARE : out std_logic);
end component;
Ver 7.0b, Junio 2008

P 143

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

Gestin de la jerarqua y VHDL estructural www.mvd-fpga.com


:
Ejemplo de instancia ( modo asociativo) :

______________________________________________________________________________________________

begin
U1 : M2_1 port map
(A => IA, B => IB, -- nombre del pin, seguido del smbolo
SEL => SELECT(0), -- " => " y del nombre del seal conectada
MX => MXE);
-- Las diferentes parejas pin/seal
-- son separadas por una coma. El orden de asignacin de los pines
-- a las seales no tiene importancia.
U2 : M2_1 port map
(SEL => SELECT(0),
A => IC, B => ID,
U1
IA[7:0]
A
MX => MXF);
MXE[7:0]
SELECT(0)
U3
SEL MX
IB[7:0]
U3 : M2_1 port map
B
A
MXG[7:0]
DIN
SELECT(1)
SEL
MX
M2_1
(A => MXE, B => MXF,
B
REGOUT
IC[7:0]
SEL => SELECT(1),
A
M2_1
SELECT(0)
SEL MX
RST
MXF[7:0]
RESET
ID[7:0]
MX => MXG);
B
SPARE
U2
ENA
ENABLE
M2_1
U4 : REGIS port map
(DIN => MXG, CK => CLK,
CK
CLK
ENA => ENABLE, RST => RESET, REGOUT => QOUT,
REGIS
SPARE => open);
end ARCHI;
palabra clave !
Ver 7.0b, Junio 2008

P 144

U4
QOUT[7:0]

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Gestin de la jerarqua y VHDL estructural :


Ejemplo de instancia ( modo posicional ) :

______________________________________________________________________________________________

begin
U1 : M2_1 port map
(IA, IB,
-- La asignacin de las seales a los pines
SELECT(0),
-- del componente, se hace en relacin a la
MXE);
-- de la posicin de cada pin en la declaracin
-- del componente
U2 : M2_1 port map
(IC, ID,
SELECT(0),
MXF);
U3 : M2_1 port map
(MXE, MXF,
SELECT(1),
MXG);

U1
IA[7:0]
SELECT(0)
IB[7:0]

A
SEL
B

MXE[7:0]
SELECT(1)

M2_1
IC[7:0]
SELECT(0)
ID[7:0]

A
SEL
B

MX

A
SEL
B

MXF[7:0]

MX

DIN
REGOUT

M2_1
RESET

RST

ENABLE

ENA

QOUT[7:0]

SPARE

CLK

P 145

U4

MXG[7:0]

U2

M2_1

U4 : REGIS port map


(MXG, CLK, ENABLE, RESET, QOUT, open );
end ARCHI;
Ver 7.0b, Junio 2008

U3

MX

CK
REGIS

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

Notas

www.mvd-fpga.com

.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....

Ver 7.0b, Junio 2008

P 146

VHDL, muy sencillo...

Sntesis y simulacion para componentes programables

MEDIA VIDEO DISEO

Gestin de la jerarqua y VHDL estructural www.mvd-fpga.com


:
Ejemplo de instanciacin de memoria sincrnica :
( RAM16x1s - 16 x 1 bit, sincrnica )

____________________________________________________________________________________________

library IEEE; use IEEE.std_logic_1164.all;


entity MEMO_TRI is
-- Modulo de memoria 16 x 6.
port ( ADR : in std_logic_vector(3 downto 0);
DIN : in std_logic_vector(5 downto 0);
WR, READ_B, CK : in std_logic;
DOUT : out std_logic_vector(5 downto 0));
end MEMO_TRI;
architecture ARCHI of MEMO_TRI is
signal INT : std_logic_vector(5 downto 0);

component RAM16x1s
port (A3, A2, A1, A0, D, WE, WCLK : in std_logic;
O : out std_logic); end component;
begin
GENE : for I in DIN'range generate
UA : RAM16x1S port map (
A3 => ADR(3), A2 => ADR(2), A1 => ADR(1), A0 => ADR(0),
D => DIN(I), WE => WR, WCLK => CK, O => INT(I));
DOUT(I) <= INT(I) when READ_B ='0' else 'Z'; -- salidas tri-state
end generate;
end ARCHI;
P 147
Ver 7.0b, Junio 2008
VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

Gestin de la jerarqua y VHDL estructural :

www.mvd-fpga.com

Ejemplo de instanciacin de memoria sincrnica :


( RAM16x1s - 16 x 1 bit, sincrnica )

______________________________________________________________________________________________

ADR(3)
ADR(2)
ADR(1)
ADR(0)
DIN(5)
WR
CK

A3
A2
A1
A0
D
WE
WCLK

GENE/UA5

ADR(3)
ADR(2)
ADR(1)
ADR(0)
DIN(4)
WR
CK

A3
A2
A1
A0
D
WE
WCLK

GENE/UA4

ADR(3)
ADR(2)
ADR(1)
ADR(0)
DIN(3)
WR
CK

A3
A2
A1
A0
D
WE
WCLK

GENE/UA3

INT(5)

DOUT(5)

RAM16x1S

INT(4)

DOUT(4)

RAM16x1S

INT(3)

RAM16x1S

DOUT(3)

ADR(3)
ADR(2)
ADR(1)
ADR(0)
DIN(2)
WR
CK

A3
A2
A1
A0
D
WE
WCLK

ADR(3)
ADR(2)
ADR(1)
ADR(0)
DIN(1)
WR
CK

A3
A2
A1
A0
D
WE
WCLK

ADR(3)
ADR(2)
ADR(1)
ADR(0)
DIN(0)
WR
CK

A3
A2
A1
A0
D
WE
WCLK

GENE/UA2
O

INT(2)

DOUT(2)

INT(1)

DOUT(1)

INT(0)

DOUT(0)

RAM16x1S

GENE/UA1
O

RAM16x1S

GENE/UA0
O

RAM16x1S

READ_B

Ver 7.0b, Junio 2008

P 148

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Atributos

Ver 7.0b, Junio 2008

P 149

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Atributos frecuentemente utilizados en sntesis :


Propietarios asignados a un type, a un objeto ( seal,
variable o constante ) o a una entidad
Atributos definidos en VHDL :
LEFT
-- valor del ndice izquierdo
RIGHT
-- valor del ndice derecho
HIGH
-- ndice de valor mas elevado
LOW
-- ndice de valor mas bajo
LENGTH -- nmero de elementos ( para un vector )
RANGE
-- rango de ndices de un vector
REVERSE_RANGE -- inverso ,,
EVENT
-- evento sobre un objeto
Ver 7.0b, Junio 2008

P 150

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Atributos frecuentemente utilizados en sntesis :


Ejemplos de atributos definidos :
signal DATA : std_logic_vector (15 downto 8);
signal SELECTOR : std_logic_vector(2 to 5);
DATA'high
DATA'low
SELECTOR'high
SELECTOR'low
DATA'right
DATA'left
SELECTOR'right
SELECTOR'left
DATA'length
SELECTOR'length
DATA'range
DATA'reverse_range
SELECTOR'range
SELECTOR'reverse_range
Ver 7.0b, Junio 2008

--------------P 151

=
=
=
=
=
=
=
=
=
=
=
=
=
=

15
8
5
2
8
15
5
2
8
4
range
range
range
range

15 downto 8
8 to 15
2 to 5
5 downto 2
VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Atributos frecuentemente utilizados en sntesis :


Ejemplos de atributos definidos ( cont ) :

signal CK : std_logic;
CK'event

-- evento sobre la seal CK


-- flanco de subida o bajada

CK'event and CK = '1';--flanco de subida en CK


CK'event and CK = '0';--flanco de bajada en CK

Ver 7.0b, Junio 2008

P 152

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Cdigo Genrico

Ver 7.0b, Junio 2008

P 153

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Ver 7.0b, Junio 2008

P 154

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

Cdigo Genrico :

www.mvd-fpga.com

Ancho de bus paramtrico:

VHDL permite de definir dentro de la entidad el ancho de bus


por defecto, ajustable en la instancia del componente dentro
de un mdulo de nivel jerrquico superior.

Valor por defecto especificado dentro de la entidad.


Este valor podr ser cambiado durante la instanciacin del
elemento por un cdigo de nivel jerrquico superior.
Ejemplo de declaracin genrica de port :
___________________________________________________________________________________________

entity CONTADOR is
generic ( M : integer := 8 );
port ( CK, ENA : in std_logic;
CNT :out std_logic_vector( M-1 downto 0));
end CONTADOR;
Ver 7.0b, Junio 2008

P 155

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

Cdigo genrico :

www.mvd-fpga.com

Ejemplo de declaracin genrica de port (cont) :


___________________________________________________________________________________________

library IEEE; use IEEE.STD_LOGIC_1164.all;


use IEEE.STD_LOGIC_UNSIGNED.all;
entity CONTADOR is
generic ( M : integer := 8 );
port ( CK, ENA, RST : in std_logic;
CNT : out std_logic_vector(M-1 downto 0)); -- CNT est une salidas pure
end CONTADOR;
architecture ARCHI of CONTADOR is
signal COUNT : std_logic_vector(M-1 downto 0); begin
process(CK, RST)
begin
-- todos los bits de COUNT son puestos a '0' al reset.
if RST = '1' then COUNT <= (others => '0'); -- ver agregados
elsif CK'event and CK='1' then
if ENA = '1' then COUNT <= COUNT + 1; end if;
end if;
end process;
CNT <= COUNT; -CNT recibe su asignacin fuera del process para evitar
end ARCHI;
-un segundo nivel de Flip-Flops !!!
Ver 7.0b, Junio 2008

P 156

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Cdigo genrico:
Instancia de un elemento genrico:
La instancia ( pareja entidad/arquitectura )
debe estar visible por la herramienta de sntesis al
momento de la compilacin.
El ancho de los bus debe estar definido por
medio de un valor declarado GENERIC" con el fin
de poder ser redefinido durante la instanciacin .
Es por supuesto posible sintetizar por separado
cada elemento de diseo. En este caso, cada
elemento ser sintetizado con sus valores por
defecto.
Ver 7.0b, Junio 2008

P 157

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

Cdigo genrico :

www.mvd-fpga.com

Ejemplo de instanciacin de un componente genrico:


___________________________________________________________________________________________

entity COUNTERS is
generic ( T : integer := 12);
port ( CK, ENA1, ENA2, RESET : in std_logic;
MAX : out std_logic_vector(T-1 downto 0));
end COUNTERS;
architecture ARCHI of COUNTERS is
signal COUNT1, COUNT2 : std_logic_vector(T-1 downto 0);
component CONTADOR
generic ( M : integer );
port ( CK, ENA, RESET : in std_logic;
CNT :out std_logic_vector(M-1 downto 0));
end component;
begin
U1 : CONTADOR generic map ( M => T) port map (
CK => CK, ENA => ENA1, RST => RESET, CNT => COUNT1 );
U2 : CONTADOR generic map ( M => T) port map (
CK => CK, ENA => ENA2, RST => RESET, CNT => COUNT2 );
MAX <= COUNT1 when COUNT1 > COUNT2
else COUNT2;
end ARCHI;
Ver 7.0b, Junio 2008

P 158

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

Cdigo genrico :

www.mvd-fpga.com

AGREGADOS : VHDL permite asignar un valor a un


vector ( BUS) de la forma siguiente :
_________________________________________________________________________________________________

signal
signal
signal
signal
begin

DIV, SIG : STD_LOGIC_VECTOR(7 downto 0);


TRI_ST, B : STD_LOGIC_VECTOR(13 downto 0);
TODO_ZERO : STD_LOGIC_VECTOR(9 downto 0);
TODO_UNO : STD_LOGIC_VECTOR(33 downto 0);

DIV <= SIG when A ='0'


else(3 =>'1', 4 to 7 =>'0', others => 'Z');
TRI_ST <= B when A = '0' else (others => 'Z');
TODO_ZERO <= ( others => '0' );
TODO_UNO <= ( others => '1' );
Ver 7.0b, Junio 2008

P 159

VHDL, muy sencillo...

Sntesis y simulacion para componentes programables

Cdigo genrico : AGREGADOS :

MEDIA VIDEO DISEO


www.mvd-fpga.com

_________________________________________________________________________________________________

DIV <= SIG when A = '0'


else( 3 =>'1', 4 to 7 =>'0', others => 'Z' );

SIG[2:0]

others => 'Z'

3 => '1'

VCC

A
DIV[2:0]

DIV(3)

SIG(3)
A

4 to 7 => '0'
DIV[7:4]

SIG[7:4]

______________________________________________________________________________________________________

TRI_ST <= B when A = '0'


else ( others => 'Z');

TRI_ST[13:0]

______________________________________________________________________________________________________

TODO_ZERO <= ( others => '0' );

TODO_ZERO[9:0]

______________________________________________________________________________________________________

VCC

TODO_UNO <= ( others => '1' );

TODO_UNO[33:0]
Ver 7.0b, Junio 2008

P 160

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

Cdigo genrico :

ARRAYS ( TABLAS )

www.mvd-fpga.com

Es posible definir tablas de objetos en dos


dimensiones.
Ejemplos :
architecture ARCHI of TABLA is
type MEMORIA is array(0 to 15)
of std_logic_vector(7 downto 0);
signal MEM : MEMORIA;
-- 16 bytes de memoria
begin ....
architecture
subtype BYTE
type MEMORIA
signal MEM :
begin ....
Ver 7.0b, Junio 2008

ARCHI of TABLA is
is std_logic_vector(7 downto 0);
is array(0 to 15) of BYTE;-- 16 bytes de RAM
MEMORIA;

P 161

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Cdigo genrico : ARRAYS ( TABLAS )


Implementacin de una tabla memoria con acceso en
escritura y en lectura independientes
( de doble acceso y con escritura sincrnica ) :
library IEEE;

use IEEE.std_logic_1164.all;

entity MYRAM is
generic(DATA : integer := 6;-- Ancho bus de datos
ADR : integer := 4);-- Ancho bus de direcciones
port ( DIN : in std_logic_vector(DATA-1 downto 0);
CK : in std_logic;
ADI, ADO : in integer range 0 to (2**ADR)-1 ;
SALIDA : out std_logic_vector(DATA-1 downto 0));
end MYRAM;

Ver 7.0b, Junio 2008

P 162

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

Cdigo genrico : ARRAYS ( TABLA ) cont

www.mvd-fpga.com

architecture ARCHI of MYRAM is


subtype WORD is std_logic_vector(DATA-1 downto 0);
type MEMORIA is array(0 to (2**ADR)-1) of WORD;
signal MEM : MEMORIA;
begin
process(CK)
begin
if CK='1' and CK'event then
MEM(ADI) <= DIN; -- El elemento apuntado por ADI
end if;
-- recibe el dato DIN.
end process;
BLABLO : for I in 0 to (2**ADR)-1 generate
SALIDA <= MEM(I) when ADO = I else (others => 'Z');
end generate; -- multiplexor de lectura por buffers
-- tri_state
end ARCHI;
Ver 7.0b, Junio 2008

P 163

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

Cdigo genrico : Informaciones complementarias :

www.mvd-fpga.com

Instruccin condicional: IF condicin GENERATE :


Sintaxis :
LABEL : if CONDICION generate
--Instrucciones concurrentes...
end generate;
Las Instrucciones concurrentes no sern tomadas en
consideracin si la condicin " CONDICION " no es
verdadera.
Esta forma de escritura permite pasar los parmetros de
sntesis a travz de la jerarqua, y de hacer variar las
directivas de sntesis segn que la condicin boleana sea
verdadera o no.
( ver archivos CALL_RAM y MEME_TM siguientes).
Ver 7.0b, Junio 2008

P 164

VHDL, muy sencillo...

Sntesis y simulacion para componentes programables

MEDIA VIDEO DISEO

Cdigo genrico : Informaciones complementarias :

www.mvd-fpga.com

Instruccin condicional : IF condicin GENERATE :


Ejemplo operador de rotacin:
entity GENE is
generic(N : integer := 8);
port (DIN : in std_logic_vector(N-1 downto 0);
CK : in std_logic;
QOUT : out std_logic_vector(N-1 downto 0));
end GENE;
architecture ARCHI of GENE is
component FLIP_FLOP port(
D, CK : in std_logic;
Q : out std_logic);
end component;
begin
GENA : for I in QOUT'range generate
GENB : if I = 0
generate
U1 : FLIP_FLOP port map(DIN(N-1), CK, QOUT(I));
end generate;
GENC : if I /= 0 generate
U2 : FLIP_FLOP port map(DIN(I-1), CK, QOUT(I));
end generate;
end generate;
end ARCHI;
P 165
Ver 7.0b, Junio 2008
VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

Notas

www.mvd-fpga.com

.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....

Ver 7.0b, Junio 2008

P 166

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

Notas

www.mvd-fpga.com

.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....

Ver 7.0b, Junio 2008

P 167

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

Notas

www.mvd-fpga.com

.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....

Ver 7.0b, Junio 2008

P 168

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Los sub-programas
Funciones y procedimientos

Ver 7.0b, Junio 2008

P 169

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Ver 7.0b, Junio 2008

P 170

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

Funciones :

www.mvd-fpga.com

Sub-programa pudiendo ser llamado una o varias


veces por el programa principal. Permite organizar
el cdigo separando las partes repetidas.
Una funcin necesita un o mas parmetros de
entrada y regresa un valor.
Ejemplo :
______________________________________________________

function BOOL_TO_BIT ( A : in boolean ) return STD_LOGIC is


begin
if A then return '1';
else return '0';
end if;
end BOOL_TO_BIT;
Ver 7.0b, Junio 2008

P 171

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

Funciones :

www.mvd-fpga.com

Una funcin debe estar declarada antes de ser


utilizada. Ejemplo :
______________________________________________________

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity FUNCION is
port ( ENTRADA : in boolean; B : in STD_LOGIC;
C : out STD_LOGIC);
end FUNCION;
architecture ARCHI of FUNCION is
function BOOL_TO_BIT (A : in boolean) return STD_LOGIC is
begin
if A then return '1';
else return '0'; end if;
end BOOL_TO_BIT;
Declaracin
begin
C <= B and BOOL_TO_BIT(ENTRADA);
end ARCHI;

Llamado

Ver 7.0b, Junio 2008

P 172

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

Funciones :

www.mvd-fpga.com

Las funciones usan el juego de las instrucciones


secuenciales .
Los parmetros (entradas) de la funcin son
enteramente genricos. Ex :
function COSA ( ABUS : in std_logic_vector) return boolean is

Variables locales pueden ser declaradas


Las variables declaradas dentro una funcin son
reinicializadas a cada llamado.

Ver 7.0b, Junio 2008

P 173

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

Funciones :

www.mvd-fpga.com

Las Funciones pueden estar declaradas dentro de la parte


declaratoria de la arquitectura o dentro un package.
Utilizadas para efectuar las conversiones de datos
( Ex : std_logic_vector a integer ), u operacines lgicas y
aritmticas diversas ...
Los operadores " + ", " - " , " = " ... son definidos por
funciones.
Las funciones pueden ser re-definidas (sobrecargadas) con
el fin por ejemplo de ser aplicables a tipos de datos no
previstos inicialmente. Por ejemplo :

El package STD_LOGIC_UNSIGNED re-define los

operadores aritmticos y relacionales para las ser aplicables al


tipo STD_LOGIC_VECTOR.
Ver 7.0b, Junio 2008

P 174

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

Funciones : Ejemplo de sobrecarga de funciones

www.mvd-fpga.com

(operador "+" para sumas entre STD_LOGIC_VECTOR y enteros)

function "+" ( A : std_logic_vector; B : integer)


return std_logic_vector is
variable INT_A : integer range 0 to ((2**(A'high+1))-1);
variable STD_OUT : std_logic_vector(A'range);
begin
INT_A := 0;
for I in A'range loop
if A(I) = '1' then INT_A := INT_A + 2**I; else INT_A := INT_A;
end if; -- este bucle convierte el vector a entero
end loop;
INT_A := INT_A + B; -- suma de 2 enteros
for J in A'reverse_range loop
if INT_A rem 2 = 1 then STD_OUT(J) := '1'; else STD_OUT(J):='0';
end if;
INT_A := INT_A / 2;
end loop; -- conversin del entero INT_A en std_logic_vector
return STD_OUT; -- el valor retornado es un std_logic_vector
end;
Ver 7.0b, Junio 2008

P 175

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

Notas

www.mvd-fpga.com

.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....

Ver 7.0b, Junio 2008

P 176

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

Procedimientos :

www.mvd-fpga.com

Sub-programa puede ser llamado una o varias veces


desde el programa principal.
Un procedimiento puede tener como parmetros
objetos en modo in, out o inout.
( como un "component ", pero la el tamao de los parmetros
siempre es genrico).

Los procedimientos usan el juego de Instrucciones


secuenciales .
Variables locales pueden ser estar declaradas.
Estaran re-iniciadas a cada llamado del
procedimiento.
Ver 7.0b, Junio 2008

P 177

VHDL, muy sencillo...

Sntesis y simulacion para componentes programables

Procedimientos : Ejemplo 1:

MEDIA VIDEO DISEO


www.mvd-fpga.com

_______________________________________________
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity PROCED is
port ( A, B : in STD_LOGIC_VECTOR(9 downto 0);
SALIDA : out STD_LOGIC_VECTOR(9 downto 0));
end PROCED;
architecture ARCHI of PROCEDU is
procedure MIN(signal L, M : in STD_LOGIC_VECTOR;
signal S : out STD_LOGIC_VECTOR) is
begin
if L < M then S <= L;
else S <= M;
end if;
end MIN;
Especificacin de la clase de objeto
begin
(seales y constantes)
MIN(A, B, SALIDA);
end ARCHI;
Ver 7.0b, Junio 2008

Declaracin de procedimiento
Llamado
P 178

VHDL, muy sencillo...

Sntesis y simulacion para componentes programables

Procedimientos : Ejemplo 2 :

MEDIA VIDEO DISEO


www.mvd-fpga.com

Vector de DFF con Reset asincrnico y Load


_______________________________________________

procedure DFFARL_V ( signal DIN : in std_logic_vector;


signal RESET : in std_logic;
signal CLK
: in std_logic;
signal LOAD
: in std_logic;
signal DOUT
: out std_logic_vector) is
begin
if RESET = '1' then
-- RESET asincrnico
for I in DIN'range loop
DOUT(I) <= '0';
end loop;
elsif (CLK'event and CLK = '1') then
if LOAD = '1' then
DOUT <= DIN;
end if ;
end if ;
end DFFARL_V;
Ver 7.0b, Junio 2008

P 179

VHDL, muy sencillo...

Sntesis y simulacion para componentes programables

Procedimiento : Ejemplo 2 ( cont )

MEDIA VIDEO DISEO


www.mvd-fpga.com

Vector de DFF con Reset asincrnico y Load


_______________________________________________

architecture ARCHI of DFF_EJEMPLO is


begin
-- Asignacin de parmetros por posicin
DFFARL_V ( DATA_IN, RST, CK, ENABLE, QOUT);
-- Asignacin de parmetros por asociacin
DFFARL_V ( DIN => DATA_IN,
RESET => RST,
CLK => CK,
LOAD => ENABLE,
DOUT => QOUT );
end ARCHI;
Ver 7.0b, Junio 2008

P 180

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Packages

Ver 7.0b, Junio 2008

P 181

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Ver 7.0b, Junio 2008

P 182

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Packages(s) : Coleccin(es) de sub-programas


( Funciones y/o procedimientos, componentes,
constantes, tipos... )
Permiten de separar une parte del cdigo.
Pueden limitar la portabilidad hacia otras
herramientas.
Estn constituidos por 2 porciones distintas:
PACKAGE : declaracin de los elementos que forman el
package en si mismo.
PACKAGE BODY : cdigo de los diferentes elementos
del package.
Ver 7.0b, Junio 2008

P 183

VHDL, muy sencillo...

Sntesis y simulacion para componentes programables

EJEMPLOs de packages (packages ):

MEDIA VIDEO DISEO


www.mvd-fpga.com

STD_LOGIC_1164 : Contiene en particular las


definiciones relativas a los tipos STD_LOGIC y
STD_LOGIC_VECTOR.

STD_LOGIC_UNSIGNED : Contiene las definiciones de


ciertas operacines relacionales y aritmticas entre
STD_LOGIC_VECTORs , STD_LOGIC_VECTOR y enteros.

packages "usuario" agrupados dentro la biblioteca


" WORK ".
Utilizacin de un package local por las sentencias :
"USE nombre_biblioteca.nombre_package.all;"
Ver 7.0b, Junio 2008

P 184

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

EJEMPLO de package :

www.mvd-fpga.com

library ieee; use ieee.std_logic_1164.all;


package CONVERT is
-- declaracion de los elementos del Package
function TO_INT(A : in std_logic_vector) return integer;
function TO_VEC(A : in integer; B : in std_logic_vector) return std_logic_vector;
end CONVERT;
package body CONVERT is -- descripcion de las Funciones, procedimientos...
function TO_INT(A : in std_logic_vector) return integer is
variable TMP : integer range 0 to (2**(A'high+1)-1); begin
TMP := 0;
for i in A'range loop
if A(i)='1' then TMP := TMP + (2**i); end if; end loop; return TMP;
end TO_INT;
function TO_VEC(A : in integer; B : in std_logic_vector) return std_logic_vector is
variable TMP : std_logic_vector(B'high downto 0);
variable INT : integer; begin INT := A; TMP := (others => '0');
for i in 0 to B'high loop
if (INT rem 2)=1 then TMP(i) := '1';
else
TMP(i) := '0';
end if;
INT := INT / 2;
end loop;
return TMP;
end TO_VEC;
end CONVERT;

Ver 7.0b, Junio 2008

P 185

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

EJEMPLO de utilizacin de un package :

www.mvd-fpga.com

library ieee; use ieee.std_logic_1164.all;


library work; use work.CONVERT.all;
entity COMPA is
port ( C : in std_logic_vector(11 downto 0);
D : in integer range 0 to 8191;
SALIDA : out std_logic_vector(11 downto 0);
VENTANA : out std_logic );
end COMPA;
architecture ARCHI of COMPA is
begin
process(C)
begin
case TO_INT(C) is
when 503 to 4093 => VENTANA <= '1';
when others
=> VENTANA <= '0';
end case;
Parmetro A (entero) de la funcin TO_VEC
end process;
SALIDA <= TO_VEC((TO_INT(C) + D), C );
end ARCHI;
Conversin de C en entero
Ver 7.0b, Junio 2008

P 186

Parmetro B (std_logic_vector)
de la funcin TO_VEC
VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

Creacin de una biblioteca personalizada :

www.mvd-fpga.com

Puede contener 1 o varios packages.


Cada package puede contener :
Las declaraciones de componentes
Las declaraciones de constantes
Las declaraciones de tipos y sub-tipos
Las declaraciones de funciones y
procedimientos
La biblioteca puede igualmente contener
componentes ( parejas entidad/arquitectura ),
genricas o no.
Ver ejemplo en paginas siguientes.
Ver 7.0b, Junio 2008

P 187

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

Notas

www.mvd-fpga.com

.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....

Ver 7.0b, Junio 2008

P 188

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Simulation y modelizacion
en VHDL

Ver 7.0b, Junio 2008

P 189

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Presentacion general
Las construcciones sintetizables pueden ser
utilizadas en simulacion.
En simulacion podremos usar todavis mas
posibilidades del lenguaje.

Ver 7.0b, Junio 2008

P 190

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Ejemplos de construcciones simulables que no pueden


ser usadas en sintesis

SIGNAL_A <= 1, 0 after 100 ns;


-- El tiempo no se sintetisa. En cambio
-- un simulador podra tomar en cuenta
-- las instrucciones after.
------------------------------------------------process(CK)
begin
if CKevent then
CNT <= CNT + 1;
end if;
end process;
-- Este process usa los 2 flancos del reloj (lo cual
-- no se entiende en sintesis
Ver 7.0b, Junio 2008

P 191

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Ver 7.0b, Junio 2008

P 192

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

El Testbench

Ver 7.0b, Junio 2008

P 193

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Que es un Testbench ?

El testbench permite crear un conjunto de simulacion para


nuestro diseo
Permite aplicar patterns a las entradas y capturar resultados

Ver 7.0b, Junio 2008

P 194

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Que es un Testbench ?
Entidad del testbench
Architectura
Del Testbench

Patterns
de
simulacion

Ver 7.0b, Junio 2008

FPGA
simulado

P 195

captura
de
resultados

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Que es un Testbench ?
Entidad del testbench
Architectura
Del Testbench

Patterns
de
simulacion

Otro
componente

FPGA

captura
de
resultados

simulado

Ver 7.0b, Junio 2008

P 196

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

La entidad del testbench :


la entidad del testbench no lleva ports
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity TESTBENCH is
end TESTBENCH;
architecture ARCHI_SIMU of TESTBENCH is

Ver 7.0b, Junio 2008

P 197

VHDL, muy sencillo...

Sntesis y simulacion para componentes programables

La entidad del testbench :

MEDIA VIDEO DISEO


www.mvd-fpga.com

En cambio, sera posible definir genericos. Ejemplo :


entity TESTBENCH is
generic(PERIOD
end TESTBENCH ;

: time

:= 25.0 ns);

Architecture ARCHI_SIMU of TESTBENCH is..


begin
process begin
CLK <= '1';
wait for PERIOD /2;
CLK <= '0';
wait for PERIOD /2;
end process;
...
Ver 7.0b, Junio 2008

P 198

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Acceso en lectura y/o escritura a archivos ASCII


Entidad del testbench

Ficheros
de vectores
de test

Architectura
Del Testbench

FPGA
stimuli

Ver 7.0b, Junio 2008

simulado

P 199

captura

Ficheros
de
rsultado

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Instrucciones utilizables
en simulacion

Ver 7.0b, Junio 2008

P 200

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Ver 7.0b, Junio 2008

Retrasos
Esperas
Bucles
Tipos de datos
Operadores
Acceso a archivos ASCII

P 201

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

Retrasos

AFTER

www.mvd-fpga.com

RST <= 1, 0 after 100ns, 1 after 1000ns, 0


after 1100ns;
-- el timing se indica relativamente al instante 0
DATA <= 01011100, 00110011 after 150ns;
S <= A and B after 25ns;

Pulso < 25ns

A
B
S
25ns
Ver 7.0b, Junio 2008

25ns

P 202

Salida filtrada

VHDL, muy sencillo...

Sntesis y simulacion para componentes programables

Retrasos

TRANSPORT

MEDIA VIDEO DISEO


www.mvd-fpga.com

Permite anular la inercia de After

S <= transport (A and B) after 25ns;

Pulso < 25ns

A
B
S
25ns

Ver 7.0b, Junio 2008

La salida no esta filtrada

25ns

P 203

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Esperas

: WAIT

instruccion secuential
programas)

(se usa en los process y sub-

La instruccion WAIT es incopatible con la lista de sensibilidad


(los dos son exclusivos)
Distintos tipos de WAIT
WAIT UNTIL CONDICION;
WAIT FOR TIEMPO;
WAIT ON NOMBRE_DE_SEAL;
WAIT;

Ver 7.0b, Junio 2008

-- suspende definitivamente la ejecucion


-- del process
P 204

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

WAIT UNTIL (1):

process
begin
wait until CKevent and CK = 1;
if ENABLE = 1 then
ACCUM <= ACCUM + DIN;
end if;
end process;

Ver 7.0b, Junio 2008

P 205

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

WAIT UNTIL (2):

www.mvd-fpga.com

process
begin
wait until (A and B) = 1;
BUS_A <= BUS_B or BUS_C;
wait until (A xor B) = 1;
BUS_A <= BUS_B xor BUS_C;
wait;
end process;

Ver 7.0b, Junio 2008

P 206

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

WAIT FOR :

-- generacion de un reloj
process
begin
CK <= 1;
wait for 50 ns;
CK <= 0;
wait for 50 ns;
end process;
Ver 7.0b, Junio 2008

P 207

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

WAIT ON :

www.mvd-fpga.com

No hay lista de
sensibilidad
IRQ <= TIMER(15);
process
begin
CLEAR_IRQ <= 0;
wait on IRQ;
CLEAR_IRQ <= 1;
wait for 50ns;
end process;

Ver 7.0b, Junio 2008

Esperamos un cambio de
valor en la seal IRQ

P 208

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

WAIT ON :

www.mvd-fpga.com

IRQ <= TIMER(15);


process
begin
CLEAR_IRQ <= 0;
wait on IRQ;
CLEAR_IRQ <= 1;
wait for 50ns;
CLEAR_IRQ <= 0;
wait;
end process;
Ver 7.0b, Junio 2008

Suspende
definitivamente
el process

P 209

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Ver 7.0b, Junio 2008

P 210

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Bucles

Ver 7.0b, Junio 2008

P 211

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

LOOP :

(se usa en los process)

for loop
end loop;
---------------------------

while loop
end loop;
---------------------------

loop exit when


end loop;

Ver 7.0b, Junio 2008

P 212

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

FOR... LOOP :

Largement utilis en synthse logique.


process(CK)
begin
if CKevent and CK = 1
then
BOUCLE : for I in DATARANGE loop
DATA_SWAP(I) <= DATA(DATAhigh - I);
end loop;
end if;
end process;

Ver 7.0b, Junio 2008

P 213

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

WHILE LOOP :

www.mvd-fpga.com

architecture TB of TESTBENCH is
signal DIN : std_logic_vector(7 downto 0) := (others => 0);
---

begin
process
variable I : integer range 0 to 2**DINhigh-1;
begin
I := 0;
NOM_BOUCLE : while (A < B) loop
DIN <= SOURCE + I;
I := I + 1;
wait for 20 ns; -- importante !!!
end loop;
wait;
-- suspension del process end process;
end process;

Ver 7.0b, Junio 2008

P 214

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

LOOP EXIT WHEN :

www.mvd-fpga.com

process
begin
DBUS <= (others => 0);
wait for 20 ns;
NOM_BOUCLE : loop
exit when A > B; -- esperamos esta
-- condicion para salir
DBUS <= DBUS + 1;
wait for 20 ns;
end loop;
wait;
end process;
Ver 7.0b, Junio 2008

P 215

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Ver 7.0b, Junio 2008

P 216

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Acceso a los archivos ASCII

Ver 7.0b, Junio 2008

P 217

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

VHDL permite acceder en lectura y escritura a archivos ASCII


La manipulacion de archivos implica la declaracion de la libreria
STD, y del package TEXTIO.
Este package permite
-Abrir y cerrar un archivo
-Escribir
-Leer
-Buscar la ultima linea de un archivo

Nota : el package TEXTIO no soporta la lectura ni la escritura de


STD_LOGIC o STD_LOGIC-VECTOR (valores U, X, Z).
Solamente soporta los BIT y BIT_VECTOR.
Para uso directo de STD_LOGIC y STD_LOGIC_VECTOR,
delarar el package STD_LOGIC_TEXTIO
Ver 7.0b, Junio 2008

P 218

VHDL, muy sencillo...

MEDIA VIDEO DISEO


www.mvd-fpga.com
Ejemplo de lectura de datos a partir de un archivo :
Sntesis y simulacion para componentes programables

process
file
LISTA
: TEXT;
variable
MY_LINE
: line;
variable
DATA_VAR
: std_logic_vector(31 downto 0);
variable
ADR_VAR
: std_logic_vector(31 downto 0);
begin
file_open(LISTA, "C:\ORIGEN.TXT", read_mode);
-- abre el archivo en lectura
BOUCLE : for I in 0 to 9 loop
readline(LISTA,MY_LINE); -- lee una linea completa
-- en el archivo ORIGEN
read(MY_LINE,DATA_VAR); -- assigna los 32 primeros caracteres de la
-- linea a la variable DATA_VAR
read(MY_LINE,ADR_VAR); -- assigna los 32 caracteres siguientes
-- a la variable ADR_VAR
DATA <= DATA_VAR;
ADR <= ADR_VAR;
wait for 10ns;
end loop;
file_close(LISTA);
wait;
-- cierra el archivo
end process;
Ver 7.0b, Junio 2008

P 219

VHDL, muy sencillo...

Sntesis y simulacion para componentes programables

Ejemplo de escritura en un archivo ASCII :

MEDIA VIDEO DISEO


www.mvd-fpga.com

process
file RESULTADO : TEXT;
variable
MY_LINE
: line;
variable
DAT
: std_logic_vector(31 downto 0);
begin
-- abre el archivo en escritura
file_open(RESULTADO , "C:\RESULTADO.TXT", write_mode);
DAT := DATA;
for I in O to 99 loop
-- escribe los resultados (justificado a la derecha en un
-- campo de 40 caracteres)
write(MY_LINE, DAT, right, 40);
writeline(RESULTADO, MY_LINE);-- escribe la linea en el archivo
wait for 100 ns;
end loop;
file_close(RESULTADO);
-- cierra el archivo
wait;
end process;

Ver 7.0b, Junio 2008

P 220

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Anexo

Ver 7.0b, Junio 2008

P 221

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

www.mvd-fpga.com

Ver 7.0b, Junio 2008

P 222

VHDL, muy sencillo...

MEDIA VIDEO DISEO

Sntesis y simulacion para componentes programables

Palabras reservadas:
abs
access
after
alias
and
architecture
array
assert
attribute
begin
block
body
buffer
bus
Ver 7.0b, Junio 2008

www.mvd-fpga.com

case
component
configuration
constant
disconnect
downto
else
elsif
end
entity
exit

generate
generic
guarded
if
in
inout
is
label
library
linkage
loop

file
for
function
P 223

map
mod
VHDL, muy sencillo...

Sntesis y simulacion para componentes programables

Palabras Reservadas (cont ) :


nand
new
next
nor
not
null
of
on
open
or
others
out

Ver 7.0b, Junio 2008

MEDIA VIDEO DISEO


www.mvd-fpga.com

package
port
procedure
process

then
to
transport
type

range
record
register
rem
report
return

units
until
use

select
severity
signal
subtype
P 224

variable
wait
when
while
with
xor
VHDL, muy sencillo...