我正在使用嵌入式RISC处理器。我有一个基本的问题要弄清楚。
CPU手册明确指出,指令ld r1, [p1]
(在C中:r1 = * p1)需要一个周期。寄存器r1的大小为32位。但是,内存总线只有16位宽。那么如何在一个周期内获取所有数据呢?
最佳答案
时钟时间假定为全宽零等待状态存储器。内核执行该指令所花费的时间是一个时钟周期。
有时每条指令占用不同数量的时钟周期。然后内存也相对较快,通常为零等待状态。在流水线之前还有一段时间,您必须刻录时钟周期,然后进行时钟周期解码,然后执行时钟周期,加上可变长度指令的额外时钟周期和如果指令具有存储器操作的额外时钟周期。
如今,时钟速度很高,芯片空间相对便宜,因此流水线和高速缓存的标准是一个时钟周期加或乘。处理器时钟速度不再是性能的决定因素。内存相对昂贵且缓慢。因此,缓存(配置,数量和大小),总线大小,内存速度,外设速度决定了系统的整体性能。通常,提高处理器时钟速度(而不提高内存或外围设备)将显示出很少的性能增益,在某些情况下,它可能会使速度变慢。
内存大小和等待状态不是参考手册中时钟执行规范的一部分,它们只是在讨论内核本身以每条指令的时钟为单位要花费多少。如果是哈佛架构,其中指令和数据总线是分开的,则在存储周期中可能只有一个时钟。指令的获取至少发生在先前的时钟周期之前(如果不是在此之前),因此在时钟周期的开始,指令就绪,解码并执行(读取存储周期)发生在指令周期末的一个时钟周期内。一个时钟周期,读取结果被锁存到寄存器中。如果指令和数据总线是共享的,那么您可能会争辩说它仍然在一个时钟周期内完成,但是您无法获取下一条指令,因此那里存在一些停顿,它们可能会作弊并调用那个时钟周期。
关于memory - 即使RAM慢,一个周期的指令也要占用一个周期吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1546756/