我正在使用嵌入式 RISC 处理器。有一件基本的事情我有一个问题。
CPU 手册明确指出指令ld r1, [p1]
(在 C 中:r1 = *p1)需要一个周期。寄存器 r1 的大小为 32 位。然而,内存总线只有 16 位宽。那么它如何在一个周期内获取所有数据呢?
我正在使用嵌入式 RISC 处理器。有一件基本的事情我有一个问题。
CPU 手册明确指出指令ld r1, [p1]
(在 C 中:r1 = *p1)需要一个周期。寄存器 r1 的大小为 32 位。然而,内存总线只有 16 位宽。那么它如何在一个周期内获取所有数据呢?
时钟时间假设全宽零等待状态存储器。内核执行该指令所需的时间是一个时钟周期。
曾经有一段时间,每条指令占用不同数量的时钟周期。那时内存也比较快,通常是零等待状态。在流水线之前有一段时间,您必须烧掉一个时钟周期提取,然后是一个时钟周期解码,然后是一个时钟周期执行,加上可变长度指令的额外时钟周期和如果指令具有内存操作的额外时钟周期。
今天的时钟速度很高,芯片空间相对便宜,因此一个时钟周期的加法或乘法是常态,流水线和缓存也是如此。处理器时钟速度不再是性能的决定因素。内存相对昂贵且速度较慢。因此缓存(配置、数量和大小)、总线大小、内存速度、外围速度决定了系统的整体性能。通常增加处理器时钟速度而不是内存或外围设备将显示最小的性能提升,在某些情况下它可能会使其变慢。
内存大小和等待状态不是参考手册中时钟执行规范的一部分,它们仅讨论内核本身在每个指令的时钟单位中花费的成本。如果它是指令总线和数据总线分开的哈佛架构,那么一个时钟与内存周期是可能的。指令的获取至少发生在前一个时钟周期之前,因此在时钟周期开始时,指令准备就绪、解码和执行(读取内存周期)发生在指令结束时的一个时钟期间一个时钟周期,读取的结果被锁存到寄存器中。如果指令和数据总线是共享的,那么您可以争辩说它仍然在一个时钟周期内完成,但是您无法获取下一条指令,因此那里有一点停顿,
我的理解是:当说某条指令需要一个周期时,并不是说指令会在一个周期内完成。我们应该计算指令管道。假设您的 CPU 有 5 级管道,如果按顺序执行该指令将需要 5 个周期。