FPGA实战篇(IP核之MMCM/PLL实验)

1.MMCM/PLL IP 核简介

        锁相环作为一种反馈控制电路,其特点是利用外部输入的参考信号控制环路内部震荡信号的频率和相位。因为锁相环可以实现输出信号频率对输入信号频率的自动跟踪,所以锁相环通常用于闭环跟踪电路。
        锁相环在工作的过程中,当输出信号的频率与输入信号的频率相等时,输出电压与输入电压保持固定的相 位差值,即输出电压与输入电压的相位被锁住,这就是锁相环名称的由来。Xilinx 7 系列器件中具有时钟管理单元 CMT 时钟资源, xc7z020 芯片内部有 4 CMT xc7z010 芯片内部有 2 CMT ,为设备提供强大的系统时钟管理以及高速 I/O 通信的能力。
        在本实验中,读者可以简单地理解为:外部时钟连接到具有时钟能力的输入引脚 CCIO Clock-Capable Input),进入 MMCM/PLL ,产生不同频率和不同相位的时钟信号,然后驱动全局时钟资源 BUFG 。但是要 进行更深入的 FPGA 开发,就必须理解器件的时钟资源架构。
2.实验任务
        本节实验任务是使用 Zynq 开发板输出 4 个不同时钟频率或相位的时钟,并在 Vivado 中进行仿真以验证结果,最后生成比特流文件并将下载到开发板上,使用示波器来测量时钟的频率。
3.硬件设计
        本章实验将 Clocking Wizard IP 核产生的 4 个时钟 100MHz 100MHz_180deg 50MHz 25MHz ,连接到开发板的 J3 扩展口 IO 上,分别是第 9 10 11 12 号脚。扩展口原理图如下图所示:
        本实验中,各端口信号的管脚分配如下表所示:
4.程序设计
        我们首先创建一个空的工程,工程名为“ip_clk_wiz ”。接下来添加 PLL IP 核。在 Vivado 软件的左侧 “Flow Navigator ”栏中单击“ IP Catalog ”,“ IP Catalog ”按钮以及单击后弹出的“ IP Catalog ”窗口如下图所示。

        打开“IP Catalog” 窗口后,在搜索栏中输入 “clock” 关键字,可以看到 Vivado 已经自动查找出了与关键 字匹配的 IP 核名称,如下图所示。

        我们双击“FPGA Features and Design ”→“ Clocking ”下的“ Clocking Wizard ”,弹出 “Customize IP” 窗口,如下图所示。

        接下来就是配置 IP 核的时钟参数。最上面的“ Component Name ”一栏设置该 IP 元件的名称,这里保持默认即可。在第一个“Clocking Options” 选项卡中, “Primitive” 选项用于选择是使用 MMCM 还是 PLL 来输出不同的时钟,对于我们的本次实验来说,MMCM PLL 都可以完成,这里我们可以保持默认选择 MMCM
        需要修改的是最下面的“Input Clock Information” 一栏,把 “Primary” 时钟的输入频率修改为我们开发板的核心板上的晶振频率 50MHz ,其他的设置保持默认即可,如下图所示。
        接下来切换至“Output Clocks ”选项卡,在“ Output Clock ”选项卡中,勾选前 4 个时钟,并且将其“ Output Freq(MHz)”分别设置为 100 100 50 25 ,注意,第 2 100MHz 时钟的相移“ Phase(degrees) ”一栏要设置为 180 。其他设置保持默认即可,如下图所示。
        “Port Renaming ”选项卡主要是对一些控制信号的重命名。这里我们只用到了锁定指示 locked 信号, 其名称保持默认即可,如下图所示。

        “MMCM Setting ”选项卡展示了对整个 MMCM/PLL 的最终配置参数,这些参数都是根据之前用户输入的时钟需求由 Vivado 来自动配置, Vivado 已经对参数进行了最优的配置,在绝大多数情况下都不需要用户对它们进行更改,也不建议更改,所以这一步保持默认即可,如下图所示。
        最后的“Summary ”选项卡是对前面所有配置的一个总结,在这里我们直接点击“ OK ”按钮即可,如下图所示。
        接着就弹出了“Genarate Output Products ”窗口,我们直接点击“ Generate ”即可,如下图所示。

        之后我们就可以在“Design Run ”窗口的“ Out-of-Context Module Runs ”一栏中出现了该 IP 核对应的 run“ clk_wiz_0_synth_1 ”,其综合过程独立于顶层设计的综合,所以在我们可以看到其正在综合,如下图所示。

        在其Out-of-Context 综合的过程中,我们就可以开始编写代码了。首先打开 IP 核的例化模板,在“ Source ” 窗口中的“IP Sources ”选项卡中,依次用鼠标单击展开“ IP -“clk_wiz_0”- Instantitation Template ”,我 们可以看到“clk_wiz.veo ”文件,它是由 IP 核自动生成的只读的 verilog 例化模板文件,双击就可以打开它, 在例化时钟 IP 核模块的时钟,可以直接从这里拷贝,如下图所示。
        我们接下来创建一个 verilog 源文件,其名称为 ip_clk_wiz.v ,代码如下:
1 module ip_clk_wiz(
2 input sys_clk , //系统时钟
3 input sys_rst_n , //系统复位,低电平有效
4 //输出时钟
5 output clk_100m , //100Mhz 时钟频率
6 output clk_100m_180deg, //100Mhz 时钟频率,相位偏移 180 度
7 output clk_50m , //50Mhz 时钟频率
8 output clk_25m //25Mhz 时钟频率
9 );
10
11 //*****************************************************
12 //** main code
13 //*****************************************************
14
15 wire locked;
16
17 //MMCM/PLL IP 核的例化
18 clk_wiz_0 clk_wiz_0
19 (
20 // Clock out ports
21 .clk_out1_100m (clk_100m), // output clk_out1_100m
22 .clk_out2_100m_180 (clk_100m_180deg), // output clk_out2_100m_180
23 .clk_out3_50m (clk_50m), // output clk_out3_50m
24 .clk_out4_25m (clk_25m), // output clk_out4_25m
25 // Status and control signals
26 .reset (~sys_rst_n), // input reset
27 .locked (locked), // output locked
28 // Clock in ports
29 .clk_in1 (sys_clk) // input clk_in1
30 ); 
31
32 endmodule
        程序中例化了 clk_wiz_0 ,把 FPGA 的系统时钟 50Mhz 连接到 clk_wiz_0 clk_in1 ,系统复位信号连接到 clk_wiz_0 reset ,由于时钟 IP 核默认是高电平复位,而输入的系统复位信号 sys_rst_n 是低电平复位, 因此要对系统复位信号进行取反。clk_wiz_0 输出的 4 个时钟信号直接连接到顶层端口的四个时钟输出信号。
        我们接下来先对代码进行仿真,TestBench 代码如下:
1 `timescale 1ns / 1ps
2 
3 module tb_ip_clk_wiz();
4 
5 reg sys_clk;
6 reg sys_rst_n;
7 
8 wire clk_100m; 
9 wire clk_100m_180deg;
10 wire clk_50m; 
11 wire clk_25m; 
12
13 always #10 sys_clk = ~sys_clk;
14
15 initial begin
16 sys_clk = 1'b0;
17 sys_rst_n = 1'b0;
18 #200
19 sys_rst_n = 1'b1;
20 end
21
22 ip_clk_wiz u_ip_clk_wiz(
23 .sys_clk (sys_clk ),
24 .sys_rst_n (sys_rst_n ),
25
26 .clk_100m (clk_100m ),
27 .clk_100m_180deg (clk_100m_180deg),
28 .clk_50m (clk_50m ),
29 .clk_25m (clk_25m ) 
30 );
31
32 endmodule
        对模块进行仿真的方法这里不再赘述,仿真后得到的波形如下图所示:
        由上图可知,locked 信号拉高之后,锁相环开始输出 4 个稳定的时钟。 clk_100m clk_100m_180deg 周期都为 10ns ,即时钟频率都为 100Mhz ,但两个时钟相位偏移 180 度,所以这两个时钟刚好反相; clk_50m 周期为 20ns ,时钟频率为 50Mhz clk_25m 周期为 40ns ,时钟频率为 25Mhz 。也就是说,我们创建的锁相环从仿真结果上来看是正确的。
5.下载验证
        编译工程并生成比特流.bit 文件后,此时把将下载器一端连接电脑,另一端与开发板上的 JTAG 下载口连接,连接电源线,并打开开发板的电源开关。
        点击 Vivado 左侧“ Flow Navigator ”窗口最下面的“ Open Hardware Manager ”,如果此时 Vivado 软件识别到下载器,则点击“Hardware” 窗口中“ Progam Device ”下载程序,在弹出的界面中选择“ Program ” 下载程序。 程序下载完成后,接下来我们使用示波器测量开发板 J3 扩展口的第 9 10 11 12 号脚。示波器测试 依次为 U20(100MHz )、T20( 100MHz_180 )、P19( 50MHz )和 N18( 25MHz )。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于单片机的农田智能驱鼠装置(论文+源码)

1总体设计 在基于单片机的农田智能驱鼠装置设计中,分为四个模块电源模块、感应模块、控制模块和音频模块。电源模块为整个系统提供5v的直流电源,支撑驱鼠器的整体运作。热释电红外感应模块用来感应鼠类的入侵。控制模块则采用STC89C52单片机编程进行时钟…

React路由react-router-dom鉴权以及网页标题

开源地址:GitHub - remix-run/react-router: Declarative routing for React react 路由有三种写法:传统组件法、useRoutes 法、data Router 法 官方推荐的写法是 data Router这里用 data Routerroute 的 handle 类似 vue-router 中的 metahandle 属性…

【Unity高级】如何动态调整物体透明度

本文介绍了如何设置及动态调整物体的透明度。 一、手动设置的方法 我们先来看下如何手动设置物体的透明度。 物体的透明与否是通过材质来设置的。只有我们把具有透明度的材质指给物体的渲染器(Render),物体就被设置成相应的透明度了。 看一…

在Ubuntu 22.04上搭建Kubernetes集群

Kubernetes 简介 什么是 Kubernetes? Kubernetes(常简称为 K8s)是一个强大的开源平台,用于管理容器化应用程序的部署、扩展和运行。它最初由 Google 设计并捐赠给 Cloud Native Computing Foundation(CNCF&#xff0…

安卓录屏软件添加隐藏按钮

again.xml <?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.com/apk/res-auto"xmlns:tools"http://schemas.an…

批量导出图片,按商品货号命名图片名-Excel易用宝

我们部门有这样一份商品信息表&#xff0c;包含着商品名称&#xff0c;货号和商品对应的图片&#xff0c;现在需要将这些商品图片导出&#xff0c;并且以对应的货号命名图片发给客户。 如果通过在图片上右键“另存为图片”&#xff0c;这样一张一张图片处理效率也太低了。 Exc…

关于SpringBoot项目创建后构建总是失败的问题

第一个问题&#xff1a;IDEA创建项目总是失败 原因&#xff1a;创建项目的时候默认使用的是https://start.spring.io&#xff0c;这个是一个外国网站&#xff0c;众所周知的就是国内访问总是出现不稳定的现象&#xff0c;这就是导致项目创建失败的最终原因。 解决方法&#x…

彻底理解布隆过滤器怎么解决缓存穿透问题

一.应用场景 实际业务中使用Redis&#xff0c;都是先通过用户插入数据到Mysql中&#xff0c;然后更新缓存到Redis&#xff0c;下一次用户再查询该数据的时候就可以通过Redis来进行查询。 先看下图&#xff0c;是假设的一个用户查询的场景&#xff1a; 首先用户查询的时候会去缓…

Leetcode数学部分笔记

Leetcode数学部分笔记 1. 回文数2. 加一3. 阶乘后的零4. x 的平方根5. Pow(x, n) 1. 回文数 给你一个整数 x &#xff0c;如果 x 是一个回文整数&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 回文数 是指正序&#xff08;从左向右&#xff09;和倒序&…

大数据技术之新能源汽车数仓【附学习资源】

第一章 新能源汽车数仓的背景与意义 1.1 新能源汽车产业的爆发式增长 新能源汽车产业近年来呈现出爆发式增长&#xff0c;主要得益于全球范围内对环境保护和能源转型的高度重视。随着全球多个国家和地区对碳排放进行严格控制&#xff0c;政策层面的支持为新能源汽车的普及提供…

Nature:ChatGPT助力学术写作的方法

随着生成式AI技术的飞速发展&#xff0c;它在科研中的潜力也逐渐被探索和实践。在Nature最近的一篇文章里&#xff0c;Dritjon Gruda 副教授提到&#xff0c;生成式AI不仅在论文写作和编辑中扮演着越来越重要的角色&#xff0c;帮助科研人员提高工作效率&#xff0c;还在同行评…

分布式 分布式事务 总结

前言 相关系列 《分布式 & 目录》《分布式 & 分布式事务 & 总结》《分布式 & 分布式事务 & 问题》 分布式事务 所谓分布式事务是指操作范围笼罩多个不同节点的事务。例如对于订单节点&库存节点而言&#xff0c;一次完整的交易需要同时调动两个节…

UnityShaderLab 实现黑白着色器效果

实现思路&#xff1a;取屏幕像素的RGB值&#xff0c;将三个通道的值相加&#xff0c;除以一个大于值使颜色值在0-1内&#xff0c;再乘上一个强度值调节黑白强度。 在URP中实现需要开启Opaque Texture ShaderGraph实现&#xff1a; ShaderLab实现&#xff1a; Shader "Bl…

机器人的动力学前馈控制

机器人前馈技术可加快伺服驱动器内部的误差收敛速度&#xff0c;进而改善机器人的动态响应特性&#xff0c;解决机器人在运动过程中的抖动问题&#xff0c;提升机器人系统的精度和效率。 对于关节型机器人而言&#xff0c;在理想的刚性连接下&#xff0c;若给定每个关节所需要的…

Java基础——多线程基础

一、线程介绍 程序&#xff1a;是为完成特定任务&#xff0c;用某种语言编写的一组指令的集合。简单地说&#xff0c;就是我们写的代码进程&#xff1a; 进程是指运行中的程序&#xff0c;比如我们使用qq&#xff0c;就启动了一个进程。操作系统会为该进程分配内存空间。当我们…

在本地运行大语言模型

1&#xff0c;打开下面网站下载&#xff0c;软件 lm studio 2&#xff0c; 设置模型下载路径 3&#xff0c;没有魔法条件的人&#xff0c;去镜像网站下载模型的镜像文件 、 4&#xff0c;

JUC:Synchronized和锁升级

1. 面试题 谈谈你对Synchronized的理解Sychronized的锁升级你聊聊Synchronized实现原理&#xff0c;monitor对象什么时候生成的&#xff1f;知道monitor的monitorenter和monitorexit这两个是怎么保证同步的嘛&#xff1f;或者说这两个操作计算机底层是如何执行的偏向锁和轻量级…

网络知识:IP数据报知识详解

目录 一、IP数据报概念 二、IPV4数据报报头组成 三、IPV6数据报报头组成 今天给大家分享IP数据库相关的知识,希望对大家进一步了解IP协议提供一些帮助! 一、IP数据报概念 TCP/IP协议的网际层接收到传输层传递过来的数据单元,封装成向下(OSI模型的数据链路层、TCP/IP协…

消息中间件-Kafka2-3.9.0源码构建

消息中间件-Kafka2-3.9.0源码构建 1、软件环境 JDK Version 1.8Scala Version 2.12.0Kafka-3.9.0 源码包 下载地址&#xff1a;https://downloads.apache.org/kafka/3.9.0/kafka-3.9.0-src.tgzGradle Version > 8.8Apache Zookeeper 3.7.0 2、源码编译 打开源码根目录修改…

详解:HTTP/HTTPS协议

HTTP协议 一.HTTP是什么 HTTP&#xff0c;全称超文本传输协议&#xff0c;是一种用于分布式、协作式、超媒体信息系统的应用层协议。HTTP往往是基于传输层TCP协议实现的&#xff0c;采用的一问一答的模式&#xff0c;即发一个请求&#xff0c;返回一个响应。 Q&#xff1a;什…