Documentos de Académico
Documentos de Profesional
Documentos de Cultura
01 VHDL ALuca
01 VHDL ALuca
INTRODUCCION
VHDL es principalmente un
lenguaje para diseo digital.
Actualmente tiene capacidades
muy limitadas en el rea
analgica, pero existen
trabajos para crear una versin
analgica del lenguaje.
El estndar 1076 define un
estndar y su sintaxis, sin
describir ningun estilo para
usarlo en un diseo. Hay otros
estndares que usan, o que
requieren definir un estilo
antes de usar el lenguaje en
ciertas reas.
VENTAJAS
Solo es posible
sintetizar lgicamente
desde un subgrupo del
lenguaje de VHDL.
Cada compaia tiene
su herramienta que
tienen su propio
subgrupo ligeramente
distinto de los dems.
SINTAXIS
CONCURRENTES SECUENCIALES
ocurren en paralelo se ejecutan una despus
de la otra.
FUNCION
Es una rutina que hace una tarea particular.
Cuando el programa pasa el control a una funcin.
Proceso Proceso
Proceso
Mltiples procesos en una arquitectura
architecture A of E is
begin
-- Sentencias Concurrentes
P1: process
begin
-- Sentencias Secuenciales Proceso 1
end process P1;
-- Sentencias Concurrentes
P2: process
begin
-- Sentencias Secuenciales Proceso 2
end process P2;
-- Sentencias Concurrentes
end A;
Ejecucin de procesos
Concurrente: 2 drivers
Cuando estas 2 seales son concurrentes, definen 2
drivers sobre la seal Z.
Lgica combinatoria.
Lgica sincrnica.
Lgica sincrnica con inicializacin asincrnica.
[ etiqueta: ] process
-- declaraciones
Begin
wait until (CK event and CK=1);
End process [etiqueta];
Process
Begin
wait until ( CK event and CK=1 );
COUNT <= COUNT + 1;
End process;
[ etiqueta: ] process ( CK )
-- declaraciones
Begin
if (CK event and CK=1)
then --instrucciones secuenciales.
end if;
End process [etiqueta];
Proceso Sncrono con Inicializacin Asncrona
Process ( CK )
Begin
if ( CK event and CK=1 )
then COUNT <= COUNT + 1;
end if;
End process;
Falta SEL
SEL
MUX: process (A , B)
begin A
if SEL = '1' then
Z <= A;
B
else
Z <= B;
Z
end if;
Las Seales:
Objetos que pueden ser declarados en el interior de
una entidad (ports) o de una arquitectura (seales
internas).
La asignacin de un valor a una seal se hace con un
retardo (infinitesimal).
Variables
Son objetos que pueden ser declarados dentro de un
process (u otras entidades secuenciales).
Ejemplo sobre las seales:
Entity SIG is
port ( A, B, C, CK : in std_logic; S, T: out std_logic );
End SIG;
Architecture ARCHI of SIG is signal TMP : std_logic;
begin
process
begin
wait until CKevent and CK = 1 ;
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;
Ejemplo utilizando una variable:
Entity VAR is
port ( A, B, C, CK : in std_logic; S, T: out std_logic );
End VAR;
Architecture ARCHI of VAR is
begin
process
variable TMP : std_logic;
begin
wait until CKevent and CK = 1 ;
TMP := A or B;
S <= TMP;
TMP := A and C;
T <= TMP;
end process;
End ARCHI;
Instrucciones secunciales: frecuentemente utilizadas.
if CONDITION then
--- Sentencias secuenciales
end if;
if CONDITION then
--- Sentencias secuenciales
else
--- Sentencias secuenciales
end if;
Estructura if elsif.
if CONDITION then
--- Sentencias secuenciales
elsif CONDITION then
--- Sentencias secuenciales
elsif CONDITION then
--- Sentencias secuenciales
.
.
.
else
--- Sentencias secuenciales
end if;
IF-ELSIF
if CONDITION then
El orden de las -- sentencias secuenciales
sentencias en la elsif CONDITION then
estructura if-elsif es muy -- sentencias secuenciales
importante. Ms de una
elsif CONDITION then
condicin puede ser
-- sentencias secuenciales
verdadera, y es la
primera condicin else
verdadera la que provoca -- sentencias secuenciales
que se ejecuten el grupo end if;
de sentencias que le
siguen
Ejemplo de IF-ELSIF
process (A,B,C,X)
Si X tiene el valor 0000, la
begin
condicin X=0000 es
If (X=0000) then
probada primero, entonces a
Z<=A;
Z se le asigna el valor de A.
elsif (X<=0101) then
Z<=B;
else
Z<=C;
end if;
end process;
IF THEN ;[ELSIF THEN];[ELSE]; END IF;
Sintaxis:
Proceso
Concurrentes vs. Secuencial
architecture A of E is
Este modelo puede tener begin
cualquier numero de -- concurrent statements
procesos. P1: process
begin
-- sequential statements
El proceso es visto como end process P1;
una sola sentencia -- concurrent statements
concurrente. P2: process
begin
-- sequential statements
Se puede tener n nmero end process P2;
de sentencias -- concurrent statments
concurrentes y por lo end A;
tanto cualquier nmero
de procesos.
Asignacin de seales en un proceso
Procesos concurrentes: mltiples drivers.
architecture SEQUENTIAL of
MULTIPLE is
Dentro de este ejemplo signal Z, A, B, C, D : std_ulogic;
similar, las dos begin
asignaciones a Z se process(A, B, C, D)
begin
encuentran dentro de Z <= A and B;
un proceso. (Un Z <= C and D;
proceso puede definir end process;
nicamente un driver en end SEQUENTIAL;
una seal)
C
Z
D
ltima asignacin
process (A, B, C, D)
Estas mismas dos
begin sentencias tienen
Z <= A and B;
Z <= C and D;
significado muy distinto,
end process; dependiendo si se
ejecutan dentro o fuera
= de un proceso.
Architecture X of MULTIPLE is
begin
Z <= A and B;
Z <= C and D;
end X;
Llamadas a mltiples procesos?
La asignacin no
es inmediata!
Ejemplo: process(A,B,M)
begin
Y <= A;
M <=B;
Z <=M; En este punto Z
sigue teniendo
end process Ejemplo; valor 0!
Actualizacin de valores
Z no ha sido actualizada!
A
B
T1process: Tiempo que
M tarda en ejecutarse el
Z bloque process
T1process
Al ejecutarse esta
Segunda ejecucin del proceso lnea Z no es
afectada!
Ejemplo: process(A,B,M)
Begin A
Y <= A; B
M <=B; M
Z <=M; Z
end process Ejemplo;
T1process
Actualizacin de valores
A
B
M
Z
T1 T2
process process
Buffer E/S
Definicin del tipo en la herramienta de sntesis
if (EN = 0) then
OUT_PAD <= BUS_OUT;
El uso de la asignacin
else de Z es la que permite a
OUT_PAD <= Z; la herramienta de sntesis
end if;
inferir en el buffer de tres
estados.
Sntesis
EN
EN
CORE_OUT BIDI
CORE_IN
Entrada/Salida con registro
La implementacin es
automtica utilizando un
registro en la celda de
entrada/salida apropiada
D si esta disponible.
Q Debe soportar el uso
Terminal de implcito de enable y
Salida reset sncronos en la
celda.
CLK
Insercin de registros durante MAP
Xilinx en su mayora de
dispositivos permite el uso de
pull-up/down, en las terminales
de entrada/salida.
Requerimentos de ruteo
especiales
XC3000 BUFG
XC5200 BUFG
XC4000E BUFGP,BUFGS
BUFG
Composicin de
elementos.
ENTIDAD
La entidad en VHDL
describe la interfase de
un bloque jerrquico, sin
describir su
comportamiento.
La entidad es equivalente
a un smbolo en un
diseo basado en una
estructura esquemtica.
Es la porcin de cdigo
que permite definir en
particular Entradas y
Salidas
ENTIDAD:
Informaciones Complementarias
Ejemplo:
entity Ejemplo is
port(
A,B:in bit_vector(7 downto 0);
SEL:in bit; Smbolo Ejemplo
Mux_OR:out bit );
end Ejemplo; A[7:0]
B[7:0] MUX_OR
Equivalencia
Sel
Esquemtica
ENTIDAD: Sintaxis de declaracin
entity EJEMPLO is
port(Lista puertos de entrada/Salida comprimiendo:
Nombre_de_seal:modo y tipo.);
end [EJEMPLO];
Porcin de descripcin
del comportamiento del
dispositivo a sintetizar.
La arquitectura describe
el comportamiento de la
entidad.
Esta asociada a una
entidad
(dentro del mismo
fichero)
Posee una parte
declaratoria y una
parte operatoria.
Entidad y Arquitectura
Declaraciones legales 1 2 3 4
signal Z_BUS: bit_vector (3 downto 0) Signal
signal C_BUS: bit_vector (1 to 4) C_BUS
Declaraciones ilegales
signal Z_BUS: bit_vector (0 downto 3) 3 2 1 0
Signal
signal C_BUS: bit_vector (3 to 0)
Z_BUS
bit string literal.
VDD
0 1
?
c Output
c
1
input
0
Compuerta inversora NMOS Esttica
VDD VDD
RONP
U
Output=Vdd ROFFP H
=H
Input=L ROFFPD + RONP
ROFFPD U
VDD
RONP
U
Output=Vdd RONP L
D =L
Input=H RONPD + RONP
RONP U
D
Compuerta inversora NMOS Esttica
0 1
1 VDD
c Output
c
input
OBJETOS MANIPULABLES
Por ejemplo:
Ejemplo:
signal vcc: bit: 1;
signal suma: bit_vector: (3 downto 0);
Seales
Ejemplos:
signal count: integer range 1 to 50; (el valor inicial ser
1)
signal GROUND: BIT:='0';
signal YS_BUS std_logic_vector (7 downto 0);
port (B,A: in integer range 0 to 9);
signal bogus: bit_vector; (Errnea, no hay dimensin)
Driver de seal
ARCHITECTURE t1 OF d1 IS
BEGIN
a <= b AFTER 10 ns ;
a <= c AFTER 10 ns ;
END t1;
Funcin de resolucin
Ejemplos
Ejemplos:
puertoa: in bit;
puertob: in bit_vector(0 to 7);
puertoc: out bit_vector(3 downto 0);
puertod: buffer bit;
puertoe:inout std_logic;
Modo de Puerto
in
Un puerto es de modo in si la informacin correspondiente al mismo, entra a la entidad y se suele
usar para relojes, entradas de control (como las tpicas load, reset y enable), y para datos de
entrada unidireccionales.
out
Un puerto es de modo out si la informacin fluye hacia fuera de la entidad.
Este modo no permite realimentacin ya que al declarar un puerto como out estamos indicando al
compilador que el estado lgico en el que se encuentra no es leble.
buffer
Este modo es similar al modo out, pero adems, permite la realimentacin y no es bidireccional,
y solo puede ser conectado directamente a una seal interna, o a un puerto de modo buffer de
otra entidad. Una aplicacin muy comn de este modo es la de salida de un contador, ya que
debemos saber la salida en el momento actual para determinar la salida en el momento
siguiente.
inout
Es usado para seales bidireccionales, es decir, si necesitamos que por el mismo puerto fluya
informacin tanto hacia dentro como hacia afuera de la entidad. Este modo permite la
realimentacin interna y puede reemplazar a cualquiera de los modos anteriores, pudindose
usar este modo para todos los puertos.
Tipos Nativos para VHDL
boolean
Puede tomar dos valores: verdadero/true o falso/false. Un ejemplo tpico es la salida de un comparador
que da verdadero si los nmeros comparados son iguales y falso si no lo son
bit
Puede tomar dos valores: 0 1 ( o tambin "low" o "high", segn se prefiera). Es el tipo ms usado
de los nativos
bit_vector
Es un vector de bits. Debemos tener cuidado al definir el peso de los bits que lo integran, ya que
segn pongamos la palabra reservada downto o to estaremos diciendo que el bit ms significativo es
el nmero ms alto o el ms bajo del vector, respectivamente..
integer
Para mantenerr nmeros enteros. Hay que advertir que el uso de enteros consume muchos recursos
del dispositivo de lgica programable, siempre y cuando sea sintetizable, debido a que est
prcticamente creado para la simulacin.
Definir un modelo de comportamiento sintetizable (ARCHITECTURE)
Usando el juego de instrucciones soportado por las herramientas de sntesis
Begin
End archpro;
Component xnor2
Port (e1,e2:in bit; y:out bit);
End component;
Component and4
Port (e1,e2,e3,e4:in bit; y:out bit);
End component;
begin
u0: xnor2 port map (a(0),b(0),x(0));
u1: xnor2 port map (a(1),b(1),x(1));
u2: xnor2 port map (a(2),b(2),x(2));
u3: xnor2 port map (a(3),b(3),x(3));
u4: and4 port map (x(0),x(1),x(2),x(3),igual);
end struct;
Estilo de Escritura RTL (Register Transfer Level)
type id is definicin_tipo;
Ejemplos
Uso
Ejemplo:
Entity HALFADD is
port (A,B : in bit;
SUM, CARRY : out bit);
end HALFADD;
Tipos predefinidos
Escalares
Enumerados
BOOLEAN,BIT,CHARACTER
Enteros
INTEGER
Fsicos
TIME
Flotantes
REAL
Compuestos
Arrays
STRING,BIT_VECTOR
Otros
Puntero
ACCESS
Archivos
FILE
TIPO BOOLEAN
TRUE
FALSO
A
b
x
TIPO INTEGER
Un tipo integer es un dato cuyo contenido es un
valor numerico entero que esta dentro del siguiente rango :
2,147,483,647 a +2,147,483,647.
Ejemplos
+1
682
-139
+239
Ejemplos
error en sincronia
Hola Mundo
TIPO BIT_VECTOR
"0101_1001"
x"00AF"
Ejemplo:
s
i
g
n
a
l
A
std_logic para drivers mltiples
Z<= A; RES_Z<= A;
Z<= B; RES_Z<= B;
Clusulas library y use
entity MVLS is
port (A,B: in std_ulogic;
Z: out std_ulogic);
end MVLS;
OPERADORES LOGICOS
Pueden igualmente
operar sobre
STD_LOGIC_VECTOR
utilizando los paquetes
STD_LOGIC_UNSIGNED
y STD_LOGIC_ARITH.
OPERADORES DE DESPLAZAMIENTO
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;
end ARCHI;
Ejecucin en paralelo orden independiente
X <= A + B;
Z <= C + X;
Z <= C + X;
X <= A + B;
Asignacin concurrente
Los diseos esquemticos son usados para representar
hardware, por lo que son concurrentes por naturaleza.
X <= A + B;
Z <= C + X;
Z <= C + X;
X <= A + B;
A
B +
C + Z
Asignacin Concurrente
En Software;
Registro X Registro X
+
No para Hardware
Siendo una sentencia concurrente, esta misma lnea de
cdigo est describiendo un sumador, sin registros de
almacenamiento implcitos.
X <= x + y;
En Hardware;
x y
+
x
Instrucciones secuenciales
entity CONCURRENT is
port (A, B, C : in bit; S, T : out bit);
end CONCURRENT;
architecture ARCHI of CONCURRENT is
begin
S <= A when C = 1 else B;
T <= B xor C;
end ARCHI;
Ejemplo
entity CONCURRENT is
port (A, B, C : in bit; S, T : out bit);
end CONCURRENT;
architecture ARCHI of CONCURRENT is
Begin
if (c = 1) then S <= A
else S <= B;
T <= B xor C;
end ARCHI;
Ejemplo
Entity CONCURRENT is
port (A, B, C : in bit; S, T : out bit);
end CONCURRENT;
architecture ARCHI of CONCURRENT is
begin
S <= A when C = 1 else B;
T <= not B;
end ARCHI;
Las dos instrucciones (o asignaciones) son
concurrentes. El orden de escritura no afecta los
resultados.
Estas instrucciones generan:
A
S B T
B
C
Ejemplo
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;
B S
A
Entity is
port (A, B : in std_logic_vector(15 downto 0);
C : in std_logic;
S : out std_logic_vector(15 downto o));
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]
Asignacin de seales por seleccin.
with - select
Ejemplo:
A
B S
C
D B T
SEL[1:0
]
Ciclos con:
for - in to - generate
Sintaxis:
La configuracin es como
una lista de partes,
especificando cual
arquitectura debe ser
usada para cada entidad
del diseo.
Permitir una
configuracin por default
permite que el cdigo sea
ms portable.
CONFIGURACION
Es el enlace entre cada
nivel de la jerarqua, y la
especificacin de cual
arquitectura es la que
debe ser usada
COMPILACION
Despus de que se ha
escrito el cdigo de
VHDL en un archivo de
texto, el cdigo es
analizado para
determinar si tiene
errores de sintaxis, y se
crea un archivo binario.
Este proceso es realizado
por unas de las
herramientas para
compilacin y por otras
herramientas para
anlisis.
MAPEO DE BIBLIOTECAS
Las herramientas de
simulacin y sntesis de
VHDL acceden a un
archivo que tiene un
mapa de los nombres de
las bibliotecas de VHDL
con los directorios fsicos
en la computadora.
Actualizacin de la
Ejecucin del proceso
seal
Proceso puesto en la cola
Cuando una seal es actualizada en un punto especfico
del tiempo de simulacin, todos los procesos que son
sensitivos a esa seal son puestos en una cola de
procesos en ejecucin.
Instruccin: M <= B;
Proceso puesto
en la cola
B actualizada
Actualizacin de la
Ejecucin del proceso
seal
Una cola de seales actualizadas
Las seales que son asignadas en cada
proceso no son actualizadas
inmediatamente despus de que el proceso
se suspende, son puestas en una cola de
seales actualizadas.
Las seales son actualizadas cuando
todos los procesos han sido ejecutados.
CicloComoDelta
resultado de la actualizacin de las seales, otros procesos
pueden ser ejecutados en la cola de procesos en ejecucin.
Ejemplo: process(A,B,M)
Begin
Y <= A;
M <=B;
Z <=M;
end process Ejemplo;
Tiempo de simulacin
La clusula after
La asignacin de una seal es colocada en
una cola de seales actualizadas en un
tiempo en el futuro, en lugar del tiempo actual
5 ns
Tiempo de simulacin
La clusula wait for
Z <= A;
Z puesta en esta cola
wait for 5 ns;
5 ns
Tiempo de simulacin