Advertisement
SilLAwNeD

Feu_rouge VHDL

Oct 14th, 2018
485
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VHDL 2.63 KB | None | 0 0
  1. -- Code pour TP3 : VHDL Séquentiel, comptage du temps
  2.  
  3. entity blinker is
  4.     port(Clk100MHz, PB_0 : in bit;
  5.     LED_0 : out bit);
  6. end blinker;
  7.  
  8. architecture Behavioral of blinker is
  9.     alias reset is PB_0; -- alias pour le signal de rinitialisation
  10.     signal clk_out : bit := '0'; -- signal d'horloge aprs division
  11.  
  12.     -- Constante de division, ici pour une sortie  1Hz.
  13.     constant clock_divisor : integer := 100000000;
  14. begin
  15.     -- Diviseur de frquence : divise la frquence du signal Clk100MHz par clock_div.
  16.     clock_divider : process(Clk100MHz, reset)
  17.     variable c : integer range 0 to clock_divisor - 1 := 0;
  18.     begin
  19.     if reset = '1' then
  20.         c := 0;
  21.         clk_out <= '0';
  22.     elsif (Clk100MHz'event and Clk100MHz = '1') then
  23.         if c < (clock_divisor - 1) / 2 then
  24.             c := c + 1;
  25.             clk_out <= '0';
  26.         elsif c = (clock_divisor - 1) then
  27.             c := 0;
  28.             clk_out <= '0';
  29.         else
  30.             c := c + 1;
  31.             clk_out <= '1';
  32.         end if;
  33.     end if;
  34.     end process;
  35.     -- Sortie sur la LED
  36.     LED_0 <= clk_out;
  37.  
  38. end Behavioral;
  39.  
  40.  
  41. entity feux is
  42. port(clk, PB_0 : in bit;
  43.     LED_3210, LED_7654 : out integer range 0 to 7);
  44. end feux;
  45.  
  46. architecture rouge of feux is
  47.  
  48. begin
  49. process(clk, PB_0)
  50. -- variables
  51. variable compteur : integer range 0 to 20;
  52. variable etat : integer range 0 to 3;
  53. begin
  54.     if(PB_0 = '1') then
  55.         compteur := 0;
  56.         etat := 0;
  57.     elsif(clk'event and clk='1') then
  58.         case etat is
  59.             when 0 => if (compteur < 8) then
  60.                 compteur := compteur + 1;
  61.                 else
  62.                     etat := 1;
  63.                 end if;
  64.             when 1 => if (compteur < 10) then
  65.                 compteur := compteur + 1;
  66.                 else
  67.                     etat := 2;
  68.                 end if;
  69.             when 2 => if (compteur < 18) then
  70.                 compteur := compteur + 1;
  71.                 else
  72.                     etat := 3;
  73.                 end if;
  74.             when 3 => if (compteur < 20) then
  75.                 compteur := compteur + 1;
  76.                 else
  77.                     etat := 0;
  78.                     compteur := 0;
  79.                 end if;
  80.             when others => etat := 0; compteur := 0;
  81.         end case;
  82.         end if;
  83.        
  84.         case etat is
  85.             when 0 => LED_3210 <= 1; LED_7654 <= 4;
  86.             when 1 => LED_3210 <= 2; LED_7654 <= 4;
  87.             when 2 => LED_3210 <= 4; LED_7654 <= 1;
  88.             when 3 => LED_3210 <= 4; LED_7654 <= 2;
  89.         end case;
  90.         end process;
  91. end rouge;
  92.  
  93.  
  94. entity feu_final is
  95.     port(Clk100MHz, PB_0 : in bit;
  96.     LED_3210, LED_7654 : out integer range 0 to 7);
  97. end feu_final;
  98.  
  99. architecture Bhv of feu_final is
  100.  
  101.     component blinker is
  102.     port(Clk100MHz, PB_0 : in bit;
  103.         LED_0 : out bit);
  104.     end component blinker;
  105.    
  106.     component feux is
  107.     port(clk, PB_0 : in bit;
  108.         LED_3210, LED_7654 : out integer range 0 to 7);
  109.     end component feux;
  110.    
  111. signal clock : bit;
  112.  
  113. begin
  114.     C1 : blinker port map(Clk100MHz, PB_0, clock);
  115.     C2 : feux port map(clock, PB_0, LED_3210, LED_7654);
  116. end Bhv;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement