Está en la página 1de 24

VII.

Mltiples Procesos en una Arquitectura

Introduccin
Aunque es conveniente describir sistemas en forma secuencial, esto no ocurre en la
realidad. El Mundo No es Secuencial.
Todos los vehculos se mueven al mismo tiempo,
es decir, concurrentemente.
Si cada vehculo lo consideramos
como un sistema, tenemos sistemas
operando concurrentemente.
Sin embargo, a un nivel de detalle
apropiado, se puede especificar el
funcionamiento de cada sistema
como una secuencia de acciones o
procesos.

Como conclusin, la jerrqua de VHDL permite especificar a los sistemas como Un


conjunto de sub-sistemas secuenciales trabajando concurrentemente.
2

Un sistema : Mltiples Procesos


Cada uno de estos posibles sub-sistemas inter-relacionados ser especificado como un
proceso separado.
MICROCOMPUTADORA

CPU

MEMORIA

FD

SISTEMA
I/O

HD

CPU : Process
Begin
. . . .
End Process CPU;

I_O : Process
Begin
. . . .
End Process I_O;

Memoria : Process
Begin
. . . .
End Process Memoria;

FD : Process
Begin
. . . .
End Process FD;

HD : Process
Begin
. . . .
End Process HD;

El nivel de detalle en cada proceso depende de lo que est especificando. Por ejemplo,
el proceso que especifica el comportamiento del procesador es mas complejo que el de
la memoria.
Una Arquitectura puede tener ms de un proceso y ellos sern ejecutados en forma
concurrente.
Architecture Ejemplo of Microcomputador is
Signal DataBus : Bit_Vector (31 downto 0);
begin
CPU : Process
Begin
. . . .
End Process CPU;
Memoria : Process
Begin
. . . .
End Process Memoria;
. . .

Aunque los procesos se listan en


forma secuencial, su ejecucin es
concurrente.

HD : Process
Begin
. . . .
End Process HD;
End Architecure Ejemplo;

La ejecucin concurrente de procesos es uno de los conceptos mas confusos en VHDL.


La idea sera mas clara si los procesos fueran escritos en columnas :
Architecture SomeArch of SomeEntity is
Begin
P1 : Process( A, B)
Begin
Proposicin 1;
Proposicin 2;
Proposicin 3;
End Process P1;

P2 : Process ( B, C )
Begin
Proposicin 1;
Proposicin 2;
Proposicin 3;
Proposicin 4;
End Process P2;

P3 : Process ( B )
Begin
Proposicin 1;
Proposicin 2;
End Process P3;

End Architecture SomeArch;

Recordemos que un proceso permanece suspendido mientras no ocurran cambios en


las seales que estan en la lista de sensitividad. Cuando se tienen mltiples procesos es
lo mismo; si una seal cambia, todos aquellos procesos que la incluyan en su lista de
sensitividad sern restaurados y se ejecutarn.
Puesto que los procesos no distinguen entre seales generadas externamente (viniendo
de su ambiente) y seales generadas internamente (dentro de la arquitectura), un
proceso pueder ser activado con un cambio generado en otro proceso.
5

Architecture SomeArch of SomeEntity is


Begin

Si una seal cambia, el proceso se


ejecuta, no importa de donde se
gener el cambio. De hecho las
seales son el nico medio para
intercambiar informacin entre
procesos, puesto que las variables
son locales a cada proceso y el valor
de una variable no puede ser
conocido por todos los procesos.

P1 : Process( A, B, E)
Begin
Proposicin 1;
Proposicin 2;
D <= expresion1;
End Process P1;
P2 : Process ( A, C )
Begin
Proposicin 1;
Proposicin 2;
Proposicin 3;
E <= expresion2;
End Process P2;
P3 : Process ( B, D )
Begin
Proposicin 1;
Proposicin 2;
End Process P3;
End Architecture SomeArch;

Procesos muy simples . . .


Architecture Combinacional1 of Combinacional1 is
Sigal Inter1, Inter2 : bit;
Begin
P1 : Process( A, B)
Begin
Inter1 <= A OR B;
End Process P1;

Por ejemplo un circuito


combinacional simple:
A
B
X

P2 : Process ( C, D )
Begin
Inter2 <= C OR D;
End Process P2;

C
D

P3 : Process ( Inter1, Inter2 )


Begin
x <= Inter1 AND Inter2;
End Process P3;
End Architecture Combinacional1;

Debido a que las compuertas trabajan en forma concurrente, no es conveniente usar un


solo proceso; sin embargo, cada proceso bsicamente consiste de una proposcin.
7

Asignamientos de seales concurrentes


VHDL permite simplificar tales procesos que consistan de un asignamiento nico,
sustituyndolos por una lnea con una proposicin nica, llamada asignamiento de seal
concurrente.
Architecture Combinacional1 of Combinacional1 is
Sigal Inter1, Inter2 : bit;
Begin
Inter1 <= A OR B;
Inter2 <= C OR D;
X <= Inter1 AND Inter2;

B
X
C
D

End Architecture Combinacional1;

Los asignamientos de seal concurrente pueden combinarse con procesos, dentro de


una arquitectura, o bien con otros asignamientos concurrentes.
Entonces, si dentro de un proceso aparecen dos o mas asignamientos de seal, estos
se ejecutaran secuencialmente. Sin embargo, si las asignaciones no estn dentro de un
proceso, su ejecucin ser concurrente.
8

Activacin de los asignamientos concurrentes


La lista de sensitividad de un proceso se coloca a la derecha de su especificacin, algo
similar debera ocurrir en los asignamientos concurrentes; y en efecto as sucede, las
seales que se encuentren en la expresin derecha de la asignacin, conforman la lista
de sensitividad del asignamiento. Un cambio en cualquier seal de la derecha, activa la
asignacin concurrente de la seal. Adems, estas asignaciones pueden ser retrazadas
usando retrazos inerciales o de transporte.
Architecture Gates of Gates is
Sigal Inter1, Inter2, SN : bit;
Begin

S
A

Inter1 <= A and S after 1ns;


SN <= not S after 1ns;
Inter2 <= B and SN after 1ns;
X <= Inter1 or Inter2 after 1 ns;
End Architecture Gates;

Asignamiento condicional de seal


Algunas veces es necesario que una condicion sea verdadera para hacer el asignamiento
de una seal, esto puede hacerse por medio de la proposicin If . . . Then . . . Else, sin
embargo esta proposicin es secuencial y est restringida a procesos.
VHDL cuenta con una sentencia de asignacin condicional que puede hacerse dentro de
la arquitectura. Su funcionamiento es similar a una proposicin condicional, pero se
escribe en forma diferente.
S

Architecture CondProc of MUX2_TO1 is


Begin
Process ( A, B , S )
begin
if S = 1 then
Y <= A;
else
Y <= B;
end if;
End process MUX2TO1;
End CondProc;

A
Y
B

Architecture AsCond of MUX2_TO1 is


Begin
Y <= A when S = 1 else B;
End AsCond;

10

La principal diferencia entre un asignamiento condicional y una proposicin condicional en


la que se realicen asignaciones, es que la primera es exclusica para seales mientras que
en la segunda se puede hacer la asignacin de cualquier tipo de objeto: seal o variable.

Asignamiento seleccionado de seal


El acondicionamiento se hace de acuerdo al valor de una seal que puede tomar
diferentes valores.
Es una construccin concurrente que no puede aparecer dentro de los procesos. Dentro
de un proceso puede sustituirse por la estructura: Case . . . Is . . . When
Similar al asignamiento condicional, es una estructura restringida a las seales.

11

COMPUERTA PROGRAMABLE
Dato1
Salida
Dato2
Modo

-- Estructura Case .. Is .. When ..


Architecture Gate_Prog of Gate_Prog is
Begin
process ( Modo, Dato1, Dato2 )
begin
case Modo is
when 000 => Salida <= Dato1 and Dato2;
when 001 => Salida <= Dato1 or Dato2;
when 010 => Salida <= Dato1 nand Dato2;
when 011 => Salida <= Dato1 nor Dato2;
when 100 => Salida <= not Dato1;
when 101 => Salida <= not Dato2;
when others => Salida <= 0;
end case;
end process;
End Gate_Prog;

-- Asignamiento Seleccionado de una seal


Architecture AsSel of Gate_Prog is
Begin
With Modo select
Salida <=
Dato1 and Dato2 when 000,
Dato1 or Dato2 when 001,
Dato1 nand Dato2 when 010,
Dato1 nor Dato2 when 011,
not Dato1 when 100,
not Dato2 when 101,
0 when others;
End AsSel;

12

Manejador de seal (Driver)


Recordemos que los asignamientos de seales realizados dentro de procesos solo toman
efecto cuando el proceso es suspendido, por lo que slo el ltimo asignamiento tomar
efecto.
Entonces, Cmo es que se conservan los eventos que ocurren en las seales? Esta es la
funcin de un driver. El compilador de VHDL le asigna un driver para cada seal a la que
se le asigna un valor dentro de un proceso.
El funcionamiento es muy simple, no importa cuantas asignaciones se hagan a una seal
dentro de un proceso, slo existe un driver por seal por proceso. Las asignaciones sern
efectuadas en el driver y se copiarn a la seal cuando el proceso se suspenda.
ProcEj : Process( SigA, SigB)
Begin
SigC <= SigA;
. . . .
SigC <= SigB + 1;
End Process ProcEj;

SigA : 0
SigB : 3
SigC : 1
Driver_SigC :

13

Otros atributos asociados con las seales


El driver lleva informacin de los cambios de una seal y su uso es necesario para
propsitos de simulacion. Sin embargo las seales en VHDL tienen otros atributos que si
pueden reflejarse en la sintesis del circuito.
Deteccin de Flancos:

Para verificar si ocurri un flanco de subida o bajada en alguna seal (usualmente CLK), es
necesario conocer si su valor es 1 o 0 y si acaba de ocurrir un cambio en ella, el atributo
event permite conocer la ltima condicin, para la primera se requiere evaluar otras
condiciones.
If CLKevent AND CLK = 1 AND CLKlast_value = 0 then
. . . . -- Detecta un flanco de subida
If CLKevent AND CLK = 0 AND CLKlast_value = 1 then
. . . . -- Detecta un flanco de bajada

14

Lazos Universales :

Existen algunos lazos for que por lo general trabajan en un arreglo unidimensional, sin
importar cual sea el rango de ese arreglo, para simplificar este tipo de operaciones VHDL
introduce los atributos: range y reverse_range su uso simplifica los lazos, ya que el nmero de
iteraciones es el mismo que el rango del arreglo.
For i in ArrDatosrange loop
. . . .
For i in ArrDatosreverse_range loop
. . . .
Indice del Bit ms significativo :

En la definicin de un arreglo a la izquierda se coloca el ndice del bit ms significativo, en


ocasiones se hacen evaluaciones de este bit, y si el arreglo se modifica, tales evaluaciones
deben corregirse. Para evitar estas correcciones puede usarse el atributo left por medio del
cual se obtiene el ndice del bit ms significativo.
AlgunArregloleft

15

Tiempo de Ajuste (Setup Time) :


Cuando un sistema es manejado por un reloj maestro, todas las asignaciones
deben hacerse justo despus del flanco de activacin (tiempo de ajuste). Pueden
existir errores si se hacen asignaciones fuera de este tiempo de ajuste, para ello
VHDL cuenta con un atributo last_event por medio del cual se puede determinar si
una asignacin fue hecha antes de tiempo.
En el siguiente ejemplo la variable booleana SetupViolated tendr verdadero
cuando el tiempo de ajuste de SomeSignal sea violado.

If CLKevent AND CLK = 1 AND CLKlast_value = 0 then


SetupVilated := SomeSignallast_event < SetupTime;
end if;

Nota:

En el Estandar de VHDL existen mas atributos para las seales u otros


objetos (son 36 en total), solo se han comentado los mas populares.

16

Mltiples manejadores (Drivers)


Existen seales que pueden ser manipuladas por mltiples procesos, para lectura o
escritura. Por ejemplo, en una microcomputadora, el bus de datos va a ser accesado por
diferentes elementos: Memoria, DMA, Procesador, etc.
Memoria: Process
Begin

DMA: Process
Begin

DataBus <= . . .;

DataBus <= . . .;

. . . <= DataBus;

. . . <= DataBus;

end Process Memoria;

end Process DMA;

DataBus

CPU: Process
Begin
DataBus <= . . .;

. . . <= DataBus;
end Process CPU;

Cada uno de estos dispositivos


maneja al bus, por lo que cada
lnea de seal del bus debe tener
mltiples drivers.
VHDL puede manipular mltiples
drivers puesto que fue creado
para trabajar con sistemas
digitales.
Se debe tener cuidado cuando
existan mltiples fuentes para
una seal, o bien, establecer un
mecanismo que las maneje y
coordine.
17

Mltiples manejadores . . . debe resolverse


Un simulador de VHDL no puede saber de antemano si en una seal con mltiples
manejadores ocurrir una asignacin simultnea de diferentes fuentes. Por lo que el
simulador debe estar preparado para hacer una mezcla, cuando ello ocurra.
A esta mezcla de seales se le conoce como resolucin y debe especificarse como una
tabla que es conocida como funcin de resolucin
Una posible comparacin puede hacerse con colores:
R
R

R/G

R/B

G/R

G/B

B/R

B/G

Z
R

Z <= A;
. . .
Z <= B;

Z
G/B

18

Dos valores no son suficientes . . .


La funcin de resolucin requiere mas valores que los existentes en el conjunto bsico (en
el ejemplo anterior se generaron 3 colores adicionales).
Algo similar debe ocurrir cuando tengamos mltiples fuentes para un asignamiento de
seal, el problema con las seales de tipo bit es que solo cuenta con 2 valores por lo que
no hay forma de mezclar un 1 con 0 o viceversa.
0

Z <= A;
. . .
Z <= B;

No es posible con los


tipos bit y bit_vector

Como consecuencia, si solo usamos los tipos bit o bit_vector, no ser posible definir buses
compartidos como ocurre en un procesador o algn sistema similar.

Lo que significa que requerimos de otro tipo de datos que maneje ms de 2 valores y
cuente con una funcin de resolucin definida para poder mezclar valores distintos.
19

Otros valores lgicos


Existen otros valores representados o manejados por los sistemas digitales reales, los
describiremos a continuacin.
En el diseo de un sistema hay situaciones en las cuales en realidad no importa el valor
de una seal, puede ser 1 o 0, no importa.
Los buffers de tres estados se desconectan del sistema con un estado de alta
impedancia, el cual no es 1 ni 0.
Ocasionalmente, un sistema puede tener un valor no asignado o desconocido, el cual es
diferente del no importa.
Estos tres valores son manejados por el tipo std_ulogic, el cual est definido en el paquete
Std_logic_1164. Este paquete tambien cuenta con la definicin del vector
std_ulogic_vector, basado en el tipo std_ulogic. Ambos tipos cuentan con un conjunto de
operaciones lgicas definidas para ellos.
La u dentro del nombre std_ulogic indica unresolved types (tipos no resueltos).

20

Definicin del tipo std_ulogic :

Esta declarado en el paquete Std_logic_1164 y consiste de una enumeracin con 9 valores:


TYPE std_ulogic is
( U,
-- Desconocido o no asignado
X,
-- Forzado a 0 o a 1
0,
-- Forzado a 0
1,
-- Forzado a 1
Z,
-- Alta impedancia
W,
-- 0 o 1 dbil
L,
-- 0 dbil
H,
-- 1 dbil
);
-- No importa
TYPE std_ulogic_vector is ARRAY ( NATURAL RANGE <> ) of std_ulogic;
Para usar el tipo std_ulogic :

Se debe incluir el paquete correspondiente, para ello antes de la descripcin de la entidad


habr que incluir las siguientes sentencias:
Library IEEE;
Use
IEEE.Std_Logic.1164.all;

21

Operadores lgicos aplicables al tipo std_ulogic :

Se pueden aplicar todos los definidos para los tipos bit y bit_vector, es decir: and, nand, or,
nor, xor y not. Y debido a que son 9 posibles valores, se tiene una tabal de definicin para
cada operacin, por ejemplo para la and:
CONSTANT and_table : stdlogic_table := (
-- ------------------------------------------------------------ U X 0 1 Z W L H -- ------------------------------------------------------------( U, U , 0 , U , U, U, 0, U, U ), -( U, X , 0 , X , X, X, 0, X, X ), -( 0, 0 , 0 , 0 , 0, 0, 0, 0, 0 ), -( U, X , 0 , 1 , X, X, 0, 1, X ), -( U, X , 0 , X , X, X, 0, X, X ), -( U, X , 0 , X , X, X, 0, X, X ), -( 0, 0 , 0 , 0 , 0, 0, 0, 0, 0 ), -( U, X , 0 , 1 , X, X, 0, 1, X ), -( U, X , 0 , X , X, X, 0, X, X ) -);

U
X
0
1
Z
W
L
H
-

Deteccin de Flancos de subida o bajada:

Por conveniencia, para este tipo especial de datos se han incluido dos funciones: falling_edge
para detectar los flancos de bajada y rising_edge para los de subida.
22

Lgica multivaluada resuelta


El tipo std_ulogic soporta todos los valores que pueden aparecer en un sistema dgital tpico.
Sin embargo este tipo no cuenta con una funcin de resolucin para cuando existen multiples
fuentes de asignacin.
Debido a esto, el paquete std_logic_1114 incluye al tipo de datos std_logic, el cual maneja los
9 estados manejados por el std_ulogic pero adems si cuenta con una funcin de resolucin.
De hecho la nica diferencia entre los tipos std_logic y std_ulogic es que el primero si cuenta
con una funcin de resolucin mientras que el segundo no, incluso las funciones de deteccin
de flancos estn en el std_logic.

Como consecuencia de ello, el tipo std_logic es actualmente un de facto de los paquetes de


sntesis.
El paquete std_logic_1114 incluye tambin el tipo de datos std_logic_vector el cual es un
arreglo unidimensional de std_logic.
La tabla de resolucin se muestra a continuacin.
23

Tabla de resolucin para el tipo de datos: STD_LOGIC


24

También podría gustarte