entity heartbeat is
generic (
- divider : integer := 33000000
+ divider : std_logic_vector(31 downto 0) := "00000000001111101111000101001000"
);
port (
clk_i : in std_logic;
nrst_i : in std_logic;
- led_o : out std_logic
+ led2_o : out std_logic;
+ led3_o : out std_logic;
+ led4_o : out std_logic;
+ led5_o : out std_logic
);
end heartbeat;
process(clk_i, nrst_i)
variable counter : std_logic_vector(31 downto 0);
-variable state : std_logic := '0';
+variable state : std_logic_vector(3 downto 0) := "0001";
+variable direction : std_logic := '0';
begin
if (clk_i'event AND clk_i = '1') then
if nrst_i = '0' then
counter := (others => '0');
else
- led_o <= state;
+ led2_o <= state(0);
+ led3_o <= state(1);
+ led4_o <= state(2);
+ led5_o <= state(3);
counter := counter + 1;
if counter = divider then
- state := not state;
+ if state(3) = '1' then
+ direction := '1';
+ end if;
+
+ if state(0) = '1' then
+ direction := '0';
+ end if;
+
+ if direction = '0' then
+ state(3 downto 1) := state(2 downto 0);
+ state(0) := '0';
+ else
+ state(2 downto 0) := state(3 downto 1);
+ state(3) := '0';
+ end if;
+ counter := (others => '0');
end if;
end if;
end if;