【问题标题】:MIPS 32-bit architecture: how can a register in a register file be read from and written to in the same clock cycle?MIPS 32 位架构:如何在同一时钟周期内读取和写入寄存器文件中的寄存器?
【发布时间】:2012-10-24 17:25:30
【问题描述】:
我的计算机体系结构书籍解释说
"由于对寄存器文件的写入是边沿触发的,我们的设计可以
在一个时钟周期内合法地读写同一个寄存器:
读取将获得在较早的时钟周期写入的值,而
写入的值将可在随后的时钟周期中读取。”
这有点道理,我有点理解寄存器文件的情况。但是,我不明白每个事件何时发生。假设我们正在读取 32 个寄存器文件之一,并在同一个周期中写入它。什么时候读取寄存器?什么时候写?我不完全理解时钟边沿是如何触发事件的,所以解释一下也是有帮助的。谢谢!
【问题讨论】:
标签:
mips
cpu-registers
computer-architecture
【解决方案1】:
读取寄存器的值是异步的,而在您在课堂上工作的体系结构中,寄存器是同步写入的(即写入是边沿触发的)。
这意味着您可以读取寄存器的当前值,对其应用一些操作(例如,添加一些立即数)并在下一个时钟上升沿写入结果。
假设您要发出addiu $1, $1, 123,即取$1 的当前值,加上123 并将结果存储回$1。
在时钟周期开始时,控制单元将指示寄存器文件将 $1 的内容放入进入 ALU 的数据总线之一。控制单元还将指示将立即数 123 放入也进入 ALU 的其他数据总线。加法只是在 ALU 内部实现的组合电路,将计算所述加法并将结果放入连接寄存器文件的数据总线中进行存储。
所有这些都是在时钟上升沿发生之前完成的,并且加法的结果会在下一个上升沿出现。在某个时刻出现上升沿,加法的结果现在被写回到寄存器$1。
【解决方案2】:
寄存器文件是由触发器构建的。每个触发器都有一个存储、一个输入、一个输出和一个触发器。输出始终呈现存储的值,因此可以一直读取。
随着触发器的上升沿,输入值移动到存储中。