Documentos de Académico
Documentos de Profesional
Documentos de Cultura
01 VHDL ALuca
01 VHDL ALuca
INTRODUCCION
VHDL es principalmente un
lenguaje para diseño digital.
Actualmente tiene capacidades
muy limitadas en el área
analógica, pero existen
trabajos para crear una versión
analógica del lenguaje.
El estándar 1076 define un
estándar y su sintaxis, sin
describir ningun “estilo” para
usarlo en un diseño. Hay otros
estándares que usan, o que
requieren definir un “estilo”
antes de usar el lenguaje en
ciertas áreas.
VENTAJAS
Solo es posible
sintetizar lógicamente
desde un subgrupo del
lenguaje de VHDL.
Cada compañia tiene
su herramienta que
tienen su propio
subgrupo ligeramente
distinto de los demás.
SINTAXIS
CONCURRENTES SECUENCIALES
ocurren en paralelo se ejecutan una después
de la otra.
FUNCION
Es una rutina que hace una tarea particular.
Cuando el programa pasa el control a una función.
Proceso Proceso
Proceso
Múltiples 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;
Ejecución de procesos
Concurrente: 2 drivers
Cuando estas 2 señales son concurrentes, definen 2
drivers sobre la señal Z.
Lógica combinatoria.
Lógica sincrónica.
Lógica sincrónica con inicialización asincrónica.
[ 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 Síncrono con Inicialización Asíncrona
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 Señales:
•Objetos que pueden ser declarados en el interior de
una entidad (ports) o de una arquitectura (señales
internas).
•La asignación de un valor a una señal se hace con un
retardo (infinitesimal).
•Variables
•Son objetos que pueden ser declarados dentro de un
process (u otras entidades secuenciales).
Ejemplo sobre las señales:
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 CK’event and CK = ‘1’ ;
TMP <= A or B; -- Esta línea será ignorada
S <= TMP;
TMP <= A and C; -- anula la asignación precedente
T <= TMP; -- sobre la señal 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 CK’event and CK = ‘1’ ;
TMP := A or B;
S <= TMP;
TMP := A and C;
T <= TMP;
end process;
End ARCHI;
Instrucciones secuénciales: 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. Más de una
elsif CONDITION then
condición puede ser
-- sentencias secuenciales
verdadera, y es la
primera condición 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
condición 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 número end process P2;
de sentencias -- concurrent statments
concurrentes y por lo end A;
tanto cualquier número
de procesos.
Asignación de señales en un proceso
Procesos concurrentes: múltiples 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 señal)
C
Z
D
Última asignación
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 múltiples procesos?
La asignación 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!
Actualización 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 ejecución del proceso línea Z no es
afectada!
Ejemplo: process(A,B,M)
Begin A
Y <= A; B
M <=B; M
Z <=M; Z
end process Ejemplo;
T1process
Actualización de valores
A
B
M
Z
T1 T2
process process
Buffer E/S
Definición del tipo en la herramienta de síntesis
EN
EN
CORE_OUT BIDI
CORE_IN
Entrada/Salida con registro
La implementación es
automática utilizando un
registro en la celda de
entrada/salida apropiada
D si esta disponible.
Q Debe soportar el uso
Terminal de implícito de enable y
Salida reset síncronos en la
celda.
CLK
Inserción de registros durante MAP
Xilinx en su mayoría 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
Composición de
elementos.
ENTIDAD
La entidad en VHDL
describe la interfase de
un bloque jerárquico, sin
describir su
comportamiento.
La entidad es equivalente
a un “símbolo” en un
diseño basado en una
estructura esquemática.
Es la porción de código
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; Símbolo Ejemplo
Mux_OR:out bit );
end Ejemplo; A[7:0]
B[7:0] MUX_OR
Equivalencia
Sel
Esquemática
ENTIDAD: Sintaxis de declaración
entity EJEMPLO is
port(Lista puertos de entrada/Salida comprimiendo:
Nombre_de_señal:modo y tipo.);
end [EJEMPLO];
Porción de descripción
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 Estática
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 Estática
0 1
1 VDD
c Output
c
input
OBJETOS MANIPULABLES
Por ejemplo:
Ejemplo:
signal vcc: bit: ´1´;
signal suma: bit_vector: (3 downto 0);
Señales
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; (Errónea, no hay dimensión)
Driver de señal
ARCHITECTURE t1 OF d1 IS
BEGIN
a <= b AFTER 10 ns ;
a <= c AFTER 10 ns ;
END t1;
Función de resolución
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 información correspondiente al mismo, entra a la entidad y se suele
usar para relojes, entradas de control (como las típicas load, reset y enable), y para datos de
entrada unidireccionales.
out
Un puerto es de modo out si la información fluye hacia fuera de la entidad.
Este modo no permite realimentación ya que al declarar un puerto como out estamos indicando al
compilador que el estado lógico en el que se encuentra no es leíble.
buffer
Este modo es similar al modo out, pero además, permite la realimentación y no es bidireccional,
y solo puede ser conectado directamente a una señal interna, o a un puerto de modo buffer de
otra entidad. Una aplicación muy común 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 señales bidireccionales, es decir, si necesitamos que por el mismo puerto fluya
información tanto hacia dentro como hacia afuera de la entidad. Este modo permite la
realimentación interna y puede reemplazar a cualquiera de los modos anteriores, pudiéndose
usar este modo para todos los puertos.
Tipos Nativos para VHDL
boolean
Puede tomar dos valores: verdadero/true o falso/false. Un ejemplo típico es la salida de un comparador
que da verdadero si los números comparados son iguales y falso si no lo son
bit
Puede tomar dos valores: 0 ó 1 ( o también "low" o "high", según se prefiera). Es el tipo más 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
según pongamos la palabra reservada downto o to estaremos diciendo que el bit más significativo es
el número más alto o el más bajo del vector, respectivamente..
integer
Para mantenerr números enteros. Hay que advertir que el uso de enteros consume muchos recursos
del dispositivo de lógica programable, siempre y cuando sea sintetizable, debido a que está
prácticamente creado para la simulación.
• Definir un modelo de comportamiento sintetizable (ARCHITECTURE)
Usando el juego de instrucciones soportado por las herramientas de síntesis
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 definiciòn_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
Físicos
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 múltiples
Z<= A; RES_Z<= A;
Z<= B; RES_Z<= B;
Cláusulas 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;
Ejecución en paralelo orden independiente
X <= A + B;
Z <= C + X;
Z <= C + X;
X <= A + B;
Asignación concurrente
Los diseños esquemáticos 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
Asignación Concurrente
En Software;
Registro X Registro X
+
No para Hardware
Siendo una sentencia concurrente, esta misma línea de
código está describiendo un sumador, sin registros de
almacenamiento implícitos.
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]
Asignación de señales por selección.
with - select
Ejemplo:
A
B S
C
D B T
SEL[1:0
]
Ciclos con:
for - in – to - generate
Sintaxis:
La configuración es como
una lista de partes,
especificando cual
arquitectura debe ser
usada para cada entidad
del diseño.
Permitir una
configuración por default
permite que el código sea
más portable.
CONFIGURACION
Es el enlace entre cada
nivel de la jerarquía, y la
especificación de cual
arquitectura es la que
debe ser usada
COMPILACION
Después de que se ha
escrito el código de
VHDL en un archivo de
texto, el código 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
compilación y por otras
herramientas para
análisis.
MAPEO DE BIBLIOTECAS
Las herramientas de
simulación y síntesis de
VHDL acceden a un
archivo que tiene un
mapa de los nombres de
las bibliotecas de VHDL
con los directorios físicos
en la computadora.
Actualización de la
Ejecución del proceso
señal
Proceso puesto en la cola
Cuando una señal es actualizada en un punto específico
del tiempo de simulación, todos los procesos que son
sensitivos a esa señal son puestos en una cola de
procesos en ejecución.
Instrucción: M <= B;
Proceso puesto
en la cola
B actualizada
Actualización de la
Ejecución del proceso
señal
Una cola de señales actualizadas
Las señales que son asignadas en cada
proceso no son actualizadas
inmediatamente después de que el proceso
se suspende, son puestas en una cola de
señales actualizadas.
Las señales son actualizadas cuando
todos los procesos han sido ejecutados.
CicloComoDelta
resultado de la actualización de las señales, otros procesos
pueden ser ejecutados en la cola de procesos en ejecución.
Ejemplo: process(A,B,M)
Begin
Y <= A;
M <=B;
Z <=M;
end process Ejemplo;
Tiempo de simulación
La cláusula “after”
La asignación de una señal es colocada en
una cola de “señales actualizadas” en un
tiempo en el futuro, en lugar del tiempo actual
5 ns
Tiempo de simulación
La cláusula “wait for”
Z <= A;
Z puesta en esta cola
wait for 5 ns;
5 ns
Tiempo de simulación