EDA课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计说明书
课程:EDA技术基础
题目:数字钟的设计
闹钟与整点报时模块
学生姓名:XXX
学号201265110204
班级
:1203班
专业:电子信息与科学
指导教师:XXX
2014年12月20日
长沙理工大学课程设计任务书
物理与电子科学学院电子信息与科学专业1203班姓名王玲课程名称EDA技术基础
题目数字钟的设计
长沙理工大学课程设计成绩评定表
目录
1数字钟设计闹钟模块基本任务要求4 2设计思想4
3简述闹钟模块的输入与输出5
4分进程描述6
5仿真结果与分析7
6简述数字钟的设计总成果10
7总结11
参考文献13
代码附件13
基本任务要求:运用QuartusⅡ13.1软件平台,用VHDL语言描述并设计的闹钟模块满足可调闹钟时间,当时钟时间到达闹钟时间后会响闹铃,(由于实验室权限问题会以FPGA开发板上12个LED灯交替发光来表现);整点报时过程表现为整点的前十秒内响铃,(以FPGA开发板上一个LED灯交替发光来实现)。
设计思想:闹钟模块要以分频模块、计数器模块和译码显示模块为基础,将闹钟模块分为三个进程,一个进程用来实现调闹钟,一个进程来实现闹响闹钟(即实现LED灯交替发光),另一个进程来是实现整点报时。
(上面截图为数字钟整体编译后的RTL电路的闹钟模块)
简述闹钟模块图的输入与输出:上图中的输入粗黑实线为计数器模块输出的小时、分钟的高低位和秒钟的高位(都用四位的二进制表示);输出的粗黑实线为定的闹钟时间(包括小时和分钟),将送到译码显示模块显示闹钟时间,闹钟时间与时钟都在FPGA上的数码管显示,用二选一实现交替显示。clk和clk1都是经过分频器分出的不同频率的信号分别用于整点报时的闪灯脉冲与闹钟调时、闹响的闪灯脉冲。
AlarmEn和alarmADJ分别为控制闹钟闹响和控制闹钟调时的输入脉冲;ADJ1和ADJ2就分别为控制闹钟调小时与分钟的的输入脉冲(可与校时钟的开关共用)。sound13为整点报时的LED灯的输入信号,其余的为闹钟闹响时的LED灯的输入信号。
分进程描述:
1.调闹钟进程:
先列出调闹钟进程的部分VHDL语言描述:
if(alarmADJ='0')then
ifclk1'eventandclk1='1'then
ifADJ1='0'then
if(hour_unitcount<9)then
hour_unitcount:=hour_unitcount+1;
elsehour_unitcount:="0000";
hour_decadecount:=hour_decadecount+1;
endif;
if(hour_decadecount=2andhour_unitcount=4)then
hour_decadecount:="0000";hour_unitcount:="0000";
endif;
ENDIF;
分析:alarmADJ为低电平且ADJ1也为低电平时,随着clk1的脉冲信号来计数,小时为24进制数,可从上面的语句中看出计数的周期为24;根据调闹钟小时的部分代码可类似的分析出调闹钟分钟的基本逻辑。
2.整点报时进程:
process(clk,mh,ml,sh)
variablecount1:std_logic_vector(3downto0);
begin
if(ml="1001"andmh="0101"andsh="0101")then
ifclk'eventandclk='1'then
if(count1<1)thencount1:=count1+1;sound13<='1';
elsesound13<='0';count1:="0000";
endif;
endif;
elsesound13<='0';count1:="0000";
endif;
endprocess;
分析:定义count1为变量来计clk脉冲的上升沿个数,sound13为LED的输入信号,mh、ml和sh分别是分钟的高位、分钟的低位和秒钟的高位,当时间的分钟与秒钟到达59:50时开始以每秒闪一次LED灯来表现整点报时,整点报时闪灯10s。
3.闹钟响铃进程:
先列出调闹钟进程的部分VHDL语言描述:
if(AlarmEn='0')then
if(hourl=hour2andhourh=hour1andml=min2andmh=min1)then
ifclk1'eventandclk1='1'then
if(count<1)thencount:=count+1;
sound1<='1';sound3<='1';sound5<='1';sound7<='1';sound9<='1';sound11 <='1;sound2<='0';sound4<='0';sound6<='0';sound8<='0';sound10<='0';sound1 2<='0';
else
sound1<='0';sound3<='0';sound5<='0';sound7<='0';sound9<='0';sound11 <='0';
sound2<='1';sound4<='1';sound6<='1';sound8<='1';sound10<='1';sound1 2<='1';
count:="0000";
endif;