名称:PLL实验设计Verilog代码Quartus AX301开发板
软件:Quartus
语言:Verilog
代码功能:
PLL 技术非常复杂,主要实现的功能就是倍频分频,实现的原理这里不做讲解,FPGA 内的PLL 都是一个硬件模块(硬核),是 FPGA 中非常重要的资源。
Cyclone IV 和 Cyclone 10 LP 最多能提供了 4 个 PLL(EP4CE6 和 EP4CE10 只有 2 个 PLL)为设备提供强大的时钟管理和外部系统时钟管理及高速的 IO 通信, 通过时钟输入, 产生不同频率和不同相位的时钟信号供系统使用。
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
本代码已在AX301开发板验证,AX301开发板如下,其他开发板可以修改管脚适配:
设计文档:
1 文档简介
很多初学者看到板上只有一个 50Mhz 时钟输入的时候都产生疑惑,时钟怎么才 50Mhz?如果要工作在 100Mhz、150Mhz 怎么办?在很多 FPGA 芯片内部都集成了 PLL,其他厂商可能不叫 PLL,但是也有类似的功能模块,通过 PLL 可以倍频分频,产生其他很多时钟。本实验通过调用 PLL ipcore 来学习 PLL 的使用、Quartus 的 IP core 使用方法。
2 实验环境
- Windows 10 64 位
- Quartus (Quartus Prime 17.1) Lite Edition
- 黑金 FPGA 开发板(AX301 开发板、AX4010 开发板、AX1006 开发板、AX1006 开发板、AX1025 开发板)
- 示波器
3 实验原理
PLL 技术非常复杂,主要实现的功能就是倍频分频,实现的原理这里不做讲解,FPGA 内的PLL 都是一个硬件模块(硬核),是 FPGA 中非常重要的资源。
Cyclone IV 和 Cyclone 10 LP 最多能提供了 4 个 PLL(EP4CE6 和 EP4CE10 只有 2 个 PLL)为设备提供强大的时钟管理和外部系统时钟管理及高速的 IO 通信, 通过时钟输入, 产生不同频率和不同相位的时钟信号供系统使用。
PLL 的时钟输入可以是 PLL 所在的 Bank 的时钟输入管脚 戒者其他 PLL 的输出,FPGA 内部产生 的信号不能驱动 PLL。Cyclone IV PLL 产生的时钟可以为单端时钟信号与差分时钟信号, 可以通过 GCLK 网络直接驱动 FPGA 外部的 IO 口。
Cyclone IV 和 Cyclone 10 LP 的单个 PLL 最大能提供 5 路输出,但是这 5 路输出是有一定的关系 的,从 PLL 的结构图可以看出,5 路输出不同频率取决于 C0、C1、C2、C3、C4 的分频比。
本实验将 PLL 输出的不同时钟通过 FPGA 的普通 IO 输出,然后用示波器测量输出频率。
4 建立工程
(1)建立一个“pll_test”工程
(2)添加 PLL IP,如图所示,“IP Catalog”可以通过工具栏点击出来,然后搜索“pll”,双击“ALTPLL”
(3)在弹出框添加 IP 路径和顶层文件名,选择文件类型为 Verilog,注意文件名的扩展名,完成以后点击“OK”按钮。
(4)在弹出 PLL 参数配置界面中配置输入时钟频率为 50Mhz,这个要和实际输入时钟频率一致,界面中我们可以看到有个 PLL 框图,标出了输入输出信号,左边为输入,右边为输出,其中“inclk0"是时钟输入源,"areset"是异步复位输入,"c0"是第一个时钟输出,“locked”是 PLL 锁定信号,表示已经稳定输出了。
(5)在“Output Clocks”选项卡中配置时钟输出,使能“clk c0”,设置输出为 25Mhz
(6)使能“clk c1”,设置输出为 50Mh
(7)使能“clk c2”,设置输出为 75Mhz
(8)使能“clk c3”,设置输出为 100Mhz
(9)点击“Finish”后弹出一个窗口,提示是否将 IP 添加的工程中,这里点“Yes”
(10)新建一个 pll_test.v 的 Verilog 文件,例化上面的 PLL ip
`timescale 1ns / 1ps
module pll_test(
input clk, input rst_n, output clkout1, output clkout2, output clkout3,
hdlcode.com 8 / 12
hdlcode
output clkout4
);
wire locked;
pll pll_inst
(
// Clock in ports
.inclk0(clk), // IN 50Mhz
// Clock out ports
.c0(clkout1), // OUT 25Mhz
.c1(clkout2), // OUT 50Mhz
.c2(clkout3), // OUT 75Mhz
.c3(clkout4), // OUT 100Mhz
// Status and control signals
.areset(~rst_n), // IN .locked(locked) //The signal of PLL normal operation
); // OUT
endmodule
注意:例化的目的是在上一级模块中调用例化的模块完成代码功能,在Verilog 里例化信号的 格式如下:模块名必须和要例化的模块名一致,包括信号名也必须一致,模块不模块之间的连接 信号不能相互冲突,否则会产生编译错误。
(11) 分配管脚并编译生成 sof 文件(其它开发板的管脚分配参考对应的工程)
AX301、AX4010 管脚分配
5 测量 PLL 输出波形
这里需要使用示波器来测量,如果没有示波器,再其他例程中会有 PLL 使用的例程,也能体现出 PLL 的作用。使用示波器测量 FPGA 的 IO 输出时要特别小心,如果有高电压碰到 FPGA 的 IO管脚,会损坏 FPGA 芯片。
我们再在 Programmer 里用 JTAG 工具把 SOF 文件下载到 FPGA 中,接下去我们就可以用示波器来 J2 接口上 Pin3, Pin4, Pin5, Pin6 的输出时钟波形了。
用示波器探头的地线连接到开发板上的地(J2 的 Pin1),示波器探头点中 J2 的 Pin3,示波器测量到的波形为 25Mhz 的方波:
再用示波器探头点中 J2 的 Pin4,示波器测量到的波形为 50Mhz 的方波:
再用示波器探头点中 J2 的 Pin5,示波器测量到的波形为 75Mhz 的方波(因为示波器的带宽原 因,波形有一定程度的失真):
再用示波器探头点中 J2 的 Pin6,示波器测量到的波形为 100Mhz 的方波(因为示波器的带宽原 因,波形有一定程度的失真):
部分代码展示:
////////////////////////////////////////////////////////////////////////////////// // // // // // Author: meisq // // msq@qq.com // // ALINX(shanghai) Technology Co.,Ltd // // heijin // // WEB: http://www.alinx.cn/ // // BBS: http://www.heijin.org/ // // // ////////////////////////////////////////////////////////////////////////////////// // // // Copyright (c) 2017,ALINX(shanghai) Technology Co.,Ltd // // All rights reserved // // // // This source file may be used and distributed without restriction provided // // that this copyright statement is not removed from the file and that any // // derivative work contains the original copyright notice and the associated // // disclaimer. // // // ////////////////////////////////////////////////////////////////////////////////// //================================================================================ // Revision History: // Date By Revision Change Description //-------------------------------------------------------------------------------- // 2017/7/19 meisq 1.0 Original //*******************************************************************************/
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=1343
1013