FPGA-基本IP核的应用之PLL(锁相环)

PLL的英文全称(Phase Locked Loop),即锁相环,是一个反馈控制电路。对于PLL的概念不做过于详细的介绍,只需要知道它有如下几个作用:

1.具有时钟倍频、分频、相位偏移和可编程占空比的功能;

2.FPGA内部产生的信号不能驱动PLL;

3.不同的FPGA的PLL是不一样的,以Cyclone IV为例,它有两个PLL,每个PLL可以提供5路输出。

下面结合Quartus进行具体介绍:

一、设置ip

1.首先创建一个工程文件夹,新建一个pll.v文件放于工程ip文件目录:

2.用 Quartus新建一个工程,在其右边界面IP Catalog依次选择Library--Basic Functions--Clocks--PLL--ALTPLL,双击ALTPLL,导入刚建立的pll.v文件点击ok:

点击ok后会出现以下信息,选择yes覆盖:

然后就会出现如下界面进行相应参数调整,首先是Parameter Settings部分:

调整时钟频率(跟随晶振时钟50MHz) :

 然后一路next(如需要用到带宽自行调节,本次不涉及带宽便不选择)。

再进入Output Clocks调整参数,可以看到PLL有5路时钟输出:

假设时钟clk0使用25MHz频率,可以看到倍频clock multiplication factor的参数为1,分频clock division factor的参数为2,即是对晶振50MHz进行了2分频,相位偏移clock phase shift设置为0,占空比clock duty cycle为50%。 

 再对clk1进行参数配置:选择直接利用分频和倍频确定频率,此处是选择了2倍频,所以clk1输出为100MHz,相位偏移设置为90°,当然也可以选择对时间进行偏移(ns/ps):

 再用clk2产生一个对于clk1而言的一个相位偏移参考时钟:

时钟clk3选择2分频,占空比为25%:

最后一个时钟直接选择频率,注意的是,如果配置的频率出现了红字部分是有问题的,需要配置为显示蓝字许可才行,这里设置为70MHz合理:

 

 

 点击下一步,会检测到一个功能仿真文件库altera_mf(此文件是提前放进工程文件夹下):

 点击next,可以看到如下界面,勾选产生激励文件,整个PLL的模块的时钟参数配置如图,其分频倍频相位偏移以及占空比情况一目了然:

 最后点击完成,会让你添加到ip文件夹里面,点击yes:

 执行后便可以在Quartus里面看到ip组件:

以及ip文件夹下会多出几个文件,其中点击inst文件就可以看到激励文件的端口信息:

二、硬件语言描述

根据pll.v以及pll_inst.v,编写顶层文件以及测试文件

顶层test_ip代码:

module test_ip (

    input    rst_n,

    input    clk,

    output   c0    ,

    output   c1    ,

    output   c2    ,

    output   c3    ,

    output   c4    ,

    output   locked

);

   

    pll pll_inst (

    .areset ( ~rst_n ),//根据cyclone iv手册,pll复位高电平有效,而设计的rst_n为低电平有效

    .inclk0 ( clk    ),

    .c0     ( c0     ),

    .c1     ( c1     ),

    .c2     ( c2     ),

    .c3     ( c3     ),

    .c4     ( c4     ),

    .locked ( locked )

    );

endmodule

测试文件:

 

`timescale 1ns/1ps

module test_tb();

    reg      rst_n   ;

    reg      clk     ;

    wire     c0      ;

    wire     c1      ;

    wire     c2      ;

    wire     c3      ;

    wire     c4      ;

    wire     locked  ;

   

    parameter CYCLE = 20;

    test_ip u_test_ip (

    .rst_n  ( rst_n ),

    .clk    ( clk   ),

    .c0     ( c0    ),

    .c1     ( c1    ),

    .c2     ( c2    ),

    .c3     ( c3    ),

    .c4     ( c4    ),

    .locked ( locked)

    );

initial begin

    clk = 1'b1;

    rst_n = 1'b1;

    #(2*CYCLE)

    rst_n = 1'b0;

    #(5*CYCLE)

    rst_n = 1'b1;

    #(200*CYCLE)

    $stop;

end

always #(CYCLE/2)  clk = ~clk ;//50M

endmodule

 另外,这里是用do文件直接在modelsim仿真,编写test.do文件并置于相应目录下:

vlib work
vmap work work

#编译testbench文件
vlog     test_tb.v
#编译   设计文件
vlog     ../ip/pll.v
vlog     ../rtl/test_ip.v
vlog     altera_mf.v


#指定仿真顶层
vsim -novopt work.test_tb
#添加信号到波形窗
add wave -position insertpoint sim:/test_tb//*

run -all
 

三、仿真结果

打开modelsim,修改到文件路径,命令窗口执行do test.do,得到仿真波形:

图中间部分有一段红色是因为锁住了时钟导致没有波形,截取相应的时钟片段可以验证符合设计要求。

 

 

  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值