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

VHDL

Carlos Andrs Luna Vzquez

Leccin 7
Sntesis

ndice

Introduccin
Niveles de abstraccin del modelado con HDL
Estilos descriptivos del modelado con HDL
Ventajas y limitaciones de los HDLs
El lenguaje VHDL

Objetos, tipos de datos y operadores


Unidades bsicas de diseo
Modelos del hardware para simulacin
Bancos de pruebas
Sentencias secuenciales
Sentencias concurrentes
Subprogramas
Conceptos avanzados en VHDL
Sntesis

VHDL Leccin 2.7

Sntesis

EL LENGUAJE VHDL
SNTESIS VHDL

Simulacin y sntesis son procesos de diseo complementarios.


Construyen un modelo VHDL a partir de la especificacin del
comportamiento de un sistema digital.

Simulacin: el modelo imita el comportamiento del circuito fsico.

Sntesis: infiere estructuras hardware para implementar el circuito.

La sntesis se utiliza para obtener una descripcin ms detallada de una


descripcin VHDL ms abstracta con el objetivo de:

El diseador pueda describir circuitos digitales con alto nivel de abstraccin.


El modelo obtenido pueda ser manejado por las herramientas de
implementacin hardware (FPGAs y ASICs).

La sntesis opera sobre 3 tipos de informacin:

El modelo del circuito


Conjunto de componentes bsicos a utilizar para construir el circuito
Conjunto de restricciones del circuito

VHDL Leccin 2.7

Sntesis

EL LENGUAJE VHDL
SNTESIS VHDL

VHDL naci como un lenguaje para la simulacin.

Muy flexible

Muchos estilos de descripcin

Posteriormente aparece la sntesis

VHDL para simulacin

Semntica perfectamente definida

Resultados independientes de la herramienta

VHDL para sntesis: no todo el cdigo VHDL es sintetizable

Automatizar la sntesis implica reducir la flexibilidad

Restricciones sintcticas y semnticas

Diferencias entre simulacin pre y post-sntesis

Cada herramienta impone sus restricciones

Resultados dependientes de la herramienta


VHDL

VHDL Leccin 2.7

Sntesis

VHDL
sintetizable
4

EL LENGUAJE VHDL
SNTESIS VHDL

FASES DEL PROCESO DE SNTESIS


Descripcin
funcional

Nivel funcional

Sntesis de
comportamiento
Arquitectura
RT

Nivel funcional

Sntesis
RT-lgica
Circuito
lgico

Nivel lgico

Emplazamiento
e interconexin

Implementacin

VHDL Leccin 2.7

Retroanotacin

Sntesis

EL LENGUAJE VHDL
SNTESIS VHDL
CUBO DE DISEO

Temporizacin: nivel de detalle sobre el funcionamiento temporal del


circuito:
Lgico: retardo de los componentes de la tecnologa (definido en el
estndar VITAL VHDL Initiative Towards ASIC Libraries y de las
interconexiones.
RT y funcional: retardo de los componentes no conocidos
Tipos de datos: bit (bit, boolean, std_logic), compuestos (bit_vector,
std_logic_vector, positive, natural, unsigned, integer, signed), abstractos
(reales, fsicos, enumerados, etc)
Estilo descriptivo tiene una gran influencia en los resultados

Las herramientas de sntesis actuales procesan descripciones lgicas y RT.

VHDL Leccin 2.7

Sntesis

EL LENGUAJE VHDL
SNTESIS VHDL

RESTRICCIONES SINTCTICAS Y SEMNTICAS

Se usan para asegurar una eficacia mnima en el proceso de sntesis.


Para identificar hardware asociado a un determinado comportamiento hay
que aadir semntica hardware a la descripcin.
Ejemplo: no existe ninguna herramienta en la actualidad que sea capaz de
sintetizar el cdigo de la puerta AND.
process
begin
if x1 =0 then
z<=0;
wait on x1;
elsif x2 =0 then
z<=0;
wait on x2;
else
z<=1;
wait until x1 or x2;
end if;
end process;

x1
x2

En general cada herramienta de sntesis tiene sus propias restricciones


sintcticas lo que dificulta la reutilizacin del cdigo.

VHDL Leccin 2.7

Sntesis

EL LENGUAJE VHDL
SNTESIS VHDL

Clasula after: es ignorada


process (d1, d2)
begin
z<= d1 and d2 after 3 ns;
end process;

Valores de inicializacin: no se aceptan los asignados a objetos en la


definicin.
Puertos:

entity Registro is
port ( Reloj : in std_logic;
Entrada : in std_logic_vector (7 downto 0);
Salida : out std_logic_vector (7 downto 0):=00001111);
end Registro;

Variables: variable contador : std_logic:=0;


Seales:

signal salida : std_logic_vector:=(3 downto 0) :=0011;

El modelo debe poseer un mecanismo de inicializacin hardware externo (seal


de reset)
VHDL Leccin 2.7

Sntesis

EL LENGUAJE VHDL
SNTESIS VHDL

Bucle loop: la construccin ms comnmente soportada por las herramientas


de sntesis para realizar repeticiones es for-loop si el rango de ndices es
esttico y no contiene sentencias wait.
De esta forma en la compilacin se puede inferir el hardware a sintetizar
for n in 3 downto 1 loop
shift_reg(n) <= shift_reg(n-1);
end loop;

shift_reg(3) <= shift_reg(2);


shift_reg(2) <= shift_reg(1);
shift_reg(1) <= shift_reg(0);

Deteccin de flancos: se usan los atributos event y stable


clkevent and clk=1

clkevent and clk=0


not clkstable and clk=0
not clkstable and clk=1
Las expresiones de deteccin de flancos se usan como condiciones pero no como
operandos
process (clk)
if (clkevent and clk=1) then

wait until clkevent and clk=0


wait until clk=0
block (not clkstable and clk=1)
VHDL Leccin 2.7

begin
if(clkevent and clk=0) and ena=0 then
q <= d;
enf if;
end process;
Sntesis

EL LENGUAJE VHDL
SNTESIS VHDL

En sentencias condicionales con expresiones de deteccin de flanco no se permite la


especificacin de acciones para la clasula else.
if (clkevent and clk=1) then

q <=b;
if (clkevent and clk=1) then

q<=a;
else
q<=b;
end if;

q<=a;
end if;

Mltiples sentencias wait en un mismo proceso:


Todos los caminos de control deben tener al menos una sentencia wait
Todas las sentencias wait deben de tener idnticas expresiones de deteccin de flanco
La expresin de la condicin until debe especificar un flanco ascendente o descendente de la seal de
reloj.

process
begin
wait until (clkevent and clk=1);
-- sentencias secuenciales
wait until (clkevent and clk=0);
-- sentencias secuenciales
wait until (clk1event and clk1=1);
-- sentencias secuenciales
wait until clk;
-- sentencias secuenciales
VHDL Leccin 2.7

process
begin
wait until (clkevent and clk=1);
-- sentencias secuenciales
wait until (clkevent and clk=1);
-- sentencias secuenciales
wait until (clkevent and clk=1);
-- sentencias secuenciales
wait until clkevent and clk=1);
-- sentencias secuenciales
Sntesis

10

EL LENGUAJE VHDL
SNTESIS VHDL
TIPO DE DATOS

Escalar:
Enteros (si se aceptan)
signal dato1: integer;
signal dato2: integer range 0 to 255;
type byte is range 0 to 255;
signal entrada : byte;
type entero is range -32768 to 32767;

Se codifican como vectores de bits:


entero 32 bits
byte 8 bits
Si no se va a usar todo el rango del tipo en la declaracin de un
objeto se recomienda acotarlo para simplificar la sntesis
(dato132 bits, dato28 bits)
Rango de valores positivos nmero sin signo
Rango de valores negativos nmero en C2
Reales (no se aceptan, se ignoran)
type nivel_senal is range -10.00 to +10.00;
signal entrada : nivel_senal;
type probabilidad is range 0.0 to 1.0;
signal pro : probabilidad;
VHDL Leccin 2.7

Sntesis

11

EL LENGUAJE VHDL
SNTESIS VHDL

Enumerados (si se aceptan)


type tipo_estados is (reset, inicio, cuenta, paro);
signal estado_actual : tipo_estados;
signal nuevo_estado : tipo_estados;
Se codifican como vectores de bits: a cada valor se le asigna un cdigo.

attribute codificacion : string;


type tipo_estados is (reset, inicio, cuenta, paro);
attribute codificacion of tipo_estados :
type is 00 01 10 11;
Los tipos std_logic y std_ulogic tienen un tratamiento especial. Apropiados para sntesis.

Fsicos (no se aceptan, se ignoran)


type time is range 0 to 1E20
units
fs;
ps = 1000 fs;
ns = 1000 ps;
us = 1000 ns;
ms = 1000 us;
sec = 1000 ms;
min = 60 sec;
hr = 60 min
end units;
VHDL Leccin 2.7

Sntesis

12

EL LENGUAJE VHDL
SNTESIS VHDL

Compuestos
Vectores (si se aceptan)
Vectores multidimensionales
Con ndices de tipo enumerado e ndices negativos
Se recomienda la indexacin descendente (downto)
Rango del vector definido a priori
entity comparador is
port (
A, B : in std_logic_vector (3 downto 0);
EQ : out std_logic);
type nibble is array (3 downto 0) of std_logic;
type Memoria is array (63 downto 0, 7 downto 0) of std_logic;
signal bus : nibble;
signal ram : memoria;
type vector_format is array (positive range < >) of std_logic;
signal bus : vector_format;
Los alias estn soportados
signal vec: std_logic_vector (3 downto 0);
alias mi_bit: std_logic is vec(2);
mi_bit <=0; -- vec(2) <=0;

VHDL Leccin 2.7

Sntesis

13

EL LENGUAJE VHDL
SNTESIS VHDL

Registro (si se aceptan)


type vectores is record
select : std_logic_vector(1 downto 0);
enable : std_logic;
end record;
variable estimulo : vectores;
signal select : std_logic_vector(1 downto 0);
signal enable : std_logic;
select <= estimulo.select;
enable <= estimulo.enable;

Ficheros (no se aceptan)


Su uso implicara la reserva dinmica de recursos
variable val: integer;
type fichero_de_enteros is file of integer;
file fichero_de_enteros is out mi_fichero.dat;

while not endfile (f) loop

end loop;
type palabra is array (15 downto 0) of bit;
type puntero is access palabra;

Acceso (no se aceptan)


Su uso implicara la reserva dinmica de recursos

VHDL Leccin 2.7

Sntesis

14

EL LENGUAJE VHDL
SNTESIS VHDL

FUNCIONES Y OPERADORES

Los sintetizadores permiten el uso de los operadores estndar definidos en


VHDL para los tipos soportados por la herramienta (enteros y derivados).
Si adems la herramienta soporta el estndar de sntesis (IEEE P1076.31996) stos se pueden aplicar a tipos derivados de vectores de bits
(bic_vector, std_logic_vector).
En caso contrario la herramienta suele disponer de paquetes propios en los
que se definen los operandos aritmticos para estos tipos.
Para la portabilidad del cdigo se debe evitar utilizar funciones especficas
de un determinado sintetizador.
Multiplicacin:
Se utilizan mdulos integrados
Los tipos de operandos dependen del sintetizador

Divisin:
No suelen ser soportados
Se imponen restricciones en su uso

Los operadores =, /=, <, >, <= y >= generan comparadores.

VHDL Leccin 2.7

Sntesis

15

EL LENGUAJE VHDL
SNTESIS VHDL

PAQUETES VHDL ESTNDAR IEEE 1076 PARA SNTESIS

El estndar IEEE P1076.3-96 fue aprobado en febrero de 1997.

Pretende definir la sintaxis y semntica de VHDL para la sntesis RTL.

Su objetivo es poder definir diseos cuya funcionalidad sea independiente


del entorno de sntesis.
En el paquete std define los tipos (bit, boolean y bit_vector)
En el paquete std_logic_1164 define (std_logic, std_ulogic, std_logic_vector
y std_ulogic_vector).
Interpretacin de valores lgicos:
Valor lgico 0 o nivel bajo
0 del tipo BIT
False del tipo BOOLEAN
0 del tipo std_ulogic
L aunque el estndar no especifica ninguna interpretacin se trata como un
valor lgico 0.
S<=X nand 0;
S<=X nand false;

VHDL Leccin 2.7

Sntesis

16

EL LENGUAJE VHDL
SNTESIS VHDL

Valor lgico 1 o nivel alto


1 del tipo BIT
True del tipo BOOLEAN
1 del tipo std_ulogic
H aunque el estndar no especifica ninguna interpretacin se trata como un valor lgico 1.

S<=X nand 1;
S<=X nand true;

Valor alta impedancia


Z del std_ulogic: infiere un buffer triestado

z<= a when enable =1 else Z;


z<= a when enable =1 else null;
process (a, enable)
begin
if enable =1
then
z<= not a ;
else
z= Z;
end if;
end process;
VHDL Leccin 2.7

Sntesis

enable

17

EL LENGUAJE VHDL
SNTESIS VHDL

Valores metalgicos
U, X, W y - del tipo std_ulogic
Carecen de sentido en sntesis
1. Si uno de los operandos en una igualdad es un valor metalgico
esttico o un vector en el que uno de los elementos es un valor
metalgico esttico, la herramienta de sntesis interpretar esta
relacin de igualdad como FALSE.
signal B: std_ulogic;
signal A: std_ulogic_vector (3 downto 0);

process (A)
begin
if (A=00-0) then
B<= 1 ;
else
B<= 0;
end if;
end process;
B <= 1 when (A=00-0) else 0;

Equivale a : B<=0;
VHDL Leccin 2.7

Sntesis

18

EL LENGUAJE VHDL
SNTESIS VHDL

2. Si la comparacin es de desigualdad (/=) se evala como TRUE.


process (A)
begin
if (A /=00-0) then
B<= 1 ;
else
B<= 0;
end if;
end process;

B <= 1 when (A/=00-0) else 0;

Equivale a : B<=1;
3. Si en la sentencia case aparece un valor metalgico como una
opcin, o como elemento de una opcin (para el caso de vectores)
el sintetizador debe interpretar que dicha opcin nunca va a
ocurrir.
case select is
when 000 =>
when 001 =>
when 01X =>
when others =>
end case;

VHDL Leccin 2.7

case select is
when 000 =>
when 001 =>
when others =>
end case;

S<= 0 ;
S<= 1 ;
S<= 0 ;
S<= 0 ;

Sntesis

S<= 0 ;
S<= 1 ;
S<= 0 ;

19

EL LENGUAJE VHDL
SNTESIS VHDL

4. Si en la sentencia de asignacin concurrente con seleccin aparece un valor


metalgico como una opcin, o como elemento de una accin (vectores) el
sintetizador debe interpretar que dicha opcin nunca va a ocurrir.
with sel select
S<=0 when 00,
S<=1 when 01
S<=1 when 1X;

with sel select


S<=0 when 00,
S<=1 when 01

5. Cuando en una operacin lgica, aritmtica o de desplazamiento aparece un


valor metalgico en alguno de los elementos de los operandos, y el otro
elemento no es un valor esttico se producir un error.
S<= A and FF ;
if E < 11 then
Z<=0;
else
Z<=1;
end if;

6. En operaciones de concatenacin, conversin de tipos o extensin de signo


la norma no establece ninguna restriccin durante la sntesis.

VHDL Leccin 2.7

Sntesis

20

EL LENGUAJE VHDL
SNTESIS VHDL

PAQUETES ARITMTICOS

Motivo de incompatibilidad entre herramientas de sntesis

Definen operaciones sobre los tipos bit_vector y std_logic_vector.

Definen los tipos signed y unsigned.

El tipo UNSIGNED es la representacin en binario de un nmero natural, estando el bit ms


significativo a la izquierda.

type unsigned is array (natural range <>) of bit;


type unsigned is array (natural range <>) of std_logic;

El tipo SIGNED especifica un nmero entero codificado en C2, con el bit de signo a la
izquierda.

type signed is array (natural range <>) of bit;


type signed is array (natural range <>) of std_logic;

Existen dos paquetes: NUMERIC.BIT (define operaciones sobre bit_vector) y


NUMERIC.STD (define operaciones sobre std_logic_vector).

El paquete NUMERIC.BIT declara las funciones rising_edge y falling_edge, las


funciones correspondientes para el tipo std_ulogic estn definidas en el paquete
NUMERIC.STD.

rising_edge (clk) igual a: clkevent and clk=1


falling_edge (clk) igual a: clkevent and clk=0
VHDL Leccin 2.7

Sntesis

21

EL LENGUAJE VHDL
SNTESIS VHDL

El paquete NUMERIC_STD define la funcin STD_MATCH: permite realizar


comparaciones en las que el valor indifirente - se usa como comodn.

std_match (01LH, 01)=1;


Las funciones de los paquetes requieren que los argumentos vectoriales sean del tipo
unsigned/signed

Se pueden utilizar conversiones tipo cast


process
variable A,B: std_logic_vector (3 downto 0);
variable C: unsigned (4 downto 0);
variable D: signed (4 downto 0);
begin
A:=1100;
B:=0011;
C:= unsigned (A)+unsigned (B);
D:=signed (A) + signed (B);
wait;
end process;

A=12, B=3 C=15 (01111)


A=-4, B=3 D=-1 (11111)

Resumen paquetes:
signed y unsigned
sobre bit_vector
signed y unsigned
sobre std_logic_vector

VHDL Leccin 2.7

numeric_bit
numeric_std
Sntesis

Paquetes estndar
(IEEE 1076.3)
22

EL LENGUAJE VHDL
SNTESIS VHDL

Otros paquetes:

signed y unsigned
sobre std_logic_vector
operaciones unsigned
operaciones signed

std_logic_arith
std_logic_unsigned
std_logic_signed

Paquetes definidos por


Synopsis, la mayora
de herramientas los
soportan

Operadores (IEEE 1076.3)

Estn definidos sobre los tipos signed y unsigned.

El segundo operando de los de desplazamiento debe ser natural.


Aritmticos
abs
+
*
/
rem
mod

VHDL Leccin 2.7

Desplazamiento
sll
srl
rol
ror

Sntesis

Relacionales
>
<
<=
>=
=
/=

Lgicos
not
and
or
nand
nor
xor
xnor

23

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