【基础入门】(八)计数器、定时器

掌握两点:控制好什么时候开始计数和什么时候清零的问题

一:系统只有时钟和复位信号,只要复位信号一撤销,时钟沿来到就可以立刻进行计数。

二:计满自动清零,计数到多少后进行清零呢?假设时钟信号的频率为50MHz,也就是时钟周期为20ns,那么计时1s中,需要多少个时钟周期呢?1s/20ns =50_000_000个。因为是从0开始计数,所以计数到49_999_999之后清零。利用计算器(程序员模式)可知,计算器的位数要设为26位。就是49_999_999转换成二进制表示。

不带标志信号的计数器

module	cnt
#(
	parameter CNT_MAX = 24999_999
)
(
	input	wire	sclk	,
	input	wire	rst_n	,
	
	output	reg		led_out	
);

reg	[24:0]	cnt;

//cnt:计数器计数到最大值时清零
always@(posedge sclk or negedge rst_n)
	if(rst_n == 1'b0)
		cnt <= 25'd0;
	else if(cnt == CNT_MAX)
		cnt <= 25'd0;
	else
		cnt <= cnt + 1'b1;
//当计数到最大值时,取反
always@(posedge sclk or negedge rst_n)
	if(rst_n == 1'b0)
		led_out <= 1'b0;
	else if(cnt == CNT_MAX)
		led_out <= ~led_out;
endmodule
`timescale 1ns/1ns

module	tb_cnt();

reg sclk, rst_n;
wire	led_out;

initial begin
	sclk <= 1'b0;
	rst_n <= 1'b0;
	#20
	rst_n <= 1'b1;
end

always #10 sclk <= ~sclk;


cnt
#(
	.CNT_MAX	(25'd24)
)
cnt_inst
(
	.sclk		(sclk),
	.rst_n		(rst_n),

	.led_out	(led_out)	
);


endmodule

带标志信号的计数器

脉冲标志信号(flag),这种信号会在后面用到很多,它可以减少代码中if括号内的条件让代码更加清晰简洁,而且当需要在多处使用脉冲标志信号的地方要比全部写出的方式更节约逻辑资源,脉冲标志信号在指示某些状态时是非常有用的,当大家以后在实现相对复杂的逻辑功能时注意想到使用脉冲标志信号,后面我们还会介绍到另一个有用的信后——使能信号。

小细节:led_out信号拉高的条件时以cnt_flag为条件变化的,要使得cnt_flag在计数器计数到N-1时就拉高。

module	cnt1
#(
	parameter	CNT_MAX = 24999_999
)
(
	input	wire	sclk	,
	input	wire	rst_n	,
	
	output	reg		led_out
);

reg	[24:0]	cnt;
reg	cnt_flag;
//计数器
always@(posedge sclk or negedge rst_n)
	if(rst_n == 1'b0)
		cnt <= 25'd0;
	else if(cnt == CNT_MAX)
		cnt <= 25'd0;
	else 
		cnt <= cnt + 1'b1;
//当计数到N-1时,cnt_flag拉高
always@(posedge sclk or negedge rst_n)		
	if(rst_n == 1'b0)
		cnt_flag <= 1'b0;
	else if(cnt == CNT_MAX-1)
		cnt_flag <= 1'b1;
	else
		cnt_flag <= 1'b0;
//当cnt_flag拉高时,led_out取反
always@(posedge sclk or negedge rst_n)
	if(rst_n == 1'b0)
		led_out <= 1'b0;
	else if(cnt_flag == 1'b1)
		led_out <= ~led_out;

endmodule

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
自1.6版以后,增加了表达式计算的功能,从此可以进行复杂的公式计算,如输入以下公式“2+(18-10)/7^2+sin(1)+sqrt(sqrt(5),3)*2”,按下计算按钮或回车会自动得出最终结果。另外增加了一个“单步求解”的选项,可以一步一步显示出公式的计算过程。支持各种三角函数,运算的结果可选择弧度或角度值,这取决于计算器的角度|弧度按钮选择。打开表达式计算的功能步骤是:鼠标右键单击液晶屏幕,在弹出的菜单中选择“* 表达式(公式)计算 *”一项,即可打开该功能。(注:表达式功能不能在小窗口状态下使用),另外,v1.6版还改进了许多以前版本中不方便或有BUG的地方,使用更加方便!增加了十几种三角函数运算(包括各种双曲正弦、余弦、正割、余割等等以及相关反函数),加入了角度与弧度计算,加入了位移指令,增加了各种常用常数表,使用户在计算一些常用公式时,不必再去翻书查找。加入了各种单位换算,单位换算与屏幕计算结果实时换算,并可实时改变换算单位。并修改了数据转换为"人民币中文大写形式、人民币数字形式(例如:1435.75、人民币壹仟肆佰叁拾伍圆柒角伍分、¥1435.75)的一些BUG,大大方便了财务、票据等方面的工作,输入的任何数据和计算结果可自动输入在其它程序窗口当前光标位置,就像和其它程序融为一体一样。如果用户经常在应用软件中做计算输入工作(例如各种文字处理、制表、工程计算、股票等等一切需要输入计算数据和结果的地方。),那么这个功能将使工作变得非常方便!(如果不需要这项功能,鼠标右键单击液晶屏幕,在弹出的菜单中取消“数据自动输入其它窗口”一项即可!)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吾日叁問

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

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值