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

VHDL

CONCEPTOS GENERALES

HISTORIA DE VHDL
Nace

a partir de un proyecto del


gobierno americano denominado
Circuitos Integrados de Muy Alta
Velocidad (VHSIC).

Durante

el proyecto quedo clara la


necesidad de un Lenguaje para
Descripcin de Hardware (HDL) estndar.

VHDL

fue reconocido como un HDL


estndar por la IEEE y en 1987 se
denomino Standard 1076.

QU ES VHDL?
VHDL

es un lenguaje de descripcin y
modelado diseado para describir (en una
forma que los humanos y las maquinas
puedan leer y entender) la funcionalidad
y la organizacin de sistemas hardware
digitales, placas de circuitos, y
componentes.
VHDL fue desarrollado como un lenguaje
para el modelado y simulacin lgica,
dirigida por eventos de sistemas digitales.
Actualmente se lo utiliza tambin para la
sntesis automtica de circuitos.

PRINCIPALES USOS DE
VHDL
Modelado

Modelado es el desarrollo de un modelo para


simulacin de un circuito o sistema previamente
implementado cuyo comportamiento, por tanto,
se conoce. El objetivo del modelado es la
simulacin.

Sntesis

En el proceso de sntesis, se parte de una


especificacin de entrada con un determinado
nivel de abstraccin, y se llega a una
implementacin mas detallada, menos abstracta.

VENTAJAS DEL USO DE


VHDL
VHDL

permite disear, modelar, y


comprobar un sistema desde un alto
nivel de abstraccin.
Es posible crear circuitos sintetizables,
siguiendo algunas pocas reglas.
Al ser un lenguaje estndar permite
minimizar errores de comunicacin y
problemas de compatibilidad.
Modularidad: VHDL permite dividir un
diseo hardware y su descripcin VHDL
en unidades mas pequeas.

NIVELES DE
ABSTRACCIN
Estructural
Una

forma de describir un modulo


es decir cuales son los submdulos que lo componen.

Los

sub-mdulos se conectan
entre si por medio de seales.

Cada

sub-mdulo puede ser o


bien una primitiva bsica u otra
descripcin estructural.

Descripcin Estructural Full Adder


ARCHITECTURE one OF fullAdder IS
COMPONENT xor2
PORT(e1,e2: IN bit; y OUT bit);
END COMPONENT;
COMPONENT and2
PORT(e1,e2: IN bit; y OUT bit);
END COMPONENT;
COMPONENT or2
PORT(e1,e2: IN bit; y OUT bit);
END COMPONENT;
SIGNAL s1, c1, c2: bit;
BEGIN
U0: xor2 PORT MAP(e1=>A,e2=>B,y=>s1);
U1: xor2 PORT MAP(e1=>s1,e2=>CIN,y=>S);
U2: and2 PORT MAP(e1=>A,e2=>B,y=>c1);
U3: and2 PORT MAP(e1=>CIN,e2=>s1,y=>c2);
U4: or2 PORT MAP(e1=>c1,e2=>c2,y=>COUT);
END one;

NIVELES DE
ABSTRACCIN
Comportamental
Sin

necesidad de conocer la estructura


interna de un circuito es posible
describirlo explicando su funcionalidad.

Inicialmente

la descripcin
comportamental solo se utilizaba en
simulacin.

El

avance de las herramientas de sntesis


ha permitido describir en forma funcional
mdulos cada vez ms complejos.

Descripcin Comportamental Full Adder

ARCHITECTURE one OF fullAdder IS


SIGNAL temp: bit_vector(1 downto
0);
BEGIN
temp <= A + B + CIN;
S <= temp(0);
CIN <= temp(1);
END one;

NIVELES DE
ABSTRACCIN
RTL
Transferencia

a Nivel de Registros.

Es

un nivel de abstraccin intermedio


entre una descripcin estructural y
comportamental.

Permite

la paralelizacin de
instrucciones.

Este

tipo de descripcin se encuentra


mas cercana a una descripcin
estructural.

Descripcin RTL Full


Adder
ARCHITECTURE one OF fullAdder
IS
SIGNAL s1, c1, c2: bit;
BEGIN
s1 <= A xor2 B;
S <= s1 xor CIN;
c1 <= A and B;
c2 <= s1 and CIN;
COUT <= c1 or c2;
END one;

NIVELES DE
ABSTRACCIN
Modelo

Temporal de Eventos Discretos

Una

vez la estructura y el
comportamiento de un mdulo han sido
especificados, es posible simular el
mdulo ejecutando su descripcin
comportamental.

Esto

se hace por medio de la simulacin


del paso del tiempo en pasos discretos.

VHDL

permite crear los test-bench para


simulacin.

EJECUCIN SERIE

Es conocida la facilidad algortmica de


una ejecucin serie, y es por esto por lo
que resulta tan sencillo programar un
sistema monoprocesador.

En algunos casos la ejecucin serie


resulta poco efectiva puesto que no
permite explotar el paralelismo que una
arquitectura puede proveer.

Ejecucin Serie Alto nivel Abstraccin


Pensamiento Humano

EJECUCIN
CONCURRENTE
En

la ejecucin concurrente por su


parte las sentencias, mas que
mandatos o comandos, indican
conexiones o leyes que se
cumplen, por tanto, es como si se
ejecutaran continuamente.
La ejecucin concurrente permite
modelar el paralelismo.

Concurrente Bajo nivel


Abstrac. Hardware

Ej.

PARALELISMO
El

nivel de paralelismo es manejable en


hardware.

Se

puede tener arquitecturas totalmente


paralelas y otras semi-paralelas.

Entre

mas nivel de paralelismo se tenga,


el costo y tamao del hardware
incrementa.

Se

debe tener un compromiso entre


capacidad de procesamiento y
complejidad en hardware.

EJEMPLO PARALELISMO

Y= A1xB1+A2xB2++ANxBN
A1
B1
A2
B2
AN
BN

Implementacin
Serie

X1

X2

Xn

AN
Xn
BN

Implementacin
Paralela

SINCRONIZACIN

Al disear hardware, la sincronizacin de los mdulos es uno


de los puntos ms crticos.

Cada mdulo debe procesar los datos en el momento


indicado.

Se utiliza mdulos de procesamiento acompaados de una


unidad de control.

Proceso 1
Unidad
de
Control

Proceso 2
Proceso N

VHDL
SINTAXIS DEL LENGUAJE

CONSTANTES, VARIABLES Y SEALES

Una constante es un elemento que se


inicializa a un determinado valor y no
puede ser cambiado una vez inicializado,
conservando para siempre su valor.

Declaracin de una constante

constant <name>: <type> := <value>;

Ejemplo :

constant N : INTEGER range 0 to 31 := 25;

constant val : STD_LOGIC_VECTOR(3 downto 0) :=


1010;

CONSTANTES, VARIABLES Y SEALES

Las

variables solo tienen sentido dentro de


un proceso (PROCESS) o un subprograma,
es decir, solo tienen sentido en entornos de
programacin donde las sentencias son
ejecutadas en serie. No tienen significado
fsico.
Declaracin de una variable:

variable <name>: <type> := <value>;

Ejemplo:

variable I : INTEGER range 0 to 56 := 25;

variable val : STD_LOGIC_VECTOR(5 downto 0) := 111010;

CONSTANTES, VARIABLES Y SEALES

Las seales tienen un significado fsico


inmediato y es el de representar conexiones
reales en el circuito.

La seales pueden ser usadas en cualquier


parte del programa o descripcin y son
declaradas siempre en la parte de arquitectura
antes del BEGIN.

Hay tres tipos especiales de seal

Normal : conectan un puerto de salida con uno o


mas puertos de entrada.

Bus: conectan mltiples puertos I/O

Registro: almacenan datos.

CONSTANTES, VARIABLES Y SEALES

Declaracin de una seal

signal <name>: <type> := <value>;

Ejemplos

signal contador : INTEGER := 0;

signal product: STD_LOGIC_VECTOR(7 downto


0) := 00000000

CONSTANTES, VARIABLES Y SEALES

Las variables solo tienen sentido dentro de un


proceso o subprograma. Ejecucin serie.

Las seales se declaran dentro de


arquitecturas, paquetes o bloques
concurrentes. Ejecucin paralela.

Las constantes se pueden declarar en


arquitecturas y procesos.

La variables son elementos abstractos con poco


significado fsico.

CONSTANTES, VARIABLES Y SEALES

Las seales pueden representar


interconexiones, registros, etc. Implicacin
fsica.

Los puertos de entrada se consideran como


seales pero con ciertas restricciones:

A una entrada no se le pueden asignar valores.

Una salida no puede ser asignada a otras salidas


o seales.

<=
Para asignar variables se utiliza :=
Para asignar seales se utiliza

TIPOS DE DATOS

Lgicos

STD_LOGIC

STD_LOGIC_VECTOR

BOOLEAN

--'U','X','0','1','Z','W','L','H','-'
--Natural Range of STD_LOGIC
--True or False

Escalares

INTEGER

--32 or 64 bits

NATURAL

--Integers >= 0

POSITIVE

--Integers > 0

REAL

--Floating-point

TIME

--hr, min, sec, ms, us, ns, ps,

fs

OPERADORES
Aritmticos:
Suma

Resta

Multiplicacin
Divisin

Potenciacin
Valor

**

Absoluto abs()

OPERADORES

Desplazamiento:

Desplazamiento lgico a la izquierda sll.

<signed_sig> sll <shift_amount_in_integer>;

Desplazamiento lgico a la derecha srl.

Desplazamiento aritmtico a la izquierda sla.

Desplazamiento aritmtico a la derecha sra.

Rotacin a la izquierda rol.

Rotacin a la derecha ror.

OPERADORES

Relacionales:

Lgicos:

MENOR QUE <

AND,

MAYOR QUE >

OR,

MENOR O IGUAL QUE


<=

NOT,

NAND,

NOR

XOR

MAYOR O IGUAL QUE


>=

IGUAL QUE =

DIFERENTE QUE /=

Otros:

Concatenacin &

ELEMENTOS
SINTACTICOS
Comentarios:
doble

guin --

Identificadores:
no

sensible a maysculas y minsculas.

Nmeros:
por

defecto en base 10.

otras

bases as:

Binario
Hexa

2#1101110#

6#C9#

ELEMENTOS SINTACTICOS
Carcteres:
entre

comillas simples

Cadenas:
entre

comillas dobles

Cadenas

de bits:

B"11101001",

X"FE".

O"126",

ENTIDAD

La entidad es la parte del programa que


define el modulo. Es decir, define las
entradas y salidas del circuito.
La entidad es la estructura que permite
en VHDL realizar diseos jerrquicos, ya
que un diseo jerrquico es
generalmente una coleccin de
mdulos interconectados entre si.

SINTAXIS ENTIDAD

entity <entity_name> is
generic ( <generic_name> : <type> := <value>;
<other generics>...
);
port ( <port_name> : <mode> <type>;
<other ports>...
);
end <entity_name>;

EJEMPLO ENTIDAD

Definamos la ENTIDAD para un sumador:

entity sumador is
generic ( N : INTEGER := 4
);
port ( A : in STD_LOGIC_VECTOR ( N-1 downto 0);
B : in STD_LOGIC_VECTOR ( N-1 downto 0);
C : out STD_LOGIC_VECTOR ( N-1 downto 0);
);
end sumador;

ARQUITECTURA

En la arquitectura es donde se define el


funcionamiento del modulo definido en la
entidad.
La arquitectura siempre esta referida a una
entidad concreta por lo que no tiene sentido
hacer declaraciones de arquitectura sin
especificar la entidad.
Una entidad puede tener varias arquitecturas,
es en el momento de la simulacin o la sntesis
cuando se especifica que arquitectura concreta
se quiere simular o sintetizar.

SINTAXIS ARQUITECTURA
architecture <arch_name> of <entity_name> is
-- declarative_items (signal declarations,
-- component declarations, etc.)
begin
-- architecture body
end <arch_name>;

EJEMPLO ARQUITECTURA
architecture uno of cont is
signal conteo_aux : STD_LOGIC_VECTOR (4 downto 0);
begin
process (clk,rst)
begin
if (rst = '1) then conteo_aux <= "00000";
elsif (clk'event and clk = '1') then
if (load = '1') then conteo_aux <= ldata;
elsif ( ud= '0') then conteo_aux <= conteo_aux + '1';
else conteo_aux <= conteo_aux - '1';
end if;
end if;
end process;
conteo <= conteo_aux;
end uno;

ESTRUCTURAS DE EJECUCIN
CONCURRENTES

Asignacin Simple

<name> <= <expression>;

Ejemplo: SUMADOR

S <= A + B;

ESTRUCTURAS DE EJECUCIN
CONCURRENTES

Asignacin Condicional: WHENELSE

<name> <= <expression> when <condition>


else

<expression> when <condition> else

<expression>;

Ejemplo: DEMUX

Y0 <= D when sel = 00 else 0;

Y1 <= D when sel = 01 else 0;

Y2 <= D when sel = 10 else 0;

Y3 <= D when sel = 11 else 0;

ESTRUCTURAS DE EJECUCIN
CONCURRENTES

Asignacin Condicional: WITHSELECTWHEN

with <choice_expression> select


<name> <= <expression> when <choices>,

<expression> when <choices>,

<expression> when others;

Ejemplo: MUX

with sel select

Y <= D0 when 00,

D1 when 01,

D2 when 10,

D3 when others;

PROCESOS

Como la programacin concurrente no es la


mas cmoda para la descripcin de ideas,
VHDL tambin permite programacin serie.
En VHDL la programacin serie se define
dentro de bloques indicados con la palabra
clave PROCESS. Por tanto, siempre que en
VHDL se precise de una descripcin en
serie, se deber utilizar un bloque de tipo
PROCESS.
Un mismo modulo de hardware puede
tener varios bloques PROCESS, cada uno
de los cuales equivale a una sentencia
concurrente.

PROCESOS

Internamente la ejecucin de un proceso es


serie, pero es concurrente respecto a otros
procesos u otras instrucciones concurrentes.
La sintaxis de un bloque PROCESS es la
siguiente:
PROC_ID:
process (<lista de sensibilidad>)
<declaraciones>;
begin
<instrucciones serie>;
end process;

PROCESOS

Para poder indicarle al programa


cuando activar o ejecutar un bloque
PROCESS existen dos procedimientos.
Lo normal es utilizar una lista sensible.
Una lista sensible es una lista de
seales, de manera que cuando alguna
de estas seales cambia, trae como
consecuencia la activacin del proceso.

Sentencia de espera WAIT

Es un mecanismo para detener la ejecucin de


un proceso

WAIT suspende la ejecucin del proceso hasta


que se cumpla una condicin o evento
especificado en la misma sentencia.

La sintaxis es la siguiente

WAIT ON lista_sensible UNTIL condicin


FOR tiemeout;

Sentencia condicional:
IF..THEN..ELSE

Es la estructura tpica para realizar una de dos posibles


acciones segn una expresin boolena.

La sintaxis es la siguiente:

IF <condicin> THEN
<sentencias>
ELSIF <condicin> THEN
<sentencias>

ELSE
<sentencias>
END IF;

Sentencia de seleccin: CASE

Es la estructura tpica que permite ejecutar una cosa u


otra dependiendo del valor de una expresin. La sintaxis
es la siguiente:
CASE <expresion> IS
WHEN <caso1> =>
<instrucciones>
WHEN <caso2> =>
<instrucciones>

WHEN OTHERS =>


<instrucciones>
END CASE;

Вам также может понравиться