Professional Documents
Culture Documents
Generalidades Ventajas e inconvenientes de los HDLs Caractersticas generales del VHDL Modelo del Hw Introduccin al lenguaje VHDL
Los HDLs son usados para modelar la arquitectura y comportamiento de sistemas electrnicos discretos. Se utilizan en la fase de diseo Necesidad de Simulador lgico
Herramienta necesaria para reproducir el comportamiento del sistema modelado Permite la verificacin del sistema diseado.
Actualmente existen herramientas software que permiten pasar de dichas descripciones a diseos a nivel de puertas: SNTESIS
Puertas
Sntesis
El hecho de realizar una sntesis lgica 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 estn 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.
El
Soportan
DESCRIPCIN COMPORTAMENTAL (behavioral) DESCRIPCIN DE FLUJO DE DATOS (data-flow) DESCRIPCIN ESTRUCTURAL (estructural)
Un diseo puede ser descrito con una combinacin de los tres estilos.
Como la descripcin se centra ms en la funcionalidad que en la implementacin, resulta ms sencillo para una persona comprender qu funcin realiza el diseo a partir de una descripcin HDL que a partir de un esquemtico de interconexin de puertas
de tiempo
Facilita las correcciones en el diseo debidas a fallos de diseo o cambio de especificaciones. La existencia de herramientas comerciales automticas (sintetizadores RTL) que permiten crear descripciones gate-level a partir de los modelos a nivel RTL
Si bien, el diseo final no suela estar tan optimizado como si lo hubiera realizado un humano, la mayora de las veces es necesario sacrificar un mnimo en las prestaciones, para poder llevar a cabo el proyecto. Para ello se necesita la disponibilidad de dichas herramientas, las libreras de sntesis del fabricante y sus archivos de tecnologa.
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 diseadores de sistemas. Los usuarios de herramientas CAD pueden usar esta descripcin para capturar el comportamiento de este diseo a un nivel de abstraccin alto para la simulacin funcional. Adems, se estn convirtiendo en los lenguajes de simulacin ms utilizados por los distintos vendedores.
El
lenguaje tambin puede ser usado como medio de comunicacin entre diferentes herramientas CAD y CAE.
Un programa de captura de esquemticos puede ser utilizado para generar descripciones HDL del diseo, lo cual puede ser usado como entrada a un simulador.
La propia descripcin en el lenguaje de alto nivel sirve como especificacin del comportamiento del sistema a disear (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 fcilmente y de forma precisa por simuladores definidos en base a estos HDL. Adems, cumple con un requerimiento muy importante en toda especificacin: no es ambiguo. Asimismo sirve como documentacin del diseo.
"Test Bench" pueden ser escritos en el mismo lenguaje que con el que han sido modelados los diseos (HDL).
Esto permite un mejor manejo del modelo, ya que se puede asociar el modelo a sus estmulos de simulacin.
No limitamos el uso de dichos estmulos a un determinado simulador, pudiendo ser reutilizados dichos estmulos aunque se use un simulador distinto.
Los retardos de propagacin y limitaciones temporales, pueden ser descritos con estos HDL
Soporta modelos de tiempos sncronos y asncronos. Posibilidad de implementar distintas tcnicas de modelado digital (descripciones de mquinas de estados finitos (FSM), descripciones algortmicas, redes de Petri, y ecuaciones Booleanas El lenguaje es pblico y "not propietary" (especialmente en el caso del VHDL).
Es un estndar 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 tamao del diseo.
Los HDL tienen elementos que permiten el diseo a gran escala, de forma fcil; por ejemplo, componentes, funciones, procedimientos, paquetes.
La capacidad de definir tipos de datos sofisticados, suministra la potencia de describir y simular nuevos diseos a un nivel de abstraccin en el cual an no se barajan detalles de la implementacin
El uso de genricos y atributos en los modelos facilitan la labor de backannotation de informacin proviniente del dominio fsico despus de haber realizado el "placement and routing". Los genricos y atributos facilitan la descripcin de modelos parametrizables. El modelo, a travs de los atributos, puede contener informacin del diseo en s mismo, no solo de la funcionalidad: por ejemplo, informaciones tales como el rea y velocidad.
Supone un esfuerzo de aprendizaje, ya que prcticamente se puede considerar como nueva metodologa. Necesaria la adquisicin de nuevas herramientas:
Simuladores
Sintetizadores de HDL, teniendo que mantener el resto de las herramientas para otras fases del diseo.
El uso de estos lenguajes hace que involuntariamente se pierda un poco de control sobre el aspecto fsico del diseo, dndole una mayor importancia a la funcionalidad de dicho diseo.
HISTORIA DE VHDL
Diversos grupos de investigadores empiezan a crear y desarrollar los llamados "lenguajes de descripcin de hardware" cada uno con sus peculiaridades, buscando una solucin a los problemas que presentaba el diseo de los sistemas complejos. Ejemplos:
HISTORIA DE VHDL
Estos lenguajes nunca alcanzaron el nivel de difusin y consolidacin necesarios por motivos distintos.
los industriales, por ser propiedad de la empresa permanecieron encerrados en ellas y no estuvieron disponibles par su estandarizacin y mayor difusin,
los universitarios, perecieron por no disponer de soporte ni mantenimiento adecuado.
rentabilizar las inversiones en hardware haciendo ms sencillo su mantenimiento. resolver el problema de modificar el hardware diseado en un proyecto para utilizarlo en otro
HISTORIA DE VHDL
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 versin 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 revisin se realiz en 2002.
MODELO DEL HW
Modelo de concurrencia: procesos, seales y eventos.
El Hw tiene naturaleza concurrente. El elemento bsico de concurrencia es el proceso (process) que est formado por sentencias secuenciales. Los procesos se comunican entre ellos mediante seales (signal). Cada proceso tiene un conjunto de seales a las que es sensible, de forma que un cambio en alguna (evento) de ellas hace que se ejecute. Las seales tienen asociadas una o varias colas de eventos, pares tiempovalor (drivers), que definen su comportamiento en el transcurso de una simulacin.
MODELO DEL HW
Modelo de tiempo: ciclo de simulacin
Retardo delta ().
A: 10 B=1 C=0 A n1 n2
n1 n2
Z
T T+ T+2 T+3 T
MODELO DEL HW
Modelo de tiempo:
INICIO SIMULACIN
ciclo de simulacin
Incrementar retardo delta ()
Ejecutar estamentos concurrentes correspondientes al tiempo de simulacin actual Avanzar tiempo de simulacin Eventos en cola? NO
SI
Transaccio -nes? SI
NO
FIN SIMULACIN
Eventos ? SI
NO
Fichero VHDL
Fichero VHDL
DECLARACIN DE ENTIDAD
La entidad modela la interfaz del circuito, indicando sus terminales de entrada y salida, parmetros de diseo, declaraciones de tipos, constantes, etc.
entity <identificador> is [generic (lista_de_genricos);] [port (lista_de_puertos);] {declaraciones} [begin sentencias] end [entity] [identificador]; lista de puertos(identificador{,...}:[modo]indicacin_tipo [:=expresin]) {;...}
modo in | out | inout | buffer | linkage lista de genricos (identificador {,...}:tipo[:=expresin]) {;..}
DECLARACIN DE ENTIDAD
Ejemplos:
entity sumador_total is port (a,b,c: in bit; s,c: out bit); end sumador_total;
entity Mux21 is entity Mux21 is port (a: in bit; generic (t_delay:time:=5ns); b: in bit; port (a, b: in bit; canal : in bit:=1; canal : in bit:=0; z: out bit); z: out bit); end Mux21; end Mux21;
DECLARACIN 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 segn los tres niveles de abstraccin vistos anteriormente: - Algortmico: descripciones al estilo de Sw de alto nivel, que reflejan la funcionalidad de los mdulos . -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.
DECLARACIN 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 is begin process (a,b, canal) begin if (canal=0) then z<=a; else z<=b; end if; end process; end algoritmico;
DECLARACIN 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 2ns end FlujoDatos;
DECLARACIN 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;
ELEMENTOS LEXICOS
Comentarios: cualquier texto que empiece por -- -- esto sera un comentario Identificadores: dan nombre a los elementos del VHDL. Reglas para formar un identificador: - No tienen longitud mxima. - puede contener caracteres del a A a la Z, de la a a la z, caracteres numricos de 0 al 9 y el carcter subrayado _. - No se diferencia entre maysculas y minsculas (CONTADOR, contador y ConTadoR son el mismo identificador.) - Debe empezar por un carcter alfabtico, no puede terminar con un subrayado, ni puede tener dos subrayados seguidos. - Existen los identificadores extendidos (VHDL93): admiten cualquier carcter y diferencian maysculas de minsculas si se encuentran entre dos caracteres \. - No puede usarse como identificador una palabra reservada Correctos: Puerta_and_7_entradas, REloj, salida_2 Incorrectos: puerta__and, clock$entrada, 6inputs, sal_ Extendidos correctos: \puerta__and\, \clock$entrada\,\6inputs\,\sal_\
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: => ** := /= >= <= <>
ELEMENTOS LXICOS
Nmeros:
Enteros literales (su valor se obtiene directamente de su representacin literal): 45 0 129 el -5 no es un entero literal, es una combinacin 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 Representacin 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
ELEMENTOS LXICOS
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 ms larga que una lnea & la podemos concatenar con el carcter &
ELEMENTOS LXICOS
Bits Strings:
Secuencia de valores que representan bits (en base 2, 8 o 16): Ejem: B100100110 b110111001111 o371 O1346 xAD1 X1f
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, seales y ficheros.
Las constantes son objetos que mantienen su valor inicial , no pudiendo ser modificadas una vez que se han creado. Proporcionan modelos ms inteligibles. Proporcionan versatilidad: cambiando la asignacin 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;
OBJETOS EN VHDL
Las variables pueden cambiar de valor en cualquier momento mediante una sentencia de asignacin. declaracion_variable::= [shared]variable identificador{,...}:subtipo [:=expresion]; asignacion_variable::= [label:] identificador:=expresion; Signo de igual para la asignacin de variables
OBJETOS EN VHDL
Las seales pueden cambiar de valor en cualquier momento, pero a diferencia de las variables guardan una analoga con el Hw. Se pueden considerar una abstraccin de conexiones fsicas o buses. declaracion_seal::= signal identificador{,...}:subtipo[tipo_seal][:=expresion ]; tipo_seal::= register|bus Signo de asignacin para seales asignacion_seal ::= [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;
OBJETOS EN VHDL
Los ficheros pueden comunicar un diseo con un entrono externo. Un uso habitual es almacenar la informacin de los vectores de prueba en una simulacin 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;
Ejemplo:
type resistencia is range 0 to 1e9 units ohmio; Kohmio =1000 ; Mohmio =1000 Kohmio ; end units resistencia;
Se puede declarar un nuevo tipo: tipo_enumerado::= type identificador is (identificador|carcter{,...}); type funcion_alu is (sumar,restar,multiplicar,or_exclusiva); variable operacion:funcion_alu; operacion:=restar;
type piso is (1,primero,2,segundo);
Vdd
Vc
Vin
i
v
Vout
Como este tipo de datos no esta predefinido en VHDL, hay que incluir en el diseo el paquete std_logic_1164: library IEEE; use IEEE.std_logic_1164.all;
Literales sobrecargados
Existen literales que estn incluidos en varios tipos enumerados, 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 calificacin 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;-- declaracin implcita Subtipos predefinidos en VHDL: subtype natural is integer 0 to entero_mayor; subtype positive is integer 1 to entero_mayor;
SUBTIPOS DE DATOS
Ejemplo: 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!
Vectores:
tipo_vector::= type identificador is array (rango_discreto {,...}) of tipo_objeto; rango_discreto::= indicacion_discreta_tipo | expr_simple (to|downto) expr_simple
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
-- otra forma ms 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;
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); Signo de asignacin de aux:=(1=>5.67,3=>4.9,2=>9.0); agregados aux:=(3|2=>4.5,others=>5.6);
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;
ATRIBUTOS
Es una caracterstica asociada a un elemento del lenguaje (tipos de datos, seales, procedimientos, entidades,...) que permite extraer informacin adicional del mismo. Identificadoratributo Atributos de los tipos escalares: T'base Tipo base de T. T'left Valor ms a la izquierda de T. T'right Valor ms a la derecha de T. T'low Valor mnimo de T. T'high Valor mximo 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 posicin siguiente a x en T. T'pred(x) Valor de la posicin anterior a x en T. T'leftof(x) Valor de la posicin izquierda a x en T. T'rightof(x) Valor de la posicin derecha a x en T.
ATRIBUTOS
Ejemplos:
type resistencia is range 0 to 1e9 units ohm; Kohm =1000 ohm; Mohm=1000 kokm; end units resistencia; resistencialeft=0 resistenciaright=1e9 resistencialow=0 resistenciahigh=1e9 resistenciaascending=true resistenciaimage(2 kohm )=2000 ohm resistenciavalue(5 Mohm)=5_000_000
Ejemplos:
type indice is range 21 downto 11; type nivel_logico is (desconocido,bajo,alta_impedancia,alto); indiceleft=21 indiceright=11 indicelow=11 indicehigh=21 indiceascending=false indiceimage(14)=14 indicevalue(20)=20 nivel_logicoleft=desconocido nivel_logicoright=alto nivel_logicolow=desconocido nivel_logicohigh=alto nivel_logicoascending=true nivel_logicoimage(alto)=alto nivel_logicovalue(bajo)=bajo nivel_logicopos(desconocido)=0 nivel_logicoval(3)=alto nivel_logicosucc(deconocido)=bajo --Tsucc(alto): error ... nivel_logicopred(alta_impedancia)=bajo
ATRIBUTOS
ATRIBUTOS
Atributos de VECTORES: A'left(n) A'right(n) A'low(n) A'high(n) Arange(n) Areverse_range(n) Alength(n) Aascending(n) Valor izquierdo del ndice n de A. Valor derecho del ndice n de A. Valor mnimo del ndice n de A. Valor mximo del ndice n de A. Rango del indice n de A. Rango del indice n de A invertido. Nmero de valores del rango n de A. Verdadero si el rango del ndice de n de A es ascendente.
type A is array (1 to 4,31 downto 0) of boolean; Aleft(1)=1 Aright(2)=0 Arange(1) is 1 to 4 Alength(1)=4 Aascending(1)=true Alow(1)=1 Ahigh(2)=31 Areverse_range(2) is 0 to 31 Alength(2)=32 Aascending(2)=false
Aleft(1) Aleft
ATRIBUTOS
Atributos 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 | procedure | function | constant | signal | component | label | group
| | | |
| | | |
ATRIBUTOS
attribute Num_pin:natural; attribute codigo:bit_vector; attribute delay:time; signal reloj:std_logic; type operacion is (suma,resta,multiplicacion,division); attribute attribute attribute attribute attribute attribute Num_pin of reloj: signal is 14; delay of reloj: signal is 30ns; codigo of suma : literal is 00; codigo of resta : literal is 01; codigo of multiplicacion : literal is 10; codigo of division : literal is 11;
EXPRESIONES Y OPERADORES
EXPRESIONES Y OPERADORES
EXPRESIONES Y OPERADORES
Definicin de mdulo: a= b*N+(a mod b), con N entero tal que |a mod b| < |b| signo de (a mod b) = signo de b Definicin de resto: a=(a/b)*b +(a rem b) signo de (a rem b) = signo de a
EXPRESIONES Y OPERADORES
A 0 1 2 3 4 5 0 -1 -2 -3 -4 -5 0 1 2 3 4 5 0 -1 -2 -3 -4 -5 B 5 5 5 5 5 5 5 5 5 5 5 5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 A mod B A rem B 0 0 1 1 2 2 3 3 4 4 0 0 0 0 4 -1 3 -2 2 -3 1 -4 0 0 0 0 -4 1 -3 2 -2 3 -1 4 0 0 0 0 -1 -1 -2 -2 -3 -3 -4 -4 0 0