VHDL设计的12进制可调时钟带闹铃功能
1、 顶层原理图如下:
2、 各模块生成的电路符号如下:
分频模块 计数模块 闹铃模块
二选一模块
设置闹铃时间模块 显示模块
3、 各模块程序清单如下:
(1)、分频模块(将开发板上的50Mhz的信号进行分频得
到1hz的计时信号和1khz的位选信号)
library ieee; --对开发板上的50MHZ信号进行分频得到1khz和1hz信号 use ieee.std_logic_1164.all;
entity div_freq is
port(freq_in:in std_logic;
flag_1khz,flag_1hz: buffer std_logic); end entity;
architecture one of div_freq is signal complete_1khz: integer range 0 to 50000; signal complete_1hz: integer range 0 to 1000; signal test_out:std_logic; begin process(freq_in) --此进程得到的是1khz的信号 begin if(freq_in 'event and freq_in='1') then complete_1khz<=complete_1khz+1; if(complete_1khz=50000) then complete_1khz<=0; elsif(complete_1khz<25000) then flag_1khz<='0'; else flag_1khz<='1'; end if; end if; end process; process(flag_1khz) --此进程是得到1hz信号 begin if(flag_1khz 'event and flag_1khz='1') then complete_1hz<=complete_1hz+1; if(complete_1hz=1000)then complete_1hz<=0; flag_1hz<='0'; else flag_1hz<='1'; end if; end if; test_out<=flag_1hz; end process; end architecture one;
(2)、计时模块
library ieee; --此模块是时分秒计时程序 use ieee.std_logic_1164.all;
entity counter is
port(flag_1hz:in std_logic; --1hz信号到来时开始计时
pause:in std_logic; --计时与调整的选择,决定是自动计时还是按
键调整时间
add_min:in std_logic; --按键调整分的信号 add_hour:in std_logic; --按键调整时的信号 cnt_60s:out integer range 0 to 59; --秒计数值 cnt_60m:out integer range 0 to 59; --分计数值 cnt_12h:out integer range 0 to 11); --时计数值 end entity;
architecture one of counter is signal sc_c:std_logic; --秒的进位信号 signal min_c:std_logic; --分的进位信号 signal selector_min:std_logic; --存放秒的进位信号或者分调整
的按键信号
signal selector_hour:std_logic; --存放分的进位信号或者时调整
的按键信号
begin process(flag_1hz) --此进程是进行60秒计时 variable cnt_60s_v:integer range 0 to 59; --存放秒计时
的中间变量,最后传到秒输出端cnt_60s
begin if(flag_1hz 'event and flag_1hz='1') then if(cnt_60s_v=59) then cnt_60s_v:=0; sc_c<='1'; else cnt_60s_v:=cnt_60s_v+1; sc_c<='0'; end if; end if; cnt_60s<=cnt_60s_v; --将计数的中间变量传给
秒的输出端
end process;
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库VHDL设计的12进制可调时钟带闹铃功能 - 图文在线全文阅读。
相关推荐: