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 © Departamento de Arquitectura y Tecnología de Sistemas Informáticos - Facultad de Informática Universidad Politécnica de Madrid - V. Rodellar 1 TEMA 3. Modelos de sistemas digitales 3.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 Esquemas de Moore y Mealy Estructura de Moore (FSMs) Estructura de Mealy O(t) = F1( S(t)) O(t) = F1( S(t), I(t)) S(t+1) = F2 (I(t), S(t)) S(t+1) = F2 (I(t), S(t)) O(t) Salidas O(t) Salidas (combinacional) (combinacional) inputs I(t) Estado futuro S(t+1) Estado futuro (Combinacional) S(t+1) (Combinacional) inputs I(t) Estado actual S(t) Estado actual Registro (Secuencial) clock S(t) Registro (Secuencial) © Departamento de Arquitectura y Tecnología de Sistemas Informáticos - Facultad de Informática Universidad Politécnica de Madrid - V. Rodellar 5 clock Metodología de diseño de FSM Niveles de Descripción asociados con los HDLs Etapas básicas 1) Diagrama-Tabla de estados, ASM entrada Moore estado estado salida salida } entrada/salida estado Comportamiento o algorítmico estado Mealy 6 Metodología de diseño de FSM Etapas básicas Niveles de Descripción asociados con los HDLs 2) Ecuaciones del estado futuro y salidas Estado actual Entradas Estado futuro C1(t) C0(t) Salidas 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 FSM Etapas básicas Niveles de Descripción asociados con los HDLs 3) Implementación del circuito Componentes: Dispositivos lógicos (puertas: NOT, AND ... MUX, DECODERS, .....) } Estructural Elementos de memoria ( Flip-Flops) Conexionado 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 modelo Máquina de Moore Retardo en la operación de lectura en una memoria RAM Read (R) Slow (S) Write (W) Clock LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.all; ST_READ R=1 W=0 ST_WRITE S=0 R=0 W=1 S=1 ST_DELAY R=0 W=0 ENTITY fsm_bad IS PORT ( clock: IN STD_LOGIC; -- flanco subida slow: IN STD_LOGIC; -- entrada control read, write: OUT STD_LOGIC -- salidas ); END fsm_bad; © 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 modelo Retardo en la operación de lectura en una memoria RAM ST_READ R=1 W=0 ST_WRITE S=0 R=0 W=1 S=1 ST_DELAY R=0 W=0 Máquina de Moore ARCHITECTURE bad OF fsm_bad IS BEGIN PROCESS TYPE state_type IS (ST_read, ST_write, ST_delay); VARIABLE state :state_type := ST_read; BEGIN WAIT UNTIL rising_edge(clock); CASE state IS WHEN ST_read => read <= '1'; write <= '0'; state := ST_write; WHEN ST_write => read <= '0'; write <= '1'; IF (slow = '1') THEN state := ST_delay; ELSE state := ST_read; END IF; WHEN ST_delay => read <= '0'; write <= '0'; state := ST_read; END CASE; END PROCESS; 11 END bad; Resultados de simulación del modelo malo ST_READ R=1 W=0 ST_WRITE S=0 R=0 W=1 S=1 ST_DELAY R=0 W=0 Máquina de Moore CASE state IS WHEN ST_read => read <= '1'; write <= '0'; state := ST_write; WHEN ST_write => read <= '0'; write <= '1'; IF (slow = '1') THEN state := ST_delay; ELSE state := ST_read; END IF; WHEN ST_delay => read <= '0'; write <= '0'; state := ST_read; END CASE; 12 ¿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 combinacionales y 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 Las salidas y el estado futuro dependen de las mismas entradas, pueden agruparse en el mismo proceso O(t) = F1( S(t), I(t)) S(t+1) = F2 (I(t), S(t)) O(t) Salidas (combinacional) I(t) inputs O(t) Estado futuro y salidas (Combinacional) S(t+1) Estado futuro S(t+1) (Combinacional) Estado actual inputs I(t) Registro (Secuencial) S(t) Estado actual S(t) Registro (Secuencial) clock clock © 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 read Máquina de Moore Salida ( combinacional) write slow Estado futuro (combinacional) LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.all; ENTITY fsm_good IS PORT ( clock : slow : reset : read, write : ); END fsm_good; Estado actual (secuencial) reset clock IN STD_LOGIC ; -- activo por flanco de subida IN STD_LOGIC ; -- entrada de control del sistema IN STD_LOGIC ; -- activo a nivel alto OUT STD_LOGIC © 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 Salida ( combinacional) slow ARCHITECTURE good OF fsm_good IS TYPE state_type IS (ST_read, ST_write, ST_delay); Estado futuro (combinacional) SIGNAL current_state, next_state :state_type; BEGIN Estado actual (secuencial) output: PROCESS (current_state) BEGIN reset clock CASE current_state IS WHEN ST_read => Read <= '1‘ ; Write <= '0'; RESET WHEN ST_write => Read <= '0‘ ; Write <= '1'; ST_READ ST_WRITE WHEN ST_delay => Read <= '0‘ ; Write <= '0'; R=1 W=0 R=0 W=1 S=0 -- seria necesario poner la siguiente sentencia? WHEN OTHERS => Read <= '1 ; Write <= '0’; S=1 END CASE; ST_DELAY R=0 W=0 END PROCESS output; © 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 future: PROCESS (current_state,slow) BEGIN CASE current_state IS Estado futuro (combinacional) WHEN ST_read => next_state <= ST_write; WHEN ST_write => IF (slow = '1') Estado actual (secuencial) THEN next_state <= ST_delay; clock reset ELSE RESET next_state <= ST_read; END IF; ST_READ ST_WRITE R=1 W=0 R=0 W=1 S=0 WHEN ST_delay => next_state <= ST_read; WHEN OTHERS => next_state <= ST_read; S=1 END CASE; Salida ( combinacional) slow ST_DELAY R=0 W=0 END PROCESS future; © 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 Salida ( combinacional) actual: PROCESS BEGIN WAIT UNTIL rising_edge(clock); Estado futuro (combinacional) Estado actual (secuencial) reset -- reset síncrono IF (reset = '1') THEN current_state <= ST_read; ELSE current_state <= next_state; END IF; END PROCESS actual; END good; © 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 RESET ST_READ R=1 W=0 ST_WRITE S=0 R=0 W=1 S=1 ST_DELAY R=0 W=0 © 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 RESET ST_READ R=1 W=0 ST_WRITE S=0 R=0 W=1 S=1 ST_DELAY R=0 W=0 © 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 RESET ST_READ R=1 W=0 ST_WRITE S=0 R=0 W=1 S=1 ST_DELAY R=0 W=0 © 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 RESET ST_READ R=1 W=0 ST_WRITE S=0 R=0 W=1 S=1 ST_DELAY R=0 W=0 © 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 Salida ( combinacional) Estado futuro (combinacional) Estado actual (secuencial) reset --Generación de las salidas WITH current_state SELECT read <= '1' WHEN ST_read, '0' WHEN ST_write, '0' WHEN ST_delay, '1' WHEN OTHERS; --? WITH current_state SELECT write <= '0' WHEN ST_read, '1' WHEN ST_write, '0' WHEN ST_delay, '0' WHEN OTHERS; - -? 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 Salida ( combinacional) Estado futuro (combinacional) Estado actual (secuencial) reset -- 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') THEN current_state <= ST_read; ELSIF rising_edge (clock) THEN current_state <= next_state; END IF; END PROCESS actual; END good1; © 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 RESET ST_READ R=1 W=0 ST_WRITE S=0 R=0 W=1 S=1 ST_DELAY R=0 W=0 © 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 RESET ST_READ R=1 W=0 ST_WRITE S=0 R=0 W=1 S=1 ST_DELAY R=0 W=0 © 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 RESET ST_READ R=1 W=0 ST_WRITE S=0 R=0 W=1 S=1 ST_DELAY R=0 W=0 © 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 RESET ST_READ R=1 W=0 ST_WRITE S=0 R=0 W=1 S=1 ST_DELAY R=0 W=0 © 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 datos Reset asíncrono Tabla de transiciones RESET Entradas estado actual estado futuro salidas slow q1 q0 d1 d0 read - 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 d1 = slow q1’ q0 (reset’) d0 = q1’ q0’ (reset’) read = q1’ q0’ write = q1’ q0 write ST_READ R=1 W=0 ST_WRITE R=0 W=1 S=0 S=1 ST_DELAY R=0 W=0 Codificación de estados ST_READ 00 ST_WRITE 01 ST_DELAY 10 29 ARCHITECTURE data_flow OF fsm_good IS SIGNAL d1, d0, q1,q0: STD_LOGIC; BEGIN Modelo en flujo de datos Utilizando asignación condicional de señal solamente y función para la detección de flancos --generacion del estado futuro d1 <= ((slow) AND (NOT q1) AND (q0)); d0 <= ((NOT q1) AND (NOT q0)); d1 = slow q1’ q0 (reset’) d0 = q1’ q0’ (reset’) --generación de las salidas read <= ((NOT q1) AND (NOT q0)); write <= ((NOT q1) AND (q0)); read = q1’ q0’ write = q1’ 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; © 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 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 © Departamento de Arquitectura y Tecnología de Sistemas Informáticos - Facultad de Informática Universidad Politécnica de Madrid - V. Rodellar 31 Modelo estructural slow d1 = slow q1’ q0 (reset’) q0 Nq0 d0 = q1’ q0’(reset’) q1 Nq1 read = q1’ q0’ = d0 Aux1=write d1 FF clock read write = q1’ q0 Componentes necesarios: •Inversores •Puertas AND d0 FF clock •Biestables con entrada de reset activa a nivel alto y reloj activo por flanco de subida 32 reset Modelo estructural ARCHITECTURE structural OF fsm_good IS slow 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 q0 q1 Nq0 Nq1 Aux1=write d1 FF read clock d0 FF clock 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; 33 Comparación entre los modelos de Mealy y Moore Las salidas y el estado futuro dependen de las mismas entradas, pueden agruparse en el mismo proceso O(t) = F1( S(t), I(t)) S(t+1) = F2 (I(t), S(t)) O(t) Salidas (combinacional) I(t) inputs O(t) Estado futuro y salidas (Combinacional) S(t+1) Estado futuro S(t+1) (Combinacional) Estado actual inputs I(t) Registro (Secuencial) S(t) Estado actual S(t) Registro (Secuencial) clock clock © 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 0/0 1/0 0/0 0/1 1/0 ninguno uno 0/0 dos tres 0/0 1/0 1/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 IS PORT ( clock : IN BIT; -- activo por flanco de subida entrada: 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 WHEN dos => IF entrada = '0' THEN estado_futuro <= tres; salida <= '1'; ELSE estado_futuro <= ninguno; salida <= '0'; END IF; WHEN tres => IF entrada = '1' THEN estado_futuro <= ninguno; salida <= '0'; ELSE estado_futuro <= uno; salida <= '0'; END IF; END CASE; END PROCESS combinacional; ARCHITECTURE comportamiento OF detector_secuencia_010 IS --Parte declarativa TYPE estado IS (ninguno, uno, dos, tres); SIGNAL estado_actual: estado := ninguno; SIGNAL estado_futuro: estado; --Comienzo de la arquitectura BEGIN --Proceso para generar el estado futuro y salida --combinacional: PROCESS (entrada, estado_actual) BEGIN CASE estado_actual IS WHEN ninguno => IF entrada = '0' THEN estado_futuro <= uno; salida <= '0'; ELSE estado_futuro <= ninguno; salida <= '0'; 1/0 END IF; WHEN uno => IF entrada = '1' THEN ninguno estado_futuro <= dos; salida <= '0'; ELSE estado_futuro <= uno; salida <= '0'; END IF; 0/0 0/0 0/1 1/0 uno 0/0 dos tres 0/0 1/0 1/0 37 --Proceso para actualizar la memoria memoria: PROCESS (clock) BEGIN IF (clock = '1' AND clock'EVENT) THEN estado_actual <= estado_futuro; ELSE estado_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 IS END test_detsec_010; ARCHITECTURE test OF test_detsec_010 IS --Parte declarativa COMPONENT detector_secuencia_010 PORT ( clock : IN BIT; -- activo por flanco de subida entrada: 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 arquitectura BEGIN clock <= 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ón del 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 0 1 0 ninguno /0 0 1 uno 0 /0 0 1 dos Tres /0 /1 1 © Departamento de Arquitectura y Tecnología de Sistemas Informáticos - Facultad de Informática Universidad Politécnica de Madrid - V. Rodellar 41 --------------------------------------------------------------------------------- © 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 IS PORT ( clock : IN BIT; -- activo por flanco de subida entrada: 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 42 ARCHITECTURE comportamiento_moore OF detector_secuencia_010 IS --Parte declarativa TYPE estado IS (ninguno, uno, dos, tres); SIGNAL estado_actual: estado := ninguno; SIGNAL estado_futuro: estado; --Comienzo de la arquitectura BEGIN --Proceso para generar la salida resultado: PROCESS (estado_actual) BEGIN CASE estado_actual IS WHEN ninguno WHEN uno WHEN dos WHEN tres => salida <= '0'; => salida <= '0'; => salida <= '0'; => salida <= '1'; END CASE; END PROCESS resultado; © Departamento de Arquitectura y Tecnología de Sistemas Informáticos - Facultad de Informática Universidad Politécnica de Madrid - V. Rodellar 43 -- Proceso para generar el estado futuro futuro: PROCESS (entrada, estado_actual) BEGIN CASE estado_actual IS WHEN ninguno => IF entrada = '0' THEN estado_futuro <= uno; ELSE estado_futuro <= ninguno; END IF; WHEN uno => IF entrada = '1' THEN estado_futuro <= dos; ELSE estado_futuro <= uno; END IF; WHEN dos => IF entrada = '0' THEN estado_futuro <= tres; ELSE estado_futuro <= ninguno; END IF; WHEN tres => IF entrada = '1' THEN estado_futuro <= ninguno; ELSE estado_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 memoria: PROCESS (clock) BEGIN IF (clock = '1' AND clock'EVENT) THEN estado_actual <= estado_futuro; ELSE estado_actual <= estado_actual; END IF; END PROCESS memoria; END comportamiento_moore; © Departamento de Arquitectura y Tecnología de Sistemas Informáticos - Facultad de Informática Universidad Politécnica de Madrid - V. Rodellar 45 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