【Vivado那些事儿】动态时钟的使用

news2024/9/20 1:32:47

时钟是每个 FPGA 设计的核心。如果我们正确地设计时钟架构、没有 CDC 问题并正确进行约束设计,就可以减少与工具斗争的时间。

b646ca422cfb4b174ff7fb0fc61ce79e.png

但对于某些应用,我们希望能够更改某些IP中的时钟频率。其中一个例子是在图像处理管道中,输出分辨率可以动态变化,从而需要改变像素时钟。

众所周知,我们可以在 Zynq SoC 和 Zynq MPSoC 中使用结构时钟并在运行时更改结构时钟的频率。但是,如果我们在 Zynq 或 ZYNQ MPSoC 中使用 FPGA 或 PL,我们仍然可以使用动态配置的时钟向导在运行时更改频率。

动态配置时钟允许我们使用 AXI 接口在运行时更改时钟频率。

6abf841aaee9dd74e90c246abd6bf3f8.png

为了创建一个简单的示例,我们将实例化PS并将动态配置时钟IP连接到主 AXI 接口。我们将输出时钟连接到 IO 引脚,以便我们可以对其进行观察并查看频率的变化。

24fcf6936adb1f199c2f3d7f626da15c.png

上面的时钟是我们打算使用的最大频率,这样可以确保时序约束和时序性能正确。下图是我们这次demo的最终设计。

e621f136876f01a8ea9f2be5418bb64e.png

接下来我们将在 Vitis 中开发软件,并且将在设计中的 IP 下看到相关驱动及文档。

开发这个IP的驱动和其他 AXI Lite 接口一样,需要对IP寄存器空间进行写入和读取。

要更改时钟频率输出,我们有两种选择。如果只生成一个时钟,我们可以使用名为 SetRate 的函数。该函数将通过AXI Lite总线传递到IP中,IP会给出我们所需的频率输出,并计算必要的分频器、乘法器和相位参数实现所需的输出频率。

然而,如果我们有多个时钟,那么我们需要分别计算这些寄存器的值并单独更新时钟寄存器(每个时钟有两个寄存器)。

这里有个注意点就是在进行时钟更改前最好等待IP锁定到之前的频率后再进行新操作。

更改频率的代码还是比较简单的,如下:

#include <stdio.h>
#include "platform.h"
#include "xil_printf.h"

#include "xclk_wiz.h"

XClk_Wiz ClkWiz_Dynamic;
XClk_Wiz_Config *CfgPtr_Dynamic;

#define XCLK_WIZARD_DEVICE_ID  XPAR_CLK_WIZ_0_DEVICE_ID
#define XCLK_US_WIZ_RECONFIG_OFFSET 0x0000025C
#define CLK_LOCK   1

int main()
{
    init_platform();
    int Status;
    print("Hello World\n\r");

    CfgPtr_Dynamic = XClk_Wiz_LookupConfig(XCLK_WIZARD_DEVICE_ID);
 XClk_Wiz_CfgInitialize(&ClkWiz_Dynamic, CfgPtr_Dynamic,     
                        CfgPtr_Dynamic->BaseAddr);

 while(1){
  XClk_Wiz_WriteReg(CfgPtr_Dynamic->BaseAddr, 
                    XCLK_WIZ_REG25_OFFSET, 0);
  XClk_Wiz_SetRate(&ClkWiz_Dynamic, 10);
  XClk_Wiz_WriteReg(CfgPtr_Dynamic->BaseAddr, 
                     XCLK_US_WIZ_RECONFIG_OFFSET,   
                    (XCLK_WIZ_RECONFIG_LOAD | 
                    XCLK_WIZ_RECONFIG_SADDR));
  Status = XClk_Wiz_WaitForLock(&ClkWiz_Dynamic);
  usleep(10000000);
  XClk_Wiz_WriteReg(CfgPtr_Dynamic->BaseAddr, 
                    XCLK_WIZ_REG25_OFFSET, 0);
  XClk_Wiz_SetRate(&ClkWiz_Dynamic, 14);
  XClk_Wiz_WriteReg(CfgPtr_Dynamic->BaseAddr, 
             XCLK_US_WIZ_RECONFIG_OFFSET, 
            (XCLK_WIZ_RECONFIG_LOAD |    
            XCLK_WIZ_RECONFIG_SADDR));
  Status = XClk_Wiz_WaitForLock(&ClkWiz_Dynamic);
  usleep(10000000);
 }
    cleanup_platform();
    return 0;
}

当然,我们也可以使用类似的方法,通过将时钟频率降低来实现不同功耗模式下 FPGA 的功耗,从而实现降低功耗的功能。

ca043de72b7959b9122aa1db93a51568.png 1afadd6e969c1b67308f6b00fe120d1e.png

参考文献

https://blog.csdn.net/qq_31799983/article/details/109407898

https://www.adiuvoengineering.com/post/microzed-chronicles-dynamic-clocking

https://docs.xilinx.com/r/en-US/pg065-clk-wiz

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

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

相关文章

单片机电机控制编程操作系统环境编程与裸机编程的比较

随着单片机技术的不断发展&#xff0c;单片机在电机控制领域中的应用越来越广泛。在单片机编程中&#xff0c;有两种主要的方法&#xff1a;操作系统编程和裸机编程。本文将比较这两种方法在电机控制中的优缺点。 操作系统编程 操作系统编程需要使用操作系统&#xff0c;例如F…

Python GUI编程利器:Tkinker中的滚动条和框架(8)

小朋友们好&#xff0c;大朋友们好&#xff01; 我是猫妹&#xff0c;一名爱上Python编程的小学生。 和猫妹学Python&#xff0c;一起趣味学编程。 今日目标 实现下面效果&#xff1a; 滚动条(Scrollbar类) 滚动条用于调整一些控件的可见范围&#xff0c;根据方向分为水平滚…

[LeetCode]2178.拆分成最多数目的偶整数之和

2178.拆分成最多数目的偶整数之和 题目 思路 首先&#xff0c;奇数是不可拆分成多数目的偶整数&#xff0c;这种情况返回一个空数组。 累加2以组合一个最多不同数目偶整数&#xff0c;当拆分的最后一个偶整数&#xff0c;总和大于原数时&#xff0c;将差值累加到最后一位偶整…

【算法设计与分析】工作分配问题——设计一个算法,对于给定的工作费用,计算最佳工作分配方案,使总费用达到最小。

目录 一、问题描述二、问题分析三、运行结果四、源代码 一、问题描述 设有n件工作分配给n个人。将工作i分配给第j个人所需要的费用是。试设计一个算法&#xff0c;为每个人都分配1件不同的工作&#xff0c;并使总费用达到最小。设计一个算法&#xff0c;对于给定的工作费用&…

LeetCode_BFS_中等_1466.重新规划路线

目录 1.题目2.思路3.代码实现&#xff08;Java&#xff09; 1.题目 n 座城市&#xff0c;从 0 到 n-1 编号&#xff0c;其间共有 n-1 条路线。因此&#xff0c;要想在两座不同城市之间旅行只有唯一一条路线可供选择&#xff08;路线网形成一颗树&#xff09;。去年&#xff0c…

Java Maven安装及环境配置教程

一、安装 1、安装包 apache-maven-3.6.3 安装包下载地址 2、下载安装包然后直接解压就行。 注意&#xff1a;文件的位置路径不能有中文。 二、环境配置 1、用户变量 双击Path&#xff0c;点击新建&#xff0c;将如下复制进去&#xff0c;然后点击确定&#xff1a; %MAVEN_HO…

轻量服务器域名无法解析怎么排查?

​  轻量服务器域名无法解析是指在DNS(域名系统)解析过程中&#xff0c;无法将域名转换为相应的IP地址。DNS可帮助该域名与代表该网站在互联网上的位置的数字 IP 地址相关联&#xff0c;帮助我们找到并连接到目标网站。因此&#xff0c;当我们无法解析域名时&#xff0c;就无…

CENTOS7-安装部署httpd或apache

1、在Centos中安装apache服务器 yum install httpd* -y 2、启动apache&#xff0c;可以查看运行状态&#xff0c;如图&#xff1a; 启动命令&#xff1a;systemctl status httpd.service 有active running说明已经安装好&#xff0c;并且可以正常启动。 3、设置主目录&…

SpringBoot结合Filter的登录认证退出流程(介绍后端要做的事)

交互流程 简略图 注意&#xff1a; 点击访问进入应用后前端要获取url中的openId存放在所有请求的请求头里&#xff0c;用于后端在拦截器中判断是否有openId和调用中台接口判断openId是否有效 后端 后端主要做三件事&#xff1a; 搞个拦截器用于判断是否有openId和调用中台接…

手机远程连接登录Windows桌面

RDClient远程连接&#xff0c;手机远程电脑&#xff0c;手机远程Windows&#xff0c;手机连接Windows 因为工作需求&#xff0c;笔记本不经常带在身上&#xff0c;有时候需要用手机远程连接电脑操作一下 安卓手机和IPhone手机都可以&#xff0c;用的是微软官方的Remote Deskt…

【Java】Stack和Queue的使用

文章目录 一、栈1.1 什么是栈1.2 栈的模拟实现 二、Java中的Stack2.1 构造方法2.2 操作方法2.3 应用场景 三、队列3.1 什么是队列3.2 队列的模拟实现 四、Java中的Queue4.1 实例化方法4.2 操作方法4.3 应用场景 一、栈 1.1 什么是栈 栈&#xff08;Stack&#xff09;是一种常…

VSCODE VUE3 element-ui plaus 环境搭建

目录 一、VUE 1、安装VUE 2、创建项目 二、Element Plus 1、在项目目录中安装 Element Plus&#xff0c;执行 2、引入element 三、vscode 中运行 1、打开项目文件夹 2、点击debug&#xff0c;运行 1&#xff09;、首次lanch chrome时 2&#xff09;、lanch node.js …

【python】pycharm配置Github Copilot

1.获取github的ip import socket from urllib.parse import urlparse# 通过URL获取目标服务器IP和端口号 def get_server_ip_and_port(url):# 解析URL获取域名和端口号parsed_url urlparse(url)domain parsed_url.netlocport parsed_url.port or 80try:# 进行域名解析&…

基于matlab使用光学字符识别技术识别文本(附源码)

一、前言 此示例演示如何使用计算机视觉工具箱中的函数执行光学字符识别。 二、实例 识别图像中的文本在许多计算机视觉应用程序中非常有用&#xff0c;例如图像搜索、文档分析和机器人导航。该函数提供了一种将文本识别功能添加到各种应用程序的简单方法。 函数返回已识别的…

VS2022配置OpenCV4.7.0

1、下载并解压OpenCV OpenCV与VC版本的对应关系信息&#xff1a;OpenCV解压后在\opencv\build\x64文件夹下可以看到如下文件夹&#xff1a; 其中&#xff1a;vc16 Visual Studio 2019 2、配置环境变量 双击Path进入【编辑环境变量】界面&#xff0c;新建—>浏览将opencv\b…

半导体自动化专用风机风棒的特点

半导体自动化专用离子风机是一种专门用于半导体工业领域的设备。它采用了离子风技术&#xff0c;通过产生带电离子来达到除尘、静电消除、表面清洁等功能。 半导体生产过程中&#xff0c;电子元器件的制造需要保持高度的清洁和静电控制。离子风机通过释放正负电离子对空气中的…

剑指 Offer 41: 数据流中的中位数

这道题用的优先队列非常好&#xff0c;一边维护一个左半边&#xff0c;一边维护一个右半边。&#xff08;注意&#xff1a;较大的一半不用改变规则&#xff0c;因为出都是默认出小的&#xff09;。然后每次和小的队列开头的数比较&#xff08;即偏小那个队列的最大值&#xff0…

【广州华锐互动】医疗健康数字孪生可视化系统有哪些功能?

医疗健康数字孪生可视化系统是一种将现实世界中的医疗设备、医院环境和患者数据与虚拟世界中的数字化副本相连接的技术。通过收集和分析实时数据&#xff0c;医疗健康数字孪生可视化系统可以帮助医疗机构提高运行效率、降低成本、优化资源分配&#xff0c;并为患者提供更好的诊…

2023工业自动化发展十大趋势

凭借着多年的行业经验和各种数据的汇总,推断出了在未来几年中,制药、服务和农业行业可能会在使用协作机器人技术方面处于重要地位,并且预估工业机器人自动化行业会有以下十大趋势变化。 1、对智能传感器的需求增加 质量检查是所有行业的关键组成部分,分析从食品到电话保护…

Spring MVC相关注解运用 —— 下篇

目录 一、ResponseBody、RestController 1.1. JSP页面 1.2 放行静态资源 1.3 编写实体类 1.4 控制器方法 1.5 添加依赖 1.6 测试结果 1.7 RestController 二、静态资源映射 2.1 配置静态资源筛查器 2.2 配置静态资源资源映射器 2.3 配置默认Servlet处理静态资源 三…