VHDL CONCURRENTE
VHDL CONCURRENTE
Entidad
Arquitectura
Sentencias concurrentes
Procesos
Wait
Asignacin concurrente a seales
Componentes
Generate
VHDL CONCURRENTE
Declaracin 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
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;
Declaracin de tipos, seales o constantes
(no variables)
VHDL CONCURRENTE
Declaracin arquitectura
Nombre arquitecturaNombre entidad
arch_body <=
architecture id of entity_name isDeclaracin de
tipos, seales o
{ block_decl_item }
constantes.
begin
{ concurrent_stmt }
end [ architecture ] [ id ] ;
Procesos e
instanciacin de
componentes.
VHDL CONCURRENTE
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
Sentencias concurrentes
Sentencias que se ejecutan simultneamente en la
simulacin:
Procesos.
Asignacin concurrente a seales.
Llamadas a procedimientos.
Bloques
Instanciacin de componentes.
Sentencias assert-report
Sentencias generate.
When-else
With-select-them
VHDL CONCURRENTE
Sentencias concurrentes
Sentencias que se ejecutan simultneamente en la
simulacin:
Procesos.
Asignacin concurrente a senales.
Llamadas a procedimientos. (TEMA)
Bloques
Instanciacin de componentes.
Sentencias assert-report
Sentencias generate.
When-else
With-select-them
VHDL CONCURRENTE
Procesos
Lista sensitiva (opcional)
process_stmt <=
[ process_label : ]
process [ ( signal_name { , } ) ] [ is ]
{ process_decl_item }
begin
{ sequential_stmt }
end process [ process_label] ;
VHDL CONCURRENTE
Procesos
Lista las variables que disparan el proceso.
10
VHDL CONCURRENTE
Lista sensitiva: Ejemplo
11
VHDL CONCURRENTE
Lista sensitiva: Ejemplo
VHDL CONCURRENTE
12
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 ms sentencias wait.
VHDL CONCURRENTE
13
Procesos: Ejemplo
Procesos equivalentes
VHDL CONCURRENTE
14
Sentencia wait.
Suspende la ejecucin de un proceso.
Tres tipos de sentencia wait:
Combinaciones tambin posibles:
VHDL CONCURRENTE
15
Wait on
Proceso suspendido hasta que se produce un
evento en A, B o C.
VHDL CONCURRENTE
16
Wait until
Proceso suspendido hasta que la condicin se
verifica.
VHDL CONCURRENTE
17
Wait for
Suspensin del proceso durante 10ns.
VHDL CONCURRENTE
18
Wait for: Ejemplo aplicacin
Generacin de un reloj
para simualciones.
Proceso sin lista
sensitiva
VHDL CONCURRENTE
19
Asignacin concurrente a seales.
La asignacin concurrente se hace en el cuerpo
de la arquitectura (fuera de procesos).
Existe la versin equivalente mediante utilizacin de
procesos.
20
VHDL CONCURRENTE
Asignacin concurrente a seales.
conurrent_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
21
Asignacin concurrente a seales: 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;
22
VHDL CONCURRENTE
Declaracin de componentes
Declaracin dentro de la arquitectura o del paquete.
Declaracin casi idntica a declaracin de entidad.
VHDL CONCURRENTE
23
Instanciacin de componentes
Instanciacin dentro de la arquitectura: Sentencia
concurrente.
Se incluye un label para identificar el elemento
instanciado.
24
VHDL CONCURRENTE
Instanciacin de componentes
25
VHDL CONCURRENTE
Componentes. Ejemplo diseo.
Sumador acarreo enlazado de 4 bits.
26
VHDL CONCURRENTE
Componentes. Ejemplo diseo.
half adder
27
VHDL CONCURRENTE
Componentes. Ejemplo diseo.
full adder
28
VHDL CONCURRENTE
Componentes. Ejemplo diseo.
full adder
29
VHDL CONCURRENTE
Componentes. Ejemplo diseo.
Sumador acarreo
enlazado
VHDL CONCURRENTE
30
Componentes
Especificacin de la componente a utilizar
VHDL CONCURRENTE
31
Sentencias generate
Para instanciar componentes idnticos bajo el control
de un ndice o de una condicin
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;
32
VHDL CONCURRENTE
Sentencias generate: Ejemplo
33
VHDL CONCURRENTE
Sentencias generate: Ejemplo
34
VHDL CONCURRENTE
Sentencias generate: Ejemplo
35
VHDL CONCURRENTE
Sentencias generate: Ejemplo