---------------------------------------------------------------------------------- -- Company: -- Engineer: -- -- Create Date: 18:04:10 10/12/2018 -- Design Name: -- Module Name: feu_final - Bhv -- Project Name: -- Target Devices: -- Tool versions: -- Description: -- -- Dependencies: -- -- Revision: -- Revision 0.01 - File Created -- Additional Comments: -- ---------------------------------------------------------------------------------- library IEEE; use IEEE.STD_LOGIC_1164.ALL; -- Uncomment the following library declaration if using -- arithmetic functions with Signed or Unsigned values --use IEEE.NUMERIC_STD.ALL; -- Uncomment the following library declaration if instantiating -- any Xilinx primitives in this code. --library UNISIM; --use UNISIM.VComponents.all; entity blinker is port(Clk100MHz, PB_0 : in bit; LED_0 : out bit); end blinker; architecture Behavioral of blinker is alias reset is PB_0; -- alias pour le signal de rinitialisation signal clk_out : bit := '0'; -- signal d'horloge aprs division -- Constante de division, ici pour une sortie 1Hz. constant clock_divisor : integer := 100000000; begin -- Diviseur de frquence : divise la frquence du signal Clk100MHz par clock_div. clock_divider : process(Clk100MHz, reset) variable c : integer range 0 to clock_divisor - 1 := 0; begin if reset = '1' then c := 0; clk_out <= '0'; elsif (Clk100MHz'event and Clk100MHz = '1') then if c < (clock_divisor - 1) / 2 then c := c + 1; clk_out <= '0'; elsif c = (clock_divisor - 1) then c := 0; clk_out <= '0'; else c := c + 1; clk_out <= '1'; end if; end if; end process; -- Sortie sur la LED LED_0 <= clk_out; end Behavioral; entity feux is port(clk, PB_0, PB_2, PB_3 : in bit; LED_3210, LED_7654 : out integer range 0 to 7); end feux; architecture rouge of feux is begin process(clk, PB_0) -- variables variable compteur : integer range 0 to 20; variable etat : integer range 0 to 3; begin if(PB_0 = '1') then case etat is when 0 => compteur := 0; etat := 0; when 1 => compteur := 0; etat := 0; when 2 => compteur := 18; etat := 3; when 3 => -- On ne fait rien when others => compteur := 0; etat := 0; end case; -- compteur := 0; etat := 0; elsif(clk'event and clk='1') then case etat is when 0 => if (compteur > 7 and PB_3 = '1') then etat := 1; compteur := 7; end if; when 1 => if (compteur > 9) then etat := 2; end if; when 2 => if (compteur > 17 and PB_2 = '1') then etat := 3; compteur := 17; end if; when 3 => if (compteur > 19) then etat := 0; compteur := 0; end if; when others => etat := 0; compteur := 0; end case; compteur := compteur + 1; end if; case etat is when 0 => LED_3210 <= 1; LED_7654 <= 4; when 1 => LED_3210 <= 2; LED_7654 <= 4; when 2 => LED_3210 <= 4; LED_7654 <= 1; when 3 => LED_3210 <= 4; LED_7654 <= 2; end case; end process; end rouge; entity feu_final is port(Clk100MHz, PB_0, PB_2, PB_3 : in bit; LED_3210, LED_7654 : out integer range 0 to 7); end feu_final; architecture Bhv of feu_final is component blinker is port(Clk100MHz, PB_0 : in bit; LED_0 : out bit); end component blinker; component feux is port(clk, PB_0, PB_2, PB_3 : in bit; LED_3210, LED_7654 : out integer range 0 to 7); end component feux; signal clock : bit; begin C1 : blinker port map(Clk100MHz, PB_0, clock); C2 : feux port map(clock, PB_0, PB_2, PB_3, LED_3210, LED_7654); end Bhv;