• 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 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    如图所示:

    在这里插入图片描述

    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]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    如图所示:

    在这里插入图片描述

    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 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    如图所示:

    在这里插入图片描述

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

    在这里插入图片描述

    选择HDL仿真对象:

    在这里插入图片描述

    保存仿真文件:

    在这里插入图片描述

    点击Yes:

    在这里插入图片描述

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

    在这里插入图片描述

    开始仿真:

    在这里插入图片描述

    仿真波形:

    在这里插入图片描述

    3.7 下载验证

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

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

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

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

  • 相关阅读:
    linux的Java运行
    C++ if 语句
    ROG幻15电脑开机自动安装软件怎么U盘重装系统
    OPTEE:TA镜像的签名和加载-下(六)
    【LeetCode】Day188-分汤
    易点易动设备管理系统:提升企业备件管理和维修效率的智能解决方案
    【快速上手系列】内网穿透(natapp)的快速上手和简单使用教程
    IDEA中如何给Java代码添加args参数
    Virtual ******* Network (V*N) Lab
    详细说明static关键字,各种使用场景以及作用
  • 原文地址:https://blog.csdn.net/qq_42078934/article/details/127899590