VHDL CONCURRENTE

Anuncio
VHDL CONCURRENTE
1
VHDL CONCURRENTE
•
Entidad
•
Arquitectura
•
Sentencias concurrentes
•
Procesos
•
Wait
•
Asignación concurrente a señales
•
Componentes
•
Generate
VHDL CONCURRENTE
2
Declaración entidad
Nombre entidad
entity_decl <=
entity id is
[ port ( port_interface_list ) ; ]
{ entity_declarative_item }
end [ entity ] [ id ] ;
port_interface_list <=
Nombre puerto
( id { , … } : [ mode ] subtype [ := expr ] ) { ; … }
mode <= in | out | inout
VHDL CONCURRENTE
3
Entidad: Ejemplo
entity program_rom is
port ( address : in bit_vector (14 downto 0) ;
data : out bit_vector (7 downto 0) ;
enable : in bit );
subtype instruction_byte is bit_vector (7 downto 0);
type program is array (0 to 2**14-1) of instruction_byte;
end entity program_rom;
Declaración de tipos, señales o constantes
(no variables)
VHDL CONCURRENTE
4
Declaración arquitectura
Nombre arquitectura
Nombre entidad
arch_body <=
architecture id of entity_name is
{ block_decl_item }
begin
{ concurrent_stmt }
end [ architecture ] [ id ] ;
Declaración de
tipos, señales o
constantes
Procesos e
instanciación de
componentes
VHDL CONCURRENTE
5
Arquitectura: Ejemplo
architecture primitive of and_or_inv is
signal and_a, and_b, or_a_b : bit;
begin
and_a: process is
begin
and_a <= a1 and a2;
wait on a1, a2;
end process;
……
end architecture;
VHDL CONCURRENTE
6
Sentencias concurrentes
Sentencias que se ejecutan simultáneamente en la
simulación:
•Procesos
•Asignación concurrente a señales
•Instanciación de componentes
•Sentencias generate
•When-else
VHDL CONCURRENTE
7
Procesos
Lista sensitiva (opcional)
process_stmt <=
[ process_label : ]
process [ ( signal_name { , … } ) ] [ is ]
{ process_decl_item }
begin
{ sequential_stmt }
end process [ process_label] ;
VHDL CONCURRENTE
8
Procesos
• Lista sensitiva: variables que disparan el proceso.
9
VHDL CONCURRENTE
Lista sensitiva: Ejemplo
10
VHDL CONCURRENTE
Lista sensitiva: Ejemplo
VHDL CONCURRENTE
11
Lista sensitiva/Sentencia wait
• Lista sensitiva es equivalente a una sentencia “wait”
antes del “end process”.
• VHDL requiere que el proceso tenga uno de los dos:
• lista sensitiva
• una o más sentencias wait.
VHDL CONCURRENTE
12
Procesos: Ejemplo
Procesos equivalentes
VHDL CONCURRENTE
13
Sentencia wait.
• Suspende la ejecución de un proceso.
• Tres tipos de sentencia wait:
• Combinaciones también posibles:
VHDL CONCURRENTE
14
Wait on
• Proceso suspendido hasta que se produce un
evento en A, B o C.
VHDL CONCURRENTE
15
Wait until
• Proceso suspendido hasta que la condición se
verifica.
VHDL CONCURRENTE
16
Wait for
• Suspensión del proceso durante 10ns.
VHDL CONCURRENTE
17
Wait for: Ejemplo aplicación
• Generación de un reloj
para simulaciones.
Proceso sin lista
sensitiva
VHDL CONCURRENTE
18
Asignación concurrente a señales
• La asignación concurrente se hace en el cuerpo
de la arquitectura (fuera de procesos).
• Existe la versión equivalente mediante utilización de
procesos.
19
VHDL CONCURRENTE
Asignación concurrente a señales
concurrent_signal <=
[ label : ] conditional_signal_assignment |
[ label : ] selected_signal_assignment
conditional_signal <=
name <= [ delay_mechanism ]
{ waveform when boolean_expr else }
waveform [ when boolean_expr ];
VHDL CONCURRENTE
20
Asignación concurrente a señales: Ejemplos
zmux: z <= d0 when sel1 = ‘0’ and sel0 = ‘0’ else
d1 when sel1 = ‘0’ and sel0 = ‘1’ else
d2 when sel1 = ‘1’ and sel0 = ‘0’ else
d3;
zmux: process (d0,d1,d2,d3,sel0,sel1) is
begin
if sel1 = ‘0’ and sel0 = ‘0’ then
z <= d0;
elsif sel1 = ‘0’ and sel0 = ‘1’ then
z <= d1;
elsif sel1 = ‘1’ and sel0 = ‘0’ then
z <= d2;
else
z <= d3;
end;
21
VHDL CONCURRENTE
Declaración de componentes
• Declaración dentro de la arquitectura o del paquete.
• Declaración casi idéntica a declaración de entidad.
VHDL CONCURRENTE
22
Instanciación de componentes
• Instanciación dentro de la arquitectura: Sentencia
concurrente.
• Se incluye una etiqueta para identificar el elemento
instanciado.
23
VHDL CONCURRENTE
Instanciación de componentes
VHDL CONCURRENTE
24
Componentes: Ejemplo diseño
• Sumador acarreo enlazado de 4 bits.
25
VHDL CONCURRENTE
Componentes: Ejemplo diseño
half adder
26
VHDL CONCURRENTE
Componentes: Ejemplo diseño
full adder
VHDL CONCURRENTE
27
Componentes. Ejemplo diseño.
(behav);
(behav);
full adder
28
VHDL CONCURRENTE
Componentes: Ejemplo diseño
Sumador acarreo
enlazado
VHDL CONCURRENTE
29
Componentes
• Especificación de la componente a utilizar
VHDL CONCURRENTE
30
Sentencias generate
• Para instanciar componentes idénticos bajo el control de
un índice o de una condición.
library IEEE; use IEEE.std_logic_1164.all;
entity PARIDAD is
generic(no_bits: integer:=32);
port(IN_DAT: in std_logic_vector (no_bits-1 downto 0);
PARITY: out std_logic);
end PARIDAD;
architecture ARBOL_XOR of PARIDAD is
signal TMP: std_logic_vector (no_bits-1 downto 0);
begin
TMP (no_bits-1) <= IN_DATA (no_bits-1);
PARITY <= tmp(0);
GEN_ARBOL: for I in no_bits-2 downto 0 generate
TMP (I) <= IN_DATA(I) xor TMP(I+1);
end generate;
end ARBOL_XOR;
31
VHDL CONCURRENTE
Sentencias generate: Ejemplo
32
VHDL CONCURRENTE
Sentencias generate: Ejemplo
33
VHDL CONCURRENTE
Sentencias generate: Ejemplo
34
VHDL CONCURRENTE
Sentencias generate: Ejemplo
Descargar