FPGA中高时钟频率计数器设计

FPGA中高时钟频率计数器设计

题目描述:在一个高速项目中,我的时钟当时达到了400MHz,在此极高时钟速率下,计时/计数counter-计数器逻辑在综合布局布线时也出现了时序问题,即使是换了加法操作为IP核资源也没有解决问题。那么,程序应该怎样设计才能解决?


设想

既然时钟问题导致的时序不收敛,那么首先应该考虑能否降低频率,但是又不能改变原始的计数结果。故可以利用流水线的设计思想,用2路cnt计数器来实现计时功能。

解决方案:

具体设计代码如下:

module cnt_ctrl (
    input clk,
    input rst_n,
    output [7:0] cnt
);

reg clk_2div,clk_2divd;
reg [7:0] cnt1,cnt2;


always @(posedge clk,negedge rst_n)
   if(!rst_n)
      clk_2div <= 1'b0;
	else
		clk_2div <= ~clk_2div;

always @(posedge clk,negedge rst_n)
   if(!rst_n)
      clk_2divd <= 1'b1;
	else
		clk_2divd <= ~clk_2divd;

always @(posedge clk_2div,negedge rst_n)
   if(!rst_n)
		cnt1 <= 8'd0;
	else if(cnt1 == 8'hff)
		cnt1 <= 8'd0;
	else
		cnt1 <= cnt1 + 1'b1;

always @(posedge clk_2div,negedge rst_n)
   if(!rst_n)
		cnt2 <= 8'd0;
	else if(cnt2 == 8'hff)
		cnt2 <= 8'd0;
	else
		cnt2 <= cnt2 + 1'b1;

endmodule

原因分析:

如图:cnt计数器被分成两路cnt1、cnt2,它们的累加时钟分别对应clk_2div、clk_2divd,其频率为clk时钟的一半,且clk_2divd延迟于clk_2div一个clk周期。这样就可以利用clk来判断cnt1和cnt2的值来确定cnt计到哪个位置,累加部分的频率就降低了一半。
在这里插入图片描述

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

卯【金】刀

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

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

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

打赏作者

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

抵扣说明:

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

余额充值