FPGA———任意时间的定时器

FPGA最基础的代码就是利用时钟构建任意时间的定时器啦!

非常简单的呢!!

定时器本质上就是一个计数器,因此首先要根据系统时钟的频率,以及自己需要的定时时间,先确定计数器的计数个数n

此外我们要非常熟悉时钟的单位:

频率单位为Hz---KHz----MHz---GHz     ,从左向右以10^3增大
周期单位为 s------ms------us-----ns--- ps   ,从左向右以10^3减小


假如时钟信号每输出n个周期,输出信号time_en由低电平向高电平翻转一次,则会得到n个系统时钟clk组成的计时器,可以代入以下公式计算得到n
 总时间=单位时间*时间个数

若频率f=25Mhz  则周期T=1/25Mhz=40ns
若定时1ms,总时间1ms=10^6ns       10^6=单位时间40ns*n        n=25000次
因此需要计数25000次

由于计数从0开始,所以我们计数的个数是n-1,也就是24999次

我们定义一个满足n个数要求的二进制计数器cnt即可


下面上代码!!

module timer(
input clk_25m,
input reset,
output reg time_en
    );

reg [15:0]time_cnt;
    
    always @(posedge clk_25m)begin
    	if(reset)begin
    		time_en<=0;
    		time_cnt<=0;
    	end
    	else if(time_cnt==24999)begin
    		time_en<=1;
    		time_cnt<=0;
    	end
    	else begin
    		time_en<=0;
    		time_cnt<=time_cnt+1;
    	end
    end
    
    
endmodule

进行仿真!

module TB_timer(

    );

reg clk_25m=0;
reg reset=0;
wire time_en;

timer inst_timer(
.clk_25m  (clk_25m),
.reset    (reset) ,
.time_en  (time_en)
    );   
    
initial begin
	clk_25m=0;
	reset=1;
	#100;
	reset=0;
end

always #20 clk_25m=~clk_25m;
    
endmodule

看一下仿真结果!

可以看到两个time_en直接确实有1ms的定时,这样,我们就完成了一个任意时间的定时器(计数器)

  • 10
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值