Post on 15-Mar-2020
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 1Ver 7.0 Reproduccion prohibida – todos derechos reservados
FORMACION
Síntesis y simulacionpara
componentes programables
VHDL,muy sencillo...
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 2Ver 7.0 Reproduccion prohibida – todos derechos reservados
M V DCentro de diseño FPGA Xilinx
Consultoría y asistencia técnica a domicilioCentro de formación aprobado
Sitio WEB : www.mvd-fpga.com
FPGA Experts !
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 3Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Conocer las múltiples posibilidades ofrecidas por el lenguaje VHDL.• Conocer la sintaxis y el juego de instrucciones utilizado en síntesis lógica VHDL.• Conocer las principales ventajas y limitaciones de los diferentes estilos de escritura.• Verificar las informaciones teóricas por la practica• Aprovechar una base de ejemplos concretos, obtener una maestría rápida del lenguaje en aplicaciones de síntesis.
Objetivos de la formación
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 4Ver 7.0 Reproduccion prohibida – todos derechos reservados
VHDLGeneralidades sobre el lenguaje
y sus aplicaciones
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 5Ver 7.0 Reproduccion prohibida – todos derechos reservados
• VHDL :Very high speed integrated circuitHardware Description Language.
• Lenguaje de alto nivel conocido por permitir :• El modelado de ensambles electrónicos complejos. ( especificaciones )• La simulación de los modelos de componentes.• La síntesis lógica.
• Lenguaje estandarizado ( IEEE Std 1076-1993 )• La norma no define ninguna metodologia de diseño.
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 6Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Modelado de conjuntos electrónicos complejos.• Lenguaje de alto nivel facilitando la descripción del comportamiento de los modelos .• Fuerte nivel de abstracción. La posibilidad material de implementar fisicamente el diseño no es necesariamente tomada en cuenta a este nivel ( behavioral )• La partición en varios elementos permite dividir un modelo complejo en un número de elementos mas simples de desarrollar separadamente .
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 7Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Simulación :• Juego de instrucciones particularmente potente para:
- Generación de estímulos - Captura de resultados.
• Los modelos de comportamiento ( especificaciones ) son simulados con el fin de verificar su coherencia.• El conjunto de Modelos de comportamiento + ficheros de simulación constituyen a la vez una especificación y un medio de verificación.El comportamiento de un modelo y de su realización física deberían ser idénticos.
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 8Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Síntesis lógica:• Permite implementar físicamente un diseño, gracias a la utilización de herramientas de síntesis.• Usa solamente una parte reducida del juego de instrucciones del lenguaje VHDL.Numerosas construcciones utilizables en modelos o en simulación no pueden ser sintetizadas
Las construcciones soportadas varían según las herramientas.• Portabilidad : Mito o realidad ?
• Entre herramientas de síntesis.• Entre arquitecturas materiales.
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 9Ver 7.0 Reproduccion prohibida – todos derechos reservados
VHDLLas construcciones sintetisables
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 10Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Presentación general :VHDL permite en particular:
• Definir los " ports " de entrada / salida del conjunto lógico descripto ( ENTITY).Señales simples o sobre la forma de bus.• Definir un modelo de comportamiento sintetisable, ( ARCHITECTURE ) usando el juego de instrucciones soportado por la herramientas de síntesis.Estilo de escritura RTL ( Register Transfer Logic ).• Unir los diferentes módulos descritos separadamente.( gestión de jerarquía, VHDL estructural ).
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 11Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Presentación general : Informaciones previas sobre la sintaxis :
• Minúsculas y mayúsculas no son diferenciados en VHDL . Un objeto puede indiferentemente ser llamado :MODULE, Module, module ó modUle
Es lo mismo para las palabras clave.
• Los comentarios pueden ser colocados en cualquier lugar dentro del código. Ellos no afectan en nada los resultados de síntesis o de simulación.• Ejemplo :
_________________________________________________________________________________________________
-- esto en un comentario architecture ARQUI of EJEMPLO is -- esto también begin
_____________________________________________________________________________________________________
• Los archivos VHDL llevan la extensión " --- .VHD "
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 12Ver 7.0 Reproduccion prohibida – todos derechos reservados
La pareja entidad / arquitectura
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 13Ver 7.0 Reproduccion prohibida – todos derechos reservados
• La pareja entidad / arquitectura :
• Entidad : Porción del código que permite definir en particular las Entradas y Salidas.
• Ejemplo :___________________________________________________________________________________________________
entity EJEMPLO isport (A,B : in bit_vector(7 downto 0);SEL : in bit;MUX_OR : out bit
);end EJEMPLO; _______________________________________________
Equivalencia esquemática
MUX_ORB[7:0]
A[7:0]
SEL
SIMBOLO EJEMPLO
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 14Ver 7.0 Reproduccion prohibida – todos derechos reservados
• La pareja entidad / arquitectura : • Entidad : Sintaxis de declaración :_______________________________________________________________________________________________________
entity EJEMPLO isport (
lista de puertos de entrada / salida comprendiendo :nombre_de_señal : modo y tipo.
);end [EJEMPLO]; -- Los corchetes "[]" indican que es opcional -- usar de nuevo el nombre de la entidad después de la palabra clave “end”.
_______________________________________________________________________________________________________
• El nombre dado a la entidad puede ser cualquiera.( excepto las palabras reservadas )
• Dar de preferencia el mismo nombre a la entidad y al fichero VHDL ( en este caso EJEMPLO.vhd )
• La lista de puertos está comprendida entre dos paréntesis, y seguida de un punto y coma.• Nombre de la entidad opcional después de la palabra "end".
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 15Ver 7.0 Reproduccion prohibida – todos derechos reservados
• La pareja entidad / arquitectura : • Arquitectura : Porción de descripción del comportamiento del dispositivo a sintetizar.
• Esta asociada a una entidad.( dentro del mismo fichero ).
• Posee una parte declaratoria y una parte operatoria. _______________________________________________________________________________________________________
architecture ARQUI of EJEMPLO is-- parte declaratoria signal MUX_OUT : bit_vector(7 downto 0); -- señal interna------------------------------------------------------ parte operatoria begin
-- asignaciones condicionales de señales con "when..else".-- el signo "<=" es el símbolo de asignación de un valor a una señal
MUX_OUT <= A when SEL='0' else B;MUX_OR <='1' when MUX_OUT /= "00000000" else '0';
end [ARQUI];
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 16Ver 7.0 Reproduccion prohibida – todos derechos reservados
• La pareja entidad / arquitectura:
• Arquitectura : Informaciones complementarias (1)• La parte declaratoria puede contener :
• Declaraciones de señales internas.( que no sean I/Os )
• Declaraciones de componentes.( gestión de la jerarquía , VHDL estructural ).
• Declaraciones de constantes.• Declaraciones de tipos de objetos.( utilizados en particular para las maquinas de estado ).
• Declaraciones de sub-programas.( funciones y procedimientos ).
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 17Ver 7.0 Reproduccion prohibida – todos derechos reservados
• La pareja entidad / arquitectura : • Arquitectura: Informaciones complementarias(2)• El código operatorio puede contener :
• Asignaciones concurrentes de señales ( los resultados de síntesis y de simulación son independientes del orden de escritura de las instrucciones, como en el ejemplo precedente ).
• Asignaciones secuenciales : Procesos y/o sub programas En simulación, ejecución de instrucciones en el orden de escritura (secuencialmente).En síntesis lógica, el mismo comportamiento es reproducido.
• Instanciación de ”cajas negras". ( componentes ).El modulo en curso de desarrollo puede llamar a otros sub módulos ( gestión de jerarquía, VHDL estructural ).
CODIGORTL
CODIGOESTRUCTURAL
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 18Ver 7.0 Reproduccion prohibida – todos derechos reservados
• La pareja entidad / arquitectura : • Arquitectura : Informaciones complementarias (3)
• Resultados de síntesis :_______________________________________________________________________________________________________
architecture ARQUI of EJEMPLO is
-- parte declaratoriasignal MUX_OUT : bit_vector(7 downto 0); -- señal interna
-- parte operatoria begin
MUX_OUT <= A when SEL='0' else B; -- asignaciones condicionales de señales con "when...else".MUX_OR <='1' when MUX_OUT /= "00000000" else '0';
end [ARQUI];__________________________________________________________________________________________________
MUX_ORMUX_OUT[7:0]
A[7:0]
B[7:0]
SEL
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 19Ver 7.0 Reproduccion prohibida – todos derechos reservados
• La pareja entidad / arquitectura : Recapitulación : Archivo " EJEMPLO.vhd ".
_______________________________________________________________________________________________________
entity EJEMPLO isport (A,B : in bit_vector(7 downto 0);SEL : in bit; -- El signo ";" se utiliza como separador entreMUX_OR : out bit -- dos declaraciones de señales y no debe
); -- aparecer después de la ultima señal declaradaend [EJEMPLO];
architecture ARQUI of EJEMPLO is
-- parte declaratoriasignal MUX_OUT : bit_vector(7 downto 0); -- señal interna-- parte operatoria beginMUX_OUT <= A when SEL='0' else B;MUX_OR <='1' when MUX_OUT /= "00000000" else '0';end [ARQUI];
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 20Ver 7.0 Reproduccion prohibida – todos derechos reservados
• La pareja entidad / arquitectura : Otro EJEMPLO: mux2_1.vhd_______________________________________________________________________________________________________
entity MUX2_1 isport (
A_IN, B_IN : in bit; -- La entidad tiene el mismo nombreSEL : in bit; -- que el fichero VHDLSALIDA : out bit
);end [MUX2_1];
architecture ARCHI of MUX2_1 is
-- parte declaratoria vacía en este EJEMPLO
-- parte operatoria begin
SALIDA <= (A_IN and not(SEL)) or (B_IN and SEL);-- "and", "not", "or" son operadores lógicos predefinidos del -- lenguaje VHDL.
end [ARCHI];
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 21Ver 7.0 Reproduccion prohibida – todos derechos reservados
Objetos que se pueden manipular en VHDL
( síntesis lógica )
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 22Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Objetos que se pueden manipular en VHDL y sus tipos: • 3 clases principales de objetos :
• SEÑALES : similares a las señales encontradas en los esquemas Los “ports” declarados dentro de una entidad son señales. Pueden ser declarados como “bus”.• CONSTANTES : permiten definir valores permanentes .• VARIABLES : utilizadas solamente dentro de los “PROCESS “ ( instrucciones secuenciales ).
• Una declaración de objeto comprende :• CLASE : señal, constante o variable.• NOMBRE : a elección del creador ( excepto palabras reservadas ).• MODO : ( solamente señales ) : in, out, inout, buffer.• TIPO : bit, bit_vector, boolean, integer...
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 23Ver 7.0 Reproduccion prohibida – todos derechos reservados
Los tipos de datos
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 24Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Tipos de objetos que se pueden manipular en VHDL: • Tipos pré-definidos principales:
• BIT : puede tomar el valor '0' o '1'.
• BIT_VECTOR : grupo de BITS ( bus ).El valor binario de un bit_vector esta definido entre comillas dobles .
EJEMPLO : ___________________________________________________________________________________________________
signal A : bit_vector(7 downto 0);-- El bit de mas peso (MSB)esta a la izquierda ! -- En nuestro caso es el bit 7.beginA <= "01011010";-- equivalente a : A <= X"5A";-- X"valor" indica un valor hexadecimal
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 25Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Tipos de objetos que se pueden manipular en VHDL: • Tipos pré-definidos principales : ( cont. )
• BOOLEAN : Puede tomar los valores TRUE o FALSE.
• INTEGER : Valor entero codificado sobre 32 bits.( de -2.147.483.648 a + 2.147.483.647 )Un entero puede estar limitado en su declaración, a fin de evitar
su codificación sobre 32 bits.EJEMPLO :
___________________________________________________________________________________________________
signal VALEUR : integer range 0 to 255;beginVALEUR <= 143 when INIT = '1' else 33;
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 26Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Tipos de datos que se pueden manipular en VHDL : • Tipos " user defined " :
• STD_LOGIC y STD_ULOGIC : Extensiones del tipo BIT, pueden tomar 9 valores diferentes :type STD_ULOGIC is (
'U', -- Uninitialized'X', -- Forcing Unknown'0', -- Forcing 0'1', -- Forcing 1'Z', -- High impedance'W', -- Weak unknown'L', -- Weak 0'H', -- Weak 1 '-' );-- Don't care
( Extraído del código fuente del package "STD_LOGIC_1164". )
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 27Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Tipos de objetos que se pueden manipular en VHDL : • Tipos " user defined " : STD_LOGIC
• El tipo STD_LOGIC da una mayor potencia operacional que el tipo BIT, tanto para la simulación como para la síntesis . ( particularmente los valores 'Z’ y '-' para la síntesis ).
• Tipos " user defined " : STD_LOGIC_VECTOR• Grupo de objetos similar a BIT_VECTOR, pero con los 9 estados posibles del STD_LOGIC para cada uno de los bits.• Para utilizar estos tipos de datos ( STD_LOGIC_VECTOR y STD_LOGIC ), debemos declarar la utilización de la biblioteca IEEE que contiene el package particular ( STD_LOGIC_1164 ), en el encabezado del archivo .vhd. library IEEE;use IEEE.STD_LOGIC_1164.all;
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 28Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Tipos de objetos que se pueden manipular en VHDL : • EJEMPLO de declaración de la biblioteca IEEE, y del package STD_LOGIC_1164 :_____________________________________________________________________________________________________________
library IEEE;use IEEE.STD_LOGIC_1164.all;entity EJEMPLO is
port ( A, B : in STD_LOGIC_VECTOR(7 downto 0);SEL : in STD_LOGIC;MUX_OR : out STD_LOGIC);
end EJEMPLO;
architecture ARCHI of EJEMPLO is .........
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 29Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Tipos de objetos que se pueden manipular en VHDL :
• Tipos enumerados :• Principalmente utilizados en síntesis para definir los estados de las maquinas de estado.
______________________________________________________________________________________________________
architecture ARCHI of MACHINE is
-- parte declaratoria de la arquitectura type ESTADOS is ( REPOSO, LECTURA, ESCRITURA);signal ESTADO_ACTUAL, ESTADO_SIGUIENTE: ESTADOS;-- Las señales ESTADO_ACTUAL y ESTADO_SIGUIENTE, podrán -- tomar los valores “REPOSO”, “LECTURA” o “ESCRITURA”.begin
-- asignaciones.
Enumeración de tipo !
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 30Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Reglas de asignación de los vectores de datos:
• EL orden en el cual se utiliza el vector ( bus ) debe ser el mismo que en la declaración del vector.( valores crecientes o decrecientes de los índices )
• No es necesario utilizar el vector entero. ( utilización de una parte de las señales de un bus ).
• El ancho del bus ( tamaño del vector ) debe corresponder para la mayoría de las operaciónes. ( excepto para comparación ).
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 31Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Reglas de asignación de los vectores de datos:architecture ARCHI of VECTOR is-- parte declaratoria de la arquitecturasignal D_IN, MASCARA, D_OUT : std_logic_vector(7 downto 0);signal Q_OUT : std_logic_vector(7 downto 0);constant FIJA : std_logic_vector(2 downto 0) := "010"; -- la asignación de un valor a una constante o variable -- se realiza por el símbolo " := " -- en forma diferente a la asignación de señales.
beginD_OUT <= D_IN and not(MASCARA); -- Todas las operaciones
-- son sobre 8 bits.Q_OUT <= (D_IN(6 downto 2) and not(MASCARA(7 downto 3)))
& FIJA;-- El signo “&” es un operador llamado de concatenación
end [ARCHI];
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 32Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Ejemplo de un código equivalente :D_OUT(7) <= D_IN(7) and not(MASCARA(7));D_OUT(6) <= D_IN(6) and not(MASCARA(6));
-- -- -- -- -- -- ;D_OUT(0) <= D_IN(0) and not(MASCARA(0));
Q_OUT(7) <= D_IN(6)and not(MASCARA(7));Q_OUT(6) <= D_IN(5)and not(MASCARA(6));
-- -- -- -- -- -- ;Q_OUT(3) <= D_IN(2)and not(MASCARA(3));Q_OUT(2) <= FIJA(2); -- o Q_OUT(2) <= '0';Q_OUT(1) <= FIJA(1); -- o Q_OUT(1) <= '1';Q_OUT(0) <= FIJA(0); -- o Q_OUT(0) <= '0';
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 33Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Reglas de asignación de los vectores de datos:• Ejemplos de errores de escritura en las asignaciones:architecture ARCHI of VECTOR is-- parte declaratoria de la arquitectura signal D_IN, MASCARA,D_OUT : std_logic_vector(7 downto 0);signal Q_OUT : std_logic_vector(7 downto 0);constant FIJA : std_logic_vector(2 downto 0) := "010";
beginD_OUT <= D_IN(0 to 7) and not(MASCARA); -- ERROR ! D_IN fue declarado -- con valores decrecientes de los índices (7 downto 0). No puede ser -- usado en una asignación poniendo los mismos índices en orden crecientes -- En cambio, podríamos haber escrito :
-- D_OUT(7) <= D_IN(0) and not(MASCARA(7));-- D_OUT(6) <= D_IN(1) and not(MASCARA(6));
-- -- -- -- -- -- ; -- D_OUT(1) <= D_IN(6) and not(MASCARA(1)); -- D_OUT(0) <= D_IN(7) and not(MASCARA(0));
-- De la misma forma, la línea siguiente es ilegal( error en la -- utilización de la constante "FIJA" ).Q_OUT <= (D_IN(6 downto 2) and not(MASCARA)) & FIJA(0 to 2); --ERROR !end [ARCHI];
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 34Ver 7.0 Reproduccion prohibida – todos derechos reservados
Los operadores
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 35Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Operadores frecuentemente utilizados en síntesis:• Operadores lógicos pre definidos :
• and, or, nand, nor, xor y not• Operan sobre todos los objetos de todas las clases ( señales constantes, variables ) y de tipo :
• bit• bit_vector• std_logic, std_ulogic• std_logic_vector, std_ulogic_vector• boolean
• Los operandos deben ser del mismo tipo y contener el mismo número de bits.
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 36Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Operadores frecuentemente utilizados en síntesis :• Operadores lógicos pré-definidos :
• Ejemplo de utilización (1) :____________________________________________________________________________________________________
entity OPE isport ( A, B, C : in bit;
S : out bit);end OPE;
architecture ARCHI of OPE isbeginS <= (A and B) and not(C);
end ARCHI;
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 37Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Operadores frecuentemente utilizados en síntesis :• Operadores lógicos pre definidos:
• Ejemplo de utilización(2) :_______________________________________________________________________________________________________
library IEEE; -- declaración de la biblioteca IEEE,-- seguida de la sentencia "use" para indicar que -- queremos usar de esta biblioteca el package -- "STD_LOGIC_1164", sin limitación de las funciones -- u otros elementos de la biblioteca disponibles ( .all; )use IEEE.STD_LOGIC_1164.all;entity OPERA isport ( A, B, C : in std_logic_vector(6 downto 0);
S : out std_logic_vector(6 downto 0));end OPERA;architecture ARCHI of OPERA isbeginS <= (A and B) and not(C);
end ARCHI;
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 38Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Operadores frecuentemente utilizados en síntesis :• Operadores relacionales :
• = ( igual a ) /= ( diferente de )• < ( inferior a ) <= ( inferior o igual a )• > ( superior a ) >= ( superior o igual a )
• Operan sobre objetos de tipo :• bit, bit_vector• std_logic, std_logic_vector • std_ulogic, std_ulogic_vector• integer• boolean
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 39Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Operadores frecuentemente utilizados en síntesis :
• Operadores relacionales : ( cont. )
• Los operandos deben ser del mismo tipo, pero el número de bits comparados puede ser diferente !
• Cuidado con las sorpresas !!!
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 40Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Operadores corrientemente utilizados en síntesis:• Operadores relacionales : Comparación de vectores :
• La comparación se hace comparando bit a bit los dos vectores comenzando por el MSB.Los resultados pueden sorprender si los vectores no son del mismo número de bits. Ejemplo:
____________________________________________________________________________________________
signal REG : std_logic_vector(4 downto 0);signal CNT : std_logic_vector(3 downto 0);begin-- tenemos el derecho de escribir :-- REG CNT-- "01111" > "0100" resultado poco sorprendente -- y "01111" < "1000" resultado muy sorprendente !
-- El MSB de CNT es superior al MSB de REG, -- el vector CNT es considerado como superior.
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 41Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Operadores corrientemente utilizados en síntesis :• Operadores relacionales : ( cont. )
• La utilización de packages estandarizados permite efectuar operaciónes relacionales entre objetos de tipo INTEGER y otro de tipo STD_LOGIC_VECTOR.
• Estos packages se encuentran en la biblioteca « IEEE » asi como los packages son : STD_LOGIC_UNSIGNED, ySTD_LOGIC_ARITH. Para ser visibles, deben se declarados al inicio del archivo.
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 42Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Operadores corrientemente utilizados en síntesis:• Operadores relacionales : Informaciones complementarias
El resultado de una comparación es de tipo “boolean” puede tomar solo los valores TRUE o FALSE.Ejemplo : ____________________________________________________________________________________________
signal IGUAL, VENTANA : boolean;signal COUNT : std_logic_vector(4 downto 0);beginIGUAL <= (COUNT = 27);VENTANA <= (COUNT >= 13) and (COUNT <= 25);-- operación lógica entre dos “booleans”.
• Nota : Los operadores lógicos relacionales distintos de "=" y "/=" son frecuentemente implementados en FPGA en forma de funciones aritméticas cableadas.
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 43Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Operadores corrientemente utilizados en síntesis :• Operadores relacionales y la implementación de funciones aritméticas :
• La comparación ( distinta de “ = ” o “ /= ” ) de vectores puede resultar en la utilización de funciones aritméticas cableadas, y por esto no serán optimizadas después de la síntesis. Prudencia en la utilización de los operadores <, <=, > , >= . Dos porciones de código pueden tener un comportamiento equivalente, pero los resultados de síntesis pueden ser muy diferentes.Ejemplo :
____________________________________________________________________________________________
signal CNT : std_logic_vector(7 downto 0);beginTOTO <= '1' when (CNT < "10000000") else '0'; -- podemos escribir-- TOTO <= '1' when CNT(7)='0' else '0';-- o mas simple TOTO <= not(CNT(7));
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 44Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Operadores corrientemente utilizados en síntesis:• Operadores aritméticos :
+ ( suma ) - ( resta ) * ( multiplicación ) / ( división )** ( potencia ) mod rem abs
• Operan sobre objetos de tipo INTEGER.• Pueden igualmente operar sobre STD_LOGIC_VECTOR utilizando los packages STD_LOGIC_UNSIGNED y STD_LOGIC_ARITH.• Restricciones: La mayoría de las herramientas de síntesis solo autorizan las operaciónes de multiplicación y división entre CONSTANTES, o una CONSTANTE potencia de 2 y una SEÑAL.
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 45Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Operadores corrientemente utilizados en síntesis:• Implementación física de funciones descritas por medio de operadores aritméticos :
• Algunas arquitecturas de componentes programables tienen recursos de lógica específicos para una implementación eficaz de las funciones aritméticas y similares ( en términos de velocidad y área de silicio usado ). • Las herramientas de síntesis pueden hacer un uso de estos recursos mas o menos oportuno, según su «conocimiento» de la arquitectura del circuito usado.Disponen en general de opciones de síntesis, para elegir usar o no dichos recursos lógicos.
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 46Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Operadores frecuentemente utilizados en síntesis :• Posibilidades extendidas de utilización de operadores aritméticos y relacionales gracias a la utilización de packages estandarizados:
• La comparación entre STD_LOGIC_VECTOR y INTEGER, es posible utilizando ciertos packages.• El nombre de la biblioteca y del package puede ser diferente según las herramientas.
__________________________________________________________________________________________________
library IEEE;use IEEE.STD_LOGIC_UNSIGNED.all;entity ...architecture ARCHI of ...signal CNT : std_logic_vector(7 downto 0);beginTOTO <= '1' when (CNT = 143) else '0';TITI <= '1' when (CNT >= 75) and (CNT <= 123) else '0';
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 47Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Operadores corrientemente utilizados en síntesis :• Operador de concatenación:
• Permiten la creación de vectores a partir de bit o de vectores.• Ejemplos :
_____________________________________________________________________________________________________
library IEEE;use IEEE.STD_LOGIC_1164.all;entity MY_BUS isport ( A, B, C, D : in std_logic;
STATUS : out std_logic_vector(7 downto 0));end MY_BUS;architecture ARCHI of MY_BUS isbeginSTATUS <= "0000" & A & B & C & D;-- equivalente a : STATUS(7 downto 4) <= "0000";-- STATUS(3) <= A; STATUS(2) <= B; -- STATUS(1) <= C; STATUS(0) <= D;
end ARCHI;
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 48Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Operadores corrientemente utilizados en síntesis :• Operadores de concatenación :
• Otro ejemplo :_____________________________________________________________________________________________________
library IEEE;use IEEE.STD_LOGIC_1164.all;entity MY_BUS isport ( A, B, C, D : in std_logic;
STATUS : out std_logic_vector(7 downto 0));end MY_BUS;architecture ARCHI of MY_BUS isconstant ZERO : std_logic_vector(3 downto 0) := "0000";beginSTATUS <= ZERO & A & B & C & D;-- equivalente à : STATUS(7 downto 4) <= "0000";-- STATUS(3) <= A; STATUS(2) <= B; -- STATUS(1) <= C; STATUS(0) <= D;
end ARCHI;
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 49Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Pregunta : el código siguiente contiene errores en las asignaciones, podría usted indicarlas ?_____________________________________________________________________________________________________
library IEEE;use IEEE.STD_LOGIC_1164.all;
entity MY_BUS isport ( A, B, C, D : in std_logic_vector(3 downto 0);
SEL : in std_logic_vector(0 to 1);VALOR : in integer range 0 to 255;IGUAL : out boolean;STATUS : out std_logic_vector(7 downto 0));
end MY_BUS;
architecture ARCHI of MY_BUS isconstant DOCE : std_logic_vector(3 downto 0) := "1100";constant TRECE : std_logic_vector(0 to 3) := "1101";beginSTATUS(0 to 3) <= DOCE;STATUS <= DOCE & A(0) & B(0 to 2);STATUS <= A when SEL="00" else B when SEL="01"
else C when SEL="10" else D;STATUS <= TRECE & DOCE;IGUAL <= STATUS = A & D;IGUAL <= '1' when STATUS=VALOR;
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 50Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Respuestas : E = ERROR C = CORRECTO
E STATUS(0 to 3) <= DOCE;-- STATUS después de estar declarado std_logic_vector(7 downto 0), -- nosotros solo podemos usarlo con índices decrecientes
E STATUS <= DOCE & A(0) & B(0 to 2);-- B esta declarado como std_logic_vector(3 downto 0), -- entonces solo podemos usarlo con índices en sentido decreciente
E STATUS <= A when SEL="00" else B when SEL="01"else C when SEL="10" else D;
-- STATUS es un vector de 8 bits, mientras que A, B, C, y D son -- vectores de 4 bits.
C STATUS <= TRECE & DOCE; -- equivalente a STATUS <= "1101_1100";E IGUAL <= STATUS = A & D; -- STATUS es una salidaE IGUAL <= '1' when STATUS=VALOR;
-- STATUS es una salida-- IGUAL (booleano) solo puede tomar un valor TRUE o FALSE-- Un std_logic_vector comparado con un integer. -- Esta comparación solo es posible con la ayuda de bibliotecas -- especificas.-- falta "else" después de "when". Legal pero no deseable
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 51Ver 7.0 Reproduccion prohibida – todos derechos reservados
Instrucciones concurrentesy
secuenciales
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 52Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Instrucciones concurrentes :Las operaciónes se efectúan al mismo tiempo (en paralelo).
• El orden de escritura de las instrucciones no afecta el resultado de síntesis o de simulación.• El estilo de escritura es comparable a los lenguajes de programación de los PALs ( ecuaciones lógicas ).• Ejemplo de asignaciones simples : ( ecuaciones ) ____________________________________________________________________________________________________
entity CONCURRENT isport ( A, B, C : in bit;
S, T : out bit); end CONCURRENT;
architecture ARCHI of CONCURRENT isbeginS <= (A and B) and not(C);T <= B xor C;-- El orden de asignación S y de T es indiferente.
end ARCHI;
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 53Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Instrucciones secuenciales :Las operaciónes se efectúan en secuencia.
• El orden afecta los resultados de simulación y de síntesis..
• Estilo de escritura parecido a los lenguajes de informática de alto nivel .• Las Instrucciones secuenciales se usan en partes específicas del código : PROCESS o súbprogramas.• Ejemplo :
____________________________________________________________________________________________________
architecture ARCHI of SECUENCIA isbeginprocess(CK) begin
if CK'event and CK='1' thenif ENA = '1' then COUNT <= COUNT + 1;end if;
end if; end process;
end ARCHI;
Utilización del Clock_Enablededicado de los Flip Flops Xilinx
( ver Procesos Sincrónicos )
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 54Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Instrucciones concurrentes :• Asignación de señales por condición : WHEN ... ELSE
• Sintaxis :signal_x <= valor_x when signal_y = valor_y
else valor_z;
• Notar que valor_z es indicado directamente después de" else ". (el símbolo de asignación "<=" es aquí implícito) Ejemplo :
____________________________________________________________________________________________________
entity CONCURRENT isport ( A, B, C : in bit;
S, T : out bit);end CONCURRENT;architecture ARCHI of CONCURRENT is begin
S <= A when C='1' else B;T <= B xor C;
end ARCHI;
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 55Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Instrucciones concurrentes :• Asignación de señales por condición : WHEN ... ELSE____________________________________________________________________________________________________
entity CONCURRENT isport ( A, B, C : in bit;
S, T : out bit);end CONCURRENT;
architecture ARCHI of CONCURRENT is beginS <= A when C='1' else B;T <= not B;
end ARCHI;________________________________________________________________________________________________________
• Las dos instrucciones ( o asignaciones ) son concurrentes. El orden de escritura no afecta los resultados.
• Estas instrucciones generan :
0
1A
B
C
S B T
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 56Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Instrucciones concurrentes :• Asignación de señales por condición : WHEN ... ELSE____________________________________________________________________________________________________
entity TRISTATE isport ( A, B, C : in std_logic;
S : out std_logic);end TRISTATE;
architecture ARCHI of TRISTATE isbeginS <= A when C='0' else 'Z';S <= B when C='1' else 'Z';
end ARCHI;________________________________________________________________________________________________________
B S
A
C
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 57Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Instrucciones concurrentes :• Asignación de señales par condición : WHEN ... ELSE____________________________________________________________________________________________________
entity TRISTATE isport ( A, B : in std_logic_vector(15 downto 0);
C : in std_logic;S : out std_logic_vector(15 downto 0));
end TRISTATE;
architecture ARCHI of TRISTATE isbeginS <= A when C='0' else "ZZZZZZZZZZZZZZZZ";S <= B when C='1' else "ZZZZZZZZZZZZZZZZ";
end ARCHI;________________________________________________________________________________________________________
B[15:0] S[15:0]
A[15:0]
C
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 58Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Instrucciones concurrentes :• Asignación de señales por selección : WITH ...SELECT
• Sintaxis :with SIGNAL_X select
SIGNAL_Y <= valor_y1 when "00",valor_y2 when "01",valor_y3 when "10",valor_y4 when others;
• WHEN OTHERS (ultima línea) indica que SIGNAL_Y tomará el valor valor_y4 para todo valor de SIGNAL_X no indicado explícitamente.
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 59Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Instrucciones concurrentes :• Asignación de señales por selección : WITH ...SELECT
• Ejemplo :____________________________________________________________________________________________________
architecture ARCHI of CONCURENT isbeginwith SEL select S <= A when "00",
B when "01",C when "10",D when others;
T <= not B;end ARCHI;
_________________________________________________________________________________________________________
B T
00
01
10
otros casos
A
D
SEL[1:0]
SB
C
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 60Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Instrucciones concurrentes :• Instrucción de bucle : FOR i IN ... GENERATE :
• Sintaxis :LABEL : for I in entero_a to entero_b generate
--Instrucciones concurrentes...end generate;
• GENERATE produce una iteración de las instrucciones .• El número de iteraciónes esta determinado por los valores enteros "entero_a" y "entero b". • La utilización de un LABEL es obligatoria.• La instrucción GENERATE puede ajustarse al ancho de un bus si se usa con el atributo RANGE :BLABLA : for I in DATA'range generate ...
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 61Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Instrucciones concurrentes :• Instrucción de bucle : FOR i IN ... GENERATE :
Ejemplos :_____________________________________________________________________________________________________________
BLABLA : for I in 0 to 15 generateS(I) <= A(I) when C ='0' else 'Z'; S(I) <= B(I) when C ='1' else 'Z';
end generate;_____________________________________________________________________________________________________________
BLABLA : for I in S'range generateS(I) <= A(I) when C ='0' else 'Z'; S(I) <= B(I) when C ='1' else 'Z';
end generate;____________________________________ B[15:0] S[15:0]
A[15:0]
C
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 62Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Instrucciones concurrentes :• Instrucción de bucle : FOR i IN ... GENERATE y atributo RANGE :
____________________________________________________________________________________________________________
BLABLA : for I in S'range generateS(I) <= A(I) when C='0' else 'Z'; S(I) <= B(I) when C='1' else 'Z';
end generate;____________________________________________________________________________________________________________
• RANGE es un atributo pre-definido de VHDL.• Indica la gama de valores de los índices de un vector de datos.• Código genérico, independiente del ancho del bus • Portabilidad, re-uso, evoluciónes facilitadas...
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 63Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Instrucciones concurrentes : Ejercicio recapitulativo
6 A5 B4 C3 D2 E1 F0 G
DISPLAY[6:0]
Comparador (when ... else )
VAL[3:0]
A_MIN (declarado en modo OUT)
A < BBUS_A[3:0]
BUS_B[3:0]
A
B
MIN[3:0]
MAX[3:0]
1
0
1
0
SEL_MIN
Multiplexores lógicos
(when ... else)
Decodificador7 segmentos( with ... select)
Multiplexor tri-state
(for I in ... generate)
(señal interna)
salidas
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 64Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Instrucciones concurrentes : Ejercicio -- El fin de este ejercicio es describir un ensamble que permita -- presentar sobre un indicador de 7 segmentos el valor mínimo o -- máximo que se presentan sobre el bus BUS_A o BUS_B, -- según el estado de la señal SEL_MIN;
-- Esta es una guía para facilitar el ejercicio.library ...; use ...;
-- La biblioteca METAMOR permite incluir dentro del código fuente -- los parámetros directamente ligados a cada arquitectura -- En el ejemplo nosotros podemos imponer una disposición -- ( total o parcial ) de los pines del FPGA. library METAMOR;use METAMOR.ATTRIBUTES.all;
entity CONCUR isport ( BUS_A, BUS_B : std_logic_vector(3 downto 0);
-- declaración de las otras entradas y salidas...-- El atributo PINNUM permite imponer la distribución de pines.attribute PINNUM of BUS_A : signal is "P40,P41,P42,P43";
end CONCUR;
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 65Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Instrucciones concurrentes : Ejercicio architecture ARCHI of CONCUR is-- declaración de señales internas begin-- A_MIN <= BUS_A < BUS_B; -- Solamente si A_MIN es BOOLEANA_MIN <= '1' when BUS_A < BUS_B else '0' ;
-- selección de los valores MIN o MAX por multiplexado lógico(no TRISTATE)-- MAX <= BUS_A when not(A_MIN) else BUS_B;MAX <= BUS_A when A_MIN = '0' else BUS_B;
-- asignación de otras señales ...-- selección de los valores MIN o MAX por TRISTATE.VALOR : for I in ... generate
VAL(I) <= MAX(I) when ... else ... ;VAL(I) <= MIN(I) when ... else ... ;
end generate;-- a decodificador 7 segmentos-- --- ( en forma de tabla verdad )-- f | |b con la instrucción concurrente :-- | | WITH ... SELECT-- ----- e | g |c-- | |-- ----- d
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 66Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Instrucciones concurrentes : Ejercicio -- continuación
with VAL select -- descripción en forma de tabla verdad -- ABCDEFG
DISPLAY <= "0000001" when ..., -- 0 | segmentos encendidos con 0"1001111" when ..., -- 1"0010010" when ..., -- 2
-- otros casos...
"0111110" when others; -- F
A <= DISPLAY(6);B <= ...;C <= ...;D <= ...;E <= ...;F <= ...;G <= ...;
end ARCHI;
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 67Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Instrucciones concurrentes : Ejercicio -- El fin de este ejercicio es describir un ensamble que permita -- presentar sobre un indicador de 7 segmentos el valor mínimo o -- máximo que se presentan sobre el bus BUS_A o BUS_B, -- según el estado de la señal SEL_MIN; library ieee; use ieee.std_logic_1164.all;-- La biblioteca METAMOR permite incluir dentro del código fuente -- los parámetros directamente ligados a cada arquitectura -- En el ejemplo nosotros podemos imponer una disposición -- ( total o parcial ) de los pines del FPGA.
entity CONCUR isport ( BUS_A, BUS_B : std_logic_vector(3 downto 0);
SEL_MIN : in std_logic;A_MIN : out boolean; A,B,C,D,E,F,G : out std_logic);
end CONCUR;
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 68Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Instrucciones concurrentes : Ejercicio architecture ARCHI of CONCUR issignal VAL, MAX, MIN : std_logic_vector(3 downto 0); -- declaración de señalessignal DISPLAY : std_logic_vector(6 downto 0); -- internassignal A_MIN_INT : boolean; begin
A_MIN_INT <= BUS_A < BUS_B; -- A_MIN es una condición lógicaA_MIN <= A_MIN_INT;
-- selección de los valores MIN y MAX por multiplexado lógico( no TRISTATE )MAX <= BUS_A when not(A_MIN_INT) else BUS_B; MIN <= BUS_A when A_MIN_INT else BUS_B;
-- selección del valore MIN o MAX por TRISTATE.VALEUR : for I in BUS_A'range generate
VAL(I) <= MAX(I) when SEL_MIN ='0' else 'Z';VAL(I) <= MIN(I) when SEL_MIN ='1' else 'Z';
end generate;-- a decodificador 7 segmentos-- --- ( en forma de tabla verdad)-- b | |f con la instrucciones concurrente :-- | | WITH ... SELECT-- ----- c | g |e-- | |-- ----- d
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 69Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Instrucciones concurrentes : Ejercicio -- continuación
with VAL select -- descripción de la tabla verdadDISPLAY <= "0000001" when x"0",
"1001111" when x"1","0010010" when x"2", "0000110" when x"3", "1001100" when x"4","0100100" when x"5", "0100000" when x"6", "0001111" when x"7","0000000" when x"8", "0000100" when x"9", "0001000" when x"A","1100000" when x"b", "0110001" when x"C", "1000010" when x"d","0010000" when x"e", "0111000" when x"F", "0000000" when others;
A <= DISPLAY(6);B <= DISPLAY(5);C <= DISPLAY(4);D <= DISPLAY(3);E <= DISPLAY(2);F <= DISPLAY(1);G <= DISPLAY(0);
end ARCHI;
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 70Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Instrucciones secuenciales: noción de PROCESS.
• Un PROCESS es una parte de código en la cual las instrucciones se ejecutan en secuencia ( siguiendo el orden de escritura ).
• Una misma arquitectura puede contener varios PROCESS.
• Todos los process se ejecutan en paralelo. ( un PROCESS es equivalente a una instrucción concurrente compleja).
• El juego de instrucciones utilizables dentro de un process es diferente del juego de instrucciones concurrentes.
• El orden de escritura de las instrucciones afecta los resultados de simulación y de síntesis.
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 71Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Instrucciones secuenciales : noción de PROCESS.
• Implementación de :
• Lógica combinatoria ( process combinatorio ).• Lógica sincrónica ( process sincrónicos ). • Lógica sincrónica con inicialización asincrónica.
• En simulación, un process se dice dormido hasta que las señales susceptibles de activarlo cambian de estado.
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 72Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Instrucciones secuenciales : noción de PROCESS.
• Estructura general de un process :
[etiqueta :] process ( lista_de_sensibilidad )-- parte declaratoria
-- declaracion eventual de variables ...begin -- parte operatoria-- instrucciones secuenciales ( if, case, loop... )
end process;
Etiqueta opcional
Lista de las señalespodiendo provocar una reevaluacion
del valor de las señales asignadas en el Process
Fin del Process
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 73Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Metodología de uso de los PROCESS :
• El usuario debe tomar las precauciones necesarias para dominar el comportamiento y la implementación de la lógica generada.
Para esto, deberá indicar el la lista de sensibilidad todas las señales capaces de provocar un cambio en la asignación de los valores de las señales de salida del PROCESS, y únicamente estas.
• Un gran rigor en la definición de la lista de sensibilidad permitirá sintetizar diseños sin sorpresas ( sin asincrónismos )
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 74Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Metodologia de uso de los PROCESS en sintesis :
ABCD
STU
S
D Q
D Q
CK
T
AB
CD
process (A,B,C,D)
-- process combinatoriobeginif (A=‘1’ and B=‘0’)
then ...
process (CK)
-- process sincronicobeginif CK’event and CK=‘1’
then if (A=‘1’ and B=‘0’
then...
process (CK, INIT)
-- process sincronico-- con initializacion-- asinchronicabeginif INIT=‘1’ thenS <= ‘1’; T <= ‘0’;
elsif CK’event and CK=‘1’ then
if (A=‘1’ and B=‘0’) then...
AB
S
D
R
Q
D S Q
CKINIT
TCD
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 75Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Incoherencias de diseño hardware( soportadas por el lenguaje VHDL )
AB
S
D
R
Q
D S Q
CKINIT
TCD
S
D Q
D Q
CK
T
AB
CD
process (CK, A,B,C,D )
-- process sincronicobeginif CK’event and CK=‘1’
then if (A=‘1’ and B=‘0’
then...
process (CK, INIT, A, B, C, D )
-- process sincronico-- con initializacion-- asinchronicabeginif INIT=‘1’ thenS <= ‘1’; T <= ‘0’;
elsif CK’event and CK=‘1’ then
if (A=‘1’ and B=‘0’) then...
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 76Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Instrucciones secuenciales : noción de PROCESS.• Procesos combinatorios :
• Sintaxis :[LABEL :] process (lista_de_sensibilidad) [declaraciones] begin -- Instrucciones secuenciales
end process [LABEL];
• La lista de sensibilidad contiene todas las señales que pueden causar una actividad en el process.• La parte declaratoria puede contener variables. • Una variable es solo visible dentro del process en que esta declarada.
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 77Ver 7.0 Reproduccion prohibida – todos derechos reservados
Instrucciones secuenciales : noción de PROCESS.• Procesos combinatorios:
• Ejemplo :_____________________________________________________________________________________________________
MUX : process ( A, B, SEL) -- lista de sensibilidad-- parte declaratoria no usada en este ejemplobegin
if SEL = '0' then SALIDA <= A;else SALIDA <= B;end if;
end process;
• Las señales tratadas dentro de este tipo de process son puramente combinatorias ( ninguna referencia se hace a la detección del flanco de cambio del reloj ).
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 78Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Instrucciones secuenciales : noción de PROCESS.
• Proceso sincrónico simple : (sin inicialización asincrónica ).• Ejemplo :
process -- sin lista_de_sensibilidad begin wait until (CK'event and CK='1');COUNT <= COUNT + 1; -- legal solamente si la biblioteca
-- std_logic_unsigned a es declarada
end process;
• La señal COUNT ( std_logic_vector ) será construida por flip-flops.• Ninguna señal tratada en este process puede ser combinatoria
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 79Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Instrucciones secuenciales : noción de PROCESS.
• Proceso sincrónico simple : (sin inicialización sincrónica ).• Ejemplo ( Sintaxis 2 ) :
process (CK) begin if (CK'event and CK='1') then
COUNT <= COUNT + 1; -- legal solamente la biblioteca end if; -- std_logic_unsigned fue declarada
end process;
• La señal COUNT ( std_logic_vector ) será construida por flip-flops.
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 80Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Instrucciones secuenciales : noción de PROCESS.• Procesos sincrónicos con inicialización asincrónica.
• Ejemplo :
process (CK,RST) -- lista de sensibilidad begin if RST = '1' then
COUNT <= "0000"; -- acción asincrónicaelsif (CK'event and CK='1') then
COUNT <= COUNT + 1; -- acción sincrónicaend if;
end process;
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 81Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Variables y señales :• Las señales :
• Objetos que pueden ser declarados en el interior de una entidad ( ports ) o de una arquitectura (señales internas).• Visibles dentro de toda la arquitectura.• La asignación de un valor a una señal se hace con un retardo ( infinitesimal ).
PROCESS y juego de instrucciones secuenciales
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 82Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Variables y señales : Ejemplo sobre las señales :entity SIG isport (A, B, C, CK : in std_logic;
S, T : out std_logic);end SIG;
architecture ARCHI of SIG issignal TMP : std_logic; begin
processbegin
wait until CK'event and CK='1';TMP <= A or B; -- esta línea será ignorada S <= TMP;TMP <= A and C; -- anula la asignación precedente T <= TMP; -- sobre la señal TMP.
end process;end ARCHI;
A
C
CK
TMP
D Q
D Q
D Q
T
S
PROCESS y juego de instrucciones secuenciales.
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 83Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Variables y señales :• Variables :
• Son objetos que pueden ser declarados dentro de un process (u otras entidades secuenciales).• Invisibles desde el exterior del process donde son declaradas.• La asignación de una variable se hace en el momento preciso en el cual la instrucción es ejecutada. • Las variables son utilizadas para facilitar la escritura del código, o como " artificio de escritura ".Dan al lenguaje VHDL un comportamiento similar al de un lenguaje informático ( ejecución en secuencia ).
PROCESS y juego de instrucciones secuenciales
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 84Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Variables y señales : Ejemplo utilizando une variable :entity VAR isport (A, B, C, CK : in std_logic;
S, T : out std_logic); end VAR;architecture ARCHI of VAR isbegin
processvariable TMP : std_logic;begin
wait until CK'event and CK='1';TMP := A or B; -- esta línea será efectivaS <= TMP; -- para la asignación de la señal STMP := A and C; -- esta lo será T <= TMP; -- para la asignación de la señal T
end process;end ARCHI;
S
D Q
D Q
CK
TA
C
A
B
PROCESS y juego de instrucciones secuenciales
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 85Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Instrucciones secuenciales frecuentemente utilizadas
• IF ... THEN ... ; [ELSIF ... THEN ...]; [ELSE ...]; END IF;Similar à la asignación de señales par condición.
• CASE ... END CASE;Similar a la asignación de señales par selección.
• FOR ... LOOP END LOOP;Similar a la instrucción FOR ... GENERATE.
PROCESS y juego de instrucciones secuenciales
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 86Ver 7.0 Reproduccion prohibida – todos derechos reservados
• IF..THEN ..;[ELSIF..THEN ..]; [ELSE ..]; END IF;
• Ejemplo :_________________________________________________________________________________________________
signal A, B, C, D : std_logic_vector(7 downto 0);signal SEL : std_logic_vector(1 downto 0);signal MUX : std_logic_vector(7 downto 0);
BLABLA : process (A, B, C, D, SEL) -- etiqueta BLABLA
-- parte declaratoria no utilizada en este ejemplobegin
if SEL = "00" then MUX <= A;elsif SEL = "01" then MUX <= B;elsif SEL = "10" then MUX <= C;else MUX <= D;end if;
end process;
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 87Ver 7.0 Reproduccion prohibida – todos derechos reservados
• IF..THEN ..;[ELSIF..THEN ..]; [ELSE ..]; END IF;Sintaxis :
• Toda instrucción IF debe terminarse por END IF;• IF est en general seguida de ELSE.• Varios IF pueden estar enlazados, • La contracción ELSIF permite simplificar la escritura :Ejemplo 1 :
______________________________________________________________________________________________________
process (A, B, C, D, SEL) beginif SEL="00" then MUX <= A;else if SEL = "01" then MUX <= B;
else if SEL = "10" then MUX <= C;else MUX <= D;end if;
end if;end if;
end process;
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 88Ver 7.0 Reproduccion prohibida – todos derechos reservados
• IF..THEN ..;[ELSIF..THEN ..]; [ELSE ..]; END IF;
Ejemplo 2 :______________________________________________________________________________________________________
process (A, B, C, D, SEL)beginif SEL = "00" then MUX <= A;elsif SEL = "01" then MUX <= B;elsif SEL = "10" then MUX <= C;else MUX <= D;end if; -- un solo "end if".
end process;
-- Las contracciones de ELSE IF en ELSIF permiten -- simplificar la escritura suprimiendo la necesidad de -- tantos END IF;
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 89Ver 7.0 Reproduccion prohibida – todos derechos reservados
• IF..THEN ..;[ELSIF..THEN ..]; [ELSE ..]; END IF;
Resultados de síntesis :
0
1
0
1
0
1
"00"
SEL[1:0]
CMP=
"01"
SEL[1:0]
CMP=
"10"
SEL[1:0]
CMP=
A
B
C
D
MUX
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 90Ver 7.0 Reproduccion prohibida – todos derechos reservados
D Q
CK
01D
EC
CK
Flip-Flop D con Clock Enable dedicado( FPGA Xilinx )
• IF..THEN ..; [ELSIF..THEN ..]; [ELSE ..]; END IF;
Utilización del Clock Enable dedicado de los Flip-Flops ( FPGAs Xilinx )
generadorde funcionescombinatorias
F o G(LUT de 4 entradas)
Porción de CLB
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 91Ver 7.0 Reproduccion prohibida – todos derechos reservados
• IF..THEN ..; [ELSIF..THEN ..]; [ELSE ..]; END IF;• Ejemplo 3 : Utilización del Clock_Enable dedicado (con wait until):
____________________________________________________________________________________________________
architecture ARCHI of SEQUENCE isbeginprocess(CK) begin
if CK'event and CK = '1‘ thenif ENA = '1' then COUNT <= COUNT + 1;end if;
end if;end process;
end ARCHI;
-- Si ENA /= '1', el process puede ser activado por el flanco -- del reloj, pero si la condición if ENA = '1' no es verdadera -- el ultimo valor de COUNT será conservado.-- Este estilo de escritura garantiza el uso del Clock_Enable -- dedicado de los Flip-Flops FPGAs Xilinx, y permite por esto una -- economía substancial de elementos de lógica combinatoria , -- y el aumento de la frecuencias de funcionamiento ..
Utilización del Clock_Enablededicado de los FF Xilinx
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 92Ver 7.0 Reproduccion prohibida – todos derechos reservados
• IF..THEN ..;[ELSIF..THEN ..]; [ELSE ..]; END IF;
• Ejemplo 3 b: Utilización del Clock_Enable dedicado (if CK'event...)
___________________________________________________________________________________________
architecture ARCHI of SEQUENCE isbeginprocess(CK) begin
if CK'event and CK = '1' thenif ENABLE = '1' then COUNT <= COUNT + 1;end if;
end if;end process;
end ARCHI;Utilización del Clock_Enablededicado de los FF Xilinx
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 93Ver 7.0 Reproduccion prohibida – todos derechos reservados
• IF..THEN ..; [ELSIF..THEN ..]; [ELSE ..]; END IF;
Cuidado con los riesgos de inserción de lógica combinatoria en los caminos de reloj !
process(CK,EC)begin
if (CK'event and CK='1' and EC='1' ) then Q <= D;end if;
end process;
D Q
CK
D
EC
CK
Q
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 94Ver 7.0 Reproduccion prohibida – todos derechos reservados
• IF..THEN ..; [ELSIF..THEN ..]; [ELSE ..]; END IF;
Informaciones complementarias :
• Después de que una condición IF es verdadera, el programa ejecuta las asignaciones relacionadas con la dicha condición, y pasa a la instrucción siguiente al END IF;Las otras condiciones no son analizadas.
• No es necesario enumerar todos lo valores posibles de las señales (cuidado con los latches y valores fijos no deseados, en particular dentro de los process combinatorios ! ).
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 95Ver 7.0 Reproduccion prohibida – todos derechos reservados
• IF..THEN ..; [ELSIF..THEN ..]; [ELSE ..]; END IF;
Ejemplo 4: Latches no deseados
process (A, C )beginif C = '1' then S <= A;end if;
end process;
-- El process es reactivado cuando se produce un cambio -- sobre las señales A o C. Dependiendo, si C pasa de '1' a -- '0', el process es activado, pero la condición C ='1' no es -- verdadera. La asignación S <= A no ocurre nunca, y S conserva su -- antiguo valor. -- Esto se traduce por la realimentación de S sobre la entrada del -- multiplexor, para garantizar el mantenimiento del antiguo valor.
0
1A
C
S
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 96Ver 7.0 Reproduccion prohibida – todos derechos reservados
• IF..THEN ..; [ELSIF..THEN ..]; [ELSE ..]; END IF;
Ejemplo 6 : Valores permanentes asignados a una señal.______________________________________________________________________________________________________
process (A, C)beginif C = '1' then S <= '1';end if;
end process;
-- Un solo valor puede ser asignado a la señal S el valor '1'.-- ninguna condición esta definida para asignar otro valor-- La herramienta de síntesis va por lo tanto a asignar el valor '1’-- independientemente de que la condición de C ='1' sea o no -- verdadera
S
VCC
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 97Ver 7.0 Reproduccion prohibida – todos derechos reservados
• CASE ... END CASE :
Instrucciones que permiten revisar a todos los valores posibles de una señal.
• Todos los casos posibles deben ser enumerados.• Generalmente, el ultimo caso citado engloba todos los casos no citados explícitamente (WHEN OTHERS). • Muy utilizados en la descripción de maquinas de estado y en funciones combinatorias en forma de tabla verdad.
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 98Ver 7.0 Reproduccion prohibida – todos derechos reservados
• CASE ... END CASE;Ejemplo :______________________________________________________________________________________________________
process (A, B, C, D, SEL) begincase SEL is
when "00" => MUX <= A;when "01" => MUX <= B;when "10" => MUX <= C;when others => MUX <= D;
end case;end process;-- WHEN OTHERS permite de citar en el ultimo lugar todos los otros -- casos posibles que no fueron citados precedentemente.-- El símbolo " => " es interpretado como “por lo tanto”.
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 99Ver 7.0 Reproduccion prohibida – todos derechos reservados
• CASE ... END CASE;
Resultados de síntesis
"00", "01", "10"
SEL[1:0]Decodificado de Valores
MUX
A
B
C
D OTHERS
"10"
"01"
"00"
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 100Ver 7.0 Reproduccion prohibida – todos derechos reservados
• IF ... END IF y CASE ... END CASE;IMBRICACIÓN DE IF Y DE CASE . Ejemplo :_____________________________________________________________________________________________________
process ( FASE, ACCION ) begincase FASE iswhen REPOSO => if ACCION = "00" then SALIDA <= "010";
STATUS <= "01";elsif ACCION = "10" then SALIDA <= "011";
STATUS <= "01";else SALIDA <= "000";
STATUS <= "00";end if;
when TRABAJO => if ACCION = "00" then SALIDA <= "100";STATUS <= "10";
else SALIDA <= "101";STATUS <= "00";
end if;when others => SALIDA <= "000"; STATUS <= "00";end case;end process;
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 101Ver 7.0 Reproduccion prohibida – todos derechos reservados
• CASE ... END CASE;
• La instrucción CASE es en particular utilizada en la descripción de maquinas de estado
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 102Ver 7.0 Reproduccion prohibida – todos derechos reservados
VHDLstatemac.vhd
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 103Ver 7.0 Reproduccion prohibida – todos derechos reservados
VHDLstatemac.vhd
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 104Ver 7.0 Reproduccion prohibida – todos derechos reservados
• CODIF ICACIÓN DE LAS MAQUINAS DE ESTADO : • BINARIO u ONE HOT : Dos métodos son frecuentemente utilizados para codificar maquinas de estado :
• Codificación binaria: 3 bits pueden codificar hasta 8 estados4 bits pueden codificar hasta 16 estados...
Para decodificar un estado, es necesario analizar el estado de todos los flip flops• Codificación " one hot " : 1 flip flop par estado. ( un solo flip flops esta activado en cada estado ).Para decodificar un estado, es suficiente analizar la salida del flip flop que representa ese estado.Ejemplo : codificación "one hot" de una maquina de 5 estados :Estado 0 : " 00001 "Estado 1 : " 00010 "Estado 2 : " 00100 "Estado 3 : " 01000 "Estado 4 : " 10000 "
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 105Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Ejercicio : maquina de estados con salidas combinatorias
Lógicacombinatoria
( processcombinatorio )
Registros( process
sincrónico )CK
RST
Salidas(s)Combinatorias
BINGO
Estado Actual(señal interna)
Siguiente Estado(señal interna)
Entrada(s)DATA_IN
VALID
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 106Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Ejercicio : maquina de estados sincrona (1)
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 107Ver 7.0 Reproduccion prohibida – todos derechos reservados
NOTAS.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 108Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Ejercicio : maquina de estados sincrona (2)library IEEE;use IEEE.std_logic_1164.all;
entity STATE is port (A: in STD_LOGIC;
B: in STD_LOGIC;C: in STD_LOGIC;CK: in STD_LOGIC;RST: in STD_LOGIC;S: out STD_LOGIC;T: out STD_LOGIC);
end STATE;
architecture ARCHI of STATE is
type ETAT_type is (S0, S1, S2, S3, S4);signal ETAT: ETAT_type;
begin
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 109Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Exercice : maquina de estados (2)
ETAT_machine: process (CK, RST) beginif RST = ‘1’ then ETAT <= S0; S <= ‘0’; T <= ‘0’; elsif CK'event and CK = '1' thencase ETAT is
when S0 => if A='0' and B='1' then ETAT <= S2; S <= '1'; T <= '1';elsif A='1' and B='0' then ETAT <= S1; S <= '1'; T <= '0';end if;
when S1 => if A='1' and B='1' then ETAT <= S3; S <= '0'; T <= '0';end if;
when S2 => if A='1' and B='1' then ETAT <= S3; S <= '0'; T <= '0';end if;
when S3 => ETAT <= S4; S <= '0'; T <= '1';when S4 => if C='1' then ETAT <= S0; S <= '0'; T <= '0';
end if;when others => null; -- when others => ETAT <= S0; S <= ‘0’; T <= ‘0’;
-- No es una buena idea usar el « when others => null»
end case;end if;
end process;
end ARCHI;
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 110Ver 7.0 Reproduccion prohibida – todos derechos reservados
• FOR ... LOOP :• Ejemplo 1 :
_______________________________________________________________________________________________
process (CNT) variable TMP : integer range 0 to 32;
begin TMP := 0;for I in CNT'range loop
if CNT(I) = '1' then TMP := TMP + 1;end if;
end loop;VALOR <= TMP;end process;
-- este código permite contar el número bits en '1' sobre un bus de -- 32 bits. Puede según las herramientas y sus opciones generar -- incrementadores en cascada
Variable inicializada en cada llamado al process !
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 111Ver 7.0 Reproduccion prohibida – todos derechos reservados
• FOR ... LOOP : Ejemplo 3 :
________________________________________________________________________________________________
library IEEE; use IEEE.STD_LOGIC_1164.all;use IEEE.STD_LOGIC_UNSIGNED.all;entity CONTADOR isport ( CK, ENABLE : in std_logic;
QOUT : out std_logic_vector(7 downto 0);TERM_CNT : out std_logic );
end CONTADOR;architecture ARCHI of CONTADOR issignal COUNT : std_logic_vector(7 downto 0); beginprocess beginwait until CK'event and CK='1';
if ENABLE='1' then COUNT <= COUNT + 1;end if;
end process;QOUT <= COUNT; -- ver continuación en pagina siguiente ---->
Importante !!!
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 112Ver 7.0 Reproduccion prohibida – todos derechos reservados
• FOR ... LOOP :• Ejemplo con utilización de una variable :
________________________________________________________________________________________________
process (COUNT) -- process combinatoriovariable TEMP : std_logic; -- parte declaratoria
beginTEMP := '1'; -- valor inicial de TEMP
-- en el inicio del buclefor I in COUNT'range loop -- nombre iteracionesTEMP := TEMP and COUNT(I); -- igual al número de bits
end loop; -- presentes en el vector COUNT;TERM_CNT <= TEMP; -- Después de la ultima iteración,
-- el valor de TEMP es asignado a la señal TERM_CNT;end process;
end ARCHI;
• La variable TEMP no es visible al exterior del process. Ella sirve de artificio de cálculo para la generación de la señal TERM_CNT ya que esta toma su valor al final del process.
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 113Ver 7.0 Reproduccion prohibida – todos derechos reservados
• FOR ... LOOP
Resultados de síntesis
COUNT(0) COUNT(1) COUNT(2) COUNT(3) COUNT(4) COUNT(5) COUNT(6) COUNT(7)
TERM_CNT
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 114Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Instrucciones concurrentes y secuenciales :• Ejercicio :
• Implementación del diseño siguiente :
-- SEÑALES A DECLARAR EN LA ENTIDAD :
-- ENTRADAS Y SALIDASDATA : inout std_logic_vector(7 downto 0);AEQB_R, TC_R : out std_logic;
-- SEÑALES DE CONTROLWA, WB, WR_B : in std_logic;RDA_B, RDB_B, READ_B : in std_logic;LOAD, ENA : in std_logic;ICK : in std_logic;
READ_B
D Q
CE
CK
RDA_B
WA
CK
D Q
CE
CK
RDB_B
WB
CK
WR_B
DBUS (interno)DATA(inout)
DIN(interno)
REGISTRO REGISTRO
D CNT
LD
EC
CK TC
LOAD
ENA
CK
CONTADORCARGABLE
A
B
COMPARADOR
A=B
REGB
REGA CNT
IOBs
CK
A_EQ_BD Q
AEQB_R
IOB
-- SEÑALES INTERNAS :signalDBUS, REGA, REGB, CNT : std_logic_vector(7 downto 0);A_EQ_B, TERM_CT : std_logic;-- según estrategia utilizada
CK
TERM_CTD Q
TC_R
IOB
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 115Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Este diseño representa una interconexión bi-direccional 8 bits con un microprocesador.• Dos registros de 8 bits, REGA y REGB pueden ser escritos en el flanco de subida del reloj, según la validación de WA y de WB.• Para esto, los datos presentes sobre DATA, son transmitidos al bus DBUS cuando la señal WR_B es activa (a '0').• Por la activación de las señales RDA_B y RDB_B, los datos de REGA o REGB son transmitidos sobre el bus interno DBUS, después sobre DATA, gracias a la señal READ_B.• El registro REGA permite cargar un contador donde la salidas son comparadas con el valor de REGB para obtener la señal A_EQ_B.• La salidas del comparador (A_EQ_B) y la cuenta final del contador (TERM_CT) son sincronizados antes ser enviados a las salidas (AEQB_R y TC_R).
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 116Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Para este diseño, utilizar las instrucciones siguientes :• Para los registros : process sincrónicos con utilización del clock enable dedicado de las Flip-Flops.• Para el contador :
• Process sincrónico con utilización del clock enable dedicado, para la parte contador;• Process combinatorio con la instrucción LOOP para la generación del TERM_CT ( cuenta terminal ).
• Para los buffers tri-state, Instrucción GENERATE con WHEN ELSE. • Para el comparador de registros dos soluciones:
• Process sincrónico ( en este caso, la declaración de la señal A_EQ_B no se usa ).• WHEN ELSE para generación de A_EQ_B, + process sincrónico para los FF de salidas.
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 117Ver 7.0 Reproduccion prohibida – todos derechos reservados
Notas.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
.............................................................................................................
......................... ......................... ......................... ......................... .....
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 118Ver 7.0 Reproduccion prohibida – todos derechos reservados
Gestión de la jerarquíay
VHDL estructural
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 119Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Gestión de la jerarquía ( VHDL estructural ) :• Se effectua conectando entre si varios módulos.( similar con una netlist ).• Estilo de escritura bautizado VHDL estructural.• La operación que permite llamar a un modulo ( o caja negra ) se llama INSTANCIACIÓN.• Los elementos lógicos ( puertas, Flip-Flops ... ) generados por las herramientas de síntesis a partir de un código tipo RTL son llamados INFERIDOS ( noción de inferencia ). • Un mismo fichero VHDL puede contener a la vez código estructural ( instancias ), y código de comportamiento o RTL ( inferencia ).
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 120Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Gestión de la jerarquía y VHDL estructural :• En síntesis Lógica, las instancias son utilizadas para :
• Gestión de la jerarquía ( el diseño es partido en varios elementos).• Uso de elementos pre-optimizados para la arquitectura en usada ( macro funciones o primitivas ).
• Ventajas e inconvenientes de las instancias de módulos específicos optimizados:
• Permiten acceder a detalles de arquitectura no necesariamente accesibles desde la herramienta de síntesis.( Ej : memoria SRAM en las familias XC4000E y XC4000XL, decodificadores rápidos... )• Limita la portabilidad de los diseños entre las arquitecturas.
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 121Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Gestión de la jerarquía y VHDL estructural :• Condicionado automático de las instancias modulares :
En ciertas condiciones, el ancho del bus de las instancias modulares puede ser ajustado en forma automática para cada instancia. Para esto los módulos deben cumplir las siguientes condiciones:
• Ser concebidos en forma genérica ( código independiente del ancho del bus utilizado ver GENERICO ).• Ser visibles por la herramienta de síntesis, durante la compilación, al nivel jerárquico superior .
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 122Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Gestión de la jerarquía y VHDL estructural :• Reglas a observar para la instancia de un componente :
• Declaración de la instancia. ( dentro la parte declaratoria de la arquitectura , o dentro un package ).• La declaración de los componentes necesitan la lista de puertos los que se describen dentro de la entidad del modulo correspondiente.• La asignación de las señales del componente ( modos posicionales y asociativos).• Cada instancia de un componente debe estar precedido por una etiqueta única .
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 123Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Gestión de la jerarquía y VHDL estructural :• Ejemplo de instancia :
______________________________________________________________________________________________
entity STRUCT isport ( IA, IB, IC, ID : in std_logic_vector(7 downto 0);
SELECT : in std_logic_vector(0 to 1);CLK, ENABLE, RESET : in std_logic;QOUT : out std_logic_vector(7 downto 0));
end STRUCT;
architecture ARCHI of STRUCT is
-- declaraciones de señales internes y componentes signal MXE, MXF, MXG : std_logic_vector(7 downto 0);
component M2_1 port (A, B : in std_logic_vector(7 downto 0);
SEL : in std_logic; MX : out std_logic_vector(7 downto 0));end component;
component REGISport (DIN : in std_logic_vector(7 downto 0);
CK, ENA, RST : in std_logic;REGOUT : out std_logic_vector(7 downto 0);SPARE : out std_logic);
end component;
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 124Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Gestión de la jerarquía y VHDL estructural :• Ejemplo de instancia ( modo asociativo) :
______________________________________________________________________________________________
beginU1 : M2_1 port map
(A => IA, B => IB, -- nombre del pin, seguido del símboloSEL => SELECT(0), -- " => " y del nombre del señal conectada MX => MXE); -- Las diferentes parejas pin/señal
-- son separadas por una coma. El orden de asignación de los pines-- a las señales no tiene importancia.U2 : M2_1 port map
(SEL => SELECT(0),A => IC, B => ID,MX => MXF);
U3 : M2_1 port map (A => MXE, B => MXF,SEL => SELECT(1),MX => MXG);
U4 : REGIS port map(DIN => MXG, CK => CLK, ENA => ENABLE, RST => RESET, REGOUT => QOUT,SPARE => open);
end ARCHI;
RESET
ENABLE
CLK
MXE[7:0]
MXF[7:0]
MXG[7:0]
IA[7:0]
IB[7:0]
IC[7:0]
ID[7:0]
ASEL MXB
M2_1
SELECT(0)
ASEL MXB
M2_1
SELECT(0)
ASEL MXB
M2_1
SELECT(1)
U1
U2
U3
DIN
REGOUT
RST
ENA
CK
QOUT[7:0]
U4
REGIS
SPARE
palabra clave !
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 125Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Gestión de la jerarquía y VHDL estructural :• Ejemplo de instancia ( modo posicional ) :
______________________________________________________________________________________________
beginU1 : M2_1 port map
(IA, IB, -- La asignación de las señales a los pines SELECT(0), -- del componente, se hace en relación a la MXE); -- de la posición de cada pin en la declaración
-- del componente
U2 : M2_1 port map (IC, ID,SELECT(0),MXF);
U3 : M2_1 port map (MXE, MXF,SELECT(1),MXG);
U4 : REGIS port map(MXG, CLK, ENABLE, RESET, QOUT, open );
end ARCHI;
RESET
ENABLE
CLK
MXE[7:0]
MXF[7:0]
MXG[7:0]
IA[7:0]
IB[7:0]
IC[7:0]
ID[7:0]
ASEL MXB
M2_1
SELECT(0)
ASEL MXB
M2_1
SELECT(0)
ASEL MXB
M2_1
SELECT(1)
U1
U2
U3
DIN
REGOUT
RST
ENA
CK
QOUT[7:0]
U4
REGIS
SPARE
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 126Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Gestión de la jerarquía y VHDL estructural :• Ejemplo de instanciación de memoria sincrónica :( RAM16x1s - 16 x 1 bit, sincrónica )
____________________________________________________________________________________________
library IEEE; use IEEE.std_logic_1164.all;entity MEMO_TRI is -- Modulo de memoria 16 x 6. port ( ADR : in std_logic_vector(3 downto 0);
DIN : in std_logic_vector(5 downto 0);WR, READ_B, CK : in std_logic;DOUT : out std_logic_vector(5 downto 0));
end MEMO_TRI;architecture ARCHI of MEMO_TRI issignal INT : std_logic_vector(5 downto 0); component RAM16x1s port (A3, A2, A1, A0, D, WE, WCLK : in std_logic;
O : out std_logic); end component;beginGENE : for I in DIN'range generateUA : RAM16x1S port map (
A3 => ADR(3), A2 => ADR(2), A1 => ADR(1), A0 => ADR(0),D => DIN(I), WE => WR, WCLK => CK, O => INT(I));DOUT(I) <= INT(I) when READ_B ='0' else 'Z'; -- salidas tri-state
end generate;end ARCHI;
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 127Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Gestión de la jerarquía y VHDL estructural :• Ejemplo de instanciación de memoria sincrónica :( RAM16x1s - 16 x 1 bit, sincrónica )
______________________________________________________________________________________________
INT(5)
INT(4)
INT(3)
A3A2A1A0DWEWCLK RAM16x1S
O
A3A2A1A0DWEWCLK RAM16x1S
O
A3A2A1A0DWEWCLK RAM16x1S
O
ADR(3)ADR(2)ADR(1)ADR(0)DIN(5)
WRCK
ADR(3)ADR(2)ADR(1)ADR(0)DIN(4)
WRCK
ADR(3)ADR(2)ADR(1)ADR(0)DIN(3)
WRCK
GENE/UA4
GENE/UA5
GENE/UA3
INT(2)
INT(1)
INT(0)
A3A2A1A0DWEWCLK RAM16x1S
O
A3A2A1A0DWEWCLK RAM16x1S
O
A3A2A1A0DWEWCLK RAM16x1S
O
ADR(3)ADR(2)ADR(1)ADR(0)DIN(2)
WRCK
ADR(3)ADR(2)ADR(1)ADR(0)DIN(1)
WRCK
ADR(3)ADR(2)ADR(1)ADR(0)DIN(0)
WRCK
GENE/UA2
GENE/UA1
GENE/UA0
DOUT(5)
DOUT(4)
DOUT(3)
DOUT(2)
DOUT(1)
DOUT(0)
READ_B
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 128Ver 7.0 Reproduccion prohibida – todos derechos reservados
Atributos
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 129Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Atributos frecuentemente utilizados en síntesis :• Propietarios asignados a un type, a un objeto ( señal, variable o constante ) o a una entidad• Atributos definidos en VHDL :
LEFT -- valor del índice izquierdo RIGHT -- valor del índice derechoHIGH -- índice de valor mas elevado LOW -- índice de valor mas bajoLENGTH -- número de elementos ( para un vector )RANGE -- rango de índices de un vectorREVERSE_RANGE -- inverso ,,EVENT -- evento sobre un objeto
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 130Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Atributos frecuentemente utilizados en síntesis :• Ejemplos de atributos definidos :signal DATA : std_logic_vector (15 downto 8);signal SELECTOR : std_logic_vector(2 to 5);
DATA'high -- = 15DATA'low -- = 8SELECTOR'high -- = 5SELECTOR'low -- = 2DATA'right -- = 8DATA'left -- = 15SELECTOR'right -- = 5SELECTOR'left -- = 2DATA'length -- = 8SELECTOR'length -- = 4DATA'range -- = range 15 downto 8DATA'reverse_range -- = range 8 to 15SELECTOR'range -- = range 2 to 5SELECTOR'reverse_range -- = range 5 downto 2
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 131Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Atributos frecuentemente utilizados en síntesis :
• Ejemplos de atributos definidos ( cont ) :
signal CK : std_logic;
CK'event -- evento sobre la señal CK-- flanco de subida o bajada
CK'event and CK = '1';--flanco de subida en CK
CK'event and CK = '0';--flanco de bajada en CK
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 132Ver 7.0 Reproduccion prohibida – todos derechos reservados
Código Genérico
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 133Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Código Genérico :• Ancho de bus paramétrico: VHDL permite de definir dentro de la entidad el ancho de bus
por defecto, ajustable en la instancia del componente dentro de un módulo de nivel jerárquico superior.
• Valor por defecto especificado dentro de la entidad. Este valor podrá ser cambiado durante la instanciación del
elemento por un código de nivel jerárquico superior.• Ejemplo de declaración genérica de port :___________________________________________________________________________________________
entity CONTADOR isgeneric ( M : integer := 8 );port ( CK, ENA : in std_logic;
CNT :out std_logic_vector( M-1 downto 0));end CONTADOR;
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 134Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Código genérico :• Ejemplo de declaración genérica de port (cont) :___________________________________________________________________________________________
library IEEE; use IEEE.STD_LOGIC_1164.all;use IEEE.STD_LOGIC_UNSIGNED.all;entity CONTADOR isgeneric ( M : integer := 8 );port ( CK, ENA, RST : in std_logic;CNT : out std_logic_vector(M-1 downto 0)); -- CNT est une salidas pure
end CONTADOR;architecture ARCHI of CONTADOR issignal COUNT : std_logic_vector(M-1 downto 0); beginprocess(CK, RST) begin -- todos los bits de COUNT son puestos a '0' al reset.if RST = '1' then COUNT <= (others => '0'); -- ver agregadoselsif CK'event and CK='1' then
if ENA = '1' then COUNT <= COUNT + 1; end if;end if;
end process;CNT <= COUNT; -- CNT recibe su asignación fuera del process para evitar end ARCHI; -- un segundo nivel de Flip-Flops !!!
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 135Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Código genérico:• Instancia de un elemento genérico:
• La instancia ( pareja entidad/arquitectura ) debe estar visible por la herramienta de síntesis al momento de la compilación.• El ancho de los bus debe estar definido por medio de un valor declarado “GENERIC" con el fin de poder ser redefinido durante la instanciación .
Es por supuesto posible sintetizar por separado cada elemento de diseño. En este caso, cada elemento será sintetizado con sus valores por defecto.
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 136Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Código genérico :• Ejemplo de instanciación de un componente genérico:___________________________________________________________________________________________
entity COUNTERS isgeneric ( T : integer := 12); port ( CK, ENA1, ENA2, RESET : in std_logic;
MAX : out std_logic_vector(T-1 downto 0));end COUNTERS;
architecture ARCHI of COUNTERS issignal COUNT1, COUNT2 : std_logic_vector(T-1 downto 0);component CONTADORgeneric ( M : integer );port ( CK, ENA, RESET : in std_logic;
CNT :out std_logic_vector(M-1 downto 0));end component;beginU1 : CONTADOR generic map ( M => T) port map (
CK => CK, ENA => ENA1, RST => RESET, CNT => COUNT1 );U2 : CONTADOR generic map ( M => T) port map (
CK => CK, ENA => ENA2, RST => RESET, CNT => COUNT2 );MAX <= COUNT1 when COUNT1 > COUNT2 else COUNT2;end ARCHI;
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 137Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Código genérico :
• AGREGADOS : VHDL permite asignar un valor a un vector ( BUS) de la forma siguiente : _________________________________________________________________________________________________
signal DIV, SIG : STD_LOGIC_VECTOR(7 downto 0);signal TRI_ST, B : STD_LOGIC_VECTOR(13 downto 0);signal TODO_ZERO : STD_LOGIC_VECTOR(9 downto 0);signal TODO_UNO : STD_LOGIC_VECTOR(33 downto 0);begin
DIV <= SIG when A ='0' else(3 =>'1', 4 to 7 =>'0', others => 'Z');
TRI_ST <= B when A = '0' else (others => 'Z');TODO_ZERO <= ( others => '0' ); TODO_UNO <= ( others => '1' );
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 138Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Código genérico : AGREGADOS :_________________________________________________________________________________________________
DIV <= SIG when A = '0' else( 3 =>'1', 4 to 7 =>'0', others => 'Z' );
______________________________________________________________________________________________________
TRI_ST <= B when A = '0' else ( others => 'Z');
______________________________________________________________________________________________________
TODO_ZERO <= ( others => '0' ); ______________________________________________________________________________________________________
TODO_UNO <= ( others => '1' );
TODO_ZERO[9:0]
TODO_UNO[33:0]VCC
A
SIG[2:0] DIV[2:0]
A
B TRI_ST[13:0]
SIG[7:4] DIV[7:4]
SIG(3)A
VCC
DIV(3)
others => 'Z'
3 => '1'
4 to 7 => '0'
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 139Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Código genérico : ARRAYS ( TABLAS )
• Es posible definir tablas de objetos en dos dimensiones.• Ejemplos :
architecture ARCHI of TABLA is
type MEMORIA is array(0 to 15) of std_logic_vector(7 downto 0);
signal MEM : MEMORIA; -- 16 bytes de memoria
begin ....
architecture ARCHI of TABLA is
subtype BYTE is std_logic_vector(7 downto 0);type MEMORIA is array(0 to 15) of BYTE;-- 16 bytes de RAMsignal MEM : MEMORIA;
begin ....
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 140Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Código genérico : ARRAYS ( TABLAS )Implementación de una tabla memoria con acceso en escritura y en lectura independientes ( de doble acceso y con escritura sincrónica ) :
library IEEE; use IEEE.std_logic_1164.all;
entity MYRAM is
generic(DATA : integer := 6;-- Ancho bus de datosADR : integer := 4);-- Ancho bus de direcciones
port ( DIN : in std_logic_vector(DATA-1 downto 0);CK : in std_logic;ADI, ADO : in integer range 0 to (2**ADR)-1 ;SALIDA : out std_logic_vector(DATA-1 downto 0));
end MYRAM;
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 141Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Código genérico : ARRAYS ( TABLA ) contarchitecture ARCHI of MYRAM is
subtype WORD is std_logic_vector(DATA-1 downto 0);type MEMORIA is array(0 to (2**ADR)-1) of WORD; signal MEM : MEMORIA;
beginprocess(CK) beginif CK='1' and CK'event thenMEM(ADI) <= DIN; -- El elemento apuntado por ADI
end if; -- recibe el dato DIN.end process;
BLABLO : for I in 0 to (2**ADR)-1 generateSALIDA <= MEM(I) when ADO = I else (others => 'Z');
end generate; -- multiplexor de lectura por buffers-- tri_state
end ARCHI;
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 142Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Código genérico : Informaciones complementarias :• Instrucción condicional: IF condición GENERATE :
• Sintaxis :LABEL : if CONDICION generate
--Instrucciones concurrentes...end generate;
• Las Instrucciones concurrentes no serán tomadas en consideración si la condición " CONDICION " no es verdadera.• Esta forma de escritura permite pasar los parámetros de síntesis a travéz de la jerarquía, y de hacer variar las directivas de síntesis según que la condición boleana sea verdadera o no.( ver archivos CALL_RAM y MEME_TM siguientes).
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 143Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Código genérico : Informaciones complementarias :Instrucción condicional : IF condición GENERATE :
• Ejemplo operador de rotación:entity GENE isgeneric(N : integer := 8);port (DIN : in std_logic_vector(N-1 downto 0);
CK : in std_logic;QOUT : out std_logic_vector(N-1 downto 0)); end GENE;
architecture ARCHI of GENE iscomponent FLIP_FLOP port(
D, CK : in std_logic;Q : out std_logic); end component;
beginGENA : for I in QOUT'range generateGENB : if I = 0 generate
U1 : FLIP_FLOP port map(DIN(N-1), CK, QOUT(I));end generate;GENC : if I /= 0 generate
U2 : FLIP_FLOP port map(DIN(I-1), CK, QOUT(I));end generate;
end generate;end ARCHI;
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 144Ver 7.0 Reproduccion prohibida – todos derechos reservados
Los sub-programasFunciones y procedimientos
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 145Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Funciones :• Sub-programa pudiendo ser llamado una o varias veces por el programa principal. Permite organizar el código separando las partes repetidas.
• Una función necesita un o mas parámetros de entrada y regresa un valor.• Ejemplo :______________________________________________________
function BOOL_TO_BIT ( A : in boolean ) return STD_LOGIC isbegin
if A then return '1'; else return '0';end if;
end BOOL_TO_BIT;
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 146Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Funciones :• Una función debe estar declarada antes de ser utilizada. Ejemplo :______________________________________________________
library IEEE;use IEEE.STD_LOGIC_1164.ALL;entity FUNCION isport ( ENTRADA : in boolean; B : in STD_LOGIC;
C : out STD_LOGIC); end FUNCION;architecture ARCHI of FUNCION isfunction BOOL_TO_BIT (A : in boolean) return STD_LOGIC isbegin
if A then return '1'; else return '0'; end if;end BOOL_TO_BIT;
beginC <= B and BOOL_TO_BIT(ENTRADA);end ARCHI;
Declaración
Llamado
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 147Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Funciones :
• Las funciones usan el juego de las instrucciones secuenciales .• Los parámetros (entradas) de la función son enteramente genéricos. Ex :
function COSA ( ABUS : in std_logic_vector) return boolean is
• Variables locales pueden ser declaradas • Las variables declaradas dentro una función son reinicializadas a cada llamado.
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 148Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Funciones :• Las Funciones pueden estar declaradas dentro de la parte declaratoria de la arquitectura o dentro un package.• Utilizadas para efectuar las conversiones de datos ( Ex : std_logic_vector a integer ), u operaciónes lógicas y aritméticas diversas ...• Los operadores " + ", " - " , " = " ... son definidos por funciones.• Las funciones pueden ser re-definidas (sobrecargadas) con el fin por ejemplo de ser aplicables a tipos de datos no previstos inicialmente. Por ejemplo :
• El package STD_LOGIC_UNSIGNED re-define los operadores aritméticos y relacionales para las ser aplicables al tipo STD_LOGIC_VECTOR.
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 149Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Funciones : Ejemplo de sobrecarga de funciones (operador "+" para sumas entre STD_LOGIC_VECTOR y enteros)function "+" ( A : std_logic_vector; B : integer)
return std_logic_vector is variable INT_A : integer range 0 to ((2**(A'high+1))-1);variable STD_OUT : std_logic_vector(A'range);beginINT_A := 0;for I in A'range loopif A(I) = '1' then INT_A := INT_A + 2**I; else INT_A := INT_A;end if; -- este bucle convierte el vector a entero
end loop;INT_A := INT_A + B; -- suma de 2 enterosfor J in A'reverse_range loopif INT_A rem 2 = 1 then STD_OUT(J) := '1'; else STD_OUT(J):='0';end if; INT_A := INT_A / 2; end loop; -- conversión del entero INT_A en std_logic_vectorreturn STD_OUT; -- el valor retornado es un std_logic_vector
end;
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 150Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Procedimientos :
• Sub-programa puede ser llamado una o varias veces desde el programa principal. • Un procedimiento puede tener como parámetros objetos en modo in, out o inout.( como un "component ", pero la el tamaño de los parámetros siempre es genérico).• Los procedimientos usan el juego de Instrucciones secuenciales .• Variables locales pueden ser estar declaradas. Estaran re-iniciadas a cada llamado del procedimiento.
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 151Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Procedimientos : Ejemplo 1:_______________________________________________library IEEE;use IEEE.STD_LOGIC_1164.all;entity PROCED isport ( A, B : in STD_LOGIC_VECTOR(9 downto 0);
SALIDA : out STD_LOGIC_VECTOR(9 downto 0));end PROCED;
architecture ARCHI of PROCEDU isprocedure MIN(signal L, M : in STD_LOGIC_VECTOR;
signal S : out STD_LOGIC_VECTOR) isbegin
if L < M then S <= L; else S <= M; end if;end MIN;
begin
MIN(A, B, SALIDA);
end ARCHI;Llamado
Especificación de la clase de objeto (señales y constantes)
Declaración de procedimiento
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 152Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Procedimientos : Ejemplo 2 :Vector de DFF con Reset asincrónico y Load
_______________________________________________
procedure DFFARL_V ( signal DIN: in std_logic_vector;signal RESET : in std_logic;signal CLK : in std_logic;signal LOAD : in std_logic;signal DOUT : out std_logic_vector) is
beginif RESET = '1' then -- RESET asincrónico
for I in DIN'range loopDOUT(I) <= '0';
end loop; elsif (CLK'event and CLK = '1') then
if LOAD = '1' then DOUT <= DIN; end if ;
end if ;end DFFARL_V;
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 153Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Procedimiento : Ejemplo 2 ( cont )Vector de DFF con Reset asincrónico y Load
_______________________________________________
architecture ARCHI of DFF_EJEMPLO isbegin
-- Asignación de parámetros por posiciónDFFARL_V ( DATA_IN, RST, CK, ENABLE, QOUT);
-- Asignación de parámetros por asociaciónDFFARL_V ( DIN => DATA_IN,
RESET => RST,CLK => CK,LOAD => ENABLE,DOUT => QOUT );
end ARCHI;
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 154Ver 7.0 Reproduccion prohibida – todos derechos reservados
Packages
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 155Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Packages(s) : Colección(es) de sub-programas ( Funciones y/o procedimientos, componentes, constantes, tipos... )
• Permiten de separar une parte del código.• Pueden limitar la portabilidad hacia otras herramientas.• Están constituidos por 2 porciones distintas:
• PACKAGE : declaración de los elementos que forman el package en si mismo.• PACKAGE BODY : código de los diferentes elementos del package.
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 156Ver 7.0 Reproduccion prohibida – todos derechos reservados
• EJEMPLOs de packages (packages ):
• STD_LOGIC_1164 : Contiene en particular las definiciones relativas a los tipos STD_LOGIC y STD_LOGIC_VECTOR.
• STD_LOGIC_UNSIGNED : Contiene las definiciones de ciertas operaciónes relacionales y aritméticas entre STD_LOGIC_VECTORs , STD_LOGIC_VECTOR y enteros.
• packages "usuario" agrupados dentro la biblioteca " WORK ".• Utilización de un package local por las sentencias :
"USE nombre_biblioteca.nombre_package.all;"
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 157Ver 7.0 Reproduccion prohibida – todos derechos reservados
EJEMPLO de package :library ieee; use ieee.std_logic_1164.all;
package CONVERT is -- declaracion de los elementos del Packagefunction TO_INT(A : in std_logic_vector) return integer;function TO_VEC(A : in integer; B : in std_logic_vector) return std_logic_vector;end CONVERT;
package body CONVERT is -- descripcion de las Funciones, procedimientos...function TO_INT(A : in std_logic_vector) return integer isvariable TMP : integer range 0 to (2**(A'high+1)-1); begin TMP := 0;for i in A'range loopif A(i)='1' then TMP := TMP + (2**i); end if; end loop; return TMP;
end TO_INT;
function TO_VEC(A : in integer; B : in std_logic_vector) return std_logic_vector isvariable TMP : std_logic_vector(B'high downto 0);variable INT : integer; begin INT := A; TMP := (others => '0');for i in 0 to B'high loopif (INT rem 2)=1 then TMP(i) := '1';else TMP(i) := '0'; end if;INT := INT / 2;end loop; return TMP;
end TO_VEC;end CONVERT;
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 158Ver 7.0 Reproduccion prohibida – todos derechos reservados
EJEMPLO de utilización de un package :library ieee; use ieee.std_logic_1164.all;library work; use work.CONVERT.all;entity COMPA isport ( C : in std_logic_vector(11 downto 0);
D : in integer range 0 to 8191;SALIDA : out std_logic_vector(11 downto 0);VENTANA : out std_logic );
end COMPA;architecture ARCHI of COMPA isbeginprocess(C) begincase TO_INT(C) iswhen 503 to 4093 => VENTANA <= '1';when others => VENTANA <= '0';
end case;end process;
SALIDA <= TO_VEC((TO_INT(C) + D), C );
end ARCHI;Conversión de C en entero
Parámetro A (entero) de la función TO_VEC
Parámetro B (std_logic_vector) de la función TO_VEC
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 159Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Creación de una biblioteca personalizada :• Puede contener 1 o varios packages.• Cada package puede contener :
• Las declaraciones de componentes• Las declaraciones de constantes• Las declaraciones de tipos y sub-tipos• Las declaraciones de funciones y procedimientos
• La biblioteca puede igualmente contener componentes ( parejas entidad/arquitectura ), genéricas o no.• Ver ejemplo en paginas siguientes.
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 160Ver 7.0 Reproduccion prohibida – todos derechos reservados
Simulation y modelizacion en VHDL
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 161Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Presentacion generalLas construcciones sintetizables pueden ser utilizadas en simulacion.
En simulacion podremos usar todavis mas posibilidades del lenguaje.
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 162Ver 7.0 Reproduccion prohibida – todos derechos reservados
Ejemplos de construcciones simulables que no pueden ser usadas en sintesisSIGNAL_A <= ‘1’, ‘0’ after 100 ns;-- El tiempo no se sintetisa. En cambio-- un simulador podra tomar en cuenta-- las instrucciones “after”.-------------------------------------------------process(CK) beginif CK’event then
CNT <= CNT + 1;end if;
end process;-- Este process usa los 2 flancos del reloj (lo cual -- no se entiende en sintesis
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 163Ver 7.0 Reproduccion prohibida – todos derechos reservados
El Testbench
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 164Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Que es un Testbench ?
El testbench permite crear un conjunto de simulacion para nuestro diseño
Permite aplicar patterns a las entradas y capturar resultados
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 165Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Que es un Testbench ?
FPGA
simulado
ArchitecturaDel Testbench
Entidad del testbench
Patterns de
simulacion
captura de
resultados
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 166Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Que es un Testbench ?
FPGA
simulado
ArchitecturaDel Testbench
Entidad del testbench
Patterns de
simulacion
captura de
resultados
Otro componente
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 167Ver 7.0 Reproduccion prohibida – todos derechos reservados
• La entidad del testbench :la entidad del testbench no lleva ports
library IEEE;use IEEE.STD_LOGIC_1164.all;
entity TESTBENCH is end TESTBENCH;
architecture ARCHI_SIMU of TESTBENCH is…
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 168Ver 7.0 Reproduccion prohibida – todos derechos reservados
• La entidad del testbench :En cambio, sera posible definir genericos. Ejemplo :entity TESTBENCH isgeneric(PERIOD : time := 25.0 ns);end TESTBENCH ;
Architecture ARCHI_SIMU of TESTBENCH is.. beginprocess begin
CLK <= '1';wait for PERIOD /2;CLK <= '0';wait for PERIOD /2;
end process;...
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 169Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Acceso en lectura y/o escritura a archivos ASCII
Entidad del testbench
FPGA
simulado
ArchitecturaDel Testbench
stimuli captura
Ficherosde vectoresde test
Ficherosde
résultado
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 170Ver 7.0 Reproduccion prohibida – todos derechos reservados
Instrucciones utilizablesen simulacion
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 171Ver 7.0 Reproduccion prohibida – todos derechos reservados
- Retrasos- Esperas- Bucles - Tipos de datos- Operadores- Acceso a archivos ASCII
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 172Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Retrasos : AFTER RST <= ‘1’, ‘0’ after 100ns, ‘1’ after 1000ns, ‘0’ after 1100ns;-- el timing se indica relativamente al instante 0
DATA <= “01011100”, “00110011” after 150ns;
S <= A and B after 25ns;
25ns 25ns
Pulso < 25ns
ABS
Salida filtrada
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 173Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Retrasos : TRANSPORT Permite anular la inercia de « After »
S <= transport (A and B) after 25ns;
25ns 25ns
Pulso < 25ns
ABS
La salida no esta filtrada
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 174Ver 7.0 Reproduccion prohibida – todos derechos reservados
•Esperas : WAIT instruccion secuential (se usa en los process y sub-programas)
• La instruccion WAIT es incopatible con la lista de sensibilidad (los dos son exclusivos)• Distintos tipos de WAIT
WAIT UNTIL CONDICION;
WAIT FOR TIEMPO;
WAIT ON NOMBRE_DE_SEÑAL;
WAIT; -- suspende definitivamente la ejecucion -- del process
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 175Ver 7.0 Reproduccion prohibida – todos derechos reservados
• WAIT UNTIL (1):
process beginwait until CK’event and CK = ‘1’;if ENABLE = ‘1’ then
ACCUM <= ACCUM + DIN;end if;
end process;
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 176Ver 7.0 Reproduccion prohibida – todos derechos reservados
• WAIT UNTIL (2):
process beginwait until (A and B) = ‘1’;BUS_A <= BUS_B or BUS_C;wait until (A xor B) = ‘1’;BUS_A <= BUS_B xor BUS_C;wait;
end process;
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 177Ver 7.0 Reproduccion prohibida – todos derechos reservados
• WAIT FOR :
-- generacion de un reloj
process beginCK <= ‘1’;wait for 50 ns;CK <= ‘0’;wait for 50 ns;
end process;
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 178Ver 7.0 Reproduccion prohibida – todos derechos reservados
• WAIT ON :
IRQ <= TIMER(15);process begin
CLEAR_IRQ <= ‘0’;wait on IRQ;CLEAR_IRQ <= ‘1’;wait for 50ns;
end process;
No hay lista de sensibilidad
Esperamos un cambio de valor en la señal IRQ
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 179Ver 7.0 Reproduccion prohibida – todos derechos reservados
• WAIT ON :
IRQ <= TIMER(15);process begin
CLEAR_IRQ <= ‘0’;wait on IRQ;CLEAR_IRQ <= ‘1’;wait for 50ns; CLEAR_IRQ <= ‘0’;wait;
end process;
Suspende definitivamente el process
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 180Ver 7.0 Reproduccion prohibida – todos derechos reservados
Bucles
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 181Ver 7.0 Reproduccion prohibida – todos derechos reservados
• LOOP :(se usa en los process)
for … loop …end loop;---------------------------
while … loop …end loop;---------------------------
loop … exit when …end loop;
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 182Ver 7.0 Reproduccion prohibida – todos derechos reservados
• FOR... LOOP :• Largement utilisé en synthèse logique.
process(CK) beginif CK’event and CK = ‘1’ thenBUCLE : for I in DATA’RANGE loop
DATA_SWAP(I) <= DATA(DATA’high - I);end loop;
end if;end process;
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 183Ver 7.0 Reproduccion prohibida – todos derechos reservados
• WHILE… LOOP :architecture TB of TESTBENCH issignal DIN : std_logic_vector(7 downto 0) := (others => ‘0’); ---beginprocess
variable I : integer range 0 to 2**DIN’high-1;begin
I := 0;BUCLE : while (A < B) loop
DIN <= SOURCE + I;I := I + 1;wait for 20 ns; -- importante adelantar el tiempo
end loop;wait; -- suspension del process end process;
end process;
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 184Ver 7.0 Reproduccion prohibida – todos derechos reservados
• LOOP … EXIT WHEN :
processbeginDBUS <= (others => ‘0’);wait for 20 ns;BUCLE : loopexit when A > B; -- esperamos esta
-- condicion para salirDBUS <= DBUS + 1; wait for 20 ns;
end loop;wait;
end process;
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 185Ver 7.0 Reproduccion prohibida – todos derechos reservados
Acceso a los archivos ASCII
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 186Ver 7.0 Reproduccion prohibida – todos derechos reservados
VHDL permite acceder en lectura y escritura a archivos ASCIILa manipulacion de archivos implica la declaracion de la libreria STD, y del package TEXTIO.Este package permite-Abrir y cerrar un archivo-Escribir -Leer-Buscar la ultima linea de un archivo
Nota : el package TEXTIO no soporta la lectura ni la escritura de STD_LOGIC o STD_LOGIC-VECTOR (valores U, X, Z…). Solamente soporta los BIT y BIT_VECTOR.
Para uso directo de STD_LOGIC y STD_LOGIC_VECTOR, delarar el package STD_LOGIC_TEXTIO
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 187Ver 7.0 Reproduccion prohibida – todos derechos reservados
•Ejemplo de lectura de datos a partir de un archivo :process
file LISTA : TEXT;variable MY_LINE : line;variable DATA_VAR : std_logic_vector(31 downto 0);variable ADR_VAR : std_logic_vector(31 downto 0);
beginfile_open(LISTA, "C:\ORIGEN.TXT", read_mode);
-- abre el archivo en lecturaBUCLE : for I in 0 to 9 loopreadline(LISTA,MY_LINE); -- lee una linea completa
-- en el archivo ORIGENread(MY_LINE,DATA_VAR); -- assigna los 32 primeros caracteres de la
-- linea a la variable DATA_VARread(MY_LINE,ADR_VAR); -- asigna los 32 caracteres siguientes
-- a la variable ADR_VARDATA <= DATA_VAR; ADR <= ADR_VAR;wait for 10ns;end loop;file_close(LISTA); wait; -- cierra el archivoend process;
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 188Ver 7.0 Reproduccion prohibida – todos derechos reservados
•Ejemplo de escritura en un archivo ASCII :process
file RESULTADO : TEXT;variable MY_LINE : line;variable DAT : std_logic_vector(31 downto 0);
begin-- abre el archivo en escriturafile_open(RESULTADO , "C:\RESULTADO.TXT", write_mode); DAT := DATA; for I in O to 99 loop-- escribe los resultados (justificado a la derecha en un -- campo de 40 caracteres)write(MY_LINE, DAT, right, 40);
writeline(RESULTADO, MY_LINE);-- escribe la linea en el archivo
wait for 100 ns; end loop;file_close(RESULTADO); -- cierra el archivowait;end process;
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 189Ver 7.0 Reproduccion prohibida – todos derechos reservados
Anexo
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 190Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Palabras reservadas:absaccessafteraliasandarchitecturearrayassertattribute
beginblockbodybufferbus
casecomponentconfigurationconstant
disconnectdownto
elseelsifendentityexit
fileforfunction
generategenericguarded
ifininoutis
labellibrarylinkageloop
mapmod
Síntesis y simulacion para componentes programables
VHDL, muy sencillo...
MEDIA VIDEO DISEÑOwww.mvd-fpga.com
P 191Ver 7.0 Reproduccion prohibida – todos derechos reservados
• Palabras Reservadas (cont ) :nandnewnextnornotnull
ofonopenorothersout
packageportprocedureprocess
rangerecordregisterremreportreturn
selectseveritysignalsubtype
thentotransporttype
unitsuntiluse
variable
waitwhenwhilewith
xor