ZYNQ 入门笔记(二):动态时钟

1 概述

Clocking Wizard 可通过配置内部寄存器动态调整输出频率,配置接口可选 DRPAXI4-Lite,其中 AXI4-Lite 实际上是对 DRP 接口的封装

image-20240910111652989

1.1 DRP

通过 DRP 接口配置相较 AXI4-Lite 接口要繁琐很多,需要的读者可前往 XAPP888 查看

image-20240912163942182

1.2 AXI4-Lite

通过 AXI4-Lite 配置 Clocking Wizard 的流程如下

  1. 配置全局分频/倍频系数 DIVCLK_DIVDECLKFBOUT

    地址偏移 寄存器名 默认值 读/写 描述
    0x200 Clock Configuration Register 0 0x0101_0A00 RW Bit[7:0] = DIVCLK_DIVDE
    Bit[15:8] = CLKFBOUT_MULT
    Bit[25:16] = CLKFBOUT_FRAC

    DIVCLK_DIVDE 和 CLKFBOUT 的取值范围如下,MMCM 具有更大范围的分频系数且支持小数倍频

    DIVCLK_DIVDE CLKFBOUT
    PLL 1-56 2-64
    MMCM 1-106 2.000-64.000

    CLKFBOUT 分为整数部分 (CLKFBOUT_MULT) 和小数部分 (CLKFBOUT_FRAC),其中小数部分 (CLKFBOUT_FRAC) 仅对 MMCM (E2/E4) 原语有效,即 MMCME3/PLL 原语 不支持小数倍频

    image-20240911121221116

    CLKFBOUT 的小数部分 (CLKFBOUT_FRAC) 取值范围 0-875(对应实际倍频值 0-0.875),步进为 125(对应实际倍频值 0.125)。假设倍频系数为 8.125,则整数部分 Bit[15:8] 位应设置为 8 = 0x8,小数部分 Bit[25:16] 设置为 125 = 0x7D

  2. 配置各个通道的分频系数 CLKOUTx_DIVDE,x 取值范围 0-6

    地址偏移 寄存器名 读/写 描述
    0x208 + x * 12 Clock Configuration Register
    (x * 3 + 2)
    RW Bit[7:0] = CLKOUTx_DIVDE
    Bit[17:8] = CLKOUT0_FRAC_Divde

    例如 clkout3 的分频寄存器如下

    地址偏移 寄存器名 读/写 描述
    0x208 + 3 * 12 = 0x22C Clock Configuration Register 11 RW Bit[7:0] = DIVCLK_DIVDE

    各个通道的分频系数取值范围如下,其中 clkout0 支持小数分频,clkout1 - clkout6 仅支持整数分频

    clkout0 clkout1 - clkout6
    PLL 1-128 1-128
    MMCM 1.000-128.000 1-128

    仅 MMCM (E2/E4) 原语支持小数分频,MMCME3/PLL 不支持

  3. 置位寄存器 23 中的 LOAD/SENSADDR 比特,将上述配置加载到内部寄存器

    • LOAD/SEN:加载时钟配置寄存器数据至内部寄存器,当动态配置完成且时钟锁定时该比特被置为 0
    • SADDR:若为 0 则加载 Clocking Wizard GUI 中的默认配置(上述配置无效),若为 1 则加载上述寄存器配置
    地址偏移 寄存器名 默认值 读/写 描述
    0x25C Clock Configuration Register 23 0x0000_0000 RW Bit[0] = LOAD / SEN
    Bit[1] = SADDR

    若想恢复默认配置,可向寄存器 0x25C 写入 0x0000_0001

  4. 等待时钟锁定,对于非 VERSAL 系列可通过 SR 寄存器监测时钟状态

    地址偏移 寄存器名 默认值 读/写 描述
    0x4 Status Register (SR) 0x0000_0000 R Bit[0] = Locked

Xilinx 提供了一些库函数用来完成上述配置,其本质上是对上述寄存器读写的封装,下面介绍几个常用的函数

/**
 * @brief 查询时钟树配置
 * @param DeviceId 时钟树 ID 
 * @return 时钟树配置,若不存在则返回 NULL
 */
XClk_Wiz_Config *XClk_Wiz_LookupConfig(u32 DeviceId);
    
/**
 * @brief 初始化时钟树
 * @param InstancePtr 时钟树句柄 
 * @param Config 时钟树配置
 * @param EffectiveAddr 时钟树基地址
 * @return 时钟树初始化成功返回 XST_SUCCESS,否则返
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值