FPGA专题——锁相环
目录
一、前言
二、程序
三、实验分析
一、前言
在实际使用过程中,有时候需要得到不同频率的时钟,锁相环(PLL)可以对输入时钟进行倍频或者分频,以生成各种其他频率的时钟,在FPGA工程中,可以直接调用altera的IP核锁相环,FPGA型号为EP4CE6E22C8。
二、程序
模块框图如下:
这里将50MHz的晶振时钟信号通过sys_clk引脚输入锁相环,然后经过倍频或者分频,产生5个时钟信号,分别是100MHz,150MHz,100MHz相位偏移90度,20MHz和200MHz。
IP核锁相环调用如下,建立一个Quartus新工程altpll_test,然后选择Tools -> MegaWizard Plug_In Manager。
上图对话框选择第一个选项。
上图中选择Verilog HDL,左边选择IO类别里的ALTPLL,文件保存目录自己随便选。
图中填写开发板的实际输入时钟频率50MHz,其他默认,然后Next,接下来几个页面一路默认Next,直到下面这里。
类似的页面有C0、C1、C2、C3、C4,是配置5个输出时钟引脚的配置的,可以设置倍频系数和分频系数,Actual Settings这一栏会显示实际调整到的配置,调整不到我们想要的时钟页面上会有错误提示的。C0、C1、C2、C3、C4这几个页面不一定要全部配置,需要用几个引脚就配置几个,配置完接下来几个页面后点Finsh就好了,ip核锁相环相关文件自动添加到工程里。其中锁相环配置接口如下:
module pll_clk (areset,inclk0,c0,c1,c2,c3,c4,locked);input areset;input inclk0;output c0;output c1;output c2;output c3;output c4;output locked;
新建一个顶层文件altpll_test.v来调用锁相环。
module altpll_test(input sys_clk,input sys_rst_n,output clk_100M,output clk_150M,output clk_100M_90du,output clk_20M,output clk_200M);wire locked;
wire rst_n;assign rst_n = sys_rst_n & locked;pll_clk u_pll_clk(.areset (~sys_rst_n),.inclk0 (sys_clk),.c0 (clk_100M),.c1 (clk_150M),.c2 (clk_100M_90du),.c3 (clk_20M),.c4 (clk_200M),.locked (locked)
);endmodule
我们FPGA的复位信号是采用低电平复位,而锁相环是高电平复位所以在锁相环调用接口那sys_rst_n取了反,rst_n作为总的复位信号,当锁相环稳定后locked为高电平,此时才能让其他模块工作,要不然锁相环频率输出没稳定。
引脚配置如下:
三、实验分析
因为手头有逻辑分析仪,所以直接对着引脚抓输出时钟了,
可以看到当频率很高时(200M),输出的时钟虽然不是很完美的方波,但是总体上来说频率是很准的。