基于FPGA语音数字时钟系统.doc
文本预览下载声明
基于FPGA的语音数字时钟系统设计
设计要求:
计时功能:这是这个计时器设计的基本功能,每隔一分钟记一次时间并在屏幕上显示出当前时间。
闹钟功能:如果当前时间与设置的闹钟时间相同,则扬声器会发出报时声音。
设置新的计时器时间:用户用数字键0~9输入新的时间,然后按下TIME健确认。
设置新的闹钟时间:用户用数字键0~9输入新的闹钟时间,然后按下ALARM健确认。
显示所设置的闹钟时间:在正常记时显示状态下,用户直接按下ALARM健,则显示器上显示已经设置好的闹钟时间。
2.设计思路:
控制器命名为Alarm_controller,外部端口
各个端口定义:
Clk外部时钟信号
Reset复位信号
Alarm_botton闹钟信号,当其为高电平时,表示用户按下
Time_botton时间信号,当其为高电平时,表示用户按下
Key键盘信号,当其为高电平时,表示用户按下0~9
Load_new_a读取新的闹钟时间,高电平有效
Load_new_c控制设置新的时间,高电平有效
Show_new_time读取并显示新的时间,高电平有效
Show_a当Show_new_time为低电平时,根据Show_a控制当前是显示闹钟时间还是时钟时间
根据端口的设置以及控制要求,设定如下5个状态
S0:闹钟正常计数状态
S1:键盘输入状态,当用户按下键盘,即进入此状态,当一段时间后用户没有按下Alarm或者Time确认,则自动返回S0状态
S2:设定闹钟状态,当用户按完键盘,按下Alarm键时进入此状态
S3:设定时间状态,当用户按完键盘,按下Time键时进入此状态
S4:显示闹钟时间,当用户直接按下Alarm键时,进入此状态
在S4状态下,用户按下Alarm键时钟即显示闹钟时间,经过一段延时之后,时钟从新恢复S0状态。
以下是程序流程表
当前状态
控制输入
下一状态
控制输出
S0
Key=’1’
S1
Show_new_time=’1’
Alarm_botton=’1’
S2
Show_a=’1’
else
S0
Null
S1
Key=’1’
S1
Show_new_time=’1’
Alarm_botton=’1’
S2
Load_new_a=’1’
Time_botton=’1’
S3
Load_new_c=’1’
超时
是
S0
Null
否
S1
Show_new_time=’1’
S2
Alarm_botton=’1’
S2
Load_new_a=’1’
else
S0
Null
S3
Time_botton=’1’
S3
Load_new_c=’1’
else
S0
Null
S4
Alarm_botton=’1’
S4
Show_a
超时
是
S0
Null
否
S4
Show_a并等待
程序:
程序包P_alarm封装定义
library IEEE;
use IEEE.std_logic_1164.all;
package P_alarm is
subtype t_digital is integer range 0 to 7;
subtype t_short is integer range 0 to 65535;
type t_clock_time is array(3 downto 0) of T_digital;
type t_display is array(3 downto 0) of Std_logic_vector(6 downto 0);
type seg7 is array(0 to 7) of Std_logic_vector(6 downto 0);
constant Seven_seg:seg7:=(,--0
,--1
,--2
,--3
,--4
,--5
,--6
,--7
,--8
,--9);
end package P_alarm;--程序包体封装结束
library IEEE;
use IEEE.std_logic_1164.all;
use WORK.P_alarm.all;
ENTITY Alarm_contorller is
port(Key,Alarm_botton,Time_botton,
显示全部