vii. múltiples procesos en una arquitectura

24
1 VII. Múltiples Procesos en una Arquitectura

Upload: others

Post on 16-Jul-2022

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: VII. Múltiples Procesos en una Arquitectura

1

VII. Múltiples Procesos en una Arquitectura

Page 2: VII. Múltiples Procesos en una Arquitectura

2

Introducción

Aunque es conveniente describir sistemas en forma secuencial, esto no ocurre en la

realidad. El Mundo No es Secuencial.

Todos los vehículos se mueven al mismo tiempo,

es decir, concurrentemente.

Si cada vehículo 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 conclusión, la jerárquía de VHDL permite especificar a los sistemas como “Un

conjunto de sub-sistemas secuenciales trabajando concurrentemente”.

Page 3: VII. Múltiples Procesos en una Arquitectura

3

Un sistema : Múltiples Procesos

Cada uno de estos posibles sub-sistemas inter-relacionados será especificado como un

proceso separado.

MICROCOMPUTADORA

CPU MEMORIASISTEMA

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;

Page 4: VII. Múltiples Procesos en una Arquitectura

4

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 más de un proceso y ellos serán 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 ejecución es

concurrente.

Page 5: VII. Múltiples Procesos en una Arquitectura

5

La ejecución concurrente de procesos es uno de los conceptos mas confusos en VHDL.

La idea sería mas clara si los procesos fueran escritos en columnas :

P1 : Process( A, B)

Begin

Proposición 1;

Proposición 2;

Proposición 3;

End Process P1;

P2 : Process ( B, C )

Begin

Proposición 1;

Proposición 2;

Proposición 3;

Proposición 4;

End Process P2;

P3 : Process ( B )

Begin

Proposición 1;

Proposición 2;

End Process P3;

Architecture SomeArch of SomeEntity is

Begin

End Architecture SomeArch;

Recordemos que un proceso permanece suspendido mientras no ocurran cambios en

las señales que estan en la lista de sensitividad. Cuando se tienen múltiples procesos es

lo mismo; si una señal cambia, todos aquellos procesos que la incluyan en su lista de

sensitividad serán restaurados y se ejecutarán.

Puesto que los procesos no distinguen entre señales generadas externamente (viniendo

de su ambiente) y señales generadas internamente (dentro de la arquitectura), un

proceso pueder ser activado con un cambio generado en otro proceso.

Page 6: VII. Múltiples Procesos en una Arquitectura

6

Si una señal cambia, el proceso se

ejecuta, no importa de donde se

generó el cambio. De hecho las

señales son el único medio para

intercambiar información 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

Proposición 1;

Proposición 2;

D <= expresion1;

End Process P1;

P2 : Process ( A, C )

Begin

Proposición 1;

Proposición 2;

Proposición 3;

E <= expresion2;

End Process P2;

P3 : Process ( B, D )

Begin

Proposición 1;

Proposición 2;

End Process P3;

Architecture SomeArch of SomeEntity is

Begin

End Architecture SomeArch;

Page 7: VII. Múltiples Procesos en una Arquitectura

7

Procesos muy simples . . .

A

B

C

D

X

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;

Architecture Combinacional1 of Combinacional1 is

Sigal Inter1, Inter2 : bit;

Begin

End Architecture Combinacional1;

Por ejemplo un circuito

combinacional simple:

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

solo proceso; sin embargo, cada proceso básicamente consiste de una proposción.

Page 8: VII. Múltiples Procesos en una Arquitectura

8

VHDL permite simplificar tales procesos que consistan de un asignamiento único,

sustituyéndolos por una línea con una proposición única, llamada asignamiento de señal

concurrente.

Inter1 <= A OR B;

Inter2 <= C OR D;

X <= Inter1 AND Inter2;

Architecture Combinacional1 of Combinacional1 is

Sigal Inter1, Inter2 : bit;

Begin

End Architecture Combinacional1;

A

B

C

D

X

Los asignamientos de señal 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 señal, estos

se ejecutaran secuencialmente. Sin embargo, si las asignaciones no están dentro de un

proceso, su ejecución será concurrente.

Asignamientos de señales concurrentes

Page 9: VII. Múltiples Procesos en una Arquitectura

9

La lista de sensitividad de un proceso se coloca a la derecha de su especificación, algo

similar debería ocurrir en los asignamientos concurrentes; y en efecto así sucede, las

señales que se encuentren en la expresión derecha de la asignación, conforman la lista

de sensitividad del asignamiento. Un cambio en cualquier señal de la derecha, activa la

asignación concurrente de la señal. Además, estas asignaciones pueden ser retrazadas

usando retrazos inerciales o de transporte.

Activación de los asignamientos concurrentes

A

B

S

X

Inter1 <= A and S after 1ns;

SN <= not S after 1ns;

Inter2 <= B and SN after 1ns;

X <= Inter1 or Inter2 after 1 ns;

Architecture Gates of Gates is

Sigal Inter1, Inter2, SN : bit;

Begin

End Architecture Gates;

Page 10: VII. Múltiples Procesos en una Arquitectura

10

Algunas veces es necesario que una condicion sea verdadera para hacer el asignamiento

de una señal, esto puede hacerse por medio de la proposición If . . . Then . . . Else, sin

embargo esta proposición es secuencial y está restringida a procesos.

VHDL cuenta con una sentencia de asignación condicional que puede hacerse dentro de

la arquitectura. Su funcionamiento es similar a una proposición condicional, pero se

escribe en forma diferente.

Asignamiento condicional de señal

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

B

Y

S

Architecture AsCond of MUX2_TO1 is

Begin

Y <= A when S = ‘1’ else B;

End AsCond;

Page 11: VII. Múltiples Procesos en una Arquitectura

11

La principal diferencia entre un asignamiento condicional y una proposición condicional en

la que se realicen asignaciones, es que la primera es exclusica para señales mientras que

en la segunda se puede hacer la asignación de cualquier tipo de objeto: señal o variable.

Asignamiento seleccionado de señal

El acondicionamiento se hace de acuerdo al valor de una señal que puede tomar

diferentes valores.

Es una construcción 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 señales.

Page 12: VII. Múltiples Procesos en una Arquitectura

12

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

Dato1

Salida

Dato2Modo

COMPUERTA PROGRAMABLE

-- Asignamiento Seleccionado de una señal

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;

Page 13: VII. Múltiples Procesos en una Arquitectura

13

Manejador de señal (Driver)

Recordemos que los asignamientos de señales realizados dentro de procesos solo toman

efecto cuando el proceso es suspendido, por lo que sólo el último asignamiento tomará

efecto.

Entonces, ¿Cómo es que se conservan los eventos que ocurren en las señales? Esta es la

función de un driver. El compilador de VHDL le asigna un driver para cada señal 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 señal

dentro de un proceso, sólo existe un driver por señal por proceso. Las asignaciones serán

efectuadas en el driver y se copiarán a la señal 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 :

Page 14: VII. Múltiples Procesos en una Arquitectura

14

Otros atributos asociados con las señales

El driver lleva información de los cambios de una señal y su uso es necesario para

propósitos de simulacion. Sin embargo las señales en VHDL tienen otros atributos que si

pueden reflejarse en la sintesis del circuito.

Detección de Flancos:

Para verificar si ocurrió un flanco de subida o bajada en alguna señal (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 condición, para la primera se requiere evaluar otras

condiciones.

If CLK‟event AND CLK = „1‟ AND CLK‟last_value = „0‟ then

. . . . -- Detecta un flanco de subida

If CLK‟event AND CLK = „0‟ AND CLK‟last_value = „1‟ then

. . . . -- Detecta un flanco de bajada

Page 15: VII. Múltiples Procesos en una Arquitectura

15

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 número de

iteraciones es el mismo que el rango del arreglo.

For i in ArrDatos‟range loop

. . . .

For i in ArrDatos‟reverse_range loop

. . . .

Indice del Bit más significativo :

En la definición de un arreglo a la izquierda se coloca el índice del bit más 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 más significativo.

AlgunArreglo‟left

Page 16: VII. Múltiples Procesos en una Arquitectura

16

Tiempo de Ajuste (Setup Time) :

Cuando un sistema es manejado por un reloj maestro, todas las asignaciones

deben hacerse justo después del flanco de activación (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 asignación 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 CLK‟event AND CLK = „1‟ AND CLK‟last_value = „0‟ then

SetupVilated := SomeSignal‟last_event < SetupTime;end if;

En el Estandar de VHDL existen mas atributos para las señales u otros

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

Nota:

Page 17: VII. Múltiples Procesos en una Arquitectura

17

Múltiples manejadores (Drivers)

Existen señales que pueden ser manipuladas por múltiples 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.

DataBus

CPU: Process

Begin

DataBus <= . . .;

. . . <= DataBus;

end Process CPU;

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

línea de señal del bus debe tener

múltiples drivers.

VHDL puede manipular múltiples

drivers puesto que fue creado

para trabajar con sistemas

digitales.

Se debe tener cuidado cuando

existan múltiples fuentes para

una señal, o bien, establecer un

mecanismo que las maneje y

coordine.

Page 18: VII. Múltiples Procesos en una Arquitectura

18

Múltiples manejadores . . . debe resolverse

Un simulador de VHDL no puede saber de antemano si en una señal con múltiples

manejadores ocurrirá una asignación simultánea de diferentes fuentes. Por lo que el

simulador debe estar preparado para hacer una mezcla, cuando ello ocurra.

A esta mezcla de señales se le conoce como “resolución” y debe especificarse como una

tabla que es conocida como función de resolución

R R/G R/B

G/R G G/B

B/R B/G B

Una posible comparación puede hacerse con colores:

R G B

R

G

B

Z <= A;

. . .

Z <= B;

R

R

R

A

B

Z

G

B

G/B

A

B

Z

Page 19: VII. Múltiples Procesos en una Arquitectura

19

La función de resolución requiere mas valores que los existentes en el conjunto básico (en

el ejemplo anterior se generaron 3 colores adicionales).

Algo similar debe ocurrir cuando tengamos múltiples fuentes para un asignamiento de

señal, el problema con las señales de tipo bit es que solo cuenta con 2 valores por lo que

no hay forma de mezclar un „1‟ con „0‟ o viceversa.

Dos valores no son suficientes . . .

0 ?

? 1

0 1

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 algún sistema similar.

Lo que significa que requerimos de otro tipo de datos que maneje más de 2 valores y

cuente con una función de resolución definida para poder mezclar valores distintos.

Page 20: VII. Múltiples Procesos en una Arquitectura

20

Existen otros valores representados o manejados por los sistemas digitales reales, los

describiremos a continuación.

•En el diseño de un sistema hay situaciones en las cuales en realidad no importa el valor

de una señal, 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 definición del vector

std_ulogic_vector, basado en el tipo std_ulogic. Ambos tipos cuentan con un conjunto de

operaciones lógicas definidas para ellos.

La u dentro del nombre std_ulogic indica “unresolved types” (tipos no resueltos).

Otros valores “lógicos”

Page 21: VII. Múltiples Procesos en una Arquitectura

21

Definición del tipo std_ulogic :

Esta declarado en el paquete Std_logic_1164 y consiste de una enumeración 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 débil

„L‟, -- 0 débil

„H‟, -- 1 débil

„–‟ ); -- 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 descripción de la entidad

habrá que incluir las siguientes sentencias:Library IEEE;

Use IEEE.Std_Logic.1164.all;

Page 22: VII. Múltiples Procesos en una Arquitectura

22

Operadores lógicos 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 definición para

cada operación, 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

( „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‟ ) -- -

);

Detección 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.

Page 23: VII. Múltiples Procesos en una Arquitectura

23

Lógica multivaluada resuelta

El tipo std_ulogic soporta todos los valores que pueden aparecer en un sistema dígital típico.

Sin embargo este tipo no cuenta con una función de resolución para cuando existen multiples

fuentes de asignación.

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 además si cuenta con una función de resolución.

De hecho la única diferencia entre los tipos std_logic y std_ulogic es que el primero si cuenta

con una función de resolución mientras que el segundo no, incluso las funciones de detección

de flancos están en el std_logic.

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

síntesis.

El paquete std_logic_1114 incluye también el tipo de datos std_logic_vector el cual es un

arreglo unidimensional de std_logic.

La tabla de resolución se muestra a continuación.

Page 24: VII. Múltiples Procesos en una Arquitectura

24

U X 0 1 Z W L H X

U X 0 1 W W W W X

U X 0 1 L W L W X

U X 0 1 H W W H X

U U U U U U U U U

U X X X X X X X X

U X 0 X 0 0 0 0 X

U X X 1 1 1 1 1 X

Z

W

L

H

U

X

0

1

U X 0 1 Z W L H -

U X X X X X X X X-

Tabla de resolución para el tipo de datos: STD_LOGIC