ndice Introduccin Niveles de abstraccin del modelado con HDL Estilos descriptivos del modelado con HDL Ventajas y limitaciones de los HDLs El lenguaje VHDL Objetos, tipos de datos y operadores Unidades bsicas de diseo Modelos del hardware para simulacin Bancos de pruebas Sentencias secuenciales Sentencias concurrentes Subprogramas Conceptos avanzados en VHDL Sntesis Mquinas de estados finitos (FSM) VHDL Leccin 2.9 Mquinas de Estados Finitos (FSM) 2 MQUINA DE ESTADOS (FSMs) Define un circuito que pasa por varios estados de salida definidos por el usuario en funcin de una seal CLK. f: funcin de transicin g: funcin de salida X(t)={x 1 (t), x 2 (t), , x n (t)}: variables de entrada Z(t)={z 1 (t), z 2 (t), , z n (t)}: variables de salida Q(t)={q 1 (t), q 2 (t), , q n (t)}: estado de la mquina Q(t+1)={q 1 (t+1), q 2 (t+1), , q n (t+1)}: prximo estado de la mquina clk : reloj del sistema EL LENGUAJE VHDL SNTESIS VHDL Circuito combinacional (f,g) Memoria (flip-flop) clk Q(t) Q(t+1) X(t) Z(t) VHDL Leccin 2.9 Mquinas de Estados Finitos (FSM) 3 Mquinas de Mealy: las salidas del sistema dependen tanto de las entradas del sistema como del estado actual. Q(t+1)= f[X(t), Q(t)] Z(t) = g[X(t), Q(t)] Mquina de Moore: las salidas del sistema slo dependen del estado actual. Q(t+1)= f[X(t), Q(t)] Z(t) = g[Q(t)] EL LENGUAJE VHDL SNTESIS VHDL Clculo del prximo estado (f) Memoria Clculo de las salidas (g) clk Q(t+1) Q(t) Slo tipo Mealy Lgica combinacional Lgica secuencial Lgica combinacional X(t) Z(t) Entradas asncronas VHDL Leccin 2.9 Mquinas de Estados Finitos (FSM) 4 Cada uno de los bloques se modela como un proceso independiente. En la parte declarativa de la arquitectura se definen dos seales para almacenar el estado actual y el prximo estado. El clculo del prximo estado se realiza mediante un proceso combinacional, en la lista de sensibilidad se introducen las entradas de la mquina y el estado actual. SNTESIS VHDL Modelado tipo I (Mquinas de Mealy) type estadosFSM is(estado0, estado1, , estadon); signal estado, prox_estado: estadosFSM; process (entradas, estado) begin -- Clculo del prximo estado en funcin de las entradas case estado is when estado0 => if (entradas =valor) then prox_estado<=; prox_estado<=; else prox_estado<=; end if; . when estadon=> if (entradas =valor) then prox_estado<=; else prox_estado<=; end if; end case; end process; VHDL Leccin 2.9 Mquinas de Estados Finitos (FSM) 5 Un proceso secuencial almacena un elemento de memoria en el que se almacena el estado actual. El clculo de las salidas se modela mediante un proceso combinacional en cuya lista de sensibilidades se debe incluir el estado actual y las entradas. process (reloj, entradas_asncronas) begin if (evaluacin_entradas_asncronas) then estado <=estado0; -- asignacin del estado inicial elsif relojevent and reloj=1 then estado <=prox_estado; -- asignacin del siguiente estado end if; end process; process (entradas, estado) begin -- Clculo de las salidas case estado is when estado0 => if (entradas =valor) then salidas <=; else salidas <=; end if; . when estadon=> if (entradas =valor) then salidas <=; else salidas <=; end if; end case; end process; SNTESIS VHDL Modelado tipo I (Mquinas de Mealy) VHDL Leccin 2.9 Mquinas de Estados Finitos (FSM) 6 Ejemplo: entity FSM1is port ( X, RST, CLK : in std_logic; Z : out std_logic); end FSM1; q1 q0 q2 qi 1/1 0/0 1/0 1/0 0/1 0/0 X/Z X RST CLK Z Esquema de la mquina Grafo de funcionamiento SNTESIS VHDL Modelado tipo I (Mquinas de Mealy) VHDL Leccin 2.9 Mquinas de Estados Finitos (FSM) 7 architecture rtl of FSM1 is type estadosFSM is (q0, q1, q2); signal estado, prox_estado: estadosFSM; begin process (X, estado) begin case estado is when q0 => if (X='0') then prox_estado<=q0; else prox_estado<=q1; end if; when q1 => if (X='0') then prox_estado<=q0; else prox_estado<=q2; end if; when q2 => if (X='0') then prox_estado<=q0; else prox_estado<=q2; end if; end case; end process; process (CLK, RST) begin if (RST='1') then estado <=q0; elsif CLK'event and CLK='1' then estado <=prox_estado; end if; end process; process (X, estado) begin case estado is when q0 => if (X='0') then Z<='0'; else Z<='1'; end if; when q1 =>Z<='0'; when q2 =>Z<=not X; end case; end process; end rtl; SNTESIS VHDL Modelado tipo I (Mquinas de Mealy) VHDL Leccin 2.9 Mquinas de Estados Finitos (FSM) 8 Se unen en un solo proceso el elemento de memoria que almacena el estado actual y el que calcula el prximo estado. Desaparece la seal que almacena el prximo estado. El proceso para el clculo de las salidas es igual que el descrito para el tipo I. process (reloj, entradas_asncronas) begin if (evaluacin_entradas_asncronas) then estado <=estado0; -- asignacin del estado inicial elsif relojevent and reloj=1 then case estado is when estado0 => if (entradas =valor) then estado <=; else estado <=; end if; . when estadon=> if (entradas =valor) then estado <=; else estado <=; end if; end case; end if; end process; SNTESIS VHDL Modelado tipo II (Mquinas de Mealy) VHDL Leccin 2.9 Mquinas de Estados Finitos (FSM) 9 Ejemplo: process (CLK, RST) begin if (RST='1') then estado <=q0; elsif CLK'event and CLK='1' then case estado is when q0 => if (X='0') then estado <=q0; else estado <=q1; end if; when q1 => if (X='0') then estado <=q0; else estado <=q2; end if; when q2 => if (X='0') then estado <=q0; else estado <=q2; end if; end case; end if; end process; SNTESIS VHDL Modelado tipo II (Mquinas de Mealy) VHDL Leccin 2.9 Mquinas de Estados Finitos (FSM) 10 Es vlida nicamente para el caso de mquinas de estados tipo Moore. La mquina se describe como un nico proceso. process (reloj, entradas_asncronas) begin if (evaluacin_entradas_asncronas) then estado <=estado0; salidas <=; -- asignacin de salidas para el estado0 elsif relojevent and reloj=1 then -- clculo del estado en funcin de las entradas y asignacin del valor de salidas para el prximo estado case estado is when estado0 => salidas <=; if (entradas =valor) then estado <=; else estado <=; end if; . when estadon=> salidas <=; if (entradas =valor) then estado <=; else estado <=; end if; end case; end if; end process; SNTESIS VHDL Modelado tipo III (Mquina de Moore) VHDL Leccin 2.9 Mquinas de Estados Finitos (FSM) 11 Ejemplo: q1 0 q0 0 q2 1 qi Z 1 0 1 1 0 0 process (CLK, RST) begin if (RST=1) then estado <=q0; Z <=0; elsif CLKevent and CLK=1 then case estado is when q0 => Z <=0; if (X=1) then estado <=q1; else estado <=q2; end if; when q1 => Z <=0; if (X=1) then estado <=q2; else estado <=q0; end if; when q2 => Z <=1; if (X=1) then estado <=q0; else estado <=q2; end if; end case; end if; end process; X RST CLK Z SNTESIS VHDL Modelado tipo III (Mquina de Moore) VHDL Leccin 2.9 Mquinas de Estados Finitos (FSM) 12 Binaria : no es ptima en trminos de retardo y rea cuando el nmero de estados es elevado. q0=000, q1=001, q2=010, q3=011 Gray: elimina los glitches que pudieran aparecer cuando se pasa de un estado al siguiente: q0=000, q1=001, q2=011, q3=010 One Hot : reduce el nmero de recursos utilizados para mquinas con 8 o ms estados: q0=0001, q1=0010, q2=0100, q3=1000 El tipo de codificacin se puede fijar mediante una opcin del sintetizador o bien mediante atributos declarados en los paquetes que se suministran junto a la herramienta. Leonardo Spectrum de Mentor Synopsis Para que haya coincidencia entre los resultados de sntesis y simulacin es necesario usar una seal de inicializacin que lleve al sistema al estado inicial. type estadosFSM is (q0, q1, q2); attribute TYPE_ENCODING_STYLE of estadoFSM : type is ONEHOT; type estadosFSM is (q0, q1, q2); attribute ENUM_ENCODING : STRING; attribute ENUM_ENCODING of estadoFSM : type is 001 010 011; SNTESIS VHDL Codificacin de estados