intro vhdl

74
Capítulo 2: LENGUAJES DE DESCRIPCIÓN DE HARDWARE: VHDL Generalidades Ventajas e inconvenientes de los HDL´s Características generales del VHDL Modelo del Hw Introducción al lenguaje VHDL

Upload: jolmos77

Post on 12-Jun-2015

2.146 views

Category:

Documents


7 download

DESCRIPTION

power point de vhdl, como funciona

TRANSCRIPT

Page 1: Intro Vhdl

Capítulo 2:LENGUAJES DE DESCRIPCIÓN DE HARDWARE:VHDL

– Generalidades– Ventajas e inconvenientes de los HDL´s– Características generales del VHDL– Modelo del Hw– Introducción al lenguaje VHDL

Page 2: Intro Vhdl

• 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)

Page 3: Intro Vhdl

• 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)

Page 4: Intro Vhdl

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.

library ieee;use ieee.std_logic_1164.all;

entity puertas is port ( A, B, C : in std_logic; Y: out std_logic );end puertas;

ARCHITECTURE a of puertas is

begin

Y <= (A and B) or C;end a;

Descripción HDL: Puertas

Síntesis

Page 5: Intro Vhdl

• El hecho de realizar una síntesis lógica obliga a ciertas restricciones en la tarea de realizar las descripciones con HDLs.

• No se pueden utilizar todas las construcciones de los lenguajes, y las que están permitidas hay que utilizarlas adecuadamente.

• Cada uno de los sintetizadores que existen actualmente en el mercado tienen unas restricciones distintas, si bien, son muy parecidas en cada uno de ellos.

Lenguajes de descripción de hardware (HDLs). Síntesis lógica

Page 6: Intro Vhdl

Ventajas del uso de HLDs

• El lenguaje es independiente de la tecnología: – El mismo modelo puede ser sintetizado en librerías

de distintos vendedores.

– Reducción de la dependencia con el fabricante de ASICs, ya que la portabilidad a otra tecnología es mucho más rápida.

– Reutilizar el diseño en componentes tan distintos como ASICs o FPGAs con un esfuerzo mínimo.

Page 7: Intro Vhdl

Ventajas del uso de HLDs

• Soportan tres estilos de descripción básicos:

– DESCRIPCIÓN COMPORTAMENTAL (behavioral)

– DESCRIPCIÓN DE FLUJO DE DATOS (data-flow)

– DESCRIPCIÓN ESTRUCTURAL (estructural)

Un diseño puede ser descrito con una combinación de los tres estilos.

Page 8: Intro Vhdl

Ventajas del uso de HLDs

Se puede verificar la funcionalidad del diseño muy pronto en el proceso de diseño.

La simulación del diseño a tan alto nivel, antes de la implementación a nivel de puertas, permite testar la arquitectura y rectificar decisiones en las primeras fases de diseño, con un esfuerzo mucho menor que si se realizase en fases posteriores.

Page 9: Intro Vhdl

Ventajas del uso de HLDs

• 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;

Page 10: Intro Vhdl

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.

Page 11: Intro Vhdl

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.

Page 12: Intro Vhdl

Ventajas del uso de HLDs

• El lenguaje también puede ser usado como medio de comunicación entre diferentes herramientas CAD y CAE. – Un programa de captura de esquemáticos puede ser

utilizado para generar descripciones HDL del diseño, lo cual puede ser usado como entrada a un simulador.

Page 13: Intro Vhdl

Ventajas del uso de HLDs

• La propia descripción en el lenguaje de alto nivel sirve como especificación del comportamiento del sistema a diseñar (tanto a nivel funcional como las restricciones temporales), y el interface con el resto del sistema.

– Los modelos descritos con estos lenguajes, pueden ser verificados fácilmente y de forma precisa por simuladores definidos en base a estos HDL.

– Además, cumple con un requerimiento muy importante en toda especificación: no es ambiguo. Asimismo sirve como documentación del diseño.

Page 14: Intro Vhdl

Ventajas del uso de HLDs

• Los "Test Bench" pueden ser escritos en el mismo lenguaje que con el que han sido modelados los diseños (HDL). – Esto permite un mejor manejo del modelo, ya que se

puede asociar el modelo a sus estímulos de simulación.

– No limitamos el uso de dichos estímulos a un determinado simulador, pudiendo ser reutilizados dichos estímulos aunque se use un simulador distinto.

– Los retardos de propagación y limitaciones temporales, pueden ser descritos con estos HDL

Page 15: Intro Vhdl

Ventajas del uso de HLDs

• El lenguaje soporta jerarquía;

– Un sistema digital puede ser modelado como un conjunto de componentes interconectados;

– A su vez cada componente puede ser modelado como un conjunto de subcomponentes.

• El lenguaje soporta metodologías de diseño diferentes: top-down, bottom-up, o mixtas.

Page 16: Intro Vhdl

Ventajas del uso de HLDs

• Soporta modelos de tiempos síncronos y asíncronos.

• Posibilidad de implementar distintas técnicas de modelado digital (descripciones de máquinas de estados finitos (FSM), descripciones algorítmicas, redes de Petri, y ecuaciones Booleanas

• El lenguaje es público y "not propietary" (especialmente en el caso del VHDL).

Page 17: Intro Vhdl

Ventajas del uso de HLDs

• Es un estándar ANSI e IEEE; por lo tanto, los modelos descritos en estos lenguajes (VHDL o VERILOG) son totalmente portables.

• No hay limitaciones impuestas por el lenguaje en el tamaño del diseño.

– Los HDL tienen elementos que permiten el diseño a gran escala, de forma fácil; por ejemplo, componentes, funciones, procedimientos, paquetes.

– La capacidad de definir tipos de datos sofisticados, suministra la potencia de describir y simular nuevos diseños a un nivel de abstracción en el cual aún no se barajan detalles de la implementación

Page 18: Intro Vhdl

Ventajas del uso de HLDs

• El uso de genéricos y atributos en los modelos facilitan la labor de backannotation de información proviniente del dominio físico después de haber realizado el "placement and routing".

• Los genéricos y atributos facilitan la descripción de modelos parametrizables. El modelo, a través de los atributos, puede contener información del diseño en sí mismo, no solo de la funcionalidad: por ejemplo, informaciones tales como el área y velocidad.

Page 19: Intro Vhdl

Inconvenientes del uso de HDLs

• Supone un esfuerzo de aprendizaje, ya que prác-ticamente se puede considerar como nueva meto-dología.

• Necesaria la adquisición de nuevas herramientas:

– Simuladores

– Sintetizadores de HDL, teniendo que mantener el resto de las herramientas para otras fases del diseño.

• El uso de estos lenguajes hace que involuntariamente se pierda un poco de control sobre el aspecto físico del diseño, dándole una mayor importancia a la funcio-nalidad de dicho diseño.

Page 20: Intro Vhdl

Historia de VHDL

– Diversos grupos de investigadores empiezan a crear y desarrollar los llamados "lenguajes de descripción de hardware" cada uno con sus peculiaridades, buscando una solución a los problemas que presentaba el diseño de los sistemas complejos.

– Ejemplos:

• IDL desarrollado por IBM ,

• TI - HDL de Texas Instruments,

• ZEUS de General Electric,

• prototipos de universidades

Page 21: Intro Vhdl

LENGUAJES DE DESCRIPCIÓN DE HARDWARE.

•En la actualidad se utilizan fundamentalmente VHDL, Verilog y SystemC . Otro HDL, el UDI/L se utiliza exclusivamente en Japón.

•VHDL (Very High Speed Integrated Circuit Hardware Description Language). Nace como proyecto del Departamento de Defensa (DoD) de EEUU (año 82) para disponer de una herramienta estándar, independiente para la especificación (modelado y/o descripción) y documentación de los sistemas electrónicos. El IEEE lo adopta y estandariza.•Verilog: Sw de la firma Gateway y posteriormente de Cadence. Estándar industrial hasta que apareció el VHDL como estándar IEEE. En 1990 Cadence lo hace público y el IEEE lo estandariza en 1995.•SystemC: es una extensión del C++, que utiliza unas bibliotecas de clase para describir y simular circuitos digitales. Se publicó en 1.999 .

Page 22: Intro Vhdl

Historia de VHDL– Estos lenguajes nunca alcanzaron el nivel de difusión y

consolidación necesarios por motivos distintos.

• los industriales, por ser propiedad de la empresa permanecieron encerrados en ellas y no estuvieron disponibles par su estandarización y mayor difusión,

• los universitarios, perecieron por no disponer de soporte ni mantenimiento adecuado.

• En 1981 el Departamento de Defensa de los Estados Unidos

• Proyecto VHSIC (Very High Speed Integrated Circuit )

• Objetivos:

– rentabilizar las inversiones en hardware haciendo más sencillo su mantenimiento.

– resolver el problema de modificar el hardware diseñado en un proyecto para utilizarlo en otro

Page 23: Intro Vhdl

Historia de VHDL

• VHDL acrónimo de VHSIC Hardware Description Lenguaje

– En 1983, al grupo formado por las empresas Intermetrics, IBM y Texas Instruments se le adjudicó un contrato para desarrollar el VHDL

– En 1985, la versión final del lenguaje bajo contrato gubernamental se dio a conocer : VHDL Version 7.2

– Tras colaboraciones de industrias y universidades en 1987 VHDL se convierte en Standard IEEE 1076-1987 y en 1988 en standard ANSI

– En 1993 fue revisado el standard VHDL – La última revisión se realizó en 2002.

Page 24: Intro Vhdl

VHDL: CARACTERÍSTICAS GENERALES

VHDL: lenguaje orientado a la descripción o modelado de Hw similar a lenguajes de alto nivel de propósito general (ADA en especial): de ellos hereda:

• Concepto de tipo de datos, con posibilidad de definir nuevos tipos → facilita la descripción de circuitos con diversos niveles de abstracción.

•Sentencias de control de flujos (if, for while). Junto con la característica anterior → potencia para desarrollar algoritmos.

•Capacidad de estructurar el código (subprogramas, funciones o procedimiento), permite afrontar algoritmos complejos.

•Posibilidad de utilizar y desarrollar bibliotecas de diseño,

Incorpora conceptos específicos para el modelado del Hw, como concurrencia y ciclo de simulación.

Page 25: Intro Vhdl

MODELO DEL HW

Modelo de estructura: componentes y jerarquía•Permiten describir cualquier sistema digital con diferentes grados de abstracción.

•Un sistema digital (independientemente de su complejidad) estará definido por dos elementos principales:

–Interfaz con el exterior (la entidad o entity), indicará que entradas y salidas (ports) le relacionan con el exterior.

–Descripción de la funcionalidad que realiza el dispositivo (architecture). Para una misma entity pueden existir diversos módulos architerture de estilos descriptivos distintos. Pudiéndose especificar para cada diseño en concreto que implementación de una entidad se utiliza (configuration).

–Se puede utilizar cualquier elemento modelado en VHDL en otro diseño haciendo referencia a él (component) y conectando sus puertos en el nuevo circuito.

Page 26: Intro Vhdl

MODELO DEL HW

Modelo de concurrencia: procesos, señales y eventos.

•El Hw tiene naturaleza concurrente.

•El elemento básico de concurrencia es el proceso (process) que está formado por sentencias secuenciales.

•Los procesos se comunican entre ellos mediante señales (signal).

•Cada proceso tiene un conjunto de señales a las que es sensible, de forma que un cambio en alguna (evento) de ellas hace que se ejecute.

•Las señales tienen asociadas una o varias colas de eventos, pares tiempo–valor (drivers), que definen su comportamiento en el transcurso de una simulación.

Page 27: Intro Vhdl

MODELO DEL HW

Modelo de tiempo: ciclo de simulaciónRetardo delta (δ).

A: 1→0

B=1C=0

Z

n1 n2

T T+δ T+2δ T+3δ ΔT

A

n1

n2

Z

Page 28: Intro Vhdl

MODELO DEL HW

Modelo de tiempo:

ciclo de simulación INICIO SIMULACIÓN

Ejecutar estamentos concurrentes

correspondientes al tiempo de simulación actual

Incrementar retardo delta

(δ)

Transaccio-nes?

Eventos?

Ejecutar estamentos concurrentes

correspondientes al tiempo de simulación actual

Avanzar tiempo de simulación

Eventos en cola?

FINSIMULACIÓN

SI

SI

SI

NO NO

NO

Page 29: Intro Vhdl

Fichero VHDL

Fichero VHDL

Fichero VHDL

Diseño VHDL Fichero VHDL

PaquetesConstantes, tipos de datos,componentes y subprogramasutilizados en varios diseños o entidades

EntidadesInterfaces de los componentes

ArquitecturasImplementación de las entidades

COMPOSICIÓN DE UN DISEÑO VHDL

Page 30: Intro Vhdl

DECLARACIÓN DE ENTIDAD

La entidad modela la interfaz del circuito, indicando sus terminales de entrada y salida, parámetros de diseño, declaraciones de tipos, constantes, etc.

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]) {;...}

modo← in | out | inout | buffer | linkagelista de genéricos← (identificador {,...}:tipo[:=expresión])

{;..}

Page 31: Intro Vhdl

DECLARACIÓN DE ENTIDAD

Ejemplos:

entity sumador_total is port (a,b,c: in bit; s,c: out bit);

end sumador_total;

entity Mux21 is port (a: in bit; b: in bit; canal : in bit:=‘1’; z: out bit);

end Mux21;

entity Mux21 is generic (t_delay:time:=5ns);

port (a, b: in bit; canal : in bit:=‘0’; z: out bit);

end Mux21;

Page 32: Intro Vhdl

DECLARACIÓN DE ARQUITECTURA

•Son las unidades definidas en VHDL para describir el funcionamiento interno de las entidades. Describe un conjunto de operaciones sobre las entradas de la entidad, que determinan el valor de las salidas en cada momento.

•Para una entidad pueden existir varias arquitecturas.

•Pueden modelar el funcionamiento de una entidad según los tres niveles de abstracción vistos anteriormente:

- Algorítmico: descripciones al estilo de Sw de alto nivel, que reflejan la funcionalidad de los módulos .

-Flujo de Datos: descripciones basadas en ecuaciones y expresiones que reflejan el flujo de datos y las dependencias entre datos y operaciones.

-Estructural: se especifican componentes, conexiones y puertos de E/S

-Estilo mixto de los anteriores.

Page 33: Intro Vhdl

DECLARACIÓN DE ARQUITECTURA

architecture identificador of identificador_entidad is {declaraciones}begin {sentencias_concurrentes}end [architecture] [identificador];

entity Mux21 is port(a, b, canal :in bit;

z: out bit);end Mux21;

architecture algoritmico of Mux21 isbegin process (a,b, canal) begin if (canal=‘0’) then z<=a; else z<=b; end if; end process;end algoritmico;

Page 34: Intro Vhdl

DECLARACIÓN DE ARQUITECTURA

entity Mux21 is port(a, b, canal :in bit;

z: out bit);end Mux21;

architecture FlujoDatos of Mux21 is signal canal_n,n1,n2:bit;begin -- operaciones concurrentes canal_n<= not canal after 1ns; n1<=canal_n and a after 2ns; n2<=canal and b after 2ns; z<=n1 or n2 after 2nsend FlujoDatos;

Page 35: Intro Vhdl

DECLARACIÓN DE ARQUITECTURA

entity Mux21 is port(a, b, canal :in bit;

z: out bit);end Mux21;

architecture Estructural of Mux21 is signal canal_n,n1,n2:bit; component INV port (x:in bit;z:out bit); end component; component AND2 port(x,y:in bit; z:out bit); end component; component OR2 port(x,y:in bit; z:out bit); end component; begin U0:INV port map (canal,canal_n); U1:AND2 port map(canal_n,a,n1); U2:AND2 port map(canal,b,n2); U3:OR2 port map(n1,n2,z);end Estructural;

Page 36: Intro Vhdl

ELEMENTOS LEXICOS• Comentarios: cualquier texto que empiece por ‘--’

-- esto sería un comentario

• 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

Correctos: Puerta_and_7_entradas, REloj, salida_2Incorrectos: puerta__and, clock$entrada, 6inputs, sal_Extendidos correctos: \puerta__and\, \clock$entrada\,\6inputs\,\sal_\

Page 37: Intro Vhdl

ELEMENTOS LEXICOS

• Palabras reservadas:

abs, access, after, alias, all, and, architecture, array, assert,

attribute, begin, block, body, buffer, bus, case, component,

configuration, constant, disconnect, downto, else, elsif, end, entity,

exit, file, for, function, generate, generic, group, guarded, if, impure,

in, inertial, inout, is, label, library, linkage, literal, loop, map, mod,

nand, new, next, nor, not, null, of, on, open, or, others, out, package,

port, postponed, procedure, process, pure, range, record, register,

reject, rem, report, return, rol, ror, select, severity, shared, signal,

sla, sll, sra, srl, subtype, then, to, transport, type, unaffected, units,

until, use, variable, wait, when, while, with, xnor, xor

• Delimitadores:

Se utilizan en operaciones y sentencias:

Simples: & ‘ ( ) * + , - . / : ; < = > |

Dobles: => ** := /= >= <= <>

Page 38: Intro Vhdl

ELEMENTOS LÉXICOS

Números:Enteros literales (su valor se obtiene directamente de su representación literal):

45 0 129el -5 no es un entero literal, es una combinación de not

y 5En coma flotante:

29E2 5e4 12e00

Reales literales:64.9 0.0 3.14159

En coma flotante23.87e-2 419.133E12

Representación en otras bases (entre 2 y 16):Enteros

2#11101001# 16#e2f1a# 8#7105#Reales

2#11.1# 16#3e4.a#En coma flotante

2#11#e2 16#4#E2 10#1024#e0

Page 39: Intro Vhdl

ELEMENTOS LÉXICOS

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 &”

Page 40: Intro Vhdl

ELEMENTOS LÉXICOS

Bits Strings:

Secuencia de valores que representan bits (en base 2, 8 o 16):Ejem:

B”100100110” b”110111001111”o”371” O”1346”x”AD1” X”1f”

Page 41: Intro Vhdl

OBJETOS EN VHDL

•Un objeto en VHDL es un elemento que tiene asignado un valor determinado.•Tienen que declararse previamente para ser utilizados.•Hay cuatro clases de objetos: constantes, variables, señales y ficheros.

•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 ] ;

constant PI : real := 3.141592 ;constant CYCLE_TIME : time := 100 ns;constant num_bits : integer := 8*num_bytes;

Page 42: Intro Vhdl

OBJETOS EN VHDL

Las variables pueden cambiar de valor en cualquier momento mediante una sentencia de asignación.

declaracion_variable::= [shared]variable identificador{,...}:subtipo [:=expresion];asignacion_variable::=

[label:] identificador:=expresion;

variable maximo,mínimo:real;variable indice1,indice2: integer := 0;variable inicio:time;

Ejemplos de asignación de variables:indice:=indice+1;inicio:=2ns;

Signo de igual para la asignación de variables

Page 43: Intro Vhdl

OBJETOS EN VHDL•Las señales pueden cambiar de valor en cualquier momento, pero a diferencia de las variables guardan una analogía con el Hw.•Se pueden considerar una abstracción de conexiones físicas o buses.

declaracion_señal::= signal identificador{,...}:subtipo[tipo_señal][:=expresion ];

tipo_señal::= register|bus

asignacion_señal ::= [label]identificador<=[mecanismo_retardo]forma_de_onda;

forma_de_onda::=(expresion [after expr_tmp]){,...}

signal net1,net2: bit;signal enable:integer:=0;

reloj<= ‘1’ after t_pw,’0’ after 2*t_pw;y<= not or_a_b after 5ns;

Signo de asignación para señales

Page 44: Intro Vhdl

OBJETOS EN VHDL•Los ficheros pueden comunicar un diseño con un entrono externo.•Un uso habitual es almacenar la información de los vectores de prueba en una simulación y/o almacenar los resultados de la misma .•En el paquete textio y en la biblioteca standard se definen tipos de datos, operaciones, tipos de acceso etc. para trabajar con ficheros de texto.

declaracion_fichero::= file identificador{,...}:tipo[[open tipo_acceso] is “nombre”];

file vectores_in:bit open read_mode is “datos.in”;file salida:integer open write_mode is “resultados.txt”;

Page 45: Intro Vhdl

TIPOS DE DATOS EN VHDL

•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;

Page 46: Intro Vhdl

TIPOS DE DATOS EN VHDLTipos de datos escalares:Son aquellos cuyos valores están formados por una sola unidad indivisible (enteros, reales, enumerados y físicos)

Tipos enteros y reales:Predefinidos INTEGER comprendido entre -231+1 y 231-1 y REAL comprendido entre -1.0E38 y 1.0E38 con un mínimo de seis dígitos decimales. Estos rangos pueden aumentar en alguna implementación del lenguaje.

Se puede declarar un nuevo tipo:nuevo_tipo::= type identificador is range expr_simple to|downto expr_simple;

type dia is range 1 to 31;variable dia_hoy:dia:=18;

type nota is range 1.0 to 10.0;

constant num_bits:integer:=16;type bit_index is range num_bits-1 downto 0;

Page 47: Intro Vhdl

TIPOS DE DATOS EN VHDLTipos 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};

Page 48: Intro Vhdl

type TIME is range 0 to segúnimplementacion (1E20)units

fs; -- femtosegundops = 1000 fs; -- picosegundons = 1000 ps; -- nanosegundous = 1000 ns; -- microsegundoms = 1000 us; -- milisegundosec = 1000 ms; -- segundomin = 60 sec; -- minutohr = 60 min; -- hora

end units;

variable duracion :time:= 3sec;duración:=duracion*4; -- 12 segundos

TIPOS DE DATOS EN VHDLTipos físicos:

Predefinido TIME (el femto segundo es la mayor resolución):

¡ATENCIÓN!

Page 49: Intro Vhdl

TIPOS DE DATOS EN VHDL

Tipos físicos:

Ejemplo:

type resistencia is range 0 to 1e9 units ohmio; Kohmio =1000 ; Mohmio =1000 Kohmio ; end units resistencia;

Page 50: Intro Vhdl

TIPOS DE DATOS EN VHDLTipos enumerados:•Se indica un conjunto de valores posibles del tipo especificado mediante una lista que contiene todos los valores.•Proporciona gran nivel de abstracción al permitir codificar valores de señales.

•Se puede declarar un nuevo tipo: tipo_enumerado::= type identificador is (identificador|carácter{,...});

type funcion_alu is (sumar,restar,multiplicar,or_exclusiva);variable operacion:funcion_alu;operacion:=restar;

type piso is (‘1’,primero,’2’,segundo);

Page 51: Intro Vhdl

TIPOS DE DATOS EN VHDL

Tipos enumerados:

Predefinidos:

type boolean is (false,true);type bit is (‘0’,’1’);type severity_level is (note,warning,error,failure);type file_open_kind is (bibliografía...);type file_open_status is (bibliografía...);type character is (... '@','A','B','C‘,'D','E‘, 'F',

...'j','k', 'l', 'm', 'n', 'o',...);

Page 52: Intro Vhdl

Lógica multivaluada:

•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.

type std_ulogic is (‘U’, -- No inicializado‘X’, -- desconocido fuerte‘0’, -- cero fuerte‘1’, -- uno fuerte‘Z’, -- alta impedancia‘W’, -- desconocido débil‘L’, -- cero débil‘H’, -- uno débil‘-’); -- indiferente

TIPOS DE DATOS EN VHDL

Estado lógico de los nodos que no han evolucionado desde el comienzo de la simulación

Útil para síntesis

Page 53: Intro Vhdl

TIPOS DE DATOS EN VHDLLógica multivaluada:

Vin

Vdd

Vc

Vout

Vc

i

v

Vc=1Pta Transmisión R≈0Vout=Vinv

Vin=0; Vinv=1 fuerte

SaturadoR pequeña:I máxima

Corte

Vc=1Pta Transmisión R≈0Vout=Vinv

Vin=1; Vinv=0 fuerte

Corte

SaturadoR pequeña:I máxima

Vc=0Pta Transmisión R≈∞Vout=Z

X: En un nodo una salida está a 1 y otra a 0

Page 54: Intro Vhdl

TIPOS DE DATOS EN VHDLLógica multivaluada:

VinVout

Vcc Vin=0Trt corteVout=1 débil

VinVout

Vcc Vin=1Trt saturadoVout=0 débil

W: En un nodo una salida está a L y otra a H

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;

Page 55: Intro Vhdl

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’)

Page 56: Intro Vhdl

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

Subtipos predefinidos en VHDL:subtype natural is integer 0 to entero_mayor;subtype positive is integer 1 to entero_mayor;

Page 57: Intro Vhdl

SUBTIPOS DE DATOSEjemplo:

type entero_corto is range -128 to 127;variable parametro:integer;variable ajuste:entero_corto;...parametro:=parametro+ajuste;-- error

Ejemplo:

subtype entero_corto is integer range -128 to 127;variable parametro:integer;variable ajuste:entero_corto;...parametro:=parametro+ajuste;-- correcto...ajuste:=ajuste+parametro;-- ¡cuidado!

Page 58: Intro Vhdl

TIPOS DE DATOS EN VHDLTipos compuestos:• Consisten en colecciones de datos cuyos elementos pueden ser tratados

individualmente• Formados por elementos del mismo tipo (vectores) o de distinto (registros).• Al declarar un objeto compuesto cada elemento se inicializará por defecto según

las reglas que correspondan a su tipo.

Vectores:tipo_vector::=

type identificador is array (rango_discreto {,...}) of tipo_objeto;

rango_discreto::=indicacion_discreta_tipo | expr_simple (to|downto) expr_simple

Page 59: Intro Vhdl

TIPOS DE DATOS EN VHDLVectores unidimensionales:

Ejemplos:

type byte is array (0 to 7) of bit;type word is array (15 downto 0) of std_ulogic;

variable dato1,dato2: byte;variable codigo:word;dato1:=“11100100”;codigo (15 to 13):=“0Z0”; -- ’array slice’dato2:=dato1;

subtype ocho_bits is integer range 0 to 7;type byte is array (ocho_bits) of bit;

variable salida:byte;salida(5):=‘0’

Page 60: Intro Vhdl

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;

-- otra forma más clara, al no sobrecargar espera,incremento,etc..type estado_controlador is array

(modo_controlador range espera to error) of natural;

variable control_ascensor:estado_controlador;control_ascensor(incremento):=5;

Page 61: Intro Vhdl

TIPOS DE DATOS EN VHDL

Vectores multidimensionales:Ejemplos:

type memoria is array (31 downto 0, 0 to 127) of bit;variable ram,rom:memoria;ram:=rom;rom(15,9):=‘1’;

Agregados:Permiten asignar valores a conjuntos de datos en los vectores:

agregado::= ([posicion{|...}=>]expresion{,...})

type point is array (1 to 3) of real;variable aux:point:=(1.0,2.3,4.5);aux:=(1.9,1.2,1.5);aux:=(1=>5.67,3=>4.9,2=>9.0);aux:=(3|2=>4.5,others=>5.6);

Signo de asignación de agregados

Page 62: Intro Vhdl

TIPOS DE DATOS EN VHDL

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).

type identificador is array (tipo_indice range<>) of tipo_objeto;

type coleccion is array (natural range<>) of integer;

variable datos:coleccion(63 downto 0);

subtype registro is coleccion(0 to 255);variable buffer_entrada,buffer_salida:registro;

Page 63: Intro Vhdl

TIPOS DE DATOS EN VHDL

Vectores predefinidos :

type string is array (positive range<>) of character;

constant LCD_display_len:positive:=40;subtype LCD_dato is string (1 to LCD_display_len);variable contenido_LCD:LCD_dato:=(others=>’ ‘);

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

subtype byte is bit_vector(7 downto 0);variable bus1:bit_vector(0 to 31);

type std_ulogic_vector is array(natural range<>) of

std_ulogic;-- usar library IEEE;use IEEE.std_logic_1164.all;

Page 64: Intro Vhdl

TIPOS DE DATOS EN VHDLRegistros :

Tipo de datos compuesto formado por elementos de diferentes tipos:

type identificador is recordidentificador{,...}:tipo{...}

end record [identificador];

type tiempo is recordsegundos:integer range 0 to 59;minutos:integer range 0 to 59;horas:integer range 0 to 23;

end record;

variable inicio,fin:tiempo;inicio.segundos:=12; -- acceso a un elemento del registro-- usando agregadosinicio:=(12,7,22);fin:=(segundos=>45,minutos=>18,horas=>4);

Page 65: Intro Vhdl

ATRIBUTOSEs 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

Atributos de los tipos escalares:

T'base Tipo base de T.T'left Valor más a la izquierda de T.T'right Valor más a la derecha de T.T'low Valor mínimo de T.T'high Valor máximo de T.T'ascending Verdadero si T riene rango ascendente.T'image(x) String correspondiente al valor x.T'value(s) Valor en T representado por el string s.T'succ(x) Valor de la posición siguiente a x en T.T'pred(x) Valor de la posición anterior a x en T.T'leftof(x) Valor de la posición izquierda a x en T.T'rightof(x) Valor de la posición derecha a x en T.

Page 66: Intro Vhdl

ATRIBUTOSEjemplos:type resistencia is range 0 to 1e9

unitsohm;Kohm =1000 ohm;Mohm=1000 kokm;

end units resistencia;

resistencia’left=0 resistencia’right=1e9 resistencia’low=0 resistencia’high=1e9 resistencia’ascending=trueresistencia’image(2 kohm )=“2000 ohm”resistencia’value(“5 Mohm”)=5_000_000

Page 67: Intro Vhdl

ATRIBUTOSEjemplos:type indice is range 21 downto 11;type nivel_logico is (desconocido,bajo,alta_impedancia,alto);

indice’left=21indice’right=11 indice’low=11 indice’high=21 indice’ascending=falseindice’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=truenivel_logico’image(alto)=“alto”nivel_logico’value(“bajo”)=bajo nivel_logico’pos(desconocido)=0 nivel_logico’val(3)=altonivel_logico’succ(deconocido)=bajo --T’succ(alto): error ...nivel_logico’pred(alta_impedancia)=bajo

Page 68: Intro Vhdl

ATRIBUTOSAtributos de VECTORES:

A'left(n) Valor izquierdo del índice n de A.A'right(n) Valor derecho del índice n de A.A'low(n) Valor mínimo del índice n de A.A'high(n) Valor máximo del índice n de A.A‘range(n) Rango del indice n de A.A‘reverse_range(n) Rango del indice n de A invertido.A‘length(n) Número de valores del rango n de A. A‘ascending(n) Verdadero si el rango del índice de n de A es ascendente.type A is array (1 to 4,31 downto 0) of boolean;

A’left(1)=1 A’low(1)=1A’right(2)=0 A’high(2)=31A’range(1) is 1 to 4 A’reverse_range(2) is 0 to 31A’length(1)=4 A’length(2)=32A’ascending(1)=true A’ascending(2)=false

A’left(1)≡ A’left

Page 69: Intro Vhdl

ATRIBUTOSAtributos definidos por el usuario:

Consiste en asociar nuevos atributos a cualquier elemento del lenguaje:En primer lugar se declara el atributo:

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

Page 70: Intro Vhdl

ATRIBUTOS

attribute Num_pin:natural;attribute codigo:bit_vector;attribute delay:time;

signal reloj:std_logic;type operacion is (suma,resta,multiplicacion,division);

attribute Num_pin of reloj: signal is 14;attribute delay of reloj: signal is 30ns;attribute codigo of suma : literal is “00”;attribute codigo of resta : literal is “01”;attribute codigo of multiplicacion : literal is “10”; attribute codigo of division : literal is “11”;

retraso:=t_delay+reloj’delay;variable accion:bit_vector(1 downto 0):=resta’codigo;

Page 71: Intro Vhdl

EXPRESIONES Y OPERADORES

Page 72: Intro Vhdl

EXPRESIONES Y OPERADORES

Page 73: Intro Vhdl

EXPRESIONES Y OPERADORESDefinició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:

a=(a/b)*b +(a rem b) signo de (a rem b) = signo de a

Page 74: Intro Vhdl

EXPRESIONES Y OPERADORESA B A mod B A rem B0 5 0 01 5 1 12 5 2 23 5 3 34 5 4 45 5 0 00 5 0 0-1 5 4 -1-2 5 3 -2-3 5 2 -3-4 5 1 -4-5 5 0 00 -5 0 01 -5 -4 12 -5 -3 23 -5 -2 34 -5 -1 45 -5 0 00 -5 0 0-1 -5 -1 -1-2 -5 -2 -2-3 -5 -3 -3-4 -5 -4 -4-5 -5 0 0