当前位置:   article > 正文

FPGA设计基础01——计数器_fpga中一个计数器中有多个时钟沿如何只采到一个数

fpga中一个计数器中有多个时钟沿如何只采到一个数

FPGA设计基础01——计数器

1.计数器的功能就是计数。

2.计数器计的数是时钟脉冲的个数。

3.计数的最大值与位宽有关,位宽为n,则最大数为2的n次方。

4.常用于计算时间,如若FPGA的晶振为50M赫兹,那么他一个时钟的时间就是1/50_000_000=20ns,也就是说每来一个时钟就+20ns,通过多次计数可以得到想要的不同的时间。

5.我们平时写的普通计数器

		always @(posedge clk or negedge rst_n)begin
		    if(!rst_n)begin
		        cnt <= 0;
		    end
		    else if(加一条件)begin
		        if(结束条件)
		            cnt <= 0;
		        else
		            cnt <= cnt + 1;
		    end
		end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

6.这里介绍一种明德扬的计数器,只需要记住两个关键:加一条件、结束条件。

	always @(posedge clk or negedge rst_n)begin
		 if(rst_n==1'b0)begin
			cnt<= 0;
		 end
		 else if(add_cnt) begin
			 if(end_cnt)
			 cnt<= 0;
		 else
			 cnt<= cnt + 1;
		 end
	end
	
	assign add_cnt = 1 ;
	assign 结束条件 = add-cnt && cnt== 100-1 ;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

add_cnt为加一条件,上述将其致1,意味着一直计数,知道满足我的结束条件为止。

end_cnt为结束条件,上述为计数到第100个时钟(注意从0开始计数,所以要-1),即为100*20ns的时间

6.两个计数器同时使用

	always @(posedge clk or negedge rst_n)begin
		if(!rst_n)begin
		cnt0 <= 0;
		end
		else if(add_cnt0)begin
		if(end_cnt0)
		cnt0 <= 0;
		else
		cnt0 <= cnt0 + 1;
		end
	end
	
	assign add_cnt0 = 1;						//计数器0一直计数
	assign end_cnt0 = add_cnt0 && cnt0== 100-1 ;//计数到100个时钟时结束
	
	always @(posedge clk or negedge rst_n)begin 
		if(!rst_n)begin
		cnt1 <= 0;
		end
		else if(add_cnt1)begin
		if(end_cnt1)
		cnt1 <= 0;
		else
		cnt1 <= cnt1 + 1;
		end
	end
	
	assign add_cnt1 = end_cnt0;					//计数器0计数结束时,计数器1计数一次
	assign end_cnt1 = add_cnt1 && cnt1== 100-1 ;//计数器1计数到100时结束
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

由上面可知,两个计数器之间的关系为:计数器0计数完一整个周期后,计数器1加一。计数器0数完100个周期后,计数器1完成一个周期。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/724738
推荐阅读
相关标签
  

闽ICP备14008679号