Professional Documents
Culture Documents
– Generalidades
– Ventajas e inconvenientes de los HDL´s
– Características generales del VHDL
– Modelo del Hw
– Introducción al lenguaje VHDL
Lenguajes de descripción de hardware
(HDLs)
• Estos lenguajes fueron desarrollados para hacer
frente a la creciente complejidad de los diseños.
• Se puede hacer una analogía con los que se pueden
llamar lenguajes de descripción de software:
Lenguajes de descripción de hardware
(HDLs)
• Los HDLs son usados para modelar la arquitectura y
comportamiento de sistemas electrónicos discretos.
• Se utilizan en la fase de diseño
• Necesidad de Simulador lógico
– Herramienta necesaria para reproducir el
comportamiento del sistema modelado
– Permite la verificación del sistema diseñado.
• Actualmente existen herramientas software que
permiten pasar de dichas descripciones a diseños a
nivel de puertas: SÍNTESIS
Lenguajes de descripción de hardware (HDLs).
Síntesis lógica
Síntesis lógica: convierte una descripción de un sistema
digital mediante un HDL en una implementación
tecnologíca.
Descripción HDL: Puertas
library ieee;
use ieee.std_logic_1164.all;
entity puertas is
port ( A, B, C : in std_logic;
Y: out std_logic
); Síntesis
end puertas;
ARCHITECTURE a of puertas is
begin
Y <= (A and B) or C;
end a;
Lenguajes de descripción de hardware (HDLs).
Síntesis lógica
• Sencillez
– Como la descripción se centra más en la
funcionalidad que en la implementación, resulta más
sencillo para una persona comprender qué función
realiza el diseño a partir de una descripción HDL que
a partir de un esquemático de interconexión de
puertas
begin
Y <= (A and B) or C;
end a;
Ventajas del uso de HLDs
• Ahorro de tiempo
– Facilita las correcciones en el diseño debidas a fallos
de diseño o cambio de especificaciones.
– La existencia de herramientas comerciales
automáticas (sintetizadores RTL) que permiten
crear descripciones gate-level a partir de los modelos
a nivel RTL
– Si bien, el diseño final no suela estar tan optimizado
como si lo hubiera realizado un humano, la mayoría
de las veces es necesario sacrificar un mínimo en las
prestaciones, para poder llevar a cabo el proyecto.
Para ello se necesita la disponibilidad de dichas
herramientas, las librerías de síntesis del fabricante y
sus archivos de tecnología.
Ventajas del uso de HLDs
• El lenguaje puede ser usado como un medio
de intercambio entre los fabricantes de
ASICs y los usuarios de herramientas CAD.
– Diferentes vendedores de ASICs pueden suministrar
descripciones HDL de sus componentes a
diseñadores de sistemas. Los usuarios de
herramientas CAD pueden usar esta descripción para
capturar el comportamiento de este diseño a un nivel
de abstracción alto para la simulación funcional.
Además, se están convirtiendo en los lenguajes de
simulación más utilizados por los distintos
vendedores.
Ventajas del uso de HLDs
n1
n2
SI
NO NO
Eventos
?
FIN SI
SIMULACIÓN Ejecutar estamentos
concurrentes
correspondientes al tiempo
de simulación actual
COMPOSICIÓN DE UN DISEÑO VHDL
Paquetes
Fichero VHDL Constantes, tipos de datos,
componentes y subprogramas
utilizados en varios diseños o entidades
Fichero VHDL
Entidades
Interfaces de los
componentes
Arquitecturas
Fichero VHDL Implementación de las
entidades
DECLARACIÓN DE ENTIDAD
entity <identificador> is
[generic (lista_de_genéricos);]
[port (lista_de_puertos);]
{declaraciones}
[begin sentencias]
end [entity] [identificador];
lista de puertos←(identificador{,...}:[modo]indicación_tipo
[:=expresión]) {;...}
Ejemplos:
entity sumador_total is
port (a,b,c: in bit;
s,c: out bit);
end sumador_total;
• Identificadores: dan nombre a los elementos del VHDL. Reglas para formar
un identificador:
- No tienen longitud máxima.
- puede contener caracteres del a ‘A’ a la ‘Z’, de la ‘a’ a la ‘z’, caracteres
numéricos de ‘0’ al ‘9’ y el carácter subrayado ’_’.
- No se diferencia entre mayúsculas y minúsculas (CONTADOR,
contador y ConTadoR son el mismo identificador.)
- Debe empezar por un carácter alfabético, no puede terminar con un
subrayado, ni puede tener dos subrayados seguidos.
- Existen los identificadores extendidos (VHDL93): admiten cualquier
carácter y diferencian mayúsculas de minúsculas si se encuentran
entre dos caracteres ’\’.
- No puede usarse como identificador una palabra reservada
• Delimitadores:
Se utilizan en operaciones y sentencias:
Simples: & ‘ ( ) * + , - . / : ; < = > |
Dobles: => ** := /= >= <= <>
ELEMENTOS LÉXICOS
Números:
Enteros literales (su valor se obtiene directamente de su representación
literal):
45 0 129
el -5 no es un entero literal, es una combinación de not y 5
En coma flotante:
29E2 5e4 12e00
Reales literales:
64.9 0.0 3.14159
En coma flotante
23.87e-2 419.133E12
Caracteres:
Se escriben entre comillas simples: ‘a’, ‘Z’, ‘9’, ‘’’
Cadenas:
Se escriben entre comillas dobles: “Cadena”, “Se
puede escribir cuaquier cosa !”%&/()=$.....”,
“Una cadena dentro de una cadena: “”cadena””.”
“Si tuviesemos que escribir una cadena más larga
que una línea”
& “la podemos concatenar con el carácter &”
ELEMENTOS LÉXICOS
Bits Strings:
•Las constantes son objetos que mantienen su valor inicial , no pudiendo ser
modificadas una vez que se han creado.
•Proporcionan modelos más inteligibles.
•Proporcionan versatilidad: cambiando la asignación de la constante se actualiza en
todo el modelo
declaracion_constante::=
constant identificador{,...}: subtipo [:=expresion ] ;
declaracion_variable::=
[shared]variable identificador{,...}:subtipo [:=expresion];
asignacion_variable::=
[label:] identificador:=expresion;
Signo de igual para la
asignación de variables
variable maximo,mínimo:real;
variable indice1,indice2: integer := 0;
variable inicio:time;
declaracion_señal::=
signal
identificador{,...}:subtipo[tipo_señal][:=expresion ];
declaracion_fichero::=
file identificador{,...}:tipo[[open tipo_acceso] is
“nombre”];
•El VHDL es un lenguaje fuertemente tipado: un objeto solo puede asumir valores
del tipo en que ha sido declarado.
•Incorpora unos tipos predefinidos (incluidos en la biblioteca standard), ejem:
BOOLEAN, BIT, CHARACTER, INTEGER, REAL, TIME, BIT_VECTOR, STRING,
etc.
•Se pueden crear subtipos como subconjuntos de un tipo determinado
•Se pueden declarar nuevos tipos:
declaracion_tipo::=type identificador is definición_tipo;
TIPOS DE DATOS EN VHDL
Tipos de datos escalares:
Son aquellos cuyos valores están formados por una sola unidad indivisible
(enteros, reales, enumerados y físicos)
constant num_bits:integer:=16;
type bit_index is range num_bits-1 downto 0;
TIPOS DE DATOS EN VHDL
Tipos físicos:
•Representan medidas del mundo real.
•Llevan asociados una unidad primaria y el resto se definen como múltiplos de ella.
•Se puede declarar un nuevo tipo:
tipo_físico::=
type identificador is range
expr_simple to|downto expr_simple;
units
identificador;
{identificador=literal_físico;}
end units [identificador};
TIPOS DE DATOS EN VHDL
Tipos físicos:
Predefinido TIME (el femto segundo es la mayor resolución):
Tipos físicos:
Ejemplo:
Tipos enumerados:
Predefinidos:
•El tipo bit representa los circuitos digitales desde un punto de vista abs-
tracto, aunque no recoge todas situaciones que hay que considerar al
modelar un circuito digital real.
•El IEEE introdujo en 1993 el paquete «std_logic_1164», conocido como
paquete de lógica multivaluada.
Vc=1
Pta Transmisión R≈0 Vc=0
Vout=Vinv Vdd Pta Transmisión R≈∞
Vc Vout=Z
Vin=0; Vinv=0
Vin=1; =1 fuerte
i
Vin Vout
v
Corte
Saturado
R pequeña:
I máxima
Vc
Corte
Saturado
R pequeña: X: En un nodo una salida está a 1
I máxima y otra a 0
TIPOS DE DATOS EN VHDL
Lógica multivaluada: Vcc Vin=0
Vcc Trt corte
Vin=1
TrtVout=1 débil
saturado
Vout=0 débil
Vout
Vin
Como este tipo de datos no esta predefinido en VHDL, hay que incluir en el
diseño el paquete std_logic_1164:
library IEEE;
use IEEE.std_logic_1164.all;
Literales sobrecargados
•Existen literales que están incluidos en varios tipos enu-
merados, como por ejemplo el ‘0’ que puede ser un elemento
del tipo character, bit, std_ulogic, etc.
•Normalmente se conoce el tipo por el contexto en el que se
está utilizando el literal.
•Para evitar confusiones se puede utilizar la calificación de
tipos :
character’(‘0’) bit'(‘0’)
std_ulogic’(‘0’)
SUBTIPOS DE DATOS
Se pueden declarar subconjuntos de valores de un determinado tipo: subtipos
declaracion_subtipo::=
subtype identificador is id_tipo
[range expr_simple to|downto expr_simple];
Ejemplos:
subtype DiaMes is integer 1 to 31;
subtype digito is character ‘0’ to ‘9’ ;
variable mes:integer range 1 to 12;-- declaración implícita
Ejemplo:
Vectores:
tipo_vector::=
type identificador is array (rango_discreto {,...}) of
tipo_objeto;
rango_discreto::=
indicacion_discreta_tipo
| expr_simple (to|downto) expr_simple
TIPOS DE DATOS EN VHDL
Vectores unidimensionales:
Ejemplos:
variable salida:byte;
salida(5):=‘0’
TIPOS DE DATOS EN VHDL
Vectores unidimensionales:
Ejemplos:
type modo_contolador is
(inicio,espera,incremento,decremento,error);
type estado_controlador is array (espera to error) of natural;
variable control_ascensor:estado_controlador;
control_ascensor(incremento):=5;
TIPOS DE DATOS EN VHDL
Vectores multidimensionales:
Ejemplos:
agregado::= ([posicion{|...}=>]expresion{,...})
Vectores no restringidos:
Son vectores en los que se especifica el rango cuando se declara un objeto (en
una declaración implícita o con subtype).
Vectores predefinidos :
constant LCD_display_len:positive:=40;
subtype LCD_dato is string (1 to LCD_display_len);
variable contenido_LCD:LCD_dato:=(others=>’ ‘);
type std_ulogic_vector
is array(natural range<>) of std_ulogic;
-- usar library IEEE;use IEEE.std_logic_1164.all;
TIPOS DE DATOS EN VHDL
Registros :
Tipo de datos compuesto formado por elementos de diferentes tipos:
variable inicio,fin:tiempo;
inicio.segundos:=12; -- acceso a un elemento del registro
-- usando agregados
inicio:=(12,7,22);
fin:=(segundos=>45,minutos=>18,horas=>4);
ATRIBUTOS
Es una característica asociada a un elemento del lenguaje (tipos de datos,
señales, procedimientos, entidades,...) que permite extraer información
adicional del mismo.
Identificador’atributo
resistencia’left=0
resistencia’right=1e9
resistencia’low=0
resistencia’high=1e9
resistencia’ascending=true
resistencia’image(2 kohm )=“2000 ohm”
resistencia’value(“5 Mohm”)=5_000_000
Ejemplos:
type indice is range 21 downto 11;
ATRIBUTOS
type nivel_logico is
(desconocido,bajo,alta_impedancia,alto);
indice’left=21
indice’right=11
indice’low=11
indice’high=21
indice’ascending=false
indice’image(14)=“14”
indice’value(“20”)=20
nivel_logico’left=desconocido
nivel_logico’right=alto
nivel_logico’low=desconocido
nivel_logico’high=alto
nivel_logico’ascending=true
nivel_logico’image(alto)=“alto”
nivel_logico’value(“bajo”)=bajo
nivel_logico’pos(desconocido)=0
nivel_logico’val(3)=alto
nivel_logico’succ(deconocido)=bajo --T’succ(alto): error ...
nivel_logico’pred(alta_impedancia)=bajo
ATRIBUTOS
Atributos de VECTORES:
A’left(1)=1 A’low(1)=1
A’right(2)=0 A’high(2)=31
A’range(1) is 1 to 4 A’reverse_range(2) is 0 to 31
A’length(1)=4 A’length(2)=32
A’ascending(1)=true A’ascending(2)=false
A’left(1)≡ A’left
ATRIBUTOS
Atributos definidos por el usuario:
declaracion_atributo::=
attribute identificador:tipo;
En segundo lugar se asocia al elemento y su valor:
especificacion_atributo::=
attribute identificador of
id_elemento:clase_elemento is expresion;
clase_elemento::=
entity | architecture | configuration | package
| procedure | function | type | subtype
| constant | signal | variable | file
| component | label | literal | units
| group
ATRIBUTOS
attribute Num_pin:natural;
attribute codigo:bit_vector;
attribute delay:time;
signal reloj:std_logic;
type operacion is (suma,resta,multiplicacion,division);
retraso:=t_delay+reloj’delay;
variable accion:bit_vector(1 downto 0):=resta’codigo;
EXPRESIONES Y OPERADORES
EXPRESIONES Y OPERADORES
EXPRESIONES Y OPERADORES
Definición de módulo:
a= b*N+(a mod b), con N entero tal que |a mod b| < |b|
signo de (a mod b) = signo de b
Definición de resto: