📄 example14-9.vhd
字号:
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_unsigned.all;
ENTITY timer IS
PORT(
clk:IN std_logic;
RSTbar:IN std_logic;
conminute:IN std_logic_vector(7 downto 0);
conhour:IN std_logic_vector(7 downto 0);
minute:OUT std_logic_vector(13 downto 0);
hour:OUT std_logic_vector(13 downto 0)
);
END timer;
ARCHITECTURE behave OF timer IS
-----------function decoder7--------------
FUNCTION decoder7(decin:integer) RETURN std_logic_vector IS
VARIABLE decout:std_logic_vector(6 downto 0);
BEGIN
decout:="1111110";
CASE decin IS
WHEN 0 =>
decout:="0111111";
WHEN 1 =>
decout:="0011000";
WHEN 2 =>
decout:="1110110";
WHEN 3 =>
decout:="1111100";
WHEN 4 =>
decout:="1011001";
WHEN 5 =>
decout:="1101101";
WHEN 6 =>
decout:="1101111";
WHEN 7 =>
decout:="0111000";
WHEN 8 =>
decout:="1111111";
WHEN 9 =>
decout:="1111101";
WHEN others =>NULL;
decout:="0111111";
END CASE;
RETURN decout;
END decoder7;
-----------------------function logic2dec--------------
FUNCTION logic2dec(conin:std_logic_vector)RETURN integer IS
VARIABLE conout:integer;
BEGIN
conout:=0;
FOR i IN 0 TO 5 LOOP
IF conin(i)='1' THEN
conout:=conout+2**i;
END IF;
END LOOP;
RETURN conout;
END logic2dec;
--------------------process--------------
BEGIN
PROCESS(clk)
VARIABLE lminute,hminute,lhour,hhour:std_logic_vector(6 downto 0);
VARIABLE storeminute,storehour:std_logic_vector(7 downto 0);
VARIABLE hhour_num,lhour_num,hminute_num,lminute_num:integer;
VARIABLE minute_num,hour_num:integer;
VARIABLE time_count:std_logic_vector(3 downto 0);
BEGIN
IF clk'event and clk='1' THEN
IF RSTbar='1' THEN
storeminute:="00000000";
storehour:="00000000";
hour_num:=0;
minute_num:=0;
time_count:="0000";
lminute_num:=0;
hminute_num:=0;
hhour_num:=0;
lhour_num:=0;
minute<="11111101111110";
hour<="11111101111110";
ELSE
IF storeminute/=conminute or storehour/=conhour THEN
storeminute:=conminute;
storehour:=conhour;
time_count:="0000";
minute_num:=logic2dec(storeminute);
hour_num:=logic2dec(storehour);
END IF;
time_count:=time_count+"0001";
IF time_count="1111" THEN
minute_num:=minute_num+1;
END IF;
IF minute_num>=60 THEN
minute_num:=minute_num-60;
hour_num:=hour_num+1;
END IF;
FOR i IN 0 TO 5 LOOP
IF minute_num>=10 THEN
minute_num:=minute_num-10;
hminute_num:=hminute_num+1;
ELSE
exit;
END IF;
END LOOP;
lminute_num:=minute_num;
IF hour_num>=24 THEN
hour_num:=hour_num-24;
END IF;
FOR i IN 0 TO 1 LOOP
IF hour_num>=10 THEN
hhour_num:=hhour_num+1;
hour_num:=hour_num-10;
ELSE
exit;
END IF;
END LOOP;
lhour_num:=hour_num;
lminute:=decoder7(lminute_num);
hminute:=decoder7(hminute_num);
lhour:=decoder7(lhour_num);
hhour:=decoder7(hhour_num);
minute<=hminute&lminute;
hour<=hhour&lhour;
END IF;
END IF;
END PROCESS;
END behave;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -