FPGA学习之路(五)之锁相环倍频(PLL)探究 您所在的位置:网站首页 fpga上的pid只能输出pwm吗 FPGA学习之路(五)之锁相环倍频(PLL)探究

FPGA学习之路(五)之锁相环倍频(PLL)探究

2023-08-15 11:44| 来源: 网络整理| 查看: 265

写在前面

今天时间还早QAQ,继续研究研究FPGA的锁相环倍频(PLL)。之前在做松果派ONE的时候,上面的swm320vet7内部带有一路PLL,最高支持output 120Mhz的时钟,而且外设可根据管脚奇偶数自由映射,当时就觉得贼有FPGA的感觉,哈哈哈。

PLL原理

PLL的原理就不多说了,反正用的IP Core,直接wire一下就行。不过看到一篇对于PLL原理介绍比较清晰的博客,分享给大家,想要深入了解的同学,可以点进去看看。(链接:https://blog.csdn.net/leoufung/article/details/50268031)

FPGA的PLL特性

我用的是Altera(未被intel收购前)的cyclone IV EP4CE15F23C8N 芯片。先来看看Data sheet上怎么吹它PLL特性的。

首先,是一张PLL结构图

在这里插入图片描述

其次是一些NOTE

在这里插入图片描述

然后是它的输出结构

在这里插入图片描述

最大PLL输出频率

其实看了上面的DataSheet,对我们实际编程参考意义不是很大。从写代码的角度上来说,我更希望知道的是如下问题: 0.EP4CE15F238N支持多少个PLL 1.这个 PLL的IP Core最大倍频支持多少? 2.时钟树最大的时钟支持多少? 使用角度上来说,如何快速调用这个PLL IP Core,帮我解决需求(当然,这个东西一般不写在DataSheet里面。

接下来,我又查找了下相关的DataSheet,解决了如0,上1和2两个疑问。 0.支持四个PLL Core 在这里插入图片描述

1.PLL的IP Core最大支持倍频为402.5Mhz(对于我的EP4CE15F238N来说),对于cyclone IV里面的最高端型号来说,是472.5Mhz。为了系统稳定的话,我们一般PLL到MAX/2(也就是200Mhz左右)。合计了下,一般SDRAM就100Mhz左右,这个200Mhz用来驱动SDRAM没啥问题了 在这里插入图片描述

2.内部时钟树差不多也是400Mhz 在这里插入图片描述 这样看来,还是比较美滋滋的。我从最开始的跑12T的12Mhz 8051单片机,一路到PLL到72Mhz的stm32F103(Cortex m3),再到1T 的24Mhz 8051单片机,再到PLL到120Mhz的松果派ONE(SWM320)。再到600Mhz 双核K210,如果不提i.mx6ul,jetson nano之类的频率比较高的嵌入式/AI开发板。 我觉得这个FPGA点点灯,做做时序控制外部IC,400Mhz,我还是非常满足的。算是我玩过的比较高频率的U了

Verilog

在这里就直接贴代码了,关于IP Core的导入,网上教程很多,大家直接照着搞就行。代码很简单,就是把PLL倍频后的CLK直接output,然后我用示波器测测(我的示波器是200Mhz带宽的,根据示波器带宽比被测型号频率高3-5倍的经验,理论上到40Mhz-67Mhz开始衰减,70Mhz后,赋值就完全衰减成正弦波了…) 如果要测出400Mhz不衰减的方波,按照5倍来配置示波器的话,大约需要带宽2Ghz的示波器,大概查了下价格,国产某源的价格为13W左右,嘿嘿嘿 **在这里需要有个注意事项,就是需要选择专用得PLL output管脚,不然普通IO翻转速度不够,拖后腿了。quartus会出现报错Warning (15064): PLL “pll:pll_core|altpll:altpll_component|pll_altpll:auto_generated|pll1” output port clk[1] feeds output pin “C1~output” via non-dedicated routing – jitter performance depends on switching rate of other design elements. Use PLL dedicated clock outputs to ensure jitter performance ** 如何知道哪些IO是PLL专用/xx专用 IO? 很简单,再分配引脚的时候,点下右边的filter就行。 在这里插入图片描述

module PLL( CLK, // PLL输入时钟 RST_N, C0, C1, C2, C3, C4, ); input CLK; input RST_N; output C0; output C1; output C2; output C3; output C4; wire lock; pll pll_core( .areset(~RST_N),//1复位 .inclk0(CLK), .c0(C0), // 25 .c1(C1), //125 .c2(C2), //150 .c3(C3), //200 .c4(C4), //400 .locked(lock) ); endmodule RTL视图

在这里插入图片描述

测试结果

MAX/2的200Mhz,我200M的示波器已经糊成正弦波了 在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有