ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

学习笔记——基于PLL分频计数的LED闪烁实例

2021-03-07 23:01:23  阅读:296  来源: 互联网

标签:分频 LED 信号 输出 IP 模块 PLL 时钟


一、PLL概述

  • PLL(Phase Locked Loop):为锁相回路或锁相环,用来统一整合时脉讯号,使内存能正确的存取资料。PLL用于振荡器中的反馈技术。许多电子设备要正常工作,通常需要外部的输入信号与内部的振荡信号同步,利用锁相环路就可以实现这个目的。
  • 时钟就是 FPGA 运行的心脏,它的每次跳动必须精准而毫无偏差(当然现实世界中不存 在所谓的毫无偏差,但是我们希望它的偏差越小越好)。一个 FPGA 工程中,不同的外设通常工作在不同的时钟频率下,所以一个时钟肯定满足不了需求;此外,有时候可能两个不同的模块共用一个时钟频率,但是由于他们运行在不同的工作环境和时序下,所以他们常常是同频不同相(相位),FPGA 里面定义的 PLL,不只有一个反馈调整功能,它还有倍频和分频等功能集成其中。可以说PLL 算是一个 FPGA 内部的时钟管理模块了。我之前也对PLL有点了解,也总结过博客,大家感兴趣可以参考https://blog.csdn.net/quanqueen/article/details/109693219在这个博客里面,我可能只是将PLL简单的理解成了用于振荡器的反馈技术,那么这次就让我们来看看PLL的更大的功能
  • PLL一个最主要的功能就是能够对输入的基准时钟信号进行一定范围内的分频或者倍频,从而产生多个输出时钟信号供芯片内部的各个功能模块使用。下图就是PLL的内部功能框图。
    在这里插入图片描述

二、功能介绍

  • FPGA内部的PLL是本次的重点,输出FPGA引脚上的25MHZ时钟,配置PLL使其输出4路分别为12.5MHZ、25MHZ、50MHZ和100MHZ的时钟信号,这4路时钟信号又分别驱动4个不同位宽的计数器不停地计数工作,这些计数器的最高位最终输出用于控制4个不同的灯亮灭。简单的来说就是,四个灯用四个不同的定时器控制,由于4哥时钟频率都有一定的倍数关系,所以也很容易通过调整合理的计数器位宽,达到4个LED闪烁一致的控制。简单的基于PLL分频计数的LED闪烁功能框图如下

在这里插入图片描述

三、新建IP核文件

  • 要想完成上述功能,那么我们首先想要学会如何配置一个PLL硬核IP,并将其集成到工程中。首先我们在工具栏,点击Tools选择MegaWizard
    Plug-In Manager

在这里插入图片描述

  • 选择“Creat a new custom megafunction variation”,然后点击 Next。
    在这里插入图片描述
    然后选择所需的IP核并进行一系列的设置
    ● 在“Select a megafunction from the list below”下面选择 IP 核为“I/O → ALTPLL”。
    ● 在“What device family will you be using”后面的下拉栏中选择我们所使用的器件系
    列为“Cyclone IV E”。
    ● 在“What type of output file do you want to create?”下面选择语言为“Verilog”。
    ● 在“What name do you want for the output file?”下面输入工程所在的路径,并且在
    最后面加上一个名称,这个名称是我们现在正在例化的 PLL 模块的名称,我们可以
    给他起名叫 pll_controller,然后点击 Next 进入下一个页面。这里它所在的路径,实
    际上是我们在工程文件夹 cy4ex8 下面创建的 ip_core 文件夹和其下的 pll 文件夹。
    在这里插入图片描述

四、PLL配置

上面的设置完成之后,点击NEXT就到了 PLL 的参数配置页面

● 在“What device speed grade will you be using?”后面选择“8”,即我们使用的器件
的速度等级。
● 在“What is the frequency of the inclk0 input?”后面选择“25MHz”,即我们输入到
该 PLL 的基准时钟频率。
在这里插入图片描述
Input/lock 页面中,如图 8.22 所示进行设置,接着点击 Next 进入下一个页面。
● 勾选“Create an ‘areset’ input to asynchronously reset the PLL”,即引出该 PLL 硬核的’areset’信号,这是该 PLL 硬核的异步复位信号,高电平有效。
● 勾选“Create ‘locked’ output”,即引出该 PLL 硬核的’locked’信号,该信号用于指示PLL 是否完成内部初始化,已经可以正常输出了高电平有效。
在这里插入图片描述
Bandwidth/SS、Clock Switchover 和 PLL Reconfiguration 页面不用设置,默认即可。直接进入 Ouput Clocks 页面,如图 8.23 所示,这里有 5 个可选的时钟输出通道,通过勾选对应
通道下方的 Use this clock 选项开启对应的时钟输出通道。可以在配置页面中设置输出时钟的
频率、相位和占空比。这里是 C0 通道的设置。
● 勾选“Use this clock”,表示使用该时钟输出信号。
● 输入“Enter output clock frequency”为“12.5MHz”,表示该通道输出的时钟频率为12.5MHz。
● 输入“Clock phase shift”为“0 deg”,表示该通道输出的时钟相位为0deg。
● 输入“Clock duty cycle(%)”为“50.00%”,表示该通道输出的时钟占空比为 50%。
在这里插入图片描述

和 C0 的配置一样,我们可以分别开启并且配置 C1、C2、C3,这些时钟虽然这个例程暂时用不上,但是后续的例程将会使用到。
● C1 的时钟频率为 25MHz,相位为 0deg,占空比为 50%。
在这里插入图片描述

● C2 的时钟频率为 50MHz,相位为 0deg,占空比为 50%。
在这里插入图片描述

● C3 的时钟频率为 100MHz,相位为 0deg,占空比为 50%。
在这里插入图片描述

  • 配置完成后,最后在 Summary 页面勾选上*_inst.v 文件,这是一个PLL
    例化的模板文件,一会我们可以在工程目录下找到这个文件,然后打开它,将它的代码复制到工程中,修改对应接口即可完成这个 IP 核的集成。

在这里插入图片描述

  • 点击 Finish 完成 PLL 的配置。工程中若弹出如图 8.25 所示的对话框,勾“Automatically add Quartus
    II IP Files to all projects”选项后,点击 Yes

在这里插入图片描述

  • 此时,我们可以来到 pll 文件夹下,打开 pll_controller_inst.v 文件,它是这个 PLL IP 核的例化模板。

在这里插入图片描述

  • 复制文件中的内容,将()内的信号名改为我们连接顶层 模块A 模块B 模块C 子模块A1 子模块A2 子模块C1 子模块C2 ………到这个模块的接口信号名就可以了。

在这里插入图片描述

模块化设计概述

未完待续。。。。。。

标签:分频,LED,信号,输出,IP,模块,PLL,时钟
来源: https://blog.csdn.net/quanqueen/article/details/114499291

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有