0
点赞
收藏
分享

微信扫一扫

FPGA时钟倍频,分频

芝婵 2022-08-18 阅读 84


1、 实验环境
Windows 10 64 位  Quartus (Quartus Prime 17.1) Lite Edition
黑金 FPGA 开发板(AX301 开发板、AX4010 开发板、AX1006 开发板、AX1006 开发板、
AX1025 开发板)
示波器

2、 实验原理
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 口。

FPGA时钟倍频,分频_差分


(1)创建PLL工程

(2)添加 PLL IP,如图所示,“IP Catalog”可以通过工具栏点击出来,然后搜索“pll”,双击“ALTPLL”

FPGA时钟倍频,分频_开发板_02


(3)在弹出框添加 IP 路径和顶层文件名,选择文件类型为 Verilog,注意文件名的扩展名,完成以后点击“OK”按钮。

FPGA时钟倍频,分频_差分_03


(4)在弹出 PLL 参数配置界面中配置输入时钟频率为 50Mhz,这个要和实际输入时钟频率一致,界面中我们可以看到有个 PLL 框图,标出了输入输出信号,左边为输入,右边为输出,其中“inclk0"是时钟输入源,"areset"是异步复位输入,"c0"是第一个时钟输出,“locked”是 PLL 锁定信号,表示已经稳定输出了。

FPGA时钟倍频,分频_差分_04


FPGA时钟倍频,分频_开发板_05


(5)在“Output Clocks”选项卡中配置时钟输出,使能“clk c0”,设置输出为 25Mhz

FPGA时钟倍频,分频_开发板_06


(6)使能“clk c1”,设置输出为 50Mh

FPGA时钟倍频,分频_引脚_07


(7)使能“clk c2”,设置输出为 75Mhz

FPGA时钟倍频,分频_引脚_08


(8)使能“clk c3”,设置输出为 100Mhz

FPGA时钟倍频,分频_差分_09


(9)点击“Finish”后弹出一个窗口,提示是否将 IP 添加的工程中,这里点“Yes”

FPGA时钟倍频,分频_引脚_10


输出引脚选择

在设计中,经常遇到需要将PLL的输出时钟通过FPGA的管脚输出到外部供外部器件使用,例如SDRAM的同步时钟脚,千兆以太网的GTXCLK时钟。在大多数的情况下,我们随便选择一个脚将该时钟引出,不会有任何问题,但是,在全编译的时候,会报一个15064的警告,例如在千兆以太网系统中,输出到千兆PHY的GMII接口发送时钟的PLL1的C0就会报出如下警告.(看不清可以点击图片,查看高清大图哦)

FPGA时钟倍频,分频_差分_11


先给这句话翻译一下吧:

警告(15064): “pll:pll|altpll:altpll_component|pll_altpll:auto_generated|pll1” (这是一个PLL的名字)的输出端口clk[0] 驱动"GMII_GTXC~output"脚是通过非非专用的布线路径,其抖动程度(时钟抖动概念可以某度)取决于其他设计单元的翻转速度,使用专用的PLL时钟输出脚来保证抖动的程度(尽量小)

那么好,现在的问题来了,怎样知道哪个引脚才是哪个PLL的对应的专用输出IO呢?挺简单的。

在Quartus II软件中引脚分配时候的时候,找以L标识的引脚,然后把鼠标光标移到该引脚上,就会弹出该引脚信息,在弹出的信息框中,就会标明该引脚是属于哪个PLL的CLKOUTn或者CLKOUTp,如例如,在EP4CE30中,AA3脚就是标识为L的脚,其引脚信息显示,其为PLL1的CLKOUTp管脚(PLL1_CLKOUTp),同样的,AB3引脚的标识符也为L,如果把光标移动到AB3引脚上,可以看到该引脚信息为(PLL1_CLKOUTn)。如果是使用单端时钟输出,那么就应该将PLL的这个输出分配到CLKOUTp引脚上。如果是差分时钟输出,那么就应该将PLL的时钟以差分模式分别分配到CLKOUTp和CLKOUTn上

FPGA时钟倍频,分频_引脚_12


例如上述千兆网例子中,将GMII_GTXC信号分配到AA3管脚后,报错信息就消失了。(当然,由于硬件板卡上以太网PHY芯片的GMII_GTX中信号并没有连接到该引脚,这样改,警告是没了,但是功能怕也是没咯)。要两者都能保证,只能改硬件板卡了耶。不过根据Intel官网上一些工程师的说法,这个警告其实一般可以不用太在意。

    还有一个纠结的事情就是,一个PLL虽然最多可以产生5路输出,但是每个PLL却只对应有一个专用时钟输出管脚,意思也就是,如果你用一个PLL产生多个输出,还都需要通过IO输出到外部器件,那么总会只有一时钟能享受该专用输出脚,其他的几个时钟信号还是只能走通用IO。
上述所述的情况其实非常的常见,典型的如图像采集显示系统—— CMOS摄像头采集图像存储到SDRAM中,然后再由VGA接口输出。
该系统中,需要使用PLL产生3个时钟输出到外部器件,一个CMOS_XCLK用以给CMOS摄像头提供基本参考时钟,一个SDRAM_CLK用来作为SDRAM器件的同步时钟,一个VGA_CLK用来驱动VGA数模转换器。
所以,针对这个警告,我们也就只能佛系对待了,本身影响不是十分大,要解决的代价却还比较大,因此,阿弥陀佛。

5 测量 PLL 输出波形

这里需要使用示波器来测量,如果没有示波器,再其他例程中会有 PLL 使用的例程,也能体现出 PLL 的作用。使用示波器测量 FPGA 的 IO 输出时要特别小心,如果有高电压碰到 FPGA 的 IO管脚,会损坏 FPGA 芯片。我们再在 Programmer 里用 JTAG 工具把 SOF 文件下载到 FPGA 中,接下去我们就可以用示波器来 J2 接口上 Pin3, Pin4, Pin5, Pin6 的输出时钟波形了。用示波器探头的地线连接到开发板上的地(J2 的 Pin1),示波器探头点中 J2 的 Pin3,示波器测量到的波形为 25Mhz 的方波:

FPGA时钟倍频,分频_差分_13


FPGA时钟倍频,分频_开发板_14


再用示波器探头点中 J2 的 Pin5,示波器测量到的波形为 75Mhz 的方波(因为示波器的带宽原

因,波形有一定程度的失真):

FPGA时钟倍频,分频_差分_15


举报

相关推荐

0 条评论