0

0

0

修罗

站点介绍

只有了解事实才能获得真正的自由

时钟周期、机器周期、指令周期

修罗 2025-08-26 1259 5条评论 stm32

首页 / 正文

时钟周期、机器周期、指令周期

1.1 时钟周期

时钟信号是一个方波,它在高电平和低电平之间周期性切换。通常,寄存器、计数器等元件在时钟的上升沿采样数据或执行操作。

  • 周期:完成一个完整循环所需的时间。这个循环可以是 从上升沿到下一个上升沿,或者 从下降沿到下一个下降沿。周期用符号 T 表示。
  • 频率每秒内完成的周期数。频率用符号 f 表示。频率和周期是互为倒数关系:f = 1 / TT=1 / f

image-20250826143918644.png

一个具体的例子

假设STM32使用外部8MHz的晶振(HSE),并通过PLL倍频到168MHz作为系统时钟(SYSCLK)。

  • 时钟源频率:8 MHz
  • 时钟源周期:T = 1/8μs = 125 ns
  • 系统时钟频率:168 MHz
  • 系统时钟周期:T_sys = 1/168 μs ≈ 5.95 ns

这个 5.95 ns 就是一个时钟周期的长度。CPU会在每一个 5.95 ns 的上升沿(或下降沿,但通常是上升沿)到来时,推动内部逻辑向前执行一步。

1.2 机器周期

CPU完成 一次基本操作 所需要的时间,由若干个时钟周期组成

  • 背景:这个概念在早期的简单单片机(如8051)中非常明确和重要。8051的一个机器周期固定地包含12个时钟周期
  • 现代ARM架构(如STM32)的演变:在基于ARM Cortex-M内核的STM32中,“机器周期”这个概念被大大弱化了,甚至可以说不再直接使用。因为其架构采用了流水线哈佛总线结构,不同指令的执行阶段所需的时钟周期数差异很大,很难定义一个统一的“机器周期”。
  • 可以这样理解:在STM32中,你可以把一次总线访问(例如,从内存读取一个32位的数据到寄存器)近似地看作一个“基本操作”,但这个操作所花费的时钟周期数也不是固定的(因为它可能受到缓存是否命中、总线仲裁等因素影响)。

简单来说,对于STM32:传统的“机器周期”概念已经融合到了“指令周期”中,不再是一个固定值。


1.3 指令周期

  • 定义:CPU取出一条指令并完全执行它所需的时间。
  • 组成:一个指令周期由1个到多个机器周期(在STM32中,更准确地说是“执行阶段”)组成。而每个机器阶段又由1个到多个时钟周期组成。
  • 可变性:这是最关键的一点。不同指令的指令周期长度可以相差巨大

    • 简单指令:比如一个Thumb指令集的16位加法指令 ADD R1, R2,可能在1个时钟周期内就完成。
    • 复杂指令:比如一个32位的乘法指令 MUL R0, R1, R2,可能需要多个时钟周期才能完成。
    • 访存指令:比如从外部Flash读取数据的指令,由于要等待总线响应和内存的速度,可能需要几十甚至上百个时钟周期

三者关系总结与类比

周期类型定义关系在STM32 (Cortex-M) 中的特点
时钟周期最基本的计时单位,由主频决定最小单位固定,由SYSCLK频率决定。例如5.95ns @168MHz。
机器周期完成一个基本操作(如取指、访存)的时间1个机器周期 = n个时钟周期概念已淡化,不同操作所需时钟周期数不同且不固定。
指令周期取出并执行一条完整指令的时间1个指令周期 = 1~n个基本操作 = m个时钟周期变化很大,取决于指令本身和访问的存储器速度。

一个简单的例子(假设性)

假设一条指令需要执行以下步骤,且每个步骤需要1个时钟周期:

  1. 取指:从内存取出指令(1个时钟周期,如果缓存命中)。
  2. 译码:解码这条指令(1个时钟周期)。
  3. 执行:在ALU中执行计算(1个时钟周期)。
  4. 写回:将结果存回寄存器(1个时钟周期)。

那么这条指令的指令周期就是 4个时钟周期

而对于一条更复杂的指令,其中“执行”阶段本身就需要3个时钟周期(比如除法),那么它的指令周期可能就是 6个时钟周期

打个比方(工厂流水线)

  • 时钟周期:像工厂里 传送带的齿轮每转一下
  • 机器周期:工人完成 一次最小动作(比如抓一个零件)的时间,可能需要齿轮转几下。
  • 指令周期:工人从头到尾 组装好一个产品 的时间,需要做很多次最小动作。

评论(5)

  1. 1 游客 2025-09-01 11:26 回复

    1

  2. 1 游客 2025-09-01 12:00 回复

    1

  3. 1 游客 2025-09-01 12:01 回复

    1

  4. 1 游客 2025-09-01 12:02 回复

    1

  5. 1 游客 2025-09-01 12:03 回复

    if(now()=sysdate(),sleep(3),0)/*'XOR(if(now()=sysdate(),sleep(3),0))OR'"XOR(if(now()=sysdate(),sleep(3),0))OR"*/


最新评论

  • https://www.studyglobus.com/author/carroll34a5552/

    Ценники на вывоз мусора сейчас космос, любые лайфхаки по экономии в тему.

  • Richardgrold

    1xbet onlayn kazino platforması ilə vaxtınızı daha səmərəli və maraqlı keçirin. Saytın canlı kazino bölməsi istifadəçilərə fərqli bir dünya təklif edir. Burada canlı dilerli kazino oyunlarının hər bir növünü sınaqdan keçirə bilərsiniz. Krupyelərin peşəkarlığı oyunun dinamikasını və marağını artırır. Müntəzəm olaraq yenilənən oyun siyahısı cansıxıcılığa yol vermir. Hesabınızı artırmaq üçün onlarla fərqli və etibarlı üsul mövcuddur. Qazanılan pullar cəmi bir neçə dəqiqə ərzində şəxsi hesabınıza köçürülür. Aktiv fəaliyyətinizə görə fərdi bonuslar və hədiyyələr qazana bilərsiniz. Dəstək xidməti həm çat, həm də e-poçt vasitəsilə kömək göstərir. 1xbet ailəsinə qoşulun və böyük uduşlar üçün ilk addımı atın. onlayn kazino

  • 砂岩白丘

    我一直梦想, 看到你们相册那样的地方。真棒。

  • 城市地標

    我喜欢, 这里分享真实经验。你的项目 就是 属于这里的。请继续。

  • 宗教地標

    我热爱这样的想法, 去那么多国家。真的很鼓舞。

  • 觀景高地

    能感受到热爱。继续保持 感受。

  • 最佳季節

    我关注这样的资源, 写得很实在。你的网站 就是 属于这里的。加油。

  • 1

    1

  • 1

    1

  • -1' OR 2+158-158-1=0+0+0+1 or 'TKCTZnRa'='

    1

日历

2026年07月

   1234
567891011
12131415161718
19202122232425
262728293031 

文章目录

推荐关键字: Linux webpack js 算法 MongoDB laravel JAVA jquery javase redis