ARM如何利用PMU的Cycle Counter(时钟周期)来计算出CPU的时钟频率

这篇具有很好参考价值的文章主要介绍了ARM如何利用PMU的Cycle Counter(时钟周期)来计算出CPU的时钟频率。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本章将学习如何利用ARM PMU的Cycle Counter,来计算出CPU的时钟周期,从而计算出CPU的时钟频率。在介绍计算方法前,有必要先介绍下什么是时钟周期、机器周期以及指令周期。

一,时钟周期,机器周期以及指令周期

1.1 时钟周期(clock cycle)以及时钟频率(clock frequency)

同学们是否还记得数电里学过的同步时序逻辑电路:电路里的所有触发器都是同一个时钟脉冲源,触发器的状态会与该时钟脉冲信号同步,即一个时钟脉冲到来,所有触发器的状态就改变一次。CPU与之类似,需要给CPU灌入一个连续的时钟脉冲信号,每一次脉冲到来,CPU内的晶体管就改变一次状态,而源源不断的时钟脉冲正是CPU能够执行计算任务的关键。

ARM如何利用PMU的Cycle Counter(时钟周期)来计算出CPU的时钟频率,ARM,SoC Debug,arm开发,ARMv8,时钟周期,时钟频率,PMU,指令周期,机器周期
如上图所示,脉冲信号做出周期变化的最短时间称之为震荡周期,也称为 CPU 时钟周期。它是计算机中最基本的、最小的时间单位。周期的倒数就是频率,所以我们很容易得出时钟频率和时钟周期的关系:
时钟频率 = 1 时钟周期 时钟频率=\frac{1}{时钟周期} 时钟频率=时钟周期1
一秒(1 s)内,发出的震荡脉冲个数为时钟频率
。我们经常讲某个CPU的主频是多少GHz、多少MHz,并认为CPU的频率越高,其运算性能越强。从时钟频率的原理分析可知:时钟频率越高,一秒内发出的脉冲个数越多,CPU内的晶体管状态变化次数越多,即CPU的运算速度越快。
事实上,每个CPU,或者每个芯片都有自己的正常工作频率范围(在最小工作频率和最大工作频率之间)。时钟频率越高,晶体管状态变化越频繁,当晶体管未及时更新状态,而下一个脉冲信号就已经到来时,CPU有可能进入未知的状态,不能正常工作。

1.2 机器周期(Machine Cycle)/ CPU周期(CPU Cycle)

机器周期也称为CPU周期。
在计算机中,为了便于管理,常把一条指令的执行过程划分为若干个阶段,每一阶段完成一项工作。
例如,取指令、存储器读、存储器写等,这每一项工作称为一个基本操作(注意:每一个基本操作都是由若干CPU最基本的动作组成)。完成一个基本操作所需要的时间称为机器周期。通常用内存中读取一个指令字的最短时间来规定CPU周期。(原文)
机器周期是为了实现指令流水线而引入的概念,实际上对应的是指令流水线的各个阶段,称之为流水阶段(或功能段,流水级等)。
从下图可知,一个机器周期包含了若干个时钟周期:
ARM如何利用PMU的Cycle Counter(时钟周期)来计算出CPU的时钟频率,ARM,SoC Debug,arm开发,ARMv8,时钟周期,时钟频率,PMU,指令周期,机器周期

1.3 指令周期(Instruction Cycle)

CPU从存储器中取出并执行一条指令所需的全部时间称之为指令周期。一个指令周期通常用需要几个CPU周期来表示:
ARM如何利用PMU的Cycle Counter(时钟周期)来计算出CPU的时钟频率,ARM,SoC Debug,arm开发,ARMv8,时钟周期,时钟频率,PMU,指令周期,机器周期
指令不同,所需的机器周期数也不同。对于一些简单的的单字节指令,在取指令周期中,指令取出到指令寄存器后,立即译码执行,不再需要其它的机器周期。对于一些比较复杂的指令,例如转移指令、乘法指令,则需要两个或者两个以上的机器周期。
ARM如何利用PMU的Cycle Counter(时钟周期)来计算出CPU的时钟频率,ARM,SoC Debug,arm开发,ARMv8,时钟周期,时钟频率,PMU,指令周期,机器周期

1.4 指令周期、机器周期以及时钟周期之间的关系

简单概括就是:一个指令周期,包含多个 CPU 周期,而一个 CPU 周期包含多个时钟周期。

二,PMU 的Cycle Counter

PMU模块里有一个64-bit 位宽的计数器cycle counter,这个cycle counter的计数频率为CPU的时钟频率。可以通过读取寄存器 PMCCNTR_EL0 或者 PMCCNTR来获取当前cycle counter里的clock cycle。

ARM如何利用PMU的Cycle Counter(时钟周期)来计算出CPU的时钟频率,ARM,SoC Debug,arm开发,ARMv8,时钟周期,时钟频率,PMU,指令周期,机器周期

2.1 PMCCNTR_EL0, Performance Monitors Cycle Count Register

寄存器PMCCNTR_EL0保存着CPU的cycle counter的值,记录着CPU时钟周期数( clock cycles)。AArch64系统寄存器PMCCNTR_EL0[63:0]映射到AArch32的PMCCNTR[63:0]。
需要注意的是:

  1. 尽管arm体系结构要求PMCCNTR_EL0 或PMCCNTR的直接读取按程序顺序进行,但并不要求在两次这样的读取之间计数增加。即使cycle counter在每个时钟周期中都在增加,软件也可能需要检查两次读取计数器之间的差是否为非零。
  2. WFI 和WFE指令或造成CPU 时钟停止,进入standby模式。此时所有计数器的时钟频率也会发生变化。这意味着当时钟被WFI和WFE指令停止时,PMCCNTR_EL0是否会继续计数是受约束的,不可预测的。

使用如下指令即可读取CPU时钟周期数( clock cycles)到指定寄存器:

;AArch64:
MRS <Xt>, PMCCNTR_EL0
;AArch32:
MRC{<c>}{<q>} <coproc>, {#}<opc1>, <Rt>, <CRn>, <CRm>{, {#}<opc2>}

三,如何计算出CPU的时钟频率

我们有了上文的基础知识作为铺垫,就可以来计算CPU的时钟频率了。基本原理如下:

  1. 在固定时间T内记录下CPU经过的时钟周期数C。
  2. CPU的时钟频率F可得:
    时钟频率 F = 时钟周期数 C 固定时间 T 时钟频率F=\frac{时钟周期数C}{固定时间T} 时钟频率F=固定时间T时钟周期数C

所以我们的程序伪代码可以这样写:

cycle1 = Read_PMCCNTR();
wait(10);//wait 10s
cycle2 = Read_PMCCNTR();
freq = (cycle2-cycle1)/10;

至于延时函数wait(),可以使用ARM CPU内部的generic timer或者 system counter来实现延时。

四,参考文档

https://wenwen.sogou.com/question/q660822487.htm
https://blog.csdn.net/weixin_37641832/article/details/88920468
https://zhuanlan.zhihu.com/p/461519409文章来源地址https://www.toymoban.com/news/detail-712404.html

到了这里,关于ARM如何利用PMU的Cycle Counter(时钟周期)来计算出CPU的时钟频率的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Verilog实现任意时钟周期延时的方法

    这个方法是最简单的实现延时的方法,缺点是如果延时的周期比较长的话,要写的东西也会变得很多 通过这种方式可以把信号延时 n 个周期。 这个方法也比较简单,实现起来也很容易,缺点是消耗的资源比较大 该方法较为节省资源,能实现任意周期的延时 文章介绍了三种实

    2024年02月11日
    浏览(38)
  • STM32pwm 时钟 配置 周期 频率 关系配置原理

    PWM(脉冲宽度调制)是一种常用的电子信号调制技术,用于控制电子设备中的电平和电流。它通过调整脉冲的宽度来控制信号的平均功率。 在PWM信号中,一个周期由一个固定的频率确定,称为PWM频率。每个周期内,脉冲的高电平时间称为占空比,表示高电平时间与周期时间的

    2024年02月09日
    浏览(29)
  • 【博客671】prometheus如何选择数据点以及处理counter跳变

    时间是怎么进来的?范围和即时查询! 您可能已经注意到,PromQL 查询中对时间的唯一引用是相对引用(例如[5m],回顾 5 分钟)。那么如何指定绝对图形时间范围或在表中显示查询结果的时间戳呢?在 PromQL 中,此类时间参数与表达式分开发送到Prometheus 查询 API,确切的时间

    2024年02月11日
    浏览(40)
  • 【计组期末复习】机器周期和时钟周期、控制单元的功能:取指周期的微操作命令、取数指令的微操作、存数周期的微操作

    1.机器周期 机器周期可看做是所有指令执行过程中的一个基准时间, 机器周期取决于指令的功能及器件的速度 。确定机器周期时,通常要分析机器指令的执行步骤及每-一步骤所需的时间。例如,取数、存数指令能反映存储器的速度及其与CPU的配合情况;加法指令能反映ALU的

    2024年02月11日
    浏览(23)
  • STM32使用内部时钟配置RTC,设置并读取时间、闹钟和周期唤醒

    说明:由于开发板上没有32.768kHz的时钟,所以选择内部32kHz的时钟。 由于我们选择内部时钟,所以设置为79和399,80x400=32000,实现输入32KHz时钟分频到1Hz。 DataFormat选项分别为BIN(时间为10进制)BCD(时间为16进制) Hours为初始时间的小时 Minutes为初始时间的分钟 Seconds为初始时间的秒

    2024年04月17日
    浏览(46)
  • 嵌入式学习---ARM时钟体系

    按 一定电压幅度 , 一定时间间隔 连续发出的脉冲信号。它是一个周期性的信号,每个周期内包含一个上升沿和一个下降沿。时钟脉冲的上升沿和下降沿通常用于触发和同步各个电子元件的操作,例如CPU的指令执行、数据传输、寄存器更新等。 时钟频率是指时钟脉冲的频率

    2024年01月16日
    浏览(46)
  • 利用AHB-Lite总线实现ARM Cortex-M0基础的SoC系统;如何设计一个SoC系统;AHB-Lite;ARM Cortex-M0;SoC;

      本文讨论了SoC系统的架构设计,包括处理器核心、内存以及其他外设的互连,并详细描述了如何通过AHB-Lite总线实现高效的数据传输。AHB-Lite总线是一种简化版本的AHB总线。同时,阐述了利用寄存器映射以及其他硬件资源与软件接口的设计方法,以满足SoC系统的功能需求。

    2024年02月06日
    浏览(46)
  • 数据集成与云计算:如何利用云计算提高数据整合效率

    数据集成是指将来自不同来源的数据进行整合、清洗、转换、加工等操作,以实现数据的一致性、一直性和完整性,从而为数据分析、报表和决策提供支持。随着数据量的增加,数据集成的复杂性和挑战也不断增加。传统的数据集成方法和技术已经不能满足现实中复杂、大规

    2024年02月21日
    浏览(31)
  • (仅对于(旧板)12分频的51单片机而言)机器周期,时钟周期,晶振振荡频率(fosc)的关系; (51、stm32通用)分频的原理和作用

    1,晶振振荡频率(fosc) fosc即板子所使用的晶振频率,如常用的11.0592Mhz。 2,时钟周期 时钟周期 = 1 / fosc ,单位为us。 3,机器周期 机器周期 = 12 / fosc ,单位为us。 为啥是12? 因为绝大多数51单片机默认12分频,分频原理直接看第四点。 12分频的原因:老版51单片机使用复杂

    2024年02月13日
    浏览(36)
  • 数据架构与云计算:如何利用云计算资源进行数据处理

    随着数据的爆炸增长,数据处理和分析成为了企业和组织中的关键技能。云计算是一种新兴的技术,它可以让我们在分布式环境中进行数据处理和分析。在这篇文章中,我们将探讨如何利用云计算资源进行数据处理,以及相关的核心概念、算法原理、具体操作步骤和数学模型

    2024年04月14日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包