基于FPGA的数字电子时钟VHDL代码Quartus仿真
名称:基于FPGA的数字电子时钟VHDL代码Quartus仿真
软件:Quartus
语言:VHDL
代码功能:
设计要求为:
1.具有时分秒的计数显示功能
2.具有清零功能,可数字时钟的小时,分钟进行调整。
3.12小时制和24小时制均可
4.具有日期和星期显示功能并且可对其进行调整
5.具有秒表功能
6.具有定时和闹钟功能
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
演示视频:
设计文档:
1. 工程文件

2. 程序文件



3. 程序编译

4. RTL图

5. 仿真图
整体仿真图


计时模块仿真图



日期模块仿真图



部分代码展示:
LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_unsigned.all; --万年历 ENTITY calendar IS PORT ( CLK : IN STD_LOGIC; RST : IN STD_LOGIC; --年月日调整按键 day_add : IN STD_LOGIC;--天加 day_sub : IN STD_LOGIC;--天减 month_add : IN STD_LOGIC;--月加 month_sub : IN STD_LOGIC;--月减 year_add : IN STD_LOGIC;--年加 year_sub : IN STD_LOGIC;--年减 year_h : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);--年高位 year_l : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);--年低位 month : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--月 week : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--星期 day : OUT STD_LOGIC_VECTOR(4 DOWNTO 0)--天 ); END calendar; ARCHITECTURE behave OF calendar IS SIGNAL month_add_cin : STD_LOGIC := '0'; SIGNAL month_sub_cin : STD_LOGIC := '0'; SIGNAL year_add_cin : STD_LOGIC := '0'; SIGNAL year_sub_cin : STD_LOGIC := '0'; SIGNAL day_max : STD_LOGIC_VECTOR(4 DOWNTO 0);----月最大天数 SIGNAL year_h_temp : STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL year_l_temp : STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL month_temp : STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL day_temp : STD_LOGIC_VECTOR(4 DOWNTO 0); SIGNAL week_temp : STD_LOGIC_VECTOR(3 DOWNTO 0);--星期 BEGIN --输出 year_h<=year_h_temp; year_l <= year_l_temp; month <= month_temp; day <= day_temp; week <= week_temp; --闰月判断 PROCESS (CLK, RST) BEGIN IF (RST = '1') THEN day_max <= "11110"; ELSIF (CLK'EVENT AND CLK = '1') THEN IF (NOT((year_l_temp(1 DOWNTO 0) = "00" AND year_l_temp /= "00000000") OR (year_h_temp(1 DOWNTO 0) = "00" AND year_l_temp = "00000000")) AND (month_temp = "0010")) THEN day_max <= "11100";--非闰年2月 ELSIF (((year_l_temp(1 DOWNTO 0) = "00" AND year_l_temp /= "00000000") OR (year_h_temp(1 DOWNTO 0) = "00" AND year_l_temp = "00000000")) AND (month_temp = "0010")) THEN day_max <= "11101";--闰年2月 ELSIF ((month_temp = "0100") OR (month_temp = "0110") OR (month_temp = "1001") OR (month_temp = "1011")) THEN day_max <= "11110";--小月 ELSIF ((month_temp = "0001") OR (month_temp = "0011") OR (month_temp = "0101") OR (month_temp = "0111") OR (month_temp = "1000") OR (month_temp = "1010") OR (month_temp = "1100")) THEN day_max <= "11111";--大月 ELSE day_max <= "11110"; END IF; END IF; END PROCESS; --调整星期 PROCESS (CLK, RST) BEGIN IF (RST = '1') THEN week_temp <= "0011";--星期3 ELSIF (CLK'EVENT AND CLK = '1') THEN IF (day_add = '1') THEN--加 IF (week_temp >= "0111") THEN--星期最大7 week_temp <= "0001";--最小1 ELSE week_temp <= week_temp + "0001";--加1 END IF; ELSIF (day_sub = '1') THEN--减 IF (week_temp = "0001") THEN--最小1 week_temp <= "0111";--星期最大7 ELSE week_temp <= week_temp - "0001";--减1 END IF; ELSIF (week_temp >= "0111") THEN--星期最大7 week_temp <= "0111";--星期最大7 ELSE week_temp <= week_temp; END IF; END IF; END PROCESS; --调整天 PROCESS (CLK, RST) BEGIN IF (RST = '1') THEN day_temp <= "00001";--1日 ELSIF (CLK'EVENT AND CLK = '1') THEN IF (day_add = '1') THEN--加 IF (day_temp >= day_max) THEN day_temp <= "00001"; month_add_cin <= '1';--月进1 ELSE day_temp <= day_temp + "00001"; month_add_cin <= '0'; END IF; ELSIF (day_sub = '1') THEN--减 IF (day_temp = "00001") THEN day_temp <= day_max; month_sub_cin <= '1';--月减1 ELSE day_temp <= day_temp - "00001"; month_sub_cin <= '0'; END IF; ELSIF (day_temp >= day_max) THEN day_temp <= day_max; month_add_cin <= '0'; month_sub_cin <= '0'; ELSE day_temp <= day_temp; month_add_cin <= '0'; month_sub_cin <= '0'; END IF; END IF; END PROCESS; --调整月 PROCESS (CLK, RST) BEGIN IF (RST = '1') THEN month_temp <= "0001";--1月 ELSIF (CLK'EVENT AND CLK = '1') THEN IF (month_add = '1' OR month_add_cin = '1') THEN--加 IF (month_temp >= "1100") THEN--12月 month_temp <= "0001"; year_add_cin <= '1';--年加1 ELSE month_temp <= month_temp + "0001"; year_add_cin <= '0'; END IF; ELSIF (month_sub = '1' OR month_sub_cin = '1') THEN--减 IF (month_temp = "0001") THEN month_temp <= "1100"; year_sub_cin <= '1';--年减1 ELSE month_temp <= month_temp - "0001"; year_sub_cin <= '0'; END IF; ELSE month_temp <= month_temp; year_add_cin <= '0'; year_sub_cin <= '0'; END IF; END IF; END PROCESS;
代码文件(付费下载):
![]()
1、代码文件需要付费后才可见。
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » 基于FPGA的数字电子时钟VHDL代码Quartus仿真
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » 基于FPGA的数字电子时钟VHDL代码Quartus仿真