Вы находитесь на странице: 1из 23

VII.

Múltiples Procesos en una Arquitectura

F. Santiago E. 1
Introducción
El Mundo No es Secuencial.
Todos los vehículos se mueven al mismo tiempo,
es decir, concurrentemente.

Cada vehículo es un sistema, se


tienen sistemas operando
concurrentemente.

Sin embargo, cada sistema puede


ser descrito como una secuencia de
acciones o procesos.

VHDL permite especificar a los sistemas como un conjunto de sub-sistemas


secuenciales trabajando concurrentemente.

F. Santiago E. 2
Un sistema : Múltiples Procesos
Cada sub-sistema es especificado como un proceso separado.

MICROCOMPUTADORA

SISTEMA
CPU MEMORIA
I/O

FD HD

CPU : Process I_O : Process HD : Process


Begin Begin Begin
. . . . . . . . . . . .
End Process CPU; End Process I_O; End Process HD;

Memoria : Process FD : Process


Begin Begin
. . . . . . . .
End Process Memoria; End Process FD;

F. Santiago E. 3
La complejidad de cada proceso está en función de lo que esté especificando.
• El proceso CPU es mas complejo que el proceso Memoria.
Una Arquitectura puede tener más de un proceso, los cuales, dependiendo de sus
condiciones de reanudación, se pueden ejecutar en forma concurrente.

Architecture Ejemplo of Microcomputador is


Signal DataBus : Bit_Vector (31 downto 0);
begin
CPU : Process(DataBus)
Begin
. . . .
End Process CPU;

Memoria : Process(DataBus)
Begin
. . . .
End Process Memoria;
. . .

HD : Process(DataBus)
Begin
. . . .
End Process HD;
End Architecure Ejemplo;

F. Santiago E. 4
Señales en sistemas multiprocesos
• Un proceso permanece suspendido mientras no ocurren cambios en las
señales que están en su lista de sensibilidad.
• Con múltiples procesos es lo mismo; si una señal cambia, los procesos
que la incluyan en su lista de sensibilidad serán restaurados.
• Un proceso no distingue entre señales externas e internas, por ello, un
proceso puede ser activado con un cambio causado por otro.
• Las señales son el único medio para intercambiar información entre
procesos.
• Las variables son locales a los procesos.

F. Santiago E. 5
Comunicación entre procesos
Architecture SomeArch of SomeEnt is
signal A_DONE: bit;
begin
Proceso A Proceso B

Señal

A_DONE

A: process( ) B: process(A_DONE)
begin begin
if S1 then …
A_DONE <=‘1’; …
… end process;
end process;

End SomeArch;

F. Santiago E. 6
Procesos muy simples . . .
Considerando el siguiente Architecture Combinacional1 of Combinacional1 is
circuito: Sigal Inter1, Inter2 : bit;
Begin

G1 : Process( A, B)
Begin
Inter1 <= A OR B;
A
End Process G1;
B G1
G2 : Process ( C, D )
X
G3 Begin
C Inter2 <= C OR D;
D G2 End Process G2;

G3 : Process ( Inter1, Inter2 )


Begin
x <= Inter1 AND Inter2;
End Process G3;
Las compuertas G1 y G2 pueden
trabajar en forma concurrente. End Architecture Combinacional1;

Cada proceso básicamente consiste de una asignación.

F. Santiago E. 7
Asignación concurrente de señal
VHDL simplifica los procesos que únicamente incluyen una asignación, sustituyéndolos por
una proposición llamada asignación concurrente de señal.

Architecture Combinacional1 of Combinacional1 is


Sigal Inter1, Inter2 : bit; A
Begin B
Inter1 <= A OR B; X
Inter2 <= C OR D;
C
X <= Inter1 AND Inter2;
D
End Architecture Combinacional1;

Las asignaciones que no están dentro de un proceso se pueden ejecutar en forma


concurrente.
Las asignaciones concurrentes de señal se pueden combinar con procesos.

F. Santiago E. 8
Activación de asignaciones concurrentes

Las señales que se encuentran a la derecha de una asignación concurrente conforman


su lista de sensibilidad.

Pueden ser retrasadas usando retrasos inerciales o de transporte.

S
Architecture Gates of Gates is
Sigal Inter1, Inter2, SN : bit;
A
Begin

Inter1 <= A and S after 1ns;


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

End Architecture Gates;

F. Santiago E. 9
Asignación condicional de una señal
• Una variante de las asignaciones concurrentes son las asignaciones condicionales.
• La asignación de la señal está condicionada por el valor de otra señal.
• Su comportamiento se puede describir con una proposición condicional (en un
proceso).
S Proposición condicional:

A Architecture CondProp of MUX2_TO1 is


Y Begin
B
Process ( A, B , S )
begin
if S = ‘1’ then
Asignación condicional: Y <= A;
else
Architecture AsCond of MUX2_TO1 is Y <= B;
Begin end if;
End process;
Y <= A when S = ‘1’ else B;
End CondProp;
End AsCond;

F. Santiago E. 10
Asignación condicional vs. Proposición condicional

Asignación condicional Proposición condicional


 Fuera de los procesos.  Dentro de un proceso.
 Exclusiva para señales.  Se pueden hacer asignaciones en
objetos de cualquier tipo: señales o
variables.
 Se puede combinar con otras
estructuras de control.

F. Santiago E. 11
Asignación selectiva de señal
• Se puede ver como una ampliación de la asignación condicional, se utiliza cuando una
señal va a tomar uno de varios valores posibles. Su sintaxis:

with Señal_selectora select


SIG_NAME <= <expresión> when <valor o valores constantes>,
<expresión> when <otros valores>,
<expresión> when others; -- Default

• Sólo se realiza una asignación, por eso de manera intermedia se utilizan comas.

• Es una estructura restringida a señales.

• Es una construcción concurrente que no puede aparecer dentro de los procesos.

• Dentro de un proceso puede sustituirse por la estructura condicional múltiple:


Case . . . Is . . . When

F. Santiago E. 12
COMPUERTA PROGRAMABLE

Dato1
Estructura condicional múltiple:
Salida
Dato2
Modo Architecture Gate_Prog of Gate_Prog is
Begin

process ( Modo, Dato1, Dato2 )


Asignación selectiva de una señal: begin
case Modo is
Architecture AsSel of Gate_Prog is when “000” => Salida <= Dato1 and Dato2;
Begin when “001” => Salida <= Dato1 or Dato2;
when “010” => Salida <= Dato1 nand Dato2;
With Modo select when “011” => Salida <= Dato1 nor Dato2;
Salida <= when “100” => Salida <= not Dato1;
Dato1 and Dato2 when “000”, when “101” => Salida <= not Dato2;
Dato1 or Dato2 when “001”, when others => Salida <= „0‟;
Dato1 nand Dato2 when “010”, end case;
Dato1 nor Dato2 when “011”, end process;
not Dato1 when “100”,
not Dato2 when “101”, End Gate_Prog;
„0‟ when others;

End AsSel;

F. Santiago E. 13
Múltiples fuentes para una señal
Las señales pueden ser manipuladas por múltiples procesos, para lectura o escritura. Por
ejemplo, en una microcomputadora, diferentes elementos como la CPU, Memoria o DMA
tienen acceso al bus de datos.

Memoria: Process DMA: Process Múltiples fuentes: Dos procesos


Begin Begin
intentan escribir a la misma
DataBus <= . . .; DataBus <= . . .;
señal.
. . . <= DataBus; . . . <= DataBus;

end Process Memoria; end Process DMA; Se debe evitar que existan
múltiples fuentes para una señal,
DataBus o bien, establecer un mecanismo
que las maneje y coordine.
CPU: Process
Begin

DataBus <= . . .;
. . . <= DataBus;

end Process CPU;

F. Santiago E. 14
Múltiples fuentes . . . debe resolverse
• Algunas herramientas de simulación o síntesis marcan como un error si una señal tiene
múltiples fuentes, sin embargo, el lenguaje esta preparado para hacer una “mezcla”, si
fuera necesario.
• A esta mezcla de señales se le conoce como “resolución” y se especifica como una
tabla conocida como función de resolución.
• El concepto se explica con colores:
R A Z
R G B
R
R R R/G R/B Z <= A; R B
. . .
G G/R G G/B Z <= B;
G A Z
B B/R B/G B
G/B
B B

La función de resolución requiere más valores que los existentes en el conjunto básico.

F. Santiago E. 15
Dos valores no son suficientes . . .
• Algo similar debe ocurrir con múltiples fuentes de asignación para una señal.
• El problema con las señales del tipo bit es que sólo cuenta con 2 valores, por lo que no
hay forma de mezclar un „1‟ con „0‟ o viceversa.

0 1 Z <= A;
. . . No es posible con los
0 0 ?
Z <= B; tipos bit y bit_vector

1 ? 1

Los tipos bit o bit_vector no se pueden emplear en buses compartidos.


Se requiere de otro tipo de datos que maneje más de 2 valores y que cuente con una
función de resolución.

F. Santiago E. 16
Otros valores “ lógicos ”
En sistemas digitales reales se pueden presentar otros valores “lógicos” :
• En el diseño de un sistema hay situaciones en las cuales no importa el valor de una
señal, puede ser „1‟ o „0‟, pero en realidad no importa (X).

• Los buffers de tres estados desconectan una parte de un sistema con un estado de
alta impedancia (Z), el cual tampoco es „1‟ ó „0‟.

• Ocasionalmente un sistema puede tener un valor no asignado o desconocido, el cual


es diferente de no importa.

Estos y otros valores son manejados por el tipo STD_LOGIC, el cual está definido en el
paquete STD_LOGIC_1164.

Este paquete también cuenta con la definición del vector STD_LOGIC_VECTOR.

F. Santiago E. 17
El tipo STD_LOGIC
Está declarado en el paquete std_logic_1164 y consiste de una enumeración con 9 valores:

TYPE STD_LOGIC is
( „U‟, -- No asignado
„X‟, -- No importa
„0‟, -- 0 lógico
„1‟, -- 1 lógico
„Z‟, -- Alta impedancia
„W‟, -- 0 o 1 débil (no importa)
„L‟, -- 0 débil
„H‟, -- 1 débil
„–‟ ); -- Desconocido

TYPE STD_LOGIC_VECTOR is ARRAY ( NATURAL RANGE <> ) of STD_LOGIC;

F. Santiago E. 18
Operadores aplicables al tipo STD_LOGIC
Se pueden aplicar todos los definidos para los tipos bit y bit_vector, es decir: AND, NAND, OR,
NOR, XOR y NOT.
Se tiene una tabla de definición para cada operación, por ejemplo para la AND:
CONSTANT AND_table : std_logic_table := (
-- -----------------------------------------------------------
-- U X 0 1 Z W L H -
-- -------------------------------------------------------------
( „U‟, „U‟ , „0‟ , „U‟ , „U‟, „U‟, „0‟, „U‟, „U‟ ), -- U
( „U‟, „X‟ , „0‟ , „X‟ , „X‟, „X‟, „0‟, „X‟, „X‟ ), -- X
( „0‟, „0‟ , „0‟ , „0‟ , „0‟, „0‟, „0‟, „0‟, „0‟ ), -- 0
( „U‟, „X‟ , „0‟ , „1‟ , „X‟, „X‟, „0‟, „1‟, „X‟ ), -- 1
( „U‟, „X‟ , „0‟ , „X‟ , „X‟, „X‟, „0‟, „X‟, „X‟ ), -- Z
( „U‟, „X‟ , „0‟ , „X‟ , „X‟, „X‟, „0‟, „X‟, „X‟ ), -- W
( „0‟, „0‟ , „0‟ , „0‟ , „0‟, „0‟, „0‟, „0‟, „0‟ ), -- L
( „U‟, „X‟ , „0‟ , „1‟ , „X‟, „X‟, „0‟, „1‟, „X‟ ), -- H
( „U‟, „X‟ , „0‟ , „X‟ , „X‟, „X‟, „0‟, „X‟, „X‟ ) -- -
);

F. Santiago E. 19
Uso del tipo STD_LOGIC
• Para usar el tipo std_logic se deben incluir los paquete correspondientes:

Library IEEE;
Use IEEE.STD_LOGIC_1164.all;
Use IEEE.STD_LOGIC_UNSIGNED.all;

• El segundo paquete es para soportar operaciones aritméticas, no siempre es


necesario.

• Este tipo de datos cuenta con dos funciones para la detección de flancos:
• falling_edge para flancos de bajada.
• rising_edge para flancos de subida.

• También cuenta con una función de resolución para asignaciones múltiples.

• El tipo std_logic es actualmente un de facto de los paquetes de simulación y síntesis.

F. Santiago E. 20
Función de resolución, tipo STD_LOGIC
U X 0 1 Z W L H -

U U U U U U U U U U

X U X X X X X X X X

0 U X 0 X 0 0 0 0 X

1 U X X 1 1 1 1 1 X

Z U X 0 1 Z W L H X

W U X 0 1 W W W W X

L U X 0 1 L W L W X

H U X 0 1 H W W H X

- U X X X X X X X X

F. Santiago E. 21
Resumen
 Una arquitectura puede contener bloques de hardware basados en:
 Procesos
 Asignaciones concurrentes

 Asignaciones condicionales

 Asignaciones selectivas

• La comunicación entre estos bloques se realiza por medio de señales.


• Podrá existir concurrencia entre bloques.
• Los tipos de datos STD_LOGIC o STD_LOGIC_VECTOR son los más
convenientes para la comunicación entre bloques.

F. Santiago E. 22
Ejercicios
1. Registro síncrono de desplazamiento, con una habilitación para el
desplazamiento y otra para una carga paralela, su reloj debe tener una
frecuencia cercana a 1 Hz.
2. Manejo de un motor a pasos unipolar, con habilitación de movimiento y
control de dirección (se simulará con los LED´s de la tarjeta, con un reloj
cercano a 5 Hz).
3. Contador UP/DOWN de 0 a 9 con salida en 7 segmentos, incrementa con
un botón y decrementa con otro, su reloj debe tener una frecuencia cercana
a 3 Hz.
4. Máquina de estados para detectar si un auto va en sentido contrario (reloj
cercano a 1 KHz).
5. Máquina de estados para determinar la dirección de giro de un motor, a
partir de los pulsos generados por un encoder (reloj cercano a 5 KHz).

F. Santiago E. 23

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