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

news2025/8/3 22:02:01

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学习之路!

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/15876.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kata3.0.0 x LifseaOS x 龙蜥内核三管齐下!带你体验最新的安全容器之旅

文/云原生SIG 北京时间 2022 年 10 月 10 日,袋鼠 RunD 安全容器(Rust Kata runtime Dragonball VMM)正式作为安全容器上游 Kata Container 3.0.0 release 版本的重要特性发布。 龙蜥体验包 安全容器作为龙蜥云原生重要项目,我…

EEG微状态预测并发fMRI动态功能连接状态

前言 静息态功能磁共振成像(rs-fMRI)测量的大脑功能连接在多个时间尺度上有所不同,并确定了循环的动态功能连接(dFC)状态。这些发现与不同的认知和病理状态有关,有可能作为疾病的生物标志物,但它们的神经基础仍然存在争议。在静息态EEG研究中…

docker常见问题汇总(持续更新中)

Docker pull 时报错如下: -bash-4.2# docker pull hub.yj.com/test/dep_client:test Error response from daemon: Get http://hub.yj.com/v2/: dial tcp: lookup hub.yj.com on 218.2.135.1:53: server misbehaving如下图: 原因解析: 本地…

【算法系列】非线性最小二乘-高斯牛顿法

系列文章目录 【算法系列】卡尔曼滤波算法 【算法系列】非线性最小二乘求解-直接求解法 【算法系列】非线性最小二乘求解-梯度下降法 【算法系列】非线性最小二乘-高斯牛顿法 文章目录 系列文章 文章目录 前言 一、牛顿法 二、高斯-牛顿法 1.由牛顿法推导 2.直接展…

深度学习入门(四十三)计算机视觉——锚框

深度学习入门(四十三)计算机视觉——锚框前言计算机视觉——锚框课件锚框IoU交并比赋予锚框符号使用非极大值抑制(NMS)输出总结教材1 生成多个锚框2 交并比(IoU)3 在训练数据中标注锚框3.1 将真实边界框分配…

UE5笔记【二】添加实体和材质。后处理体积影响全局和局部。

材质 将平面赋予材质,显示不同的样式和纹理。 除了拖拽方式:还可以下拉列表的方式选择。 添加实例对象 可以添加引擎中关于room的内容,使得上一篇中所讲内容,更加直白查看。比如光影。 构造一个场景。 后处理体积 用途&#xff…

显示控件——半圆进度条

该控件是指定一个图标(半圆条),通过沿圆弧方向滑动实现视觉调节的效果。滑动范围对应变量地址数据,显示位置通过变量设定。可以配合“半圆进度条触控”触摸控件进行设置。 位置信息:控件在工程页面区域的位置 “X”“Y…

基于Java Web的汽车租赁系统的设计与实现

项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下,你想解决的问…

本地环境OPC数据读写模拟[Python3+OpenOPC+MatrikonOPCSimulation]

在win10本地环境下,通过python3和OpenOPC包与MatrikonOPCServer进行读写交互,模拟工厂数据读写 Python3 第一个坑,64位的Python似乎是和后面的OpenOPC不兼容,装了调用会出类似"OpenOPC.OPCError: Dispatch: 没有注册类"…

全球电子商务交易预计将在2022年假日季增长15%,消费者情绪乐观

• 感恩节到网购星期一之间的电子商务交易预计将增长10%• 新冠疫情限制措施解除后,旅游和票务行业持续保持强劲增长• 受通货膨胀与库存有限的共同影响,2022年的零售销售与2021年相比略显疲软• 欺诈者瞄准电子产品、旅游和活动等高价值品类&#xff0c…

Libuv实现帧率控制

Libuv实现帧率控制 概念 服务端帧率控制,保证在一段固定的时间内执行完所有事情(包括网络I/O等),如果有空余时间,那么我们Sleep等待一段时间。如果超时我们需要追帧。 注意点 只要在程序中只有一个进程的情况下控制服…

pytorch MNIST 手写数字识别 + 使用自己的测试集 + 数据增强后再训练

文章目录1. MNIST 手写数字识别2. 聚焦数据集扩充后的模型训练3. pytorch 手写数字识别基本实现3.1完整代码及 MNIST 测试集测试结果3.1.1代码3.1.2 MNIST 测试集测试结果3.2 使用自己的图片进行测试3.2.1 测试图片预处理代码3.2.2 测试图片结果4. 数据增强4.1 手动读取 MNIST …

11月更新!一口气上线20+新功能,3D架构拓扑图更具趣味性

优维EasyOps全平台又双叒叕上新功能了! 不瞒各位小伙伴 写今天这篇文章时 我的手一直在抖 是激动的,这次要介绍的更新太牛了 尽管鹿小U已经 非常认真地研究过这20多个新功能 仍然无法用文字描述出 这次功能批量上新 「厉害程度」的十分之一 啥也…

【软件工程】实验1

文章目录实验一 软件需求分析实验目的实验内容「软件开发文档管理」软件开发过程涉及的文档软件开发阶段开发过程文档「软件开发文档管理」需求获取1. 功能需求2. 非功能需求「软件开发文档管理」需求分析、需求规格说明1. 需求概述1.1 功能需求1.2 非功能需求2. 用例模型2.1 用…

中证1000期指上市带来的交易机会

数量技术宅团队在CSDN学院推出了量化投资系列课程 欢迎有兴趣系统学习量化投资的同学,点击下方链接报名: 量化投资速成营(入门课程) Python股票量化投资 Python期货量化投资 Python数字货币量化投资 C语言CTP期货交易系统开…

玩转UE4/UE5动画系统:UE5的运行时(动态)重定向治好了我的精神内耗

本文参考了油管UP主:AngelV的教程 前言 UE5中新的动画资源的(静态)重定向方法比UE4好用很多,但这种静态的重定向方式依然很让人头疼,因为我们需要对于每一个需要的动画资源为每一个目标骨架生成一套资源备份。尽管个过…

我参加NVIDIA Sky Hackathon 环境安装(编程环境)

强烈建议使用conda 第一个坑: 不使用 conda 进行 Python 环境管理直接使用本地的 Python 环境容易导致混乱 conda 安装 指定下载源 export DL_SITEhttps://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda 使用 wget 进行下载 wget -c $DL_SITE/Miniconda3-py…

德鲁克《卓有成效的管理者》学习笔记-掌握时间的学习和实践

针对德鲁克先生《卓有成效的管理者》书中提到了掌握时间部分学习的一些记录以及在日常工作中的实践。 1、为什么学习掌握时间 时间是最特殊的资源,为什么说它特殊呢?他租不到、顾不到、买不到,更不能以其他任何手段来获得。时间的供给丝毫没…

CC++指针实训(国防科大)

第1关:去掉字符串首尾空格 200 任务要求参考答案评论285 任务描述相关知识 定义指针变量指针的性质编程要求测试说明任务描述 本关任务:文本匹配的时候经常会因为空格个数的不同而匹配失败,现在要求你编写程序对输入的字符串进行处理&…

JUnit 5 单元测试教程

点赞再看,动力无限。 微信搜「 程序猿阿朗 」。 本文 Github.com/niumoo/JavaNotes 和 未读代码博客 已经收录,有很多知识点和系列文章。 在软件开发过程中,我们通常都需要测试自己的代码运行是否正常,可能对一个函数进行简单测试…