zoukankan      html  css  js  c++  java
  • 锁相环(PLL)的IP核调取及应用详解

    写在前面的话

    梦翼师兄经常告诉大家FPGA最明显的优势就是它的速度。那么本节,梦翼师兄和大家一起来学习FPGA片内时钟管理单元PLL(锁相环)的应用。利用锁相环,我们可以在一个很宽广的范围内实现任意的分频和倍频。使用锁相环,可以有效的减少我们在时钟发生部分的代码量,同时更重要的,利用锁相环的“全局时钟树”,可以保证很好的时钟质量。

    项目需求

    我们使用锁相环生成两路时钟,一路为25MHz,另外一路为100MHz。通过这种方式我们可以学会利用锁相环实现分频和倍频的基本操作。

    操作步骤

    启动Quartus15.0在界面的右侧的IP Catalog的搜索中键入pll,然后双击【ALTPLL】

    选择语言为Verilog,给IP起一个名字,这里把它叫做my_pll

    点击【ok】以后,界面将会进入pll设置向导中,键入我们的输入时钟频率(晶振或者外部时钟),然后点击【NEXT

    我们把【areset】【locked】打勾(areset:锁相环的高电平复位信号。locked:当锁相环的输出稳定之后,locked会变成高电平),然后点击【NEXT】

    一直点击【NEXT】,直到出现如下界面

     选择【Enter output clock freqquency】键入我们想要输出的时钟频率,然后点击NEXT

    选择使用第二个时钟,键入我们想要的时钟频率。

    一直点击【NEXT】,直到出现如下界面,然后选择my_pll_inst.v(这个文件中是调用IP核的端口),点击【Finish

    顶层架构设计

    ip核的设置向导中,我们了解了锁相环的端口,绘制出如下的架构图:

    端口描述

    端口名

    端口说明

    clk

    输入时钟

    areset

    高电平有效的复位

    Clk_25M

    25MHz的时钟输出

    Clk_100M

    100MHz的时钟输出

    locked

    时钟稳定信号

    代码解释


    调用锁相环模块的代码:

    /****************************************************          

    *   Engineer        :   梦翼师兄

    *   QQ               :   761664056

    *   The module function:  锁相环的应用

    *****************************************************/

    01  module pll (

    02                  clk,         //输入时钟

    03                  areset,     //复位信号

    04                  clk_25M,   //25M的时钟输出

    05                  clk_100M,  //100M的时钟输出

    06                  locked      //时钟稳定信号

    07              );

    08  //系统输入

    09  input clk;          //输入时钟

    10  input areset;       //复位信号

    11  //系统输出

    12  output clk_25M; //25M的时钟输出

    13  output clk_100M;    //100M的时钟输出

    14  output locked;      //时钟稳定信号

    15  // 调用IP

    16      my_pll  my_pll_inst (

    17          .areset ( areset ), //复位信号

    18          .inclk0 ( clk ),        //系统时钟输入

    19          .c0 ( clk_100M ),       //100M的时钟输出

    20          .c1 ( clk_25M ),        //25M的时钟输出

    21          .locked ( locked )  //时钟稳定信号

    22      );

    23

    24  endmodule 

    本模块中只是简单的调用了pllIP核,主要目的是让大家学会如何调用IP核。

    仿真代码如下:

    /****************************************************          

    *   Engineer        :   梦翼师兄

    *   QQ               :   761664056

    *   The module function:  锁相环模块的测试

    *****************************************************/

    01  `timescale 1ns/1ps  //时间单位和精度定义

    02

    03  module pll_tb;

    04

    05  //系统输入

    06  reg clk;            //输入时钟

    07  reg areset;     //复位信号

    08  //系统输出

    09  wire clk_25M;   //25M的时钟输出

    10  wire clk_100M;  //100M的时钟输出

    11  wire locked;        //时钟稳定信号

    12

    13  initial begin

    14  clk = 1;

    15  areset = 0;

    16  end

    17

    18  always # 10 clk = ~clk;     //50MHz时钟

    19

    20  pll pll(

    21                  .clk(clk),          //输入时钟

    22                  .areset(areset),        //复位信号

    23                  .clk_25M(clk_25M),      //25M的时钟输出

    24                  .clk_100M(clk_100M),    //100M的时钟输出

    25                  .locked(locked)     //时钟稳定信号

    26              );

    27

    28

    29  endmodule 

    仿真结果分析

    当输出的时钟稳定之后,locked(时钟稳定信号)信号由低变高。输出的两路时钟中,一路为20MHz,一路为100MHz,与我们的设计要求一样,证明我们的操作和代码都是正确的。


     

  • 相关阅读:
    tensorflow1.0 矩阵相乘
    tensorflow1.0 变量加法
    python 给字典按值排序,同样适合于其他
    pytorch 孪生神经网络DNN
    python 利用numpy同时打乱列表的顺序,同时打乱数据和标签的顺序
    python os模块获取指定目录下的文件列表
    创建自定义ssl证书用于https
    使用Maven命令行下载依赖库
    JAVA入门各种API参考
    在centos 6.9 x64下安装code::blocks步骤
  • 原文地址:https://www.cnblogs.com/mengyi1989/p/11517720.html
Copyright © 2011-2022 走看看