VHDL
VHDL es el acrónimo que representa la combinación de VHSIC y HDL, donde VHSIC es el acrónimo de Very High Speed Integrated Circuit y HDL es a su vez el acrónimo de Hardware Description Language.
Es un lenguaje usado por ingenieros definido por el IEEE (Institute of Electrical and Electronics Engineers) (ANSI/IEEE 1076-1993) que se usa para diseñar circuitos digitales. Otros métodos para diseñar circuitos son la captura de esquemas (con herramientas CAD) y los diagramas de bloques, pero éstos no son prácticos en diseños complejos. Otros lenguajes para el mismo propósito son Verilog y ABEL.
Aunque puede ser usado de forma general para describir cualquier circuito se usa principalmente para programar PLD (Programable Logic Device - Dispositivo Lógico Programable), FPGA (Field Programmable Gate Array), ASIC y similares.
Formas de describir un circuito
Dentro del VHDL hay varias formas con las que podemos diseñar el mismo circuito y es tarea del diseñador elegir la más apropiada.
Funcional: describimos la forma en que se comporta el circuito. Esta es la forma que más se parece a los lenguajes de software ya que la descripción es secuencial. Estas sentencias secuenciales se encuentran dentro de los llamados procesos en VHDL. Los procesos son ejecutados en paralelo entre sí, y en paralelo con asignaciones concurrentes de señales y con las instancias a otros componentes.
Flujo de datos: describe asignaciones concurrentes (en paralelo) de señales.
Estructural: se describe el circuito con instancias de componentes. Estas instancias forman un diseño de jerarquía superior, al conectar los puertos de estas instancias con las señales internas del circuito, o con puertos del circuito de jerarquía superior.
Mixta: combinación de todas o algunas de las anteriores.
En VHDL también existen formas metódicas para el diseño de máquinas de estados, filtros digitales, bancos de pruebas etc.
Secuencia de diseño
Secuencia de diseño
El flujo de diseño de un sistema podría ser:
División del diseño principal en módulos separados. La modularidad es uno de los conceptos principales de todo diseño. Normalmente se diferencia entre dos metodologías de diseño: top-down y botton-up. La metodología top-down consiste en que un diseño complejo se divide en diseños más sencillos que se puedan diseñar (o describir) más fácilmente. La metodología botton-up consiste en construir un diseño complejo a partir de módulos, ya diseñados, más simples. En la práctica, un diseño usa generalmente ambas metodologías.
Entrada de diseños, pueden usarse diversos métodos tal como VHDL como se vio anteriormente.
Simulación funcional, es decir, comprobaremos que lo escrito en el punto anterior realmente funciona como queremos, si no lo hace tendremos que modificarlo. En este tipo de simulación se comprueba que el código VHDL o Verilog (u otro tipo de lenguaje HDL) ejecuta correctamente lo que se pretende.
Síntesis. En este paso se adapta el diseño anterior (que sabemos que funciona) a un hardware en concreto, ya sea una FPGA o un ASIC. Hay sentencias del lenguaje que no son sintetizables, como por ejemplo divisiones o exponenciaciones con números no constantes. El hecho de que no todas las expresiones en VHDL sean sintetizables es que el VHDL es un lenguaje genérico para modelado de sistemas (no sólo para diseño de circuitos digitales), por lo que hay expresiones que no pueden ser transformadas a circuitos digitales. Durante la síntesis se tiene en cuenta la estructura interna del dispositivo, y se definen restricciones, como la asignación de pins. El sintetizador optimiza las expresiones lógicas con objeto de que ocupen menor área, o bien son eliminados las expresiones lógicas que no son usadas por el circuito.
Simulación post-síntesis. En este tipo de simulación se comprueba que el sintetizador ha realizado correctamente la síntesis del circuito, al transformar el código HDL en bloques lógicos conectados entre sí. Este paso es necesario ya que, a veces, los sintetizadores producen resultados de síntesis incorrectos, o bien realiza simplificaciones del circuito al optimizarlo.
Placement y routing. El proceso de placement consiste en situar los bloques digitales obtenidos en la síntesis de forma óptima, de forma que aquellos bloques que se encuentran muy interconectados entre si se sitúen próximamente. El proceso de routing consiste en rutar adecuadamente los bloques entre si, intentando minimizar retardos de propagación para maximizar la frecuencia máxima de funcionamiento del dispositivo.
Back-annotation. Una vez ha sido completado el placement & routing, se extraen los retardos de los bloques y sus interconexiones, con objeto de poder realizar una simulación temporal (también llamada simulación post-layout). Estos retardos son anotados en un fichero SDF (Standart Delay Format) que asocia a cada bloque o interconexción un retardo mínimo/típico/máximo.
Simulación temporal. A pesar de la simulación anterior puede que el diseño no funcione cuando se programa, una de las causas puede ser por los retardos internos del chip. Con esta simulación se puede comprobar, y si hay errores se tiene que volver a uno de los anteriores pasos.
Programación en el dispositivo. Se implementa el diseño en el dispositivo final y se comprueba el resultado.
Ejemplos de programas
En un diseño en VHDL tenemos dos partes principales: la entidad es como una caja negra en la que se definen entradas y salidas pero no se tiene acceso al interior, y es lo que usa cuanto se reutiliza un diseño dentro de otro; la arquitectura, que es donde se describe el diseño de la forma que se ha visto antes. Otros elementos del lenguaje son las librerías, paquetes, funciones...
Hola Mundo
Programa Hola Mundo
use std.textio.all;
-- bibliotecas entity hola is end entity hola;
architecture ITSA of hola is constant mensaje: string := "hola, saludos de Gordiano";
-- el mensaje begin process is-- proceso -> secuencial variable L: line;
begin write(L, mensaje);
writeline(output, L);
-- escribe todo lo anterior wait;
Multiplexor
Este ejemplo simula un multiplexor de dos entradas.
Es un ejemplo sencillo que muestra como describir un elemento a partir de su funcionamiento.
entity MUX2a1 is port(a: in std_logic;
b: in std_logic;
sel: in std_logic;
z: out std_logic);
end entity architecture dataflow of MUX2a1 is begin <= a when sel='0' else b; end dataflow;
Un ejemplo algo más complejo es el de un multiplexor de cuatro entradas. Este ejemplo trabaja con vectores para controlar la entrada activa a través de la entrada
sel. entity MUX4a1 is
port(a: in std_logic;
b: in std_logic;
c: in std_logic;
d: in std_logic;
z: out std_logic;
sel: in std_logic_vector(1 downto 0));
end entity;
architecture dataflow of MUX4a1 is beginprocess(a,b,c,d,sel)begin case sel is when "00"=>z<= a;
when "01" => z <= b;
when "10" => z <= c;
when "11" => z <= d;
end case;
end process;
Contador
Este es un ejemplo de un sistema que contará pulsos de un reloj digital (CLK) hasta llegar a 1000 y entonces volverá a empezar.
Este es un ejemplo de un sistema que contará pulsos de un reloj digital (CLK) hasta llegar a 1000 y entonces volverá a empezar.
La inicialización se consigue con un
reset (RST). library IEEE;
-- bibliotecas use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all;
entity CONTADOR is port(RST,CLK: in std_logic;
-- entradas salida: inout std_logic_vector(9 downto 0));
-- salidas end entity;
architecture contador of contador is signal aux: std_logic_vector(9 downto 0);
-- señal auxiliar begin process (CLK,RST) - - programación secuencial begin if RST='1' then -- reset -> inicialización aux<="0000000000";
elsif(clk'event and clk='1') then -- flanco de reloj ascendente if(salida="1111101000") then
-- máxima cuenta aux<=(others=>'0');
-- vuelvo a comenzar else aux<=aux+1;
- cuento uno más end if;
end if;
salida<=aux;
-- saco la salida end process;
end contador;
Después de compilar este programa habría que indicar a la herramienta encargada del diseño las restricciones oportunas para asignar las señales de entrada y salida a las patillas del chip donde se programará o bien usar este diseño dentro de otro.
4 comentarios:
Su blog esta muy bien, esta muy completo se ve que seleccionaron bien la información que subieron, además lo complementa mucho que le hayan metido muchos hipervínculos y aunque no tiene imágenes el simple echo de que este bien acomodada la información hace que no sea tan difícil de leerla y llame mas la atención . Los felicitamos se ve que le echaron ganas en la selección de información muy bueno su blog
Se despide el equipo 1
OPINION DE EQUIPO 1
Juan José Sánchez Mendoza
Irasema Rodríguez Gil
Esta muy bien su tema y el video esta exelente, se dice que una imagen dice más que ,mil palabras y con el video queda más que claro lo que significa IEEE.
Se ve que leyeron su tema pues el trozo de código lleva el nombre de uno de los integrantes del equipo.
Sale y adelante.
ATTE:
Equipo 3:
Alexander Pacheco de la Torre.
Juan Alberto Huerta Castillo
fernando gerardo:
este blog muestra una amplia gama de estandares y especificaciones lo que me hace reconocer que el contenido y la informacion es completa muy bien estructurada lo unico que vi de mas fueron los hipervehiculos los cules pienso que fueron unpoco fuera de orden aun que los videos aparecidos me partecieron muy buenos a mi y mi compañero. siguamos todos en el camino y adelante muy bueno eh.
esta muy bien tu informacion gordiano por que esta bien explicada la funcion de el instituto de ingenieros electricos y electronicos, muy bien.
solo que a nuestra manera de pensar hubieras resumido un poco por que si es un poco extenso el tema pero fuera de eso bastante bien y el video esta muy bien muy explicado, bueno nos despedimos
y muy chido su flog
equipo 3
integrado por:
francisco gomez
marco antonio pacheco
Publicar un comentario