verilog语言设计简易秒表数字系统

一、实验内容及方案设计

实验内容:

       本实验为综合设计性实验,设计实现秒表。要用到本门课的众多知识点,如多路选择器、译码器、分频器、计数器等。

基本设计要求

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

引脚:

三、实验结果测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值