首页 > 编程知识 正文

简单分频电路设计,7分频时钟产生电路fpga

时间:2023-05-05 13:02:57 阅读:153114 作者:1936

目录

1 .偶数分频

2 .奇数分频

3 .半整数分频

分频器是FPGA中常用的设计之一,在FPGA设计中起着重要的作用(请参见)。 大多数设计在厂家集成的锁相环PLL资源中广泛采用分频、倍频、相移(各厂家Xilinx/Alter等开发工具包提供各自的IP ),但对时钟要求不高的基本

说到分频,对于初学者来说,可以考虑用1个计数器在基本时钟下进行计数,通过使其反转来得到期望的时钟。 这种方法确实可以实现偶数分频,但实现奇数分频只需要一个计数器是不够的,通常可能需要两个计数器。

1 .偶数分频偶数分频比奇数分频常见,可由一个计数器完全实现。 需要n分频(n为偶数时,N/2为整数) )时,可以通过1个计数器分频的时钟触发进行奇数周期。 计数器从0奇数变为N/2 -1时,输出时钟反转。

Verilog实现:

moduleEven(clk_in,rst_n,clk_out ); input clk_in; input rst_n; output reg clk_out; parameter N=6; //用于定义分频参数reg [3:0] cnt的always @ (posedge clk _ inornegedgerst _ n ) begin if (! rst_n ) begin cnt=4'b0000; clk_out=1'b0; endelseif(CNT==(n/2-1 ) ) begin clk_out=~clk_out; cnt=4'b0000; end else cnt=cnt 1; 结束模块

2 .奇数分频先看看3分频的时序图:

从时序图中可以看出,对于奇数分频,分别通过主时钟的上升沿触发生成一个时钟,通过下降沿触发生成一组时钟,将两个时钟信号相加或运算得到奇数分频的结果。

如果n是奇数,则N/2不是整数。 N-1/2是整数。 那么,该如何实现呢?

实现方法

Step1:双边缘计数器计数;

使用cnt_up和cnt_down两个计数器,分别在时钟的上升沿触发计数器cnt_up和cnt_down。

33558www.Sina.com/:2:产生两个控制信号Clk_up和Clk_down;

cnt_up计数到[N-1]/2-1电平反转信号Clk_up,进而计数到N-1电平反转信号Clk_up,同时cnt_down为[N-1]/2-1电平

Step2:分钟后的时钟;

如果Clk_up、Clk_down信号和Clk_out之间的关系与Clk_up、Clk_down信号中的高/低电平比有关(例如

)1)高度 Step3低等级比例为n-1/2http://www.Sina.com/n-1/2http://www.Sina.com /,则分频时钟clk _ com

)2)高 / 低电平比例为N-1/2 : N/2时,分频时钟clk_div=clk_up clk_down )图

modulediv3(clk,rst_n,clk_out ); input clk,rst_n; output clk_out; //=======================================================================================* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *//clk的上升沿(下降沿)触发生成的计数器CNT_p ) clk //clk上升(下降)触发中生成的时钟clk _ p (clk _ n ) parameter N=5; //分频参数//=====================================分频参数/=========分频参数=================* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *==============* * * * * * * * * * * * * * * * * * * * * * * *。 ELSEif(CNT_p==n-1 ) cnt_p=0; else cnt_p=cnt_p 1'b1; end//CNT _ n0-4 always @ (negedgeclkornegedgerst _ n ) begin if (! rst_n ) cnt_n=4'd0; ELSEif(CNT_n==(n-1 ) ) cnt_n=0; else cnt_n=cnt_n 1'b1; end//clk _ p always @ (posedgeclkornegedgerst _ n ) begin if (! rst_n ) clk_p=1; ELSEif(CNT_p==(n-1 )/2-1 ) clk_p=~clk_p; ELSEif(CNT_p==(n-1 ) ) clk_p=~clk_p; end//clk _ p always @ (negedgeclkornegedgerst _ n ) begin if (! rst_n ) clk_n=1; ELSEif(CNT_n==(n-1 )/2-1 ) clk_n=~clk_n; ELSEif(CNT_n==(n-1 ) ) clk_n=~clk_n; end assign clk_out=clk_n|clk_p; 结束模块

3 .半整数分频半整数分频,本次以2.5分频为例。 这主要利用时钟的上升沿和下降沿进行计数。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。