imk*_*dal 4 embedded microcontroller clock microprocessors
我正在努力完全理解时钟周期是什么,所以我想出了一个测试示例,我希望有人确认或驱散并提供更好的理解.如果我有一个简单的代码行,一个while循环,在设备上运行
while(true)
{
int x = 5;
}
Run Code Online (Sandbox Code Playgroud)
命令:int x = 5是否每个时钟周期执行一次?换句话说,时钟速度是指设备能够在每单位时间内读取和执行命令的速度吗?
时钟周期只是振荡器的一个周期,驱动处理器的逻辑,处理器在该周期中可能实现的功能取决于处理器架构和其他因素,如内存速度.
您的示例中的代码采用高级语言,如果直接翻译,几乎可以肯定会转换为多个机器级指令.在伪机器代码中,例如:
loop:
MOV addrx,#5
JMP loop
Run Code Online (Sandbox Code Playgroud)
这将是每个循环至少两个机器周期.高级代码与生成的机器指令之间几乎没有或没有确定性关系; 虽然在这个简单的情况下,它似乎是这样.
处理器如何实现指令集使问题进一步复杂化.典型的RISC处理器在单个周期中执行指令,而在CISC处理器上,不同的单独指令各自根据其复杂性采用不同的周期数.
另一个考虑是内存总线延迟.通常,处理器能够以比能够访问存储器更快的速度执行指令,这对于闪存尤其如此.访问较慢存储器的指令可能引入等待状态,其中处理器停止直到数据到达.
某些处理器能够并行执行指令,允许在一个周期内执行多条指令.其他人使用SIMD(单指令多数据)指令,它们可以同时对不同的数据执行相同的操作.
另一种影响指令吞吐量的技术是管道,其中一条指令可能需要多个周期,但是每个周期都可以启动一条新指令,所以说如果每个周期一个接一个地启动5个四周指令,结果就会产生一次每个周期.
一些处理器采用哈佛架构,该架构使用单独的总线来同时获取数据和指令.
采用其他技术来维持指令吞吐量,例如分支预测.高级语言编译器通常会生成代码,以最大限度地发挥上述所有技术的潜力.
通常,为特定架构提供的性能测量是MIPS/MHz - 表示通常每个时钟周期执行的指令数(在许多时钟周期内分摊).例如,ARM Cortex-M3管理1.25 MIPS/MHz,而瑞萨SH-4则达到1.8 MIPS/MHz.
我该从哪里开始...
任何处理器都有一个"时钟",确保电子元件有时间在下一件事发生之前从一种状态转换到另一种状态.在现代设备的速度下,没有任何东西是"瞬时的" - "阶梯"变成"斜率",甚至非常短的痕迹也会导致电子信号传输的延迟.
根据CPU的体系结构,它可以"在一个时钟周期内"执行某些操作,而其他操作则需要"多个周期".想想长除法 - 你做了一系列减法 - 移位操作,在完成上一部分操作之前,你不知道接下来需要做什么.此外,更容易看到如何在一个周期内实现完整的操作.
当特定的"高级"指令被转换为机器代码时,生成的代码可能需要一个或多个周期 - 而简单的指令可以采取一个或多个步骤.根据编译器,目标和所选的优化,您可能会在上面的代码中发生以下任何情况:
编译器意识到"while"条件总是为真,并且循环内没有任何变化.它进一步意识到你从不使用x的值,它选择不执行指令
编译器决定为int变量使用内置寄存器x,并在编译时初始化它.在执行循环期间没有时间
编译器将'5'加载到寄存器中,在表中查找x的偏移量,计算指针,并将寄存器复制到偏移地址中.可以是任意数量的周期.
不确定这对你有什么帮助 - 但问题相当复杂......