数字秒表verilog HDL仿真 20
实验七多功能数字钟一实验任务及要求1.能进行正常的时、分、秒计时功能,分别由6个数码管显示24小时、60分钟、60秒钟的计数器显示。2.能利用实验系统上的按键实现“校时”...
实验七 多功能数字钟
一 实验任务及要求
1. 能进行正常的时、分、秒计时功能,分别由6个数码管显示24小时、60分钟、60秒钟的计数器显示。
2. 能利用实验系统上的按键实现“校时”“校分”功能:
(1) 按下“SA”键时,计时器迅速递增,并按24小时循环,计满23小时后在回00;
(2) 按下“SB”键时,计分器迅速递增,并按59分钟循环,计满59分钟后在回00;但不向“时”进位;
(3) 按下“SC”键时,秒清零;
(4) 要求按下“SA”、“SB”或“SC”均不产生数字跳变(“SA”、“SB”、“SC”按键是有抖动的,必须对其消抖动处理)。
3. 能利用扬声器做整点报时:
(1) 当计时到达59’50’’时开始报时,在59’50’’、52’’、54’’、56’’、58’’鸣叫,鸣叫声频可为500Hz;
(2) 到达59’60’’时为最后一声整点报时,整点报时是频率可定为1KHz。
4. 用层次化设计方法设计该电路,用VHDL语言编写各个功能模块。
5. 报时功能、闹时功能用功能仿真的方法验证,可通过观察有关波形确认电路设计是否正确。
6. 完成电路设计后,用实验系统下载验证。 展开
一 实验任务及要求
1. 能进行正常的时、分、秒计时功能,分别由6个数码管显示24小时、60分钟、60秒钟的计数器显示。
2. 能利用实验系统上的按键实现“校时”“校分”功能:
(1) 按下“SA”键时,计时器迅速递增,并按24小时循环,计满23小时后在回00;
(2) 按下“SB”键时,计分器迅速递增,并按59分钟循环,计满59分钟后在回00;但不向“时”进位;
(3) 按下“SC”键时,秒清零;
(4) 要求按下“SA”、“SB”或“SC”均不产生数字跳变(“SA”、“SB”、“SC”按键是有抖动的,必须对其消抖动处理)。
3. 能利用扬声器做整点报时:
(1) 当计时到达59’50’’时开始报时,在59’50’’、52’’、54’’、56’’、58’’鸣叫,鸣叫声频可为500Hz;
(2) 到达59’60’’时为最后一声整点报时,整点报时是频率可定为1KHz。
4. 用层次化设计方法设计该电路,用VHDL语言编写各个功能模块。
5. 报时功能、闹时功能用功能仿真的方法验证,可通过观察有关波形确认电路设计是否正确。
6. 完成电路设计后,用实验系统下载验证。 展开
2个回答
展开全部
`timescale 1s/0.1s
module clock(reset);
input reset;
output [5:0] hour,min,sec;
reg[5:0] hour,min,sec;
initial begin
clk=1'b0;
forever #0.5 clk=~clk;
end
always@(posedge clk or reset)
if(reset)
begin
hour<=6'b0000_0;
min<=6'b0000_0;
sec<=6'b0000_0;
end
elseif(sec!=6'b111011)
begin
sec<=sec+6'b0000_1;
end
elseif(sec==6'b111011)
begin
if( min!=6'b111011)
begin
sec<=6'b0000_0;
min<=min+6'b0000_1;
end
elseif(min==6'b111011)
begin
if(hour!=6'b011000)
begin
hour<=hour+6'b0000_1;
sec<=6'b0000_0;
min<=6'b0000_0;
end
elseif(hour==6'b011000)
begin
hour<=6'b0000_0;
sec<=6'b0000_0;
min<=6'b0000_0;
end
end
always@(hour)
repeat(hour) #1 beats ;
task beats;
//define beats event;
endtask
endmodule
beats事件为响铃操作任务。
参考下这个 只实现了表的功能, 希望对你有帮助
module clock(reset);
input reset;
output [5:0] hour,min,sec;
reg[5:0] hour,min,sec;
initial begin
clk=1'b0;
forever #0.5 clk=~clk;
end
always@(posedge clk or reset)
if(reset)
begin
hour<=6'b0000_0;
min<=6'b0000_0;
sec<=6'b0000_0;
end
elseif(sec!=6'b111011)
begin
sec<=sec+6'b0000_1;
end
elseif(sec==6'b111011)
begin
if( min!=6'b111011)
begin
sec<=6'b0000_0;
min<=min+6'b0000_1;
end
elseif(min==6'b111011)
begin
if(hour!=6'b011000)
begin
hour<=hour+6'b0000_1;
sec<=6'b0000_0;
min<=6'b0000_0;
end
elseif(hour==6'b011000)
begin
hour<=6'b0000_0;
sec<=6'b0000_0;
min<=6'b0000_0;
end
end
always@(hour)
repeat(hour) #1 beats ;
task beats;
//define beats event;
endtask
endmodule
beats事件为响铃操作任务。
参考下这个 只实现了表的功能, 希望对你有帮助
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |