📄 cnt.vhd
字号:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
ENTITY cnt IS
PORT( clk: IN STD_LOGIC;
rst: IN STD_LOGIC;
adj: IN STD_LOGIC;
adjust: IN STD_LOGIC_VECTOR(4 downto 0);
qsl: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
qsh: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
qml: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
qmh: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
qhl: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
qhh: OUT STD_LOGIC_VECTOR(3 DOWNTO 0)
);
END cnt;
ARCHITECTURE func1 OF cnt IS
SIGNAL inter_clk: STD_LOGIC;
SIGNAL tqsl,tqsh,tqml,tqmh,tqhl,tqhh: INTEGER RANGE 0 TO 10;
SIGNAL tqh : INTEGER RANGE 0 TO 25;
BEGIN
inter_clk <= clk OR adj;
tqhl <= tqh WHEN tqh >= 0 AND tqh < 10 ELSE
tqh - 10 WHEN tqh >= 10 AND tqh < 20 ELSE
tqh - 20 WHEN tqh >= 20 AND tqh < 24 ELSE
0;
tqhh <= 0 WHEN tqh >= 0 AND tqh < 10 ELSE
1 WHEN tqh >= 10 AND tqh < 20 ELSE
2 WHEN tqh >= 20 AND tqh < 24 ELSE
0;
qsl <= CONV_STD_LOGIC_VECTOR(tqsl,4);
qsh <= CONV_STD_LOGIC_VECTOR(tqsh,4);
qml <= CONV_STD_LOGIC_VECTOR(tqml,4);
qmh <= CONV_STD_LOGIC_VECTOR(tqmh,4);
qhl <= CONV_STD_LOGIC_VECTOR(tqhl,4);
qhh <= CONV_STD_LOGIC_VECTOR(tqhh,4);
PROCESS(rst,inter_clk)
BEGIN
IF(rst='0') THEN
tqsl<=0;
tqml<=0;
tqsh<=0;
tqmh<=0;
tqh<=0;
ELSIF(inter_clk'EVENT AND inter_clk='1') THEN
-- second
IF (adj = '0' AND tqsl = 9) OR (adjust = "00001" AND tqsl = 9) THEN
tqsl <= 0 ;
ELSIF (adj = '0' AND tqsl /= 9) OR (adjust = "00001" AND tqsl /= 9) THEN
tqsl <= tqsl + 1;
ELSE
tqsl <= tqsl;
END IF;
IF (adj = '0' AND tqsh = 5 AND tqsl = 9) OR (adjust(1) = '1' AND tqsh = 5) THEN
tqsh <= 0 ;
ELSIF (adj = '0' AND tqsh /= 5 AND tqsl = 9) OR (adjust(1) = '1' AND tqsh /= 5) THEN
tqsh <= tqsh + 1;
ELSE
tqsh <= tqsh;
END IF;
-- minute
IF (adj = '0' AND tqml = 9 AND tqsh = 5 AND tqsl = 9) OR (adjust(2) = '1' AND tqml = 9) THEN
tqml <= 0 ;
ELSIF (adj = '0' AND tqml /= 9 AND tqsh = 5 AND tqsl = 9) OR (adjust(2) = '1' AND tqml /= 9) THEN
tqml <= tqml + 1;
ELSE
tqml <= tqml;
END IF;
IF (adj = '0' AND tqmh = 5 AND tqml = 9 AND tqsh = 5 AND tqsl = 9)
OR (adjust(3) = '1' AND tqmh = 5) THEN
tqmh <= 0 ;
ELSIF (adj = '0' AND tqmh /= 5 AND tqml = 9 AND tqsh = 5 AND tqsl = 9)
OR (adjust(3) = '1' AND tqmh /= 5) THEN
tqmh <= tqmh + 1;
ELSE
tqmh <= tqmh;
END IF;
-- hour
IF (adj = '0' AND tqh = 23 AND tqmh = 5 AND tqml = 9 AND tqsh = 5 AND tqsl = 9)
OR ( adjust(4) = '1' AND tqh = 23) THEN
tqh <= 0 ;
ELSIF (adj = '0' AND tqh /= 23 AND tqmh = 5 AND tqml = 9 AND tqsh = 5 AND tqsl = 9)
OR ( adjust(4) = '1' AND tqh /= 23) THEN
tqh <= tqh + 1;
ELSE
tqh <= tqh;
END IF;
END IF;
END PROCESS;
END func1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -