目录
微信公众号获取更多FPGA相关源码,且微信公众号为首发,第一时间获取最新文章:
 
 计数器是一种典型的时序器件,常用于对时钟脉冲的个数进行计数,还用于定时、分频、产生同步脉冲等
 按触发方式分:同步计数器和异步计数器
在使用硬件描述语言设计计数器时,不需要专门设计触发器,而是直接对寄存器变量进行操作
module mod5cnt(input rst, input clk, output reg [2:0]q);
always@(posedge clk, posedge rst)
begin	
    if(rst==1)		
	      q<=0;	
    else if(q==4)
          q<=0;	
    else	
	      q<=q + 1;
end
endmodule	
N位计数器:
计数器基本引脚:
- 时钟输入端:clk
- 复位端: rst
- 计数输出端:cnt
module cnt_en (rst,clk,cnt)
#(parameter	N = 8);
input	rst,clk;
output	[N -1:0]	cnt;
reg	[N -1:0]	cnt;
always@(posedge clk , posedge rst)
begin	
    if(rst==1’b1)		
	cnt<=8’b00000000;	
    else		
	cnt<=cnt + 1;
end
endmodule	
实现16位的计数器:(例化cnt_cn模块)
cnt_en #(.N(16)) cnt16(.rst(clr),.clk(clk),.cnt(q));
例:10进制计数器
module counter(clk, clr, out, cout);
input clk, clr;
output[4:1] out;
output cout;
reg[4:1] out;
always @(posedge clk or negedge clr)
  begin
    if(!clr) out = 0;     
    else out = (out == 4‘h9) ?  0 :  (out + 1);   
  end
assign cout = (out == 4'h9) ?  1 :  0;   
endmodule 
例:60进制计数器设计
60进制计数器的显示需要两个数码管。其中一个数码管显示计数低位0-9,另一个数码管显示计数高位0-5。为了与两个数码管相连,可以设计两个4位寄存器变量:一个寄存器变量为0-9的变化;另一个寄存器变量为0-5的变化。
always @(posedge clk or negedge clr)
begin
if(!clr) {temp_a,temp_b} = 0
else
 	if(ld == 1) {temp_a,temp_b} = {data_a, data_b}; 
	else  begin
		if({temp_a,temp_b} = = 8'h59)  {temp_a,temp_b} = 0
		else if(temp_b = = 9)
			begin
			    temp_b = 0;
                                        temp_a = temp_a + 1;
			end
		else temp_b = temp_b + 1; 
	end
end

计数器可以去看之前的文章,封好为IP核可以直接使用:FPGA搭积木之计数器
 链接:https://mp.weixin.qq.com/s/YGLIwpxsCxuMrUC-zXGYoQ
微信公众号获取更多FPGA相关源码,且微信公众号为首发,第一时间获取最新文章:
 



















