动态时钟频率
本文基于Xilinx FPGA 的clocking wizard IP进行动态调整时钟频率
clocking wizard简介
动态调整时钟频率输出,需要在 IP 界面勾选 Dynamic Reconfig
选项。这时候 IP 会多出来一个 AXI-lite 的控制接口。
动态调整频率原理
首先看一下PLL、MMCM 的原理如下图。
其中主要是 M、 D、 O 三个参数影响了输出的频率,关系式如下图公式 3-2 所示。
所以综合来看,就是如何修改这三个参数,就可以达到动态调整时钟频率的目的。
调整参数 D
在手册中查找 CLKOUT0 输出参数 D 的寄存器地址为0x200
,默认值为0x01010A00
,其中 Bit[7:0]表示的就是参数 D 的值。所以配置 D 的值为 1 ,表示分频为 1 。
调整参数 M
在手册中查找 CLKOUT0 输出参数 M 的寄存器地址为0x200
,默认值为0x01010A00
,其中 Bit[15:8]表示的就是参数 M 整数部分值。所以配置 M 的值为 A ,相当于倍频 10 倍。小数部分为 Bit[25:16] 表示参数 M 的小数部分。
调整参数 O
在手册中查找 CLKOUT0 输出参数 O 的寄存器地址为0x208
,默认值为0x0004000A
,其中 Bit[7:0]表示的就是参数 O 整数部分值。所以配置 M 的值为 A ,相当于分频 10 倍。小数部分为 Bit[17:8] 表示参数 O 的小数部分。
相位参数
在手册中查找 CLKOUT0 相位寄存器地址为0x20C
,默认值为0x00000000
,表示输出相位为 0 。
占空比参数
在手册中查找 CLKOUT0 相位寄存器地址为0x210
,默认值为0x0000C350
,表示占空比为 50% 。
仿真实验
注:这些寄存器配置修改必须在 locked 信号拉高之后进行修改,修改完后等待 locked 重新拉高,表示修改成功。
本次实验输入时钟频率Fclk_IN = 100M ,进行修改如下
- M = 10
- D = 1
- O = 11
配置寄存器如下图所示
动态调整结果可以看到输出为 11ns
参考链接
- pg065
https://www.xilinx.com/support/documentation/ip_documentation/clk_wiz/v6_0/pg065-clk-wiz.pdf
- ug472
https://www.xilinx.com/support/documentation/user_guides/ug472_7Series_Clocking.pdf
- GraphQL介绍&使用nestjs构建GraphQL查询服务
- 使用auth_request模块实现nginx端鉴权控制
- Docker学习之Docker镜像基本使用
- Docker学习之Centos7下安装
- Impala的Short-Circuit Reads
- js各种继承方式汇总
- Cloudera Navigator异常分析
- lodash源码分析之数组的差集
- lodash源码分析之baseFindIndex中的运算符优先级
- 在Ubuntu中安装Hadoop
- 如何编译及使用hive-testbench生成Hive基准测试数据
- lodash源码分析之缓存使用方式的进一步封装
- 文件包含与注入利用总结
- lodash源码分析之缓存方式的选择
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法