Sei sulla pagina 1di 17

2.7.

Elementos de diseo basado en el comportamiento Describir de forma directa el comportamiento de un circuito lgico Es uno de los beneficios clave de los HDL Elemento clave es el proceso = coleccin de instrucciones secuenciales que se ejecuta en paralelo con otras instrucciones concurrentes y procesos Especifica una interaccin de seales que se ejecuta en tiempo de simulacin cero Da lugar a un circuito secuencial o combinacional que efecta la operacin modelada
Diseo lgico EUI Jose Torres
1 de 17

Una instruccin de proceso se usa en cualquier parte donde pueda ir una instruccin concurrente Su sintaxis es: process (nombre-seal, nombre-seal, ..., nombre-seal) declaraciones de tipos declaraciones de variables declaraciones de constantes definiciones de funciones definiciones de procedimientos begin instruccin-secuencial ... instruccin-secuencial end process;
Diseo lgico EUI Jose Torres
2 de 17

Objetos visibles desde el proceso: - tipos, seales, constantes, funciones y procedimientos visibles a la arquitectura dentro de la cual est - los objetos locales al proceso Un proceso no puede declarar seales, slo variables (no visibles desde fuera), con la sintaxis: variable nombres-variables : tipo-variable ;

Diseo lgico

EUI

Jose Torres

3 de 17

Un proceso VHDL estar siempre en ejecucin o suspendido, lo cual viene determinado por la lista de sensibilidad del proceso (seales en su definicin) (1) Est inicialmente suspendido, reanuda su ejecucin cuando cambia el valor de cualquier seal en su lista de sensibilidad (2) Si como resultado de la ejecucin cambia alguna seal de la lista de sensibilidad, se ejecuta de nuevo; as hasta que no cambie ninguna En la simulacin esto ocurre en tiempo cero

Diseo lgico

EUI

Jose Torres

4 de 17

Instrucciones secuenciales: 1. Instruccin de asignacin de seal secuencial Igual que la concurrente , pero dentro del cuerpo de un proceso en vez del de una arquitectura nombre-seal <= expresin 2. Instruccin de asignacin de variable Anloga a la de seal nombre-variable := expresin

Diseo lgico

EUI

Jose Torres

5 de 17

Ejemplo: el mismo del flujo de datos reescrito con un proceso architecture prime6_arch of prime is begin process (N) variable N3L_N0, N3L_N2L_N1, N2L_N1_N0, N2_N1L_N0: std_logic; begin N3L_N0 := not N(3) and N(0); N3L_N2L_N1 := not N(3) and not N(2) and N(1) ; N2L_N1_N0 := not N(2) and N(1) and N(0); N2_N1L_N0 := N(2) and not N(1) and N(0); F <= N3L_N0 or N3L_N2L_N1 or N2L_N1_N0 or N2_N1L_N0; end process; end prime6_arch;
Diseo lgico EUI Jose Torres
6 de 17

En esta arquitectura una sola instruccin concurrente que es el proceso Las instrucciones se ejecutan secuencialmente y no podemos cambiar el orden como se poda cuando eran asignaciones de seal Lista de sensibilidad del proceso = bits de entrada al circuito(N) Las salidas de las AND son variables en vez de seales (no se pueden declarar dentro de un proceso) Veamos otras instrucciones secuenciales para tener mayor control a la hora de especificar el comportamiento del circuito:
Diseo lgico EUI Jose Torres
7 de 17

3. Instruccin if 1) if expresin-booleana then instruccin-secuencial end if; 2) if expresin-booleana then instruccin-secuencial else instruccin-secuencial end if; 3) if expresin-booleana then instruccin-secuencial elsif expresin-booleana then instruccin-secuencial ... elsif expresin-booleana then instruccin-secuencial end if; 4) if expresin-booleana then instruccin-secuencial elsif expresin-booleana then instruccin-secuencial ... elsif expresin-booleana then instruccin-secuencial else instruccin-secuencial end if;
Diseo lgico EUI Jose Torres
8 de 17

Ejemplo: detector de nmero primo usando una sentencia if architecture prime7_arch of prime is begin process (N) variable NI: integer; -- utiliza una variable begin NI := conv_integer(N); if NI=1 or NI=2 then F <= '1'; elsif NI=3 or NI=5 or NI=7 or NI=11 or NI=13 then F <= '1'; else F <= '0'; end if; end process; end prime7_arch;

Diseo lgico

EUI

Jose Torres

9 de 17

4. Instruccin case Para seleccionar entre alternativas segn el valor de una seal o expresin. Sintaxis de una sentencia case VHDL case expresin is when opciones => instrucciones-secuenciales ... when opciones => instrucciones-secuenciales end case; evala expresin y ejecuta las instrucciones correspondientes

Diseo lgico

EUI

Jose Torres

10 de 17

Pueden ser varias instrucciones secuenciales opciones pueden ser mltiples valores separados por | Las opciones deben ser mutuamente excluyentes e incluir todos los valores posibles Se puede usar others indicando todos los valores que no han sido cubiertos

Diseo lgico

EUI

Jose Torres

11 de 17

Ejemplo: detector de nmero primo usando el case architecture prime8_arch of prime is begin process(N) begin case conv_integer(N) is when 1 => F <= '1'; when 2 => F <= '1'; when 3 | 5 | 7 | 11 | 13 => F <= '1'; when others => F <= '0'; end case; end process; end prime8_arch;

Diseo lgico

EUI

Jose Torres

12 de 17

5. Instruccin loop Sintaxis de un bucle for en VHDL for identificador in rango loop instruccin-secuencial ... instruccin-secuencial end loop; La variable identificador se declara implcitamente del tipo intervalo rango

Diseo lgico

EUI

Jose Torres

13 de 17

Instrucciones exit y next tiles para usar en bucles exit transfiere el control a la instruccin siguiente al bucle next provoca que sean ignoradas las restantes instrucciones del ciclo y comience la siguiente interaccin Ejemplo : detector de nmero primo library IEEE; use IEEE.std_logic_1164.all; entity prime9 is port ( N: in std_logic_vector (15 downto 0); F: out std_logic );
Diseo lgico EUI Jose Torres

end prime9;
14 de 17

architecture prime9_arch of prime9 is begin process(N) variable NI: integer; variable prime: boolean; begin NI := conv_integer(N); prime := true; if NI=1 or NI=2 then null; -- casos especiales else for i in 2 to NI-1 loop if NI mod i = 0 then prime := false; exit; end if; end loop; end if; if prime then F <= '1'; else F <= '0'; end if; end process; end prime9_arch;
Diseo lgico EUI Jose Torres
15 de 17

Es una verdadera descripcin de comportamiento Hemos incrementado la entrada N a 16 bits para enfatizar la ventaja de utilizar este mtodo que no tiene que enumerar explcitamente cientos de primos Aunque es un mal ejemplo de diseo por poco eficiente ya que al operador mod tiene que generar divisores

Diseo lgico

EUI

Jose Torres

16 de 17

6. Instruccin while Sintaxis de un bucle while en VHDL while expresin-booleana loop instruccin-secuencial ... instruccin-secuencial end loop;

Los procesos se pueden utilizar para describir tanto circuitos combinacionales como secuenciales

Diseo lgico

EUI

Jose Torres

17 de 17

Potrebbero piacerti anche