ZYNQ之FPGA学习----MMCM/PLL IP核使用实验

1 MMCM/PLL IP核介绍

PLL 的英文全称是 Phase Locked Loop,即锁相环,是一种反馈控制电路。PLL 对时钟网络进行系统级的时钟管理和偏移控制,具有时钟倍频、分频、相位偏移和可编程占空比的功能

Xilinx 7 系列器件中的时钟资源包含了时钟管理单元 CMT每个 CMT 由一个 MMCM 和一个 PLL 组成。时钟管理单元 CMT 的总体框图如下图所示:

在这里插入图片描述
图片来自《领航者ZYNQ之FPGA开发指南》

MMCM/PLL 的参考时钟输入都是来自 IBUFG(CC),即具有时钟能力的 IO 输入,输出可以驱动全局时钟 BUFG 和行时钟 BUFH等

MMCM总体框图:

在这里插入图片描述
图片来自《领航者ZYNQ之FPGA开发指南》

PLL总体框图:


图片来自《领航者ZYNQ之FPGA开发指南》

MMCM 的功能是 PLL 的超集,其具有比 PLL 更强大的相移功能。MMCM 主要用于驱动器件逻辑(CLB、DSP、RAM 等)的时钟PLL 主要用于为内存接口生成所需的时钟信号,但也具有与器件逻辑的连接,因此如果需要额外的功能,它们可以用作额外的时钟资源

2 实验任务

实验将 Clocking Wizard IP 核产生的 4 个时钟 100MHz、100MHz_180deg 、50MHz、25MHz,连接到开发板的 J3 扩展口 IO 上,分别是第 29、31、33、35 号脚

实验各端口信号的管脚分配如下:

在这里插入图片描述
图片来自《领航者ZYNQ之FPGA开发指南》

3 实验设计

3.1 创建工程

如图操作,新建工程:

在这里插入图片描述

如下图,直接点击Next:

在这里插入图片描述

输入工程名字和工程路径,点击Next:

在这里插入图片描述

选择创建RTL工程,如图所示:

在这里插入图片描述

如下图,直接点击Next:

在这里插入图片描述

直接点击Next:

在这里插入图片描述

添加芯片型号,如图所示:

在这里插入图片描述

工程创建完成:

在这里插入图片描述

3.2 设计输入

添加IP核,操作如下图:

在这里插入图片描述

搜索clock,找到IP核,如图所示:

在这里插入图片描述

双击打开IP核,修改晶振频率为50MHz,如图所示:

在这里插入图片描述

依次勾选4个时钟,并进行如图所示设置:

在这里插入图片描述

只用到了锁定指示 locked 信号,其名称保持默认即可:

在这里插入图片描述

如下图,所有参数保持默认:

在这里插入图片描述

直接点击OK即可:

在这里插入图片描述

点击OK:

在这里插入图片描述

点击Generate:

在这里插入图片描述

点击OK:

在这里插入图片描述

点击OK:

在这里插入图片描述

IP 核自动生成的只读的 verilog 例化模板文件,双击打开,如图所示:

在这里插入图片描述

创建工程顶层文件,操作如图所示:

在这里插入图片描述

创建文件,输入文件名:

在这里插入图片描述

如下图,创建完成:

在这里插入图片描述

弹出如下界面,点击OK:

在这里插入图片描述

弹出如下确认界面,点击Yes:

在这里插入图片描述

双击打开,输入代码如下:

module  ip_clk_wiz(
    input               sys_clk        ,  //系统时钟 
    input               sys_rst_n      ,  //系统复位,低电平有效 
    //输出时钟 
    output              clk_100m       ,  //100Mhz 时钟频率 
    output              clk_100m_180deg,  //100Mhz 时钟频率,相位偏移 180 度 
    output              clk_50m        ,  //50Mhz 时钟频率 
    output              clk_25m           //25Mhz 时钟频率 
    );
wire        locked; 
  
//MMCM/PLL IP 核的例化 
clk_wiz_0  clk_wiz_0 
( 
  // Clock out ports 
  .clk_out_100m     (clk_100m ),         // output clk_out1_100m 
  .clk_out_100m_180 (clk_100m_180deg ),  // output clk_out2_100m_180 
  .clk_out_50m      (clk_50m ),          // output clk_out3_50m 
  .clk_out_25m      (clk_25m ),          // output clk_out4_25m 
  // Status and control signals 
  .reset             (~sys_rst_n ),        // input reset 
  .locked            (locked ),           // output locked 
  // Clock in ports 
  .clk_in1           (sys_clk)            // input clk_in1 
);       
  
endmodule 

如图所示:

在这里插入图片描述

3.3 分析与综合

对设计进行分析,操作如图所示:

在这里插入图片描述

分析后的设计,Vivado自动生成顶层原理图,如图所示:

在这里插入图片描述

对设计进行综合,操作如图所示:

在这里插入图片描述

综合完成后,弹出窗口如下,直接关闭:

在这里插入图片描述

3.4 约束输入

创建约束文件,操作如图所示:

在这里插入图片描述

创建文件,输入文件名:

在这里插入图片描述

点击完成:

在这里插入图片描述

双击打开,输入约束代码:

set_property -dict {PACKAGE_PIN U18 IOSTANDARD LVCMOS33} [get_ports sys_clk] 
set_property -dict {PACKAGE_PIN J15 IOSTANDARD LVCMOS33} [get_ports sys_rst_n] 
set_property -dict {PACKAGE_PIN B19 IOSTANDARD LVCMOS33} [get_ports clk_100m] 
set_property -dict {PACKAGE_PIN C20 IOSTANDARD LVCMOS33} [get_ports clk_100m_180deg] 
set_property -dict {PACKAGE_PIN P19 IOSTANDARD LVCMOS33} [get_ports clk_50m] 
set_property -dict {PACKAGE_PIN N18 IOSTANDARD LVCMOS33} [get_ports clk_25m]

如图所示:

在这里插入图片描述

3.5 设计实现

点击 Flow Navigator 窗口中的 Run Implementation,如图所示:

在这里插入图片描述

点击OK:

在这里插入图片描述

实现完成后,弹出如下界面,关闭即可:

在这里插入图片描述

3.6 功能仿真

创建TestBench,操作如图所示:

在这里插入图片描述

创建文件,输入文件名:

在这里插入图片描述

点击完成:

在这里插入图片描述

点击OK:

在这里插入图片描述

点击Yes:

在这里插入图片描述

双击打开,输入TestBench(激励)代码:

`timescale 1ns / 1ps 

module tb_ip_clk_wiz (); 

reg     sys_clk; 
reg     sys_rst_n; 

wire    clk_100m;       
wire    clk_100m_180deg; 
wire    clk_50m;      
wire    clk_25m;         
 
always #10 sys_clk = ~sys_clk; 

initial  begin 
    sys_clk = 1'b0; 
    sys_rst_n = 1'b0; 
    #200 
    sys_rst_n = 1'b1; 
end 
 
ip_clk_wiz u_ip_clk_wiz( 
    .sys_clk          (sys_clk         ), 
    .sys_rst_n        (sys_rst_n       ), 

    .clk_100m         (clk_100m        ), 
    .clk_100m_180deg  (clk_100m_180deg ), 
    .clk_50m          (clk_50m         ), 
    .clk_25m          (clk_25m        )   
    ); 

endmodule 

如图所示:

在这里插入图片描述

开始进行仿真,操作如下:

在这里插入图片描述

选择HDL仿真对象:

在这里插入图片描述

保存仿真文件:

在这里插入图片描述

点击Yes:

在这里插入图片描述

点击Restart,波形窗口中的当前仿真时刻点回归到0ns:

在这里插入图片描述

开始仿真:

在这里插入图片描述

仿真波形:

在这里插入图片描述

3.7 下载验证

由于疫情,一直无法去实验室,故ZYNQ开发板不在身边,该步骤内容待更新

致谢领航者ZYNQ开发板,开启FPGA学习之路!

希望本文对大家有帮助,上文若有不妥之处,欢迎指正

分享决定高度,学习拉开差距

  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鲁棒最小二乘支持向量机

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值