一、实验内容及方案设计
实验内容:
本实验为综合设计性实验,设计实现秒表。要用到本门课的众多知识点,如多路选择器、译码器、分频器、计数器等。
基本设计要求
1:能实现0到59秒的自动周而复始计时
2:通过键盘能暂停计时
3:通过键盘能倒计时59到0
4: 通过键盘能复位计时从0开始
5:计时结果通过两位七段码显示
可选拓展设计
1:实现小时、分钟、秒的全部显示
2:能设置初始时间
3:整点报时
4:自行设计其他功能,如闪烁显示等
方案设计:
1:根据需求,确定输入输出的数量,整体把握系统外在接口(结合实验板的硬件资源)
2:根据需求,确定内部功能模块
3:根据模块划分,实现内部各个功能模块
框图表示:
二、实验代码
module exp5 (rest_n,clkin,dig_sel_n,seg_out,dao,pause);
input clkin,rest_n,dao,pause;
output reg [7:0] dig_sel_n,seg_out;
parameter N = 200_000;
reg clk1S,clk10ms;
reg [1:0] cnt2;
reg [17:0] value10ms;
reg [7:0] value1s;
reg [7:0] cnt60;
function [7:0] seg7;
input [3:0] data;
begin
case(data)
0: seg7= 8'b11000000;
1: seg7= 8'b11111001;
2: seg7= 8'b10100100;
3: seg7= 8'b10110000;
4: seg7= 8'b10011001;
5: seg7= 8'b10010010;
6: seg7= 8'b10000010;
7: seg7= 8'b11111000;
8: seg7= 8'b10000000;
9: seg7= 8'b10010000;
default: seg7= 8'b11111111;
endcase
end
endfunction
always @(posedge clkin or negedge rest_n)
begin
if(!rest_n)
clk10ms<=0;
else
begin
if(value10ms==N-1)
value10ms<=0;
else
value10ms<=value10ms+1;
if (value10ms<N/2)
clk10ms<=1'b0;
else
clk10ms<=1'b1;
end
end
always @(posedge clk10ms or negedge rest_n)
begin
if(!rest_n)
clk1S<=0;
else
begin
if(value1s==99)
value1s<=0;
else
value1s<=value1s+1;
if (value1s<50)
clk1S<=1'b0;
else
clk1S<=1'b1;
end
end
always @(cnt2 ,cnt60 ,rest_n)
begin
if(!rest_n)
begin dig_sel_n <= 8'b11111111; seg_out <=8'b11111111; end
else
case(cnt2)
0: begin dig_sel_n <= 8'b11111110; seg_out <= seg7(cnt60%10); end
1: begin dig_sel_n <= 8'b11111101; seg_out <= seg7(cnt60/10);end
default:
begin dig_sel_n <= 8'b11111111; seg_out <= 8'b11111111;end
endcase
end
always @(negedge clk10ms or negedge rest_n)
begin
if(!rest_n)
cnt2 <= 2'b00;
else
begin
if (cnt2==2'b01)
cnt2<=2'b00;
else
cnt2<=cnt2+1;
end
end
always @(posedge clk1S or negedge rest_n )
begin
if(!rest_n)
cnt60 <= 0;
else
begin
if (dao==1'b0)
begin
if(pause==1'b1)
if (cnt60==59)
cnt60<=0;
else
cnt60<=cnt60+1;
end
else
begin
if(pause==1'b1)
if (cnt60==0)
cnt60<=59;
else
cnt60<=cnt60-1;
end
end
end
endmodule
引脚:
三、实验结果测试