Zynq7000中CPU时钟的编程模型

Zynq-7000 CPU时钟编程模型是一种灵活且强大的机制,允许用户根据应用需求精确配置和调整CPU时钟频率。该模型基于一系列可编程的寄存器和控制器,通过调整这些寄存器的值,用户可以实现CPU时钟的分频、倍频以及时钟源的选择。
在Zynq-7000中,CPU时钟编程模型主要涉及到以下几个关键组件:

一、Branch时钟生成器

时钟控制器负责管理和分发时钟信号。它接收来自PLL和分频器的时钟信号,并根据配置将这些信号路由到不同的模块和系统。对于CPU时钟,时钟控制器通常负责选择时钟源、设置分频系数以及启动或停止时钟信号。
每个时钟生成器都有一个时钟控制寄存器_CLK_CTRL。在时钟控制寄存器中,SRCSEL字段用于选择时钟源,DIVISOR字段用于设置源时钟的分频系数,以产生所需的时钟频率。一些时钟生成器具有两个级联的分频器。
为了防止时钟生成器超过所连接子系统的最大频率,需要按照以下三个步骤来设置SRCSEL和DIVISOR的值:
1、根据需要增加DIVISOR的值,以确保两个PLL(相位锁环)时钟源不会导致时钟生成器超过子系统的最大时钟频率。
2、将SRCSEL设置为所需的时钟源。
3、更新DIVISOR为所需的分频系数值。
遵循上述步骤,可以确保在编程时钟生成器时不会超出子系统的频率限制,从而保护硬件免受潜在的损坏或不稳定性的影响。

二、6位可编程分频器

6位分频器提供了从1到63的分频范围,支持偶数和奇数的分频值,从而产生接近50%的占空比,并且具有无抖动特性(分频值可以动态修改)。不过,有两个例外情况:DDR_3X分频器只能编程为使用偶数分频值,而当使用PLL(相位锁环)时,ARM_CLK_CTRL[DIVISOR]必须编程为2或更大的值。一些参考时钟具有一个分频器,而另一些则具有两个分频器。

三、DDR时钟

DDR_3x时钟必须始终编程为偶数分频值。
改变分频器的频率不会在时钟上产生抖动,但如果在不修改时序参数的情况下更改频率,DDR控制器不一定会正确运行。因此,建议在重新编程DDR时钟时,首先使DDR控制器处于空闲状态。

四、PLLs(相位锁环)

在Zynq-7000中,三个PLL共享时钟输入信号PS_CLK。每个PLL都可以在软件控制下单独旁路。作为上电复位序列的一部分,所有PLL都可以使用pll_bypass引导模式引脚绑带进行旁路。
PLL的配置和控制寄存器位于SLCR(系统级控制寄存器)中。

1、当PLL旁路模式引脚绑定为高时启用PLL模式
系统在旁路模式下启动后,可以按照以下顺序启用PLL。每个PLL都可以单独启用。此示例说明如何启用Arm PLL:
①、将ARM_PLL_CTRL[PLL_FDIV]的值和PLL配置寄存器ARM_PLL_CFG[LOCK_CNT, PLL_CP, PLL_RES]编程为所需的值。
②、通过向ARM_PLL_CTRL[PLL_BYPASS_FORCE, 4]写入1并将ARM_PLL_CTRL[PLL_BYPASS_QUAL, 3]位设置为0,强制将PLL置于旁路模式。这将取消对Arm PLL的复位。
③、通过向ARM_PLL_CTRL[PLL_RESET, 0]写入1然后写入0,来断言和取消断言PLL复位。
④、通过读取PLL_STATUS[ARM_PLL_LOCK, 3]来验证PLL是否已锁定。
⑤、通过向ARM_PLL_CTRL[4]写入0来禁用PLL旁路模式。
DDR和I/O PLL的编程方式与此类似。

2、软件控制的PLL更新
软件更新PLL时钟频率需要执行以下步骤。本示例以I/O PLL为例。表25-6显示了可能的乘法器值以及每个乘法器值所需的设置。
①、编程IO_PLL_CTRL[PLL_FDIV]的值和PLL配置寄存器IO_PLL_CFG[LOCK_CNT, PLL_CP, PLL_RES]。
②、通过向IO_PLL_CTRL[PLL_BYPASS_FORCE, 4]写入1,强制将PLL置于旁路模式。(当PLL在下一步进入复位时,其输出将是不确定的。)
③、通过向IO_PLL_CTRL[PLL_RESET, 0]写入1然后写入0,来断言和取消断言PLL复位。(这是PLL实际使用第一步中的新值的时候。)
④、通过读取PLL_STATUS[IO_PLL_LOCK, 2]来验证PLL是否已锁定。
⑤、通过向IO_PLL_CTRL[4]写入0来禁用PLL旁路模式。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

在jsp里或servlet里将时间修改为类似“2023年 8月 03日 时间:23:13:49 星期四”形式

jsp 例如&#xff0c;从数据库读到的EL表达式的时间形式为Thu Aug 03 23:13:49 CST 2023 在jsp这边用<script>将获得的EL表达式修改为类似“2023年 8月 03日 时间:23:13:49 星期四”形式展现在网页上 <c:forEach items"${sessionScope.SecurityManagementlist}…

ubuntu18.04安装F4PGA教程

环境搭建教程&#xff1a; f4pga-arch-defs/xilinx/xc7 at main f4pga/f4pga-arch-defs GitHub git clone https://github.com/SymbiFlow/f4pga-arch-defs.git cd f4pga-arch-defs make env cd build 主要是make env&#xff0c;会下载很多东西&#xff0c;然后生成很多描…

前端开发与html学习笔记

一、前端开发概述 前端开发&#xff1a;也叫做web前端开发&#xff0c;它指的是基于web的互联网产品的页面(也可叫界面)开发及功能开发互联网产品&#xff1a;指网站为满足用户需求而创建的用于运营的功能及服务&#xff0c;百度搜索、淘宝、QQ、微博、网易邮箱等都是互联网产…

3.2 iHRM人力资源 - 组织架构 - 编辑及删除

iHRM人力资源 - 组织架构 文章目录 iHRM人力资源 - 组织架构一、编辑功能1.1 表单弹层并数据回显1.2 编辑校验1.3 编辑 二、删除功能 一、编辑功能 编辑功能和新增功能用的组件其实是一个&#xff0c;结构几乎是一样的&#xff0c;其实是复用了组件&#xff0c;我们也省去了很…

(十六)call、apply、bind介绍、区别和实现

函数中的this指向&#xff1a; 函数中的this指向是在函数被调用的时候确定的&#xff0c;也就是执行上下文被创建时确定的。在一个执行上下文中&#xff0c;this由调用者提供&#xff0c;由调用函数的方式来决定。 类数组对象arguments&#xff1a; arguments只在函数&#…

二叉检索树 及 插入方法的图解、实现、时间代价分析

1、二叉检索树&#xff1a; &#xff08;1&#xff09;定义 二叉检索树的任意一个结点&#xff0c;设其值为k&#xff0c;则该节点左子树中任意一个结点的值都小于k&#xff1b;该节点右子树中任意一个节点的值都大于或等于k 这里的比较规则可以是针对数字的&#xff0c;也可…

工程上有哪些实用且简单的滤波方法?

一、工程滤波 在工程实践过程中&#xff0c;以下是一些常用的滤波方法及其优缺点&#xff1a; 限幅滤波 优点&#xff1a;简单易行&#xff0c;能够有效去除突变的大噪声&#xff0c;保护后续电路和传感器不受损伤。 缺点&#xff1a;可能会丢失信号的真实峰值&#xff0c;对真…

有关栈的练习

栈练习1 给定一个栈&#xff08;初始为空&#xff0c;元素类型为整数&#xff0c;且小于等于 109&#xff09;&#xff0c;只有两个操作&#xff1a;入栈和出栈。先给出这些操作&#xff0c;请输出最终栈的栈顶元素。 操作解释&#xff1a; 1 表示将一个数据元素入栈&#xff…

平衡二叉树(后序遍历,力扣110)

解题思路&#xff1a;采取后序遍历的好处是先遍历节点得到高度&#xff0c;然后再判断高度差是否大于一&#xff0c;如果是的话就返回-1&#xff0c;不是就返回两高度中较大的高度加一就是父节点的高度 具体代码如下&#xff1a; class Solution { public: int travel(TreeN…

antDesign Form表单校验(react)

<script><Form name"basic" ref{formRef} onFinish{onFinish}><Form.Itemlabel校验name"check"rules{[// 校验必填{required: true,message: 请输入&#xff01;},// 校验输入字符数限制{validator: (_, value) >value && value…

TCP三次握手,但通俗理解

如何用通俗的语言来解释TCP&#xff08;传输控制协议&#xff09;的三次握手过程&#xff1f; 想象一下你正在和朋友电话沟通&#xff0c;但你们之间不是心灵感应&#xff0c;而是需要通过清晰地听到对方的声音来确认通话质量良好。TCP三次握手就像是在电话拨通之前&#xff0…

OMNeT++与无线通信网络仿真——第二部分INET框架介绍 阅读笔记

13.5 熟悉INET框架 INET框架建立在Omnet基础上&#xff0c;并且使用相同的概念&#xff0c;即模块通过消息传递通信。 主机、路由器、交换机和其他网络设备有OMNeT复合模块表示。这些复合模块由表示协议、应用和其他功能单元的简单模块组成。网络又是一次包含主机、路由器和其…

怎么把网页上的文字变小?

以下是针对常见浏览器的说明&#xff1a; ### Google Chrome&#xff1a; 1. 打开 Chrome 浏览器并导航到您想要调整文字大小的网页。 2. 在页面上右键单击空白处&#xff0c;然后选择 "检查" 或按下 CtrlShiftI&#xff08;在 Windows 或 Linux 上&#xff09;或 Co…

混合现实(MR)开发框架

混合现实&#xff08;MR&#xff09;开发框架为开发者提供了构建MR应用程序所需的基本工具和功能。它们通常包括3D引擎、场景图、输入系统、音频系统、网络功能以及支持同时处理现实世界和虚拟世界信息的功能。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&…

java-springmvc 01

MVC就是和Tomcat有关。 01.MVC启动的第一步&#xff0c;启动Tomcat 02.Tomcat会解析web-inf的web.xml文件

java-spring 图灵 04 doscan方法,重点是scanCandidateComponents方法

01.本次的重点依旧是扫描函数&#xff0c;这次是spring中的源码&#xff1a; 02.第一步&#xff0c;构造AnnotationConfigApplicationContext 主方法&#xff1a; public static void main(String[] args) {// 创建一个Spring容器AnnotationConfigApplicationContext applica…

我们一起看看《看漫画学C++》中如何讲解对象的动态创建与销毁

《看漫画学C》这本书中会用图文的方式生动地解释对象的动态创建与销毁。在C中&#xff0c;动态创建对象是通过new运算符来实现的&#xff0c;而销毁对象则是通过delete运算符来完成的。这种方式可以让程序在需要时分配内存给对象&#xff0c;并在对象不再需要时释放内存&#x…

MambaDFuse:一种基于mamba的多模态图像融合双相位模型

MambaDFuse:一种基于mamba的多模态图像融合双相位模型 摘要IntroductionRelated WorksMethodComparison with SOTA methodsAblation StudyDownstream IVF applications Conclusion 摘要 多模态图像融合&#xff08;MMIF&#xff09;旨在将来自不同模态的互补信息整合到单一的融…

(四)相关性分析 学习简要笔记 #统计学 #CDA学习打卡

目录 一. 相关性分析简介 二. 相关性分析方法 1&#xff09;连续型变量vs连续型变量&#xff1a;Pearson/Spearman &#xff08;a&#xff09;Pearson &#xff08;b&#xff09;Spearman等级相关系数 2&#xff09;二分类变量&#xff08;自然&#xff09;vs连续型变量&…

【C++干货基地】面向对象核心概念 const成员函数 | 初始化列表 | explicit关键字 | 取地址重载

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 引入 哈喽各位铁汁们好啊&#xff0c;我是博主鸽芷咕《C干货基地》是由我的襄阳家乡零食基地有感而发&#xff0c;不知道各位的…