Verilog数字钟

本文介绍了使用Verilog语言设计一个数字钟的过程,包括时、分计时功能以及通过按键进行时间调整。通过FPGA开发板验证,实现正常计时、时调整和分调整三个模式。代码中利用状态机处理不同模式下的时间更新,并进行了十进制到二进制BCD码的转换,以驱动数码管显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用Verilog语言进行的数字钟的编写,FPGA开发板亲测正常

大学生一个,第一次自己做的东西,写出来分享在这里插入代码片一下,有不对的地方请大家批评指正。

这次的做的题是:设计一个数字钟,该数字钟能进行正常的时,分计时功能,且能对数字钟的时间进行调整。
该数字钟有3个按键,按键1为功能键,用于数字钟在“正常计时”,“时调整”,“分调整”这三个功能之间切换;按键2,3用于调整时间,仅当数字钟处于“时调整”或“分调整”时有效,分别对应加一和减一操作。

符号表示说明:时钟clk,模式切换键mode,加一键inc,减一键inc1,清零键clr,seg为译码器,hour为小时,min为分,sec为秒(十进制),hh为二进制中小时高位,hl为小时低位,mh为分高位,ml为分低位。inc_reg为inc的信号计数,inc1为inc的信号计数,state为状态表示。

源代码如下:
module clocka(seg0,clk,clr,mode,inc,inc1,seg1,seg2,seg3);
output[6:0] seg0,seg1,seg2,seg3;
input clk,mode,inc,clr,inc1;
reg[6:0]seg0,seg1,seg2,seg3;
reg[1:0]state;
reg[3:0]hh,hl,mh,ml,sh,sl;
reg clk1hz;
reg inc_reg;
reg inc1_reg;
reg[7:0]sec,min;
reg[7:0]hour;
parameter state0=2’b00,state1=2’b01,state2=2’b10;
reg[15:0]count1;
//1hz分频//
always@(posedge clk)
begin
if(count1=='d50000)
begin clk1hz<=~clk1hz;count1<=0;end
else
begin count1<=count1+1;end
end

//变换模式//
always@(posedge mode)
begin
if(clr)
begin state<=state0;end
else
begin state<=state+1;end
end
//状态控制//
always@(posedge clk1hz)
begin
if(clr)
begin hour<=0;min<=0;sec<=0;end
else begin
case(state)
state0:begin //正常计数
if(sec8’d59)
begin sec<='d0;
if(min
8’d59)
begin min<='d0;
if(hour8’d23)
begin hour<='d0;end
else begin hour=hour+1;end
end
else begin min<=min+1;end
end
else begin sec<=sec+1;end
end
state1:begin //设定小时时间
if(inc)
begin
if(!inc_reg)
begin inc_reg<=1;
if(hour
8’d23)
begin hour<=8’d0;end
else begin hour<=hour+1;end
end
end
else begin inc_reg<=0;end
if(inc1)
begin
if(!inc1_reg)
begin inc1_reg<=1;
if(hour8’d0)
begin hour<=8’d23;end
else begin hour<=hour-1;end
end
end
else begin inc1_reg<=0;end

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值