Verilog——秒计数器

2021年6月27日 7点热度 0条评论 来源: 桐桐花

秒计数器(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信号。通过片选,快速扫描,实现共享笔画。

    原文作者:桐桐花
    原文地址: https://blog.csdn.net/weixin_41788560/article/details/118191278
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。