FUNCIONES Y PROCEDIMIENTOS 1 VARIABLES Y SEÑALES • Constantes • Variables • Señales • Señales de Resolución. Funciones de resolución FUNCIONES Y PROCEDIMIENTOS 2 Constantes • Objeto que almacena un único valor durante toda la simulación. • Se deben inicializar al ser declaradas. • Declaración en arquitecturas (visible en toda la arquitectura), antes de begin. FUNCIONES Y PROCEDIMIENTOS 3 Variables/señales • Variables y señales: almacenan información que puede cambiar durante la simulación. Transportan datos entre elementos. • Variables y señales: Tratamiento distinto en la simulación y en la síntesis. • Señales: Ligadas al carácter hardware del lenguaje. Son las conexiones o terminales físicos del circuito. FUNCIONES Y PROCEDIMIENTOS 4 Variables • Declaradas y usadas en sistemas secuenciales: funciones, procedimientos y procesos. • Dentro de un proceso: - En su parte de declaración. - Visibles sólo dentro del proceso. FUNCIONES Y PROCEDIMIENTOS 5 Variables: Declaración • Una vez declarada su valor puede cambiar durante la simulación: - La asignación a variables es inmediata: FUNCIONES Y PROCEDIMIENTOS 6 Variables: Asignación Cuando hay cambios en “a” el proceso se dispara y “count_a” se incrementa. FUNCIONES Y PROCEDIMIENTOS 7 Señales • Usadas para representar: • Puertos de entrada/salida de la entidad. • Señales internas en el cuerpo de una arquitectura. • Visibles en: • Puertos entrada/salida de una entidad: Visibles en todos los cuerpos de arquitecturas de esa entidad. • Señales internas: Accesibles en todo el cuerpo de la arquitectura. 8 FUNCIONES Y PROCEDIMIENTOS Señales: Declaración 9 FUNCIONES Y PROCEDIMIENTOS Variables vs señales • Sintaxis: • Variables: tienen un campo de acción limitado (proceso). • Señales: tienen un campo de acción más extenso (módulo). • Simulación: • Variables: asignación con efecto inmediato. • Señales: la asignación se produce en el siguiente ciclo de simulación (al final de la ejecución del proceso). • Síntesis: • Variables: a veces se sintetizan como cableados. • Señales: En sentencias con reloj pueden dar lugar a elementos de memorias. 10 FUNCIONES Y PROCEDIMIENTOS Variables vs señales FUNCIONES Y PROCEDIMIENTOS 11 Señales: Comportamiento • Las señales se utilizan para comunicación entre procesos. • Cuando se realiza una asignación a una señal se crea un driver para la misma. • No puede haber dos procesos escribiendo en la misma señal. • Excepción son las señales “resolved” . FUNCIONES Y PROCEDIMIENTOS 12 Señales: Comportamiento • La asignación a señales no se produce de forma inmediata. • La asignación es efectiva cuando se termina el “wait”. FUNCIONES Y PROCEDIMIENTOS 13 Señales: Comportamiento P1: process is begin … … x <= ‘1’ after 5 ns; wait for 7 ns; x <= ‘0’ after 5 ns; wait for 7 ns; x <= ‘1’ after 5 ns; wait for 7 ns; … end process; 0 5 ‘1’ 5 10 15 20 ‘0’ ‘1’ 12 19 25 FUNCIONES Y PROCEDIMIENTOS 14 Señales resueltas • Hasta ahora se ha asumido una asignación por señal sólo un proceso puede aplicar asignaciones a dicha señal. • Funciones de resolución: deciden qué valor ha de tomar la señal cuando se le aplican dos o más asignaciones. FUNCIONES Y PROCEDIMIENTOS 15 Señales resueltas architecture b of e is signal x: rbit; begin p1: process is begin … x <= ‘1’; … end process; p2: process is begin … x <= ‘0’; … end process; p3: process is begin … if x = ‘1’ then … end process end architecture; • Puesto que p1 y p2 asignan valores a x, x tiene que ser una señal de resolución. FUNCIONES Y PROCEDIMIENTOS 16 Funciones de resolución A net1 B signal net 1: resolv_and bit; and_1: port map(A,B,net1); inv_1: port map (C,net1); C Función de resolución: resuelve el valor que ha de tomar el nodo net1. FUNCIONES Y PROCEDIMIENTOS 17 Funciones de resolución function resolv_and (A:bit_vector) return bit is begin for I in A´range loop if A(I) = ´0´then return ´0´; end if; end for return ´1´; end resolv_and; Es una conexión AND FUNCIONES Y PROCEDIMIENTOS 18 Funciones de resolución type std_ulogic is ( ‘U’, -- unintialized ‘X’, -- forcing unknown ‘0’, -- forcing 0 ‘1’, -- forcing 1 ‘Z’, -- high impedance ‘W’, -- weak unknown ‘L’, -- weak 0 ‘H’, -- weak 1 ‘-’ -- don’t care); IEEE.std_logic_1164