Está en la página 1de 35

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

También podría gustarte