© 20011A.G.O. All Rights Reserved

69  Download (0)

Full text

(1)
(2)

Ruta de datos de MaNoTaS

Lac

RT LRT

(3)

LDA dir

Sdir2-1 00 L

Lri LPc

00

LDirL

00

LDirH

02

LAc

ZZ

Fase

B y P I. S. Deco Fase

Ejecución clk

Bus Dir PC PC+1

Bus Dat CO dirL dirH M(H&L)

PC+1

(4)

Problema 2

1.  Disponemos del procesador MaNoTaS, y queremos que se pueda ejecutar la instrucción ldaXP, definida como:

Primero: A ß M(D&E);

Segundo: Eß E+1;

se pide:

a)  Fases de la instrucción, mediante lenguaje de transferencia entre registros. (0,75ptos)

b)  Cronograma, con el menor número posible de periodos, de la instrucción (1,5 ptos)

c)  Si la frecuencia del reloj es de 2,5GHz. Calcular en ps (picosegundos),

cuanto tiempo tarda en ejecutarse la instrucción. (0,25ptos)

(5)

Ruta de datos de MaNoTaS

LRT

Lac

(6)

Problema 2 (1/7)

Sdir[2-1] 0 xx xx xx 2

Selreg[1-0]

ALU[3-0]

L Lri

xx 3

Sreg LdirL

2

LdirH

xx

Lac

xx Reloj

LRT

xx xx xx xx xx Inc RT

Salu

3

Lreg Lpc

LdaXP

1. A ß M(D&E);

2. Eß E+1;

LRT

Lac

(7)

Problema 2 (2/7)

Sdir[2-1] 0 xx xx xx 2

Selreg[1-0]

ALU[3-0]

L Lri

xx 3

Sreg LdirL

2

LdirH

xx

Lac

xx Reloj

LRT

xx xx xx xx xx Inc RT

Salu

3

Lreg Lpc

LRT

Lac

LdaXP

1. A ß M(D&E);

2. Eß E+1;

(8)

Problema 2 (3/7)

Sdir[2-1] 0 xx xx xx 2

Selreg[1-0]

ALU[3-0]

L Lri

xx 3

Sreg LdirL

2

LdirH

xx

Lac

xx Reloj

LRT

xx xx xx xx xx Inc RT

Salu

3

Lreg Lpc

LRT

Lac

LdaXP

1. A ß M(D&E);

2. Eß E+1;

(9)

Problema 2 (4/7)

Sdir[2-1] 0 xx xx xx 2

Selreg[1-0]

ALU[3-0]

L Lri

xx 3

Sreg LdirL

2

LdirH

xx

Lac

xx Reloj

LRT

xx xx xx xx xx Inc RT

Salu

3

Lreg Lpc

LRT

Lac

LdaXP

1. A ß M(D&E);

2. Eß E+1;

(10)

Problema 2 (5/7)

Sdir[2-1] 0 xx xx xx 2

Selreg[1-0]

ALU[3-0]

L Lri

xx 3

Sreg LdirL

2

LdirH

xx

Lac

xx Reloj

LRT

xx xx xx xx xx Inc RT

Salu

3

Lreg Lpc

LRT

Lac

LdaXP

1. A ß M(D&E);

2. Eß E+1;

(11)

Problema 2 (6/7)

Sdir[2-1] 0 xx xx xx 2

Selreg[1-0]

ALU[3-0]

L Lri

xx 3

Sreg LdirL

2

LdirH

xx

Lac

xx Reloj

LRT

xx xx xx xx xx Inc RT

Salu

3

Lreg Lpc

LRT

Lac

LdaXP

1. A ß M(D&E);

2. Eß E+1;

(12)

Problema 2 (7/7)

Sdir[2-1] 0 xx xx xx 2

Selreg[1-0]

ALU[3-0]

L Lri

xx 3

Sreg LdirL

2

LdirH

xx

Lac

xx Reloj

LRT

xx xx xx xx xx Inc RT

Salu

3

Lreg Lpc

La frecuencia de trabajo es de 2,5GHz, es decir, el periodo

f ns

T 0 , 4

10

· 5 , 2

1 1

9 =

=

=

ps ns

ns

T 6 · 0 , 4 2 , 4 2400

6 = = =

Como la instrucción ocupa 6T, tenemos que su duración será

LdaXP

1. A ß M(D&E);

2. Eß E+1;

(13)

Problema 3

Call dir;

M(SP) ß PCL; SP ßSP+1 M(SP) ß PCH; SP ßSP+1 PC ß dir

Realizar el cronograma de la instrucción Call dir de MaNoTaS definida como:

Responder a la siguiente pregunta: ¿Cómo se soluciona el problema de

cargar en el PC la dirección (dir) incrementada en una unidad?

(14)

Problema 3

Sdir1-2 00 xx

L LRi

IPc LDirL LDirH LPC

E ISP HPC

D E C O D I F I C A

00 00 01 01 10

Implica tener +1 en el PC

¿Cómo se soluciona?

(15)

Problema 3

Sdir1-2 00 xx

L LRi

IPc LDirL LDirH LPC

E ISP HPC

D E C O D I F I C A

00 00 01 01 10

Implica tener +1 en el PC

¿Cómo se soluciona?

(16)

Problema 3

Sdir1-2 00 xx

L LRi

IPc LDirL LDirH LPC

E ISP HPC

D E C O D I F I C A

00 00 01 01 10

Implica tener +1 en el PC

¿Cómo se soluciona?

(17)

Problema 3

Sdir1-2 00 xx

L LRi

IPc LDirL LDirH LPC

E ISP HPC

D E C O D I F I C A

00 00 01 01 10

Implica tener +1 en el PC

¿Cómo se soluciona?

(18)

Problema 3

Sdir1-2 00 xx

L LRi

IPc LDirL LDirH LPC

E ISP HPC

D E C O D I F I C A

00 00 01 01 10

Implica tener +1 en el PC

¿Cómo se soluciona?

(19)

Problema 3

Sdir1-2 00 xx

L LRi

IPc LDirL LDirH LPC

E ISP HPC

D E C O D I F I C A

00 00 01 01 10

Implica tener +1 en el PC

¿Cómo se soluciona?

(20)

Problema 3

Sdir1-2 00 xx

L LRi

IPc LDirL LDirH LPC

E ISP HPC

D E C O D I F I C A

00 00 01 01 10

I mplica tener +1

en el PC ¿Cómo

se soluciona?

(21)

Problema 4

Ruta de datos del SuperAbacus.

Esta ruta de datos posee un banco de registros de uso general, que pueden ser utilizados como registros aritméticos, o dependiendo de las condiciones de direccionamiento como registros base o de índice. Todos los cálculos se realizan en un operador, que a la vez actúa como unidad aritmético - lógica y como unidad de cálculo de direcciones. Como SuperAbacus no tiene PC, se le asigna al registro R0 el que tiene que hacer estas funciones, cuyo incremento se realizará a través del operador.

El tiempo de lectura y escritura en memoria es de un periodo de reloj.

NOTAS:

En las instrucciones STORE, LOAD,ADD, SUS, Rn representa cualquiera de los registros R2 a R15 En la instrucción MOVE, Rn y Rm , representan cualquiera de los registros R2 a R15

Que el Código de Operación de la instrucción debe incluir el registro que se referencia El tiempo de acceso a la memoria es de 50ns.

Considerar todas la señales de carga de un registro por flanco de subida, y las de salida a un bus o los ciclos de L/E de nivel.

Las señales de control más significativas son:

NOP: Permite la transferencia de la información entre una de las entradas de la unidad y la salida (NOP1 y NOP2).

INCR: Transferencia desde una de las dos entradas, con incremento en 1, de la información (INC1 y INC2).

SUM: Suma de los datos presentes en las entradas (SUM12), o de un dato de una de las entradas con el contenido del acumulador (SUM1 y SUM2).

SUS: Resta de los datos de las entrada 2 y 1.

CMP: Complemento de los datos de una de las dos entradas (CMP1 y CMP2).

Calcular:

Cronograma de todas las instrucciones.

Grafo de estados mínimo Tabla del estado siguiente.

Tabla de las funciones de salida.

Contenido de la memoria para la instrucción STORE R1. Si su código de operación es 00h

(22)

SR0

SR15

LR0

LR15

LAC

2

AC

1

SR

SAC LRD

MEMORIA L

E

CO DIR

Sdir

LRI

RDAT SD

SDAT LDAT

EA1 EA2

SRT

Super Ábacus

STORE R,dir ; M(dir) ← R LOAD R,dir ; R ← M(dir) MOVE R

n

,R

m

; R

m

← R

n

ADD R

,

dir ;R ←R+M(dir) SUS R

,

dir ;R ←R-M(dir)

R

D

(23)

Problema 4

STORE Rn, dir ; M(DIR) Rn B. Y P. INSTRU. SIGUIENTE

RD ← R0 ; SR0, SR, LRD RDAT ← M(RD) ; L

RI ← RDAT ; SDAT, LRI

PC ← PC + 1 ; SR0, EA2, INC2, LAC ;LR0

EJECUCIÓN

RD ← DIR ; SDIR, LRD

RDAT ← Rn ; SRn, SRT, LDAT

M(RD) ← RDAT ; E

SR0 SR LRD

L SDAT

LRI EA2 INC2

LAC LR0

B y P.I. DEC

SDIR SR

n

SRT LDAT

E

EJECC

(24)

Cronogramas de LDAX’s

Lac

RT LRT

(25)

LdaXp; Aß M(D&E); Eß E+1

Selreg[1-0]

ALU[3-0]

L Lri

xx 11

Sreg LdirL

10

LdirH

Sdir[2-1] 00 xx xx xx 10

xx

Lac

xx Reloj

LRT

xx xx xx xx xx Inc RT

Salu

11

Lreg

1. Carga en el acumulador

el dato dado por la dirección del par de registros DyE

2. Incrementa el registro E

(26)

LdaDX; Eß E-1; Aß M(D&E)

Selreg[1-0]

ALU[3-0]

L Lri

xx 11

Sreg LdirL

11

LdirH

Sdir[2-1] 00 xx xx xx xx

10

Lac

xx Reloj

LRT

xx xx xx Dec RT xx xx

Salu

xx

Lreg

10 1.  Decrementa el registro E.

2.  Carga en el acumulador

el dato dado por la dirección del

par de registros DyE

(27)
(28)
(29)

UC del multiplicador

Estado Acción microordenes

S0 reset rst

S1 carga

multiplicando

Lando

S2 carga

multiplicador

Ldor

S3 calcula producto parcial

suma, Lp S4 Desplaza el

producto parcial

desplaza

S5 termina done, Op

(30)
(31)

Problema Unidad de Control µProgramada

Disponemos de un operador como se muestra en la figura siguiente, el cual realiza la operación (1) (1) y en la que se dan los siguientes pasos:

Se espera la llegada del Reset_in, instante en el que se ponen a cero todos los registros mediante la señal Reset.

El primer valor que se recibe por el BDAT, es el de N.

Se comprueba que N no sea cero, si lo fuera, se ha terminado y se comienza de nuevo.

Si N es distinto de cero, por el BDAT se reciben tantas A’s y B’s como indique N, para realizar la operación de la ecuación (1) colocando el resultado final en R.

Se pide:

a) Diseñar el circuito combinacional que detecta que N es cero, teniendo en cuenta que debe poner un

1 cuando N sea DISTINTO de 0 (0,5 ptos)

b) Grafo de estados de la Unidad de Control, con el menor número de estados, y teniendo en

cuenta que se debe empezar por el estado cero y utilizar la codificación del número del estado en binario.

(1 pto)

c) Tabla de la función de salida (0,25ptos)

d)  Tabla del estado siguiente (0,25ptos)

e)  Contenido de la memoria de microprograma para realizar la unidad de control con direccionamiento explícito y codificación horizontal de las microinstrucciones, teniendo en cuenta que el formato de la

microinstrucción es del siguiente (0,5ptos)

=

= n 1

i A i * B i S

reset Ln La Sa Lb Sb Lp Sp Lr Sr DecN

(32)

Ruta de Datos

Ln

BDAT La

A

Lb N B

*

P

BResul Unidad de

control

Sr

Reset

Lr Circuito

combinacional

8

1 cero

Ln La Sa Lb Sb

Lp Lr Sp

Reset

16 DecN

DecN

+

R Reset

Sr

16

16 Reset_in

Sa Sb

Lp

Sp Reset

Reset

Sn

(33)

Solución

a)  El circuito combinacional para detectar que en un conjunto de bits hay algún 1, simplemente es la función lógica OR de todos los bits.

Cero

N

(34)

Solución

b)  Grafo de estados

(35)

Solución

b)  Simplificando S7

(36)

Solución

SEÑALES DE CONTROL

ESTADOS

0 1 2 3 4 5 6 7 8

Reset 1 0 0 0 0 0 0 0 0

Ln 0 1 0 0 0 0 0 0 0

La 0 0 0 1 0 0 0 0 0

Sa 0 0 0 0 0 1 0 0 0

Lb 0 0 0 0 1 0 0 0 0

Sb 0 0 0 0 0 1 0 0 0

Lp 0 0 0 0 0 0 1 0 0

Sp 0 0 0 0 0 1 0 0 0

Lr 0 0 0 0 0 1 0 0 0

Sr 0 0 0 0 0 0 1 0 1

DecN 0 0 0 0 0 0 1 0 0

Tabla de la función de salida

(37)

Solución

Tabla de la función de salida SEÑALES DE

CONTROL

ESTADOS

0 1 2 3 4 5 6 8

Reset 1 0 0 0 0 0 0 0

Ln 0 1 0 0 0 0 0 0

La 0 0 0 1 0 0 0 0

Sa 0 0 0 0 0 1 0 0

Lb 0 0 0 0 1 0 0 0

Sb 0 0 0 0 0 1 0 0

Lp 0 0 0 0 0 0 1 0

Sp 0 0 0 0 0 1 0 0

Lr 0 0 0 0 0 1 0 0

Sr 0 0 0 0 0 0 1 1

DecN 0 0 0 0 0 0 1 0

(38)

Tabla de

estado siguiente

ENTRADAS ESTADO ACTUAL PROXIMO ESTADO Reset_in Cero

1 X X E0

0 X E0 E1

0 X E1 E2

0 0 E2 E8

0 1 E2 E3

0 X E3 E4

0 X E4 E5

0 X E5 E6

0 0 E6 E8

0 1 E6 E2

0 X E8 E1

1 X E1 E0

1 X E2 E0

1 X E3 E0

1 X E4 E0

1 X E5 E0

1 X E6 E0

1 X E8 E0

(39)

Grafo de estados 1 (sin simplificar)

Direcc. Contenido de la memoria de micro programa Microinstrucciones

Contenido de la memoria de micro

programa Reset Ln La Sa Lb Sb Lp Sp Lr Sr DecN Próxima dirección

0000 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1

0001 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0

0010 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1

0011 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0

0100 0 0 0 0 1 0 0 0 0 0 0 0 1 0 1

0101 0 0 0 1 0 1 0 1 1 0 0 0 1 1 0

0110 0 0 0 0 0 0 1 0 0 1 1 0 1 1 1

0111 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0

1000 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0

Bitoring

(40)

Bitoring

" Es necesario calcular los circuitos de Bitoring pues tenemos dos microsaltos. Para ello

se plantea la siguiente tabla de verdad

Cero µM3 µM2 µM1 µM0 µPC3 µPC2 µPC1 µPC0

X 0 0 0 0 0 0 0 1

0 0 0 0 1 0 0 1 0

0 0 0 1 0 0 0 0 1

1 0 0 1 0 0 0 1 1

X 0 0 1 1 0 1 0 0

X 0 1 0 0 0 1 0 1

X 0 1 0 1 0 1 1 0

X 0 1 1 0 0 1 1 1

0 0 1 1 1 1 0 0 0

1 0 1 1 1 0 0 1 1

X 1 0 0 0 0 0 0 0

(41)

Bitoring

" Se debe aplicar Karnaugh para 5 variables y obtener los bits de

bitoring para el µPC

1 3 2

0

0 M 3 M Cero M M M

µPC = ⋅ + ⋅ ⋅ ⋅

2 0 0 3

1 3 1 0

3 2 1 0

1 Cero M 3 M M M M M M Cero M M M Cero M M M

µPC = ⋅ ⋅ ⋅ + ⋅ ⋅ ⋅ + ⋅ ⋅ ⋅ + ⋅ ⋅ ⋅

2 1 0 3

2 1 3

2 0

2 M 3 M M M M M M M M M

µPC = ⋅ ⋅ + ⋅ ⋅ ⋅ + ⋅ ⋅

0 1

3 2

3 Cero M M M M

µPC = ⋅ ⋅ ⋅ ⋅

(42)

Bitoring

M3M2\M1M0 00 01 11 10

00 1 0 0 1

01 1 0 0 1

11 X X X X

10 0 X X X

CERO

M3M2\M1M0 00 01 11 10

00 1 X 0 1

01 1 0 1 1

11 X X X X

10 0 X X X

CERO

1 3 2

0

0 M 3 M Cero M M M

µPC = ⋅ + ⋅ ⋅ ⋅

(43)

Bitoring

M3M2\M1M0 00 01 11 10

00 0 1 0 0

01 0 1 0 1

11

10 0

CERO

M3M2\M1M0 00 01 11 10

00 0 0 1

01 0 1 1 1

11

10 0

CERO

2 0 0 3

1 3 1 0

3 2 1 0

1 Cero M 3 M M M M M M Cero M M M Cero M M M

µPC = ⋅ ⋅ ⋅ + ⋅ ⋅ ⋅ + ⋅ ⋅ ⋅ + ⋅ ⋅ ⋅

(44)
(45)

Problema Unidad de Control VHDL

Disponemos de un operador como se muestra en la figura siguiente, el cual realiza la operación (1) (1) y en la que se dan los siguientes pasos:

Se espera la llegada del Reset_in, instante en el que se ponen a cero todos los registros mediante la señal Reset.

El primer valor que se recibe por el BDAT, es el de N.

Se comprueba que N no sea cero, si lo fuera, se ha terminado y se comienza de nuevo.

Si N es distinto de cero, por el BDAT se reciben tantas A’s y B’s como indique N, para realizar la operación de la ecuación (1) colocando el resultado final en R.

Se pide:

a) Diseñar el circuito combinacional que detecta que N es cero, teniendo en cuenta que debe poner un

1 cuando N sea DISTINTO de 0 (0,5 ptos)

b) Grafo de estados de la Unidad de Control, con el menor número de estados, y teniendo en

cuenta que se debe empezar por el estado cero y utilizar la codificación del número del estado en binario.

(1 pto)

c) Tabla de la función de salida (0,25ptos)

d)  Tabla del estado siguiente (0,25ptos)

e)  Describir en VHDL la Unidad de Control

=

= n 1

i A i * B i

S

(46)

Ruta de Datos

Ln

BDAT La

A

Lb N B

*

P

BResul Unidad de

control

Sr

Reset

Lr Circuito

combinacional

8

1 cero

Ln La Sa Lb Sb

Lp Lr Sp

Reset

16 DecN

DecN

+

R Reset

Sr

16

16 Reset_in

Sa Sb

Lp

Sp Reset

Reset

Sn

(47)

Solución

a)  El circuito combinacional para detectar que en un conjunto de bits hay algún 1, simplemente es la función lógica OR de todos los bits.

Cero

N

(48)

Solución

b)  Grafo de estados

(49)

Solución

b)  Simplificando S7

(50)

Solución

SEÑALES DE CONTROL

ESTADOS

0 1 2 3 4 5 6 7 8

Reset 1 0 0 0 0 0 0 0 0

Ln 0 1 0 0 0 0 0 0 0

La 0 0 0 1 0 0 0 0 0

Sa 0 0 0 0 0 1 0 0 0

Lb 0 0 0 0 1 0 0 0 0

Sb 0 0 0 0 0 1 0 0 0

Lp 0 0 0 0 0 0 1 0 0

Sp 0 0 0 0 0 1 0 0 0

Lr 0 0 0 0 0 1 0 0 0

Sr 0 0 0 0 0 0 1 0 1

DecN 0 0 0 0 0 0 1 0 0

Tabla de la función de salida

(51)

Solución

Tabla de la función de salida SEÑALES DE

CONTROL

ESTADOS

0 1 2 3 4 5 6 8

Reset 1 0 0 0 0 0 0 0

Ln 0 1 0 0 0 0 0 0

La 0 0 0 1 0 0 0 0

Sa 0 0 0 0 0 1 0 0

Lb 0 0 0 0 1 0 0 0

Sb 0 0 0 0 0 1 0 0

Lp 0 0 0 0 0 0 1 0

Sp 0 0 0 0 0 1 0 0

Lr 0 0 0 0 0 1 0 0

Sr 0 0 0 0 0 0 1 1

DecN 0 0 0 0 0 0 1 0

(52)

Tabla de

estado siguiente

ENTRADAS ESTADO ACTUAL PROXIMO ESTADO Reset_in Cero

1 X X E0

0 X E0 E1

0 X E1 E2

0 0 E2 E8

0 1 E2 E3

0 X E3 E4

0 X E4 E5

0 X E5 E6

0 0 E6 E8

0 1 E6 E2

0 X E8 E1

1 X E1 E0

1 X E2 E0

1 X E3 E0

1 X E4 E0

1 X E5 E0

1 X E6 E0

1 X E8 E0

Todas las tablas

que hemos visto no

son necesarias para

la descripción VHDL

(53)

Descripción VHDL de la UC del problema

" Consideraciones Generales para describir FSM.

q   El estado es mejor definirlo como una señal, así puede ser directamente visualizado durante la simulación.

●  Además así puede servir de elemento de activación de uno o más PROCESS.

q  Para inicializar la máquina en un estado determinado es mejor definir una señal de reset, que sirva para este fin.

q  El cálculo del estado futuro y la actualización del estado actual no se deben realizar en el mismo PROCESS.

q  Preferiblemente deben utilizarse tres PROCESS:

●  Cálculo de las salidas a partir del estado actual (en máquinas de Moore) o del estado actual y las entradas (en máquinas de Mealy).

●  Cálculo del estado futuro a partir del estado actual y las entradas.

●  Actualización de la memoria (estado futuro pasa a convertirse en estado

actual) e inicialización del estado (reset).

(54)

Descripción VHDL

de máquinas de estados finitas. Ejemplo

Library IEEE;

USE ieee.std_logic_1164.ALL;

ENTITY UC IS

PORT (clk, Reset_in,cero: IN std_logic;

Ln,La,Sa,Lb,Sb,DecN,Lr,Sr,Lp,Sp,: OUT std_logic);

END UC;

ARCHITECTURE comportamiento OF UC IS

-- Declaración del tipo asociado a los estados TYPE estados IS (E0,E1,E2,E3,E4,E5,E6,E8);

-- Señales auxiliares para la codificación -- del estado actual y siguiente

SIGNAL estadoActual, estadoSiguiente: estados:= E0;

(55)

Descripción VHDL

-- Proceso dedicado a la lógica de estado:

LOGICA_ESTADO: PROCESS(EstadoActual, cero) BEGIN

CASE (EstadoActual) IS

WHEN E0 => EstadoSiguiente <= E1;

WHEN E1 => EstadoSiguiente <= E2;

WHEN E2 =>

IF (Cero= 1 ) THEN EstadoSiguiente <= E3;

ELSE EstadoSiguiente <= E8;

END IF;

WHEN E3 => EstadoSiguiente <= E4;

WHEN E4 => EstadoSiguiente <= E5;

WHEN E5 => EstadoSiguiente <= E6;

WHEN E6 =>

IF (Cero= 1 ) THEN EstadoSiguiente <= E2;

ELSE EstadoSiguiente <= E8;

END IF;

WHEN E8 => EstadoSiguiente <= E1;

END CASE;

END PROCESS LOGICA_ESTADO;

(56)

Descripción VHDL

-- Proceso dedicado a la Memoria de Estado

MEM_ESTADO: PROCESS(CLK,Reset_in,EstadoSiguiente) BEGIN

--Inicialización con RESET_ A UNO

IF (Reset_in= 1 ) THEN EstadoActual <= E0;

ELSIF(rising_edge(CLK)) THEN EstadoActual <= EstadoSiguiente;

END IF;

END PROCESS MEM_ESTADO;

--Zona concurrente dedicada a modelar las señales de salida Reset <= ‘1’ WHEN EstadoActual = E0 else ‘0’;

Ln <= ‘1’ WHEN EstadoActual = E1 else ‘0’;

La <= ‘1’ WHEN EstadoActual = E3 else ‘0’;

Sa <= ‘1’ WHEN EstadoActual = E5 else ‘0’;

Lb <= ‘1’ WHEN EstadoActual = E3 else ‘0’;

Sb <= ‘1’ WHEN EstadoActual = E5 else ‘0’;

Lp <= ‘1’ WHEN EstadoActual = E6 else ‘0’;

Sp <= ‘1’ WHEN EstadoActual = E5 else ‘0’;

Lr <= ‘1’ WHEN EstadoActual = E5 else ‘0’;

Sr <= ‘1’ WHEN (EstadoActual = E6 and EstadoActual = E8) else ‘0’;

DecN <= ‘1’ WHEN EstadoActual = E6 else ‘0’;

END comportamiento;

(57)

Otro ejemplo

Describid en VHDL el grafo de estados de la figura

E 0 1/0 E 1

E 2 E 3

reset

1/0 1/1

X/0

E 4 1/0 0/0

0/0 0/0 0/0

NOTA: Es un grafo de un autómata tipo Mealy

(58)

Ejemplo

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

ENTITY MaquinaEstados IS

PORT (Entrada: IN std_logic; --Señal de entrada.

CLK: IN std_logic; --Señal de reloj.

rstH: IN std_logic; --Señal de inicialización Salida: OUT std_logic); --Salida

END MaquinaEstados;

ARCHITECTURE MaquinaEstadosArch OF MaquinaEstados IS --Declaración del tipo asociado a los estados

TYPE TipoEstados IS (E0, E1, E2, E3, E4);

--Señales auxiliares para la codificación del --estado actual y siguiente

SIGNAL EstadoActual, EstadoSiguiente: TipoEstados;

BEGIN

(59)

Ejemplo

-- Proceso dedicado a la lógica de estado:

LOGICA_ESTADO: PROCESS(EstadoActual, Entrada) BEGIN

CASE (EstadoActual) IS WHEN E0 =>

IF (Entrada = 1 ) THEN EstadoSiguiente <= E1;

ELSE EstadoSiguiente <= E4;

END IF;

WHEN E1 =>

IF (Entrada = 1 ) THEN EstadoSiguiente <= E2;

ELSE EstadoSiguiente <= E4;

END IF;

WHEN E2 =>

IF (Entrada = 1 ) THEN EstadoSiguiente <= E3;

ELSE EstadoSiguiente <= E4;

END IF;

WHEN E3 => EstadoSiguiente <= E3;

WHEN E4 =>

IF (Entrada = 1 ) THEN EstadoSiguiente <= E1;

ELSE EstadoSiguiente <= E4;

END IF;

END CASE;

END PROCESS LOGICA_ESTADO;

(60)

Ejemplo

-- Proceso dedicado a la Memoria de Estado MEM_ESTADO: PROCESS(CLK,rstH,EstadoSiguiente) BEGIN

--Inicialización con RESET_ A UNO

IF (rstH = 1 ) THEN EstadoActual <= E0;

ELSIF(rising_edge(CLK)) THEN EstadoActual <= EstadoSiguiente;

END IF;

END PROCESS MEM_ESTADO;

--Zona concurrente dedicada a modelar las señales de salida

Salida <= 1 WHEN (EstadoActual = E2 and Entrada = 1 ) ELSE 0 ;

-- Salida = f(Estado, entrada) => Máquina de Mealy

END MaquinaEstadosArch;

(61)

Depósito

Se pide diseñar un circuito de control que opere de la siguiente forma:

q  En condiciones de llenado normal, las válvulas E y S se encuentran abiertas.

q  Si el líquido llega al nivel de vacío, se cierra la válvula de salida y se mantiene abierta la de entrada.

q  Si el líquido llega al nivel de lleno, se cierra la válvula de entrada y se mantiene abierta la de salida.

q  Si por cualquier circunstancia, por ejemplo lluvia, se llegara al nivel de alarma, se deberá cerrar la válvula de entrada y abrir la de salida. Esta situación se mantendrá hasta que el tanque llegue al estado de vacío.

Un tanque de agua abierto por la parte superior dispone de tres sensores de detección de llenado (sensor1,sensor2 , sensor3) que determinan 4 posibles niveles de llenado (VACIO, NORMAL, LLENO, ALARMA).

El nivel del tanque se controla mediante dos válvulas (E y S).

(62)

Depósito

El funcionamiento de los sensores digitales y las válvulas E y S se muestra en la tabla

sensor3 sensor2

sensor1 E

S

Válvulas E y S 1 => abierta 0 => cerrada

Sensores

sensor3 Sensor2 sensor1 Significado

0 0 0 Vacío

0 0 1 Normal

0 1 0 Error

0 1 1 Lleno

1 0 0 Error

1 0 1 Error

1 1 0 Error

1 1 1 Alarma

(63)

Depósito

Podemos resolver el problema considerando una caja negra con las siguientes entradas y salidas:

Entradas: sensor3, sensor2 y sensor1 asociadas a los sensores de nivel, una entrada de reloj (CLK) y un a de reset por uno (rstH)

Salidas: Las dos encargadas de controlar la válvulas (E para la entrada y S para la salida)

MÁQUINA DE

ESTADOS sensor3

sensor2 sensor1 CLK rstH

E

S

(64)

Depósito

111 011 001

111

011

001 111

011

001

011

001

000 000 RESET

ALARMA E = '0';

S = '1';

VACIO E = '1';

S = '0';

LLENO E = '0';

S = '1';

NORMAL E = '1';

S = '1';

(65)

Depósito

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

ENTITY MaquinaEstadosMoore IS

PORT ( sensor3, sensor2, sensor1: IN std_logic;

CLK: IN std_logic;

rstH: IN std_logic;

vE, vS: OUT std_logic);

END MaquinaEstadosMoore;

ARCHITECTURE MaquinaEstadosMooreArch OF MaquinaEstadosMoore IS

--Declaración del tipo asociado a los estados.

TYPE TipoEstados IS (VACIO, NORMAL, LLENO,ALARMA);

--Señales auxiliares para la codificación del --estado actual y siguiente

SIGNAL EstadoActual, EstadoSiguiente: TipoEstados;

BEGIN

(66)

Depósito

-- Proceso dedicado a la lógica de estado

LOGICA_ESTADO: PROCESS(EstadoActual, Entrada) BEGIN

CASE (EstadoActual) IS WHEN VACIO =>

IF (sensor3 = 0 and sensor2= 0 and ssensor3 = 0 ) THEN EstadoSiguiente <= VACIO;

ELSIF (sensor3 = 0 and sensor2= 0 and sensor1 = 1 ) THEN EstadoSiguiente <= NORMAL;

ELSIF (sensor3 = 0 and sensor2= 1 and sensor1 = 1 ) THEN EstadoSiguiente <= LLENO;

ELSIF (sensor3 = 1 and sensor2= 1 and sensor1 = 1 ) THEN EstadoSiguiente <= ALARMA;

END IF;

WHEN NORMAL =>

IF (sensor3 = 0 and sensor2= 0 and ssensor3 = 0 ) THEN EstadoSiguiente <= VACIO;

ELSIF (sensor3 = 0 and sensor2= 0 and sensor1 = 1 ) THEN EstadoSiguiente <= NORMAL;

ELSIF (sensor3 = 0 and sensor2= 1 and sensor1 = 1 ) THEN EstadoSiguiente <= LLENO;

END IF;

(67)

Depósito

WHEN LLENO =>

IF (sensor3 = 0 and sensor2= 0 and sensor1 = 1 ) THEN EstadoSiguiente <= NORMAL;

ELSIF (sensor3 = 0 and sensor2= 1 and sensor1 = 1 ) THEN EstadoSiguiente <= LLENO;

ELSIF (sensor3 = 1 and sensor2= 1 and sensor1 = 1 ) THEN EstadoSiguiente <= ALARMA;

END IF;

WHEN ALARMA =>

IF (sensor3 = 0 and sensor2= 0 and sensor1 = 0 ) THEN EstadoSiguiente <= VACIO;

ELSE

EstadoSiguiente <= ALARMA;

END IF;

END CASE;

END PROCESS LOGICA_ESTADO;

(68)

Depósito

-- Proceso dedicado a la Memoria de Estado

MEM_ESTADO: PROCESS(CLK, rstH, EstadoSiguiente) BEGIN

--Inicialización con RESET a UNO IF (rstH = 1 ) THEN

EstadoActual <=VACIO;

ELSIF(rising_edge(CLK)) THEN

EstadoActual <= EstadoSiguiente;

END IF;

END PROCESS MEM_ESTADO;

-- Zona concurrente dedicada a modelar la lógica de salida.

-- Salidas = f(Estado) => Máquina de MOORE S <= 0 WHEN (EstadoActual = VACIO) ELSE 1 ;

E <= 1 WHEN (EstadoActual = NORMAL or EstadoActual = VACIO) ELSE 0 ;

END MaquinaEstadosMooreArch;

(69)

Figure

Updating...

References

Related subjects :