Zynq7000系列中PL时钟使用

news2025/1/12 5:59:32

可编程逻辑(PL)具有自己的时钟管理生成和分配功能,并从处理器系统(PS)中的时钟发生器接收四个时钟信号(如图25-10所示)。
在这里插入图片描述
在嵌入式系统中,PL时钟的管理和分配对于确保逻辑电路的正确运行至关重要。PL时钟系统通常包括时钟源的选择、分频、相位调整和缓冲等功能,以满足不同逻辑模块的时序需求。
PL接收来自PS的时钟信号,这些信号可能经过分频或相位调整,以适应PL内部电路的工作频率和时序要求。同时,PL内部的时钟管理单元可以根据需要生成和调整时钟信号,以确保逻辑电路的稳定运行。

一、Clock Throttle(时钟调节)

四个可编程逻辑(PL)时钟中的每一个都包含用于启动和停止时钟的逻辑,以及有助于PL设计调试和协同仿真的逻辑。时钟调节行为由软件和来自PL的触发输入信号控制。时钟调节功能包括:
• 在软件控制下启动/停止时钟
• 为预编程的脉冲数运行时钟
• 运行时钟并使用PL逻辑暂停时钟脉冲
每个时钟调节都有一个16位计数器,用于编程要生成的时钟脉冲数。对于连续的时钟输出,将0写入计数器,这是默认值。当前计数可以由软件读取。计数和时钟脉冲可以由PL逻辑使用来自PL的FCLKCLKTRIGxN输入信号来暂停。软件可以通过写入PL时钟控制寄存器来重新启动时钟。
FCLKCLKTRIGxN:PL时钟触发信号,是来自PL逻辑的一个输入,用于在计数预编程的时钟脉冲数时暂停(暂停)PL时钟。当FCLKCLKTRIGxN信号的上升边沿(从逻辑0变为逻辑1)出现时,进入暂停模式。这个信号可以异步地相对于FCLK和其他所有信号进行assert。当时钟连续运行时(即[LAST_CNT] = 0),这个引脚没有影响。
当PL时钟处于连续运行状态(即没有设置计数限制)时,PL时钟触发信号将不起作用。这确保了在没有明确需求暂停时钟的情况下,PL时钟能够稳定地运行。

二、时钟控制器状态机

时钟控制器状态机如Figure 25-11所示。
在这里插入图片描述

三、时钟调节编程

示例1:停止/启动时钟
本示例展示了使用写入调节计数寄存器中的最后计数字段(slcr.FPGAx_THR_CNT [LAST_CNT])来停止和启动PL时钟(FCLKCLKx)的简单方法。本示例假设slcr.FPGAx_THR_CTRL寄存器保持在其默认状态0x0000_0000。
1.停止时钟
将0x0000_0001写入slcr.FPGAx_THR_CNT以立即停止时钟。
[LAST_CNT] = 1
[保留位] = 0
2.启动时钟
将0x0000_0000写入slcr.FPGAx_THR_CNT以恢复连续时钟。
[LAST_CNT] = 0
[保留位] = 0
通过写入不同的值到slcr.FPGAx_THR_CNT寄存器的LAST_CNT字段,可以控制时钟的启动和停止。当LAST_CNT字段设置为1时,时钟会立即停止;当设置为0时,时钟会恢复连续运行。

示例2:运行PL时钟592个脉冲并停止
在本示例中,PL时钟将运行592个脉冲然后停止。slcr.FPGAx_THR_CTRL寄存器中的[CPU_START]位是上升边沿触发的,用于启动时钟。
1.准备启动时钟位
向控制寄存器slcr.FPGAx_THR_CTRL写入0x0000_0004。
[CPU_START] = 0
[CNT_RST] = 0
[保留位] = 0x001
2.编程计数为592
向计数寄存器slcr.FPGAx_THR_CNT写入0x0000_0250。
[LAST_CNT] = 0x0250
[保留位] = 0
3.assert启动时钟位
向控制寄存器slcr.FPGAx_THR_CTRL写入0x0000_0005。
[CPU_START] = 1
[CNT_RST] = 0
[保留位] = 0x001
通过执行以上步骤,PL时钟将在[CPU_START]位变为1时开始运行,并在达到592个脉冲后自动停止。

示例3:编程592个脉冲并与PL触发输入交互
在本示例中,PL时钟将运行592个脉冲,这些脉冲会被时钟触发信号(FCLKCLKTRIGxN)暂停,并且可以通过软件重新启动。slcr.FPGAx_THR_CTRL寄存器中的[CPU_START]位是上升边沿触发的,用于启动时钟。
1.准备启动时钟位
向控制寄存器slcr.FPGAx_THR_CTRL写入0x0000_0004。
[CPU_START] = 0
[CNT_RST] = 0
[保留位] = 0x001
2.编程计数为592
向计数寄存器slcr.FPGAx_THR_CNT写入0x0000_0250。
[LAST_CNT] = 0x0250
[保留位] = 0
3.assert启动时钟位
向控制寄存器slcr.FPGAx_THR_CTRL写入0x0000_0005。
[CPU_START] = 1
[CNT_RST] = 0
[保留位] = 0x001
4.PL逻辑暂停时钟(暂停状态)
逻辑assert FCLKCLKTRIGxN输入以停止时钟。
5.重新准备启动时钟位
向控制寄存器slcr.FPGAx_THR_CTRL写入0x0000_0004。
[CPU_START] = 0
[CNT_RST] = 0
[保留位] = 0x001
6.再次assert启动时钟位
向控制寄存器slcr.FPGAx_THR_CTRL写入0x0000_0005。
[CPU_START] = 1
[CNT_RST] = 0
[保留位] = 0x001
通过这一系列步骤,不仅可以编程PL时钟运行特定的脉冲数,还可以通过PL逻辑与外部信号交互来动态地控制时钟的运行状态。当PL逻辑检测到FCLKCLKTRIGxN信号时,它会暂停时钟的运行。之后,可以通过软件再次触发启动时钟位来恢复时钟的运行。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

协程的意义(二)

1.协程的意义 在一个线程中,如果遇到IO等待,线程不会一直在等待,而是利用空余时间去完成别的任务(充分利用线程)。 示例:下载图片 ①普通的方式下载图片(同步方式) ②使用协程的方…

发泡机液压站比例阀放大器

发泡机液压站是提供动力和压力以驱动发泡机工作的系统。 发泡机是一种用于制备聚氨酯发泡材料的设备,而液压站则扮演着为发泡机提供必要动力的角色。具体来看,液压站的主要组成包括: 液压油箱:存储液压油,为系统提供液…

【Applied Algebra】隐藏子群问题和Shor算法的新视角

隐藏子群问题和Shor算法的新视角 隐藏子群问题是指给定一个群和一个函数,该函数对于群的一个子群是常数,并且对于子群的任何两个不同的左陪集有不同的值,问题是找到这个子群.HSP是许多量子算法的基础,其中最著名的是Shor的算法,它可以用来分解大整数和计算离散对数,这直接威胁到…

小目标检测——鸟类数据集

引言 亲爱的读者们,您是否在寻找某个特定的数据集,用于研究或项目实践?欢迎您在评论区留言,或者通过公众号私信告诉我,您想要的数据集的类型主题。小编会竭尽全力为您寻找,并在找到后第一时间与您分享。 …

nvidia-smi CUDA Version:N/A

问题 nvidia-smi显示:CUDA Version:N/A nvidia-smi -a显示:CUDA Version: Not Found 解决方法 查看Nvidia驱动版本 nvidia-smi如下图,版本为530.41.03 搜索cuda库 apt search libcuda注:不同的源,同一个库的命…

轻量级SQLite可视化工具Sqliteviz

什么是 Sqliteviz ? Sqliteviz 是一个单页面离线优先的渐进式网络应用(PWA),用于完全客户端的 SQLite 数据库或 CSV 文件的可视化。 所谓完全客户端,就是您的数据库永远不会离开您的计算机。使用 sqliteviz&#xff0c…

PyQt程序:实现新版本的自动更新检测及下载(FTP服务器实现)

一、实现逻辑 本实例采用相对简单的逻辑实现,用户在客户端使用软件时点击“检测升级”按钮,连接至FTP服务器检索是否有新版本的.exe,如果有,下载最新的.exe安装升级。 本实例服务端待下载.exe所在目录结构 本实例客户端待更新.exe所在目录结构 二、搭建服务器 可以参考…

IMUGNSS的误差状态卡尔曼滤波器(ESKF)的数学模型

IMU&GNSS的误差状态卡尔曼滤波器(ESKF)的数学模型 把IMU视为运动模型,把GNSS观测视为观测模型,推导整个滤波器 设状态变量为 x [ p , v , R , b g , b a , g ] T x[p,v,R,b_{g},b_{a},g]^{T} x[p,v,R,bg​,ba​,g]T 所有变…

泛型的初步认识(2)

前言~🥳🎉🎉🎉 hellohello~,大家好💕💕,这里是E绵绵呀✋✋ ,如果觉得这篇文章还不错的话还请点赞❤️❤️收藏💞 💞 关注💥&#x…

【深度学习实战(11)】搭建自己的dataset和dataloader

一、dataset和dataloader要点说明 在我们搭建自己的网络时,往往需要定义自己的dataset和dataloader,将图像和标签数据送入模型。 (1)在我们定义dataset时,需要继承torch.utils.data.dataset,再重写三个方法…

LeetCode in Python 55. Jump Game (跳跃游戏)

跳跃游戏的游戏规则比较简单,若单纯枚举所有的跳法以判断是否能到达最后一个下标需要的时间复杂度为O(),为此,本文采用贪心策略,从最后一个下标开始逆着向前走,若能跳到第一个元素则表明可以完成跳跃游戏,反…

Python基础学习之数据切片

数据切片介绍: 切片的基本语法是data[start:stop:step],其中: start 是切片开始的索引(包括该索引处的元素)。 stop 是切片结束的索引(不包括该索引处的元素)。 step 是切片的步长&#xff0…

Go小技巧易错点100例(十五)

本期看点: 正文开始: Go程序跟踪函数的执行时间 在Go程序中我们经常会对接口执行的耗时做一个记录,特别是针对核心或复杂业务的时候,我们需要关注该业务的执行耗时,可以具体到某个方法,有一个简单有效的技…

Linux:常用软件、工具和周边知识介绍

上次也是结束了权限相关的知识:Linux:权限相关知识详解 文章目录 1.yum-管理软件包的工具1.1基本介绍1.2yum的使用1.3yum的周边生态1.4软件包介绍 2.vim-多模式的文本编辑器2.1基本介绍2.2基本模式介绍2.2.1命令模式(Normal mode)…

Python数据可视化库—Bokeh与Altair指南

👽发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 在数据科学和数据分析领域,数据可视化是一种强大的工具,可以帮助我们…

循序渐进丨使用 Python 向 MogDB 数据库批量操作数据的方法

当我们有时候需要向数据库里批量插入数据,或者批量导出数据时,除了使用传统的gsql copy命令,也可以通过Python的驱动psycopg2进行批量操作。本文介绍了使用psycopg2里的executemany、copy_from、copy_to、copy_expert等方式来批量操作 MogDB …

Darknet框架优化介绍

一、DarkNet框架简介 1.DarkNet的简介 Darknet是一个完全使用C语言编写的人工智能框架,可以使用CUDA的开源框架。主要应用于图像识别领域。 它具有可移植性好,安装间接,查看源码方便等优势,提供了OpenCV等附加选项,还…

【SpringBoot实战篇】获取用户详细信息-ThreadLocal优化

1 分析问题 对token的解析当初在拦截器中已经写过。期待的是在拦截器里写了,在其他地方就不写了,应该去复用拦截器里面得到的结果 2 解决方式-ThreadLocal 2.1提供线程局部变量 用来存取数据: set()/get()使用ThreadLocal存储的数据, 线程安全 2.2过程图…

Java如何用EasyExcel插件对Excel进行数据导入和数据导出

文章目录 一、EasyExcel的示例导入依赖创建实体类数据导入和导出 二、EasyExcel的作用三、EasyExcel的注解 EasyExcel是一个阿里巴巴开源的excel处理框架,它以使用简单、节省内存著称。在解析Excel时,EasyExcel没有将文件数据一次性全部加载到内存中&…

java-springmvc 01

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