📄 kevin_timer.vhd
字号:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
entity kevin_timer is
port ( rst : in std_logic;
clk : in std_logic;
segA : out std_logic_vector (7 downto 0);
segB : out std_logic_vector (7 downto 0);
segC : out std_logic_vector (7 downto 0);
segD : out std_logic_vector (7 downto 0);
segE : out std_logic_vector (7 downto 0);
segF : out std_logic_vector (7 downto 0);
segG : out std_logic_vector (7 downto 0);
segH : out std_logic_vector (7 downto 0) );
end entity;
architecture timer of kevin_timer is
--these signals are for number counting:
signal cunt : integer range 0 to 99999;
signal cunt_centisec : integer range 0 to 99;
signal cunt_second : integer range 0 to 59;
signal cunt_minute : integer range 0 to 59;
signal cunt_hour : integer range 0 to 23;
--these signals are for display:
signal cunt_centisec_l : integer range 0 to 9;
signal cunt_centisec_h : integer range 0 to 9;
signal cunt_second_l : integer range 0 to 9;
signal cunt_second_h : integer range 0 to 9;
signal cunt_minute_l : integer range 0 to 9;
signal cunt_minute_h : integer range 0 to 9;
signal cunt_hour_l : integer range 0 to 9;
signal cunt_hour_h : integer range 0 to 9;
begin
-- this is the calculation for timer:
process ( rst, clk)
begin
if (rst='0') then
cunt<=0;
cunt_centisec<=0;
cunt_second<=0;
cunt_minute<=0;
cunt_hour<=0;
elsif(clk'event and clk='1') then
if (cunt=99999) then
cunt<=0;
if (cunt_centisec=99) then
cunt_centisec<=0;
if (cunt_second=59) then
cunt_second<=0;
if (cunt_minute=59) then
cunt_minute<=0;
if (cunt_hour=23) then
cunt_hour<=0;
else cunt_hour<=cunt_hour+1;
end if;
else cunt_minute<=cunt_minute+1;
end if;
else cunt_second<=cunt_second+1;
end if;
else cunt_centisec<=cunt_centisec+1;
end if;
else cunt<=cunt+1;
end if;
end if;
end process;
-- this is for the dis8play calculation:
process (cunt_centisec, cunt_second, cunt_minute, cunt_hour )
begin
cunt_centisec_h <= cunt_centisec/10;
cunt_centisec_l <= cunt_centisec - cunt_centisec_h*10;
cunt_second_h <= cunt_second/10;
cunt_second_l <= cunt_second - cunt_second_h*10;
cunt_minute_h <= cunt_minute/10;
cunt_minute_l <= cunt_minute - cunt_minute_h*10;
cunt_hour_h <= cunt_hour/10;
cunt_hour_l <= cunt_hour - cunt_hour_h*10;
end process;
-- this is for display:
process (cunt_centisec_h, cunt_centisec_l, cunt_second_h, cunt_second_l, cunt_minute_h,
cunt_minute_l, cunt_hour_h, cunt_hour_l)
begin
case cunt_centisec_l is
when 0 => segH<="11111100";
when 1 => segH<="01100000";
when 2 => segH<="11011010"; when 3 => segH<="11110010"; when 4 => segH<="01100110"; when 5 => segH<="10110110"; when 6 => segH<="10111110"; when 7 => segH<="11100000"; when 8 => segH<="11111110"; when 9 => segH<="11110110";
when others => segH<="00000000";
end case;
case cunt_centisec_h is
when 0 => segG<="11111100";
when 1 => segG<="01100000";
when 2 => segG<="11011010";
when 3 => segG<="11110010";
when 4 => segG<="01100110";
when 5 => segG<="10110110";
when 6 => segG<="10111110";
when 7 => segG<="11100000";
when 8 => segG<="11111110";
when 9 => segG<="11110110";
when others => segG<="00000000";
end case;
case cunt_second_l is
when 0 => segF<="11111101";
when 1 => segF<="01100001";
when 2 => segF<="11011011";
when 3 => segF<="11110011";
when 4 => segF<="01100111";
when 5 => segF<="10110111";
when 6 => segF<="10111111";
when 7 => segF<="11100001";
when 8 => segF<="11111111";
when 9 => segF<="11110111";
when others => segF<="00000001";
end case;
case cunt_second_h is
when 0 => segE<="11111100";
when 1 => segE<="01100000";
when 2 => segE<="11011010";
when 3 => segE<="11110010";
when 4 => segE<="01100110";
when 5 => segE<="10110110";
when 6 => segE<="10111110";
when 7 => segE<="11100000";
when 8 => segE<="11111110";
when 9 => segE<="11110110";
when others => segE<="00000000";
end case;
case cunt_minute_l is
when 0 => segD<="11111101";
when 1 => segD<="01100001";
when 2 => segD<="11011011";
when 3 => segD<="11110011";
when 4 => segD<="01100111";
when 5 => segD<="10110111";
when 6 => segD<="10111111";
when 7 => segD<="11100001";
when 8 => segD<="11111111";
when 9 => segD<="11110111";
when others => segD<="00000001";
end case;
case cunt_minute_h is
when 0 => segC<="11111100";
when 1 => segC<="01100000";
when 2 => segC<="11011010";
when 3 => segC<="11110010";
when 4 => segC<="01100110";
when 5 => segC<="10110110";
when 6 => segC<="10111110";
when 7 => segC<="11100000";
when 8 => segC<="11111110";
when 9 => segC<="11110110";
when others => segC<="00000000";
end case;
case cunt_hour_l is
when 0 => segB<="11111101";
when 1 => segB<="01100001";
when 2 => segB<="11011011";
when 3 => segB<="11110011";
when 4 => segB<="01100111";
when 5 => segB<="10110111";
when 6 => segB<="10111111";
when 7 => segB<="11100001";
when 8 => segB<="11111111";
when 9 => segB<="11110111";
when others => segB<="00000001";
end case;
case cunt_hour_h is
when 0 => segA<="11111100";
when 1 => segA<="01100000";
when 2 => segA<="11011010";
when 3 => segA<="11110010";
when 4 => segA<="01100110";
when 5 => segA<="10110110";
when 6 => segA<="10111110";
when 7 => segA<="11100000";
when 8 => segA<="11111110";
when 9 => segA<="11110110";
when others => segA<="00000000";
end case;
end process;
end architecture;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -