这是一个设置六十秒钟的定是器,clk是1hz时钟,clk1000是1000hz时钟,mode是模式,设置时间和倒计时模式,mi是十位+1,sec是个位加1,start时开始倒计时,sel是两个数码管的片选信号,reg7控制7段数码管显示程序如下library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
entity counter is
port( clk,clk1000:in bit;
reset,mode,mi,sec,start:in bit;
reg7:out std_logic_vector(12 downto 0);
sel:buffer std_logic_vector(3 downto 0)
);
end entity counter;
architecture one of counter is
signal one_reg:std_logic_vector(128 downto 0);
signal ten_reg:std_logic_vector(128 downto 0);
signal one,ten:std_logic_vector(15 downto 0);
begin
process(reset)
begin
if (reset='0')then
one_reg<="1111110";
ten_reg<="1111110";
end if;
end process;
process(clk,clk1000,mi,sec,mode,start)
begin
case one is
when"0000"=>one_reg<="1111110";
when"0001"=>one_reg<="1100000";
when"0010"=>one_reg<="1011011";
when"0011"=>one_reg<="1110011";
when"0100"=>one_reg<="1100101";
when"0101"=>one_reg<="1000111";
when"0110"=>one_reg<="0111111";
when"0111"=>one_reg<="1100010";
when"1000"=>one_reg<="1111111";
when"1001"=>one_reg<="1110111";
when others=>one_reg<="0000000";
end case;
case ten is
when"0000"=>ten_reg<="1111110";
when"0001"=>ten_reg<="1100000";
when"0010"=>ten_reg<="1011011";
when"0011"=>ten_reg<="1110011";
when"0100"=>ten_reg<="1100101";
when"0101"=>ten_reg<="1000111";
when"0110"=>ten_reg<="0111111";
when"0111"=>ten_reg<="1100010";
when"1000"=>ten_reg<="1111111";
when"1001"=>ten_reg<="1110111";
when others=>ten_reg<="0000000";
end case;
case sel is
when "01"=>reg7<=one_reg;
when "10"=>reg7<=ten_reg;
when others=>reg7<="1111111";
end case;
if( clk'event and clk='1')then
if (mode='0')then
if(mi and mi'event='1')then
if(ten=6)then
ten<=0;
else ten<=ten+1;
end if;
end if;
if(sec and sec'event='1')then
if(one=9)then
one<=0;
else one<=one+1;
end if;
end if;
elsif(mode='1')then
if (start and start'event='1')then
if(one=0 and ten/=0)then
one<=9;
ten<=ten-1;
elsif(one=0 and ten=0)then
one<=0;
ten<=0;
else one<=one-1;
end if;
end if;
end if;
end if;
if(clk1000 and clk1000'event='1')then
if(sel="10")then
sel<="01";
else sel<="10";
end if;
end if;
end process;
end one;