在前面的博客里详细介绍了FIFO、RAM两个常用的IP核,而这些IP核在FPGA当中应用非常广泛,很多书籍教程、培训机构也都会蜻蜓点水提起些,但往往不作为重点,而更偏重讲解例程的具体设计。笔者编写FPGA基础知识篇的初衷就是把FPGA学习路上细枝末节、模糊不清的知识点尽力说明白、讲清楚,帮助大家快速走在提高晋级的路上。
在这篇博客里围绕PLL IP核展开说明,之所以在这里要花费很多的笔墨去详细介绍、说明这些IP核,是因为笔者也是从一个新手一点点在工作中摸索学习提高的,最初在学校接触FPGA的时候,看过一些板子教程和付费视频,当时对这些IP核是走马观花般的学习过,但是真正走到工作岗位时,就会真实地感到这里的似懂非懂会直接影响到整个工程的代码实现,因此花费一些时间去把它们搞清楚、弄明白,前期功课做好做足,后期走向工作岗位才能事半功倍。
MMCM/PLL IP介绍
DCM、DLL、MMCM、PLL这些名词对FPGA工程师而言真的是耳熟能详,Xilinx 7系列器件中,时钟管理器称为Clock Management,简称CMT,我们所用到DCM、MMCM、PLL也都包含在CMT中,其中豌豆开发板主控芯片XC7A35T内部有5个CMT,为设备提供强大的系统时钟管理以及高速 I/O 通信的能力,如下图1所示是Xilinx 7系列器件时钟管理单元CMT的总体框图。
图1 Xilinx 7系列器件时钟管理单元CMT总体框图
DCM通常是在FPGA早期芯片型号中使用的,典型的如Spartan3,而后期的器件不再继续延用了。在Xilinx FPGA早期芯片型号中CMT包括一个PLL和两个DCM。DCM的核心是DLL,即延迟Locked Loop,本身是一个数字模块,并且可以产生不同相位的时钟、分频、倍频、相位动态调整等,但缺点就是精度有限。
PLL的英文全称为 Phase Locked Loop,即电子工程师经常挂在嘴边的锁相环,其本身也是一种反馈控制电路。锁相环即一种反馈控制电路,这里可能学计算机或者软件工程的同学会感到比较陌生,学自动化或者电子的同学至少应该听说过,其实说到底就是利用外部输入作为参考,再通过这个参考信号去控制其环路内部震荡信号的频率和相位。PLL可以对时钟网络进行系统级的时钟管理、偏移控制,达到时钟倍频、分频、相位偏移和可编程占空比的效果。Xilinx 7系列器件中的时钟资源包含了时钟管理单元CMT,同时每个CMT由一个MMCM和一个PLL组成,PLL产生的频率比DCM更加准确、抖动也更好,但PLL无法动态调整相位,如图2 所示是Xilinx 7系列器件PLL总体框图。
MMCM即混合模式时钟管理器,Xilinx的ug472_7Series_Clocking官方手册给出的解释是:MMCM是一个PLL上加入DCM的一部分以进行精细的相移,如图3所示是Xilinx 7系列器件MMCM总体框图。也就是说MMCM在PLL的基础上加上了相位动态调整功能,又因为PLL是模块电路,而动态调相是数字电路,所以MMCM被称为混合模式,MMCM相对PLL的优势就是相位可动态调整,但PLL占用的面积更小,而在大部分的设计当中大家去使用MMCM或者PLL以产生不同相位的时钟、分频、倍频都是完全可以的。
图2 Xilinx 7系列器件PLL总体框图
图3 Xilinx 7系列器件MMCM总体框图
对于一个普通的设计来说,FPGA整个系统都使用统一的一个时钟或者可以通过简单编写代码的方式对时钟进行分频,典型的可以对输入50Mhz时钟进行手工计数,从而分频得到更低的时钟频率如12.5Mhz,但是对于有些功能复杂的FPGA系统来说,系统中有时候就会需要使用多个时钟甚至一些特殊设计中会用到时钟相位的偏移,而且仅通过编写代码输出的时钟只能去实现时钟的分频却无法实现时钟的倍频,所以学习MMCM/PLL IP核的将对我们以后的实际工作会有很大帮助。
如图4在Vivado环境下我们先去打开MMCM/PLL IP核,如下图11-5所示是Clock Wizard下的配置,Clocking Features和Jitter Optimization选项框的各个选项,请查阅pg065-clk-wiz官方手册,每一项都有对应的具体英文解释,笔者不想在这里赘述,因为并不是重点,大家默认勾选Frequency Synthesis、Phase Alignment和Balanced选项即可。
图4 在Vivado环境下打开MMCM/PLL IP核
在Vivado环境下,在使用Clock Wizard配置MMCM/PLL IP核时,如图5所示,我们可以选择使用MMCM或PLL,大家可以打开Vivado操作一下,可以看到它们的区别也仅是图中红圈的部分,感兴趣的同学可以看一看pg065-clk-wiz官方手册,毕竟关于很多底层资源的细节和配置,官方手册永远是最好的答案!
图5 在Vivado环境下使用Clock Wizard配置MMCM/PLL IP核
MMCM/PLL IP练习
我们做一个简单的仿真测试,来搞清楚MMCM/PLL IP核的具体功能,大家在以后的工作中如果需要使用到一个陌生的IP核,就请多阅读官方IP核的说明手册,再结合手册编写对应的Testbench,代入Modelsim仿真观察波形,便可以很快搞清楚IP核的使用细节。如图6、 7所示是在Vivado环境下配置MMCM/PLL IP核的Clocking Options和Output Clocks界面,这里在Clocking Options界面下,我们把clk_in1输入频率配置成开发板的晶振默认频率50Mhz,同时选择默认的MMCM,在Output Clocks界面下,我们勾选前5个时钟,并把Output Freq(MHz)分别配置成200、100、100、50、25,并把第3个100MHz的时钟相移Phase(degrees) 配置成180。
如图8在Vivado环境下MMCM/PLL IP核的clk_wiz_0信号例化参考代码,大家可以把它直接粘贴过来,如图9所示,这里直接把IP核的相关信号例化到pll_test的测试文件下即可,然后给出50Mhz的输入时钟和reset信号作为激励,接着再把Testbench代入Modelsim下,即可观察到如图10所示的MMCM/PLL IP核的仿真结果,大家可以清晰地看到仿真结果是符合我们的预期的,当然有些FPGA工程师这里也习惯性把MMCM/PLL IP核输出的locked信号作为其他模块的rst_n信号。
图6 在Vivado环境下配置MMCM/PLL IP核的Clocking Options界面
图7 在Vivado环境下配置MMCM/PLL IP核的Output Clocks界面
图8 在Vivado环境下MMCM/PLL IP核的clk_wiz_0信号例化参考代码
图9 MMCM/PLL IP核的输入信号激励设计文章来源:https://www.toymoban.com/news/detail-481535.html
图10 MMCM/PLL IP核的仿真结果文章来源地址https://www.toymoban.com/news/detail-481535.html
到了这里,关于FPGA之PLL详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!