library ieee; use ieee.std_logic_1164.all; entity Top is port ( Clk50Mhz : in std_logic; BTN0 : in std_logic; BTN1 : in std_logic; BTN2 : in std_logic; SW0 : in std_logic; SW1 : in std_logic; LD0 : out std_logic; LD1 : out std_logic; LD2 : out std_logic; LD3 : out std_logic; LD4 : out std_logic; LD5 : out std_logic; LD6 : out std_logic; LD7 : out std_logic); end Top; architecture structure of Top is component DeBounce generic ( NumClocks : integer); port ( Clock : in std_logic; Reset : in std_logic; SigIn : in std_logic; SigOut : out std_logic); end component; component ButtonPulse port ( Clock : in std_logic; Reset : in std_logic; Btn : in std_logic; BtnPress : out std_logic; BtnRelease : out std_logic); end component; component TimerPulse generic ( Period : integer); port ( Clock : in std_logic; Reset : in std_logic; TimerEvent : out std_logic); end component; component Blinky port ( Clock : in std_logic; Reset : in std_logic; TimerEvent1 : in std_logic; TimerEvent2 : in std_logic; GoLeft : in std_logic; GoRight : in std_logic; Invert : in std_logic; Speed : in std_logic; Leds : out std_logic_vector(7 downto 0)); end component; signal Reset : std_logic; signal Btn1_DB : std_logic; signal Btn2_DB : std_logic; signal Btn1_Press : std_logic; signal Btn2_Press : std_logic; signal Timer1 : std_logic; signal Timer2 : std_logic; signal Leds : std_logic_vector(7 downto 0); begin Reset <= BTN0; -- Debounce both buttons DeBounce_1 : DeBounce generic map ( NumClocks => 64*1024) port map ( Clock => Clk50Mhz, Reset => Reset, SigIn => Btn1, SigOut => Btn1_DB); DeBounce_2 : DeBounce generic map ( NumClocks => 64*1024) port map ( Clock => Clk50Mhz, Reset => Reset, SigIn => Btn2, SigOut => Btn2_DB); -- Convert the buttons into "events" ButtonPulse_1 : ButtonPulse port map ( Clock => Clk50Mhz, Reset => Reset, Btn => Btn1_DB, BtnPress => Btn1_Press, BtnRelease => open); -- "open" = "I dont care" It will give you a warning, (which you can -- ignore), about the release port being unconnected. ButtonPulse_2 : ButtonPulse port map ( Clock => Clk50Mhz, Reset => Reset, Btn => Btn2_DB, BtnPress => Btn2_Press, BtnRelease => open); -- Make Timer Events TimerPulse_1 : TimerPulse generic map ( Period => 2500000) -- 1/20th second port map ( Clock => Clk50Mhz, Reset => Reset, TimerEvent => Timer1); TimerPulse_2 : TimerPulse generic map ( Period => 25000000) -- 1/2 second port map ( Clock => Clk50Mhz, Reset => Reset, TimerEvent => Timer2); Blinky_1 : Blinky port map ( Clock => Clk50Mhz, Reset => Reset, TimerEvent1 => Timer1, TimerEvent2 => Timer2, GoLeft => Btn2_Press, GoRight => Btn1_Press, Invert => Sw0, Speed => Sw1, Leds => Leds); LD0 <= Leds(0); LD1 <= Leds(1); LD2 <= Leds(2); LD3 <= Leds(3); LD4 <= Leds(4); LD5 <= Leds(5); LD6 <= Leds(6); LD7 <= Leds(7); end structure;