数字钟的报告_数字钟报告
数字钟的报告由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“数字钟报告”。
FPGA数字导流设计——数字钟
一、设计目的二、设计要求
1、能够进行正常的时、分、秒计时功能,分别由6个数码管显示24h/60min/60s。
2、Sc键进行校时:按下Sc键时,时计数器以秒速度递增,并按24循环,计满23后再回00。
3、Sb键进行校分:按下Sb键时,时计数器以秒速度,并按60循环,计满59后再回00,但不向时进位。
3、Sa键进行秒清零:按下Sa键时,可对秒清零。
4、扬声器整点报时:当计时达到59’51”时开始报时
三、设计步骤
1、数字钟顶层设计
根据外部输入输出要求划分内部功能模块有:
(1)内部1Hz的时间基准和整点报时用的1KHz和500Hz的脉冲信号,需要设计一个输入为1KHz输出为1Hz和500Hz的分频模块FENP。
(2)实现六十进制带有进位和清零功能的秒计数模块SECOND,输入为1Hz脉冲和低电平有效的清零信号CLR,输出为秒个位s0[3…0]秒十位s1[3…0]、进位信号co。
(3)实现六十进制带有进位和置数功能的分计数模块MINUTE,输入为1Hz脉冲和高电平有效的使能信号EN,输出为分个位m0[3…0]分十位m1[3…0]、进位信号co。
(4)实现二十四进制带无进位功能的时计数模块HOUR,输入为1Hz脉冲和高电平有效的使能信号输出为时个位h0[3…0]、时十位h1[3…0]。(5)实现整点报时功能模块ALERT,输入为分个位m0[3…0]分十位m1[3…0]秒个位s0[3…0]秒十位s1[3…0],输出为高频声控制Q1K和低频声控制Q500。由上述功能模块组成的数字钟顶层原理图如图1所示。
2、数字钟功能模块设计
(1)分频模块
功能要求:输入为1kHz,输出为1Hz和500Hz脉冲信号,分频模块如图2所示
设计思路:采用原理图输入方式实现2分频和1000分频,如图3所示
图2
图3(2)秒模块
功能要求:实现带有进位和清零功能的六十进制“秒”计数器,输入为1Hz秒冲和低电平有效的清零信号CLR,输出为秒个位S0[3…0]、秒十位S1[3…0]、进位信号CO,模块SECOND如图4所示
设计思路:采用VHDL语言输入方式,以时钟clk和清零信号clr为进程的敏感変量,当clr为“1”时清零,clr为“0”时在时钟上升沿作用下状态小于59计数而等于58时产生进位。源程序如下: library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity SECOND is port(clk, clr:in std_logic;
sec1, sec0:out std_logic_vector(3 downto 0);co:out std_logic);end SECOND;architecture SEC of SECOND is begin
proce(clk, clr)variable cnt1, cnt0:std_logic_vector(3 downto 0);begin
if clr = '1' then cnt1:= “0000”;cnt0:= “0000”;elsif clk'event and clk = '1' then
if cnt1 = “0101” and cnt0 = “1000” then co
cnt1 := “0000”;co
图4
仿真图
(3)分模块
功能要求:实现带有进位和置数功能的六十进制“分”计数器,输入为1Hz脉冲和高电平有效的使能信号EN,输出为分个位m0[3…0]、分十位m1[3…0]、进位信号co,分模块如图5所示。
设计思路:采用VHDL语言输入方式,以时钟clk为进程的敏感変量,当en为“1”时,在时钟上升沿作用下状态小于59时完成计数,等于58时产生进位。源程序如下: library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity MINUTE is port(clk,en:in std_logic;
min1,min0:out std_logic_vector(3 downto 0);
co:out std_logic);end MINUTE;architecture MIN of MINUTE is begin proce(clk)variable cnt1,cnt0:std_logic_vector(3 downto 0);begin if clk'event and clk ='1'then if en ='1'then if cnt1 =“0101” and cnt0 =“1000” then co
图5
仿真图
(4)时模块
功能要求:实现无进位的二十四进制“时”计数器,输入为1Hz脉冲和高电平有效的使能信号EN,输出为时个位H0[3…0]、时十位H1[3…0],时计数模块如图6所示。
设计思路:采用VHDL语言输入方式,以时钟clk为进程的敏感変量,当en为“1”时,在时钟上升沿作用下状态小于23时计数。源程序如下: library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity HOUR is port(clk,en:in std_logic;
h1,h0:out std_logic_vector(3 downto 0));end HOUR;architecture hour_arc of HOUR is begin proce(clk)variable cnt1,cnt0:std_logic_vector(3 downto 0);begin if clk 'event and clk='1' then if en='1' then if cnt1=“0010”and cnt0=“0011”then cnt1:=“0000”;cnt0:=“0000”;elsif cnt0
图6
仿真图
(5)整点报时模块
功能要求:实现整点报时功能,输入为分个位m0[3…0]、分十位m1[3…0]、秒个位s0[3…0]、秒十位s1[3…0],输出为高频声控Q1K和低频声控Q500,整点报时模块如图7所示
设计思路:采用VHDL语言输入方式,以时钟clk为进程的敏感変量,在时钟上升沿作用下,当m1=“0101”、m0=“1001”、s1=“0101”,s0分别为“0001”、“0011”、“0101”、“0111”时,q500输出为“1”;当m1=“0101”、m0=“1001”、s1=“0101”、s0=“1001”时,q1k输出为“1”。源程序如下: library ieee;use ieee.std_logic_1164.all;entity ALERT is port(m1,m0,s1,s0:in std_logic_vector(3 downto 0);clk:in std_logic;q500,q1k:out std_logic);end ALERT;architecture _arc of ALERT is begin proce(clk)begin if clk 'event and clk ='1'then if m1=“0101” and m0=“1001”and s1=“0101” then if s0=“0001” or s0=“0011”or s0=“0101” or s0=“0111”then q500
图73、功能仿真
根据各模块功能要求,分别对各模块进行功能仿真,满足功能要求后生成宏模块。按照图1形成数字钟顶层图。
4、编译、下载、实测 对数字钟顶层图编译后下载到CPLD/FPGA芯片中,将数字试验箱中的各部分按照图8连接电路即可进行实测。
四、心得体会