Verilog——秒计数器

秒计数器(s_counter,0-9)

假设clk是24MHz系统·时钟,秒分频产生秒脉冲s_pluse;

秒计数模块对秒脉冲计数,计数范围0-9,秒计数结果s_sum(位宽4)。

系统时钟:24MHz

基于系统时钟的计数:cont_t(计数范围0-24000000-1),每循环一圈就是1秒。

秒脉冲:触发器,每看到0就置为1,不是0就置为0,就可以得到一秒一个脉尖冲,称为秒脉冲

秒计数:对秒脉冲进行计数,看到一个秒脉尖冲加一。(9加1变成0)

`timescale  1ns/10ps//testbench时间单位
module s_counter(
						clk,//时钟
						res,//复位
						s_num//秒计数,输出
						);
input					clk;
input					res;
output[3:0]		        s_num;

parameter			    frequency_clk=24;//24MHz;方便修改其他数值,比如16Mhz;


reg[24:0]			    con_t;//秒脉冲分频计数器;
//24MHz频率24000000,二进制25位
reg						s_pulse;//秒脉冲尖;
reg[3:0]		        s_num;

always@(posedge clk or negedge res)
//触发器复位
if(~res)begin
	con_t<=0;s_pulse<=0;s_num<=0;
end
//正常工作
else begin
	//秒脉冲分频计数器,基于系统时钟计数
	if(con_t==frequency_clk*1000000-1)begin
		con_t<=0;
	end
	else begin
		con_t<=con_t+1;
	end
	//秒脉冲,con_t为0,置1,非0,置0。
	if(con_t==0)begin
		s_pulse<=1;
	end
	else begin
		s_pulse<=0;
	end
	//秒计数器,对秒脉冲进行计数,看到一个秒脉冲加一。计数范围0-9。
	if(s_pulse)begin
			if(s_num==9)begin
				s_num<=0;
			end
			else begin
				s_num<=s_num+1;
	end
	
end

endmodule

测试代码testbench

//------testbench of s_counter-----
module s_counter_tb;
reg					clk,res;
wire[3:0]			s_num;
s_counter s_counter(
					.clk(clk),
					.res(res),
					.s_num(s_num)
					);
initial begin
						clk<=0;res<=0;//复位
			#17		res<=1;//17ns后复位结束
			#300000 $stop;//300000ns系统任务结束
end

always #5 clk<=~clk;

endmodule

数码管0-9秒循环显示

Verilog代码

//顶层module:top
module top(clk,res,a_g);
input            clk;
input            res;
output[6:0]      a_g;
wire[3:0]        s_num ;//顶层内部信号,如果只是为了连接,则定义成wire型即可

//s_counter   seg_dec是module名
//U1  U2例化名 
s_counter U1(

            .clk(clk),
            .res(res),
            .s_num(s_num)
            );

seg_dec U2(

//括号里的是顶层信号名,如果不是端口,需要定义成wire型完成连接
            .s_num(s_num),
            .a_g(a_g)
            );

endmodule      

数码管0-59秒循环显示

每个数码管7个笔画

笔画比较多,采用共用办法,各个数码管公用同一组a-g信号。通过片选,快速扫描,实现共享笔画。

评论 2 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:游动-白 设计师:我叫白小胖 返回首页

打赏作者

桐桐花

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值