数字电路课程设计数字钟大学论文.docx
《数字电路课程设计数字钟大学论文.docx》由会员分享,可在线阅读,更多相关《数字电路课程设计数字钟大学论文.docx(21页珍藏版)》请在冰豆网上搜索。
数字电路课程设计数字钟大学论文
大连理工大学本科实验报告
题目:
数字钟
课程名称:
数字电路课程设计
学院(系):
电子信息与电气工程学部
专业:
电气工程及其自动化
班级:
学生姓名:
学号:
完成日期:
成绩:
2017年1月7日
题目:
数字钟
1设计要求
1、设计一个数字钟,能够显示当前时间,分别用6个数码管显示小时、分钟、秒钟的时间,秒针的计数频率为1Hz,可由系统脉冲分频得到。
2、在整点进行提示,可通过LED闪烁实现,闪烁频率及花型可自己设计。
3、能够调整小时和分钟的时间,调整的形式为通过按键进行累加。
4、具有闹钟功能,闹钟时间可以任意设定(设定的形式同样为通过按键累加),并且在设定的时间能够进行提示,提示同样可以由LED闪烁实现。
2设计分析及系统方案设计
2.1系统状态转换
因为数字钟成正常显示时间、闹钟、校时、秒表四个状态,所以可以选用两个开关来对其状态进行控制,当开关分别为00,01,10,11四种状态时,对应显示时间、修改时间、闹钟、秒表四种状态。
2.2时钟信号的建立
该多功能数字钟系统需要两个时钟信号,分别为1Hz的信号为数字钟提供秒信号以及200Hz的检查信号。
本设计选用50MHz信号,分别将其通过模25000000计数器和模125000计数器从而得到1Hz及200Hz信号。
2.3功能分析及其设计
2.3.1时间显示功能
当两个开关都处于低电平状态时,正常显示。
2.3.2修改时间
当sw1处于低电平状态,sw0处于高电平状态,进入当前时间修改功能。
通过按键key0分别选择修改时、分或秒,通过按键key1对选择修改的时间进行+1操作。
2.3.3闹钟
当sw1出于高电平状态,sw0出于低电平状态,进入闹铃功能。
通过按键key0分别选择改变时、分或秒,通过按键key2对选择改变的时间进行+1操作,当数字钟到当前时间,LEDG0发光。
2.3.4秒表
当sw1及sw0都处于高电平状态,进入秒表功能。
通过按键key0进行秒表计时的开始及暂停,通过按键key3对秒表进行清零。
3系统以及模块硬件电路设计
3.1硬件原理图
图3.1系统示意图
图3.2按键电路
图3.3状态选择按键
图3.4闹钟使用的led
3.2管脚定义
程序代码
引脚
功能作用
clk
PIN_N2
提供50MHz的时钟信号
s1
PIN_N25
选择功能状态
s2
PIN_G26
选择功能状态
k1
PIN_G26
切换改变时间功能的时、分、秒;切换闹钟功能设置闹钟时间的时、分、秒;秒表功能的开始与暂停
k2
PIN_N23
改变时间功能的+1
k3
PIN_P23
闹钟功能设置闹钟时间的+1
k4
PIN_W26
秒表功能的清零
LED
PIN_AE22
闹钟时间到来时指示
dclkh1[0]
PIN_N9
连接HEX7,
显示时高位
dclkh1[1]
PIN_P9
dclkh1[2]
PIN_L7
dclkh1[3]
PIN_L6
dclkh1[4]
PIN_L9
dclkh1[5]
PIN_L2
dclkh1[6]
PIN_L3
dclkh2[0]
PIN_M4
连接HEX6,
显示时低位
dclkh2[1]
PIN_M5
dclkh2[2]
PIN_M3
dclkh2[3]
PIN_M2
dclkh2[4]
PIN_P3
dclkh2[5]
PIN_P4
dclkh2[6]
PIN_R2
dclkm1[0]
PIN_R3
连接HEX5,
显示分高位
dclkm1[1]
PIN_R4
dclkm1[2]
PIN_R5
dclkm1[3]
PIN_T9
dclkm1[4]
PIN_P7
dclkm1[5]
PIN_P6
dclkm1[6]
PIN_T2
dclkm2[0]
PIN_T3
连接HEX4,
显示分低位
dclkm2[1]
PIN_R6
dclkm2[2]
PIN_R7
dclkm2[3]
PIN_T4
dclkm2[4]
PIN_U2
dclkm2[5]
PIN_U1
dclkm2[6]
PIN_U9
dclks1[0]
PIN_W24
连接HEX3,
显示秒高位
dclks1[1]
PIN_U22
dclks1[2]
PIN_Y25
dclks1[3]
PIN_Y26
dclks1[4]
PIN_AA26
dclks1[5]
PIN_AA25
dclks1[6]
PIN_Y23
dclks2[0]
PIN_Y24
连接HEX2,
显示秒低位
dclks2[1]
PIN_AB25
dclks2[2]
PIN_AB26
dclks2[3]
PIN_AC26
dclks2[4]
PIN_AC25
dclks2[5]
PIN_V22
dclks2[6]
PIN_AB23
4系统的Verilog设计
//顶层模块
moduleclock(clk,dclks1,dclks2,dclkm1,dclkm2,dclkh1,dclkh2,s,h,state,s1,s2,k1,k2,k3,k4,LED);
inputclk;//声明输入端口,连接50M晶振
inputs1,s2;//声明输入端口,控制功能转换
inputk1,k2,k3,k4;//声明输入端口,连接按键,对功能内部进行设置
outputLED;//声明输出端口,连接LED,闹钟指示
outputs,h;//声明输出端口,为各功能提供秒信号
outputstate;//声明输出端口,表示当前状态
output[6:
0]dclks1,dclks2,dclkm1,dclkm2,dclkh1,dclkh2;
//声明输出端口,连接数码管,
reg[31:
0]c,e;
regs,h;
regb;
reg[1:
0]state;
wire[7:
0]cs0,cm0,ch0,cs1,cm1,ch1,cs2,cm2,ch2,cs3,cm3,ch3;//分别连接四个状态的时分秒
reg[7:
0]clks,clkm,clkh,clks1,clkm1,clkh1;
wire[6:
0]dclks1,dclks2,dclkm1,dclkm2,dclkh1,dclkh2;
reg[1:
0]k,a,d;
regLED;
regclkf;
always@(negedgek1)//检测k1
begin
if(state==2'b01)
begin
if(k==2'd2)
k<=2'd0;
else
k<=k+1'd1;
end
elseif(state==2'b10)
begin
if(a==2'd2)
a<=2'd0;
else
a<=a+1'd1;
end
elseif(state==2'b11)
begin
b<=~b;
end
end
always@(negedgek4)//检测k4
begin
if(state==2'b11)
begin
if(d==1'b1)
d<=1'b0;
else
d<=d+1'b1;
end
end
always@(posedgeclkf)//定义状态
begin
case({s1,s2})
2'b00:
state=2'd0;
2'b01:
state=2'd1;
2'b10:
state=2'd2;
2'b11:
state=2'd3;
default:
state=2'd0;
endcase
end
always@(posedgeclk)//提供1Hz信号
begin
if(c==32'd24999999)
begin
s<=~s;
h<=~h;
c<=1'd0;
end
else
c<=c+1'd1;
end
always@(posedgeclk)//提供200Hz信号
begin
if(e==32'd125999)
clkf<=~clkf;
else
e<=e+1'b1;
end
always@(posedgeclkf)//检验时间是否到设定的闹钟
begin
if(cs2==cs0&&cm2==cm0&&ch2==ch0)
LED<=1'b1;
else
LED<=1'b0;
end
always@(posedgeclkf)
begin
if(state==1'b0)
begin
clks<=cs0;
clkm<=cm0;
clkh<=ch0;
end
elseif(state==2'd1)
begin
clks1<=cs1;
clkm1<=cm1;
clkh1<=ch1;
clks<=cs0;
clkm<=cm0;
clkh<=ch0;
end
elseif(state==2'd2)
begin
clks<=cs2;
clkm<=cm2;
clkh<=ch2;
end
elseif(state==2'd3)
begin
clks<=cs3;
clkm<=cm3;
clkh<=ch3;
end
end
de2timeu0(.cs0(cs0),.cm0(cm0),.ch0(ch0),.s(s),.state(state),.clkf(clkf),.clks1(clks1),.clkm1(clkm1),.clkh1(clkh1));
de2timechangeu1(.cs1(cs1),.cm1(cm1),.ch1(ch1),.state(state),.k2(k2),.k(k));
de2alarmu2(.cs2(cs2),.cm2(cm2),.ch2(ch2),.a(a),.k3(k3),.state(state));
de2timeru3(.cs3(cs3),.cm3(cm3),.ch3(ch3),.b(b),.h(h),.clkf(clkf),.d(d));
bdtransformu4(.clks(clks),.clkm(clkm),.clkh(clkh),.dclks1(dclks1),.dclks2(dclks2),.dclkm1(dclkm1),.dclkm2(dclkm2),.dclkh1(dclkh1),.dclkh2(dclkh2),.clkf(clkf));
endmodule
//正常时间显示模块
modulede2time(clks1,clkm1,clkh1,s,state,cs0,cm0,ch0,clkf);
inputs;
inputclkf;
inputclks1,clkm1,clkh1;
outputcs0,cm0,ch0;
inputstate;
wires;
wireclkf;
wire[7:
0]clks1,clkm1,clkh1;
wire[1:
0]state;
reg[7:
0]cs0;
reg[7:
0]cm0;
reg[7:
0]ch0;
always@(posedges)
begin
if(state==2'd0||state==2'd2||state==2'd3)