用Bresenham算法在FPGA上实现小数分频器

FPGA时钟分频:偶数分频、奇数分频、小数分频(含verilog源码) FPGA分频器是一种常用于数字信号处理、通信系统、雷达系统等领域的电路,其作用是将信号时钟分成多个频频率。分频电路是数字电路中常见的逻辑电路类型。在时序逻辑电路中,时钟是必不可少的,但对于时钟要求不高的基本设计,自行设计的分频电路,也就是时钟分频器,有时候比采用外部PLL更为简单、有效、快速。本文将详细介绍FPGA分频器的设计方法,并附上Verilog代码示例,以供参考。 阅读详情

最近朋友问了一个问题,输入时钟是33MHz,要分出一路2.048MHz的时钟来,要求相位抖动尽可能小。我想到可以用计算机图形学中绘制直线的Bresenham算法来解决,获得成功。

输入时钟是33000kHz,输出时钟是2048kHz,好比从原点画一条到(33000,2048)的直线,用输入时钟驱动画笔在 x 方向的运动,那么对应的 y 方向的运动就是输出时钟。

Verilog代码如下:

module  divider(clk_in, clk_out, nrst);
  input  clk_in,  nrst;
  output clk_out;
  reg    clk_out;

  parameter input_freq = 33000;   // both in kHz
  parameter output_freq = 2048;
 
  reg[16:0] err;          // change to 18 bits if necessary, look down
 
  always @(posedge clk_in or negedge nrst)
  begin
    if (nrst == 1'b0) begin
      clk_out <= 1'b0;
      err <= (output_freq << 2) - input_freq;
    end
    else begin
      if (err[16] == 1'b0) begin  // also change here !!! (if change the former)
        err <= err - (input_freq << 1) + (output_freq << 2);
        clk_out <= !clk_out;
      end
      else begin
        err <= err + (output_freq << 2);
      end
    end
  end
 
endmodule

这是一个同步时序电路,在 clk_in 的每个上升沿判断 clk_out 是否翻转,设 clk_in 的周期是T,
那么 clk_out  的边沿抖动小于T。

FPGA—奇偶数分频和小数分频代码例程 奇数分频比偶数分频复杂一些,当不要求分频的占空比时,对输入时钟clk上升沿计数,可以设置两个计数的翻转点,一个是(N-1)/2,一个是(N-1),计数到(N-1)时输出时钟翻转且将计数器清零,假设计数器计数0~(N-1)/2区间输出低电平,则输出时钟的低电平有(N-1)/2+1个clk周期,高电平的计数是(N-1)/2+1~(N-1),共(N-1)/2个clk周期,可见不是50%占空比。偶数分频比较简单,只是注意时钟翻转的条件是(N/2)还是(N/2)-1,非阻塞赋值在下一个时钟才会更新值。... 阅读详情

相关推荐

基于FPGA的小数分频器的实现

摘 要:介绍了一种基于FPGA的双模前置小数分频器的分频原理及电路设计,并用VerilogHDL编程,在ModelSimSE平台下实现分频器的仿真,并用Xilinx公司的芯片Spartan3来实现。  关键词:小数分频器;频率合成;FPGA;VerilogHDL  频率合成技术是现代通讯系统的重要组成部分,他将一个高稳定和高准确度的基准频率,经过四则运算,产生同样稳定度和基准度的频率。分频器是集成电路中最基础也是最常用的电路。整数分频器的实现比较简单,可采用标准的计数器或可编程逻辑器件设计实现。但在某些场合下,时钟源与所需的频率不成整数倍关系,此时可采用小数分频器进行分频。本文利用Verilo

奇偶分频器

FPGA之小数分频器

weixin_47167067的博客 738

手把手教你用运放搭建方波三角波发生器(附Multisim仿真文件)

本文详细解析了使用运算放大器搭建方波和三角波发生器的核心原理与设计步骤。通过剖析迟滞比较器与积分器的联动机制,指导读者进行电路设计、元件选型,并借助Multisim仿真进行参数调优与波形优化。文章提供了从理论分析、虚拟仿真到实物焊接调试的完整实践指南,并附有仿真文件,帮助硬件爱好者与初学者深入掌握这一经典模拟电路设计。

weixin_29165725的博客 639

DIY运动控制器——移植grbl(软件架构、脉冲产生)

移植grbl到stm32

cln512的博客 2万+

CentOS 7升级GCC踩坑记:明明装了centos-release-scl,为啥找不到devtoolset-9-gcc-c++?

本文详细记录了在CentOS 7系统中升级GCC时遇到的`devtoolset-9-gcc-c++`不可用问题及其解决方案。通过分析`centos-release-scl`安装不完整的原因,提供了从清理残留、重新安装仓库配置到完整安装devtoolset-9工具链的全套操作指南,帮助开发者彻底解决类似环境配置难题。

weixin_29252171的博客 244

Python在振动信号处理中的应用(一):振动信号消除多项式趋势项

文章目录一、概述二、最小二乘法去除趋势项原理三、python模块介绍3.1 scikitlearn简介(1)转化器(Transformer)(2)估计器(Estimator)3.2 线性回归LinearRegression3.3 多项式PolynomialFeatures3.4 工作流Pipeline四、python代码实现4.1 构造模拟信号4.2 编写去除趋势项主代码4.3 展示算法效果五、TIPS 一、概述   在振动测试过程中,传感器或采集设备由于自身性能问题或受环境干扰(如温度、供电等影响),容易

白银时代的博客 8578
上一篇: JPEG 学习笔记
下一篇: 《Code Complete 中文版 第二版》统稿流水帐
陈硕
博客等级 码龄26年 1万+粉丝 144原创
评论 9
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值