FPGA入门系列:计数器

目录

微信公众号获取更多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位计数器:

计数器基本引脚:

  1. 时钟输入端:clk
  2. 复位端: rst
  3. 计数输出端: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相关源码,且微信公众号为首发,第一时间获取最新文章:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值