ZYNQ——锁相环(PLL)实验

这篇具有很好参考价值的文章主要介绍了ZYNQ——锁相环(PLL)实验。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


一、介绍

ZYNQ开发板上只有一个50MHz的时钟输入,如果要用到其他频率的时钟,就需要通过FPGA芯片内部集成的PLL(Phase Locked Loop,锁相环)来分频或者倍频实现。
一个复杂的系统往往需要多个不同频率、不同相位的时钟信号,所以FPGA芯片中的PLL的数量也是衡量FPGA芯片性能的重要指标。在FPGA的设计中,时钟系统的FPGA高速的设计相当重要,一个低抖动、低延迟的系统时钟会增加FPGA设计的成功率。
本实验通过添加时钟 IP 核实现分频和倍频。


二、添加时钟 IP

打开 IP Catalog,搜索 Clocking 找到 Clocking Wizard 双击打开。
ZYNQ——锁相环(PLL)实验
打开后弹出下面对话框,选择PLL,输入时钟设为 50MHz。
ZYNQ——锁相环(PLL)实验
MMCM(Mixed Mode Clock Manager)是混合模式时钟管理器,用于在与给定输入时钟有设定的相位和频率关系的情况,以生成不同的时钟信号。
PLL 主要用于频率综合,使用一个PLL可以从一个输入时钟信号生成多个时钟信号。
然后在输出时钟子页面下设置四个输出频率。
ZYNQ——锁相环(PLL)实验
设置完成后点击OK,弹出下面窗口,点击生成即可完成时钟 IP 核的添加。
ZYNQ——锁相环(PLL)实验


三、设计源代码

在IP Sources下找到上面添加时钟IP核的.veo文件,双击打开如下图。
ZYNQ——锁相环(PLL)实验
将其中的例化代码复制,新建一个设计源文件,粘贴到里面,最终的代码如下。

module pll(
    input clk,
    input rst,
    output clk_out1,
    output clk_out2,
    output clk_out3,
    output clk_out4
);

wire locked;

clk_wiz_0 clk_wiz_0_inst
   (
    // Clock out ports
    .clk_out1(clk_out1),     // output 200MHz
    .clk_out2(clk_out2),     // output 100MHz
    .clk_out3(clk_out3),     // output 50MHz
    .clk_out4(clk_out4),     // output 25MHz
    // Status and control signals
    .reset(~rst), // input reset
    .locked(locked),       // output locked
   // Clock in ports
    .clk_in1(clk));      // input 50MHz

endmodule

这里需要注意的是,PLL的复位是高电平有效,如果后续需要在开发板上通过按键来复位,由于按键是低电平有效的,因此上述代码中的复位信号需要反向。


四、仿真测试

本例中的仿真测试源代码如下。

`timescale 1ns / 1ps
module sim_pll();
reg clk;
reg rst;
wire clk_out1;
wire clk_out2;
wire clk_out3;
wire clk_out4;

initial
begin
    clk = 0;
    rst = 1; //PLL复位高电平有效,代码中有取反,所以这里设置为1
end

always #10 clk = ~clk;

pll uut_pll(
    .clk(clk),
    .rst(rst),
    .clk_out1(clk_out1),
    .clk_out2(clk_out2),
    .clk_out3(clk_out3),
    .clk_out4(clk_out4)
);
endmodule

仿真输出结果如下图所示。
ZYNQ——锁相环(PLL)实验
代码中的时钟是20ns一个周期,所以频率就是50MHz。通过上面的输出结果可以看到,clk_out1的频率是输入时钟频率的4倍,即200MHz,同理,clk_out2的频率是输入时钟频率的2倍,也就是100MHz,clk_out3与输入同频率,即50MHz,clk_out4的频率是输入时钟频率的0.5倍,即25MHz。
在 PLL 中改变一下时钟3和时钟4的相位,如下图。
ZYNQ——锁相环(PLL)实验
修改相位后的仿真输出结果如下图所示。
ZYNQ——锁相环(PLL)实验
再与上面相位未做变化时做比较,可以明显看到时钟3和输入时钟反向,即相移180°,时钟四相较于输入时钟相移90°。
因此,通过上述仿真可以直到,通过PLL可以生成多个不同频率、不同相位的时钟信号。


五、添加 ILA IP

这里添加五个探针,都是一位的,用于观察输出的信号。
ZYNQ——锁相环(PLL)实验


六、分配引脚

用上面的代码在板上验证时需要示波器测量,我这里通过添加ILA分析输出的结果,编写的代码如下。

module pll(
    input clk,
    input rst,
    output clk_out1,
    output clk_out2,
    output clk_out3,
    output clk_out4
);

reg in,out1,out2,out3,out4;
wire locked;
initial
begin
in = 1;
out1 = 1;
out2 = 1;
out3 = 1;
out4 = 1;
end

always@(posedge clk or negedge rst)
begin
if(!rst)
    in = 0;
else
    in = ~in;
end

clk_wiz_0 clk_wiz_0_inst
   (
    // Clock out ports
    .clk_out1(clk_out1),     // output 200MHz
    .clk_out2(clk_out2),     // output 100MHz
    .clk_out3(clk_out3),     // output 50MHz
    .clk_out4(clk_out4),     // output 25MHz
    // Status and control signals
    .reset(~rst), // input reset
    .locked(locked),       // output locked
   // Clock in ports
    .clk_in1(clk));      // input 50MHz

always@(posedge clk_out1)
begin
if(!rst)
    out1 = 0;
else
    out1 = ~out1;
end

always@(posedge clk_out2)
begin
if(!rst)
    out2 = 0;
else
    out2 = ~out2;
end

always@(posedge clk_out3)
begin
if(!rst)
    out3 = 0;
else
    out3 = ~out3;
end

always@(posedge clk_out4)
begin
if(!rst)
    out4 = 0;
else
    out4 = ~out4;
end

ila_0 ila_inst (
	.clk(clk), 

	.probe0(in),
	.probe1(out1),
	.probe2(out2),
	.probe3(out3),
	.probe4(out4)
);

endmodule

给代码中的各端口分配引脚如下图。
ZYNQ——锁相环(PLL)实验


七、板上验证

生成比特流并将其下载到ZYNQ开发板上进行验证。
ZYNQ——锁相环(PLL)实验
在集成逻辑分析仪窗口查看输出结果如下图。
ZYNQ——锁相环(PLL)实验
上面这张图是输入为50MHz的情况,out1(200MHz)和out2(100MHz)没有正确的显示。
ZYNQ——锁相环(PLL)实验
根据代码中编写的,in信号代表的是输入时钟(in信号是实际时钟频率的二分频,不过不影响和后续频率的比较,因为输出信号都是在此机制下产生的,因此倍数关系不会变),我改为了200MHz,因为50MHz在板上验证的时候,发现倍频输出的两个频率100MHz和200MHz不能正确的输出,而分频可以正常输出,所以我就改为了200MHz,只看分频的结果。
可以看到,输出out1与输入in信号同频;输出out2是输入in信号的二分频;输出out3是输入in信号的四分频;输出out4是输入in信号的八分频。这与我在PLL中预设的是一致的,但是仔细观察上面的两个图发现,输入为50MHz和200MHz时,in信号的波形是一致的,所以通过ILA这种方式查看输出不太准确。


八、示波器输出

本来想通过ILA验证一下输出结果就行了,但是又出现了一系列的问题,所以还是决定在示波器中测量一下相关引脚的频率。
输入还是设置为50MHz,输出时钟设置如下。
ZYNQ——锁相环(PLL)实验
在Vivado中生成比特流文件,将其下载到开发板,然后根据引脚的分配测量相关引脚的频率。
示波器中200MHz引脚的输出如下图所示。
ZYNQ——锁相环(PLL)实验
示波器中100MHz引脚的输出如下图所示。
ZYNQ——锁相环(PLL)实验
示波器中50MHz引脚的输出如下图所示。
ZYNQ——锁相环(PLL)实验
示波器中25MHz引脚的输出如下图所示。
ZYNQ——锁相环(PLL)实验
通过上面各图的结果可知,频率能够按照代码中设置的那样进行输出。不过输出的波形不太像方波,反而更像正弦波,这是因为示波器带宽不太够,可以参考文章示波器的带宽,一般示波器带宽是所测信号频率的5倍时,方波就比较明显了,上面的四张图随着频率的减小,波形也越接近正弦波。不过波形不是我们这里关心的重点,频率输出是正确的。


九、问题汇总

这个实验在仿真的过程中很顺利,基本没碰到什么问题,但在板上验证时遇到了一些麻烦,现列出如下。
1、运行时报错了,如下图所示。
ZYNQ——锁相环(PLL)实验
报错信息如下。

[DRC REQP-1712] Input clock driver: Unsupported PLLE2_ADV connectivity. The signal clk_wiz_0_inst/inst/clk_in1 on the clk_wiz_0_inst/inst/plle2_adv_inst/CLKIN1 pin of clk_wiz_0_inst/inst/plle2_adv_inst with COMPENSATION mode ZHOLD must be driven by a clock capable IO.

解决办法:回到PLL IP核这里,将Source改为Global buffer。
ZYNQ——锁相环(PLL)实验
2、输入时钟频率直接通过探针无法观看,输出是一条线,因此,我在代码里引入了reg变量,通过时钟的上升沿让值反转来表示该频率,实际的频率应当是该种表示方法表示下的二倍,不过这里只是验证一下各输出频率与输入频率的关系,因此,这个差异不影响最终的结果判定。
3、在板上验证时发现倍频的波形输出不正确而分频正确,也不知道是什么原因造成的,我这里直接将输入频率改为最大,只验证了分频的正确性。
4、还有一个不算是问题吧,就是一个简单的操作,默认的引脚分配窗口打开就是下图所示的这样。
ZYNQ——锁相环(PLL)实验
可以看到 Name 这一列是空的,在分配引脚时端口对应代码中的哪个端口虽然可以通过 I/O Ports Properties 得知,但总是觉得哪里不太对劲。是的,确实不太对劲,你用鼠标把 Name 对应的这一列往宽拉一点就发现“新大陆”了!
ZYNQ——锁相环(PLL)实验


以上就是ZYNQ——锁相环(PLL)实验的全部内容了,自己总是会在实验中碰到这样那样奇怪的问题,发现问题和寻找解决办法的过程虽然有点痛苦,甚至有点绝望,但是这些都是必经之路!
参考资料:
ZYNQ 开发平台 FPGA 教程 AX7020文章来源地址https://www.toymoban.com/news/detail-499307.html

到了这里,关于ZYNQ——锁相环(PLL)实验的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • FPGA时钟分频倍频之PLL锁相环

    1、使用vivado创建一个工程 2、点击IP Catalog,搜索Clock Wizard,然后双击,本次实验使用PLL进行分频倍频,不动态改变相位,故选择PLL选项,并将时钟频率改变为50MHz,此处我们使用50MHz晶振作为时钟源 3、点击Output Clocks,配置产生的时钟频率,其他选项保持默认,点击ok,生pll ip核

    2024年02月12日
    浏览(39)
  • stm32 滑膜观测器+PLL 锁相环 FOC 无感无刷电机控制

            上一期为大家介绍了滑膜观测器正反切的应用案例,收到不少小伙伴的反馈是否有PLL的案例,大概看了一下网上的资料,讲理论的很多,能转化成源码的几乎没有。前半年工作和家里的事情都比较多,一拖再拖,终于在6月将源码调试好了,在这里跟大家分享一下调试

    2024年02月10日
    浏览(52)
  • 锁相环工作原理

    锁相环:Phase Locked Loop (相位,锁,环路) 简称 PLL。 f1 是输入频率,f2是输出频率,并且反馈给鉴相器。 压控振荡器 压控振荡器的全称是:Voltage Controlled Oscillator ( 电压,控制,振荡器),简称 VCO。 输出的频率是受电压控制的, VCO 输出的频率可以达到几十GHZ,那么为什么VC

    2023年04月08日
    浏览(43)
  • 电能变换--锁相环

    锁相环,顾名思义,基本功能是实现交流信号相位的跟踪和锁定。在交流变换器中,为了实现变换器有功功率和无功功率的输出的可控,需要实时获取交流侧的电压相位信息。锁相环的性能也是直接影响到变换器的稳定性。 从实现方式上,分为软件锁相环和硬件锁相环,从应

    2024年02月13日
    浏览(39)
  • 锁相环技术知识

    闭环锁相环技术的主要方案有: 类型 描述 1、乘法鉴相器锁相环 该锁相环是硬件锁相设计的基础,其基本原理是计算输入信号与输出信号的乘积,经过滤波器和鉴相器输出后,得出输入输出信号的相位差,经过反馈使输出信号锁定输入信号,实现锁相功能。但是这种锁相环

    2024年02月15日
    浏览(41)
  • 1.12 锁相环基础知识

    锁相环(PLL)电路存在于各种高频应用中,从简单的时钟净化电路到用于高性能无线电通信链路的本振(LO),以及矢量网络分析仪(VNA)中的超快开关频率合成器。 锁相环是一种 反馈系统 ,其中电压控制振荡器和相位比较器相互连接,使得振荡器频率(相位)可以准确跟踪施加的频率

    2024年02月07日
    浏览(30)
  • 全数字锁相环基本原理讲解

          锁相环是一个典型的负反馈系统。振荡器 负责产生振荡时钟信号,振荡器的输出时钟信号被反馈环路采样后与输入参考时钟信号 经由相位检测器进行比较,生成相位误差信号,经过滤波器滤波后,反馈给振荡器对输 出时钟信号的频率进行调节。低通滤波器主要是对相

    2024年02月12日
    浏览(37)
  • 锁相环技术,单边带信号,信号的调制

    什么是锁相环技术? 用在接收机中,因为在相干解调的时候,需要接收机产生一个和发射机同频同相的载波频率,这时候就要对发射机处的载波频率进行精确的追踪,锁相环技术就是这样精准跟踪载波频率的一种技术。 锁相环(PLL)是一种数字信号处理技术,用于将输入的

    2024年02月02日
    浏览(40)
  • 数字锁相环的原理与FPGA实现

    数字锁相环是锁相环电路的全数字实现。锁相环电路能够实现对输入信号的相位进行跟踪,进而在噪声中提取纯净的有用信号。 数字鉴相器由乘法器和低通滤波器构成,又称为正弦形式的鉴相器。数字鉴相器有一重要指标——鉴相增益 K d K_d K d ​ ,又可表示为鉴相器输出的

    2024年02月03日
    浏览(42)
  • 实验二 基于FPGA的分频器的设计(基本任务:设计一个分频器,输入信号50MHz,输出信号频率分别为1KHz、500Hz及1Hz。拓展任务1:用按键或开关控制蜂鸣器的响与不响。拓展任务2:用按键或开)

    1. 实验目的: (1) 掌握QuartusⅡ软件的层次型设计方法; (2) 掌握元件封装及调用方法; (3) 熟悉FPGA实验平台,掌握引脚锁定及下载。 2. 实验任务: (1) 基本任务:设计一个分频器,输入信号50MHz,输出信号频率分别为1KHz、500Hz及1Hz。 (2) 拓展任务1:用按键或开关

    2024年02月06日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包