Intermedio > Circuitos integrados > Edición gráfica en lógica secuencial

Edición gráfica en lógica secuencial

Introducción

Las máquinas de estado finito FSM, representan una técnica especial de modelado de circuitos lógicos secuenciales; esta conceptuación es de extremada utilidad en el diseño de circuitos donde todas sus funciones pueden ser exactamente listadas, conteniendo todos los posibles estados y sus condiciones para que estos evoluciones de uno a otro estado, con el desarrollo de los sistemas embebidos y su cada vez mayor velocidad, las máquinas de estado finito se han convertido en una poderosa herramienta para el desarrollo de controladores digitales.

Existen dos representaciones fundamentales de las FSM una relacionada con sus especificaciones llamada diagrama de transición de estados y otra relacionada al hardware conocida como de lógica combinacional/secuencial.

Durante esta entrada se brindara los fundamentos de estas técnicas de modelado, la forma como codificar las FSM con lenguaje VHDL y su implementación en los FPGA.

Para diseñar usando FSM el primer paso fundamental es la declaración de todos los posibles estados en los que puede caer el circuito a diseñar, estos se pueden listar, declarando un nombre corto del estado, la salida que debe reflejar en el momento de llegar a él y por supuesto la funciones de evolución de estados, con esta información ya podemos desarrollar una representación formal de la máquina.

Objetivos

  1. Poder desarrollar circuitos digitales usando la herramienta de captura esquemática del software de simulación Max Plus II en Lógica secuencial.
  2. Poder simular circuitos digitales usando el software de simulación Max Plus II
  3. Analizar he interpretar los resultados de la simulación.

Procedimiento

Primera parte

Analice la máquina de estados síncrona temporizada en la figura 3.

Escriba las ecuaciones de excitación (lógica de estado siguiente), la tabla de excitación/transición (tabla de estado actual/siguiente), y la tabla de estadas/salidas (utilice los nombre de estado A-D para Q1Q0=00-11).

Dibuje el diagrama de estados y trace un diagrama de temporización para CLK, EN, Q1 y Q0 para los 10 tics de reloj, suponiendo que la máquina comienza en el estado 00 y EN es continuamente 1.


Tabla de excitación del flip flop JK

Tabla de estados

  1. --Revision 0.01 - File Created
  2. --Additional Comments:
  3. --
  4. ------------------------
  5. LIBRARY IEEE;
  6. Use ieee.std_logic_1164.ALL;
  7. entity contador0a3 is
  8. port(jk, clk: in std_logic;
  9. q1, q0: inout std_logic
  10. );
  11. end contador0a3;
  12. architecture cuenta of contador0a3 is
  13. begin
  14. process (jk,clk)
  15. begin
  16. if (jk='1' and clk='1' and q0='0' and q1='0') then
  17. q1<='0';
  18. q0<='1';
  19. elsif (jk='1' and clk='0' and q0='1' and q1='0') then
  20. q1<='0';
  21. q0<='1';
  22. elsif (jk = '1' and clk='1' and q0='1' and q1='0') then
  23. q1<='1';
  24. q0<='0';
  25. elsif (jk='1' and clk='0' and q0='0' and q1='1') then
  26. q1<='1';
  27. q0<='0';
  28. elsif (jk='1' and clk='1' and q0='0' and q1='1') then
  29. q1<='1';
  30. q0<='1';
  31. elsif (jk='1' and clk='1' and q0='1' and q1='1') then
  32. q1<='0';
  33. q0<='0';
  34. else
  35. q1<='0';
  36. q0<='0';
  37. end if;
  38. end process;
  39. end cuenta;
  40. BEGIN
  41. --Instantiate the unit Under Test (UUT)
  42. uut: contador0a3 PORT MAP (
  43. jk => jk,
  44. clk=> clk,
  45. q1 =>q1,
  46. q0 => q0
  47. );
  48. -- Stimulus process
  49. stim_proc: process
  50. begin
  51. jk<='0';
  52. clk<='0'
  53. wait for 10ns;
  54. jk<='1';
  55. clk<='0'
  56. wait for 10ns;
  57. jk<='1';
  58. clk<='1'
  59. wait for 10ns;
  60. jk<='1';
  61. clk<='0'
  62. wait for 10ns;
  63. jk<='1';
  64. clk<='1'
  65. wait for 10ns;
  66. jk<='1';
  67. clk<='0'
  68. wait for 10ns;
  69. jk<='1';
  70. clk<='1'
  71. wait for 10ns;
  72. jk<='1';
  73. clk<='0'
  74. wait for 10ns;
  75. jk<='1';
  76. clk<='1'
  77. wait for 10ns;
  78. jk<='1';
  79. clk<='0'
  80. wait for 10ns;
  81. wait;
  82. end process;
  83. END;

Segunda parte:

El Siguiente diagrama de estados corresponde a un control de luces para un semáforo, el cual presenta un diagrama de estados como el que se muestra:

Este diagrama de estados se representa mediante el siguiente circuito:

Se pide:

  1. Obtenga el diagrama de tiempos de circuito
  2. Diga si el diagrama de estados corresponde al circuito.
  3. Determine la tabla de diseño o transición de la máquina de estados que dio origen al circuito.

Tabla de excitación del flip flop tipo D


El diagrama de estados corresponde al circuito, se puede verificas en el diagrama de tiempo. También se comprobó mediante el uso de multisom.14

  1. -- Stimulus process
  2. stim_proc: process
  3. begin
  4. CHG<='0';
  5. RST<='0'
  6. wait for 10ns;
  7. CHG<='1';
  8. RST<='0'
  9. wait for 10ns;
  10. CHG<='0';
  11. RST<='1'
  12. wait for 10ns;
  13. CHG<='1';
  14. RST<='1'
  15. wait for 10ns;
  16. CHG<='1';
  17. RST<='0'
  18. wait for 10ns;
  19. CHG<='0';
  20. RST<='0'
  21. wait for 10ns;
  22. CHG<='1';
  23. RST<='0'
  24. wait for 10ns;
  25. CHG<='0';
  26. RST<='0'
  27. wait for 10ns;
  28. CHG<='1';
  29. RST<='0'
  30. wait for 10ns;
  31. CHG<='0';
  32. RST<='0'
  33. wait for 10ns;
  34. CHG<='1';
  35. RST<='0'
  36. wait for 10ns;
  37. CHG<='0';
  38. RST<='0'
  39. wait for 10ns;
  40. wait;
  41. end process;
  42. END;

  1. library IEEE;
  2. use IEEE.STD_LOGIC_1164.ALL;
  3. entity semaforo is
  4. port (CHG,RST: in std_logic;
  5. R,V,A: inout std_logic
  6. );
  7. end semaforo;
  8. architecture semaforo is
  9. begin
  10. process (CHG,RST)
  11. begin
  12. if (CHG='1' and RST='0' and R='1' and A='0' and v='0') then
  13. R<='0';
  14. V<='1';
  15. A<='0';
  16. if (CHG='0' and RST='0' and R='0' and A='0' and v='1') then
  17. R<='0';
  18. V<='1';
  19. A<='0';
  20. if (CHG='1' and RST='0' and R='0' and A='0' and v='1') then
  21. R<='0';
  22. V<='0';
  23. A<='1';
  24. if (CHG='0' and RST='0' and R='0' and A='1' and v='0') then
  25. R<='0';
  26. V<='0';
  27. A<='1';
  28. else
  29. R<='1';
  30. V<='0';
  31. A<='0';
  32. end if;
  33. end process;
  34. end rgb;
  35. Aplicación de lo aprendido

    Diseñe un controlador de semáforos simplificado que conmute las luces de un cruce de calles ( calle Norte-Sur N-S y calle Este-Oeste E-O). La entrada del controlador es un botón llamado PASAR que es activado por los peatones cuando desean cruzar alguna de las calles. Las salidas del controlador son dos señales, N-S y E-o, para las cuales el valor 0 indica luz roja y el valor 1 indica luz verde. Si no hay peatones, N-S=0 y E-O=1 durante 1 minuto, para luego cambiar a N-S=1 y E-O=0 por el mismo lapso de tiempo y repetir la secuencia anterior. Cuando se pulsa PASAR, N-S y E-O se colocan a 0 durante 1 minuto, siempre que el minuto actual haya concluido. Después de esto, las señales N-S y E-O contin+uan alternándose. Se pide: A)Desarrolle un diagrama de estados y una tabla de estados/salidas. B) Codifique los estados. C) Obtenga el circuito lógico asociado.



    1. library IEEE;
    2. use IEEE.STD_LOGIC_1164.ALL;
    3. entity aplication12 is
    4. port(
    5. P: in std_logic;--PASAR
    6. reset: in std_logic;
    7. clk:in std_logic;
    8. Q: inout std_logic_vector (1 downto 0)
    9. );
    10. end aplication12;
    11. architecture app12 of aplication12 is
    12. begin
    13. process (P,reset,clk)
    14. begin
    15. if(reset='1') then
    16. Q<="00";
    17. elsif (clk'event and clk='1') then
    18. if(Q="00" and P='0') then
    19. Q<="01";
    20. elsif(Q="01" and P='0')then
    21. Q<="10";
    22. elsif (Q="01" and P='1')then
    23. Q<="00";
    24. else
    25. Q<="00";
    26. end if;
    27. end if;
    28. end process;
    29. end app12

    1. library IEEE;
    2. USE IEEE.STD_LOGIC_1164.ALL;
    3. entity aplication12_tb is
    4. end aplication12_tb;
    5. architecture behavior of aplication12_tb is
    6. component aplication12
    7. port(
    8. p: un std_logic;
    9. reset: in std_logic;
    10. clk: in std_logic;
    11. q: inout std_logic_vector(1downto 0)
    12. );
    13. end component;
    14. signal p: std_logic :='0';
    15. signal reset: std_logic:='0';
    16. signal clk: std_logic :='0';
    17. signal q: std_logic_vector(1 downto 0);
    18. begin
    19. utt: aplication12 port MAP(
    20. p => P,
    21. reset => reset,
    22. clk => clk,
    23. Q=> Q
    24. );

    1. -- Stimulus process
    2. stim_proc: process
    3. begin
    4. clk<='0';
    5. p<='0'
    6. reset<='0';
    7. wait for 60ns;
    8. clk<='1';
    9. p<='0';
    10. reset<='0';
    11. wait for 60ns;
    12. clk<='0';
    13. p<='0'
    14. reset<='0';
    15. wait for 60ns;
    16. clk='1';
    17. p<='0'
    18. reset<='0'
    19. wait for 60ns;
    20. clk<='0';
    21. p<='0'
    22. reset<='0'
    23. wait for 60ns;
    24. clk<='1';
    25. p<='0'
    26. reset<='0'
    27. wait for 60ns;
    28. --
    29. clk<='1';
    30. p<='1'
    31. reset<='0';
    32. wait for 60ns;
    33. clk<='0';
    34. p<='0'
    35. reset<='0';
    36. wait for 60ns;
    37. clk<='1';
    38. p<='0'
    39. reset<='0';
    40. wait for 60ns;
    41. wait;
    42. end process;
    43. END;

    Pueden descargar los archivos de ISE desde el siguiente enlace:https://github.com/mokuzaru/vhdl_labs

Linksappsclose