0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

动态时钟的使用

OpenFPGA 来源:OpenFPGA 2023-07-05 09:05 次阅读

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

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

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

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

c0c858fc-1acb-11ee-962d-dac502259ad0.png

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

c0df5052-1acb-11ee-962d-dac502259ad0.png

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

c0fb9730-1acb-11ee-962d-dac502259ad0.png

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

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

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

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

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

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

#include
#include"platform.h"
#include"xil_printf.h"

#include"xclk_wiz.h"

XClk_WizClkWiz_Dynamic;
XClk_Wiz_Config*CfgPtr_Dynamic;

#defineXCLK_WIZARD_DEVICE_IDXPAR_CLK_WIZ_0_DEVICE_ID
#defineXCLK_US_WIZ_RECONFIG_OFFSET0x0000025C
#defineCLK_LOCK1

intmain()
{
init_platform();
intStatus;
print("HelloWorld

");

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();
return0;
}

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

c12269a0-1acb-11ee-962d-dac502259ad0.pngc13cb7c4-1acb-11ee-962d-dac502259ad0.png






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA设计
    +关注

    关注

    9

    文章

    425

    浏览量

    26273
  • 寄存器
    +关注

    关注

    30

    文章

    5028

    浏览量

    117723
  • CDC
    CDC
    +关注

    关注

    0

    文章

    55

    浏览量

    17671
  • AXI总线
    +关注

    关注

    0

    文章

    65

    浏览量

    14158
  • 动态时钟
    +关注

    关注

    0

    文章

    5

    浏览量

    6896

原文标题:【Vivado那些事儿】动态时钟的使用

文章出处:【微信号:Open_FPGA,微信公众号:OpenFPGA】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    动态时钟配置下的SoC低功耗管理详解

    SoC中CMOS电路功耗有:一是静态功耗,主要是由静电流、漏电流等因素造成的;二是动态功耗,主要是由电路中信号变换时造成的瞬态开路电流(crowbar current)和负载电流(load current)等因素造成的,它是SoC芯片中功耗的主要来源。
    发表于 02-12 17:31 2790次阅读
    <b class='flag-5'>动态</b><b class='flag-5'>时钟</b>配置下的SoC低功耗管理详解

    12864带字库串口怎么显示时钟

    求助大神,我买了一块12864串口的液晶,在网上找了好多例程都是并口的,串口的到底怎么写动态时钟啊。。。下面我附上我程序结构,看下怎么在这里添加动态时钟
    发表于 12-04 12:39

    LCD显示动态时钟原理是什么?

    哪位大神可以告诉我图片中的显示原理
    发表于 01-13 23:06

    TMS320C2809 SPI 动态时钟速率是多少?

    。我可不可以通过 SPIBRR 寄存器动态地更改 SPI 时钟速率,以使其在发送模式下为 25MHz,在接收模式下为 12.5MHz?(这符合从芯片的规范,因为它最高可以工作在 26MHz)。如果我能够
    发表于 05-12 09:21

    请问怎样平滑无误地实现时钟切换?

    常用的冗余时钟方案有哪些?动态时钟切换与基于DCXO的时钟切换各有什么优缺点?参考时钟和晶振之间的动态
    发表于 04-19 07:32

    动态时钟配置下的SoC低功耗管理 电子资料

    摘要:随着芯片集成度的提高,对一些功能复杂的系统芯片功耗的管理,已经引起大家越来越多的重视,如何控制好SoC的功耗将成为芯片能否成功的重要因素。本文提出一种通过动态管理时钟的策略,达到降低整个So...
    发表于 04-22 06:00

    动态时钟配置下的SoC低功耗管理

    摘要:随着芯片集成度的提高,对一些功能复杂的系统芯片功耗的管理,已
    发表于 04-16 23:32 1073次阅读
    <b class='flag-5'>动态</b><b class='flag-5'>时钟</b>配置下的SoC低功耗管理

    低功耗MCU动态时钟分析

    文结合MSP430系列微处理器,详细论述了通过控制改变MCU的时钟频率来降低功耗的设计方法。
    发表于 04-15 11:11 2020次阅读
    低功耗MCU<b class='flag-5'>动态</b><b class='flag-5'>时钟</b>分析

    低功耗MCU动态时钟分析与应用

    地影响着芯片的尺寸、成本和性能。本文结合MSP430系列微处理器,详细论述了通过控制改变MCU的时钟频率来降低功耗的设计方法。 1 功耗产生的原因 在CMOS电路中,功耗损失主要包括静态功耗损失和动态功耗损失两部分。其中静态功耗
    发表于 12-01 17:39 359次阅读
     低功耗MCU<b class='flag-5'>动态</b><b class='flag-5'>时钟</b>分析与应用

    动态时钟停止重启太快,可通过编程LPDDR2控制器解决

    在没有内存事务处理执行以及如果接收到内存请求重启时钟时,用户可通过编程 LPDDR2 控制器来停止 DRAM 时钟
    发表于 06-23 08:53 1346次阅读

    Linux时间子系统之一:动态时钟框架(CONFIG_NO_HZ、tickless)

    动态时钟正确工作之前,系统需要切换至动态时钟模式,而要切换至动态时钟模式,需要一些前提条件,最
    发表于 05-12 09:09 1835次阅读

    基于51单片机数码管动态时钟电路图原理图

    SEG数码管4个共阴极(小编用的共阳极的)、10k排阻(小编没有直接做了个)、51单片机、按钮、30p电容、12MHz晶振、10k电阻、10uf电容、插针、74ls245(小编用三极管代替了)。
    的头像 发表于 09-17 09:36 1.5w次阅读

    Flash淘汰导致Fliqlo崩溃的修复方法

    Fliqlo 是很多人都喜欢的一款屏保软件,由于酷似 MacOS 里的动态时钟屏保,点击率很高。不过很多网友发现,这两天 Fliqlo 貌似出问题了,没有了酷酷的翻页时钟,而是下面这个鬼样子!显然,这是 Flash Player
    的头像 发表于 01-25 09:24 1.2w次阅读

    蓝桥杯51单片机之数码管从点亮到动态时钟的实现【单片机开发初学者必掌握】

    51单片机最基础的是流水灯,入门看的就是数码管,本篇文章便是对数码管的各种操作。从点亮一位数码管,到程序中断的实现,最后就是完成一个动态时钟
    发表于 11-23 16:36 1次下载
    蓝桥杯51单片机之数码管从点亮到<b class='flag-5'>动态</b><b class='flag-5'>时钟</b>的实现【单片机开发初学者必掌握】

    FPGA设计中动态时钟的使用方法

    时钟是每个 FPGA 设计的核心。如果我们正确地设计时钟架构、没有 CDC 问题并正确进行约束设计,就可以减少与工具斗争的时间。
    发表于 07-12 11:17 848次阅读
    FPGA设计中<b class='flag-5'>动态</b><b class='flag-5'>时钟</b>的使用方法