Вы находитесь на странице: 1из 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

SISTEMA I/O

FD

HD

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

I_O : Process Begin . . . . End Process I_O; 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; . . . HD : Process Begin . . . . End Process HD; End Architecure Ejemplo;

Aunque los procesos se listan en forma secuencial, su ejecucin es concurrente.

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 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;

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.

Procesos muy simples . . .


Architecture Combinacional1 of Combinacional1 is Sigal Inter1, Inter2 : bit; Begin

Por ejemplo un circuito combinacional simple:


A B X C D

P1 : Process( A, B) Begin Inter1 <= A OR B; End Process P1;

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


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;
A

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 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;

S A

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 DataBus <= . . .; . . . <= DataBus; end Process Memoria; DMA: Process Begin DataBus <= . . .; . . . <= DataBus; end Process DMA;

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

DataBus

CPU: Process Begin DataBus <= . . .;

. . . <= DataBus;
end Process CPU;

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 B R G/R B/R G R/G G B/G B R/B G/B B B Z R

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

R G

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 0 0 1 ? 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 ) -); Deteccin de Flancos de subida o bajada:

U X 0 1 Z W L H -

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

U U X 0 1 Z W U U U U U U

X U X X X X X

0 U X 0 X 0 0

1 U X X 1 1 1

Z U X 0 1 Z W

W U X 0 1 W W

L U X 0 1 L W

H U X 0 1 H W

U X X X X X

L
H -

U
U U

X
X X

0
0 X

1
1 X

L
H X

W
W X

L
W X

W
H X

X
X X

Tabla de resolucin para el tipo de datos: STD_LOGIC


24

Вам также может понравиться