FPGA原理与结构——时钟IP核的使用与测试

一、前言

        本文介绍xilinx的时钟IP核 Clocking Wizard v6.0的具体使用与测试过程,在学习一个IP核的使用之前,首先需要对于IP核的具体参数和原理有一个基本的了解,具体可以参考:

FPGA原理与结构——时钟IP核原理学习https://blog.csdn.net/apple_53311083/article/details/132497850

二、时钟 IP核定制

1、 Clocking Wizard IP核

step1 打开vivado工程,点击左侧栏中的IP Catalog

c1987bb2bcf249be8d0ca5f847744a0c.jpeg

step2 在搜索栏搜索clock,找到Clocking Wizard IP核

59d23b62704e4d3096330aab9426221f.jpeg

 

2、 IP核定制

step3 Clocking Options 界面定制

a4f377439f914673af7e7e2ab201908a.jpeg

① Component Name” :用于设置该IP 核的名称 

② “Clock Monitor” :用来监控时钟是否停止、故障和频率变化。一般不用;

③ “Primitive” :用于选择是使用MMCM 还是PLL 来完成时钟需求,一般来说,MMCM 和PLL 都可以完成,这里保持默认选择MMCM。

④ “Clocking Features” :

  • Frequency Synthesis : 表示频率综合,只有勾上才能修改想要的时钟频率。
  • Phase Alignment : 相位对齐,勾选后输出时钟与输入时钟的相位是一致的
  • Dynamic Reconfig : 可以通过AXI接口对时钟IP核进行动态配置,这里不适用
  • Safe Clock Startup : 安全启动,在时钟稳定之前不会有输出
  • Minimize Power :最小化功率,缺点是可能会影响性能
  • Spread Specturm : 频谱扩展
  • Dynamic Phase Shift : 动态可调相位

"Jitter Optimization " :

  • Balanced : 平衡模式(默认选项),性能和功耗处于平衡状态
  • Minimize Output Jitter : 输出时钟抖动最小化模式,功耗会增大,相位可能恶化
  • Maximize Input Jitter filtering : 最大化输入时钟过滤,适用于输入时钟的抖动较大的情况,但是可能会导致输出时钟的抖动过大

⑤ “Input Clock Information”:选项中,把“Primary”时钟的输入频率修改为开发板的核心板上的晶振频率,source根据时钟源类型选择,单端时钟或者差分时钟,这里我们进行的是仿真测试,设置的输入时钟频率为100MHZ 。

step4 Output Clocks 界面定制

9c198b8aeeff446abbb1eca29800e2d6.jpege7b700d9984f4796a6f7a531528ca6d2.jpeg 

① : 这里我们就可以设置我们所需要的输出时钟频率和相位了,这里我们设置了4个输出时钟,clk_out1_100m:100MHZ时钟,clk_out2_100m_180:100MHZ时钟,与clk_out1_100m不同的是,其有着180°的相位差,clk_out3_50m:50MHZ时钟,clk_out3_25m:25MHZ时钟。

② : 勾选不同信号的输出顺序,使用的前提是要在之前的界面勾选上Safe Clock Startup,这里就不适用

③ :Clocking Feedback :时钟反馈,只有在之前的界面勾选了Phase Alignment才可以使用

④ : 一些额外的引脚可选项,这里着重介绍一下locked :置位时表示PLL输出信号有效,平常使用PLL一定要等该信号有效

step5 Port Renaming 界面定制

4520e199a7064379940f5849a51b6421.jpeg

        输出端口信号重命名,一般不用修改。

step6 MMCM Settings 界面定制

1e0e097455c4412da9ec977d8872233b.jpeg

        “MMCM Setting”选项卡展示了对整个MMCM/PLL 的最终配置参数,这些参数都是根据之前用户输入的时钟需求由Vivado 来自动配置的,Vivado 已经对参数进行了最优的配置,在绝大多数情况下都不需要用户对它们进行更改,也不建议更改,所以这一步保持默认即可,如下图所示。 

step7 Summary

166adb2cf76741d1b44cd17b5d1a999d.jpeg

        最后的“Summary”选项卡是对前面所有配置的一个总结,在这里直接点击“OK”按钮即可。

3、IP核测试

        首先编写顶层文件,完成对于IP核的例化

module clk_top(input sys_clk,input rst,output clk_100m,output clk_100m_180,output clk_50m,output clk_25m,output locked);clk_gen clk_gen_u1(// Clock out ports.clk_out1_100m(clk_100m),     // output clk_out1_100m.clk_out2_100m_180(clk_100m_180),     // output clk_out2_100m_180.clk_out3_50m(clk_50m),     // output clk_out3_50m.clk_out4_25m(clk_25m),     // output clk_out4_25m// Status and control signals.reset(rst), // input reset.locked(locked),       // output locked// Clock in ports.clk_in1(sys_clk));      // input clk_in1endmodule

        接下来进行测试文件编写:

`timescale 1ns / 1ps
module tb_clk_top();reg sys_clk;reg rst;wire locked;wire clk_100m,clk_100m_180,clk_50m,clk_25m;always #5 sys_clk = ~sys_clk;initial beginsys_clk <= 1'b0;rst = 0;#15 rst = 1;#10 rst = 0;endclk_top clk_top_u1(.sys_clk (sys_clk),.rst     (rst),.clk_100m(clk_100m),.clk_100m_180(clk_100m_180),.clk_50m(clk_50m),.clk_25m(clk_25m),.locked(locked));endmodule

 4、测试结果

68caa45801104af28592046b4394d335.jpeg

         可以看到,经过一段时间后,时钟输出趋于稳定,实现稳定的分频时钟输出,与我们预期的结果是一致的。

三、总结

         时钟IP核在我们的FPGA设计过程中是非常常用的,一般也是我们推荐使用的一种设计方式,它可以给我们提供不同频率,不同相位的时钟输出。

 

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

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

相关文章

用于非线性多载波卫星信道的多输入多输出符号速率信号数字预失真器DPD(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Docker使用及本地Yolov5打包教程

1. Docker的安装 注意&#xff1a;官方也提供了直接Pull Yolov5的渠道&#xff1a; docker pull ultralytics/yolov5 详见&#xff1a;https://hub.docker.com/r/ultralytics/yolov5 --------------------------------------------------以下正文------------------------…

SOC 2.0安全运营中心

SOC&#xff0c;安全运营中心&#xff0c;为取得其最佳效果&#xff0c;以及真正最小化网络风险&#xff0c;需要全员就位&#xff0c;让安全成为每个人的责任。 早在几年前&#xff0c;企业就开始创建SOC来集中化威胁与漏洞的监视和响应。第一代SOC的目标&#xff0c;是集中管…

黑马JVM总结(五)

&#xff08;1&#xff09;方法区 它是所有java虚拟机 线程共享的区&#xff0c;存储着跟类的结构相关的信息&#xff0c;类的成员变量&#xff0c;方法数据&#xff0c;成员方法&#xff0c;构造器方法&#xff0c;特殊方法&#xff08;类的构造器&#xff09; 方法区在虚拟机…

Linux命令200例:write用于向特定用户或特定终端发送信息

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;CSDN领军人物&#xff0c;全栈领域优质创作者✌。CSDN专家博主&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0…

如何提取视频中的音频?几个步骤轻松提取

在现今社交媒体的风靡下&#xff0c;许多人都会使用手机录制视频来记录生活中的美好瞬间。有时候&#xff0c;我们也会想要提取视频中的音频&#xff0c;例如将自己的演讲录音分发给听众。本文将会介绍如何在手机上提取视频中的音频以及需要注意的事项。 使用应用程序 首先&am…

如何使用bat脚本启动指定目录下的jar包

士别三日&#xff0c;当刮目相待。——《三国志》 为了将一个java程序封装成一个简单易用的小工具&#xff0c;使用bat脚本启动jar包。 在txt文档中&#xff0c;键入&#xff1a; echo off java -jar %~dp0core\demo.jar 注意&#xff1a; 1、其中“core”是文件夹的名称&am…

更换Eclipse的JDK版本

点击window->Preferences 选择Installed JREs 点击 Add 按钮&#xff0c; 选择Standard VM, 点击 Next。然后选择自己安装的JDK路径

基于改进人工蜂群算法的 K 均值聚类算法(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

行业追踪,2023-09-11

自动复盘 2023-09-11 凡所有相&#xff0c;皆是虚妄。若见诸相非相&#xff0c;即见如来。 k 线图是最好的老师&#xff0c;每天持续发布板块的rps排名&#xff0c;追踪板块&#xff0c;板块来开仓&#xff0c;板块去清仓&#xff0c;丢弃自以为是的想法&#xff0c;板块去留让…

(高阶)Redis 7 第10讲 单线程 与 多线程 入门篇

面试题 1.Redis 是单线程还是多线程 最早的版本3.x是单线程。 版本4.x,严格意义不是单线程。负责处理客户端请求的线程是单线程,开始加入异步删除。 6.0.x版本后明确使用全新的多线程来解决问题 2.说说IO多路复用3.Redis 为什么快IO多路复用+epoll函…

【2023年11月第四版教材】第12章《质量管理》(第二部分)

第12章《质量管理》&#xff08;第二部分&#xff09; 4 规划质量管理4.1 数据收集★★★4.2 数据分析★★★4.3 数据表现★★★4.4 质量管理计划★★★4.5 质量测量指标★★★ &#xff08;22下35&#xff09; 4 规划质量管理 组过程输入工具和技术输出计划1.规划质量管理1.项…

学习 [Spring MVC] 的JSR 303和拦截器,提高开发效率

&#x1f3ac; 艳艳耶✌️&#xff1a;个人主页 &#x1f525; 个人专栏 &#xff1a;《推荐】Spring与Mybatis集成整合》 ⛺️ 生活的理想&#xff0c;不断更新自己 ! 1.JSR303 1.1JSR303是什么 JSR 303是Java规范请求&#xff08;Java Specification Request&#xff09;…

索引失效有哪些?

在工作中&#xff0c;如果我们想要提高一条语句的查询速度&#xff0c;通常都会想对字段建立索引。 但是索引不是万能的。建立了索引&#xff0c;并不意味着任何查询语句都能走索引扫描。 稍不注意&#xff0c;可能查询语句就会导致索引失效&#xff0c;从而走了全表扫描&…

Python 变量的定义和数据类型的转换

变量 变量的定义 基本语法&#xff1a;变量名 值 变量名是给对象贴一个用于访问的标签&#xff0c;给对象绑定名字的过程也称为赋值&#xff0c;赋值符号 “” 变量名自定义&#xff0c;要满足标识符命名规则。 Python中&#xff0c;不需要事先声明变量名及其类型&#xff…

localStorage是什么?有哪些特点?

localStorage的主要作用是本地存储&#xff0c;它可以将数据按照键值对的方式保存在浏览器中&#xff0c;直到用户或者脚本主动清除数据&#xff0c;否则该数据会一直存在。也就是说&#xff0c;使用了本地存储的数据将被持久化保存。 localStorage与sessionStorage的区别是存…

春秋云镜 CVE-2015-9331

春秋云镜 CVE-2015-9331 wordpress插件 WordPress WP All Import plugin v3.2.3 任意文件上传 靶标介绍 wordpress插件 WordPress WP All Import plugin v3.2.3 存在任意文件上传&#xff0c;可以上传shell。 启动场景 漏洞利用 exp #/usr/local/bin/python3 # -*-coding:…

IDEA中debug调试模拟时显示不全(不显示null)的解决

IDEA中debug调试模拟时显示不全&#xff08;不显示null&#xff09;的解决 1、在IDEA中找到File&#xff08;文件&#xff09;->Settings&#xff08;设置&#xff09; 2、依次找到以下内容进行设置&#xff08;原版、汉化版&#xff09;&#xff1a; 打开Build, Executio…

taro vue3 ts nut-ui 项目

# 使用 npm 安装 CLI $ npm install -g tarojs/cli 查看 Taro 全部版本信息​ 可以使用 npm info 查看 Taro 版本信息&#xff0c;在这里你可以看到当前最新版本 npm info tarojs/cli 项目初始化​ 使用命令创建模板项目&#xff1a; taro init 项目名 taro init myApp …

使用Puppeteer进行游戏数据可视化

导语 Puppeteer是一个基于Node.js的库&#xff0c;可以用来控制Chrome或Chromium浏览器&#xff0c;实现网页操作、截图、测试、爬虫等功能。本文将介绍如何使用Puppeteer进行游戏数据的爬取和可视化&#xff0c;以《英雄联盟》为例。 概述 《英雄联盟》是一款由Riot Games开…