文档介绍:多功能数字钟的设计与实现
实验任务与要求
用FPGA器件和EDA技术实现多功能数字钟的设计
:
已知条件Quartus II软件、FPGA实验开发装置
:
、分、秒的时间;
;
、校分。
:
;
:
(几点响几声)
电路及其程序的设计
:
变量的说明:
clk_50M_in:系统时钟
ncR:清零键
EN:使能键
Adj_Min,Adj_Hour:调整时钟分、时键
Min_H,Min_L,Hour_L,Hour_H:分钟小时数值显示数码管
sec_LED:秒显示输出位
hand_cp:通过按键手动产生的脉冲信号
hand:手动调节模式的选择,hand=1,手动,hand=0,内部时钟控制
set_time:设置时间控制位
show_set_time:显示设置时间位
show:正常显示控制位
change:显示方式转换,change=1:显示12进制时钟,change=0:显示24进制
am :12进制转换中上下午标志,am=1,上午,am=0,下午
dian_1,dian_2,dian_3:定点报时显示位
any_1,any_2,any_3 :任意点,任意分的报时显示位
sev_lcd1,sev_lcd2:12进制的报时点显示设置位
rever:顺逆调选择,rever=1,递减调节(计数),rever=1,递增调节(计数)
核心代码:
1HZ分频
initial
begin
clk_1Hz <= 1'b0;
count <= 32'd0;
end
always@(posedge clk_50M_in)
begin
if(count==32'd12500000)
begin
count<=32'd0;
clk_1Hz <=~clk_1Hz;
end
else count<=count+1'b1;
end
后台计数控制:
assign CP = hand? hand_cp:clk_1Hz; //在手动(hand)模式与自动模式之间选择
assign CP_set = set_time? hand_cp:Vcc;
counter10 U1(Second[3:0],nCR,EN&&(hand == 1'b0),CP,Vcc); //EN&&(hand == 1'b0)修改时钟变化的控制权
counter6 U2(Second[7:4],nCR,(Second[3:0]==4'h9)&&(hand == 1'b0),CP,Vcc);
assign MinL_EN =Adj_Min ? Vdd && ~set_time:(Second==8'h59);
assign MinH_EN = (Adj_Min&&(Minute[3:0]==4'h9) && ~set_time)||(Minute[3:0]==4'h9)&&(Second==8'h59);
counter10 U3(Minute[3:0],nCR,MinL_EN ,CP,Rever && hand);
counter6 U4(Minute[7:4],nCR,MinH_EN ,CP, Rever && hand);
assign Hour_EN = Adj_Hour? Vdd&& ~set_time:((Minute==8'h59)&&(Second==8'h59));
counter24 U5(Hour[7:4],Hour[3:0],nCR,Hour_EN,CP,Rever && hand); //Rever实现正逆序计数选择
setClock S2(Hour_dian,Min_dian,Adj_Hour,Adj_Min,CP_set,set_time,nCR,Rever);
24与12进制显示的转换:
always@( change or Hour) //24进制与12进制的时钟转换
begin
if(Hour == 8'h00)
begin
Hour_12 <= 8'h12;
am <= 1'b1; //am =1表示上午,am =0 表示下午
end
else if(Hour <= 8'h11