数字电路课程设计数字钟大学论文Word文档格式.docx
《数字电路课程设计数字钟大学论文Word文档格式.docx》由会员分享,可在线阅读,更多相关《数字电路课程设计数字钟大学论文Word文档格式.docx(21页珍藏版)》请在冰豆网上搜索。
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
切换改变时间功能的时、分、秒;
切换闹钟功能设置闹钟时间的时、分、秒;
秒表功能的开始与暂停
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]k,a,d;
regLED;
regclkf;
always@(negedgek1)//检测k1
begin
if(state==2'
b01)
begin
if(k==2'
d2)
k<
=2'
d0;
else
=k+1'
d1;
end
elseif(state==2'
b10)
if(a==2'
a<
=a+1'
b11)
begin
b<
=~b;
end
end
always@(negedgek4)//检测k4
if(d==1'
b1)
d<
=1'
b0;
=d+1'
b1;
always@(posedgeclkf)//定义状态
case({s1,s2})
2'
b00:
state=2'
b01:
b10:
d2;
b11:
d3;
default:
endcase
always@(posedgeclk)//提供1Hz信号
if(c==32'
d24999999)
begin
s<
=~s;
h<
=~h;
c<
end
else
=c+1'
always@(posedgeclk)//提供200Hz信号
if(e==32'
d125999)
clkf<
=~clkf;
else
e<
=e+1'
always@(posedgeclkf)//检验时间是否到设定的闹钟
if(cs2==cs0&
&
cm2==cm0&
ch2==ch0)
LED<
always@(posedgeclkf)
if(state==1'
b0)
clks<
=cs0;
clkm<
=cm0;
clkh<
=ch0;
elseif(state==2'
d1)
clks1<
=cs1;
clkm1<
=cm1;
clkh1<
=ch1;
=cs2;
=cm2;
=ch2;
d3)
=cs3;
=cm3;
=ch3;
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;
0]clks1,clkm1,clkh1;
wire[1:
0]cs0;
0]cm0;
0]ch0;
always@(posedges)
d0||state==2'
d2||state==2'