Advertisement
SilLAwNeD

Feu_rouge VHDL avec reset

Oct 17th, 2018
590
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VHDL 3.43 KB | None | 0 0
  1. ----------------------------------------------------------------------------------
  2. -- Company:
  3. -- Engineer:
  4. --
  5. -- Create Date:    18:04:10 10/12/2018
  6. -- Design Name:
  7. -- Module Name:    feu_final - Bhv
  8. -- Project Name:
  9. -- Target Devices:
  10. -- Tool versions:
  11. -- Description:
  12. --
  13. -- Dependencies:
  14. --
  15. -- Revision:
  16. -- Revision 0.01 - File Created
  17. -- Additional Comments:
  18. --
  19. ----------------------------------------------------------------------------------
  20. library IEEE;
  21. use IEEE.STD_LOGIC_1164.ALL;
  22.  
  23. -- Uncomment the following library declaration if using
  24. -- arithmetic functions with Signed or Unsigned values
  25. --use IEEE.NUMERIC_STD.ALL;
  26.  
  27. -- Uncomment the following library declaration if instantiating
  28. -- any Xilinx primitives in this code.
  29. --library UNISIM;
  30. --use UNISIM.VComponents.all;
  31.  
  32. entity blinker is
  33.     port(Clk100MHz, PB_0 : in bit;
  34.     LED_0 : out bit);
  35. end blinker;
  36.  
  37. architecture Behavioral of blinker is
  38.     alias reset is PB_0; -- alias pour le signal de rinitialisation
  39.     signal clk_out : bit := '0'; -- signal d'horloge aprs division
  40.  
  41.     -- Constante de division, ici pour une sortie  1Hz.
  42.     constant clock_divisor : integer := 100000000;
  43. begin
  44.     -- Diviseur de frquence : divise la frquence du signal Clk100MHz par clock_div.
  45.     clock_divider : process(Clk100MHz, reset)
  46.     variable c : integer range 0 to clock_divisor - 1 := 0;
  47.     begin
  48.     if reset = '1' then
  49.         c := 0;
  50.         clk_out <= '0';
  51.     elsif (Clk100MHz'event and Clk100MHz = '1') then
  52.         if c < (clock_divisor - 1) / 2 then
  53.             c := c + 1;
  54.             clk_out <= '0';
  55.         elsif c = (clock_divisor - 1) then
  56.             c := 0;
  57.             clk_out <= '0';
  58.         else
  59.             c := c + 1;
  60.             clk_out <= '1';
  61.         end if;
  62.     end if;
  63.     end process;
  64.     -- Sortie sur la LED
  65.     LED_0 <= clk_out;
  66.  
  67. end Behavioral;
  68.  
  69.  
  70. entity feux is
  71. port(clk, PB_0 : in bit;
  72.     LED_3210, LED_7654 : out integer range 0 to 7);
  73. end feux;
  74.  
  75. architecture rouge of feux is
  76.  
  77. begin
  78. process(clk, PB_0)
  79. -- variables
  80. variable compteur : integer range 0 to 20;
  81. variable etat : integer range 0 to 3;
  82. begin
  83.     if(PB_0 = '1') then
  84.         case etat is
  85.             when 0 => compteur := 0; etat := 0;
  86.             when 1 => compteur := 0; etat := 0;
  87.             when 2 => compteur := 18; etat := 3;
  88.             when 3 => -- On ne fait rien
  89.             when others => compteur := 0; etat := 0;
  90.         end case;
  91.     elsif(clk'event and clk='1') then
  92.         case etat is
  93.             when 0 => if (compteur > 7) then
  94.                     etat := 1;
  95.                 end if;
  96.             when 1 => if (compteur > 9) then
  97.                     etat := 2;
  98.                 end if;
  99.             when 2 => if (compteur > 17) then
  100.                     etat := 3;
  101.                 end if;
  102.             when 3 => if (compteur > 19) then
  103.                     etat := 0;
  104.                     compteur := 0;
  105.                 end if;
  106.             when others => etat := 0; compteur := 0;
  107.         end case;
  108.         compteur := compteur + 1;
  109.         end if;
  110.        
  111.         case etat is
  112.             when 0 => LED_3210 <= 1; LED_7654 <= 4;
  113.             when 1 => LED_3210 <= 2; LED_7654 <= 4;
  114.             when 2 => LED_3210 <= 4; LED_7654 <= 1;
  115.             when 3 => LED_3210 <= 4; LED_7654 <= 2;
  116.         end case;
  117.         end process;
  118. end rouge;
  119.  
  120.  
  121. entity feu_final is
  122.     port(Clk100MHz, PB_0 : in bit;
  123.     LED_3210, LED_7654 : out integer range 0 to 7);
  124. end feu_final;
  125.  
  126. architecture Bhv of feu_final is
  127.  
  128.     component blinker is
  129.     port(Clk100MHz, PB_0 : in bit;
  130.         LED_0 : out bit);
  131.     end component blinker;
  132.    
  133.     component feux is
  134.     port(clk, PB_0 : in bit;
  135.         LED_3210, LED_7654 : out integer range 0 to 7);
  136.     end component feux;
  137.    
  138. signal clock : bit;
  139.  
  140. begin
  141.     C1 : blinker port map(Clk100MHz, PB_0, clock);
  142.     C2 : feux port map(clock, PB_0, LED_3210, LED_7654);
  143. end Bhv;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement