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

news2025/1/1 23:24:31

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.coloradmin.cn/o/2255274.html

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

相关文章

Numpy基础练习

import numpy as np 1.创建一个长度为10的一维全为0的ndarray对象,然后让第5个元素等于1 n np.zeros(10,dtypenp.int32) n[4] 12.创建一个元素从10到49的ndarray对象 n np.arrange(10,50)3.将第2题的所有元素位置反转 n[::-1]使用np.random.random创建一个10*10的ndarray对象…

Probabilistic Face Embeddings 论文阅读

Probabilistic Face Embeddings 论文阅读 Abstract1. Introduction2. Related Work3. Limitations of Deterministic Embeddings4. Probabilistic Face Embeddings4.1. Matching with PFEs4.2. Fusion with PFEs4.3. Learning 5. Experiments5.1. Experiments on Different Bas…

基于SSM框架企业人事管理系统的设计与实现

系统合集跳转 源码获取链接 一、系统环境 运行环境: 最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 IDE环境: Eclipse,Myeclipse,IDEA或者Spring Tool Suite都可以 tomcat环境: Tomcat 7.x,8.x,9.x版本均可 操作系统…

云数据库 MongoDB

MongoDB 是一个基于文档的 NoSQL 数据库,它与传统的关系型数据库不同,采用的是灵活的文档结构(类似 JSON 格式)。MongoDB 是开源的,且高度可扩展,通常用于处理大量的非结构化或半结构化数据。 云数据库 Mon…

AcWing 3496. 特殊年份

文章目录 前言代码思路 前言 写简单题没啥。反正都是要写的&#xff0c;先把能拿到的分数拿了&#xff0c;之后有机会再去啃一啃硬骨头。啃不下来就算了。 代码 #include<bits/stdc.h> using namespace std; char a1[10],a2[10],a3[10],a4[10],a5[10]; int main(){cin…

Vite+Vue3项目实战:组件化开发与通信指南

一、典型的ViteVue3项目结构 续上文成功创建Vue3项目的脚手架&#xff0c;通过visual Studio Code软件打开刚刚创建的文件夹&#xff0c;将会看到这样一个项目结构。 使用Vite构建Vue3项目时&#xff0c;项目结构通常遵循一定的组织规则&#xff0c;以保持代码的清晰和可维护性…

Html笔记()蜘蛛纸牌之卡牌吸附

目的 蜘蛛纸牌中要实现牌组的连接&#xff0c;就需要吸附功能。从效果图中可以看出我们把一张牌拖到另一张卡牌上的时候&#xff0c;它会自动吸附过去并且左对齐。 效果 代码 <!DOCTYPE html> <html><head><style>body {display: flex;justify-cont…

CDC YAML 在阿里云的最佳实践

摘要&#xff1a;本文投稿自阿里云开源大数据平台数据通道团队&#xff0c;主要介绍了 Flink CDC YAML 在实时计算Flink版的最佳实践。内容分为以下五个部分&#xff1a; CDC YAML 简介CDC YAML 核心能力CDC YAML 应用场景阿里云 Flink CDC 企业级功能十分钟在阿里云免费实现一…

在21世纪的我用C语言探寻世界本质——字符函数和字符串函数(2)

人无完人&#xff0c;持之以恒&#xff0c;方能见真我&#xff01;&#xff01;&#xff01; 共同进步&#xff01;&#xff01; 文章目录 一、strncpy函数的使用二、strncat函数的使用三、strncmp函数的使用四、strstr的使用和模拟实现五、strtok函数的使用六、strerror和pe…

Cursor vs VSCode:主要区别与优势分析

Cursor - The AI Code Editor 1. AI 集成能力 Cursor的优势 原生AI集成&#xff1a; # Cursor可以直接通过快捷键调用AI # 例如&#xff1a;按下 Ctrl K 可以直接获取代码建议 def complex_function():# 在这里&#xff0c;你可以直接询问AI如何实现功能# AI会直接在编辑器中…

利用 360 安全卫士极速版关闭电脑开机自启动软件教程

在使用电脑的过程中&#xff0c;过多的开机自启动软件会严重拖慢电脑的开机速度&#xff0c;影响我们的使用体验。本教程中简鹿办公将详细介绍如何使用 360 安全卫士极速版关闭电脑开机自启动软件&#xff0c;让您的电脑开机更加迅速流畅。 一、打开 360 安全卫士极速版 在电…

电子信息工程自动化 基于单片机的居室安全报警系统

摘要 本课题设计了基于STM32F103C6T6单片机为主控核心的居室安全报警系统。为了解决家庭居室的安全监控&#xff0c;通过温湿度芯片SHT30、烟雾传感器MQ-2、天然气传感器MQ-4来获取居室的温湿度、烟雾、天然气含量&#xff0c;使用了一个热释电传感器、菲涅耳透镜、红外传感信…

2025年的预测:从扩容到隐私的Web3全景图

2025年&#xff0c;Web3领域将迎来更多技术突破与创新应用。从扩容技术的蓬勃发展到隐私保护的「ChatGPT时刻」&#xff0c;区块链生态正在逐步完善和扩展。这篇文章基于Equilibrium的年度预测报告&#xff0c;梳理了Web3在未来一年的关键趋势&#xff0c;提供了一幅从扩容到隐…

挑战用React封装100个组件【010】

Hello&#xff0c;大家好&#xff0c;今天我挑战的组件是这样的&#xff01; 今天这个组件是一个打卡成功&#xff0c;或者获得徽章后的组件。点击按钮后&#xff0c;会弹出礼花。项目中的勋章是我通过AI生成的&#xff0c;还是很厉害的哈&#xff01;稍微抠图直接使用。最后面…

解决Windows与Ubuntu云服务器无法通过Socket(udp)通信问题

今天在写Socket通信代码的时候&#xff0c;使用云服务器自己与自己通信没有问题&#xff0c;但是当我们把客户端换为Windows系统的时候却无法发送信息到Linux当中&#xff0c;耗时一上午终于搞定了&#x1f612;。 问题&#xff1a; 如上图&#xff0c;当我在windows的客户端…

MYSQL - 索引详解

一 什么是索引&#xff1f; 实际上在上一篇介绍MYSQL的体系结构当中我们稍微提及了一点&#xff0c;在引擎层&#xff0c;我们提到不同的引擎对应的索引的实现方式&#xff0c;选择是不一样的。 简单理解&#xff0c;索引&#xff08;index&#xff09;其实就是一种帮助MYSQL高…

美联众合,24H京西宠物医院,魏燕庸医误诊

16 骚饼发布了一篇小红书笔记&#xff0c;快来看吧&#xff01; &#x1f606; 5srdmSgkXxTDw8w &#x1f606; http://xhslink.com/a/3N7dcpgca470&#xff0c;复制本条信息&#xff0c;打开【小红书】App查看精彩内容&#xff01; 魏燕 在猫咪血常规指标&#xff1a;TP总蛋白…

outlook软件配置邮箱提示“到邮件服务器的加密连接不可用”

outlook软件配置邮箱提示“到邮件服务器的加密连接不可用” 问题描述&#xff1a; outlook软件里邮箱提示“已断开”或配置邮箱时提示“到邮件服务器的加密连接不可用”。 解决方案&#xff1a; 一、更改注册表&#xff08;可先导出备份&#xff09; winr&#xff0c;输入re…

【求助】Tinymce组件异常

版本号 { "tinymce/tinymce-vue": "^3.0.1", "tinymce": "^5.10.9", "vue": "^2.6.10", }问题&#xff1a; 就是红框处点击后没有菜单出现&#xff0c;下面是正常的

Y20030002 微信+Java+Jsp+Servlet+MySQL的问卷调查小程序的设计与实现 源代码 配置文档 全套资料

问卷调查微信小程序 1.摘要2. 系统开的背景和意义3. 国内外研究现状4. 系统功能5.界面展示6.源码获取 1.摘要 摘 要&#xff1a;本文深入研究并实现了一个基于微信小程序的问卷调查系统。微信小程序问卷调查系统借助于微信小程序的便捷性和普及性&#xff0c;为用户提供了一个…