首页 > 编程知识 正文

时钟周期与振荡周期的关系,时钟周期和机器周期的关系

时间:2023-05-05 12:18:02 阅读:120589 作者:4396

时钟周期:

时钟周期也称为振荡周期,被定义为时钟脉冲的倒数。 (可以理解,时钟周期是单片机外部晶体振动的倒数,例如12M的晶体振动,其时间周期为1/12 us ) )是计算机中最基本、最小的时间单元。

CPU在一个时钟内只执行一个最基本的动作。 对于某个单片机,在采用1MHZ的时钟频率的情况下,时钟周期为1us; 如果采用4MHZ的时钟频率,时钟周期为250us。 时钟脉冲是计算机的基本工作脉冲,因此控制计算机的工作节奏。 计算机的所有步骤都将统一为该步调。 很明显,在同一机型的计算机中,时钟频率越高,计算机的工作速度就越快。

851单片机将一个时钟周期定义为一个节拍(用p表示),两个节拍定义为一个状态周期(用s表示)。

机器循环:

在计算机上,为了便于管理,通常将一个命令的执行过程分为几个阶段,然后在每个阶段完成一项工作。 例如,取得命令,存储器读取、存储器写入等,这些各工作称为基本操作。 完成基本操作所需的时间称为机器循环。 一般来说,一个机器循环由几个s循环(状态循环)构成。

8051系列单片机的一个机械周期由6个s周期(状态周期)构成。 如上所述,1个时钟周期由1个差拍(用p表示)、2个差拍由1个状态周期(s表示)、8051单片机机器周期由6个状态周期构成,即1个机器周期=6个状态周期=12个时钟

例如外置24M晶体振动的单片机,他的一个机械周期=12/24M秒;

指令周期:

执行一个指令所需的时间通常由几个机器周期组成。 不同的命令需要不同的机器周期。

一些简单的单字节指令在指令提取周期中将指令提取到指令寄存器后立即解码并执行,而不需要其他机器周期。 跳转指令、乘法指令等复杂指令时,需要2个以上的机器周期。

通常,包含一个机器循环的命令称为一个循环命令,包含两个机器循环的命令称为两个循环命令。

公共汽车循环:

由于内存和I/O端口连接到总线,因此通过总线从CPU访问内存和I/O接口。 通常,CPU通过总线访问微处理器外部(存储器或I/O接口)一次所需的时间称为总线周期。

总之,时钟循环是最小单位,且机器循环需要一个或一个以上时钟循环,且指令循环需要一个或一个以上机器循环的机器循环可包括总线读写,且可包括总线循环

指令周期:是CPU的重要指标,是指取出一个指令并执行的时间。 一般来说,以机器周期为单位,分为指令执行周期、2指令执行周期等。 当前处理器的大多数指令(ARM、DSP )都采用单指令执行周期。

机械周期:完成基本操作的时间单位,如取指周期、取数周期等。

时钟周期: CPU晶体振动工作频率的倒数。

例: 22.1184MHZ的晶振、其晶振周期、时钟周期和机器周期分别是多少?

以51为例,晶体振子22.1184M、时钟周期(晶体振动周期)为)1/22.1184 )s、一个机器周期包括12个时钟周期,一个机器周期为0.5425s。 一个机器循环一般是一个指令需要的时间,也有两个机器循环的指令。 DJNZ是两个周期的命令。

------------- -请参阅

根据红皮书的第118页,cpu的操作频率可以达到60MHZ。 这个频率是机械周期还是指令周期? ARM机器周期和指令周期是如何对应的? 由于ARM采用了三级流水线技术,所有指令的执行都在同一个三级进行指挥、解码和执行,所以所有指令的执行时间都相同吗?

我的理解是,如果ARM未连接到pll,即ARM直接采用晶振周期,则ARM的机械周期为晶振周期,这两个周期相等,所有指令的执行时间相同,等于晶振周期; 连接ARM并启用pll后,1/Fcclk将成为机器周期,命令的执行频率与Fcclk相等。 谢谢您告诉我高级的修改。

zlgarm :

没有机器循环的概念。 只有主时钟的概念。 那是OLL的输出。 在程序和数据都在片上RAM中的情况下,这样计算指令执行时间

1、一般指令需要一个主时钟时间

2、每跳增加3个主时钟时间(可能是2个,需要确认) )。

3、从RAM中取一个操作数,增加一个主时钟时间。 以下相同

4、将一个结果保存在RAM中,增加一个主时钟时间。 以下相同

5、访问片内外围设备,增加外围设备时钟时间

请注意,伪指令ldr rn,=x必须从ram中获取操作数。

slump :

从FLASH执行时,启动MAM后,如果指令不在MAM缓冲区中,则需要以MAMTIM周期进行MAM预取。 所以程序跳跃的开销相当大。

------------- -请参阅

851、ARM和DSP命令周期的测试与分析

本文介绍了三种最具代表性的微控制器: AT89S51单片机、7TDMI核的LPC21

14型单片机和TMS320F2812)的指令周期进行了分析和。为了能观察到指令周期,将三种控制器的GPIO口设置为数字输出口,并采用循环不断地置位和清零,通过观察GPIO口的波形变化得到整个循环的周期。为了将整个循环的周期与具体的每一条指令的指令周期对应起来,通过C语言源程序得到汇编语言指令来计算每一条汇编语言的指令周期。

1 AT89S51工作机制及指令周期的

AT89S51单片机的时钟采用内部方式,时钟发生器对振荡脉冲进行2分频。由于时钟周期为振荡周期的两倍(时钟周期=振荡周期P1+振荡周期P2),而1个机器周期含有6个时钟,因此1个机器周期包括12个晶振的振荡周期。取石英晶振的振荡频率为11.059 2 MHz,则单片机的机器周期为12/11.059 2=1.085 1 μs。51系列单片机的指令周期一般含1~4个机器周期,多数指令为单周期指令,有2周期和4周期指令。

为了观察指令周期,对单片机的P1口的最低位进行循环置位操作和清除操作。源程序如下:

#include

main() {

while(1) {

P1=0x01;

P1=0x00;

}

}

采用KEIL uVISION2进行编译、链接,生成可执行文件。当调用该集成环境中的Debug时,可以得到上述源程序混合模式的反汇编代码:

2:main()

3: {

4:while(1)

5:{

6:P1=0x01;

0x000F759001MOVP1(0x90),#0x01

7:P1=0x00;

0x0012 E4CLRA

0x0013 F590MOVP1(0x90),A

8:}

0x001580EDSJMPmain (C:0003)

其中斜体的代码为C源程序,正体的代码为斜体C源程序对应的汇编语言代码。每行汇编代码的第1列为该代码在器中的位置,第2列为机器码,后面是编译、链接后的汇编语言代码。所有指令共占用6个机器周期(其中“MOV P1(0x90),#0x01”占用2个机器周期,“CLR A”和“MOV P1(0x90),A”各占用1个机器周期,最后一个跳转指令占用2个机器周期),则总的循环周期为6×机器周期=6×1.085 1 μs=6.51 μs。

图1 P1口最低位的波形

将编译、链接生成的可执行文件到AT89S51的Flash中执行可以得到P1口最低位的波形,如图1所示。整个循环周期为6.1 μs,与上面的分析完全一致。

2 LPC2114工作机制及指令周期的测试

LPC2114是基于ARM7TDMI核的可加密的单片机,具有零等待128 KB的片内Flash,16 KB的SRAM。时钟频率可达60 MHz(晶振的频率为11.059 2 MHz,时钟频率设置为11.059 2×4 =44.236 8 MHz,片内外设频率为时钟频率的1/4,即晶振的频率)。7TDMI核通过使用三级流水线和大量使用内部寄存器来提高指令流的执行速度,能提供0.9 MIPS/MHz的指令执行速度,即指令周期为1/(0.9×44.236 8)=0.025 12 μs,约为25 ns。

为了观察指令周期,将LPC2114中GPIO的P0.25脚设置为输出口,并对其进行循环的置位操作和清除操作。C源程序如下:

#include"config.h"

//P0.25引脚输出

#defineLEDCON0x02000000

intmain(void)

{//设置所有引脚连接GPIO

PINSEL0 = 0x00000000;

PINSEL1 = 0x00000000;

//设置LED4控制口为输出

IO0DIR = LEDCON;

while(1)

{IO0SET = LEDCON;

IO0CLR = LEDCON;

}

return(0);

}

采用ADS1.2进行编译、链接,生成可执行文件。当调用AXD Debugger时,可以得到上述源程序的反汇编代码:

main[0xe59f1020]ldrr1,0x40000248

40000224[0xe3a00000]movr0,#0

40000228[0xe5810000]strr0,[r1,#0]

4000022c[0xe5810004]strr0,[r1,#4]

40000230[0xe3a00780]movr0,#0x2000000

40000234[0xe1c115c0]bicr1,r1,r0,asr #11

40000238[0xe5810008]strr0,[r1,#8]

4000023c[0xe5810004]strr0,[r1,#4]

40000240[0xe581000c]strr0,[r1,#0xc]

40000244[0xeafffffc]b0x4000023c

40000248[0xe002c000]dcd0xe002c000

每行汇编代码的第1列为该代码在器中的位置,第2列为机器码,后面是编译、链接后的汇编语言代码。循环部分的语句最关键的就是下面3句:

4000023c[0xe5810004]strr0,[r1,#4]

40000240[0xe581000c]strr0,[r1,#0xc]

40000244[0xeafffffc]b0x4000023c

在AXD Debugger中,将其调用到RAM中运行程序得到循环部分GPIO的P0.25的输出波形,如图2所示。 从图中可以看出,循环周期中保持为高电平的时间为1350 ns左右,低电平的时间为450 ns左右,即指令“str r0,[r1,#4]”和指令“str r0,[r1,#0xc]”均需350 ns左右,而跳转指令则需100 ns左右。这主要是由于以下原因造成的: ① ARM的大部分指令是单周期的,但是也有一些指令(如乘法指令)是多周期的;② 基于核的微控制器只有加载、存储和指令可以对存储器的数据进行访问,这样从存储器读数据或向存储器写数据要增加1个时钟周期;③ 访问片内外设要增加一个外设时钟周期。当然,每个指令还要有1个时钟周期,跳转时要清空流水线还要另加一定的时钟周期。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。