-
Notifications
You must be signed in to change notification settings - Fork 0
/
blink.vhd
62 lines (47 loc) · 1.3 KB
/
blink.vhd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY blink is
port
(
i_clk : IN STD_LOGIC;
o_flashing : OUT STD_LOGIC
);
end blink;
-- Architecture Body
architecture blink_architecture of blink is
-- Constants to create the frequencies needed:
-- 50MHZ/1Hz * 50% duty = 25,000,000
-- 50MHZ/10hz * 50% duty = 2,500,000
signal c_CNT_1HZ : natural := 25000000;
signal c_CNT_10HZ : natural := 2500000;
-- Counter signals:
signal r_CNT_1HZ : natural range 0 to c_CNT_1HZ;
signal r_CNT_10HZ : natural range 0 to c_CNT_10HZ;
-- these signals hold toggle status:
signal r_TOGGLE_1HZ : std_logic := '0';
signal r_TOGGLE_10HZ: std_logic := '0';
begin
p_1HZ : process (i_clk) is
begin
if rising_edge(i_clk) then
if r_CNT_1HZ = c_CNT_1HZ - 1 then
r_TOGGLE_1HZ <= not r_TOGGLE_1HZ;
r_CNT_1HZ <= 0;
else
r_CNT_1HZ <= r_CNT_1HZ + 1;
end if;
end if;
end process;
p_10HZ : process (i_clk) is
begin
if rising_edge(i_clk) then
if r_CNT_10HZ = c_CNT_10HZ - 1 then
r_TOGGLE_10HZ <= not r_TOGGLE_10HZ;
r_CNT_10HZ <= 0;
else
r_CNT_10HZ <= r_CNT_10HZ + 1;
end if;
end if;
end process;
o_flashing <= r_TOGGLE_10HZ;
end blink_architecture;