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

这篇具有很好参考价值的文章主要介绍了【Vivado那些事儿】动态时钟的使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

【Vivado那些事儿】动态时钟的使用,fpga开发

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

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

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

【Vivado那些事儿】动态时钟的使用,fpga开发

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

【Vivado那些事儿】动态时钟的使用,fpga开发

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

【Vivado那些事儿】动态时钟的使用,fpga开发

接下来我们将在 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 的功耗,从而实现降低功耗的功能。

【Vivado那些事儿】动态时钟的使用,fpga开发【Vivado那些事儿】动态时钟的使用,fpga开发

参考文献

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文章来源地址https://www.toymoban.com/news/detail-529236.html

到了这里,关于【Vivado那些事儿】动态时钟的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【FPGA异步时钟域约束方法】——Vivado时钟组约束

    【FPGA异步时钟域约束方法】——Vivado时钟组约束 在 FPGA 设计过程中,由于存在多时钟域的情况,需要采取一定的策略来处理时序约束问题。其中,异步时钟域是一种常见的设计需求,为了保证设计时序的正确性和稳定性,我们需要使用 Vivado 提供的时钟组约束方法来对异步时

    2024年02月04日
    浏览(50)
  • 当“代码农”遇上“码农”:揭秘主干开发的那些事儿

    前段时期我负责部门内部主干开发落地相关事宜,这个过程中,也真真切切的体会到了多人开发过程中,面对特性分支管理中,大家遇到的一些困扰,尤其面对敏捷迭代的开发方式,合并冲突,集成测试,代码重用等方面,都与高效两个字背离。当然,我在推进主干开发过程

    2024年02月08日
    浏览(42)
  • 国庆发生的那些事儿------编写了炫酷的HTML动态鼠标特效,超级炫酷酷酷!

    国庆假期的欢乐,当然少不了编码爱好者!假期编写了炫酷的HTML动态鼠标特效,超级炫酷酷酷!让你的页面变得更加炫酷,让你的小伙伴们羡慕的大神编码!快来看看大神是如何编写的吧! HTML动态鼠标特效 效果图 动态鼠标效果.html mouse.js 效果图 炫酷的HTML动态鼠标特效,超

    2024年02月02日
    浏览(77)
  • FPGA时钟资源与设计方法——Xilinx(Vivado)

    1.时钟资源包括:时钟布线、时钟缓冲器(BUFGBUFRBUFIO)、时钟管理器(MMCM/PLL)。 2.时钟类型有三种:全局时钟,可以驱动整个内核上的同步逻辑;局部时钟,可以驱动特定和相邻区域的逻辑;IO时钟,可以驱动某个IO的特定逻辑。 3.混合模式时钟管理器(MMCM)和数字时钟管理

    2024年02月22日
    浏览(55)
  • vivado中的FPGA时钟管理单元PLL学习记录

    FPGA中时钟管理模块(CMT)包括PLL和MMCM,用于将时钟倍频(比如输入时钟25M,我们要产生50M时钟)、分频(在不影响系统功能的前提下,较低的工作时钟,能够降低系统功耗)、改变相位偏移或占空比等。 当需要上板时,由于板上晶振时钟固定,所以其他频率的时钟产生就要用到

    2024年01月16日
    浏览(52)
  • 基于vivado(语言Verilog)的FPGA学习(5)——跨时钟处理

    慢时钟到快时钟一般都不需要处理,关键需要解决从快时钟到慢时钟的问题,因为可能会漏信号或者失真,比如: 第一种办法是开环解决方案,也就是人为设置目标信号脉宽大于1.5倍的周期。但是容易和设计要求冲突 所以第二个大方法是闭环解决方案,也就是从改善同步方

    2024年02月03日
    浏览(49)
  • Xilinx FPGA开发环境vivado使用流程

    第一步:点击Add Sources按钮 第二步:选择add or create design sources按钮,即添加设计文件 第三步:选择create file 文件新建完成后: 此时可以定义I/O端口,我们选择自己在程序中编写。 第四步:在编辑器中编写verilog程序 XDC文件里主要是完成管脚的约束,时钟的约束,以及组的约

    2024年02月03日
    浏览(62)
  • 开发那些事儿:H.264转码H.265出现崩溃并报错“missing picture”该如何解决?

    由于浏览器对H.265视频编码格式的支持并不友好,所以我们在EasyCVR平台中开发了H.265转码H.264的功能,该功能可以在不改变摄像机设置的情况下实现视频流转码播放。我们在此前的文章中和大家详细介绍过这个功能,感兴趣的用户可以戳这篇文章:《EasyCVR平台视频转码介绍:

    2023年04月13日
    浏览(35)
  • FPGA开发 -- Vivado使用VSCode编译带图文(安装 语法校验 自动缩进 )

    目录 一 前言 Vivado 版本 Vivado 2018.03 芯片 ZYNQ-XC7Z010 VSCode 安装最新版本就行 二 Vivado 设置编译方式 Tools  Text Editor 设置 VSCode 地址 ​编辑三 VSCode 插件安装 1. Verilog HDL/SystemVerilog  打开vscode,打开拓展界面  环境变量设置 2. SystemVerilog ​编辑 设置为默认缩进软件(如图所示)

    2024年04月10日
    浏览(46)
  • Vivado开发FPGA使用流程、教程 verilog(建立工程、编译文件到最终烧录的全流程)

    目录 一、概述 二、工程创建 三、添加设计文件并编译 四、线上仿真 五、布局布线 六、生成比特流文件 七、烧录 一、概述 vivado开发FPGA流程分为创建工程、添加设计文件、编译、线上仿真、布局布线(添加约束文件)、生成比特流文件、烧录等步骤,下文将按照这些步骤讲

    2024年02月09日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包