48
© Departamento de Arquitectura y Tecnología de Sistemas Informáticos - Facultad de Informática - Universidad Politécnica de Madrid - V. Rodellar 1 PARTE I. TÉCNICAS DE DISEÑO ELECTRÓNICO MEDIANTE LENGUAJES DE DESCRIPCIÓN HARDWARE TEMA 3. Modelos de sistemas con VHDL Curso 05/06

PARTE I. TÉCNICAS DE DISEÑO ELECTRÓNICO …tamarisco.datsi.fi.upm.es/ASIGNATURAS/TC/apuntes/P_Tema3._VHD_… · 3.3 Sistemas secuenciales 3.3.1 Modelos para máquinas de estados

Embed Size (px)

Citation preview

© Departamento de Arquitectura y Tecnología de Sistemas Informáticos - Facultad de Informática -Universidad Politécnica de Madrid - V. Rodellar

1

PARTE I. TÉCNICAS DE DISEÑO ELECTRÓNICO MEDIANTE LENGUAJES DE DESCRIPCIÓN HARDWARE

TEMA 3. Modelos de sistemas con VHDL

Curso 05/06

TEMA 3. Modelos de sistemas digitales3.1 Sistemas combinacionales

3.1.1 Modelado de retardos en funciones lógicas y estilos de descripción de arquitecturas.

3.1.2 Modelado de multiplexores en los estilos: algorítmico, flujo y estructural

3.1.3 Modelado de decodificadores en los estilos: algorítmico, flujo y estructural

3.2 Sistemas de memoria

3.2.1 Realización de biestables y latches en estilos: comportamiento, flujo y estructural. Entradas de control asíncronas y asíncronas. Relojes.

3.2.2 Realización de registros en estilo estructural. Reusabilidad. Bucles hardware.

3.2.3 Otros ejemplos.

© Departamento de Arquitectura y Tecnología de Sistemas Informáticos - Facultad de Informática -Universidad Politécnica de Madrid - V. Rodellar

2

3.3 Sistemas secuenciales

3.3.1 Modelos para máquinas de estados finitos

3.3.2 Realización de una máquina de Moore

3.3.3 Realización de una máquina de Mealy

Resumen

NOTA:

Los apartados 3.1 y 3.2 han sido desarrollados en las clases de teoría de temas anteriores y en las clases de laboratorio.

© Departamento de Arquitectura y Tecnología de Sistemas Informáticos - Facultad de Informática -Universidad Politécnica de Madrid - V. Rodellar

3

3.3.1 Modelos para máquinas de estados finitos (FSM)

- Modelos de Moore y Mealy

- Metodología de diseño de FSM

-Modelo algorítmico

- Un mal modelo

- Un modelo mejorado (Moore)

- Señales de Reset

- Varios PROCESS

- Modelo Data flow

- Modelo estructural

- Comparación entre los modelos de Mealy y Moore

© Departamento de Arquitectura y Tecnología de Sistemas Informáticos - Facultad de Informática -Universidad Politécnica de Madrid - V. Rodellar

4

© Departamento de Arquitectura y Tecnología de Sistemas Informáticos - Facultad de Informática -Universidad Politécnica de Madrid - V. Rodellar

5

Esquemas de Moore y Mealy (FSMs)Estructura de Moore Estructura de Mealy

Estado actual

Registro (Secuencial)

Estado futuro

(Combinacional)

Salidas

(combinacional)

inputs

inputs

clock

O(t)

S(t+1)

Estado actual

Registro (Secuencial)

Estado futuro

(Combinacional)

Salidas

(combinacional)

O(t)

S(t+1)

S(t)S(t)

I(t)

I(t)

O(t) = F1( S(t))

S(t+1) = F2 (I(t), S(t))O(t) = F1( S(t), I(t))

S(t+1) = F2 (I(t), S(t))

clock

Metodología de diseño de FSMEtapas básicas

1) Diagrama-Tabla de estados, ASM

Niveles de Descripciónasociados con los HDLs

} Comportamiento o algorítmico

estado

salida

estado

salida

estado estado

entrada/salida

entrada Moore

Mealy

6

Metodología de diseño de FSMEtapas básicas Niveles de Descripción

asociados con los HDLs2) Ecuaciones del estado futuro y salidas

Estado actual Entradas Estado futuro Salidas

C1(t) C0(t) A(t) B(t) C1(t+1) C0(t+1) X(t) Y(t)

0 0 0 0 0 1 1 0

0 0 0 1 0 0 1 1

0 0 1 0 0 0 1 1

....... ........... ........... ..........

D1(t+1) = C1(t) A(t) + C0(t) A(t)’+ ......

D0(t+1) = C1(t) B(t) + C0(t) B(t)’+ ......

X(t) = ........ Y(t) = ................}

Flujo de datos o transferencia entre

registros

7

Metodología de diseño de FSMEtapas básicas Niveles de Descripción

asociados con los HDLs

3) Implementación del circuito

Componentes: Dispositivos lógicos

(puertas: NOT, AND ... MUX, DECODERS, .....)

Elementos de memoria ( Flip-Flops)

Conexionado

} Estructural

8

Modelado Algorítmico de FSM• Consideraciones Generales:

– El estilo del código tiene que ser independiente de la máquina de estados que se diseñe.

– Diferentes formas de modelar la misma máquina:• ¿Cuantos procesos PROCESS?• ¿Señales o variables?• ¿Sentencias IF o CASE?• El uso de la sentencia WAIT

– ¿Debe ser inicializada la máquina en un estado válido? ¿Hay que utilizar señal de reset?

– Portabilidad del código

© Departamento de Arquitectura y Tecnología de Sistemas Informáticos - Facultad de Informática -Universidad Politécnica de Madrid - V. Rodellar

9

Modelado algorítmico de una FSM - Un mal modeloMáquina de Moore

Retardo en la operación de lectura en una memoria RAM

Slow (S)Slow (S) Read (R)Read (R)

Write (W)Write (W)

ClockClock

LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.all;

ENTITY fsm_bad ISPORT (

clock: IN STD_LOGIC; -- flanco subidaslow: IN STD_LOGIC; -- entrada controlread, write: OUT STD_LOGIC -- salidas

);END fsm_bad;

ST_READST_READ

R=1 W=0R=1 W=0

ST_WRITEST_WRITE

R=0 W=1R=0 W=1

ST_DELAYST_DELAY

R=0 W=0R=0 W=0

S = 0S = 0

S = 1S = 1

© Departamento de Arquitectura y Tecnología de Sistemas Informáticos - Facultad de Informática -Universidad Politécnica de Madrid - V. Rodellar

10

Modelado algorítmico de una FSM - Un mal modeloARCHITECTURE bad OF fsm_bad ISBEGINPROCESSTYPE state_type IS (ST_read, ST_write, ST_delay);VARIABLE state :state_type := ST_read;BEGINWAIT UNTIL rising_edge(clock);CASE state ISWHEN ST_read => read <= '1';

write <= '0';state := ST_write;

WHEN ST_write => read <= '0';write <= '1';IF (slow = '1') THEN state := ST_delay;

ELSEstate := ST_read;

END IF;WHEN ST_delay => read <= '0';

write <= '0';state := ST_read;

END CASE;END PROCESS;

END bad;

Retardo en la operación de lectura en una memoria RAM

ST_READST_READ

R=1 W=0R=1 W=0

ST_WRITEST_WRITE

R=0 W=1R=0 W=1

ST_DELAYST_DELAY

R=0 W=0R=0 W=0

S = 0S = 0

S = 1S = 1

Máquina de Moore

11

Resultados de simulación del modelo malo

12

ST_READST_READ

R=1 W=0R=1 W=0

ST_WRITEST_WRITE

R=0 W=1R=0 W=1

ST_DELAYST_DELAY

R=0 W=0R=0 W=0

S = 0S = 0

S = 1S = 1

CASE state ISWHEN ST_read => read <= '1';

write <= '0';state := ST_write;

WHEN ST_write => read <= '0';write <= '1';IF (slow = '1') THEN state := ST_delay;

ELSEstate := ST_read;

END IF;WHEN ST_delay => read <= '0';

write <= '0';state := ST_read;

END CASE;Máquina de Moore

¿Por qué este modelo es malo?1) El estado actual (state) está definido como una variable, no puede ser directamente monitorizado durante la simulación No puede activar un PROCESS.

2) Tres estados requieren dos FF, hay un estado sin utilizar. Ha de incluirse una señal de reset para poder salir del estado sin usar en el caso de que entrar en él.

3) El estado futuro y el estado actual no deben ser definidos en el mismo PROCESS. El estado futuro es combinacional, el estado actual es memoria

Pueden usarse:

- dos PROCESS uno para salidas y estado futuro y otro para la memoria - MEALY

- tres PROCESS uno para las salidas, otro estado futuro, otro memoria - MOORE

No deben mezclarse las partes No deben mezclarse las partes combinacionalescombinacionales y memoriay memoria

© Departamento de Arquitectura y Tecnología de Sistemas Informáticos - Facultad de Informática -Universidad Politécnica de Madrid - V. Rodellar

13

Moore Mealy

clock

clock

S(t+1)

Estado actual

Registro (Secuencial)

Estado futuro

(Combinacional)

Salidas

(combinacional)

inputs

O(t)

S(t)

I(t)

O(t) = F1( S(t), I(t))

S(t+1) = F2 (I(t), S(t))

S(t+1)

inputs

Estado actual

Registro (Secuencial)

Estado futuro y salidas

(Combinacional)

O(t)

S(t)

I(t)

Las salidas y el estado futurodependen de las mismas entradas, pueden agruparse en el mismoproceso

© Departamento de Arquitectura y Tecnología de Sistemas Informáticos - Facultad de Informática -Universidad Politécnica de Madrid - V. Rodellar

14

Mejorando el modelo – 3 PROCESS, RESET síncrono

Estado actual (secuencial)

Estado futuro (combinacional)

Salida ( combinacional)

LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.all;

ENTITY fsm_good ISPORT (

clock : IN STD_LOGIC ; -- activo por flanco de subidaslow : IN STD_LOGIC ; -- entrada de control del sistemareset : IN STD_LOGIC ; -- activo a nivel altoread, write : OUT STD_LOGIC

);END fsm_good;

reset clock

read

writeMáquina de Moore slow

© Departamento de Arquitectura y Tecnología de Sistemas Informáticos - Facultad de Informática -Universidad Politécnica de Madrid - V. Rodellar

15

Mejorando el modelo – 3 PROCESS, RESET síncrono

ST_READST_READ

R=1 W=0R=1 W=0

ST_WRITEST_WRITE

R=0 W=1R=0 W=1

ST_DELAYST_DELAY

R=0 W=0R=0 W=0

S = 0S = 0

S = 1S = 1

RESET

ARCHITECTURE good OF fsm_good ISTYPE state_type IS (ST_read, ST_write, ST_delay);SIGNAL current_state, next_state :state_type;

BEGIN output: PROCESS (current_state)BEGIN CASE current_state IS

WHEN ST_read => Read <= '1‘ ; Write <= '0';WHEN ST_write => Read <= '0‘ ; Write <= '1';WHEN ST_delay => Read <= '0‘ ; Write <= '0';

-- seria necesario poner la siguiente sentencia?WHEN OTHERS => Read <= '1 ; Write <= '0’;

END CASE;END PROCESS output;

Estado actual (secuencial)

Estado futuro (combinacional)

Salida ( combinacional)

reset clock

slow

© Departamento de Arquitectura y Tecnología de Sistemas Informáticos - Facultad de Informática -Universidad Politécnica de Madrid - V. Rodellar

16

Mejorando el modelo – 3 PROCESS, RESET síncrono

ST_READST_READ

R=1 W=0R=1 W=0

ST_WRITEST_WRITE

R=0 W=1R=0 W=1

ST_DELAYST_DELAY

R=0 W=0R=0 W=0

S = 0S = 0

S = 1S = 1

RESET

future: PROCESS (current_state,slow)BEGIN CASE current_state IS

WHEN ST_read => next_state <= ST_write;WHEN ST_write => IF (slow = '1')

THEN next_state <= ST_delay;

ELSEnext_state <= ST_read;

END IF;WHEN ST_delay => next_state <= ST_read;WHEN OTHERS => next_state <= ST_read;

END CASE;END PROCESS future;

slow

Estado actual (secuencial)

Estado futuro (combinacional)

Salida ( combinacional)

clockreset

© Departamento de Arquitectura y Tecnología de Sistemas Informáticos - Facultad de Informática -Universidad Politécnica de Madrid - V. Rodellar

17

Mejorando el modelo – 3 PROCESS, RESET síncrono

actual: PROCESSBEGINWAIT UNTIL rising_edge(clock);

-- reset síncronoIF (reset = '1') THEN

current_state <= ST_read;ELSE

current_state <= next_state;END IF;

END PROCESS actual;

END good;

Estado actual (secuencial)

Estado futuro (combinacional)

Salida ( combinacional)

reset

© Departamento de Arquitectura y Tecnología de Sistemas Informáticos - Facultad de Informática -Universidad Politécnica de Madrid - V. Rodellar

18

Resultados de simulación – 3 PROCESS, RESET síncrono I

ST_READST_READ

R=1 W=0R=1 W=0

ST_WRITEST_WRITE

R=0 W=1R=0 W=1

ST_DELAYST_DELAY

R=0 W=0R=0 W=0

S = 0S = 0

S = 1S = 1

RESET

© Departamento de Arquitectura y Tecnología de Sistemas Informáticos - Facultad de Informática -Universidad Politécnica de Madrid - V. Rodellar

19

Resultados de simulación – 3 PROCESS, RESET síncrono II

ST_READST_READ

R=1 W=0R=1 W=0

ST_WRITEST_WRITE

R=0 W=1R=0 W=1

ST_DELAYST_DELAY

R=0 W=0R=0 W=0

S = 0S = 0

S = 1S = 1

RESET

© Departamento de Arquitectura y Tecnología de Sistemas Informáticos - Facultad de Informática -Universidad Politécnica de Madrid - V. Rodellar

20

Resultados de simulación – 3 PROCESS, RESET síncrono III

ST_READST_READ

R=1 W=0R=1 W=0

ST_WRITEST_WRITE

R=0 W=1R=0 W=1

ST_DELAYST_DELAY

R=0 W=0R=0 W=0

S = 0S = 0

S = 1S = 1

RESET

© Departamento de Arquitectura y Tecnología de Sistemas Informáticos - Facultad de Informática -Universidad Politécnica de Madrid - V. Rodellar

21

Resultados de simulación – 3 PROCESS, RESET síncrono IV

ST_READST_READ

R=1 W=0R=1 W=0

ST_WRITEST_WRITE

R=0 W=1R=0 W=1

ST_DELAYST_DELAY

R=0 W=0R=0 W=0

S = 0S = 0

S = 1S = 1

RESET

© Departamento de Arquitectura y Tecnología de Sistemas Informáticos - Facultad de Informática -Universidad Politécnica de Madrid - V. Rodellar

22

Modelo utilizando la sentencia SELECT y RESET asíncrono

--Generación de las salidasWITH current_state SELECT

read <= '1' WHEN ST_read, '0' WHEN ST_write,'0' WHEN ST_delay,'1' WHEN OTHERS; --?

WITH current_state SELECTwrite <= '0' WHEN ST_read,

'1' WHEN ST_write,'0' WHEN ST_delay,'0' WHEN OTHERS; - -?

Estado actual (secuencial)

Estado futuro (combinacional)

Salida ( combinacional)

reset

El estado futuro lo dejamos igual que en la arquitectura con reset sincrono

© Departamento de Arquitectura y Tecnología de Sistemas Informáticos - Facultad de Informática -Universidad Politécnica de Madrid - V. Rodellar

23

Modelo utilizando la sentencia SELECT y RESET asíncrono

-- Generación del estado actual con reset asincrono-- Observese que ahora reset forma parte de la lista de

sensibilidad del process

actual: PROCESS (reset, clock)BEGIN

IF (reset = '1') THENcurrent_state <= ST_read;

ELSIF rising_edge (clock) THENcurrent_state <= next_state;

END IF;END PROCESS actual;

END good1;

Estado actual (secuencial)

Estado futuro (combinacional)

Salida ( combinacional)

reset

© Departamento de Arquitectura y Tecnología de Sistemas Informáticos - Facultad de Informática -Universidad Politécnica de Madrid - V. Rodellar

24

Resultados de simulación – Select, RESET asíncrono I

ST_READST_READ

R=1 W=0R=1 W=0

ST_WRITEST_WRITE

R=0 W=1R=0 W=1

ST_DELAYST_DELAY

R=0 W=0R=0 W=0

S = 0S = 0

S = 1S = 1

RESET

© Departamento de Arquitectura y Tecnología de Sistemas Informáticos - Facultad de Informática -Universidad Politécnica de Madrid - V. Rodellar

25

Resultados de simulación – Select, RESET asíncrono II

ST_READST_READ

R=1 W=0R=1 W=0

ST_WRITEST_WRITE

R=0 W=1R=0 W=1

ST_DELAYST_DELAY

R=0 W=0R=0 W=0

S = 0S = 0

S = 1S = 1

RESET

© Departamento de Arquitectura y Tecnología de Sistemas Informáticos - Facultad de Informática -Universidad Politécnica de Madrid - V. Rodellar

26

Resultados de simulación – Select, RESET asíncrono III

ST_READST_READ

R=1 W=0R=1 W=0

ST_WRITEST_WRITE

R=0 W=1R=0 W=1

ST_DELAYST_DELAY

R=0 W=0R=0 W=0

S = 0S = 0

S = 1S = 1

RESET

© Departamento de Arquitectura y Tecnología de Sistemas Informáticos - Facultad de Informática -Universidad Politécnica de Madrid - V. Rodellar

27

Resultados de simulación – Select, RESET asíncrono IV

ST_READST_READ

R=1 W=0R=1 W=0

ST_WRITEST_WRITE

R=0 W=1R=0 W=1

ST_DELAYST_DELAY

R=0 W=0R=0 W=0

S = 0S = 0

S = 1S = 1

RESET

© Departamento de Arquitectura y Tecnología de Sistemas Informáticos - Facultad de Informática -Universidad Politécnica de Madrid - V. Rodellar

28

Modelo en flujo de datosReset asíncrono

Tabla de transiciones

ST_READST_READ

R=1 W=0R=1 W=0

ST_WRITEST_WRITE

R=0 W=1R=0 W=1

ST_DELAYST_DELAY

R=0 W=0R=0 W=0

S = 0S = 0

S = 1S = 1

RESET

Entradas estado actual estado futuro salidas

slow q1 q0 d1 d0 read write

- 0 0 0 1 1 0

0 0 1 0 0 0 1

1 0 1 1 0 0 1

- 1 0 0 0 0 0

- 1 1 - (0) - (0) 0 0

Codificación de estados

ST_READ 00

ST_WRITE 01

ST_DELAY 10

d1 = slow q1’ q0 (reset’)

d0 = q1’ q0’ (reset’)

read = q1’ q0’

write = q1’ q0 29

ARCHITECTURE data_flow OF fsm_good IS

SIGNAL d1, d0, q1,q0: STD_LOGIC;

BEGIN

--generacion del estado futuro

d1 <= ((slow) AND (NOT q1) AND (q0));

d0 <= ((NOT q1) AND (NOT q0));

--generación de las salidas

read <= ((NOT q1) AND (NOT q0));

write <= ((NOT q1) AND (q0));

--generación del estado actual, reset asincrono

q1 <= '0' WHEN (reset= '1') ELSE d1 WHEN rising_edge(clock);

q0 <= '0' WHEN (reset= '1') ELSE d0 WHEN rising_edge(clock);

END data_flow;

Modelo en flujo de datosUtilizando asignación condicional de

señal solamente y función para la detección de flancos

d1 = slow q1’ q0 (reset’) d0 = q1’ q0’ (reset’)

read = q1’ q0’write = q1’ q0

© Departamento de Arquitectura y Tecnología de Sistemas Informáticos - Facultad de Informática -Universidad Politécnica de Madrid - V. Rodellar

30

Resultados de simulación del modelo en flujo de datos

© Departamento de Arquitectura y Tecnología de Sistemas Informáticos - Facultad de Informática -Universidad Politécnica de Madrid - V. Rodellar

31

1

Obsérvese el comportamiento asincrono de la señal de reset y como con el flanco de subida del reloj se actualizan los valores de la memoria

Modelo estructuralslow

d1 = slow q1’ q0 (reset’)

d0 = q1’ q0’(reset’)

read = q1’ q0’ = d0

write = q1’ q0

q0

Nq0

q1

Nq1

d0

d1

clock

clock

FF

FF

read

Aux1=write

Componentes necesarios:•Inversores

•Puertas AND

•Biestables con entrada de reset activa a nivel alto y reloj activo por flanco de subida

32reset

33

Modelo estructural

slowq0

Nq0q1

Nq1

d0

d1

clock

clock

FF

FF

read

Aux1=write

ARCHITECTURE structural OF fsm_good IS

COMPONENT inversor PORT (e:IN STD_LOGIC; s: OUT STD_LOGIC);END COMPONENT;COMPONENT and_2 PORT (e1,e2:IN STD_LOGIC; s: OUT STD_LOGIC);END COMPONENT;COMPONENT or_2 PORT (e1,e2:IN STD_LOGIC; s: OUT STD_LOGIC);END COMPONENT;COMPONENT biestable_D

PORT (clock, reset, d: IN STD_LOGIC; q: OUT STD_LOGIC);END COMPONENT;SIGNAL q1,Nq1,q0,Nq0,d1,d0, aux1: STD_LOGIC;

BEGIN

inv_q1 : inversor PORT MAP (e => q1, s => Nq1);inv_q0 : inversor PORT MAP (e => q0, s => Nq0);and_write: and_2 PORT MAP (e1 => Nq1, e2 => q0, s => aux1);and_d1 : and_2 PORT MAP (e1 => slow, e2 => aux1, s => d1);and_read : and_2 PORT MAP (e1 => Nq1, e2 => Nq0, s => d0);ff_d1 : biestable_D PORT MAP (clock => clock, reset => reset, d => d1, q =>q1);ff_d0 : biestable_D PORT MAP (clock => clock, reset => reset, d => d0, q =>q0);

read <= d0;write <= aux1;END structural;

Comparación entre los modelos de Mealy y Moore

clock

clock

S(t+1)

Estado actual

Registro (Secuencial)

Estado futuro

(Combinacional)

Salidas

(combinacional)

inputs

O(t)

S(t)

I(t)

O(t) = F1( S(t), I(t))

S(t+1) = F2 (I(t), S(t))

S(t+1)

inputs

Estado actual

Registro (Secuencial)

Estado futuro y salidas

(Combinacional)

O(t)

S(t)

I(t)

Las salidas y el estado futurodependen de las mismas entradas, pueden agruparse en el mismoproceso

© Departamento de Arquitectura y Tecnología de Sistemas Informáticos - Facultad de Informática -Universidad Politécnica de Madrid - V. Rodellar

34

3.3.2 Realización de un modelo de Mealy Ejemplo de un detector de la secuencia 010

ninguno uno dos tres

1/00/0 1/0 0/1

0/0

0/0

1/0 1/0

0/0

© Departamento de Arquitectura y Tecnología de Sistemas Informáticos - Facultad de Informática -Universidad Politécnica de Madrid - V. Rodellar

35

---------------------------------------------------------------------------------- © Universidad Politécnica de Madrid-- Se permite copia para fines de estudio---------------------------------------------------------------------------------- Proyecto : Maquinas de estados finitos-- Diseño : Detector de secuencia 010-- Nombre del fichero : Detector010_mealy_B.vhd-- Autor : Profesores de Tecnologia-- Fecha : 30/5/2005-- Versión : 1.0-- Resumen : Este fichero contiene la entidad y arquitectura de-- una una FSM que implementa un dectector de la -- secuencia 010 como una máquina de Mealy. Se han utilizado-- datos tipo bit. No tiene reset.---- Modificaciones:---- Fecha Autor Versión Descripción del cambio------------------------------------------------------------------------------------------------------------------------------------------------------------------ENTITY detector_secuencia_010 ISPORT (

clock : IN BIT; -- activo por flanco de subidaentrada: IN BIT; salida : OUT BIT

);END detector_secuencia_010;

© Departamento de Arquitectura y Tecnología de Sistemas Informáticos - Facultad de Informática -Universidad Politécnica de Madrid - V. Rodellar

36

37

ARCHITECTURE comportamiento OF detector_secuencia_010 IS--Parte declarativaTYPE estado IS (ninguno, uno, dos, tres);SIGNAL estado_actual: estado := ninguno;SIGNAL estado_futuro: estado;

--Comienzo de la arquitecturaBEGIN --Proceso para generar el estado futuro y salida--combinacional:PROCESS (entrada, estado_actual)BEGINCASE estado_actual ISWHEN ninguno => IF entrada = '0' THEN

estado_futuro <= uno;salida <= '0';

ELSEestado_futuro <= ninguno;salida <= '0';

END IF;WHEN uno =>

IF entrada = '1' THENestado_futuro <= dos;salida <= '0';

ELSEestado_futuro <= uno;

salida <= '0';END IF;

WHEN dos =>IF entrada = '0' THEN

estado_futuro <= tres;salida <= '1';

ELSEestado_futuro <= ninguno;salida <= '0';

END IF;WHEN tres => IF entrada = '1' THEN

estado_futuro <= ninguno;salida <= '0';

ELSEestado_futuro <= uno;salida <= '0';

END IF; END CASE;END PROCESS combinacional;

ninguno uno dos tres

1/00/0 1/0 0/1

0/0

0/0

1/0 1/0

0/0

--Proceso para actualizar la memoria

memoria:PROCESS (clock)BEGIN

IF (clock = '1' AND clock'EVENT) THENestado_actual <= estado_futuro;

ELSEestado_actual <= estado_actual;

END IF;

END PROCESS memoria;

END comportamiento;

© Departamento de Arquitectura y Tecnología de Sistemas Informáticos - Facultad de Informática -Universidad Politécnica de Madrid - V. Rodellar

38

ENTITY test_detsec_010 ISEND test_detsec_010;

ARCHITECTURE test OF test_detsec_010 IS--Parte declarativaCOMPONENT detector_secuencia_010 PORT (

clock : IN BIT; -- activo por flanco de subidaentrada: IN BIT; salida : OUT BIT

);END COMPONENT;FOR U1: detector_secuencia_010 USE ENTITY WORK.detector_secuencia_010(comportamiento);CONSTANT ciclo: TIME := 10 ns;SIGNAL clock: BIT := '0';SIGNAL entrada, salida: BIT;--Descripcion de la arquitecturaBEGINclock <= NOT clock AFTER ciclo/2;U1: detector_secuencia_010 PORT MAP(clock => clock, entrada => entrada, salida => salida);entrada <= '0' AFTER 0 ns,

'1' AFTER 11 ns,'0' AFTER 19 ns,'1' AFTER 32 ns,'0' AFTER 46 ns,'1' AFTER 56 ns;

END test;

© Departamento de Arquitectura y Tecnología de Sistemas Informáticos - Facultad de Informática -Universidad Politécnica de Madrid - V. Rodellar

39

Mealy: la salida cambia con la generacióndel estado futuro a los 19 ns

© Departamento de Arquitectura y Tecnología de Sistemas Informáticos - Facultad de Informática -Universidad Politécnica de Madrid - V. Rodellar

40

3.3.3 Realización de un modelos de Moore Ejemplo de un detector de la secuencia 010

ninguno

/0

uno

/0

dos

/0

Tres

/1

10 1 0

0

0

1 1

0

© Departamento de Arquitectura y Tecnología de Sistemas Informáticos - Facultad de Informática -Universidad Politécnica de Madrid - V. Rodellar

41

© Departamento de Arquitectura y Tecnología de Sistemas Informáticos - Facultad de Informática -Universidad Politécnica de Madrid - V. Rodellar

42

---------------------------------------------------------------------------------- © Universidad Politécnica de Madrid-- Se permite copia para fines de estudio---------------------------------------------------------------------------------- Proyecto : Maquinas de estados finitos-- Diseño : Detector de secuencia 010-- Nombre del fichero : Detector010_moore_B.vhd-- Autor : Profesores Tecnología-- Fecha : 30/5/2005-- Versión : 1.0-- Resumen : Este fichero contiene la entidad y arquitectura de una una FSM que implementa un dectector de la -- secuencia 010 como una máquina de Moore. Se han utilizado datos tipo bit. No tiene reset. Se ha-- realizado mediante tres procesos---- Modificaciones:---- Fecha Autor Versión Descripción del cambio------------------------------------------------------------------------------------------------------------------------------------------------------------------ENTITY detector_secuencia_010 ISPORT (

clock : IN BIT; -- activo por flanco de subidaentrada: IN BIT; salida : OUT BIT

);END detector_secuencia_010;

© Departamento de Arquitectura y Tecnología de Sistemas Informáticos - Facultad de Informática -Universidad Politécnica de Madrid - V. Rodellar

43

ARCHITECTURE comportamiento_moore OF detector_secuencia_010 IS--Parte declarativaTYPE estado IS (ninguno, uno, dos, tres);SIGNAL estado_actual: estado := ninguno;SIGNAL estado_futuro: estado;--Comienzo de la arquitecturaBEGIN --Proceso para generar la salidaresultado:

PROCESS (estado_actual)BEGINCASE estado_actual IS

WHEN ninguno => salida <= '0';

WHEN uno =>salida <= '0';

WHEN dos =>salida <= '0';

WHEN tres => salida <= '1';

END CASE;

END PROCESS resultado;

-- Proceso para generar el estado futurofuturo:PROCESS (entrada, estado_actual)

BEGINCASE estado_actual ISWHEN ninguno =>

IF entrada = '0' THENestado_futuro <= uno;

ELSEestado_futuro <= ninguno;

END IF; WHEN uno =>

IF entrada = '1' THENestado_futuro <= dos;

ELSEestado_futuro <= uno;

END IF;WHEN dos =>

IF entrada = '0' THENestado_futuro <= tres;

ELSEestado_futuro <= ninguno;

END IF;WHEN tres =>

IF entrada = '1' THENestado_futuro <= ninguno;

ELSEestado_futuro <= uno;

END IF; END CASE;END PROCESS futuro;

© Departamento de Arquitectura y Tecnología de Sistemas Informáticos - Facultad de Informática -Universidad Politécnica de Madrid - V. Rodellar

44

© Departamento de Arquitectura y Tecnología de Sistemas Informáticos - Facultad de Informática -Universidad Politécnica de Madrid - V. Rodellar

45

memoria:PROCESS (clock)BEGIN

IF (clock = '1' AND clock'EVENT) THENestado_actual <= estado_futuro;

ELSEestado_actual <= estado_actual;

END IF;

END PROCESS memoria;

END comportamiento_moore;

Moore: La salida cambia con el estado actual a los 25 ns

© Departamento de Arquitectura y Tecnología de Sistemas Informáticos - Facultad de Informática -Universidad Politécnica de Madrid - V. Rodellar

46

Ejercicio para los alumnos:1) Modificar el código anterior para utilizar datos

STD_LOGIC.

2) Realizar el diseño del detector en estilo de flujo de datos.

3) Realizar el diseño del detector en estilo estructural.

4) Realizar el test de los diseños anteriores con el test de la transparecia 39.

5) Analizar los resultados de simulación.

© Departamento de Arquitectura y Tecnología de Sistemas Informáticos - Facultad de Informática -Universidad Politécnica de Madrid - V. Rodellar

47

RESUMEN:

-Se han de utilizar datos de tipo enumerado para definir los estados de la máquina

-Han de definirse dos señales para llevar el control del estado actual y el futuro

-Si la máquina es de Moore se han de utilizar tres procesos

-Si la máquina es de Mealy es suficiente con utilizar dos procesos

-Si la maquina tiene reset síncrono no es necesario que reset aparezca en la lista de sensibilidad

- Si el reset es asíncrono necesariamente ha de aparecer en la lista de sensiblidad

© Departamento de Arquitectura y Tecnología de Sistemas Informáticos - Facultad de Informática -Universidad Politécnica de Madrid - V. Rodellar

48