2.7. Elementos de diseño basado en el comportamiento Describir

Anuncio
2.7. Elementos de diseño basado en el comportamiento
Describir de forma directa el comportamiento de un circuito lógico
Es uno de los beneficios clave de los HDL
Elemento clave es el proceso = colección de instrucciones
´secuenciales´ que se ejecuta en paralelo con otras instrucciones
concurrentes y procesos
Especifica una interacción de señales que se ejecuta en tiempo
de simulación cero
Da lugar a un circuito secuencial o combinacional que efectúa la
operación modelada
Diseño lógico
EUI
Jose Torres
1 de 17
Una instrucción de proceso se usa en cualquier parte donde
pueda ir una instrucción concurrente
Su sintaxis es:
process (nombre-señal, nombre-señal, ..., nombre-señal)
declaraciones de tipos
declaraciones de variables
declaraciones de constantes
definiciones de funciones
definiciones de procedimientos
begin
instrucción-secuencial
...
instrucción-secuencial
end process;
Diseño lógico
EUI
Jose Torres
2 de 17
Objetos visibles desde el proceso:
- tipos, señales, constantes, funciones y procedimientos visibles
a la arquitectura dentro de la cual está
- los objetos locales al proceso
Un proceso no puede declarar señales, sólo variables (no visibles
desde fuera), con la sintaxis:
variable nombres-variables : tipo-variable ;
Diseño lógico
EUI
Jose Torres
3 de 17
Un proceso VHDL estará siempre en ejecución o suspendido, lo
cual viene determinado por la lista de sensibilidad del proceso
(señales en su definición)
(1) Está inicialmente suspendido, reanuda su ejecución cuando
cambia el valor de cualquier señal en su lista de sensibilidad
(2) Si como resultado de la ejecución cambia alguna señal de la
lista de sensibilidad, se ejecuta de nuevo; así hasta que no
cambie ninguna
En la simulación esto ocurre en tiempo cero
Diseño lógico
EUI
Jose Torres
4 de 17
Instrucciones secuenciales:
1. Instrucción de asignación de señal secuencial
Igual que la concurrente , pero dentro del cuerpo de un proceso
en vez del de una arquitectura
nombre-señal <= expresión
2. Instrucción de asignación de variable
Análoga a la de señal
nombre-variable := expresión
Diseño lógico
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;
Diseño lógico
EUI
Jose Torres
6 de 17
En esta arquitectura una sola instrucción concurrente que es el
proceso
Las instrucciones se ejecutan secuencialmente y no podemos
cambiar el orden como se podía cuando eran asignaciones de
señal
Lista de sensibilidad del proceso = bits de entrada al circuito(N)
Las salidas de las AND son variables en vez de señales (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:
Diseño lógico
EUI
Jose Torres
7 de 17
3. Instrucción if
1) if expresión-booleana then instrucción-secuencial end if;
2) if expresión-booleana then instrucción-secuencial
else instrucción-secuencial
end if;
3) if expresión-booleana then instrucción-secuencial
elsif expresión-booleana then instrucción-secuencial
...
elsif expresión-booleana then instrucción-secuencial
end if;
4) if expresión-booleana then instrucción-secuencial
elsif expresión-booleana then instrucción-secuencial
...
elsif expresión-booleana then instrucción-secuencial
else instrucción-secuencial end if;
Diseño lógico
EUI
Jose Torres
8 de 17
Ejemplo: detector de número 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;
Diseño lógico
EUI
Jose Torres
9 de 17
4. Instrucción case
Para seleccionar entre alternativas según el valor de una señal o
expresión.
Sintaxis de una sentencia case VHDL
case expresión is
when opciones => instrucciones-secuenciales
...
when opciones => instrucciones-secuenciales
end case;
evalúa expresión y ejecuta las instrucciones correspondientes
Diseño lógico
EUI
Jose Torres
10 de 17
Pueden ser varias instrucciones secuenciales
opciones pueden ser múltiples 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
Diseño lógico
EUI
Jose Torres
11 de 17
Ejemplo: detector de número 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;
Diseño lógico
EUI
Jose Torres
12 de 17
5. Instrucción loop
Sintaxis de un bucle for en VHDL
for identificador in rango loop
instrucción-secuencial
...
instrucción-secuencial
end loop;
La variable identificador se declara implícitamente del tipo
intervalo “rango”
Diseño lógico
EUI
Jose Torres
13 de 17
Instrucciones exit y next
Útiles para usar en bucles
exit transfiere el control a la instrucción siguiente al bucle
next provoca que sean ignoradas las restantes instrucciones del
ciclo y comience la siguiente interacción
Ejemplo : detector de número 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 );
Diseño lógico
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;
Diseño lógico
EUI
Jose Torres
15 de 17
Es una verdadera descripción de comportamiento
Hemos incrementado la entrada N a 16 bits para enfatizar la
ventaja de utilizar este método que no tiene que enumerar
explícitamente cientos de primos
Aunque es un mal ejemplo de diseño por poco eficiente ya que al
operador mod tiene que generar divisores
Diseño lógico
EUI
Jose Torres
16 de 17
6. Instrucción while
Sintaxis de un bucle while en VHDL
while expresión-booleana loop
instrucción-secuencial
...
instrucción-secuencial
end loop;
Los procesos se pueden utilizar para describir tanto circuitos
combinacionales como secuenciales
Diseño lógico
EUI
Jose Torres
17 de 17
Descargar