实验手册
- 实验目的
- 实现时钟
- 实现时钟置数
- 实现闹钟设置和闹钟放歌
- 完成仿真和板级验证
- 实验原理
- 理论原理
- 按键控制部分(消抖后,key有效值为1)。
使用状态机,通过按键进入不同状态,从而使得按键可以设置闹钟和当前时间。
置数和闹钟我视为相同操作,以flag区分。
最后将置数值和功能标识输出。
2.时钟部分
利用计数器计数,实现时分秒计时。计数部分包含cnt_base(1s时钟源),cnt_s,cnt_min,cnt_h,实现基础时钟。
置数功能通过对计数器加入置数位(flag==2’b10)实现,显示的值实时更新。
闹钟功能设置时间可观察化, flag==2’b11时显示闹钟时间。
最后进行判断,闹钟时间时位和分位与当前时间一致并且使能闹钟功能时,蜂鸣器标志位输出flag_b=1。
3.闹钟音乐播放
音符读取速度。
音符读取。
音符译码,根据音符匹配出对应计数值。
flag_b==1时产生驱动蜂鸣器的pwm波(50%,占空比大小不同,响声大小不同)。
2.硬件原理
蜂鸣器
低电平时蜂鸣器的驱动管导通。
按键
按键默认状态为1,按下为0。
3.系统框图
输入按键消抖后得到[3:0]key1,作为状态机的状态切换和value的改变条件,控制模块以[1:0]flag表示模式(设置当前时间还是设置闹钟),输出value作为数字时钟置数来源或者闹钟源数据,数字时钟部分完成计时功能并判断flag输入,flag == 2’b10,value的值是进行数字时钟置数, flag == 2’b11时,vlaue是更新当前闹钟设置值。通过对进行当前时间和设置的闹钟时间进行比较,到达闹钟时间时输出flag_b=1,作为闹钟播放音乐的标志。
- 模块说明
4.模块端口信号列表
信号名 | |
clk |
时钟信号 |
rst |
复位 |
beep_en |
闹钟使能信号,led灯 |
[3:0]key |
按键输入 |
[5:0]seg_sel |
数码管位选信号 |
[7:0] seg_dig |
数码管段选信号 |
beep |
蜂鸣器 |
5.状态转移图
- 6.时序图
状态机时序图
7.仿真波形图
状态机仿真波形
Key0按下,进入置数模式,状态机state_c=s2。
当状态到达s4时,value=value_h*10000+value_f*100+value_m;
按下key1时,flag=2’b11。
设置完毕,state_c=s1, value=value_h*10000+value_f*100+value_m;
- 板级验证效果(拍照或录制视频)